{"version":3,"sources":["../node_modules/undici/lib/core/symbols.js","../node_modules/undici/lib/util/timers.js","../node_modules/undici/lib/core/errors.js","../node_modules/undici/lib/core/constants.js","../node_modules/undici/lib/core/tree.js","../node_modules/undici/lib/core/util.js","../node_modules/undici/lib/util/stats.js","../node_modules/undici/lib/core/diagnostics.js","../node_modules/undici/lib/core/request.js","../node_modules/undici/lib/handler/wrap-handler.js","../node_modules/undici/lib/dispatcher/dispatcher.js","../node_modules/undici/lib/handler/unwrap-handler.js","../node_modules/undici/lib/dispatcher/dispatcher-base.js","../node_modules/undici/lib/core/connect.js","../node_modules/undici/lib/llhttp/utils.js","../node_modules/undici/lib/llhttp/constants.js","../node_modules/undici/lib/llhttp/llhttp-wasm.js","../node_modules/undici/lib/llhttp/llhttp_simd-wasm.js","../node_modules/undici/lib/web/fetch/constants.js","../node_modules/undici/lib/web/fetch/global.js","../node_modules/undici/lib/web/fetch/data-url.js","../node_modules/undici/lib/web/webidl/index.js","../node_modules/undici/lib/web/fetch/util.js","../node_modules/undici/lib/web/fetch/formdata.js","../node_modules/undici/lib/web/fetch/formdata-parser.js","../node_modules/undici/lib/util/promise.js","../node_modules/undici/lib/web/fetch/body.js","../node_modules/undici/lib/dispatcher/client-h1.js","../node_modules/undici/lib/dispatcher/client-h2.js","../node_modules/undici/lib/dispatcher/client.js","../node_modules/undici/lib/dispatcher/fixed-queue.js","../node_modules/undici/lib/dispatcher/pool-base.js","../node_modules/undici/lib/dispatcher/pool.js","../node_modules/undici/lib/dispatcher/balanced-pool.js","../node_modules/undici/lib/dispatcher/agent.js","../node_modules/undici/lib/dispatcher/proxy-agent.js","../node_modules/undici/lib/dispatcher/env-http-proxy-agent.js","../node_modules/undici/lib/handler/retry-handler.js","../node_modules/undici/lib/dispatcher/retry-agent.js","../node_modules/undici/lib/dispatcher/h2c-client.js","../node_modules/undici/lib/api/readable.js","../node_modules/undici/lib/api/api-request.js","../node_modules/undici/lib/api/abort-signal.js","../node_modules/undici/lib/api/api-stream.js","../node_modules/undici/lib/api/api-pipeline.js","../node_modules/undici/lib/api/api-upgrade.js","../node_modules/undici/lib/api/api-connect.js","../node_modules/undici/lib/api/index.js","../node_modules/undici/lib/mock/mock-errors.js","../node_modules/undici/lib/mock/mock-symbols.js","../node_modules/undici/lib/mock/mock-utils.js","../node_modules/undici/lib/mock/mock-interceptor.js","../node_modules/undici/lib/mock/mock-client.js","../node_modules/undici/lib/mock/mock-call-history.js","../node_modules/undici/lib/mock/mock-pool.js","../node_modules/undici/lib/mock/pending-interceptors-formatter.js","../node_modules/undici/lib/mock/mock-agent.js","../node_modules/undici/lib/mock/snapshot-utils.js","../node_modules/undici/lib/mock/snapshot-recorder.js","../node_modules/undici/lib/mock/snapshot-agent.js","../node_modules/undici/lib/global.js","../node_modules/undici/lib/handler/decorator-handler.js","../node_modules/undici/lib/handler/redirect-handler.js","../node_modules/undici/lib/interceptor/redirect.js","../node_modules/undici/lib/interceptor/response-error.js","../node_modules/undici/lib/interceptor/retry.js","../node_modules/undici/lib/interceptor/dump.js","../node_modules/undici/lib/interceptor/dns.js","../node_modules/undici/lib/util/cache.js","../node_modules/undici/lib/util/date.js","../node_modules/undici/lib/handler/cache-handler.js","../node_modules/undici/lib/cache/memory-cache-store.js","../node_modules/undici/lib/handler/cache-revalidation-handler.js","../node_modules/undici/lib/interceptor/cache.js","../node_modules/undici/lib/interceptor/decompress.js","../node_modules/undici/lib/cache/sqlite-cache-store.js","../node_modules/undici/lib/web/fetch/headers.js","../node_modules/undici/lib/web/fetch/response.js","../node_modules/undici/lib/web/fetch/request.js","../node_modules/undici/lib/web/subresource-integrity/subresource-integrity.js","../node_modules/undici/lib/web/fetch/index.js","../node_modules/undici/lib/web/cache/util.js","../node_modules/undici/lib/web/cache/cache.js","../node_modules/undici/lib/web/cache/cachestorage.js","../node_modules/undici/lib/web/cookies/constants.js","../node_modules/undici/lib/web/cookies/util.js","../node_modules/undici/lib/web/cookies/parse.js","../node_modules/undici/lib/web/cookies/index.js","../node_modules/undici/lib/web/websocket/events.js","../node_modules/undici/lib/web/websocket/constants.js","../node_modules/undici/lib/web/websocket/util.js","../node_modules/undici/lib/web/websocket/frame.js","../node_modules/undici/lib/web/websocket/connection.js","../node_modules/undici/lib/web/websocket/permessage-deflate.js","../node_modules/undici/lib/web/websocket/receiver.js","../node_modules/undici/lib/web/websocket/sender.js","../node_modules/undici/lib/web/websocket/websocket.js","../node_modules/undici/lib/web/websocket/stream/websocketerror.js","../node_modules/undici/lib/web/websocket/stream/websocketstream.js","../node_modules/undici/lib/web/eventsource/util.js","../node_modules/undici/lib/web/eventsource/eventsource-stream.js","../node_modules/undici/lib/web/eventsource/eventsource.js","../node_modules/undici/index.js","../node_modules/prom-client/lib/util.js","../node_modules/prom-client/lib/registry.js","../node_modules/prom-client/lib/validation.js","../node_modules/prom-client/lib/metric.js","../node_modules/prom-client/lib/exemplar.js","../node_modules/prom-client/lib/counter.js","../node_modules/prom-client/lib/gauge.js","../node_modules/prom-client/lib/histogram.js","../node_modules/bintrees/lib/treebase.js","../node_modules/bintrees/lib/rbtree.js","../node_modules/bintrees/lib/bintree.js","../node_modules/bintrees/index.js","../node_modules/tdigest/tdigest.js","../node_modules/prom-client/lib/timeWindowQuantiles.js","../node_modules/prom-client/lib/summary.js","../node_modules/prom-client/lib/pushgateway.js","../node_modules/prom-client/lib/bucketGenerators.js","../node_modules/@opentelemetry/api/src/platform/node/globalThis.ts","../node_modules/@opentelemetry/api/src/platform/node/index.ts","../node_modules/@opentelemetry/api/src/platform/index.ts","../node_modules/@opentelemetry/api/src/version.ts","../node_modules/@opentelemetry/api/src/internal/semver.ts","../node_modules/@opentelemetry/api/src/internal/global-utils.ts","../node_modules/@opentelemetry/api/src/diag/ComponentLogger.ts","../node_modules/@opentelemetry/api/src/diag/types.ts","../node_modules/@opentelemetry/api/src/diag/internal/logLevelLogger.ts","../node_modules/@opentelemetry/api/src/api/diag.ts","../node_modules/@opentelemetry/api/src/baggage/internal/baggage-impl.ts","../node_modules/@opentelemetry/api/src/baggage/internal/symbol.ts","../node_modules/@opentelemetry/api/src/baggage/utils.ts","../node_modules/@opentelemetry/api/src/context/context.ts","../node_modules/@opentelemetry/api/src/diag/consoleLogger.ts","../node_modules/@opentelemetry/api/src/metrics/NoopMeter.ts","../node_modules/@opentelemetry/api/src/metrics/Metric.ts","../node_modules/@opentelemetry/api/src/propagation/TextMapPropagator.ts","../node_modules/@opentelemetry/api/src/context/NoopContextManager.ts","../node_modules/@opentelemetry/api/src/api/context.ts","../node_modules/@opentelemetry/api/src/trace/trace_flags.ts","../node_modules/@opentelemetry/api/src/trace/invalid-span-constants.ts","../node_modules/@opentelemetry/api/src/trace/NonRecordingSpan.ts","../node_modules/@opentelemetry/api/src/trace/context-utils.ts","../node_modules/@opentelemetry/api/src/trace/spancontext-utils.ts","../node_modules/@opentelemetry/api/src/trace/NoopTracer.ts","../node_modules/@opentelemetry/api/src/trace/ProxyTracer.ts","../node_modules/@opentelemetry/api/src/trace/NoopTracerProvider.ts","../node_modules/@opentelemetry/api/src/trace/ProxyTracerProvider.ts","../node_modules/@opentelemetry/api/src/trace/SamplingResult.ts","../node_modules/@opentelemetry/api/src/trace/span_kind.ts","../node_modules/@opentelemetry/api/src/trace/status.ts","../node_modules/@opentelemetry/api/src/trace/internal/tracestate-validators.ts","../node_modules/@opentelemetry/api/src/trace/internal/tracestate-impl.ts","../node_modules/@opentelemetry/api/src/trace/internal/utils.ts","../node_modules/@opentelemetry/api/src/context-api.ts","../node_modules/@opentelemetry/api/src/diag-api.ts","../node_modules/@opentelemetry/api/src/metrics/NoopMeterProvider.ts","../node_modules/@opentelemetry/api/src/api/metrics.ts","../node_modules/@opentelemetry/api/src/metrics-api.ts","../node_modules/@opentelemetry/api/src/propagation/NoopTextMapPropagator.ts","../node_modules/@opentelemetry/api/src/baggage/context-helpers.ts","../node_modules/@opentelemetry/api/src/api/propagation.ts","../node_modules/@opentelemetry/api/src/propagation-api.ts","../node_modules/@opentelemetry/api/src/api/trace.ts","../node_modules/@opentelemetry/api/src/trace-api.ts","../node_modules/@opentelemetry/api/src/index.ts","../node_modules/prom-client/lib/metrics/processCpuTotal.js","../node_modules/prom-client/lib/metrics/processStartTime.js","../node_modules/prom-client/lib/metrics/osMemoryHeapLinux.js","../node_modules/prom-client/lib/metrics/helpers/safeMemoryUsage.js","../node_modules/prom-client/lib/metrics/osMemoryHeap.js","../node_modules/prom-client/lib/metrics/processOpenFileDescriptors.js","../node_modules/prom-client/lib/metrics/processMaxFileDescriptors.js","../node_modules/prom-client/lib/metrics/eventLoopLag.js","../node_modules/prom-client/lib/metrics/helpers/processMetricsHelpers.js","../node_modules/prom-client/lib/metrics/processHandles.js","../node_modules/prom-client/lib/metrics/processRequests.js","../node_modules/prom-client/lib/metrics/processResources.js","../node_modules/prom-client/lib/metrics/heapSizeAndUsed.js","../node_modules/prom-client/lib/metrics/heapSpacesSizeAndUsed.js","../node_modules/prom-client/lib/metrics/version.js","../node_modules/prom-client/lib/metrics/gc.js","../node_modules/prom-client/lib/defaultMetrics.js","../node_modules/prom-client/lib/metricAggregators.js","../node_modules/prom-client/lib/cluster.js","../node_modules/prom-client/index.js","../src/sdk/worker/metrics/PrometheusRegistry.ts","../src/sdk/worker/metrics/MetricsServer.ts","../src/sdk/createConductorClient/constants.ts","../src/sdk/createConductorClient/helpers/getUndiciHttp2FetchFn.ts","../src/sdk/createConductorClient/helpers/resolveFetchFn.ts","../src/sdk/createConductorClient/helpers/resolveOrkesConfig.ts","../src/open-api/generated/core/bodySerializer.gen.ts","../src/open-api/generated/core/serverSentEvents.gen.ts","../src/open-api/generated/core/pathSerializer.gen.ts","../src/open-api/generated/core/utils.gen.ts","../src/open-api/generated/core/auth.gen.ts","../src/open-api/generated/client/utils.gen.ts","../src/open-api/generated/client/client.gen.ts","../src/open-api/generated/client.gen.ts","../src/open-api/generated/sdk.gen.ts","../src/sdk/helpers/errors.ts","../src/sdk/createConductorClient/helpers/handleAuth.ts","../src/sdk/createConductorClient/helpers/fetchWithRetry.ts","../src/sdk/createConductorClient/helpers/addResourcesBackwardCompatibility.ts","../src/sdk/createConductorClient/createConductorClient.ts","../src/sdk/clients/application/ApplicationClient.ts","../src/sdk/clients/authorization/AuthorizationClient.ts","../src/sdk/clients/event/EventClient.ts","../src/sdk/clients/human/constants.ts","../src/sdk/clients/human/HumanExecutor.ts","../src/sdk/clients/integration/IntegrationClient.ts","../src/sdk/clients/metadata/MetadataClient.ts","../src/sdk/clients/prompt/PromptClient.ts","../src/sdk/clients/scheduler/SchedulerClient.ts","../src/sdk/clients/schema/SchemaClient.ts","../src/sdk/clients/secret/SecretClient.ts","../src/sdk/clients/service-registry/ServiceRegistryClient.ts","../src/sdk/clients/task/TaskClient.ts","../src/sdk/clients/template/TemplateClient.ts","../src/open-api/types.ts","../src/open-api/deprecated-types.ts","../src/sdk/clients/workflow/helpers/enhanceSignalResponse.ts","../src/sdk/clients/workflow/helpers/reverseFind.ts","../src/sdk/clients/workflow/helpers/isCompletedTaskMatchingType.ts","../src/sdk/clients/workflow/constants.ts","../src/sdk/clients/workflow/WorkflowExecutor.ts","../src/sdk/OrkesClients.ts","../src/sdk/helpers/logger.ts","../src/sdk/clients/worker/constants.ts","../src/sdk/clients/worker/Poller.ts","../src/sdk/clients/worker/types.ts","../src/sdk/clients/worker/helpers.ts","../src/sdk/clients/worker/events/EventDispatcher.ts","../src/sdk/clients/worker/exceptions/Exceptions.ts","../src/sdk/worker/context/TaskContext.ts","../src/sdk/clients/worker/TaskRunner.ts","../src/sdk/clients/worker/TaskManager.ts","../src/sdk/builders/tasks/doWhile.ts","../src/sdk/builders/tasks/dynamic.ts","../src/sdk/builders/tasks/dynamicFork.ts","../src/sdk/builders/tasks/event.ts","../src/sdk/generators/common.ts","../src/sdk/generators/SimpleTask.ts","../src/sdk/generators/DoWhileTask.ts","../src/sdk/generators/EventTask.ts","../src/sdk/generators/ForkJoin.ts","../src/sdk/generators/HttpTask.ts","../src/sdk/generators/InlineTask.ts","../src/sdk/generators/JsonJQTransform.ts","../src/sdk/generators/KafkaTask.ts","../src/sdk/generators/SubWorkflowTask.ts","../src/sdk/generators/SetVariableTask.ts","../src/sdk/generators/TerminateTask.ts","../src/sdk/generators/WaitTask.ts","../src/sdk/generators/SwitchTask.ts","../src/sdk/generators/WorkflowGenerator.ts","../src/sdk/generators/ForkJoinDynamicTask.ts","../src/sdk/generators/generator.ts","../src/sdk/generators/index.ts","../src/sdk/builders/tasks/forkJoin.ts","../src/sdk/builders/tasks/getDocument.ts","../src/sdk/builders/tasks/http.ts","../src/sdk/builders/tasks/httpPoll.ts","../src/sdk/builders/tasks/humanTask.ts","../src/sdk/builders/tasks/inline.ts","../src/sdk/builders/tasks/join.ts","../src/sdk/builders/tasks/jsonJq.ts","../src/sdk/builders/tasks/kafkaPublish.ts","../src/sdk/builders/tasks/setVariable.ts","../src/sdk/builders/tasks/simple.ts","../src/sdk/builders/tasks/startWorkflow.ts","../src/sdk/builders/tasks/subWorkflow.ts","../src/sdk/builders/tasks/switch.ts","../src/sdk/builders/tasks/terminate.ts","../src/sdk/builders/tasks/wait.ts","../src/sdk/builders/tasks/waitForWebhook.ts","../src/sdk/builders/tasks/llm/types.ts","../src/sdk/builders/tasks/llm/llmChatComplete.ts","../src/sdk/builders/tasks/llm/llmTextComplete.ts","../src/sdk/builders/tasks/llm/llmGenerateEmbeddings.ts","../src/sdk/builders/tasks/llm/llmIndexText.ts","../src/sdk/builders/tasks/llm/llmIndexDocument.ts","../src/sdk/builders/tasks/llm/llmSearchIndex.ts","../src/sdk/builders/tasks/llm/llmSearchEmbeddings.ts","../src/sdk/builders/tasks/llm/llmStoreEmbeddings.ts","../src/sdk/builders/tasks/llm/llmQueryEmbeddings.ts","../src/sdk/builders/tasks/llm/generateImage.ts","../src/sdk/builders/tasks/llm/generateAudio.ts","../src/sdk/builders/tasks/llm/callMcpTool.ts","../src/sdk/builders/tasks/llm/listMcpTools.ts","../src/sdk/builders/tasks/llm/promptHelpers.ts","../src/sdk/builders/workflow.ts","../src/sdk/builders/taskDefinition.ts","../src/sdk/builders/ConductorWorkflow.ts","../src/sdk/worker/core/TaskHandler.ts","../src/sdk/worker/config/WorkerConfig.ts","../src/sdk/worker/decorators/registry.ts","../src/sdk/worker/schema/decorators.ts","../src/sdk/worker/decorators/worker.ts","../src/sdk/worker/metrics/MetricsCollector.ts","../src/sdk/worker/metrics/index.ts","../src/sdk/worker/schema/generateJsonSchema.ts"],"sourcesContent":["'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  kNoProxyAgent: Symbol('no proxy agent'),\n  kHttpProxyAgent: Symbol('http proxy agent'),\n  kHttpsProxyAgent: Symbol('https 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\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}\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 (\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 * @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) {\n      if (typeof val === 'string') {\n        val = [val]\n        obj[key] = val\n      }\n      val.push(headers[i + 1].toString('utf8'))\n    } else {\n      const headersValue = headers[i + 1]\n      if (typeof headersValue === 'string') {\n        obj[key] = headersValue\n      } else {\n        obj[key] = Array.isArray(headersValue) ? headersValue.map(x => x.toString('utf8')) : headersValue.toString('utf8')\n      }\n    }\n  }\n\n  // See https://github.com/nodejs/node/pull/46528\n  if ('content-length' in obj && 'content-disposition' in obj) {\n    obj['content-disposition'] = Buffer.from(obj['content-disposition']).toString('latin1')\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 hasContentLength = false\n  let contentDispositionIdx = -1\n  let key\n  let val\n  let kLen = 0\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('utf8'))\n\n    kLen = key.length\n    if (kLen === 14 && key[7] === '-' && (key === 'content-length' || key.toLowerCase() === 'content-length')) {\n      hasContentLength = true\n    } else if (kLen === 19 && key[7] === '-' && (key === 'content-disposition' || key.toLowerCase() === 'content-disposition')) {\n      contentDispositionIdx = n + 1\n    }\n    ret[n] = key\n    ret[n + 1] = val\n  }\n\n  // See https://github.com/nodejs/node/pull/46528\n  if (hasContentLength && contentDispositionIdx !== -1) {\n    ret[contentDispositionIdx] = Buffer.from(ret[contentDispositionIdx]).toString('latin1')\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            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              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\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  switch (c) {\n    case 0x22:\n    case 0x28:\n    case 0x29:\n    case 0x2c:\n    case 0x2f:\n    case 0x3a:\n    case 0x3b:\n    case 0x3c:\n    case 0x3d:\n    case 0x3e:\n    case 0x3f:\n    case 0x40:\n    case 0x5b:\n    case 0x5c:\n    case 0x5d:\n    case 0x7b:\n    case 0x7d:\n      // DQUOTE and \"(),/:;<=>?@[\\]{}\"\n      return false\n    default:\n      // VCHAR %x21-7E\n      return c >= 0x21 && c <= 0x7e\n  }\n}\n\n/**\n * @param {string} characters\n * @returns {boolean}\n */\nfunction isValidHTTPToken (characters) {\n  if (characters.length === 0) {\n    return false\n  }\n  for (let i = 0; i < characters.length; ++i) {\n    if (!isTokenCharCode(characters.charCodeAt(i))) {\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  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}\n\nlet isTrackingClientEvents = false\n\nfunction trackClientEvents (debugLog = undiciDebugLog) {\n  if (isTrackingClientEvents) {\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  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  isTrackingWebSocketEvents = true\n\n  diagnosticsChannel.subscribe('undici:websocket:open',\n    evt => {\n      const {\n        address: { address, port }\n      } = evt\n      debugLog('connection opened %s%s', address, port ? `:${port}` : '')\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  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\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  }, 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 (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    this.headersTimeout = headersTimeout\n\n    this.bodyTimeout = bodyTimeout\n\n    this.method = method\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 (headers[Symbol.iterator]) {\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        arr.push(`${val[i]}`)\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    val = `${val}`\n  }\n\n  if (request.host === null && headerName === 'host') {\n    if (typeof val !== 'string') {\n      throw new InvalidArgumentError('invalid host header')\n    }\n    // Consumed by Client\n    request.host = val\n  } else if (request.contentLength === null && headerName === 'content-length') {\n    request.contentLength = parseInt(val, 10)\n    if (!Number.isFinite(request.contentLength)) {\n      throw new InvalidArgumentError('invalid content-length header')\n    }\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    const value = typeof val === 'string' ? val.toLowerCase() : null\n    if (value !== 'close' && value !== 'keep-alive') {\n      throw new InvalidArgumentError('invalid connection header')\n    }\n\n    if (value === 'close') {\n      request.reset = true\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  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), Array.isArray(val) ? val.map(v => Buffer.from(v)) : Buffer.from(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), Array.isArray(val) ? val.map(v => Buffer.from(v)) : Buffer.from(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), Array.isArray(val) ? val.map(v => Buffer.from(v)) : Buffer.from(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","'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  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  onUpgrade (statusCode, rawHeaders, socket) {\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.#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.#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')\n\nclass DispatcherBase extends Dispatcher {\n  /** @type {boolean} */\n  [kDestroyed] = false;\n\n  /** @type {Array|null} */\n  [kOnDestroyed] = null;\n\n  /** @type {boolean} */\n  [kClosed] = false;\n\n  /** @type {Array} */\n  [kOnClosed] = []\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      queueMicrotask(() => callback(new ClientDestroyedError(), 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].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(() => {\n        queueMicrotask(onClosed)\n      })\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 ? /* istanbul ignore next: should never error */ 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] = 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).then(() => {\n      queueMicrotask(onDestroyed)\n    })\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    this._sessionCache.set(sessionKey, new WeakRef(session))\n    this._sessionRegistry.register(session, sessionKey)\n  }\n}\n\nfunction buildConnector ({ allowH2, 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    }\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/AkACQAJAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAMCfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAg7jAQABAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR4fICEjJCUnKCmeA5sDmgORA4oDgwOAA/0C+wL4AvIC8QLvAu0C6ALnAuYC5QLkAtwC2wLaAtkC2ALXAtYC1QLPAs4CzALLAsoCyQLIAscCxgLEAsMCvgK8AroCuQK4ArcCtgK1ArQCswKyArECsAKuAq0CqQKoAqcCpgKlAqQCowKiAqECoAKfApgCkAKMAosCigKBAv4B/QH8AfsB+gH5AfgB9wH1AfMB8AHrAekB6AHnAeYB5QHkAeMB4gHhAeAB3wHeAd0B3AHaAdkB2AHXAdYB1QHUAdMB0gHRAdABzwHOAc0BzAHLAcoByQHIAccBxgHFAcQBwwHCAcEBwAG/Ab4BvQG8AbsBugG5AbgBtwG2AbUBtAGzAbIBsQGwAa8BrgGtAawBqwGqAakBqAGnAaYBpQGkAaMBogGfAZ4BmQGYAZcBlgGVAZQBkwGSAZEBkAGPAY0BjAGHAYYBhQGEAYMBggF9fHt6eXZ1dFBRUlNUVQsgASAERw1yQf0BIQIMvgMLIAEgBEcNmAFB2wEhAgy9AwsgASAERw3xAUGOASECDLwDCyABIARHDfwBQYQBIQIMuwMLIAEgBEcNigJB/wAhAgy6AwsgASAERw2RAkH9ACECDLkDCyABIARHDZQCQfsAIQIMuAMLIAEgBEcNHkEeIQIMtwMLIAEgBEcNGUEYIQIMtgMLIAEgBEcNygJBzQAhAgy1AwsgASAERw3VAkHGACECDLQDCyABIARHDdYCQcMAIQIMswMLIAEgBEcN3AJBOCECDLIDCyADLQAwQQFGDa0DDIkDC0EAIQACQAJAAkAgAy0AKkUNACADLQArRQ0AIAMvATIiAkECcUUNAQwCCyADLwEyIgJBAXFFDQELQQEhACADLQAoQQFGDQAgAy8BNCIGQeQAa0HkAEkNACAGQcwBRg0AIAZBsAJGDQAgAkHAAHENAEEAIQAgAkGIBHFBgARGDQAgAkEocUEARyEACyADQQA7ATIgA0EAOgAxAkAgAEUEQCADQQA6ADEgAy0ALkEEcQ0BDLEDCyADQgA3AyALIANBADoAMSADQQE6ADYMSAtBACEAAkAgAygCOCICRQ0AIAIoAjAiAkUNACADIAIRAAAhAAsgAEUNSCAAQRVHDWIgA0EENgIcIAMgATYCFCADQdIbNgIQIANBFTYCDEEAIQIMrwMLIAEgBEYEQEEGIQIMrwMLIAEtAABBCkcNGSABQQFqIQEMGgsgA0IANwMgQRIhAgyUAwsgASAERw2KA0EjIQIMrAMLIAEgBEYEQEEHIQIMrAMLAkACQCABLQAAQQprDgQBGBgAGAsgAUEBaiEBQRAhAgyTAwsgAUEBaiEBIANBL2otAABBAXENF0EAIQIgA0EANgIcIAMgATYCFCADQZkgNgIQIANBGTYCDAyrAwsgAyADKQMgIgwgBCABa60iCn0iC0IAIAsgDFgbNwMgIAogDFoNGEEIIQIMqgMLIAEgBEcEQCADQQk2AgggAyABNgIEQRQhAgyRAwtBCSECDKkDCyADKQMgUA2uAgxDCyABIARGBEBBCyECDKgDCyABLQAAQQpHDRYgAUEBaiEBDBcLIANBL2otAABBAXFFDRkMJgtBACEAAkAgAygCOCICRQ0AIAIoAlAiAkUNACADIAIRAAAhAAsgAA0ZDEILQQAhAAJAIAMoAjgiAkUNACACKAJQIgJFDQAgAyACEQAAIQALIAANGgwkC0EAIQACQCADKAI4IgJFDQAgAigCUCICRQ0AIAMgAhEAACEACyAADRsMMgsgA0Evai0AAEEBcUUNHAwiC0EAIQACQCADKAI4IgJFDQAgAigCVCICRQ0AIAMgAhEAACEACyAADRwMQgtBACEAAkAgAygCOCICRQ0AIAIoAlQiAkUNACADIAIRAAAhAAsgAA0dDCALIAEgBEYEQEETIQIMoAMLAkAgAS0AACIAQQprDgQfIyMAIgsgAUEBaiEBDB8LQQAhAAJAIAMoAjgiAkUNACACKAJUIgJFDQAgAyACEQAAIQALIAANIgxCCyABIARGBEBBFiECDJ4DCyABLQAAQcDBAGotAABBAUcNIwyDAwsCQANAIAEtAABBsDtqLQAAIgBBAUcEQAJAIABBAmsOAgMAJwsgAUEBaiEBQSEhAgyGAwsgBCABQQFqIgFHDQALQRghAgydAwsgAygCBCEAQQAhAiADQQA2AgQgAyAAIAFBAWoiARA0IgANIQxBC0EAIQACQCADKAI4IgJFDQAgAigCVCICRQ0AIAMgAhEAACEACyAADSMMKgsgASAERgRAQRwhAgybAwsgA0EKNgIIIAMgATYCBEEAIQACQCADKAI4IgJFDQAgAigCUCICRQ0AIAMgAhEAACEACyAADSVBJCECDIEDCyABIARHBEADQCABLQAAQbA9ai0AACIAQQNHBEAgAEEBaw4FGBomggMlJgsgBCABQQFqIgFHDQALQRshAgyaAwtBGyECDJkDCwNAIAEtAABBsD9qLQAAIgBBA0cEQCAAQQFrDgUPEScTJicLIAQgAUEBaiIBRw0AC0EeIQIMmAMLIAEgBEcEQCADQQs2AgggAyABNgIEQQchAgz/AgtBHyECDJcDCyABIARGBEBBICECDJcDCwJAIAEtAABBDWsOFC4/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8APwtBACECIANBADYCHCADQb8LNgIQIANBAjYCDCADIAFBAWo2AhQMlgMLIANBL2ohAgNAIAEgBEYEQEEhIQIMlwMLAkACQAJAIAEtAAAiAEEJaw4YAgApKQEpKSkpKSkpKSkpKSkpKSkpKSkCJwsgAUEBaiEBIANBL2otAABBAXFFDQoMGAsgAUEBaiEBDBcLIAFBAWohASACLQAAQQJxDQALQQAhAiADQQA2AhwgAyABNgIUIANBnxU2AhAgA0EMNgIMDJUDCyADLQAuQYABcUUNAQtBACEAAkAgAygCOCICRQ0AIAIoAlwiAkUNACADIAIRAAAhAAsgAEUN5gIgAEEVRgRAIANBJDYCHCADIAE2AhQgA0GbGzYCECADQRU2AgxBACECDJQDC0EAIQIgA0EANgIcIAMgATYCFCADQZAONgIQIANBFDYCDAyTAwtBACECIANBADYCHCADIAE2AhQgA0G+IDYCECADQQI2AgwMkgMLIAMoAgQhAEEAIQIgA0EANgIEIAMgACABIAynaiIBEDIiAEUNKyADQQc2AhwgAyABNgIUIAMgADYCDAyRAwsgAy0ALkHAAHFFDQELQQAhAAJAIAMoAjgiAkUNACACKAJYIgJFDQAgAyACEQAAIQALIABFDSsgAEEVRgRAIANBCjYCHCADIAE2AhQgA0HrGTYCECADQRU2AgxBACECDJADC0EAIQIgA0EANgIcIAMgATYCFCADQZMMNgIQIANBEzYCDAyPAwtBACECIANBADYCHCADIAE2AhQgA0GCFTYCECADQQI2AgwMjgMLQQAhAiADQQA2AhwgAyABNgIUIANB3RQ2AhAgA0EZNgIMDI0DC0EAIQIgA0EANgIcIAMgATYCFCADQeYdNgIQIANBGTYCDAyMAwsgAEEVRg09QQAhAiADQQA2AhwgAyABNgIUIANB0A82AhAgA0EiNgIMDIsDCyADKAIEIQBBACECIANBADYCBCADIAAgARAzIgBFDSggA0ENNgIcIAMgATYCFCADIAA2AgwMigMLIABBFUYNOkEAIQIgA0EANgIcIAMgATYCFCADQdAPNgIQIANBIjYCDAyJAwsgAygCBCEAQQAhAiADQQA2AgQgAyAAIAEQMyIARQRAIAFBAWohAQwoCyADQQ42AhwgAyAANgIMIAMgAUEBajYCFAyIAwsgAEEVRg03QQAhAiADQQA2AhwgAyABNgIUIANB0A82AhAgA0EiNgIMDIcDCyADKAIEIQBBACECIANBADYCBCADIAAgARAzIgBFBEAgAUEBaiEBDCcLIANBDzYCHCADIAA2AgwgAyABQQFqNgIUDIYDC0EAIQIgA0EANgIcIAMgATYCFCADQeIXNgIQIANBGTYCDAyFAwsgAEEVRg0zQQAhAiADQQA2AhwgAyABNgIUIANB1gw2AhAgA0EjNgIMDIQDCyADKAIEIQBBACECIANBADYCBCADIAAgARA0IgBFDSUgA0ERNgIcIAMgATYCFCADIAA2AgwMgwMLIABBFUYNMEEAIQIgA0EANgIcIAMgATYCFCADQdYMNgIQIANBIzYCDAyCAwsgAygCBCEAQQAhAiADQQA2AgQgAyAAIAEQNCIARQRAIAFBAWohAQwlCyADQRI2AhwgAyAANgIMIAMgAUEBajYCFAyBAwsgA0Evai0AAEEBcUUNAQtBFyECDOYCC0EAIQIgA0EANgIcIAMgATYCFCADQeIXNgIQIANBGTYCDAz+AgsgAEE7Rw0AIAFBAWohAQwMC0EAIQIgA0EANgIcIAMgATYCFCADQZIYNgIQIANBAjYCDAz8AgsgAEEVRg0oQQAhAiADQQA2AhwgAyABNgIUIANB1gw2AhAgA0EjNgIMDPsCCyADQRQ2AhwgAyABNgIUIAMgADYCDAz6AgsgAygCBCEAQQAhAiADQQA2AgQgAyAAIAEQNCIARQRAIAFBAWohAQz1AgsgA0EVNgIcIAMgADYCDCADIAFBAWo2AhQM+QILIAMoAgQhAEEAIQIgA0EANgIEIAMgACABEDQiAEUEQCABQQFqIQEM8wILIANBFzYCHCADIAA2AgwgAyABQQFqNgIUDPgCCyAAQRVGDSNBACECIANBADYCHCADIAE2AhQgA0HWDDYCECADQSM2AgwM9wILIAMoAgQhAEEAIQIgA0EANgIEIAMgACABEDQiAEUEQCABQQFqIQEMHQsgA0EZNgIcIAMgADYCDCADIAFBAWo2AhQM9gILIAMoAgQhAEEAIQIgA0EANgIEIAMgACABEDQiAEUEQCABQQFqIQEM7wILIANBGjYCHCADIAA2AgwgAyABQQFqNgIUDPUCCyAAQRVGDR9BACECIANBADYCHCADIAE2AhQgA0HQDzYCECADQSI2AgwM9AILIAMoAgQhACADQQA2AgQgAyAAIAEQMyIARQRAIAFBAWohAQwbCyADQRw2AhwgAyAANgIMIAMgAUEBajYCFEEAIQIM8wILIAMoAgQhACADQQA2AgQgAyAAIAEQMyIARQRAIAFBAWohAQzrAgsgA0EdNgIcIAMgADYCDCADIAFBAWo2AhRBACECDPICCyAAQTtHDQEgAUEBaiEBC0EmIQIM1wILQQAhAiADQQA2AhwgAyABNgIUIANBnxU2AhAgA0EMNgIMDO8CCyABIARHBEADQCABLQAAQSBHDYQCIAQgAUEBaiIBRw0AC0EsIQIM7wILQSwhAgzuAgsgASAERgRAQTQhAgzuAgsCQAJAA0ACQCABLQAAQQprDgQCAAADAAsgBCABQQFqIgFHDQALQTQhAgzvAgsgAygCBCEAIANBADYCBCADIAAgARAxIgBFDZ8CIANBMjYCHCADIAE2AhQgAyAANgIMQQAhAgzuAgsgAygCBCEAIANBADYCBCADIAAgARAxIgBFBEAgAUEBaiEBDJ8CCyADQTI2AhwgAyAANgIMIAMgAUEBajYCFEEAIQIM7QILIAEgBEcEQAJAA0AgAS0AAEEwayIAQf8BcUEKTwRAQTohAgzXAgsgAykDICILQpmz5syZs+bMGVYNASADIAtCCn4iCjcDICAKIACtQv8BgyILQn+FVg0BIAMgCiALfDcDICAEIAFBAWoiAUcNAAtBwAAhAgzuAgsgAygCBCEAIANBADYCBCADIAAgAUEBaiIBEDEiAA0XDOICC0HAACECDOwCCyABIARGBEBByQAhAgzsAgsCQANAAkAgAS0AAEEJaw4YAAKiAqICqQKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogIAogILIAQgAUEBaiIBRw0AC0HJACECDOwCCyABQQFqIQEgA0Evai0AAEEBcQ2lAiADQQA2AhwgAyABNgIUIANBlxA2AhAgA0EKNgIMQQAhAgzrAgsgASAERwRAA0AgAS0AAEEgRw0VIAQgAUEBaiIBRw0AC0H4ACECDOsCC0H4ACECDOoCCyADQQI6ACgMOAtBACECIANBADYCHCADQb8LNgIQIANBAjYCDCADIAFBAWo2AhQM6AILQQAhAgzOAgtBDSECDM0CC0ETIQIMzAILQRUhAgzLAgtBFiECDMoCC0EYIQIMyQILQRkhAgzIAgtBGiECDMcCC0EbIQIMxgILQRwhAgzFAgtBHSECDMQCC0EeIQIMwwILQR8hAgzCAgtBICECDMECC0EiIQIMwAILQSMhAgy/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/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAzU0BQYAAAMAAAAAAAADAQMAAwMDAAACAAAAAAICAgICAgICAgIBAQEBAQEBAQEBAwAAAwAAAAQFAXABExMFAwEAAgYIAX8BQcDZBAsHxQcoBm1lbW9yeQIAC19pbml0aWFsaXplAAgZX19pbmRpcmVjdF9mdW5jdGlvbl90YWJsZQEAC2xsaHR0cF9pbml0AAkYbGxodHRwX3Nob3VsZF9rZWVwX2FsaXZlADcMbGxodHRwX2FsbG9jAAsGbWFsbG9jADkLbGxodHRwX2ZyZWUADARmcmVlAAwPbGxodHRwX2dldF90eXBlAA0VbGxodHRwX2dldF9odHRwX21ham9yAA4VbGxodHRwX2dldF9odHRwX21pbm9yAA8RbGxodHRwX2dldF9tZXRob2QAEBZsbGh0dHBfZ2V0X3N0YXR1c19jb2RlABESbGxodHRwX2dldF91cGdyYWRlABIMbGxodHRwX3Jlc2V0ABMObGxodHRwX2V4ZWN1dGUAFBRsbGh0dHBfc2V0dGluZ3NfaW5pdAAVDWxsaHR0cF9maW5pc2gAFgxsbGh0dHBfcGF1c2UAFw1sbGh0dHBfcmVzdW1lABgbbGxodHRwX3Jlc3VtZV9hZnRlcl91cGdyYWRlABkQbGxodHRwX2dldF9lcnJubwAaF2xsaHR0cF9nZXRfZXJyb3JfcmVhc29uABsXbGxodHRwX3NldF9lcnJvcl9yZWFzb24AHBRsbGh0dHBfZ2V0X2Vycm9yX3BvcwAdEWxsaHR0cF9lcnJub19uYW1lAB4SbGxodHRwX21ldGhvZF9uYW1lAB8SbGxodHRwX3N0YXR1c19uYW1lACAabGxodHRw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AXRrQT5qIQILIAEgAjYCHCABQgA3AhAgAkECdEH01wBqIQACQEHI1QAoAgAiA0EBIAJ0IgdxRQRAIAAgATYCAEHI1QAgAyAHcjYCACABIAA2AhggASABNgIIIAEgATYCDAwBCyAEQRkgAkEBdmtBACACQR9HG3QhAiAAKAIAIQACQANAIAAiAygCBEF4cSAERg0BIAJBHXYhACACQQF0IQIgAyAAQQRxakEQaiIHKAIAIgANAAsgByABNgIAIAEgAzYCGCABIAE2AgwgASABNgIIDAELIAMoAggiACABNgIMIAMgATYCCCABQQA2AhggASADNgIMIAEgADYCCAtB5NUAQeTVACgCAEEBayIAQX8gABs2AgALCwcAIAAtACgLBwAgAC0AKgsHACAALQArCwcAIAAtACkLBwAgAC8BNAsHACAALQAwC0ABBH8gACgCGCEBIAAvAS4hAiAALQAoIQMgACgCOCEEIAAQOCAAIAQ2AjggACADOgAoIAAgAjsBLiAAIAE2AhgLhocCAwd/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 assert = require('node:assert')\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]+$/\nconst HTTP_WHITESPACE_REGEX = /[\\u000A\\u000D\\u0009\\u0020]/ // eslint-disable-line\nconst ASCII_WHITESPACE_REPLACE_REGEX = /[\\u0009\\u000A\\u000C\\u000D\\u0020]/g // eslint-disable-line\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]+$/ // eslint-disable-line\n\n// https://fetch.spec.whatwg.org/#data-url-processor\n/** @param {URL} dataURL */\nfunction dataURLProcessor (dataURL) {\n  // 1. Assert: dataURL’s 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){0,}base64$/i.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)+$/, '')\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://infra.spec.whatwg.org/#collect-a-sequence-of-code-points\n/**\n * @param {(char: string) => boolean} condition\n * @param {string} input\n * @param {{ position: number }} position\n */\nfunction collectASequenceOfCodePoints (condition, input, position) {\n  // 1. Let result be the empty string.\n  let result = ''\n\n  // 2. While position doesn’t 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 */\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\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  // 2. For each byte byte in input:\n  for (let i = 0; i < length; ++i) {\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  }\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’s parameters[parameterName] does not exist\n    // then set mimeType’s 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://infra.spec.whatwg.org/#forgiving-base64-decode\n/** @param {string} data */\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’s 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’s 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// 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’s\n  //    type, U+002F (/), and mimeType’s subtype.\n  let serialization = essence\n\n  // 2. For each name → value of mimeType’s 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(/(\\\\|\")/g, '\\\\$1')\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://infra.spec.whatwg.org/#ascii-whitespace\n * @param {number} char\n */\nfunction isASCIIWhitespace (char) {\n  // \"\\r\\n\\t\\f \"\n  return char === 0x00d || char === 0x00a || char === 0x009 || char === 0x00c || char === 0x020\n}\n\n/**\n * @see https://infra.spec.whatwg.org/#strip-leading-and-trailing-ascii-whitespace\n * @param {string} str\n * @param {boolean} [leading=true]\n * @param {boolean} [trailing=true]\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\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/**\n * @see https://infra.spec.whatwg.org/#isomorphic-decode\n * @param {Uint8Array} input\n * @returns {string}\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’s length and whose code points have the same values\n  //    as the values of input’s 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 = ''; 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\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’s 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’s 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  collectASequenceOfCodePoints,\n  collectASequenceOfCodePointsFast,\n  stringPercentDecode,\n  parseMIMEType,\n  collectAnHTTPQuotedString,\n  serializeAMimeType,\n  removeChars,\n  removeHTTPWhitespace,\n  minimizeSupportedMimeType,\n  HTTP_TOKEN_CODEPOINTS,\n  isomorphicDecode\n}\n","'use strict'\n\nconst { types, inspect } = require('node:util')\nconst { markAsUncloneable } = require('node:worker_threads')\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 = markAsUncloneable || (() => {})\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 − 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 −2^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 − 1.\n    upperBound = Math.pow(2, bitLength) - 1\n  } else {\n    // 3. Otherwise:\n\n    // 1. Let lowerBound be -2^bitLength − 1.\n    lowerBound = Math.pow(-2, bitLength) - 1\n\n    // 2. Let upperBound be 2^bitLength − 1 − 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 −0, 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, +∞, or −∞, 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 −0.\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, +∞, or −∞, 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 ≥ 2^bitLength − 1,\n  //    then return x − 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 × 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  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/#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’s 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 { collectASequenceOfCodePoints, collectAnHTTPQuotedString, removeChars, 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')\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’s URL list and null if response’s 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’s 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’s 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’s 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’s\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’s current URL.\n  const url = requestCurrentURL(request)\n\n  // 2. If url’s scheme is an HTTP(S) scheme and url’s 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’s 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’s 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 § 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’s 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’s 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’s value to r’s mode.\n  header = httpRequest.mode\n\n  //  4. Set a structured field value `Sec-Fetch-Mode`/header in r’s 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’s response tainting is \"cors\" or request’s mode is \"websocket\",\n  //    then append (`Origin`, serializedOrigin) to request’s header list.\n  // 3. Otherwise, if request’s 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’s 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’s origin is a tuple origin, its scheme is \"https\", and\n        // request’s current URL’s 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’s origin is not same origin with request’s current URL’s\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’s 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’s 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’s client.\n\n  let referrerSource = null\n\n  // 3. Switch on request’s 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’s referrer.\n    referrerSource = request.referrer\n  }\n\n  // 4. Let request’s 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’s\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’s 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’s\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’s 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’s 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’s\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’s 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’s 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’s scheme is a local scheme, then return no referrer.\n  if (urlIsLocal(url)) {\n    return 'no-referrer'\n  }\n\n  // 3. Set url’s username to the empty string.\n  url.username = ''\n\n  // 4. Set url’s password to the empty string.\n  url.password = ''\n\n  // 5. Set url’s 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’s path to « the empty string ».\n    url.pathname = ''\n\n    // 2. Set url’s 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’s 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’s 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’s host is \"localhost\" or \"localhost.\"\n  if (origin.hostname === 'localhost' || origin.hostname === 'localhost.') {\n    return true\n  }\n\n  //    origin’s 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’s scheme is \"file\", return \"Potentially Trustworthy\".\n  if (origin.protocol === 'file:') {\n    return true\n  }\n\n  // 7. If origin’s 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’s 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 § 3.1 Is origin potentially trustworthy?\n  // on url’s 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://infra.spec.whatwg.org/#serialize-a-javascript-value-to-a-json-string\nfunction serializeJavascriptValueToJSONString (value) {\n  // 1. Let result be ? Call(%JSON.stringify%, undefined, « value »).\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\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’s index.\n      // 7. Let kind be object’s kind.\n      // 8. Let values be object’s 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’s 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’s 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’s 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’s key.\n          // 2. Let idlValue be pair’s 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’s 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\nconst invalidIsomorphicEncodeValueRegex = /[^\\x00-\\xFF]/ // eslint-disable-line\n\n/**\n * @see https://infra.spec.whatwg.org/#isomorphic-encode\n * @param {string} input\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’s code\n  //    point length and whose bytes have the same values as the\n  //    values of input’s code points, in the same order\n  return input\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’s 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’s parameters[\"charset\"] exists, then set charset to\n      //        mimeType’s parameters[\"charset\"].\n      if (mimeType.parameters.has('charset')) {\n        charset = mimeType.parameters.get('charset')\n      }\n\n      // 6.4.3. Set essence to mimeType’s essence.\n      essence = mimeType.essence\n    } else if (!mimeType.parameters.has('charset') && charset !== null) {\n      // 6.5. Otherwise, if mimeType’s parameters[\"charset\"] does not exist, and\n      //      charset is non-null, set mimeType’s 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\nconst textDecoder = new TextDecoder()\n\n/**\n * @see https://encoding.spec.whatwg.org/#utf-8-decode\n * @param {Buffer} 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’s\n  //    decoder, ioQueue, output, and \"replacement\".\n  const output = textDecoder.decode(buffer)\n\n  // 4. Return output.\n  return output\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  serializeJavascriptValueToJSONString,\n  iteratorMixin,\n  createIterator,\n  isValidHeaderName,\n  isValidHeaderValue,\n  isErrorLike,\n  fullyReadBody,\n  readableStreamClose,\n  isomorphicEncode,\n  urlIsLocal,\n  urlHasHttpsScheme,\n  urlIsHttpHttpsScheme,\n  readAllBytes,\n  simpleRangeHeaderValue,\n  buildContentRange,\n  createInflate,\n  extractMimeType,\n  getDecodeSplit,\n  utf8DecodeBytes,\n  environmentSettingsObject,\n  isOriginIPPotentiallyTrustworthy\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’s 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’s 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’s 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’s 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’s 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’s 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’s 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’s 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’s 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 { utf8DecodeBytes } = require('./util')\nconst { HTTP_TOKEN_CODEPOINTS, isomorphicDecode } = require('./data-url')\nconst { makeEntry } = require('./formdata')\nconst { webidl } = require('../webidl')\nconst assert = require('node:assert')\n\nconst formDataNameBuffer = Buffer.from('form-data; name=\"')\nconst filenameBuffer = Buffer.from('filename')\nconst dd = Buffer.from('--')\nconst ddcrlf = Buffer.from('--\\r\\n')\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’s 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’s parameters[\"boundary\"] does not exist, return failure.\n  //    Otherwise, let boundary be the result of UTF-8 decoding mimeType’s\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: undici addition, allows leading and trailing CRLFs.\n  while (input[position.position] === 0x0d && input[position.position + 1] === 0x0a) {\n    position.position += 2\n  }\n\n  let trailing = input.length\n\n  while (input[trailing - 1] === 0x0a && input[trailing - 2] === 0x0d) {\n    trailing -= 2\n  }\n\n  if (trailing !== input.length) {\n    input = input.subarray(0, trailing)\n  }\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: a body does NOT need to end with CRLF. It can end with --.\n    if (\n      (position.position === input.length - 2 && bufferStartsWith(input, dd, position)) ||\n      (position.position === input.length - 4 && bufferStartsWith(input, ddcrlf, position))\n    ) {\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 = utf8DecodeBytes(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 * @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        // 1. Set name and filename to null.\n        name = filename = null\n\n        // 2. If position does not point to a sequence of bytes starting with\n        //    `form-data; name=\"`, return failure.\n        if (!bufferStartsWith(input, formDataNameBuffer, position)) {\n          throw parsingError('expected form-data; name=\" for content-disposition header')\n        }\n\n        // 3. Advance position so it points at the byte after the next 0x22 (\")\n        //    byte (the one in the sequence of bytes matched above).\n        position.position += 17\n\n        // 4. Set name to the result of parsing a multipart/form-data name given\n        //    input and position, if the result is not failure. Otherwise, return\n        //    failure.\n        name = parseMultipartFormDataName(input, position)\n\n        // 5. If position points to a sequence of bytes starting with `; filename=\"`:\n        if (input[position.position] === 0x3b /* ; */ && input[position.position + 1] === 0x20 /* ' ' */) {\n          const at = { position: position.position + 2 }\n\n          if (bufferStartsWith(input, filenameBuffer, at)) {\n            if (input[at.position + 8] === 0x2a /* '*' */) {\n              at.position += 10 // skip past filename*=\n\n              // Remove leading http tab and spaces. See RFC for examples.\n              // https://datatracker.ietf.org/doc/html/rfc6266#section-5\n              collectASequenceOfBytes(\n                (char) => char === 0x20 || char === 0x09,\n                input,\n                at\n              )\n\n              const headerValue = collectASequenceOfBytes(\n                (char) => char !== 0x20 && char !== 0x0d && char !== 0x0a, // ' ' or CRLF\n                input,\n                at\n              )\n\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''\n              filename = decodeURIComponent(new TextDecoder().decode(headerValue.subarray(7)))\n\n              position.position = at.position\n            } else {\n              // 1. Advance position so it points at the byte after the next 0x22 (\") byte\n              //    (the one in the sequence of bytes matched above).\n              position.position += 11\n\n              // Remove leading http tab and spaces. See RFC for examples.\n              // https://datatracker.ietf.org/doc/html/rfc6266#section-5\n              collectASequenceOfBytes(\n                (char) => char === 0x20 || char === 0x09,\n                input,\n                position\n              )\n\n              position.position++ // skip past \" after removing whitespace\n\n              // 2. Set filename to the result of parsing a multipart/form-data name given\n              //    input and position, if the result is not failure. Otherwise, return failure.\n              filename = parseMultipartFormDataName(input, position)\n            }\n          }\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 * @see https://andreubotella.github.io/multipart-form-data/#parse-a-multipart-form-data-name\n * @param {Buffer} input\n * @param {{ position: number }} position\n */\nfunction parseMultipartFormDataName (input, position) {\n  // 1. Assert: The byte at (position - 1) is 0x22 (\").\n  assert(input[position.position - 1] === 0x22)\n\n  // 2. Let name be the result of collecting a sequence of bytes that are not 0x0A (LF), 0x0D (CR) or 0x22 (\"), given position.\n  /** @type {string | Buffer} */\n  let name = collectASequenceOfBytes(\n    (char) => char !== 0x0a && char !== 0x0d && char !== 0x22,\n    input,\n    position\n  )\n\n  // 3. If the byte at position is not 0x22 (\"), return failure. Otherwise, advance position by 1.\n  if (input[position.position] !== 0x22) {\n    throw parsingError('expected \"')\n  } else {\n    position.position++\n  }\n\n  // 4. Replace any occurrence of the following subsequences in name with the given byte:\n  // - `%0A`: 0x0A (LF)\n  // - `%0D`: 0x0D (CR)\n  // - `%22`: 0x22 (\")\n  name = new TextDecoder().decode(name)\n    .replace(/%0A/ig, '\\n')\n    .replace(/%0D/ig, '\\r')\n    .replace(/%22/g, '\"')\n\n  // 5. Return the UTF-8 decoding without BOM of name.\n  return name\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\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  utf8DecodeBytes\n} = require('./util')\nconst { FormData, setFormDataState } = require('./formdata')\nconst { webidl } = require('../webidl')\nconst assert = require('node:assert')\nconst { isErrored, isDisturbed } = require('node:stream')\nconst { isArrayBuffer } = require('node:util/types')\nconst { serializeAMimeType } = require('./data-url')\nconst { multipartFormDataParser } = require('./formdata-parser')\nconst { createDeferredPromise } = require('../../util/promise')\n\nlet random\n\ntry {\n  const crypto = require('node:crypto')\n  random = (max) => crypto.randomInt(0, max)\n} catch {\n  random = (max) => Math.floor(Math.random() * max)\n}\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\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’s 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 (controller) {\n        const buffer = typeof source === 'string' ? textEncoder.encode(source) : source\n\n        if (buffer.byteLength) {\n          controller.enqueue(buffer)\n        }\n\n        queueMicrotask(() => readableStreamClose(controller))\n      },\n      start () {},\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’s 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    source = isArrayBuffer(object)\n      ? new Uint8Array(object.slice())\n      : new Uint8Array(object.buffer.slice(object.byteOffset, object.byteOffset + object.byteLength))\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ärting <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’s 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’s size.\n    length = object.size\n\n    // If object’s 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’s length.\n  if (typeof source === 'string' || util.isBuffer(source)) {\n    length = Buffer.byteLength(source)\n  }\n\n  // 12. If action is non-null, then run these steps in in parallel:\n  if (action != null) {\n    // Run action.\n    let iterator\n    stream = new ReadableStream({\n      async start () {\n        iterator = action(object)[Symbol.asyncIterator]()\n      },\n      async pull (controller) {\n        const { value, done } = await iterator.next()\n        if (done) {\n          // When running action is done, close stream.\n          queueMicrotask(() => {\n            controller.close()\n            controller.byobRequest?.respond(0)\n          })\n        } else {\n          // Whenever one or more bytes are available and stream is not errored,\n          // enqueue a Uint8Array wrapping an ArrayBuffer containing the available\n          // bytes into stream.\n          if (!isErrored(stream)) {\n            const buffer = new Uint8Array(value)\n            if (buffer.byteLength) {\n              controller.enqueue(buffer)\n            }\n          }\n        }\n        return controller.desiredSize > 0\n      },\n      async cancel (reason) {\n        await iterator.return()\n      },\n      type: 'bytes'\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 « out1, out2 » be the result of teeing body’s stream.\n  const { 0: out1, 1: out2 } = body.stream.tee()\n\n  // 2. Set body’s 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’s\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’s 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’s 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  const state = getInternalState(object)\n\n  // 1. If object is unusable, then return a promise rejected\n  //    with a TypeError.\n  if (bodyUnusable(state)) {\n    return Promise.reject(new TypeError('Body is unusable: Body has already been read'))\n  }\n\n  if (state.aborted) {\n    return Promise.reject(new DOMException('The operation was aborted.', 'AbortError'))\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’s body is null, then run successSteps with an\n  //    empty byte sequence.\n  if (state.body == null) {\n    successSteps(Buffer.allocUnsafe(0))\n    return promise.promise\n  }\n\n  // 6. Otherwise, fully read object’s body given successSteps,\n  //    errorSteps, and object’s relevant global object.\n  fullyReadBody(state.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’s stream is disturbed or locked.\n  return body != null && (body.stream.locked || util.isDisturbed(body.stream))\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 * @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’s request’s header list.\n  // 3. Otherwise, set headers to requestOrResponse’s response’s 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  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\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 = true\n  } else if (process.env.UNDICI_NO_WASM_SIMD === '0') {\n    useWasmSIMD = false\n  }\n\n  if (useWasmSIMD) {\n    try {\n      mod = new WebAssembly.Module(require('../llhttp/llhttp_simd-wasm.js'))\n      /* istanbul ignore next */\n    } catch {\n    }\n  }\n\n  /* istanbul ignore next */\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        /* istanbul ignore next */\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.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, new WeakRef(this))\n        } else {\n          this.timeout = setTimeout(onParserTimeout, delay, new WeakRef(this))\n          this.timeout?.unref()\n        }\n      }\n\n      this.timeoutValue = delay\n    } else if (this.timeout) {\n      // istanbul ignore else: only for jest\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      // istanbul ignore else: only for jest\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          const ptr = llhttp.llhttp_get_error_reason(this.ptr)\n          let message = ''\n          /* istanbul ignore else: difficult to make a test case for */\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          throw new HTTPParserError(message, constants.ERROR[ret], data)\n        }\n      }\n    } catch (err) {\n      util.destroy(socket, err)\n    }\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    /* istanbul ignore next: difficult to make a test case for */\n    if (socket.destroyed) {\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    /* istanbul ignore next: difficult to make a test case for */\n    if (socket.destroyed) {\n      return -1\n    }\n\n    const request = client[kQueue][client[kRunningIdx]]\n\n    /* istanbul ignore next: difficult to make a test case for */\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      // istanbul ignore else: only for jest\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      // istanbul ignore else: only for jest\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    /* istanbul ignore next: should be handled by llhttp? */\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\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 (parser) {\n  const { socket, timeoutType, client, paused } = parser.deref()\n\n  /* istanbul ignore else */\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[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]) {\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    // We treat all incoming data so for as a valid response.\n    parser.onMessageComplete()\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    // We treat all incoming data so far as a valid response.\n    parser.onMessageComplete()\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  if (parser) {\n    if (!this[kError] && parser.statusCode && !parser.shouldKeepAlive) {\n      // We treat all incoming data so far as a valid response.\n      parser.onMessageComplete()\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\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[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 && body.type) {\n    headers.push('content-type', body.type)\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\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  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  /* istanbul ignore else: assertion */\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        // istanbul ignore else: only for jest\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      // istanbul ignore else: only for jest\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} = 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  kHTTP2Session,\n  kResume,\n  kSize,\n  kHTTPContext,\n  kClosed,\n  kBodyTimeout\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  }\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 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    }\n  })\n\n  session[kOpenStreams] = 0\n  session[kClient] = client\n  session[kSocket] = socket\n  session[kHTTP2Session] = null\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\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    write (request) {\n      return writeH2(client, request)\n    },\n    resume () {\n      resumeH2(client)\n    },\n    destroy (err, callback) {\n      if (socket[kClosed]) {\n        queueMicrotask(callback)\n      } else {\n        socket.destroy(err).on('close', callback)\n      }\n    },\n    get destroyed () {\n      return socket.destroyed\n    },\n    busy () {\n      return false\n    }\n  }\n}\n\nfunction resumeH2 (client) {\n  const socket = client[kSocket]\n\n  if (socket?.destroyed === false) {\n    if (client[kSize] === 0 || client[kMaxConcurrentStreams] === 0) {\n      socket.unref()\n      client[kHTTP2Session].unref()\n    } else {\n      socket.ref()\n      client[kHTTP2Session].ref()\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 */\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    util.errorRequest(client, request, err)\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 } = 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 (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  }\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  const requestTimeout = 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) {\n    util.errorRequest(client, request, new Error('Upgrade not supported for H2'))\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      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 (method === 'CONNECT') {\n    session.ref()\n    // 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\n    if (!stream.pending) {\n      request.onUpgrade(null, null, stream)\n      ++session[kOpenStreams]\n      client[kQueue][client[kRunningIdx]++] = null\n    } else {\n      stream.once('ready', () => {\n        request.onUpgrade(null, null, stream)\n        ++session[kOpenStreams]\n        client[kQueue][client[kRunningIdx]++] = null\n      })\n    }\n\n    stream.once('close', () => {\n      session[kOpenStreams] -= 1\n      if (session[kOpenStreams] === 0) session.unref()\n    })\n    stream.setTimeout(requestTimeout)\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\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 (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  if (contentLength != null) {\n    assert(body, '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\n    stream.once('continue', writeBodyH2)\n  } else {\n    stream = session.request(headers, {\n      endStream: shouldEndStream,\n      signal\n    })\n\n    writeBodyH2()\n  }\n\n  // Increment counter as we have new streams open\n  ++session[kOpenStreams]\n  stream.setTimeout(requestTimeout)\n\n  stream.once('response', headers => {\n    const { [HTTP2_HEADER_STATUS]: statusCode, ...realHeaders } = headers\n    request.onResponseStarted()\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\n  stream.on('data', (chunk) => {\n    if (request.onData(chunk) === false) {\n      stream.pause()\n    }\n  })\n\n  stream.once('end', (err) => {\n    stream.removeAllListeners('data')\n    // When state is null, it means we haven't consumed body and the stream still do not have\n    // a state.\n    // Present specially when using pipeline or stream\n    if (stream.state?.state == null || stream.state.state < 6) {\n      // Do not complete the request if it was aborted\n      // Not prone to happen for as safety net to avoid race conditions with 'trailers'\n      if (!request.aborted && !request.completed) {\n        request.onComplete({})\n      }\n\n      client[kQueue][client[kRunningIdx]++] = null\n      client[kResume]()\n    } else {\n      // Stream is closed or half-closed-remote (6), decrement counter and cleanup\n      // It does not have sense to continue working with the stream as we do not\n      // have yet RST_STREAM support on client-side\n      --session[kOpenStreams]\n      if (session[kOpenStreams] === 0) {\n        session.unref()\n      }\n\n      abort(err ?? new InformationalError('HTTP/2: stream half-closed (remote)'))\n      client[kQueue][client[kRunningIdx]++] = null\n      client[kPendingIdx] = client[kRunningIdx]\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\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 = new InformationalError(`HTTP/2: \"stream timeout after ${requestTimeout}\"`)\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    request.onComplete(trailers)\n  })\n\n  return true\n\n  function writeBodyH2 () {\n    /* istanbul ignore else: assertion */\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  kResume\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  } = {}) {\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    super()\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    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[kMaxConcurrentStreams] = maxConcurrentStreams != null ? maxConcurrentStreams : 100 // Max peerConcurrentStreams for a Node h2 server\n    this[kHTTPContext] = null\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  /* istanbul ignore: only used for test */\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        util.errorRequest(this, request, err)\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      util.errorRequest(client, request, err)\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  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}\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 (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 = new Array(this[kClients].length)\n      for (let i = 0; i < this[kClients].length; i++) {\n        closeAll[i] = this[kClients][i].close()\n      }\n      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 = new Array(this[kClients].length)\n      for (let i = 0; i < this[kClients].length; i++) {\n        closeAll[i] = this[kClients][i].close()\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()\n\n    this[kConnections] = connections || null\n    this[kUrl] = util.parseOrigin(origin)\n    this[kOptions] = { ...util.deepClone(options), connect, allowH2, clientTtl }\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 { parseOrigin } = 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, ...opts } = {}) {\n    if (typeof factory !== 'function') {\n      throw new InvalidArgumentError('factory must be a function.')\n    }\n\n    super()\n\n    this[kOptions] = opts\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 = 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, Object.assign({}, 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 = 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  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 { 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()\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            result.dispatcher.close()\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 { 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')\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      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    this[kClient] = clientFactory(url, { connect })\n    this[kAgent] = new Agent({\n      ...opts,\n      factory,\n      connect: async (opts, callback) => {\n        let requestedPath = opts.host\n        if (!opts.port) {\n          requestedPath += `:${defaultProtocolPort(opts.protocol)}`\n        }\n        try {\n          const { socket, statusCode } = await this[kClient].connect({\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          if (statusCode !== 200) {\n            socket.on('error', noop).destroy()\n            callback(new RequestAbortedError(`Proxy response (${statusCode}) !== 200 when HTTP Tunneling`))\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    return Promise.all([\n      this[kAgent].close(),\n      this[kClient].close()\n    ])\n  }\n\n  [kDestroy] () {\n    return Promise.all([\n      this[kAgent].destroy(),\n      this[kClient].destroy()\n    ])\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      if (!/^[.*]/.test(entry.hostname)) {\n        // No wildcards, so don't proxy only if there is not an exact match.\n        if (hostname === entry.hostname) {\n          return false\n        }\n      } else {\n        // Don't proxy if the hostname ends with the no_proxy host.\n        if (hostname.endsWith(entry.hostname.replace(/^\\*/, ''))) {\n          return false\n        }\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        hostname: (parsed ? parsed[1] : entry).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\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        this.headersSent = true\n        this.handler.onResponseStart?.(controller, statusCode, headers, statusMessage)\n      } else {\n        this.error = err\n      }\n\n      return\n    }\n\n    if (isDisturbed(this.opts.body)) {\n      this.headersSent = true\n      this.handler.onResponseStart?.(controller, statusCode, headers, statusMessage)\n      return\n    }\n\n    function shouldRetry (passedErr) {\n      if (passedErr) {\n        this.headersSent = true\n\n        this.headersSent = true\n        this.handler.onResponseStart?.(controller, statusCode, headers, statusMessage)\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  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      const { start, size, end = size ? size - 1 : null } = contentRange\n\n      assert(this.start === start, 'content-range mismatch')\n      assert(this.end == null || this.end === end, 'content-range mismatch')\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        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)) {\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'\nconst { connect } = require('node:net')\n\nconst { kClose, kDestroy } = require('../core/symbols')\nconst { InvalidArgumentError } = require('../core/errors')\nconst util = require('../core/util')\n\nconst Client = require('./client')\nconst DispatcherBase = require('./dispatcher-base')\n\nclass H2CClient extends DispatcherBase {\n  #client = null\n\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 { connect, 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()\n\n    this.#client = new Client(origin, {\n      ...opts,\n      connect: this.#buildConnector(connect),\n      maxConcurrentStreams: defaultMaxConcurrentStreams,\n      pipelining: defaultPipelining,\n      allowH2: true\n    })\n  }\n\n  #buildConnector (connectOpts) {\n    return (opts, callback) => {\n      const timeout = connectOpts?.connectOpts ?? 10e3\n      const { hostname, port, pathname } = opts\n      const socket = connect({\n        ...opts,\n        host: hostname,\n        port,\n        pathname\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 (opts.keepAlive == null || opts.keepAlive) {\n        const keepAliveInitialDelay =\n          opts.keepAliveInitialDelay == null ? 60e3 : opts.keepAliveInitialDelay\n        socket.setKeepAlive(true, keepAliveInitialDelay)\n      }\n\n      socket.alpnProtocol = 'h2'\n\n      const clearConnectTimeout = util.setupConnectTimeout(\n        new WeakRef(socket),\n        { timeout, hostname, port }\n      )\n\n      socket\n        .setNoDelay(true)\n        .once('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\n  dispatch (opts, handler) {\n    return this.#client.dispatch(opts, handler)\n  }\n\n  [kClose] () {\n    return this.#client.close()\n  }\n\n  [kDestroy] () {\n    return this.#client.destroy()\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 && (typeof highWaterMark !== 'number' || 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          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 { 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(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}\n","'use strict'\n\nconst { MockNotMatchedError } = require('./mock-errors')\nconst {\n  kDispatches,\n  kMockAgent,\n  kOriginalDispatch,\n  kOrigin,\n  kGetNetConnect\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  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  // Handle the request with a delay if necessary\n  if (typeof delay === 'number' && delay > 0) {\n    setTimeout(() => {\n      handleReply(this[kDispatches])\n    }, delay)\n  } else {\n    handleReply(this[kDispatches])\n  }\n\n  function handleReply (mockDispatches, _data = data) {\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      body.then((newData) => handleReply(mockDispatches, newData))\n      return\n    }\n\n    const responseData = getResponseData(body)\n    const responseHeaders = generateKeyValues(headers)\n    const responseTrailers = generateKeyValues(trailers)\n\n    handler.onConnect?.(err => handler.onError(err), null)\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          if (netConnect === false) {\n            throw new MockNotMatchedError(`${error.message}: subsequent request to origin ${origin} was not allowed (net.connect disabled)`)\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)`)\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 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}\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) {\n  switch (options.operator) {\n    case 'OR':\n      store.push(...handler(criteria))\n\n      return store\n    case 'AND':\n      return handler.call({ logs: store }, criteria)\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) => {\n    if (typeof parameterValue === 'string' || parameterValue == null) {\n      return this.logs.filter((log) => {\n        return log[parameterName] === parameterValue\n      })\n    }\n    if (parameterValue instanceof RegExp) {\n      return this.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 = []\n      if ('protocol' in criteria) {\n        maybeDuplicatedLogsFiltered = handleFilterCallsWithOptions(criteria.protocol, finalOptions, this.filterCallsByProtocol, maybeDuplicatedLogsFiltered)\n      }\n      if ('host' in criteria) {\n        maybeDuplicatedLogsFiltered = handleFilterCallsWithOptions(criteria.host, finalOptions, this.filterCallsByHost, maybeDuplicatedLogsFiltered)\n      }\n      if ('port' in criteria) {\n        maybeDuplicatedLogsFiltered = handleFilterCallsWithOptions(criteria.port, finalOptions, this.filterCallsByPort, maybeDuplicatedLogsFiltered)\n      }\n      if ('origin' in criteria) {\n        maybeDuplicatedLogsFiltered = handleFilterCallsWithOptions(criteria.origin, finalOptions, this.filterCallsByOrigin, maybeDuplicatedLogsFiltered)\n      }\n      if ('path' in criteria) {\n        maybeDuplicatedLogsFiltered = handleFilterCallsWithOptions(criteria.path, finalOptions, this.filterCallsByPath, maybeDuplicatedLogsFiltered)\n      }\n      if ('hash' in criteria) {\n        maybeDuplicatedLogsFiltered = handleFilterCallsWithOptions(criteria.hash, finalOptions, this.filterCallsByHash, maybeDuplicatedLogsFiltered)\n      }\n      if ('fullUrl' in criteria) {\n        maybeDuplicatedLogsFiltered = handleFilterCallsWithOptions(criteria.fullUrl, finalOptions, this.filterCallsByFullUrl, maybeDuplicatedLogsFiltered)\n      }\n      if ('method' in criteria) {\n        maybeDuplicatedLogsFiltered = handleFilterCallsWithOptions(criteria.method, finalOptions, this.filterCallsByMethod, maybeDuplicatedLogsFiltered)\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 ? '✅' : 'Y '\nconst NOT_PERSISTENT = process.versions.icu ? '❌' : 'N '\n\n/**\n * Gets the output of `console.table(…)` 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 } = 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    const originKey = this[kIgnoreTrailingSlash]\n      ? origin.replace(/\\/$/, '')\n      : origin\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    // 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')\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\nlet crypto\ntry {\n  crypto = require('node:crypto')\n} catch { /* Fallback if crypto is not available */ }\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    const url = new URL(requestOpts.path, requestOpts.origin).toString()\n    if (this.#isUrlExcluded(url)) {\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   * 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    const url = new URL(requestOpts.path, requestOpts.origin).toString()\n    if (this.#isUrlExcluded(url)) {\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    if (this[kSnapshotMode] === 'record' || this[kSnapshotMode] === 'update') {\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    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        }).then(() => {\n          handler.onResponseEnd(controller, trailers)\n        }).catch((error) => {\n          handler.onResponseError(controller, error)\n        })\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.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  Object.defineProperty(globalThis, globalDispatcher, {\n    value: agent,\n    writable: true,\n    enumerable: false,\n    configurable: false\n  })\n}\n\nfunction getGlobalDispatcher () {\n  return globalThis[globalDispatcher]\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 = typeof headers[Symbol.iterator] === 'function' ? headers : Object.entries(headers)\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  #controller = null\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    this.#controller = controller\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    if (this.#dumped) {\n      return\n    }\n\n    // On network errors before connect, controller will be null\n    err = this.#controller?.reason ?? err\n\n    super.onResponseError(controller, err)\n  }\n\n  onResponseData (controller, chunk) {\n    this.#size = this.#size + chunk.length\n\n    if (this.#size >= this.#maxSize) {\n      this.#dumped = true\n\n      if (this.aborted === true) {\n        super.onResponseError(controller, this.reason)\n      } else {\n        super.onResponseEnd(controller, {})\n      }\n    }\n\n    return true\n  }\n\n  onResponseEnd (controller, trailers) {\n    if (this.#dumped) {\n      return\n    }\n\n    if (this.#controller.aborted === true) {\n      super.onResponseError(controller, this.reason)\n      return\n    }\n\n    super.onResponseEnd(controller, 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\nclass DNSInstance {\n  #maxTTL = 0\n  #maxItems = 0\n  #records = new Map()\n  dualStack = true\n  affinity = null\n  lookup = null\n  pick = 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  }\n\n  get full () {\n    return this.#records.size === this.#maxItems\n  }\n\n  runLookup (origin, opts, cb) {\n    const ips = this.#records.get(origin.hostname)\n\n    // If full, we just return the origin\n    if (ips == null && this.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.#records.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.#records.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.#records.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    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      } 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    this.#records.set(origin.hostname, records)\n  }\n\n  deleteRecords (origin) {\n    this.#records.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          }\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  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  }\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: {\n            host: origin.host,\n            ...origDispatchOpts.headers\n          }\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} = require('../core/util')\n\nconst { serializePathWithQuery } = require('../core/util')\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(opts.path)) {\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\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[Symbol.iterator] === 'function') {\n    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      headers[key.toLowerCase()] = val\n    }\n  } else if (typeof opts.headers === 'object') {\n    headers = {}\n\n    for (const key of Object.keys(opts.headers)) {\n      headers[key.toLowerCase()] = opts.headers[key]\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\n  let directives\n  if (Array.isArray(header)) {\n    directives = []\n\n    for (const directive of header) {\n      directives.push(...directive.split(','))\n    }\n  } else {\n    directives = header.split(',')\n  }\n\n  for (let i = 0; i < directives.length; i++) {\n    const directive = directives[i].toLowerCase()\n    const keyValueDelimiter = directive.indexOf('=')\n\n    let key\n    let value\n    if (keyValueDelimiter !== -1) {\n      key = directive.substring(0, keyValueDelimiter).trimStart()\n      value = directive.substring(keyValueDelimiter + 1)\n    } else {\n      key = directive.trim()\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 (value === undefined || value[0] === ' ') {\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        const parsedValue = parseInt(value, 10)\n        // eslint-disable-next-line no-self-compare\n        if (parsedValue !== parsedValue) {\n          continue\n        }\n\n        if (key === 'max-age' && key in output && output[key] >= parsedValue) {\n          continue\n        }\n\n        output[key] = parsedValue\n\n        break\n      }\n      case 'private':\n      case 'no-cache': {\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 ends in a\n          //  quote. We can then just splice all of the parts in between the\n          //  starting quote and the ending quote out of the directives array\n          //  and 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\n            // Add the first header on and cut off the leading quote\n            const headers = [value.substring(1)]\n\n            let foundEndingQuote = value[value.length - 1] === '\"'\n            if (!foundEndingQuote) {\n              // Something like `no-cache=\"some-header, another-header\"`\n              //  This can still be something invalid, e.g. `no-cache=\"some-header, ...`\n              for (let j = i + 1; j < directives.length; j++) {\n                const nextPart = directives[j]\n                const nextPartLength = nextPart.length\n\n                headers.push(nextPart.trim())\n\n                if (nextPartLength !== 0 && nextPart[nextPartLength - 1] === '\"') {\n                  foundEndingQuote = true\n                  break\n                }\n              }\n            }\n\n            if (foundEndingQuote) {\n              let lastHeader = headers[headers.length - 1]\n              if (lastHeader[lastHeader.length - 1] === '\"') {\n                lastHeader = lastHeader.substring(0, lastHeader.length - 1)\n                headers[headers.length - 1] = lastHeader\n              }\n\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            if (key in output) {\n              output[key] = output[key].concat(value)\n            } else {\n              output[key] = [value]\n            }\n          }\n\n          break\n        }\n      }\n      // eslint-disable-next-line no-fallthrough\n      case 'public':\n      case 'no-store':\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 (value) {\n          // These are qualified (something like `public=...`) when they aren't\n          //  allowed to be, skip\n          continue\n        }\n\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 * @param {Record<string, string | string[]>} headers Request headers\n * @returns {Record<string, string | string[]>}\n */\nfunction parseVaryHeader (varyHeader, headers) {\n  if (typeof varyHeader === 'string' && varyHeader.includes('*')) {\n    return headers\n  }\n\n  const output = /** @type {Record<string, string | string[] | null>} */ ({})\n\n  const varyingHeaders = typeof varyHeader === 'string'\n    ? varyHeader.split(',')\n    : varyHeader\n\n  for (const header of varyingHeaders) {\n    const trimmedHeader = header.trim().toLowerCase()\n\n    output[trimmedHeader] = headers[trimmedHeader] ?? null\n  }\n\n  return output\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 (!safeHTTPMethods.includes(method)) {\n      throw new TypeError(`element of ${name}-array needs to be one of following values: ${safeHTTPMethods.join(', ')}, got ${method}`)\n    }\n  }\n}\n\nmodule.exports = {\n  makeCacheKey,\n  normalizeHeaders,\n  assertCacheKey,\n  assertCacheValue,\n  parseCacheControlHeader,\n  parseVaryHeader,\n  isEtagUsable,\n  assertCacheMethods,\n  assertCacheStore\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\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  const result = new Date(Date.UTC(year, monthIdx, day, hour, minute, second))\n  return result.getUTCDay() === weekday ? result : undefined\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  const result = new Date(Date.UTC(year, monthIdx, day, hour, minute, second))\n  return result.getUTCDay() === weekday ? result : undefined\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  const result = new Date(Date.UTC(year, monthIdx, day, hour, minute, second))\n  return result.getUTCDay() === weekday ? result : undefined\n}\n\nmodule.exports = {\n  parseHttpDate\n}\n","'use strict'\n\nconst util = require('../core/util')\nconst {\n  parseCacheControlHeader,\n  parseVaryHeader,\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 and 304 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, 304\n]\n\nconst MAX_RESPONSE_AGE = 2147483647000\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\n    if (\n      !util.safeHTTPMethods.includes(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      try {\n        this.#store.delete(this.#cacheKey)?.catch?.(noop)\n      } catch {\n        // Fail silently\n      }\n      return downstreamOnHeaders()\n    }\n\n    const cacheControlHeader = resHeaders['cache-control']\n    const heuristicallyCacheable = resHeaders['last-modified'] && HEURISTICALLY_CACHEABLE_STATUS_CODES.includes(statusCode)\n    if (\n      !cacheControlHeader &&\n      !resHeaders['expires'] &&\n      !heuristicallyCacheable &&\n      !this.#cacheByDefault\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    const cacheControlDirectives = cacheControlHeader ? parseCacheControlHeader(cacheControlHeader) : {}\n    if (!canCacheResponse(this.#cacheType, statusCode, resHeaders, cacheControlDirectives)) {\n      return downstreamOnHeaders()\n    }\n\n    const now = Date.now()\n    const resAge = resHeaders.age ? getAge(resHeaders.age) : undefined\n    if (resAge && resAge >= MAX_RESPONSE_AGE) {\n      // Response considered stale\n      return downstreamOnHeaders()\n    }\n\n    const resDate = typeof resHeaders.date === 'string'\n      ? parseHttpDate(resHeaders.date)\n      : undefined\n\n    const staleAt =\n      determineStaleAt(this.#cacheType, now, resAge, resHeaders, resDate, cacheControlDirectives) ??\n      this.#cacheByDefault\n    if (staleAt === undefined || (resAge && resAge > staleAt)) {\n      return downstreamOnHeaders()\n    }\n\n    const baseTime = resDate ? resDate.getTime() : now\n    const absoluteStaleAt = staleAt + baseTime\n    if (now >= absoluteStaleAt) {\n      // Response is already stale\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 deleteAt = determineDeleteAt(baseTime, 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: resAge ? now - resAge : now,\n      staleAt: absoluteStaleAt,\n      deleteAt\n    }\n\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    if (!this.#writeStream) {\n      return downstreamOnHeaders()\n    }\n\n    const handler = this\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    return downstreamOnHeaders()\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 * @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 {number} statusCode\n * @param {import('../../types/header.d.ts').IncomingHttpHeaders} resHeaders\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives} cacheControlDirectives\n */\nfunction canCacheResponse (cacheType, statusCode, resHeaders, cacheControlDirectives) {\n  // Status code must be final and understood.\n  if (statusCode < 200 || NOT_UNDERSTOOD_STATUS_CODES.includes(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 (!HEURISTICALLY_CACHEABLE_STATUS_CODES.includes(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' && cacheControlDirectives.private === true) {\n    return false\n  }\n\n  // https://www.rfc-editor.org/rfc/rfc9111.html#section-4.1-5\n  if (resHeaders.vary?.includes('*')) {\n    return false\n  }\n\n  // https://www.rfc-editor.org/rfc/rfc9111.html#name-storing-responses-to-authen\n  if (resHeaders.authorization) {\n    if (!cacheControlDirectives.public || typeof resHeaders.authorization !== 'string') {\n      return false\n    }\n\n    if (\n      Array.isArray(cacheControlDirectives['no-cache']) &&\n      cacheControlDirectives['no-cache'].includes('authorization')\n    ) {\n      return false\n    }\n\n    if (\n      Array.isArray(cacheControlDirectives['private']) &&\n      cacheControlDirectives['private'].includes('authorization')\n    ) {\n      return false\n    }\n  }\n\n  return true\n}\n\n/**\n * @param {string | string[]} ageHeader\n * @returns {number | undefined}\n */\nfunction getAge (ageHeader) {\n  const age = parseInt(Array.isArray(ageHeader) ? ageHeader[0] : ageHeader)\n\n  return isNaN(age) ? undefined : 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    const sMaxAge = cacheControlDirectives['s-maxage']\n    if (sMaxAge !== undefined) {\n      return sMaxAge > 0 ? sMaxAge * 1000 : undefined\n    }\n  }\n\n  const maxAge = cacheControlDirectives['max-age']\n  if (maxAge !== undefined) {\n    return maxAge > 0 ? maxAge * 1000 : undefined\n  }\n\n  if (typeof resHeaders.expires === 'string') {\n    // https://www.rfc-editor.org/rfc/rfc9111.html#section-5.3\n    const expiresDate = parseHttpDate(resHeaders.expires)\n    if (expiresDate) {\n      if (now >= expiresDate.getTime()) {\n        return undefined\n      }\n\n      if (responseDate) {\n        if (responseDate >= expiresDate) {\n          return undefined\n        }\n\n        if (age !== undefined && age > (expiresDate - responseDate)) {\n          return undefined\n        }\n      }\n\n      return expiresDate.getTime() - now\n    }\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 = new Date(resHeaders['last-modified'])\n    if (isValidDate(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 31536000\n  }\n\n  return undefined\n}\n\n/**\n * @param {number} now\n * @param {import('../../types/cache-interceptor.d.ts').default.CacheControlDirectives} cacheControlDirectives\n * @param {number} staleAt\n */\nfunction determineDeleteAt (now, 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 (staleWhileRevalidate === -Infinity && staleIfError === -Infinity) {\n    immutable = now + 31536000000\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    if (Array.isArray(resHeaders['connection'])) {\n      // connection: a\n      // connection: b\n      headersToRemove.push(...resHeaders['connection'].map(header => header.trim()))\n    } else {\n      // connection: a, b\n      headersToRemove.push(...resHeaders['connection'].split(',').map(header => header.trim()))\n    }\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 (resHeaders[headerName]) {\n      strippedHeaders ??= { ...resHeaders }\n      delete strippedHeaders[headerName]\n    }\n  }\n\n  return strippedHeaders ?? resHeaders\n}\n\n/**\n * @param {Date} date\n * @returns {boolean}\n */\nfunction isValidDate (date) {\n  return date instanceof Date && Number.isFinite(date.valueOf())\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  return entries.find((entry) => (\n    entry.deleteAt > now &&\n    entry.method === key.method &&\n    (entry.vary == null || Object.keys(entry.vary).every(headerName => {\n      if (entry.vary[headerName] === null) {\n        return key.headers[headerName] === undefined\n      }\n\n      return entry.vary[headerName] === key.headers[headerName]\n    }))\n  ))\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 {((boolean, any) => 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 {(boolean) => 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)\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 } = require('../util/cache.js')\nconst { AbortError } = require('../core/errors.js')\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 * @returns {boolean}\n */\nfunction needsRevalidation (result, cacheControlDirectives) {\n  if (cacheControlDirectives?.['no-cache']) {\n    // Always revalidate requests with the no-cache request directive\n    return true\n  }\n\n  if (result.cacheControlDirectives?.['no-cache'] && !Array.isArray(result.cacheControlDirectives['no-cache'])) {\n    // Always revalidate requests with unqualified no-cache response directive\n    return true\n  }\n\n  const now = Date.now()\n  if (now > result.staleAt) {\n    // Response is stale\n    if (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 * @returns {boolean}\n */\nfunction withinStaleWhileRevalidateWindow (result) {\n  const staleWhileRevalidate = result.cacheControlDirectives?.['stale-while-revalidate']\n  if (!staleWhileRevalidate) {\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, [], () => {}, '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  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  if (reqCacheControl?.['max-age'] && age >= reqCacheControl['max-age']) {\n    // Response is considered expired for this specific request\n    //  https://www.rfc-editor.org/rfc/rfc9111.html#section-5.2.1.1\n    return dispatch(opts, handler)\n  }\n\n  // Check if the response is stale\n  if (needsRevalidation(result, reqCacheControl)) {\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\n    if (withinStaleWhileRevalidateWindow(result)) {\n      // Serve stale response immediately\n      sendCachedValue(handler, opts, result, age, null, true)\n\n      // Start background revalidation (fire-and-forget)\n      queueMicrotask(() => {\n        let headers = {\n          ...opts.headers,\n          'if-modified-since': 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          headers = {\n            ...headers,\n            ...result.vary\n          }\n        }\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    const staleIfErrorExpiry = result.cacheControlDirectives['stale-if-error'] ?? reqCacheControl?.['stale-if-error']\n    if (staleIfErrorExpiry) {\n      withinStaleIfErrorThreshold = now < (result.staleAt + (staleIfErrorExpiry * 1000))\n    }\n\n    let headers = {\n      ...opts.headers,\n      'if-modified-since': 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      headers = {\n        ...headers,\n        ...result.vary\n      }\n    }\n\n    // We need to revalidate the response\n    return dispatch(\n      {\n        ...opts,\n        headers\n      },\n      new CacheRevalidationHandler(\n        (success, context) => {\n          if (success) {\n            sendCachedValue(handler, opts, result, age, context, true)\n          } else if (util.isStream(result.body)) {\n            result.body.on('error', () => {}).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', () => {}).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  } = 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\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 = util.safeHTTPMethods.filter(method => methods.includes(method) === false)\n\n  return dispatch => {\n    return (opts, handler) => {\n      if (!opts.origin || safeMethodsToNotCache.includes(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      opts = {\n        ...opts,\n        headers: normalizeHeaders(opts)\n      }\n\n      const reqCacheControl = opts.headers?.['cache-control']\n        ? parseCacheControlHeader(opts.headers['cache-control'])\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      const result = store.get(cacheKey)\n\n      if (result && typeof result.then === 'function') {\n        result.then(result => {\n          handleResult(dispatch,\n            globalOpts,\n            cacheKey,\n            handler,\n            opts,\n            reqCacheControl,\n            result\n          )\n        })\n      } else {\n        handleResult(\n          dispatch,\n          globalOpts,\n          cacheKey,\n          handler,\n          opts,\n          reqCacheControl,\n          result\n        )\n      }\n\n      return true\n    }\n  }\n}\n","'use strict'\n\nconst { createInflate, createGunzip, createBrotliDecompress, createZstdDecompress } = require('node:zlib')\nconst { pipeline } = require('node:stream')\nconst DecoratorHandler = require('../handler/decorator-handler')\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  ...(createZstdDecompress ? { zstd: createZstdDecompress } : {})\n}\n\nconst defaultSkipStatusCodes = /** @type {const} */ ([204, 304])\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 */\n\nclass DecompressHandler extends DecoratorHandler {\n  /** @type {Transform[]} */\n  #decompressors = []\n  /** @type {NodeJS.WritableStream&NodeJS.ReadableStream|null} */\n  #pipelineStream\n  /** @type {Readonly<number[]>} */\n  #skipStatusCodes\n  /** @type {boolean} */\n  #skipErrorResponses\n\n  constructor (handler, { skipStatusCodes = defaultSkipStatusCodes, skipErrorResponses = true } = {}) {\n    super(handler)\n    this.#skipStatusCodes = skipStatusCodes\n    this.#skipErrorResponses = skipErrorResponses\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<DecompressorStream>} - Array of decompressor streams\n   */\n  #createDecompressionChain (encodings) {\n    const parts = encodings.split(',')\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    return decompressors\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      let chunk\n      while ((chunk = decompressor.read()) !== null) {\n        const result = super.onResponseData(controller, chunk)\n        if (result === false) {\n          break\n        }\n      }\n    })\n\n    decompressor.on('error', (error) => {\n      super.onResponseError(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      super.onResponseEnd(controller, {})\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    this.#pipelineStream = pipeline(this.#decompressors, (err) => {\n      if (err) {\n        super.onResponseError(controller, err)\n        return\n      }\n      super.onResponseEnd(controller, {})\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    this.#pipelineStream = null\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 (this.#decompressors.length === 1) {\n      this.#setupSingleDecompressor(controller)\n    } else {\n      this.#setupMultipleDecompressors(controller)\n    }\n\n    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.#decompressors[0].end()\n      this.#cleanupDecompressors()\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.#decompressors.length > 0) {\n      for (const decompressor of this.#decompressors) {\n        decompressor.destroy(err)\n      }\n      this.#cleanupDecompressors()\n    }\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 { 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 DESC\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      this.#prune()\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    }\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        return undefined\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    return lhs.every((x, i) => x === rhs[i])\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’s first item, header’s 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 → 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’s guard is \"immutable\", then throw a TypeError.\n  // 4. Otherwise, if headers’s guard is \"request\" and name is a\n  //    forbidden header name, return.\n  // 5. Otherwise, if headers’s 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’s guard is \"response\" and name is a\n  //    forbidden response-header name, return.\n\n  // 7. Append (name, value) to headers’s header list.\n  return getHeadersList(headers).append(name, value, false)\n\n  // 8. If headers’s 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’s 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’s 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’s guard is \"immutable\", then throw a TypeError.\n    // 3. Otherwise, if this’s guard is \"request\" and name is a\n    //    forbidden header name, return.\n    // 4. Otherwise, if this’s 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’s 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’s 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’s header list.\n    // 8. If this’s 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’s 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’s 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’s guard is \"immutable\", then throw a TypeError.\n    // 4. Otherwise, if this’s guard is \"request\" and name is a\n    //    forbidden header name, return.\n    // 5. Otherwise, if this’s guard is \"request-no-cors\" and\n    //    name/value is not a no-CORS-safelisted request-header,\n    //    return.\n    // 6. Otherwise, if this’s 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’s header list.\n    // 8. If this’s 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’s header list does not contain `Set-Cookie`, then return « ».\n    // 2. Return the values of all headers in this’s 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  serializeJavascriptValueToJSONString,\n  isErrorLike,\n  isomorphicEncode,\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')\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’s\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’s 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’s 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’s relevant Realm.\n    const responseObject = fromInnerResponse(makeResponse({}), 'immutable')\n\n    // 5. Set responseObject’s response’s 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’s response’s 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’s response to a new response.\n    this.#state = makeResponse({})\n\n    // 2. Set this’s headers to a new Headers object with this’s relevant\n    // Realm, whose header list is this’s response’s 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’s type, e.g., \"cors\".\n  get type () {\n    webidl.brandCheck(this, Response)\n\n    // The type getter steps are to return this’s response’s type.\n    return this.#state.type\n  }\n\n  // Returns response’s 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’s\n    // response’s URL is null; otherwise this’s response’s 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’s response’s URL\n    // list has more than one item; otherwise false.\n    return this.#state.urlList.length > 1\n  }\n\n  // Returns response’s status.\n  get status () {\n    webidl.brandCheck(this, Response)\n\n    // The status getter steps are to return this’s response’s status.\n    return this.#state.status\n  }\n\n  // Returns whether response’s 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’s response’s status is an\n    // ok status; otherwise false.\n    return this.#state.status >= 200 && this.#state.status <= 299\n  }\n\n  // Returns response’s status message.\n  get statusText () {\n    webidl.brandCheck(this, Response)\n\n    // The statusText getter steps are to return this’s response’s status\n    // message.\n    return this.#state.statusText\n  }\n\n  // Returns response’s headers as Headers.\n  get headers () {\n    webidl.brandCheck(this, Response)\n\n    // The headers getter steps are to return this’s 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’s response.\n    const clonedResponse = cloneResponse(this.#state)\n\n    // Note: To re-register because of a new stream.\n    if (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’s headers’s guard, and this’s 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’s\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’s body is non-null, then set newResponse’s body to the\n  // result of cloning response’s 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’s 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’s 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’s header\n    // list whose name is not a CORS-safelisted response-header name, given\n    // internal response’s 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: Object.freeze([]),\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’s response’s status to init[\"status\"].\n  if ('status' in init && init.status != null) {\n    getResponseState(response).status = init.status\n  }\n\n  // 4. Set response’s response’s 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’s 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  if (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’s relevant settings object’s 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’s request.\n      request = input.#state\n\n      // 9. Set signal to input’s signal.\n      signal = input.#signal\n\n      this.#dispatcher = init.dispatcher || input.#dispatcher\n    }\n\n    // 7. Let origin be this’s relevant settings object’s origin.\n    const origin = environmentSettingsObject.settingsObject.origin\n\n    // 8. Let window be \"client\".\n    let window = 'client'\n\n    // 9. If request’s window is an environment settings object and its origin\n    // is same origin with origin, then set window to request’s 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’s URL.\n      // undici implementation note: this is set as the first item in request's urlList in makeRequest\n      // method request’s method.\n      method: request.method,\n      // header list A copy of request’s 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’s relevant settings object.\n      client: environmentSettingsObject.settingsObject,\n      // window window.\n      window,\n      // priority request’s priority.\n      priority: request.priority,\n      // origin request’s 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’s referrer.\n      referrer: request.referrer,\n      // referrer policy request’s referrer policy.\n      referrerPolicy: request.referrerPolicy,\n      // mode request’s mode.\n      mode: request.mode,\n      // credentials mode request’s credentials mode.\n      credentials: request.credentials,\n      // cache mode request’s cache mode.\n      cache: request.cache,\n      // redirect mode request’s redirect mode.\n      redirect: request.redirect,\n      // integrity metadata request’s integrity metadata.\n      integrity: request.integrity,\n      // keepalive request’s keepalive.\n      keepalive: request.keepalive,\n      // reload-navigation flag request’s reload-navigation flag.\n      reloadNavigation: request.reloadNavigation,\n      // history-navigation flag request’s history-navigation flag.\n      historyNavigation: request.historyNavigation,\n      // URL list A clone of request’s 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’s 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’s reload-navigation flag.\n      request.reloadNavigation = false\n\n      // 3. Unset request’s history-navigation flag.\n      request.historyNavigation = false\n\n      // 4. Set request’s origin to \"client\".\n      request.origin = 'client'\n\n      // 5. Set request’s referrer to \"client\"\n      request.referrer = 'client'\n\n      // 6. Set request’s referrer policy to the empty string.\n      request.referrerPolicy = ''\n\n      // 7. Set request’s URL to request’s current URL.\n      request.url = request.urlList[request.urlList.length - 1]\n\n      // 8. Set request’s URL list to « request’s URL ».\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’s 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’s scheme is \"about\" and path is the string \"client\"\n        // - parsedReferrer’s origin is not same origin with origin\n        // then set request’s 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’s referrer to parsedReferrer.\n          request.referrer = parsedReferrer\n        }\n      }\n    }\n\n    // 15. If init[\"referrerPolicy\"] exists, then set request’s 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’s mode to mode.\n    if (mode != null) {\n      request.mode = mode\n    }\n\n    // 19. If init[\"credentials\"] exists, then set request’s 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’s cache mode to it.\n    if (init.cache !== undefined) {\n      request.cache = init.cache\n    }\n\n    // 21. If request’s cache mode is \"only-if-cached\" and request’s 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’s 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’s 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’s 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’s 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’s request to request.\n    this.#state = request\n\n    // 28. Set this’s signal to a new AbortSignal object with this’s 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’s 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’s headers to a new Headers object with this’s relevant\n    // Realm, whose header list is request’s 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’s request’s mode is \"no-cors\", then:\n    if (mode === 'no-cors') {\n      // 1. If this’s request’s 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’s headers’s 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’s 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’s headers’s 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’s name/header’s value to this’s 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’s headers with headers.\n        fillHeaders(this.#headers, headers)\n      }\n    }\n\n    // 33. Let inputBody be input’s request’s 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’s 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’s 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’s headers’s header list does\n      // not contain `Content-Type`, then append `Content-Type`/Content-Type to\n      // this’s 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’s 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’s request’s 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’s request’s 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’s request’s body to finalBody.\n    this.#state.body = finalBody\n  }\n\n  // Returns request’s 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’s request’s 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’s request’s 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’s 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’s request’s 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’s 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’s request’s 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’s request’s referrer is \"client\", then return\n    // \"about:client\".\n    if (this.#state.referrer === 'client') {\n      return 'about:client'\n    }\n\n    // Return this’s request’s 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’s\n  // referrer.\n  get referrerPolicy () {\n    webidl.brandCheck(this, Request)\n\n    // The referrerPolicy getter steps are to return this’s request’s 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’s request’s 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’s request’s 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’s cache when fetching.\n  get cache () {\n    webidl.brandCheck(this, Request)\n\n    // The cache getter steps are to return this’s request’s 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’s request’s redirect mode.\n    return this.#state.redirect\n  }\n\n  // Returns request’s 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’s request’s 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’s request’s 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’s\n    // request’s 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’s request’s\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’s 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’s request.\n    const clonedRequest = cloneRequest(this.#state)\n\n    // 3. Let clonedRequestObject be the result of creating a Request object,\n    // given clonedRequest, this’s headers’s guard, and this’s relevant Realm.\n    // 4. Make clonedRequestObject’s signal follow this’s 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    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’s body is non-null, set newRequest’s body to the\n  // result of cloning request’s 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\nmodule.exports = {\n  Request,\n  makeRequest,\n  fromInnerRequest,\n  cloneRequest,\n  getRequestDispatcher,\n  getRequestState\n}\n","'use strict'\n\nconst assert = require('node:assert')\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 « \"sha256\",\n * \"sha384\", \"sha512\" » (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('crypto')} */\nlet crypto\ntry {\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  /* c8 ignore next 4 */\n} catch {\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 = crypto === undefined || 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 « item ».\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    // «[\"alg\" → algorithm, \"val\" → base64-value]».\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  isomorphicEncode,\n  urlIsLocal,\n  urlIsHttpHttpsScheme,\n  urlHasHttpsScheme,\n  clampAndCoarsenConnectionTimingInfo,\n  simpleRangeHeaderValue,\n  buildContentRange,\n  createInflate,\n  extractMimeType\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')\n\nconst hasZstd = typeof zlib.createZstdDecompress === 'function'\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’s 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’s 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’s request.\n  const request = getRequestState(requestObject)\n\n  // 4. If requestObject’s signal’s aborted flag is set, then:\n  if (requestObject.signal.aborted) {\n    // 1. Abort the fetch() call with p, request, null, and\n    //    requestObject’s signal’s abort reason.\n    abortFetch(p, request, null, requestObject.signal.reason)\n\n    // 2. Return p.\n    return p.promise\n  }\n\n  // 5. Let globalObject be request’s client’s global object.\n  const globalObject = request.client.globalObject\n\n  // 6. If globalObject is a ServiceWorkerGlobalScope object, then set\n  // request’s 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’s 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’s 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’s signal’s 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’s signal’s abort reason.\n      abortFetch(p, request, realResponse, requestObject.signal.reason)\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’s 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’s 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)\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  })\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’s URL list is null or empty, then return.\n  if (!response.urlList?.length) {\n    return\n  }\n\n  // 3. Let originalURL be response’s URL list[0].\n  const originalURL = response.urlList[0]\n\n  // 4. Let timingInfo be response’s timing info.\n  let timingInfo = response.timingInfo\n\n  // 5. Let cacheState be response’s cache state.\n  let cacheState = response.cacheState\n\n  // 6. If originalURL’s 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’s 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’s end time to the coarsened shared current time\n  // given global’s relevant settings object’s cross-origin isolated\n  // capability.\n  // TODO: given global’s relevant settings object’s cross-origin isolated\n  // capability?\n  timingInfo.endTime = coarsenedSharedCurrentTime()\n\n  // 10. Set response’s 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) {\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’s body is not null and is readable, then cancel request’s\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’s response.\n  const response = getResponseState(responseObject)\n\n  // 5. If response’s body is not null and is readable, then error response’s\n  // body with error.\n  if (response.body?.stream != null && isReadable(response.body.stream)) {\n    response.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\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}) {\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’s client is non-null, then:\n  if (request.client != null) {\n    // 1. Set taskDestination to request’s client’s global object.\n    taskDestination = request.client.globalObject\n\n    // 2. Set crossOriginIsolatedCapability to request’s client’s 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  }\n\n  // 7. If request’s body is a byte sequence, then set request’s body to\n  //    request’s 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’s window is \"client\", then set request’s window to request’s\n  // client, if request’s client’s 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’s origin is \"client\", then set request’s origin to request’s\n  // client’s 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’s policy container is \"client\", then:\n  if (request.policyContainer === 'client') {\n    // 1. If request’s client is non-null, then set request’s policy\n    // container to a clone of request’s client’s policy container. [HTML]\n    if (request.client != null) {\n      request.policyContainer = clonePolicyContainer(\n        request.client.policyContainer\n      )\n    } else {\n      // 2. Otherwise, set request’s policy container to a new policy\n      // container.\n      request.policyContainer = makePolicyContainer()\n    }\n  }\n\n  // 12. If request’s 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’s 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’s header list.\n    request.headersList.append('accept', value, true)\n  }\n\n  // 13. If request’s header list does not contain `Accept-Language`, then\n  // user agents should append `Accept-Language`/an appropriate value to\n  // request’s header list.\n  if (!request.headersList.contains('accept-language', true)) {\n    request.headersList.append('accept-language', '*', true)\n  }\n\n  // 14. If request’s priority is null, then use request’s initiator and\n  // destination appropriately in setting request’s 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’s request.\n    const request = fetchParams.request\n\n    // 2. Let response be null.\n    let response = null\n\n    // 3. If request’s local-URLs-only flag is set and request’s 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’s referrer policy is the empty string, then set request’s\n    // referrer policy to request’s policy container’s referrer policy.\n    if (request.referrerPolicy === '') {\n      request.referrerPolicy = request.policyContainer.referrerPolicy\n    }\n\n    // 8. If request’s referrer is not \"no-referrer\", then set request’s\n    // referrer to the result of invoking determine request’s referrer.\n    if (request.referrer !== 'no-referrer') {\n      request.referrer = determineRequestsReferrer(request)\n    }\n\n    // 9. Set request’s current URL’s scheme to \"https\" if all of the following\n    // conditions are true:\n    // - request’s current URL’s scheme is \"http\"\n    // - request’s current URL’s host is a domain\n    // - Matching request’s current URL’s 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’s current URL’s origin is same origin with request’s origin,\n        //   and request’s response tainting is \"basic\"\n        (sameOrigin(currentURL, request.url) && request.responseTainting === 'basic') ||\n        // request’s current URL’s scheme is \"data\"\n        (currentURL.protocol === 'data:') ||\n        // - request’s mode is \"navigate\" or \"websocket\"\n        (request.mode === 'navigate' || request.mode === 'websocket')\n      ) {\n        // 1. Set request’s 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’s 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’s mode is \"no-cors\"\n      } else if (request.mode === 'no-cors') {\n        // 1. If request’s 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’s 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’s current URL’s 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’s use-CORS-preflight flag is set\n        // - request’s unsafe-request flag is set and either request’s method is\n        //   not a CORS-safelisted method or CORS-unsafe request-header names with\n        //   request’s header list is not empty\n        //    1. Set request’s 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’s 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’s 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’s header list.\n        // TODO\n        // 2. If request’s credentials mode is not \"include\" and headerNames\n        // contains `*`, then set response’s CORS-exposed header-name list to\n        // all unique header names in response’s header list.\n        // TODO\n        // 3. Otherwise, if headerNames is not null or failure, then set\n        // response’s 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’s 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’s internal response otherwise.\n    let internalResponse =\n      response.status === 0 ? response : response.internalResponse\n\n    // 15. If internalResponse’s URL list is empty, then set it to a clone of\n    // request’s URL list.\n    if (internalResponse.urlList.length === 0) {\n      internalResponse.urlList.push(...request.urlList)\n    }\n\n    // 16. If request’s timing allow failed flag is unset, then set\n    // internalResponse’s 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’s type is \"opaque\", internalResponse’s status is 206,\n    // internalResponse’s range-requested flag is set, and request’s 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’s method is\n    // `HEAD` or `CONNECT`, or internalResponse’s status is a null body status,\n    // set internalResponse’s 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’s 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’s response tainting is \"opaque\", or response’s 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’s 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’s 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’s 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’s request.\n  const { request } = fetchParams\n\n  const { protocol: scheme } = requestCurrentURL(request)\n\n  // 3. Switch on request’s current URL’s scheme and run the associated steps:\n  switch (scheme) {\n    case 'about:': {\n      // If request’s current URL’s path is the string \"blank\", then return a new response\n      // whose status message is `OK`, header list is « (`Content-Type`, `text/html;charset=utf-8`) »,\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’s current URL’s 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’s method is not `GET`, blobURLEntry is null, or blobURLEntry’s\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’s 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’s 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’s type.\n      const type = blob.type\n\n      // 8. If request’s 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’s status message to `OK`.\n        response.statusText = 'OK'\n\n        // 3. Set response’s body to bodyWithType’s body.\n        response.body = bodyWithType[0]\n\n        // 4. Set response’s header list to « (`Content-Length`, serializedFullLength), (`Content-Type`, type) ».\n        response.headersList.set('content-length', serializedFullLength, true)\n        response.headersList.set('content-type', type, true)\n      } else {\n        // 1. Set response’s range-requested flag.\n        response.rangeRequested = true\n\n        // 2. Let rangeHeader be the result of getting `Range` from request’s 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 − rangeEnd.\n          rangeStart = fullLength - rangeEnd\n\n          // 2. Set rangeEnd to rangeStart + rangeEnd − 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 − 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, 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’s body to slicedBodyWithType’s body.\n        response.body = slicedBodyWithType[0]\n\n        // 11. Let serializedSlicedLength be slicedBlob’s 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’s status to 206.\n        response.status = 206\n\n        // 14. Set response’s status message to `Partial Content`.\n        response.statusText = 'Partial Content'\n\n        // 15. Set response’s header list to « (`Content-Length`, serializedSlicedLength),\n        //     (`Content-Type`, type), (`Content-Range`, contentRange) ».\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’s 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’s MIME type, serialized.\n      const mimeType = serializeAMimeType(dataURLStruct.mimeType)\n\n      // 4. Return a response whose status message is `OK`,\n      //    header list is « (`Content-Type`, mimeType) »,\n      //    and body is dataURLStruct’s 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’s request’s done flag.\n  fetchParams.request.done = true\n\n  // 2, If fetchParams’s process response done is not null, then queue a fetch\n  // task to run fetchParams’s process response done given response, with\n  // fetchParams’s 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’s timing info.\n  let timingInfo = fetchParams.timingInfo\n\n  // 2. If response is not a network error and fetchParams’s request’s client is a secure context,\n  //    then set timingInfo’s server-timing headers to the result of getting, decoding, and splitting\n  //    `Server-Timing` from response’s internal response’s 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’s request’s destination is \"document\", then set fetchParams’s controller’s\n    //    full timing info to fetchParams’s timing info.\n    if (fetchParams.request.destination === 'document') {\n      fetchParams.controller.fullTimingInfo = timingInfo\n    }\n\n    // 3. Set fetchParams’s controller’s report timing steps to the following steps given a global object global:\n    fetchParams.controller.reportTimingSteps = () => {\n      // 1. If fetchParams’s request’s URL’s scheme is not an HTTP(S) scheme, then return.\n      if (!urlIsHttpHttpsScheme(fetchParams.request.url)) {\n        return\n      }\n\n      // 2. Set timingInfo’s end time to the relative high resolution time given unsafeEndTime and global.\n      timingInfo.endTime = unsafeEndTime\n\n      // 3. Let cacheState be response’s cache state.\n      let cacheState = response.cacheState\n\n      // 4. Let bodyInfo be response’s body info.\n      const bodyInfo = response.bodyInfo\n\n      // 5. If response’s 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’s request’s mode is not \"navigate\" or response’s has-cross-origin-redirects is false:\n      if (fetchParams.request.mode !== 'navigator' || !response.hasCrossOriginRedirects) {\n        // 1. Set responseStatus to response’s status.\n        responseStatus = response.status\n\n        // 2. Let mimeType be the result of extracting a MIME type from response’s header list.\n        const mimeType = extractMimeType(response.headersList)\n\n        // 3. If mimeType is not failure, then set bodyInfo’s 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’s request’s initiator type is non-null, then mark resource timing given timingInfo,\n      //    fetchParams’s request’s URL, fetchParams’s request’s 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’s request’s done flag.\n      fetchParams.request.done = true\n\n      // 2. If fetchParams’s process response end-of-body is non-null, then run fetchParams’s process\n      //    response end-of-body given response.\n      if (fetchParams.processResponseEndOfBody != null) {\n        queueMicrotask(() => fetchParams.processResponseEndOfBody(response))\n      }\n\n      // 3. If fetchParams’s request’s initiator type is non-null and fetchParams’s request’s client’s\n      //    global object is fetchParams’s task destination, then run fetchParams’s controller’s report\n      //    timing steps given fetchParams’s request’s client’s 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’s task destination\n    queueMicrotask(() => processResponseEndOfBodyTask())\n  }\n\n  // 4. If fetchParams’s process response is non-null, then queue a fetch task to run fetchParams’s\n  //    process response given response, with fetchParams’s 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’s internal response.\n  const internalResponse = response.type === 'error' ? response : (response.internalResponse ?? response)\n\n  // 6. If internalResponse’s 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’s body’s stream to the result of internalResponse’s body’s 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’s 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’s timing info.\n  const timingInfo = fetchParams.timingInfo\n\n  // 5. If request’s 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’s redirect mode is \"follow\", then set request’s\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’s 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’s timing allow failed flag.\n    if (TAOCheck(request, response) === 'failure') {\n      request.timingAllowFailed = true\n    }\n  }\n\n  // 7. If either request’s response tainting or response’s type\n  // is \"opaque\", and the cross-origin resource policy check with\n  // request’s origin, request’s client, request’s 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’s status is a redirect status, then:\n  if (redirectStatusSet.has(actualResponse.status)) {\n    // 1. If actualResponse’s status is not 303, request’s 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’s 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’s 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’s request.\n  const request = fetchParams.request\n\n  // 2. Let actualResponse be response, if response is not a filtered response,\n  // and response’s internal response otherwise.\n  const actualResponse = response.internalResponse\n    ? response.internalResponse\n    : response\n\n  // 3. Let locationURL be actualResponse’s location URL given request’s current\n  // URL’s 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’s 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’s 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’s redirect count by 1.\n  request.redirectCount += 1\n\n  // 9. If request’s mode is \"cors\", locationURL includes credentials, and\n  // request’s origin is not same origin with locationURL’s 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’s 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’s status is not 303, request’s body is non-null,\n  // and request’s body’s 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’s status is 301 or 302 and request’s method is `POST`\n  // - actualResponse’s status is 303 and request’s 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’s method to `GET` and request’s 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’s header list.\n    for (const headerName of requestBodyHeader) {\n      request.headersList.delete(headerName)\n    }\n  }\n\n  // 13. If request’s current URL’s origin is not same origin with locationURL’s\n  //     origin, then for each headerName of CORS non-wildcard request-header name,\n  //     delete headerName from request’s 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’s timing info.\n  const timingInfo = fetchParams.timingInfo\n\n  // 16. Set timingInfo’s redirect end time and post-redirect start time to the\n  // coarsened shared current time given fetchParams’s cross-origin isolated\n  // capability.\n  timingInfo.redirectEndTime = timingInfo.postRedirectStartTime =\n    coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability)\n\n  // 17. If timingInfo’s redirect start time is 0, then set timingInfo’s\n  //  redirect start time to timingInfo’s start time.\n  if (timingInfo.redirectStartTime === 0) {\n    timingInfo.redirectStartTime = timingInfo.startTime\n  }\n\n  // 18. Append locationURL to request’s URL list.\n  request.urlList.push(locationURL)\n\n  // 19. Invoke set request’s 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’s 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’s window is \"no-window\" and request’s 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’s 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’s body’s length, if httpRequest’s\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’s body is null and httpRequest’s 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’s header\n  //    list.\n  if (contentLengthHeaderValue != null) {\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’s header list.\n\n  //    10. If contentLength is non-null and httpRequest’s 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’s referrer is a URL, then append\n  //    `Referer`/httpRequest’s referrer, serialized and isomorphic encoded,\n  //     to httpRequest’s 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’s header list does not contain `User-Agent`, then\n  //    user agents should append `User-Agent`/default `User-Agent` value to\n  //    httpRequest’s header list.\n  if (!httpRequest.headersList.contains('user-agent', true)) {\n    httpRequest.headersList.append('user-agent', defaultUserAgent, true)\n  }\n\n  //    15. If httpRequest’s cache mode is \"default\" and httpRequest’s header\n  //    list contains `If-Modified-Since`, `If-None-Match`,\n  //    `If-Unmodified-Since`, `If-Match`, or `If-Range`, then set\n  //    httpRequest’s 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’s cache mode is \"no-cache\", httpRequest’s prevent\n  //    no-cache cache-control header modification flag is unset, and\n  //    httpRequest’s header list does not contain `Cache-Control`, then append\n  //    `Cache-Control`/`max-age=0` to httpRequest’s 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’s cache mode is \"no-store\" or \"reload\", then:\n  if (httpRequest.cache === 'no-store' || httpRequest.cache === 'reload') {\n    // 1. If httpRequest’s header list does not contain `Pragma`, then append\n    // `Pragma`/`no-cache` to httpRequest’s header list.\n    if (!httpRequest.headersList.contains('pragma', true)) {\n      httpRequest.headersList.append('pragma', 'no-cache', true)\n    }\n\n    // 2. If httpRequest’s header list does not contain `Cache-Control`,\n    // then append `Cache-Control`/`no-cache` to httpRequest’s 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’s header list contains `Range`, then append\n  //    `Accept-Encoding`/`identity` to httpRequest’s header list.\n  if (httpRequest.headersList.contains('range', true)) {\n    httpRequest.headersList.append('accept-encoding', 'identity', true)\n  }\n\n  //    19. Modify httpRequest’s header list per HTTP. Do not append a given\n  //    header if httpRequest’s header list contains that header’s 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  //    20. 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    // 2. If httpRequest’s header list does not contain `Authorization`, then:\n    // TODO: credentials\n  }\n\n  //    21. If there’s 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’s cache mode to\n  //    \"no-store\".\n  if (httpCache == null) {\n    httpRequest.cache = 'no-store'\n  }\n\n  //    24. If httpRequest’s 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’s 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’s method is unsafe and forwardResponse’s 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’s 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’s URL list to a clone of httpRequest’s URL list.\n  response.urlList = [...httpRequest.urlList]\n\n  // 12. If httpRequest’s header list contains `Range`, then set response’s\n  // range-requested flag.\n  if (httpRequest.headersList.contains('range', true)) {\n    response.rangeRequested = true\n  }\n\n  // 13. Set response’s request-includes-credentials to includeCredentials.\n  response.requestIncludesCredentials = includeCredentials\n\n  // 14. If response’s status is 401, httpRequest’s response tainting is not\n  // \"cors\", includeCredentials is true, and request’s window is an environment\n  // settings object, then:\n  // TODO\n\n  // 15. If response’s status is 407, then:\n  if (response.status === 407) {\n    // 1. If request’s 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’s 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’s status is 421\n    response.status === 421 &&\n    // isNewConnectionFetch is false\n    !isNewConnectionFetch &&\n    // request’s body is null, or request’s body is non-null and request’s body’s 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’s request.\n  const request = fetchParams.request\n\n  // 2. Let response be null.\n  let response = null\n\n  // 3. Let timingInfo be fetchParams’s 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’s 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’s mode:\n  if (request.mode === 'websocket') {\n    // Let connection be the result of obtaining a WebSocket connection,\n    // given request’s current URL.\n    // TODO\n  } else {\n    // Let connection be the result of obtaining a connection, given\n    // networkPartitionKey, request’s current URL’s 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’s final connection timing info to the result of\n  //    calling clamp and coarsen connection timing info with connection’s\n  //    timing info, timingInfo’s post-redirect start time, and fetchParams’s\n  //    cross-origin isolated capability.\n\n  //    3. If connection is not an HTTP/2 connection, request’s body is non-null,\n  //    and request’s body’s source is null, then append (`Transfer-Encoding`,\n  //    `chunked`) to request’s header list.\n\n  //    4. Set timingInfo’s final network-request start time to the coarsened\n  //    shared current time given fetchParams’s 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’s body is non-null, and request’s body’s source is null,\n  //        then the user agent may have a buffer of up to 64 kibibytes and store\n  //        a part of request’s body in that buffer. If the user agent reads from\n  //        request’s body beyond that buffer’s size and the user agent needs to\n  //        resend request, then instead return a network error.\n\n  //        - Set timingInfo’s final network-response start time to the coarsened\n  //        shared current time given fetchParams’s cross-origin isolated capability,\n  //        immediately after the user agent’s 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’s final network-response start time above.\n\n  //    - If request’s 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’s window is an environment settings object, make the\n  //        dialog available in request’s window.\n\n  //        2. Otherwise, return a network error.\n\n  // To transmit request’s body body, run these steps:\n  let requestBody = null\n  // 1. If body is null and fetchParams’s process request end-of-body is\n  // non-null, then queue a fetch task given fetchParams’s process request\n  // end-of-body and fetchParams’s 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’s process request body is non-null, then run\n      // fetchParams’s process request body given bytes’s 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’s process request end-of-body is non-null,\n      // then run fetchParams’s 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’s 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’s body given processBodyChunk, processEndOfBody,\n    // processBodyError, and fetchParams’s 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’s\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’s 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’s 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’s header list, if any, and request’s 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’s 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’s decoded body size by bytes’s length.\n      timingInfo.decodedBodySize += bytes?.byteLength ?? 0\n\n      // 6. If bytes is failure, then terminate fetchParams’s 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’t 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’s 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’s\n      //    controller’s 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    return new Promise((resolve, reject) => agent.dispatch(\n      {\n        path: url.pathname + url.search,\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’s final connection timing info to the result of calling clamp and coarsen\n          // connection timing info with connection’s timing info, timingInfo’s post-redirect start\n          // time, and fetchParams’s 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’s final network-request start time to the coarsened shared current time given\n          // fetchParams’s cross-origin isolated capability.\n          timingInfo.finalNetworkRequestStartTime = coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability)\n        },\n\n        onResponseStarted () {\n          // Set timingInfo’s final network-response start time to the coarsened shared current\n          // time given fetchParams’s cross-origin isolated capability, immediately after the\n          // user agent’s 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            headersList.append(bufferToLowerCasedHeaderName(rawHeaders[i]), rawHeaders[i + 1].toString('latin1'), true)\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            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              // Node.js v23.8.0+ and v22.15.0+ supports Zstandard\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’s\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’s header list.\n          //  See pullAlgorithm.\n\n          //  3. Increase timingInfo’s encoded body size by bytes’s 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        onUpgrade (status, rawHeaders, socket) {\n          if (status !== 101) {\n            return\n          }\n\n          const headersList = new HeadersList()\n\n          for (let i = 0; i < rawHeaders.length; i += 2) {\n            headersList.append(bufferToLowerCasedHeaderName(rawHeaders[i]), rawHeaders[i + 1].toString('latin1'), true)\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(response, 'immutable')\n\n      responseList.push(responseObject.clone())\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 === 0x7F || // DEL\n      code === 0x3B // ;\n    ) {\n      throw new Error('Invalid cookie path')\n    }\n  }\n}\n\n/**\n * I have no idea why these values aren't allowed to be honest,\n * but Deno tests these. - Khafra\n * @param {string} domain\n */\nfunction validateCookieDomain (domain) {\n  if (\n    domain.startsWith('-') ||\n    domain.endsWith('.') ||\n    domain.endsWith('-')\n  ) {\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    out.push(`${key.trim()}=${value.join('=')}`)\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 { maxNameValuePairSize, maxAttributeValueSize } = require('./constants')\nconst { isCTLExcludingHtab } = require('./util')\nconst { collectASequenceOfCodePointsFast } = require('../fetch/data-url')\nconst assert = require('node:assert')\nconst { unescape: qsUnescape } = require('node:querystring')\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: qsUnescape(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    // 1. Let enforcement be \"Default\".\n    let enforcement = 'Default'\n\n    const attributeValueLowercase = attributeValue.toLowerCase()\n    // 2. If cookie-av's attribute-value is a case-insensitive match for\n    //    \"None\", set enforcement to \"None\".\n    if (attributeValueLowercase.includes('none')) {\n      enforcement = 'None'\n    }\n\n    // 3. If cookie-av's attribute-value is a case-insensitive match for\n    //    \"Strict\", set enforcement to \"Strict\".\n    if (attributeValueLowercase.includes('strict')) {\n      enforcement = 'Strict'\n    }\n\n    // 4. If cookie-av's attribute-value is a case-insensitive match for\n    //    \"Lax\", set enforcement to \"Lax\".\n    if (attributeValueLowercase.includes('lax')) {\n      enforcement = 'Lax'\n    }\n\n    // 5. Append an attribute to the cookie-attribute-list with an\n    //    attribute-name of \"SameSite\" and an attribute-value of\n    //    enforcement.\n    cookieAttributeList.sameSite = enforcement\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 { collectASequenceOfCodePointsFast, removeHTTPWhitespace } = require('../fetch/data-url')\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’s 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  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  return true\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 ’s scheme is \" http \", then set urlRecord ’s scheme to \" ws \".\n  // 4. Otherwise, if urlRecord ’s scheme is \" https \", set urlRecord ’s 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 ’s 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 ’s 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 { maxUnsigned16Bit, opcodes } = require('./constants')\n\nconst BUFFER_SIZE = 8 * 1024\n\n/** @type {import('crypto')} */\nlet crypto\nlet buffer = null\nlet bufIdx = BUFFER_SIZE\n\ntry {\n  crypto = require('node:crypto')\n/* c8 ignore next 3 */\n} catch {\n  crypto = {\n    // not full compatibility, but minimum.\n    randomFillSync: 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  }\n}\n\nfunction generateMask () {\n  if (bufIdx === BUFFER_SIZE) {\n    bufIdx = 0\n    crypto.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, 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')\n\n/** @type {import('crypto')} */\nlet crypto\ntry {\n  crypto = require('node:crypto')\n/* c8 ignore next 3 */\n} catch {\n\n}\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’s\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  //    and redirect mode is \"error\".\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  })\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’s header list.\n  // 4. Append (`Connection`, `Upgrade`) to request’s 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’s\n  //    header list.\n  request.headersList.append('sec-websocket-key', keyValue, true)\n\n  // 7. Append (`Sec-WebSocket-Version`, `13`) to request’s\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’s 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’s 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      if (response.type === 'error') {\n        // If the WebSocket connection could not be established, it is also said\n        // that _The WebSocket Connection is Closed_, but not _cleanly_.\n        handler.readyState = states.CLOSED\n      }\n\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.status !== 101) {\n        failWebsocketConnection(handler, 1002, 'Received network error or non-101 status code.', response.error)\n        return\n      }\n\n      // 2. If protocols is not the empty list and extracting header\n      //    list values given `Sec-WebSocket-Protocol` and response’s\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      if (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      if (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.createHash('sha1').update(keyValue + uid).digest('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.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’s 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’s 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’s 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 (!handler.socket) {\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')\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  constructor (extensions) {\n    this.#options.serverNoContextTakeover = extensions.has('server_no_context_takeover')\n    this.#options.serverMaxWindowBits = extensions.get('server_max_window_bits')\n  }\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\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      this.#inflate = createInflateRaw({ windowBits })\n      this.#inflate[kBuffer] = []\n      this.#inflate[kLength] = 0\n\n      this.#inflate.on('data', (data) => {\n        this.#inflate[kBuffer].push(data)\n        this.#inflate[kLength] += data.length\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      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')\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  constructor (handler, extensions) {\n    super()\n\n    this.#handler = handler\n    this.#extensions = extensions == null ? new Map() : extensions\n\n    if (this.#extensions.has('permessage-deflate')) {\n      this.#extensions.set('permessage-deflate', new PerMessageDeflate(extensions))\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  /**\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        } 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      } 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\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 > 2 ** 31 - 1) {\n          failWebsocketConnection(this.#handler, 1009, 'Received payload length > 2^31 bytes.')\n          return\n        }\n\n        const lower = buffer.readUInt32BE(4)\n\n        this.#info.payloadLength = (upper << 8) + lower\n        this.#state = parserStates.READ_DATA\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            this.writeFragments(body)\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(body, this.#info.fin, (error, data) => {\n              if (error) {\n                failWebsocketConnection(this.#handler, 1007, error.message)\n                return\n              }\n\n              this.writeFragments(data)\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\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    this.#fragmentsBytes += fragment.length\n    this.#fragments.push(fragment)\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\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’s 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’s 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 parser = new ByteParser(this.#handler, parsedExtensions)\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’s 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’s 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: response.socket.address(),\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’s 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 { utf8DecodeBytes } = require('../../fetch/util')\nconst { kEnumerableProperty } = require('../../../core/util')\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  // Each WebSocketStream object has an associated writable stream , which is a WritableStream .\n  /** @type {WritableStream} */\n  #writableStream\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 ’s 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 ’s 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 ’s 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 ’s 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    const parser = new ByteParser(this.#handler, parsedExtensions)\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 ’s ready state to OPEN (1).\n    this.#handler.readyState = states.OPEN\n\n    // 2. Set stream ’s 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      pull (controller) {\n        let chunk\n        while (controller.desiredSize > 0 && (chunk = response.socket.read()) !== null) {\n          controller.enqueue(chunk)\n        }\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      write: (chunk) => this.#write(chunk),\n      close: () => closeWebSocketConnection(this.#handler, null, null),\n      abort: (reason) => this.#closeUsingReason(reason)\n    })\n\n    // Set stream ’s readable stream to readable .\n    this.#readableStream = readable\n\n    // Set stream ’s writable stream to writable .\n    this.#writableStream = writable\n\n    // Resolve stream ’s opened promise with WebSocketOpenInfo «[ \" extensions \" → extensions , \" protocol \" → protocol , \" readable \" → readable , \" writable \" → writable ]».\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’s 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, '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’s 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 ’s handshake aborted is true, then return.\n    if (this.#handshakeAborted) {\n      return\n    }\n\n    // 3. If stream ’s was ever connected is false, then reject stream ’s 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 ’s readable stream .\n      this.#readableStreamController.close()\n\n      // 6.2. Error stream ’s writable stream with an \" InvalidStateError \" DOMException indicating that a closed WebSocketStream cannot be written to.\n      if (!this.#writableStream.locked) {\n        this.#writableStream.abort(new DOMException('A closed WebSocketStream cannot be written to', 'InvalidStateError'))\n      }\n\n      // 6.3. Resolve stream ’s closed promise with WebSocketCloseInfo «[ \" closeCode \" → code , \" reason \" → reason ]».\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 ’s readable stream with error .\n      this.#readableStreamController.error(error)\n\n      // 7.3. Error stream ’s writable stream with error .\n      this.#writableStream.abort(error)\n\n      // 7.4. Reject stream ’s 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 ’s closeCode .\n      code = reason.closeCode\n\n      // 3.2. Set reasonString to reason ’s 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\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|null}\n   */\n  buffer = null\n\n  pos = 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    // Cache the chunk in the buffer, as the data might not be complete while\n    // processing it\n    // TODO: Investigate if there is a more performant way to handle\n    // incoming chunks\n    // see: https://github.com/nodejs/undici/issues/2630\n    if (this.buffer) {\n      this.buffer = Buffer.concat([this.buffer, chunk])\n    } else {\n      this.buffer = chunk\n    }\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      switch (this.buffer.length) {\n        case 1:\n          // Check if the first byte is the same as the first byte of the BOM\n          if (this.buffer[0] === BOM[0]) {\n            // If it is, we need to wait for more data\n            callback()\n            return\n          }\n          // Set the checkBOM flag to false as we don't need to check for the\n          // BOM anymore\n          this.checkBOM = false\n\n          // The buffer only contains one byte so we need to wait for more data\n          callback()\n          return\n        case 2:\n          // Check if the first two bytes are the same as the first two bytes\n          // of the BOM\n          if (\n            this.buffer[0] === BOM[0] &&\n            this.buffer[1] === BOM[1]\n          ) {\n            // If it is, we need to wait for more data, because the third byte\n            // is needed to determine if it is the BOM or not\n            callback()\n            return\n          }\n\n          // Set the checkBOM flag to false as we don't need to check for the\n          // BOM anymore\n          this.checkBOM = false\n          break\n        case 3:\n          // Check if the first three bytes are the same as the first three\n          // bytes of the BOM\n          if (\n            this.buffer[0] === BOM[0] &&\n            this.buffer[1] === BOM[1] &&\n            this.buffer[2] === BOM[2]\n          ) {\n            // If it is, we can drop the buffered data, as it is only the BOM\n            this.buffer = Buffer.alloc(0)\n            // Set the checkBOM flag to false as we don't need to check for the\n            // BOM anymore\n            this.checkBOM = false\n\n            // Await more data\n            callback()\n            return\n          }\n          // If it is not the BOM, we can start processing the data\n          this.checkBOM = false\n          break\n        default:\n          // The buffer is longer than 3 bytes, so we can drop the BOM if it is\n          // present\n          if (\n            this.buffer[0] === BOM[0] &&\n            this.buffer[1] === BOM[1] &&\n            this.buffer[2] === BOM[2]\n          ) {\n            // Remove the BOM from the buffer\n            this.buffer = this.buffer.subarray(3)\n          }\n\n          // Set the checkBOM flag to false as we don't need to check for the\n          this.checkBOM = false\n          break\n      }\n    }\n\n    while (this.pos < this.buffer.length) {\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 (this.buffer[this.pos] === LF) {\n            this.buffer = this.buffer.subarray(this.pos + 1)\n            this.pos = 0\n            this.crlfCheck = false\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 (this.buffer[this.pos] === LF || this.buffer[this.pos] === 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 (this.buffer[this.pos] === CR) {\n            this.crlfCheck = true\n          }\n\n          this.buffer = this.buffer.subarray(this.pos + 1)\n          this.pos = 0\n          if (\n            this.event.data !== undefined || this.event.event || this.event.id !== undefined || this.event.retry) {\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 (this.buffer[this.pos] === LF || this.buffer[this.pos] === 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 (this.buffer[this.pos] === 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.buffer.subarray(0, this.pos), this.event)\n\n        // Remove the processed line from the buffer\n        this.buffer = this.buffer.subarray(this.pos + 1)\n        // Reset the position as we removed the processed line from the buffer\n        this.pos = 0\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.pos++\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 field = ''\n    let value = ''\n\n    // If the line contains a U+003A COLON character (:)\n    if (colonPosition !== -1) {\n      // Collect the characters on the line before the first U+003A COLON\n      // character (:), and let field be that string.\n      // TODO: Investigate if there is a more performant way to extract the\n      // field\n      // see: https://github.com/nodejs/undici/issues/2630\n      field = line.subarray(0, colonPosition).toString('utf8')\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      let valueStart = colonPosition + 1\n      if (line[valueStart] === SPACE) {\n        ++valueStart\n      }\n      // TODO: Investigate if there is a more performant way to extract the\n      // value\n      // see: https://github.com/nodejs/undici/issues/2630\n      value = line.subarray(valueStart).toString('utf8')\n\n      // Otherwise, the string is not empty but does not contain a U+003A COLON\n      // character (:)\n    } else {\n      // Process the field using the steps described below, using the whole\n      // line as the field name, and the empty string as the field value.\n      field = line.toString('utf8')\n      value = ''\n    }\n\n    // Modify the event with the field name and value. The value is also\n    // decoded as UTF-8\n    switch (field) {\n      case 'data':\n        if (event[field] === undefined) {\n          event[field] = value\n        } else {\n          event[field] += `\\n${value}`\n        }\n        break\n      case 'retry':\n        if (isASCIINumber(value)) {\n          event[field] = value\n        }\n        break\n      case 'id':\n        if (isValidLastEventId(value)) {\n          event[field] = value\n        }\n        break\n      case 'event':\n        if (value.length > 0) {\n          event[field] = value\n        }\n        break\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 = {\n      data: undefined,\n      event: undefined,\n      id: undefined,\n      retry: undefined\n    }\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 Agent = require('./lib/dispatcher/agent')\nconst ProxyAgent = require('./lib/dispatcher/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.Agent = Agent\nmodule.exports.ProxyAgent = ProxyAgent\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}\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\nmodule.exports.fetch = function fetch (init, options = undefined) {\n  return fetchImpl(init, options).catch(err => {\n    if (err && typeof err === 'object') {\n      Error.captureStackTrace(err)\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","'use strict';\n\nexports.getValueAsString = function getValueString(value) {\n\tif (Number.isNaN(value)) {\n\t\treturn 'Nan';\n\t} else if (!Number.isFinite(value)) {\n\t\tif (value < 0) {\n\t\t\treturn '-Inf';\n\t\t} else {\n\t\t\treturn '+Inf';\n\t\t}\n\t} else {\n\t\treturn `${value}`;\n\t}\n};\n\nexports.removeLabels = function removeLabels(\n\thashMap,\n\tlabels,\n\tsortedLabelNames,\n) {\n\tconst hash = hashObject(labels, sortedLabelNames);\n\tdelete hashMap[hash];\n};\n\nexports.setValue = function setValue(hashMap, value, labels) {\n\tconst hash = hashObject(labels);\n\thashMap[hash] = {\n\t\tvalue: typeof value === 'number' ? value : 0,\n\t\tlabels: labels || {},\n\t};\n\treturn hashMap;\n};\n\nexports.setValueDelta = function setValueDelta(\n\thashMap,\n\tdeltaValue,\n\tlabels,\n\thash = '',\n) {\n\tconst value = typeof deltaValue === 'number' ? deltaValue : 0;\n\tif (hashMap[hash]) {\n\t\thashMap[hash].value += value;\n\t} else {\n\t\thashMap[hash] = { value, labels };\n\t}\n\treturn hashMap;\n};\n\nexports.getLabels = function (labelNames, args) {\n\tif (typeof args[0] === 'object') {\n\t\treturn args[0];\n\t}\n\n\tif (labelNames.length !== args.length) {\n\t\tthrow new Error(\n\t\t\t`Invalid number of arguments (${args.length}): \"${args.join(\n\t\t\t\t', ',\n\t\t\t)}\" for label names (${labelNames.length}): \"${labelNames.join(', ')}\".`,\n\t\t);\n\t}\n\n\tconst acc = {};\n\tfor (let i = 0; i < labelNames.length; i++) {\n\t\tacc[labelNames[i]] = args[i];\n\t}\n\treturn acc;\n};\n\nfunction fastHashObject(keys, labels) {\n\tif (keys.length === 0) {\n\t\treturn '';\n\t}\n\n\tlet hash = '';\n\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tconst key = keys[i];\n\t\tconst value = labels[key];\n\t\tif (value === undefined) continue;\n\n\t\thash += `${key}:${value},`;\n\t}\n\n\treturn hash;\n}\n\nfunction hashObject(labels, labelNames) {\n\t// We don't actually need a hash here. We just need a string that\n\t// is unique for each possible labels object and consistent across\n\t// calls with equivalent labels objects.\n\n\tif (labelNames) {\n\t\treturn fastHashObject(labelNames, labels);\n\t}\n\n\tconst keys = Object.keys(labels);\n\tif (keys.length > 1) {\n\t\tkeys.sort(); // need consistency across calls\n\t}\n\n\treturn fastHashObject(keys, labels);\n}\nexports.hashObject = hashObject;\n\nexports.isObject = function isObject(obj) {\n\treturn obj !== null && typeof obj === 'object';\n};\n\nexports.nowTimestamp = function nowTimestamp() {\n\treturn Date.now() / 1000;\n};\n\nclass Grouper extends Map {\n\t/**\n\t * Adds the `value` to the `key`'s array of values.\n\t * @param {*} key Key to set.\n\t * @param {*} value Value to add to `key`'s array.\n\t * @returns {undefined} undefined.\n\t */\n\tadd(key, value) {\n\t\tif (this.has(key)) {\n\t\t\tthis.get(key).push(value);\n\t\t} else {\n\t\t\tthis.set(key, [value]);\n\t\t}\n\t}\n}\n\nexports.Grouper = Grouper;\n","'use strict';\n\nconst { getValueAsString } = require('./util');\n\nclass Registry {\n\tstatic get PROMETHEUS_CONTENT_TYPE() {\n\t\treturn 'text/plain; version=0.0.4; charset=utf-8';\n\t}\n\n\tstatic get OPENMETRICS_CONTENT_TYPE() {\n\t\treturn 'application/openmetrics-text; version=1.0.0; charset=utf-8';\n\t}\n\n\tconstructor(regContentType = Registry.PROMETHEUS_CONTENT_TYPE) {\n\t\tthis._metrics = {};\n\t\tthis._collectors = [];\n\t\tthis._defaultLabels = {};\n\t\tif (\n\t\t\tregContentType !== Registry.PROMETHEUS_CONTENT_TYPE &&\n\t\t\tregContentType !== Registry.OPENMETRICS_CONTENT_TYPE\n\t\t) {\n\t\t\tthrow new TypeError(`Content type ${regContentType} is unsupported`);\n\t\t}\n\t\tthis._contentType = regContentType;\n\t}\n\n\tgetMetricsAsArray() {\n\t\treturn Object.values(this._metrics);\n\t}\n\n\tasync getMetricsAsString(metrics) {\n\t\tconst metric =\n\t\t\ttypeof metrics.getForPromString === 'function'\n\t\t\t\t? await metrics.getForPromString()\n\t\t\t\t: await metrics.get();\n\n\t\tconst name = escapeString(metric.name);\n\t\tconst help = `# HELP ${name} ${escapeString(metric.help)}`;\n\t\tconst type = `# TYPE ${name} ${metric.type}`;\n\t\tconst values = [help, type];\n\n\t\tconst defaultLabels =\n\t\t\tObject.keys(this._defaultLabels).length > 0 ? this._defaultLabels : null;\n\n\t\tconst isOpenMetrics =\n\t\t\tthis.contentType === Registry.OPENMETRICS_CONTENT_TYPE;\n\n\t\tfor (const val of metric.values || []) {\n\t\t\tlet { metricName = name, labels = {} } = val;\n\t\t\tconst { sharedLabels = {} } = val;\n\t\t\tif (isOpenMetrics && metric.type === 'counter') {\n\t\t\t\tmetricName = `${metricName}_total`;\n\t\t\t}\n\n\t\t\tif (defaultLabels) {\n\t\t\t\tlabels = { ...labels, ...defaultLabels, ...labels };\n\t\t\t}\n\n\t\t\t// We have to flatten these separately to avoid duplicate labels appearing\n\t\t\t// between the base labels and the shared labels\n\t\t\tconst formattedLabels = formatLabels(labels, sharedLabels);\n\n\t\t\tconst flattenedShared = flattenSharedLabels(sharedLabels);\n\t\t\tconst labelParts = [...formattedLabels, flattenedShared].filter(Boolean);\n\t\t\tconst labelsString = labelParts.length ? `{${labelParts.join(',')}}` : '';\n\t\t\tlet fullMetricLine = `${metricName}${labelsString} ${getValueAsString(\n\t\t\t\tval.value,\n\t\t\t)}`;\n\n\t\t\tconst { exemplar } = val;\n\t\t\tif (exemplar && isOpenMetrics) {\n\t\t\t\tconst formattedExemplars = formatLabels(exemplar.labelSet);\n\t\t\t\tfullMetricLine += ` # {${formattedExemplars.join(\n\t\t\t\t\t',',\n\t\t\t\t)}} ${getValueAsString(exemplar.value)} ${exemplar.timestamp}`;\n\t\t\t}\n\t\t\tvalues.push(fullMetricLine);\n\t\t}\n\n\t\treturn values.join('\\n');\n\t}\n\n\tasync metrics() {\n\t\tconst isOpenMetrics =\n\t\t\tthis.contentType === Registry.OPENMETRICS_CONTENT_TYPE;\n\n\t\tconst promises = this.getMetricsAsArray().map(metric => {\n\t\t\tif (isOpenMetrics && metric.type === 'counter') {\n\t\t\t\tmetric.name = standardizeCounterName(metric.name);\n\t\t\t}\n\t\t\treturn this.getMetricsAsString(metric);\n\t\t});\n\n\t\tconst resolves = await Promise.all(promises);\n\n\t\treturn isOpenMetrics\n\t\t\t? `${resolves.join('\\n')}\\n# EOF\\n`\n\t\t\t: `${resolves.join('\\n\\n')}\\n`;\n\t}\n\n\tregisterMetric(metric) {\n\t\tif (this._metrics[metric.name] && this._metrics[metric.name] !== metric) {\n\t\t\tthrow new Error(\n\t\t\t\t`A metric with the name ${metric.name} has already been registered.`,\n\t\t\t);\n\t\t}\n\n\t\tthis._metrics[metric.name] = metric;\n\t}\n\n\tclear() {\n\t\tthis._metrics = {};\n\t\tthis._defaultLabels = {};\n\t}\n\n\tasync getMetricsAsJSON() {\n\t\tconst metrics = [];\n\t\tconst defaultLabelNames = Object.keys(this._defaultLabels);\n\n\t\tconst promises = [];\n\n\t\tfor (const metric of this.getMetricsAsArray()) {\n\t\t\tpromises.push(metric.get());\n\t\t}\n\n\t\tconst resolves = await Promise.all(promises);\n\n\t\tfor (const item of resolves) {\n\t\t\tif (item.values && defaultLabelNames.length > 0) {\n\t\t\t\tfor (const val of item.values) {\n\t\t\t\t\t// Make a copy before mutating\n\t\t\t\t\tval.labels = Object.assign({}, val.labels);\n\n\t\t\t\t\tfor (const labelName of defaultLabelNames) {\n\t\t\t\t\t\tval.labels[labelName] =\n\t\t\t\t\t\t\tval.labels[labelName] || this._defaultLabels[labelName];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tmetrics.push(item);\n\t\t}\n\n\t\treturn metrics;\n\t}\n\n\tremoveSingleMetric(name) {\n\t\tdelete this._metrics[name];\n\t}\n\n\tgetSingleMetricAsString(name) {\n\t\treturn this.getMetricsAsString(this._metrics[name]);\n\t}\n\n\tgetSingleMetric(name) {\n\t\treturn this._metrics[name];\n\t}\n\n\tsetDefaultLabels(labels) {\n\t\tthis._defaultLabels = labels;\n\t}\n\n\tresetMetrics() {\n\t\tfor (const metric in this._metrics) {\n\t\t\tthis._metrics[metric].reset();\n\t\t}\n\t}\n\n\tget contentType() {\n\t\treturn this._contentType;\n\t}\n\n\tsetContentType(metricsContentType) {\n\t\tif (\n\t\t\tmetricsContentType === Registry.OPENMETRICS_CONTENT_TYPE ||\n\t\t\tmetricsContentType === Registry.PROMETHEUS_CONTENT_TYPE\n\t\t) {\n\t\t\tthis._contentType = metricsContentType;\n\t\t} else {\n\t\t\tthrow new Error(`Content type ${metricsContentType} is unsupported`);\n\t\t}\n\t}\n\n\tstatic merge(registers) {\n\t\tconst regType = registers[0].contentType;\n\t\tfor (const reg of registers) {\n\t\t\tif (reg.contentType !== regType) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'Registers can only be merged if they have the same content type',\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tconst mergedRegistry = new Registry(regType);\n\n\t\tconst metricsToMerge = registers.reduce(\n\t\t\t(acc, reg) => acc.concat(reg.getMetricsAsArray()),\n\t\t\t[],\n\t\t);\n\n\t\tmetricsToMerge.forEach(mergedRegistry.registerMetric, mergedRegistry);\n\t\treturn mergedRegistry;\n\t}\n}\n\nfunction formatLabels(labels, exclude) {\n\tconst { hasOwnProperty } = Object.prototype;\n\tconst formatted = [];\n\tfor (const [name, value] of Object.entries(labels)) {\n\t\tif (!exclude || !hasOwnProperty.call(exclude, name)) {\n\t\t\tformatted.push(`${name}=\"${escapeLabelValue(value)}\"`);\n\t\t}\n\t}\n\treturn formatted;\n}\n\nconst sharedLabelCache = new WeakMap();\nfunction flattenSharedLabels(labels) {\n\tconst cached = sharedLabelCache.get(labels);\n\tif (cached) {\n\t\treturn cached;\n\t}\n\n\tconst formattedLabels = formatLabels(labels);\n\tconst flattened = formattedLabels.join(',');\n\tsharedLabelCache.set(labels, flattened);\n\treturn flattened;\n}\nfunction escapeLabelValue(str) {\n\tif (typeof str !== 'string') {\n\t\treturn str;\n\t}\n\treturn escapeString(str).replace(/\"/g, '\\\\\"');\n}\nfunction escapeString(str) {\n\treturn str.replace(/\\\\/g, '\\\\\\\\').replace(/\\n/g, '\\\\n');\n}\nfunction standardizeCounterName(name) {\n\treturn name.replace(/_total$/, '');\n}\n\nmodule.exports = Registry;\nmodule.exports.globalRegistry = new Registry();\n","'use strict';\n\nconst util = require('util');\n\n// These are from https://prometheus.io/docs/concepts/data_model/#metric-names-and-labels\nconst metricRegexp = /^[a-zA-Z_:][a-zA-Z0-9_:]*$/;\nconst labelRegexp = /^[a-zA-Z_][a-zA-Z0-9_]*$/;\n\nexports.validateMetricName = function (name) {\n\treturn metricRegexp.test(name);\n};\n\nexports.validateLabelName = function (names = []) {\n\treturn names.every(name => labelRegexp.test(name));\n};\n\nexports.validateLabel = function validateLabel(savedLabels, labels) {\n\tfor (const label in labels) {\n\t\tif (!savedLabels.includes(label)) {\n\t\t\tthrow new Error(\n\t\t\t\t`Added label \"${label}\" is not included in initial labelset: ${util.inspect(\n\t\t\t\t\tsavedLabels,\n\t\t\t\t)}`,\n\t\t\t);\n\t\t}\n\t}\n};\n","'use strict';\n\nconst Registry = require('./registry');\nconst { isObject } = require('./util');\nconst { validateMetricName, validateLabelName } = require('./validation');\n\n/**\n * @abstract\n */\nclass Metric {\n\tconstructor(config, defaults = {}) {\n\t\tif (!isObject(config)) {\n\t\t\tthrow new TypeError('constructor expected a config object');\n\t\t}\n\t\tObject.assign(\n\t\t\tthis,\n\t\t\t{\n\t\t\t\tlabelNames: [],\n\t\t\t\tregisters: [Registry.globalRegistry],\n\t\t\t\taggregator: 'sum',\n\t\t\t\tenableExemplars: false,\n\t\t\t},\n\t\t\tdefaults,\n\t\t\tconfig,\n\t\t);\n\t\tif (!this.registers) {\n\t\t\t// in case config.registers is `undefined`\n\t\t\tthis.registers = [Registry.globalRegistry];\n\t\t}\n\t\tif (!this.help) {\n\t\t\tthrow new Error('Missing mandatory help parameter');\n\t\t}\n\t\tif (!this.name) {\n\t\t\tthrow new Error('Missing mandatory name parameter');\n\t\t}\n\t\tif (!validateMetricName(this.name)) {\n\t\t\tthrow new Error('Invalid metric name');\n\t\t}\n\t\tif (!validateLabelName(this.labelNames)) {\n\t\t\tthrow new Error('Invalid label name');\n\t\t}\n\n\t\tif (this.collect && typeof this.collect !== 'function') {\n\t\t\tthrow new Error('Optional \"collect\" parameter must be a function');\n\t\t}\n\n\t\tif (this.labelNames) {\n\t\t\tthis.sortedLabelNames = [...this.labelNames].sort();\n\t\t} else {\n\t\t\tthis.sortedLabelNames = [];\n\t\t}\n\n\t\tthis.reset();\n\n\t\tfor (const register of this.registers) {\n\t\t\tif (\n\t\t\t\tthis.enableExemplars &&\n\t\t\t\tregister.contentType === Registry.PROMETHEUS_CONTENT_TYPE\n\t\t\t) {\n\t\t\t\tthrow new TypeError(\n\t\t\t\t\t'Exemplars are supported only on OpenMetrics registries',\n\t\t\t\t);\n\t\t\t}\n\t\t\tregister.registerMetric(this);\n\t\t}\n\t}\n\n\treset() {\n\t\t/* abstract */\n\t}\n}\n\nmodule.exports = { Metric };\n","'use strict';\n\n/**\n * Class representing an OpenMetrics exemplar.\n *\n * @property {object} labelSet\n * @property {number} value\n * @property {number} [timestamp]\n * */\nclass Exemplar {\n\tconstructor(labelSet = {}, value = null) {\n\t\tthis.labelSet = labelSet;\n\t\tthis.value = value;\n\t}\n\n\t/**\n\t * Validation for the label set format.\n\t * https://github.com/OpenObservability/OpenMetrics/blob/d99b705f611b75fec8f450b05e344e02eea6921d/specification/OpenMetrics.md#exemplars\n\t *\n\t * @param {object} labelSet - Exemplar labels.\n\t * @throws {RangeError}\n\t * @return {void}\n\t */\n\tvalidateExemplarLabelSet(labelSet) {\n\t\tlet res = '';\n\t\tfor (const [labelName, labelValue] of Object.entries(labelSet)) {\n\t\t\tres += `${labelName}${labelValue}`;\n\t\t}\n\t\tif (res.length > 128) {\n\t\t\tthrow new RangeError(\n\t\t\t\t'Label set size must be smaller than 128 UTF-8 chars',\n\t\t\t);\n\t\t}\n\t}\n}\n\nmodule.exports = Exemplar;\n","/**\n * Counter metric\n */\n'use strict';\n\nconst util = require('util');\nconst {\n\thashObject,\n\tisObject,\n\tgetLabels,\n\tremoveLabels,\n\tnowTimestamp,\n} = require('./util');\nconst { validateLabel } = require('./validation');\nconst { Metric } = require('./metric');\nconst Exemplar = require('./exemplar');\n\nclass Counter extends Metric {\n\tconstructor(config) {\n\t\tsuper(config);\n\t\tthis.type = 'counter';\n\t\tthis.defaultLabels = {};\n\t\tthis.defaultValue = 1;\n\t\tthis.defaultExemplarLabelSet = {};\n\t\tif (config.enableExemplars) {\n\t\t\tthis.enableExemplars = true;\n\t\t\tthis.inc = this.incWithExemplar;\n\t\t} else {\n\t\t\tthis.inc = this.incWithoutExemplar;\n\t\t}\n\t}\n\n\t/**\n\t * Increment counter\n\t * @param {object} labels - What label you want to be incremented\n\t * @param {Number} value - Value to increment, if omitted increment with 1\n\t * @returns {object} results - object with information about the inc operation\n\t * @returns {string} results.labelHash - hash representation of the labels\n\t */\n\tincWithoutExemplar(labels, value) {\n\t\tlet hash = '';\n\t\tif (isObject(labels)) {\n\t\t\thash = hashObject(labels, this.sortedLabelNames);\n\t\t\tvalidateLabel(this.labelNames, labels);\n\t\t} else {\n\t\t\tvalue = labels;\n\t\t\tlabels = {};\n\t\t}\n\n\t\tif (value && !Number.isFinite(value)) {\n\t\t\tthrow new TypeError(`Value is not a valid number: ${util.format(value)}`);\n\t\t}\n\t\tif (value < 0) {\n\t\t\tthrow new Error('It is not possible to decrease a counter');\n\t\t}\n\n\t\tif (value === null || value === undefined) value = 1;\n\n\t\tsetValue(this.hashMap, value, labels, hash);\n\n\t\treturn { labelHash: hash };\n\t}\n\n\t/**\n\t * Increment counter with exemplar, same as inc but accepts labels for an\n\t * exemplar.\n\t * If no label is provided the current exemplar labels are kept unchanged\n\t * (defaults to empty set).\n\t *\n\t * @param {object} incOpts - Object with options about what metric to increase\n\t * @param {object} incOpts.labels - What label you want to be incremented,\n\t *                                  defaults to null (metric with no labels)\n\t * @param {Number} incOpts.value - Value to increment, defaults to 1\n\t * @param {object} incOpts.exemplarLabels - Key-value  labels for the\n\t *                                          exemplar, defaults to empty set {}\n\t * @returns {void}\n\t */\n\tincWithExemplar({\n\t\tlabels = this.defaultLabels,\n\t\tvalue = this.defaultValue,\n\t\texemplarLabels = this.defaultExemplarLabelSet,\n\t} = {}) {\n\t\tconst res = this.incWithoutExemplar(labels, value);\n\t\tthis.updateExemplar(exemplarLabels, value, res.labelHash);\n\t}\n\n\tupdateExemplar(exemplarLabels, value, hash) {\n\t\tif (exemplarLabels === this.defaultExemplarLabelSet) return;\n\t\tif (!isObject(this.hashMap[hash].exemplar)) {\n\t\t\tthis.hashMap[hash].exemplar = new Exemplar();\n\t\t}\n\t\tthis.hashMap[hash].exemplar.validateExemplarLabelSet(exemplarLabels);\n\t\tthis.hashMap[hash].exemplar.labelSet = exemplarLabels;\n\t\tthis.hashMap[hash].exemplar.value = value ? value : 1;\n\t\tthis.hashMap[hash].exemplar.timestamp = nowTimestamp();\n\t}\n\n\t/**\n\t * Reset counter\n\t * @returns {void}\n\t */\n\treset() {\n\t\tthis.hashMap = {};\n\t\tif (this.labelNames.length === 0) {\n\t\t\tsetValue(this.hashMap, 0);\n\t\t}\n\t}\n\n\tasync get() {\n\t\tif (this.collect) {\n\t\t\tconst v = this.collect();\n\t\t\tif (v instanceof Promise) await v;\n\t\t}\n\n\t\treturn {\n\t\t\thelp: this.help,\n\t\t\tname: this.name,\n\t\t\ttype: this.type,\n\t\t\tvalues: Object.values(this.hashMap),\n\t\t\taggregator: this.aggregator,\n\t\t};\n\t}\n\n\tlabels(...args) {\n\t\tconst labels = getLabels(this.labelNames, args) || {};\n\t\treturn {\n\t\t\tinc: this.inc.bind(this, labels),\n\t\t};\n\t}\n\n\tremove(...args) {\n\t\tconst labels = getLabels(this.labelNames, args) || {};\n\t\tvalidateLabel(this.labelNames, labels);\n\t\treturn removeLabels.call(this, this.hashMap, labels, this.sortedLabelNames);\n\t}\n}\n\nfunction setValue(hashMap, value, labels = {}, hash = '') {\n\tif (hashMap[hash]) {\n\t\thashMap[hash].value += value;\n\t} else {\n\t\thashMap[hash] = { value, labels };\n\t}\n\treturn hashMap;\n}\n\nmodule.exports = Counter;\n","/**\n * Gauge metric\n */\n'use strict';\n\nconst util = require('util');\n\nconst {\n\tsetValue,\n\tsetValueDelta,\n\tgetLabels,\n\thashObject,\n\tisObject,\n\tremoveLabels,\n} = require('./util');\nconst { validateLabel } = require('./validation');\nconst { Metric } = require('./metric');\n\nclass Gauge extends Metric {\n\tconstructor(config) {\n\t\tsuper(config);\n\t\tthis.type = 'gauge';\n\t}\n\n\t/**\n\t * Set a gauge to a value\n\t * @param {object} labels - Object with labels and their values\n\t * @param {Number} value - Value to set the gauge to, must be positive\n\t * @returns {void}\n\t */\n\tset(labels, value) {\n\t\tvalue = getValueArg(labels, value);\n\t\tlabels = getLabelArg(labels);\n\t\tset(this, labels, value);\n\t}\n\n\t/**\n\t * Reset gauge\n\t * @returns {void}\n\t */\n\treset() {\n\t\tthis.hashMap = {};\n\t\tif (this.labelNames.length === 0) {\n\t\t\tsetValue(this.hashMap, 0, {});\n\t\t}\n\t}\n\n\t/**\n\t * Increment a gauge value\n\t * @param {object} labels - Object with labels where key is the label key and value is label value. Can only be one level deep\n\t * @param {Number} value - Value to increment - if omitted, increment with 1\n\t * @returns {void}\n\t */\n\tinc(labels, value) {\n\t\tvalue = getValueArg(labels, value);\n\t\tlabels = getLabelArg(labels);\n\t\tif (value === undefined) value = 1;\n\t\tsetDelta(this, labels, value);\n\t}\n\n\t/**\n\t * Decrement a gauge value\n\t * @param {object} labels - Object with labels where key is the label key and value is label value. Can only be one level deep\n\t * @param {Number} value - Value to decrement - if omitted, decrement with 1\n\t * @returns {void}\n\t */\n\tdec(labels, value) {\n\t\tvalue = getValueArg(labels, value);\n\t\tlabels = getLabelArg(labels);\n\t\tif (value === undefined) value = 1;\n\t\tsetDelta(this, labels, -value);\n\t}\n\n\t/**\n\t * Set the gauge to current unix epoch\n\t * @param {object} labels - Object with labels where key is the label key and value is label value. Can only be one level deep\n\t * @returns {void}\n\t */\n\tsetToCurrentTime(labels) {\n\t\tconst now = Date.now() / 1000;\n\t\tif (labels === undefined) {\n\t\t\tthis.set(now);\n\t\t} else {\n\t\t\tthis.set(labels, now);\n\t\t}\n\t}\n\n\t/**\n\t * Start a timer\n\t * @param {object} labels - Object with labels where key is the label key and value is label value. Can only be one level deep\n\t * @returns {function} - Invoke this function to set the duration in seconds since you started the timer.\n\t * @example\n\t * var done = gauge.startTimer();\n\t * makeXHRRequest(function(err, response) {\n\t *\tdone(); //Duration of the request will be saved\n\t * });\n\t */\n\tstartTimer(labels) {\n\t\tconst start = process.hrtime();\n\t\treturn endLabels => {\n\t\t\tconst delta = process.hrtime(start);\n\t\t\tconst value = delta[0] + delta[1] / 1e9;\n\t\t\tthis.set(Object.assign({}, labels, endLabels), value);\n\t\t\treturn value;\n\t\t};\n\t}\n\n\tasync get() {\n\t\tif (this.collect) {\n\t\t\tconst v = this.collect();\n\t\t\tif (v instanceof Promise) await v;\n\t\t}\n\t\treturn {\n\t\t\thelp: this.help,\n\t\t\tname: this.name,\n\t\t\ttype: this.type,\n\t\t\tvalues: Object.values(this.hashMap),\n\t\t\taggregator: this.aggregator,\n\t\t};\n\t}\n\n\t_getValue(labels) {\n\t\tconst hash = hashObject(labels || {}, this.sortedLabelNames);\n\t\treturn this.hashMap[hash] ? this.hashMap[hash].value : 0;\n\t}\n\n\tlabels(...args) {\n\t\tconst labels = getLabels(this.labelNames, args);\n\t\tvalidateLabel(this.labelNames, labels);\n\t\treturn {\n\t\t\tinc: this.inc.bind(this, labels),\n\t\t\tdec: this.dec.bind(this, labels),\n\t\t\tset: this.set.bind(this, labels),\n\t\t\tsetToCurrentTime: this.setToCurrentTime.bind(this, labels),\n\t\t\tstartTimer: this.startTimer.bind(this, labels),\n\t\t};\n\t}\n\n\tremove(...args) {\n\t\tconst labels = getLabels(this.labelNames, args);\n\t\tvalidateLabel(this.labelNames, labels);\n\t\tremoveLabels.call(this, this.hashMap, labels, this.sortedLabelNames);\n\t}\n}\n\nfunction set(gauge, labels, value) {\n\tif (typeof value !== 'number') {\n\t\tthrow new TypeError(`Value is not a valid number: ${util.format(value)}`);\n\t}\n\n\tvalidateLabel(gauge.labelNames, labels);\n\tsetValue(gauge.hashMap, value, labels);\n}\n\nfunction setDelta(gauge, labels, delta) {\n\tif (typeof delta !== 'number') {\n\t\tthrow new TypeError(`Delta is not a valid number: ${util.format(delta)}`);\n\t}\n\n\tvalidateLabel(gauge.labelNames, labels);\n\tconst hash = hashObject(labels, gauge.sortedLabelNames);\n\tsetValueDelta(gauge.hashMap, delta, labels, hash);\n}\n\nfunction getLabelArg(labels) {\n\treturn isObject(labels) ? labels : {};\n}\n\nfunction getValueArg(labels, value) {\n\treturn isObject(labels) ? value : labels;\n}\n\nmodule.exports = Gauge;\n","/**\n * Histogram\n */\n'use strict';\n\nconst util = require('util');\nconst {\n\tgetLabels,\n\thashObject,\n\tisObject,\n\tremoveLabels,\n\tnowTimestamp,\n} = require('./util');\nconst { validateLabel } = require('./validation');\nconst { Metric } = require('./metric');\nconst Exemplar = require('./exemplar');\n\nclass Histogram extends Metric {\n\tconstructor(config) {\n\t\tsuper(config, {\n\t\t\tbuckets: [0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1, 2.5, 5, 10],\n\t\t});\n\n\t\tthis.type = 'histogram';\n\t\tthis.defaultLabels = {};\n\t\tthis.defaultExemplarLabelSet = {};\n\t\tthis.enableExemplars = false;\n\n\t\tfor (const label of this.labelNames) {\n\t\t\tif (label === 'le') {\n\t\t\t\tthrow new Error('le is a reserved label keyword');\n\t\t\t}\n\t\t}\n\n\t\tthis.upperBounds = this.buckets;\n\t\tthis.bucketValues = this.upperBounds.reduce((acc, upperBound) => {\n\t\t\tacc[upperBound] = 0;\n\t\t\treturn acc;\n\t\t}, {});\n\n\t\tif (config.enableExemplars) {\n\t\t\tthis.enableExemplars = true;\n\t\t\tthis.bucketExemplars = this.upperBounds.reduce((acc, upperBound) => {\n\t\t\t\tacc[upperBound] = null;\n\t\t\t\treturn acc;\n\t\t\t}, {});\n\t\t\tObject.freeze(this.bucketExemplars);\n\t\t\tthis.observe = this.observeWithExemplar;\n\t\t} else {\n\t\t\tthis.observe = this.observeWithoutExemplar;\n\t\t}\n\n\t\tObject.freeze(this.bucketValues);\n\t\tObject.freeze(this.upperBounds);\n\n\t\tif (this.labelNames.length === 0) {\n\t\t\tthis.hashMap = {\n\t\t\t\t[hashObject({})]: createBaseValues(\n\t\t\t\t\t{},\n\t\t\t\t\tthis.bucketValues,\n\t\t\t\t\tthis.bucketExemplars,\n\t\t\t\t),\n\t\t\t};\n\t\t}\n\t}\n\n\t/**\n\t * Observe a value in histogram\n\t * @param {object} labels - Object with labels where key is the label key and value is label value. Can only be one level deep\n\t * @param {Number} value - Value to observe in the histogram\n\t * @returns {void}\n\t */\n\tobserveWithoutExemplar(labels, value) {\n\t\tobserve.call(this, labels === 0 ? 0 : labels || {})(value);\n\t}\n\n\tobserveWithExemplar({\n\t\tlabels = this.defaultLabels,\n\t\tvalue,\n\t\texemplarLabels = this.defaultExemplarLabelSet,\n\t} = {}) {\n\t\tobserve.call(this, labels === 0 ? 0 : labels || {})(value);\n\t\tthis.updateExemplar(labels, value, exemplarLabels);\n\t}\n\n\tupdateExemplar(labels, value, exemplarLabels) {\n\t\tif (Object.keys(exemplarLabels).length === 0) return;\n\t\tconst hash = hashObject(labels, this.sortedLabelNames);\n\t\tconst bound = findBound(this.upperBounds, value);\n\t\tconst { bucketExemplars } = this.hashMap[hash];\n\t\tlet exemplar = bucketExemplars[bound];\n\t\tif (!isObject(exemplar)) {\n\t\t\texemplar = new Exemplar();\n\t\t\tbucketExemplars[bound] = exemplar;\n\t\t}\n\t\texemplar.validateExemplarLabelSet(exemplarLabels);\n\t\texemplar.labelSet = exemplarLabels;\n\t\texemplar.value = value;\n\t\texemplar.timestamp = nowTimestamp();\n\t}\n\n\tasync get() {\n\t\tconst data = await this.getForPromString();\n\t\tdata.values = data.values.map(splayLabels);\n\t\treturn data;\n\t}\n\n\tasync getForPromString() {\n\t\tif (this.collect) {\n\t\t\tconst v = this.collect();\n\t\t\tif (v instanceof Promise) await v;\n\t\t}\n\t\tconst data = Object.values(this.hashMap);\n\t\tconst values = data\n\t\t\t.map(extractBucketValuesForExport(this))\n\t\t\t.reduce(addSumAndCountForExport(this), []);\n\n\t\treturn {\n\t\t\tname: this.name,\n\t\t\thelp: this.help,\n\t\t\ttype: this.type,\n\t\t\tvalues,\n\t\t\taggregator: this.aggregator,\n\t\t};\n\t}\n\n\treset() {\n\t\tthis.hashMap = {};\n\t}\n\n\t/**\n\t * Initialize the metrics for the given combination of labels to zero\n\t * @param {object} labels - Object with labels where key is the label key and value is label value. Can only be one level deep\n\t * @returns {void}\n\t */\n\tzero(labels) {\n\t\tconst hash = hashObject(labels, this.sortedLabelNames);\n\t\tthis.hashMap[hash] = createBaseValues(\n\t\t\tlabels,\n\t\t\tthis.bucketValues,\n\t\t\tthis.bucketExemplars,\n\t\t);\n\t}\n\n\t/**\n\t * Start a timer that could be used to logging durations\n\t * @param {object} labels - Object with labels where key is the label key and value is label value. Can only be one level deep\n\t * @param {object} exemplarLabels - Object with labels for exemplar where key is the label key and value is label value. Can only be one level deep\n\t * @returns {function} - Function to invoke when you want to stop the timer and observe the duration in seconds\n\t * @example\n\t * var end = histogram.startTimer();\n\t * makeExpensiveXHRRequest(function(err, res) {\n\t * \tconst duration = end(); //Observe the duration of expensiveXHRRequest and returns duration in seconds\n\t * \tconsole.log('Duration', duration);\n\t * });\n\t */\n\tstartTimer(labels, exemplarLabels) {\n\t\treturn this.enableExemplars\n\t\t\t? startTimerWithExemplar.call(this, labels, exemplarLabels)()\n\t\t\t: startTimer.call(this, labels)();\n\t}\n\n\tlabels(...args) {\n\t\tconst labels = getLabels(this.labelNames, args);\n\t\tvalidateLabel(this.labelNames, labels);\n\t\treturn {\n\t\t\tobserve: observe.call(this, labels),\n\t\t\tstartTimer: startTimer.call(this, labels),\n\t\t};\n\t}\n\n\tremove(...args) {\n\t\tconst labels = getLabels(this.labelNames, args);\n\t\tvalidateLabel(this.labelNames, labels);\n\t\tremoveLabels.call(this, this.hashMap, labels, this.sortedLabelNames);\n\t}\n}\n\nfunction startTimer(startLabels) {\n\treturn () => {\n\t\tconst start = process.hrtime();\n\t\treturn endLabels => {\n\t\t\tconst delta = process.hrtime(start);\n\t\t\tconst value = delta[0] + delta[1] / 1e9;\n\t\t\tthis.observe(Object.assign({}, startLabels, endLabels), value);\n\t\t\treturn value;\n\t\t};\n\t};\n}\n\nfunction startTimerWithExemplar(startLabels, startExemplarLabels) {\n\treturn () => {\n\t\tconst start = process.hrtime();\n\t\treturn (endLabels, endExemplarLabels) => {\n\t\t\tconst delta = process.hrtime(start);\n\t\t\tconst value = delta[0] + delta[1] / 1e9;\n\t\t\tthis.observe({\n\t\t\t\tlabels: Object.assign({}, startLabels, endLabels),\n\t\t\t\tvalue,\n\t\t\t\texemplarLabels: Object.assign(\n\t\t\t\t\t{},\n\t\t\t\t\tstartExemplarLabels,\n\t\t\t\t\tendExemplarLabels,\n\t\t\t\t),\n\t\t\t});\n\t\t\treturn value;\n\t\t};\n\t};\n}\n\nfunction setValuePair(labels, value, metricName, exemplar, sharedLabels = {}) {\n\treturn {\n\t\tlabels,\n\t\tsharedLabels,\n\t\tvalue,\n\t\tmetricName,\n\t\texemplar,\n\t};\n}\n\nfunction findBound(upperBounds, value) {\n\tfor (let i = 0; i < upperBounds.length; i++) {\n\t\tconst bound = upperBounds[i];\n\t\tif (value <= bound) {\n\t\t\treturn bound;\n\t\t}\n\t}\n\treturn -1;\n}\n\nfunction observe(labels) {\n\treturn value => {\n\t\tconst labelValuePair = convertLabelsAndValues(labels, value);\n\n\t\tvalidateLabel(this.labelNames, labelValuePair.labels);\n\t\tif (!Number.isFinite(labelValuePair.value)) {\n\t\t\tthrow new TypeError(\n\t\t\t\t`Value is not a valid number: ${util.format(labelValuePair.value)}`,\n\t\t\t);\n\t\t}\n\n\t\tconst hash = hashObject(labelValuePair.labels, this.sortedLabelNames);\n\t\tlet valueFromMap = this.hashMap[hash];\n\t\tif (!valueFromMap) {\n\t\t\tvalueFromMap = createBaseValues(\n\t\t\t\tlabelValuePair.labels,\n\t\t\t\tthis.bucketValues,\n\t\t\t\tthis.bucketExemplars,\n\t\t\t);\n\t\t}\n\n\t\tconst b = findBound(this.upperBounds, labelValuePair.value);\n\n\t\tvalueFromMap.sum += labelValuePair.value;\n\t\tvalueFromMap.count += 1;\n\n\t\tif (Object.prototype.hasOwnProperty.call(valueFromMap.bucketValues, b)) {\n\t\t\tvalueFromMap.bucketValues[b] += 1;\n\t\t}\n\n\t\tthis.hashMap[hash] = valueFromMap;\n\t};\n}\n\nfunction createBaseValues(labels, bucketValues, bucketExemplars) {\n\tconst result = {\n\t\tlabels,\n\t\tbucketValues: { ...bucketValues },\n\t\tsum: 0,\n\t\tcount: 0,\n\t};\n\tif (bucketExemplars) {\n\t\tresult.bucketExemplars = { ...bucketExemplars };\n\t}\n\treturn result;\n}\n\nfunction convertLabelsAndValues(labels, value) {\n\treturn isObject(labels)\n\t\t? {\n\t\t\t\tlabels,\n\t\t\t\tvalue,\n\t\t\t}\n\t\t: {\n\t\t\t\tvalue: labels,\n\t\t\t\tlabels: {},\n\t\t\t};\n}\n\nfunction extractBucketValuesForExport(histogram) {\n\tconst name = `${histogram.name}_bucket`;\n\treturn bucketData => {\n\t\tlet acc = 0;\n\t\tconst buckets = histogram.upperBounds.map(upperBound => {\n\t\t\tacc += bucketData.bucketValues[upperBound];\n\t\t\treturn setValuePair(\n\t\t\t\t{ le: upperBound },\n\t\t\t\tacc,\n\t\t\t\tname,\n\t\t\t\tbucketData.bucketExemplars\n\t\t\t\t\t? bucketData.bucketExemplars[upperBound]\n\t\t\t\t\t: null,\n\t\t\t\tbucketData.labels,\n\t\t\t);\n\t\t});\n\t\treturn { buckets, data: bucketData };\n\t};\n}\n\nfunction addSumAndCountForExport(histogram) {\n\treturn (acc, d) => {\n\t\tacc.push(...d.buckets);\n\n\t\tconst infLabel = { le: '+Inf' };\n\t\tacc.push(\n\t\t\tsetValuePair(\n\t\t\t\tinfLabel,\n\t\t\t\td.data.count,\n\t\t\t\t`${histogram.name}_bucket`,\n\t\t\t\td.data.bucketExemplars ? d.data.bucketExemplars['-1'] : null,\n\t\t\t\td.data.labels,\n\t\t\t),\n\t\t\tsetValuePair(\n\t\t\t\t{},\n\t\t\t\td.data.sum,\n\t\t\t\t`${histogram.name}_sum`,\n\t\t\t\tundefined,\n\t\t\t\td.data.labels,\n\t\t\t),\n\t\t\tsetValuePair(\n\t\t\t\t{},\n\t\t\t\td.data.count,\n\t\t\t\t`${histogram.name}_count`,\n\t\t\t\tundefined,\n\t\t\t\td.data.labels,\n\t\t\t),\n\t\t);\n\t\treturn acc;\n\t};\n}\n\nfunction splayLabels(bucket) {\n\tconst { sharedLabels, labels, ...newBucket } = bucket;\n\tfor (const label of Object.keys(sharedLabels)) {\n\t\tlabels[label] = sharedLabels[label];\n\t}\n\tnewBucket.labels = labels;\n\treturn newBucket;\n}\n\nmodule.exports = Histogram;\n","\nfunction TreeBase() {}\n\n// removes all nodes from the tree\nTreeBase.prototype.clear = function() {\n    this._root = null;\n    this.size = 0;\n};\n\n// returns node data if found, null otherwise\nTreeBase.prototype.find = function(data) {\n    var res = this._root;\n\n    while(res !== null) {\n        var c = this._comparator(data, res.data);\n        if(c === 0) {\n            return res.data;\n        }\n        else {\n            res = res.get_child(c > 0);\n        }\n    }\n\n    return null;\n};\n\n// returns iterator to node if found, null otherwise\nTreeBase.prototype.findIter = function(data) {\n    var res = this._root;\n    var iter = this.iterator();\n\n    while(res !== null) {\n        var c = this._comparator(data, res.data);\n        if(c === 0) {\n            iter._cursor = res;\n            return iter;\n        }\n        else {\n            iter._ancestors.push(res);\n            res = res.get_child(c > 0);\n        }\n    }\n\n    return null;\n};\n\n// Returns an iterator to the tree node at or immediately after the item\nTreeBase.prototype.lowerBound = function(item) {\n    var cur = this._root;\n    var iter = this.iterator();\n    var cmp = this._comparator;\n\n    while(cur !== null) {\n        var c = cmp(item, cur.data);\n        if(c === 0) {\n            iter._cursor = cur;\n            return iter;\n        }\n        iter._ancestors.push(cur);\n        cur = cur.get_child(c > 0);\n    }\n\n    for(var i=iter._ancestors.length - 1; i >= 0; --i) {\n        cur = iter._ancestors[i];\n        if(cmp(item, cur.data) < 0) {\n            iter._cursor = cur;\n            iter._ancestors.length = i;\n            return iter;\n        }\n    }\n\n    iter._ancestors.length = 0;\n    return iter;\n};\n\n// Returns an iterator to the tree node immediately after the item\nTreeBase.prototype.upperBound = function(item) {\n    var iter = this.lowerBound(item);\n    var cmp = this._comparator;\n\n    while(iter.data() !== null && cmp(iter.data(), item) === 0) {\n        iter.next();\n    }\n\n    return iter;\n};\n\n// returns null if tree is empty\nTreeBase.prototype.min = function() {\n    var res = this._root;\n    if(res === null) {\n        return null;\n    }\n\n    while(res.left !== null) {\n        res = res.left;\n    }\n\n    return res.data;\n};\n\n// returns null if tree is empty\nTreeBase.prototype.max = function() {\n    var res = this._root;\n    if(res === null) {\n        return null;\n    }\n\n    while(res.right !== null) {\n        res = res.right;\n    }\n\n    return res.data;\n};\n\n// returns a null iterator\n// call next() or prev() to point to an element\nTreeBase.prototype.iterator = function() {\n    return new Iterator(this);\n};\n\n// calls cb on each node's data, in order\nTreeBase.prototype.each = function(cb) {\n    var it=this.iterator(), data;\n    while((data = it.next()) !== null) {\n        if(cb(data) === false) {\n            return;\n        }\n    }\n};\n\n// calls cb on each node's data, in reverse order\nTreeBase.prototype.reach = function(cb) {\n    var it=this.iterator(), data;\n    while((data = it.prev()) !== null) {\n        if(cb(data) === false) {\n            return;\n        }\n    }\n};\n\n\nfunction Iterator(tree) {\n    this._tree = tree;\n    this._ancestors = [];\n    this._cursor = null;\n}\n\nIterator.prototype.data = function() {\n    return this._cursor !== null ? this._cursor.data : null;\n};\n\n// if null-iterator, returns first node\n// otherwise, returns next node\nIterator.prototype.next = function() {\n    if(this._cursor === null) {\n        var root = this._tree._root;\n        if(root !== null) {\n            this._minNode(root);\n        }\n    }\n    else {\n        if(this._cursor.right === null) {\n            // no greater node in subtree, go up to parent\n            // if coming from a right child, continue up the stack\n            var save;\n            do {\n                save = this._cursor;\n                if(this._ancestors.length) {\n                    this._cursor = this._ancestors.pop();\n                }\n                else {\n                    this._cursor = null;\n                    break;\n                }\n            } while(this._cursor.right === save);\n        }\n        else {\n            // get the next node from the subtree\n            this._ancestors.push(this._cursor);\n            this._minNode(this._cursor.right);\n        }\n    }\n    return this._cursor !== null ? this._cursor.data : null;\n};\n\n// if null-iterator, returns last node\n// otherwise, returns previous node\nIterator.prototype.prev = function() {\n    if(this._cursor === null) {\n        var root = this._tree._root;\n        if(root !== null) {\n            this._maxNode(root);\n        }\n    }\n    else {\n        if(this._cursor.left === null) {\n            var save;\n            do {\n                save = this._cursor;\n                if(this._ancestors.length) {\n                    this._cursor = this._ancestors.pop();\n                }\n                else {\n                    this._cursor = null;\n                    break;\n                }\n            } while(this._cursor.left === save);\n        }\n        else {\n            this._ancestors.push(this._cursor);\n            this._maxNode(this._cursor.left);\n        }\n    }\n    return this._cursor !== null ? this._cursor.data : null;\n};\n\nIterator.prototype._minNode = function(start) {\n    while(start.left !== null) {\n        this._ancestors.push(start);\n        start = start.left;\n    }\n    this._cursor = start;\n};\n\nIterator.prototype._maxNode = function(start) {\n    while(start.right !== null) {\n        this._ancestors.push(start);\n        start = start.right;\n    }\n    this._cursor = start;\n};\n\nmodule.exports = TreeBase;\n\n","\nvar TreeBase = require('./treebase');\n\nfunction Node(data) {\n    this.data = data;\n    this.left = null;\n    this.right = null;\n    this.red = true;\n}\n\nNode.prototype.get_child = function(dir) {\n    return dir ? this.right : this.left;\n};\n\nNode.prototype.set_child = function(dir, val) {\n    if(dir) {\n        this.right = val;\n    }\n    else {\n        this.left = val;\n    }\n};\n\nfunction RBTree(comparator) {\n    this._root = null;\n    this._comparator = comparator;\n    this.size = 0;\n}\n\nRBTree.prototype = new TreeBase();\n\n// returns true if inserted, false if duplicate\nRBTree.prototype.insert = function(data) {\n    var ret = false;\n\n    if(this._root === null) {\n        // empty tree\n        this._root = new Node(data);\n        ret = true;\n        this.size++;\n    }\n    else {\n        var head = new Node(undefined); // fake tree root\n\n        var dir = 0;\n        var last = 0;\n\n        // setup\n        var gp = null; // grandparent\n        var ggp = head; // grand-grand-parent\n        var p = null; // parent\n        var node = this._root;\n        ggp.right = this._root;\n\n        // search down\n        while(true) {\n            if(node === null) {\n                // insert new node at the bottom\n                node = new Node(data);\n                p.set_child(dir, node);\n                ret = true;\n                this.size++;\n            }\n            else if(is_red(node.left) && is_red(node.right)) {\n                // color flip\n                node.red = true;\n                node.left.red = false;\n                node.right.red = false;\n            }\n\n            // fix red violation\n            if(is_red(node) && is_red(p)) {\n                var dir2 = ggp.right === gp;\n\n                if(node === p.get_child(last)) {\n                    ggp.set_child(dir2, single_rotate(gp, !last));\n                }\n                else {\n                    ggp.set_child(dir2, double_rotate(gp, !last));\n                }\n            }\n\n            var cmp = this._comparator(node.data, data);\n\n            // stop if found\n            if(cmp === 0) {\n                break;\n            }\n\n            last = dir;\n            dir = cmp < 0;\n\n            // update helpers\n            if(gp !== null) {\n                ggp = gp;\n            }\n            gp = p;\n            p = node;\n            node = node.get_child(dir);\n        }\n\n        // update root\n        this._root = head.right;\n    }\n\n    // make root black\n    this._root.red = false;\n\n    return ret;\n};\n\n// returns true if removed, false if not found\nRBTree.prototype.remove = function(data) {\n    if(this._root === null) {\n        return false;\n    }\n\n    var head = new Node(undefined); // fake tree root\n    var node = head;\n    node.right = this._root;\n    var p = null; // parent\n    var gp = null; // grand parent\n    var found = null; // found item\n    var dir = 1;\n\n    while(node.get_child(dir) !== null) {\n        var last = dir;\n\n        // update helpers\n        gp = p;\n        p = node;\n        node = node.get_child(dir);\n\n        var cmp = this._comparator(data, node.data);\n\n        dir = cmp > 0;\n\n        // save found node\n        if(cmp === 0) {\n            found = node;\n        }\n\n        // push the red node down\n        if(!is_red(node) && !is_red(node.get_child(dir))) {\n            if(is_red(node.get_child(!dir))) {\n                var sr = single_rotate(node, dir);\n                p.set_child(last, sr);\n                p = sr;\n            }\n            else if(!is_red(node.get_child(!dir))) {\n                var sibling = p.get_child(!last);\n                if(sibling !== null) {\n                    if(!is_red(sibling.get_child(!last)) && !is_red(sibling.get_child(last))) {\n                        // color flip\n                        p.red = false;\n                        sibling.red = true;\n                        node.red = true;\n                    }\n                    else {\n                        var dir2 = gp.right === p;\n\n                        if(is_red(sibling.get_child(last))) {\n                            gp.set_child(dir2, double_rotate(p, last));\n                        }\n                        else if(is_red(sibling.get_child(!last))) {\n                            gp.set_child(dir2, single_rotate(p, last));\n                        }\n\n                        // ensure correct coloring\n                        var gpc = gp.get_child(dir2);\n                        gpc.red = true;\n                        node.red = true;\n                        gpc.left.red = false;\n                        gpc.right.red = false;\n                    }\n                }\n            }\n        }\n    }\n\n    // replace and remove if found\n    if(found !== null) {\n        found.data = node.data;\n        p.set_child(p.right === node, node.get_child(node.left === null));\n        this.size--;\n    }\n\n    // update root and make it black\n    this._root = head.right;\n    if(this._root !== null) {\n        this._root.red = false;\n    }\n\n    return found !== null;\n};\n\nfunction is_red(node) {\n    return node !== null && node.red;\n}\n\nfunction single_rotate(root, dir) {\n    var save = root.get_child(!dir);\n\n    root.set_child(!dir, save.get_child(dir));\n    save.set_child(dir, root);\n\n    root.red = true;\n    save.red = false;\n\n    return save;\n}\n\nfunction double_rotate(root, dir) {\n    root.set_child(!dir, single_rotate(root.get_child(!dir), !dir));\n    return single_rotate(root, dir);\n}\n\nmodule.exports = RBTree;\n","\nvar TreeBase = require('./treebase');\n\nfunction Node(data) {\n    this.data = data;\n    this.left = null;\n    this.right = null;\n}\n\nNode.prototype.get_child = function(dir) {\n    return dir ? this.right : this.left;\n};\n\nNode.prototype.set_child = function(dir, val) {\n    if(dir) {\n        this.right = val;\n    }\n    else {\n        this.left = val;\n    }\n};\n\nfunction BinTree(comparator) {\n    this._root = null;\n    this._comparator = comparator;\n    this.size = 0;\n}\n\nBinTree.prototype = new TreeBase();\n\n// returns true if inserted, false if duplicate\nBinTree.prototype.insert = function(data) {\n    if(this._root === null) {\n        // empty tree\n        this._root = new Node(data);\n        this.size++;\n        return true;\n    }\n\n    var dir = 0;\n\n    // setup\n    var p = null; // parent\n    var node = this._root;\n\n    // search down\n    while(true) {\n        if(node === null) {\n            // insert new node at the bottom\n            node = new Node(data);\n            p.set_child(dir, node);\n            ret = true;\n            this.size++;\n            return true;\n        }\n\n        // stop if found\n        if(this._comparator(node.data, data) === 0) {\n            return false;\n        }\n\n        dir = this._comparator(node.data, data) < 0;\n\n        // update helpers\n        p = node;\n        node = node.get_child(dir);\n    }\n};\n\n// returns true if removed, false if not found\nBinTree.prototype.remove = function(data) {\n    if(this._root === null) {\n        return false;\n    }\n\n    var head = new Node(undefined); // fake tree root\n    var node = head;\n    node.right = this._root;\n    var p = null; // parent\n    var found = null; // found item\n    var dir = 1;\n\n    while(node.get_child(dir) !== null) {\n        p = node;\n        node = node.get_child(dir);\n        var cmp = this._comparator(data, node.data);\n        dir = cmp > 0;\n\n        if(cmp === 0) {\n            found = node;\n        }\n    }\n\n    if(found !== null) {\n        found.data = node.data;\n        p.set_child(p.right === node, node.get_child(node.left === null));\n\n        this._root = head.right;\n        this.size--;\n        return true;\n    }\n    else {\n        return false;\n    }\n};\n\nmodule.exports = BinTree;\n\n","module.exports = {\n    RBTree: require('./lib/rbtree'),\n    BinTree: require('./lib/bintree')\n};\n","//\n// TDigest:\n//\n// approximate distribution percentiles from a stream of reals\n//\nvar RBTree = require('bintrees').RBTree;\n\nfunction TDigest(delta, K, CX) {\n    // allocate a TDigest structure.\n    //\n    // delta is the compression factor, the max fraction of mass that\n    // can be owned by one centroid (bigger, up to 1.0, means more\n    // compression). delta=false switches off TDigest behavior and treats\n    // the distribution as discrete, with no merging and exact values\n    // reported.\n    //\n    // K is a size threshold that triggers recompression as the TDigest\n    // grows during input.  (Set it to 0 to disable automatic recompression)\n    //\n    // CX specifies how often to update cached cumulative totals used\n    // for quantile estimation during ingest (see cumulate()).  Set to\n    // 0 to use exact quantiles for each new point.\n    //\n    this.discrete = (delta === false);\n    this.delta = delta || 0.01;\n    this.K = (K === undefined) ? 25 : K;\n    this.CX = (CX === undefined) ? 1.1 : CX;\n    this.centroids = new RBTree(compare_centroid_means);\n    this.nreset = 0;\n    this.reset();\n}\n\nTDigest.prototype.reset = function() {\n    // prepare to digest new points.\n    //\n    this.centroids.clear();\n    this.n = 0;\n    this.nreset += 1;\n    this.last_cumulate = 0;\n};\n\nTDigest.prototype.size = function() {\n    return this.centroids.size;\n};\n\nTDigest.prototype.toArray = function(everything) {\n    // return {mean,n} of centroids as an array ordered by mean.\n    //\n    var result = [];\n    if (everything) {\n        this._cumulate(true); // be sure cumns are exact\n        this.centroids.each(function(c) { result.push(c); });\n    } else {\n        this.centroids.each(function(c) { result.push({mean:c.mean, n:c.n}); });\n    }\n    return result;\n};\n\nTDigest.prototype.summary = function() {\n    var approx = (this.discrete) ? \"exact \" : \"approximating \";\n    var s = [approx + this.n + \" samples using \" + this.size() + \" centroids\",\n             \"min = \"+this.percentile(0),\n             \"Q1  = \"+this.percentile(0.25),\n             \"Q2  = \"+this.percentile(0.5),\n             \"Q3  = \"+this.percentile(0.75),\n             \"max = \"+this.percentile(1.0)];\n    return s.join('\\n');\n};\n\nfunction compare_centroid_means(a, b) {\n    // order two centroids by mean.\n    //\n    return (a.mean > b.mean) ? 1 : (a.mean < b.mean) ? -1 : 0;\n}\n\nfunction compare_centroid_mean_cumns(a, b) {\n    // order two centroids by mean_cumn.\n    //\n    return (a.mean_cumn - b.mean_cumn);\n}\n\nTDigest.prototype.push = function(x, n) {\n    // incorporate value or array of values x, having count n into the\n    // TDigest. n defaults to 1.\n    //\n    n = n || 1;\n    x = Array.isArray(x) ? x : [x];\n    for (var i = 0 ; i < x.length ; i++) {\n        this._digest(x[i], n);\n    }\n};\n\nTDigest.prototype.push_centroid = function(c) {\n    // incorporate centroid or array of centroids c\n    //\n    c = Array.isArray(c) ? c : [c];\n    for (var i = 0 ; i < c.length ; i++) {\n        this._digest(c[i].mean, c[i].n);\n    }\n};\n\nTDigest.prototype._cumulate = function(exact) {\n    // update cumulative counts for each centroid\n    //\n    // exact: falsey means only cumulate after sufficient\n    // growth. During ingest, these counts are used as quantile\n    // estimates, and they work well even when somewhat out of\n    // date. (this is a departure from the publication, you may set CX\n    // to 0 to disable).\n    //\n    if (this.n === this.last_cumulate ||\n        !exact && this.CX && this.CX > (this.n / this.last_cumulate)) {\n        return;\n    }\n    var cumn = 0;\n    this.centroids.each(function(c) {\n        c.mean_cumn = cumn + c.n / 2; // half of n at the mean\n        cumn = c.cumn = cumn + c.n;\n    });\n    this.n = this.last_cumulate = cumn;\n};\n\nTDigest.prototype.find_nearest = function(x) {\n    // find the centroid closest to x. The assumption of\n    // unique means and a unique nearest centroid departs from the\n    // paper, see _digest() below\n    //\n    if (this.size() === 0) {\n        return null;\n    }\n    var iter = this.centroids.lowerBound({mean:x}); // x <= iter || iter==null\n    var c = (iter.data() === null) ? iter.prev() : iter.data();\n    if (c.mean === x || this.discrete) {\n        return c; // c is either x or a neighbor (discrete: no distance func)\n    }\n    var prev = iter.prev();\n    if (prev && Math.abs(prev.mean - x) < Math.abs(c.mean - x)) {\n        return prev;\n    } else {\n        return c;\n    }\n};\n\nTDigest.prototype._new_centroid = function(x, n, cumn) {\n    // create and insert a new centroid into the digest (don't update\n    // cumulatives).\n    //\n    var c = {mean:x, n:n, cumn:cumn};\n    this.centroids.insert(c);\n    this.n += n;\n    return c;\n};\n\nTDigest.prototype._addweight = function(nearest, x, n) {\n    // add weight at location x to nearest centroid.  adding x to\n    // nearest will not shift its relative position in the tree and\n    // require reinsertion.\n    //\n    if (x !== nearest.mean) {\n        nearest.mean += n * (x - nearest.mean) / (nearest.n + n);\n    }\n    nearest.cumn += n;\n    nearest.mean_cumn += n / 2;\n    nearest.n += n;\n    this.n += n;\n};\n\nTDigest.prototype._digest = function(x, n) {\n    // incorporate value x, having count n into the TDigest.\n    //\n    var min = this.centroids.min();\n    var max = this.centroids.max();\n    var nearest = this.find_nearest(x);\n    if (nearest && nearest.mean === x) {\n        // accumulate exact matches into the centroid without\n        // limit. this is a departure from the paper, made so\n        // centroids remain unique and code can be simple.\n        this._addweight(nearest, x, n);\n    } else if (nearest === min) {\n        this._new_centroid(x, n, 0); // new point around min boundary\n    } else if (nearest === max ) {\n        this._new_centroid(x, n, this.n); // new point around max boundary\n    } else if (this.discrete) {\n        this._new_centroid(x, n, nearest.cumn); // never merge\n    } else {\n        // conider a merge based on nearest centroid's capacity. if\n        // there's not room for all of n, don't bother merging any of\n        // it into nearest, as we'll have to make a new centroid\n        // anyway for the remainder (departure from the paper).\n        var p = nearest.mean_cumn / this.n;\n        var max_n = Math.floor(4 * this.n * this.delta * p * (1 - p));\n        if (max_n - nearest.n >= n) {\n            this._addweight(nearest, x, n);\n        } else {\n            this._new_centroid(x, n, nearest.cumn);\n        }\n    }\n    this._cumulate(false);\n    if (!this.discrete && this.K && this.size() > this.K / this.delta) {\n        // re-process the centroids and hope for some compression.\n        this.compress();\n    }\n};\n\nTDigest.prototype.bound_mean = function(x) {\n    // find centroids lower and upper such that lower.mean < x <\n    // upper.mean or lower.mean === x === upper.mean. Don't call\n    // this for x out of bounds.\n    //\n    var iter = this.centroids.upperBound({mean:x}); // x < iter\n    var lower = iter.prev();      // lower <= x\n    var upper = (lower.mean === x) ? lower : iter.next();\n    return [lower, upper];\n};\n\nTDigest.prototype.p_rank = function(x_or_xlist) {\n    // return approximate percentile-ranks (0..1) for data value x.\n    // or list of x.  calculated according to\n    // https://en.wikipedia.org/wiki/Percentile_rank\n    //\n    // (Note that in continuous mode, boundary sample values will\n    // report half their centroid weight inward from 0/1 as the\n    // percentile-rank. X values outside the observed range return\n    // 0/1)\n    //\n    // this triggers cumulate() if cumn's are out of date.\n    //\n    var xs = Array.isArray(x_or_xlist) ? x_or_xlist : [x_or_xlist];\n    var ps = xs.map(this._p_rank, this);\n    return Array.isArray(x_or_xlist) ? ps : ps[0];\n};\n\nTDigest.prototype._p_rank = function(x) {\n    if (this.size() === 0) {\n        return undefined;\n    } else if (x < this.centroids.min().mean) {\n        return 0.0;\n    } else if (x > this.centroids.max().mean) {\n        return 1.0;\n    }\n    // find centroids that bracket x and interpolate x's cumn from\n    // their cumn's.\n    this._cumulate(true); // be sure cumns are exact\n    var bound = this.bound_mean(x);\n    var lower = bound[0], upper = bound[1];\n    if (this.discrete) {\n        return lower.cumn / this.n;\n    } else {\n        var cumn = lower.mean_cumn;\n        if (lower !== upper) {\n            cumn += (x - lower.mean) * (upper.mean_cumn - lower.mean_cumn) / (upper.mean - lower.mean);\n        }\n        return cumn / this.n;\n    }\n};\n\nTDigest.prototype.bound_mean_cumn = function(cumn) {\n    // find centroids lower and upper such that lower.mean_cumn < x <\n    // upper.mean_cumn or lower.mean_cumn === x === upper.mean_cumn. Don't call\n    // this for cumn out of bounds.\n    //\n    // XXX because mean and mean_cumn give rise to the same sort order\n    // (up to identical means), use the mean rbtree for our search.\n    this.centroids._comparator = compare_centroid_mean_cumns;\n    var iter = this.centroids.upperBound({mean_cumn:cumn}); // cumn < iter\n    this.centroids._comparator = compare_centroid_means;\n    var lower = iter.prev();      // lower <= cumn\n    var upper = (lower && lower.mean_cumn === cumn) ? lower : iter.next();\n    return [lower, upper];\n};\n\nTDigest.prototype.percentile = function(p_or_plist) {\n    // for percentage p (0..1), or for each p in a list of ps, return\n    // the smallest data value q at which at least p percent of the\n    // observations <= q.\n    //\n    // for discrete distributions, this selects q using the Nearest\n    // Rank Method\n    // (https://en.wikipedia.org/wiki/Percentile#The_Nearest_Rank_method)\n    // (in scipy, same as percentile(...., interpolation='higher')\n    //\n    // for continuous distributions, interpolates data values between\n    // count-weighted bracketing means.\n    //\n    // this triggers cumulate() if cumn's are out of date.\n    //\n    var ps = Array.isArray(p_or_plist) ? p_or_plist : [p_or_plist];\n    var qs = ps.map(this._percentile, this);\n    return Array.isArray(p_or_plist) ? qs : qs[0];\n};\n\nTDigest.prototype._percentile = function(p) {\n    if (this.size() === 0) {\n        return undefined;\n    }\n    this._cumulate(true); // be sure cumns are exact\n    var h = this.n * p;\n    var bound = this.bound_mean_cumn(h);\n    var lower = bound[0], upper = bound[1];\n\n    if (upper === lower || lower === null || upper === null) {\n        return (lower || upper).mean;\n    } else if (!this.discrete) {\n        return lower.mean + (h - lower.mean_cumn) * (upper.mean - lower.mean) / (upper.mean_cumn - lower.mean_cumn);\n    } else if (h <= lower.cumn) {\n        return lower.mean;\n    } else {\n        return upper.mean;\n    }\n};\n\nfunction pop_random(choices) {\n    // remove and return an item randomly chosen from the array of choices\n    // (mutates choices)\n    //\n    var idx = Math.floor(Math.random() * choices.length);\n    return choices.splice(idx, 1)[0];\n}\n\nTDigest.prototype.compress = function() {\n    // TDigests experience worst case compression (none) when input\n    // increases monotonically.  Improve on any bad luck by\n    // reconsuming digest centroids as if they were weighted points\n    // while shuffling their order (and hope for the best).\n    //\n    if (this.compressing) {\n        return;\n    }\n    var points = this.toArray();\n    this.reset();\n    this.compressing = true;\n    while (points.length > 0) {\n        this.push_centroid(pop_random(points));\n    }\n    this._cumulate(true);\n    this.compressing = false;\n};\n\nfunction Digest(config) {\n    // allocate a distribution digest structure. This is an extension\n    // of a TDigest structure that starts in exact histogram (discrete)\n    // mode, and automatically switches to TDigest mode for large\n    // samples that appear to be from a continuous distribution.\n    //\n    this.config = config || {};\n    this.mode = this.config.mode || 'auto'; // disc, cont, auto\n    TDigest.call(this, this.mode === 'cont' ? config.delta : false);\n    this.digest_ratio = this.config.ratio || 0.9;\n    this.digest_thresh = this.config.thresh || 1000;\n    this.n_unique = 0;\n}\nDigest.prototype = Object.create(TDigest.prototype);\nDigest.prototype.constructor = Digest;\n\nDigest.prototype.push = function(x_or_xlist) {\n    TDigest.prototype.push.call(this, x_or_xlist);\n    this.check_continuous();\n};\n\nDigest.prototype._new_centroid = function(x, n, cumn) {\n    this.n_unique += 1;\n    TDigest.prototype._new_centroid.call(this, x, n, cumn);\n};\n\nDigest.prototype._addweight = function(nearest, x, n) {\n    if (nearest.n === 1) {\n        this.n_unique -= 1;\n    }\n    TDigest.prototype._addweight.call(this, nearest, x, n);\n};\n\nDigest.prototype.check_continuous = function() {\n    // while in 'auto' mode, if there are many unique elements, assume\n    // they are from a continuous distribution and switch to 'cont'\n    // mode (tdigest behavior). Return true on transition from\n    // disctete to continuous.\n    if (this.mode !== 'auto' || this.size() < this.digest_thresh) {\n        return false;\n    }\n    if (this.n_unique / this.size() > this.digest_ratio) {\n        this.mode = 'cont';\n        this.discrete = false;\n        this.delta = this.config.delta || 0.01;\n        this.compress();\n        return true;\n    }\n    return false;\n};\n\nmodule.exports = {\n    'TDigest': TDigest,\n    'Digest': Digest\n};\n","'use strict';\n\nconst { TDigest } = require('tdigest');\n\nclass TimeWindowQuantiles {\n\tconstructor(maxAgeSeconds, ageBuckets) {\n\t\tthis.maxAgeSeconds = maxAgeSeconds || 0;\n\t\tthis.ageBuckets = ageBuckets || 0;\n\n\t\tthis.shouldRotate = maxAgeSeconds && ageBuckets;\n\n\t\tthis.ringBuffer = Array(ageBuckets).fill(new TDigest());\n\t\tthis.currentBuffer = 0;\n\n\t\tthis.lastRotateTimestampMillis = Date.now();\n\t\tthis.durationBetweenRotatesMillis =\n\t\t\t(maxAgeSeconds * 1000) / ageBuckets || Infinity;\n\t}\n\n\tsize() {\n\t\tconst bucket = rotate.call(this);\n\t\treturn bucket.size();\n\t}\n\n\tpercentile(quantile) {\n\t\tconst bucket = rotate.call(this);\n\t\treturn bucket.percentile(quantile);\n\t}\n\n\tpush(value) {\n\t\trotate.call(this);\n\t\tthis.ringBuffer.forEach(bucket => {\n\t\t\tbucket.push(value);\n\t\t});\n\t}\n\n\treset() {\n\t\tthis.ringBuffer.forEach(bucket => {\n\t\t\tbucket.reset();\n\t\t});\n\t}\n\n\tcompress() {\n\t\tthis.ringBuffer.forEach(bucket => {\n\t\t\tbucket.compress();\n\t\t});\n\t}\n}\n\nfunction rotate() {\n\tlet timeSinceLastRotateMillis = Date.now() - this.lastRotateTimestampMillis;\n\twhile (\n\t\ttimeSinceLastRotateMillis > this.durationBetweenRotatesMillis &&\n\t\tthis.shouldRotate\n\t) {\n\t\tthis.ringBuffer[this.currentBuffer] = new TDigest();\n\n\t\tif (++this.currentBuffer >= this.ringBuffer.length) {\n\t\t\tthis.currentBuffer = 0;\n\t\t}\n\t\ttimeSinceLastRotateMillis -= this.durationBetweenRotatesMillis;\n\t\tthis.lastRotateTimestampMillis += this.durationBetweenRotatesMillis;\n\t}\n\treturn this.ringBuffer[this.currentBuffer];\n}\n\nmodule.exports = TimeWindowQuantiles;\n","/**\n * Summary\n */\n'use strict';\n\nconst util = require('util');\nconst { getLabels, hashObject, removeLabels } = require('./util');\nconst { validateLabel } = require('./validation');\nconst { Metric } = require('./metric');\nconst timeWindowQuantiles = require('./timeWindowQuantiles');\n\nconst DEFAULT_COMPRESS_COUNT = 1000; // every 1000 measurements\n\nclass Summary extends Metric {\n\tconstructor(config) {\n\t\tsuper(config, {\n\t\t\tpercentiles: [0.01, 0.05, 0.5, 0.9, 0.95, 0.99, 0.999],\n\t\t\tcompressCount: DEFAULT_COMPRESS_COUNT,\n\t\t\thashMap: {},\n\t\t});\n\n\t\tthis.type = 'summary';\n\n\t\tfor (const label of this.labelNames) {\n\t\t\tif (label === 'quantile')\n\t\t\t\tthrow new Error('quantile is a reserved label keyword');\n\t\t}\n\n\t\tif (this.labelNames.length === 0) {\n\t\t\tthis.hashMap = {\n\t\t\t\t[hashObject({})]: {\n\t\t\t\t\tlabels: {},\n\t\t\t\t\ttd: new timeWindowQuantiles(this.maxAgeSeconds, this.ageBuckets),\n\t\t\t\t\tcount: 0,\n\t\t\t\t\tsum: 0,\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t}\n\n\t/**\n\t * Observe a value\n\t * @param {object} labels - Object with labels where key is the label key and value is label value. Can only be one level deep\n\t * @param {Number} value - Value to observe\n\t * @returns {void}\n\t */\n\tobserve(labels, value) {\n\t\tobserve.call(this, labels === 0 ? 0 : labels || {})(value);\n\t}\n\n\tasync get() {\n\t\tif (this.collect) {\n\t\t\tconst v = this.collect();\n\t\t\tif (v instanceof Promise) await v;\n\t\t}\n\t\tconst hashKeys = Object.keys(this.hashMap);\n\t\tconst values = [];\n\n\t\thashKeys.forEach(hashKey => {\n\t\t\tconst s = this.hashMap[hashKey];\n\t\t\tif (s) {\n\t\t\t\tif (this.pruneAgedBuckets && s.td.size() === 0) {\n\t\t\t\t\tdelete this.hashMap[hashKey];\n\t\t\t\t} else {\n\t\t\t\t\textractSummariesForExport(s, this.percentiles).forEach(v => {\n\t\t\t\t\t\tvalues.push(v);\n\t\t\t\t\t});\n\t\t\t\t\tvalues.push(getSumForExport(s, this));\n\t\t\t\t\tvalues.push(getCountForExport(s, this));\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn {\n\t\t\tname: this.name,\n\t\t\thelp: this.help,\n\t\t\ttype: this.type,\n\t\t\tvalues,\n\t\t\taggregator: this.aggregator,\n\t\t};\n\t}\n\n\treset() {\n\t\tconst data = Object.values(this.hashMap);\n\t\tdata.forEach(s => {\n\t\t\ts.td.reset();\n\t\t\ts.count = 0;\n\t\t\ts.sum = 0;\n\t\t});\n\t}\n\n\t/**\n\t * Start a timer that could be used to logging durations\n\t * @param {object} labels - Object with labels where key is the label key and value is label value. Can only be one level deep\n\t * @returns {function} - Function to invoke when you want to stop the timer and observe the duration in seconds\n\t * @example\n\t * var end = summary.startTimer();\n\t * makeExpensiveXHRRequest(function(err, res) {\n\t *\tend(); //Observe the duration of expensiveXHRRequest\n\t * });\n\t */\n\tstartTimer(labels) {\n\t\treturn startTimer.call(this, labels)();\n\t}\n\n\tlabels(...args) {\n\t\tconst labels = getLabels(this.labelNames, args);\n\t\tvalidateLabel(this.labelNames, labels);\n\t\treturn {\n\t\t\tobserve: observe.call(this, labels),\n\t\t\tstartTimer: startTimer.call(this, labels),\n\t\t};\n\t}\n\n\tremove(...args) {\n\t\tconst labels = getLabels(this.labelNames, args);\n\t\tvalidateLabel(this.labelNames, labels);\n\t\tremoveLabels.call(this, this.hashMap, labels, this.sortedLabelNames);\n\t}\n}\n\nfunction extractSummariesForExport(summaryOfLabels, percentiles) {\n\tsummaryOfLabels.td.compress();\n\n\treturn percentiles.map(percentile => {\n\t\tconst percentileValue = summaryOfLabels.td.percentile(percentile);\n\t\treturn {\n\t\t\tlabels: Object.assign({ quantile: percentile }, summaryOfLabels.labels),\n\t\t\tvalue: percentileValue ? percentileValue : 0,\n\t\t};\n\t});\n}\n\nfunction getCountForExport(value, summary) {\n\treturn {\n\t\tmetricName: `${summary.name}_count`,\n\t\tlabels: value.labels,\n\t\tvalue: value.count,\n\t};\n}\n\nfunction getSumForExport(value, summary) {\n\treturn {\n\t\tmetricName: `${summary.name}_sum`,\n\t\tlabels: value.labels,\n\t\tvalue: value.sum,\n\t};\n}\n\nfunction startTimer(startLabels) {\n\treturn () => {\n\t\tconst start = process.hrtime();\n\t\treturn endLabels => {\n\t\t\tconst delta = process.hrtime(start);\n\t\t\tconst value = delta[0] + delta[1] / 1e9;\n\t\t\tthis.observe(Object.assign({}, startLabels, endLabels), value);\n\t\t\treturn value;\n\t\t};\n\t};\n}\n\nfunction observe(labels) {\n\treturn value => {\n\t\tconst labelValuePair = convertLabelsAndValues(labels, value);\n\n\t\tvalidateLabel(this.labelNames, labels);\n\t\tif (!Number.isFinite(labelValuePair.value)) {\n\t\t\tthrow new TypeError(\n\t\t\t\t`Value is not a valid number: ${util.format(labelValuePair.value)}`,\n\t\t\t);\n\t\t}\n\n\t\tconst hash = hashObject(labelValuePair.labels, this.sortedLabelNames);\n\t\tlet summaryOfLabel = this.hashMap[hash];\n\t\tif (!summaryOfLabel) {\n\t\t\tsummaryOfLabel = {\n\t\t\t\tlabels: labelValuePair.labels,\n\t\t\t\ttd: new timeWindowQuantiles(this.maxAgeSeconds, this.ageBuckets),\n\t\t\t\tcount: 0,\n\t\t\t\tsum: 0,\n\t\t\t};\n\t\t}\n\n\t\tsummaryOfLabel.td.push(labelValuePair.value);\n\t\tsummaryOfLabel.count++;\n\t\tif (summaryOfLabel.count % this.compressCount === 0) {\n\t\t\tsummaryOfLabel.td.compress();\n\t\t}\n\t\tsummaryOfLabel.sum += labelValuePair.value;\n\t\tthis.hashMap[hash] = summaryOfLabel;\n\t};\n}\n\nfunction convertLabelsAndValues(labels, value) {\n\tif (value === undefined) {\n\t\treturn {\n\t\t\tvalue: labels,\n\t\t\tlabels: {},\n\t\t};\n\t}\n\n\treturn {\n\t\tlabels,\n\t\tvalue,\n\t};\n}\n\nmodule.exports = Summary;\n","'use strict';\n\nconst url = require('url');\nconst http = require('http');\nconst https = require('https');\nconst { gzipSync } = require('zlib');\nconst { globalRegistry } = require('./registry');\n\nclass Pushgateway {\n\tconstructor(gatewayUrl, options, registry) {\n\t\tif (!registry) {\n\t\t\tregistry = globalRegistry;\n\t\t}\n\t\tthis.registry = registry;\n\t\tthis.gatewayUrl = gatewayUrl;\n\t\tconst { requireJobName, ...requestOptions } = {\n\t\t\trequireJobName: true,\n\t\t\t...options,\n\t\t};\n\t\tthis.requireJobName = requireJobName;\n\t\tthis.requestOptions = requestOptions;\n\t}\n\n\tpushAdd(params = {}) {\n\t\tif (this.requireJobName && !params.jobName) {\n\t\t\tthrow new Error('Missing jobName parameter');\n\t\t}\n\n\t\treturn useGateway.call(this, 'POST', params.jobName, params.groupings);\n\t}\n\n\tpush(params = {}) {\n\t\tif (this.requireJobName && !params.jobName) {\n\t\t\tthrow new Error('Missing jobName parameter');\n\t\t}\n\n\t\treturn useGateway.call(this, 'PUT', params.jobName, params.groupings);\n\t}\n\n\tdelete(params = {}) {\n\t\tif (this.requireJobName && !params.jobName) {\n\t\t\tthrow new Error('Missing jobName parameter');\n\t\t}\n\n\t\treturn useGateway.call(this, 'DELETE', params.jobName, params.groupings);\n\t}\n}\nasync function useGateway(method, job, groupings) {\n\t// `URL` first added in v6.13.0\n\t// eslint-disable-next-line n/no-deprecated-api\n\tconst gatewayUrlParsed = url.parse(this.gatewayUrl);\n\tconst gatewayUrlPath =\n\t\tgatewayUrlParsed.pathname && gatewayUrlParsed.pathname !== '/'\n\t\t\t? gatewayUrlParsed.pathname\n\t\t\t: '';\n\tconst jobPath = job\n\t\t? `/job/${encodeURIComponent(job)}${generateGroupings(groupings)}`\n\t\t: '';\n\tconst path = `${gatewayUrlPath}/metrics${jobPath}`;\n\n\t// eslint-disable-next-line n/no-deprecated-api\n\tconst target = url.resolve(this.gatewayUrl, path);\n\t// eslint-disable-next-line n/no-deprecated-api\n\tconst requestParams = url.parse(target);\n\tconst httpModule = isHttps(requestParams.href) ? https : http;\n\tconst options = Object.assign(requestParams, this.requestOptions, {\n\t\tmethod,\n\t});\n\n\treturn new Promise((resolve, reject) => {\n\t\tif (method === 'DELETE' && options.headers) {\n\t\t\tdelete options.headers['Content-Encoding'];\n\t\t}\n\t\tconst req = httpModule.request(options, resp => {\n\t\t\tlet body = '';\n\t\t\tresp.setEncoding('utf8');\n\t\t\tresp.on('data', chunk => {\n\t\t\t\tbody += chunk;\n\t\t\t});\n\t\t\tresp.on('end', () => {\n\t\t\t\tif (resp.statusCode >= 400) {\n\t\t\t\t\treject(\n\t\t\t\t\t\tnew Error(`push failed with status ${resp.statusCode}, ${body}`),\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tresolve({ resp, body });\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\treq.on('error', err => {\n\t\t\treject(err);\n\t\t});\n\n\t\treq.on('timeout', () => {\n\t\t\treq.destroy(new Error('Pushgateway request timed out'));\n\t\t});\n\n\t\tif (method !== 'DELETE') {\n\t\t\tthis.registry\n\t\t\t\t.metrics()\n\t\t\t\t.then(metrics => {\n\t\t\t\t\tif (\n\t\t\t\t\t\toptions.headers &&\n\t\t\t\t\t\toptions.headers['Content-Encoding'] === 'gzip'\n\t\t\t\t\t) {\n\t\t\t\t\t\tmetrics = gzipSync(metrics);\n\t\t\t\t\t}\n\t\t\t\t\treq.write(metrics);\n\t\t\t\t\treq.end();\n\t\t\t\t})\n\t\t\t\t.catch(err => {\n\t\t\t\t\treject(err);\n\t\t\t\t});\n\t\t} else {\n\t\t\treq.end();\n\t\t}\n\t});\n}\n\nfunction generateGroupings(groupings) {\n\tif (!groupings) {\n\t\treturn '';\n\t}\n\treturn Object.keys(groupings)\n\t\t.map(\n\t\t\tkey =>\n\t\t\t\t`/${encodeURIComponent(key)}/${encodeURIComponent(groupings[key])}`,\n\t\t)\n\t\t.join('');\n}\n\nfunction isHttps(href) {\n\treturn href.search(/^https/) !== -1;\n}\n\nmodule.exports = Pushgateway;\n","'use strict';\n\nexports.linearBuckets = (start, width, count) => {\n\tif (count < 1) {\n\t\tthrow new Error('Linear buckets needs a positive count');\n\t}\n\n\tconst buckets = new Array(count);\n\tfor (let i = 0; i < count; i++) {\n\t\tbuckets[i] = start + i * width;\n\t}\n\treturn buckets;\n};\n\nexports.exponentialBuckets = (start, factor, count) => {\n\tif (start <= 0) {\n\t\tthrow new Error('Exponential buckets needs a positive start');\n\t}\n\tif (count < 1) {\n\t\tthrow new Error('Exponential buckets needs a positive count');\n\t}\n\tif (factor <= 1) {\n\t\tthrow new Error('Exponential buckets needs a factor greater than 1');\n\t}\n\tconst buckets = new Array(count);\n\tfor (let i = 0; i < count; i++) {\n\t\tbuckets[i] = start;\n\t\tstart *= factor;\n\t}\n\treturn buckets;\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/** only globals that common to node and browsers are allowed */\n// eslint-disable-next-line node/no-unsupported-features/es-builtins\nexport const _globalThis = typeof globalThis === 'object' ? globalThis : global;\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 * from './globalThis';\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 * from './node';\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// this is autogenerated file, see scripts/version-update.js\nexport const VERSION = '1.9.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\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 *\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 { MeterProvider } from '../metrics/MeterProvider';\nimport { ContextManager } from '../context/types';\nimport { DiagLogger } from '../diag/types';\nimport { _globalThis } from '../platform';\nimport { 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\nconst _global = _globalThis 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 *\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 { getGlobal } from '../internal/global-utils';\nimport { ComponentLoggerOptions, DiagLogger, DiagLogFunction } 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: any[]): void {\n    return logProxy('debug', this._namespace, args);\n  }\n\n  public error(...args: any[]): void {\n    return logProxy('error', this._namespace, args);\n  }\n\n  public info(...args: any[]): void {\n    return logProxy('info', this._namespace, args);\n  }\n\n  public warn(...args: any[]): void {\n    return logProxy('warn', this._namespace, args);\n  }\n\n  public verbose(...args: any[]): void {\n    return logProxy('verbose', this._namespace, args);\n  }\n}\n\nfunction logProxy(\n  funcName: keyof DiagLogger,\n  namespace: string,\n  args: any\n): void {\n  const logger = getGlobal('diag');\n  // shortcut if logger not set\n  if (!logger) {\n    return;\n  }\n\n  args.unshift(namespace);\n  return logger[funcName](...(args as Parameters<DiagLogFunction>));\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 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 */\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 */\nexport interface ComponentLoggerOptions {\n  namespace: string;\n}\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 *\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 { DiagLogFunction, DiagLogger, 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 *\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 { DiagComponentLogger } from '../diag/ComponentLogger';\nimport { createLogLevelDiagLogger } from '../diag/internal/logLevelLogger';\nimport {\n  ComponentLoggerOptions,\n  DiagLogFunction,\n  DiagLogger,\n  DiagLoggerApi,\n  DiagLogLevel,\n} 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 */\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 *\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 { 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()).map(([k, v]) => [k, v]);\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 *\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 * Symbol used to make BaggageEntryMetadata an opaque type\n */\nexport const baggageEntryMetadataSymbol = Symbol('BaggageEntryMetadata');\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 { DiagAPI } from '../api/diag';\nimport { BaggageImpl } from './internal/baggage-impl';\nimport { baggageEntryMetadataSymbol } from './internal/symbol';\nimport { 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 */\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 *\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 { Context } from './types';\n\n/** Get a key to uniquely identify a context value */\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/** The root context is used as the default parent context when there is no active context */\nexport const ROOT_CONTEXT: Context = new BaseContext();\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 { 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/**\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 */\nexport class DiagConsoleLogger implements DiagLogger {\n  constructor() {\n    function _consoleFunc(funcName: ConsoleMapKeys): DiagLogFunction {\n      return function (...args) {\n        if (console) {\n          // Some environments only expose the console when the F12 developer console is open\n          // eslint-disable-next-line no-console\n          let theFunc = console[funcName];\n          if (typeof theFunc !== 'function') {\n            // Not all environments support all functions\n            // eslint-disable-next-line no-console\n            theFunc = console.log;\n          }\n\n          // One last final check\n          if (typeof theFunc === 'function') {\n            return theFunc.apply(console, args);\n          }\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 *\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 { Meter } from './Meter';\nimport {\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 */\nexport function createNoopMeter(): Meter {\n  return NOOP_METER;\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 { Attributes, AttributeValue } from '../common/Attributes';\nimport { Context } from '../context/types';\nimport { BatchObservableResult, ObservableResult } from './ObservableResult';\n\n/**\n * Advisory options influencing aggregation configuration parameters.\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 */\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   */\n  advice?: MetricAdvice;\n}\n\n/** The Type of value. It describes how the data is reported. */\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 */\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\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\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\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 */\nexport type MetricAttributes = Attributes;\n\n/**\n * @deprecated please use {@link AttributeValue}\n */\nexport type MetricAttributeValue = AttributeValue;\n\n/**\n * The observable callback for Observable instruments.\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 */\nexport type BatchObservableCallback<\n  AttributesTypes extends MetricAttributes = MetricAttributes,\n> = (\n  observableResult: BatchObservableResult<AttributesTypes>\n) => void | Promise<void>;\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\nexport type ObservableCounter<\n  AttributesTypes extends MetricAttributes = MetricAttributes,\n> = Observable<AttributesTypes>;\nexport type ObservableUpDownCounter<\n  AttributesTypes extends MetricAttributes = MetricAttributes,\n> = Observable<AttributesTypes>;\nexport type ObservableGauge<\n  AttributesTypes extends MetricAttributes = MetricAttributes,\n> = Observable<AttributesTypes>;\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 { 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 */\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 */\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 */\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\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\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 *\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 { ROOT_CONTEXT } from './context';\nimport * 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 *\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 { NoopContextManager } from '../context/NoopContextManager';\nimport { 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 */\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 *\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 */\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 *\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 { SpanContext } from './span_context';\nimport { TraceFlags } from './trace_flags';\n\nexport const INVALID_SPANID = '0000000000000000';\nexport const INVALID_TRACEID = '00000000000000000000000000000000';\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 *\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 { Exception } from '../common/Exception';\nimport { TimeInput } from '../common/Time';\nimport { SpanAttributes } from './attributes';\nimport { INVALID_SPAN_CONTEXT } from './invalid-span-constants';\nimport { Span } from './span';\nimport { SpanContext } from './span_context';\nimport { SpanStatus } from './status';\nimport { 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  constructor(\n    private readonly _spanContext: SpanContext = INVALID_SPAN_CONTEXT\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 *\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 { createContextKey } from '../context/context';\nimport { Context } from '../context/types';\nimport { Span } from './span';\nimport { 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 *\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 */\nimport { INVALID_SPANID, INVALID_TRACEID } from './invalid-span-constants';\nimport { NonRecordingSpan } from './NonRecordingSpan';\nimport { Span } from './span';\nimport { SpanContext } from './span_context';\n\nconst VALID_TRACEID_REGEX = /^([0-9a-f]{32})$/i;\nconst VALID_SPANID_REGEX = /^[0-9a-f]{16}$/i;\n\nexport function isValidTraceId(traceId: string): boolean {\n  return VALID_TRACEID_REGEX.test(traceId) && traceId !== INVALID_TRACEID;\n}\n\nexport function isValidSpanId(spanId: string): boolean {\n  return VALID_SPANID_REGEX.test(spanId) && 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 */\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 *\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 { ContextAPI } from '../api/context';\nimport { Context } from '../context/types';\nimport { getSpanContext, setSpan } from '../trace/context-utils';\nimport { NonRecordingSpan } from './NonRecordingSpan';\nimport { Span } from './span';\nimport { isSpanContextValid } from './spancontext-utils';\nimport { SpanOptions } from './SpanOptions';\nimport { SpanContext } from './span_context';\nimport { 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: any): spanContext is SpanContext {\n  return (\n    typeof spanContext === 'object' &&\n    typeof spanContext['spanId'] === 'string' &&\n    typeof spanContext['traceId'] === 'string' &&\n    typeof spanContext['traceFlags'] === 'number'\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 { Context } from '../context/types';\nimport { NoopTracer } from './NoopTracer';\nimport { Span } from './span';\nimport { SpanOptions } from './SpanOptions';\nimport { Tracer } from './tracer';\nimport { TracerOptions } from './tracer_options';\n\nconst NOOP_TRACER = new NoopTracer();\n\n/**\n * Proxy tracer provided by the proxy tracer provider\n */\nexport class ProxyTracer implements Tracer {\n  // When a real implementation is provided, this will be it\n  private _delegate?: Tracer;\n\n  constructor(\n    private _provider: TracerDelegator,\n    public readonly name: string,\n    public readonly version?: string,\n    public readonly options?: TracerOptions\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\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 *\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 { NoopTracer } from './NoopTracer';\nimport { Tracer } from './tracer';\nimport { TracerOptions } from './tracer_options';\nimport { 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 *\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 { Tracer } from './tracer';\nimport { TracerProvider } from './tracer_provider';\nimport { ProxyTracer } from './ProxyTracer';\nimport { NoopTracerProvider } from './NoopTracerProvider';\nimport { 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 */\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 *\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 { SpanAttributes } from './attributes';\nimport { 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 */\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 */\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 *\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 */\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 *\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 */\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 */\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 *\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\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 *\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 { 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 this._keys()\n      .reduce((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  private _parse(rawTraceState: string) {\n    if (rawTraceState.length > MAX_TRACE_STATE_LEN) return;\n    this._internalState = rawTraceState\n      .split(LIST_MEMBERS_SEPARATOR)\n      .reverse() // Store in reverse so new keys (.set(...)) will be placed at the beginning\n      .reduce((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  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 *\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 { TraceState } from '../trace_state';\nimport { TraceStateImpl } from './tracestate-impl';\n\nexport function createTraceState(rawTraceState?: string): TraceState {\n  return new TraceStateImpl(rawTraceState);\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// Split module-level variable definition into separate files to allow\n// tree-shaking on each api instance.\nimport { ContextAPI } from './api/context';\n/** Entrypoint for context API */\nexport const context = ContextAPI.getInstance();\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// 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 */\nexport const diag = DiagAPI.instance();\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 { Meter, MeterOptions } from './Meter';\nimport { 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 *\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 { Meter, MeterOptions } from '../metrics/Meter';\nimport { 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 *\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// Split module-level variable definition into separate files to allow\n// tree-shaking on each api instance.\nimport { MetricsAPI } from './api/metrics';\n/** Entrypoint for metrics API */\nexport const metrics = MetricsAPI.getInstance();\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 { Context } from '../context/types';\nimport { 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 *\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 { ContextAPI } from '../api/context';\nimport { createContextKey } from '../context/context';\nimport { Context } from '../context/types';\nimport { 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 *\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 { Context } from '../context/types';\nimport {\n  getGlobal,\n  registerGlobal,\n  unregisterGlobal,\n} from '../internal/global-utils';\nimport { NoopTextMapPropagator } from '../propagation/NoopTextMapPropagator';\nimport {\n  defaultTextMapGetter,\n  defaultTextMapSetter,\n  TextMapGetter,\n  TextMapPropagator,\n  TextMapSetter,\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 */\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 *\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// Split module-level variable definition into separate files to allow\n// tree-shaking on each api instance.\nimport { PropagationAPI } from './api/propagation';\n/** Entrypoint for propagation API */\nexport const propagation = PropagationAPI.getInstance();\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 {\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 { Tracer } from '../trace/tracer';\nimport { 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 */\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 *\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// Split module-level variable definition into separate files to allow\n// tree-shaking on each api instance.\nimport { TraceAPI } from './api/trace';\n/** Entrypoint for trace API */\nexport const trace = TraceAPI.getInstance();\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 { BaggageEntry, BaggageEntryMetadata, Baggage } from './baggage/types';\nexport { baggageEntryMetadataFromString } from './baggage/utils';\nexport { Exception } from './common/Exception';\nexport { HrTime, TimeInput } from './common/Time';\nexport { Attributes, AttributeValue } from './common/Attributes';\n\n// Context APIs\nexport { createContextKey, ROOT_CONTEXT } from './context/context';\nexport { Context, ContextManager } from './context/types';\nexport type { ContextAPI } from './api/context';\n\n// Diag APIs\nexport { DiagConsoleLogger } from './diag/consoleLogger';\nexport {\n  DiagLogFunction,\n  DiagLogger,\n  DiagLogLevel,\n  ComponentLoggerOptions,\n  DiagLoggerOptions,\n} from './diag/types';\nexport type { DiagAPI } from './api/diag';\n\n// Metrics APIs\nexport { createNoopMeter } from './metrics/NoopMeter';\nexport { MeterOptions, Meter } from './metrics/Meter';\nexport { MeterProvider } from './metrics/MeterProvider';\nexport {\n  ValueType,\n  Counter,\n  Gauge,\n  Histogram,\n  MetricOptions,\n  Observable,\n  ObservableCounter,\n  ObservableGauge,\n  ObservableUpDownCounter,\n  UpDownCounter,\n  BatchObservableCallback,\n  MetricAdvice,\n  MetricAttributes,\n  MetricAttributeValue,\n  ObservableCallback,\n} from './metrics/Metric';\nexport {\n  BatchObservableResult,\n  ObservableResult,\n} from './metrics/ObservableResult';\nexport type { MetricsAPI } from './api/metrics';\n\n// Propagation APIs\nexport {\n  TextMapPropagator,\n  TextMapSetter,\n  TextMapGetter,\n  defaultTextMapGetter,\n  defaultTextMapSetter,\n} from './propagation/TextMapPropagator';\nexport type { PropagationAPI } from './api/propagation';\n\n// Trace APIs\nexport { SpanAttributes, SpanAttributeValue } from './trace/attributes';\nexport { Link } from './trace/link';\nexport { ProxyTracer, TracerDelegator } from './trace/ProxyTracer';\nexport { ProxyTracerProvider } from './trace/ProxyTracerProvider';\nexport { Sampler } from './trace/Sampler';\nexport { SamplingDecision, SamplingResult } from './trace/SamplingResult';\nexport { SpanContext } from './trace/span_context';\nexport { SpanKind } from './trace/span_kind';\nexport { Span } from './trace/span';\nexport { SpanOptions } from './trace/SpanOptions';\nexport { SpanStatus, SpanStatusCode } from './trace/status';\nexport { TraceFlags } from './trace/trace_flags';\nexport { TraceState } from './trace/trace_state';\nexport { createTraceState } from './trace/internal/utils';\nexport { TracerProvider } from './trace/tracer_provider';\nexport { Tracer } from './trace/tracer';\nexport { 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","'use strict';\n\nconst OtelApi = require('@opentelemetry/api');\nconst Counter = require('../counter');\n\nconst PROCESS_CPU_USER_SECONDS = 'process_cpu_user_seconds_total';\nconst PROCESS_CPU_SYSTEM_SECONDS = 'process_cpu_system_seconds_total';\nconst PROCESS_CPU_SECONDS = 'process_cpu_seconds_total';\n\nmodule.exports = (registry, config = {}) => {\n\tconst registers = registry ? [registry] : undefined;\n\tconst namePrefix = config.prefix ? config.prefix : '';\n\tconst labels = config.labels ? config.labels : {};\n\tconst exemplars = config.enableExemplars ? config.enableExemplars : false;\n\tconst labelNames = Object.keys(labels);\n\n\tlet lastCpuUsage = process.cpuUsage();\n\n\tconst cpuUserUsageCounter = new Counter({\n\t\tname: namePrefix + PROCESS_CPU_USER_SECONDS,\n\t\thelp: 'Total user CPU time spent in seconds.',\n\t\tenableExemplars: exemplars,\n\t\tregisters,\n\t\tlabelNames,\n\t\t// Use this one metric's `collect` to set all metrics' values.\n\t\tcollect() {\n\t\t\tconst cpuUsage = process.cpuUsage();\n\n\t\t\tconst userUsageMicros = cpuUsage.user - lastCpuUsage.user;\n\t\t\tconst systemUsageMicros = cpuUsage.system - lastCpuUsage.system;\n\n\t\t\tlastCpuUsage = cpuUsage;\n\n\t\t\tif (this.enableExemplars) {\n\t\t\t\tlet exemplarLabels = {};\n\t\t\t\tconst currentSpan = OtelApi.trace.getSpan(OtelApi.context.active());\n\t\t\t\tif (currentSpan) {\n\t\t\t\t\texemplarLabels = {\n\t\t\t\t\t\ttraceId: currentSpan.spanContext().traceId,\n\t\t\t\t\t\tspanId: currentSpan.spanContext().spanId,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tcpuUserUsageCounter.inc({\n\t\t\t\t\tlabels,\n\t\t\t\t\tvalue: userUsageMicros / 1e6,\n\t\t\t\t\texemplarLabels,\n\t\t\t\t});\n\t\t\t\tcpuSystemUsageCounter.inc({\n\t\t\t\t\tlabels,\n\t\t\t\t\tvalue: systemUsageMicros / 1e6,\n\t\t\t\t\texemplarLabels,\n\t\t\t\t});\n\t\t\t\tcpuUsageCounter.inc({\n\t\t\t\t\tlabels,\n\t\t\t\t\tvalue: (userUsageMicros + systemUsageMicros) / 1e6,\n\t\t\t\t\texemplarLabels,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tcpuUserUsageCounter.inc(labels, userUsageMicros / 1e6);\n\t\t\t\tcpuSystemUsageCounter.inc(labels, systemUsageMicros / 1e6);\n\t\t\t\tcpuUsageCounter.inc(\n\t\t\t\t\tlabels,\n\t\t\t\t\t(userUsageMicros + systemUsageMicros) / 1e6,\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t});\n\tconst cpuSystemUsageCounter = new Counter({\n\t\tname: namePrefix + PROCESS_CPU_SYSTEM_SECONDS,\n\t\thelp: 'Total system CPU time spent in seconds.',\n\t\tenableExemplars: exemplars,\n\t\tregisters,\n\t\tlabelNames,\n\t});\n\tconst cpuUsageCounter = new Counter({\n\t\tname: namePrefix + PROCESS_CPU_SECONDS,\n\t\thelp: 'Total user and system CPU time spent in seconds.',\n\t\tenableExemplars: exemplars,\n\t\tregisters,\n\t\tlabelNames,\n\t});\n};\n\nmodule.exports.metricNames = [\n\tPROCESS_CPU_USER_SECONDS,\n\tPROCESS_CPU_SYSTEM_SECONDS,\n\tPROCESS_CPU_SECONDS,\n];\n","'use strict';\n\nconst Gauge = require('../gauge');\nconst startInSeconds = Math.round(Date.now() / 1000 - process.uptime());\n\nconst PROCESS_START_TIME = 'process_start_time_seconds';\n\nmodule.exports = (registry, config = {}) => {\n\tconst namePrefix = config.prefix ? config.prefix : '';\n\tconst labels = config.labels ? config.labels : {};\n\tconst labelNames = Object.keys(labels);\n\n\tnew Gauge({\n\t\tname: namePrefix + PROCESS_START_TIME,\n\t\thelp: 'Start time of the process since unix epoch in seconds.',\n\t\tregisters: registry ? [registry] : undefined,\n\t\tlabelNames,\n\t\taggregator: 'omit',\n\t\tcollect() {\n\t\t\tthis.set(labels, startInSeconds);\n\t\t},\n\t});\n};\n\nmodule.exports.metricNames = [PROCESS_START_TIME];\n","'use strict';\n\nconst Gauge = require('../gauge');\nconst fs = require('fs');\n\nconst values = ['VmSize', 'VmRSS', 'VmData'];\n\nconst PROCESS_RESIDENT_MEMORY = 'process_resident_memory_bytes';\nconst PROCESS_VIRTUAL_MEMORY = 'process_virtual_memory_bytes';\nconst PROCESS_HEAP = 'process_heap_bytes';\n\nfunction structureOutput(input) {\n\treturn input.split('\\n').reduce((acc, string) => {\n\t\tif (!values.some(value => string.startsWith(value))) {\n\t\t\treturn acc;\n\t\t}\n\n\t\tconst split = string.split(':');\n\n\t\t// Get the value\n\t\tlet value = split[1].trim();\n\t\t// Remove trailing ` kb`\n\t\tvalue = value.substr(0, value.length - 3);\n\t\t// Make it into a number in bytes bytes\n\t\tvalue = Number(value) * 1024;\n\n\t\tacc[split[0]] = value;\n\n\t\treturn acc;\n\t}, {});\n}\n\nmodule.exports = (registry, config = {}) => {\n\tconst registers = registry ? [registry] : undefined;\n\tconst namePrefix = config.prefix ? config.prefix : '';\n\tconst labels = config.labels ? config.labels : {};\n\tconst labelNames = Object.keys(labels);\n\n\tconst residentMemGauge = new Gauge({\n\t\tname: namePrefix + PROCESS_RESIDENT_MEMORY,\n\t\thelp: 'Resident memory size in bytes.',\n\t\tregisters,\n\t\tlabelNames,\n\t\t// Use this one metric's `collect` to set all metrics' values.\n\t\tcollect() {\n\t\t\ttry {\n\t\t\t\t// Sync I/O is often problematic, but /proc isn't really I/O, it\n\t\t\t\t// a virtual filesystem that maps directly to in-kernel data\n\t\t\t\t// structures and never blocks.\n\t\t\t\t//\n\t\t\t\t// Node.js/libuv do this already for process.memoryUsage(), see:\n\t\t\t\t// - https://github.com/libuv/libuv/blob/a629688008694ed8022269e66826d4d6ec688b83/src/unix/linux-core.c#L506-L523\n\t\t\t\tconst stat = fs.readFileSync('/proc/self/status', 'utf8');\n\t\t\t\tconst structuredOutput = structureOutput(stat);\n\n\t\t\t\tresidentMemGauge.set(labels, structuredOutput.VmRSS);\n\t\t\t\tvirtualMemGauge.set(labels, structuredOutput.VmSize);\n\t\t\t\theapSizeMemGauge.set(labels, structuredOutput.VmData);\n\t\t\t} catch {\n\t\t\t\t// noop\n\t\t\t}\n\t\t},\n\t});\n\tconst virtualMemGauge = new Gauge({\n\t\tname: namePrefix + PROCESS_VIRTUAL_MEMORY,\n\t\thelp: 'Virtual memory size in bytes.',\n\t\tregisters,\n\t\tlabelNames,\n\t});\n\tconst heapSizeMemGauge = new Gauge({\n\t\tname: namePrefix + PROCESS_HEAP,\n\t\thelp: 'Process heap size in bytes.',\n\t\tregisters,\n\t\tlabelNames,\n\t});\n};\n\nmodule.exports.metricNames = [\n\tPROCESS_RESIDENT_MEMORY,\n\tPROCESS_VIRTUAL_MEMORY,\n\tPROCESS_HEAP,\n];\n","'use strict';\n\n// process.memoryUsage() can throw on some platforms, see #67\nfunction safeMemoryUsage() {\n\ttry {\n\t\treturn process.memoryUsage();\n\t} catch {\n\t\treturn;\n\t}\n}\n\nmodule.exports = safeMemoryUsage;\n","'use strict';\n\nconst Gauge = require('../gauge');\nconst linuxVariant = require('./osMemoryHeapLinux');\nconst safeMemoryUsage = require('./helpers/safeMemoryUsage');\n\nconst PROCESS_RESIDENT_MEMORY = 'process_resident_memory_bytes';\n\nfunction notLinuxVariant(registry, config = {}) {\n\tconst namePrefix = config.prefix ? config.prefix : '';\n\tconst labels = config.labels ? config.labels : {};\n\tconst labelNames = Object.keys(labels);\n\n\tnew Gauge({\n\t\tname: namePrefix + PROCESS_RESIDENT_MEMORY,\n\t\thelp: 'Resident memory size in bytes.',\n\t\tregisters: registry ? [registry] : undefined,\n\t\tlabelNames,\n\t\tcollect() {\n\t\t\tconst memUsage = safeMemoryUsage();\n\n\t\t\t// I don't think the other things returned from `process.memoryUsage()` is relevant to a standard export\n\t\t\tif (memUsage) {\n\t\t\t\tthis.set(labels, memUsage.rss);\n\t\t\t}\n\t\t},\n\t});\n}\n\nmodule.exports = (registry, config) =>\n\tprocess.platform === 'linux'\n\t\t? linuxVariant(registry, config)\n\t\t: notLinuxVariant(registry, config);\n\nmodule.exports.metricNames =\n\tprocess.platform === 'linux'\n\t\t? linuxVariant.metricNames\n\t\t: [PROCESS_RESIDENT_MEMORY];\n","'use strict';\n\nconst Gauge = require('../gauge');\nconst fs = require('fs');\nconst process = require('process');\n\nconst PROCESS_OPEN_FDS = 'process_open_fds';\n\nmodule.exports = (registry, config = {}) => {\n\tif (process.platform !== 'linux') {\n\t\treturn;\n\t}\n\n\tconst namePrefix = config.prefix ? config.prefix : '';\n\tconst labels = config.labels ? config.labels : {};\n\tconst labelNames = Object.keys(labels);\n\n\tnew Gauge({\n\t\tname: namePrefix + PROCESS_OPEN_FDS,\n\t\thelp: 'Number of open file descriptors.',\n\t\tregisters: registry ? [registry] : undefined,\n\t\tlabelNames,\n\t\tcollect() {\n\t\t\ttry {\n\t\t\t\tconst fds = fs.readdirSync('/proc/self/fd');\n\t\t\t\t// Minus 1 to not count the fd that was used by readdirSync(),\n\t\t\t\t// it's now closed.\n\t\t\t\tthis.set(labels, fds.length - 1);\n\t\t\t} catch {\n\t\t\t\t// noop\n\t\t\t}\n\t\t},\n\t});\n};\n\nmodule.exports.metricNames = [PROCESS_OPEN_FDS];\n","'use strict';\n\nconst Gauge = require('../gauge');\nconst fs = require('fs');\n\nconst PROCESS_MAX_FDS = 'process_max_fds';\n\nlet maxFds;\n\nmodule.exports = (registry, config = {}) => {\n\tif (maxFds === undefined) {\n\t\t// This will fail if a linux-like procfs is not available.\n\t\ttry {\n\t\t\tconst limits = fs.readFileSync('/proc/self/limits', 'utf8');\n\t\t\tconst lines = limits.split('\\n');\n\t\t\tfor (const line of lines) {\n\t\t\t\tif (line.startsWith('Max open files')) {\n\t\t\t\t\tconst parts = line.split(/  +/);\n\t\t\t\t\tmaxFds = Number(parts[1]);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} catch {\n\t\t\treturn;\n\t\t}\n\t}\n\n\tif (maxFds === undefined) return;\n\n\tconst namePrefix = config.prefix ? config.prefix : '';\n\tconst labels = config.labels ? config.labels : {};\n\tconst labelNames = Object.keys(labels);\n\n\tnew Gauge({\n\t\tname: namePrefix + PROCESS_MAX_FDS,\n\t\thelp: 'Maximum number of open file descriptors.',\n\t\tregisters: registry ? [registry] : undefined,\n\t\tlabelNames,\n\t\tcollect() {\n\t\t\tif (maxFds !== undefined) this.set(labels, maxFds);\n\t\t},\n\t});\n};\n\nmodule.exports.metricNames = [PROCESS_MAX_FDS];\n","'use strict';\n\nconst Gauge = require('../gauge');\n\n// Check if perf_hooks module is available\nlet perf_hooks;\ntry {\n\tperf_hooks = require('perf_hooks');\n} catch {\n\t// node version is too old\n}\n\n// Reported always.\nconst NODEJS_EVENTLOOP_LAG = 'nodejs_eventloop_lag_seconds';\n\n// Reported only when perf_hooks is available.\nconst NODEJS_EVENTLOOP_LAG_MIN = 'nodejs_eventloop_lag_min_seconds';\nconst NODEJS_EVENTLOOP_LAG_MAX = 'nodejs_eventloop_lag_max_seconds';\nconst NODEJS_EVENTLOOP_LAG_MEAN = 'nodejs_eventloop_lag_mean_seconds';\nconst NODEJS_EVENTLOOP_LAG_STDDEV = 'nodejs_eventloop_lag_stddev_seconds';\nconst NODEJS_EVENTLOOP_LAG_P50 = 'nodejs_eventloop_lag_p50_seconds';\nconst NODEJS_EVENTLOOP_LAG_P90 = 'nodejs_eventloop_lag_p90_seconds';\nconst NODEJS_EVENTLOOP_LAG_P99 = 'nodejs_eventloop_lag_p99_seconds';\n\nfunction reportEventloopLag(start, gauge, labels) {\n\tconst delta = process.hrtime(start);\n\tconst nanosec = delta[0] * 1e9 + delta[1];\n\tconst seconds = nanosec / 1e9;\n\n\tgauge.set(labels, seconds);\n}\n\nmodule.exports = (registry, config = {}) => {\n\tconst namePrefix = config.prefix ? config.prefix : '';\n\tconst labels = config.labels ? config.labels : {};\n\tconst labelNames = Object.keys(labels);\n\tconst registers = registry ? [registry] : undefined;\n\n\tlet collect = () => {\n\t\tconst start = process.hrtime();\n\t\tsetImmediate(reportEventloopLag, start, lag, labels);\n\t};\n\n\tif (perf_hooks && perf_hooks.monitorEventLoopDelay) {\n\t\ttry {\n\t\t\tconst histogram = perf_hooks.monitorEventLoopDelay({\n\t\t\t\tresolution: config.eventLoopMonitoringPrecision,\n\t\t\t});\n\t\t\thistogram.enable();\n\n\t\t\tcollect = () => {\n\t\t\t\tconst start = process.hrtime();\n\t\t\t\tsetImmediate(reportEventloopLag, start, lag, labels);\n\n\t\t\t\tlagMin.set(labels, histogram.min / 1e9);\n\t\t\t\tlagMax.set(labels, histogram.max / 1e9);\n\t\t\t\tlagMean.set(labels, histogram.mean / 1e9);\n\t\t\t\tlagStddev.set(labels, histogram.stddev / 1e9);\n\t\t\t\tlagP50.set(labels, histogram.percentile(50) / 1e9);\n\t\t\t\tlagP90.set(labels, histogram.percentile(90) / 1e9);\n\t\t\t\tlagP99.set(labels, histogram.percentile(99) / 1e9);\n\n\t\t\t\thistogram.reset();\n\t\t\t};\n\t\t} catch (e) {\n\t\t\tif (e.code === 'ERR_NOT_IMPLEMENTED') {\n\t\t\t\treturn; // Bun\n\t\t\t}\n\n\t\t\tthrow e;\n\t\t}\n\t}\n\n\tconst lag = new Gauge({\n\t\tname: namePrefix + NODEJS_EVENTLOOP_LAG,\n\t\thelp: 'Lag of event loop in seconds.',\n\t\tregisters,\n\t\tlabelNames,\n\t\taggregator: 'average',\n\t\t// Use this one metric's `collect` to set all metrics' values.\n\t\tcollect,\n\t});\n\tconst lagMin = new Gauge({\n\t\tname: namePrefix + NODEJS_EVENTLOOP_LAG_MIN,\n\t\thelp: 'The minimum recorded event loop delay.',\n\t\tregisters,\n\t\tlabelNames,\n\t\taggregator: 'min',\n\t});\n\tconst lagMax = new Gauge({\n\t\tname: namePrefix + NODEJS_EVENTLOOP_LAG_MAX,\n\t\thelp: 'The maximum recorded event loop delay.',\n\t\tregisters,\n\t\tlabelNames,\n\t\taggregator: 'max',\n\t});\n\tconst lagMean = new Gauge({\n\t\tname: namePrefix + NODEJS_EVENTLOOP_LAG_MEAN,\n\t\thelp: 'The mean of the recorded event loop delays.',\n\t\tregisters,\n\t\tlabelNames,\n\t\taggregator: 'average',\n\t});\n\tconst lagStddev = new Gauge({\n\t\tname: namePrefix + NODEJS_EVENTLOOP_LAG_STDDEV,\n\t\thelp: 'The standard deviation of the recorded event loop delays.',\n\t\tregisters,\n\t\tlabelNames,\n\t\taggregator: 'average',\n\t});\n\tconst lagP50 = new Gauge({\n\t\tname: namePrefix + NODEJS_EVENTLOOP_LAG_P50,\n\t\thelp: 'The 50th percentile of the recorded event loop delays.',\n\t\tregisters,\n\t\tlabelNames,\n\t\taggregator: 'average',\n\t});\n\tconst lagP90 = new Gauge({\n\t\tname: namePrefix + NODEJS_EVENTLOOP_LAG_P90,\n\t\thelp: 'The 90th percentile of the recorded event loop delays.',\n\t\tregisters,\n\t\tlabelNames,\n\t\taggregator: 'average',\n\t});\n\tconst lagP99 = new Gauge({\n\t\tname: namePrefix + NODEJS_EVENTLOOP_LAG_P99,\n\t\thelp: 'The 99th percentile of the recorded event loop delays.',\n\t\tregisters,\n\t\tlabelNames,\n\t\taggregator: 'average',\n\t});\n};\n\nmodule.exports.metricNames = [\n\tNODEJS_EVENTLOOP_LAG,\n\tNODEJS_EVENTLOOP_LAG_MIN,\n\tNODEJS_EVENTLOOP_LAG_MAX,\n\tNODEJS_EVENTLOOP_LAG_MEAN,\n\tNODEJS_EVENTLOOP_LAG_STDDEV,\n\tNODEJS_EVENTLOOP_LAG_P50,\n\tNODEJS_EVENTLOOP_LAG_P90,\n\tNODEJS_EVENTLOOP_LAG_P99,\n];\n","'use strict';\n\nfunction aggregateByObjectName(list) {\n\tconst data = {};\n\n\tfor (let i = 0; i < list.length; i++) {\n\t\tconst listElement = list[i];\n\n\t\tif (!listElement || typeof listElement.constructor === 'undefined') {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (Object.hasOwnProperty.call(data, listElement.constructor.name)) {\n\t\t\tdata[listElement.constructor.name] += 1;\n\t\t} else {\n\t\t\tdata[listElement.constructor.name] = 1;\n\t\t}\n\t}\n\treturn data;\n}\n\nfunction updateMetrics(gauge, data, labels) {\n\tgauge.reset();\n\tfor (const key in data) {\n\t\tgauge.set(Object.assign({ type: key }, labels || {}), data[key]);\n\t}\n}\n\nmodule.exports = {\n\taggregateByObjectName,\n\tupdateMetrics,\n};\n","'use strict';\n\nconst { aggregateByObjectName } = require('./helpers/processMetricsHelpers');\nconst { updateMetrics } = require('./helpers/processMetricsHelpers');\nconst Gauge = require('../gauge');\n\nconst NODEJS_ACTIVE_HANDLES = 'nodejs_active_handles';\nconst NODEJS_ACTIVE_HANDLES_TOTAL = 'nodejs_active_handles_total';\n\nmodule.exports = (registry, config = {}) => {\n\t// Don't do anything if the function is removed in later nodes (exists in node@6-12...)\n\tif (typeof process._getActiveHandles !== 'function') {\n\t\treturn;\n\t}\n\n\tconst registers = registry ? [registry] : undefined;\n\tconst namePrefix = config.prefix ? config.prefix : '';\n\tconst labels = config.labels ? config.labels : {};\n\tconst labelNames = Object.keys(labels);\n\n\tnew Gauge({\n\t\tname: namePrefix + NODEJS_ACTIVE_HANDLES,\n\t\thelp: 'Number of active libuv handles grouped by handle type. Every handle type is C++ class name.',\n\t\tlabelNames: ['type', ...labelNames],\n\t\tregisters,\n\t\tcollect() {\n\t\t\tconst handles = process._getActiveHandles();\n\t\t\tupdateMetrics(this, aggregateByObjectName(handles), labels);\n\t\t},\n\t});\n\tnew Gauge({\n\t\tname: namePrefix + NODEJS_ACTIVE_HANDLES_TOTAL,\n\t\thelp: 'Total number of active handles.',\n\t\tregisters,\n\t\tlabelNames,\n\t\tcollect() {\n\t\t\tconst handles = process._getActiveHandles();\n\t\t\tthis.set(labels, handles.length);\n\t\t},\n\t});\n};\n\nmodule.exports.metricNames = [\n\tNODEJS_ACTIVE_HANDLES,\n\tNODEJS_ACTIVE_HANDLES_TOTAL,\n];\n","'use strict';\nconst Gauge = require('../gauge');\nconst { aggregateByObjectName } = require('./helpers/processMetricsHelpers');\nconst { updateMetrics } = require('./helpers/processMetricsHelpers');\n\nconst NODEJS_ACTIVE_REQUESTS = 'nodejs_active_requests';\nconst NODEJS_ACTIVE_REQUESTS_TOTAL = 'nodejs_active_requests_total';\n\nmodule.exports = (registry, config = {}) => {\n\t// Don't do anything if the function is removed in later nodes (exists in node@6)\n\tif (typeof process._getActiveRequests !== 'function') {\n\t\treturn;\n\t}\n\n\tconst namePrefix = config.prefix ? config.prefix : '';\n\tconst labels = config.labels ? config.labels : {};\n\tconst labelNames = Object.keys(labels);\n\n\tnew Gauge({\n\t\tname: namePrefix + NODEJS_ACTIVE_REQUESTS,\n\t\thelp: 'Number of active libuv requests grouped by request type. Every request type is C++ class name.',\n\t\tlabelNames: ['type', ...labelNames],\n\t\tregisters: registry ? [registry] : undefined,\n\t\tcollect() {\n\t\t\tconst requests = process._getActiveRequests();\n\t\t\tupdateMetrics(this, aggregateByObjectName(requests), labels);\n\t\t},\n\t});\n\n\tnew Gauge({\n\t\tname: namePrefix + NODEJS_ACTIVE_REQUESTS_TOTAL,\n\t\thelp: 'Total number of active requests.',\n\t\tregisters: registry ? [registry] : undefined,\n\t\tlabelNames,\n\t\tcollect() {\n\t\t\tconst requests = process._getActiveRequests();\n\t\t\tthis.set(labels, requests.length);\n\t\t},\n\t});\n};\n\nmodule.exports.metricNames = [\n\tNODEJS_ACTIVE_REQUESTS,\n\tNODEJS_ACTIVE_REQUESTS_TOTAL,\n];\n","'use strict';\nconst Gauge = require('../gauge');\nconst { updateMetrics } = require('./helpers/processMetricsHelpers');\n\nconst NODEJS_ACTIVE_RESOURCES = 'nodejs_active_resources';\nconst NODEJS_ACTIVE_RESOURCES_TOTAL = 'nodejs_active_resources_total';\n\nmodule.exports = (registry, config = {}) => {\n\t// Don't do anything if the function does not exist in previous nodes (exists in node@17.3.0)\n\tif (typeof process.getActiveResourcesInfo !== 'function') {\n\t\treturn;\n\t}\n\n\tconst namePrefix = config.prefix ? config.prefix : '';\n\tconst labels = config.labels ? config.labels : {};\n\tconst labelNames = Object.keys(labels);\n\n\tnew Gauge({\n\t\tname: namePrefix + NODEJS_ACTIVE_RESOURCES,\n\t\thelp: 'Number of active resources that are currently keeping the event loop alive, grouped by async resource type.',\n\t\tlabelNames: ['type', ...labelNames],\n\t\tregisters: registry ? [registry] : undefined,\n\t\tcollect() {\n\t\t\tconst resources = process.getActiveResourcesInfo();\n\n\t\t\tconst data = {};\n\n\t\t\tfor (let i = 0; i < resources.length; i++) {\n\t\t\t\tconst resource = resources[i];\n\n\t\t\t\tif (Object.hasOwn(data, resource)) {\n\t\t\t\t\tdata[resource] += 1;\n\t\t\t\t} else {\n\t\t\t\t\tdata[resource] = 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tupdateMetrics(this, data, labels);\n\t\t},\n\t});\n\n\tnew Gauge({\n\t\tname: namePrefix + NODEJS_ACTIVE_RESOURCES_TOTAL,\n\t\thelp: 'Total number of active resources.',\n\t\tregisters: registry ? [registry] : undefined,\n\t\tlabelNames,\n\t\tcollect() {\n\t\t\tconst resources = process.getActiveResourcesInfo();\n\t\t\tthis.set(labels, resources.length);\n\t\t},\n\t});\n};\n\nmodule.exports.metricNames = [\n\tNODEJS_ACTIVE_RESOURCES,\n\tNODEJS_ACTIVE_RESOURCES_TOTAL,\n];\n","'use strict';\n\nconst Gauge = require('../gauge');\nconst safeMemoryUsage = require('./helpers/safeMemoryUsage');\n\nconst NODEJS_HEAP_SIZE_TOTAL = 'nodejs_heap_size_total_bytes';\nconst NODEJS_HEAP_SIZE_USED = 'nodejs_heap_size_used_bytes';\nconst NODEJS_EXTERNAL_MEMORY = 'nodejs_external_memory_bytes';\n\nmodule.exports = (registry, config = {}) => {\n\tif (typeof process.memoryUsage !== 'function') {\n\t\treturn;\n\t}\n\tconst labels = config.labels ? config.labels : {};\n\tconst labelNames = Object.keys(labels);\n\n\tconst registers = registry ? [registry] : undefined;\n\tconst namePrefix = config.prefix ? config.prefix : '';\n\tconst collect = () => {\n\t\tconst memUsage = safeMemoryUsage();\n\t\tif (memUsage) {\n\t\t\theapSizeTotal.set(labels, memUsage.heapTotal);\n\t\t\theapSizeUsed.set(labels, memUsage.heapUsed);\n\t\t\tif (memUsage.external !== undefined) {\n\t\t\t\texternalMemUsed.set(labels, memUsage.external);\n\t\t\t}\n\t\t}\n\t};\n\n\tconst heapSizeTotal = new Gauge({\n\t\tname: namePrefix + NODEJS_HEAP_SIZE_TOTAL,\n\t\thelp: 'Process heap size from Node.js in bytes.',\n\t\tregisters,\n\t\tlabelNames,\n\t\t// Use this one metric's `collect` to set all metrics' values.\n\t\tcollect,\n\t});\n\tconst heapSizeUsed = new Gauge({\n\t\tname: namePrefix + NODEJS_HEAP_SIZE_USED,\n\t\thelp: 'Process heap size used from Node.js in bytes.',\n\t\tregisters,\n\t\tlabelNames,\n\t});\n\tconst externalMemUsed = new Gauge({\n\t\tname: namePrefix + NODEJS_EXTERNAL_MEMORY,\n\t\thelp: 'Node.js external memory size in bytes.',\n\t\tregisters,\n\t\tlabelNames,\n\t});\n};\n\nmodule.exports.metricNames = [\n\tNODEJS_HEAP_SIZE_TOTAL,\n\tNODEJS_HEAP_SIZE_USED,\n\tNODEJS_EXTERNAL_MEMORY,\n];\n","'use strict';\n\nconst Gauge = require('../gauge');\nconst v8 = require('v8');\n\nconst METRICS = ['total', 'used', 'available'];\nconst NODEJS_HEAP_SIZE = {};\n\nMETRICS.forEach(metricType => {\n\tNODEJS_HEAP_SIZE[metricType] = `nodejs_heap_space_size_${metricType}_bytes`;\n});\n\nmodule.exports = (registry, config = {}) => {\n\ttry {\n\t\tv8.getHeapSpaceStatistics();\n\t} catch (e) {\n\t\tif (e.code === 'ERR_NOT_IMPLEMENTED') {\n\t\t\treturn; // Bun\n\t\t}\n\t\tthrow e;\n\t}\n\tconst registers = registry ? [registry] : undefined;\n\tconst namePrefix = config.prefix ? config.prefix : '';\n\n\tconst labels = config.labels ? config.labels : {};\n\tconst labelNames = ['space', ...Object.keys(labels)];\n\n\tconst gauges = {};\n\n\tMETRICS.forEach(metricType => {\n\t\tgauges[metricType] = new Gauge({\n\t\t\tname: namePrefix + NODEJS_HEAP_SIZE[metricType],\n\t\t\thelp: `Process heap space size ${metricType} from Node.js in bytes.`,\n\t\t\tlabelNames,\n\t\t\tregisters,\n\t\t});\n\t});\n\n\t// Use this one metric's `collect` to set all metrics' values.\n\tgauges.total.collect = () => {\n\t\tfor (const space of v8.getHeapSpaceStatistics()) {\n\t\t\tconst spaceName = space.space_name.substr(\n\t\t\t\t0,\n\t\t\t\tspace.space_name.indexOf('_space'),\n\t\t\t);\n\n\t\t\tgauges.total.set({ space: spaceName, ...labels }, space.space_size);\n\t\t\tgauges.used.set({ space: spaceName, ...labels }, space.space_used_size);\n\t\t\tgauges.available.set(\n\t\t\t\t{ space: spaceName, ...labels },\n\t\t\t\tspace.space_available_size,\n\t\t\t);\n\t\t}\n\t};\n};\n\nmodule.exports.metricNames = Object.values(NODEJS_HEAP_SIZE);\n","'use strict';\n\nconst Gauge = require('../gauge');\nconst version = process.version;\nconst versionSegments = version.slice(1).split('.').map(Number);\n\nconst NODE_VERSION_INFO = 'nodejs_version_info';\n\nmodule.exports = (registry, config = {}) => {\n\tconst namePrefix = config.prefix ? config.prefix : '';\n\tconst labels = config.labels ? config.labels : {};\n\tconst labelNames = Object.keys(labels);\n\n\tnew Gauge({\n\t\tname: namePrefix + NODE_VERSION_INFO,\n\t\thelp: 'Node.js version info.',\n\t\tlabelNames: ['version', 'major', 'minor', 'patch', ...labelNames],\n\t\tregisters: registry ? [registry] : undefined,\n\t\taggregator: 'first',\n\t\tcollect() {\n\t\t\t// Needs to be in collect() so value is present even if reg is reset\n\t\t\tthis.labels(\n\t\t\t\tversion,\n\t\t\t\tversionSegments[0],\n\t\t\t\tversionSegments[1],\n\t\t\t\tversionSegments[2],\n\t\t\t\t...Object.values(labels),\n\t\t\t).set(1);\n\t\t},\n\t});\n};\n\nmodule.exports.metricNames = [NODE_VERSION_INFO];\n","'use strict';\nconst Histogram = require('../histogram');\n\nlet perf_hooks;\n\ntry {\n\t// eslint-disable-next-line\n\tperf_hooks = require('perf_hooks');\n} catch {\n\t// node version is too old\n}\n\nconst NODEJS_GC_DURATION_SECONDS = 'nodejs_gc_duration_seconds';\nconst DEFAULT_GC_DURATION_BUCKETS = [0.001, 0.01, 0.1, 1, 2, 5];\n\nconst kinds = [];\n\nif (perf_hooks && perf_hooks.constants) {\n\tkinds[perf_hooks.constants.NODE_PERFORMANCE_GC_MAJOR] = 'major';\n\tkinds[perf_hooks.constants.NODE_PERFORMANCE_GC_MINOR] = 'minor';\n\tkinds[perf_hooks.constants.NODE_PERFORMANCE_GC_INCREMENTAL] = 'incremental';\n\tkinds[perf_hooks.constants.NODE_PERFORMANCE_GC_WEAKCB] = 'weakcb';\n}\n\nmodule.exports = (registry, config = {}) => {\n\tif (!perf_hooks) {\n\t\treturn;\n\t}\n\n\tconst namePrefix = config.prefix ? config.prefix : '';\n\tconst labels = config.labels ? config.labels : {};\n\tconst labelNames = Object.keys(labels);\n\tconst buckets = config.gcDurationBuckets\n\t\t? config.gcDurationBuckets\n\t\t: DEFAULT_GC_DURATION_BUCKETS;\n\tconst gcHistogram = new Histogram({\n\t\tname: namePrefix + NODEJS_GC_DURATION_SECONDS,\n\t\thelp: 'Garbage collection duration by kind, one of major, minor, incremental or weakcb.',\n\t\tlabelNames: ['kind', ...labelNames],\n\t\tenableExemplars: false,\n\t\tbuckets,\n\t\tregisters: registry ? [registry] : undefined,\n\t});\n\n\tconst obs = new perf_hooks.PerformanceObserver(list => {\n\t\tconst entry = list.getEntries()[0];\n\t\t// Node < 16 uses entry.kind\n\t\t// Node >= 16 uses entry.detail.kind\n\t\t// See: https://nodejs.org/docs/latest-v16.x/api/deprecations.html#deprecations_dep0152_extension_performanceentry_properties\n\t\tconst kind = entry.detail ? kinds[entry.detail.kind] : kinds[entry.kind];\n\t\t// Convert duration from milliseconds to seconds\n\t\tgcHistogram.observe(Object.assign({ kind }, labels), entry.duration / 1000);\n\t});\n\n\tobs.observe({ entryTypes: ['gc'] });\n};\n\nmodule.exports.metricNames = [NODEJS_GC_DURATION_SECONDS];\n","'use strict';\n\nconst { isObject } = require('./util');\n\n// Default metrics.\nconst processCpuTotal = require('./metrics/processCpuTotal');\nconst processStartTime = require('./metrics/processStartTime');\nconst osMemoryHeap = require('./metrics/osMemoryHeap');\nconst processOpenFileDescriptors = require('./metrics/processOpenFileDescriptors');\nconst processMaxFileDescriptors = require('./metrics/processMaxFileDescriptors');\nconst eventLoopLag = require('./metrics/eventLoopLag');\nconst processHandles = require('./metrics/processHandles');\nconst processRequests = require('./metrics/processRequests');\nconst processResources = require('./metrics/processResources');\nconst heapSizeAndUsed = require('./metrics/heapSizeAndUsed');\nconst heapSpacesSizeAndUsed = require('./metrics/heapSpacesSizeAndUsed');\nconst version = require('./metrics/version');\nconst gc = require('./metrics/gc');\n\nconst metrics = {\n\tprocessCpuTotal,\n\tprocessStartTime,\n\tosMemoryHeap,\n\tprocessOpenFileDescriptors,\n\tprocessMaxFileDescriptors,\n\teventLoopLag,\n\t...(typeof process.getActiveResourcesInfo === 'function'\n\t\t? { processResources }\n\t\t: {}),\n\tprocessHandles,\n\tprocessRequests,\n\theapSizeAndUsed,\n\theapSpacesSizeAndUsed,\n\tversion,\n\tgc,\n};\nconst metricsList = Object.keys(metrics);\n\nmodule.exports = function collectDefaultMetrics(config) {\n\tif (config !== null && config !== undefined && !isObject(config)) {\n\t\tthrow new TypeError('config must be null, undefined, or an object');\n\t}\n\n\tconfig = { eventLoopMonitoringPrecision: 10, ...config };\n\n\tfor (const metric of Object.values(metrics)) {\n\t\tmetric(config.register, config);\n\t}\n};\n\nmodule.exports.metricsList = metricsList;\n","'use strict';\n\nconst { Grouper, hashObject } = require('./util');\n\n/**\n * Returns a new function that applies the `aggregatorFn` to the values.\n * @param {Function} aggregatorFn function to apply to values.\n * @return {Function} aggregator function\n */\nfunction AggregatorFactory(aggregatorFn) {\n\treturn metrics => {\n\t\tif (metrics.length === 0) return;\n\t\tconst result = {\n\t\t\thelp: metrics[0].help,\n\t\t\tname: metrics[0].name,\n\t\t\ttype: metrics[0].type,\n\t\t\tvalues: [],\n\t\t\taggregator: metrics[0].aggregator,\n\t\t};\n\t\t// Gather metrics by metricName and labels.\n\t\tconst byLabels = new Grouper();\n\t\tmetrics.forEach(metric => {\n\t\t\tmetric.values.forEach(value => {\n\t\t\t\tconst key = hashObject(value.labels);\n\t\t\t\tbyLabels.add(`${value.metricName}_${key}`, value);\n\t\t\t});\n\t\t});\n\t\t// Apply aggregator function to gathered metrics.\n\t\tbyLabels.forEach(values => {\n\t\t\tif (values.length === 0) return;\n\t\t\tconst valObj = {\n\t\t\t\tvalue: aggregatorFn(values),\n\t\t\t\tlabels: values[0].labels,\n\t\t\t};\n\t\t\tif (values[0].metricName) {\n\t\t\t\tvalObj.metricName = values[0].metricName;\n\t\t\t}\n\t\t\t// NB: Timestamps are omitted.\n\t\t\tresult.values.push(valObj);\n\t\t});\n\t\treturn result;\n\t};\n}\n// Export for users to define their own aggregation methods.\nexports.AggregatorFactory = AggregatorFactory;\n\n/**\n * Functions that can be used to aggregate metrics from multiple registries.\n */\nexports.aggregators = {\n\t/**\n\t * @return The sum of values.\n\t */\n\tsum: AggregatorFactory(v => v.reduce((p, c) => p + c.value, 0)),\n\t/**\n\t * @return The first value.\n\t */\n\tfirst: AggregatorFactory(v => v[0].value),\n\t/**\n\t * @return {undefined} Undefined; omits the metric.\n\t */\n\tomit: () => {},\n\t/**\n\t * @return The arithmetic mean of the values.\n\t */\n\taverage: AggregatorFactory(\n\t\tv => v.reduce((p, c) => p + c.value, 0) / v.length,\n\t),\n\t/**\n\t * @return The minimum of the values.\n\t */\n\tmin: AggregatorFactory(v =>\n\t\tv.reduce((p, c) => Math.min(p, c.value), Infinity),\n\t),\n\t/**\n\t * @return The maximum of the values.\n\t */\n\tmax: AggregatorFactory(v =>\n\t\tv.reduce((p, c) => Math.max(p, c.value), -Infinity),\n\t),\n};\n","'use strict';\n\n/**\n * Extends the Registry class with a `clusterMetrics` method that returns\n * aggregated metrics for all workers.\n *\n * In cluster workers, listens for and responds to requests for metrics by the\n * cluster master.\n */\n\nconst Registry = require('./registry');\nconst { Grouper } = require('./util');\nconst { aggregators } = require('./metricAggregators');\n// We need to lazy-load the 'cluster' module as some application servers -\n// namely Passenger - crash when it is imported.\nlet cluster = () => {\n\tconst data = require('cluster');\n\tcluster = () => data;\n\treturn data;\n};\n\nconst GET_METRICS_REQ = 'prom-client:getMetricsReq';\nconst GET_METRICS_RES = 'prom-client:getMetricsRes';\n\nlet registries = [Registry.globalRegistry];\nlet requestCtr = 0; // Concurrency control\nlet listenersAdded = false;\nconst requests = new Map(); // Pending requests for workers' local metrics.\n\nclass AggregatorRegistry extends Registry {\n\tconstructor(regContentType = Registry.PROMETHEUS_CONTENT_TYPE) {\n\t\tsuper(regContentType);\n\t\taddListeners();\n\t}\n\n\t/**\n\t * Gets aggregated metrics for all workers. The optional callback and\n\t * returned Promise resolve with the same value; either may be used.\n\t * @return {Promise<string>} Promise that resolves with the aggregated\n\t *   metrics.\n\t */\n\tclusterMetrics() {\n\t\tconst requestId = requestCtr++;\n\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet settled = false;\n\t\t\tfunction done(err, result) {\n\t\t\t\tif (settled) return;\n\t\t\t\tsettled = true;\n\t\t\t\tif (err) reject(err);\n\t\t\t\telse resolve(result);\n\t\t\t}\n\n\t\t\tconst request = {\n\t\t\t\tresponses: [],\n\t\t\t\tpending: 0,\n\t\t\t\tdone,\n\t\t\t\terrorTimeout: setTimeout(() => {\n\t\t\t\t\tconst err = new Error('Operation timed out.');\n\t\t\t\t\trequest.done(err);\n\t\t\t\t}, 5000),\n\t\t\t};\n\t\t\trequests.set(requestId, request);\n\n\t\t\tconst message = {\n\t\t\t\ttype: GET_METRICS_REQ,\n\t\t\t\trequestId,\n\t\t\t};\n\n\t\t\tfor (const id in cluster().workers) {\n\t\t\t\t// If the worker exits abruptly, it may still be in the workers\n\t\t\t\t// list but not able to communicate.\n\t\t\t\tif (cluster().workers[id].isConnected()) {\n\t\t\t\t\tcluster().workers[id].send(message);\n\t\t\t\t\trequest.pending++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (request.pending === 0) {\n\t\t\t\t// No workers were up\n\t\t\t\tclearTimeout(request.errorTimeout);\n\t\t\t\tprocess.nextTick(() => done(null, ''));\n\t\t\t}\n\t\t});\n\t}\n\n\tget contentType() {\n\t\treturn super.contentType;\n\t}\n\n\t/**\n\t * Creates a new Registry instance from an array of metrics that were\n\t * created by `registry.getMetricsAsJSON()`. Metrics are aggregated using\n\t * the method specified by their `aggregator` property, or by summation if\n\t * `aggregator` is undefined.\n\t * @param {Array} metricsArr Array of metrics, each of which created by\n\t *   `registry.getMetricsAsJSON()`.\n\t * @param {string} registryType content type of the new registry. Defaults\n\t * to PROMETHEUS_CONTENT_TYPE.\n\t * @return {Registry} aggregated registry.\n\t */\n\tstatic aggregate(\n\t\tmetricsArr,\n\t\tregistryType = Registry.PROMETHEUS_CONTENT_TYPE,\n\t) {\n\t\tconst aggregatedRegistry = new Registry();\n\t\tconst metricsByName = new Grouper();\n\n\t\taggregatedRegistry.setContentType(registryType);\n\n\t\t// Gather by name\n\t\tmetricsArr.forEach(metrics => {\n\t\t\tmetrics.forEach(metric => {\n\t\t\t\tmetricsByName.add(metric.name, metric);\n\t\t\t});\n\t\t});\n\n\t\t// Aggregate gathered metrics.\n\t\tmetricsByName.forEach(metrics => {\n\t\t\tconst aggregatorName = metrics[0].aggregator;\n\t\t\tconst aggregatorFn = aggregators[aggregatorName];\n\t\t\tif (typeof aggregatorFn !== 'function') {\n\t\t\t\tthrow new Error(`'${aggregatorName}' is not a defined aggregator.`);\n\t\t\t}\n\t\t\tconst aggregatedMetric = aggregatorFn(metrics);\n\t\t\t// NB: The 'omit' aggregator returns undefined.\n\t\t\tif (aggregatedMetric) {\n\t\t\t\tconst aggregatedMetricWrapper = Object.assign(\n\t\t\t\t\t{\n\t\t\t\t\t\tget: () => aggregatedMetric,\n\t\t\t\t\t},\n\t\t\t\t\taggregatedMetric,\n\t\t\t\t);\n\t\t\t\taggregatedRegistry.registerMetric(aggregatedMetricWrapper);\n\t\t\t}\n\t\t});\n\n\t\treturn aggregatedRegistry;\n\t}\n\n\t/**\n\t * Sets the registry or registries to be aggregated. Call from workers to\n\t * use a registry/registries other than the default global registry.\n\t * @param {Array<Registry>|Registry} regs Registry or registries to be\n\t *   aggregated.\n\t * @return {void}\n\t */\n\tstatic setRegistries(regs) {\n\t\tif (!Array.isArray(regs)) regs = [regs];\n\t\tregs.forEach(reg => {\n\t\t\tif (!(reg instanceof Registry)) {\n\t\t\t\tthrow new TypeError(`Expected Registry, got ${typeof reg}`);\n\t\t\t}\n\t\t});\n\t\tregistries = regs;\n\t}\n}\n\n/**\n * Adds event listeners for cluster aggregation. Idempotent (safe to call more\n * than once).\n * @return {void}\n */\nfunction addListeners() {\n\tif (listenersAdded) return;\n\tlistenersAdded = true;\n\n\tif (cluster().isMaster) {\n\t\t// Listen for worker responses to requests for local metrics\n\t\tcluster().on('message', (worker, message) => {\n\t\t\tif (message.type === GET_METRICS_RES) {\n\t\t\t\tconst request = requests.get(message.requestId);\n\n\t\t\t\tif (message.error) {\n\t\t\t\t\trequest.done(new Error(message.error));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tmessage.metrics.forEach(registry => request.responses.push(registry));\n\t\t\t\trequest.pending--;\n\n\t\t\t\tif (request.pending === 0) {\n\t\t\t\t\t// finalize\n\t\t\t\t\trequests.delete(message.requestId);\n\t\t\t\t\tclearTimeout(request.errorTimeout);\n\n\t\t\t\t\tconst registry = AggregatorRegistry.aggregate(request.responses);\n\t\t\t\t\tconst promString = registry.metrics();\n\t\t\t\t\trequest.done(null, promString);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tif (cluster().isWorker) {\n\t\t// Respond to master's requests for worker's local metrics.\n\t\tprocess.on('message', message => {\n\t\t\tif (message.type === GET_METRICS_REQ) {\n\t\t\t\tPromise.all(registries.map(r => r.getMetricsAsJSON()))\n\t\t\t\t\t.then(metrics => {\n\t\t\t\t\t\tprocess.send({\n\t\t\t\t\t\t\ttype: GET_METRICS_RES,\n\t\t\t\t\t\t\trequestId: message.requestId,\n\t\t\t\t\t\t\tmetrics,\n\t\t\t\t\t\t});\n\t\t\t\t\t})\n\t\t\t\t\t.catch(error => {\n\t\t\t\t\t\tprocess.send({\n\t\t\t\t\t\t\ttype: GET_METRICS_RES,\n\t\t\t\t\t\t\trequestId: message.requestId,\n\t\t\t\t\t\t\terror: error.message,\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n}\n\nmodule.exports = AggregatorRegistry;\n","/**\n * Prometheus client\n * @module Prometheus client\n */\n\n'use strict';\n\nexports.register = require('./lib/registry').globalRegistry;\nexports.Registry = require('./lib/registry');\nObject.defineProperty(exports, 'contentType', {\n\tconfigurable: false,\n\tenumerable: true,\n\tget() {\n\t\treturn exports.register.contentType;\n\t},\n\tset(value) {\n\t\texports.register.setContentType(value);\n\t},\n});\nexports.prometheusContentType = exports.Registry.PROMETHEUS_CONTENT_TYPE;\nexports.openMetricsContentType = exports.Registry.OPENMETRICS_CONTENT_TYPE;\nexports.validateMetricName = require('./lib/validation').validateMetricName;\n\nexports.Counter = require('./lib/counter');\nexports.Gauge = require('./lib/gauge');\nexports.Histogram = require('./lib/histogram');\nexports.Summary = require('./lib/summary');\nexports.Pushgateway = require('./lib/pushgateway');\n\nexports.linearBuckets = require('./lib/bucketGenerators').linearBuckets;\nexports.exponentialBuckets =\n\trequire('./lib/bucketGenerators').exponentialBuckets;\n\nexports.collectDefaultMetrics = require('./lib/defaultMetrics');\n\nexports.aggregators = require('./lib/metricAggregators').aggregators;\nexports.AggregatorRegistry = require('./lib/cluster');\n","/**\n * Optional adapter for the `prom-client` npm package.\n *\n * If `prom-client` is installed, this creates real Prometheus Counter and\n * Summary objects for native integration with Prometheus scraping.\n * The MetricsCollector uses this when `usePromClient: true` is set.\n *\n * Install: `npm install prom-client`\n *\n * @example\n * ```typescript\n * const metrics = new MetricsCollector({ usePromClient: true });\n * // Metrics are now registered in the default prom-client registry\n * // and will appear in prom-client's `register.metrics()` output.\n * ```\n */\n\n// prom-client types (minimal subset we use)\ninterface PromCounter {\n  inc(labels: Record<string, string>, value?: number): void;\n}\ninterface PromSummary {\n  observe(labels: Record<string, string>, value: number): void;\n}\ninterface PromRegistry {\n  metrics(): Promise<string>;\n  contentType: string;\n}\n\nexport class PrometheusRegistry {\n  private _counters = new Map<string, PromCounter>();\n  private _summaries = new Map<string, PromSummary>();\n  private _registry?: PromRegistry;\n  private _available = false;\n\n  async initialize(prefix: string): Promise<boolean> {\n    try {\n      const promClient = await import(\"prom-client\");\n      this._registry = promClient.register;\n      this.createMetrics(promClient, prefix);\n      this._available = true;\n      return true;\n    } catch {\n      // prom-client not installed — fall back to custom format\n      this._available = false;\n      return false;\n    }\n  }\n\n  get available(): boolean {\n    return this._available;\n  }\n\n  get contentType(): string {\n    return this._registry?.contentType ?? \"text/plain; version=0.0.4; charset=utf-8\";\n  }\n\n  async metrics(): Promise<string> {\n    if (!this._registry) return \"\";\n    return this._registry.metrics();\n  }\n\n  incrementCounter(name: string, labels: Record<string, string>, value = 1): void {\n    this._counters.get(name)?.inc(labels, value);\n  }\n\n  observeSummary(name: string, labels: Record<string, string>, value: number): void {\n    this._summaries.get(name)?.observe(labels, value);\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  private createMetrics(promClient: any, p: string): void {\n    const Counter = promClient.Counter;\n    const Summary = promClient.Summary;\n\n    // Labelled counters\n    const counterDefs: { key: string; name: string; help: string; labels: string[] }[] = [\n      { key: \"poll_total\", name: `${p}_task_poll_total`, help: \"Total task polls\", labels: [\"task_type\"] },\n      { key: \"poll_error_total\", name: `${p}_task_poll_error_total`, help: \"Total task poll errors\", labels: [\"task_type\"] },\n      { key: \"execute_total\", name: `${p}_task_execute_total`, help: \"Total task executions\", labels: [\"task_type\"] },\n      { key: \"execute_error_total\", name: `${p}_task_execute_error_total`, help: \"Total task execution errors\", labels: [\"task_type\"] },\n      { key: \"update_error_total\", name: `${p}_task_update_error_total`, help: \"Total task update failures\", labels: [\"task_type\"] },\n      { key: \"ack_error_total\", name: `${p}_task_ack_error_total`, help: \"Total task ack errors\", labels: [\"task_type\"] },\n      { key: \"queue_full_total\", name: `${p}_task_execution_queue_full_total`, help: \"Task execution queue full\", labels: [\"task_type\"] },\n      { key: \"paused_total\", name: `${p}_task_paused_total`, help: \"Task paused events\", labels: [\"task_type\"] },\n      { key: \"external_payload_total\", name: `${p}_external_payload_used_total`, help: \"External payload used\", labels: [\"payload_type\"] },\n      { key: \"uncaught_total\", name: `${p}_thread_uncaught_exceptions_total`, help: \"Uncaught exceptions\", labels: [] },\n      { key: \"restart_total\", name: `${p}_worker_restart_total`, help: \"Worker restarts\", labels: [] },\n      { key: \"wf_start_error_total\", name: `${p}_workflow_start_error_total`, help: \"Workflow start errors\", labels: [] },\n    ];\n\n    for (const def of counterDefs) {\n      this._counters.set(def.key, new Counter({\n        name: def.name,\n        help: def.help,\n        labelNames: def.labels,\n      }));\n    }\n\n    // Summaries\n    const summaryDefs: { key: string; name: string; help: string; labels: string[] }[] = [\n      { key: \"poll_time\", name: `${p}_task_poll_time`, help: \"Task poll duration (ms)\", labels: [\"task_type\"] },\n      { key: \"execute_time\", name: `${p}_task_execute_time`, help: \"Task execution duration (ms)\", labels: [\"task_type\"] },\n      { key: \"update_time\", name: `${p}_task_update_time`, help: \"Task update duration (ms)\", labels: [\"task_type\"] },\n      { key: \"result_size\", name: `${p}_task_result_size_bytes`, help: \"Task result size (bytes)\", labels: [\"task_type\"] },\n      { key: \"wf_input_size\", name: `${p}_workflow_input_size_bytes`, help: \"Workflow input size (bytes)\", labels: [\"workflow_type\"] },\n      { key: \"api_request\", name: `${p}_http_api_client_request`, help: \"API request duration (ms)\", labels: [\"endpoint\"] },\n    ];\n\n    const quantiles = [0.5, 0.75, 0.9, 0.95, 0.99];\n    for (const def of summaryDefs) {\n      this._summaries.set(def.key, new Summary({\n        name: def.name,\n        help: def.help,\n        labelNames: def.labels,\n        percentiles: quantiles,\n        maxAgeSeconds: 600,\n        ageBuckets: 5,\n      }));\n    }\n  }\n}\n","import { createServer, type Server, type IncomingMessage, type ServerResponse } from \"node:http\";\nimport type { MetricsCollector } from \"./MetricsCollector\";\n\n/**\n * Lightweight HTTP server exposing Prometheus metrics and a health check endpoint.\n *\n * Uses Node.js built-in `http` module — no external dependencies.\n *\n * Endpoints:\n * - `GET /metrics` — Prometheus text exposition format (`text/plain; version=0.0.4`)\n * - `GET /health` — JSON health check (`{\"status\":\"UP\"}`)\n *\n * @example\n * ```typescript\n * const collector = new MetricsCollector();\n * const server = new MetricsServer(collector, 9090);\n * await server.start();\n * // GET http://localhost:9090/metrics\n * // GET http://localhost:9090/health\n * await server.stop();\n * ```\n */\nexport class MetricsServer {\n  private readonly _collector: MetricsCollector;\n  private readonly _port: number;\n  private _server?: Server;\n\n  constructor(collector: MetricsCollector, port: number) {\n    this._collector = collector;\n    this._port = port;\n  }\n\n  /** Start listening on the configured port */\n  async start(): Promise<void> {\n    if (this._server) return;\n\n    this._server = createServer(\n      (req: IncomingMessage, res: ServerResponse) => {\n        if (req.method === \"GET\" && req.url === \"/metrics\") {\n          void this._collector.toPrometheusTextAsync().then((body) => {\n            res.writeHead(200, {\n              \"Content-Type\": this._collector.getContentType(),\n            });\n            res.end(body);\n          });\n          return;\n        } else if (req.method === \"GET\" && req.url === \"/health\") {\n          res.writeHead(200, { \"Content-Type\": \"application/json\" });\n          res.end(JSON.stringify({ status: \"UP\" }));\n        } else {\n          res.writeHead(404);\n          res.end(\"Not Found\");\n        }\n      }\n    );\n\n    const server = this._server;\n    return new Promise<void>((resolve, reject) => {\n      server.on(\"error\", reject);\n      server.listen(this._port, () => resolve());\n    });\n  }\n\n  /** Stop the HTTP server */\n  async stop(): Promise<void> {\n    if (!this._server) return;\n\n    const server = this._server;\n    return new Promise<void>((resolve, reject) => {\n      server.close((err) => {\n        this._server = undefined;\n        if (err) reject(err);\n        else resolve();\n      });\n    });\n  }\n}\n","export const REFRESH_TOKEN_IN_MILLISECONDS = 3600000; // 1 hour\nexport const MAX_HTTP2_CONNECTIONS = 10;\n\n// Token management\nexport const TOKEN_TTL_MS = 2_700_000; // 45 minutes - refresh token before it expires\nexport const MAX_AUTH_FAILURES = 5; // stop logging errors after this many consecutive failures\nexport const MAX_AUTH_BACKOFF_MS = 60_000; // 60s cap on exponential backoff\nexport const MAX_INITIAL_TOKEN_RETRIES = 3; // retry initial token request on transient failures\n\n// Fetch retry\nexport const MAX_TRANSPORT_RETRIES = 3;\nexport const DEFAULT_REQUEST_TIMEOUT_MS = 60_000; // 60 seconds\nexport const DEFAULT_CONNECT_TIMEOUT_MS = 10_000; // 10 seconds (matches Python SDK)\n","import { MAX_HTTP2_CONNECTIONS, DEFAULT_CONNECT_TIMEOUT_MS } from \"../constants\";\n// eslint-disable-next-line\n// @ts-ignore since undici is an optional dependency and could be missing\nimport type {\n  RequestInfo as UndiciRequestInfo,\n  RequestInit as UndiciRequestInit,\n  BodyInit as UndiciBodyInit,\n  HeadersInit as UndiciHeadersInit,\n} from \"undici\";\n\nexport interface UndiciHttp2Options {\n  maxHttpConnections?: number;\n  connectTimeoutMs?: number;\n  tlsCertPath?: string;\n  tlsKeyPath?: string;\n  tlsCaPath?: string;\n  proxyUrl?: string;\n  tlsInsecure?: boolean;\n  disableHttp2?: boolean;\n}\n\nexport const getUndiciHttp2FetchFn = async (\n  options: UndiciHttp2Options = {}\n) => {\n  const {\n    maxHttpConnections = MAX_HTTP2_CONNECTIONS,\n    connectTimeoutMs = DEFAULT_CONNECT_TIMEOUT_MS,\n    tlsCertPath,\n    tlsKeyPath,\n    tlsCaPath,\n    proxyUrl,\n    tlsInsecure,\n    disableHttp2,\n  } = options;\n\n  // eslint-disable-next-line\n  // @ts-ignore since undici is an optional dependency and could be missing\n  const undici = await import(\"undici\");\n  const { fetch: undiciFetch } = undici;\n\n  // Build connect options (TLS + connect timeout)\n  const connectOptions: Record<string, unknown> = {};\n  if (connectTimeoutMs) {\n    connectOptions.timeout = connectTimeoutMs;\n  }\n\n  // mTLS: read cert/key/ca files if provided\n  if (tlsCertPath || tlsKeyPath || tlsCaPath) {\n    const { readFileSync } = await import(\"node:fs\");\n    if (tlsCertPath) connectOptions.cert = readFileSync(tlsCertPath);\n    if (tlsKeyPath) connectOptions.key = readFileSync(tlsKeyPath);\n    if (tlsCaPath) connectOptions.ca = readFileSync(tlsCaPath);\n  }\n\n  // Disable TLS certificate verification (for self-signed certs in dev/staging)\n  if (tlsInsecure) {\n    connectOptions.rejectUnauthorized = false;\n  }\n\n  // Create the appropriate dispatcher (Agent or ProxyAgent)\n  let dispatcher: InstanceType<typeof undici.Agent>;\n  const agentOptions = {\n    allowH2: !disableHttp2,\n    connections: maxHttpConnections,\n    connect: Object.keys(connectOptions).length > 0 ? connectOptions : undefined,\n  };\n\n  if (proxyUrl) {\n    dispatcher = new undici.ProxyAgent({\n      uri: proxyUrl,\n      ...agentOptions,\n    });\n  } else {\n    dispatcher = new undici.Agent(agentOptions);\n  }\n\n  return ((input: UndiciRequestInfo | Request, init?: UndiciRequestInit) => {\n    if (input instanceof Request) {\n      const { url, method, headers, body, signal } = input;\n\n      return undiciFetch(url, {\n        method,\n        headers: headers as UndiciHeadersInit,\n        body: body as UndiciBodyInit,\n        duplex: body ? \"half\" : undefined,\n        signal,\n        ...init,\n        dispatcher,\n      });\n    }\n\n    return undiciFetch(input, { ...init, dispatcher });\n  }) as typeof fetch;\n};\n","import {\n  getUndiciHttp2FetchFn,\n  type UndiciHttp2Options,\n} from \"./getUndiciHttp2FetchFn\";\n\nexport const resolveFetchFn = async (\n  customFetch?: typeof fetch,\n  undiciOptions?: UndiciHttp2Options\n): Promise<typeof fetch> => {\n  if (customFetch) return customFetch;\n  if (process?.release?.name !== \"node\") return fetch;\n\n  try {\n    return await getUndiciHttp2FetchFn(undiciOptions);\n  } catch {\n    return fetch;\n  }\n};\n","import {\n  DEFAULT_CONNECT_TIMEOUT_MS,\n  DEFAULT_REQUEST_TIMEOUT_MS,\n  REFRESH_TOKEN_IN_MILLISECONDS,\n} from \"../constants\";\nimport type { OrkesApiConfig } from \"../../types\";\n\n/**\n * Parse an env var as a number, returning undefined if absent or NaN.\n * Unlike `Number(x) || fallback`, this correctly handles \"0\".\n */\nconst parseEnvNumber = (value: string | undefined): number | undefined => {\n  if (value === undefined || value === \"\") return undefined;\n  const num = Number(value);\n  return Number.isNaN(num) ? undefined : num;\n};\n\nconst parseEnvBoolean = (value: string | undefined): boolean | undefined => {\n  if (value === undefined || value === \"\") return undefined;\n  return value.toLowerCase() === \"true\" || value === \"1\";\n};\n\nexport const resolveOrkesConfig = (config?: Partial<OrkesApiConfig>) => {\n  let serverUrl = process.env.CONDUCTOR_SERVER_URL || config?.serverUrl;\n  if (serverUrl?.endsWith(\"/\")) serverUrl = serverUrl.slice(0, -1);\n  if (serverUrl?.endsWith(\"/api\")) serverUrl = serverUrl.slice(0, -4);\n\n  // Trim to avoid \"Invalid Access Key\" from trailing newlines when pasting into GitHub Secrets or .env\n  const keyId = (process.env.CONDUCTOR_AUTH_KEY || config?.keyId || \"\").trim();\n  const keySecret = (process.env.CONDUCTOR_AUTH_SECRET || config?.keySecret || \"\").trim();\n\n  if (!process.env.CONDUCTOR_AUTH_KEY) {\n    console.warn(\"CONDUCTOR_AUTH_KEY is not set\");\n  }\n\n  if (!process.env.CONDUCTOR_AUTH_SECRET) {\n    console.warn(\"CONDUCTOR_AUTH_SECRET is not set\");\n  }\n\n  return {\n    serverUrl,\n    keyId: keyId || undefined,\n    keySecret: keySecret || undefined,\n    maxHttp2Connections:\n      parseEnvNumber(process.env.CONDUCTOR_MAX_HTTP2_CONNECTIONS) ??\n      config?.maxHttp2Connections,\n    refreshTokenInterval:\n      parseEnvNumber(process.env.CONDUCTOR_REFRESH_TOKEN_INTERVAL) ??\n      config?.refreshTokenInterval ??\n      REFRESH_TOKEN_IN_MILLISECONDS,\n    logger: config?.logger,\n    requestTimeoutMs:\n      parseEnvNumber(process.env.CONDUCTOR_REQUEST_TIMEOUT_MS) ??\n      config?.requestTimeoutMs ??\n      DEFAULT_REQUEST_TIMEOUT_MS,\n    connectTimeoutMs:\n      parseEnvNumber(process.env.CONDUCTOR_CONNECT_TIMEOUT_MS) ??\n      config?.connectTimeoutMs ??\n      DEFAULT_CONNECT_TIMEOUT_MS,\n    tlsCertPath: process.env.CONDUCTOR_TLS_CERT_PATH || config?.tlsCertPath,\n    tlsKeyPath: process.env.CONDUCTOR_TLS_KEY_PATH || config?.tlsKeyPath,\n    tlsCaPath: process.env.CONDUCTOR_TLS_CA_PATH || config?.tlsCaPath,\n    proxyUrl: process.env.CONDUCTOR_PROXY_URL || config?.proxyUrl,\n    tlsInsecure:\n      parseEnvBoolean(process.env.CONDUCTOR_TLS_INSECURE) ??\n      config?.tlsInsecure,\n    disableHttp2:\n      parseEnvBoolean(process.env.CONDUCTOR_DISABLE_HTTP2) ??\n      config?.disableHttp2,\n  };\n};\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport type {\n  ArrayStyle,\n  ObjectStyle,\n  SerializerOptions,\n} from './pathSerializer.gen';\n\nexport type QuerySerializer = (query: Record<string, unknown>) => string;\n\nexport type BodySerializer = (body: any) => any;\n\nexport interface QuerySerializerOptions {\n  allowReserved?: boolean;\n  array?: SerializerOptions<ArrayStyle>;\n  object?: SerializerOptions<ObjectStyle>;\n}\n\nconst serializeFormDataPair = (\n  data: FormData,\n  key: string,\n  value: unknown,\n): void => {\n  if (typeof value === 'string' || value instanceof Blob) {\n    data.append(key, value);\n  } else if (value instanceof Date) {\n    data.append(key, value.toISOString());\n  } else {\n    data.append(key, JSON.stringify(value));\n  }\n};\n\nconst serializeUrlSearchParamsPair = (\n  data: URLSearchParams,\n  key: string,\n  value: unknown,\n): void => {\n  if (typeof value === 'string') {\n    data.append(key, value);\n  } else {\n    data.append(key, JSON.stringify(value));\n  }\n};\n\nexport const formDataBodySerializer = {\n  bodySerializer: <T extends Record<string, any> | Array<Record<string, any>>>(\n    body: T,\n  ): FormData => {\n    const data = new FormData();\n\n    Object.entries(body).forEach(([key, value]) => {\n      if (value === undefined || value === null) {\n        return;\n      }\n      if (Array.isArray(value)) {\n        value.forEach((v) => serializeFormDataPair(data, key, v));\n      } else {\n        serializeFormDataPair(data, key, value);\n      }\n    });\n\n    return data;\n  },\n};\n\nexport const jsonBodySerializer = {\n  bodySerializer: <T>(body: T): string =>\n    JSON.stringify(body, (_key, value) =>\n      typeof value === 'bigint' ? value.toString() : value,\n    ),\n};\n\nexport const urlSearchParamsBodySerializer = {\n  bodySerializer: <T extends Record<string, any> | Array<Record<string, any>>>(\n    body: T,\n  ): string => {\n    const data = new URLSearchParams();\n\n    Object.entries(body).forEach(([key, value]) => {\n      if (value === undefined || value === null) {\n        return;\n      }\n      if (Array.isArray(value)) {\n        value.forEach((v) => serializeUrlSearchParamsPair(data, key, v));\n      } else {\n        serializeUrlSearchParamsPair(data, key, value);\n      }\n    });\n\n    return data.toString();\n  },\n};\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport type { Config } from './types.gen';\n\nexport type ServerSentEventsOptions<TData = unknown> = Omit<\n  RequestInit,\n  'method'\n> &\n  Pick<Config, 'method' | 'responseTransformer' | 'responseValidator'> & {\n    /**\n     * Fetch API implementation. You can use this option to provide a custom\n     * fetch instance.\n     *\n     * @default globalThis.fetch\n     */\n    fetch?: typeof fetch;\n    /**\n     * Implementing clients can call request interceptors inside this hook.\n     */\n    onRequest?: (url: string, init: RequestInit) => Promise<Request>;\n    /**\n     * Callback invoked when a network or parsing error occurs during streaming.\n     *\n     * This option applies only if the endpoint returns a stream of events.\n     *\n     * @param error The error that occurred.\n     */\n    onSseError?: (error: unknown) => void;\n    /**\n     * Callback invoked when an event is streamed from the server.\n     *\n     * This option applies only if the endpoint returns a stream of events.\n     *\n     * @param event Event streamed from the server.\n     * @returns Nothing (void).\n     */\n    onSseEvent?: (event: StreamEvent<TData>) => void;\n    serializedBody?: RequestInit['body'];\n    /**\n     * Default retry delay in milliseconds.\n     *\n     * This option applies only if the endpoint returns a stream of events.\n     *\n     * @default 3000\n     */\n    sseDefaultRetryDelay?: number;\n    /**\n     * Maximum number of retry attempts before giving up.\n     */\n    sseMaxRetryAttempts?: number;\n    /**\n     * Maximum retry delay in milliseconds.\n     *\n     * Applies only when exponential backoff is used.\n     *\n     * This option applies only if the endpoint returns a stream of events.\n     *\n     * @default 30000\n     */\n    sseMaxRetryDelay?: number;\n    /**\n     * Optional sleep function for retry backoff.\n     *\n     * Defaults to using `setTimeout`.\n     */\n    sseSleepFn?: (ms: number) => Promise<void>;\n    url: string;\n  };\n\nexport interface StreamEvent<TData = unknown> {\n  data: TData;\n  event?: string;\n  id?: string;\n  retry?: number;\n}\n\nexport type ServerSentEventsResult<\n  TData = unknown,\n  TReturn = void,\n  TNext = unknown,\n> = {\n  stream: AsyncGenerator<\n    TData extends Record<string, unknown> ? TData[keyof TData] : TData,\n    TReturn,\n    TNext\n  >;\n};\n\nexport const createSseClient = <TData = unknown>({\n  onRequest,\n  onSseError,\n  onSseEvent,\n  responseTransformer,\n  responseValidator,\n  sseDefaultRetryDelay,\n  sseMaxRetryAttempts,\n  sseMaxRetryDelay,\n  sseSleepFn,\n  url,\n  ...options\n}: ServerSentEventsOptions): ServerSentEventsResult<TData> => {\n  let lastEventId: string | undefined;\n\n  const sleep =\n    sseSleepFn ??\n    ((ms: number) => new Promise((resolve) => setTimeout(resolve, ms)));\n\n  const createStream = async function* () {\n    let retryDelay: number = sseDefaultRetryDelay ?? 3000;\n    let attempt = 0;\n    const signal = options.signal ?? new AbortController().signal;\n\n    while (true) {\n      if (signal.aborted) break;\n\n      attempt++;\n\n      const headers =\n        options.headers instanceof Headers\n          ? options.headers\n          : new Headers(options.headers as Record<string, string> | undefined);\n\n      if (lastEventId !== undefined) {\n        headers.set('Last-Event-ID', lastEventId);\n      }\n\n      try {\n        const requestInit: RequestInit = {\n          redirect: 'follow',\n          ...options,\n          body: options.serializedBody,\n          headers,\n          signal,\n        };\n        let request = new Request(url, requestInit);\n        if (onRequest) {\n          request = await onRequest(url, requestInit);\n        }\n        // fetch must be assigned here, otherwise it would throw the error:\n        // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation\n        const _fetch = options.fetch ?? globalThis.fetch;\n        const response = await _fetch(request);\n\n        if (!response.ok)\n          throw new Error(\n            `SSE failed: ${response.status} ${response.statusText}`,\n          );\n\n        if (!response.body) throw new Error('No body in SSE response');\n\n        const reader = response.body\n          .pipeThrough(new TextDecoderStream())\n          .getReader();\n\n        let buffer = '';\n\n        const abortHandler = () => {\n          try {\n            reader.cancel();\n          } catch {\n            // noop\n          }\n        };\n\n        signal.addEventListener('abort', abortHandler);\n\n        try {\n          while (true) {\n            const { done, value } = await reader.read();\n            if (done) break;\n            buffer += value;\n\n            const chunks = buffer.split('\\n\\n');\n            buffer = chunks.pop() ?? '';\n\n            for (const chunk of chunks) {\n              const lines = chunk.split('\\n');\n              const dataLines: Array<string> = [];\n              let eventName: string | undefined;\n\n              for (const line of lines) {\n                if (line.startsWith('data:')) {\n                  dataLines.push(line.replace(/^data:\\s*/, ''));\n                } else if (line.startsWith('event:')) {\n                  eventName = line.replace(/^event:\\s*/, '');\n                } else if (line.startsWith('id:')) {\n                  lastEventId = line.replace(/^id:\\s*/, '');\n                } else if (line.startsWith('retry:')) {\n                  const parsed = Number.parseInt(\n                    line.replace(/^retry:\\s*/, ''),\n                    10,\n                  );\n                  if (!Number.isNaN(parsed)) {\n                    retryDelay = parsed;\n                  }\n                }\n              }\n\n              let data: unknown;\n              let parsedJson = false;\n\n              if (dataLines.length) {\n                const rawData = dataLines.join('\\n');\n                try {\n                  data = JSON.parse(rawData);\n                  parsedJson = true;\n                } catch {\n                  data = rawData;\n                }\n              }\n\n              if (parsedJson) {\n                if (responseValidator) {\n                  await responseValidator(data);\n                }\n\n                if (responseTransformer) {\n                  data = await responseTransformer(data);\n                }\n              }\n\n              onSseEvent?.({\n                data,\n                event: eventName,\n                id: lastEventId,\n                retry: retryDelay,\n              });\n\n              if (dataLines.length) {\n                yield data as any;\n              }\n            }\n          }\n        } finally {\n          signal.removeEventListener('abort', abortHandler);\n          reader.releaseLock();\n        }\n\n        break; // exit loop on normal completion\n      } catch (error) {\n        // connection failed or aborted; retry after delay\n        onSseError?.(error);\n\n        if (\n          sseMaxRetryAttempts !== undefined &&\n          attempt >= sseMaxRetryAttempts\n        ) {\n          break; // stop after firing error\n        }\n\n        // exponential backoff: double retry each attempt, cap at 30s\n        const backoff = Math.min(\n          retryDelay * 2 ** (attempt - 1),\n          sseMaxRetryDelay ?? 30000,\n        );\n        await sleep(backoff);\n      }\n    }\n  };\n\n  const stream = createStream();\n\n  return { stream };\n};\n","// This file is auto-generated by @hey-api/openapi-ts\n\ninterface SerializeOptions<T>\n  extends SerializePrimitiveOptions,\n    SerializerOptions<T> {}\n\ninterface SerializePrimitiveOptions {\n  allowReserved?: boolean;\n  name: string;\n}\n\nexport interface SerializerOptions<T> {\n  /**\n   * @default true\n   */\n  explode: boolean;\n  style: T;\n}\n\nexport type ArrayStyle = 'form' | 'spaceDelimited' | 'pipeDelimited';\nexport type ArraySeparatorStyle = ArrayStyle | MatrixStyle;\ntype MatrixStyle = 'label' | 'matrix' | 'simple';\nexport type ObjectStyle = 'form' | 'deepObject';\ntype ObjectSeparatorStyle = ObjectStyle | MatrixStyle;\n\ninterface SerializePrimitiveParam extends SerializePrimitiveOptions {\n  value: string;\n}\n\nexport const separatorArrayExplode = (style: ArraySeparatorStyle) => {\n  switch (style) {\n    case 'label':\n      return '.';\n    case 'matrix':\n      return ';';\n    case 'simple':\n      return ',';\n    default:\n      return '&';\n  }\n};\n\nexport const separatorArrayNoExplode = (style: ArraySeparatorStyle) => {\n  switch (style) {\n    case 'form':\n      return ',';\n    case 'pipeDelimited':\n      return '|';\n    case 'spaceDelimited':\n      return '%20';\n    default:\n      return ',';\n  }\n};\n\nexport const separatorObjectExplode = (style: ObjectSeparatorStyle) => {\n  switch (style) {\n    case 'label':\n      return '.';\n    case 'matrix':\n      return ';';\n    case 'simple':\n      return ',';\n    default:\n      return '&';\n  }\n};\n\nexport const serializeArrayParam = ({\n  allowReserved,\n  explode,\n  name,\n  style,\n  value,\n}: SerializeOptions<ArraySeparatorStyle> & {\n  value: unknown[];\n}) => {\n  if (!explode) {\n    const joinedValues = (\n      allowReserved ? value : value.map((v) => encodeURIComponent(v as string))\n    ).join(separatorArrayNoExplode(style));\n    switch (style) {\n      case 'label':\n        return `.${joinedValues}`;\n      case 'matrix':\n        return `;${name}=${joinedValues}`;\n      case 'simple':\n        return joinedValues;\n      default:\n        return `${name}=${joinedValues}`;\n    }\n  }\n\n  const separator = separatorArrayExplode(style);\n  const joinedValues = value\n    .map((v) => {\n      if (style === 'label' || style === 'simple') {\n        return allowReserved ? v : encodeURIComponent(v as string);\n      }\n\n      return serializePrimitiveParam({\n        allowReserved,\n        name,\n        value: v as string,\n      });\n    })\n    .join(separator);\n  return style === 'label' || style === 'matrix'\n    ? separator + joinedValues\n    : joinedValues;\n};\n\nexport const serializePrimitiveParam = ({\n  allowReserved,\n  name,\n  value,\n}: SerializePrimitiveParam) => {\n  if (value === undefined || value === null) {\n    return '';\n  }\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\n  return `${name}=${allowReserved ? value : encodeURIComponent(value)}`;\n};\n\nexport const serializeObjectParam = ({\n  allowReserved,\n  explode,\n  name,\n  style,\n  value,\n  valueOnly,\n}: SerializeOptions<ObjectSeparatorStyle> & {\n  value: Record<string, unknown> | Date;\n  valueOnly?: boolean;\n}) => {\n  if (value instanceof Date) {\n    return valueOnly ? value.toISOString() : `${name}=${value.toISOString()}`;\n  }\n\n  if (style !== 'deepObject' && !explode) {\n    let values: string[] = [];\n    Object.entries(value).forEach(([key, v]) => {\n      values = [\n        ...values,\n        key,\n        allowReserved ? (v as string) : encodeURIComponent(v as string),\n      ];\n    });\n    const joinedValues = values.join(',');\n    switch (style) {\n      case 'form':\n        return `${name}=${joinedValues}`;\n      case 'label':\n        return `.${joinedValues}`;\n      case 'matrix':\n        return `;${name}=${joinedValues}`;\n      default:\n        return joinedValues;\n    }\n  }\n\n  const separator = separatorObjectExplode(style);\n  const joinedValues = Object.entries(value)\n    .map(([key, v]) =>\n      serializePrimitiveParam({\n        allowReserved,\n        name: style === 'deepObject' ? `${name}[${key}]` : key,\n        value: v as string,\n      }),\n    )\n    .join(separator);\n  return style === 'label' || style === 'matrix'\n    ? separator + joinedValues\n    : joinedValues;\n};\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport type { BodySerializer, QuerySerializer } from './bodySerializer.gen';\nimport {\n  type ArraySeparatorStyle,\n  serializeArrayParam,\n  serializeObjectParam,\n  serializePrimitiveParam,\n} from './pathSerializer.gen';\n\nexport interface PathSerializer {\n  path: Record<string, unknown>;\n  url: string;\n}\n\nexport const PATH_PARAM_RE = /\\{[^{}]+\\}/g;\n\nexport const defaultPathSerializer = ({ path, url: _url }: PathSerializer) => {\n  let url = _url;\n  const matches = _url.match(PATH_PARAM_RE);\n  if (matches) {\n    for (const match of matches) {\n      let explode = false;\n      let name = match.substring(1, match.length - 1);\n      let style: ArraySeparatorStyle = 'simple';\n\n      if (name.endsWith('*')) {\n        explode = true;\n        name = name.substring(0, name.length - 1);\n      }\n\n      if (name.startsWith('.')) {\n        name = name.substring(1);\n        style = 'label';\n      } else if (name.startsWith(';')) {\n        name = name.substring(1);\n        style = 'matrix';\n      }\n\n      const value = path[name];\n\n      if (value === undefined || value === null) {\n        continue;\n      }\n\n      if (Array.isArray(value)) {\n        url = url.replace(\n          match,\n          serializeArrayParam({ explode, name, style, value }),\n        );\n        continue;\n      }\n\n      if (typeof value === 'object') {\n        url = url.replace(\n          match,\n          serializeObjectParam({\n            explode,\n            name,\n            style,\n            value: value as Record<string, unknown>,\n            valueOnly: true,\n          }),\n        );\n        continue;\n      }\n\n      if (style === 'matrix') {\n        url = url.replace(\n          match,\n          `;${serializePrimitiveParam({\n            name,\n            value: value as string,\n          })}`,\n        );\n        continue;\n      }\n\n      const replaceValue = encodeURIComponent(\n        style === 'label' ? `.${value as string}` : (value as string),\n      );\n      url = url.replace(match, replaceValue);\n    }\n  }\n  return url;\n};\n\nexport const getUrl = ({\n  baseUrl,\n  path,\n  query,\n  querySerializer,\n  url: _url,\n}: {\n  baseUrl?: string;\n  path?: Record<string, unknown>;\n  query?: Record<string, unknown>;\n  querySerializer: QuerySerializer;\n  url: string;\n}) => {\n  const pathUrl = _url.startsWith('/') ? _url : `/${_url}`;\n  let url = (baseUrl ?? '') + pathUrl;\n  if (path) {\n    url = defaultPathSerializer({ path, url });\n  }\n  let search = query ? querySerializer(query) : '';\n  if (search.startsWith('?')) {\n    search = search.substring(1);\n  }\n  if (search) {\n    url += `?${search}`;\n  }\n  return url;\n};\n\nexport function getValidRequestBody(options: {\n  body?: unknown;\n  bodySerializer?: BodySerializer | null;\n  serializedBody?: unknown;\n}) {\n  const hasBody = options.body !== undefined;\n  const isSerializedBody = hasBody && options.bodySerializer;\n\n  if (isSerializedBody) {\n    if ('serializedBody' in options) {\n      const hasSerializedBody =\n        options.serializedBody !== undefined && options.serializedBody !== '';\n\n      return hasSerializedBody ? options.serializedBody : null;\n    }\n\n    // not all clients implement a serializedBody property (i.e. client-axios)\n    return options.body !== '' ? options.body : null;\n  }\n\n  // plain/text body\n  if (hasBody) {\n    return options.body;\n  }\n\n  // no body was provided\n  return undefined;\n}\n","// This file is auto-generated by @hey-api/openapi-ts\n\nexport type AuthToken = string | undefined;\n\nexport interface Auth {\n  /**\n   * Which part of the request do we use to send the auth?\n   *\n   * @default 'header'\n   */\n  in?: 'header' | 'query' | 'cookie';\n  /**\n   * Header or query parameter name.\n   *\n   * @default 'Authorization'\n   */\n  name?: string;\n  scheme?: 'basic' | 'bearer';\n  type: 'apiKey' | 'http';\n}\n\nexport const getAuthToken = async (\n  auth: Auth,\n  callback: ((auth: Auth) => Promise<AuthToken> | AuthToken) | AuthToken,\n): Promise<string | undefined> => {\n  const token =\n    typeof callback === 'function' ? await callback(auth) : callback;\n\n  if (!token) {\n    return;\n  }\n\n  if (auth.scheme === 'bearer') {\n    return `Bearer ${token}`;\n  }\n\n  if (auth.scheme === 'basic') {\n    return `Basic ${btoa(token)}`;\n  }\n\n  return token;\n};\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport { getAuthToken } from '../core/auth.gen';\nimport type { QuerySerializerOptions } from '../core/bodySerializer.gen';\nimport { jsonBodySerializer } from '../core/bodySerializer.gen';\nimport {\n  serializeArrayParam,\n  serializeObjectParam,\n  serializePrimitiveParam,\n} from '../core/pathSerializer.gen';\nimport { getUrl } from '../core/utils.gen';\nimport type { Client, ClientOptions, Config, RequestOptions } from './types.gen';\n\nexport const createQuerySerializer = <T = unknown>({\n  allowReserved,\n  array,\n  object,\n}: QuerySerializerOptions = {}) => {\n  const querySerializer = (queryParams: T) => {\n    const search: string[] = [];\n    if (queryParams && typeof queryParams === 'object') {\n      for (const name in queryParams) {\n        const value = queryParams[name];\n\n        if (value === undefined || value === null) {\n          continue;\n        }\n\n        if (Array.isArray(value)) {\n          const serializedArray = serializeArrayParam({\n            allowReserved,\n            explode: true,\n            name,\n            style: 'form',\n            value,\n            ...array,\n          });\n          if (serializedArray) search.push(serializedArray);\n        } else if (typeof value === 'object') {\n          const serializedObject = serializeObjectParam({\n            allowReserved,\n            explode: true,\n            name,\n            style: 'deepObject',\n            value: value as Record<string, unknown>,\n            ...object,\n          });\n          if (serializedObject) search.push(serializedObject);\n        } else {\n          const serializedPrimitive = serializePrimitiveParam({\n            allowReserved,\n            name,\n            value: value as string,\n          });\n          if (serializedPrimitive) search.push(serializedPrimitive);\n        }\n      }\n    }\n    return search.join('&');\n  };\n  return querySerializer;\n};\n\n/**\n * Infers parseAs value from provided Content-Type header.\n */\nexport const getParseAs = (\n  contentType: string | null,\n): Exclude<Config['parseAs'], 'auto'> => {\n  if (!contentType) {\n    // If no Content-Type header is provided, the best we can do is return the raw response body,\n    // which is effectively the same as the 'stream' option.\n    return 'stream';\n  }\n\n  const cleanContent = contentType.split(';')[0]?.trim();\n\n  if (!cleanContent) {\n    return;\n  }\n\n  if (\n    cleanContent.startsWith('application/json') ||\n    cleanContent.endsWith('+json')\n  ) {\n    return 'json';\n  }\n\n  if (cleanContent === 'multipart/form-data') {\n    return 'formData';\n  }\n\n  if (\n    ['application/', 'audio/', 'image/', 'video/'].some((type) =>\n      cleanContent.startsWith(type),\n    )\n  ) {\n    return 'blob';\n  }\n\n  if (cleanContent.startsWith('text/')) {\n    return 'text';\n  }\n\n  return;\n};\n\nconst checkForExistence = (\n  options: Pick<RequestOptions, 'auth' | 'query'> & {\n    headers: Headers;\n  },\n  name?: string,\n): boolean => {\n  if (!name) {\n    return false;\n  }\n  if (\n    options.headers.has(name) ||\n    options.query?.[name] ||\n    options.headers.get('Cookie')?.includes(`${name}=`)\n  ) {\n    return true;\n  }\n  return false;\n};\n\nexport const setAuthParams = async ({\n  security,\n  ...options\n}: Pick<Required<RequestOptions>, 'security'> &\n  Pick<RequestOptions, 'auth' | 'query'> & {\n    headers: Headers;\n  }) => {\n  for (const auth of security) {\n    if (checkForExistence(options, auth.name)) {\n      continue;\n    }\n\n    const token = await getAuthToken(auth, options.auth);\n\n    if (!token) {\n      continue;\n    }\n\n    const name = auth.name ?? 'Authorization';\n\n    switch (auth.in) {\n      case 'query':\n        if (!options.query) {\n          options.query = {};\n        }\n        options.query[name] = token;\n        break;\n      case 'cookie':\n        options.headers.append('Cookie', `${name}=${token}`);\n        break;\n      case 'header':\n      default:\n        options.headers.set(name, token);\n        break;\n    }\n  }\n};\n\nexport const buildUrl: Client['buildUrl'] = (options) =>\n  getUrl({\n    baseUrl: options.baseUrl as string,\n    path: options.path,\n    query: options.query,\n    querySerializer:\n      typeof options.querySerializer === 'function'\n        ? options.querySerializer\n        : createQuerySerializer(options.querySerializer),\n    url: options.url,\n  });\n\nexport const mergeConfigs = (a: Config, b: Config): Config => {\n  const config = { ...a, ...b };\n  if (config.baseUrl?.endsWith('/')) {\n    config.baseUrl = config.baseUrl.substring(0, config.baseUrl.length - 1);\n  }\n  config.headers = mergeHeaders(a.headers, b.headers);\n  return config;\n};\n\nconst headersEntries = (headers: Headers): Array<[string, string]> => {\n  const entries: Array<[string, string]> = [];\n  headers.forEach((value, key) => {\n    entries.push([key, value]);\n  });\n  return entries;\n};\n\nexport const mergeHeaders = (\n  ...headers: Array<Required<Config>['headers'] | undefined>\n): Headers => {\n  const mergedHeaders = new Headers();\n  for (const header of headers) {\n    if (!header) {\n      continue;\n    }\n\n    const iterator =\n      header instanceof Headers\n        ? headersEntries(header)\n        : Object.entries(header);\n\n    for (const [key, value] of iterator) {\n      if (value === null) {\n        mergedHeaders.delete(key);\n      } else if (Array.isArray(value)) {\n        for (const v of value) {\n          mergedHeaders.append(key, v as string);\n        }\n      } else if (value !== undefined) {\n        // assume object headers are meant to be JSON stringified, i.e. their\n        // content value in OpenAPI specification is 'application/json'\n        mergedHeaders.set(\n          key,\n          typeof value === 'object' ? JSON.stringify(value) : (value as string),\n        );\n      }\n    }\n  }\n  return mergedHeaders;\n};\n\ntype ErrInterceptor<Err, Res, Req, Options> = (\n  error: Err,\n  response: Res,\n  request: Req,\n  options: Options,\n) => Err | Promise<Err>;\n\ntype ReqInterceptor<Req, Options> = (\n  request: Req,\n  options: Options,\n) => Req | Promise<Req>;\n\ntype ResInterceptor<Res, Req, Options> = (\n  response: Res,\n  request: Req,\n  options: Options,\n) => Res | Promise<Res>;\n\nclass Interceptors<Interceptor> {\n  fns: Array<Interceptor | null> = [];\n\n  clear(): void {\n    this.fns = [];\n  }\n\n  eject(id: number | Interceptor): void {\n    const index = this.getInterceptorIndex(id);\n    if (this.fns[index]) {\n      this.fns[index] = null;\n    }\n  }\n\n  exists(id: number | Interceptor): boolean {\n    const index = this.getInterceptorIndex(id);\n    return Boolean(this.fns[index]);\n  }\n\n  getInterceptorIndex(id: number | Interceptor): number {\n    if (typeof id === 'number') {\n      return this.fns[id] ? id : -1;\n    }\n    return this.fns.indexOf(id);\n  }\n\n  update(\n    id: number | Interceptor,\n    fn: Interceptor,\n  ): number | Interceptor | false {\n    const index = this.getInterceptorIndex(id);\n    if (this.fns[index]) {\n      this.fns[index] = fn;\n      return id;\n    }\n    return false;\n  }\n\n  use(fn: Interceptor): number {\n    this.fns.push(fn);\n    return this.fns.length - 1;\n  }\n}\n\nexport interface Middleware<Req, Res, Err, Options> {\n  error: Interceptors<ErrInterceptor<Err, Res, Req, Options>>;\n  request: Interceptors<ReqInterceptor<Req, Options>>;\n  response: Interceptors<ResInterceptor<Res, Req, Options>>;\n}\n\nexport const createInterceptors = <Req, Res, Err, Options>(): Middleware<\n  Req,\n  Res,\n  Err,\n  Options\n> => ({\n  error: new Interceptors<ErrInterceptor<Err, Res, Req, Options>>(),\n  request: new Interceptors<ReqInterceptor<Req, Options>>(),\n  response: new Interceptors<ResInterceptor<Res, Req, Options>>(),\n});\n\nconst defaultQuerySerializer = createQuerySerializer({\n  allowReserved: false,\n  array: {\n    explode: true,\n    style: 'form',\n  },\n  object: {\n    explode: true,\n    style: 'deepObject',\n  },\n});\n\nconst defaultHeaders = {\n  'Content-Type': 'application/json',\n};\n\nexport const createConfig = <T extends ClientOptions = ClientOptions>(\n  override: Config<Omit<ClientOptions, keyof T> & T> = {},\n): Config<Omit<ClientOptions, keyof T> & T> => ({\n  ...jsonBodySerializer,\n  headers: defaultHeaders,\n  parseAs: 'auto',\n  querySerializer: defaultQuerySerializer,\n  ...override,\n});\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport { createSseClient } from '../core/serverSentEvents.gen';\nimport type { HttpMethod } from '../core/types.gen';\nimport { getValidRequestBody } from '../core/utils.gen';\nimport type {\n  Client,\n  Config,\n  RequestOptions,\n  ResolvedRequestOptions,\n} from './types.gen';\nimport {\n  buildUrl,\n  createConfig,\n  createInterceptors,\n  getParseAs,\n  mergeConfigs,\n  mergeHeaders,\n  setAuthParams,\n} from './utils.gen';\n\ntype ReqInit = Omit<RequestInit, 'body' | 'headers'> & {\n  body?: any;\n  headers: ReturnType<typeof mergeHeaders>;\n};\n\nexport const createClient = (config: Config = {}): Client => {\n  let _config = mergeConfigs(createConfig(), config);\n\n  const getConfig = (): Config => ({ ..._config });\n\n  const setConfig = (config: Config): Config => {\n    _config = mergeConfigs(_config, config);\n    return getConfig();\n  };\n\n  const interceptors = createInterceptors<\n    Request,\n    Response,\n    unknown,\n    ResolvedRequestOptions\n  >();\n\n  const beforeRequest = async (options: RequestOptions) => {\n    const opts = {\n      ..._config,\n      ...options,\n      fetch: options.fetch ?? _config.fetch ?? globalThis.fetch,\n      headers: mergeHeaders(_config.headers, options.headers),\n      serializedBody: undefined,\n    };\n\n    if (opts.security) {\n      await setAuthParams({\n        ...opts,\n        security: opts.security,\n      });\n    }\n\n    if (opts.requestValidator) {\n      await opts.requestValidator(opts);\n    }\n\n    if (opts.body !== undefined && opts.bodySerializer) {\n      opts.serializedBody = opts.bodySerializer(opts.body);\n    }\n\n    // remove Content-Type header if body is empty to avoid sending invalid requests\n    if (opts.body === undefined || opts.serializedBody === '') {\n      opts.headers.delete('Content-Type');\n    }\n\n    const url = buildUrl(opts);\n\n    return { opts, url };\n  };\n\n  const request: Client['request'] = async (options) => {\n    // @ts-expect-error\n    const { opts, url } = await beforeRequest(options);\n    const requestInit: ReqInit = {\n      redirect: 'follow',\n      ...opts,\n      body: getValidRequestBody(opts),\n    };\n\n    let request = new Request(url, requestInit);\n\n    for (const fn of interceptors.request.fns) {\n      if (fn) {\n        request = await fn(request, opts);\n      }\n    }\n\n    // fetch must be assigned here, otherwise it would throw the error:\n    // TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation\n    const _fetch = opts.fetch!;\n    let response = await _fetch(request);\n\n    for (const fn of interceptors.response.fns) {\n      if (fn) {\n        response = await fn(response, request, opts);\n      }\n    }\n\n    const result = {\n      request,\n      response,\n    };\n\n    if (response.ok) {\n      const parseAs =\n        (opts.parseAs === 'auto'\n          ? getParseAs(response.headers.get('Content-Type'))\n          : opts.parseAs) ?? 'json';\n\n      if (\n        response.status === 204 ||\n        response.headers.get('Content-Length') === '0'\n      ) {\n        let emptyData: any;\n        switch (parseAs) {\n          case 'arrayBuffer':\n          case 'blob':\n          case 'text':\n            emptyData = await response[parseAs]();\n            break;\n          case 'formData':\n            emptyData = new FormData();\n            break;\n          case 'stream':\n            emptyData = response.body;\n            break;\n          case 'json':\n          default:\n            emptyData = {};\n            break;\n        }\n        return opts.responseStyle === 'data'\n          ? emptyData\n          : {\n              data: emptyData,\n              ...result,\n            };\n      }\n\n      let data: any;\n      switch (parseAs) {\n        case 'arrayBuffer':\n        case 'blob':\n        case 'formData':\n        case 'json':\n        case 'text':\n          data = await response[parseAs]();\n          break;\n        case 'stream':\n          return opts.responseStyle === 'data'\n            ? response.body\n            : {\n                data: response.body,\n                ...result,\n              };\n      }\n\n      if (parseAs === 'json') {\n        if (opts.responseValidator) {\n          await opts.responseValidator(data);\n        }\n\n        if (opts.responseTransformer) {\n          data = await opts.responseTransformer(data);\n        }\n      }\n\n      return opts.responseStyle === 'data'\n        ? data\n        : {\n            data,\n            ...result,\n          };\n    }\n\n    const textError = await response.text();\n    let jsonError: unknown;\n\n    try {\n      jsonError = JSON.parse(textError);\n    } catch {\n      // noop\n    }\n\n    const error = jsonError ?? textError;\n    let finalError = error;\n\n    for (const fn of interceptors.error.fns) {\n      if (fn) {\n        finalError = (await fn(error, response, request, opts)) as string;\n      }\n    }\n\n    finalError = finalError || ({} as string);\n\n    if (opts.throwOnError) {\n      throw finalError;\n    }\n\n    // TODO: we probably want to return error and improve types\n    return opts.responseStyle === 'data'\n      ? undefined\n      : {\n          error: finalError,\n          ...result,\n        };\n  };\n\n  const makeMethodFn =\n    (method: Uppercase<HttpMethod>) => (options: RequestOptions) =>\n      request({ ...options, method });\n\n  const makeSseFn =\n    (method: Uppercase<HttpMethod>) => async (options: RequestOptions) => {\n      const { opts, url } = await beforeRequest(options);\n      return createSseClient({\n        ...opts,\n        body: opts.body as BodyInit | null | undefined,\n        headers: opts.headers as unknown as Record<string, string>,\n        method,\n        onRequest: async (url, init) => {\n          let request = new Request(url, init);\n          for (const fn of interceptors.request.fns) {\n            if (fn) {\n              request = await fn(request, opts);\n            }\n          }\n          return request;\n        },\n        url,\n      });\n    };\n\n  return {\n    buildUrl,\n    connect: makeMethodFn('CONNECT'),\n    delete: makeMethodFn('DELETE'),\n    get: makeMethodFn('GET'),\n    getConfig,\n    head: makeMethodFn('HEAD'),\n    interceptors,\n    options: makeMethodFn('OPTIONS'),\n    patch: makeMethodFn('PATCH'),\n    post: makeMethodFn('POST'),\n    put: makeMethodFn('PUT'),\n    request,\n    setConfig,\n    sse: {\n      connect: makeSseFn('CONNECT'),\n      delete: makeSseFn('DELETE'),\n      get: makeSseFn('GET'),\n      head: makeSseFn('HEAD'),\n      options: makeSseFn('OPTIONS'),\n      patch: makeSseFn('PATCH'),\n      post: makeSseFn('POST'),\n      put: makeSseFn('PUT'),\n      trace: makeSseFn('TRACE'),\n    },\n    trace: makeMethodFn('TRACE'),\n  } as Client;\n};\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport { type ClientOptions, type Config, createClient, createConfig } from './client';\nimport type { ClientOptions as ClientOptions2 } from './types.gen';\n\n/**\n * The `createClientConfig()` function will be called on client initialization\n * and the returned object will become the client's initial configuration.\n *\n * You may want to initialize your client this way instead of calling\n * `setConfig()`. This is useful for example if you're using Next.js\n * to ensure your client always has the correct values.\n */\nexport type CreateClientConfig<T extends ClientOptions = ClientOptions2> = (override?: Config<ClientOptions & T>) => Config<Required<ClientOptions> & T>;\n\nexport const client = createClient(createConfig<ClientOptions2>({\n    baseUrl: 'https://sdkdev.orkesconductor.io'\n}));\n","// This file is auto-generated by @hey-api/openapi-ts\n\nimport type { Client, Options as Options2, TDataShape } from './client';\nimport { client } from './client.gen';\nimport type { AddEventHandlerData, AddEventHandlerResponses, AddOrUpdateMethodData, AddOrUpdateMethodResponses, AddOrUpdateServiceData, AddOrUpdateServiceResponses, AddRoleToApplicationUserData, AddRoleToApplicationUserResponses, AddTaskTagData, AddTaskTagResponses, AddUsersToGroupData, AddUsersToGroupResponses, AddUserToGroupData, AddUserToGroupResponses, AddWorkflowTagData, AddWorkflowTagResponses, AllData, AllResponses, AllVerboseData, AllVerboseResponses, AssignAndClaimData, AssignAndClaimResponses, AssociatePromptWithIntegrationData, AssociatePromptWithIntegrationResponses, BackPopulateFullTextIndexData, BackPopulateFullTextIndexResponses, BatchPollData, BatchPollResponses, CheckPermissionsData, CheckPermissionsResponses, ClaimTaskData, ClaimTaskResponses, ClearLocalCacheData, ClearLocalCacheResponses, ClearRedisCacheData, ClearRedisCacheResponses, ClearTaskExecutionCacheData, ClearTaskExecutionCacheResponses, CloseCircuitBreakerData, CloseCircuitBreakerResponses, CreateAccessKeyData, CreateAccessKeyResponses, CreateApplicationData, CreateApplicationResponses, CreateData, CreateMessageTemplatesData, CreateMessageTemplatesResponses, CreateOrUpdateEnvVariableData, CreateOrUpdateEnvVariableResponses, CreateResponses, CreateWebhookData, CreateWebhookResponses, DecideData, DecideResponses, Delete1Data, Delete1Responses, DeleteAccessKeyData, DeleteAccessKeyResponses, DeleteApplicationData, DeleteApplicationResponses, DeleteData, DeleteEnvVariableData, DeleteEnvVariableResponses, DeleteGroupData, DeleteGroupResponses, DeleteIntegrationApiData, DeleteIntegrationApiResponses, DeleteIntegrationProviderData, DeleteIntegrationProviderResponses, DeleteMessageTemplate1Data, DeleteMessageTemplate1Responses, DeleteMessageTemplateData, DeleteMessageTemplateResponses, DeleteProtoData, DeleteProtoResponses, DeleteQueueConfigData, DeleteQueueConfigResponses, DeleteResponses, DeleteScheduleData, DeleteScheduleResponses, DeleteSchemaByNameAndVersionData, DeleteSchemaByNameAndVersionResponses, DeleteSchemaByNameData, DeleteSchemaByNameResponses, DeleteSecretData, DeleteSecretResponses, DeleteTagForApplicationData, DeleteTagForApplicationResponses, DeleteTagForEnvVarData, DeleteTagForEnvVarResponses, DeleteTagForEventHandlerData, DeleteTagForEventHandlerResponses, DeleteTagForIntegrationData, DeleteTagForIntegrationProviderData, DeleteTagForIntegrationProviderResponses, DeleteTagForIntegrationResponses, DeleteTagForPromptTemplateData, DeleteTagForPromptTemplateResponses, DeleteTagForScheduleData, DeleteTagForScheduleResponses, DeleteTagForSecretData, DeleteTagForSecretResponses, DeleteTagForUserFormTemplateData, DeleteTagForUserFormTemplateResponses, DeleteTagForWebhookData, DeleteTagForWebhookResponses, DeleteTaskFromHumanTaskRecords1Data, DeleteTaskFromHumanTaskRecords1Responses, DeleteTaskFromHumanTaskRecordsData, DeleteTaskFromHumanTaskRecordsResponses, DeleteTaskTagData, DeleteTaskTagResponses, DeleteTemplateByNameData, DeleteTemplateByNameResponses, DeleteTemplatesByNameAndVersionData, DeleteTemplatesByNameAndVersionResponses, DeleteUserData, DeleteUserResponses, DeleteWebhookData, DeleteWebhookResponses, DeleteWorkflowTagData, DeleteWorkflowTagResponses, DiscoverData, DiscoverResponses, DoCheckData, DoCheckResponses, ExecuteWorkflowAsApiData, ExecuteWorkflowAsApiResponses, ExecuteWorkflowAsGetApiData, ExecuteWorkflowAsGetApiResponses, ExecuteWorkflowData, ExecuteWorkflowResponses, GenerateTokenData, GenerateTokenResponses, Get1Data, Get1Responses, Get2Data, Get2Responses, Get3Data, Get3Responses, GetAccessKeysData, GetAccessKeysResponses, GetAllData, GetAllIntegrationsData, GetAllIntegrationsResponses, GetAllPollDataData, GetAllPollDataResponses, GetAllProtosData, GetAllProtosResponses, GetAllResponses, GetAllSchedulesData, GetAllSchedulesResponses, GetAllSchemasData, GetAllSchemasResponses, GetAllTemplatesData, GetAllTemplatesResponses, GetAllWebhookData, GetAllWebhookResponses, GetAppByAccessKeyIdData, GetAppByAccessKeyIdResponses, GetApplicationData, GetApplicationResponses, GetCircuitBreakerStatusData, GetCircuitBreakerStatusResponses, GetConductorTaskByIdData, GetConductorTaskByIdResponses, GetData, GetEventHandlerByNameData, GetEventHandlerByNameResponses, GetEventHandlersData, GetEventHandlersForEvent1Data, GetEventHandlersForEvent1Responses, GetEventHandlersForEvent2Data, GetEventHandlersForEvent2Responses, GetEventHandlersForEventData, GetEventHandlersForEventResponses, GetEventHandlersResponses, GetEventsData, GetEventsResponses, GetExecutionStatusData, GetExecutionStatusResponses, GetExecutionStatusTaskListData, GetExecutionStatusTaskListResponses, GetGrantedPermissions1Data, GetGrantedPermissions1Responses, GetGrantedPermissionsData, GetGrantedPermissionsResponses, GetGroupData, GetGroupResponses, GetIntegrationApiData, GetIntegrationApiResponses, GetIntegrationApisData, GetIntegrationApisResponses, GetIntegrationAvailableApisData, GetIntegrationAvailableApisResponses, GetIntegrationDefData, GetIntegrationDefResponses, GetIntegrationProviderData, GetIntegrationProviderDefsData, GetIntegrationProviderDefsResponses, GetIntegrationProviderResponses, GetIntegrationProvidersData, GetIntegrationProvidersResponses, GetMessagesData, GetMessagesResponses, GetMessageTemplateData, GetMessageTemplateResponses, GetMessageTemplatesData, GetMessageTemplatesResponses, GetMessageTemplateVersionsData, GetMessageTemplateVersionsResponses, GetNextFewSchedulesData, GetNextFewSchedulesResponses, GetPermissionsData, GetPermissionsResponses, GetPollDataData, GetPollDataResponses, GetPromptsWithIntegrationData, GetPromptsWithIntegrationResponses, GetProtoDataData, GetProtoDataResponses, GetProvidersAndIntegrationsData, GetProvidersAndIntegrationsResponses, GetQueueConfigData, GetQueueConfigResponses, GetQueueNamesData, GetQueueNamesResponses, GetRedisUsageData, GetRedisUsageResponses, GetRegisteredServicesData, GetRegisteredServicesResponses, GetResponses, GetRunningWorkflowData, GetRunningWorkflowResponses, GetScheduleData, GetScheduleResponses, GetSchedulesByTagData, GetSchedulesByTagResponses, GetSchemaByNameAndVersionData, GetSchemaByNameAndVersionResponses, GetSchemaByNameWithLatestVersion1Data, GetSchemaByNameWithLatestVersion1Responses, GetSchemaByNameWithLatestVersionData, GetSchemaByNameWithLatestVersionResponses, GetSecretData, GetSecretResponses, GetServiceData, GetServiceResponses, GetTags1Data, GetTags1Responses, GetTagsData, GetTagsForApplicationData, GetTagsForApplicationResponses, GetTagsForEnvVarData, GetTagsForEnvVarResponses, GetTagsForEventHandlerData, GetTagsForEventHandlerResponses, GetTagsForIntegrationData, GetTagsForIntegrationProviderData, GetTagsForIntegrationProviderResponses, GetTagsForIntegrationResponses, GetTagsForPromptTemplateData, GetTagsForPromptTemplateResponses, GetTagsForScheduleData, GetTagsForScheduleResponses, GetTagsForUserFormTemplateData, GetTagsForUserFormTemplateResponses, GetTagsForWebhookData, GetTagsForWebhookResponses, GetTagsResponses, GetTask1Data, GetTask1Responses, GetTaskData, GetTaskDefData, GetTaskDefResponses, GetTaskDefsData, GetTaskDefsResponses, GetTaskDisplayNamesData, GetTaskDisplayNamesResponses, GetTaskLogsData, GetTaskLogsResponses, GetTaskResponses, GetTaskTagsData, GetTaskTagsResponses, GetTemplateByNameAndVersionData, GetTemplateByNameAndVersionResponses, GetTemplateByTaskIdData, GetTemplateByTaskIdResponses, GetTokenLimitData, GetTokenLimitResponses, GetTokenUsageData, GetTokenUsageResponses, GetUserData, GetUserInfoData, GetUserInfoResponses, GetUserResponses, GetUsersInGroupData, GetUsersInGroupResponses, GetVersionData, GetVersionResponses, GetWebhookData, GetWebhookResponses, GetWorkflowDefsData, GetWorkflowDefsResponses, GetWorkflows1Data, GetWorkflows1Responses, GetWorkflows2Data, GetWorkflows2Responses, GetWorkflowsData, GetWorkflowsResponses, GetWorkflowStatusSummaryData, GetWorkflowStatusSummaryResponses, GetWorkflowTagsData, GetWorkflowTagsResponses, GrantPermissionsData, GrantPermissionsResponses, HandleIncomingEventData, HandleIncomingEventResponses, HandleWebhook1Data, HandleWebhook1Responses, HandleWebhookData, HandleWebhookResponses, JumpToTaskData, JumpToTaskResponses, ListAllSecretNamesData, ListAllSecretNamesResponses, ListApplicationsData, ListApplicationsResponses, ListGroupsData, ListGroupsResponses, ListSecretsThatUserCanGrantAccessToData, ListSecretsThatUserCanGrantAccessToResponses, ListSecretsWithTagsThatUserCanGrantAccessToData, ListSecretsWithTagsThatUserCanGrantAccessToResponses, ListUsersData, ListUsersResponses, LogData, LogResponses, NamesData, NamesResponses, OpenCircuitBreakerData, OpenCircuitBreakerResponses, PauseAllSchedulesData, PauseAllSchedulesResponses, PauseScheduleData, PauseScheduleResponses, PauseSchedulesData, PauseSchedulesResponses, PauseWorkflow1Data, PauseWorkflow1Responses, PauseWorkflowData, PauseWorkflowResponses, PollData2, PollResponses, PutQueueConfigData, PutQueueConfigResponses, PutSecretData, PutSecretResponses, PutTagForApplicationData, PutTagForApplicationResponses, PutTagForEnvVarData, PutTagForEnvVarResponses, PutTagForEventHandlerData, PutTagForEventHandlerResponses, PutTagForIntegrationData, PutTagForIntegrationProviderData, PutTagForIntegrationProviderResponses, PutTagForIntegrationResponses, PutTagForPromptTemplateData, PutTagForPromptTemplateResponses, PutTagForScheduleData, PutTagForScheduleResponses, PutTagForSecretData, PutTagForSecretResponses, PutTagForUserFormTemplateData, PutTagForUserFormTemplateResponses, PutTagForWebhookData, PutTagForWebhookResponses, ReassignTaskData, ReassignTaskResponses, RecordEventStatsData, RecordEventStatsResponses, RegisterIntegrationData, RegisterIntegrationResponses, RegisterTaskDefData, RegisterTaskDefResponses, ReleaseTaskData, ReleaseTaskResponses, RemoveEventHandlerStatusData, RemoveEventHandlerStatusResponses, RemoveMethodData, RemoveMethodResponses, RemovePermissionsData, RemovePermissionsResponses, RemoveRoleFromApplicationUserData, RemoveRoleFromApplicationUserResponses, RemoveServiceData, RemoveServiceResponses, RemoveUserFromGroupData, RemoveUserFromGroupResponses, RemoveUsersFromGroupData, RemoveUsersFromGroupResponses, RequeueAllExecutionRecordsData, RequeueAllExecutionRecordsResponses, RequeuePendingTaskData, RequeuePendingTaskResponses, RequeueSweepData, RequeueSweepResponses, RerunData, RerunResponses, ResetWorkflowData, ResetWorkflowResponses, Restart1Data, Restart1Responses, RestartData, RestartResponses, ResumeAllSchedulesData, ResumeAllSchedulesResponses, ResumeScheduleData, ResumeScheduleResponses, ResumeSchedulesData, ResumeSchedulesResponses, ResumeWorkflow1Data, ResumeWorkflow1Responses, ResumeWorkflowData, ResumeWorkflowResponses, Retry1Data, Retry1Responses, RetryData, RetryResponses, Save1Data, Save1Responses, SaveAllIntegrationsData, SaveAllIntegrationsResponses, SaveData, SaveIntegrationApiData, SaveIntegrationApiResponses, SaveIntegrationProviderData, SaveIntegrationProviderResponses, SaveMessageTemplateData, SaveMessageTemplateResponses, SaveResponses, SaveScheduleData, SaveScheduleResponses, SaveTemplateData, SaveTemplateResponses, SaveTemplatesData, SaveTemplatesResponses, Search1Data, Search1Responses, Search2Data, Search2Responses, SearchData, SearchResponses, SearchV2Data, SearchV2Responses, SecretExistsData, SecretExistsResponses, SetProtoDataData, SetProtoDataResponses, SetTaskTagsData, SetTaskTagsResponses, SetWorkflowTagsData, SetWorkflowTagsResponses, SignalWorkflowTaskASyncData, SignalWorkflowTaskASyncResponses, SignalWorkflowTaskSyncData, SignalWorkflowTaskSyncResponses, Size1Data, Size1Responses, SizeData, SizeResponses, SkipTaskData, SkipTaskFromWorkflowData, SkipTaskFromWorkflowResponses, SkipTaskResponses, StartWorkflow1Data, StartWorkflow1Responses, StartWorkflowAsyncData, StartWorkflowAsyncResponses, StartWorkflowData, StartWorkflowResponses, Terminate1Data, Terminate1Responses, TerminateData, TerminateResponses, TestConnectivityData, TestConnectivityResponses, TestData, TestMessageTemplateData, TestMessageTemplateResponses, TestResponses, TestWorkflowData, TestWorkflowResponses, ToggleAccessKeyStatusData, ToggleAccessKeyStatusResponses, UnregisterTaskDefData, UnregisterTaskDefResponses, UnregisterWorkflowDefData, UnregisterWorkflowDefResponses, UpdateApplicationData, UpdateApplicationResponses, UpdateData, UpdateEventHandlerData, UpdateEventHandlerResponses, UpdateMessageTemplateData, UpdateMessageTemplateResponses, UpdateResponses, UpdateTask1Data, UpdateTask1Responses, UpdateTaskData, UpdateTaskDefData, UpdateTaskDefResponses, UpdateTaskOutputByRefData, UpdateTaskOutputByRefResponses, UpdateTaskOutputData, UpdateTaskOutputResponses, UpdateTaskResponses, UpdateTaskSyncData, UpdateTaskSyncResponses, UpdateTaskV2Data, UpdateTaskV2Responses, UpdateTokenLimitData, UpdateTokenLimitResponses, UpdateWebhookData, UpdateWebhookResponses, UpdateWorkflowAndTaskStateData, UpdateWorkflowAndTaskStateResponses, UpdateWorkflowStateData, UpdateWorkflowStateResponses, UpgradeRunningWorkflowToVersionData, UpgradeRunningWorkflowToVersionResponses, UploadBpmnFileData, UploadBpmnFileResponses, UploadWorkflowsAndTasksDefinitionsToS3Data, UploadWorkflowsAndTasksDefinitionsToS3Responses, UpsertGroupData, UpsertGroupResponses, UpsertUserData, UpsertUserResponses, VerifyAndRepairWorkflowConsistencyData, VerifyAndRepairWorkflowConsistencyResponses, ViewData, ViewResponses } from './types.gen';\n\nexport type Options<TData extends TDataShape = TDataShape, ThrowOnError extends boolean = boolean> = Options2<TData, ThrowOnError> & {\n    /**\n     * You can provide a client instance returned by `createClient()` instead of\n     * individual options. This might be also useful if you want to implement a\n     * custom client.\n     */\n    client?: Client;\n    /**\n     * You can pass arbitrary values through the `meta` object. This can be\n     * used to access values that aren't defined as part of the SDK function.\n     */\n    meta?: Record<string, unknown>;\n};\n\nexport class AdminResource {\n    /**\n     * Remove execution cached values for the task\n     */\n    public static clearTaskExecutionCache<ThrowOnError extends boolean = false>(options: Options<ClearTaskExecutionCacheData, ThrowOnError>) {\n        return (options.client ?? client).post<ClearTaskExecutionCacheResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/admin/cache/clear/{taskDefName}',\n            ...options\n        });\n    }\n    \n    /**\n     * Verify and repair workflow consistency\n     */\n    public static verifyAndRepairWorkflowConsistency<ThrowOnError extends boolean = false>(options: Options<VerifyAndRepairWorkflowConsistencyData, ThrowOnError>) {\n        return (options.client ?? client).post<VerifyAndRepairWorkflowConsistencyResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/admin/consistency/verifyAndRepair/{workflowId}',\n            ...options\n        });\n    }\n    \n    /**\n     * Get details of redis usage\n     */\n    public static getRedisUsage<ThrowOnError extends boolean = false>(options?: Options<GetRedisUsageData, ThrowOnError>) {\n        return (options?.client ?? client).get<GetRedisUsageResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/admin/redisUsage',\n            ...options\n        });\n    }\n    \n    /**\n     * Queue up all the running workflows for sweep\n     */\n    public static requeueSweep<ThrowOnError extends boolean = false>(options: Options<RequeueSweepData, ThrowOnError>) {\n        return (options.client ?? client).post<RequeueSweepResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/admin/sweep/requeue/{workflowId}',\n            ...options\n        });\n    }\n    \n    /**\n     * Get the list of pending tasks for a given task type\n     */\n    public static view<ThrowOnError extends boolean = false>(options: Options<ViewData, ThrowOnError>) {\n        return (options.client ?? client).get<ViewResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/admin/task/{tasktype}',\n            ...options\n        });\n    }\n}\n\nexport class ApplicationResource {\n    /**\n     * Get all applications\n     */\n    public static listApplications<ThrowOnError extends boolean = false>(options?: Options<ListApplicationsData, ThrowOnError>) {\n        return (options?.client ?? client).get<ListApplicationsResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/applications',\n            ...options\n        });\n    }\n    \n    /**\n     * Create an application\n     */\n    public static createApplication<ThrowOnError extends boolean = false>(options: Options<CreateApplicationData, ThrowOnError>) {\n        return (options.client ?? client).post<CreateApplicationResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/applications',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Get application id by access key id\n     */\n    public static getAppByAccessKeyId<ThrowOnError extends boolean = false>(options: Options<GetAppByAccessKeyIdData, ThrowOnError>) {\n        return (options.client ?? client).get<GetAppByAccessKeyIdResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/applications/key/{accessKeyId}',\n            ...options\n        });\n    }\n    \n    /**\n     * Delete an access key\n     */\n    public static deleteAccessKey<ThrowOnError extends boolean = false>(options: Options<DeleteAccessKeyData, ThrowOnError>) {\n        return (options.client ?? client).delete<DeleteAccessKeyResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/applications/{applicationId}/accessKeys/{keyId}',\n            ...options\n        });\n    }\n    \n    /**\n     * Toggle the status of an access key\n     */\n    public static toggleAccessKeyStatus<ThrowOnError extends boolean = false>(options: Options<ToggleAccessKeyStatusData, ThrowOnError>) {\n        return (options.client ?? client).post<ToggleAccessKeyStatusResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/applications/{applicationId}/accessKeys/{keyId}/status',\n            ...options\n        });\n    }\n    \n    public static removeRoleFromApplicationUser<ThrowOnError extends boolean = false>(options: Options<RemoveRoleFromApplicationUserData, ThrowOnError>) {\n        return (options.client ?? client).delete<RemoveRoleFromApplicationUserResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/applications/{applicationId}/roles/{role}',\n            ...options\n        });\n    }\n    \n    public static addRoleToApplicationUser<ThrowOnError extends boolean = false>(options: Options<AddRoleToApplicationUserData, ThrowOnError>) {\n        return (options.client ?? client).post<AddRoleToApplicationUserResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/applications/{applicationId}/roles/{role}',\n            ...options\n        });\n    }\n    \n    /**\n     * Delete an application\n     */\n    public static deleteApplication<ThrowOnError extends boolean = false>(options: Options<DeleteApplicationData, ThrowOnError>) {\n        return (options.client ?? client).delete<DeleteApplicationResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/applications/{id}',\n            ...options\n        });\n    }\n    \n    /**\n     * Get an application by id\n     */\n    public static getApplication<ThrowOnError extends boolean = false>(options: Options<GetApplicationData, ThrowOnError>) {\n        return (options.client ?? client).get<GetApplicationResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/applications/{id}',\n            ...options\n        });\n    }\n    \n    /**\n     * Update an application\n     */\n    public static updateApplication<ThrowOnError extends boolean = false>(options: Options<UpdateApplicationData, ThrowOnError>) {\n        return (options.client ?? client).put<UpdateApplicationResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/applications/{id}',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Get application's access keys\n     */\n    public static getAccessKeys<ThrowOnError extends boolean = false>(options: Options<GetAccessKeysData, ThrowOnError>) {\n        return (options.client ?? client).get<GetAccessKeysResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/applications/{id}/accessKeys',\n            ...options\n        });\n    }\n    \n    /**\n     * Create an access key for an application\n     */\n    public static createAccessKey<ThrowOnError extends boolean = false>(options: Options<CreateAccessKeyData, ThrowOnError>) {\n        return (options.client ?? client).post<CreateAccessKeyResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/applications/{id}/accessKeys',\n            ...options\n        });\n    }\n    \n    /**\n     * Delete a tag for application\n     */\n    public static deleteTagForApplication<ThrowOnError extends boolean = false>(options: Options<DeleteTagForApplicationData, ThrowOnError>) {\n        return (options.client ?? client).delete<DeleteTagForApplicationResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/applications/{id}/tags',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Get tags by application\n     */\n    public static getTagsForApplication<ThrowOnError extends boolean = false>(options: Options<GetTagsForApplicationData, ThrowOnError>) {\n        return (options.client ?? client).get<GetTagsForApplicationResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/applications/{id}/tags',\n            ...options\n        });\n    }\n    \n    /**\n     * Put a tag to application\n     */\n    public static putTagForApplication<ThrowOnError extends boolean = false>(options: Options<PutTagForApplicationData, ThrowOnError>) {\n        return (options.client ?? client).put<PutTagForApplicationResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/applications/{id}/tags',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n}\n\nexport class AuthorizationResource {\n    /**\n     * Remove user's access over the target\n     */\n    public static removePermissions<ThrowOnError extends boolean = false>(options: Options<RemovePermissionsData, ThrowOnError>) {\n        return (options.client ?? client).delete<RemovePermissionsResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/auth/authorization',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Grant access to a user over the target\n     */\n    public static grantPermissions<ThrowOnError extends boolean = false>(options: Options<GrantPermissionsData, ThrowOnError>) {\n        return (options.client ?? client).post<GrantPermissionsResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/auth/authorization',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Get the access that have been granted over the given object\n     */\n    public static getPermissions<ThrowOnError extends boolean = false>(options: Options<GetPermissionsData, ThrowOnError>) {\n        return (options.client ?? client).get<GetPermissionsResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/auth/authorization/{type}/{id}',\n            ...options\n        });\n    }\n}\n\nexport class EnvironmentResource {\n    /**\n     * List all the environment variables\n     */\n    public static getAll<ThrowOnError extends boolean = false>(options?: Options<GetAllData, ThrowOnError>) {\n        return (options?.client ?? client).get<GetAllResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/environment',\n            ...options\n        });\n    }\n    \n    /**\n     * Delete an environment variable (requires metadata or admin role)\n     */\n    public static deleteEnvVariable<ThrowOnError extends boolean = false>(options: Options<DeleteEnvVariableData, ThrowOnError>) {\n        return (options.client ?? client).delete<DeleteEnvVariableResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/environment/{key}',\n            ...options\n        });\n    }\n    \n    /**\n     * Get the environment value by key\n     */\n    public static get3<ThrowOnError extends boolean = false>(options: Options<Get3Data, ThrowOnError>) {\n        return (options.client ?? client).get<Get3Responses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/environment/{key}',\n            ...options\n        });\n    }\n    \n    /**\n     * Create or update an environment variable (requires metadata or admin role)\n     */\n    public static createOrUpdateEnvVariable<ThrowOnError extends boolean = false>(options: Options<CreateOrUpdateEnvVariableData, ThrowOnError>) {\n        return (options.client ?? client).put<CreateOrUpdateEnvVariableResponses, unknown, ThrowOnError>({\n            bodySerializer: null,\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/environment/{key}',\n            ...options,\n            headers: {\n                'Content-Type': 'text/plain',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Delete a tag for environment variable name\n     */\n    public static deleteTagForEnvVar<ThrowOnError extends boolean = false>(options: Options<DeleteTagForEnvVarData, ThrowOnError>) {\n        return (options.client ?? client).delete<DeleteTagForEnvVarResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/environment/{name}/tags',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Get tags by environment variable name\n     */\n    public static getTagsForEnvVar<ThrowOnError extends boolean = false>(options: Options<GetTagsForEnvVarData, ThrowOnError>) {\n        return (options.client ?? client).get<GetTagsForEnvVarResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/environment/{name}/tags',\n            ...options\n        });\n    }\n    \n    /**\n     * Put a tag to environment variable name\n     */\n    public static putTagForEnvVar<ThrowOnError extends boolean = false>(options: Options<PutTagForEnvVarData, ThrowOnError>) {\n        return (options.client ?? client).put<PutTagForEnvVarResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/environment/{name}/tags',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n}\n\nexport class EventResource {\n    /**\n     * Get all the event handlers\n     */\n    public static getEventHandlers<ThrowOnError extends boolean = false>(options?: Options<GetEventHandlersData, ThrowOnError>) {\n        return (options?.client ?? client).get<GetEventHandlersResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/event',\n            ...options\n        });\n    }\n    \n    /**\n     * Add a new event handler.\n     */\n    public static addEventHandler<ThrowOnError extends boolean = false>(options: Options<AddEventHandlerData, ThrowOnError>) {\n        return (options.client ?? client).post<AddEventHandlerResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/event',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Update an existing event handler.\n     */\n    public static updateEventHandler<ThrowOnError extends boolean = false>(options: Options<UpdateEventHandlerData, ThrowOnError>) {\n        return (options.client ?? client).put<UpdateEventHandlerResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/event',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Handle an incoming event\n     */\n    public static handleIncomingEvent<ThrowOnError extends boolean = false>(options: Options<HandleIncomingEventData, ThrowOnError>) {\n        return (options.client ?? client).post<HandleIncomingEventResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/event/handleIncomingEvent',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Get event handler by name\n     */\n    public static test<ThrowOnError extends boolean = false>(options?: Options<TestData, ThrowOnError>) {\n        return (options?.client ?? client).get<TestResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/event/handler/',\n            ...options\n        });\n    }\n    \n    /**\n     * Get event handler by name\n     */\n    public static getEventHandlerByName<ThrowOnError extends boolean = false>(options: Options<GetEventHandlerByNameData, ThrowOnError>) {\n        return (options.client ?? client).get<GetEventHandlerByNameResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/event/handler/{name}',\n            ...options\n        });\n    }\n    \n    /**\n     * Get all queue configs\n     */\n    public static getQueueNames<ThrowOnError extends boolean = false>(options?: Options<GetQueueNamesData, ThrowOnError>) {\n        return (options?.client ?? client).get<GetQueueNamesResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/event/queue/config',\n            ...options\n        });\n    }\n    \n    /**\n     * Delete queue config by name\n     */\n    public static deleteQueueConfig<ThrowOnError extends boolean = false>(options: Options<DeleteQueueConfigData, ThrowOnError>) {\n        return (options.client ?? client).delete<DeleteQueueConfigResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/event/queue/config/{queueType}/{queueName}',\n            ...options\n        });\n    }\n    \n    /**\n     * Get queue config by name\n     */\n    public static getQueueConfig<ThrowOnError extends boolean = false>(options: Options<GetQueueConfigData, ThrowOnError>) {\n        return (options.client ?? client).get<GetQueueConfigResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/event/queue/config/{queueType}/{queueName}',\n            ...options\n        });\n    }\n    \n    /**\n     * Create or update queue config by name\n     *\n     * @deprecated\n     */\n    public static putQueueConfig<ThrowOnError extends boolean = false>(options: Options<PutQueueConfigData, ThrowOnError>) {\n        return (options.client ?? client).put<PutQueueConfigResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/event/queue/config/{queueType}/{queueName}',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Test connectivity for a given queue using a workflow with EVENT task and an EventHandler\n     */\n    public static testConnectivity<ThrowOnError extends boolean = false>(options: Options<TestConnectivityData, ThrowOnError>) {\n        return (options.client ?? client).post<TestConnectivityResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/event/queue/connectivity',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Get event handlers for a given event\n     */\n    public static getEventHandlersForEvent<ThrowOnError extends boolean = false>(options: Options<GetEventHandlersForEventData, ThrowOnError>) {\n        return (options.client ?? client).get<GetEventHandlersForEventResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/event/{event}',\n            ...options\n        });\n    }\n    \n    /**\n     * Remove an event handler\n     */\n    public static removeEventHandlerStatus<ThrowOnError extends boolean = false>(options: Options<RemoveEventHandlerStatusData, ThrowOnError>) {\n        return (options.client ?? client).delete<RemoveEventHandlerStatusResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/event/{name}',\n            ...options\n        });\n    }\n    \n    /**\n     * Delete a tag for event handler\n     */\n    public static deleteTagForEventHandler<ThrowOnError extends boolean = false>(options: Options<DeleteTagForEventHandlerData, ThrowOnError>) {\n        return (options.client ?? client).delete<DeleteTagForEventHandlerResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/event/{name}/tags',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Get tags by event handler\n     */\n    public static getTagsForEventHandler<ThrowOnError extends boolean = false>(options: Options<GetTagsForEventHandlerData, ThrowOnError>) {\n        return (options.client ?? client).get<GetTagsForEventHandlerResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/event/{name}/tags',\n            ...options\n        });\n    }\n    \n    /**\n     * Put a tag to event handler\n     */\n    public static putTagForEventHandler<ThrowOnError extends boolean = false>(options: Options<PutTagForEventHandlerData, ThrowOnError>) {\n        return (options.client ?? client).put<PutTagForEventHandlerResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/event/{name}/tags',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n}\n\nexport class EventExecutionResource {\n    /**\n     * Get All active Event Handlers\n     */\n    public static getEventHandlersForEvent1<ThrowOnError extends boolean = false>(options?: Options<GetEventHandlersForEvent1Data, ThrowOnError>) {\n        return (options?.client ?? client).get<GetEventHandlersForEvent1Responses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/event/execution',\n            ...options\n        });\n    }\n    \n    /**\n     * Get event handlers for a given event\n     */\n    public static getEventHandlersForEvent2<ThrowOnError extends boolean = false>(options: Options<GetEventHandlersForEvent2Data, ThrowOnError>) {\n        return (options.client ?? client).get<GetEventHandlersForEvent2Responses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/event/execution/{eventHandlerName}',\n            ...options\n        });\n    }\n}\n\nexport class EventMessageResource {\n    /**\n     * Get all event handlers with statistics\n     */\n    public static getEvents<ThrowOnError extends boolean = false>(options?: Options<GetEventsData, ThrowOnError>) {\n        return (options?.client ?? client).get<GetEventsResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/event/message',\n            ...options\n        });\n    }\n    \n    /**\n     * Get event messages for a given event\n     */\n    public static getMessages<ThrowOnError extends boolean = false>(options: Options<GetMessagesData, ThrowOnError>) {\n        return (options.client ?? client).get<GetMessagesResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/event/message/{event}',\n            ...options\n        });\n    }\n}\n\nexport class GlobalSchemaResource {\n    /**\n     * Save schema\n     */\n    public static save1<ThrowOnError extends boolean = false>(options: Options<Save1Data, ThrowOnError>) {\n        return (options.client ?? client).post<Save1Responses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/global_schema',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Get schema by name with latest version\n     */\n    public static getSchemaByNameWithLatestVersion1<ThrowOnError extends boolean = false>(options: Options<GetSchemaByNameWithLatestVersion1Data, ThrowOnError>) {\n        return (options.client ?? client).get<GetSchemaByNameWithLatestVersion1Responses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/global_schema/{name}',\n            ...options\n        });\n    }\n}\n\nexport class GroupResource {\n    /**\n     * Get all groups\n     */\n    public static listGroups<ThrowOnError extends boolean = false>(options?: Options<ListGroupsData, ThrowOnError>) {\n        return (options?.client ?? client).get<ListGroupsResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/groups',\n            ...options\n        });\n    }\n    \n    /**\n     * Get the permissions this group has over workflows and tasks\n     */\n    public static getGrantedPermissions1<ThrowOnError extends boolean = false>(options: Options<GetGrantedPermissions1Data, ThrowOnError>) {\n        return (options.client ?? client).get<GetGrantedPermissions1Responses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/groups/{groupId}/permissions',\n            ...options\n        });\n    }\n    \n    /**\n     * Remove users from group\n     */\n    public static removeUsersFromGroup<ThrowOnError extends boolean = false>(options: Options<RemoveUsersFromGroupData, ThrowOnError>) {\n        return (options.client ?? client).delete<RemoveUsersFromGroupResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/groups/{groupId}/users',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Add users to group\n     */\n    public static addUsersToGroup<ThrowOnError extends boolean = false>(options: Options<AddUsersToGroupData, ThrowOnError>) {\n        return (options.client ?? client).post<AddUsersToGroupResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/groups/{groupId}/users',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Remove user from group\n     */\n    public static removeUserFromGroup<ThrowOnError extends boolean = false>(options: Options<RemoveUserFromGroupData, ThrowOnError>) {\n        return (options.client ?? client).delete<RemoveUserFromGroupResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/groups/{groupId}/users/{userId}',\n            ...options\n        });\n    }\n    \n    /**\n     * Add user to group\n     */\n    public static addUserToGroup<ThrowOnError extends boolean = false>(options: Options<AddUserToGroupData, ThrowOnError>) {\n        return (options.client ?? client).post<AddUserToGroupResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/groups/{groupId}/users/{userId}',\n            ...options\n        });\n    }\n    \n    /**\n     * Delete a group\n     */\n    public static deleteGroup<ThrowOnError extends boolean = false>(options: Options<DeleteGroupData, ThrowOnError>) {\n        return (options.client ?? client).delete<DeleteGroupResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/groups/{id}',\n            ...options\n        });\n    }\n    \n    /**\n     * Get a group by id\n     */\n    public static getGroup<ThrowOnError extends boolean = false>(options: Options<GetGroupData, ThrowOnError>) {\n        return (options.client ?? client).get<GetGroupResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/groups/{id}',\n            ...options\n        });\n    }\n    \n    /**\n     * Create or update a group\n     */\n    public static upsertGroup<ThrowOnError extends boolean = false>(options: Options<UpsertGroupData, ThrowOnError>) {\n        return (options.client ?? client).put<UpsertGroupResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/groups/{id}',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Get all users in group\n     */\n    public static getUsersInGroup<ThrowOnError extends boolean = false>(options: Options<GetUsersInGroupData, ThrowOnError>) {\n        return (options.client ?? client).get<GetUsersInGroupResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/groups/{id}/users',\n            ...options\n        });\n    }\n}\n\nexport class HumanTask {\n    /**\n     * API for backpopulating index data\n     */\n    public static backPopulateFullTextIndex<ThrowOnError extends boolean = false>(options: Options<BackPopulateFullTextIndexData, ThrowOnError>) {\n        return (options.client ?? client).get<BackPopulateFullTextIndexResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/human/tasks/backPopulateFullTextIndex',\n            ...options\n        });\n    }\n    \n    /**\n     * If the workflow is disconnected from tasks, this API can be used to clean up (in bulk)\n     */\n    public static deleteTaskFromHumanTaskRecords<ThrowOnError extends boolean = false>(options: Options<DeleteTaskFromHumanTaskRecordsData, ThrowOnError>) {\n        return (options.client ?? client).delete<DeleteTaskFromHumanTaskRecordsResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/human/tasks/delete',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * If the workflow is disconnected from tasks, this API can be used to clean up\n     */\n    public static deleteTaskFromHumanTaskRecords1<ThrowOnError extends boolean = false>(options: Options<DeleteTaskFromHumanTaskRecords1Data, ThrowOnError>) {\n        return (options.client ?? client).delete<DeleteTaskFromHumanTaskRecords1Responses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/human/tasks/delete/{taskId}',\n            ...options\n        });\n    }\n    \n    /**\n     * Get list of task display names applicable for the user\n     */\n    public static getTaskDisplayNames<ThrowOnError extends boolean = false>(options: Options<GetTaskDisplayNamesData, ThrowOnError>) {\n        return (options.client ?? client).get<GetTaskDisplayNamesResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/human/tasks/getTaskDisplayNames',\n            ...options\n        });\n    }\n    \n    /**\n     * Search human tasks\n     */\n    public static search<ThrowOnError extends boolean = false>(options: Options<SearchData, ThrowOnError>) {\n        return (options.client ?? client).post<SearchResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/human/tasks/search',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Update task output, optionally complete\n     */\n    public static updateTaskOutputByRef<ThrowOnError extends boolean = false>(options: Options<UpdateTaskOutputByRefData, ThrowOnError>) {\n        return (options.client ?? client).post<UpdateTaskOutputByRefResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/human/tasks/update/taskRef',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Get a task\n     */\n    public static getTask1<ThrowOnError extends boolean = false>(options: Options<GetTask1Data, ThrowOnError>) {\n        return (options.client ?? client).get<GetTask1Responses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/human/tasks/{taskId}',\n            ...options\n        });\n    }\n    \n    /**\n     * Claim a task by authenticated Conductor user\n     */\n    public static claimTask<ThrowOnError extends boolean = false>(options: Options<ClaimTaskData, ThrowOnError>) {\n        return (options.client ?? client).post<ClaimTaskResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/human/tasks/{taskId}/claim',\n            ...options\n        });\n    }\n    \n    /**\n     * Claim a task to an external user\n     */\n    public static assignAndClaim<ThrowOnError extends boolean = false>(options: Options<AssignAndClaimData, ThrowOnError>) {\n        return (options.client ?? client).post<AssignAndClaimResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/human/tasks/{taskId}/externalUser/{userId}',\n            ...options\n        });\n    }\n    \n    /**\n     * Reassign a task without completing it\n     */\n    public static reassignTask<ThrowOnError extends boolean = false>(options: Options<ReassignTaskData, ThrowOnError>) {\n        return (options.client ?? client).post<ReassignTaskResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/human/tasks/{taskId}/reassign',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Release a task without completing it\n     */\n    public static releaseTask<ThrowOnError extends boolean = false>(options: Options<ReleaseTaskData, ThrowOnError>) {\n        return (options.client ?? client).post<ReleaseTaskResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/human/tasks/{taskId}/release',\n            ...options\n        });\n    }\n    \n    /**\n     * If a task is assigned to a user, this API can be used to skip that assignment and move to the next assignee\n     */\n    public static skipTask<ThrowOnError extends boolean = false>(options: Options<SkipTaskData, ThrowOnError>) {\n        return (options.client ?? client).post<SkipTaskResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/human/tasks/{taskId}/skip',\n            ...options\n        });\n    }\n    \n    /**\n     * Update task output, optionally complete\n     */\n    public static updateTaskOutput<ThrowOnError extends boolean = false>(options: Options<UpdateTaskOutputData, ThrowOnError>) {\n        return (options.client ?? client).post<UpdateTaskOutputResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/human/tasks/{taskId}/update',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * List all user form templates or get templates by name, or a template by name and version\n     */\n    public static getAllTemplates<ThrowOnError extends boolean = false>(options?: Options<GetAllTemplatesData, ThrowOnError>) {\n        return (options?.client ?? client).get<GetAllTemplatesResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/human/template',\n            ...options\n        });\n    }\n    \n    /**\n     * Save user form template\n     */\n    public static saveTemplate<ThrowOnError extends boolean = false>(options: Options<SaveTemplateData, ThrowOnError>) {\n        return (options.client ?? client).post<SaveTemplateResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/human/template',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Save user form template\n     */\n    public static saveTemplates<ThrowOnError extends boolean = false>(options: Options<SaveTemplatesData, ThrowOnError>) {\n        return (options.client ?? client).post<SaveTemplatesResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/human/template/bulk',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Get user form by human task id\n     */\n    public static getTemplateByTaskId<ThrowOnError extends boolean = false>(options: Options<GetTemplateByTaskIdData, ThrowOnError>) {\n        return (options.client ?? client).get<GetTemplateByTaskIdResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/human/template/{humanTaskId}',\n            ...options\n        });\n    }\n    \n    /**\n     * Delete all versions of user form template by name\n     */\n    public static deleteTemplateByName<ThrowOnError extends boolean = false>(options: Options<DeleteTemplateByNameData, ThrowOnError>) {\n        return (options.client ?? client).delete<DeleteTemplateByNameResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/human/template/{name}',\n            ...options\n        });\n    }\n    \n    /**\n     * Delete a version of form template by name\n     */\n    public static deleteTemplatesByNameAndVersion<ThrowOnError extends boolean = false>(options: Options<DeleteTemplatesByNameAndVersionData, ThrowOnError>) {\n        return (options.client ?? client).delete<DeleteTemplatesByNameAndVersionResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/human/template/{name}/{version}',\n            ...options\n        });\n    }\n    \n    /**\n     * Get user form template by name and version\n     */\n    public static getTemplateByNameAndVersion<ThrowOnError extends boolean = false>(options: Options<GetTemplateByNameAndVersionData, ThrowOnError>) {\n        return (options.client ?? client).get<GetTemplateByNameAndVersionResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/human/template/{name}/{version}',\n            ...options\n        });\n    }\n}\n\nexport class HumanTaskResource {\n    /**\n     * Get Conductor task by id (for human tasks only)\n     */\n    public static getConductorTaskById<ThrowOnError extends boolean = false>(options: Options<GetConductorTaskByIdData, ThrowOnError>) {\n        return (options.client ?? client).get<GetConductorTaskByIdResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/human/tasks/{taskId}/conductorTask',\n            ...options\n        });\n    }\n}\n\nexport class UserForm {\n    /**\n     * List all user form templates or get templates by name, or a template by name and version\n     */\n    public static getAllTemplates<ThrowOnError extends boolean = false>(options?: Options<GetAllTemplatesData, ThrowOnError>) {\n        return (options?.client ?? client).get<GetAllTemplatesResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/human/template',\n            ...options\n        });\n    }\n    \n    /**\n     * Save user form template\n     */\n    public static saveTemplate<ThrowOnError extends boolean = false>(options: Options<SaveTemplateData, ThrowOnError>) {\n        return (options.client ?? client).post<SaveTemplateResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/human/template',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Save user form template\n     */\n    public static saveTemplates<ThrowOnError extends boolean = false>(options: Options<SaveTemplatesData, ThrowOnError>) {\n        return (options.client ?? client).post<SaveTemplatesResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/human/template/bulk',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Get user form by human task id\n     */\n    public static getTemplateByTaskId<ThrowOnError extends boolean = false>(options: Options<GetTemplateByTaskIdData, ThrowOnError>) {\n        return (options.client ?? client).get<GetTemplateByTaskIdResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/human/template/{humanTaskId}',\n            ...options\n        });\n    }\n    \n    /**\n     * Delete all versions of user form template by name\n     */\n    public static deleteTemplateByName<ThrowOnError extends boolean = false>(options: Options<DeleteTemplateByNameData, ThrowOnError>) {\n        return (options.client ?? client).delete<DeleteTemplateByNameResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/human/template/{name}',\n            ...options\n        });\n    }\n    \n    /**\n     * Get user form template by name and version\n     */\n    public static getTemplateByNameAndVersion<ThrowOnError extends boolean = false>(options: Options<GetTemplateByNameAndVersionData, ThrowOnError>) {\n        return (options.client ?? client).get<GetTemplateByNameAndVersionResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/human/template/{name}/{version}',\n            ...options\n        });\n    }\n}\n\nexport class UserFormTemplateResource {\n    /**\n     * Delete a tag for template name\n     */\n    public static deleteTagForUserFormTemplate<ThrowOnError extends boolean = false>(options: Options<DeleteTagForUserFormTemplateData, ThrowOnError>) {\n        return (options.client ?? client).delete<DeleteTagForUserFormTemplateResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/human/template/{name}/tags',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Get tags by template name\n     */\n    public static getTagsForUserFormTemplate<ThrowOnError extends boolean = false>(options: Options<GetTagsForUserFormTemplateData, ThrowOnError>) {\n        return (options.client ?? client).get<GetTagsForUserFormTemplateResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/human/template/{name}/tags',\n            ...options\n        });\n    }\n    \n    /**\n     * Put a tag to template name\n     */\n    public static putTagForUserFormTemplate<ThrowOnError extends boolean = false>(options: Options<PutTagForUserFormTemplateData, ThrowOnError>) {\n        return (options.client ?? client).put<PutTagForUserFormTemplateResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/human/template/{name}/tags',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n}\n\nexport class IntegrationResource {\n    /**\n     * Get all Integrations\n     */\n    public static getAllIntegrations<ThrowOnError extends boolean = false>(options?: Options<GetAllIntegrationsData, ThrowOnError>) {\n        return (options?.client ?? client).get<GetAllIntegrationsResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/integrations/',\n            ...options\n        });\n    }\n    \n    /**\n     * Save all Integrations\n     */\n    public static saveAllIntegrations<ThrowOnError extends boolean = false>(options: Options<SaveAllIntegrationsData, ThrowOnError>) {\n        return (options.client ?? client).post<SaveAllIntegrationsResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/integrations/',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Get Integrations Providers and Integrations combo\n     */\n    public static getProvidersAndIntegrations<ThrowOnError extends boolean = false>(options?: Options<GetProvidersAndIntegrationsData, ThrowOnError>) {\n        return (options?.client ?? client).get<GetProvidersAndIntegrationsResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/integrations/all',\n            ...options\n        });\n    }\n    \n    /**\n     * Get Integration provider definitions\n     */\n    public static getIntegrationProviderDefs<ThrowOnError extends boolean = false>(options?: Options<GetIntegrationProviderDefsData, ThrowOnError>) {\n        return (options?.client ?? client).get<GetIntegrationProviderDefsResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/integrations/def',\n            ...options\n        });\n    }\n    \n    /**\n     * upsert an integration definition\n     */\n    public static registerIntegration<ThrowOnError extends boolean = false>(options: Options<RegisterIntegrationData, ThrowOnError>) {\n        return (options.client ?? client).post<RegisterIntegrationResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/integrations/def/register',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Get an integration definition\n     */\n    public static getIntegrationDef<ThrowOnError extends boolean = false>(options: Options<GetIntegrationDefData, ThrowOnError>) {\n        return (options.client ?? client).get<GetIntegrationDefResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/integrations/def/{name}',\n            ...options\n        });\n    }\n    \n    /**\n     * Record Event Stats\n     */\n    public static recordEventStats<ThrowOnError extends boolean = false>(options: Options<RecordEventStatsData, ThrowOnError>) {\n        return (options.client ?? client).post<RecordEventStatsResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/integrations/eventStats/{type}',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Get all Integrations Providers\n     */\n    public static getIntegrationProviders<ThrowOnError extends boolean = false>(options?: Options<GetIntegrationProvidersData, ThrowOnError>) {\n        return (options?.client ?? client).get<GetIntegrationProvidersResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/integrations/provider',\n            ...options\n        });\n    }\n    \n    /**\n     * Get the list of prompt templates associated with an integration\n     */\n    public static getPromptsWithIntegration<ThrowOnError extends boolean = false>(options: Options<GetPromptsWithIntegrationData, ThrowOnError>) {\n        return (options.client ?? client).get<GetPromptsWithIntegrationResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/integrations/provider/{integration_provider}/integration/{integration_name}/prompt',\n            ...options\n        });\n    }\n    \n    /**\n     * Associate a Prompt Template with an Integration\n     */\n    public static associatePromptWithIntegration<ThrowOnError extends boolean = false>(options: Options<AssociatePromptWithIntegrationData, ThrowOnError>) {\n        return (options.client ?? client).post<AssociatePromptWithIntegrationResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/integrations/provider/{integration_provider}/integration/{integration_name}/prompt/{prompt_name}',\n            ...options\n        });\n    }\n    \n    /**\n     * Delete an Integration Provider\n     */\n    public static deleteIntegrationProvider<ThrowOnError extends boolean = false>(options: Options<DeleteIntegrationProviderData, ThrowOnError>) {\n        return (options.client ?? client).delete<DeleteIntegrationProviderResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/integrations/provider/{name}',\n            ...options\n        });\n    }\n    \n    /**\n     * Get Integration provider\n     */\n    public static getIntegrationProvider<ThrowOnError extends boolean = false>(options: Options<GetIntegrationProviderData, ThrowOnError>) {\n        return (options.client ?? client).get<GetIntegrationProviderResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/integrations/provider/{name}',\n            ...options\n        });\n    }\n    \n    /**\n     * Create or Update Integration provider\n     */\n    public static saveIntegrationProvider<ThrowOnError extends boolean = false>(options: Options<SaveIntegrationProviderData, ThrowOnError>) {\n        return (options.client ?? client).post<SaveIntegrationProviderResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/integrations/provider/{name}',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Get Integrations of an Integration Provider\n     */\n    public static getIntegrationApis<ThrowOnError extends boolean = false>(options: Options<GetIntegrationApisData, ThrowOnError>) {\n        return (options.client ?? client).get<GetIntegrationApisResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/integrations/provider/{name}/integration',\n            ...options\n        });\n    }\n    \n    /**\n     * Get Integrations Available for an Integration Provider\n     */\n    public static getIntegrationAvailableApis<ThrowOnError extends boolean = false>(options: Options<GetIntegrationAvailableApisData, ThrowOnError>) {\n        return (options.client ?? client).get<GetIntegrationAvailableApisResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/integrations/provider/{name}/integration/all',\n            ...options\n        });\n    }\n    \n    /**\n     * Delete an Integration\n     */\n    public static deleteIntegrationApi<ThrowOnError extends boolean = false>(options: Options<DeleteIntegrationApiData, ThrowOnError>) {\n        return (options.client ?? client).delete<DeleteIntegrationApiResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/integrations/provider/{name}/integration/{integration_name}',\n            ...options\n        });\n    }\n    \n    /**\n     * Get Integration details\n     */\n    public static getIntegrationApi<ThrowOnError extends boolean = false>(options: Options<GetIntegrationApiData, ThrowOnError>) {\n        return (options.client ?? client).get<GetIntegrationApiResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/integrations/provider/{name}/integration/{integration_name}',\n            ...options\n        });\n    }\n    \n    /**\n     * Create or Update Integration\n     */\n    public static saveIntegrationApi<ThrowOnError extends boolean = false>(options: Options<SaveIntegrationApiData, ThrowOnError>) {\n        return (options.client ?? client).post<SaveIntegrationApiResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/integrations/provider/{name}/integration/{integration_name}',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Delete a tag for Integration\n     */\n    public static deleteTagForIntegration<ThrowOnError extends boolean = false>(options: Options<DeleteTagForIntegrationData, ThrowOnError>) {\n        return (options.client ?? client).delete<DeleteTagForIntegrationResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/integrations/provider/{name}/integration/{integration_name}/tags',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Get tags by Integration\n     */\n    public static getTagsForIntegration<ThrowOnError extends boolean = false>(options: Options<GetTagsForIntegrationData, ThrowOnError>) {\n        return (options.client ?? client).get<GetTagsForIntegrationResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/integrations/provider/{name}/integration/{integration_name}/tags',\n            ...options\n        });\n    }\n    \n    /**\n     * Put a tag to Integration\n     */\n    public static putTagForIntegration<ThrowOnError extends boolean = false>(options: Options<PutTagForIntegrationData, ThrowOnError>) {\n        return (options.client ?? client).put<PutTagForIntegrationResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/integrations/provider/{name}/integration/{integration_name}/tags',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Delete a tag for Integration Provider\n     */\n    public static deleteTagForIntegrationProvider<ThrowOnError extends boolean = false>(options: Options<DeleteTagForIntegrationProviderData, ThrowOnError>) {\n        return (options.client ?? client).delete<DeleteTagForIntegrationProviderResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/integrations/provider/{name}/tags',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Get tags by Integration Provider\n     */\n    public static getTagsForIntegrationProvider<ThrowOnError extends boolean = false>(options: Options<GetTagsForIntegrationProviderData, ThrowOnError>) {\n        return (options.client ?? client).get<GetTagsForIntegrationProviderResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/integrations/provider/{name}/tags',\n            ...options\n        });\n    }\n    \n    /**\n     * Put a tag to Integration Provider\n     */\n    public static putTagForIntegrationProvider<ThrowOnError extends boolean = false>(options: Options<PutTagForIntegrationProviderData, ThrowOnError>) {\n        return (options.client ?? client).put<PutTagForIntegrationProviderResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/integrations/provider/{name}/tags',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n}\n\nexport class Llm {\n    /**\n     * Get the Token Limit for an integration\n     */\n    public static getTokenLimit<ThrowOnError extends boolean = false>(options: Options<GetTokenLimitData, ThrowOnError>) {\n        return (options.client ?? client).get<GetTokenLimitResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/integrations/llm/{name}/token',\n            ...options\n        });\n    }\n    \n    /**\n     * Register Token Limit for an integration\n     */\n    public static updateTokenLimit<ThrowOnError extends boolean = false>(options: Options<UpdateTokenLimitData, ThrowOnError>) {\n        return (options.client ?? client).post<UpdateTokenLimitResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/integrations/llm/{name}/token',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Get Token Usage by Integration provider\n     */\n    public static getTokenUsage<ThrowOnError extends boolean = false>(options: Options<GetTokenUsageData, ThrowOnError>) {\n        return (options.client ?? client).get<GetTokenUsageResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/integrations/llm/{name}/token/history',\n            ...options\n        });\n    }\n}\n\nexport class LimitsResource {\n    public static get2<ThrowOnError extends boolean = false>(options?: Options<Get2Data, ThrowOnError>) {\n        return (options?.client ?? client).get<Get2Responses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/limits',\n            ...options\n        });\n    }\n}\n\nexport class Tags {\n    /**\n     * List all tags\n     */\n    public static getTags1<ThrowOnError extends boolean = false>(options?: Options<GetTags1Data, ThrowOnError>) {\n        return (options?.client ?? client).get<GetTags1Responses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/metadata/tags',\n            ...options\n        });\n    }\n    \n    /**\n     * Removes the tag of the task\n     */\n    public static deleteTaskTag<ThrowOnError extends boolean = false>(options: Options<DeleteTaskTagData, ThrowOnError>) {\n        return (options.client ?? client).delete<DeleteTaskTagResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/metadata/task/{taskName}/tags',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Returns all the tags of the task\n     */\n    public static getTaskTags<ThrowOnError extends boolean = false>(options: Options<GetTaskTagsData, ThrowOnError>) {\n        return (options.client ?? client).get<GetTaskTagsResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/metadata/task/{taskName}/tags',\n            ...options\n        });\n    }\n    \n    /**\n     * Adds the tag to the task\n     */\n    public static addTaskTag<ThrowOnError extends boolean = false>(options: Options<AddTaskTagData, ThrowOnError>) {\n        return (options.client ?? client).post<AddTaskTagResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/metadata/task/{taskName}/tags',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Sets (replaces existing) the tags to the task\n     */\n    public static setTaskTags<ThrowOnError extends boolean = false>(options: Options<SetTaskTagsData, ThrowOnError>) {\n        return (options.client ?? client).put<SetTaskTagsResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/metadata/task/{taskName}/tags',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Removes the tag of the workflow\n     */\n    public static deleteWorkflowTag<ThrowOnError extends boolean = false>(options: Options<DeleteWorkflowTagData, ThrowOnError>) {\n        return (options.client ?? client).delete<DeleteWorkflowTagResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/metadata/workflow/{name}/tags',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Returns all the tags of the workflow\n     */\n    public static getWorkflowTags<ThrowOnError extends boolean = false>(options: Options<GetWorkflowTagsData, ThrowOnError>) {\n        return (options.client ?? client).get<GetWorkflowTagsResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/metadata/workflow/{name}/tags',\n            ...options\n        });\n    }\n    \n    /**\n     * Adds the tag to the workflow\n     */\n    public static addWorkflowTag<ThrowOnError extends boolean = false>(options: Options<AddWorkflowTagData, ThrowOnError>) {\n        return (options.client ?? client).post<AddWorkflowTagResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/metadata/workflow/{name}/tags',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Set (replaces all existing) the tags of the workflow\n     */\n    public static setWorkflowTags<ThrowOnError extends boolean = false>(options: Options<SetWorkflowTagsData, ThrowOnError>) {\n        return (options.client ?? client).put<SetWorkflowTagsResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/metadata/workflow/{name}/tags',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n}\n\nexport class MetadataResource {\n    /**\n     * Gets all task definition\n     */\n    public static getTaskDefs<ThrowOnError extends boolean = false>(options?: Options<GetTaskDefsData, ThrowOnError>) {\n        return (options?.client ?? client).get<GetTaskDefsResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/metadata/taskdefs',\n            ...options\n        });\n    }\n    \n    /**\n     * Create or update task definition(s)\n     */\n    public static registerTaskDef<ThrowOnError extends boolean = false>(options: Options<RegisterTaskDefData, ThrowOnError>) {\n        return (options.client ?? client).post<RegisterTaskDefResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/metadata/taskdefs',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Update an existing task\n     */\n    public static updateTaskDef<ThrowOnError extends boolean = false>(options: Options<UpdateTaskDefData, ThrowOnError>) {\n        return (options.client ?? client).put<UpdateTaskDefResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/metadata/taskdefs',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Remove a task definition\n     */\n    public static unregisterTaskDef<ThrowOnError extends boolean = false>(options: Options<UnregisterTaskDefData, ThrowOnError>) {\n        return (options.client ?? client).delete<UnregisterTaskDefResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/metadata/taskdefs/{tasktype}',\n            ...options\n        });\n    }\n    \n    /**\n     * Gets the task definition\n     */\n    public static getTaskDef<ThrowOnError extends boolean = false>(options: Options<GetTaskDefData, ThrowOnError>) {\n        return (options.client ?? client).get<GetTaskDefResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/metadata/taskdefs/{tasktype}',\n            ...options\n        });\n    }\n    \n    /**\n     * Retrieves all workflow definition along with blueprint\n     */\n    public static getWorkflowDefs<ThrowOnError extends boolean = false>(options?: Options<GetWorkflowDefsData, ThrowOnError>) {\n        return (options?.client ?? client).get<GetWorkflowDefsResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/metadata/workflow',\n            ...options\n        });\n    }\n    \n    /**\n     * Create a new workflow definition\n     */\n    public static create<ThrowOnError extends boolean = false>(options: Options<CreateData, ThrowOnError>) {\n        return (options.client ?? client).post<CreateResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/metadata/workflow',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Create or update workflow definition(s)\n     */\n    public static update<ThrowOnError extends boolean = false>(options: Options<UpdateData, ThrowOnError>) {\n        return (options.client ?? client).put<UpdateResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/metadata/workflow',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Imports bpmn workflow\n     */\n    public static uploadBpmnFile<ThrowOnError extends boolean = false>(options: Options<UploadBpmnFileData, ThrowOnError>) {\n        return (options.client ?? client).post<UploadBpmnFileResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/metadata/workflow-importer/import-bpm',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Upload all workflows and tasks definitions to Object storage if configured\n     */\n    public static uploadWorkflowsAndTasksDefinitionsToS3<ThrowOnError extends boolean = false>(options?: Options<UploadWorkflowsAndTasksDefinitionsToS3Data, ThrowOnError>) {\n        return (options?.client ?? client).post<UploadWorkflowsAndTasksDefinitionsToS3Responses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/metadata/workflow-task-defs/upload',\n            ...options\n        });\n    }\n    \n    /**\n     * Retrieves workflow definition along with blueprint\n     */\n    public static get1<ThrowOnError extends boolean = false>(options: Options<Get1Data, ThrowOnError>) {\n        return (options.client ?? client).get<Get1Responses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/metadata/workflow/{name}',\n            ...options\n        });\n    }\n    \n    /**\n     * Removes workflow definition. It does not remove workflows associated with the definition.\n     */\n    public static unregisterWorkflowDef<ThrowOnError extends boolean = false>(options: Options<UnregisterWorkflowDefData, ThrowOnError>) {\n        return (options.client ?? client).delete<UnregisterWorkflowDefResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/metadata/workflow/{name}/{version}',\n            ...options\n        });\n    }\n}\n\nexport class WebhooksConfigResource {\n    public static getAllWebhook<ThrowOnError extends boolean = false>(options?: Options<GetAllWebhookData, ThrowOnError>) {\n        return (options?.client ?? client).get<GetAllWebhookResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/metadata/webhook',\n            ...options\n        });\n    }\n    \n    public static createWebhook<ThrowOnError extends boolean = false>(options: Options<CreateWebhookData, ThrowOnError>) {\n        return (options.client ?? client).post<CreateWebhookResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/metadata/webhook',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    public static deleteWebhook<ThrowOnError extends boolean = false>(options: Options<DeleteWebhookData, ThrowOnError>) {\n        return (options.client ?? client).delete<DeleteWebhookResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/metadata/webhook/{id}',\n            ...options\n        });\n    }\n    \n    public static getWebhook<ThrowOnError extends boolean = false>(options: Options<GetWebhookData, ThrowOnError>) {\n        return (options.client ?? client).get<GetWebhookResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/metadata/webhook/{id}',\n            ...options\n        });\n    }\n    \n    public static updateWebhook<ThrowOnError extends boolean = false>(options: Options<UpdateWebhookData, ThrowOnError>) {\n        return (options.client ?? client).put<UpdateWebhookResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/metadata/webhook/{id}',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Delete a tag for webhook id\n     */\n    public static deleteTagForWebhook<ThrowOnError extends boolean = false>(options: Options<DeleteTagForWebhookData, ThrowOnError>) {\n        return (options.client ?? client).delete<DeleteTagForWebhookResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/metadata/webhook/{id}/tags',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Get tags by webhook id\n     */\n    public static getTagsForWebhook<ThrowOnError extends boolean = false>(options: Options<GetTagsForWebhookData, ThrowOnError>) {\n        return (options.client ?? client).get<GetTagsForWebhookResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/metadata/webhook/{id}/tags',\n            ...options\n        });\n    }\n    \n    /**\n     * Put a tag to webhook id\n     */\n    public static putTagForWebhook<ThrowOnError extends boolean = false>(options: Options<PutTagForWebhookData, ThrowOnError>) {\n        return (options.client ?? client).put<PutTagForWebhookResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/metadata/webhook/{id}/tags',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n}\n\nexport class PromptResource {\n    /**\n     * Get Templates\n     */\n    public static getMessageTemplates<ThrowOnError extends boolean = false>(options?: Options<GetMessageTemplatesData, ThrowOnError>) {\n        return (options?.client ?? client).get<GetMessageTemplatesResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/prompts',\n            ...options\n        });\n    }\n    \n    /**\n     * Create message templates in bulk\n     */\n    public static createMessageTemplates<ThrowOnError extends boolean = false>(options: Options<CreateMessageTemplatesData, ThrowOnError>) {\n        return (options.client ?? client).post<CreateMessageTemplatesResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/prompts/',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Test Prompt Template\n     */\n    public static testMessageTemplate<ThrowOnError extends boolean = false>(options: Options<TestMessageTemplateData, ThrowOnError>) {\n        return (options.client ?? client).post<TestMessageTemplateResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/prompts/test',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Delete Template\n     */\n    public static deleteMessageTemplate<ThrowOnError extends boolean = false>(options: Options<DeleteMessageTemplateData, ThrowOnError>) {\n        return (options.client ?? client).delete<DeleteMessageTemplateResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/prompts/{name}',\n            ...options\n        });\n    }\n    \n    /**\n     * Get Template\n     */\n    public static getMessageTemplate<ThrowOnError extends boolean = false>(options: Options<GetMessageTemplateData, ThrowOnError>) {\n        return (options.client ?? client).get<GetMessageTemplateResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/prompts/{name}',\n            ...options\n        });\n    }\n    \n    /**\n     * Create or Update a template\n     */\n    public static saveMessageTemplate<ThrowOnError extends boolean = false>(options: Options<SaveMessageTemplateData, ThrowOnError>) {\n        return (options.client ?? client).post<SaveMessageTemplateResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/prompts/{name}',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Create a template\n     */\n    public static updateMessageTemplate<ThrowOnError extends boolean = false>(options: Options<UpdateMessageTemplateData, ThrowOnError>) {\n        return (options.client ?? client).put<UpdateMessageTemplateResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/prompts/{name}',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Delete a tag for Prompt Template\n     */\n    public static deleteTagForPromptTemplate<ThrowOnError extends boolean = false>(options: Options<DeleteTagForPromptTemplateData, ThrowOnError>) {\n        return (options.client ?? client).delete<DeleteTagForPromptTemplateResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/prompts/{name}/tags',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Get tags by Prompt Template\n     */\n    public static getTagsForPromptTemplate<ThrowOnError extends boolean = false>(options: Options<GetTagsForPromptTemplateData, ThrowOnError>) {\n        return (options.client ?? client).get<GetTagsForPromptTemplateResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/prompts/{name}/tags',\n            ...options\n        });\n    }\n    \n    /**\n     * Put a tag to Prompt Template\n     */\n    public static putTagForPromptTemplate<ThrowOnError extends boolean = false>(options: Options<PutTagForPromptTemplateData, ThrowOnError>) {\n        return (options.client ?? client).put<PutTagForPromptTemplateResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/prompts/{name}/tags',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Get all versions of a Template\n     */\n    public static getMessageTemplateVersions<ThrowOnError extends boolean = false>(options: Options<GetMessageTemplateVersionsData, ThrowOnError>) {\n        return (options.client ?? client).get<GetMessageTemplateVersionsResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/prompts/{name}/versions',\n            ...options\n        });\n    }\n    \n    /**\n     * Delete Template\n     */\n    public static deleteMessageTemplate1<ThrowOnError extends boolean = false>(options: Options<DeleteMessageTemplate1Data, ThrowOnError>) {\n        return (options.client ?? client).delete<DeleteMessageTemplate1Responses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/prompts/{name}/versions/{version}',\n            ...options\n        });\n    }\n}\n\nexport class QueueAdminResource {\n    /**\n     * Get Queue Names\n     */\n    public static names<ThrowOnError extends boolean = false>(options?: Options<NamesData, ThrowOnError>) {\n        return (options?.client ?? client).get<NamesResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/queue/',\n            ...options\n        });\n    }\n    \n    /**\n     * Get the queue length\n     */\n    public static size1<ThrowOnError extends boolean = false>(options?: Options<Size1Data, ThrowOnError>) {\n        return (options?.client ?? client).get<Size1Responses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/queue/size',\n            ...options\n        });\n    }\n}\n\nexport class ServiceRegistryResource {\n    public static getRegisteredServices<ThrowOnError extends boolean = false>(options?: Options<GetRegisteredServicesData, ThrowOnError>) {\n        return (options?.client ?? client).get<GetRegisteredServicesResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/registry/service',\n            ...options\n        });\n    }\n    \n    public static addOrUpdateService<ThrowOnError extends boolean = false>(options: Options<AddOrUpdateServiceData, ThrowOnError>) {\n        return (options.client ?? client).post<AddOrUpdateServiceResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/registry/service',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    public static getAllProtos<ThrowOnError extends boolean = false>(options: Options<GetAllProtosData, ThrowOnError>) {\n        return (options.client ?? client).get<GetAllProtosResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/registry/service/protos/{registryName}',\n            ...options\n        });\n    }\n    \n    public static deleteProto<ThrowOnError extends boolean = false>(options: Options<DeleteProtoData, ThrowOnError>) {\n        return (options.client ?? client).delete<DeleteProtoResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/registry/service/protos/{registryName}/{filename}',\n            ...options\n        });\n    }\n    \n    public static getProtoData<ThrowOnError extends boolean = false>(options: Options<GetProtoDataData, ThrowOnError>) {\n        return (options.client ?? client).get<GetProtoDataResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/registry/service/protos/{registryName}/{filename}',\n            ...options\n        });\n    }\n    \n    public static setProtoData<ThrowOnError extends boolean = false>(options: Options<SetProtoDataData, ThrowOnError>) {\n        return (options.client ?? client).post<SetProtoDataResponses, unknown, ThrowOnError>({\n            bodySerializer: null,\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/registry/service/protos/{registryName}/{filename}',\n            ...options,\n            headers: {\n                'Content-Type': 'application/octet-stream',\n                ...options.headers\n            }\n        });\n    }\n    \n    public static removeService<ThrowOnError extends boolean = false>(options: Options<RemoveServiceData, ThrowOnError>) {\n        return (options.client ?? client).delete<RemoveServiceResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/registry/service/{name}',\n            ...options\n        });\n    }\n    \n    public static getService<ThrowOnError extends boolean = false>(options: Options<GetServiceData, ThrowOnError>) {\n        return (options.client ?? client).get<GetServiceResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/registry/service/{name}',\n            ...options\n        });\n    }\n    \n    public static closeCircuitBreaker<ThrowOnError extends boolean = false>(options: Options<CloseCircuitBreakerData, ThrowOnError>) {\n        return (options.client ?? client).post<CloseCircuitBreakerResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/registry/service/{name}/circuit-breaker/close',\n            ...options\n        });\n    }\n    \n    public static openCircuitBreaker<ThrowOnError extends boolean = false>(options: Options<OpenCircuitBreakerData, ThrowOnError>) {\n        return (options.client ?? client).post<OpenCircuitBreakerResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/registry/service/{name}/circuit-breaker/open',\n            ...options\n        });\n    }\n    \n    public static getCircuitBreakerStatus<ThrowOnError extends boolean = false>(options: Options<GetCircuitBreakerStatusData, ThrowOnError>) {\n        return (options.client ?? client).get<GetCircuitBreakerStatusResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/registry/service/{name}/circuit-breaker/status',\n            ...options\n        });\n    }\n    \n    public static discover<ThrowOnError extends boolean = false>(options: Options<DiscoverData, ThrowOnError>) {\n        return (options.client ?? client).get<DiscoverResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/registry/service/{name}/discover',\n            ...options\n        });\n    }\n    \n    public static removeMethod<ThrowOnError extends boolean = false>(options: Options<RemoveMethodData, ThrowOnError>) {\n        return (options.client ?? client).delete<RemoveMethodResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/registry/service/{registryName}/methods',\n            ...options\n        });\n    }\n    \n    public static addOrUpdateMethod<ThrowOnError extends boolean = false>(options: Options<AddOrUpdateMethodData, ThrowOnError>) {\n        return (options.client ?? client).post<AddOrUpdateMethodResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/registry/service/{registryName}/methods',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n}\n\nexport class SchedulerResource {\n    /**\n     * Pause all scheduling in a single conductor server instance (for debugging only)\n     */\n    public static pauseAllSchedules<ThrowOnError extends boolean = false>(options?: Options<PauseAllSchedulesData, ThrowOnError>) {\n        return (options?.client ?? client).get<PauseAllSchedulesResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/scheduler/admin/pause',\n            ...options\n        });\n    }\n    \n    /**\n     * Requeue all execution records\n     */\n    public static requeueAllExecutionRecords<ThrowOnError extends boolean = false>(options?: Options<RequeueAllExecutionRecordsData, ThrowOnError>) {\n        return (options?.client ?? client).get<RequeueAllExecutionRecordsResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/scheduler/admin/requeue',\n            ...options\n        });\n    }\n    \n    /**\n     * Resume all scheduling\n     */\n    public static resumeAllSchedules<ThrowOnError extends boolean = false>(options?: Options<ResumeAllSchedulesData, ThrowOnError>) {\n        return (options?.client ?? client).get<ResumeAllSchedulesResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/scheduler/admin/resume',\n            ...options\n        });\n    }\n    \n    /**\n     * Get list of the next x (default 3, max 5) execution times for a scheduler\n     */\n    public static getNextFewSchedules<ThrowOnError extends boolean = false>(options: Options<GetNextFewSchedulesData, ThrowOnError>) {\n        return (options.client ?? client).get<GetNextFewSchedulesResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/scheduler/nextFewSchedules',\n            ...options\n        });\n    }\n    \n    /**\n     * Get all existing workflow schedules and optionally filter by workflow name\n     */\n    public static getAllSchedules<ThrowOnError extends boolean = false>(options?: Options<GetAllSchedulesData, ThrowOnError>) {\n        return (options?.client ?? client).get<GetAllSchedulesResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/scheduler/schedules',\n            ...options\n        });\n    }\n    \n    /**\n     * Create or update a schedule for a specified workflow with a corresponding start workflow request\n     */\n    public static saveSchedule<ThrowOnError extends boolean = false>(options: Options<SaveScheduleData, ThrowOnError>) {\n        return (options.client ?? client).post<SaveScheduleResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/scheduler/schedules',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Get schedules by tag\n     */\n    public static getSchedulesByTag<ThrowOnError extends boolean = false>(options: Options<GetSchedulesByTagData, ThrowOnError>) {\n        return (options.client ?? client).get<GetSchedulesByTagResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/scheduler/schedules/tags',\n            ...options\n        });\n    }\n    \n    /**\n     * Deletes an existing workflow schedule by name\n     */\n    public static deleteSchedule<ThrowOnError extends boolean = false>(options: Options<DeleteScheduleData, ThrowOnError>) {\n        return (options.client ?? client).delete<DeleteScheduleResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/scheduler/schedules/{name}',\n            ...options\n        });\n    }\n    \n    /**\n     * Get an existing workflow schedule by name\n     */\n    public static getSchedule<ThrowOnError extends boolean = false>(options: Options<GetScheduleData, ThrowOnError>) {\n        return (options.client ?? client).get<GetScheduleResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/scheduler/schedules/{name}',\n            ...options\n        });\n    }\n    \n    /**\n     * Pauses an existing schedule by name\n     */\n    public static pauseSchedule<ThrowOnError extends boolean = false>(options: Options<PauseScheduleData, ThrowOnError>) {\n        return (options.client ?? client).get<PauseScheduleResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/scheduler/schedules/{name}/pause',\n            ...options\n        });\n    }\n    \n    /**\n     * Resume a paused schedule by name\n     */\n    public static resumeSchedule<ThrowOnError extends boolean = false>(options: Options<ResumeScheduleData, ThrowOnError>) {\n        return (options.client ?? client).get<ResumeScheduleResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/scheduler/schedules/{name}/resume',\n            ...options\n        });\n    }\n    \n    /**\n     * Delete a tag for schedule\n     */\n    public static deleteTagForSchedule<ThrowOnError extends boolean = false>(options: Options<DeleteTagForScheduleData, ThrowOnError>) {\n        return (options.client ?? client).delete<DeleteTagForScheduleResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/scheduler/schedules/{name}/tags',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Get tags by schedule\n     */\n    public static getTagsForSchedule<ThrowOnError extends boolean = false>(options: Options<GetTagsForScheduleData, ThrowOnError>) {\n        return (options.client ?? client).get<GetTagsForScheduleResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/scheduler/schedules/{name}/tags',\n            ...options\n        });\n    }\n    \n    /**\n     * Put a tag to schedule\n     */\n    public static putTagForSchedule<ThrowOnError extends boolean = false>(options: Options<PutTagForScheduleData, ThrowOnError>) {\n        return (options.client ?? client).put<PutTagForScheduleResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/scheduler/schedules/{name}/tags',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Search for workflow executions based on payload and other parameters\n     *\n     * use sort options as sort=<field>:ASC|DESC e.g. sort=name&sort=workflowId:DESC. If order is not specified, defaults to ASC.\n     */\n    public static searchV2<ThrowOnError extends boolean = false>(options?: Options<SearchV2Data, ThrowOnError>) {\n        return (options?.client ?? client).get<SearchV2Responses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/scheduler/search/executions',\n            ...options\n        });\n    }\n}\n\nexport class SchedulerBulkResource {\n    /**\n     * Pause the list of schedules\n     */\n    public static pauseSchedules<ThrowOnError extends boolean = false>(options: Options<PauseSchedulesData, ThrowOnError>) {\n        return (options.client ?? client).put<PauseSchedulesResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/scheduler/bulk/pause',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Resume the list of schedules\n     */\n    public static resumeSchedules<ThrowOnError extends boolean = false>(options: Options<ResumeSchedulesData, ThrowOnError>) {\n        return (options.client ?? client).put<ResumeSchedulesResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/scheduler/bulk/resume',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n}\n\nexport class SchemaResource {\n    /**\n     * Get all schemas\n     */\n    public static getAllSchemas<ThrowOnError extends boolean = false>(options?: Options<GetAllSchemasData, ThrowOnError>) {\n        return (options?.client ?? client).get<GetAllSchemasResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/schema',\n            ...options\n        });\n    }\n    \n    /**\n     * Save schema\n     */\n    public static save<ThrowOnError extends boolean = false>(options: Options<SaveData, ThrowOnError>) {\n        return (options.client ?? client).post<SaveResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/schema',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Delete all versions of schema by name\n     */\n    public static deleteSchemaByName<ThrowOnError extends boolean = false>(options: Options<DeleteSchemaByNameData, ThrowOnError>) {\n        return (options.client ?? client).delete<DeleteSchemaByNameResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/schema/{name}',\n            ...options\n        });\n    }\n    \n    /**\n     * Get schema by name with latest version\n     */\n    public static getSchemaByNameWithLatestVersion<ThrowOnError extends boolean = false>(options: Options<GetSchemaByNameWithLatestVersionData, ThrowOnError>) {\n        return (options.client ?? client).get<GetSchemaByNameWithLatestVersionResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/schema/{name}',\n            ...options\n        });\n    }\n    \n    /**\n     * Delete a version of schema by name\n     */\n    public static deleteSchemaByNameAndVersion<ThrowOnError extends boolean = false>(options: Options<DeleteSchemaByNameAndVersionData, ThrowOnError>) {\n        return (options.client ?? client).delete<DeleteSchemaByNameAndVersionResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/schema/{name}/{version}',\n            ...options\n        });\n    }\n    \n    /**\n     * Get schema by name and version\n     */\n    public static getSchemaByNameAndVersion<ThrowOnError extends boolean = false>(options: Options<GetSchemaByNameAndVersionData, ThrowOnError>) {\n        return (options.client ?? client).get<GetSchemaByNameAndVersionResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/schema/{name}/{version}',\n            ...options\n        });\n    }\n}\n\nexport class SecretResource {\n    /**\n     * List all secret names user can grant access to\n     */\n    public static listSecretsThatUserCanGrantAccessTo<ThrowOnError extends boolean = false>(options?: Options<ListSecretsThatUserCanGrantAccessToData, ThrowOnError>) {\n        return (options?.client ?? client).get<ListSecretsThatUserCanGrantAccessToResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/secrets',\n            ...options\n        });\n    }\n    \n    /**\n     * List all secret names\n     */\n    public static listAllSecretNames<ThrowOnError extends boolean = false>(options?: Options<ListAllSecretNamesData, ThrowOnError>) {\n        return (options?.client ?? client).post<ListAllSecretNamesResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/secrets',\n            ...options\n        });\n    }\n    \n    /**\n     * List all secret names along with tags user can grant access to\n     */\n    public static listSecretsWithTagsThatUserCanGrantAccessTo<ThrowOnError extends boolean = false>(options?: Options<ListSecretsWithTagsThatUserCanGrantAccessToData, ThrowOnError>) {\n        return (options?.client ?? client).get<ListSecretsWithTagsThatUserCanGrantAccessToResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/secrets-v2',\n            ...options\n        });\n    }\n    \n    /**\n     * Clear local cache\n     */\n    public static clearLocalCache<ThrowOnError extends boolean = false>(options?: Options<ClearLocalCacheData, ThrowOnError>) {\n        return (options?.client ?? client).get<ClearLocalCacheResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/secrets/clearLocalCache',\n            ...options\n        });\n    }\n    \n    /**\n     * Clear redis cache\n     */\n    public static clearRedisCache<ThrowOnError extends boolean = false>(options?: Options<ClearRedisCacheData, ThrowOnError>) {\n        return (options?.client ?? client).get<ClearRedisCacheResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/secrets/clearRedisCache',\n            ...options\n        });\n    }\n    \n    /**\n     * Delete a secret value by key\n     */\n    public static deleteSecret<ThrowOnError extends boolean = false>(options: Options<DeleteSecretData, ThrowOnError>) {\n        return (options.client ?? client).delete<DeleteSecretResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/secrets/{key}',\n            ...options\n        });\n    }\n    \n    /**\n     * Get secret value by key\n     */\n    public static getSecret<ThrowOnError extends boolean = false>(options: Options<GetSecretData, ThrowOnError>) {\n        return (options.client ?? client).get<GetSecretResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/secrets/{key}',\n            ...options\n        });\n    }\n    \n    /**\n     * Put a secret value by key\n     */\n    public static putSecret<ThrowOnError extends boolean = false>(options: Options<PutSecretData, ThrowOnError>) {\n        return (options.client ?? client).put<PutSecretResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/secrets/{key}',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Check if secret exists\n     */\n    public static secretExists<ThrowOnError extends boolean = false>(options: Options<SecretExistsData, ThrowOnError>) {\n        return (options.client ?? client).get<SecretExistsResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/secrets/{key}/exists',\n            ...options\n        });\n    }\n    \n    /**\n     * Delete tags of the secret\n     */\n    public static deleteTagForSecret<ThrowOnError extends boolean = false>(options: Options<DeleteTagForSecretData, ThrowOnError>) {\n        return (options.client ?? client).delete<DeleteTagForSecretResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/secrets/{key}/tags',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Get tags by secret\n     */\n    public static getTags<ThrowOnError extends boolean = false>(options: Options<GetTagsData, ThrowOnError>) {\n        return (options.client ?? client).get<GetTagsResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/secrets/{key}/tags',\n            ...options\n        });\n    }\n    \n    /**\n     * Tag a secret\n     */\n    public static putTagForSecret<ThrowOnError extends boolean = false>(options: Options<PutTagForSecretData, ThrowOnError>) {\n        return (options.client ?? client).put<PutTagForSecretResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/secrets/{key}/tags',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n}\n\nexport class TaskResource {\n    /**\n     * Update a task\n     */\n    public static updateTask<ThrowOnError extends boolean = false>(options: Options<UpdateTaskData, ThrowOnError>) {\n        return (options.client ?? client).post<UpdateTaskResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/tasks',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Batch poll for a task of a certain type\n     */\n    public static batchPoll<ThrowOnError extends boolean = false>(options: Options<BatchPollData, ThrowOnError>) {\n        return (options.client ?? client).get<BatchPollResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/tasks/poll/batch/{tasktype}',\n            ...options\n        });\n    }\n    \n    /**\n     * Poll for a task of a certain type\n     */\n    public static poll<ThrowOnError extends boolean = false>(options: Options<PollData2, ThrowOnError>) {\n        return (options.client ?? client).get<PollResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/tasks/poll/{tasktype}',\n            ...options\n        });\n    }\n    \n    /**\n     * Get the details about each queue\n     */\n    public static all<ThrowOnError extends boolean = false>(options?: Options<AllData, ThrowOnError>) {\n        return (options?.client ?? client).get<AllResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/tasks/queue/all',\n            ...options\n        });\n    }\n    \n    /**\n     * Get the details about each queue\n     */\n    public static allVerbose<ThrowOnError extends boolean = false>(options?: Options<AllVerboseData, ThrowOnError>) {\n        return (options?.client ?? client).get<AllVerboseResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/tasks/queue/all/verbose',\n            ...options\n        });\n    }\n    \n    /**\n     * Get the last poll data for a given task type\n     */\n    public static getPollData<ThrowOnError extends boolean = false>(options: Options<GetPollDataData, ThrowOnError>) {\n        return (options.client ?? client).get<GetPollDataResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/tasks/queue/polldata',\n            ...options\n        });\n    }\n    \n    /**\n     * Get the last poll data for all task types\n     */\n    public static getAllPollData<ThrowOnError extends boolean = false>(options?: Options<GetAllPollDataData, ThrowOnError>) {\n        return (options?.client ?? client).get<GetAllPollDataResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/tasks/queue/polldata/all',\n            ...options\n        });\n    }\n    \n    /**\n     * Requeue pending tasks\n     */\n    public static requeuePendingTask<ThrowOnError extends boolean = false>(options: Options<RequeuePendingTaskData, ThrowOnError>) {\n        return (options.client ?? client).post<RequeuePendingTaskResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/tasks/queue/requeue/{taskType}',\n            ...options\n        });\n    }\n    \n    /**\n     * Get Task type queue sizes\n     */\n    public static size<ThrowOnError extends boolean = false>(options?: Options<SizeData, ThrowOnError>) {\n        return (options?.client ?? client).get<SizeResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/tasks/queue/sizes',\n            ...options\n        });\n    }\n    \n    /**\n     * Search for tasks based in payload and other parameters\n     *\n     * use sort options as sort=<field>:ASC|DESC e.g. sort=name&sort=workflowId:DESC. If order is not specified, defaults to ASC\n     */\n    public static search2<ThrowOnError extends boolean = false>(options?: Options<Search2Data, ThrowOnError>) {\n        return (options?.client ?? client).get<Search2Responses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/tasks/search',\n            ...options\n        });\n    }\n    \n    /**\n     * Update a task\n     */\n    public static updateTaskV2<ThrowOnError extends boolean = false>(options: Options<UpdateTaskV2Data, ThrowOnError>) {\n        return (options.client ?? client).post<UpdateTaskV2Responses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/tasks/update-v2',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Get task by Id\n     */\n    public static getTask<ThrowOnError extends boolean = false>(options: Options<GetTaskData, ThrowOnError>) {\n        return (options.client ?? client).get<GetTaskResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/tasks/{taskId}',\n            ...options\n        });\n    }\n    \n    /**\n     * Get Task Execution Logs\n     */\n    public static getTaskLogs<ThrowOnError extends boolean = false>(options: Options<GetTaskLogsData, ThrowOnError>) {\n        return (options.client ?? client).get<GetTaskLogsResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/tasks/{taskId}/log',\n            ...options\n        });\n    }\n    \n    /**\n     * Log Task Execution Details\n     */\n    public static log<ThrowOnError extends boolean = false>(options: Options<LogData, ThrowOnError>) {\n        return (options.client ?? client).post<LogResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/tasks/{taskId}/log',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Update running task in the workflow with given status and output asynchronously\n     */\n    public static signalWorkflowTaskASync<ThrowOnError extends boolean = false>(options: Options<SignalWorkflowTaskASyncData, ThrowOnError>) {\n        return (options.client ?? client).post<SignalWorkflowTaskASyncResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/tasks/{workflowId}/{status}/signal',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Update running task in the workflow with given status and output synchronously and return back updated workflow\n     */\n    public static signalWorkflowTaskSync<ThrowOnError extends boolean = false>(options: Options<SignalWorkflowTaskSyncData, ThrowOnError>) {\n        return (options.client ?? client).post<SignalWorkflowTaskSyncResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/tasks/{workflowId}/{status}/signal/sync',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Update a task By Ref Name. The output data is merged if data from a previous API call already exists.\n     */\n    public static updateTask1<ThrowOnError extends boolean = false>(options: Options<UpdateTask1Data, ThrowOnError>) {\n        return (options.client ?? client).post<UpdateTask1Responses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/tasks/{workflowId}/{taskRefName}/{status}',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Update a task By Ref Name synchronously. The output data is merged if data from a previous API call already exists.\n     */\n    public static updateTaskSync<ThrowOnError extends boolean = false>(options: Options<UpdateTaskSyncData, ThrowOnError>) {\n        return (options.client ?? client).post<UpdateTaskSyncResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/tasks/{workflowId}/{taskRefName}/{status}/sync',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n}\n\nexport class TokenResource {\n    /**\n     * Generate JWT with the given access key\n     */\n    public static generateToken<ThrowOnError extends boolean = false>(options: Options<GenerateTokenData, ThrowOnError>) {\n        return (options.client ?? client).post<GenerateTokenResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/token',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Get the user info from the token\n     */\n    public static getUserInfo<ThrowOnError extends boolean = false>(options?: Options<GetUserInfoData, ThrowOnError>) {\n        return (options?.client ?? client).get<GetUserInfoResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/token/userInfo',\n            ...options\n        });\n    }\n}\n\nexport class UserResource {\n    /**\n     * Get all users\n     */\n    public static listUsers<ThrowOnError extends boolean = false>(options?: Options<ListUsersData, ThrowOnError>) {\n        return (options?.client ?? client).get<ListUsersResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/users',\n            ...options\n        });\n    }\n    \n    /**\n     * Delete a user\n     */\n    public static deleteUser<ThrowOnError extends boolean = false>(options: Options<DeleteUserData, ThrowOnError>) {\n        return (options.client ?? client).delete<DeleteUserResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/users/{id}',\n            ...options\n        });\n    }\n    \n    /**\n     * Get a user by id\n     */\n    public static getUser<ThrowOnError extends boolean = false>(options: Options<GetUserData, ThrowOnError>) {\n        return (options.client ?? client).get<GetUserResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/users/{id}',\n            ...options\n        });\n    }\n    \n    /**\n     * Create or update a user\n     */\n    public static upsertUser<ThrowOnError extends boolean = false>(options: Options<UpsertUserData, ThrowOnError>) {\n        return (options.client ?? client).put<UpsertUserResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/users/{id}',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Get the permissions this user has over workflows and tasks\n     */\n    public static checkPermissions<ThrowOnError extends boolean = false>(options: Options<CheckPermissionsData, ThrowOnError>) {\n        return (options.client ?? client).get<CheckPermissionsResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/users/{userId}/checkPermissions',\n            ...options\n        });\n    }\n    \n    /**\n     * Get the permissions this user has over workflows and tasks\n     */\n    public static getGrantedPermissions<ThrowOnError extends boolean = false>(options: Options<GetGrantedPermissionsData, ThrowOnError>) {\n        return (options.client ?? client).get<GetGrantedPermissionsResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/users/{userId}/permissions',\n            ...options\n        });\n    }\n}\n\nexport class VersionResource {\n    /**\n     * Get the server's version\n     */\n    public static getVersion<ThrowOnError extends boolean = false>(options?: Options<GetVersionData, ThrowOnError>) {\n        return (options?.client ?? client).get<GetVersionResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/version',\n            ...options\n        });\n    }\n}\n\nexport class WorkflowResource {\n    /**\n     * Start a new workflow with StartWorkflowRequest, which allows task to be executed in a domain\n     */\n    public static startWorkflow<ThrowOnError extends boolean = false>(options: Options<StartWorkflowData, ThrowOnError>) {\n        return (options.client ?? client).post<StartWorkflowResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/workflow',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Lists workflows for the given correlation id list and workflow name list\n     */\n    public static getWorkflows1<ThrowOnError extends boolean = false>(options: Options<GetWorkflows1Data, ThrowOnError>) {\n        return (options.client ?? client).post<GetWorkflows1Responses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/workflow/correlated/batch',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Starts the decision task for a workflow\n     */\n    public static decide<ThrowOnError extends boolean = false>(options: Options<DecideData, ThrowOnError>) {\n        return (options.client ?? client).put<DecideResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/workflow/decide/{workflowId}',\n            ...options\n        });\n    }\n    \n    /**\n     * Execute a workflow synchronously with input and outputs using get api\n     *\n     * @deprecated\n     */\n    public static executeWorkflowAsGetApi<ThrowOnError extends boolean = false>(options: Options<ExecuteWorkflowAsGetApiData, ThrowOnError>) {\n        return (options.client ?? client).get<ExecuteWorkflowAsGetApiResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/workflow/execute/{name}',\n            ...options\n        });\n    }\n    \n    /**\n     * Execute a workflow synchronously with input and outputs\n     *\n     * @deprecated\n     */\n    public static executeWorkflowAsApi<ThrowOnError extends boolean = false>(options: Options<ExecuteWorkflowAsApiData, ThrowOnError>) {\n        return (options.client ?? client).post<ExecuteWorkflowAsApiResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/workflow/execute/{name}',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Execute a workflow synchronously\n     */\n    public static executeWorkflow<ThrowOnError extends boolean = false>(options: Options<ExecuteWorkflowData, ThrowOnError>) {\n        return (options.client ?? client).post<ExecuteWorkflowResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/workflow/execute/{name}/{version}',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Retrieve all the running workflows\n     */\n    public static getRunningWorkflow<ThrowOnError extends boolean = false>(options: Options<GetRunningWorkflowData, ThrowOnError>) {\n        return (options.client ?? client).get<GetRunningWorkflowResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/workflow/running/{name}',\n            ...options\n        });\n    }\n    \n    /**\n     * Search for workflow executions based on payload and other parameters\n     *\n     * Search for workflow executions based on payload and other parameters.\n     * The query parameter accepts exact matches using `=` and `IN` on the following fields: `workflowId`, `correlationId`, `taskId`, `workflowType`, `taskType`, and `status`.\n     * Matches using `=` can be written as `taskType = HTTP`.\n     * Matches using `IN` are written as `status IN (SCHEDULED, IN_PROGRESS)`.\n     * The 'startTime' and 'modifiedTime' field uses unix timestamps and accepts queries using `<` and `>`, for example `startTime < 1696143600000`.\n     * Queries can be combined using `AND`, for example `taskType = HTTP AND status = SCHEDULED`.\n     *\n     */\n    public static search1<ThrowOnError extends boolean = false>(options?: Options<Search1Data, ThrowOnError>) {\n        return (options?.client ?? client).get<Search1Responses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/workflow/search',\n            ...options\n        });\n    }\n    \n    /**\n     * Start a new workflow asynchronously. Returns the ID of the workflow instance that can be later used for tracking\n     */\n    public static startWorkflowAsync<ThrowOnError extends boolean = false>(options: Options<StartWorkflowAsyncData, ThrowOnError>) {\n        return (options.client ?? client).post<StartWorkflowAsyncResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/workflow/start/{name}/{version}',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Test workflow execution using mock data\n     */\n    public static testWorkflow<ThrowOnError extends boolean = false>(options: Options<TestWorkflowData, ThrowOnError>) {\n        return (options.client ?? client).post<TestWorkflowResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/workflow/test',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Start a new workflow. Returns the ID of the workflow instance that can be later used for tracking\n     */\n    public static startWorkflow1<ThrowOnError extends boolean = false>(options: Options<StartWorkflow1Data, ThrowOnError>) {\n        return (options.client ?? client).post<StartWorkflow1Responses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/workflow/{name}',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Lists workflows for the given correlation id list\n     */\n    public static getWorkflows<ThrowOnError extends boolean = false>(options: Options<GetWorkflowsData, ThrowOnError>) {\n        return (options.client ?? client).post<GetWorkflowsResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/workflow/{name}/correlated',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Lists workflows for the given correlation id\n     */\n    public static getWorkflows2<ThrowOnError extends boolean = false>(options: Options<GetWorkflows2Data, ThrowOnError>) {\n        return (options.client ?? client).get<GetWorkflows2Responses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/workflow/{name}/correlated/{correlationId}',\n            ...options\n        });\n    }\n    \n    /**\n     * Terminate workflow execution\n     */\n    public static terminate1<ThrowOnError extends boolean = false>(options: Options<Terminate1Data, ThrowOnError>) {\n        return (options.client ?? client).delete<Terminate1Responses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/workflow/{workflowId}',\n            ...options\n        });\n    }\n    \n    /**\n     * Gets the workflow by workflow (execution) id\n     */\n    public static getExecutionStatus<ThrowOnError extends boolean = false>(options: Options<GetExecutionStatusData, ThrowOnError>) {\n        return (options.client ?? client).get<GetExecutionStatusResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/workflow/{workflowId}',\n            ...options\n        });\n    }\n    \n    /**\n     * Jump workflow execution to given task\n     *\n     * Jump workflow execution to given task.\n     */\n    public static jumpToTask<ThrowOnError extends boolean = false>(options: Options<JumpToTaskData, ThrowOnError>) {\n        return (options.client ?? client).post<JumpToTaskResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/workflow/{workflowId}/jump/{taskReferenceName}',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Pauses the workflow\n     */\n    public static pauseWorkflow<ThrowOnError extends boolean = false>(options: Options<PauseWorkflowData, ThrowOnError>) {\n        return (options.client ?? client).put<PauseWorkflowResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/workflow/{workflowId}/pause',\n            ...options\n        });\n    }\n    \n    /**\n     * Removes the workflow from the system\n     */\n    public static delete1<ThrowOnError extends boolean = false>(options: Options<Delete1Data, ThrowOnError>) {\n        return (options.client ?? client).delete<Delete1Responses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/workflow/{workflowId}/remove',\n            ...options\n        });\n    }\n    \n    /**\n     * Reruns the workflow from a specific task\n     */\n    public static rerun<ThrowOnError extends boolean = false>(options: Options<RerunData, ThrowOnError>) {\n        return (options.client ?? client).post<RerunResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/workflow/{workflowId}/rerun',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Resets callback times of all non-terminal SIMPLE tasks to 0\n     */\n    public static resetWorkflow<ThrowOnError extends boolean = false>(options: Options<ResetWorkflowData, ThrowOnError>) {\n        return (options.client ?? client).post<ResetWorkflowResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/workflow/{workflowId}/resetcallbacks',\n            ...options\n        });\n    }\n    \n    /**\n     * Restarts a completed workflow\n     */\n    public static restart<ThrowOnError extends boolean = false>(options: Options<RestartData, ThrowOnError>) {\n        return (options.client ?? client).post<RestartResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/workflow/{workflowId}/restart',\n            ...options\n        });\n    }\n    \n    /**\n     * Resumes the workflow\n     */\n    public static resumeWorkflow<ThrowOnError extends boolean = false>(options: Options<ResumeWorkflowData, ThrowOnError>) {\n        return (options.client ?? client).put<ResumeWorkflowResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/workflow/{workflowId}/resume',\n            ...options\n        });\n    }\n    \n    /**\n     * Retries the last failed task\n     */\n    public static retry<ThrowOnError extends boolean = false>(options: Options<RetryData, ThrowOnError>) {\n        return (options.client ?? client).post<RetryResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/workflow/{workflowId}/retry',\n            ...options\n        });\n    }\n    \n    /**\n     * Skips a given task from a current running workflow\n     */\n    public static skipTaskFromWorkflow<ThrowOnError extends boolean = false>(options: Options<SkipTaskFromWorkflowData, ThrowOnError>) {\n        return (options.client ?? client).put<SkipTaskFromWorkflowResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/workflow/{workflowId}/skiptask/{taskReferenceName}',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Update a workflow state by updating variables or in progress task\n     *\n     * Updates the workflow variables, tasks and triggers evaluation.\n     */\n    public static updateWorkflowAndTaskState<ThrowOnError extends boolean = false>(options: Options<UpdateWorkflowAndTaskStateData, ThrowOnError>) {\n        return (options.client ?? client).post<UpdateWorkflowAndTaskStateResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/workflow/{workflowId}/state',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Gets the workflow by workflow (execution) id\n     */\n    public static getWorkflowStatusSummary<ThrowOnError extends boolean = false>(options: Options<GetWorkflowStatusSummaryData, ThrowOnError>) {\n        return (options.client ?? client).get<GetWorkflowStatusSummaryResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/workflow/{workflowId}/status',\n            ...options\n        });\n    }\n    \n    /**\n     * Gets the workflow tasks by workflow (execution) id\n     */\n    public static getExecutionStatusTaskList<ThrowOnError extends boolean = false>(options: Options<GetExecutionStatusTaskListData, ThrowOnError>) {\n        return (options.client ?? client).get<GetExecutionStatusTaskListResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/workflow/{workflowId}/tasks',\n            ...options\n        });\n    }\n    \n    /**\n     * Upgrade running workflow to newer version\n     *\n     * Upgrade running workflow to newer version\n     */\n    public static upgradeRunningWorkflowToVersion<ThrowOnError extends boolean = false>(options: Options<UpgradeRunningWorkflowToVersionData, ThrowOnError>) {\n        return (options.client ?? client).post<UpgradeRunningWorkflowToVersionResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/workflow/{workflowId}/upgrade',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Update workflow variables\n     *\n     * Updates the workflow variables and triggers evaluation.\n     */\n    public static updateWorkflowState<ThrowOnError extends boolean = false>(options: Options<UpdateWorkflowStateData, ThrowOnError>) {\n        return (options.client ?? client).post<UpdateWorkflowStateResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/workflow/{workflowId}/variables',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n}\n\nexport class WorkflowBulkResource {\n    /**\n     * Permanently remove workflows from the system\n     */\n    public static delete<ThrowOnError extends boolean = false>(options: Options<DeleteData, ThrowOnError>) {\n        return (options.client ?? client).post<DeleteResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/workflow/bulk/delete',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Pause the list of workflows\n     */\n    public static pauseWorkflow1<ThrowOnError extends boolean = false>(options: Options<PauseWorkflow1Data, ThrowOnError>) {\n        return (options.client ?? client).put<PauseWorkflow1Responses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/workflow/bulk/pause',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Restart the list of completed workflow\n     */\n    public static restart1<ThrowOnError extends boolean = false>(options: Options<Restart1Data, ThrowOnError>) {\n        return (options.client ?? client).post<Restart1Responses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/workflow/bulk/restart',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Resume the list of workflows\n     */\n    public static resumeWorkflow1<ThrowOnError extends boolean = false>(options: Options<ResumeWorkflow1Data, ThrowOnError>) {\n        return (options.client ?? client).put<ResumeWorkflow1Responses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/workflow/bulk/resume',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Retry the last failed task for each workflow from the list\n     */\n    public static retry1<ThrowOnError extends boolean = false>(options: Options<Retry1Data, ThrowOnError>) {\n        return (options.client ?? client).post<Retry1Responses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/workflow/bulk/retry',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n    \n    /**\n     * Terminate workflows execution\n     */\n    public static terminate<ThrowOnError extends boolean = false>(options: Options<TerminateData, ThrowOnError>) {\n        return (options.client ?? client).post<TerminateResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/api/workflow/bulk/terminate',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n}\n\nexport class ContextController {\n    public static get<ThrowOnError extends boolean = false>(options?: Options<GetData, ThrowOnError>) {\n        return (options?.client ?? client).get<GetResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/context.js',\n            ...options\n        });\n    }\n}\n\nexport class HealthCheckResource {\n    public static doCheck<ThrowOnError extends boolean = false>(options?: Options<DoCheckData, ThrowOnError>) {\n        return (options?.client ?? client).get<DoCheckResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/health',\n            ...options\n        });\n    }\n}\n\nexport class IncomingWebhookResource {\n    public static handleWebhook1<ThrowOnError extends boolean = false>(options: Options<HandleWebhook1Data, ThrowOnError>) {\n        return (options.client ?? client).get<HandleWebhook1Responses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/webhook/{id}',\n            ...options\n        });\n    }\n    \n    public static handleWebhook<ThrowOnError extends boolean = false>(options: Options<HandleWebhookData, ThrowOnError>) {\n        return (options.client ?? client).post<HandleWebhookResponses, unknown, ThrowOnError>({\n            security: [\n                {\n                    name: 'X-Authorization',\n                    type: 'apiKey'\n                }\n            ],\n            url: '/webhook/{id}',\n            ...options,\n            headers: {\n                'Content-Type': 'application/json',\n                ...options.headers\n            }\n        });\n    }\n}\n","export class ConductorSdkError extends Error {\n  private _trace;\n  private __proto__: unknown;\n\n  constructor(message?: string, innerError?: Error) {\n    super(message);\n    this.name = \"[Conductor SDK Error]\";\n    this._trace = innerError;\n    const actualProto = new.target.prototype;\n\n    if (Object.setPrototypeOf) {\n      Object.setPrototypeOf(this, actualProto);\n    } else {\n      this.__proto__ = actualProto;\n    }\n  }\n}\n\nexport function handleSdkError(\n  error?: unknown,\n  customMessage?: string,\n  strategy?: \"throw\"\n): never;\nexport function handleSdkError(\n  error?: unknown,\n  customMessage?: string,\n  strategy?: \"log\"\n): void;\nexport function handleSdkError(\n  error?: unknown,\n  customMessage?: string,\n  strategy: \"throw\" | \"log\" = \"throw\"\n): void | never {\n  const innerError = error instanceof Error ? error : undefined;\n\n  const messageFromError =\n    error && typeof error === \"object\" && \"message\" in error\n      ? String((error as { message: unknown }).message)\n      : undefined;\n\n  const fullMessage =\n    customMessage && messageFromError\n      ? `${customMessage}: ${messageFromError}`\n      : customMessage || messageFromError || \"Unknown error\";\n\n  if (strategy === \"log\") {\n    console.error(`[Conductor SDK Error]: ${fullMessage}\\n`, innerError);\n  } else {\n    throw new ConductorSdkError(fullMessage, innerError);\n  }\n}\n\n","import type { Client } from \"../../../open-api/generated/client/types.gen\";\nimport { TokenResource } from \"../../../open-api/generated\";\nimport { ConductorSdkError } from \"../../helpers/errors\";\nimport type { ConductorLogger } from \"../../helpers/logger\";\nimport {\n  TOKEN_TTL_MS,\n  MAX_AUTH_FAILURES,\n  MAX_AUTH_BACKOFF_MS,\n  MAX_INITIAL_TOKEN_RETRIES,\n} from \"../constants\";\n\nexport interface HandleAuthResult {\n  refreshToken: () => Promise<string | undefined>;\n  stopBackgroundRefresh: () => void;\n}\n\nexport const handleAuth = async (\n  openApiClient: Client,\n  keyId: string,\n  keySecret: string,\n  refreshTokenInterval: number,\n  logger?: ConductorLogger\n): Promise<HandleAuthResult | undefined> => {\n  let token: string | undefined;\n  let tokenObtainedAt = 0;\n  let isOss = false;\n  let consecutiveFailures = 0;\n  let lastRefreshFailureAt = 0;\n\n  // Mutex: if a refresh is already in flight, callers await the same promise\n  // instead of firing a second concurrent request.\n  let refreshInFlight: Promise<string | undefined> | null = null;\n\n  const getNewToken = async (): Promise<string | undefined> => {\n    const { data, error, response } = await TokenResource.generateToken({\n      body: { keyId, keySecret },\n      client: openApiClient,\n      throwOnError: false,\n    });\n\n    if (response?.status === 404) {\n      isOss = true;\n      logger?.info(\"Conductor OSS detected (no /token endpoint), proceeding without auth\");\n      return undefined;\n    }\n\n    if (error || !data?.token) {\n      // Parse auth error code from response body (Python SDK checks EXPIRED_TOKEN, INVALID_TOKEN)\n      const errorCode =\n        error && typeof error === \"object\" && \"error\" in error\n          ? String((error as { error: unknown }).error)\n          : undefined;\n      if (errorCode) {\n        logger?.debug(`Auth error code from server: ${errorCode}`);\n      }\n\n      const statusHint =\n        response?.status != null ? ` (HTTP ${response.status})` : \"\";\n      const message =\n        error && typeof error === \"object\" && \"message\" in error\n          ? String((error as { message: unknown }).message) + statusHint\n          : error && typeof error === \"object\" && \"error\" in error\n            ? String((error as { error: unknown }).error) + statusHint\n            : `Unknown error${statusHint}`;\n      throw new ConductorSdkError(\n        `Failed to generate authorization token: ${message}`,\n        error instanceof Error ? error : undefined\n      );\n    }\n\n    token = data.token as string;\n    tokenObtainedAt = Date.now();\n    return token;\n  };\n\n  /**\n   * Guarded version of getNewToken that prevents concurrent calls.\n   * If a refresh is already in flight, callers coalesce onto the same promise.\n   */\n  const getNewTokenGuarded = async (): Promise<string | undefined> => {\n    if (refreshInFlight) return refreshInFlight;\n    refreshInFlight = getNewToken().finally(() => {\n      refreshInFlight = null;\n    });\n    return refreshInFlight;\n  };\n\n  /**\n   * Calculate the exponential backoff delay for the current failure count.\n   * Returns 2^(failures-1) * 1000ms, capped at MAX_AUTH_BACKOFF_MS.\n   */\n  const getBackoffMs = (failures: number): number => {\n    return Math.min(Math.pow(2, failures - 1) * 1000, MAX_AUTH_BACKOFF_MS);\n  };\n\n  /**\n   * Check if we should skip a refresh attempt due to backoff.\n   * Returns true if not enough time has passed since the last failure.\n   */\n  const shouldBackoff = (): boolean => {\n    if (consecutiveFailures === 0 || lastRefreshFailureAt === 0) return false;\n    const backoffMs = getBackoffMs(consecutiveFailures);\n    return Date.now() - lastRefreshFailureAt < backoffMs;\n  };\n\n  const refreshToken = async (): Promise<string | undefined> => {\n    if (isOss) return undefined;\n    if (shouldBackoff()) return token; // respect backoff, fall back to current token\n    try {\n      const newToken = await getNewTokenGuarded();\n      consecutiveFailures = 0;\n      return newToken;\n    } catch {\n      consecutiveFailures++;\n      lastRefreshFailureAt = Date.now();\n      return token; // fall back to current token\n    }\n  };\n\n  // Initial auth with retry (no mutex needed -- nothing else is running yet)\n  for (let attempt = 1; attempt <= MAX_INITIAL_TOKEN_RETRIES; attempt++) {\n    try {\n      await getNewToken();\n      break;\n    } catch (e) {\n      if (isOss) {\n        return undefined;\n      }\n      if (attempt < MAX_INITIAL_TOKEN_RETRIES) {\n        const backoffMs = getBackoffMs(attempt);\n        logger?.warn?.(\n          `Initial token request failed (attempt ${attempt}/${MAX_INITIAL_TOKEN_RETRIES}), ` +\n            `retrying in ${backoffMs}ms`\n        );\n        await new Promise((resolve) => setTimeout(resolve, backoffMs));\n      } else {\n        logger?.error(\"Initial token generation failed after all retries\", e);\n        throw e;\n      }\n    }\n  }\n\n  if (isOss) {\n    return undefined;\n  }\n\n  // Set auth as a callback so token is checked before each request\n  openApiClient.setConfig({\n    auth: async () => {\n      if (isOss) return undefined;\n      // If token is close to expiry, refresh inline before the request\n      if (Date.now() - tokenObtainedAt >= TOKEN_TTL_MS) {\n        if (!shouldBackoff()) {\n          try {\n            await getNewTokenGuarded();\n            consecutiveFailures = 0;\n          } catch {\n            consecutiveFailures++;\n            lastRefreshFailureAt = Date.now();\n            logger?.warn?.(\"Pre-request token refresh failed, using existing token\");\n          }\n        }\n      }\n      return token;\n    },\n  });\n\n  // Background refresh -- use the shorter of the configured interval and 80% of token TTL\n  // to ensure the token is refreshed before it expires\n  const effectiveRefreshInterval = Math.min(\n    refreshTokenInterval,\n    Math.floor(TOKEN_TTL_MS * 0.8)\n  );\n\n  let refreshIntervalHandle: ReturnType<typeof setInterval> | undefined;\n\n  if (effectiveRefreshInterval > 0) {\n    refreshIntervalHandle = setInterval(async () => {\n      if (isOss) return;\n\n      // Skip this tick if we're in backoff\n      if (shouldBackoff()) {\n        return;\n      }\n\n      try {\n        await getNewTokenGuarded();\n        consecutiveFailures = 0;\n      } catch {\n        consecutiveFailures++;\n        lastRefreshFailureAt = Date.now();\n        if (consecutiveFailures >= MAX_AUTH_FAILURES) {\n          logger?.error(\n            `Token refresh has failed ${consecutiveFailures} consecutive times. ` +\n              `Next retry backed off ${getBackoffMs(consecutiveFailures)}ms. ` +\n              \"Pre-request TTL check will attempt refresh before next API call.\"\n          );\n        } else {\n          logger?.warn?.(\n            `Token refresh failed (attempt ${consecutiveFailures}/${MAX_AUTH_FAILURES}), ` +\n              `backing off ${getBackoffMs(consecutiveFailures)}ms`\n          );\n        }\n      }\n    }, effectiveRefreshInterval);\n  }\n\n  const stopBackgroundRefresh = () => {\n    if (refreshIntervalHandle !== undefined) {\n      clearInterval(refreshIntervalHandle);\n      refreshIntervalHandle = undefined;\n    }\n  };\n\n  return { refreshToken, stopBackgroundRefresh };\n};\n","type Input = Parameters<typeof fetch>[0];\ntype Init = Parameters<typeof fetch>[1];\n\nexport interface RetryFetchOptions {\n  onAuthFailure?: () => Promise<string | undefined>;\n  requestTimeoutMs?: number;\n  maxRateLimitRetries?: number; // default 5\n  maxTransportRetries?: number; // default 3\n  initialRetryDelay?: number; // default 1000ms\n}\n\nconst isTimeoutError = (error: unknown): boolean => {\n  if (error instanceof DOMException && error.name === \"AbortError\") return true;\n  if (error instanceof Error && error.name === \"TimeoutError\") return true;\n  if (error instanceof Error && error.name === \"AbortError\") return true;\n  return false;\n};\n\n// AbortSignal.timeout and AbortSignal.any are available in Node 18+ and Node 20+ respectively,\n// but may not be in the TypeScript DOM lib types.\nconst AbortSignalWithExtensions = AbortSignal as typeof AbortSignal & {\n  timeout?: (ms: number) => AbortSignal;\n  any?: (signals: AbortSignal[]) => AbortSignal;\n};\n\nexport const applyTimeout = (\n  init: Init | undefined,\n  timeoutMs: number\n): Init => {\n  const existingSignal = init?.signal;\n\n  if (!AbortSignalWithExtensions.timeout) {\n    // Runtime doesn't support AbortSignal.timeout, skip timeout\n    return init ?? {};\n  }\n\n  const timeoutSignal = AbortSignalWithExtensions.timeout(timeoutMs);\n\n  if (!existingSignal) {\n    return { ...init, signal: timeoutSignal };\n  }\n\n  // Combine existing signal with timeout signal\n  if (typeof AbortSignalWithExtensions.any === \"function\") {\n    return { ...init, signal: AbortSignalWithExtensions.any([existingSignal, timeoutSignal]) };\n  }\n\n  // Fallback for Node 18 (no AbortSignal.any)\n  const controller = new AbortController();\n  const onAbort = () => controller.abort(existingSignal.reason ?? timeoutSignal.reason);\n\n  if (existingSignal.aborted || timeoutSignal.aborted) {\n    controller.abort(existingSignal.reason ?? timeoutSignal.reason);\n  } else {\n    existingSignal.addEventListener(\"abort\", onAbort, { once: true });\n    timeoutSignal.addEventListener(\"abort\", onAbort, { once: true });\n  }\n\n  return { ...init, signal: controller.signal };\n};\n\n/**\n * Check if a 401/403 response indicates a token problem (expired or invalid)\n * vs a permission error that should NOT trigger a token refresh.\n *\n * The Conductor server returns error codes in the JSON body:\n *   { \"error\": \"EXPIRED_TOKEN\", \"message\": \"...\" }  -> token problem, refresh\n *   { \"error\": \"INVALID_TOKEN\", \"message\": \"...\" }  -> token problem, refresh\n *   { \"error\": \"...\", \"message\": \"...\" }             -> permission denied, don't refresh\n *\n * Matches the Python SDK behavior: only refresh+retry for EXPIRED_TOKEN or INVALID_TOKEN.\n */\nconst TOKEN_ERROR_CODES = new Set([\"EXPIRED_TOKEN\", \"INVALID_TOKEN\"]);\n\nconst isTokenError = async (response: Response): Promise<boolean> => {\n  try {\n    // Clone to avoid consuming the body for downstream callers\n    const body = await response.clone().json();\n    const errorCode =\n      body && typeof body === \"object\" && \"error\" in body\n        ? String(body.error)\n        : \"\";\n    return TOKEN_ERROR_CODES.has(errorCode);\n  } catch {\n    // If the body isn't JSON or can't be parsed, treat 401 as a likely token error\n    // (safe default: attempt one refresh). 403 without a parseable body is more\n    // likely a permission error, so don't retry.\n    return response.status === 401;\n  }\n};\n\n/** Add ±10% jitter to prevent thundering herd on retries */\nconst withJitter = (delayMs: number): number => {\n  const jitter = delayMs * 0.1 * (2 * Math.random() - 1);\n  return Math.max(0, Math.round(delayMs + jitter));\n};\n\nexport const retryFetch = async (\n  input: Input,\n  init: Init,\n  fetchFn: typeof fetch,\n  options: RetryFetchOptions = {}\n): Promise<Response> => {\n  const {\n    onAuthFailure,\n    requestTimeoutMs,\n    maxRateLimitRetries = 5,\n    maxTransportRetries = 3,\n    initialRetryDelay = 1000,\n  } = options;\n\n  const effectiveInit = requestTimeoutMs\n    ? applyTimeout(init, requestTimeoutMs)\n    : init;\n\n  let lastError: unknown;\n\n  // Transport retry loop\n  for (let transportAttempt = 0; transportAttempt <= maxTransportRetries; transportAttempt++) {\n    let response: Response;\n    try {\n      response = await fetchFn(input, effectiveInit);\n    } catch (error) {\n      // Timeout/abort errors should NOT be retried\n      if (isTimeoutError(error)) {\n        throw error;\n      }\n      // Transport error - retry with linear backoff\n      lastError = error;\n      if (transportAttempt < maxTransportRetries) {\n        await new Promise((resolve) =>\n          setTimeout(resolve, withJitter(initialRetryDelay * (transportAttempt + 1)))\n        );\n        continue;\n      }\n      throw error;\n    }\n\n    // Rate limit retry (429)\n    if (response.status === 429) {\n      let rateLimitResponse = response;\n      let delay = initialRetryDelay;\n      for (let rlAttempt = 0; rlAttempt < maxRateLimitRetries; rlAttempt++) {\n        await new Promise((resolve) => setTimeout(resolve, withJitter(delay)));\n        rateLimitResponse = await fetchFn(input, effectiveInit);\n        if (rateLimitResponse.status !== 429) {\n          return rateLimitResponse;\n        }\n        delay *= 2;\n      }\n      return rateLimitResponse;\n    }\n\n    // Auth failure retry (401/403) - only refresh+retry when the error is a token\n    // problem (EXPIRED_TOKEN or INVALID_TOKEN). Permission errors should propagate\n    // immediately without wasting a token refresh + retry round-trip.\n    if (\n      (response.status === 401 || response.status === 403) &&\n      onAuthFailure &&\n      (await isTokenError(response))\n    ) {\n      const newToken = await onAuthFailure();\n      if (newToken) {\n        // Clone request with updated auth header\n        const retryInit = {\n          ...effectiveInit,\n          headers: new Headers(effectiveInit?.headers),\n        };\n        retryInit.headers.set(\"X-Authorization\", newToken);\n        return await fetchFn(input, retryInit);\n      }\n    }\n\n    return response;\n  }\n\n  // Should not reach here, but just in case\n  throw lastError ?? new Error(\"Fetch retry exhausted\");\n};\n\nexport const wrapFetchWithRetry = (\n  fetchFn: typeof fetch,\n  options?: RetryFetchOptions\n): typeof fetch => {\n  return (input: Input, init?: Init): Promise<Response> => {\n    return retryFetch(input, init, fetchFn, options);\n  };\n};\n","/* eslint-disable */\n// disable linter since related old functionality was not properly typed\n// Legacy compatibility layer: This file provides backward compatibility for the old resource-based API.\n// The legacy API is maintained for existing users, but new code should use the modern API methods.\n\nimport type { SignalResponse } from \"../../../open-api\";\nimport type { Client } from \"../../../open-api/generated/client/types.gen\";\nimport {\n  EventResource,\n  HumanTask,\n  HumanTaskResource,\n  UserForm,\n  MetadataResource,\n  ServiceRegistryResource,\n  SchedulerResource,\n  TaskResource,\n  TokenResource,\n  WorkflowResource,\n  WorkflowBulkResource,\n  HealthCheckResource,\n} from \"../../../open-api/generated\";\n\nconst warn = () => {\n  console.warn(\n    \"[Conductor SDK Legacy API] You are using the legacy resource-based API. This API is maintained for backward compatibility. For new code, use higher-level clients (EventClient, TaskClient) or Resource classes directly.\"\n  );\n};\n\n/* everything this function does is add resources with related methods -\n   originally available in the old OpenAPI-generated client -\n   to the new client by mapping them to newly generated methods */\nexport const addResourcesBackwardCompatibility = (client: Client) => {\n  const eventResource = {\n    /**\n     * @deprecated\n     */\n    getQueueConfig: async (queueType: string, queueName: string) => {\n      warn();\n      const { data } = await EventResource.getQueueConfig({\n        client,\n        path: { queueType, queueName },\n        throwOnError: true,\n      });\n      return data;\n    },\n    /**\n     * @deprecated\n     */\n    putQueueConfig: async (\n      queueType: string,\n      queueName: string,\n      body: string\n    ) => {\n      warn();\n      await EventResource.putQueueConfig({\n        client,\n        path: { queueType, queueName },\n        body,\n        throwOnError: true,\n      });\n    },\n    /**\n     * @deprecated\n     */\n    deleteQueueConfig: async (queueType: string, queueName: string) => {\n      warn();\n      await EventResource.deleteQueueConfig({\n        client,\n        path: { queueType, queueName },\n        throwOnError: true,\n      });\n    },\n    /**\n     * @deprecated\n     */\n    getEventHandlers: async () => {\n      warn();\n      const { data } = await EventResource.getEventHandlers({\n        client,\n        throwOnError: true,\n      });\n      return data;\n    },\n    /**\n     * @deprecated\n     */\n    updateEventHandler: async (body: any) => {\n      warn();\n      await EventResource.updateEventHandler({\n        client,\n        body,\n        throwOnError: true,\n      });\n    },\n    /**\n     * @deprecated\n     */\n    addEventHandler: async (body: any) => {\n      warn();\n      await EventResource.addEventHandler({\n        client,\n        body,\n        throwOnError: true,\n      });\n    },\n    /**\n     * @deprecated\n     */\n    getQueueNames: async () => {\n      warn();\n      const { data } = await EventResource.getQueueNames({\n        client,\n        throwOnError: true,\n      });\n      return data;\n    },\n    /**\n     * @deprecated\n     */\n    removeEventHandlerStatus: async (name: string) => {\n      warn();\n      await EventResource.removeEventHandlerStatus({\n        client,\n        path: { name },\n        throwOnError: true,\n      });\n    },\n    /**\n     * @deprecated\n     */\n    getEventHandlersForEvent: async (event: string, activeOnly = true) => {\n      warn();\n      const { data } = await EventResource.getEventHandlersForEvent({\n        client,\n        path: { event },\n        query: { activeOnly },\n        throwOnError: true,\n      });\n      return data;\n    },\n    /**\n     * @deprecated\n     */\n    deleteTagForEventHandler: async (name: string, body: any[]) => {\n      warn();\n      await EventResource.deleteTagForEventHandler({\n        client,\n        path: { name },\n        body,\n        throwOnError: true,\n      });\n    },\n    /**\n     * @deprecated\n     */\n    getTagsForEventHandler: async (name: string) => {\n      warn();\n      const { data } = await EventResource.getTagsForEventHandler({\n        client,\n        path: { name },\n        throwOnError: true,\n      });\n      return data;\n    },\n    /**\n     * @deprecated\n     */\n    putTagForEventHandler: async (name: string, body: any[]) => {\n      warn();\n      await EventResource.putTagForEventHandler({\n        client,\n        path: { name },\n        body,\n        throwOnError: true,\n      });\n    },\n  };\n  const healthCheckResource = {\n    doCheck: async () => {\n      warn();\n      const { data } = await HealthCheckResource.doCheck({\n        client,\n        throwOnError: true,\n      });\n      return data;\n    },\n  };\n  const metadataResource = {\n    getTaskDef: async (tasktype: string, metadata = false) => {\n      warn();\n      const { data } = await MetadataResource.getTaskDef({\n        client,\n        path: { tasktype },\n        query: { metadata },\n        throwOnError: true,\n      });\n      return data;\n    },\n    /**\n     * @deprecated\n     */\n    unregisterTaskDef: async (tasktype: string) => {\n      warn();\n      await MetadataResource.unregisterTaskDef({\n        client,\n        path: { tasktype },\n        throwOnError: true,\n      });\n    },\n    /**\n     * @deprecated\n     */\n    getAllWorkflows: async (\n      access = \"READ\",\n      metadata = false,\n      tagKey?: string,\n      tagValue?: string\n    ) => {\n      warn();\n      const { data } = await MetadataResource.getWorkflowDefs({\n        client,\n        query: { access, metadata, tagKey, tagValue },\n        throwOnError: true,\n      });\n      return data;\n    },\n    /**\n     * @deprecated\n     */\n    update: async (requestBody: any[], overwrite = true) => {\n      warn();\n      await MetadataResource.update({\n        client,\n        body: requestBody,\n        query: { overwrite },\n        throwOnError: true,\n      });\n    },\n    /**\n     * @deprecated\n     */\n    create: async (requestBody: any, overwrite = false) => {\n      warn();\n      await MetadataResource.create({\n        client,\n        body: requestBody,\n        query: { overwrite },\n        throwOnError: true,\n      });\n    },\n    /**\n     * @deprecated\n     */\n    getTaskDefs: async (\n      access = \"READ\",\n      metadata = false,\n      tagKey?: string,\n      tagValue?: string\n    ) => {\n      warn();\n      const { data } = await MetadataResource.getTaskDefs({\n        client,\n        query: { access, metadata, tagKey, tagValue },\n        throwOnError: true,\n      });\n      return data;\n    },\n    /**\n     * @deprecated\n     */\n    updateTaskDef: async (requestBody: any) => {\n      warn();\n      await MetadataResource.updateTaskDef({\n        client,\n        body: requestBody,\n        throwOnError: true,\n      });\n    },\n    /**\n     * @deprecated\n     */\n    registerTaskDef: async (requestBody: any[]) => {\n      warn();\n      await MetadataResource.registerTaskDef({\n        client,\n        body: requestBody,\n        throwOnError: true,\n      });\n    },\n    /**\n     * @deprecated\n     */\n    unregisterWorkflowDef: async (name: string, version: number) => {\n      warn();\n      await MetadataResource.unregisterWorkflowDef({\n        client,\n        path: { name, version },\n        throwOnError: true,\n      });\n    },\n    /**\n     * @deprecated\n     */\n    get: async (name: string, version?: number, metadata = false) => {\n      warn();\n      const { data } = await MetadataResource.get1({\n        client,\n        path: { name },\n        query: { version, metadata },\n        throwOnError: true,\n      });\n      return data;\n    },\n  };\n  const schedulerResource = {\n    getSchedule: async (name: string) => {\n      warn();\n      const { data } = await SchedulerResource.getSchedule({\n        client,\n        path: { name },\n        throwOnError: true,\n      });\n      return data;\n    },\n    /**\n     * @deprecated\n     */\n    deleteSchedule: async (name: string) => {\n      warn();\n      await SchedulerResource.deleteSchedule({\n        client,\n        path: { name },\n        throwOnError: true,\n      });\n    },\n    /**\n     * @deprecated\n     */\n    getNextFewSchedules: async (\n      cronExpression: string,\n      scheduleStartTime?: number,\n      scheduleEndTime?: number,\n      limit = 3\n    ) => {\n      warn();\n      const { data } = await SchedulerResource.getNextFewSchedules({\n        client,\n        query: { cronExpression, scheduleStartTime, scheduleEndTime, limit },\n        throwOnError: true,\n      });\n      return data;\n    },\n    /**\n     * @deprecated\n     */\n    pauseSchedule: async (name: string) => {\n      warn();\n      await SchedulerResource.pauseSchedule({\n        client,\n        path: { name },\n        throwOnError: true,\n      });\n    },\n    /**\n     * @deprecated\n     */\n    pauseAllSchedules: async () => {\n      warn();\n      const { data } = await SchedulerResource.pauseAllSchedules({\n        client,\n        throwOnError: true,\n      });\n      return data;\n    },\n    /**\n     * @deprecated\n     */\n    resumeSchedule: async (name: string) => {\n      warn();\n      await SchedulerResource.resumeSchedule({\n        client,\n        path: { name },\n        throwOnError: true,\n      });\n    },\n    /**\n     * @deprecated\n     */\n    requeueAllExecutionRecords: async () => {\n      warn();\n      const { data } = await SchedulerResource.requeueAllExecutionRecords({\n        client,\n        throwOnError: true,\n      });\n      return data;\n    },\n    /**\n     * @deprecated\n     */\n    resumeAllSchedules: async () => {\n      warn();\n      const { data } = await SchedulerResource.resumeAllSchedules({\n        client,\n        throwOnError: true,\n      });\n      return data;\n    },\n    /**\n     * @deprecated\n     */\n    getAllSchedules: async (workflowName?: string) => {\n      warn();\n      const { data } = await SchedulerResource.getAllSchedules({\n        client,\n        query: { workflowName },\n        throwOnError: true,\n      });\n      return data;\n    },\n    /**\n     * @deprecated\n     */\n    saveSchedule: async (requestBody: any) => {\n      warn();\n      await SchedulerResource.saveSchedule({\n        client,\n        body: requestBody,\n        throwOnError: true,\n      });\n    },\n    /**\n     * @deprecated\n     */\n    searchV21: async (\n      start?: number,\n      size = 100,\n      sort?: string,\n      freeText = \"*\",\n      query?: string\n    ) => {\n      warn();\n      const { data } = await SchedulerResource.searchV2({\n        client,\n        query: { start, size, sort, freeText, query },\n        throwOnError: true,\n      });\n      return data;\n    },\n    /**\n     * @deprecated\n     */\n    testTimeout: async () => {\n      warn();\n      const { data } = await client.get({\n        security: [\n          {\n            name: \"X-Authorization\",\n            type: \"apiKey\",\n          },\n        ],\n        url: \"/api/scheduler/test/timeout\",\n        throwOnError: true,\n      });\n      return data as any;\n    },\n  };\n\n  const tokenResource = {\n    generateToken: async (requestBody: any) => {\n      warn();\n      const { data } = await TokenResource.generateToken({\n        client,\n        body: requestBody,\n        throwOnError: true,\n      });\n      return data;\n    },\n\n    getUserInfo: async (claims = false) => {\n      warn();\n      const { data } = await TokenResource.getUserInfo({\n        client,\n        query: { claims },\n        throwOnError: true,\n      });\n      return data;\n    },\n  };\n\n  const workflowBulkResource = {\n    retry: async (requestBody: any[]) => {\n      warn();\n      const { data } = await WorkflowBulkResource.retry1({\n        client,\n        body: requestBody,\n        throwOnError: true,\n      });\n      return data;\n    },\n    /**\n     * @deprecated\n     */\n    restart: async (requestBody: any[], useLatestDefinitions = false) => {\n      warn();\n      const { data } = await WorkflowBulkResource.restart1({\n        client,\n        body: requestBody,\n        query: { useLatestDefinitions },\n        throwOnError: true,\n      });\n      return data;\n    },\n    /**\n     * @deprecated\n     */\n    terminate: async (requestBody: any[], reason?: string) => {\n      warn();\n      const { data } = await WorkflowBulkResource.terminate({\n        client,\n        body: requestBody,\n        query: { reason },\n        throwOnError: true,\n      });\n      return data;\n    },\n    /**\n     * @deprecated\n     */\n    resumeWorkflow: async (requestBody: any[]) => {\n      warn();\n      const { data } = await WorkflowBulkResource.resumeWorkflow1({\n        client,\n        body: requestBody,\n        throwOnError: true,\n      });\n      return data;\n    },\n    /**\n     * @deprecated\n     */\n    pauseWorkflow1: async (requestBody: any[]) => {\n      warn();\n      const { data } = await WorkflowBulkResource.pauseWorkflow1({\n        client,\n        body: requestBody,\n        throwOnError: true,\n      });\n      return data;\n    },\n  };\n\n  const workflowResource = {\n    getRunningWorkflow: async (\n      name: string,\n      version = 1,\n      startTime?: number,\n      endTime?: number\n    ) => {\n      warn();\n      const { data } = await WorkflowResource.getRunningWorkflow({\n        client,\n        path: { name },\n        query: { version, startTime, endTime },\n        throwOnError: true,\n      });\n      return data;\n    },\n    /**\n     * @deprecated\n     */\n    executeWorkflow: async (\n      body: any,\n      name: string,\n      version: number,\n      requestId?: string,\n      waitUntilTaskRef?: string,\n      waitForSeconds?: number,\n      consistency?: any,\n      returnStrategy?: any\n    ) => {\n      warn();\n      const { data } = await WorkflowResource.executeWorkflow({\n        client,\n        path: { name, version },\n        query: {\n          requestId,\n          waitUntilTaskRef,\n          waitForSeconds,\n          consistency,\n          returnStrategy,\n        },\n        body,\n        throwOnError: true,\n      });\n      return data;\n    },\n    /**\n     * @deprecated\n     */\n    startWorkflow: async (requestBody: any) => {\n      warn();\n      const { data } = await WorkflowResource.startWorkflow({\n        client,\n        body: requestBody,\n        throwOnError: true,\n      });\n      return data;\n    },\n    /**\n     * @deprecated\n     */\n    decide: async (workflowId: string) => {\n      warn();\n      await WorkflowResource.decide({\n        client,\n        path: { workflowId },\n        throwOnError: true,\n      });\n    },\n    /**\n     * @deprecated\n     */\n    rerun: async (workflowId: string, requestBody: any) => {\n      warn();\n      const { data } = await WorkflowResource.rerun({\n        client,\n        path: { workflowId },\n        body: requestBody,\n        throwOnError: true,\n      });\n      return data;\n    },\n    /**\n     * @deprecated\n     */\n    searchV21: async (\n      start?: number,\n      size = 100,\n      sort?: string,\n      freeText = \"*\",\n      query?: string\n    ) => {\n      warn();\n      const { data } = await client.get({\n        security: [\n          {\n            name: \"X-Authorization\",\n            type: \"apiKey\",\n          },\n        ],\n        url: \"/api/workflow/search-v2\",\n        query: { start, size, sort, freeText, query },\n        throwOnError: true,\n      });\n      return data as any;\n    },\n    /**\n     * @deprecated\n     */\n    pauseWorkflow: async (workflowId: string) => {\n      warn();\n      await WorkflowResource.pauseWorkflow({\n        client,\n        path: { workflowId },\n        throwOnError: true,\n      });\n    },\n    /**\n     * @deprecated\n     */\n    skipTaskFromWorkflow: async (\n      workflowId: string,\n      taskReferenceName: string,\n      requestBody?: any\n    ) => {\n      warn();\n      await WorkflowResource.skipTaskFromWorkflow({\n        client,\n        path: { workflowId, taskReferenceName },\n        body: requestBody,\n        throwOnError: true,\n      });\n    },\n    /**\n     * @deprecated\n     */\n    getWorkflows: async (\n      name: string,\n      requestBody: any[],\n      includeClosed = false,\n      includeTasks = false\n    ) => {\n      warn();\n      const { data } = await WorkflowResource.getWorkflows({\n        client,\n        path: { name },\n        query: { includeClosed, includeTasks },\n        body: requestBody,\n        throwOnError: true,\n      });\n      return data;\n    },\n    /**\n     * @deprecated\n     */\n    getWorkflowStatusSummary: async (\n      workflowId: string,\n      includeOutput = false,\n      includeVariables = false\n    ) => {\n      warn();\n      const { data } = await WorkflowResource.getWorkflowStatusSummary({\n        client,\n        path: { workflowId },\n        query: { includeOutput, includeVariables },\n        throwOnError: true,\n      });\n      return data;\n    },\n    /**\n     * @deprecated\n     */\n    getWorkflows1: async (\n      name: string,\n      correlationId: string,\n      includeClosed = false,\n      includeTasks = false\n    ) => {\n      warn();\n      const { data } = await WorkflowResource.getWorkflows2({\n        client,\n        path: { name, correlationId },\n        query: { includeClosed, includeTasks },\n        throwOnError: true,\n      });\n      return data;\n    },\n    /**\n     * @deprecated\n     */\n    retry1: async (workflowId: string, resumeSubworkflowTasks = false) => {\n      warn();\n      await WorkflowResource.retry({\n        client,\n        path: { workflowId },\n        query: { resumeSubworkflowTasks },\n        throwOnError: true,\n      });\n    },\n    /**\n     * @deprecated\n     */\n    getExecutionStatus: async (workflowId: string, includeTasks = true) => {\n      warn();\n      const { data } = await WorkflowResource.getExecutionStatus({\n        client,\n        path: { workflowId },\n        query: { includeTasks },\n        throwOnError: true,\n      });\n      return data;\n    },\n    /**\n     * @deprecated\n     */\n    terminate1: async (workflowId: string, reason?: string) => {\n      warn();\n      await WorkflowResource.terminate1({\n        client,\n        path: { workflowId },\n        query: { reason },\n        throwOnError: true,\n      });\n    },\n    /**\n     * @deprecated\n     */\n    resumeWorkflow: async (workflowId: string) => {\n      warn();\n      await WorkflowResource.resumeWorkflow({\n        client,\n        path: { workflowId },\n        throwOnError: true,\n      });\n    },\n    /**\n     * @deprecated\n     */\n    delete: async (workflowId: string, archiveWorkflow = true) => {\n      warn();\n      await WorkflowResource.delete1({\n        client,\n        path: { workflowId },\n        query: { archiveWorkflow },\n        throwOnError: true,\n      });\n    },\n    /**\n     * @deprecated\n     */\n    searchWorkflowsByTasks: async (\n      start?: number,\n      size = 100,\n      sort?: string,\n      freeText = \"*\",\n      query?: string\n    ) => {\n      warn();\n      const { data } = await client.get({\n        security: [\n          {\n            name: \"X-Authorization\",\n            type: \"apiKey\",\n          },\n        ],\n        url: \"/api/workflow/search-by-tasks\",\n        query: { start, size, sort, freeText, query },\n        throwOnError: true,\n      });\n      return data as any;\n    },\n    /**\n     * @deprecated\n     */\n    getExternalStorageLocation: async (\n      path: string,\n      operation: string,\n      payloadType: string\n    ) => {\n      warn();\n      const { data } = await client.get({\n        security: [\n          {\n            name: \"X-Authorization\",\n            type: \"apiKey\",\n          },\n        ],\n        url: \"/api/workflow/externalstoragelocation\",\n        query: { path, operation, payloadType },\n        throwOnError: true,\n      });\n      return data as any;\n    },\n    /**\n     * @deprecated\n     */\n    startWorkflow1: async (\n      name: string,\n      requestBody: any,\n      version?: number,\n      correlationId?: string,\n      priority?: number\n    ) => {\n      warn();\n      const { data } = await WorkflowResource.startWorkflow1({\n        client,\n        path: { name },\n        query: { version, correlationId, priority },\n        body: requestBody,\n        throwOnError: true,\n      });\n      return data;\n    },\n    /**\n     * @deprecated\n     */\n    restart1: async (workflowId: string, useLatestDefinitions = false) => {\n      warn();\n      await WorkflowResource.restart({\n        client,\n        path: { workflowId },\n        query: { useLatestDefinitions },\n        throwOnError: true,\n      });\n    },\n    /**\n     * @deprecated\n     */\n    search1: async (\n      queryId?: string,\n      start?: number,\n      size = 100,\n      sort?: string,\n      freeText = \"*\",\n      query?: string,\n      skipCache = false\n    ) => {\n      warn();\n      const { data } = await client.get({\n        security: [\n          {\n            name: \"X-Authorization\",\n            type: \"apiKey\",\n          },\n        ],\n        url: \"/api/workflow/search\",\n        query: { queryId, start, size, sort, freeText, query, skipCache },\n        throwOnError: true,\n      });\n      return data as any;\n    },\n    /**\n     * @deprecated\n     */\n    searchWorkflowsByTasksV2: async (\n      start?: number,\n      size = 100,\n      sort?: string,\n      freeText = \"*\",\n      query?: string\n    ) => {\n      warn();\n      const { data } = await client.get({\n        security: [\n          {\n            name: \"X-Authorization\",\n            type: \"apiKey\",\n          },\n        ],\n        url: \"/api/workflow/search-by-tasks-v2\",\n        query: { start, size, sort, freeText, query },\n        throwOnError: true,\n      });\n      return data as any;\n    },\n    /**\n     * @deprecated\n     */\n    resetWorkflow: async (workflowId: string) => {\n      warn();\n      await WorkflowResource.resetWorkflow({\n        client,\n        path: { workflowId },\n        throwOnError: true,\n      });\n    },\n    /**\n     * @deprecated\n     */\n    testWorkflow: async (requestBody: any) => {\n      warn();\n      const { data } = await WorkflowResource.testWorkflow({\n        client,\n        body: requestBody,\n        throwOnError: true,\n      });\n      return data;\n    },\n  };\n\n  const serviceRegistryResource = {\n    getRegisteredServices: async () => {\n      warn();\n      const { data } = await ServiceRegistryResource.getRegisteredServices({\n        client,\n        throwOnError: true,\n      });\n      return data;\n    },\n    /**\n     * @deprecated\n     */\n    removeService: async (name: string) => {\n      warn();\n      await ServiceRegistryResource.removeService({\n        client,\n        path: { name },\n        throwOnError: true,\n      });\n    },\n    /**\n     * @deprecated\n     */\n    getService: async (name: string) => {\n      warn();\n      const { data } = await ServiceRegistryResource.getService({\n        client,\n        path: { name },\n        throwOnError: true,\n      });\n      return data;\n    },\n    /**\n     * @deprecated\n     */\n    openCircuitBreaker: async (name: string) => {\n      warn();\n      const { data } = await ServiceRegistryResource.openCircuitBreaker({\n        client,\n        path: { name },\n        throwOnError: true,\n      });\n      return data;\n    },\n    /**\n     * @deprecated\n     */\n    closeCircuitBreaker: async (name: string) => {\n      warn();\n      const { data } = await ServiceRegistryResource.closeCircuitBreaker({\n        client,\n        path: { name },\n        throwOnError: true,\n      });\n      return data;\n    },\n    /**\n     * @deprecated\n     */\n    getCircuitBreakerStatus: async (name: string) => {\n      warn();\n      const { data } = await ServiceRegistryResource.getCircuitBreakerStatus({\n        client,\n        path: { name },\n        throwOnError: true,\n      });\n      return data;\n    },\n    /**\n     * @deprecated\n     */\n    addOrUpdateService: async (serviceRegistry: any) => {\n      warn();\n      await ServiceRegistryResource.addOrUpdateService({\n        client,\n        body: serviceRegistry,\n        throwOnError: true,\n      });\n    },\n    /**\n     * @deprecated\n     */\n    addOrUpdateServiceMethod: async (registryName: string, method: any) => {\n      warn();\n      await ServiceRegistryResource.addOrUpdateMethod({\n        client,\n        path: { registryName },\n        body: method,\n        throwOnError: true,\n      });\n    },\n    /**\n     * @deprecated\n     */\n    removeMethod: async (\n      registryName: string,\n      serviceName: string,\n      method: string,\n      methodType: string\n    ) => {\n      warn();\n      await ServiceRegistryResource.removeMethod({\n        client,\n        path: { registryName },\n        query: { serviceName, method, methodType },\n        throwOnError: true,\n      });\n    },\n    /**\n     * @deprecated\n     */\n    getProtoData: async (registryName: string, filename: string) => {\n      warn();\n      const { data } = await ServiceRegistryResource.getProtoData({\n        client,\n        path: { registryName, filename },\n        throwOnError: true,\n      });\n      return data;\n    },\n    /**\n     * @deprecated\n     */\n    setProtoData: async (registryName: string, filename: string, data: any) => {\n      warn();\n      await ServiceRegistryResource.setProtoData({\n        client,\n        path: { registryName, filename },\n        body: data,\n        throwOnError: true,\n      });\n    },\n    /**\n     * @deprecated\n     */\n    deleteProto: async (registryName: string, filename: string) => {\n      warn();\n      await ServiceRegistryResource.deleteProto({\n        client,\n        path: { registryName, filename },\n        throwOnError: true,\n      });\n    },\n    /**\n     * @deprecated\n     */\n    getAllProtos: async (registryName: string) => {\n      warn();\n      const { data } = await ServiceRegistryResource.getAllProtos({\n        client,\n        path: { registryName },\n        throwOnError: true,\n      });\n      return data;\n    },\n    /**\n     * @deprecated\n     */\n    discover: async (name: string, create = false) => {\n      warn();\n      const { data } = await ServiceRegistryResource.discover({\n        client,\n        path: { name },\n        query: { create },\n        throwOnError: true,\n      });\n      return data;\n    },\n  };\n\n  const humanTaskResource = {\n    getConductorTaskById: async (taskId: string) => {\n      warn();\n      const { data } = await HumanTaskResource.getConductorTaskById({\n        client,\n        path: { taskId },\n        throwOnError: true,\n      });\n      return data;\n    },\n  };\n  const humanTask = {\n    deleteTaskFromHumanTaskRecords: async (requestBody: any[]) => {\n      warn();\n      await HumanTask.deleteTaskFromHumanTaskRecords({\n        client,\n        body: requestBody,\n        throwOnError: true,\n      });\n    },\n    /**\n     * @deprecated\n     */\n    deleteTaskFromHumanTaskRecords1: async (taskId: string) => {\n      warn();\n      await HumanTask.deleteTaskFromHumanTaskRecords1({\n        client,\n        path: { taskId },\n        throwOnError: true,\n      });\n    },\n    /**\n     * @deprecated\n     */\n    search: async (requestBody: any) => {\n      warn();\n      const { data } = await HumanTask.search({\n        client,\n        body: requestBody,\n        throwOnError: true,\n      });\n      return data;\n    },\n    /**\n     * @deprecated\n     */\n    updateTaskOutputByRef: async (\n      workflowId: string,\n      taskRefName: string,\n      requestBody: any,\n      complete = false,\n      iteration?: any[]\n    ) => {\n      warn();\n      const { data } = await HumanTask.updateTaskOutputByRef({\n        client,\n        query: {\n          workflowId,\n          taskRefName,\n          complete,\n          iteration,\n        },\n        body: requestBody,\n        throwOnError: true,\n      });\n      return data as any;\n    },\n    /**\n     * @deprecated\n     */\n    getTask1: async (taskId: string) => {\n      warn();\n      const { data } = await HumanTask.getTask1({\n        client,\n        path: { taskId },\n        throwOnError: true,\n      });\n      return data;\n    },\n    /**\n     * @deprecated\n     */\n    claimTask: async (\n      taskId: string,\n      overrideAssignment = false,\n      withTemplate = false\n    ) => {\n      warn();\n      const { data } = await HumanTask.claimTask({\n        client,\n        path: { taskId },\n        query: { overrideAssignment, withTemplate },\n        throwOnError: true,\n      });\n      return data;\n    },\n    /**\n     * @deprecated\n     */\n    assignAndClaim: async (\n      taskId: string,\n      userId: string,\n      overrideAssignment = false,\n      withTemplate = false\n    ) => {\n      warn();\n      const { data } = await HumanTask.assignAndClaim({\n        client,\n        path: { taskId, userId },\n        query: { overrideAssignment, withTemplate },\n        throwOnError: true,\n      });\n      return data;\n    },\n    /**\n     * @deprecated\n     */\n    reassignTask: async (taskId: string, requestBody: any[]) => {\n      warn();\n      await HumanTask.reassignTask({\n        client,\n        path: { taskId },\n        body: requestBody,\n        throwOnError: true,\n      });\n    },\n    /**\n     * @deprecated\n     */\n    releaseTask: async (taskId: string) => {\n      warn();\n      await HumanTask.releaseTask({\n        client,\n        path: { taskId },\n        throwOnError: true,\n      });\n    },\n    /**\n     * @deprecated\n     */\n    skipTask: async (taskId: string, reason?: string) => {\n      warn();\n      await HumanTask.skipTask({\n        client,\n        path: { taskId },\n        query: { reason },\n        throwOnError: true,\n      });\n    },\n    /**\n     * @deprecated\n     */\n    updateTaskOutput: async (\n      taskId: string,\n      requestBody: any,\n      complete = false\n    ) => {\n      warn();\n      await HumanTask.updateTaskOutput({\n        client,\n        path: { taskId },\n        query: { complete },\n        body: requestBody,\n        throwOnError: true,\n      });\n    },\n    /**\n     * @deprecated\n     */\n    getAllTemplates: async (name?: string, version?: number) => {\n      warn();\n      const { data } = await UserForm.getAllTemplates({\n        client,\n        query: { name, version },\n        throwOnError: true,\n      });\n      return data;\n    },\n    /**\n     * @deprecated\n     */\n    saveTemplate: async (requestBody: any, newVersion = false) => {\n      warn();\n      const { data } = await UserForm.saveTemplate({\n        client,\n        query: { newVersion },\n        body: requestBody,\n        throwOnError: true,\n      });\n      return data;\n    },\n    /**\n     * @deprecated\n     */\n    saveTemplates: async (requestBody: any[], newVersion = false) => {\n      warn();\n      const { data } = await UserForm.saveTemplates({\n        client,\n        query: { newVersion },\n        body: requestBody,\n        throwOnError: true,\n      });\n      return data;\n    },\n    /**\n     * @deprecated\n     */\n    deleteTemplateByName: async (name: string) => {\n      warn();\n      await UserForm.deleteTemplateByName({\n        client,\n        path: { name },\n        throwOnError: true,\n      });\n    },\n    /**\n     * @deprecated\n     */\n    deleteTemplatesByNameAndVersion: async (name: string, version: number) => {\n      warn();\n      await HumanTask.deleteTemplatesByNameAndVersion({\n        client,\n        path: { name, version },\n        throwOnError: true,\n      });\n    },\n    /**\n     * @deprecated\n     */\n    getTemplateByNameAndVersion: async (name: string, version: number) => {\n      warn();\n      const { data } = await UserForm.getTemplateByNameAndVersion({\n        client,\n        path: { name, version },\n        throwOnError: true,\n      });\n      return data;\n    },\n  };\n\n  const taskResource = {\n    poll: async (tasktype: string, workerid?: string, domain?: string) => {\n      warn();\n      const { data } = await TaskResource.poll({\n        client,\n        path: { tasktype },\n        query: { workerid, domain },\n        throwOnError: true,\n      });\n      return data;\n    },\n    /**\n     * @deprecated\n     */\n    allVerbose: async () => {\n      warn();\n      const { data } = await TaskResource.allVerbose({\n        client,\n        throwOnError: true,\n      });\n      return data;\n    },\n    /**\n     * @deprecated\n     */\n    updateTask: async (\n      workflowId: string,\n      taskRefName: string,\n      status:\n        | \"IN_PROGRESS\"\n        | \"FAILED\"\n        | \"FAILED_WITH_TERMINAL_ERROR\"\n        | \"COMPLETED\",\n      requestBody: any\n    ) => {\n      warn();\n      const { data } = await TaskResource.updateTask1({\n        client,\n        path: { workflowId, taskRefName, status },\n        body: requestBody,\n        throwOnError: true,\n      });\n      return data;\n    },\n    /**\n     * @deprecated\n     */\n    getTask: async (taskId: string) => {\n      warn();\n      const { data } = await TaskResource.getTask({\n        client,\n        path: { taskId },\n        throwOnError: true,\n      });\n      return data;\n    },\n    /**\n     * @deprecated\n     */\n    all: async () => {\n      warn();\n      const { data } = await TaskResource.all({\n        client,\n        throwOnError: true,\n      });\n      return data;\n    },\n    /**\n     * @deprecated\n     */\n    requeuePendingTask: async (taskType: string) => {\n      warn();\n      const { data } = await TaskResource.requeuePendingTask({\n        client,\n        path: { taskType },\n        throwOnError: true,\n      });\n      return data;\n    },\n    /**\n     * @deprecated\n     */\n    search: async (\n      start?: number,\n      size = 100,\n      sort?: string,\n      freeText = \"*\",\n      query?: string\n    ) => {\n      warn();\n      const { data } = await TaskResource.search2({\n        client,\n        query: { start, size, sort, freeText, query },\n        throwOnError: true,\n      });\n      return data;\n    },\n    /**\n     * @deprecated\n     */\n    searchV22: async (\n      start?: number,\n      size = 100,\n      sort?: string,\n      freeText = \"*\",\n      query?: string\n    ) => {\n      warn();\n      const { data } = await client.get({\n        security: [\n          {\n            name: \"X-Authorization\",\n            type: \"apiKey\",\n          },\n        ],\n        url: \"/api/tasks/search-v2\",\n        query: { start, size, sort, freeText, query },\n        throwOnError: true,\n      });\n      return data as any;\n    },\n    /**\n     * @deprecated\n     */\n    getPollData: async (taskType: string) => {\n      warn();\n      const { data } = await TaskResource.getPollData({\n        client,\n        query: { taskType },\n        throwOnError: true,\n      });\n      return data;\n    },\n    /**\n     * @deprecated\n     */\n    getTaskLogs: async (taskId: string) => {\n      warn();\n      const { data } = await TaskResource.getTaskLogs({\n        client,\n        path: { taskId },\n        throwOnError: true,\n      });\n      return data;\n    },\n    /**\n     * @deprecated\n     */\n    log: async (taskId: string, requestBody: string) => {\n      warn();\n      await TaskResource.log({\n        client,\n        path: { taskId },\n        body: requestBody,\n        throwOnError: true,\n      });\n    },\n    /**\n     * @deprecated\n     */\n    getAllPollData: async () => {\n      warn();\n      const { data } = await TaskResource.getAllPollData({\n        client,\n        throwOnError: true,\n      });\n      return data;\n    },\n    /**\n     * @deprecated\n     */\n    batchPoll: async (\n      tasktype: string,\n      workerid?: string,\n      domain?: string,\n      count = 1,\n      timeout = 100\n    ) => {\n      warn();\n      const { data } = await TaskResource.batchPoll({\n        client,\n        path: { tasktype },\n        query: { workerid, domain, count, timeout },\n        throwOnError: true,\n      });\n      return data;\n    },\n    /**\n     * @deprecated\n     */\n    updateTask1: async (requestBody: any) => {\n      warn();\n      const { data } = await TaskResource.updateTask({\n        client,\n        body: requestBody,\n        throwOnError: true,\n      });\n      return data;\n    },\n    /**\n     * @deprecated\n     */\n    size1: async (taskType?: string[]) => {\n      warn();\n      const { data } = await TaskResource.size({\n        client,\n        query: { taskType },\n        throwOnError: true,\n      });\n      return data;\n    },\n    /**\n     * @deprecated\n     */\n    getExternalStorageLocation1: async (\n      path: string,\n      operation: string,\n      payloadType: string\n    ) => {\n      warn();\n      const { data } = await client.get({\n        security: [\n          {\n            name: \"X-Authorization\",\n            type: \"apiKey\",\n          },\n        ],\n        url: \"/api/tasks/externalstoragelocation\",\n        query: { path, operation, payloadType },\n        throwOnError: true,\n      });\n      return data as any;\n    },\n    /**\n     * @deprecated\n     */\n    updateTaskSync: async (\n      workflowId: string,\n      taskRefName: string,\n      status: any,\n      output: any,\n      workerId?: string\n    ) => {\n      warn();\n      const { data } = await TaskResource.updateTaskSync({\n        client,\n        path: { workflowId, taskRefName, status },\n        query: { workerid: workerId },\n        body: output,\n        throwOnError: true,\n      });\n      return data;\n    },\n    /**\n     * @deprecated\n     */\n    signal: async (\n      workflowId: string,\n      status: any,\n      output: any,\n      returnStrategy: any = \"TARGET_WORKFLOW\"\n    ) => {\n      warn();\n      const { data } = await TaskResource.signalWorkflowTaskSync({\n        client,\n        path: { workflowId, status },\n        query: { returnStrategy },\n        body: output,\n        throwOnError: true,\n      });\n      return data;\n    },\n    /**\n     * @deprecated\n     */\n    signalAsync: async (workflowId: string, status: any, output: any) => {\n      warn();\n      const { data } = await TaskResource.signalWorkflowTaskASync({\n        client,\n        path: { workflowId, status },\n        body: output,\n        throwOnError: true,\n      });\n      return data as SignalResponse;\n    },\n  };\n\n  return {\n    ...client,\n    eventResource,\n    healthCheckResource,\n    metadataResource,\n    schedulerResource,\n    tokenResource,\n    workflowBulkResource,\n    workflowResource,\n    serviceRegistryResource,\n    humanTaskResource,\n    humanTask,\n    taskResource,\n  };\n};\n","import {\n  handleAuth,\n  resolveFetchFn,\n  resolveOrkesConfig,\n  wrapFetchWithRetry,\n} from \"./helpers\";\nimport type { OrkesApiConfig } from \"../types\";\nimport { createClient } from \"../../open-api/generated/client\";\nimport { addResourcesBackwardCompatibility } from \"./helpers/addResourcesBackwardCompatibility\";\n\n/**\n * Creates a Conductor client with authentication and configuration\n *\n * @param config (optional) OrkesApiConfig with keyId and keySecret\n * @param customFetch (optional) custom fetch function\n * @returns Client\n */\nexport const createConductorClient = async (\n  config?: OrkesApiConfig,\n  customFetch?: typeof fetch\n) => {\n  const {\n    serverUrl,\n    keyId,\n    keySecret,\n    maxHttp2Connections,\n    refreshTokenInterval,\n    logger,\n    requestTimeoutMs,\n    connectTimeoutMs,\n    tlsCertPath,\n    tlsKeyPath,\n    tlsCaPath,\n    proxyUrl,\n    tlsInsecure,\n    disableHttp2,\n  } = resolveOrkesConfig(config);\n\n  if (!serverUrl) throw new Error(\"Conductor server URL is not set\");\n\n  const baseFetchFn = await resolveFetchFn(customFetch, {\n    maxHttpConnections: maxHttp2Connections,\n    connectTimeoutMs,\n    tlsCertPath,\n    tlsKeyPath,\n    tlsCaPath,\n    proxyUrl,\n    tlsInsecure,\n    disableHttp2,\n  });\n\n  // Start with retry + timeout on fetch (no auth failure callback yet)\n  const openApiClient = createClient({\n    baseUrl: serverUrl,\n    fetch: wrapFetchWithRetry(baseFetchFn, { requestTimeoutMs }),\n    throwOnError: true,\n  });\n\n  let authResult: Awaited<ReturnType<typeof handleAuth>> | undefined;\n  if (keyId && keySecret) {\n    authResult = await handleAuth(\n      openApiClient,\n      keyId,\n      keySecret,\n      refreshTokenInterval,\n      logger\n    );\n  }\n\n  // Upgrade fetch with auth failure callback now that auth is set up.\n  // This replaces the initial wrapper, adding onAuthFailure for 401/403 retry.\n  if (authResult) {\n    openApiClient.setConfig({\n      fetch: wrapFetchWithRetry(baseFetchFn, {\n        onAuthFailure: authResult.refreshToken,\n        requestTimeoutMs,\n      }),\n    });\n  }\n\n  // Legacy compatibility: Adds resource-based API methods for backward compatibility.\n  // The modern API is available directly on openApiClient, but legacy methods are maintained.\n  return addResourcesBackwardCompatibility(openApiClient);\n};\n","import { ApplicationResource } from \"../../../open-api/generated\";\nimport { handleSdkError } from \"../../helpers/errors\";\nimport type {\n  Client,\n  Tag,\n  ExtendedConductorApplication,\n  AccessKey,\n  AccessKeyInfo,\n  ApplicationRole,\n} from \"../../../open-api\";\n\nexport class ApplicationClient {\n  public readonly _client: Client;\n\n  constructor(client: Client) {\n    this._client = client;\n  }\n\n  /**\n   * Get all applications\n   * @returns {Promise<ExtendedConductorApplication[]>}\n   * @throws {ConductorSdkError}\n   */\n  public async getAllApplications(): Promise<ExtendedConductorApplication[]> {\n    try {\n      const { data } = await ApplicationResource.listApplications({\n        client: this._client,\n        throwOnError: true,\n      });\n\n      return data as ExtendedConductorApplication[]; // TODO: remove cast after OpenApi spec type update\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to get all applications`);\n    }\n  }\n\n  /**\n   * Create an application\n   * @param {string} applicationName\n   * @returns {Promise<ExtendedConductorApplication>}\n   * @throws {ConductorSdkError}\n   */\n  public async createApplication(\n    applicationName: string\n  ): Promise<ExtendedConductorApplication> {\n    try {\n      const { data } = await ApplicationResource.createApplication({\n        body: { name: applicationName },\n        client: this._client,\n        throwOnError: true,\n      });\n\n      return data as unknown as ExtendedConductorApplication; // TODO: remove cast after OpenApi spec type update\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to create application`);\n    }\n  }\n\n  /**\n   * Get application by access key id\n   * @param {string} accessKeyId\n   * @returns {Promise<ExtendedConductorApplication>}\n   * @throws {ConductorSdkError}\n   */\n  public async getAppByAccessKeyId(\n    accessKeyId: string\n  ): Promise<ExtendedConductorApplication> {\n    try {\n      const { data } = await ApplicationResource.getAppByAccessKeyId({\n        path: { accessKeyId },\n        client: this._client,\n        throwOnError: true,\n      });\n\n      return data as unknown as ExtendedConductorApplication; // TODO: remove cast after OpenApi spec type update\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to get application by access key id: ${accessKeyId}`\n      );\n    }\n  }\n\n  /**\n   * Delete an access key\n   * @param {string} applicationId\n   * @param {string} keyId\n   * @returns {Promise<void>}\n   * @throws {ConductorSdkError}\n   */\n  public async deleteAccessKey(\n    applicationId: string,\n    keyId: string\n  ): Promise<void> {\n    try {\n      await ApplicationResource.deleteAccessKey({\n        path: { applicationId, keyId },\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to delete access key ${keyId} for application ${applicationId}`\n      );\n    }\n  }\n\n  /**\n   * Toggle the status of an access key\n   * @param {string} applicationId\n   * @param {string} keyId\n   * @returns {Promise<AccessKeyInfo>}\n   * @throws {ConductorSdkError}\n   */\n  public async toggleAccessKeyStatus(\n    applicationId: string,\n    keyId: string\n  ): Promise<AccessKeyInfo> {\n    try {\n      const { data } = await ApplicationResource.toggleAccessKeyStatus({\n        path: { applicationId, keyId },\n        client: this._client,\n        throwOnError: true,\n      });\n\n      return data as unknown as AccessKeyInfo; // TODO: remove cast after OpenApi spec type update\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to toggle access key status ${keyId} for application ${applicationId}`\n      );\n    }\n  }\n\n  /**\n   * Remove role from application user\n   * @param {string} applicationId\n   * @param {string} role\n   * @returns {Promise<void>}\n   * @throws {ConductorSdkError}\n   */\n  public async removeRoleFromApplicationUser(\n    applicationId: string,\n    role: string\n  ): Promise<void> {\n    try {\n      await ApplicationResource.removeRoleFromApplicationUser({\n        path: { applicationId, role },\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to remove role ${role} from application user ${applicationId}`\n      );\n    }\n  }\n\n  /**\n   * Add role to application\n   * @param {string} applicationId\n   * @param {ApplicationRole} role\n   * @returns {Promise<void>}\n   * @throws {ConductorSdkError}\n   */\n  public async addApplicationRole(\n    applicationId: string,\n    role: ApplicationRole\n  ): Promise<void> {\n    try {\n      await ApplicationResource.addRoleToApplicationUser({\n        path: { applicationId, role },\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to add role ${role} to application user ${applicationId}`\n      );\n    }\n  }\n\n  /**\n   * Delete an application\n   * @param {string} applicationId\n   * @returns {Promise<void>}\n   * @throws {ConductorSdkError}\n   */\n  public async deleteApplication(applicationId: string): Promise<void> {\n    try {\n      await ApplicationResource.deleteApplication({\n        path: { id: applicationId },\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to delete application: ${applicationId}`);\n    }\n  }\n\n  /**\n   * Get an application by id\n   * @param {string} applicationId\n   * @returns {Promise<ExtendedConductorApplication>}\n   * @throws {ConductorSdkError}\n   */\n  public async getApplication(\n    applicationId: string\n  ): Promise<ExtendedConductorApplication> {\n    try {\n      const { data } = await ApplicationResource.getApplication({\n        path: { id: applicationId },\n        client: this._client,\n        throwOnError: true,\n      });\n\n      return data as unknown as ExtendedConductorApplication; // TODO: remove cast after OpenApi spec type update\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to get application: ${applicationId}`);\n    }\n  }\n\n  /**\n   * Update an application\n   * @param {string} applicationId\n   * @param {string} newApplicationName\n   * @returns {Promise<ExtendedConductorApplication>}\n   * @throws {ConductorSdkError}\n   */\n  public async updateApplication(\n    applicationId: string,\n    newApplicationName: string\n  ): Promise<ExtendedConductorApplication> {\n    try {\n      const { data } = await ApplicationResource.updateApplication({\n        path: { id: applicationId },\n        body: { name: newApplicationName },\n        client: this._client,\n        throwOnError: true,\n      });\n\n      return data as unknown as ExtendedConductorApplication; // TODO: remove cast after OpenApi spec type update\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to update application ${applicationId}`);\n    }\n  }\n\n  /**\n   * Get application's access keys\n   * @param {string} applicationId\n   * @returns {Promise<AccessKeyInfo[]>}\n   * @throws {ConductorSdkError}\n   */\n  public async getAccessKeys(applicationId: string): Promise<AccessKeyInfo[]> {\n    try {\n      const { data } = await ApplicationResource.getAccessKeys({\n        path: { id: applicationId },\n        client: this._client,\n        throwOnError: true,\n      });\n\n      return data as unknown as AccessKeyInfo[]; // TODO: remove cast after OpenApi spec update\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to get access keys for application: ${applicationId}`\n      );\n    }\n  }\n\n  /**\n   * Create an access key for an application\n   * @param {string} applicationId\n   * @returns {Promise<AccessKey>}\n   * @throws {ConductorSdkError}\n   */\n  public async createAccessKey(applicationId: string): Promise<AccessKey> {\n    try {\n      const { data } = await ApplicationResource.createAccessKey({\n        path: { id: applicationId },\n        client: this._client,\n        throwOnError: true,\n      });\n\n      return data as unknown as AccessKey; // TODO: remove cast after OpenApi spec update\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to create access key for application: ${applicationId}`\n      );\n    }\n  }\n\n  /**\n   * Delete application tags\n   * @param {string} applicationId\n   * @param {Tag[]} tags\n   * @returns {Promise<void>}\n   * @throws {ConductorSdkError}\n   */\n  public async deleteApplicationTags(\n    applicationId: string,\n    tags: Tag[]\n  ): Promise<void> {\n    try {\n      await ApplicationResource.deleteTagForApplication({\n        path: { id: applicationId },\n        body: tags,\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to delete tags for application: ${applicationId}`\n      );\n    }\n  }\n\n  /**\n   * Delete a single application tag\n   * @param {string} applicationId\n   * @param {Tag} tag\n   * @returns {Promise<void>}\n   * @throws {ConductorSdkError}\n   */\n  public async deleteApplicationTag(\n    applicationId: string,\n    tag: Tag\n  ): Promise<void> {\n    try {\n      await ApplicationResource.deleteTagForApplication({\n        path: { id: applicationId },\n        body: [tag],\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to delete a tag for application: ${applicationId}`\n      );\n    }\n  }\n\n  /**\n   * Get application tags\n   * @param {string} applicationId\n   * @returns {Promise<Tag[]>}\n   * @throws {ConductorSdkError}\n   */\n  public async getApplicationTags(applicationId: string): Promise<Tag[]> {\n    try {\n      const { data } = await ApplicationResource.getTagsForApplication({\n        path: { id: applicationId },\n        client: this._client,\n        throwOnError: true,\n      });\n\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to get tags for application: ${applicationId}`\n      );\n    }\n  }\n\n  /**\n   * Add application tags\n   * @param {string} applicationId\n   * @param {Tag[]} tags\n   * @returns {Promise<void>}\n   * @throws {ConductorSdkError}\n   */\n  public async addApplicationTags(\n    applicationId: string,\n    tags: Tag[]\n  ): Promise<void> {\n    try {\n      await ApplicationResource.putTagForApplication({\n        path: { id: applicationId },\n        body: tags,\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to add application tags: ${applicationId}`);\n    }\n  }\n\n  /**\n   * Add a single application tag\n   * @param {string} applicationId\n   * @param {Tag} tag\n   * @returns {Promise<void>}\n   * @throws {ConductorSdkError}\n   */\n  public async addApplicationTag(\n    applicationId: string,\n    tag: Tag\n  ): Promise<void> {\n    try {\n      await ApplicationResource.putTagForApplication({\n        path: { id: applicationId },\n        body: [tag],\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to add an application tag: ${applicationId}`\n      );\n    }\n  }\n}\n","import type {\n  Client,\n  ExtendedConductorUser,\n  ExtendedGroup,\n} from \"../../../open-api\";\nimport type {\n  AuthorizationRequest,\n  GrantedAccessResponse,\n  UpsertGroupRequest,\n  UpsertUserRequest,\n} from \"../../../open-api/generated\";\nimport {\n  AuthorizationResource,\n  GroupResource,\n  UserResource,\n} from \"../../../open-api/generated\";\nimport { handleSdkError } from \"../../helpers/errors\";\n\nexport class AuthorizationClient {\n  public readonly _client: Client;\n\n  constructor(client: Client) {\n    this._client = client;\n  }\n\n  // ==================== Permission Management ====================\n\n  /**\n   * Grant permissions to a subject for a target\n   * @param request - The authorization request\n   */\n  public async grantPermissions(\n    request: AuthorizationRequest\n  ): Promise<void> {\n    try {\n      await AuthorizationResource.grantPermissions({\n        body: request,\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(error, \"Failed to grant permissions\");\n    }\n  }\n\n  /**\n   * Get permissions for a resource\n   * @param type - The resource type\n   * @param id - The resource ID\n   * @returns The permissions object\n   */\n  public async getPermissions(\n    type:\n      | \"WORKFLOW\"\n      | \"WORKFLOW_DEF\"\n      | \"WORKFLOW_SCHEDULE\"\n      | \"EVENT_HANDLER\"\n      | \"TASK_DEF\"\n      | \"TASK_REF_NAME\"\n      | \"TASK_ID\"\n      | \"APPLICATION\"\n      | \"USER\"\n      | \"SECRET_NAME\"\n      | \"ENV_VARIABLE\"\n      | \"TAG\"\n      | \"DOMAIN\"\n      | \"INTEGRATION_PROVIDER\"\n      | \"INTEGRATION\"\n      | \"PROMPT\"\n      | \"USER_FORM_TEMPLATE\"\n      | \"SCHEMA\"\n      | \"CLUSTER_CONFIG\"\n      | \"WEBHOOK\",\n    id: string\n  ): Promise<Record<string, unknown>> {\n    try {\n      const { data } = await AuthorizationResource.getPermissions({\n        path: { type, id },\n        client: this._client,\n        throwOnError: true,\n      });\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to get permissions for ${type} '${id}'`);\n    }\n  }\n\n  /**\n   * Remove permissions from a subject for a target\n   * @param request - The authorization request\n   */\n  public async removePermissions(\n    request: AuthorizationRequest\n  ): Promise<void> {\n    try {\n      await AuthorizationResource.removePermissions({\n        body: request,\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(error, \"Failed to remove permissions\");\n    }\n  }\n\n  // ==================== User Management ====================\n\n  /**\n   * Create or update a user\n   * @param id - The user ID\n   * @param request - The upsert user request\n   * @returns The user object\n   */\n  public async upsertUser(\n    id: string,\n    request: UpsertUserRequest\n  ): Promise<ExtendedConductorUser> {\n    try {\n      const { data } = await UserResource.upsertUser({\n        path: { id },\n        body: request,\n        client: this._client,\n        throwOnError: true,\n      });\n      return data as ExtendedConductorUser;\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to upsert user '${id}'`);\n    }\n  }\n\n  /**\n   * Get a user by ID\n   * @param id - The user ID\n   * @returns The user object\n   */\n  public async getUser(id: string): Promise<ExtendedConductorUser> {\n    try {\n      const { data } = await UserResource.getUser({\n        path: { id },\n        client: this._client,\n        throwOnError: true,\n      });\n      return data as ExtendedConductorUser;\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to get user '${id}'`);\n    }\n  }\n\n  /**\n   * List all users\n   * @param apps - Whether to include application users\n   * @returns Array of users\n   */\n  public async listUsers(apps = false): Promise<ExtendedConductorUser[]> {\n    try {\n      const { data } = await UserResource.listUsers({\n        query: { apps },\n        client: this._client,\n        throwOnError: true,\n      });\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(error, \"Failed to list users\");\n    }\n  }\n\n  /**\n   * Delete a user\n   * @param id - The user ID\n   */\n  public async deleteUser(id: string): Promise<void> {\n    try {\n      await UserResource.deleteUser({\n        path: { id },\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to delete user '${id}'`);\n    }\n  }\n\n  /**\n   * Check permissions for a user\n   * @param userId - The user ID\n   * @param type - The resource type\n   * @param id - The resource ID\n   * @returns The permissions check result\n   */\n  public async checkPermissions(\n    userId: string,\n    type: string,\n    id: string\n  ): Promise<Record<string, unknown>> {\n    try {\n      const { data } = await UserResource.checkPermissions({\n        path: { userId },\n        query: { type, id },\n        client: this._client,\n        throwOnError: true,\n      });\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to check permissions for user '${userId}'`\n      );\n    }\n  }\n\n  /**\n   * Get granted permissions for a user\n   * @param userId - The user ID\n   * @returns The granted permissions\n   */\n  public async getGrantedPermissionsForUser(\n    userId: string\n  ): Promise<GrantedAccessResponse> {\n    try {\n      const { data } = await UserResource.getGrantedPermissions({\n        path: { userId },\n        client: this._client,\n        throwOnError: true,\n      });\n      return data as GrantedAccessResponse;\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to get granted permissions for user '${userId}'`\n      );\n    }\n  }\n\n  // ==================== Group Management ====================\n\n  /**\n   * Create or update a group\n   * @param id - The group ID\n   * @param request - The upsert group request\n   * @returns The group object\n   */\n  public async upsertGroup(\n    id: string,\n    request: UpsertGroupRequest\n  ): Promise<ExtendedGroup> {\n    try {\n      const { data } = await GroupResource.upsertGroup({\n        path: { id },\n        body: request,\n        client: this._client,\n        throwOnError: true,\n      });\n      return data as ExtendedGroup;\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to upsert group '${id}'`);\n    }\n  }\n\n  /**\n   * Get a group by ID\n   * @param id - The group ID\n   * @returns The group object\n   */\n  public async getGroup(id: string): Promise<ExtendedGroup> {\n    try {\n      const { data } = await GroupResource.getGroup({\n        path: { id },\n        client: this._client,\n        throwOnError: true,\n      });\n      return data as ExtendedGroup;\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to get group '${id}'`);\n    }\n  }\n\n  /**\n   * List all groups\n   * @returns Array of groups\n   */\n  public async listGroups(): Promise<ExtendedGroup[]> {\n    try {\n      const { data } = await GroupResource.listGroups({\n        client: this._client,\n        throwOnError: true,\n      });\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(error, \"Failed to list groups\");\n    }\n  }\n\n  /**\n   * Delete a group\n   * @param id - The group ID\n   */\n  public async deleteGroup(id: string): Promise<void> {\n    try {\n      await GroupResource.deleteGroup({\n        path: { id },\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to delete group '${id}'`);\n    }\n  }\n\n  /**\n   * Add a user to a group\n   * @param groupId - The group ID\n   * @param userId - The user ID\n   */\n  public async addUserToGroup(\n    groupId: string,\n    userId: string\n  ): Promise<void> {\n    try {\n      await GroupResource.addUserToGroup({\n        path: { groupId, userId },\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to add user '${userId}' to group '${groupId}'`\n      );\n    }\n  }\n\n  /**\n   * Add multiple users to a group\n   * @param groupId - The group ID\n   * @param userIds - Array of user IDs\n   */\n  public async addUsersToGroup(\n    groupId: string,\n    userIds: string[]\n  ): Promise<void> {\n    try {\n      await GroupResource.addUsersToGroup({\n        path: { groupId },\n        body: userIds,\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to add users to group '${groupId}'`);\n    }\n  }\n\n  /**\n   * Get users in a group\n   * @param id - The group ID\n   * @returns The users in the group\n   */\n  public async getUsersInGroup(\n    id: string\n  ): Promise<ExtendedConductorUser[]> {\n    try {\n      const { data } = await GroupResource.getUsersInGroup({\n        path: { id },\n        client: this._client,\n        throwOnError: true,\n      });\n      return data as unknown as ExtendedConductorUser[];\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to get users in group '${id}'`);\n    }\n  }\n\n  /**\n   * Remove a user from a group\n   * @param groupId - The group ID\n   * @param userId - The user ID\n   */\n  public async removeUserFromGroup(\n    groupId: string,\n    userId: string\n  ): Promise<void> {\n    try {\n      await GroupResource.removeUserFromGroup({\n        path: { groupId, userId },\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to remove user '${userId}' from group '${groupId}'`\n      );\n    }\n  }\n\n  /**\n   * Remove multiple users from a group\n   * @param groupId - The group ID\n   * @param userIds - Array of user IDs\n   */\n  public async removeUsersFromGroup(\n    groupId: string,\n    userIds: string[]\n  ): Promise<void> {\n    try {\n      await GroupResource.removeUsersFromGroup({\n        path: { groupId },\n        body: userIds,\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to remove users from group '${groupId}'`\n      );\n    }\n  }\n\n  /**\n   * Get granted permissions for a group\n   * @param groupId - The group ID\n   * @returns The granted access response\n   */\n  public async getGrantedPermissionsForGroup(\n    groupId: string\n  ): Promise<GrantedAccessResponse> {\n    try {\n      const { data } = await GroupResource.getGrantedPermissions1({\n        path: { groupId },\n        client: this._client,\n        throwOnError: true,\n      });\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to get granted permissions for group '${groupId}'`\n      );\n    }\n  }\n}\n","import {\n  EventResource,\n  EventExecutionResource,\n  EventMessageResource,\n} from \"../../../open-api/generated\";\nimport { handleSdkError } from \"../../helpers/errors\";\nimport type {\n  Client,\n  EventHandler,\n  ExtendedEventExecution,\n  EventMessage,\n  SearchResultHandledEventResponse,\n  Tag,\n  ConnectivityTestInput,\n  ConnectivityTestResult,\n} from \"../../../open-api\";\n\nexport class EventClient {\n  public readonly _client: Client;\n\n  constructor(client: Client) {\n    this._client = client;\n  }\n\n  /**\n   * Get all the event handlers\n   * @returns {Promise<EventHandler[]>}\n   * @throws {ConductorSdkError}\n   */\n  public async getAllEventHandlers(): Promise<EventHandler[]> {\n    try {\n      const { data } = await EventResource.getEventHandlers({\n        client: this._client,\n        throwOnError: true,\n      });\n\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to get all event handlers`);\n    }\n  }\n\n  /**\n   * Add event handlers\n   * @param {EventHandler[]} eventHandlers\n   * @returns {Promise<void>}\n   * @throws {ConductorSdkError}\n   */\n  public async addEventHandlers(eventHandlers: EventHandler[]): Promise<void> {\n    try {\n      await EventResource.addEventHandler({\n        body: eventHandlers,\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to add event handlers`);\n    }\n  }\n\n  /**\n   * Add an event handler\n   * @param {EventHandler} eventHandler\n   * @returns {Promise<void>}\n   * @throws {ConductorSdkError}\n   */\n  public async addEventHandler(eventHandler: EventHandler): Promise<void> {\n    try {\n      await EventResource.addEventHandler({\n        body: [eventHandler],\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to add event handler`);\n    }\n  }\n\n  /**\n   * Update an event handler\n   * @param {EventHandler} eventHandler\n   * @returns {Promise<void>}\n   * @throws {ConductorSdkError}\n   */\n  public async updateEventHandler(eventHandler: EventHandler): Promise<void> {\n    try {\n      await EventResource.updateEventHandler({\n        body: eventHandler,\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to update event handler`);\n    }\n  }\n\n  /**\n   * Handle an incoming event\n   * @param {Record<string, string>} data\n   * @returns {Promise<void>}\n   * @throws {ConductorSdkError}\n   */\n  public async handleIncomingEvent(\n    data: Record<string, string>\n  ): Promise<void> {\n    try {\n      await EventResource.handleIncomingEvent({\n        body: data,\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to handle incoming event`);\n    }\n  }\n\n  /**\n   * Get an event handler by name\n   * @param {string} eventHandlerName\n   * @returns {Promise<EventHandler>}\n   * @throws {ConductorSdkError}\n   */\n  public async getEventHandlerByName(\n    eventHandlerName: string\n  ): Promise<EventHandler> {\n    try {\n      const { response, data } = await EventResource.getEventHandlerByName({\n        client: this._client,\n        throwOnError: true,\n        path: { name: eventHandlerName },\n      });\n\n      if (response.headers.get(\"content-length\") === \"0\") {\n        throw new Error(\"Response is empty\");\n      }\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to get event handler by name ${eventHandlerName}`\n      );\n    }\n  }\n\n  /**\n   * Get all queue configs\n   * @returns {Promise<Record<string, string>>}\n   * @throws {ConductorSdkError}\n   */\n  public async getAllQueueConfigs(): Promise<Record<string, string>> {\n    try {\n      const { data } = await EventResource.getQueueNames({\n        client: this._client,\n        throwOnError: true,\n      });\n\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to get all queue configs`);\n    }\n  }\n\n  /**\n   * Delete queue config\n   * @param {string} queueType\n   * @param {string} queueName\n   * @returns {Promise<void>}\n   * @throws {ConductorSdkError}\n   */\n  public async deleteQueueConfig(\n    queueType: string,\n    queueName: string\n  ): Promise<void> {\n    try {\n      await EventResource.deleteQueueConfig({\n        path: { queueType, queueName },\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to delete queue config ${queueType} ${queueName}`\n      );\n    }\n  }\n\n  /**\n   * Get queue config\n   * @param {string} queueType\n   * @param {string} queueName\n   * @returns {Promise<Record<string, unknown>>}\n   * @throws {ConductorSdkError}\n   */\n  public async getQueueConfig(\n    queueType: string,\n    queueName: string\n  ): Promise<Record<string, unknown>> {\n    try {\n      const { data } = await EventResource.getQueueConfig({\n        path: { queueType, queueName },\n        client: this._client,\n        throwOnError: true,\n      });\n\n      if (Object.keys(data).length === 0) {\n        throw new Error(\"Response is empty\");\n      }\n\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to get queue config`);\n    }\n  }\n\n  /**\n   * Get event handlers for a given event\n   * @param {string} event\n   * @param {boolean} [activeOnly=false] Only return active handlers.\n   * @returns {Promise<EventHandler[]>}\n   * @throws {ConductorSdkError}\n   */\n  public async getEventHandlersForEvent(\n    event: string,\n    activeOnly = false\n  ): Promise<EventHandler[]> {\n    try {\n      const { data } = await EventResource.getEventHandlersForEvent({\n        client: this._client,\n        throwOnError: true,\n        path: { event },\n        query: { activeOnly },\n      });\n\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to get event handlers for event: ${event}`);\n    }\n  }\n\n  /**\n   * Remove an event handler by name\n   * @param {string} name\n   * @returns {Promise<void>}\n   * @throws {ConductorSdkError}\n   */\n  public async removeEventHandler(name: string): Promise<void> {\n    try {\n      await EventResource.removeEventHandlerStatus({\n        client: this._client,\n        throwOnError: true,\n        path: { name },\n      });\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to remove event handler: ${name}`);\n    }\n  }\n\n  /**\n   * Get tags for an event handler\n   * @param {string} name\n   * @returns {Promise<Tag[]>}\n   * @throws {ConductorSdkError}\n   */\n  public async getTagsForEventHandler(name: string): Promise<Tag[]> {\n    try {\n      const { data } = await EventResource.getTagsForEventHandler({\n        client: this._client,\n        throwOnError: true,\n        path: { name },\n      });\n\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to get tags for event handler: ${name}`);\n    }\n  }\n\n  /**\n   * Put tags for an event handler\n   * @param {string} name\n   * @param {Tag[]} tags\n   * @returns {Promise<void>}\n   * @throws {ConductorSdkError}\n   */\n  public async putTagForEventHandler(name: string, tags: Tag[]): Promise<void> {\n    try {\n      await EventResource.putTagForEventHandler({\n        client: this._client,\n        throwOnError: true,\n        path: { name },\n        body: tags,\n      });\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to put tags for event handler: ${name}`);\n    }\n  }\n\n  /**\n   * Delete tags for an event handler\n   * @param {string} name\n   * @param {Tag[]} tags\n   * @returns {Promise<void>}\n   * @throws {ConductorSdkError}\n   */\n  public async deleteTagsForEventHandler(\n    name: string,\n    tags: Tag[]\n  ): Promise<void> {\n    try {\n      await EventResource.deleteTagForEventHandler({\n        client: this._client,\n        throwOnError: true,\n        path: { name },\n        body: tags,\n      });\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to delete tags for an event handler: ${name}`\n      );\n    }\n  }\n\n  /**\n   * Delete a tag for an event handler\n   * @param {string} name\n   * @param {Tag} tag\n   * @returns {Promise<void>}\n   * @throws {ConductorSdkError}\n   */\n  public async deleteTagForEventHandler(name: string, tag: Tag): Promise<void> {\n    try {\n      await EventResource.deleteTagForEventHandler({\n        client: this._client,\n        throwOnError: true,\n        path: { name },\n        body: [tag],\n      });\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to delete a tag for an event handler: ${name}`\n      );\n    }\n  }\n\n  /**\n   * Test connectivity for a given queue using a workflow with EVENT task and an EventHandler\n   * @param {ConnectivityTestInput} input\n   * @returns {Promise<ConnectivityTestResult>}\n   * @throws {ConductorSdkError}\n   */\n  public async testConnectivity(\n    input: ConnectivityTestInput\n  ): Promise<ConnectivityTestResult> {\n    try {\n      const { data } = await EventResource.testConnectivity({\n        client: this._client,\n        throwOnError: true,\n        body: input,\n      });\n\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to test connectivity`);\n    }\n  }\n\n  /**\n   * Create or update queue config by name\n   * @deprecated Prefer server's newer endpoints if available\n   * @param {string} queueType\n   * @param {string} queueName\n   * @param {string} config\n   * @returns {Promise<void>}\n   * @throws {ConductorSdkError}\n   */\n  public async putQueueConfig(\n    queueType: string,\n    queueName: string,\n    config: string\n  ): Promise<void> {\n    try {\n      await EventResource.putQueueConfig({\n        client: this._client,\n        throwOnError: true,\n        path: { queueType, queueName },\n        body: config,\n      });\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to put queue config`);\n    }\n  }\n\n  /**\n   * Test endpoint (as exposed by API)\n   * @returns {Promise<EventHandler>}\n   * @throws {ConductorSdkError}\n   */\n  public async test(): Promise<EventHandler> {\n    try {\n      const { data } = await EventResource.test({\n        client: this._client,\n        throwOnError: true,\n      });\n\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to call test endpoint`);\n    }\n  }\n\n  /**\n   * Get all active event handlers (execution view)\n   * @returns {Promise<SearchResultHandledEventResponse>}\n   * @throws {ConductorSdkError}\n   */\n  public async getAllActiveEventHandlers(): Promise<SearchResultHandledEventResponse> {\n    try {\n      const { data } = await EventExecutionResource.getEventHandlersForEvent1({\n        client: this._client,\n        throwOnError: true,\n      });\n\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to get all active event handlers (execution view)`\n      );\n    }\n  }\n\n  /**\n   * Get event executions for a specific handler\n   * @param {string} eventHandlerName\n   * @param {number} [from] Pagination cursor\n   * @returns {Promise<ExtendedEventExecution[]>}\n   * @throws {ConductorSdkError}\n   */\n  public async getEventExecutions(\n    eventHandlerName: string,\n    from?: number\n  ): Promise<ExtendedEventExecution[]> {\n    try {\n      const { data } = await EventExecutionResource.getEventHandlersForEvent2({\n        client: this._client,\n        throwOnError: true,\n        path: { eventHandlerName },\n        query: { from },\n      });\n\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to get event executions for handler: ${eventHandlerName}`\n      );\n    }\n  }\n\n  /**\n   * Get all event handlers with statistics (messages view)\n   * @param {number} [from] Pagination cursor\n   * @returns {Promise<SearchResultHandledEventResponse>}\n   * @throws {ConductorSdkError}\n   */\n  public async getEventHandlersWithStats(\n    from?: number\n  ): Promise<SearchResultHandledEventResponse> {\n    try {\n      const { data } = await EventMessageResource.getEvents({\n        client: this._client,\n        throwOnError: true,\n        query: { from },\n      });\n\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to get event handlers statistics`);\n    }\n  }\n\n  /**\n   * Get event messages for a given event\n   * @param {string} event\n   * @param {number} [from] Pagination cursor\n   * @returns {Promise<EventMessage[]>}\n   * @throws {ConductorSdkError}\n   */\n  public async getEventMessages(\n    event: string,\n    from?: number\n  ): Promise<EventMessage[]> {\n    try {\n      const { data } = await EventMessageResource.getMessages({\n        client: this._client,\n        throwOnError: true,\n        path: { event },\n        query: { from },\n      });\n\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to get event messages for event: ${event}`);\n    }\n  }\n}\n","import { HumanTaskSearch } from \"../../../open-api\";\n\nexport const EMPTY_SEARCH: HumanTaskSearch = {\n  size: 15,\n  states: [],\n  taskInputQuery: \"\",\n  taskOutputQuery: \"\",\n  definitionNames: [],\n  taskRefNames: [],\n  claimants: [],\n  assignees: [],\n  start: 0,\n};\n\nexport const DEFAULT_POLL_INTERVAL = { pollInterval: 100, maxPollTimes: 20 };\n","import type {\n  Client,\n  HumanTaskSearch,\n  HumanTaskEntry,\n  HumanTaskTemplate,\n} from \"../../../open-api\";\nimport { HumanTask } from \"../../../open-api/generated\";\nimport { handleSdkError } from \"../../helpers/errors\";\nimport { DEFAULT_POLL_INTERVAL, EMPTY_SEARCH } from \"./constants\";\nimport { ClaimTaskOptions, PollIntervalOptions, UserType } from \"./types\";\n\nexport class HumanExecutor {\n  public readonly _client: Client;\n\n  constructor(client: Client) {\n    this._client = client;\n  }\n\n  /**\n   * @deprecated use search instead\n   * Takes a set of filter parameters. return matches of human tasks for that set of parameters\n   * @param state\n   * @param assignee\n   * @param assigneeType\n   * @param claimedBy\n   * @param taskName\n   * @param freeText\n   * @param includeInputOutput\n   * @returns\n   */\n  public async getTasksByFilter(\n    state: \"PENDING\" | \"ASSIGNED\" | \"IN_PROGRESS\" | \"COMPLETED\" | \"TIMED_OUT\",\n    assignee?: string,\n    assigneeType?:\n      | \"EXTERNAL_USER\"\n      | \"EXTERNAL_GROUP\"\n      | \"CONDUCTOR_USER\"\n      | \"CONDUCTOR_GROUP\",\n    claimedBy?: string,\n    taskName?: string,\n    taskInputQuery?: string,\n    taskOutputQuery?: string\n  ): Promise<HumanTaskEntry[]> {\n    const [claimedUserType, claimedUser] = claimedBy?.split(\":\") ?? [];\n\n    if (claimedUserType && !claimedUser) {\n      throw new Error(\"claimedBy should be in the format of <userType>:<user>\");\n    }\n\n    const response = await this.search({\n      states: [state],\n      assignees: assignee ? [{ userType: assigneeType, user: assignee }] : [],\n      claimants: claimedBy\n        ? [{ userType: claimedUserType as UserType, user: claimedUser }]\n        : [],\n      taskRefNames: taskName ? [taskName] : [],\n      taskInputQuery,\n      taskOutputQuery,\n    });\n\n    return response;\n  }\n\n  /**\n   * Takes a set of filter parameters. return matches of human tasks for that set of parameters\n   * @param state\n   * @param assignee\n   * @param assigneeType\n   * @param claimedBy\n   * @param taskName\n   * @param freeText\n   * @param includeInputOutput\n   * @returns Promise<HumanTaskEntry[]>\n   */\n  public async search(\n    searchParams: Partial<HumanTaskSearch>\n  ): Promise<HumanTaskEntry[]> {\n    const search = { ...EMPTY_SEARCH, ...searchParams };\n    try {\n      const { data } = await HumanTask.search({\n        client: this._client,\n        body: search,\n        throwOnError: true,\n      });\n\n      if (data?.results != undefined) {\n        return data.results;\n      }\n      return [];\n    } catch (error: unknown) {\n      handleSdkError(error, \"Failed to search human tasks\");\n    }\n  }\n\n  /**\n   * Takes a set of filter parameters. An polling interval options. will poll until the task returns a result\n   * @param state\n   * @param assignee\n   * @param assigneeType\n   * @param claimedBy\n   * @param taskName\n   * @param freeText\n   * @param includeInputOutput\n   * @returns Promise<HumanTaskEntry[]>\n   */\n  public async pollSearch(\n    searchParams: Partial<HumanTaskSearch>,\n    {\n      pollInterval = 100,\n      maxPollTimes = 20,\n    }: PollIntervalOptions = DEFAULT_POLL_INTERVAL\n  ): Promise<HumanTaskEntry[]> {\n    try {\n      let pollCount = 0;\n      while (pollCount < maxPollTimes) {\n        const response = await this.search(searchParams);\n        if (response.length > 0) {\n          return response;\n        }\n        await new Promise((resolve) => setTimeout(resolve, pollInterval));\n        pollCount++;\n      }\n      return [];\n    } catch (error: unknown) {\n      handleSdkError(error, \"Failed to poll search human tasks\");\n    }\n  }\n\n  /**\n   * Returns task for a given task id\n   * @param taskId\n   * @returns\n   */\n  public async getTaskById(taskId: string): Promise<HumanTaskEntry> {\n    try {\n      const { data } = await HumanTask.getTask1({\n        client: this._client,\n        path: { taskId },\n        throwOnError: true,\n      });\n\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to get human task '${taskId}'`);\n    }\n  }\n\n  /**\n   * Assigns taskId to assignee. If the task is already assigned to another user, this will fail.\n   * @param taskId\n   * @param assignee\n   * @returns\n   */\n  public async claimTaskAsExternalUser(\n    taskId: string,\n    assignee: string,\n    options?: ClaimTaskOptions\n  ): Promise<HumanTaskEntry> {\n    try {\n      const { data } = await HumanTask.assignAndClaim({\n        client: this._client,\n        path: { taskId, userId: assignee },\n        query: {\n          overrideAssignment: options?.overrideAssignment,\n          withTemplate: options?.withTemplate,\n        },\n        throwOnError: true,\n      });\n\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to claim human task '${taskId}' as external user '${assignee}'`\n      );\n    }\n  }\n\n  /**\n   * Claim task as conductor user\n   * @param taskId\n   * @returns\n   */\n  public async claimTaskAsConductorUser(\n    taskId: string,\n    options?: ClaimTaskOptions\n  ): Promise<HumanTaskEntry> {\n    try {\n      const { data } = await HumanTask.claimTask({\n        client: this._client,\n        path: { taskId },\n        query: {\n          overrideAssignment: options?.overrideAssignment,\n          withTemplate: options?.withTemplate,\n        },\n        throwOnError: true,\n      });\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to claim human task '${taskId}' as conductor user`\n      );\n    }\n  }\n\n  /**\n   * Claim task as conductor user\n   * @param taskId\n   * @param assignee\n   * @returns\n   */\n  public async releaseTask(taskId: string) {\n    try {\n      await HumanTask.releaseTask({\n        client: this._client,\n        path: { taskId },\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to release human task '${taskId}'`);\n    }\n  }\n\n  /**\n   * Returns a HumanTaskTemplateEntry for a given name and version\n   * @param templateId\n   * @returns\n   */\n  public async getTemplateByNameVersion(\n    name: string,\n    version: number\n  ): Promise<HumanTaskTemplate> {\n    try {\n      const { data } = await HumanTask.getTemplateByNameAndVersion({\n        client: this._client,\n        path: { name, version },\n        throwOnError: true,\n      });\n\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to get template '${name}' version ${version}`\n      );\n    }\n  }\n\n  /**\n   * @deprecated use getTemplate instead. name will be used as id here with version 1\n   * Returns a HumanTaskTemplateEntry for a given templateId\n   * @param templateId\n   * @returns\n   */\n  public async getTemplateById(\n    templateNameVersionOne: string\n  ): Promise<HumanTaskTemplate> {\n    return this.getTemplateByNameVersion(templateNameVersionOne, 1);\n  }\n\n  /**\n   * Takes a taskId and a partial body. will update with given body\n   * @param taskId\n   * @param requestBody\n   */\n  public async updateTaskOutput(\n    taskId: string,\n    requestBody: Record<string, Record<string, unknown>>\n  ): Promise<void> {\n    try {\n      await HumanTask.updateTaskOutput({\n        client: this._client,\n        path: { taskId },\n        body: requestBody,\n        query: { complete: false },\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed update human task '${taskId}' output`);\n    }\n  }\n\n  /**\n   * Takes a taskId and an optional partial body. will complete the task with the given body\n   * @param taskId\n   * @param requestBody\n   */\n  public async completeTask(\n    taskId: string,\n    requestBody: Record<string, Record<string, unknown>> = {}\n  ) {\n    try {\n      await HumanTask.updateTaskOutput({\n        client: this._client,\n        path: { taskId },\n        body: requestBody,\n        query: { complete: true },\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to complete human task '${taskId}'`);\n    }\n  }\n}\n","import type {\n  Client,\n  Tag,\n  ExtendedIntegrationApiUpdate,\n} from \"../../../open-api\";\nimport type {\n  Integration,\n  IntegrationApi,\n  IntegrationDef,\n  IntegrationUpdate,\n  MessageTemplate,\n} from \"../../../open-api/generated\";\nimport { IntegrationResource } from \"../../../open-api/generated\";\nimport { handleSdkError } from \"../../helpers/errors\";\n\nexport class IntegrationClient {\n  public readonly _client: Client;\n\n  constructor(client: Client) {\n    this._client = client;\n  }\n\n  // ==================== Integration Provider Management ====================\n\n  /**\n   * Save (create or update) an integration provider\n   * @param name - The provider name\n   * @param integration - The integration configuration\n   */\n  public async saveIntegrationProvider(\n    name: string,\n    integration: IntegrationUpdate\n  ): Promise<void> {\n    try {\n      await IntegrationResource.saveIntegrationProvider({\n        path: { name },\n        body: integration,\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to save integration provider '${name}'`\n      );\n    }\n  }\n\n  /**\n   * Get an integration provider by name\n   * @param name - The provider name\n   * @returns The integration provider\n   */\n  public async getIntegrationProvider(\n    name: string\n  ): Promise<Integration> {\n    try {\n      const { data } = await IntegrationResource.getIntegrationProvider({\n        path: { name },\n        client: this._client,\n        throwOnError: true,\n      });\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to get integration provider '${name}'`\n      );\n    }\n  }\n\n  /**\n   * Get all integration providers\n   * @returns Array of integrations representing providers\n   */\n  public async getIntegrationProviders(): Promise<Integration[]> {\n    try {\n      const { data } = await IntegrationResource.getIntegrationProviders({\n        client: this._client,\n        throwOnError: true,\n      });\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(error, \"Failed to get integration providers\");\n    }\n  }\n\n  /**\n   * Delete an integration provider\n   * @param name - The provider name\n   */\n  public async deleteIntegrationProvider(name: string): Promise<void> {\n    try {\n      await IntegrationResource.deleteIntegrationProvider({\n        path: { name },\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to delete integration provider '${name}'`\n      );\n    }\n  }\n\n  // ==================== Integration API Management ====================\n\n  /**\n   * Save (create or update) an integration API\n   * @param providerName - The provider name\n   * @param integrationName - The integration name\n   * @param api - The integration API configuration\n   */\n  public async saveIntegrationApi(\n    providerName: string,\n    integrationName: string,\n    api: ExtendedIntegrationApiUpdate\n  ): Promise<void> {\n    try {\n      await IntegrationResource.saveIntegrationApi({\n        path: { name: providerName, integration_name: integrationName },\n        body: api,\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to save integration API '${integrationName}' for provider '${providerName}'`\n      );\n    }\n  }\n\n  /**\n   * Get an integration API\n   * @param providerName - The provider name\n   * @param integrationName - The integration name\n   * @returns The integration API\n   */\n  public async getIntegrationApi(\n    providerName: string,\n    integrationName: string\n  ): Promise<IntegrationApi> {\n    try {\n      const { data } = await IntegrationResource.getIntegrationApi({\n        path: { name: providerName, integration_name: integrationName },\n        client: this._client,\n        throwOnError: true,\n      });\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to get integration API '${integrationName}' for provider '${providerName}'`\n      );\n    }\n  }\n\n  /**\n   * Get all integration APIs for a provider\n   * @param providerName - The provider name\n   * @returns Array of integration APIs\n   */\n  public async getIntegrationApis(\n    providerName: string\n  ): Promise<IntegrationApi[]> {\n    try {\n      const { data } = await IntegrationResource.getIntegrationApis({\n        path: { name: providerName },\n        client: this._client,\n        throwOnError: true,\n      });\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to get integration APIs for provider '${providerName}'`\n      );\n    }\n  }\n\n  /**\n   * Delete an integration API\n   * @param providerName - The provider name\n   * @param integrationName - The integration name\n   */\n  public async deleteIntegrationApi(\n    providerName: string,\n    integrationName: string\n  ): Promise<void> {\n    try {\n      await IntegrationResource.deleteIntegrationApi({\n        path: { name: providerName, integration_name: integrationName },\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to delete integration API '${integrationName}' for provider '${providerName}'`\n      );\n    }\n  }\n\n  // ==================== Integration Queries ====================\n\n  /**\n   * Get all integrations\n   * @param category - Optional category filter\n   * @param activeOnly - Whether to return only active integrations\n   * @returns Array of integrations\n   */\n  public async getIntegrations(\n    category?: string,\n    activeOnly?: boolean\n  ): Promise<Integration[]> {\n    try {\n      const { data } = await IntegrationResource.getAllIntegrations({\n        query: { category, activeOnly },\n        client: this._client,\n        throwOnError: true,\n      });\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(error, \"Failed to get integrations\");\n    }\n  }\n\n  /**\n   * Get integration provider definitions\n   * @returns Array of integration definitions\n   */\n  public async getIntegrationProviderDefs(): Promise<IntegrationDef[]> {\n    try {\n      const { data } = await IntegrationResource.getIntegrationProviderDefs({\n        client: this._client,\n        throwOnError: true,\n      });\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(error, \"Failed to get integration provider definitions\");\n    }\n  }\n\n  /**\n   * Get providers and integrations\n   * @param type - Optional type filter\n   * @param activeOnly - Whether to return only active\n   * @returns Array of provider and integration info\n   */\n  public async getProvidersAndIntegrations(\n    type?: string,\n    activeOnly?: boolean\n  ): Promise<string[]> {\n    try {\n      const { data } = await IntegrationResource.getProvidersAndIntegrations({\n        query: { type, activeOnly },\n        client: this._client,\n        throwOnError: true,\n      });\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(error, \"Failed to get providers and integrations\");\n    }\n  }\n\n  /**\n   * Get available APIs for a provider\n   * @param providerName - The provider name\n   * @returns Array of available APIs\n   */\n  public async getIntegrationAvailableApis(\n    providerName: string\n  ): Promise<string[]> {\n    try {\n      const { data } = await IntegrationResource.getIntegrationAvailableApis({\n        path: { name: providerName },\n        client: this._client,\n        throwOnError: true,\n      });\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to get available APIs for provider '${providerName}'`\n      );\n    }\n  }\n\n  // ==================== Prompt Association ====================\n\n  /**\n   * Associate a prompt with an integration\n   * @param providerName - The integration provider name\n   * @param integrationName - The integration name\n   * @param promptName - The prompt template name\n   */\n  public async associatePromptWithIntegration(\n    providerName: string,\n    integrationName: string,\n    promptName: string\n  ): Promise<void> {\n    try {\n      await IntegrationResource.associatePromptWithIntegration({\n        path: {\n          integration_provider: providerName,\n          integration_name: integrationName,\n          prompt_name: promptName,\n        },\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to associate prompt '${promptName}' with integration '${integrationName}'`\n      );\n    }\n  }\n\n  /**\n   * Get prompts associated with an integration\n   * @param providerName - The integration provider name\n   * @param integrationName - The integration name\n   * @returns Array of associated prompt templates\n   */\n  public async getPromptsWithIntegration(\n    providerName: string,\n    integrationName: string\n  ): Promise<MessageTemplate[]> {\n    try {\n      const { data } = await IntegrationResource.getPromptsWithIntegration({\n        path: {\n          integration_provider: providerName,\n          integration_name: integrationName,\n        },\n        client: this._client,\n        throwOnError: true,\n      });\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to get prompts for integration '${integrationName}'`\n      );\n    }\n  }\n\n  // ==================== Integration Tags ====================\n\n  /**\n   * Set tags for an integration\n   * @param providerName - The provider name\n   * @param integrationName - The integration name\n   * @param tags - The tags to set\n   */\n  public async setIntegrationTags(\n    providerName: string,\n    integrationName: string,\n    tags: Tag[]\n  ): Promise<void> {\n    try {\n      await IntegrationResource.putTagForIntegration({\n        path: { name: providerName, integration_name: integrationName },\n        body: tags,\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to set tags for integration '${integrationName}'`\n      );\n    }\n  }\n\n  /**\n   * Get tags for an integration\n   * @param providerName - The provider name\n   * @param integrationName - The integration name\n   * @returns Array of tags\n   */\n  public async getIntegrationTags(\n    providerName: string,\n    integrationName: string\n  ): Promise<Tag[]> {\n    try {\n      const { data } = await IntegrationResource.getTagsForIntegration({\n        path: { name: providerName, integration_name: integrationName },\n        client: this._client,\n        throwOnError: true,\n      });\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to get tags for integration '${integrationName}'`\n      );\n    }\n  }\n\n  /**\n   * Delete tags from an integration\n   * @param providerName - The provider name\n   * @param integrationName - The integration name\n   * @param tags - The tags to delete\n   */\n  public async deleteIntegrationTags(\n    providerName: string,\n    integrationName: string,\n    tags: Tag[]\n  ): Promise<void> {\n    try {\n      await IntegrationResource.deleteTagForIntegration({\n        path: { name: providerName, integration_name: integrationName },\n        body: tags,\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to delete tags from integration '${integrationName}'`\n      );\n    }\n  }\n\n  // ==================== Provider Tags ====================\n\n  /**\n   * Set tags for an integration provider\n   * @param providerName - The provider name\n   * @param tags - The tags to set\n   */\n  public async setProviderTags(\n    providerName: string,\n    tags: Tag[]\n  ): Promise<void> {\n    try {\n      await IntegrationResource.putTagForIntegrationProvider({\n        path: { name: providerName },\n        body: tags,\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to set tags for provider '${providerName}'`\n      );\n    }\n  }\n\n  /**\n   * Get tags for an integration provider\n   * @param providerName - The provider name\n   * @returns Array of tags\n   */\n  public async getProviderTags(providerName: string): Promise<Tag[]> {\n    try {\n      const { data } =\n        await IntegrationResource.getTagsForIntegrationProvider({\n          path: { name: providerName },\n          client: this._client,\n          throwOnError: true,\n        });\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to get tags for provider '${providerName}'`\n      );\n    }\n  }\n\n  /**\n   * Delete tags from an integration provider\n   * @param providerName - The provider name\n   * @param tags - The tags to delete\n   */\n  public async deleteProviderTags(\n    providerName: string,\n    tags: Tag[]\n  ): Promise<void> {\n    try {\n      await IntegrationResource.deleteTagForIntegrationProvider({\n        path: { name: providerName },\n        body: tags,\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to delete tags from provider '${providerName}'`\n      );\n    }\n  }\n}\n","import { MetadataResource, Tags } from \"../../../open-api/generated\";\nimport { handleSdkError } from \"../../helpers/errors\";\nimport type {\n  Client,\n  ExtendedTaskDef,\n  ExtendedWorkflowDef,\n  RateLimitConfig,\n  Tag,\n  TaskDef,\n  WorkflowDef,\n} from \"../../../open-api\";\nimport type { ExtendedRateLimitConfig } from \"../../../open-api/types\";\nimport type { ExtendedTaskDef as OpenApiExtendedTaskDef } from \"../../../open-api/generated/types.gen\";\n\nexport class MetadataClient {\n  public readonly _client: Client;\n\n  constructor(client: Client) {\n    this._client = client;\n  }\n\n  /**\n   * Unregisters an existing task definition by name\n   *\n   * @param name\n   * @returns\n   */\n  public async unregisterTask(name: string): Promise<void> {\n    try {\n      await MetadataResource.unregisterTaskDef({\n        path: { tasktype: name },\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to unregister task '${name}'`);\n    }\n  }\n\n  /**\n   * Registers a new task definition\n   *\n   * @param taskDef\n   * @returns\n   */\n  public async registerTask(taskDef: ExtendedTaskDef): Promise<void> {\n    return this.registerTasks([taskDef]);\n  }\n\n  /**\n   * Registers multiple task definitions (array)\n   *\n   * @param taskDefs\n   * @returns\n   */\n  public async registerTasks(taskDefs: ExtendedTaskDef[]): Promise<void> {\n    try {\n      await MetadataResource.registerTaskDef({\n        body: [...(taskDefs as OpenApiExtendedTaskDef[])], // todo: remove casting after OpenApi spec is fixed\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(error, \"Failed to register task definitions\");\n    }\n  }\n\n  /**\n   * Update an existing task definition\n   *\n   * @param taskDef\n   * @returns\n   */\n  public async updateTask(taskDef: ExtendedTaskDef): Promise<void> {\n    try {\n      await MetadataResource.updateTaskDef({\n        body: taskDef as OpenApiExtendedTaskDef, // todo: remove casting after OpenApi spec is fixed\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(error, \"Failed to update task definition\");\n    }\n  }\n\n  /**\n   * Get an existing task definition\n   *\n   * @param taskName\n   * @returns\n   */\n  public async getTask(taskName: string): Promise<TaskDef> {\n    try {\n      const { data } = await MetadataResource.getTaskDef({\n        path: { tasktype: taskName },\n        client: this._client,\n        throwOnError: true,\n      });\n\n      return data as TaskDef; // todo: remove casting after OpenApi spec is fixed\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to get task '${taskName}'`);\n    }\n  }\n\n  /**\n   * Creates or updates (overwrite: true) a workflow definition\n   *\n   * @param workflowDef\n   * @param overwrite\n   * @returns\n   */\n  public async registerWorkflowDef(\n    workflowDef: ExtendedWorkflowDef,\n    overwrite = false\n  ): Promise<void> {\n    try {\n      await MetadataResource.create({\n        body: workflowDef,\n        query: {\n          overwrite,\n        },\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(error, \"Failed to register workflow definition\");\n    }\n  }\n\n  /**\n   * Creates or updates (overwrite: true) a workflow definition\n   *\n   * @param workflowDef\n   * @param overwrite\n   * @returns\n   */\n  public async getWorkflowDef(\n    name: string,\n    version?: number,\n    metadata = false\n  ): Promise<WorkflowDef> {\n    try {\n      const { data } = await MetadataResource.get1({\n        path: { name },\n        query: { metadata, version },\n        client: this._client,\n        throwOnError: true,\n      });\n\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to get workflow definition '${name}'`);\n    }\n  }\n\n  /**\n   * Unregister (overwrite: true) a workflow definition\n   *\n   * @param workflowDef\n   * @param overwrite\n   * @returns\n   */\n  public async unregisterWorkflow(\n    workflowName: string,\n    version = 1\n  ): Promise<void> {\n    try {\n      await MetadataResource.unregisterWorkflowDef({\n        path: { name: workflowName, version },\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to unregister workflow '${workflowName}'`);\n    }\n  }\n\n  /**\n   * Get all task definitions\n   * @returns Array of all task definitions\n   */\n  public async getAllTaskDefs(): Promise<TaskDef[]> {\n    try {\n      const { data } = await MetadataResource.getTaskDefs({\n        client: this._client,\n        throwOnError: true,\n      });\n      return data as TaskDef[];\n    } catch (error: unknown) {\n      handleSdkError(error, \"Failed to get all task definitions\");\n    }\n  }\n\n  /**\n   * Get all workflow definitions\n   * @returns Array of all workflow definitions\n   */\n  public async getAllWorkflowDefs(): Promise<WorkflowDef[]> {\n    try {\n      const { data } = await MetadataResource.getWorkflowDefs({\n        client: this._client,\n        throwOnError: true,\n      });\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(error, \"Failed to get all workflow definitions\");\n    }\n  }\n\n  /**\n   * Add a tag to a workflow definition\n   * @param tag - The tag to add\n   * @param name - The workflow definition name\n   */\n  public async addWorkflowTag(tag: Tag, name: string): Promise<void> {\n    try {\n      await Tags.addWorkflowTag({\n        path: { name },\n        body: tag,\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to add tag to workflow '${name}'`\n      );\n    }\n  }\n\n  /**\n   * Delete a tag from a workflow definition\n   * @param tag - The tag to delete\n   * @param name - The workflow definition name\n   */\n  public async deleteWorkflowTag(tag: Tag, name: string): Promise<void> {\n    try {\n      await Tags.deleteWorkflowTag({\n        path: { name },\n        body: tag,\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to delete tag from workflow '${name}'`\n      );\n    }\n  }\n\n  /**\n   * Get all tags for a workflow definition\n   * @param name - The workflow definition name\n   * @returns Array of tags\n   */\n  public async getWorkflowTags(name: string): Promise<Tag[]> {\n    try {\n      const { data } = await Tags.getWorkflowTags({\n        path: { name },\n        client: this._client,\n        throwOnError: true,\n      });\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to get tags for workflow '${name}'`\n      );\n    }\n  }\n\n  /**\n   * Set (replace all existing) tags for a workflow definition\n   * @param tags - The tags to set\n   * @param name - The workflow definition name\n   */\n  public async setWorkflowTags(tags: Tag[], name: string): Promise<void> {\n    try {\n      await Tags.setWorkflowTags({\n        path: { name },\n        body: tags,\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to set tags for workflow '${name}'`\n      );\n    }\n  }\n\n  /**\n   * Add a tag to a task definition\n   * @param tag - The tag to add\n   * @param taskName - The task definition name\n   */\n  public async addTaskTag(tag: Tag, taskName: string): Promise<void> {\n    try {\n      await Tags.addTaskTag({\n        path: { taskName },\n        body: tag,\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to add tag to task '${taskName}'`\n      );\n    }\n  }\n\n  /**\n   * Delete a tag from a task definition\n   * @param tag - The tag to delete\n   * @param taskName - The task definition name\n   */\n  public async deleteTaskTag(tag: Tag, taskName: string): Promise<void> {\n    try {\n      await Tags.deleteTaskTag({\n        path: { taskName },\n        body: tag,\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to delete tag from task '${taskName}'`\n      );\n    }\n  }\n\n  /**\n   * Get all tags for a task definition\n   * @param taskName - The task definition name\n   * @returns Array of tags\n   */\n  public async getTaskTags(taskName: string): Promise<Tag[]> {\n    try {\n      const { data } = await Tags.getTaskTags({\n        path: { taskName },\n        client: this._client,\n        throwOnError: true,\n      });\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to get tags for task '${taskName}'`\n      );\n    }\n  }\n\n  /**\n   * Set (replace all existing) tags for a task definition\n   * @param tags - The tags to set\n   * @param taskName - The task definition name\n   */\n  public async setTaskTags(tags: Tag[], taskName: string): Promise<void> {\n    try {\n      await Tags.setTaskTags({\n        path: { taskName },\n        body: tags,\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to set tags for task '${taskName}'`\n      );\n    }\n  }\n\n  // ── Rate Limit APIs ────────────────────────────────────────────\n  // These endpoints are not in the OpenAPI spec yet, so we use raw\n  // HTTP calls matching the Python SDK's MetadataClient.\n\n  /**\n   * Set the rate limit configuration for a workflow\n   * @param rateLimitConfig - Rate limit configuration\n   * @param name - Workflow definition name\n   */\n  public async setWorkflowRateLimit(\n    rateLimitConfig: RateLimitConfig | ExtendedRateLimitConfig,\n    name: string\n  ): Promise<void> {\n    try {\n      await this._client.put({\n        url: `/api/metadata/workflow/${encodeURIComponent(name)}/rate-limit`,\n        body: rateLimitConfig,\n        headers: { \"Content-Type\": \"application/json\" },\n        security: [{ name: \"X-Authorization\", type: \"apiKey\" }],\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to set rate limit for workflow '${name}'`\n      );\n    }\n  }\n\n  /**\n   * Get the rate limit configuration for a workflow\n   * @param name - Workflow definition name\n   * @returns Rate limit configuration or undefined if not set\n   */\n  public async getWorkflowRateLimit(\n    name: string\n  ): Promise<RateLimitConfig | ExtendedRateLimitConfig | undefined> {\n    try {\n      const { data } = await this._client.get({\n        url: `/api/metadata/workflow/${encodeURIComponent(name)}/rate-limit`,\n        security: [{ name: \"X-Authorization\", type: \"apiKey\" }],\n        throwOnError: true,\n      });\n      return data as RateLimitConfig;\n    } catch (error: unknown) {\n      // 404 means no rate limit set — return undefined\n      const status =\n        error && typeof error === \"object\" && \"status\" in error\n          ? (error as { status: number }).status\n          : undefined;\n      if (status === 404) {\n        return undefined;\n      }\n      handleSdkError(\n        error,\n        `Failed to get rate limit for workflow '${name}'`\n      );\n    }\n  }\n\n  /**\n   * Remove the rate limit configuration for a workflow\n   * @param name - Workflow definition name\n   */\n  public async removeWorkflowRateLimit(name: string): Promise<void> {\n    try {\n      await this._client.delete({\n        url: `/api/metadata/workflow/${encodeURIComponent(name)}/rate-limit`,\n        security: [{ name: \"X-Authorization\", type: \"apiKey\" }],\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to remove rate limit for workflow '${name}'`\n      );\n    }\n  }\n}\n","import type { Client, Tag } from \"../../../open-api\";\nimport type {\n  MessageTemplate,\n  PromptTemplateTestRequest,\n} from \"../../../open-api/generated\";\nimport { PromptResource } from \"../../../open-api/generated\";\nimport { handleSdkError } from \"../../helpers/errors\";\n\nexport class PromptClient {\n  public readonly _client: Client;\n\n  constructor(client: Client) {\n    this._client = client;\n  }\n\n  /**\n   * Save a prompt template\n   * @param name - The prompt name\n   * @param description - Description of the prompt\n   * @param template - The prompt template text\n   * @param models - Optional array of model names\n   */\n  public async savePrompt(\n    name: string,\n    description: string,\n    template: string,\n    models?: string[]\n  ): Promise<void> {\n    try {\n      await PromptResource.saveMessageTemplate({\n        path: { name },\n        body: template,\n        query: { description, models },\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to save prompt '${name}'`);\n    }\n  }\n\n  /**\n   * Update a prompt template\n   * @param name - The prompt name\n   * @param description - Description of the prompt\n   * @param template - The prompt template text\n   * @param models - Optional array of model names\n   */\n  public async updatePrompt(\n    name: string,\n    description: string,\n    template: string,\n    models?: string[]\n  ): Promise<void> {\n    try {\n      await PromptResource.updateMessageTemplate({\n        path: { name },\n        body: template,\n        query: { description, models },\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to update prompt '${name}'`);\n    }\n  }\n\n  /**\n   * Get a prompt template by name\n   * @param name - The prompt name\n   * @returns The message template\n   */\n  public async getPrompt(name: string): Promise<MessageTemplate> {\n    try {\n      const { data } = await PromptResource.getMessageTemplate({\n        path: { name },\n        client: this._client,\n        throwOnError: true,\n      });\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to get prompt '${name}'`);\n    }\n  }\n\n  /**\n   * Get all prompt templates\n   * @returns Array of message templates\n   */\n  public async getPrompts(): Promise<MessageTemplate[]> {\n    try {\n      const { data } = await PromptResource.getMessageTemplates({\n        client: this._client,\n        throwOnError: true,\n      });\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(error, \"Failed to get prompts\");\n    }\n  }\n\n  /**\n   * Delete a prompt template\n   * @param name - The prompt name\n   */\n  public async deletePrompt(name: string): Promise<void> {\n    try {\n      await PromptResource.deleteMessageTemplate({\n        path: { name },\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to delete prompt '${name}'`);\n    }\n  }\n\n  /**\n   * Test a prompt template against an LLM\n   * @param testRequest - The test request containing prompt text, variables, model info, etc.\n   * @returns The LLM response string\n   */\n  public async testPrompt(\n    testRequest: PromptTemplateTestRequest\n  ): Promise<string> {\n    try {\n      const { data } = await PromptResource.testMessageTemplate({\n        body: testRequest,\n        client: this._client,\n        throwOnError: true,\n      });\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(error, \"Failed to test prompt\");\n    }\n  }\n\n  /**\n   * Get tags for a prompt template\n   * @param name - The prompt name\n   * @returns Array of tags\n   */\n  public async getPromptTags(name: string): Promise<Tag[]> {\n    try {\n      const { data } = await PromptResource.getTagsForPromptTemplate({\n        path: { name },\n        client: this._client,\n        throwOnError: true,\n      });\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to get tags for prompt '${name}'`);\n    }\n  }\n\n  /**\n   * Set tags for a prompt template\n   * @param name - The prompt name\n   * @param tags - The tags to set\n   */\n  public async setPromptTags(name: string, tags: Tag[]): Promise<void> {\n    try {\n      await PromptResource.putTagForPromptTemplate({\n        path: { name },\n        body: tags,\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to set tags for prompt '${name}'`);\n    }\n  }\n\n  /**\n   * Delete tags from a prompt template\n   * @param name - The prompt name\n   * @param tags - The tags to delete\n   */\n  public async deletePromptTags(name: string, tags: Tag[]): Promise<void> {\n    try {\n      await PromptResource.deleteTagForPromptTemplate({\n        path: { name },\n        body: tags,\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to delete tags from prompt '${name}'`);\n    }\n  }\n}\n","import type {\n  Client,\n  SaveScheduleRequest,\n  SearchResultWorkflowScheduleExecutionModel,\n  Tag,\n  WorkflowSchedule,\n  WorkflowScheduleModel,\n} from \"../../../open-api\";\nimport { SchedulerResource } from \"../../../open-api/generated\";\nimport { handleSdkError } from \"../../helpers/errors\";\n\nexport class SchedulerClient {\n  public readonly _client: Client;\n\n  constructor(client: Client) {\n    this._client = client;\n  }\n\n  /**\n   * Create or update a schedule for a specified workflow with a corresponding start workflow request\n   * @param requestBody\n   * @returns\n   */\n  public async saveSchedule(param: SaveScheduleRequest): Promise<void> {\n    try {\n      await SchedulerResource.saveSchedule({\n        body: param,\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(error, \"Failed to save schedule\");\n    }\n  }\n\n  /**\n   * Searches for existing scheduler execution based on below parameters\n   *\n   * @param start\n   * @param size\n   * @param sort\n   * @param freeText\n   * @param query\n   * @returns SearchResultWorkflowScheduleExecutionModel\n   */\n  public async search(\n    start: number,\n    size = 100,\n    sort = \"\",\n    freeText = \"*\",\n    query?: string\n  ): Promise<SearchResultWorkflowScheduleExecutionModel> {\n    try {\n      const { data } = await SchedulerResource.searchV2({\n        query: { start, size, sort, freeText, query },\n        client: this._client,\n        throwOnError: true,\n      });\n\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(error, \"Failed to search schedules\");\n    }\n  }\n\n  /**\n   * Get an existing schedule by name\n   * @param name\n   * @returns WorkflowSchedule\n   */\n  public async getSchedule(name: string): Promise<WorkflowSchedule> {\n    try {\n      const { data } = await SchedulerResource.getSchedule({\n        path: { name },\n        client: this._client,\n        throwOnError: true,\n      });\n\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to get schedule '${name}'`);\n    }\n  }\n\n  /**\n   * Pauses an existing schedule by name\n   * @param name\n   * @returns\n   */\n  public async pauseSchedule(name: string): Promise<void> {\n    try {\n      await SchedulerResource.pauseSchedule({\n        path: { name },\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to pause schedule '${name}'`);\n    }\n  }\n\n  /**\n   * Resume a paused schedule by name\n   *\n   * @param name\n   * @returns\n   */\n  public async resumeSchedule(name: string): Promise<void> {\n    try {\n      await SchedulerResource.resumeSchedule({\n        path: { name },\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to resume schedule '${name}'`);\n    }\n  }\n\n  /**\n   * Deletes an existing scheduler execution by name\n   *\n   * @param name\n   * @returns\n   */\n  public async deleteSchedule(name: string): Promise<void> {\n    try {\n      await SchedulerResource.deleteSchedule({\n        path: { name },\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to delete schedule '${name}'`);\n    }\n  }\n\n  /**\n   * Get all existing workflow schedules and optionally filter by workflow name\n   * @param workflowName\n   * @returns Array<WorkflowScheduleModel>\n   */\n  public async getAllSchedules(\n    workflowName?: string\n  ): Promise<WorkflowScheduleModel[]> {\n    try {\n      const { data } = await SchedulerResource.getAllSchedules({\n        query: { workflowName },\n        client: this._client,\n        throwOnError: true,\n      });\n\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(error, \"Failed to get all schedules\");\n    }\n  }\n\n  /**\n   * Get list of the next x (default 3, max 5) execution times for a scheduler\n   * @param cronExpression\n   * @param scheduleStartTime\n   * @param scheduleEndTime\n   * @param limit\n   * @returns number OK\n   * @throws ApiError\n   */\n  public async getNextFewSchedules(\n    cronExpression: string,\n    scheduleStartTime?: number,\n    scheduleEndTime?: number,\n    limit = 3\n  ): Promise<number[]> {\n    try {\n      const { data } = await SchedulerResource.getNextFewSchedules({\n        query: { cronExpression, scheduleStartTime, scheduleEndTime, limit },\n        client: this._client,\n        throwOnError: true,\n      });\n\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(error, \"Failed to get next few schedules\");\n    }\n  }\n\n  /**\n   * Pause all scheduling in a single conductor server instance (for debugging only)\n   * @returns any OK\n   * @throws ApiError\n   */\n  public async pauseAllSchedules(): Promise<void> {\n    try {\n      await SchedulerResource.pauseAllSchedules({\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(error, \"Failed to pause all schedules\");\n    }\n  }\n\n  /**\n   * Requeue all execution records\n   * @returns any OK\n   * @throws ApiError\n   */\n  public async requeueAllExecutionRecords(): Promise<void> {\n    try {\n      await SchedulerResource.requeueAllExecutionRecords({\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(error, \"Failed to requeue all execution records\");\n    }\n  }\n\n  /**\n   * Resume all scheduling\n   * @returns any OK\n   * @throws ApiError\n   */\n  public async resumeAllSchedules(): Promise<void> {\n    try {\n      await SchedulerResource.resumeAllSchedules({\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(error, \"Failed to resume all schedules\");\n    }\n  }\n\n  /**\n   * Set tags for a schedule\n   * @param tags - The tags to set\n   * @param name - The schedule name\n   */\n  public async setSchedulerTags(tags: Tag[], name: string): Promise<void> {\n    try {\n      await SchedulerResource.putTagForSchedule({\n        path: { name },\n        body: tags,\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to set tags for schedule '${name}'`);\n    }\n  }\n\n  /**\n   * Get tags for a schedule\n   * @param name - The schedule name\n   * @returns Array of tags\n   */\n  public async getSchedulerTags(name: string): Promise<Tag[]> {\n    try {\n      const { data } = await SchedulerResource.getTagsForSchedule({\n        path: { name },\n        client: this._client,\n        throwOnError: true,\n      });\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to get tags for schedule '${name}'`);\n    }\n  }\n\n  /**\n   * Delete tags from a schedule\n   * @param tags - The tags to delete\n   * @param name - The schedule name\n   */\n  public async deleteSchedulerTags(tags: Tag[], name: string): Promise<void> {\n    try {\n      await SchedulerResource.deleteTagForSchedule({\n        path: { name },\n        body: tags,\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to delete tags from schedule '${name}'`);\n    }\n  }\n}\n","import type { Client } from \"../../../open-api\";\nimport type { SchemaDef } from \"../../../open-api/generated\";\nimport { SchemaResource } from \"../../../open-api/generated\";\nimport { handleSdkError } from \"../../helpers/errors\";\n\nexport class SchemaClient {\n  public readonly _client: Client;\n\n  constructor(client: Client) {\n    this._client = client;\n  }\n\n  /**\n   * Register (create or update) schemas\n   * @param schemas - Array of schema definitions to register\n   * @param newVersion - Whether to create a new version\n   */\n  public async registerSchema(\n    schemas: SchemaDef[],\n    newVersion = false\n  ): Promise<void> {\n    try {\n      await SchemaResource.save({\n        body: schemas,\n        query: { newVersion },\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(error, \"Failed to register schema\");\n    }\n  }\n\n  /**\n   * Get a schema by name and version\n   * @param name - The schema name\n   * @param version - The schema version\n   * @returns The schema definition\n   */\n  public async getSchema(name: string, version: number): Promise<SchemaDef> {\n    try {\n      const { data } = await SchemaResource.getSchemaByNameAndVersion({\n        path: { name, version },\n        client: this._client,\n        throwOnError: true,\n      });\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to get schema '${name}' version ${version}`\n      );\n    }\n  }\n\n  /**\n   * Get the latest version of a schema by name\n   * @param name - The schema name\n   * @returns The schema definition\n   */\n  public async getSchemaByName(name: string): Promise<SchemaDef> {\n    try {\n      const { data } =\n        await SchemaResource.getSchemaByNameWithLatestVersion({\n          path: { name },\n          client: this._client,\n          throwOnError: true,\n        });\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to get schema '${name}'`);\n    }\n  }\n\n  /**\n   * Get all schemas\n   * @returns Array of all schema definitions\n   */\n  public async getAllSchemas(): Promise<SchemaDef[]> {\n    try {\n      const { data } = await SchemaResource.getAllSchemas({\n        client: this._client,\n        throwOnError: true,\n      });\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(error, \"Failed to get all schemas\");\n    }\n  }\n\n  /**\n   * Delete a specific version of a schema\n   * @param name - The schema name\n   * @param version - The schema version\n   */\n  public async deleteSchema(name: string, version: number): Promise<void> {\n    try {\n      await SchemaResource.deleteSchemaByNameAndVersion({\n        path: { name, version },\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to delete schema '${name}' version ${version}`\n      );\n    }\n  }\n\n  /**\n   * Delete all versions of a schema by name\n   * @param name - The schema name\n   */\n  public async deleteSchemaByName(name: string): Promise<void> {\n    try {\n      await SchemaResource.deleteSchemaByName({\n        path: { name },\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to delete schema '${name}'`);\n    }\n  }\n}\n","import type { Client, Tag } from \"../../../open-api\";\nimport { SecretResource } from \"../../../open-api/generated\";\nimport { handleSdkError } from \"../../helpers/errors\";\n\nexport class SecretClient {\n  public readonly _client: Client;\n\n  constructor(client: Client) {\n    this._client = client;\n  }\n\n  /**\n   * Store a secret value\n   * @param key - The secret key\n   * @param value - The secret value\n   */\n  public async putSecret(key: string, value: string): Promise<void> {\n    try {\n      await SecretResource.putSecret({\n        path: { key },\n        body: value,\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to put secret '${key}'`);\n    }\n  }\n\n  /**\n   * Get a secret value\n   * @param key - The secret key\n   * @returns The secret value\n   */\n  public async getSecret(key: string): Promise<string> {\n    try {\n      const { data } = await SecretResource.getSecret({\n        path: { key },\n        client: this._client,\n        throwOnError: true,\n      });\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to get secret '${key}'`);\n    }\n  }\n\n  /**\n   * Delete a secret\n   * @param key - The secret key\n   */\n  public async deleteSecret(key: string): Promise<void> {\n    try {\n      await SecretResource.deleteSecret({\n        path: { key },\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to delete secret '${key}'`);\n    }\n  }\n\n  /**\n   * List all secret names\n   * @returns Array of secret names\n   */\n  public async listAllSecretNames(): Promise<string[]> {\n    try {\n      const { data } = await SecretResource.listAllSecretNames({\n        client: this._client,\n        throwOnError: true,\n      });\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(error, \"Failed to list all secret names\");\n    }\n  }\n\n  /**\n   * List secrets that the user can grant access to\n   * @returns Array of secret names\n   */\n  public async listSecretsThatUserCanGrantAccessTo(): Promise<string[]> {\n    try {\n      const { data } =\n        await SecretResource.listSecretsThatUserCanGrantAccessTo({\n          client: this._client,\n          throwOnError: true,\n        });\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        \"Failed to list secrets that user can grant access to\"\n      );\n    }\n  }\n\n  /**\n   * Check if a secret exists\n   * @param key - The secret key\n   * @returns Whether the secret exists\n   */\n  public async secretExists(key: string): Promise<boolean> {\n    try {\n      const { data } = await SecretResource.secretExists({\n        path: { key },\n        client: this._client,\n        throwOnError: true,\n      });\n      // The API returns an object; a successful response means the secret exists\n      return data !== undefined && data !== null;\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to check if secret '${key}' exists`);\n    }\n  }\n\n  /**\n   * Set tags for a secret\n   * @param tags - The tags to set\n   * @param key - The secret key\n   */\n  public async setSecretTags(tags: Tag[], key: string): Promise<void> {\n    try {\n      await SecretResource.putTagForSecret({\n        path: { key },\n        body: tags,\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to set tags for secret '${key}'`);\n    }\n  }\n\n  /**\n   * Get tags for a secret\n   * @param key - The secret key\n   * @returns Array of tags\n   */\n  public async getSecretTags(key: string): Promise<Tag[]> {\n    try {\n      const { data } = await SecretResource.getTags({\n        path: { key },\n        client: this._client,\n        throwOnError: true,\n      });\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to get tags for secret '${key}'`);\n    }\n  }\n\n  /**\n   * Delete tags from a secret\n   * @param tags - The tags to delete\n   * @param key - The secret key\n   */\n  public async deleteSecretTags(tags: Tag[], key: string): Promise<void> {\n    try {\n      await SecretResource.deleteTagForSecret({\n        path: { key },\n        body: tags,\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to delete tags from secret '${key}'`);\n    }\n  }\n}\n","import { ServiceRegistryResource } from \"../../../open-api/generated\";\nimport type {\n  Client,\n  CircuitBreakerTransitionResponse,\n  ProtoRegistryEntry,\n  ServiceMethod,\n  ServiceRegistry,\n} from \"../../../open-api\";\nimport { handleSdkError } from \"../../helpers/errors\";\n\n/**\n * Client for interacting with the Service Registry API\n */\nexport class ServiceRegistryClient {\n  public readonly _client: Client;\n\n  constructor(client: Client) {\n    this._client = client;\n  }\n\n  /**\n   * Retrieve all registered services\n   * @returns Array of all registered services\n   */\n  public async getRegisteredServices(): Promise<ServiceRegistry[]> {\n    try {\n      const { data } = await ServiceRegistryResource.getRegisteredServices({\n        client: this._client,\n        throwOnError: true,\n      });\n\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(error, \"Failed to get registered services\");\n    }\n  }\n\n  /**\n   * Remove a service by name\n   * @param name The name of the service to remove\n   * @returns Promise that resolves when service is removed\n   */\n  public async removeService(name: string): Promise<void> {\n    try {\n      await ServiceRegistryResource.removeService({\n        client: this._client,\n        path: { name },\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to remove service '${name}'`);\n    }\n  }\n\n  /**\n   * Get a service by name\n   * @param name The name of the service to retrieve\n   * @returns The requested service registry\n   */\n  public async getService(name: string): Promise<ServiceRegistry | undefined> {\n    try {\n      const { data } = await ServiceRegistryResource.getService({\n        client: this._client,\n        path: { name },\n        throwOnError: true,\n      });\n\n      // OpenAPI client returns response.body (ReadableStream) when response has no Content-Type (e.g. 200 empty)\n      if (data != null && typeof (data as ReadableStream).getReader === \"function\") {\n        return undefined;\n      }\n      if (typeof data === \"object\") {\n        return Object.keys(data).length ? data : undefined;\n      }\n      return undefined;\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to get service '${name}'`);\n    }\n  }\n\n  /**\n   * Open the circuit breaker for a service\n   * @param name The name of the service\n   * @returns Response with circuit breaker status\n   */\n  public async openCircuitBreaker(\n    name: string\n  ): Promise<CircuitBreakerTransitionResponse> {\n    try {\n      const { data } = await ServiceRegistryResource.openCircuitBreaker({\n        client: this._client,\n        path: { name },\n        throwOnError: true,\n      });\n\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to open circuit breaker for service '${name}'`\n      );\n    }\n  }\n\n  /**\n   * Close the circuit breaker for a service\n   * @param name The name of the service\n   * @returns Response with circuit breaker status\n   */\n  public async closeCircuitBreaker(\n    name: string\n  ): Promise<CircuitBreakerTransitionResponse> {\n    try {\n      const { data } = await ServiceRegistryResource.closeCircuitBreaker({\n        client: this._client,\n        path: { name },\n        throwOnError: true,\n      });\n\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to close circuit breaker for service '${name}'`\n      );\n    }\n  }\n\n  /**\n   * Get circuit breaker status for a service\n   * @param name The name of the service\n   * @returns Response with circuit breaker status\n   */\n  public async getCircuitBreakerStatus(\n    name: string\n  ): Promise<CircuitBreakerTransitionResponse> {\n    try {\n      const { data } = await ServiceRegistryResource.getCircuitBreakerStatus({\n        client: this._client,\n        path: { name },\n        throwOnError: true,\n      });\n\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to get circuit breaker status for service '${name}'`\n      );\n    }\n  }\n\n  /**\n   * Add or update a service registry\n   * @param serviceRegistry The service registry to add or update\n   * @returns Promise that resolves when service is added or updated\n   */\n  public async addOrUpdateService(\n    serviceRegistry: ServiceRegistry\n  ): Promise<void> {\n    try {\n      await ServiceRegistryResource.addOrUpdateService({\n        client: this._client,\n        body: serviceRegistry,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(error, \"Failed to add or update service\");\n    }\n  }\n\n  /**\n   * Add or update a service method\n   * @param registryName The name of the registry\n   * @param method The service method to add or update\n   * @returns Promise that resolves when method is added or updated\n   */\n  public async addOrUpdateServiceMethod(\n    registryName: string,\n    method: ServiceMethod\n  ): Promise<void> {\n    try {\n      await ServiceRegistryResource.addOrUpdateMethod({\n        client: this._client,\n        path: { registryName },\n        body: method,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to add or update service method for registry '${registryName}'`\n      );\n    }\n  }\n\n  /**\n   * Remove a service method\n   * @param registryName The name of the registry\n   * @param serviceName The name of the service\n   * @param method The name of the method\n   * @param methodType The type of the method\n   * @returns Promise that resolves when method is removed\n   */\n  public async removeMethod(\n    registryName: string,\n    serviceName: string,\n    method: string,\n    methodType: string\n  ): Promise<void> {\n    try {\n      await ServiceRegistryResource.removeMethod({\n        client: this._client,\n        path: { registryName },\n        query: { serviceName, method, methodType },\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to remove method '${method}' from service '${serviceName}'`\n      );\n    }\n  }\n\n  /**\n   * Get proto data\n   * @param registryName The name of the registry\n   * @param filename The name of the proto file\n   * @returns The proto file data as a Blob\n   */\n  public async getProtoData(\n    registryName: string,\n    filename: string\n  ): Promise<Blob> {\n    try {\n      const { data } = await ServiceRegistryResource.getProtoData({\n        client: this._client,\n        path: { registryName, filename },\n        throwOnError: true,\n      });\n\n      return data as unknown as Blob; // todo: remove casting after OpenApi spec is fixed\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to get proto data '${filename}' from registry '${registryName}'`\n      );\n    }\n  }\n\n  /**\n   * Set proto data\n   * @param registryName The name of the registry\n   * @param filename The name of the proto file\n   * @param data The proto file data\n   * @returns Promise that resolves when proto data is set\n   */\n  public async setProtoData(\n    registryName: string,\n    filename: string,\n    data: Blob\n  ): Promise<void> {\n    try {\n      await ServiceRegistryResource.setProtoData({\n        client: this._client,\n        path: { registryName, filename },\n        body: data as unknown as string, // todo: remove casting after OpenApi spec is fixed (byte -> binary)\n        bodySerializer: (body: Blob) => body,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to set proto data '${filename}' for registry '${registryName}'`\n      );\n    }\n  }\n\n  /**\n   * Delete a proto file\n   * @param registryName The name of the registry\n   * @param filename The name of the proto file\n   * @returns Promise that resolves when proto file is deleted\n   */\n  public async deleteProto(\n    registryName: string,\n    filename: string\n  ): Promise<void> {\n    try {\n      await ServiceRegistryResource.deleteProto({\n        client: this._client,\n        path: { registryName, filename },\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to delete proto '${filename}' from registry '${registryName}'`\n      );\n    }\n  }\n\n  /**\n   * Get all proto files for a registry\n   * @param registryName The name of the registry\n   * @returns List of proto registry entries\n   */\n  public async getAllProtos(\n    registryName: string\n  ): Promise<ProtoRegistryEntry[]> {\n    try {\n      const { data } = await ServiceRegistryResource.getAllProtos({\n        client: this._client,\n        path: { registryName },\n        throwOnError: true,\n      });\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to get all protos for registry '${registryName}'`\n      );\n    }\n  }\n\n  /**\n   * Discover service methods\n   * @param name The name of the service\n   * @param create Whether to create the discovered methods (defaults to false)\n   * @returns The discovered service methods\n   */\n  public async discover(\n    name: string,\n    create = false\n  ): Promise<ServiceMethod[]> {\n    try {\n      const { data } = await ServiceRegistryResource.discover({\n        client: this._client,\n        path: { name },\n        query: { create },\n        throwOnError: true,\n      });\n\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to discover service methods for '${name}'`);\n    }\n  }\n}\n","import { TaskResultStatus } from \"../../types\";\nimport { handleSdkError } from \"../../helpers/errors\";\nimport type {\n  Client,\n  PollData,\n  SearchResultTaskSummary,\n  Task,\n  TaskExecLog,\n  Workflow,\n} from \"../../../open-api\";\nimport { TaskResource } from \"../../../open-api/generated\";\n\nexport class TaskClient {\n  public readonly _client: Client;\n\n  constructor(client: Client) {\n    this._client = client;\n  }\n\n  /**\n   * Searches for existing scheduler execution based on below parameters\n   *\n   * @param start\n   * @param size\n   * @param sort\n   * @param freeText\n   * @param query\n   * @returns SearchResultWorkflowScheduleExecutionModel\n   */\n  public async search(\n    start: number,\n    size: number,\n    sort = \"\",\n    freeText: string,\n    query: string\n  ): Promise<SearchResultTaskSummary> {\n    try {\n      const { data } = await TaskResource.search2({\n        query: { start, size, sort, freeText, query },\n        client: this._client,\n        throwOnError: true,\n      });\n\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(error, \"Failed to search tasks\");\n    }\n  }\n\n  /**\n   * Get an existing schedule by Id\n   * @param taskId\n   * @returns Task\n   */\n  public async getTask(taskId: string): Promise<Task> {\n    try {\n      const { data } = await TaskResource.getTask({\n        path: { taskId },\n        client: this._client,\n        throwOnError: true,\n      });\n\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to get task '${taskId}'`);\n    }\n  }\n\n  /**\n   * Update task result status\n   *\n   * @param workflowId\n   * @param taskReferenceName\n   * @param status\n   * @param outputData\n   * @param workerId\n   * @returns\n   */\n  public async updateTaskResult(\n    workflowId: string,\n    taskRefName: string,\n    status: TaskResultStatus,\n    outputData: Record<string, unknown>\n  ): Promise<string> {\n    try {\n      const { data } = await TaskResource.updateTask1({\n        body: {\n          outputData,\n        },\n        path: {\n          workflowId,\n          taskRefName,\n          status,\n        },\n        client: this._client,\n        throwOnError: true,\n      });\n\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to update task '${taskRefName}' result for workflow '${workflowId}'`\n      );\n    }\n  }\n\n  /**\n   * Add a log entry to a task\n   * @param taskId - The task ID\n   * @param message - The log message\n   */\n  public async addTaskLog(taskId: string, message: string): Promise<void> {\n    try {\n      await TaskResource.log({\n        path: { taskId },\n        body: message,\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to add log to task '${taskId}'`);\n    }\n  }\n\n  /**\n   * Get logs for a task\n   * @param taskId - The task ID\n   * @returns Array of task execution logs\n   */\n  public async getTaskLogs(taskId: string): Promise<TaskExecLog[]> {\n    try {\n      const { data } = await TaskResource.getTaskLogs({\n        path: { taskId },\n        client: this._client,\n        throwOnError: true,\n      });\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to get logs for task '${taskId}'`);\n    }\n  }\n\n  /**\n   * Get queue sizes for task types\n   * @param taskType - Optional array of task types to filter by\n   * @returns Map of task type to queue size\n   */\n  public async getQueueSizeForTask(\n    taskType?: string[]\n  ): Promise<Record<string, number>> {\n    try {\n      const { data } = await TaskResource.size({\n        query: { taskType },\n        client: this._client,\n        throwOnError: true,\n      });\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(error, \"Failed to get queue sizes\");\n    }\n  }\n\n  /**\n   * Get poll data for a task type\n   * @param taskType - The task type\n   * @returns Array of poll data\n   */\n  public async getTaskPollData(taskType: string): Promise<PollData[]> {\n    try {\n      const { data } = await TaskResource.getPollData({\n        query: { taskType },\n        client: this._client,\n        throwOnError: true,\n      });\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to get poll data for task type '${taskType}'`\n      );\n    }\n  }\n\n  /**\n   * Updates a task by reference name synchronously and returns the complete workflow\n   * @param workflowId - The workflow instance ID\n   * @param taskRefName - The task reference name\n   * @param status - The task status\n   * @param output - The task output data\n   * @param workerId - Optional worker ID\n   * @returns The updated workflow\n   */\n  public async updateTaskSync(\n    workflowId: string,\n    taskRefName: string,\n    status: \"IN_PROGRESS\" | \"FAILED\" | \"FAILED_WITH_TERMINAL_ERROR\" | \"COMPLETED\",\n    output: Record<string, unknown>,\n    workerId?: string\n  ): Promise<Workflow> {\n    try {\n      const { data } = await TaskResource.updateTaskSync({\n        path: { workflowId, taskRefName, status },\n        body: output,\n        query: { workerid: workerId },\n        client: this._client,\n        throwOnError: true,\n      });\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to update task '${taskRefName}' synchronously for workflow '${workflowId}'`\n      );\n    }\n  }\n}\n","import type { HumanTaskTemplate } from \"../../../open-api\";\nimport { HumanTask } from \"../../../open-api/generated\";\nimport type { Client } from \"../../../open-api\";\nimport { handleSdkError } from \"../../helpers/errors\";\n\nexport class TemplateClient {\n  public readonly _client: Client;\n\n  constructor(client: Client) {\n    this._client = client;\n  }\n\n  /**\n   * Register a new human task template\n   *\n   * @param template\n   * @returns\n   */\n  public async registerTemplate(\n    template: HumanTaskTemplate,\n    asNewVersion = false\n  ): Promise<HumanTaskTemplate> {\n    try {\n      const { data } = await HumanTask.saveTemplate({\n        body: template,\n        query: {\n          newVersion: asNewVersion,\n        },\n        client: this._client,\n        throwOnError: true,\n      });\n\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(error, \"Failed to register template\");\n    }\n  }\n}\n","import type {\n  ExtendedTaskDef as OpenApiExtendedTaskDef,\n  SignalResponse as OpenApiSignalResponse,\n  Task,\n  ExtendedConductorApplication as OpenApiExtendedConductorApplication,\n  Tag,\n  ConductorUser as OpenApiConductorUser,\n  Group as OpenApiGroup,\n  IntegrationApiUpdate as OpenApiIntegrationApiUpdate,\n  RateLimitConfig as OpenApiRateLimitConfig,\n  BulkResponse as OpenApiBulkResponse,\n  TaskSummary as OpenApiTaskSummary,\n} from \"./generated\";\n\nexport interface CommonTaskDef {\n  name: string;\n  taskReferenceName: string;\n}\n\nexport enum Consistency {\n  SYNCHRONOUS = \"SYNCHRONOUS\",\n  DURABLE = \"DURABLE\",\n  REGION_DURABLE = \"REGION_DURABLE\",\n}\n\nexport enum ReturnStrategy {\n  TARGET_WORKFLOW = \"TARGET_WORKFLOW\",\n  BLOCKING_WORKFLOW = \"BLOCKING_WORKFLOW\",\n  BLOCKING_TASK = \"BLOCKING_TASK\",\n  BLOCKING_TASK_INPUT = \"BLOCKING_TASK_INPUT\",\n}\n\nexport enum TaskResultStatusEnum {\n  IN_PROGRESS = \"IN_PROGRESS\",\n  FAILED = \"FAILED\",\n  FAILED_WITH_TERMINAL_ERROR = \"FAILED_WITH_TERMINAL_ERROR\",\n  COMPLETED = \"COMPLETED\",\n}\n\nexport enum TaskType {\n  START = \"START\",\n  SIMPLE = \"SIMPLE\",\n  DYNAMIC = \"DYNAMIC\",\n  FORK_JOIN = \"FORK_JOIN\",\n  FORK_JOIN_DYNAMIC = \"FORK_JOIN_DYNAMIC\",\n  DECISION = \"DECISION\",\n  SWITCH = \"SWITCH\",\n  JOIN = \"JOIN\",\n  DO_WHILE = \"DO_WHILE\",\n  SUB_WORKFLOW = \"SUB_WORKFLOW\",\n  START_WORKFLOW = \"START_WORKFLOW\",\n  EVENT = \"EVENT\",\n  WAIT = \"WAIT\",\n  WAIT_FOR_WEBHOOK = \"WAIT_FOR_WEBHOOK\",\n  USER_DEFINED = \"USER_DEFINED\",\n  HTTP = \"HTTP\",\n  HTTP_POLL = \"HTTP_POLL\",\n  HUMAN = \"HUMAN\",\n  LAMBDA = \"LAMBDA\",\n  INLINE = \"INLINE\",\n  EXCLUSIVE_JOIN = \"EXCLUSIVE_JOIN\",\n  TERMINAL = \"TERMINAL\",\n  TERMINATE = \"TERMINATE\",\n  KAFKA_PUBLISH = \"KAFKA_PUBLISH\",\n  JSON_JQ_TRANSFORM = \"JSON_JQ_TRANSFORM\",\n  SET_VARIABLE = \"SET_VARIABLE\",\n  GET_DOCUMENT = \"GET_DOCUMENT\",\n  LLM_CHAT_COMPLETE = \"LLM_CHAT_COMPLETE\",\n  LLM_TEXT_COMPLETE = \"LLM_TEXT_COMPLETE\",\n  LLM_GENERATE_EMBEDDINGS = \"LLM_GENERATE_EMBEDDINGS\",\n  LLM_INDEX_TEXT = \"LLM_INDEX_TEXT\",\n  LLM_SEARCH_INDEX = \"LLM_SEARCH_INDEX\",\n  LLM_SEARCH_EMBEDDINGS = \"LLM_SEARCH_EMBEDDINGS\",\n  LLM_STORE_EMBEDDINGS = \"LLM_STORE_EMBEDDINGS\",\n  LLM_GET_EMBEDDINGS = \"LLM_GET_EMBEDDINGS\",\n  GENERATE_IMAGE = \"GENERATE_IMAGE\",\n  GENERATE_AUDIO = \"GENERATE_AUDIO\",\n  CALL_MCP_TOOL = \"CALL_MCP_TOOL\",\n  LIST_MCP_TOOLS = \"LIST_MCP_TOOLS\",\n}\n\nexport enum ServiceType {\n  HTTP = \"HTTP\",\n  MCP_REMOTE = \"MCP_REMOTE\",\n  gRPC = \"gRPC\",\n}\n\nexport type TaskDefTypes =\n  | SimpleTaskDef\n  | DoWhileTaskDef\n  | EventTaskDef\n  | ForkJoinTaskDef\n  | ForkJoinDynamicDef\n  | HttpTaskDef\n  | InlineTaskDef\n  | JsonJQTransformTaskDef\n  | KafkaPublishTaskDef\n  | SetVariableTaskDef\n  | SubWorkflowTaskDef\n  | SwitchTaskDef\n  | TerminateTaskDef\n  | JoinTaskDef\n  | WaitTaskDef;\n\nexport interface DoWhileTaskDef extends CommonTaskDef {\n  inputParameters: Record<string, unknown>;\n  type: TaskType.DO_WHILE;\n  startDelay?: number;\n  optional?: boolean;\n  asyncComplete?: boolean;\n  loopCondition: string;\n  loopOver: TaskDefTypes[];\n}\n\nexport interface EventTaskDef extends CommonTaskDef {\n  type: TaskType.EVENT;\n  sink: string;\n  asyncComplete?: boolean;\n  optional?: boolean;\n}\n\nexport interface ForkJoinTaskDef extends CommonTaskDef {\n  type: TaskType.FORK_JOIN;\n  inputParameters?: Record<string, string>;\n  forkTasks: TaskDefTypes[][];\n}\n\nexport interface JoinTaskDef extends CommonTaskDef {\n  type: TaskType.JOIN;\n  inputParameters?: Record<string, string>;\n  joinOn: string[];\n  optional?: boolean;\n  asyncComplete?: boolean;\n}\n\nexport interface ForkJoinDynamicDef extends CommonTaskDef {\n  inputParameters: {\n    dynamicTasks: TaskDefTypes[] | string;\n    dynamicTasksInput: Record<string, unknown> | string;\n  };\n  type: TaskType.FORK_JOIN_DYNAMIC;\n  dynamicForkTasksParam: string; // not string \"dynamicTasks\",\n  dynamicForkTasksInputParamName: string; // not string \"dynamicTasksInput\",\n  startDelay?: number;\n  optional?: boolean;\n  asyncComplete?: boolean;\n}\nexport interface HttpInputParameters {\n  uri: string;\n  method: \"GET\" | \"PUT\" | \"POST\" | \"DELETE\" | \"OPTIONS\" | \"HEAD\";\n  accept?: string;\n  contentType?: string;\n  headers?: Record<string, string>;\n  body?: unknown;\n  connectionTimeOut?: number;\n  readTimeOut?: string;\n}\n\nexport interface HttpTaskDef extends CommonTaskDef {\n  inputParameters: {\n    [x: string]: unknown;\n    http_request: HttpInputParameters;\n  };\n  type: TaskType.HTTP;\n  asyncComplete?: boolean;\n  optional?: boolean;\n}\n\nexport interface InlineTaskInputParameters {\n  evaluatorType: \"javascript\" | \"graaljs\";\n  expression: string;\n  [x: string]: unknown;\n}\n\nexport interface InlineTaskDef extends CommonTaskDef {\n  type: TaskType.INLINE;\n  inputParameters: InlineTaskInputParameters;\n  optional?: boolean;\n}\n\ninterface ContainingQueryExpression {\n  queryExpression: string;\n  [x: string | number | symbol]: unknown;\n}\n\nexport interface JsonJQTransformTaskDef extends CommonTaskDef {\n  type: TaskType.JSON_JQ_TRANSFORM;\n  inputParameters: ContainingQueryExpression;\n  optional?: boolean;\n}\n\nexport interface KafkaPublishInputParameters {\n  topic: string;\n  value: string;\n  bootStrapServers: string;\n  headers: Record<string, string>;\n  key: string;\n  keySerializer: string;\n}\n\nexport interface KafkaPublishTaskDef extends CommonTaskDef {\n  inputParameters: {\n    kafka_request: KafkaPublishInputParameters;\n  };\n  type: TaskType.KAFKA_PUBLISH;\n  optional?: boolean;\n}\n\nexport interface SetVariableTaskDef extends CommonTaskDef {\n  type: TaskType.SET_VARIABLE;\n  inputParameters: Record<string, unknown>;\n  optional?: boolean;\n}\n\nexport interface SimpleTaskDef extends CommonTaskDef {\n  type: TaskType.SIMPLE;\n  inputParameters?: Record<string, unknown>;\n  optional?: boolean;\n}\n\nexport interface SubWorkflowTaskDef extends CommonTaskDef {\n  type: TaskType.SUB_WORKFLOW;\n  inputParameters?: Record<string, unknown>;\n  subWorkflowParam: {\n    name: string;\n    version?: number;\n    taskToDomain?: Record<string, string>;\n  };\n  optional?: boolean;\n}\n\nexport interface SwitchTaskDef extends CommonTaskDef {\n  inputParameters: Record<string, unknown>;\n  type: TaskType.SWITCH;\n  decisionCases: Record<string, TaskDefTypes[]>;\n  defaultCase: TaskDefTypes[];\n  evaluatorType: \"value-param\" | \"javascript\";\n  expression: string;\n  optional?: boolean;\n}\n\nexport interface TerminateTaskDef extends CommonTaskDef {\n  inputParameters: {\n    terminationStatus: \"COMPLETED\" | \"FAILED\";\n    workflowOutput?: Record<string, string>;\n    terminationReason?: string;\n  };\n  type: TaskType.TERMINATE;\n  startDelay?: number;\n}\n\nexport interface WaitTaskDef extends CommonTaskDef {\n  type: TaskType.WAIT;\n  inputParameters: {\n    duration?: string;\n    until?: string;\n  };\n  optional?: boolean;\n}\n\n// TODO: need to remove this once OpenAPI spec is fixed\nexport interface ExtendedTaskDef\n  extends Omit<\n    OpenApiExtendedTaskDef,\n    \"timeoutSeconds\" | \"totalTimeoutSeconds\"\n  > {\n  totalTimeoutSeconds?: number;\n  timeoutSeconds?: number;\n}\n\n// TODO: need to remove this once OpenAPI spec is fixed\nexport interface SignalResponse extends OpenApiSignalResponse {\n  // ========== COMMON FIELDS IN ALL RESPONSES ==========\n  priority?: number;\n  variables?: Record<string, unknown>;\n\n  // ========== FIELDS SPECIFIC TO TARGET_WORKFLOW & BLOCKING_WORKFLOW ==========\n  tasks?: Task[];\n  createdBy?: string;\n  createTime?: number;\n  status?: string;\n  updateTime?: number;\n\n  // ========== FIELDS SPECIFIC TO BLOCKING_TASK & BLOCKING_TASK_INPUT ==========\n  taskType?: string;\n  taskId?: string;\n  referenceTaskName?: string;\n  retryCount?: number;\n  taskDefName?: string;\n  retriedTaskId?: string;\n  workflowType?: string;\n  reasonForIncompletion?: string;\n}\n\n// TODO: need to remove this once AccessKey type is added to OpenAPI spec\nexport interface AccessKey {\n  id: string;\n  secret: string;\n}\n\n// TODO: need to remove this once type is added to OpenAPI spec\nexport interface AccessKeyInfo {\n  id: string;\n  createdAt: number;\n  status: \"ACTIVE\" | \"INACTIVE\";\n}\n\n// TODO: need to remove this once ApplicationRole type is added to OpenAPI spec\nexport type ApplicationRole =\n  | \"ADMIN\"\n  | \"UNRESTRICTED_WORKER\"\n  | \"METADATA_MANAGER\"\n  | \"WORKFLOW_MANAGER\"\n  | \"APPLICATION_MANAGER\"\n  | \"USER\"\n  | \"USER_READ_ONLY\"\n  | \"WORKER\"\n  | \"APPLICATION_CREATOR\"\n  | \"METADATA_API\"\n  | \"PROMPT_MANAGER\";\n\n// TODO: need to remove this once ExtendedConductorApplication type is corrected in OpenAPI spec\nexport interface ExtendedConductorApplication\n  extends Required<Omit<OpenApiExtendedConductorApplication, \"tags\">> {\n  tags?: Tag[];\n}\n\n// TODO: remove these once OpenAPI spec includes these fields\n\n/** Extended ConductorUser with fields present in Python SDK but missing from OpenAPI spec */\nexport interface ExtendedConductorUser extends OpenApiConductorUser {\n  contactInformation?: Record<string, string>;\n  namespace?: string;\n}\n\n/** Extended Group with fields present in Python SDK but missing from OpenAPI spec */\nexport interface ExtendedGroup extends OpenApiGroup {\n  contactInformation?: Record<string, string>;\n}\n\n/** Extended IntegrationApiUpdate with fields present in Python SDK but missing from OpenAPI spec */\nexport interface ExtendedIntegrationApiUpdate\n  extends OpenApiIntegrationApiUpdate {\n  maxTokens?: number;\n  frequency?: string;\n}\n\n/** Extended RateLimitConfig with fields present in Python SDK but missing from OpenAPI spec */\nexport interface ExtendedRateLimitConfig extends OpenApiRateLimitConfig {\n  tag?: string;\n  concurrentExecutionLimit?: number;\n}\n\n/** Extended BulkResponse with fields present in Python SDK but missing from OpenAPI spec */\nexport interface ExtendedBulkResponse extends OpenApiBulkResponse {\n  message?: string;\n}\n\n/** Extended TaskSummary with fields present in Python SDK but missing from OpenAPI spec */\nexport interface ExtendedTaskSummary extends OpenApiTaskSummary {\n  domain?: string;\n}\n","/* eslint-disable */\n// Legacy compatibility types: This file provides backward compatibility types.\n// These types are maintained for legacy users and will not be removed.\n// ------------------------------start------------------------------\nimport type {\n  HumanTaskEntry,\n  ScrollableSearchResultWorkflowSummary,\n  Workflow,\n  TaskListSearchResultSummary,\n} from \"./generated\";\nimport type { Client } from \"./generated/client\";\n\n// DEPRECATED\nexport type TimeoutPolicy = {\n  type: string;\n};\n\n// DEPRECATED\nexport type Terminate = TimeoutPolicy & {\n  timeoutSeconds?: number;\n};\n\n// DEPRECATED\nexport type HTScrollableSearchResultHumanTaskEntry = {\n  queryId?: string;\n  results?: HumanTaskEntry[];\n};\n\n// DEPRECATED\nexport type StartWorkflow = {\n  name?: string;\n  version?: number;\n  correlationId?: string;\n  input?: Record<string, any>;\n  taskToDomain?: Record<string, string>;\n};\n\n// DEPRECATED\nexport type SearchResultWorkflowSummary = ScrollableSearchResultWorkflowSummary;\n\n// DEPRECATED\nexport type SearchResultWorkflow = {\n  totalHits?: number;\n  results?: Array<Workflow>;\n};\n\n// DEPRECATED\nexport type SearchResultTask = TaskListSearchResultSummary;\n\n// DEPRECATED\nexport type ExternalStorageLocation = {\n  uri?: string;\n  path?: string;\n};\n\n// DEPRECATED\nexport interface OnCancel {\n  readonly isResolved: boolean;\n  readonly isRejected: boolean;\n  readonly isCancelled: boolean;\n\n  (cancelHandler: () => void): void;\n}\n\n// DEPRECATED\nexport type ApiRequestOptions = {\n  readonly method:\n    | \"GET\"\n    | \"PUT\"\n    | \"POST\"\n    | \"DELETE\"\n    | \"OPTIONS\"\n    | \"HEAD\"\n    | \"PATCH\";\n  readonly url: string;\n  readonly path?: Record<string, any>;\n  readonly cookies?: Record<string, any>;\n  readonly headers?: Record<string, any>;\n  readonly query?: Record<string, any>;\n  readonly formData?: Record<string, any>;\n  readonly body?: any;\n  readonly mediaType?: string;\n  readonly responseHeader?: string;\n  readonly errors?: Record<number, string>;\n};\n\n// DEPRECATED\ntype Resolver<T> = (options: ApiRequestOptions) => Promise<T>;\nexport type OpenAPIConfig = {\n  BASE: string;\n  VERSION: string;\n  WITH_CREDENTIALS: boolean;\n  CREDENTIALS: \"include\" | \"omit\" | \"same-origin\";\n  TOKEN?: string | Resolver<string> | undefined;\n  USERNAME?: string | Resolver<string> | undefined;\n  PASSWORD?: string | Resolver<string> | undefined;\n  HEADERS?: Headers | Resolver<Headers> | undefined;\n  ENCODE_PATH?: ((path: string) => string) | undefined;\n};\n\n// DEPRECATED\nexport type ApiResult = {\n  readonly url: string;\n  readonly ok: boolean;\n  readonly status: number;\n  readonly statusText: string;\n  readonly body: any;\n};\n\n// DEPRECATED\nexport class ApiError extends Error {\n  public readonly url: string;\n  public readonly status: number;\n  public readonly statusText: string;\n  public readonly body: any;\n  public readonly request: ApiRequestOptions;\n\n  constructor(\n    request: ApiRequestOptions,\n    response: ApiResult,\n    message: string\n  ) {\n    super(message);\n\n    this.name = \"ApiError\";\n    this.url = response.url;\n    this.status = response.status;\n    this.statusText = response.statusText;\n    this.body = response.body;\n    this.request = request;\n  }\n}\n\n// DEPRECATED\nexport type ConductorClient = Client;\n\n// DEPRECATED\nexport class CancelError extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = \"CancelError\";\n  }\n\n  public get isCancelled(): boolean {\n    return true;\n  }\n}\n\n// DEPRECATED\nexport class CancelablePromise<T> implements Promise<T> {\n  #isResolved: boolean;\n  #isRejected: boolean;\n  #isCancelled: boolean;\n  readonly #cancelHandlers: (() => void)[];\n  readonly #promise: Promise<T>;\n  #resolve?: (value: T | PromiseLike<T>) => void;\n  #reject?: (reason?: any) => void;\n\n  constructor(\n    executor: (\n      resolve: (value: T | PromiseLike<T>) => void,\n      reject: (reason?: any) => void,\n      onCancel: OnCancel\n    ) => void\n  ) {\n    this.#isResolved = false;\n    this.#isRejected = false;\n    this.#isCancelled = false;\n    this.#cancelHandlers = [];\n    this.#promise = new Promise<T>((resolve, reject) => {\n      this.#resolve = resolve;\n      this.#reject = reject;\n\n      const onResolve = (value: T | PromiseLike<T>): void => {\n        if (this.#isResolved || this.#isRejected || this.#isCancelled) {\n          return;\n        }\n        this.#isResolved = true;\n        if (this.#resolve) this.#resolve(value);\n      };\n\n      const onReject = (reason?: any): void => {\n        if (this.#isResolved || this.#isRejected || this.#isCancelled) {\n          return;\n        }\n        this.#isRejected = true;\n        if (this.#reject) this.#reject(reason);\n      };\n\n      const onCancel = (cancelHandler: () => void): void => {\n        if (this.#isResolved || this.#isRejected || this.#isCancelled) {\n          return;\n        }\n        this.#cancelHandlers.push(cancelHandler);\n      };\n\n      Object.defineProperty(onCancel, \"isResolved\", {\n        get: (): boolean => this.#isResolved,\n      });\n\n      Object.defineProperty(onCancel, \"isRejected\", {\n        get: (): boolean => this.#isRejected,\n      });\n\n      Object.defineProperty(onCancel, \"isCancelled\", {\n        get: (): boolean => this.#isCancelled,\n      });\n\n      return executor(onResolve, onReject, onCancel as OnCancel);\n    });\n  }\n\n  get [Symbol.toStringTag]() {\n    return \"Cancellable Promise\";\n  }\n\n  public then<TResult1 = T, TResult2 = never>(\n    onFulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null,\n    onRejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null\n  ): Promise<TResult1 | TResult2> {\n    return this.#promise.then(onFulfilled, onRejected);\n  }\n\n  public catch<TResult = never>(\n    onRejected?: ((reason: any) => TResult | PromiseLike<TResult>) | null\n  ): Promise<T | TResult> {\n    return this.#promise.catch(onRejected);\n  }\n\n  public finally(onFinally?: (() => void) | null): Promise<T> {\n    return this.#promise.finally(onFinally);\n  }\n\n  public cancel(): void {\n    if (this.#isResolved || this.#isRejected || this.#isCancelled) {\n      return;\n    }\n    this.#isCancelled = true;\n    if (this.#cancelHandlers.length) {\n      try {\n        for (const cancelHandler of this.#cancelHandlers) {\n          cancelHandler();\n        }\n      } catch (error) {\n        console.warn(\"Cancellation threw an error\", error);\n        return;\n      }\n    }\n    this.#cancelHandlers.length = 0;\n    if (this.#reject) this.#reject(new CancelError(\"Request aborted\"));\n  }\n\n  public get isCancelled(): boolean {\n    return this.#isCancelled;\n  }\n}\n\n// DEPRECATED\nexport abstract class BaseHttpRequest {\n  constructor(public readonly config: OpenAPIConfig) {}\n\n  public abstract request<T>(options: ApiRequestOptions): CancelablePromise<T>;\n}\n// ------------------------------end------------------------------\n","import type { SignalResponse, Task, Workflow } from \"../../../../open-api\";\nimport type { EnhancedSignalResponse } from \"../types\";\n\nexport const enhanceSignalResponse = (\n  response: SignalResponse\n): EnhancedSignalResponse => {\n  return {\n    ...response,\n    // ========== CHECK METHODS ==========\n\n    /**\n     * Returns true if the response contains target workflow details\n     */\n    isTargetWorkflow(): boolean {\n      return this.responseType === \"TARGET_WORKFLOW\";\n    },\n\n    /**\n     * Returns true if the response contains blocking workflow details\n     */\n    isBlockingWorkflow(): boolean {\n      return this.responseType === \"BLOCKING_WORKFLOW\";\n    },\n\n    /**\n     * Returns true if the response contains blocking task details\n     */\n    isBlockingTask(): boolean {\n      return this.responseType === \"BLOCKING_TASK\";\n    },\n\n    /**\n     * Returns true if the response contains blocking task input\n     */\n    isBlockingTaskInput(): boolean {\n      return this.responseType === \"BLOCKING_TASK_INPUT\";\n    },\n\n    // ========== EXTRACTION METHODS ==========\n\n    /**\n     * Extracts workflow details from a SignalResponse\n     * @throws Error if the response type doesn't contain workflow details\n     */\n    getWorkflow(): Workflow {\n      if (!this.isTargetWorkflow() && !this.isBlockingWorkflow()) {\n        throw new Error(\n          `Response type ${this.responseType} does not contain workflow details`\n        );\n      }\n\n      return {\n        workflowId: this.workflowId,\n        status: this.status,\n        tasks: this.tasks || [],\n        createdBy: this.createdBy,\n        createTime: this.createTime,\n        updateTime: this.updateTime,\n        input: this.input || {},\n        output: this.output || {},\n        variables: this.variables || {},\n        priority: this.priority,\n      } as Workflow;\n    },\n\n    /**\n     * Extracts task details from a SignalResponse\n     * @throws Error if the response type doesn't contain task details\n     */\n    getBlockingTask(): Task {\n      if (!this.isBlockingTask() && !this.isBlockingTaskInput()) {\n        throw new Error(\n          `Response type ${this.responseType} does not contain task details`\n        );\n      }\n\n      return {\n        taskId: this.taskId,\n        taskType: this.taskType,\n        taskDefName: this.taskDefName,\n        referenceTaskName: this.referenceTaskName,\n        retryCount: this.retryCount || 0,\n        status: this.status,\n        inputData: this.input || {},\n        outputData: this.output || {},\n        workflowInstanceId: this.workflowId,\n        workflowType: this.workflowType,\n      } as Task;\n    },\n\n    /**\n     * Extracts task input from a SignalResponse\n     * Only valid for BLOCKING_TASK_INPUT responses\n     * @throws Error if the response type doesn't contain task input details\n     */\n    getTaskInput(): Record<string, unknown> {\n      if (!this.isBlockingTaskInput()) {\n        throw new Error(\n          `Response type ${this.responseType} does not contain task input details`\n        );\n      }\n\n      return this.input || {};\n    },\n\n    // ========== UTILITY METHODS ==========\n\n    /**\n     * Get the workflow ID from the response\n     */\n    getWorkflowId(): string {\n      return this.workflowId || this.targetWorkflowId || \"\";\n    },\n\n    /**\n     * Get the target workflow ID from the response\n     */\n    getTargetWorkflowId(): string {\n      return this.targetWorkflowId || this.workflowId || \"\";\n    },\n\n    /**\n     * Check if the response has workflow data\n     */\n    hasWorkflowData(): boolean {\n      return this.isTargetWorkflow() || this.isBlockingWorkflow();\n    },\n\n    /**\n     * Check if the response has task data\n     */\n    hasTaskData(): boolean {\n      return this.isBlockingTask() || this.isBlockingTaskInput();\n    },\n\n    /**\n     * Get response type as string\n     */\n    getResponseType(): string {\n      return this.responseType || \"\";\n    },\n\n    /**\n     * Check if the workflow/task is in a terminal state\n     */\n    isTerminal(): boolean {\n      const terminalStates = [\"COMPLETED\", \"FAILED\", \"TERMINATED\", \"TIMED_OUT\"];\n      return terminalStates.includes(this.status || \"\");\n    },\n\n    /**\n     * Check if the workflow/task is currently running\n     */\n    isRunning(): boolean {\n      return this.status === \"RUNNING\";\n    },\n\n    /**\n     * Check if the workflow/task is paused\n     */\n    isPaused(): boolean {\n      return this.status === \"PAUSED\";\n    },\n\n    /**\n     * Get a summary of the response for logging\n     */\n    getSummary(): string {\n      const parts = [\n        `type=${this.responseType}`,\n        `workflowId=${this.workflowId}`,\n        `status=${this.status}`,\n      ];\n\n      if (this.hasTaskData()) {\n        parts.push(`taskId=${this.taskId}`);\n        parts.push(`taskType=${this.taskType}`);\n      }\n\n      if (this.hasWorkflowData() && this.tasks) {\n        parts.push(`tasksCount=${this.tasks.length}`);\n      }\n\n      return `SignalResponse{${parts.join(\", \")}}`;\n    },\n\n    /**\n     * Convert to JSON for debugging (excludes large objects)\n     */\n    toDebugJSON(): Record<string, unknown> {\n      return {\n        responseType: this.responseType,\n        workflowId: this.workflowId,\n        targetWorkflowId: this.targetWorkflowId,\n        targetWorkflowStatus: this.targetWorkflowStatus,\n        status: this.status,\n        taskId: this.taskId,\n        taskType: this.taskType,\n        referenceTaskName: this.referenceTaskName,\n        createTime: this.createTime,\n        updateTime: this.updateTime,\n        priority: this.priority,\n        retryCount: this.retryCount,\n        tasksCount: this.tasks?.length,\n        hasInput: Boolean(this.input && Object.keys(this.input).length > 0),\n        hasOutput: Boolean(this.output && Object.keys(this.output).length > 0),\n        hasVariables: Boolean(\n          this.variables && Object.keys(this.variables).length > 0\n        ),\n      };\n    },\n\n    /**\n     * String representation for debugging\n     */\n    toString(): string {\n      return this.getSummary();\n    },\n  };\n};\n","export function reverseFind<T>(\n  array: T[],\n  predicate: (a: T, idx?: number, arr?: T[]) => boolean\n): T | undefined {\n  for (let i = array.length - 1; i >= 0; i--) {\n    if (predicate(array[i], i, array)) {\n      return array[i];\n    }\n  }\n  return undefined;\n}\n","import { Task } from \"../../../../open-api\";\nimport { TaskFinderPredicate } from \"../types\";\n\nexport const isCompletedTaskMatchingType =\n  (taskType: string): TaskFinderPredicate =>\n  (task: Task) =>\n    task.status === \"COMPLETED\" && task.taskType === taskType;\n","export const RETRY_TIME_IN_MILLISECONDS = 10000;\n","import {\n  Client,\n  Consistency,\n  ReturnStrategy,\n  TaskResultStatusEnum,\n  WorkflowDef,\n  RerunWorkflowRequest,\n  ScrollableSearchResultWorkflowSummary,\n  SkipTaskRequest,\n  StartWorkflowRequest,\n  Task,\n  Workflow,\n  WorkflowRun,\n  WorkflowStatus,\n} from \"../../../open-api\";\nimport type {\n  CorrelationIdsSearchRequest,\n  WorkflowTestRequest,\n  WorkflowStateUpdate,\n} from \"../../../open-api/generated\";\nimport {\n  MetadataResource,\n  TaskResource,\n  WorkflowResource,\n} from \"../../../open-api/generated\";\nimport { TaskResultOutputData, TaskResultStatus } from \"../../types\";\nimport { EnhancedSignalResponse, TaskFinderPredicate } from \"./types\";\nimport { handleSdkError } from \"../../helpers/errors\";\nimport { enhanceSignalResponse } from \"./helpers/enhanceSignalResponse\";\nimport { reverseFind } from \"./helpers/reverseFind\";\nimport { isCompletedTaskMatchingType } from \"./helpers/isCompletedTaskMatchingType\";\nimport { RETRY_TIME_IN_MILLISECONDS } from \"./constants\";\n\nexport class WorkflowExecutor {\n  public readonly _client: Client;\n\n  constructor(client: Client) {\n    this._client = client;\n  }\n\n  /**\n   * Will persist a workflow in conductor\n   * @param override If true will override the existing workflow with the definition\n   * @param workflow Complete workflow definition\n   * @returns null\n   */\n\n  public async registerWorkflow(\n    override: boolean,\n    workflow: WorkflowDef\n  ): Promise<void> {\n    try {\n      // Clone so the HTTP client never receives a body it may have already read/locked\n      // (avoids \"Response body object should not be disturbed or locked\" in some environments).\n      await MetadataResource.create({\n        body: JSON.parse(JSON.stringify(workflow)) as WorkflowDef,\n        query: { overwrite: override },\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(error, \"Failed to register workflow\");\n    }\n  }\n\n  /**\n   * Takes a StartWorkflowRequest. returns a Promise<string> with the workflowInstanceId of the running workflow\n   * @param workflowRequest\n   * @returns\n   */\n  public async startWorkflow(\n    workflowRequest: StartWorkflowRequest\n  ): Promise<string> {\n    try {\n      const { data } = await WorkflowResource.startWorkflow({\n        body: workflowRequest,\n        client: this._client,\n        throwOnError: true,\n      });\n\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(error, \"Failed to start workflow\");\n    }\n  }\n\n  /**\n   * Execute a workflow synchronously (original method - backward compatible)\n   */\n  public async executeWorkflow(\n    workflowRequest: StartWorkflowRequest,\n    name: string,\n    version: number,\n    requestId: string,\n    waitUntilTaskRef?: string\n  ): Promise<WorkflowRun>;\n\n  /**\n   * Execute a workflow with return strategy support (new method)\n   */\n  public async executeWorkflow(\n    workflowRequest: StartWorkflowRequest,\n    name: string,\n    version: number,\n    requestId: string,\n    waitUntilTaskRef: string,\n    waitForSeconds: number,\n    consistency: Consistency,\n    returnStrategy: ReturnStrategy\n  ): Promise<EnhancedSignalResponse>;\n\n  // Implementation\n  public async executeWorkflow(\n    workflowRequest: StartWorkflowRequest,\n    name: string,\n    version: number,\n    requestId: string,\n    waitUntilTaskRef = \"\",\n    waitForSeconds?: number,\n    consistency?: Consistency,\n    returnStrategy?: ReturnStrategy\n  ): Promise<WorkflowRun | EnhancedSignalResponse> {\n    try {\n      const { data } = await WorkflowResource.executeWorkflow({\n        body: workflowRequest,\n        path: {\n          name,\n          version,\n        },\n        query: {\n          requestId,\n          waitUntilTaskRef,\n          waitForSeconds,\n          consistency,\n          returnStrategy,\n        },\n        client: this._client,\n        throwOnError: true,\n      });\n\n      return enhanceSignalResponse(data);\n    } catch (error: unknown) {\n      handleSdkError(error, \"Failed to execute workflow\");\n    }\n  }\n\n  public startWorkflows(\n    workflowsRequest: StartWorkflowRequest[]\n  ): Promise<string>[] {\n    try {\n      return workflowsRequest.map((req) => this.startWorkflow(req));\n    } catch (error: unknown) {\n      handleSdkError(error, \"Failed to start workflows\");\n    }\n  }\n\n  public async goBackToTask(\n    workflowInstanceId: string,\n    taskFinderPredicate: TaskFinderPredicate,\n    rerunWorkflowRequestOverrides: Partial<RerunWorkflowRequest> = {}\n  ): Promise<void> {\n    try {\n      const executedTasks =\n        (await this.getExecution(workflowInstanceId))?.tasks ?? [];\n      const maybePreviousTask = reverseFind<Task>(\n        executedTasks,\n        taskFinderPredicate\n      );\n\n      if (!maybePreviousTask) {\n        throw new Error(\"Task not found\");\n      }\n\n      await this.reRun(workflowInstanceId, {\n        //taskInput: previousTask.inputData,\n        ...rerunWorkflowRequestOverrides,\n        reRunFromTaskId: maybePreviousTask.taskId,\n      });\n    } catch (error: unknown) {\n      handleSdkError(error, \"Failed to go back to task\");\n    }\n  }\n\n  public async goBackToFirstTaskMatchingType(\n    workflowInstanceId: string,\n    taskType: string\n  ): Promise<void> {\n    try {\n      return this.goBackToTask(\n        workflowInstanceId,\n        isCompletedTaskMatchingType(taskType)\n      );\n    } catch (error: unknown) {\n      handleSdkError(error, \"Failed to go back to first task matching type\");\n    }\n  }\n\n  /**\n   * Takes an workflowInstanceId and an includeTasks and an optional retry parameter returns the whole execution status.\n   * If includeTasks flag is provided. Details of tasks execution will be returned as well,\n   * retry specifies the amount of retrys before throwing an error.\n   *\n   * @param workflowInstanceId\n   * @param includeTasks\n   * @param retry\n   * @returns\n   */\n  public async getWorkflow(\n    workflowInstanceId: string,\n    includeTasks: boolean,\n    retry = 0\n  ): Promise<Workflow> {\n    try {\n      const { data: workflowStatus } =\n        await WorkflowResource.getExecutionStatus({\n          path: { workflowId: workflowInstanceId },\n          query: { includeTasks },\n          client: this._client,\n          throwOnError: true,\n        });\n\n      return workflowStatus;\n    } catch (error: unknown) {\n      const status =\n        error && typeof error === \"object\" && \"status\" in error\n          ? (error.status as number)\n          : undefined;\n      const isRetryableError =\n        status !== undefined && [500, 404, 403].includes(status);\n      if (!isRetryableError || retry === 0) {\n        handleSdkError(error, \"Failed to get workflow\");\n      }\n    }\n\n    await new Promise((res) =>\n      setTimeout(() => res(true), RETRY_TIME_IN_MILLISECONDS)\n    );\n\n    return this.getWorkflow(workflowInstanceId, includeTasks, retry - 1);\n  }\n\n  /**\n   *  Returns a summary of the current workflow status.\n   *\n   * @param workflowInstanceId current running workflow\n   * @param includeOutput flag to include output\n   * @param includeVariables flag to include variable\n   * @returns Promise<WorkflowStatus>\n   */\n  public async getWorkflowStatus(\n    workflowInstanceId: string,\n    includeOutput: boolean,\n    includeVariables: boolean\n  ): Promise<WorkflowStatus> {\n    try {\n      const { data } = await WorkflowResource.getWorkflowStatusSummary({\n        path: { workflowId: workflowInstanceId },\n        query: { includeOutput, includeVariables },\n        client: this._client,\n        throwOnError: true,\n      });\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to get workflow '${workflowInstanceId}' status`\n      );\n    }\n  }\n\n  /**\n   *  Returns a summary of the current workflow status.\n   *\n   * @param workflowInstanceId current running workflow\n   * @param includeOutput flag to include output\n   * @param includeVariables flag to include variable\n   * @returns Promise<WorkflowStatus>\n   */\n  public async getExecution(\n    workflowInstanceId: string,\n    includeTasks = true\n  ): Promise<Workflow> {\n    try {\n      const { data } = await WorkflowResource.getExecutionStatus({\n        path: { workflowId: workflowInstanceId },\n        query: { includeTasks },\n        client: this._client,\n        throwOnError: true,\n      });\n\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to get execution for '${workflowInstanceId}'`\n      );\n    }\n  }\n\n  /**\n   * Pauses a running workflow\n   * @param workflowInstanceId current workflow execution\n   * @returns\n   */\n  public async pause(workflowInstanceId: string): Promise<void> {\n    try {\n      await WorkflowResource.pauseWorkflow({\n        path: { workflowId: workflowInstanceId },\n        client: this._client,\n      });\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to pause workflow '${workflowInstanceId}'`);\n    }\n  }\n\n  /**\n   * Reruns workflowInstanceId workflow. with new parameters\n   *\n   * @param workflowInstanceId current workflow execution\n   * @param rerunWorkflowRequest Rerun Workflow Execution Request\n   * @returns\n   */\n  public async reRun(\n    workflowInstanceId: string,\n    rerunWorkflowRequest: Partial<RerunWorkflowRequest> = {}\n  ): Promise<string> {\n    try {\n      const { data } = await WorkflowResource.rerun({\n        path: { workflowId: workflowInstanceId },\n        body: rerunWorkflowRequest,\n        client: this._client,\n        throwOnError: true,\n      });\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to rerun workflow '${workflowInstanceId}'`);\n    }\n  }\n\n  /**\n   * Restarts workflow with workflowInstanceId, if useLatestDefinition uses last defintion\n   * @param workflowInstanceId\n   * @param useLatestDefinitions\n   * @returns\n   */\n  public async restart(\n    workflowInstanceId: string,\n    useLatestDefinitions: boolean\n  ): Promise<void> {\n    try {\n      const { data } = await WorkflowResource.restart({\n        path: { workflowId: workflowInstanceId },\n        query: { useLatestDefinitions },\n        client: this._client,\n        throwOnError: true,\n      });\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to restart workflow '${workflowInstanceId}'`\n      );\n    }\n  }\n\n  /**\n   * Resumes a previously paused execution\n   *\n   * @param workflowInstanceId Running workflow workflowInstanceId\n   * @returns\n   */\n  public async resume(workflowInstanceId: string): Promise<void> {\n    try {\n      await WorkflowResource.resumeWorkflow({\n        path: { workflowId: workflowInstanceId },\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to resume workflow '${workflowInstanceId}'`\n      );\n    }\n  }\n\n  /**\n   * Retrys workflow from last failing task\n   * if resumeSubworkflowTasks is true will resume tasks in spawned subworkflows\n   *\n   * @param workflowInstanceId\n   * @param resumeSubworkflowTasks\n   * @returns\n   */\n  public async retry(\n    workflowInstanceId: string,\n    resumeSubworkflowTasks: boolean\n  ): Promise<void> {\n    try {\n      await WorkflowResource.retry({\n        path: { workflowId: workflowInstanceId },\n        query: { resumeSubworkflowTasks },\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to retry workflow '${workflowInstanceId}'`);\n    }\n  }\n\n  /**\n   * Searches for existing workflows given the following querys\n   *\n   * @param start\n   * @param size\n   * @param query\n   * @param freeText\n   * @param sort\n   * @param skipCache\n   * @returns\n   */\n  public async search(\n    start: number,\n    size: number,\n    query: string,\n    freeText: string,\n    sort = \"\",\n    skipCache = false\n  ): Promise<ScrollableSearchResultWorkflowSummary> {\n    try {\n      const { data } = await WorkflowResource.search1({\n        query: { start, size, sort, freeText, query, skipCache },\n        client: this._client,\n        throwOnError: true,\n      });\n\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(error, \"Failed to search workflows\");\n    }\n  }\n\n  /**\n   * Skips a task of a running workflow.\n   * by providing a skipTaskRequest you can set the input and the output of the skipped tasks\n   * @param workflowInstanceId\n   * @param taskReferenceName\n   * @param skipTaskRequest\n   * @returns\n   */\n  public async skipTasksFromWorkflow(\n    workflowInstanceId: string,\n    taskReferenceName: string,\n    skipTaskRequest: Partial<SkipTaskRequest>\n  ): Promise<void> {\n    try {\n      await WorkflowResource.skipTaskFromWorkflow({\n        path: { workflowId: workflowInstanceId, taskReferenceName },\n        body: skipTaskRequest,\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to skip task '${taskReferenceName}' in workflow '${workflowInstanceId}'`\n      );\n    }\n  }\n\n  /**\n   * Takes an workflowInstanceId, and terminates a running workflow\n   * @param workflowInstanceId\n   * @param reason\n   * @returns\n   */\n  public async terminate(\n    workflowInstanceId: string,\n    reason: string\n  ): Promise<void> {\n    try {\n      await WorkflowResource.terminate1({\n        path: { workflowId: workflowInstanceId },\n        query: { reason },\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to terminate workflow '${workflowInstanceId}'`\n      );\n    }\n  }\n\n  /**\n   * Takes a taskId and a workflowInstanceId. Will update the task for the corresponding taskId\n   * @param taskId\n   * @param workflowInstanceId\n   * @param taskStatus\n   * @param taskOutput\n   * @returns\n   */\n  public async updateTask(\n    taskId: string,\n    workflowInstanceId: string,\n    taskStatus: TaskResultStatus,\n    outputData: TaskResultOutputData\n  ): Promise<string> {\n    const taskUpdates = { status: taskStatus, taskId, workflowInstanceId };\n    try {\n      const { data } = await TaskResource.updateTask({\n        body: { outputData, ...taskUpdates },\n        client: this._client,\n        throwOnError: true,\n      });\n\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(error, \"Failed to update task\");\n    }\n  }\n\n  /**\n   * Updates a task by reference Name\n   * @param taskReferenceName\n   * @param workflowInstanceId\n   * @param status\n   * @param taskOutput\n   * @returns\n   */\n  public async updateTaskByRefName(\n    taskReferenceName: string,\n    workflowInstanceId: string,\n    status: TaskResultStatus,\n    taskOutput: TaskResultOutputData\n  ): Promise<string> {\n    try {\n      const { data } = await TaskResource.updateTask1({\n        path: {\n          workflowId: workflowInstanceId,\n          taskRefName: taskReferenceName,\n          status,\n        },\n        body: taskOutput,\n        client: this._client,\n        throwOnError: true,\n      });\n\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(error, \"Failed to update task by reference name\");\n    }\n  }\n\n  /**\n   *\n   * @param taskId\n   * @returns\n   */\n  public async getTask(taskId: string): Promise<Task> {\n    try {\n      const { data } = await TaskResource.getTask({\n        path: { taskId },\n        client: this._client,\n        throwOnError: true,\n      });\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to get task '${taskId}'`);\n    }\n  }\n\n  /**\n   * Updates a task by reference name synchronously and returns the complete workflow\n   * @param taskReferenceName\n   * @param workflowInstanceId\n   * @param status\n   * @param taskOutput\n   * @param workerId - Optional\n   * @returns Promise<Workflow>\n   */\n  public async updateTaskSync(\n    taskReferenceName: string,\n    workflowInstanceId: string,\n    status: TaskResultStatusEnum,\n    taskOutput: TaskResultOutputData,\n    workerId?: string\n  ): Promise<Workflow> {\n    try {\n      const { data } = await TaskResource.updateTaskSync({\n        path: {\n          workflowId: workflowInstanceId,\n          taskRefName: taskReferenceName,\n          status,\n        },\n        body: { taskOutput },\n        query: { workerid: workerId },\n        client: this._client,\n        throwOnError: true,\n      });\n\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(error, \"Failed to update task synchronously\");\n    }\n  }\n\n  /**\n   * Signals a workflow task and returns data based on the specified return strategy\n   * @param workflowInstanceId - Workflow instance ID to signal\n   * @param status - Task status to set\n   * @param taskOutput - Output data for the task\n   * @param returnStrategy - Optional strategy for what data to return (defaults to TARGET_WORKFLOW)\n   * @returns Promise<SignalResponse> with data based on the return strategy\n   */\n  public async signal(\n    workflowInstanceId: string,\n    status: TaskResultStatusEnum,\n    taskOutput: TaskResultOutputData,\n    returnStrategy: ReturnStrategy = ReturnStrategy.TARGET_WORKFLOW\n  ): Promise<EnhancedSignalResponse> {\n    try {\n      const { data } = await TaskResource.signalWorkflowTaskSync({\n        path: { workflowId: workflowInstanceId, status },\n        body: { taskOutput },\n        query: { returnStrategy },\n        client: this._client,\n        throwOnError: true,\n      });\n\n      return enhanceSignalResponse(data);\n    } catch (error: unknown) {\n      handleSdkError(error, \"Failed to signal workflow\");\n    }\n  }\n\n  /**\n   * Signals a workflow task asynchronously (fire-and-forget)\n   * @param workflowInstanceId - Workflow instance ID to signal\n   * @param status - Task status to set\n   * @param taskOutput - Output data for the task\n   * @returns Promise<void>\n   */\n  public async signalAsync(\n    workflowInstanceId: string,\n    status: TaskResultStatusEnum,\n    taskOutput: TaskResultOutputData\n  ): Promise<void> {\n    try {\n      await TaskResource.signalWorkflowTaskASync({\n        path: { workflowId: workflowInstanceId, status },\n        body: { taskOutput },\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to signal workflow '${workflowInstanceId}' asynchronously`\n      );\n    }\n  }\n\n  /**\n   * Deletes a workflow execution\n   * @param workflowId - The workflow instance ID to delete\n   * @param archiveWorkflow - Whether to archive the workflow before deletion\n   */\n  public async deleteWorkflow(\n    workflowId: string,\n    archiveWorkflow = true\n  ): Promise<void> {\n    try {\n      await WorkflowResource.delete1({\n        path: { workflowId },\n        query: { archiveWorkflow },\n        client: this._client,\n        throwOnError: true,\n      });\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to delete workflow '${workflowId}'`\n      );\n    }\n  }\n\n  /**\n   * Gets workflows by correlation IDs\n   * @param request - Correlation IDs search request containing workflow names and correlation IDs\n   * @param includeClosed - Whether to include closed workflows\n   * @param includeTasks - Whether to include task details\n   * @returns Map of correlation ID to array of matching workflows\n   */\n  public async getByCorrelationIds(\n    request: CorrelationIdsSearchRequest,\n    includeClosed = false,\n    includeTasks = false\n  ): Promise<Record<string, Workflow[]>> {\n    try {\n      const { data } = await WorkflowResource.getWorkflows1({\n        body: request,\n        query: { includeClosed, includeTasks },\n        client: this._client,\n        throwOnError: true,\n      });\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(error, \"Failed to get workflows by correlation IDs\");\n    }\n  }\n\n  /**\n   * Tests a workflow execution with mock data\n   * @param testRequest - The workflow test request containing workflow definition and mock task outputs\n   * @returns The simulated workflow execution result\n   */\n  public async testWorkflow(\n    testRequest: WorkflowTestRequest\n  ): Promise<Workflow> {\n    try {\n      const { data } = await WorkflowResource.testWorkflow({\n        body: testRequest,\n        client: this._client,\n        throwOnError: true,\n      });\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(error, \"Failed to test workflow\");\n    }\n  }\n\n  /**\n   * Updates workflow variables\n   * @param workflowId - The workflow instance ID\n   * @param variables - The variables to update\n   * @returns The updated workflow\n   */\n  public async updateVariables(\n    workflowId: string,\n    variables: Record<string, unknown>\n  ): Promise<Workflow> {\n    try {\n      const { data } = await WorkflowResource.updateWorkflowState({\n        path: { workflowId },\n        body: variables,\n        client: this._client,\n        throwOnError: true,\n      });\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to update variables for workflow '${workflowId}'`\n      );\n    }\n  }\n\n  /**\n   * Updates the workflow state (task result + variables) and optionally waits for further execution\n   * @param workflowId - The workflow instance ID\n   * @param updateRequest - The state update request containing task result and/or variables\n   * @param requestId - A unique request ID for idempotency\n   * @param waitUntilTaskRef - Optional task reference name to wait until\n   * @param waitForSeconds - Optional number of seconds to wait\n   * @returns The workflow run status after the update\n   */\n  public async updateState(\n    workflowId: string,\n    updateRequest: WorkflowStateUpdate,\n    requestId: string,\n    waitUntilTaskRef?: string,\n    waitForSeconds?: number\n  ): Promise<WorkflowRun> {\n    try {\n      const { data } = await WorkflowResource.updateWorkflowAndTaskState({\n        path: { workflowId },\n        body: updateRequest,\n        query: { requestId, waitUntilTaskRef, waitForSeconds },\n        client: this._client,\n        throwOnError: true,\n      });\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(\n        error,\n        `Failed to update state for workflow '${workflowId}'`\n      );\n    }\n  }\n\n  /**\n   * Starts a workflow by name with input directly (without a StartWorkflowRequest object)\n   * @param name - The workflow name\n   * @param input - The workflow input data\n   * @param version - Optional workflow version\n   * @param correlationId - Optional correlation ID\n   * @param priority - Optional priority\n   * @returns The workflow instance ID\n   */\n  public async startWorkflowByName(\n    name: string,\n    input: Record<string, unknown>,\n    version?: number,\n    correlationId?: string,\n    priority?: number\n  ): Promise<string> {\n    try {\n      const { data } = await WorkflowResource.startWorkflow1({\n        path: { name },\n        body: input,\n        query: { version, correlationId, priority },\n        client: this._client,\n        throwOnError: true,\n      });\n      return data;\n    } catch (error: unknown) {\n      handleSdkError(error, `Failed to start workflow '${name}'`);\n    }\n  }\n}\n","import type { Client } from \"../open-api\";\nimport type { OrkesApiConfig } from \"./types\";\nimport { createConductorClient } from \"./createConductorClient\";\nimport { ApplicationClient } from \"./clients/application\";\nimport { AuthorizationClient } from \"./clients/authorization\";\nimport { EventClient } from \"./clients/event\";\nimport { HumanExecutor } from \"./clients/human\";\nimport { IntegrationClient } from \"./clients/integration\";\nimport { MetadataClient } from \"./clients/metadata\";\nimport { PromptClient } from \"./clients/prompt\";\nimport { SchedulerClient } from \"./clients/scheduler\";\nimport { SchemaClient } from \"./clients/schema\";\nimport { SecretClient } from \"./clients/secret\";\nimport { ServiceRegistryClient } from \"./clients/service-registry\";\nimport { TaskClient } from \"./clients/task\";\nimport { TemplateClient } from \"./clients/template\";\nimport { WorkflowExecutor } from \"./clients/workflow\";\n\n/**\n * Factory class that provides access to all Conductor client instances.\n * Equivalent to Python SDK's `OrkesClients`.\n *\n * Usage:\n * ```typescript\n * const clients = await OrkesClients.from({ serverUrl, keyId, keySecret });\n * const workflowClient = clients.getWorkflowClient();\n * const metadataClient = clients.getMetadataClient();\n * ```\n */\nexport class OrkesClients {\n  private readonly _client: Client;\n\n  constructor(client: Client) {\n    this._client = client;\n  }\n\n  /**\n   * Creates an OrkesClients instance from configuration.\n   * Handles authentication and connection setup.\n   */\n  static async from(config?: OrkesApiConfig): Promise<OrkesClients> {\n    const client = await createConductorClient(config);\n    return new OrkesClients(client);\n  }\n\n  /** Returns the underlying HTTP client */\n  getClient(): Client {\n    return this._client;\n  }\n\n  getWorkflowClient(): WorkflowExecutor {\n    return new WorkflowExecutor(this._client);\n  }\n\n  getMetadataClient(): MetadataClient {\n    return new MetadataClient(this._client);\n  }\n\n  getTaskClient(): TaskClient {\n    return new TaskClient(this._client);\n  }\n\n  getSchedulerClient(): SchedulerClient {\n    return new SchedulerClient(this._client);\n  }\n\n  getSecretClient(): SecretClient {\n    return new SecretClient(this._client);\n  }\n\n  getSchemaClient(): SchemaClient {\n    return new SchemaClient(this._client);\n  }\n\n  getAuthorizationClient(): AuthorizationClient {\n    return new AuthorizationClient(this._client);\n  }\n\n  getIntegrationClient(): IntegrationClient {\n    return new IntegrationClient(this._client);\n  }\n\n  getPromptClient(): PromptClient {\n    return new PromptClient(this._client);\n  }\n\n  getApplicationClient(): ApplicationClient {\n    return new ApplicationClient(this._client);\n  }\n\n  getEventClient(): EventClient {\n    return new EventClient(this._client);\n  }\n\n  getHumanClient(): HumanExecutor {\n    return new HumanExecutor(this._client);\n  }\n\n  getTemplateClient(): TemplateClient {\n    return new TemplateClient(this._client);\n  }\n\n  getServiceRegistryClient(): ServiceRegistryClient {\n    return new ServiceRegistryClient(this._client);\n  }\n}\n","export interface ConductorLogger {\n  info(...args: unknown[]): void\n  error(...args: unknown[]): void\n  debug(...args: unknown[]): void\n  warn?(...args: unknown[]): void\n}\n\nexport type ConductorLogLevel = keyof typeof LOG_LEVELS\nexport interface DefaultLoggerConfig {\n  level?: ConductorLogLevel,\n  tags?: object[]\n}\n\nconst LOG_LEVELS = {\n  DEBUG: 10,\n  INFO: 30,\n  WARN: 40,\n  ERROR: 60\n} as const\n\n\n/*\nThis provides an easy way to get up and running without worrying about configuring a logging framework.\nIdeally, users that care can easily override with any compatible logger (e.g. pino, etc)\n */\nexport class DefaultLogger implements ConductorLogger {\n  private readonly tags: object[]\n  private readonly level: number\n\n  constructor(config: DefaultLoggerConfig = {}) {\n    const {level, tags = []} = config\n    this.tags = tags\n    if (level && level in LOG_LEVELS) {\n      this.level = LOG_LEVELS[level]\n    } else {\n      this.level = LOG_LEVELS.INFO\n    }\n  }\n\n  private log (level: ConductorLogLevel, ...args: unknown[]) {\n    let resolvedLevel: number\n    let name = level\n    if (level in LOG_LEVELS) {\n      resolvedLevel = LOG_LEVELS[level]\n    } else {\n      name = \"INFO\"\n      resolvedLevel = LOG_LEVELS.INFO\n    }\n    if (resolvedLevel >= this.level) {\n      console.log(name, ...this.tags, ...args)\n    }\n  }\n\n  info = (...args: unknown[]): void => {\n    this.log(\"INFO\", ...args)\n  }\n\n  debug = (...args: unknown[]): void => {\n    this.log(\"DEBUG\", ...args)\n  }\n\n  warn = (...args: unknown[]): void => {\n    this.log(\"WARN\", ...args)\n  }\n\n  error =(...args: unknown[]): void => {\n    this.log(\"ERROR\", ...args)\n  }\n}\n\nexport const noopLogger: ConductorLogger = {\n  //eslint-disable-next-line\n  debug: (...args: unknown[]) => {},\n  //eslint-disable-next-line\n  info: (...args: unknown[]) => {},\n  //eslint-disable-next-line\n  warn: (...args: unknown[]) => {},\n  //eslint-disable-next-line\n  error: (...args: unknown[]) => {},\n};\n","export const DEFAULT_POLL_INTERVAL = 100;\nexport const DEFAULT_CONCURRENCY = 1;\nexport const DEFAULT_WARN_AT_O = 100;\nexport const DEFAULT_BATCH_POLLING_TIMEOUT = 100;\nexport const DEFAULT_ERROR_MESSAGE = \"An unknown error occurred\";\nexport const MAX_RETRIES = 4;\n\n// Adaptive backoff for empty polls (matching Python SDK)\n// Backoff sequence: 1ms, 2ms, 4ms, 8ms, 16ms, 32ms, 64ms, 128ms, 256ms, 512ms, 1024ms\n// Then capped at pollInterval\nexport const ADAPTIVE_BACKOFF_BASE_MS = 1;\nexport const ADAPTIVE_BACKOFF_MAX_EXPONENT = 10; // 2^10 = 1024ms cap\n\n// Auth failure backoff (matching Python SDK: 2^N seconds, capped at 60s)\nexport const AUTH_BACKOFF_MAX_SECONDS = 60;\n\n// Health monitoring\nexport const HEALTH_CHECK_INTERVAL_MS = 5000;\nexport const RESTART_BACKOFF_BASE_MS = 1000;\nexport const RESTART_BACKOFF_MAX_MS = 60000;\n","import { ConductorLogger, noopLogger } from \"../../helpers/logger\";\nimport {\n  DEFAULT_POLL_INTERVAL,\n  DEFAULT_WARN_AT_O,\n  DEFAULT_CONCURRENCY,\n  ADAPTIVE_BACKOFF_BASE_MS,\n  ADAPTIVE_BACKOFF_MAX_EXPONENT,\n  AUTH_BACKOFF_MAX_SECONDS,\n} from \"./constants\";\nimport { PollerOptions } from \"./types\";\n\n/** HTTP status codes treated as auth failures */\nconst AUTH_HTTP_STATUS_CODES = [401, 403];\n\nexport class Poller<T> {\n  private timeoutHandler?: NodeJS.Timeout;\n  private pollFunction: (count: number) => Promise<T[] | undefined>;\n  private performWorkFunction: (work: T) => Promise<void>;\n  private polling = false;\n  private _tasksInProcess = 0;\n  private _counterAtO = 0;\n  private _pollerId = \"\";\n\n  // Adaptive backoff state\n  private _consecutiveEmptyPolls = 0;\n  private _lastPollTime = 0;\n\n  // Auth failure backoff state\n  private _authFailures = 0;\n  private _lastAuthFailureAt = 0;\n\n  options: PollerOptions = {\n    pollInterval: DEFAULT_POLL_INTERVAL,\n    concurrency: DEFAULT_CONCURRENCY,\n    warnAtO: DEFAULT_WARN_AT_O,\n    adaptiveBackoff: true,\n    paused: false,\n  };\n  logger: ConductorLogger = noopLogger;\n\n  constructor(\n    pollerId: string,\n    pollFunction: (count: number) => Promise<T[] | undefined>,\n    performWorkFunction: (work: T) => Promise<void>,\n    pollerOptions?: Partial<PollerOptions>,\n    logger?: ConductorLogger\n  ) {\n    this._pollerId = pollerId;\n    this.pollFunction = pollFunction;\n    this.performWorkFunction = performWorkFunction;\n    this.options = { ...this.options, ...pollerOptions };\n    this.logger = logger || noopLogger;\n\n    // Ensure concurrency is a valid number\n    if (\n      typeof this.options.concurrency !== \"number\" ||\n      isNaN(this.options.concurrency) ||\n      this.options.concurrency < 1\n    ) {\n      this.logger.info(\n        `Invalid concurrency value (${this.options.concurrency}) for poller ${pollerId}. Using default: ${DEFAULT_CONCURRENCY}`\n      );\n      this.options.concurrency = DEFAULT_CONCURRENCY;\n    }\n  }\n\n  get isPolling() {\n    return this.polling;\n  }\n\n  get tasksInProcess() {\n    return this._tasksInProcess;\n  }\n\n  get consecutiveEmptyPolls() {\n    return this._consecutiveEmptyPolls;\n  }\n\n  get authFailures() {\n    return this._authFailures;\n  }\n\n  /**\n   * Starts polling for work\n   */\n  startPolling = () => {\n    if (this.polling) {\n      throw new Error(\"Runner is already started\");\n    }\n    this._tasksInProcess = 0;\n    this._consecutiveEmptyPolls = 0;\n    this._authFailures = 0;\n    this._lastPollTime = 0;\n    this._lastAuthFailureAt = 0;\n    this.polling = true;\n    this.poll();\n  };\n\n  /**\n   * Stops Polling for work\n   */\n  stopPolling = async () => {\n    this.polling = false;\n    clearTimeout(this.timeoutHandler);\n  };\n\n  private performWork = async (work: T) => {\n    await this.performWorkFunction(work);\n    this._tasksInProcess--;\n  };\n\n  updateOptions(options: Partial<PollerOptions>) {\n    const newOptions = { ...this.options, ...options };\n    this.options = newOptions;\n  }\n\n  /**\n   * Detect if an error is an authentication/authorization failure.\n   */\n  private isAuthError(error: unknown): boolean {\n    if (!error || typeof error !== \"object\") return false;\n\n    // Check for status property\n    const errObj = error as Record<string, unknown>;\n    const status = errObj.status ?? errObj.statusCode;\n    if (typeof status === \"number\" && AUTH_HTTP_STATUS_CODES.includes(status)) {\n      return true;\n    }\n\n    // Check for response.status (fetch-style errors)\n    const response = errObj.response;\n    if (response && typeof response === \"object\") {\n      const respStatus = (response as Record<string, unknown>).status;\n      if (\n        typeof respStatus === \"number\" &&\n        AUTH_HTTP_STATUS_CODES.includes(respStatus)\n      ) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  /**\n   * Calculate adaptive backoff delay for empty polls.\n   *\n   * Matches Python SDK: min(BASE_MS * 2^min(count, MAX_EXPONENT), pollInterval)\n   * Sequence: 1ms, 2ms, 4ms, 8ms, 16ms, ... 1024ms, then capped at pollInterval\n   */\n  private calculateAdaptiveDelay(): number {\n    if (this._consecutiveEmptyPolls <= 0) return 0;\n    const capped = Math.min(\n      this._consecutiveEmptyPolls,\n      ADAPTIVE_BACKOFF_MAX_EXPONENT\n    );\n    const delay = ADAPTIVE_BACKOFF_BASE_MS * Math.pow(2, capped);\n    return Math.min(delay, this.options.pollInterval ?? DEFAULT_POLL_INTERVAL);\n  }\n\n  /**\n   * Calculate auth failure backoff delay in milliseconds.\n   *\n   * Matches Python SDK: min(2^failures, 60) seconds\n   */\n  private calculateAuthBackoffMs(): number {\n    if (this._authFailures <= 0) return 0;\n    const backoffSeconds = Math.min(\n      Math.pow(2, this._authFailures),\n      AUTH_BACKOFF_MAX_SECONDS\n    );\n    return backoffSeconds * 1000;\n  }\n\n  /** Promise-based sleep that resolves immediately if polling has stopped */\n  private sleep(ms: number): Promise<void> {\n    return new Promise((r) =>\n      this.isPolling\n        ? (this.timeoutHandler = setTimeout(() => r(), ms))\n        : r()\n    );\n  }\n\n  private poll = async () => {\n    while (this.isPolling) {\n      try {\n        // 1. PAUSED CHECK\n        if (this.options.paused) {\n          this.logger.debug(\n            `Worker ${this._pollerId} is paused, skipping poll`\n          );\n          await this.sleep(\n            this.options.pollInterval ?? DEFAULT_POLL_INTERVAL\n          );\n          continue;\n        }\n\n        // 2. AUTH FAILURE BACKOFF\n        if (this._authFailures > 0) {\n          const authBackoffMs = this.calculateAuthBackoffMs();\n          const timeSinceFailure = Date.now() - this._lastAuthFailureAt;\n          if (timeSinceFailure < authBackoffMs) {\n            this.logger.debug(\n              `Auth backoff active for ${this._pollerId}: ${Math.round(authBackoffMs - timeSinceFailure)}ms remaining (failures: ${this._authFailures})`\n            );\n            await this.sleep(\n              Math.min(100, authBackoffMs - timeSinceFailure)\n            );\n            continue;\n          }\n        }\n\n        // 3. CAPACITY CHECK\n        const rawCount =\n          (this.options.concurrency ?? DEFAULT_CONCURRENCY) -\n          this._tasksInProcess;\n        const count = Math.max(\n          0,\n          Number.isFinite(rawCount) ? rawCount : DEFAULT_CONCURRENCY\n        );\n\n        if (count === 0 || !Number.isFinite(count)) {\n          this.logger.debug(\n            \"Max in process reached, Will skip polling for \" + this._pollerId\n          );\n          this._counterAtO++;\n          if (this._counterAtO > (this.options.warnAtO ?? 100)) {\n            this.logger.info(\n              `Not polling anything because in process tasks is maxed as concurrency level. ${this._pollerId}`\n            );\n          }\n        } else {\n          // 4. ADAPTIVE BACKOFF for empty polls\n          if (\n            this.options.adaptiveBackoff !== false &&\n            this._consecutiveEmptyPolls > 0\n          ) {\n            const adaptiveDelay = this.calculateAdaptiveDelay();\n            const timeSinceLastPoll = Date.now() - this._lastPollTime;\n            if (timeSinceLastPoll < adaptiveDelay) {\n              await this.sleep(adaptiveDelay - timeSinceLastPoll);\n              continue;\n            }\n          }\n\n          // 5. POLL\n          this._counterAtO = 0;\n          this._lastPollTime = Date.now();\n          const tasksResult: T[] | undefined =\n            await this.pollFunction(count);\n          this._tasksInProcess =\n            this._tasksInProcess + (tasksResult ?? []).length;\n\n          if (tasksResult && tasksResult.length > 0) {\n            // Tasks received — reset counters\n            this._consecutiveEmptyPolls = 0;\n          } else {\n            // No tasks — increment empty poll counter\n            this._consecutiveEmptyPolls++;\n          }\n\n          // Successful poll (even if empty) — reset auth failures\n          this._authFailures = 0;\n\n          // 6. DISPATCH (fire-and-forget)\n          tasksResult?.forEach(this.performWork);\n        }\n      } catch (error: unknown) {\n        if (this.isAuthError(error)) {\n          this._authFailures++;\n          this._lastAuthFailureAt = Date.now();\n          this.logger.error(\n            `Auth failure (${this._authFailures}) polling for ${this._pollerId}: ${\n              error instanceof Error ? error.message : \"Unknown error\"\n            }`\n          );\n        } else {\n          this.logger.error(\n            `Error polling for tasks: ${\n              error instanceof Error ? error.message : \"Unknown error\"\n            }`,\n            error\n          );\n        }\n      }\n\n      // 7. SLEEP between poll cycles\n      await this.sleep(\n        this.options.pollInterval ?? DEFAULT_POLL_INTERVAL\n      );\n    }\n  };\n}\n","import type { ConductorLogger } from \"../../helpers/logger\";\nimport type { Task, TaskResult } from \"../../../open-api\";\nimport type { Client } from \"../../../open-api/generated/client/types.gen\";\nimport type { TaskRunnerEventsListener } from \"./events\";\n\nexport type TaskErrorHandler = (error: Error, task?: Task) => void;\n\n/**\n * Return type for long-running tasks.\n *\n * When a worker returns this, the task is sent to Conductor with IN_PROGRESS status\n * and Conductor will re-queue the task after `callbackAfterSeconds`.\n *\n * @example\n * ```typescript\n * @worker({ taskDefName: \"long_running_task\" })\n * async function longTask(task: Task): Promise<TaskInProgressResult | TaskResult> {\n *   if (!isReady()) {\n *     return { status: \"IN_PROGRESS\", callbackAfterSeconds: 30, outputData: { progress: 50 } };\n *   }\n *   return { status: \"COMPLETED\", outputData: { result: \"done\" } };\n * }\n * ```\n */\nexport interface TaskInProgressResult {\n  status: \"IN_PROGRESS\";\n  callbackAfterSeconds: number;\n  outputData?: Record<string, unknown>;\n}\n\n/**\n * Type guard for TaskInProgressResult.\n */\nexport function isTaskInProgress(\n  result: unknown\n): result is TaskInProgressResult {\n  return (\n    typeof result === \"object\" &&\n    result !== null &&\n    \"status\" in result &&\n    (result as Record<string, unknown>).status === \"IN_PROGRESS\" &&\n    \"callbackAfterSeconds\" in result &&\n    typeof (result as Record<string, unknown>).callbackAfterSeconds === \"number\"\n  );\n}\n\nexport interface ConductorWorker {\n  taskDefName: string;\n  execute: (\n    task: Task\n  ) => Promise<\n    Omit<TaskResult, \"workflowInstanceId\" | \"taskId\"> | TaskInProgressResult\n  >;\n  domain?: string;\n  /** Number of polling instances to run concurrently */\n  concurrency?: number;\n  pollInterval?: number;\n}\n\nexport interface TaskRunnerOptions {\n  workerID: string;\n  domain: string | undefined;\n  pollInterval?: number;\n  concurrency?: number;\n  batchPollingTimeout?: number;\n}\n\nexport interface RunnerArgs {\n  worker: ConductorWorker;\n  client: Client;\n  options: TaskRunnerOptions;\n  logger?: ConductorLogger;\n  onError?: TaskErrorHandler;\n  concurrency?: number;\n  maxRetries?: number;\n  eventListeners?: TaskRunnerEventsListener[];\n}\n\nexport interface PollerOptions {\n  pollInterval?: number;\n  concurrency: number;\n  warnAtO?: number;\n  /** Enable adaptive backoff for empty polls (default: true) */\n  adaptiveBackoff?: boolean;\n  /** Whether this poller is paused (default: false) */\n  paused?: boolean;\n}\n\n/**\n * Configuration for health monitoring of worker processes.\n */\nexport interface HealthMonitorConfig {\n  /** Interval between health checks in ms (default: 5000) */\n  healthCheckIntervalMs?: number;\n  /** Maximum restart attempts, 0 = unlimited (default: 0) */\n  maxRestartAttempts?: number;\n  /** Whether health monitoring is enabled (default: true) */\n  enabled?: boolean;\n}\n\nexport type TaskManagerOptions = TaskRunnerOptions;\n\nexport interface TaskManagerConfig {\n  logger?: ConductorLogger;\n  options?: Partial<TaskManagerOptions>;\n  onError?: TaskErrorHandler;\n  maxRetries?: number;\n  eventListeners?: TaskRunnerEventsListener[];\n}\n\nexport type OptionEntries = [\n  keyof TaskRunnerOptions,\n  string | number | undefined\n][];\n","import os from \"os\";\nimport {\n  OptionEntries,\n  TaskErrorHandler,\n  TaskManagerOptions,\n  TaskRunnerOptions,\n} from \"./types\";\n\n/**\n * Compares if the new options are really new\n * @param oldOptions\n * @param newOptions\n */\nexport const optionEquals = (\n  oldOptions: Partial<TaskRunnerOptions>,\n  newOptions: Partial<TaskRunnerOptions>\n) => {\n  const newOptionEntries = Object.entries(newOptions) as OptionEntries;\n  const oldOptionsEntries = Object.entries(oldOptions) as OptionEntries;\n\n  return (\n    newOptionEntries.length === oldOptionsEntries.length &&\n    newOptionEntries.every(\n      ([key, value]) => (oldOptions[key] as unknown) === value\n    )\n  );\n};\n\nexport function getWorkerId(options: Partial<TaskManagerOptions>) {\n  return options.workerID ?? os.hostname();\n}\n\n//eslint-disable-next-line\nexport const noopErrorHandler: TaskErrorHandler = (error: Error) => {};\n","import type { ConductorLogger } from \"../../../helpers/logger\";\nimport type {\n  TaskRunnerEvent,\n  PollStarted,\n  PollCompleted,\n  PollFailure,\n  TaskExecutionStarted,\n  TaskExecutionCompleted,\n  TaskExecutionFailure,\n  TaskUpdateCompleted,\n  TaskUpdateFailure,\n} from \"./types\";\n\n/**\n * Interface for task runner event listeners.\n * \n * All methods are optional - implement only the events you need to handle.\n * Listener failures are isolated and will not affect task execution.\n */\nexport interface TaskRunnerEventsListener {\n  /**\n   * Called when task polling begins.\n   */\n  onPollStarted?(event: PollStarted): void | Promise<void>;\n\n  /**\n   * Called when task polling completes successfully.\n   */\n  onPollCompleted?(event: PollCompleted): void | Promise<void>;\n\n  /**\n   * Called when task polling fails.\n   */\n  onPollFailure?(event: PollFailure): void | Promise<void>;\n\n  /**\n   * Called when task execution begins.\n   */\n  onTaskExecutionStarted?(event: TaskExecutionStarted): void | Promise<void>;\n\n  /**\n   * Called when task execution completes successfully.\n   */\n  onTaskExecutionCompleted?(\n    event: TaskExecutionCompleted\n  ): void | Promise<void>;\n\n  /**\n   * Called when task execution fails.\n   */\n  onTaskExecutionFailure?(event: TaskExecutionFailure): void | Promise<void>;\n\n  /**\n   * Called when task update completes successfully.\n   */\n  onTaskUpdateCompleted?(event: TaskUpdateCompleted): void | Promise<void>;\n\n  /**\n   * Called when task update fails after all retry attempts.\n   * This is a CRITICAL event that may require operational intervention.\n   */\n  onTaskUpdateFailure?(event: TaskUpdateFailure): void | Promise<void>;\n}\n\n/**\n * Event dispatcher for task runner events.\n * \n * Provides a decoupled event system for observability and metrics collection.\n * Events are published asynchronously and listener failures are isolated.\n */\nexport class EventDispatcher {\n  private listeners: TaskRunnerEventsListener[] = [];\n  private logger?: ConductorLogger;\n\n  constructor(logger?: ConductorLogger) {\n    this.logger = logger;\n  }\n\n  /**\n   * Register an event listener.\n   * \n   * @param listener - The listener to register\n   */\n  register(listener: TaskRunnerEventsListener): void {\n    this.listeners.push(listener);\n  }\n\n  /**\n   * Unregister an event listener.\n   * \n   * @param listener - The listener to unregister\n   */\n  unregister(listener: TaskRunnerEventsListener): void {\n    const index = this.listeners.indexOf(listener);\n    if (index !== -1) {\n      this.listeners.splice(index, 1);\n    }\n  }\n\n  /**\n   * Publish a PollStarted event.\n   */\n  async publishPollStarted(event: PollStarted): Promise<void> {\n    await this.publishEvent(\"onPollStarted\", event);\n  }\n\n  /**\n   * Publish a PollCompleted event.\n   */\n  async publishPollCompleted(event: PollCompleted): Promise<void> {\n    await this.publishEvent(\"onPollCompleted\", event);\n  }\n\n  /**\n   * Publish a PollFailure event.\n   */\n  async publishPollFailure(event: PollFailure): Promise<void> {\n    await this.publishEvent(\"onPollFailure\", event);\n  }\n\n  /**\n   * Publish a TaskExecutionStarted event.\n   */\n  async publishTaskExecutionStarted(\n    event: TaskExecutionStarted\n  ): Promise<void> {\n    await this.publishEvent(\"onTaskExecutionStarted\", event);\n  }\n\n  /**\n   * Publish a TaskExecutionCompleted event.\n   */\n  async publishTaskExecutionCompleted(\n    event: TaskExecutionCompleted\n  ): Promise<void> {\n    await this.publishEvent(\"onTaskExecutionCompleted\", event);\n  }\n\n  /**\n   * Publish a TaskExecutionFailure event.\n   */\n  async publishTaskExecutionFailure(\n    event: TaskExecutionFailure\n  ): Promise<void> {\n    await this.publishEvent(\"onTaskExecutionFailure\", event);\n  }\n\n  /**\n   * Publish a TaskUpdateCompleted event.\n   */\n  async publishTaskUpdateCompleted(event: TaskUpdateCompleted): Promise<void> {\n    await this.publishEvent(\"onTaskUpdateCompleted\", event);\n  }\n\n  /**\n   * Publish a TaskUpdateFailure event.\n   */\n  async publishTaskUpdateFailure(event: TaskUpdateFailure): Promise<void> {\n    await this.publishEvent(\"onTaskUpdateFailure\", event);\n  }\n\n  /**\n   * Internal method to publish events to all registered listeners.\n   * Listener failures are caught and logged to prevent affecting task execution.\n   */\n  private async publishEvent<K extends keyof TaskRunnerEventsListener>(\n    method: K,\n    event: TaskRunnerEvent\n  ): Promise<void> {\n    // Early return if no listeners registered (zero overhead)\n    if (this.listeners.length === 0) {\n      return;\n    }\n\n    // Publish to all listeners asynchronously\n    const promises = this.listeners\n      .filter((listener) => listener[method])\n      .map(async (listener) => {\n        try {\n          const handler = listener[method];\n          if (handler) {\n            await handler.call(listener, event as never);\n          }\n        } catch (error) {\n          // Isolate listener failures - don't affect task execution\n          const msg = `Event listener failed for ${method}: ${error instanceof Error ? error.message : error}`;\n          if (this.logger) {\n            this.logger.error(msg);\n          } else {\n            console.error(msg);\n          }\n        }\n      });\n\n    // Wait for all listeners to complete (or fail)\n    await Promise.allSettled(promises);\n  }\n}\n","/**\n * Custom exception types for worker error handling.\n */\n\n/**\n * Exception indicating a non-retryable task failure.\n * \n * When thrown from a worker's execute function, the task will be marked as\n * FAILED_WITH_TERMINAL_ERROR and will NOT be retried, regardless of the\n * task definition's retry_count setting.\n * \n * Use this for permanent failures where retry would produce the same result:\n * - Business validation failures (invalid data format)\n * - Authorization failures (user lacks permission)\n * - Resource not found (entity doesn't exist)\n * - Configuration errors (missing required config)\n * - Data integrity violations (constraint violations)\n * - Unsupported operations (feature not available)\n * \n * @example\n * ```typescript\n * async function validateOrder(task: Task) {\n *   const order = await getOrder(task.inputData.orderId);\n *   \n *   if (!order) {\n *     // Order doesn't exist - retry won't help\n *     throw new NonRetryableException(`Order ${task.inputData.orderId} not found`);\n *   }\n *   \n *   if (order.status === 'CANCELLED') {\n *     // Business rule - retry won't help\n *     throw new NonRetryableException('Cannot process cancelled order');\n *   }\n *   \n *   return { status: 'COMPLETED', outputData: { validated: true } };\n * }\n * ```\n */\nexport class NonRetryableException extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = \"NonRetryableException\";\n    \n    // Maintains proper stack trace for where our error was thrown (only available on V8)\n    if (Error.captureStackTrace) {\n      Error.captureStackTrace(this, NonRetryableException);\n    }\n  }\n}\n","import { AsyncLocalStorage } from \"node:async_hooks\";\nimport type { Task, TaskExecLog } from \"../../../open-api\";\n\n/**\n * TaskContext provides async-local context during task execution.\n *\n * This is the JavaScript equivalent of Python's contextvars-based\n * `get_task_context()`. Each task execution runs in its own async context,\n * so `getTaskContext()` returns the context for the currently executing task.\n *\n * @example\n * ```typescript\n * @worker({ taskDefName: \"my_task\" })\n * async function myTask(task: Task) {\n *   const ctx = getTaskContext();\n *   ctx?.addLog(\"Starting processing\");\n *\n *   if (needsMoreTime) {\n *     ctx?.setCallbackAfter(30);\n *     return { status: \"IN_PROGRESS\", callbackAfterSeconds: 30 };\n *   }\n *\n *   return { status: \"COMPLETED\", outputData: { result: \"done\" } };\n * }\n * ```\n */\nexport class TaskContext {\n  private _task: Task;\n  private _logs: TaskExecLog[] = [];\n  private _callbackAfterSeconds?: number;\n  private _output?: Record<string, unknown>;\n\n  constructor(task: Task) {\n    this._task = task;\n  }\n\n  /** Get the task ID */\n  getTaskId(): string | undefined {\n    return this._task.taskId;\n  }\n\n  /** Get the workflow instance ID */\n  getWorkflowInstanceId(): string | undefined {\n    return this._task.workflowInstanceId;\n  }\n\n  /** Get the retry count for this task (0 for first attempt) */\n  getRetryCount(): number {\n    return this._task.retryCount ?? 0;\n  }\n\n  /** Get the poll count for this task */\n  getPollCount(): number {\n    return this._task.pollCount ?? 0;\n  }\n\n  /** Get the full task input data */\n  getInput(): Record<string, unknown> {\n    return this._task.inputData ?? {};\n  }\n\n  /** Get the task definition name */\n  getTaskDefName(): string | undefined {\n    return this._task.taskDefName;\n  }\n\n  /** Get the workflow task type (e.g., SIMPLE, HTTP, SUB_WORKFLOW) */\n  getWorkflowTaskType(): string | undefined {\n    return this._task.taskType;\n  }\n\n  /** Get the full task object */\n  getTask(): Task {\n    return this._task;\n  }\n\n  /**\n   * Add an execution log entry.\n   * Logs are merged into the task result when execution completes.\n   */\n  addLog(message: string): void {\n    this._logs.push({\n      log: message,\n      createdTime: Date.now(),\n      taskId: this._task.taskId,\n    });\n  }\n\n  /** Get all accumulated logs */\n  getLogs(): TaskExecLog[] {\n    return [...this._logs];\n  }\n\n  /**\n   * Set callback-after seconds.\n   * Tells Conductor to re-queue the task after the specified number of seconds.\n   */\n  setCallbackAfter(seconds: number): void {\n    this._callbackAfterSeconds = seconds;\n  }\n\n  /** Get the callback-after value (if set) */\n  getCallbackAfterSeconds(): number | undefined {\n    return this._callbackAfterSeconds;\n  }\n\n  /**\n   * Set intermediate output data.\n   * Merged into the final task result.\n   */\n  setOutput(data: Record<string, unknown>): void {\n    this._output = data;\n  }\n\n  /** Get intermediate output data (if set) */\n  getOutput(): Record<string, unknown> | undefined {\n    return this._output;\n  }\n}\n\n// AsyncLocalStorage instance — one per process\nconst taskContextStorage = new AsyncLocalStorage<TaskContext>();\n\n/**\n * Get the current task context.\n *\n * Must be called from within a task execution callback.\n * Returns `undefined` if called outside of a task execution.\n */\nexport function getTaskContext(): TaskContext | undefined {\n  return taskContextStorage.getStore();\n}\n\n/**\n * Run a function within a task context.\n * Used internally by TaskRunner to wrap task execution.\n *\n * @internal\n */\nexport function runWithTaskContext<T>(\n  task: Task,\n  fn: (ctx: TaskContext) => Promise<T>\n): Promise<T> {\n  const context = new TaskContext(task);\n  return taskContextStorage.run(context, () => fn(context));\n}\n","import { ConductorLogger, noopLogger } from \"../../helpers/logger\";\nimport type { Client, Task, TaskResult } from \"../../../open-api\";\nimport { TaskResource } from \"../../../open-api/generated\";\nimport { Poller } from \"./Poller\";\nimport {\n  DEFAULT_POLL_INTERVAL,\n  DEFAULT_BATCH_POLLING_TIMEOUT,\n  DEFAULT_CONCURRENCY,\n  MAX_RETRIES,\n  DEFAULT_ERROR_MESSAGE,\n} from \"./constants\";\nimport {\n  TaskErrorHandler,\n  TaskRunnerOptions,\n  RunnerArgs,\n  ConductorWorker,\n  isTaskInProgress,\n} from \"./types\";\nimport { noopErrorHandler, optionEquals } from \"./helpers\";\nimport { EventDispatcher } from \"./events/EventDispatcher\";\nimport { NonRetryableException } from \"./exceptions\";\nimport { runWithTaskContext } from \"../../worker/context\";\n\nconst defaultRunnerOptions: Required<TaskRunnerOptions> = {\n  workerID: \"\",\n  pollInterval: DEFAULT_POLL_INTERVAL,\n  domain: undefined,\n  concurrency: DEFAULT_CONCURRENCY,\n  batchPollingTimeout: DEFAULT_BATCH_POLLING_TIMEOUT,\n};\n\n/**\n * Responsible for polling and executing tasks from a queue.\n *\n * Because a `poll` in conductor \"pops\" a task off of a conductor queue,\n * each runner participates in the poll -> work -> update loop.\n * We could potentially split this work into a separate \"poller\" and \"worker\" pools\n * but that could lead to picking up more work than the pool of workers are actually able to handle.\n *\n */\nexport class TaskRunner {\n  _client: Client;\n  worker: ConductorWorker;\n  private logger: ConductorLogger;\n  private options: TaskRunnerOptions;\n  errorHandler: TaskErrorHandler;\n  private poller: Poller<Task>;\n  private maxRetries: number;\n  private eventDispatcher: EventDispatcher;\n\n  constructor({\n    worker,\n    client,\n    options,\n    logger = noopLogger,\n    onError: errorHandler = noopErrorHandler,\n    maxRetries = MAX_RETRIES,\n    eventListeners = [],\n  }: RunnerArgs) {\n    this._client = client;\n    this.maxRetries = maxRetries;\n    this.logger = logger;\n    this.worker = worker;\n    this.options = { ...defaultRunnerOptions, ...options };\n    this.errorHandler = errorHandler;\n\n    // Initialize event dispatcher and register listeners\n    this.eventDispatcher = new EventDispatcher(this.logger);\n    eventListeners.forEach((listener) => {\n      this.eventDispatcher.register(listener);\n    });\n\n    this.poller = new Poller(\n      worker.taskDefName,\n      this.batchPoll,\n      this.executeTask,\n      {\n        concurrency: worker.concurrency ?? this.options.concurrency,\n        pollInterval: worker.pollInterval ?? this.options.pollInterval,\n      },\n      this.logger\n    );\n  }\n\n  get isPolling() {\n    return this.poller.isPolling;\n  }\n\n  /**\n   * Starts polling for work\n   */\n  startPolling = () => {\n    this.poller.startPolling();\n    this.logger.info(\n      `TaskWorker ${this.worker.taskDefName} initialized with concurrency of ${this.poller.options.concurrency} and poll interval of ${this.poller.options.pollInterval}`\n    );\n  };\n  /**\n   * Stops Polling for work\n   */\n  stopPolling = async () => {\n    await this.poller.stopPolling();\n  };\n\n  updateOptions(options: Partial<TaskRunnerOptions>) {\n    const newOptions = { ...this.options, ...options };\n    const isOptionsUpdated = !optionEquals(this.options, newOptions);\n\n    if (isOptionsUpdated) {\n      this.poller.updateOptions({\n        concurrency: newOptions.concurrency,\n        pollInterval: newOptions.pollInterval,\n      });\n      this.logger.info(\n        `TaskWorker ${this.worker.taskDefName} configuration updated with concurrency of ${this.poller.options.concurrency} and poll interval of ${this.poller.options.pollInterval}`\n      );\n    }\n\n    this.options = newOptions;\n  }\n\n  /** Pause or unpause the worker's polling */\n  setPaused(paused: boolean): void {\n    this.poller.updateOptions({ paused });\n    this.logger.info(\n      `Worker ${this.worker.taskDefName} ${paused ? \"paused\" : \"resumed\"}`\n    );\n  }\n\n  get isPaused(): boolean {\n    return this.poller.options.paused ?? false;\n  }\n\n  get getOptions(): TaskRunnerOptions {\n    return this.options;\n  }\n\n  private batchPoll = async (count: number): Promise<Task[] | undefined> => {\n    const { workerID } = this.options;\n    const startTime = Date.now();\n\n    // Publish PollStarted event\n    await this.eventDispatcher.publishPollStarted({\n      taskType: this.worker.taskDefName,\n      workerId: workerID,\n      pollCount: count,\n      timestamp: new Date(),\n    });\n\n    try {\n      const { data: tasks } = await TaskResource.batchPoll({\n        client: this._client,\n        path: {\n          tasktype: this.worker.taskDefName,\n        },\n        query: {\n          workerid: workerID,\n          domain: this.worker.domain ?? this.options.domain,\n          count,\n          timeout: this.options.batchPollingTimeout ?? 100,\n        },\n      });\n\n      const durationMs = Date.now() - startTime;\n\n      // Publish PollCompleted event\n      await this.eventDispatcher.publishPollCompleted({\n        taskType: this.worker.taskDefName,\n        durationMs,\n        tasksReceived: tasks?.length ?? 0,\n        timestamp: new Date(),\n      });\n\n      return tasks;\n    } catch (error) {\n      const durationMs = Date.now() - startTime;\n\n      // Publish PollFailure event\n      await this.eventDispatcher.publishPollFailure({\n        taskType: this.worker.taskDefName,\n        durationMs,\n        cause: error as Error,\n        timestamp: new Date(),\n      });\n\n      throw error;\n    }\n  };\n\n  /**\n   * Probed once per process. null = unknown, true = v2 endpoint available,\n   * false = legacy server (no /api/tasks/update-v2 endpoint).\n   */\n  private static updateV2Available: boolean | null = null;\n\n  updateTaskWithRetry = async (\n    task: Task,\n    taskResult: TaskResult\n  ): Promise<Task | undefined> => {\n    const { workerID } = this.options;\n    let retryCount = 0;\n    let lastError: Error | null = null;\n\n    while (retryCount < this.maxRetries) {\n      try {\n        if (process.env.CI) {\n          console.log(\n            `[TaskRunner] Submitting task result taskId=${taskResult.taskId} workflowId=${taskResult.workflowInstanceId} taskType=${this.worker.taskDefName} attempt=${retryCount + 1}/${this.maxRetries}`\n          );\n        }\n        const updateStart = Date.now();\n\n        if (TaskRunner.updateV2Available === false) {\n          // Already detected a legacy server — skip the probe, call legacy directly.\n          await TaskResource.updateTask({\n            client: this._client,\n            body: { ...taskResult, workerId: workerID },\n            throwOnError: true,\n          });\n          const updateDurationMs = Date.now() - updateStart;\n          if (process.env.CI) {\n            console.log(\n              `[TaskRunner] Task result accepted (legacy) taskId=${taskResult.taskId} durationMs=${updateDurationMs}`\n            );\n          }\n          await this.eventDispatcher.publishTaskUpdateCompleted({\n            taskType: this.worker.taskDefName,\n            taskId: taskResult.taskId ?? \"\",\n            workerId: workerID,\n            workflowInstanceId: taskResult.workflowInstanceId,\n            durationMs: updateDurationMs,\n            timestamp: new Date(),\n          });\n          // Legacy /api/tasks does not return a next task for chaining.\n          return undefined;\n        }\n\n        // Try v2 endpoint (preferred: supports task chaining).\n        // Use throwOnError: false so we can inspect the HTTP status directly\n        // and fall back on 404/405 without consuming a retry slot.\n        const {\n          data: nextTask,\n          error,\n          response,\n        } = await TaskResource.updateTaskV2({\n          client: this._client,\n          body: { ...taskResult, workerId: workerID },\n          throwOnError: false,\n        });\n\n        if (response.status === 404 || response.status === 405) {\n          // Endpoint absent or wrong method — switch to legacy for all future calls.\n          if (TaskRunner.updateV2Available === null) {\n            console.log(\n              `[TaskRunner] /api/tasks/update-v2 not available (HTTP ${response.status}), ` +\n                `falling back to legacy /api/tasks endpoint`\n            );\n            TaskRunner.updateV2Available = false;\n          }\n          // Immediately fall back without counting this as a retry failure.\n          await TaskResource.updateTask({\n            client: this._client,\n            body: { ...taskResult, workerId: workerID },\n            throwOnError: true,\n          });\n          const updateDurationMs = Date.now() - updateStart;\n          if (process.env.CI) {\n            console.log(\n              `[TaskRunner] Task result accepted (legacy) taskId=${taskResult.taskId} durationMs=${updateDurationMs}`\n            );\n          }\n          await this.eventDispatcher.publishTaskUpdateCompleted({\n            taskType: this.worker.taskDefName,\n            taskId: taskResult.taskId ?? \"\",\n            workerId: workerID,\n            workflowInstanceId: taskResult.workflowInstanceId,\n            durationMs: updateDurationMs,\n            timestamp: new Date(),\n          });\n          return undefined;\n        }\n\n        if (!response.ok) {\n          throw (\n            (error as Error | undefined) ??\n            new Error(`Task update failed with HTTP ${response.status}`)\n          );\n        }\n\n        // v2 success — record capability on first probe\n        if (TaskRunner.updateV2Available === null) {\n          TaskRunner.updateV2Available = true;\n        }\n        const updateDurationMs = Date.now() - updateStart;\n        if (process.env.CI) {\n          console.log(\n            `[TaskRunner] Task result accepted taskId=${taskResult.taskId} durationMs=${updateDurationMs}`\n          );\n        }\n        await this.eventDispatcher.publishTaskUpdateCompleted({\n          taskType: this.worker.taskDefName,\n          taskId: taskResult.taskId ?? \"\",\n          workerId: workerID,\n          workflowInstanceId: taskResult.workflowInstanceId,\n          durationMs: updateDurationMs,\n          timestamp: new Date(),\n        });\n        return nextTask ?? undefined;\n      } catch (error: unknown) {\n        lastError = error as Error;\n        this.errorHandler(lastError, task);\n        this.logger.error(\n          `Error updating task ${taskResult.taskId} on retry ${retryCount + 1}/${this.maxRetries}`,\n          error\n        );\n        console.log(\n          `[TaskRunner] Task update failed taskId=${taskResult.taskId} attempt=${retryCount + 1}/${this.maxRetries} error=${(lastError as Error)?.message ?? String(error)}`\n        );\n        retryCount++;\n\n        if (retryCount < this.maxRetries) {\n          // Exponential backoff: 10s, 20s, 30s\n          const delayMs = retryCount * 10 * 1000;\n          await new Promise((r) => setTimeout(() => r(true), delayMs));\n        }\n      }\n    }\n\n    // All retries exhausted - publish critical TaskUpdateFailure event\n    this.logger.error(\n      `CRITICAL: Task update failed after ${retryCount} retries. Task result LOST for task_id=${taskResult.taskId}`\n    );\n\n    await this.eventDispatcher.publishTaskUpdateFailure({\n      taskType: this.worker.taskDefName,\n      taskId: taskResult.taskId ?? \"\",\n      workerId: workerID,\n      workflowInstanceId: taskResult.workflowInstanceId,\n      cause: lastError ?? new Error(\"Task update failed after all retries\"),\n      retryCount,\n      taskResult,\n      timestamp: new Date(),\n    });\n\n    return undefined;\n  };\n\n  private isValidTask(task: Task): boolean {\n    return !!(task.workflowInstanceId && task.taskId);\n  }\n\n  /**\n   * Entry point for task execution with V2 chaining.\n   *\n   * When updateTaskV2 returns a next task in its response, we immediately\n   * execute it without going back through the poll cycle. This eliminates\n   * one HTTP round-trip + sleep per task when there is a backlog.\n   */\n  private executeTask = async (task: Task) => {\n    let currentTask: Task | undefined = task;\n\n    while (currentTask) {\n      if (!this.isValidTask(currentTask)) {\n        this.logger.error(\n          `Task missing required fields: workflowInstanceId=${currentTask.workflowInstanceId}, taskId=${currentTask.taskId}`\n        );\n        return;\n      }\n\n      const nextTask = await this.executeOneTask(currentTask);\n\n      // Stop chaining if polling stopped or paused\n      if (!this.isPolling || this.isPaused) {\n        return;\n      }\n\n      // Yield to the event loop between chained tasks to prevent starvation\n      if (nextTask) {\n        this.logger.debug(\n          `Chaining to next task ${nextTask.taskId} from V2 response (skipping poll cycle)`\n        );\n        await new Promise<void>((resolve) => setTimeout(resolve, 0));\n      }\n\n      currentTask = nextTask;\n    }\n  };\n\n  /**\n   * Execute a single task and return the next task from V2 response (if any).\n   */\n  private executeOneTask = async (task: Task): Promise<Task | undefined> => {\n    const { workerID } = this.options;\n    // Safe: caller (executeTask) already validated these via isValidTask()\n    const taskId = task.taskId as string;\n    const workflowInstanceId = task.workflowInstanceId as string;\n    const startTime = Date.now();\n\n    // Publish TaskExecutionStarted event\n    await this.eventDispatcher.publishTaskExecutionStarted({\n      taskType: this.worker.taskDefName,\n      taskId,\n      workerId: workerID,\n      workflowInstanceId,\n      timestamp: new Date(),\n    });\n\n    try {\n      // Wrap execution in TaskContext (AsyncLocalStorage)\n      const { result, context } = await runWithTaskContext(\n        task,\n        async (ctx) => {\n          const r = await this.worker.execute(task);\n          return { result: r, context: ctx };\n        }\n      );\n\n      const durationMs = Date.now() - startTime;\n\n      // Handle TaskInProgress return\n      if (isTaskInProgress(result)) {\n        const contextLogs = context.getLogs();\n        const nextTask = await this.updateTaskWithRetry(task, {\n          workflowInstanceId,\n          taskId,\n          status: \"IN_PROGRESS\",\n          callbackAfterSeconds: result.callbackAfterSeconds,\n          outputData:\n            result.outputData ?? context.getOutput() ?? {},\n          logs: contextLogs.length > 0 ? contextLogs : undefined,\n        });\n\n        // Publish completion event for IN_PROGRESS\n        await this.eventDispatcher.publishTaskExecutionCompleted({\n          taskType: this.worker.taskDefName,\n          taskId,\n          workerId: workerID,\n          workflowInstanceId,\n          durationMs,\n          timestamp: new Date(),\n        });\n\n        this.logger.debug(\n          `Task ${taskId} returned IN_PROGRESS, callback after ${result.callbackAfterSeconds}s`\n        );\n        return nextTask;\n      }\n\n      // Regular completion path — merge context data\n      const merged = { ...result };\n\n      // Merge context logs\n      const contextLogs = context.getLogs();\n      if (contextLogs.length > 0) {\n        merged.logs = [...(merged.logs ?? []), ...contextLogs];\n      }\n\n      // Merge context callbackAfterSeconds\n      const ctxCallback = context.getCallbackAfterSeconds();\n      if (\n        ctxCallback !== undefined &&\n        merged.callbackAfterSeconds === undefined\n      ) {\n        merged.callbackAfterSeconds = ctxCallback;\n      }\n\n      // Merge context output (context output is base, result output overrides)\n      const ctxOutput = context.getOutput();\n      if (ctxOutput !== undefined) {\n        merged.outputData = { ...ctxOutput, ...merged.outputData };\n      }\n\n      // Calculate output size if possible\n      const outputSizeBytes = merged.outputData\n        ? JSON.stringify(merged.outputData).length\n        : undefined;\n\n      // Publish TaskExecutionCompleted event\n      await this.eventDispatcher.publishTaskExecutionCompleted({\n        taskType: this.worker.taskDefName,\n        taskId,\n        workerId: workerID,\n        workflowInstanceId,\n        durationMs,\n        outputSizeBytes,\n        timestamp: new Date(),\n      });\n\n      const nextTask = await this.updateTaskWithRetry(task, {\n        ...merged,\n        workflowInstanceId,\n        taskId,\n      });\n      this.logger.debug(`Task has executed successfully ${taskId}`);\n      return nextTask;\n    } catch (error: unknown) {\n      const durationMs = Date.now() - startTime;\n      const err = error as Error;\n\n      // Publish TaskExecutionFailure event\n      await this.eventDispatcher.publishTaskExecutionFailure({\n        taskType: this.worker.taskDefName,\n        taskId,\n        workerId: workerID,\n        workflowInstanceId,\n        cause: err,\n        durationMs,\n        timestamp: new Date(),\n      });\n\n      // Determine task status based on exception type\n      const isNonRetryable = err instanceof NonRetryableException;\n      const status = isNonRetryable ? \"FAILED_WITH_TERMINAL_ERROR\" : \"FAILED\";\n\n      if (isNonRetryable) {\n        this.logger.error(\n          `Task ${taskId} failed with terminal error (no retry): ${err.message}`\n        );\n      }\n\n      // Include error stack trace in task logs for debugging in Conductor UI\n      const errorLogs = [\n        {\n          log: `${err.name}: ${err.message}${err.stack ? \"\\n\" + err.stack : \"\"}`,\n          createdTime: Date.now(),\n          taskId,\n        },\n      ];\n\n      const nextTask = await this.updateTaskWithRetry(task, {\n        workflowInstanceId,\n        taskId,\n        reasonForIncompletion:\n          (error as Record<string, string>)?.message ?? DEFAULT_ERROR_MESSAGE,\n        status,\n        outputData: {},\n        logs: errorLogs,\n      });\n      this.errorHandler(err, task);\n      this.logger.error(`Error executing ${taskId}`, error);\n\n      // Even on failure, chain to next task — the failure was for THIS task\n      return nextTask;\n    }\n  };\n\n  handleUnknownError = (unknownError: unknown) => {\n    let message = \"\";\n    let stack: string | undefined = \"\";\n    if (unknownError && typeof unknownError === \"object\") {\n      if (\"stack\" in unknownError) {\n        stack = (unknownError as Error).stack;\n      }\n      if (\"message\" in unknownError) {\n        message = (unknownError as Error).message;\n      }\n    } else if (typeof unknownError === \"string\") {\n      message = unknownError;\n    }\n    this.logger.error(\n      `Error for ${this.worker.taskDefName}: error: ${message}, stack: ${stack}`\n    );\n  };\n}\n","import { TaskRunner } from \"./TaskRunner\";\nimport { ConductorLogger, DefaultLogger } from \"../../helpers/logger\";\nimport type { Client } from \"../../../open-api\";\nimport {\n  DEFAULT_POLL_INTERVAL,\n  DEFAULT_BATCH_POLLING_TIMEOUT,\n  DEFAULT_CONCURRENCY,\n  MAX_RETRIES,\n} from \"./constants\";\nimport {\n  TaskErrorHandler,\n  TaskManagerConfig,\n  TaskManagerOptions,\n  ConductorWorker,\n} from \"./types\";\nimport { getWorkerId, noopErrorHandler } from \"./helpers\";\nimport type { TaskRunnerEventsListener } from \"./events\";\n\nconst defaultManagerOptions: Required<TaskManagerOptions> = {\n  workerID: \"\",\n  pollInterval: DEFAULT_POLL_INTERVAL,\n  domain: undefined,\n  concurrency: DEFAULT_CONCURRENCY,\n  batchPollingTimeout: DEFAULT_BATCH_POLLING_TIMEOUT,\n};\n\n/**\n * Responsible for initializing and managing the runners that poll and work different task queues.\n */\nexport class TaskManager {\n  private workerRunners = new Map<string, TaskRunner>();\n  private readonly client: Client;\n  private readonly logger: ConductorLogger;\n  private readonly errorHandler: TaskErrorHandler;\n  private workers: ConductorWorker[];\n  readonly options: Required<TaskManagerOptions>;\n  private polling = false;\n  private maxRetries: number = MAX_RETRIES;\n  private eventListeners: TaskRunnerEventsListener[];\n\n  constructor(\n    client: Client,\n    workers: ConductorWorker[],\n    config: TaskManagerConfig = {}\n  ) {\n    if (!workers) {\n      throw new Error(\n        \"No workers supplied to TaskManager. Please pass an array of workers.\"\n      );\n    }\n    this.client = client;\n    this.logger = config.logger ?? new DefaultLogger();\n    this.maxRetries = config.maxRetries ?? MAX_RETRIES;\n    this.errorHandler = config.onError ?? noopErrorHandler;\n    this.workers = workers;\n    this.eventListeners = config.eventListeners ?? [];\n    const providedOptions = config.options ?? {};\n    this.options = {\n      ...defaultManagerOptions,\n      ...providedOptions,\n      workerID: getWorkerId(providedOptions),\n    };\n  }\n\n  private workerManagerWorkerOptions = (\n    worker: ConductorWorker\n  ): Required<TaskManagerOptions> => {\n    return {\n      ...this.options,\n      concurrency: worker.concurrency ?? this.options.concurrency,\n      pollInterval: worker.pollInterval ?? this.options.pollInterval,\n      domain: worker.domain ?? this.options.domain,\n    };\n  };\n\n  get isPolling() {\n    return this.polling;\n  }\n\n  updatePollingOptionForWorker = (\n    workerTaskDefName: string,\n    options: Partial<TaskManagerOptions>\n  ) => {\n    const maybeRunner = this.workerRunners.get(workerTaskDefName);\n\n    if (maybeRunner != null) {\n      maybeRunner.updateOptions(options);\n    } else {\n      this.logger.info(\n        `No runner found for worker with taskDefName: ${workerTaskDefName}`\n      );\n    }\n  };\n\n  /**\n   * new options will get merged to existing options\n   * @param options new options to update polling options\n   */\n  updatePollingOptions = (options: Partial<TaskManagerOptions>) => {\n    this.workers.forEach((worker) => {\n      const newOptions = {\n        ...this.workerManagerWorkerOptions(worker),\n        ...options,\n      };\n      this.updatePollingOptionForWorker(worker.taskDefName, newOptions);\n    });\n    this.options.concurrency = options.concurrency ?? this.options.concurrency;\n    this.options.pollInterval =\n      options.pollInterval ?? this.options.pollInterval;\n  };\n\n  sanityCheck = () => {\n    if (this.workers.length === 0) {\n      throw new Error(\"No workers supplied to TaskManager\");\n    }\n    const workerIDs = new Set();\n    for (const item of this.workers) {\n      if (workerIDs.has(item.taskDefName)) {\n        throw new Error(`Duplicate worker taskDefName: ${item.taskDefName}`);\n      }\n      workerIDs.add(item.taskDefName);\n    }\n  };\n\n  /**\n   * Start polling for tasks\n   */\n  startPolling = () => {\n    this.sanityCheck();\n    this.workers.forEach((worker) => {\n      const options = this.workerManagerWorkerOptions(worker);\n      const runner = new TaskRunner({\n        worker,\n        options,\n        client: this.client,\n        logger: this.logger,\n        onError: this.errorHandler,\n        maxRetries: this.maxRetries,\n        eventListeners: this.eventListeners,\n      });\n      runner.startPolling();\n      this.workerRunners.set(worker.taskDefName, runner);\n    });\n    this.polling = true;\n  };\n  /**\n   * Stops polling for tasks\n   */\n  stopPolling = async () => {\n    for (const [workerTaskDefName, runner] of this.workerRunners) {\n      this.logger.debug(`Stopping taskDefName=${workerTaskDefName}`);\n      await runner.stopPolling();\n      this.workerRunners.delete(workerTaskDefName);\n    }\n    this.polling = false;\n  };\n}\n","import { TaskType, DoWhileTaskDef, TaskDefTypes } from \"../../../open-api\";\n\nexport const doWhileTask = (\n  taskRefName: string,\n  terminationCondition: string,\n  tasks: TaskDefTypes[],\n  optional?: boolean\n): DoWhileTaskDef => ({\n  name: taskRefName,\n  taskReferenceName: taskRefName,\n  loopCondition: terminationCondition,\n  inputParameters: {},\n  type: TaskType.DO_WHILE,\n  loopOver: tasks,\n  optional,\n});\n\nconst loopForCondition = (taskRefName: string, valueKey: string) =>\n  `if ( $.${taskRefName}['iteration'] < $.${valueKey} ) { true; } else { false; }`;\n\nexport const newLoopTask = (\n  taskRefName: string,\n  iterations: number,\n  tasks: TaskDefTypes[],\n  optional?: boolean\n): DoWhileTaskDef => ({\n  name: taskRefName,\n  taskReferenceName: taskRefName,\n  loopCondition: loopForCondition(taskRefName, \"value\"),\n  inputParameters: {\n    value: iterations,\n  },\n  type: TaskType.DO_WHILE,\n  loopOver: tasks,\n  optional,\n});\n","import type { WorkflowTask } from \"../../../open-api\";\nimport { TaskType } from \"../../../open-api\";\n\nexport const dynamicTask = (\n  taskReferenceName: string,\n  dynamicTaskName: string,\n  dynamicTaskParam = \"taskToExecute\",\n  optional?: boolean\n): WorkflowTask => ({\n  name: taskReferenceName,\n  taskReferenceName,\n  type: TaskType.DYNAMIC,\n  dynamicTaskNameParam: dynamicTaskParam,\n  inputParameters: {\n    [dynamicTaskParam]: dynamicTaskName,\n  },\n  optional,\n});\n","import { TaskType, ForkJoinDynamicDef, TaskDefTypes } from \"../../../open-api\";\n\nexport const dynamicForkTask = (\n  taskReferenceName: string,\n  preForkTasks: TaskDefTypes[] = [],\n  dynamicTasksInput = \"\",\n  optional?: boolean\n): ForkJoinDynamicDef => ({\n  name: taskReferenceName,\n  taskReferenceName,\n  inputParameters: {\n    dynamicTasks: preForkTasks,\n    dynamicTasksInput,\n  },\n  type: TaskType.FORK_JOIN_DYNAMIC,\n  dynamicForkTasksParam: \"dynamicTasks\",\n  dynamicForkTasksInputParamName: \"dynamicTasksInput\",\n  optional,\n});\n","import { TaskType, EventTaskDef } from \"../../../open-api\";\n\nexport const eventTask = (\n  taskReferenceName: string,\n  eventPrefix: string,\n  eventSuffix: string,\n  optional?: boolean\n): EventTaskDef => ({\n  name: taskReferenceName,\n  taskReferenceName,\n  sink: `${eventPrefix}:${eventSuffix}`,\n  type: TaskType.EVENT,\n  optional,\n});\n\nexport const sqsEventTask = (\n  taskReferenceName: string,\n  queueName: string,\n  optional?: boolean\n) => eventTask(taskReferenceName, \"sqs\", queueName, optional);\n\nexport const conductorEventTask = (\n  taskReferenceName: string,\n  eventName: string,\n  optional?: boolean\n) => eventTask(taskReferenceName, \"conductor\", eventName, optional);\n","export const randomChars = (n = 7): string =>\n  (Math.random() + 1).toString(36).substring(n);\n\nexport const workflowNameGenerator = () => `workflow___${randomChars(7)}`;\n\nexport const taskNameGenerator = (taskType: string) =>\n  `${taskType}__task_${randomChars(7)}`;\n\nexport const taskReferenceNameGenerator = (taskName: string) =>\n  `${taskName}_ref`;\n\ninterface MaybeOverrides {\n  name?: string;\n}\n\nexport const nameTaskNameGenerator = (\n  taskType: string,\n  maybeOverrides: MaybeOverrides = {}\n) => {\n  const name = maybeOverrides?.name ?? taskNameGenerator(taskType);\n  return {\n    name,\n    taskReferenceName: taskReferenceNameGenerator(name),\n  };\n};\n\nexport function mapArrValues<T, R>(\n  arrayTransformer: (a: T[]) => R[],\n  mapWithValues: Record<string, T[]>\n) {\n  return Object.fromEntries(\n    Object.entries(mapWithValues).map(([key, value]: [string, T[]]) => [\n      key,\n      arrayTransformer(value),\n    ])\n  );\n}\n","import { SimpleTaskDef, TaskType } from \"../../open-api\";\nimport { nameTaskNameGenerator } from \"./common\";\n\n/**\n * Takes an optional partial SimpleTaskDef\n * generates a task replacing default values with provided overrides\n *\n * @param overrides overrides for defaults\n * @returns a fully defined task\n */\nexport const generateSimpleTask = (\n  overrides: Partial<SimpleTaskDef> = {}\n): SimpleTaskDef => ({\n  ...nameTaskNameGenerator(\"simple\", overrides),\n  inputParameters: {},\n  ...overrides,\n  type: TaskType.SIMPLE,\n});\n","import { TaskType, DoWhileTaskDef } from \"../../open-api\";\nimport { DoWhileTaskDefGen, NestedTaskMapper } from \"./types\";\nimport { nameTaskNameGenerator } from \"./common\";\n\nexport const generateDoWhileTask = (\n  overrides: Partial<DoWhileTaskDefGen> = {},\n  nestedTasksMapper: NestedTaskMapper\n): DoWhileTaskDef => ({\n  ...nameTaskNameGenerator(\"doWhile\", overrides),\n  inputParameters: {},\n  startDelay: 0,\n  optional: false,\n  asyncComplete: false,\n  loopCondition:\"\",\n  ...overrides,\n  loopOver: nestedTasksMapper(overrides?.loopOver || []),\n  type: TaskType.DO_WHILE,\n});\n","import { EventTaskDef, TaskType } from \"../../open-api\";\nimport { nameTaskNameGenerator } from \"./common\";\n\n/**\n * Takes an optional partial EventTaskDef\n * generates a task replacing default/fake values with provided overrides\n *\n * @param overrides overrides for defaults\n * @returns a fully defined task\n */\nexport const generateEventTask = (\n  overrides: Partial<EventTaskDef> = {}\n): EventTaskDef => ({\n  ...nameTaskNameGenerator(\"event\", overrides),\n  sink: \"sqs:sqs_queue_name\",\n  asyncComplete: false,\n  ...overrides,\n  type: TaskType.EVENT,\n});\n","import { ForkJoinTaskDef, JoinTaskDef, TaskType } from \"../../open-api/\";\nimport { nameTaskNameGenerator } from \"./common\";\nimport { ForkJoinTaskDefGen, NestedTaskMapper } from \"./types\";\n\nexport const generateForkJoinTask = (\n  overrides: Partial<ForkJoinTaskDefGen> = {},\n  nestedMapper: NestedTaskMapper\n): ForkJoinTaskDef => ({\n  ...nameTaskNameGenerator(\"forkJoin\", overrides),\n  inputParameters: {},\n  ...overrides,\n  type: TaskType.FORK_JOIN,\n  forkTasks: (overrides?.forkTasks || []).map(nestedMapper),\n});\n\nexport const generateJoinTask = (\n  overrides: Partial<JoinTaskDef> = {}\n): JoinTaskDef => ({\n  ...nameTaskNameGenerator(\"join\", overrides),\n  inputParameters: {},\n  joinOn: [],\n  ...overrides,\n  type: TaskType.JOIN,\n});\n","import { HttpTaskDef, TaskType } from \"../../open-api\";\nimport { nameTaskNameGenerator } from \"./common\";\n\n/**\n * Takes an optional partial HttpTaskDef\n * generates a task replacing default/fake values with provided overrides\n *\n * @param overrides overrides for defaults\n * @returns a fully defined task\n */\nexport const generateHTTPTask = (\n overrides: Partial<HttpTaskDef> = {}\n): HttpTaskDef => ({\n  ...nameTaskNameGenerator(\"httpTask\", overrides),\n  inputParameters: {\n    http_request: {\n      uri: \"https://jsonplaceholder.typicode.com/posts/${workflow.input.queryid}\",\n      method: \"GET\",\n    },\n  },\n  asyncComplete: false,\n  ...overrides,\n  type: TaskType.HTTP,\n});\n","import {\n  InlineTaskDef,\n  TaskType,\n  InlineTaskInputParameters,\n} from \"../../open-api\";\nimport { InlineTaskDefGen, InlineTaskInputParametersGen } from \"./types\";\nimport { nameTaskNameGenerator } from \"./common\";\n\nconst defaultInputParams: InlineTaskInputParameters = {\n  value: \"${workflow.input.value}\",\n  evaluatorType: \"graaljs\",\n  expression: \"true\",\n};\n\nexport const generateEvaluationCode = (\n  inputParametersPartial: Partial<InlineTaskInputParametersGen> = {}\n): InlineTaskInputParameters => {\n  const inlinePartialDefJavascript = inputParametersPartial;\n  const inlineExpression = inlinePartialDefJavascript?.expression;\n  if (\n    inlineExpression !== undefined &&\n    typeof inlineExpression === \"function\"\n  ) {\n    const resultingFunction = inlineExpression();\n\n    if (typeof resultingFunction !== \"function\") {\n      throw new Error(\"Inline expression function must return a function\");\n    }\n\n    const resultingFunctionAsString = resultingFunction.toString();\n\n    const toReturn: InlineTaskInputParameters = {\n      evaluatorType: \"graaljs\",\n      ...(inputParametersPartial || { value: \"true\" }),\n      expression: `(${resultingFunctionAsString})();`,\n    };\n    return toReturn;\n  }\n  return {\n    ...defaultInputParams,\n    evaluatorType: \"graaljs\",\n    ...inputParametersPartial,\n  } as InlineTaskInputParameters;\n};\n\n/**\n * Takes an optional partial InlineTaskDefGen\n * generates a task replacing default/fake values with provided overrides\n *\n * <b>note</b> that the inputParameters.expression can be either a string containing javascript\n * or a function thar returns an ES5 function\n *\n * @param overrides overrides for defaults\n * @returns a fully defined task\n */\nexport const generateInlineTask = (\n  override: Partial<InlineTaskDefGen> = {}\n): InlineTaskDef => ({\n  ...nameTaskNameGenerator(\"inline\", override),\n  ...override,\n  inputParameters: generateEvaluationCode(override?.inputParameters || {}),\n  type: TaskType.INLINE,\n});\n","import { JsonJQTransformTaskDef, TaskType } from \"../../open-api\";\nimport { nameTaskNameGenerator } from \"./common\";\n\n/**\n * Takes an optional partial JsonJQTransformTaskDef\n * generates a task replacing default/fake values with provided overrides\n *\n * @param overrides overrides for defaults\n * @returns a fully defined task\n */\nexport const generateJQTransformTask = (\n  overrides: Partial<JsonJQTransformTaskDef> = {}\n): JsonJQTransformTaskDef => ({\n  ...nameTaskNameGenerator(\"jqTransform\", overrides),\n  inputParameters: {\n    key1: {\n      value1: [\"a\", \"b\"],\n    },\n    key2: {\n      value2: [\"c\", \"d\"],\n    },\n    queryExpression: \"{ key3: (.key1.value1 + .key2.value2) }\",\n  },\n  ...overrides,\n  type: TaskType.JSON_JQ_TRANSFORM,\n});\n","import { KafkaPublishTaskDef, TaskType } from \"../../open-api\";\nimport { nameTaskNameGenerator } from \"./common\";\n\n/**\n * Takes an optional partial KafkaPublishTaskDef\n * generates a task replacing default/fake values with provided overrides\n *\n * @param overrides overrides for defaults\n * @returns a fully defined task\n */\nexport const generateKafkaPublishTask = (\n  overrides: Partial<KafkaPublishTaskDef> = {}\n): KafkaPublishTaskDef => ({\n  ...nameTaskNameGenerator(\"kafka\", overrides),\n  inputParameters: {\n    kafka_request: {\n      topic: \"topic\",\n      value: \"\",\n      bootStrapServers: \"localhost:9092\",\n      headers: {},\n      key: \"123\",\n      keySerializer: \"org.apache.kafka.common.serialization.IntegerSerializer\",\n    },\n  },\n  ...overrides,\n  type: TaskType.KAFKA_PUBLISH,\n});\n","import { SubWorkflowTaskDef, TaskType } from \"../../open-api\";\nimport { nameTaskNameGenerator } from \"./common\";\n\n/**\n * Takes an optional partial SubWorkflowTaskDef\n * generates a task replacing default/fake values with provided overrides\n *\n * @param overrides overrides for defaults\n * @returns a fully defined task\n */\nexport const generateSubWorkflowTask = (\n  overrides: Partial<SubWorkflowTaskDef> = {}\n): SubWorkflowTaskDef => ({\n  ...nameTaskNameGenerator(\"subWorkflow\", overrides),\n  inputParameters: {},\n  subWorkflowParam: {\n    name: \"name\",\n    version: 1,\n    taskToDomain: {},\n  },\n  ...overrides,\n  type: TaskType.SUB_WORKFLOW,\n});\n","import { SetVariableTaskDef, TaskType } from \"../../open-api\";\nimport { nameTaskNameGenerator } from \"./common\";\n\n/**\n * Takes an optional partial SetVariableTaskDef\n * generates a task replacing default/fake values with provided overrides\n *\n * @param overrides overrides for defaults\n * @returns a fully defined task\n */\nexport const generateSetVariableTask = (\n  overrides: Partial<SetVariableTaskDef> = {}\n): SetVariableTaskDef => ({\n  ...nameTaskNameGenerator(\"setVariable\", overrides),\n  inputParameters: {},\n  ...overrides,\n  type: TaskType.SET_VARIABLE,\n});\n","import { TerminateTaskDef, TaskType } from \"../../open-api\";\nimport { nameTaskNameGenerator } from \"./common\";\n\n/**\n * Takes an optional partial TerminateTaskDef\n * generates a task replacing default/fake values with provided overrides\n *\n * @param overrides overrides for defaults\n * @returns a fully defined task\n */\nexport const generateTerminateTask = (\n  overrides: Partial<TerminateTaskDef> = {}\n): TerminateTaskDef => ({\n  ...nameTaskNameGenerator(\"terminate\", overrides),\n  inputParameters: {\n    terminationStatus: \"COMPLETED\",\n    workflowOutput: {},\n  },\n  startDelay: 0,\n  ...overrides,\n  type: TaskType.TERMINATE,\n});\n","import { WaitTaskDef, TaskType } from \"../../open-api\";\nimport { nameTaskNameGenerator } from \"./common\";\n\n/**\n * Takes an optional partial WaitTaskDef\n * generates a task replacing default/fake values with provided overrides\n *\n * @param overrides overrides for defaults\n * @returns a fully defined task\n */\nexport const generateWaitTask = (\n  overrides: Partial<WaitTaskDef> = {}\n): WaitTaskDef => ({\n  ...nameTaskNameGenerator(\"wait\", overrides),\n  ...overrides,\n  inputParameters:{},\n  type: TaskType.WAIT,\n});\n","import { SwitchTaskDef, TaskType, TaskDefTypes } from \"../../open-api\";\nimport { nameTaskNameGenerator, mapArrValues } from \"./common\";\nimport { NestedTaskMapper, SwitchTaskDefGen } from \"./types\";\n\ninterface DefinedCases {\n  decisionCases: Record<string, TaskDefTypes[]>;\n  defaultCase: TaskDefTypes[];\n}\n\nconst fillSwitchTaskBranches = (\n  task: Partial<SwitchTaskDefGen>,\n  mapper: NestedTaskMapper\n): DefinedCases => ({\n  decisionCases: mapArrValues(mapper, task?.decisionCases || {}),\n  defaultCase: mapper(task?.defaultCase || []),\n});\n\nexport const generateSwitchTask = (\n  overrides: Partial<SwitchTaskDefGen> = {},\n  nestedTasksMapper: NestedTaskMapper\n): SwitchTaskDef => ({\n  ...nameTaskNameGenerator(\"switch\", overrides),\n  inputParameters: {\n    switchCaseValue: \"\",\n  },\n  evaluatorType: \"value-param\",\n  expression: \"switchCaseValue\",\n  ...overrides,\n  ...fillSwitchTaskBranches(overrides, nestedTasksMapper),\n  type: TaskType.SWITCH,\n});\n","import { WorkflowDef } from \"../../open-api\";\n\nexport const workflowGenerator = (\n  overrides: Partial<WorkflowDef>\n): WorkflowDef => ({\n  name: \"NewWorkflow_3nxbi\",\n  description:\n    \"Edit or extend this sample workflow. Set the workflow name to get started\",\n  version: 1,\n  tasks: [],\n  inputParameters: [],\n  outputParameters: {},\n  schemaVersion: 2,\n  restartable: true,\n  workflowStatusListenerEnabled: false,\n  ownerEmail: \"james.stuart@orkes.io\",\n  timeoutPolicy: \"ALERT_ONLY\",\n  timeoutSeconds: 0,\n  ...overrides,\n});\n","import { ForkJoinDynamicDef, TaskType } from \"../../open-api\";\nimport { nameTaskNameGenerator } from \"./common\";\n\nexport const generateForkJoinDynamic = (\n  overrides: Partial<ForkJoinDynamicDef> = {}\n): ForkJoinDynamicDef => ({\n  ...nameTaskNameGenerator(\"forkJoinDynamic\", overrides),\n  inputParameters: {\n    dynamicTasks: \"\",\n    dynamicTasksInput: \"\",\n  },\n  dynamicForkTasksParam: \"dynamicTasks\",\n  dynamicForkTasksInputParamName: \"dynamicTasksInput\",\n  startDelay: 0,\n  optional: false,\n  asyncComplete: false,\n  ...overrides,\n  type: TaskType.FORK_JOIN_DYNAMIC,\n});\n","import { workflowGenerator } from \"./WorkflowGenerator\";\nimport { WorkflowDefGen, TaskDefTypesGen } from \"./types\";\nimport { generateSimpleTask } from \"./SimpleTask\";\nimport { generateDoWhileTask } from \"./DoWhileTask\";\nimport { generateEventTask } from \"./EventTask\";\nimport { generateForkJoinTask, generateJoinTask } from \"./ForkJoin\";\nimport { generateForkJoinDynamic } from \"./ForkJoinDynamicTask\";\nimport { generateHTTPTask } from \"./HttpTask\";\nimport { generateInlineTask } from \"./InlineTask\";\nimport { generateJQTransformTask } from \"./JsonJQTransform\";\nimport { generateKafkaPublishTask } from \"./KafkaTask\";\nimport { generateSubWorkflowTask } from \"./SubWorkflowTask\";\nimport { generateSetVariableTask } from \"./SetVariableTask\";\nimport { generateTerminateTask } from \"./TerminateTask\";\nimport { generateWaitTask } from \"./WaitTask\";\nimport { generateSwitchTask } from \"./SwitchTask\";\nimport { SimpleTaskDef, TaskDefTypes, TaskType } from \"../../open-api\";\n\nconst filledTaskDef = (task: Partial<TaskDefTypesGen>): TaskDefTypes => {\n  const taskType = task.type;\n  switch (taskType) {\n    case TaskType.SWITCH:\n      return generateSwitchTask(task, taskGenMapper);\n    case TaskType.SIMPLE:\n      return generateSimpleTask(task);\n    case TaskType.DO_WHILE:\n      return generateDoWhileTask(task, taskGenMapper);\n    case TaskType.EVENT:\n      return generateEventTask(task);\n    case TaskType.FORK_JOIN:\n      return generateForkJoinTask(task, taskGenMapper);\n    case TaskType.FORK_JOIN_DYNAMIC:\n      return generateForkJoinDynamic(task);\n    case TaskType.HTTP:\n      return generateHTTPTask(task);\n    case TaskType.INLINE:\n      return generateInlineTask(task);\n    case TaskType.JOIN:\n      return generateJoinTask(task);\n    case TaskType.JSON_JQ_TRANSFORM:\n      return generateJQTransformTask(task);\n    case TaskType.KAFKA_PUBLISH:\n      return generateKafkaPublishTask(task);\n    case TaskType.SUB_WORKFLOW:\n      return generateSubWorkflowTask(task);\n    case TaskType.SET_VARIABLE:\n      return generateSetVariableTask(task);\n    case TaskType.TERMINATE:\n      return generateTerminateTask(task);\n    case TaskType.WAIT:\n      return generateWaitTask(task);\n    default:\n      return generateSimpleTask(task as SimpleTaskDef);\n  }\n};\n\nexport const taskGenMapper = (\n  tasks: Partial<TaskDefTypesGen>[]\n): TaskDefTypes[] =>\n  tasks.reduce((acc: TaskDefTypes[], task, idx: number): TaskDefTypes[] => {\n    const filledTask = filledTaskDef(task);\n    const maybeNextTask = tasks.length >= idx + 1 ? tasks[idx + 1] : undefined;\n\n    return acc.concat(maybeAddJoinTask(filledTask, maybeNextTask));\n  }, []);\n\nconst maybeAddJoinTask = (\n  currentTask: TaskDefTypes,\n  maybeNextTask?: Partial<TaskDefTypesGen>\n) => {\n  if (\n    (currentTask.type === TaskType.FORK_JOIN ||\n      currentTask.type === TaskType.FORK_JOIN_DYNAMIC) &&\n    maybeNextTask != null &&\n    maybeNextTask.type !== TaskType.JOIN\n  ) {\n    return [currentTask, generateJoinTask({})];\n  }\n  return currentTask;\n};\n\n/**\n * Takes an optional partial WorkflowDefGen\n * generates a workflow replacing default/fake values with provided overrides\n *\n * @param overrides overrides for defaults\n * @returns a fully defined task\n */\nexport const generate = (overrides: Partial<WorkflowDefGen>) => {\n  const maybeTasks: Partial<TaskDefTypesGen>[] = overrides.tasks || [];\n  const generatedTasks: TaskDefTypes[] = taskGenMapper(maybeTasks);\n  return workflowGenerator({ ...overrides, tasks: generatedTasks });\n};\n","import { generateSimpleTask } from \"./SimpleTask\";\nimport { generateDoWhileTask as doWhileGenerateInner } from \"./DoWhileTask\";\nimport { generateEventTask } from \"./EventTask\";\nimport {\n  generateForkJoinTask as generateForkJoinTaskInner,\n  generateJoinTask,\n} from \"./ForkJoin\";\nimport { generateHTTPTask } from \"./HttpTask\";\nimport { generateInlineTask } from \"./InlineTask\";\nimport { generateJQTransformTask } from \"./JsonJQTransform\";\nimport { generateKafkaPublishTask } from \"./KafkaTask\";\nimport { generateSubWorkflowTask } from \"./SubWorkflowTask\";\nimport { generateSetVariableTask } from \"./SetVariableTask\";\nimport { generateTerminateTask } from \"./TerminateTask\";\nimport { generateWaitTask } from \"./WaitTask\";\nimport { generateSwitchTask as innerGenerateSwitchTask } from \"./SwitchTask\";\n\nimport { taskGenMapper, generate } from \"./generator\";\nimport {\n  SwitchTaskDefGen,\n  NestedTaskMapper,\n  DoWhileTaskDefGen,\n  ForkJoinTaskDefGen,\n} from \"./types\";\n/**\n * Takes an optional partial SwitchTaskDefGen and an optional nestedMapper\n * generates a task replacing default/fake values with provided overrides\n *\n * @param overrides overrides for defaults\n * @param nestedTasksMapper function to run on array of nested tasks\n * @returns a fully defined task\n */\nconst generateSwitchTask = (\n  overrides: Partial<SwitchTaskDefGen> = {},\n  nestedTasksMapper: NestedTaskMapper = taskGenMapper\n) => innerGenerateSwitchTask(overrides, nestedTasksMapper);\n\n/**\n * Takes an optional partial DoWhileTaskDefGen and an optional nestedMapper\n * generates a task replacing default/fake values with provided overrides\n *\n * @param overrides overrides for defaults\n * @param nestedTasksMapper function to run on array of nested tasks\n * @returns a fully defined task\n */\nconst generateDoWhileTask = (\n  overrides: Partial<DoWhileTaskDefGen> = {},\n  nestedTasksMapper: NestedTaskMapper = taskGenMapper\n) => doWhileGenerateInner(overrides, nestedTasksMapper);\n\n/**\n * Takes an optional partial DoWhileTaskDefGen and an optional nestedMapper\n * generates a task replacing default/fake values with provided overrides\n *\n * @param overrides overrides for defaults\n * @param nestedTasksMapper function to run on array of nested tasks\n * @returns a fully defined task\n */\nconst generateForkJoinTask = (\n  overrides: Partial<ForkJoinTaskDefGen> = {},\n  nestedMapper: NestedTaskMapper = taskGenMapper\n) => generateForkJoinTaskInner(overrides, nestedMapper);\n\nexport {\n  generateSimpleTask,\n  generateDoWhileTask,\n  generateEventTask,\n  generateForkJoinTask,\n  generateJoinTask,\n  generateHTTPTask,\n  generateInlineTask,\n  generateJQTransformTask,\n  generateKafkaPublishTask,\n  generateSubWorkflowTask,\n  generateSetVariableTask,\n  generateTerminateTask,\n  generateWaitTask,\n  generateSwitchTask,\n  generate,\n  taskGenMapper,\n};\n","import {\n  TaskType,\n  ForkJoinTaskDef,\n  TaskDefTypes,\n  JoinTaskDef,\n} from \"../../../open-api\";\nimport { generateJoinTask } from \"../../generators\";\n\nexport const forkTask = (\n  taskReferenceName: string,\n  forkTasks: TaskDefTypes[]\n): ForkJoinTaskDef => ({\n  taskReferenceName,\n  name: taskReferenceName,\n  type: TaskType.FORK_JOIN,\n  forkTasks: [forkTasks],\n});\n\nexport const forkTaskJoin = (\n  taskReferenceName: string,\n  forkTasks: TaskDefTypes[],\n  optional?: boolean\n): [ForkJoinTaskDef, JoinTaskDef] => [\n  forkTask(taskReferenceName, forkTasks),\n  generateJoinTask({ name: `${taskReferenceName}_join`, optional }),\n];\n","import type { WorkflowTask } from \"../../../open-api\";\nimport { TaskType } from \"../../../open-api\";\n\nexport interface GetDocumentOptions {\n  /** Media type of the document (e.g. \"application/pdf\") */\n  mediaType?: string;\n  optional?: boolean;\n}\n\nexport const getDocumentTask = (\n  taskReferenceName: string,\n  url: string,\n  options?: GetDocumentOptions\n): WorkflowTask => ({\n  name: taskReferenceName,\n  taskReferenceName,\n  type: TaskType.GET_DOCUMENT,\n  inputParameters: {\n    url,\n    ...(options?.mediaType !== undefined && { mediaType: options.mediaType }),\n  },\n  optional: options?.optional,\n});\n","import { TaskType, HttpTaskDef, HttpInputParameters } from \"../../../open-api\";\n\nexport const httpTask = (\n  taskReferenceName: string,\n  inputParameters: HttpInputParameters,\n  asyncComplete?: boolean,\n  optional?: boolean\n): HttpTaskDef => ({\n  name: taskReferenceName,\n  taskReferenceName,\n  inputParameters: {\n    http_request: inputParameters,\n  },\n  asyncComplete,\n  optional,\n  type: TaskType.HTTP,\n});\n","import type { WorkflowTask, HttpInputParameters } from \"../../../open-api\";\nimport { TaskType } from \"../../../open-api\";\n\nexport interface HttpPollInputParameters {\n  http_request: HttpInputParameters;\n  /** Polling interval in seconds */\n  pollingInterval?: number;\n  /** Polling strategy: FIXED or LINEAR_BACKOFF */\n  pollingStrategy?: \"FIXED\" | \"LINEAR_BACKOFF\";\n  /** Condition expression to terminate polling (e.g. \"$.status === 'COMPLETED'\") */\n  terminationCondition?: string;\n}\n\nexport const httpPollTask = (\n  taskReferenceName: string,\n  inputParameters: HttpPollInputParameters,\n  optional?: boolean\n): WorkflowTask => ({\n  name: taskReferenceName,\n  taskReferenceName,\n  type: TaskType.HTTP_POLL,\n  inputParameters: inputParameters as unknown as Record<string, unknown>,\n  optional,\n});\n","import type { WorkflowTask } from \"../../../open-api\";\nimport { TaskType } from \"../../../open-api\";\n\nexport type AssignmentCompletionStrategy = \"LEAVE_OPEN\" | \"TERMINATE\";\n\nexport interface HumanTaskOptions {\n  displayName?: string;\n  formTemplate?: string;\n  formVersion?: number;\n  assignmentCompletionStrategy?: AssignmentCompletionStrategy;\n  assignee?: { userType: \"EXTERNAL_USER\" | \"EXTERNAL_GROUP\"; user: string };\n  optional?: boolean;\n}\n\nexport const humanTask = (\n  taskReferenceName: string,\n  options?: HumanTaskOptions\n): WorkflowTask => {\n  const humanTaskDef: Record<string, unknown> = {};\n\n  if (options?.assignmentCompletionStrategy !== undefined) {\n    humanTaskDef.assignmentCompletionStrategy =\n      options.assignmentCompletionStrategy;\n  }\n  if (options?.displayName !== undefined) {\n    humanTaskDef.displayName = options.displayName;\n  }\n  if (options?.formTemplate !== undefined) {\n    humanTaskDef.userFormTemplate = {\n      name: options.formTemplate,\n      version: options.formVersion ?? 0,\n    };\n  }\n  if (options?.assignee !== undefined) {\n    humanTaskDef.assignee = {\n      userType: options.assignee.userType,\n      user: options.assignee.user,\n    };\n  }\n\n  return {\n    name: taskReferenceName,\n    taskReferenceName,\n    type: TaskType.HUMAN,\n    inputParameters: {\n      __humanTaskDefinition: humanTaskDef,\n    },\n    optional: options?.optional,\n  };\n};\n","import { TaskType, InlineTaskDef } from \"../../../open-api\";\n\nexport const inlineTask = (\n  taskReferenceName: string,\n  script: string,\n  evaluatorType: \"javascript\" | \"graaljs\" = \"javascript\",\n  optional?: boolean\n): InlineTaskDef => ({\n  name: taskReferenceName,\n  taskReferenceName,\n  inputParameters: {\n    evaluatorType,\n    expression: script,\n  },\n  type: TaskType.INLINE,\n  optional,\n});\n","import { TaskType, JoinTaskDef } from \"../../../open-api\";\n\nexport const joinTask = (\n  taskReferenceName: string,\n  joinOn: string[],\n  optional?: boolean\n): JoinTaskDef => ({\n  name: taskReferenceName,\n  taskReferenceName,\n  joinOn,\n  type: TaskType.JOIN,\n  optional,\n});\n","import { TaskType, JsonJQTransformTaskDef } from \"../../../open-api\";\n\nexport const jsonJqTask = (\n  taskReferenceName: string,\n  script: string,\n  optional?: boolean\n): JsonJQTransformTaskDef => ({\n  name: taskReferenceName,\n  taskReferenceName,\n  type: TaskType.JSON_JQ_TRANSFORM,\n  inputParameters: {\n    queryExpression: script,\n  },\n  optional,\n});\n","import {\n  TaskType,\n  KafkaPublishTaskDef,\n  KafkaPublishInputParameters,\n} from \"../../../open-api\";\n\nexport const kafkaPublishTask = (\n  taskReferenceName: string,\n  kafka_request: KafkaPublishInputParameters,\n  optional?: boolean\n): KafkaPublishTaskDef => ({\n  taskReferenceName,\n  name: taskReferenceName,\n  type: TaskType.KAFKA_PUBLISH,\n  inputParameters: {\n    kafka_request,\n  },\n  optional,\n});\n","import { TaskType, SetVariableTaskDef } from \"../../../open-api\";\n\nexport const setVariableTask = (\n  taskReferenceName: string,\n  inputParameters: Record<string, unknown>,\n  optional?: boolean\n): SetVariableTaskDef => ({\n  name: taskReferenceName,\n  taskReferenceName,\n  type: TaskType.SET_VARIABLE,\n  inputParameters,\n  optional,\n});\n","import { TaskType, SimpleTaskDef } from \"../../../open-api\";\n\nexport const simpleTask = (\n  taskReferenceName: string,\n  name: string,\n  inputParameters: Record<string, unknown>,\n  optional?: boolean\n): SimpleTaskDef => ({\n  name,\n  taskReferenceName,\n  inputParameters,\n  type: TaskType.SIMPLE,\n  optional,\n});\n","import type { WorkflowTask } from \"../../../open-api\";\nimport { TaskType } from \"../../../open-api\";\n\nexport const startWorkflowTask = (\n  taskReferenceName: string,\n  workflowName: string,\n  input?: Record<string, unknown>,\n  version?: number,\n  correlationId?: string,\n  optional?: boolean\n): WorkflowTask => ({\n  name: taskReferenceName,\n  taskReferenceName,\n  type: TaskType.START_WORKFLOW,\n  inputParameters: {\n    startWorkflow: {\n      name: workflowName,\n      version,\n      input,\n      correlationId,\n    },\n  },\n  optional,\n});\n","import { TaskType, SubWorkflowTaskDef } from \"../../../open-api\";\n\nexport const subWorkflowTask = (\n  taskReferenceName: string,\n  workflowName: string,\n  version?: number,\n  optional?: boolean\n): SubWorkflowTaskDef => ({\n  name: taskReferenceName,\n  taskReferenceName,\n  subWorkflowParam: {\n    name: workflowName,\n    version,\n  },\n  type: TaskType.SUB_WORKFLOW,\n  optional,\n});\n","import { TaskType, SwitchTaskDef, TaskDefTypes } from \"../../../open-api\";\n\nexport const switchTask = (\n  taskReferenceName: string,\n  expression: string,\n  decisionCases: Record<string, TaskDefTypes[]> = {},\n  defaultCase: TaskDefTypes[] = [],\n  optional?: boolean\n): SwitchTaskDef => ({\n  name: taskReferenceName,\n  taskReferenceName,\n  decisionCases,\n  evaluatorType: \"value-param\",\n  inputParameters: {\n    switchCaseValue: expression,\n  },\n  expression: \"switchCaseValue\",\n  defaultCase,\n  type: TaskType.SWITCH,\n  optional,\n});\n","import { TaskType, TerminateTaskDef } from \"../../../open-api\";\nexport const terminateTask = (\n  taskReferenceName: string,\n  status: \"COMPLETED\" | \"FAILED\",\n  terminationReason?: string\n): TerminateTaskDef => ({\n  name: taskReferenceName,\n  taskReferenceName,\n  inputParameters: {\n    terminationStatus: status,\n    terminationReason,\n  },\n  type: TaskType.TERMINATE,\n});\n","import { TaskType, WaitTaskDef } from \"../../../open-api\";\n\nexport const waitTaskDuration = (\n  taskReferenceName: string,\n  duration: string,\n  optional?: boolean\n): WaitTaskDef => ({\n  name: taskReferenceName,\n  taskReferenceName,\n  inputParameters: {\n    duration,\n  },\n  type: TaskType.WAIT,\n  optional,\n});\n\nexport const waitTaskUntil = (\n  taskReferenceName: string,\n  until: string,\n  optional?: boolean\n): WaitTaskDef => ({\n  name: taskReferenceName,\n  taskReferenceName,\n  inputParameters: {\n    until,\n  },\n  type: TaskType.WAIT,\n  optional,\n});\n","import type { WorkflowTask } from \"../../../open-api\";\nimport { TaskType } from \"../../../open-api\";\n\nexport interface WaitForWebhookOptions {\n  /** Match conditions for incoming webhook (key-value pairs) */\n  matches?: Record<string, unknown>;\n  optional?: boolean;\n}\n\nexport const waitForWebhookTask = (\n  taskReferenceName: string,\n  options?: WaitForWebhookOptions\n): WorkflowTask => ({\n  name: taskReferenceName,\n  taskReferenceName,\n  type: TaskType.WAIT_FOR_WEBHOOK,\n  inputParameters: {\n    ...options?.matches,\n  },\n  optional: options?.optional,\n});\n","// ── Enums ─────────────────────────────────────────────────────────\n\nexport enum Role {\n  USER = \"user\",\n  ASSISTANT = \"assistant\",\n  SYSTEM = \"system\",\n  TOOL_CALL = \"tool_call\",\n  TOOL = \"tool\",\n}\n\n/** LLM provider identifiers matching the Python SDK's LLMProvider enum. */\nexport enum LLMProvider {\n  OPEN_AI = \"openai\",\n  AZURE_OPEN_AI = \"azure_openai\",\n  VERTEX_AI = \"vertex_ai\",\n  HUGGING_FACE = \"huggingface\",\n  ANTHROPIC = \"anthropic\",\n  BEDROCK = \"bedrock\",\n  COHERE = \"cohere\",\n  GROK = \"Grok\",\n  MISTRAL = \"mistral\",\n  OLLAMA = \"ollama\",\n  PERPLEXITY = \"perplexity\",\n}\n\n/** Vector database identifiers matching the Python SDK's VectorDB enum. */\nexport enum VectorDB {\n  PINECONE_DB = \"pineconedb\",\n  WEAVIATE_DB = \"weaviatedb\",\n  POSTGRES_VECTOR_DB = \"pgvectordb\",\n  MONGO_VECTOR_DB = \"mongovectordb\",\n}\n\n// ── Message & Tool Types ──────────────────────────────────────────\n\nexport interface ToolCall {\n  name: string;\n  taskReferenceName?: string;\n  type?: string;\n  inputParameters?: Record<string, unknown>;\n  output?: Record<string, unknown>;\n}\n\nexport interface ChatMessage {\n  role: Role;\n  message: string;\n  media?: string[];\n  mimeType?: string;\n  toolCalls?: ToolCall[];\n}\n\nexport interface ToolSpec {\n  name: string;\n  type?: string;\n  description?: string;\n  inputSchema?: Record<string, unknown>;\n  outputSchema?: Record<string, unknown>;\n}\n\n// ── Model Types ───────────────────────────────────────────────────\n\nexport interface EmbeddingModel {\n  provider: string;\n  model: string;\n}\n\nexport interface LlmCompletionParams {\n  temperature?: number;\n  topP?: number;\n  topK?: number;\n  maxTokens?: number;\n  frequencyPenalty?: number;\n  presencePenalty?: number;\n  stopWords?: string[];\n  maxResults?: number;\n}\n\n// ── Integration Config Types ──────────────────────────────────────\n\n/** Base configuration for AI integrations. */\nexport interface IntegrationConfig {\n  provider: string;\n  description?: string;\n  [key: string]: unknown;\n}\n\n/** OpenAI integration configuration. */\nexport interface OpenAIConfig extends IntegrationConfig {\n  provider: \"openai\";\n  apiKey: string;\n  organizationId?: string;\n}\n\n/** Azure OpenAI integration configuration. */\nexport interface AzureOpenAIConfig extends IntegrationConfig {\n  provider: \"azure_openai\";\n  apiKey: string;\n  endpoint: string;\n  deploymentName?: string;\n}\n\n/** Weaviate vector database configuration. */\nexport interface WeaviateConfig extends IntegrationConfig {\n  provider: \"weaviatedb\";\n  apiKey: string;\n  endpoint: string;\n}\n\n/** Pinecone vector database configuration. */\nexport interface PineconeConfig extends IntegrationConfig {\n  provider: \"pineconedb\";\n  apiKey: string;\n  environment?: string;\n  projectName?: string;\n}\n","import type { WorkflowTask } from \"../../../../open-api\";\nimport { TaskType } from \"../../../../open-api\";\nimport type { ChatMessage, LlmCompletionParams, ToolSpec } from \"./types\";\n\nexport interface LlmChatCompleteOptions extends LlmCompletionParams {\n  messages?: ChatMessage[];\n  instructionsTemplate?: string;\n  promptVariables?: Record<string, unknown>;\n  promptVersion?: number;\n  userInput?: string;\n  tools?: ToolSpec[];\n  jsonOutput?: boolean;\n  outputSchema?: Record<string, unknown>;\n  outputMimeType?: string;\n  outputLocation?: string;\n  googleSearchRetrieval?: boolean;\n  inputSchema?: Record<string, unknown>;\n  thinkingTokenLimit?: number;\n  reasoningEffort?: string;\n  voice?: string;\n  participants?: string[];\n}\n\nexport const llmChatCompleteTask = (\n  taskReferenceName: string,\n  provider: string,\n  model: string,\n  options?: LlmChatCompleteOptions\n): WorkflowTask => ({\n  name: taskReferenceName,\n  taskReferenceName,\n  type: TaskType.LLM_CHAT_COMPLETE,\n  inputParameters: {\n    llmProvider: provider,\n    model,\n    ...options,\n  },\n});\n","import type { WorkflowTask } from \"../../../../open-api\";\nimport { TaskType } from \"../../../../open-api\";\nimport type { LlmCompletionParams } from \"./types\";\n\nexport interface LlmTextCompleteOptions extends LlmCompletionParams {\n  promptVariables?: Record<string, unknown>;\n  promptVersion?: number;\n  jsonOutput?: boolean;\n}\n\nexport const llmTextCompleteTask = (\n  taskReferenceName: string,\n  provider: string,\n  model: string,\n  promptName: string,\n  options?: LlmTextCompleteOptions\n): WorkflowTask => ({\n  name: taskReferenceName,\n  taskReferenceName,\n  type: TaskType.LLM_TEXT_COMPLETE,\n  inputParameters: {\n    llmProvider: provider,\n    model,\n    promptName,\n    ...options,\n  },\n});\n","import type { WorkflowTask } from \"../../../../open-api\";\nimport { TaskType } from \"../../../../open-api\";\n\nexport interface LlmGenerateEmbeddingsOptions {\n  instructions?: string;\n  dimensions?: number;\n}\n\nexport const llmGenerateEmbeddingsTask = (\n  taskReferenceName: string,\n  provider: string,\n  model: string,\n  text: string,\n  options?: LlmGenerateEmbeddingsOptions\n): WorkflowTask => ({\n  name: taskReferenceName,\n  taskReferenceName,\n  type: TaskType.LLM_GENERATE_EMBEDDINGS,\n  inputParameters: {\n    llmProvider: provider,\n    model,\n    text,\n    ...options,\n  },\n});\n","import type { WorkflowTask } from \"../../../../open-api\";\nimport { TaskType } from \"../../../../open-api\";\nimport type { EmbeddingModel } from \"./types\";\n\nexport interface LlmIndexTextOptions {\n  namespace?: string;\n  metadata?: Record<string, unknown>;\n  url?: string;\n  chunkSize?: number;\n  chunkOverlap?: number;\n  dimensions?: number;\n}\n\nexport const llmIndexTextTask = (\n  taskReferenceName: string,\n  vectorDb: string,\n  index: string,\n  embeddingModel: EmbeddingModel,\n  text: string,\n  docId: string,\n  options?: LlmIndexTextOptions\n): WorkflowTask => ({\n  name: taskReferenceName,\n  taskReferenceName,\n  type: TaskType.LLM_INDEX_TEXT,\n  inputParameters: {\n    vectorDB: vectorDb,\n    index,\n    embeddingModelProvider: embeddingModel.provider,\n    embeddingModel: embeddingModel.model,\n    text,\n    docId,\n    ...options,\n  },\n});\n","import type { WorkflowTask } from \"../../../../open-api\";\nimport { TaskType } from \"../../../../open-api\";\nimport type { EmbeddingModel } from \"./types\";\n\nexport interface LlmIndexDocumentOptions {\n  namespace?: string;\n  chunkSize?: number;\n  chunkOverlap?: number;\n  docId?: string;\n  metadata?: Record<string, unknown>;\n  dimensions?: number;\n}\n\nexport const llmIndexDocumentTask = (\n  taskReferenceName: string,\n  vectorDb: string,\n  index: string,\n  embeddingModel: EmbeddingModel,\n  url: string,\n  mediaType: string,\n  options?: LlmIndexDocumentOptions\n): WorkflowTask => ({\n  name: taskReferenceName,\n  taskReferenceName,\n  type: TaskType.LLM_INDEX_TEXT,\n  inputParameters: {\n    vectorDB: vectorDb,\n    index,\n    embeddingModelProvider: embeddingModel.provider,\n    embeddingModel: embeddingModel.model,\n    url,\n    mediaType,\n    ...options,\n  },\n});\n","import type { WorkflowTask } from \"../../../../open-api\";\nimport { TaskType } from \"../../../../open-api\";\nimport type { EmbeddingModel } from \"./types\";\n\nexport interface LlmSearchIndexOptions {\n  namespace?: string;\n  maxResults?: number;\n  dimensions?: number;\n}\n\nexport const llmSearchIndexTask = (\n  taskReferenceName: string,\n  vectorDb: string,\n  index: string,\n  embeddingModel: EmbeddingModel,\n  query: string,\n  options?: LlmSearchIndexOptions\n): WorkflowTask => ({\n  name: taskReferenceName,\n  taskReferenceName,\n  type: TaskType.LLM_SEARCH_INDEX,\n  inputParameters: {\n    vectorDB: vectorDb,\n    index,\n    embeddingModelProvider: embeddingModel.provider,\n    embeddingModel: embeddingModel.model,\n    query,\n    ...options,\n  },\n});\n","import type { WorkflowTask } from \"../../../../open-api\";\nimport { TaskType } from \"../../../../open-api\";\n\nexport interface LlmSearchEmbeddingsOptions {\n  namespace?: string;\n  maxResults?: number;\n}\n\nexport const llmSearchEmbeddingsTask = (\n  taskReferenceName: string,\n  vectorDb: string,\n  index: string,\n  embeddings: number[],\n  options?: LlmSearchEmbeddingsOptions\n): WorkflowTask => ({\n  name: taskReferenceName,\n  taskReferenceName,\n  type: TaskType.LLM_SEARCH_EMBEDDINGS,\n  inputParameters: {\n    vectorDB: vectorDb,\n    index,\n    embeddings,\n    ...options,\n  },\n});\n","import type { WorkflowTask } from \"../../../../open-api\";\nimport { TaskType } from \"../../../../open-api\";\n\nexport interface LlmStoreEmbeddingsOptions {\n  namespace?: string;\n  docId?: string;\n  metadata?: Record<string, unknown>;\n}\n\nexport const llmStoreEmbeddingsTask = (\n  taskReferenceName: string,\n  vectorDb: string,\n  index: string,\n  embeddings: number[],\n  options?: LlmStoreEmbeddingsOptions\n): WorkflowTask => ({\n  name: taskReferenceName,\n  taskReferenceName,\n  type: TaskType.LLM_STORE_EMBEDDINGS,\n  inputParameters: {\n    vectorDB: vectorDb,\n    index,\n    embeddings,\n    ...options,\n  },\n});\n","import type { WorkflowTask } from \"../../../../open-api\";\nimport { TaskType } from \"../../../../open-api\";\n\nexport interface LlmQueryEmbeddingsOptions {\n  namespace?: string;\n}\n\nexport const llmQueryEmbeddingsTask = (\n  taskReferenceName: string,\n  vectorDb: string,\n  index: string,\n  embeddings: number[],\n  options?: LlmQueryEmbeddingsOptions\n): WorkflowTask => ({\n  name: taskReferenceName,\n  taskReferenceName,\n  type: TaskType.LLM_GET_EMBEDDINGS,\n  inputParameters: {\n    vectorDB: vectorDb,\n    index,\n    embeddings,\n    ...options,\n  },\n});\n","import type { WorkflowTask } from \"../../../../open-api\";\nimport { TaskType } from \"../../../../open-api\";\n\nexport interface GenerateImageOptions {\n  imageCount?: number;\n  width?: number;\n  height?: number;\n}\n\nexport const generateImageTask = (\n  taskReferenceName: string,\n  provider: string,\n  model: string,\n  prompt: string,\n  options?: GenerateImageOptions\n): WorkflowTask => ({\n  name: taskReferenceName,\n  taskReferenceName,\n  type: TaskType.GENERATE_IMAGE,\n  inputParameters: {\n    llmProvider: provider,\n    model,\n    prompt,\n    ...options,\n  },\n});\n","import type { WorkflowTask } from \"../../../../open-api\";\nimport { TaskType } from \"../../../../open-api\";\n\nexport interface GenerateAudioOptions {\n  text?: string;\n  voice?: string;\n  speed?: number;\n}\n\nexport const generateAudioTask = (\n  taskReferenceName: string,\n  provider: string,\n  model: string,\n  options?: GenerateAudioOptions\n): WorkflowTask => ({\n  name: taskReferenceName,\n  taskReferenceName,\n  type: TaskType.GENERATE_AUDIO,\n  inputParameters: {\n    llmProvider: provider,\n    model,\n    ...options,\n  },\n});\n","import type { WorkflowTask } from \"../../../../open-api\";\nimport { TaskType } from \"../../../../open-api\";\n\nexport interface CallMcpToolOptions {\n  inputParameters?: Record<string, unknown>;\n}\n\nexport const callMcpToolTask = (\n  taskReferenceName: string,\n  mcpServer: string,\n  method: string,\n  options?: CallMcpToolOptions\n): WorkflowTask => ({\n  name: taskReferenceName,\n  taskReferenceName,\n  type: TaskType.CALL_MCP_TOOL,\n  inputParameters: {\n    mcpServer,\n    method,\n    ...options?.inputParameters,\n  },\n});\n","import type { WorkflowTask } from \"../../../../open-api\";\nimport { TaskType } from \"../../../../open-api\";\n\nexport interface ListMcpToolsOptions {\n  filter?: string;\n}\n\nexport const listMcpToolsTask = (\n  taskReferenceName: string,\n  mcpServer: string,\n  options?: ListMcpToolsOptions\n): WorkflowTask => ({\n  name: taskReferenceName,\n  taskReferenceName,\n  type: TaskType.LIST_MCP_TOOLS,\n  inputParameters: {\n    mcpServer,\n    ...options,\n  },\n});\n","import type { WorkflowTask } from \"../../../../open-api\";\n\n/**\n * Set a single prompt variable on an LLM task.\n * Returns a new task with the variable applied to inputParameters.promptVariables.\n *\n * @example\n * ```typescript\n * const task = withPromptVariable(\n *   llmChatCompleteTask(\"ref\", \"openai\", \"gpt-4\"),\n *   \"context\",\n *   \"${workflow.input.context}\"\n * );\n * ```\n */\nexport const withPromptVariable = (\n  task: WorkflowTask,\n  variable: string,\n  value: unknown\n): WorkflowTask => ({\n  ...task,\n  inputParameters: {\n    ...task.inputParameters,\n    promptVariables: {\n      ...(task.inputParameters?.promptVariables as\n        | Record<string, unknown>\n        | undefined),\n      [variable]: value,\n    },\n  },\n});\n\n/**\n * Set multiple prompt variables on an LLM task at once.\n * Returns a new task with all variables merged into inputParameters.promptVariables.\n *\n * @example\n * ```typescript\n * const task = withPromptVariables(\n *   llmTextCompleteTask(\"ref\", \"openai\", \"gpt-4\", \"my_prompt\"),\n *   {\n *     context: \"${workflow.input.context}\",\n *     query: \"${workflow.input.query}\",\n *   }\n * );\n * ```\n */\nexport const withPromptVariables = (\n  task: WorkflowTask,\n  variables: Record<string, unknown>\n): WorkflowTask => ({\n  ...task,\n  inputParameters: {\n    ...task.inputParameters,\n    promptVariables: {\n      ...(task.inputParameters?.promptVariables as\n        | Record<string, unknown>\n        | undefined),\n      ...variables,\n    },\n  },\n});\n","import type { TaskDefTypes, WorkflowDef } from \"../../open-api\";\n\nexport const workflow = (name: string, tasks: TaskDefTypes[]): WorkflowDef => ({\n  name,\n  version: 1,\n  tasks,\n  inputParameters: [],\n  timeoutSeconds: 0,\n});\n","import type { TaskDef as OpenApiTaskDef, ExtendedTaskDef } from \"../../open-api\";\n\nexport const taskDefinition = ({\n  name,\n  ownerApp = \"\",\n  description = \"\",\n  retryCount = 3,\n  timeoutSeconds = 3600,\n  inputKeys = [],\n  outputKeys = [],\n  timeoutPolicy = \"TIME_OUT_WF\",\n  retryLogic = \"FIXED\",\n  retryDelaySeconds = 60,\n  responseTimeoutSeconds = 600,\n  concurrentExecLimit = 0,\n  inputTemplate = {},\n  rateLimitPerFrequency = 0,\n  rateLimitFrequencyInSeconds = 1,\n  ownerEmail = \"\",\n  pollTimeoutSeconds = 3600,\n  backoffScaleFactor = 1,\n}: ExtendedTaskDef): OpenApiTaskDef =>\n  ({\n    name,\n    ownerApp,\n    description,\n    retryCount,\n    timeoutSeconds,\n    inputKeys,\n    outputKeys,\n    timeoutPolicy,\n    retryLogic,\n    retryDelaySeconds,\n    responseTimeoutSeconds,\n    concurrentExecLimit,\n    inputTemplate,\n    rateLimitPerFrequency,\n    rateLimitFrequencyInSeconds,\n    ownerEmail,\n    pollTimeoutSeconds,\n    backoffScaleFactor,\n  } as OpenApiTaskDef);\n","import type {\n  WorkflowDef,\n  WorkflowTask,\n  WorkflowRun,\n  StartWorkflowRequest,\n} from \"../../open-api\";\nimport { TaskType } from \"../../open-api\";\nimport type { WorkflowExecutor } from \"../clients/workflow/WorkflowExecutor\";\n\n/**\n * Fluent workflow builder matching the Python SDK's ConductorWorkflow pattern.\n *\n * Provides method chaining for building, configuring, registering, and\n * executing workflows.\n *\n * @example\n * ```typescript\n * const wf = new ConductorWorkflow(executor, \"order_flow\")\n *   .add(simpleTask(\"validate_ref\", \"validate_order\", {}))\n *   .add(simpleTask(\"charge_ref\", \"charge_payment\", {}))\n *   .add(simpleTask(\"confirm_ref\", \"send_confirmation\", {}))\n *   .timeoutSeconds(3600)\n *   .outputParameters({ orderId: \"${workflow.input.orderId}\" });\n *\n * await wf.register(true);\n * const run = await wf.execute({ orderId: \"123\" });\n * ```\n */\nexport class ConductorWorkflow {\n  private readonly _executor: WorkflowExecutor;\n  private readonly _name: string;\n  private _version: number;\n  private _description?: string;\n  private _tasks: WorkflowTask[] = [];\n  private _timeoutPolicy?: \"TIME_OUT_WF\" | \"ALERT_ONLY\";\n  private _timeoutSeconds = 60;\n  private _ownerEmail?: string;\n  private _failureWorkflow = \"\";\n  private _restartable = true;\n  private _inputParameters: string[] = [];\n  private _inputTemplate: Record<string, unknown> = {};\n  private _outputParameters: Record<string, unknown> = {};\n  private _variables: Record<string, unknown> = {};\n  private _workflowStatusListenerEnabled = false;\n  private _workflowStatusListenerSink?: string;\n  private _forkCounter = 0;\n\n  constructor(\n    executor: WorkflowExecutor,\n    name: string,\n    version?: number,\n    description?: string\n  ) {\n    this._executor = executor;\n    this._name = name;\n    this._version = version ?? 1;\n    this._description = description;\n  }\n\n  /** Get the workflow name */\n  getName(): string {\n    return this._name;\n  }\n\n  /** Get the workflow version */\n  getVersion(): number {\n    return this._version;\n  }\n\n  // ── Task Building ───────────────────────────────────────────────\n\n  /** Append one or more tasks sequentially */\n  add(task: WorkflowTask | WorkflowTask[]): this {\n    if (Array.isArray(task)) {\n      this._tasks.push(...task);\n    } else {\n      this._tasks.push(task);\n    }\n    return this;\n  }\n\n  /** Add parallel fork branches with an auto-generated join */\n  fork(branches: WorkflowTask[][]): this {\n    this._forkCounter++;\n    const forkRefName = `__fork_${this._forkCounter}`;\n    const joinRefName = `__join_${this._forkCounter}`;\n\n    const joinOn = branches.map((branch) => {\n      const lastTask = branch[branch.length - 1];\n      return lastTask?.taskReferenceName ?? \"\";\n    });\n\n    this._tasks.push({\n      name: forkRefName,\n      taskReferenceName: forkRefName,\n      type: TaskType.FORK_JOIN,\n      forkTasks: branches,\n    });\n\n    this._tasks.push({\n      name: joinRefName,\n      taskReferenceName: joinRefName,\n      type: TaskType.JOIN,\n      joinOn,\n    });\n\n    return this;\n  }\n\n  /**\n   * Convert this workflow into a SUB_WORKFLOW task with the full definition\n   * embedded inline, matching Python SDK's `InlineSubWorkflowTask`.\n   *\n   * This allows composing workflows without pre-registering the child workflow.\n   *\n   * @param taskReferenceName - Reference name for the sub-workflow task\n   */\n  toSubWorkflowTask(taskReferenceName: string): WorkflowTask {\n    const def = this.toWorkflowDef();\n    const subWorkflowParam: Record<string, unknown> = {\n      name: this._name,\n      version: this._version,\n      workflowDefinition: def,\n    };\n    return {\n      name: taskReferenceName,\n      taskReferenceName,\n      type: TaskType.SUB_WORKFLOW,\n      subWorkflowParam:\n        subWorkflowParam as unknown as WorkflowTask[\"subWorkflowParam\"],\n      inputParameters: {},\n    };\n  }\n\n  // ── Configuration ───────────────────────────────────────────────\n\n  description(desc: string): this {\n    this._description = desc;\n    return this;\n  }\n\n  version(v: number): this {\n    this._version = v;\n    return this;\n  }\n\n  timeoutPolicy(policy: \"TIME_OUT_WF\" | \"ALERT_ONLY\"): this {\n    this._timeoutPolicy = policy;\n    return this;\n  }\n\n  timeoutSeconds(n: number): this {\n    this._timeoutSeconds = n;\n    return this;\n  }\n\n  ownerEmail(email: string): this {\n    this._ownerEmail = email;\n    return this;\n  }\n\n  failureWorkflow(name: string): this {\n    this._failureWorkflow = name;\n    return this;\n  }\n\n  restartable(val: boolean): this {\n    this._restartable = val;\n    return this;\n  }\n\n  /** Set the list of input parameter names */\n  inputParameters(params: string[]): this {\n    this._inputParameters = params;\n    return this;\n  }\n\n  /** Set the input template (default values/expressions for inputs) */\n  inputTemplate(template: Record<string, unknown>): this {\n    this._inputTemplate = template;\n    return this;\n  }\n\n  /** Alias for inputTemplate — set workflow input defaults */\n  workflowInput(input: Record<string, unknown>): this {\n    this._inputTemplate = input;\n    return this;\n  }\n\n  /** Set all output parameters at once */\n  outputParameters(params: Record<string, unknown>): this {\n    this._outputParameters = params;\n    return this;\n  }\n\n  /** Set a single output parameter */\n  outputParameter(key: string, value: unknown): this {\n    this._outputParameters[key] = value;\n    return this;\n  }\n\n  /** Set workflow variables */\n  variables(vars: Record<string, unknown>): this {\n    this._variables = vars;\n    return this;\n  }\n\n  /** Enable workflow status listener with a sink name */\n  enableStatusListener(sinkName: string): this {\n    this._workflowStatusListenerEnabled = true;\n    this._workflowStatusListenerSink = sinkName;\n    return this;\n  }\n\n  /** Disable workflow status listener */\n  disableStatusListener(): this {\n    this._workflowStatusListenerEnabled = false;\n    this._workflowStatusListenerSink = undefined;\n    return this;\n  }\n\n  // ── Reference Helpers ───────────────────────────────────────────\n\n  /** Returns a workflow input reference expression */\n  input(jsonPath: string): string {\n    return `\\${workflow.input.${jsonPath}}`;\n  }\n\n  /** Returns a workflow output reference expression */\n  output(jsonPath?: string): string {\n    if (jsonPath) {\n      return `\\${workflow.output.${jsonPath}}`;\n    }\n    return \"${workflow.output}\";\n  }\n\n  // ── Execution ───────────────────────────────────────────────────\n\n  /** Convert to a WorkflowDef object */\n  toWorkflowDef(): WorkflowDef {\n    return {\n      name: this._name,\n      version: this._version,\n      tasks: this._tasks,\n      timeoutSeconds: this._timeoutSeconds,\n      restartable: this._restartable,\n      inputParameters: this._inputParameters,\n      outputParameters: this._outputParameters,\n      inputTemplate: this._inputTemplate,\n      variables: this._variables,\n      failureWorkflow: this._failureWorkflow,\n      ...(this._description !== undefined && {\n        description: this._description,\n      }),\n      ...(this._timeoutPolicy !== undefined && {\n        timeoutPolicy: this._timeoutPolicy,\n      }),\n      ...(this._ownerEmail !== undefined && { ownerEmail: this._ownerEmail }),\n      ...(this._workflowStatusListenerEnabled && {\n        workflowStatusListenerEnabled: true,\n        workflowStatusListenerSink: this._workflowStatusListenerSink,\n      }),\n    };\n  }\n\n  /** Register this workflow with the Conductor server */\n  async register(overwrite = true): Promise<void> {\n    await this._executor.registerWorkflow(overwrite, this.toWorkflowDef());\n  }\n\n  /** Execute the workflow synchronously and wait for result */\n  async execute(\n    input?: Record<string, unknown>,\n    waitUntilTaskRef?: string,\n    requestId?: string,\n    idempotencyKey?: string,\n    idempotencyStrategy?: \"FAIL\" | \"RETURN_EXISTING\" | \"FAIL_ON_RUNNING\",\n    taskToDomain?: Record<string, string>\n  ): Promise<WorkflowRun> {\n    const request: StartWorkflowRequest = {\n      name: this._name,\n      version: this._version,\n      input,\n      idempotencyKey,\n      idempotencyStrategy,\n      taskToDomain,\n    };\n\n    return this._executor.executeWorkflow(\n      request,\n      this._name,\n      this._version,\n      requestId ?? crypto.randomUUID(),\n      waitUntilTaskRef\n    );\n  }\n\n  /** Start the workflow asynchronously (returns workflow ID) */\n  async startWorkflow(\n    input?: Record<string, unknown>,\n    correlationId?: string,\n    priority?: number,\n    idempotencyKey?: string,\n    idempotencyStrategy?: \"FAIL\" | \"RETURN_EXISTING\" | \"FAIL_ON_RUNNING\",\n    taskToDomain?: Record<string, string>\n  ): Promise<string> {\n    const request: StartWorkflowRequest = {\n      name: this._name,\n      version: this._version,\n      input,\n      correlationId,\n      priority,\n      idempotencyKey,\n      idempotencyStrategy,\n      taskToDomain,\n    };\n    return this._executor.startWorkflow(request);\n  }\n}\n","import os from \"os\";\nimport type { Client } from \"../../../open-api\";\nimport { MetadataResource } from \"../../../open-api/generated\";\nimport {\n  HEALTH_CHECK_INTERVAL_MS,\n  RESTART_BACKOFF_BASE_MS,\n  RESTART_BACKOFF_MAX_MS,\n} from \"../../clients/worker/constants\";\nimport type { TaskRunnerEventsListener } from \"../../clients/worker/events\";\nimport { TaskRunner } from \"../../clients/worker/TaskRunner\";\nimport type { ConductorWorker, HealthMonitorConfig } from \"../../clients/worker/types\";\nimport type { ConductorLogger } from \"../../helpers/logger\";\nimport { DefaultLogger } from \"../../helpers/logger\";\nimport {\n  getWorkerConfigOneline,\n  resolveWorkerConfig,\n} from \"../config/WorkerConfig\";\nimport { getRegisteredWorkers, type RegisteredWorker } from \"../decorators/registry\";\n\n/**\n * Configuration for TaskHandler.\n */\nexport interface TaskHandlerConfig {\n  /**\n   * Conductor client instance.\n   * Required for communicating with Conductor server.\n   */\n  client: Client;\n\n  /**\n   * Additional workers to register manually.\n   * These will be added alongside auto-discovered decorated workers.\n   * Default: []\n   */\n  workers?: ConductorWorker[];\n\n  /**\n   * Whether to scan for @worker decorated functions.\n   * When true, automatically discovers all workers registered via @worker decorator.\n   * Default: true\n   */\n  scanForDecorated?: boolean;\n\n  /**\n   * Modules to import for side-effect registration.\n   * Importing these modules will trigger @worker decorator execution.\n   * Useful when workers are defined in separate files.\n   *\n   * Example: ['./workers/orderWorkers', './workers/paymentWorkers']\n   * Default: []\n   */\n  importModules?: string[];\n\n  /**\n   * Event listeners for worker lifecycle events.\n   * Default: []\n   */\n  eventListeners?: TaskRunnerEventsListener[];\n\n  /**\n   * Logger instance for TaskHandler.\n   * Default: DefaultLogger\n   */\n  logger?: ConductorLogger;\n\n  /**\n   * Health monitoring configuration.\n   * Monitors worker polling loops and auto-restarts on failure.\n   * Default: { enabled: true }\n   */\n  healthMonitor?: HealthMonitorConfig;\n}\n\n/**\n * Internal representation of a worker with resolved configuration.\n */\ninterface ResolvedWorker {\n  worker: ConductorWorker;\n  registered?: RegisteredWorker;\n  resolvedWorkerId: string;\n}\n\n/**\n * TaskHandler orchestrates worker lifecycle and auto-discovery.\n *\n * This is the main entry point for the SDK-style worker framework,\n * matching the Python SDK's TaskHandler architecture.\n *\n * Features:\n * - Auto-discovers workers decorated with @worker\n * - Manages worker lifecycle (start/stop)\n * - Supports both decorated and manual worker registration\n * - Module import for side-effect registration\n * - Event listener support\n * - Health monitoring with auto-restart\n * - Automatic task definition registration\n * - Environment variable configuration override\n *\n * @example\n * Basic usage with auto-discovery:\n * ```typescript\n * const handler = new TaskHandler({\n *   client: conductorClient,\n *   scanForDecorated: true,\n * });\n *\n * await handler.startWorkers();\n *\n * // Later...\n * await handler.stopWorkers();\n * ```\n *\n * @example\n * With event listeners and health monitoring:\n * ```typescript\n * const handler = new TaskHandler({\n *   client: conductorClient,\n *   eventListeners: [metricsCollector],\n *   healthMonitor: {\n *     enabled: true,\n *     healthCheckIntervalMs: 5000,\n *     maxRestartAttempts: 10,\n *   },\n * });\n *\n * await handler.startWorkers();\n * handler.printSummary();\n * ```\n */\nexport class TaskHandler {\n  private client: Client;\n  private resolvedWorkers: ResolvedWorker[] = [];\n  private taskRunners: TaskRunner[] = [];\n  private config: TaskHandlerConfig;\n  private logger: ConductorLogger;\n  private isRunning = false;\n\n  // Health monitoring\n  private healthCheckTimer?: ReturnType<typeof setInterval>;\n  private restartAttempts = new Map<number, number>(); // runner index → attempt count\n  private healthMonitorConfig: HealthMonitorConfig;\n\n  /**\n   * Create a TaskHandler instance with async module imports.\n   * Use this instead of `new TaskHandler()` when using `importModules`.\n   */\n  static async create(config: TaskHandlerConfig): Promise<TaskHandler> {\n    const logger = config.logger ?? new DefaultLogger();\n\n    // Import modules for side-effect registration\n    if (config.importModules && config.importModules.length > 0) {\n      logger.info(\n        `Importing ${config.importModules.length} module(s) for worker discovery...`\n      );\n\n      for (const modulePath of config.importModules) {\n        try {\n          logger.debug(`Importing module: ${modulePath}`);\n          await import(modulePath); // Async ES module import\n          logger.debug(`Successfully imported: ${modulePath}`);\n        } catch (error) {\n          logger.error(\n            `Failed to import module ${modulePath}:`,\n            error instanceof Error ? error.message : error\n          );\n          throw new Error(\n            `Failed to import worker module \"${modulePath}\": ${error instanceof Error ? error.message : String(error)\n            }`\n          );\n        }\n      }\n    }\n\n    // Now create the handler - workers are already registered via decorators\n    return new TaskHandler(config);\n  }\n\n  constructor(config: TaskHandlerConfig) {\n    this.config = config;\n    this.client = config.client;\n    this.logger = config.logger ?? new DefaultLogger();\n    this.healthMonitorConfig = config.healthMonitor ?? { enabled: true };\n\n    // Auto-discover decorated workers\n    if (config.scanForDecorated !== false) {\n      const decoratedWorkers = getRegisteredWorkers();\n      this.logger.info(\n        `Discovered ${decoratedWorkers.length} worker(s) via @worker decorator`\n      );\n\n      for (const registered of decoratedWorkers) {\n        // Resolve configuration: env vars > decorator params > defaults\n        const resolved = resolveWorkerConfig(\n          registered.taskDefName,\n          {\n            pollInterval: registered.pollInterval,\n            domain: registered.domain,\n            workerId: registered.workerId,\n            concurrency: registered.concurrency,\n            registerTaskDef: registered.registerTaskDef,\n            pollTimeout: registered.pollTimeout,\n            paused: undefined,\n            overwriteTaskDef: registered.overwriteTaskDef,\n            strictSchema: registered.strictSchema,\n          },\n          this.logger\n        );\n\n        const conductorWorker: ConductorWorker = {\n          taskDefName: registered.taskDefName,\n          execute: registered.executeFunction,\n          concurrency: resolved.concurrency,\n          pollInterval: resolved.pollInterval,\n          domain: resolved.domain,\n        };\n\n        const resolvedWorkerId =\n          resolved.workerId ?? os.hostname();\n\n        this.resolvedWorkers.push({\n          worker: conductorWorker,\n          registered: { ...registered, ...resolved },\n          resolvedWorkerId,\n        });\n\n        // Log resolved config one-liner\n        this.logger.info(\n          getWorkerConfigOneline(registered.taskDefName, resolved)\n        );\n      }\n    }\n\n    // Add manually provided workers (no config resolution — already configured)\n    if (config.workers && config.workers.length > 0) {\n      this.logger.info(\n        `Adding ${config.workers.length} manually registered worker(s)`\n      );\n      for (const w of config.workers) {\n        this.resolvedWorkers.push({\n          worker: w,\n          resolvedWorkerId: os.hostname(),\n        });\n      }\n    }\n\n    if (this.resolvedWorkers.length === 0) {\n      this.logger.info(\n        \"No workers registered. Did you forget to use @worker decorator or provide workers manually?\"\n      );\n    } else {\n      this.logger.info(\n        `TaskHandler initialized with ${this.resolvedWorkers.length} worker(s)`\n      );\n    }\n  }\n\n  /**\n   * Start all registered workers.\n   *\n   * Registers task definitions (if configured), creates a TaskRunner for each\n   * worker, and begins polling for tasks.\n   * This method is idempotent - calling it multiple times has no effect.\n   */\n  async startWorkers(): Promise<void> {\n    if (this.isRunning) {\n      this.logger.info(\n        \"Workers are already running. Ignoring startWorkers() call.\"\n      );\n      return;\n    }\n\n    if (this.resolvedWorkers.length === 0) {\n      this.logger.info(\"No workers to start.\");\n      return;\n    }\n\n    // Register task definitions before starting polling\n    await this.registerTaskDefinitions();\n\n    this.logger.info(`Starting ${this.resolvedWorkers.length} worker(s)...`);\n\n    for (const { worker, resolvedWorkerId, registered } of\n      this.resolvedWorkers) {\n      try {\n        // Skip paused workers\n        const isPaused = registered?.paused ?? false;\n\n        const runner = new TaskRunner({\n          worker,\n          client: this.client,\n          options: {\n            workerID: resolvedWorkerId,\n            domain: worker.domain,\n            pollInterval: worker.pollInterval,\n            concurrency: worker.concurrency,\n            batchPollingTimeout: registered?.pollTimeout,\n          },\n          logger: this.logger,\n          eventListeners: this.config.eventListeners,\n        });\n\n        if (isPaused) {\n          runner.setPaused(true);\n        }\n\n        runner.startPolling();\n        this.taskRunners.push(runner);\n\n        this.logger.info(\n          `Started worker: ${worker.taskDefName}${worker.domain ? ` (domain: ${worker.domain})` : \"\"\n          }${isPaused ? \" [PAUSED]\" : \"\"}`\n        );\n      } catch (error) {\n        this.logger.error(\n          `Failed to start worker ${worker.taskDefName}:`,\n          error instanceof Error ? error.message : error\n        );\n        throw error;\n      }\n    }\n\n    this.isRunning = true;\n    this.startHealthMonitor();\n    this.logger.info(\"All workers started successfully\");\n  }\n\n  /**\n   * Stop all running workers gracefully.\n   *\n   * Stops polling and waits for in-flight tasks to complete.\n   * This method is idempotent - calling it multiple times has no effect.\n   */\n  async stopWorkers(): Promise<void> {\n    if (!this.isRunning) {\n      this.logger.info(\n        \"Workers are not running. Ignoring stopWorkers() call.\"\n      );\n      return;\n    }\n\n    this.stopHealthMonitor();\n    this.logger.info(`Stopping ${this.taskRunners.length} worker(s)...`);\n\n    const stopPromises = this.taskRunners.map(async (runner, index) => {\n      try {\n        await runner.stopPolling();\n        this.logger.debug(\n          `Stopped worker ${index + 1}/${this.taskRunners.length}`\n        );\n      } catch (error) {\n        this.logger.error(\n          `Error stopping worker ${index + 1}:`,\n          error instanceof Error ? error.message : error\n        );\n      }\n    });\n\n    await Promise.all(stopPromises);\n\n    this.taskRunners = [];\n    this.restartAttempts.clear();\n    this.isRunning = false;\n    this.logger.info(\"All workers stopped\");\n  }\n\n  // ── Task Definition Registration ────────────────────────────────\n\n  /**\n   * Register task definitions for workers that have registerTaskDef=true.\n   * Called automatically by startWorkers() before polling begins.\n   *\n   * Matches Python SDK behavior:\n   * - If overwriteTaskDef=true: PUT /api/metadata/taskdefs (create or update)\n   * - If overwriteTaskDef=false: GET first, then POST only if not found\n   * - Uses taskDef template if provided, otherwise creates minimal definition\n   */\n  private async registerTaskDefinitions(): Promise<void> {\n    for (const { worker, registered } of this.resolvedWorkers) {\n      if (!registered?.registerTaskDef) continue;\n\n      try {\n        // Build task definition from template or create minimal one\n        const baseTaskDef = registered.taskDef\n          ? {\n            ...registered.taskDef,\n            name: worker.taskDefName\n          }\n          : {\n            name: worker.taskDefName,\n            timeoutSeconds: 3600,\n            totalTimeoutSeconds: 0,\n          };\n\n        // Ensure required fields are present for API call\n        const taskDef = {\n          ...baseTaskDef,\n          timeoutSeconds: baseTaskDef.timeoutSeconds ?? 3600,\n          totalTimeoutSeconds: baseTaskDef.totalTimeoutSeconds ?? 0,\n        };\n\n        const overwrite = registered.overwriteTaskDef !== false; // default true\n\n        if (overwrite) {\n          // PUT — creates or updates\n          await MetadataResource.updateTaskDef({\n            client: this.client,\n            body: taskDef,\n          });\n          this.logger.info(\n            `Registered task definition: ${worker.taskDefName} (overwrite=true)`\n          );\n        } else {\n          // Check if exists first, create only if missing\n          try {\n            await MetadataResource.getTaskDef({\n              client: this.client,\n              path: { tasktype: worker.taskDefName },\n            });\n            this.logger.debug(\n              `Task definition already exists: ${worker.taskDefName} (overwrite=false, skipping)`\n            );\n          } catch {\n            // Not found — create it\n            await MetadataResource.registerTaskDef({\n              client: this.client,\n              body: [taskDef],\n            });\n            this.logger.info(\n              `Registered task definition: ${worker.taskDefName} (created new)`\n            );\n          }\n        }\n      } catch (error) {\n        // Non-fatal: log warning but continue — worker can still poll\n        this.logger.error(\n          `Failed to register task definition for ${worker.taskDefName}: ${error instanceof Error ? error.message : String(error)\n          }`\n        );\n      }\n    }\n  }\n\n  // ── Health Monitoring ───────────────────────────────────────────\n\n  private startHealthMonitor(): void {\n    if (this.healthMonitorConfig.enabled === false) return;\n\n    const interval =\n      this.healthMonitorConfig.healthCheckIntervalMs ??\n      HEALTH_CHECK_INTERVAL_MS;\n\n    this.healthCheckTimer = setInterval(() => {\n      this.checkWorkerHealth();\n    }, interval);\n\n    // Don't prevent process exit\n    if (\n      this.healthCheckTimer &&\n      typeof this.healthCheckTimer === \"object\" &&\n      \"unref\" in this.healthCheckTimer\n    ) {\n      this.healthCheckTimer.unref();\n    }\n\n    this.logger.debug(`Health monitor started (interval: ${interval}ms)`);\n  }\n\n  private stopHealthMonitor(): void {\n    if (this.healthCheckTimer) {\n      clearInterval(this.healthCheckTimer);\n      this.healthCheckTimer = undefined;\n      this.logger.debug(\"Health monitor stopped\");\n    }\n  }\n\n  private checkWorkerHealth(): void {\n    for (let i = 0; i < this.taskRunners.length; i++) {\n      const runner = this.taskRunners[i];\n      const resolved = this.resolvedWorkers[i];\n      if (!runner || !resolved) continue;\n      const { worker } = resolved;\n\n      if (!runner.isPolling && this.isRunning) {\n        const attempts = this.restartAttempts.get(i) ?? 0;\n        const maxAttempts =\n          this.healthMonitorConfig.maxRestartAttempts ?? 0;\n\n        // 0 = unlimited\n        if (maxAttempts > 0 && attempts >= maxAttempts) {\n          this.logger.error(\n            `Worker ${worker.taskDefName} has stopped and exceeded max restart attempts (${maxAttempts}). Not restarting.`\n          );\n          continue;\n        }\n\n        // Exponential backoff for restarts\n        const backoffMs = Math.min(\n          RESTART_BACKOFF_BASE_MS * Math.pow(2, attempts),\n          RESTART_BACKOFF_MAX_MS\n        );\n\n        this.logger.info(\n          `Worker ${worker.taskDefName} has stopped unexpectedly. Restarting in ${backoffMs}ms (attempt ${attempts + 1})`\n        );\n\n        this.restartAttempts.set(i, attempts + 1);\n\n        setTimeout(() => {\n          try {\n            if (this.isRunning && !runner.isPolling) {\n              runner.startPolling();\n              this.logger.info(\n                `Worker ${worker.taskDefName} restarted successfully`\n              );\n              // Reset counter on success\n              this.restartAttempts.set(i, 0);\n            }\n          } catch (error) {\n            this.logger.error(\n              `Failed to restart worker ${worker.taskDefName}:`,\n              error instanceof Error ? error.message : error\n            );\n          }\n        }, backoffMs);\n      }\n    }\n  }\n\n  // ── Discovery Summary ───────────────────────────────────────────\n\n  /**\n   * Print a summary of all registered workers and their configurations.\n   * Matches Python SDK's print_summary() function.\n   */\n  printSummary(): void {\n    if (this.resolvedWorkers.length === 0) {\n      this.logger.info(\"No workers registered.\");\n      return;\n    }\n\n    const lines: string[] = [\n      \"\",\n      \"=== Worker Discovery Summary ===\",\n      `Total workers: ${this.resolvedWorkers.length}`,\n      `Running: ${this.isRunning}`,\n      \"\",\n    ];\n\n    for (let i = 0; i < this.resolvedWorkers.length; i++) {\n      const entry = this.resolvedWorkers[i];\n      if (!entry) continue;\n      const { worker, registered, resolvedWorkerId } = entry;\n      const runner = this.taskRunners[i];\n      const status = runner?.isPolling\n        ? \"POLLING\"\n        : this.isRunning\n          ? \"STOPPED\"\n          : \"NOT_STARTED\";\n\n      lines.push(`  Worker: ${worker.taskDefName}`);\n      lines.push(`    Status:       ${status}`);\n      lines.push(`    WorkerId:     ${resolvedWorkerId}`);\n      if (worker.domain) {\n        lines.push(`    Domain:       ${worker.domain}`);\n      }\n      lines.push(\n        `    Concurrency:  ${worker.concurrency ?? \"default (1)\"}`\n      );\n      lines.push(\n        `    PollInterval: ${worker.pollInterval ?? \"default (100ms)\"}${worker.pollInterval ? \"ms\" : \"\"}`\n      );\n      if (registered?.registerTaskDef) {\n        lines.push(`    RegisterDef:  true`);\n      }\n      if (registered?.paused) {\n        lines.push(`    Paused:       true`);\n      }\n      lines.push(\"\");\n    }\n\n    lines.push(\"================================\");\n    this.logger.info(lines.join(\"\\n\"));\n  }\n\n  // ── Health Inspection ─────────────────────────────────────────\n\n  /**\n   * Check if all workers are healthy (all polling).\n   * Returns false if any worker has stopped unexpectedly.\n   */\n  isHealthy(): boolean {\n    if (!this.isRunning) return false;\n    return this.taskRunners.every((runner) => runner.isPolling);\n  }\n\n  /**\n   * Get detailed status of each worker.\n   * Matches Python SDK's get_worker_process_status().\n   */\n  getWorkerStatus(): {\n    taskDefName: string;\n    domain?: string;\n    polling: boolean;\n    paused: boolean;\n    workerId: string;\n    restartCount: number;\n  }[] {\n    return this.resolvedWorkers.map(\n      ({ worker, resolvedWorkerId }, i) => {\n        const runner = this.taskRunners[i];\n        return {\n          taskDefName: worker.taskDefName,\n          domain: worker.domain,\n          polling: runner?.isPolling ?? false,\n          paused: runner?.isPaused ?? false,\n          workerId: resolvedWorkerId,\n          restartCount: this.restartAttempts.get(i) ?? 0,\n        };\n      }\n    );\n  }\n\n  // ── Properties ──────────────────────────────────────────────────\n\n  /** Get the number of registered workers. */\n  get workerCount(): number {\n    return this.resolvedWorkers.length;\n  }\n\n  /** Get the number of running workers. */\n  get runningWorkerCount(): number {\n    return this.taskRunners.length;\n  }\n\n  /** Check if workers are currently running. */\n  get running(): boolean {\n    return this.isRunning;\n  }\n\n  /**\n   * Context manager support (for TypeScript 5.2+ using keyword).\n   * Automatically stops workers when disposed.\n   */\n  async [Symbol.asyncDispose](): Promise<void> {\n    await this.stopWorkers();\n  }\n}\n","import type { ConductorLogger } from \"../../helpers/logger\";\n\n/**\n * Worker configuration properties that can be overridden via environment variables.\n */\nexport interface WorkerConfig {\n  /** Polling interval in milliseconds */\n  pollInterval?: number;\n  \n  /** Task domain for multi-tenancy */\n  domain?: string;\n  \n  /** Unique worker identifier */\n  workerId?: string;\n  \n  /** Maximum concurrent tasks */\n  concurrency?: number;\n  \n  /** Auto-register task definition on startup */\n  registerTaskDef?: boolean;\n  \n  /** Server-side long poll timeout in milliseconds */\n  pollTimeout?: number;\n  \n  /** Whether worker is paused */\n  paused?: boolean;\n  \n  /** Overwrite existing task definitions */\n  overwriteTaskDef?: boolean;\n  \n  /** Enforce strict JSON schema validation */\n  strictSchema?: boolean;\n}\n\n/**\n * Configurable property names and their types.\n */\nconst CONFIGURABLE_PROPERTIES: (keyof WorkerConfig)[] = [\n  \"pollInterval\",\n  \"domain\",\n  \"workerId\",\n  \"concurrency\",\n  \"registerTaskDef\",\n  \"pollTimeout\",\n  \"paused\",\n  \"overwriteTaskDef\",\n  \"strictSchema\",\n];\n\n/**\n * Type mapping for configuration properties.\n */\nconst PROPERTY_TYPES: Record<keyof WorkerConfig, \"number\" | \"string\" | \"boolean\"> = {\n  pollInterval: \"number\",\n  domain: \"string\",\n  workerId: \"string\",\n  concurrency: \"number\",\n  registerTaskDef: \"boolean\",\n  pollTimeout: \"number\",\n  paused: \"boolean\",\n  overwriteTaskDef: \"boolean\",\n  strictSchema: \"boolean\",\n};\n\n/**\n * Default values for configuration properties.\n */\nconst DEFAULT_VALUES: Partial<WorkerConfig> = {\n  pollInterval: 100,\n  concurrency: 1,\n  registerTaskDef: false,\n  pollTimeout: 100,\n  paused: false,\n  overwriteTaskDef: true,\n  strictSchema: false,\n};\n\n/**\n * Parse environment variable value to the expected type.\n */\nfunction parseEnvValue(\n  value: string,\n  expectedType: \"number\" | \"string\" | \"boolean\",\n  logger?: ConductorLogger\n): number | string | boolean | undefined {\n  if (value === undefined || value === null) {\n    return undefined;\n  }\n\n  // Handle boolean values\n  if (expectedType === \"boolean\") {\n    const lower = value.toLowerCase();\n    return lower === \"true\" || lower === \"1\" || lower === \"yes\" || lower === \"on\";\n  }\n\n  // Handle number values\n  if (expectedType === \"number\") {\n    const parsed = Number(value);\n    if (isNaN(parsed)) {\n      logger?.info(`Cannot convert '${value}' to number, ignoring invalid value`);\n      return undefined;\n    }\n    return parsed;\n  }\n\n  // String values\n  return value;\n}\n\n/**\n * Convert camelCase property name to snake_case for environment variables.\n * \n * Examples:\n * - pollInterval → poll_interval\n * - workerId → worker_id\n * - registerTaskDef → register_task_def\n */\nfunction toSnakeCase(camelCase: string): string {\n  return camelCase.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);\n}\n\n/**\n * Get configuration value from environment variables with hierarchical lookup.\n * \n * Priority order (highest to lowest):\n * 1. CONDUCTOR_WORKER_<WORKER_NAME>_<PROPERTY> - Worker-specific (uppercase)\n * 2. conductor.worker.<worker_name>.<property> - Worker-specific (dotted)\n * 3. CONDUCTOR_WORKER_ALL_<PROPERTY> - Global (uppercase)\n * 4. conductor.worker.all.<property> - Global (dotted)\n * \n * @param workerName - Task definition name\n * @param propertyName - Property name in camelCase (e.g., \"pollInterval\")\n * @param expectedType - Expected type for parsing\n * @param logger - Optional logger for debug messages\n */\nfunction getEnvValue(\n  workerName: string,\n  propertyName: keyof WorkerConfig,\n  expectedType: \"number\" | \"string\" | \"boolean\",\n  logger?: ConductorLogger\n): number | string | boolean | undefined {\n  const snakeCase = toSnakeCase(propertyName);\n\n  // 1. Worker-specific (uppercase): CONDUCTOR_WORKER_<WORKER_NAME>_<PROPERTY>\n  const workerSpecificUpper = `CONDUCTOR_WORKER_${workerName.toUpperCase()}_${snakeCase.toUpperCase()}`;\n  let value = process.env[workerSpecificUpper];\n  if (value !== undefined) {\n    logger?.debug(`Using worker-specific config: ${workerSpecificUpper}=${value}`);\n    return parseEnvValue(value, expectedType, logger);\n  }\n\n  // 2. Worker-specific (dotted): conductor.worker.<worker_name>.<property>\n  const workerSpecificDotted = `conductor.worker.${workerName}.${snakeCase}`;\n  value = process.env[workerSpecificDotted];\n  if (value !== undefined) {\n    logger?.debug(`Using worker-specific config: ${workerSpecificDotted}=${value}`);\n    return parseEnvValue(value, expectedType, logger);\n  }\n\n  // 3. Global (uppercase): CONDUCTOR_WORKER_ALL_<PROPERTY>\n  const globalUpper = `CONDUCTOR_WORKER_ALL_${snakeCase.toUpperCase()}`;\n  value = process.env[globalUpper];\n  if (value !== undefined) {\n    logger?.debug(`Using global worker config: ${globalUpper}=${value}`);\n    return parseEnvValue(value, expectedType, logger);\n  }\n\n  // 4. Global (dotted): conductor.worker.all.<property>\n  const globalDotted = `conductor.worker.all.${snakeCase}`;\n  value = process.env[globalDotted];\n  if (value !== undefined) {\n    logger?.debug(`Using global worker config: ${globalDotted}=${value}`);\n    return parseEnvValue(value, expectedType, logger);\n  }\n\n  return undefined;\n}\n\n/**\n * Resolve worker configuration with hierarchical override.\n * \n * Configuration hierarchy (highest to lowest priority):\n * 1. Worker-specific environment variables\n * 2. Global worker environment variables\n * 3. Code-level defaults (decorator/function parameters)\n * 4. System defaults\n * \n * @param workerName - Task definition name\n * @param codeDefaults - Configuration from code (decorator parameters)\n * @param logger - Optional logger for debug messages\n * \n * @example\n * ```typescript\n * // Code has: pollInterval: 1000\n * // Env has: CONDUCTOR_WORKER_ALL_POLL_INTERVAL=500\n * // Result: pollInterval=500\n * \n * const config = resolveWorkerConfig(\"process_order\", {\n *   pollInterval: 1000,\n *   domain: \"dev\",\n * });\n * // config = { pollInterval: 500, domain: \"dev\", ... }\n * ```\n */\nexport function resolveWorkerConfig(\n  workerName: string,\n  codeDefaults: Partial<WorkerConfig> = {},\n  _logger?: ConductorLogger\n): WorkerConfig {\n  const resolved: Record<string, unknown> = {};\n\n  for (const property of CONFIGURABLE_PROPERTIES) {\n    const expectedType = PROPERTY_TYPES[property];\n\n    // 1. Check environment variables (worker-specific > global)\n    const envValue = getEnvValue(workerName, property, expectedType, _logger);\n    if (envValue !== undefined) {\n      resolved[property] = envValue;\n      continue;\n    }\n\n    // 2. Use code default if provided\n    if (codeDefaults[property] !== undefined) {\n      resolved[property] = codeDefaults[property];\n      continue;\n    }\n\n    // 3. Use system default\n    if (DEFAULT_VALUES[property] !== undefined) {\n      resolved[property] = DEFAULT_VALUES[property];\n    }\n  }\n\n  return resolved as WorkerConfig;\n}\n\n/**\n * Generate a human-readable summary of worker configuration resolution.\n * \n * @param workerName - Task definition name\n * @param resolvedConfig - Resolved configuration\n * @param logger - Optional logger\n * \n * @example\n * ```typescript\n * const summary = getWorkerConfigSummary(\"process_order\", config);\n * console.log(summary);\n * // Worker 'process_order' configuration:\n * //   pollInterval: 500 (from CONDUCTOR_WORKER_ALL_POLL_INTERVAL)\n * //   domain: production (from CONDUCTOR_WORKER_PROCESS_ORDER_DOMAIN)\n * //   concurrency: 5 (from code)\n * ```\n */\nexport function getWorkerConfigSummary(\n  workerName: string,\n  resolvedConfig: WorkerConfig\n): string {\n  const lines: string[] = [`Worker '${workerName}' configuration:`];\n\n  for (const [key, value] of Object.entries(resolvedConfig)) {\n    if (value === undefined || value === null) {\n      continue;\n    }\n\n    const property = key as keyof WorkerConfig;\n    const snakeCase = toSnakeCase(property);\n\n    // Determine source of configuration\n    let source = \"from code\";\n\n    // Check worker-specific env vars\n    const workerSpecificUpper = `CONDUCTOR_WORKER_${workerName.toUpperCase()}_${snakeCase.toUpperCase()}`;\n    const workerSpecificDotted = `conductor.worker.${workerName}.${snakeCase}`;\n\n    if (process.env[workerSpecificUpper] !== undefined) {\n      source = `from ${workerSpecificUpper}`;\n    } else if (process.env[workerSpecificDotted] !== undefined) {\n      source = `from ${workerSpecificDotted}`;\n    } else {\n      // Check global env vars\n      const globalUpper = `CONDUCTOR_WORKER_ALL_${snakeCase.toUpperCase()}`;\n      const globalDotted = `conductor.worker.all.${snakeCase}`;\n\n      if (process.env[globalUpper] !== undefined) {\n        source = `from ${globalUpper}`;\n      } else if (process.env[globalDotted] !== undefined) {\n        source = `from ${globalDotted}`;\n      }\n    }\n\n    lines.push(`  ${property}: ${value} (${source})`);\n  }\n\n  return lines.join(\"\\n\");\n}\n\n/**\n * Generate a compact single-line summary of worker configuration.\n * \n * @param workerName - Task definition name\n * @param resolvedConfig - Resolved configuration\n * \n * @example\n * ```typescript\n * const summary = getWorkerConfigOneline(\"process_order\", config);\n * console.log(summary);\n * // Conductor Worker[name=process_order, pid=12345, status=active, poll_interval=500ms, domain=production, concurrency=5]\n * ```\n */\nexport function getWorkerConfigOneline(\n  workerName: string,\n  resolvedConfig: WorkerConfig\n): string {\n  const parts: string[] = [`name=${workerName}`];\n\n  // Add process ID\n  parts.push(`pid=${process.pid}`);\n\n  // Add status (paused or active)\n  const isPaused = resolvedConfig.paused ?? false;\n  parts.push(`status=${isPaused ? \"paused\" : \"active\"}`);\n\n  // Add other properties in a logical order\n  if (resolvedConfig.pollInterval !== undefined) {\n    parts.push(`poll_interval=${resolvedConfig.pollInterval}ms`);\n  }\n\n  if (resolvedConfig.domain !== undefined) {\n    parts.push(`domain=${resolvedConfig.domain}`);\n  }\n\n  if (resolvedConfig.concurrency !== undefined) {\n    parts.push(`concurrency=${resolvedConfig.concurrency}`);\n  }\n\n  if (resolvedConfig.pollTimeout !== undefined) {\n    parts.push(`poll_timeout=${resolvedConfig.pollTimeout}ms`);\n  }\n\n  if (resolvedConfig.registerTaskDef !== undefined) {\n    parts.push(`register_task_def=${resolvedConfig.registerTaskDef}`);\n  }\n\n  return `Conductor Worker[${parts.join(\", \")}]`;\n}\n","import type { Task, TaskResult } from \"../../../open-api\";\nimport type { TaskDef } from \"../../../open-api/generated\";\n\n/**\n * Registered worker metadata stored in the global registry.\n */\nexport interface RegisteredWorker {\n  /** Task definition name (must match workflow task name) */\n  taskDefName: string;\n  \n  /** Worker execution function */\n  executeFunction: (task: Task) => Promise<Omit<TaskResult, \"workflowInstanceId\" | \"taskId\">>;\n  \n  /** Maximum concurrent tasks (default: 1) */\n  concurrency?: number;\n  \n  /** Polling interval in milliseconds (default: 100) */\n  pollInterval?: number;\n  \n  /** Task domain for multi-tenancy (default: undefined) */\n  domain?: string;\n  \n  /** Unique worker identifier (default: auto-generated) */\n  workerId?: string;\n  \n  /** Auto-register task definition on startup (default: false) */\n  registerTaskDef?: boolean;\n  \n  /** Server-side long poll timeout in milliseconds (default: 100) */\n  pollTimeout?: number;\n  \n  /** Task definition template for registration (optional) */\n  taskDef?: TaskDef;\n  \n  /** Overwrite existing task definitions (default: true) */\n  overwriteTaskDef?: boolean;\n  \n  /** Enforce strict JSON schema validation (default: false) */\n  strictSchema?: boolean;\n\n  /** JSON Schema for task input validation (registered alongside task def) */\n  inputSchema?: Record<string, unknown>;\n\n  /** JSON Schema for task output validation (registered alongside task def) */\n  outputSchema?: Record<string, unknown>;\n\n  /** Whether this worker should start in paused state (default: false) */\n  paused?: boolean;\n}\n\n/**\n * Global worker registry for auto-discovery.\n * Workers registered via @worker decorator are stored here.\n */\nclass WorkerRegistry {\n  private workers = new Map<string, RegisteredWorker>();\n\n  /**\n   * Register a worker in the global registry.\n   * \n   * @param worker - Worker metadata to register\n   */\n  register(worker: RegisteredWorker): void {\n    // Use taskDefName + domain as unique key\n    const key = `${worker.taskDefName}:${worker.domain || \"\"}`;\n    \n    if (this.workers.has(key)) {\n      console.warn(\n        `Worker \"${worker.taskDefName}\" with domain \"${worker.domain || \"default\"}\" ` +\n        `is already registered. Overwriting previous registration.`\n      );\n    }\n    \n    this.workers.set(key, worker);\n  }\n\n  /**\n   * Get all registered workers.\n   * \n   * @returns Array of registered workers\n   */\n  getAll(): RegisteredWorker[] {\n    return Array.from(this.workers.values());\n  }\n\n  /**\n   * Get a specific worker by task definition name and domain.\n   * \n   * @param taskDefName - Task definition name\n   * @param domain - Optional domain\n   * @returns Registered worker or undefined\n   */\n  get(taskDefName: string, domain?: string): RegisteredWorker | undefined {\n    const key = `${taskDefName}:${domain || \"\"}`;\n    return this.workers.get(key);\n  }\n\n  /**\n   * Clear all registered workers.\n   * Useful for testing.\n   */\n  clear(): void {\n    this.workers.clear();\n  }\n\n  /**\n   * Get count of registered workers.\n   */\n  get size(): number {\n    return this.workers.size;\n  }\n}\n\n/**\n * Global singleton registry instance.\n */\nexport const workerRegistry = new WorkerRegistry();\n\n/**\n * Register a worker in the global registry.\n * Used internally by the @worker decorator.\n * \n * @param worker - Worker metadata to register\n */\nexport function registerWorker(worker: RegisteredWorker): void {\n  workerRegistry.register(worker);\n}\n\n/**\n * Get all registered workers from the global registry.\n * Used by TaskHandler for auto-discovery.\n * \n * @returns Array of all registered workers\n */\nexport function getRegisteredWorkers(): RegisteredWorker[] {\n  return workerRegistry.getAll();\n}\n\n/**\n * Get a specific registered worker.\n * \n * @param taskDefName - Task definition name\n * @param domain - Optional domain\n * @returns Registered worker or undefined\n */\nexport function getRegisteredWorker(\n  taskDefName: string,\n  domain?: string\n): RegisteredWorker | undefined {\n  return workerRegistry.get(taskDefName, domain);\n}\n\n/**\n * Clear all registered workers.\n * Primarily for testing purposes.\n */\nexport function clearWorkerRegistry(): void {\n  workerRegistry.clear();\n}\n\n/**\n * Get the number of registered workers.\n */\nexport function getWorkerCount(): number {\n  return workerRegistry.size;\n}\n","import type { JsonSchemaOutput, JsonSchemaType } from \"./generateJsonSchema.js\";\n\n// Augment Reflect with metadata methods from reflect-metadata\n// (available at runtime when reflect-metadata is imported by the consumer)\ndeclare global {\n  // eslint-disable-next-line @typescript-eslint/no-namespace\n  namespace Reflect {\n    function getMetadata(key: unknown, target: object, propertyKey?: string): unknown;\n    function getOwnMetadata(key: unknown, target: object): unknown;\n    function defineMetadata(key: unknown, value: unknown, target: object): void;\n  }\n}\n\nconst SCHEMA_METADATA_KEY = Symbol(\"conductor:schemaField\");\n\n/**\n * Options for the @schemaField property decorator.\n */\nexport interface SchemaFieldOptions {\n  /** JSON Schema type. If omitted, inferred from TypeScript type metadata. */\n  type?: JsonSchemaType;\n  /** Whether this field is required (default: false) */\n  required?: boolean;\n  /** Field description */\n  description?: string;\n  /** For arrays: element type or schema */\n  items?: { type: JsonSchemaType } | SchemaFieldOptions;\n  /** For objects: nested property definitions */\n  properties?: Record<string, SchemaFieldOptions>;\n  /** Default value */\n  default?: unknown;\n  /** Enum values */\n  enum?: unknown[];\n}\n\ninterface StoredFieldMeta extends SchemaFieldOptions {\n  propertyKey: string;\n  designType?: unknown;\n}\n\n/**\n * Type guard for Stage 3 (TypeScript 5.0+) decorator context.\n * New decorators pass (value, context) where context has a `kind` property.\n */\nfunction isNewDecoratorContext(\n  arg: unknown\n): arg is { kind: string; name: string | symbol } {\n  return (\n    typeof arg === \"object\" &&\n    arg !== null &&\n    \"kind\" in arg &&\n    typeof (arg as { kind: string }).kind === \"string\"\n  );\n}\n\n/**\n * Track (class, propertyKey) pairs already stored to avoid duplicates when\n * the initializer runs on each instance (Stage 3 decorator API).\n */\nconst schemaFieldProcessed = new WeakMap<object, Set<string>>();\n\nfunction storeSchemaFieldMetadata(\n  cls: object,\n  propertyKey: string,\n  options: SchemaFieldOptions,\n  designType?: unknown\n): void {\n  const existing: StoredFieldMeta[] =\n    (Reflect.getOwnMetadata(SCHEMA_METADATA_KEY, cls) as StoredFieldMeta[] | undefined) ?? [];\n\n  existing.push({\n    ...options,\n    propertyKey,\n    designType,\n  });\n\n  Reflect.defineMetadata(SCHEMA_METADATA_KEY, existing, cls);\n}\n\n/**\n * Property decorator to define JSON Schema metadata on a class.\n *\n * When used with `generateSchemaFromClass()`, produces a JSON Schema draft-07\n * object from the decorated properties.\n *\n * Supports both TypeScript 5.0+ (Stage 3) and legacy (experimentalDecorators)\n * decorator APIs.\n *\n * If `emitDecoratorMetadata` is enabled in tsconfig.json (legacy mode), the\n * TypeScript type is automatically inferred for `string`, `number`, `boolean` —\n * no need to specify `type` explicitly for those.\n *\n * @example\n * ```typescript\n * class OrderInput {\n *   @schemaField({ required: true })\n *   orderId!: string;\n *\n *   @schemaField()\n *   amount!: number;\n *\n *   @schemaField({ type: \"array\", items: { type: \"string\" } })\n *   items!: string[];\n * }\n *\n * const schema = generateSchemaFromClass(OrderInput);\n * ```\n */\nexport function schemaField(options: SchemaFieldOptions = {}) {\n  return function (\n    targetOrValue: object | undefined,\n    propertyKeyOrContext?: string | { kind: string; name: string | symbol }\n  ): ((initialValue: unknown) => unknown) | undefined {\n    if (isNewDecoratorContext(propertyKeyOrContext)) {\n      // Stage 3 (TypeScript 5.0+) API: (value, context)\n      // Return initializer that runs when instance is created; `this` = instance\n      const propertyKey = String(propertyKeyOrContext.name);\n      return function (this: unknown, initialValue: unknown) {\n        const cls = (this as object).constructor as object;\n        const processed = schemaFieldProcessed.get(cls) ?? new Set<string>();\n        if (!processed.has(propertyKey)) {\n          processed.add(propertyKey);\n          schemaFieldProcessed.set(cls, processed);\n          let designType: unknown;\n          try {\n            designType = Reflect.getMetadata(\n              \"design:type\",\n              this as object,\n              propertyKey\n            );\n          } catch {\n            // reflect-metadata may not emit design:type for Stage 3 decorators\n          }\n          storeSchemaFieldMetadata(cls, propertyKey, options, designType);\n        }\n        return initialValue;\n      };\n    }\n\n    // Legacy (experimentalDecorators) API: (target, propertyKey)\n    const target = targetOrValue as object;\n    const propertyKey = propertyKeyOrContext as string;\n    let designType: unknown;\n    try {\n      designType = Reflect.getMetadata(\"design:type\", target, propertyKey);\n    } catch {\n      // reflect-metadata not available — user must provide type explicitly\n    }\n    storeSchemaFieldMetadata(target.constructor as object, propertyKey, options, designType);\n  };\n}\n\n/**\n * Map TypeScript design:type to JSON Schema type.\n */\nfunction inferType(designType: unknown): JsonSchemaType | undefined {\n  if (designType === String) return \"string\";\n  if (designType === Number) return \"number\";\n  if (designType === Boolean) return \"boolean\";\n  if (designType === Array) return \"array\";\n  if (designType === Object) return \"object\";\n  return undefined;\n}\n\nfunction fieldMetaToProperty(meta: StoredFieldMeta): Record<string, unknown> {\n  const resolvedType =\n    meta.type ?? inferType(meta.designType) ?? \"string\";\n  const prop: Record<string, unknown> = { type: resolvedType };\n\n  if (meta.description !== undefined) prop.description = meta.description;\n  if (meta.default !== undefined) prop.default = meta.default;\n  if (meta.enum !== undefined) prop.enum = meta.enum;\n\n  if (resolvedType === \"array\" && meta.items) {\n    prop.items = { type: (meta.items as { type: string }).type ?? \"string\" };\n  }\n\n  if (resolvedType === \"object\" && meta.properties) {\n    const nested = buildFromFieldOptions(meta.properties);\n    prop.properties = nested.properties;\n    if (nested.required.length > 0) prop.required = nested.required;\n  }\n\n  return prop;\n}\n\nfunction buildFromFieldOptions(\n  fields: Record<string, SchemaFieldOptions>\n): { properties: Record<string, unknown>; required: string[] } {\n  const properties: Record<string, unknown> = {};\n  const required: string[] = [];\n  for (const [name, opts] of Object.entries(fields)) {\n    properties[name] = fieldMetaToProperty({\n      ...opts,\n      propertyKey: name,\n    });\n    if (opts.required) required.push(name);\n  }\n  return { properties, required };\n}\n\n/**\n * Generate a JSON Schema (draft-07) from a class decorated with `@schemaField()`.\n *\n * Uses `reflect-metadata` to read TypeScript type information when available,\n * falling back to explicit `type` in `@schemaField()` options.\n *\n * @param cls - A class constructor with `@schemaField()` decorated properties\n * @returns JSON Schema draft-07 object\n *\n * @example\n * ```typescript\n * class OrderInput {\n *   @schemaField({ required: true })\n *   orderId!: string;\n *\n *   @schemaField()\n *   amount!: number;\n * }\n *\n * const schema = generateSchemaFromClass(OrderInput);\n * // → { \"$schema\": \"...\", type: \"object\", properties: { orderId: { type: \"string\" }, ... }, required: [\"orderId\"] }\n * ```\n */\nexport function generateSchemaFromClass(\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  cls: new (...args: any[]) => unknown\n): JsonSchemaOutput {\n  const fields: StoredFieldMeta[] =\n    (Reflect.getOwnMetadata(SCHEMA_METADATA_KEY, cls) as StoredFieldMeta[] | undefined) ?? [];\n\n  const properties: Record<string, unknown> = {};\n  const required: string[] = [];\n\n  for (const field of fields) {\n    properties[field.propertyKey] = fieldMetaToProperty(field);\n    if (field.required) {\n      required.push(field.propertyKey);\n    }\n  }\n\n  const schema: JsonSchemaOutput = {\n    $schema: \"http://json-schema.org/draft-07/schema#\",\n    type: \"object\",\n    properties,\n  };\n\n  if (required.length > 0) {\n    schema.required = required;\n  }\n\n  return schema;\n}\n","import type { Task, TaskResult } from \"../../../open-api\";\nimport type { TaskDef } from \"../../../open-api/generated\";\nimport { registerWorker, type RegisteredWorker } from \"./registry\";\nimport { simpleTask } from \"../../builders/tasks/simple\";\nimport { generateSchemaFromClass } from \"../schema/decorators\";\n\n/**\n * Options for the @worker decorator.\n */\nexport interface WorkerOptions {\n  /** \n   * Task definition name (must match workflow task name).\n   * This is the only required parameter.\n   */\n  taskDefName: string;\n\n  /**\n   * Maximum concurrent tasks this worker can execute.\n   * - Default: 1\n   * - Controls concurrency level for task execution\n   * - Choose based on workload:\n   *   * CPU-bound: 1-4\n   *   * I/O-bound: 10-50\n   *   * Mixed: 5-20\n   */\n  concurrency?: number;\n\n  /**\n   * Polling interval in milliseconds.\n   * - Default: 100ms\n   * - Lower values = more responsive but higher server load\n   * - Higher values = less server load but slower task pickup\n   * - Recommended: 100-500ms for most use cases\n   */\n  pollInterval?: number;\n\n  /**\n   * Task domain for multi-tenancy.\n   * - Default: undefined (no domain isolation)\n   * - Use when you need to partition tasks across different environments/tenants\n   */\n  domain?: string;\n\n  /**\n   * Unique worker identifier.\n   * - Default: undefined (auto-generated)\n   * - Useful for debugging and tracking which worker executed which task\n   */\n  workerId?: string;\n\n  /**\n   * Auto-register task definition on startup.\n   * - Default: false\n   * - When true: Task definition is created/updated on worker startup\n   * - When false: Task definition must exist in Conductor already\n   * - Recommended: false for production (manage task definitions separately)\n   */\n  registerTaskDef?: boolean;\n\n  /**\n   * Server-side long poll timeout in milliseconds.\n   * - Default: 100ms\n   * - How long the server will wait for a task before returning empty response\n   * - Higher values reduce polling frequency when no tasks available\n   * - Recommended: 100-500ms\n   */\n  pollTimeout?: number;\n\n  /**\n   * Task definition template for registration.\n   * - Default: undefined\n   * - Only used when registerTaskDef=true\n   * - Allows specifying retry policies, timeouts, rate limits, etc.\n   * - The taskDefName parameter takes precedence for the name field\n   */\n  taskDef?: TaskDef;\n\n  /**\n   * Overwrite existing task definitions on server.\n   * - Default: true\n   * - When true: Always updates task definition\n   * - When false: Only creates if doesn't exist\n   * - Can be overridden via env: CONDUCTOR_WORKER_<NAME>_OVERWRITE_TASK_DEF=false\n   */\n  overwriteTaskDef?: boolean;\n\n  /**\n   * Enforce strict JSON schema validation.\n   * - Default: false\n   * - When false: additionalProperties=true (allows extra fields)\n   * - When true: additionalProperties=false (strict validation)\n   * - Can be overridden via env: CONDUCTOR_WORKER_<NAME>_STRICT_SCHEMA=true\n   */\n  strictSchema?: boolean;\n\n  /**\n   * JSON Schema for task input validation.\n   * - Registered alongside the task definition when registerTaskDef=true\n   * - Use the `jsonSchema()` helper to generate from field descriptors\n   */\n  inputSchema?: Record<string, unknown>;\n\n  /**\n   * JSON Schema for task output validation.\n   * - Registered alongside the task definition when registerTaskDef=true\n   * - Use the `jsonSchema()` helper to generate from field descriptors\n   */\n  outputSchema?: Record<string, unknown>;\n\n  /**\n   * Class decorated with `@schemaField()` for auto-generating input schema.\n   * - Alternative to `inputSchema` — schema is generated from class metadata\n   * - Takes precedence over `inputSchema` if both are set\n   */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  inputType?: new (...args: any[]) => unknown;\n\n  /**\n   * Class decorated with `@schemaField()` for auto-generating output schema.\n   * - Alternative to `outputSchema` — schema is generated from class metadata\n   * - Takes precedence over `outputSchema` if both are set\n   */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  outputType?: new (...args: any[]) => unknown;\n}\n\n/**\n * Decorator to register a function as a Conductor worker.\n * \n * This decorator enables SDK-style worker registration with auto-discovery,\n * matching the Python SDK's @worker_task pattern.\n * \n * @param options - Worker configuration options\n * \n * @example\n * Basic usage:\n * ```typescript\n * @worker({ taskDefName: \"process_order\" })\n * async function processOrder(task: Task): Promise<TaskResult> {\n *   const orderId = task.inputData.orderId;\n *   // Process order logic\n *   return {\n *     status: \"COMPLETED\",\n *     outputData: { orderId, processed: true },\n *   };\n * }\n * ```\n * \n * @example\n * With concurrency:\n * ```typescript\n * @worker({ taskDefName: \"send_email\", concurrency: 10 })\n * async function sendEmail(task: Task): Promise<TaskResult> {\n *   const { to, subject, body } = task.inputData;\n *   await emailService.send(to, subject, body);\n *   return { status: \"COMPLETED\", outputData: { sent: true } };\n * }\n * ```\n * \n * @example\n * With domain and custom polling:\n * ```typescript\n * @worker({\n *   taskDefName: \"validate_payment\",\n *   domain: \"payments\",\n *   concurrency: 5,\n *   pollInterval: 200,\n * })\n * async function validatePayment(task: Task): Promise<TaskResult> {\n *   // Validation logic\n *   return { status: \"COMPLETED\", outputData: { valid: true } };\n * }\n * ```\n * \n * @example\n * With task definition registration:\n * ```typescript\n * @worker({\n *   taskDefName: \"complex_task\",\n *   registerTaskDef: true,\n *   taskDef: {\n *     retryCount: 3,\n *     retryLogic: \"EXPONENTIAL_BACKOFF\",\n *     timeoutSeconds: 300,\n *   },\n * })\n * async function complexTask(task: Task): Promise<TaskResult> {\n *   // Complex logic\n *   return { status: \"COMPLETED\", outputData: { result: \"...\" } };\n * }\n * ```\n * \n * @example\n * Non-retryable errors:\n * ```typescript\n * import { worker, NonRetryableException } from \"@io-orkes/conductor-javascript/worker\";\n * \n * @worker({ taskDefName: \"validate_order\" })\n * async function validateOrder(task: Task): Promise<TaskResult> {\n *   const order = await getOrder(task.inputData.orderId);\n *   \n *   if (!order) {\n *     // Order doesn't exist - retry won't help\n *     throw new NonRetryableException(`Order ${task.inputData.orderId} not found`);\n *   }\n *   \n *   return { status: \"COMPLETED\", outputData: { validated: true } };\n * }\n * ```\n */\n/** Minimal context shape for Stage 3 method decorators (TypeScript 5.0+). */\ninterface MethodDecoratorContext {\n  kind: string;\n  name: string | symbol;\n}\n\n/**\n * Type guard for Stage 3 (TypeScript 5.0+) decorator context.\n * New decorators pass (value, context) where context has a `kind` property.\n */\nfunction isNewDecoratorContext(arg: unknown): arg is MethodDecoratorContext {\n  return (\n    typeof arg === \"object\" &&\n    arg !== null &&\n    \"kind\" in arg &&\n    typeof (arg as { kind: string }).kind === \"string\"\n  );\n}\n\ntype WorkerMethod = (\n  task: Task\n) => Promise<Omit<TaskResult, \"workflowInstanceId\" | \"taskId\">>;\n\nexport function worker(options: WorkerOptions) {\n  function decorator<T extends WorkerMethod>(\n    value: T,\n    context: MethodDecoratorContext\n  ): T | undefined;\n  function decorator(\n    target: object,\n    propertyKey?: string,\n    descriptor?: PropertyDescriptor\n  ): PropertyDescriptor | WorkerMethod | undefined;\n  function decorator<T extends WorkerMethod>(\n    target: T | object,\n    propertyKeyOrContext?: string | MethodDecoratorContext,\n    descriptor?: PropertyDescriptor\n  ): T | PropertyDescriptor | undefined {\n    // Detect decorator API: new (Stage 3) vs legacy (experimentalDecorators)\n    let executeFunction: (task: Task) => Promise<Omit<TaskResult, \"workflowInstanceId\" | \"taskId\">>;\n    let isNewApi = false;\n\n    if (isNewDecoratorContext(propertyKeyOrContext)) {\n      // New decorator API: target is the method itself\n      executeFunction = target as (task: Task) => Promise<\n        Omit<TaskResult, \"workflowInstanceId\" | \"taskId\">\n      >;\n      isNewApi = true;\n    } else {\n      // Legacy API: descriptor?.value (method) or target (standalone function)\n      const fn = (descriptor?.value ?? target) as (\n        task: Task\n      ) => Promise<Omit<TaskResult, \"workflowInstanceId\" | \"taskId\">>;\n      executeFunction = fn;\n    }\n\n    // Validate that we have a function\n    if (typeof executeFunction !== \"function\") {\n      throw new Error(\n        `@worker decorator can only be applied to functions. ` +\n          `Received: ${typeof executeFunction}`\n      );\n    }\n\n    // Validate required options\n    if (!options.taskDefName) {\n      throw new Error(\n        `@worker decorator requires 'taskDefName' option. ` +\n          `Example: @worker({ taskDefName: \"my_task\" })`\n      );\n    }\n\n    // Auto-generate schemas from inputType/outputType if provided\n    let resolvedInputSchema = options.inputSchema;\n    let resolvedOutputSchema = options.outputSchema;\n\n    if (options.inputType) {\n      resolvedInputSchema = generateSchemaFromClass(\n        options.inputType\n      ) as unknown as Record<string, unknown>;\n    }\n    if (options.outputType) {\n      resolvedOutputSchema = generateSchemaFromClass(\n        options.outputType\n      ) as unknown as Record<string, unknown>;\n    }\n\n    // Create registered worker metadata\n    const registeredWorker: RegisteredWorker = {\n      taskDefName: options.taskDefName,\n      executeFunction,\n      concurrency: options.concurrency,\n      pollInterval: options.pollInterval,\n      domain: options.domain,\n      workerId: options.workerId,\n      registerTaskDef: options.registerTaskDef,\n      pollTimeout: options.pollTimeout,\n      taskDef: options.taskDef,\n      overwriteTaskDef: options.overwriteTaskDef,\n      strictSchema: options.strictSchema,\n      inputSchema: resolvedInputSchema,\n      outputSchema: resolvedOutputSchema,\n    };\n\n    // Register in global registry for auto-discovery\n    registerWorker(registeredWorker);\n\n    // Create dual-mode wrapper that supports both execution and workflow builder mode\n    const dualModeFunction = function (this: unknown, ...args: unknown[]) {\n      // Check if called in workflow builder mode:\n      //   myWorker({ taskRefName: \"step_1\", inputParameters: { ... } })\n      if (\n        args.length === 1 &&\n        args[0] &&\n        typeof args[0] === \"object\" &&\n        \"taskRefName\" in (args[0] as Record<string, unknown>)\n      ) {\n        const builderArgs = args[0] as {\n          taskRefName: string;\n          inputParameters?: Record<string, unknown>;\n        };\n        return simpleTask(\n          builderArgs.taskRefName,\n          options.taskDefName,\n          builderArgs.inputParameters ?? {}\n        );\n      }\n      // Normal execution mode\n      return (executeFunction as (...args: unknown[]) => unknown).apply(\n        this,\n        args\n      );\n    };\n\n    // Preserve original function name\n    Object.defineProperty(dualModeFunction, \"name\", {\n      value: (executeFunction as (...args: unknown[]) => unknown).name,\n      configurable: true,\n    });\n\n    if (isNewApi) {\n      // New decorator API: return replacement function\n      return dualModeFunction as unknown as T;\n    }\n\n    // Legacy API\n    if (descriptor) {\n      descriptor.value = dualModeFunction;\n      return descriptor;\n    }\n    return dualModeFunction as unknown as T;\n  }\n\n  return decorator;\n}\n","import type {\n  TaskRunnerEventsListener,\n  PollStarted,\n  PollCompleted,\n  PollFailure,\n  TaskExecutionStarted,\n  TaskExecutionCompleted,\n  TaskExecutionFailure,\n  TaskUpdateCompleted,\n  TaskUpdateFailure,\n} from \"../../clients/worker/events\";\n\n/**\n * Configuration for MetricsCollector.\n */\nexport interface MetricsCollectorConfig {\n  /** Prometheus metric name prefix (default: \"conductor_worker\") */\n  prefix?: string;\n  /** If set, auto-starts MetricsServer on this port */\n  httpPort?: number;\n  /** If set, periodically writes Prometheus metrics to this file path */\n  filePath?: string;\n  /** File write interval in milliseconds (default: 5000) */\n  fileWriteIntervalMs?: number;\n  /** Sliding window size for quantile calculations (default: 1000) */\n  slidingWindowSize?: number;\n  /**\n   * Use prom-client for native Prometheus integration.\n   * Requires `prom-client` to be installed (`npm install prom-client`).\n   * When enabled, metrics are registered in prom-client's default registry\n   * and `toPrometheusText()` delegates to `prom-client.register.metrics()`.\n   * Falls back to custom text format if prom-client is not installed.\n   */\n  usePromClient?: boolean;\n}\n\n/**\n * Collected worker metrics.\n */\nexport interface WorkerMetrics {\n  /** Total polls by taskType */\n  pollTotal: Map<string, number>;\n  /** Poll errors by taskType */\n  pollErrorTotal: Map<string, number>;\n  /** Task executions completed by taskType */\n  taskExecutionTotal: Map<string, number>;\n  /** Task execution errors by \"taskType:exceptionName\" */\n  taskExecutionErrorTotal: Map<string, number>;\n  /** Task update failures by taskType */\n  taskUpdateFailureTotal: Map<string, number>;\n  /** Task ack errors by taskType */\n  taskAckErrorTotal: Map<string, number>;\n  /** Task execution queue full by taskType */\n  taskExecutionQueueFullTotal: Map<string, number>;\n  /** Thread/process uncaught exceptions (global counter) */\n  uncaughtExceptionTotal: number;\n  /** Worker restart count (global counter) */\n  workerRestartTotal: number;\n  /** Task paused count by taskType */\n  taskPausedTotal: Map<string, number>;\n  /** Workflow start errors */\n  workflowStartErrorTotal: number;\n  /** External payload used count by type (workflow_input/task_output) */\n  externalPayloadUsedTotal: Map<string, number>;\n  /** Poll duration observations in ms by taskType */\n  pollDurationMs: Map<string, number[]>;\n  /** Execution duration observations in ms by taskType */\n  executionDurationMs: Map<string, number[]>;\n  /** Update duration observations in ms by taskType */\n  updateDurationMs: Map<string, number[]>;\n  /** Output size observations in bytes by taskType */\n  outputSizeBytes: Map<string, number[]>;\n  /** Workflow input size observations in bytes */\n  workflowInputSizeBytes: Map<string, number[]>;\n  /** API request duration observations in ms by \"method:uri:status\" */\n  apiRequestDurationMs: Map<string, number[]>;\n}\n\nconst QUANTILES = [0.5, 0.75, 0.9, 0.95, 0.99] as const;\n\n/**\n * Calculate quantiles from sorted array using linear interpolation.\n */\nfunction computeQuantile(sorted: number[], q: number): number {\n  if (sorted.length === 0) return 0;\n  if (sorted.length === 1) return sorted[0];\n  const pos = q * (sorted.length - 1);\n  const lower = Math.floor(pos);\n  const upper = Math.ceil(pos);\n  if (lower === upper) return sorted[lower];\n  return sorted[lower] + (pos - lower) * (sorted[upper] - sorted[lower]);\n}\n\n/**\n * Built-in metrics collector implementing TaskRunnerEventsListener.\n *\n * Collects 19 metric types matching the Python SDK's MetricsCollector,\n * with sliding-window quantile support (p50, p75, p90, p95, p99).\n *\n * @example\n * ```typescript\n * const metrics = new MetricsCollector({ httpPort: 9090 });\n *\n * const handler = new TaskHandler({\n *   client,\n *   eventListeners: [metrics],\n * });\n *\n * await handler.startWorkers();\n * // GET http://localhost:9090/metrics  — Prometheus format\n * // GET http://localhost:9090/health   — {\"status\":\"UP\"}\n * ```\n */\nexport class MetricsCollector implements TaskRunnerEventsListener {\n  private metrics: WorkerMetrics;\n  private readonly _prefix: string;\n  private readonly _slidingWindowSize: number;\n  private _server?: import(\"./MetricsServer.js\").MetricsServer;\n  private _fileTimer?: ReturnType<typeof setInterval>;\n  private _promRegistry?: import(\"./PrometheusRegistry.js\").PrometheusRegistry;\n\n  constructor(config?: MetricsCollectorConfig) {\n    this.metrics = this.createEmptyMetrics();\n    this._prefix = config?.prefix ?? \"conductor_worker\";\n    this._slidingWindowSize = config?.slidingWindowSize ?? 1000;\n    if (config?.usePromClient) {\n      void this.initPromClient();\n    }\n    if (config?.httpPort) {\n      void this.startServer(config.httpPort);\n    }\n    if (config?.filePath) {\n      this.startFileWriter(\n        config.filePath,\n        config.fileWriteIntervalMs ?? 5000\n      );\n    }\n  }\n\n  private async initPromClient(): Promise<void> {\n    const { PrometheusRegistry } = await import(\"./PrometheusRegistry.js\");\n    this._promRegistry = new PrometheusRegistry();\n    await this._promRegistry.initialize(this._prefix);\n  }\n\n  private async startServer(port: number): Promise<void> {\n    const { MetricsServer } = await import(\"./MetricsServer.js\");\n    this._server = new MetricsServer(this, port);\n    await this._server.start();\n  }\n\n  private startFileWriter(filePath: string, intervalMs: number): void {\n    const doWrite = async () => {\n      try {\n        const { writeFile } = await import(\"node:fs/promises\");\n        await writeFile(filePath, this.toPrometheusText(), \"utf-8\");\n      } catch {\n        // Silently ignore file write errors\n      }\n    };\n    // Immediate first write, then periodic\n    void doWrite();\n    this._fileTimer = setInterval(doWrite, intervalMs);\n    // Unref so the timer doesn't prevent process exit\n    if (typeof this._fileTimer === \"object\" && \"unref\" in this._fileTimer) {\n      this._fileTimer.unref();\n    }\n  }\n\n  private createEmptyMetrics(): WorkerMetrics {\n    return {\n      pollTotal: new Map(),\n      pollErrorTotal: new Map(),\n      taskExecutionTotal: new Map(),\n      taskExecutionErrorTotal: new Map(),\n      taskUpdateFailureTotal: new Map(),\n      taskAckErrorTotal: new Map(),\n      taskExecutionQueueFullTotal: new Map(),\n      uncaughtExceptionTotal: 0,\n      workerRestartTotal: 0,\n      taskPausedTotal: new Map(),\n      workflowStartErrorTotal: 0,\n      externalPayloadUsedTotal: new Map(),\n      pollDurationMs: new Map(),\n      executionDurationMs: new Map(),\n      updateDurationMs: new Map(),\n      outputSizeBytes: new Map(),\n      workflowInputSizeBytes: new Map(),\n      apiRequestDurationMs: new Map(),\n    };\n  }\n\n  private increment(map: Map<string, number>, key: string): void {\n    map.set(key, (map.get(key) ?? 0) + 1);\n  }\n\n  private observe(\n    map: Map<string, number[]>,\n    key: string,\n    value: number\n  ): void {\n    let arr = map.get(key);\n    if (!arr) {\n      arr = [];\n      map.set(key, arr);\n    }\n    arr.push(value);\n    // Sliding window: keep only the last N observations\n    if (arr.length > this._slidingWindowSize) {\n      arr.splice(0, arr.length - this._slidingWindowSize);\n    }\n  }\n\n  private incrementCounter(\n    map: Map<string, number>,\n    key: string,\n    promKey: string,\n    labelName: string\n  ): void {\n    this.increment(map, key);\n    this._promRegistry?.incrementCounter(promKey, { [labelName]: key });\n  }\n\n  private observeSummary(\n    map: Map<string, number[]>,\n    key: string,\n    value: number,\n    promKey: string,\n    labelName: string\n  ): void {\n    this.observe(map, key, value);\n    this._promRegistry?.observeSummary(promKey, { [labelName]: key }, value);\n  }\n\n  // ── Event Listener Methods ──────────────────────────────────────\n\n  onPollStarted(event: PollStarted): void {\n    this.incrementCounter(this.metrics.pollTotal, event.taskType, \"poll_total\", \"task_type\");\n  }\n\n  onPollCompleted(event: PollCompleted): void {\n    this.observeSummary(this.metrics.pollDurationMs, event.taskType, event.durationMs, \"poll_time\", \"task_type\");\n  }\n\n  onPollFailure(event: PollFailure): void {\n    this.incrementCounter(this.metrics.pollErrorTotal, event.taskType, \"poll_error_total\", \"task_type\");\n    this.observeSummary(this.metrics.pollDurationMs, event.taskType, event.durationMs, \"poll_time\", \"task_type\");\n  }\n\n  onTaskExecutionStarted(_event: TaskExecutionStarted): void {\n    // Counted on completion\n  }\n\n  onTaskExecutionCompleted(event: TaskExecutionCompleted): void {\n    this.incrementCounter(this.metrics.taskExecutionTotal, event.taskType, \"execute_total\", \"task_type\");\n    this.observeSummary(this.metrics.executionDurationMs, event.taskType, event.durationMs, \"execute_time\", \"task_type\");\n    if (event.outputSizeBytes !== undefined) {\n      this.observeSummary(this.metrics.outputSizeBytes, event.taskType, event.outputSizeBytes, \"result_size\", \"task_type\");\n    }\n  }\n\n  onTaskExecutionFailure(event: TaskExecutionFailure): void {\n    const key = `${event.taskType}:${event.cause?.name ?? \"Error\"}`;\n    this.incrementCounter(this.metrics.taskExecutionErrorTotal, key, \"execute_error_total\", \"task_type\");\n    this.observeSummary(this.metrics.executionDurationMs, event.taskType, event.durationMs, \"execute_time\", \"task_type\");\n  }\n\n  onTaskUpdateCompleted(event: TaskUpdateCompleted): void {\n    this.observeSummary(this.metrics.updateDurationMs, event.taskType, event.durationMs, \"update_time\", \"task_type\");\n  }\n\n  onTaskUpdateFailure(event: TaskUpdateFailure): void {\n    this.incrementCounter(this.metrics.taskUpdateFailureTotal, event.taskType, \"update_error_total\", \"task_type\");\n  }\n\n  // ── Direct Recording Methods (for code outside event system) ───\n\n  /** Record a task execution queue full event */\n  recordTaskExecutionQueueFull(taskType: string): void {\n    this.incrementCounter(this.metrics.taskExecutionQueueFullTotal, taskType, \"queue_full_total\", \"task_type\");\n  }\n\n  /** Record an uncaught exception */\n  recordUncaughtException(): void {\n    this.metrics.uncaughtExceptionTotal++;\n    this._promRegistry?.incrementCounter(\"uncaught_total\", {});\n  }\n\n  /** Record a worker restart */\n  recordWorkerRestart(): void {\n    this.metrics.workerRestartTotal++;\n    this._promRegistry?.incrementCounter(\"restart_total\", {});\n  }\n\n  /** Record a task paused event */\n  recordTaskPaused(taskType: string): void {\n    this.incrementCounter(this.metrics.taskPausedTotal, taskType, \"paused_total\", \"task_type\");\n  }\n\n  /** Record a task ack error */\n  recordTaskAckError(taskType: string): void {\n    this.incrementCounter(this.metrics.taskAckErrorTotal, taskType, \"ack_error_total\", \"task_type\");\n  }\n\n  /** Record a workflow start error */\n  recordWorkflowStartError(): void {\n    this.metrics.workflowStartErrorTotal++;\n    this._promRegistry?.incrementCounter(\"wf_start_error_total\", {});\n  }\n\n  /** Record external payload usage */\n  recordExternalPayloadUsed(payloadType: string): void {\n    this.incrementCounter(this.metrics.externalPayloadUsedTotal, payloadType, \"external_payload_total\", \"payload_type\");\n  }\n\n  /** Record workflow input size */\n  recordWorkflowInputSize(workflowType: string, sizeBytes: number): void {\n    this.observeSummary(this.metrics.workflowInputSizeBytes, workflowType, sizeBytes, \"wf_input_size\", \"workflow_type\");\n  }\n\n  /** Record API request duration */\n  recordApiRequestTime(\n    method: string,\n    uri: string,\n    status: number,\n    durationMs: number\n  ): void {\n    const key = `${method}:${uri}:${status}`;\n    this.observeSummary(this.metrics.apiRequestDurationMs, key, durationMs, \"api_request\", \"endpoint\");\n  }\n\n  // ── Public API ──────────────────────────────────────────────────\n\n  /** Get a snapshot of all collected metrics */\n  getMetrics(): Readonly<WorkerMetrics> {\n    return this.metrics;\n  }\n\n  /** Reset all collected metrics */\n  reset(): void {\n    this.metrics = this.createEmptyMetrics();\n  }\n\n  /** Stop the auto-started metrics HTTP server and file writer (if any) */\n  async stop(): Promise<void> {\n    if (this._fileTimer) {\n      clearInterval(this._fileTimer);\n      this._fileTimer = undefined;\n    }\n    if (this._server) {\n      await this._server.stop();\n      this._server = undefined;\n    }\n  }\n\n  /**\n   * Get the content type for the Prometheus metrics endpoint.\n   * Returns prom-client's content type when available, otherwise standard Prometheus text format.\n   */\n  getContentType(): string {\n    return this._promRegistry?.contentType ?? \"text/plain; version=0.0.4; charset=utf-8\";\n  }\n\n  /**\n   * Render all collected metrics in Prometheus exposition format.\n   * If prom-client is available and `usePromClient: true`, delegates to prom-client's registry.\n   * Otherwise uses built-in rendering with p50/p75/p90/p95/p99 quantiles.\n   *\n   * @param prefix - Metric name prefix (defaults to constructor config or \"conductor_worker\")\n   * @returns Prometheus text format string\n   */\n  /**\n   * Async version of toPrometheusText.\n   * When prom-client is available, returns its native registry output.\n   * Otherwise falls back to the built-in text format.\n   */\n  async toPrometheusTextAsync(): Promise<string> {\n    if (this._promRegistry?.available) {\n      return this._promRegistry.metrics();\n    }\n    return this.toPrometheusText();\n  }\n\n  toPrometheusText(prefix?: string): string {\n    const p = prefix ?? this._prefix;\n    const lines: string[] = [];\n\n    // ── Labelled counters ──\n    const labelledCounters: {\n      name: string;\n      help: string;\n      data: Map<string, number>;\n      labelName: string;\n    }[] = [\n      {\n        name: `${p}_task_poll_total`,\n        help: \"Total number of task polls\",\n        data: this.metrics.pollTotal,\n        labelName: \"task_type\",\n      },\n      {\n        name: `${p}_task_poll_error_total`,\n        help: \"Total number of task poll errors\",\n        data: this.metrics.pollErrorTotal,\n        labelName: \"task_type\",\n      },\n      {\n        name: `${p}_task_execute_total`,\n        help: \"Total number of task executions\",\n        data: this.metrics.taskExecutionTotal,\n        labelName: \"task_type\",\n      },\n      {\n        name: `${p}_task_execute_error_total`,\n        help: \"Total number of task execution errors\",\n        data: this.metrics.taskExecutionErrorTotal,\n        labelName: \"task_type\",\n      },\n      {\n        name: `${p}_task_update_error_total`,\n        help: \"Total number of task update failures\",\n        data: this.metrics.taskUpdateFailureTotal,\n        labelName: \"task_type\",\n      },\n      {\n        name: `${p}_task_ack_error_total`,\n        help: \"Total number of task ack errors\",\n        data: this.metrics.taskAckErrorTotal,\n        labelName: \"task_type\",\n      },\n      {\n        name: `${p}_task_execution_queue_full_total`,\n        help: \"Total number of task execution queue full events\",\n        data: this.metrics.taskExecutionQueueFullTotal,\n        labelName: \"task_type\",\n      },\n      {\n        name: `${p}_task_paused_total`,\n        help: \"Total number of task paused events\",\n        data: this.metrics.taskPausedTotal,\n        labelName: \"task_type\",\n      },\n      {\n        name: `${p}_external_payload_used_total`,\n        help: \"Total number of external payload usage events\",\n        data: this.metrics.externalPayloadUsedTotal,\n        labelName: \"payload_type\",\n      },\n    ];\n\n    for (const counter of labelledCounters) {\n      if (counter.data.size === 0) continue;\n      lines.push(`# HELP ${counter.name} ${counter.help}`);\n      lines.push(`# TYPE ${counter.name} counter`);\n      for (const [label, value] of counter.data) {\n        lines.push(\n          `${counter.name}{${counter.labelName}=\"${label}\"} ${value}`\n        );\n      }\n    }\n\n    // ── Global counters (no labels) ──\n    const globalCounters: {\n      name: string;\n      help: string;\n      value: number;\n    }[] = [\n      {\n        name: `${p}_thread_uncaught_exceptions_total`,\n        help: \"Total uncaught exceptions\",\n        value: this.metrics.uncaughtExceptionTotal,\n      },\n      {\n        name: `${p}_worker_restart_total`,\n        help: \"Total worker restarts\",\n        value: this.metrics.workerRestartTotal,\n      },\n      {\n        name: `${p}_workflow_start_error_total`,\n        help: \"Total workflow start errors\",\n        value: this.metrics.workflowStartErrorTotal,\n      },\n    ];\n\n    for (const counter of globalCounters) {\n      if (counter.value === 0) continue;\n      lines.push(`# HELP ${counter.name} ${counter.help}`);\n      lines.push(`# TYPE ${counter.name} counter`);\n      lines.push(`${counter.name} ${counter.value}`);\n    }\n\n    // ── Summaries with quantiles ──\n    const summaries: {\n      name: string;\n      help: string;\n      data: Map<string, number[]>;\n      labelName: string;\n    }[] = [\n      {\n        name: `${p}_task_poll_time`,\n        help: \"Task poll duration in milliseconds\",\n        data: this.metrics.pollDurationMs,\n        labelName: \"task_type\",\n      },\n      {\n        name: `${p}_task_execute_time`,\n        help: \"Task execution duration in milliseconds\",\n        data: this.metrics.executionDurationMs,\n        labelName: \"task_type\",\n      },\n      {\n        name: `${p}_task_update_time`,\n        help: \"Task update duration in milliseconds\",\n        data: this.metrics.updateDurationMs,\n        labelName: \"task_type\",\n      },\n      {\n        name: `${p}_task_result_size_bytes`,\n        help: \"Task result output size in bytes\",\n        data: this.metrics.outputSizeBytes,\n        labelName: \"task_type\",\n      },\n      {\n        name: `${p}_workflow_input_size_bytes`,\n        help: \"Workflow input payload size in bytes\",\n        data: this.metrics.workflowInputSizeBytes,\n        labelName: \"workflow_type\",\n      },\n      {\n        name: `${p}_http_api_client_request`,\n        help: \"API request duration in milliseconds\",\n        data: this.metrics.apiRequestDurationMs,\n        labelName: \"endpoint\",\n      },\n    ];\n\n    for (const summary of summaries) {\n      if (summary.data.size === 0) continue;\n      lines.push(`# HELP ${summary.name} ${summary.help}`);\n      lines.push(`# TYPE ${summary.name} summary`);\n      for (const [label, values] of summary.data) {\n        const sorted = [...values].sort((a, b) => a - b);\n        const count = sorted.length;\n        const sum = sorted.reduce((a, b) => a + b, 0);\n        for (const q of QUANTILES) {\n          const val = computeQuantile(sorted, q);\n          lines.push(\n            `${summary.name}{${summary.labelName}=\"${label}\",quantile=\"${q}\"} ${val}`\n          );\n        }\n        lines.push(\n          `${summary.name}_count{${summary.labelName}=\"${label}\"} ${count}`\n        );\n        lines.push(\n          `${summary.name}_sum{${summary.labelName}=\"${label}\"} ${sum}`\n        );\n      }\n    }\n\n    lines.push(\"\"); // trailing newline\n    return lines.join(\"\\n\");\n  }\n}\n","export {\n  MetricsCollector,\n  type MetricsCollectorConfig,\n  type WorkerMetrics,\n} from \"./MetricsCollector\";\nexport { MetricsServer } from \"./MetricsServer\";\nexport { PrometheusRegistry } from \"./PrometheusRegistry\";\n","/**\n * Lightweight JSON Schema (draft-07) generator from declarative field descriptions.\n *\n * TypeScript has no runtime type reflection, so this provides a practical\n * alternative: describe your fields declaratively and get a valid JSON Schema object.\n *\n * @example\n * ```typescript\n * const schema = jsonSchema({\n *   orderId: { type: \"string\", required: true },\n *   amount: { type: \"number\" },\n *   items: { type: \"array\", items: { type: \"string\" } },\n *   address: {\n *     type: \"object\",\n *     properties: {\n *       street: { type: \"string\", required: true },\n *       city: { type: \"string\" },\n *     },\n *   },\n * });\n * ```\n */\n\nexport type JsonSchemaType =\n  | \"string\"\n  | \"number\"\n  | \"integer\"\n  | \"boolean\"\n  | \"object\"\n  | \"array\"\n  | \"null\";\n\nexport interface FieldDescriptor {\n  type: JsonSchemaType;\n  required?: boolean;\n  description?: string;\n  /** For arrays: schema of array items */\n  items?: FieldDescriptor;\n  /** For objects: nested property descriptors */\n  properties?: Record<string, FieldDescriptor>;\n  /** Default value */\n  default?: unknown;\n  /** Enum values */\n  enum?: unknown[];\n}\n\nexport interface JsonSchemaOutput {\n  $schema: string;\n  type: \"object\";\n  properties: Record<string, unknown>;\n  required?: string[];\n}\n\nfunction fieldToSchemaProperty(field: FieldDescriptor): Record<string, unknown> {\n  const prop: Record<string, unknown> = { type: field.type };\n\n  if (field.description !== undefined) {\n    prop.description = field.description;\n  }\n\n  if (field.default !== undefined) {\n    prop.default = field.default;\n  }\n\n  if (field.enum !== undefined) {\n    prop.enum = field.enum;\n  }\n\n  if (field.type === \"array\" && field.items) {\n    prop.items = fieldToSchemaProperty(field.items);\n  }\n\n  if (field.type === \"object\" && field.properties) {\n    const nested = buildObjectSchema(field.properties);\n    prop.properties = nested.properties;\n    if (nested.required && nested.required.length > 0) {\n      prop.required = nested.required;\n    }\n  }\n\n  return prop;\n}\n\nfunction buildObjectSchema(fields: Record<string, FieldDescriptor>): {\n  properties: Record<string, unknown>;\n  required: string[];\n} {\n  const properties: Record<string, unknown> = {};\n  const required: string[] = [];\n\n  for (const [name, field] of Object.entries(fields)) {\n    properties[name] = fieldToSchemaProperty(field);\n    if (field.required) {\n      required.push(name);\n    }\n  }\n\n  return { properties, required };\n}\n\n/**\n * Generate a JSON Schema (draft-07) from declarative field descriptions.\n */\nexport function jsonSchema(\n  fields: Record<string, FieldDescriptor>\n): JsonSchemaOutput {\n  const { properties, required } = buildObjectSchema(fields);\n  const schema: JsonSchemaOutput = {\n    $schema: \"http://json-schema.org/draft-07/schema#\",\n    type: \"object\",\n    properties,\n  };\n  if (required.length > 0) {\n    schema.required = required;\n  }\n  return schema;\n}\n"],"mappings":"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jB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,QAAQ,SAAS;AAAA,MACjB,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","names":["idx","stream","ret","client","err","client","Request","context","context","err","session","require_constants","Buffer","Buffer","require_constants","context","keys","require_util","performance","FormData","entry","FormData","crypto","chunk","value","client","exports","ret","client","headers","Request","client","connect","err","client","ret","origin","client","pool","client","dispatcher","ret","result","origin","protocol","opts","context","connect","ret","consume","context","context","res","opaque","ret","context","body","context","context","mockDispatch","replyParameters","newMockDispatch","result","crypto","setTimeout","clearTimeout","context","require_global","context","ret","context","context","context","key","entries","entry","context","require_cache","context","headers","opts","result","VERSION","Headers","Headers","require_request","Headers","Request","crypto","metadata","Request","fetch","require_util","require_cache","Request","request","cache","require_constants","require_util","Headers","require_constants","require_util","crypto","buffer","Headers","crypto","client","body","node","client","client","require_util","fetch","require_util","metrics","ret","metrics","isCompatible","diag","DiagComponentLogger","DiagLogLevel","DiagAPI","__spreadArray","__read","BaggageImpl","__read","BaseContext","context","DiagConsoleLogger","NoopMeter","NoopMetric","NoopCounterMetric","NoopUpDownCounterMetric","NoopGaugeMetric","NoopHistogramMetric","NoopObservableMetric","NoopObservableCounterMetric","NoopObservableGaugeMetric","NoopObservableUpDownCounterMetric","ValueType","NoopContextManager","__spreadArray","__read","API_NAME","init_context","ContextAPI","context","__spreadArray","__read","TraceFlags","NonRecordingSpan","context","init_context","init_context","NoopTracer","context","ProxyTracer","context","NoopTracerProvider","ProxyTracerProvider","SamplingDecision","SpanKind","SpanStatusCode","TraceStateImpl","init_utils","init_context","diag","NoopMeterProvider","API_NAME","MetricsAPI","NoopTextMapPropagator","context","context","init_context","API_NAME","PropagationAPI","context","API_NAME","TraceAPI","diag","init_utils","value","process","metrics","metrics","metrics","worker","joinedValues","config","request","url","client","humanTask","client","client","client","client","client","client","client","client","client","client","client","client","client","Consistency","ReturnStrategy","TaskResultStatusEnum","TaskType","ServiceType","client","workflow","client","DEFAULT_POLL_INTERVAL","DEFAULT_POLL_INTERVAL","context","DEFAULT_POLL_INTERVAL","worker","client","updateDurationMs","context","contextLogs","nextTask","DEFAULT_POLL_INTERVAL","client","worker","generateSwitchTask","generateDoWhileTask","generateForkJoinTask","Role","LLMProvider","VectorDB","os","worker","os","worker","propertyKey","designType","isNewDecoratorContext","PrometheusRegistry","MetricsServer"]}