From bea2d86b1f56f1836bf89cbab38395e1feccd6f5 Mon Sep 17 00:00:00 2001 From: Joey Perrott Date: Wed, 17 Jun 2026 20:03:35 +0000 Subject: [PATCH] feat(github-actions): add gha-sha-enforcer lint action --- .github/workflows/pr.yml | 2 + .ng-dev/commit-message.mjs | 1 + .prettierignore | 1 + .../linting/gha-sha-enforcer/BUILD.bazel | 27 + .../linting/gha-sha-enforcer/action.yml | 6 + .../linting/gha-sha-enforcer/lib/main.ts | 129 + .../linting/gha-sha-enforcer/main.js | 19244 ++++++++++++++++ .../linting/gha-sha-enforcer/package.json | 7 + pnpm-lock.yaml | 117 +- pnpm-workspace.yaml | 1 + 10 files changed, 19481 insertions(+), 54 deletions(-) create mode 100644 github-actions/linting/gha-sha-enforcer/BUILD.bazel create mode 100644 github-actions/linting/gha-sha-enforcer/action.yml create mode 100644 github-actions/linting/gha-sha-enforcer/lib/main.ts create mode 100644 github-actions/linting/gha-sha-enforcer/main.js create mode 100644 github-actions/linting/gha-sha-enforcer/package.json diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 25cc0cc8e5..927d4d8bde 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -40,6 +40,8 @@ jobs: uses: ./github-actions/linting/licenses with: allow-dependencies-licenses: 'pkg:npm/renovate, pkg:npm/@renovatebot/detect-tools' + - name: Enforce GHA SHAs + uses: ./github-actions/linting/gha-sha-enforcer test: name: ${{ matrix.name }} diff --git a/.ng-dev/commit-message.mjs b/.ng-dev/commit-message.mjs index 6f25623ddb..d42e3f9750 100644 --- a/.ng-dev/commit-message.mjs +++ b/.ng-dev/commit-message.mjs @@ -29,6 +29,7 @@ export const commitMessage = { ...buildScopesFor('github-actions', [ 'pull-request-labeling', 'feature-request', + 'gha-sha-enforcer', 'lock-closed', 'rebase', ]), diff --git a/.prettierignore b/.prettierignore index 235a0656d5..5b048391a7 100644 --- a/.prettierignore +++ b/.prettierignore @@ -10,6 +10,7 @@ github-actions/branch-manager/main.js github-actions/browserstack/set-browserstack-env.js github-actions/labeling/pull-request/main.js github-actions/google-internal-tests/main.js +github-actions/linting/gha-sha-enforcer/main.js github-actions/org-file-sync/main.js github-actions/post-approval-changes/main.js github-actions/release/publish/main.js diff --git a/github-actions/linting/gha-sha-enforcer/BUILD.bazel b/github-actions/linting/gha-sha-enforcer/BUILD.bazel new file mode 100644 index 0000000000..0a320170c9 --- /dev/null +++ b/github-actions/linting/gha-sha-enforcer/BUILD.bazel @@ -0,0 +1,27 @@ +load("@devinfra_npm//:defs.bzl", "npm_link_all_packages") +load("//tools:defaults.bzl", "esbuild_checked_in", "ts_project") + +package(default_visibility = ["//github-actions/linting/gha-sha-enforcer:__subpackages__"]) + +npm_link_all_packages() + +ts_project( + name = "lib", + srcs = glob(["lib/*.ts"]), + tsconfig = "//github-actions:tsconfig", + deps = [ + ":node_modules/@actions/core", + ":node_modules/@types/node", + ], +) + +esbuild_checked_in( + name = "main", + srcs = [ + ":lib", + ], + entry_point = "lib/main.ts", + format = "esm", + platform = "node", + target = "node24", +) diff --git a/github-actions/linting/gha-sha-enforcer/action.yml b/github-actions/linting/gha-sha-enforcer/action.yml new file mode 100644 index 0000000000..b474a69fba --- /dev/null +++ b/github-actions/linting/gha-sha-enforcer/action.yml @@ -0,0 +1,6 @@ +name: 'GHA SHA Enforcer' +description: 'Enforce full-length SHAs and version comments for external GitHub Actions' +author: 'Angular' +runs: + using: 'node24' + main: 'main.js' diff --git a/github-actions/linting/gha-sha-enforcer/lib/main.ts b/github-actions/linting/gha-sha-enforcer/lib/main.ts new file mode 100644 index 0000000000..4aca0ea208 --- /dev/null +++ b/github-actions/linting/gha-sha-enforcer/lib/main.ts @@ -0,0 +1,129 @@ +import * as fs from 'node:fs'; +import * as path from 'node:path'; +import * as core from '@actions/core'; + +// Regex to match uses: lines +const USES_REGEX = /^\s*(?:-\s*)?uses:\s*(.+)$/; +const BLOCK_SCALAR_REGEX = /^\s*(?:-\s*)?[a-zA-Z0-9_-]+\s*:\s*[|>]/; + +function checkWorkflowFile(filePath: string): boolean { + const content = fs.readFileSync(filePath, 'utf8'); + const lines = content.split('\n'); + let isValid = true; + let inBlockScalar = false; + let blockIndent = 0; + + lines.forEach((line, index) => { + if (inBlockScalar) { + const currentIndent = line.search(/\S/); + if (currentIndent !== -1 && currentIndent <= blockIndent) { + inBlockScalar = false; + } else { + return; + } + } + + if (line.match(BLOCK_SCALAR_REGEX)) { + inBlockScalar = true; + blockIndent = line.search(/\S/); + } + + const match = line.match(USES_REGEX); + if (match) { + const fullUses = match[1].trim(); + + // Split by '#' to separate comment + const hashIndex = fullUses.indexOf('#'); + let usesPart = fullUses; + let commentPart = ''; + + if (hashIndex !== -1) { + usesPart = fullUses.substring(0, hashIndex).trim(); + commentPart = fullUses.substring(hashIndex + 1).trim(); + } + + // Remove quotes from usesPart + const uses = usesPart.replace(/^['"]|['"]$/g, '').trim(); + + // Skip local actions + if (uses.startsWith('./')) { + return; + } + + // Now verify `uses` has SHA and `commentPart` has version + const atIndex = uses.indexOf('@'); + if (atIndex === -1) { + core.error( + `${filePath}:${index + 1}: Action "${uses}" should use "action-name@SHA # version" format (missing @).`, + ); + isValid = false; + return; + } + + const action = uses.substring(0, atIndex); + const version = uses.substring(atIndex + 1); + + const isSha = /^[a-fA-F0-9]{40}$/.test(version); + if (!isSha) { + core.error( + `${filePath}:${index + 1}: Action "${action}" should use a 40-character SHA for version, but got "${version}".`, + ); + isValid = false; + } + + if (!commentPart) { + core.error( + `${filePath}:${index + 1}: Action "${action}" is missing a version comment (e.g. "# v1.0.0").`, + ); + isValid = false; + } else { + const isVersionComment = /^v\d+/.test(commentPart); + if (!isVersionComment) { + core.error( + `${filePath}:${index + 1}: Action "${action}" has comment "${commentPart}" which does not look like a version (should start with 'v', e.g. '# v1.0.0').`, + ); + isValid = false; + } + } + } + }); + + return isValid; +} + +function run() { + try { + const workspace = process.env.GITHUB_WORKSPACE || process.cwd(); + const workflowsDir = path.join(workspace, '.github/workflows'); + if (!fs.existsSync(workflowsDir)) { + core.setFailed(`Workflows directory not found: ${workflowsDir}`); + return; + } + + const files = fs + .readdirSync(workflowsDir, {withFileTypes: true}) + .filter( + (entry) => entry.isFile() && (entry.name.endsWith('.yml') || entry.name.endsWith('.yaml')), + ) + .map((entry) => entry.name); + let allValid = true; + + for (const file of files) { + const filePath = path.join(workflowsDir, file); + core.info(`Checking ${file}...`); + if (!checkWorkflowFile(filePath)) { + allValid = false; + } + } + + if (!allValid) { + core.setFailed('Some workflows are using unpinned actions or missing version comments.'); + } else { + core.info('All workflows are valid!'); + } + } catch (error: any) { + core.setFailed(error.message); + } +} + +run(); diff --git a/github-actions/linting/gha-sha-enforcer/main.js b/github-actions/linting/gha-sha-enforcer/main.js new file mode 100644 index 0000000000..077364e182 --- /dev/null +++ b/github-actions/linting/gha-sha-enforcer/main.js @@ -0,0 +1,19244 @@ +import { createRequire as _esbuildBannerCreateRequire } from 'node:module';globalThis['require'] ??= _esbuildBannerCreateRequire(import.meta.url); +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, { + get: (a, b) => (typeof require !== "undefined" ? require : a)[b] +}) : x)(function(x) { + if (typeof require !== "undefined") + return require.apply(this, arguments); + throw Error('Dynamic require of "' + x + '" is not supported'); +}); +var __commonJS = (cb, mod) => function __require2() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); + +// +var require_tunnel = __commonJS({ + ""(exports) { + "use strict"; + var net = __require("net"); + var tls = __require("tls"); + var http = __require("http"); + var https = __require("https"); + var events = __require("events"); + var assert = __require("assert"); + var util = __require("util"); + exports.httpOverHttp = httpOverHttp2; + exports.httpsOverHttp = httpsOverHttp2; + exports.httpOverHttps = httpOverHttps2; + exports.httpsOverHttps = httpsOverHttps2; + function httpOverHttp2(options) { + var agent = new TunnelingAgent(options); + agent.request = http.request; + return agent; + } + function httpsOverHttp2(options) { + var agent = new TunnelingAgent(options); + agent.request = http.request; + agent.createSocket = createSecureSocket; + agent.defaultPort = 443; + return agent; + } + function httpOverHttps2(options) { + var agent = new TunnelingAgent(options); + agent.request = https.request; + return agent; + } + function httpsOverHttps2(options) { + var agent = new TunnelingAgent(options); + agent.request = https.request; + agent.createSocket = createSecureSocket; + agent.defaultPort = 443; + return agent; + } + function TunnelingAgent(options) { + var self = this; + self.options = options || {}; + self.proxyOptions = self.options.proxy || {}; + self.maxSockets = self.options.maxSockets || http.Agent.defaultMaxSockets; + self.requests = []; + self.sockets = []; + self.on("free", function onFree(socket, host, port, localAddress) { + var options2 = toOptions(host, port, localAddress); + for (var i = 0, len = self.requests.length; i < len; ++i) { + var pending = self.requests[i]; + if (pending.host === options2.host && pending.port === options2.port) { + self.requests.splice(i, 1); + pending.request.onSocket(socket); + return; + } + } + socket.destroy(); + self.removeSocket(socket); + }); + } + util.inherits(TunnelingAgent, events.EventEmitter); + TunnelingAgent.prototype.addRequest = function addRequest(req, host, port, localAddress) { + var self = this; + var options = mergeOptions({ request: req }, self.options, toOptions(host, port, localAddress)); + if (self.sockets.length >= this.maxSockets) { + self.requests.push(options); + return; + } + self.createSocket(options, function(socket) { + socket.on("free", onFree); + socket.on("close", onCloseOrRemove); + socket.on("agentRemove", onCloseOrRemove); + req.onSocket(socket); + function onFree() { + self.emit("free", socket, options); + } + function onCloseOrRemove(err) { + self.removeSocket(socket); + socket.removeListener("free", onFree); + socket.removeListener("close", onCloseOrRemove); + socket.removeListener("agentRemove", onCloseOrRemove); + } + }); + }; + TunnelingAgent.prototype.createSocket = function createSocket(options, cb) { + var self = this; + var placeholder = {}; + self.sockets.push(placeholder); + var connectOptions = mergeOptions({}, self.proxyOptions, { + method: "CONNECT", + path: options.host + ":" + options.port, + agent: false, + headers: { + host: options.host + ":" + options.port + } + }); + if (options.localAddress) { + connectOptions.localAddress = options.localAddress; + } + if (connectOptions.proxyAuth) { + connectOptions.headers = connectOptions.headers || {}; + connectOptions.headers["Proxy-Authorization"] = "Basic " + new Buffer(connectOptions.proxyAuth).toString("base64"); + } + debug2("making CONNECT request"); + var connectReq = self.request(connectOptions); + connectReq.useChunkedEncodingByDefault = false; + connectReq.once("response", onResponse); + connectReq.once("upgrade", onUpgrade); + connectReq.once("connect", onConnect); + connectReq.once("error", onError); + connectReq.end(); + function onResponse(res) { + res.upgrade = true; + } + function onUpgrade(res, socket, head) { + process.nextTick(function() { + onConnect(res, socket, head); + }); + } + function onConnect(res, socket, head) { + connectReq.removeAllListeners(); + socket.removeAllListeners(); + if (res.statusCode !== 200) { + debug2( + "tunneling socket could not be established, statusCode=%d", + res.statusCode + ); + socket.destroy(); + var error2 = new Error("tunneling socket could not be established, statusCode=" + res.statusCode); + error2.code = "ECONNRESET"; + options.request.emit("error", error2); + self.removeSocket(placeholder); + return; + } + if (head.length > 0) { + debug2("got illegal response body from proxy"); + socket.destroy(); + var error2 = new Error("got illegal response body from proxy"); + error2.code = "ECONNRESET"; + options.request.emit("error", error2); + self.removeSocket(placeholder); + return; + } + debug2("tunneling connection has established"); + self.sockets[self.sockets.indexOf(placeholder)] = socket; + return cb(socket); + } + function onError(cause) { + connectReq.removeAllListeners(); + debug2( + "tunneling socket could not be established, cause=%s\n", + cause.message, + cause.stack + ); + var error2 = new Error("tunneling socket could not be established, cause=" + cause.message); + error2.code = "ECONNRESET"; + options.request.emit("error", error2); + self.removeSocket(placeholder); + } + }; + TunnelingAgent.prototype.removeSocket = function removeSocket(socket) { + var pos = this.sockets.indexOf(socket); + if (pos === -1) { + return; + } + this.sockets.splice(pos, 1); + var pending = this.requests.shift(); + if (pending) { + this.createSocket(pending, function(socket2) { + pending.request.onSocket(socket2); + }); + } + }; + function createSecureSocket(options, cb) { + var self = this; + TunnelingAgent.prototype.createSocket.call(self, options, function(socket) { + var hostHeader = options.request.getHeader("host"); + var tlsOptions = mergeOptions({}, self.options, { + socket, + servername: hostHeader ? hostHeader.replace(/:.*$/, "") : options.host + }); + var secureSocket = tls.connect(0, tlsOptions); + self.sockets[self.sockets.indexOf(socket)] = secureSocket; + cb(secureSocket); + }); + } + function toOptions(host, port, localAddress) { + if (typeof host === "string") { + return { + host, + port, + localAddress + }; + } + return host; + } + function mergeOptions(target) { + for (var i = 1, len = arguments.length; i < len; ++i) { + var overrides = arguments[i]; + if (typeof overrides === "object") { + var keys = Object.keys(overrides); + for (var j = 0, keyLen = keys.length; j < keyLen; ++j) { + var k = keys[j]; + if (overrides[k] !== void 0) { + target[k] = overrides[k]; + } + } + } + } + return target; + } + var debug2; + if (process.env.NODE_DEBUG && /\btunnel\b/.test(process.env.NODE_DEBUG)) { + debug2 = function() { + var args = Array.prototype.slice.call(arguments); + if (typeof args[0] === "string") { + args[0] = "TUNNEL: " + args[0]; + } else { + args.unshift("TUNNEL:"); + } + console.error.apply(console, args); + }; + } else { + debug2 = function() { + }; + } + exports.debug = debug2; + } +}); + +// +var require_tunnel2 = __commonJS({ + ""(exports, module) { + module.exports = require_tunnel(); + } +}); + +// +var require_symbols = __commonJS({ + ""(exports, module) { + module.exports = { + kClose: Symbol("close"), + kDestroy: Symbol("destroy"), + kDispatch: Symbol("dispatch"), + kUrl: Symbol("url"), + kWriting: Symbol("writing"), + kResuming: Symbol("resuming"), + kQueue: Symbol("queue"), + kConnect: Symbol("connect"), + kConnecting: Symbol("connecting"), + kKeepAliveDefaultTimeout: Symbol("default keep alive timeout"), + kKeepAliveMaxTimeout: Symbol("max keep alive timeout"), + kKeepAliveTimeoutThreshold: Symbol("keep alive timeout threshold"), + kKeepAliveTimeoutValue: Symbol("keep alive timeout"), + kKeepAlive: Symbol("keep alive"), + kHeadersTimeout: Symbol("headers timeout"), + kBodyTimeout: Symbol("body timeout"), + kServerName: Symbol("server name"), + kLocalAddress: Symbol("local address"), + kHost: Symbol("host"), + kNoRef: Symbol("no ref"), + kBodyUsed: Symbol("used"), + kBody: Symbol("abstracted request body"), + kRunning: Symbol("running"), + kBlocking: Symbol("blocking"), + kPending: Symbol("pending"), + kSize: Symbol("size"), + kBusy: Symbol("busy"), + kQueued: Symbol("queued"), + kFree: Symbol("free"), + kConnected: Symbol("connected"), + kClosed: Symbol("closed"), + kNeedDrain: Symbol("need drain"), + kReset: Symbol("reset"), + kDestroyed: Symbol.for("nodejs.stream.destroyed"), + kResume: Symbol("resume"), + kOnError: Symbol("on error"), + kMaxHeadersSize: Symbol("max headers size"), + kRunningIdx: Symbol("running index"), + kPendingIdx: Symbol("pending index"), + kError: Symbol("error"), + kClients: Symbol("clients"), + kClient: Symbol("client"), + kParser: Symbol("parser"), + kOnDestroyed: Symbol("destroy callbacks"), + kPipelining: Symbol("pipelining"), + kSocket: Symbol("socket"), + kHostHeader: Symbol("host header"), + kConnector: Symbol("connector"), + kStrictContentLength: Symbol("strict content length"), + kMaxRedirections: Symbol("maxRedirections"), + kMaxRequests: Symbol("maxRequestsPerClient"), + kProxy: Symbol("proxy agent options"), + kCounter: Symbol("socket request counter"), + kInterceptors: Symbol("dispatch interceptors"), + kMaxResponseSize: Symbol("max response size"), + kHTTP2Session: Symbol("http2Session"), + kHTTP2SessionState: Symbol("http2Session state"), + kRetryHandlerDefaultRetry: Symbol("retry agent default retry"), + kConstruct: Symbol("constructable"), + kListeners: Symbol("listeners"), + kHTTPContext: Symbol("http context"), + kMaxConcurrentStreams: Symbol("max concurrent streams"), + kNoProxyAgent: Symbol("no proxy agent"), + kHttpProxyAgent: Symbol("http proxy agent"), + kHttpsProxyAgent: Symbol("https proxy agent") + }; + } +}); + +// +var require_errors = __commonJS({ + ""(exports, module) { + "use strict"; + var kUndiciError = Symbol.for("undici.error.UND_ERR"); + var UndiciError = class extends Error { + constructor(message) { + super(message); + this.name = "UndiciError"; + this.code = "UND_ERR"; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kUndiciError] === true; + } + [kUndiciError] = true; + }; + var kConnectTimeoutError = Symbol.for("undici.error.UND_ERR_CONNECT_TIMEOUT"); + var ConnectTimeoutError = class extends UndiciError { + constructor(message) { + super(message); + this.name = "ConnectTimeoutError"; + this.message = message || "Connect Timeout Error"; + this.code = "UND_ERR_CONNECT_TIMEOUT"; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kConnectTimeoutError] === true; + } + [kConnectTimeoutError] = true; + }; + var kHeadersTimeoutError = Symbol.for("undici.error.UND_ERR_HEADERS_TIMEOUT"); + var HeadersTimeoutError = class extends UndiciError { + constructor(message) { + super(message); + this.name = "HeadersTimeoutError"; + this.message = message || "Headers Timeout Error"; + this.code = "UND_ERR_HEADERS_TIMEOUT"; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kHeadersTimeoutError] === true; + } + [kHeadersTimeoutError] = true; + }; + var kHeadersOverflowError = Symbol.for("undici.error.UND_ERR_HEADERS_OVERFLOW"); + var HeadersOverflowError = class extends UndiciError { + constructor(message) { + super(message); + this.name = "HeadersOverflowError"; + this.message = message || "Headers Overflow Error"; + this.code = "UND_ERR_HEADERS_OVERFLOW"; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kHeadersOverflowError] === true; + } + [kHeadersOverflowError] = true; + }; + var kBodyTimeoutError = Symbol.for("undici.error.UND_ERR_BODY_TIMEOUT"); + var BodyTimeoutError = class extends UndiciError { + constructor(message) { + super(message); + this.name = "BodyTimeoutError"; + this.message = message || "Body Timeout Error"; + this.code = "UND_ERR_BODY_TIMEOUT"; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kBodyTimeoutError] === true; + } + [kBodyTimeoutError] = true; + }; + var kResponseStatusCodeError = Symbol.for("undici.error.UND_ERR_RESPONSE_STATUS_CODE"); + var ResponseStatusCodeError = class extends UndiciError { + constructor(message, statusCode, headers, body) { + super(message); + this.name = "ResponseStatusCodeError"; + this.message = message || "Response Status Code Error"; + this.code = "UND_ERR_RESPONSE_STATUS_CODE"; + this.body = body; + this.status = statusCode; + this.statusCode = statusCode; + this.headers = headers; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kResponseStatusCodeError] === true; + } + [kResponseStatusCodeError] = true; + }; + var kInvalidArgumentError = Symbol.for("undici.error.UND_ERR_INVALID_ARG"); + var InvalidArgumentError = class extends UndiciError { + constructor(message) { + super(message); + this.name = "InvalidArgumentError"; + this.message = message || "Invalid Argument Error"; + this.code = "UND_ERR_INVALID_ARG"; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kInvalidArgumentError] === true; + } + [kInvalidArgumentError] = true; + }; + var kInvalidReturnValueError = Symbol.for("undici.error.UND_ERR_INVALID_RETURN_VALUE"); + var InvalidReturnValueError = class extends UndiciError { + constructor(message) { + super(message); + this.name = "InvalidReturnValueError"; + this.message = message || "Invalid Return Value Error"; + this.code = "UND_ERR_INVALID_RETURN_VALUE"; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kInvalidReturnValueError] === true; + } + [kInvalidReturnValueError] = true; + }; + var kAbortError = Symbol.for("undici.error.UND_ERR_ABORT"); + var AbortError = class extends UndiciError { + constructor(message) { + super(message); + this.name = "AbortError"; + this.message = message || "The operation was aborted"; + this.code = "UND_ERR_ABORT"; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kAbortError] === true; + } + [kAbortError] = true; + }; + var kRequestAbortedError = Symbol.for("undici.error.UND_ERR_ABORTED"); + var RequestAbortedError = class extends AbortError { + constructor(message) { + super(message); + this.name = "AbortError"; + this.message = message || "Request aborted"; + this.code = "UND_ERR_ABORTED"; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kRequestAbortedError] === true; + } + [kRequestAbortedError] = true; + }; + var kInformationalError = Symbol.for("undici.error.UND_ERR_INFO"); + var InformationalError = class extends UndiciError { + constructor(message) { + super(message); + this.name = "InformationalError"; + this.message = message || "Request information"; + this.code = "UND_ERR_INFO"; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kInformationalError] === true; + } + [kInformationalError] = true; + }; + var kRequestContentLengthMismatchError = Symbol.for("undici.error.UND_ERR_REQ_CONTENT_LENGTH_MISMATCH"); + var RequestContentLengthMismatchError = class extends UndiciError { + constructor(message) { + super(message); + this.name = "RequestContentLengthMismatchError"; + this.message = message || "Request body length does not match content-length header"; + this.code = "UND_ERR_REQ_CONTENT_LENGTH_MISMATCH"; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kRequestContentLengthMismatchError] === true; + } + [kRequestContentLengthMismatchError] = true; + }; + var kResponseContentLengthMismatchError = Symbol.for("undici.error.UND_ERR_RES_CONTENT_LENGTH_MISMATCH"); + var ResponseContentLengthMismatchError = class extends UndiciError { + constructor(message) { + super(message); + this.name = "ResponseContentLengthMismatchError"; + this.message = message || "Response body length does not match content-length header"; + this.code = "UND_ERR_RES_CONTENT_LENGTH_MISMATCH"; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kResponseContentLengthMismatchError] === true; + } + [kResponseContentLengthMismatchError] = true; + }; + var kClientDestroyedError = Symbol.for("undici.error.UND_ERR_DESTROYED"); + var ClientDestroyedError = class extends UndiciError { + constructor(message) { + super(message); + this.name = "ClientDestroyedError"; + this.message = message || "The client is destroyed"; + this.code = "UND_ERR_DESTROYED"; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kClientDestroyedError] === true; + } + [kClientDestroyedError] = true; + }; + var kClientClosedError = Symbol.for("undici.error.UND_ERR_CLOSED"); + var ClientClosedError = class extends UndiciError { + constructor(message) { + super(message); + this.name = "ClientClosedError"; + this.message = message || "The client is closed"; + this.code = "UND_ERR_CLOSED"; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kClientClosedError] === true; + } + [kClientClosedError] = true; + }; + var kSocketError = Symbol.for("undici.error.UND_ERR_SOCKET"); + var SocketError = class extends UndiciError { + constructor(message, socket) { + super(message); + this.name = "SocketError"; + this.message = message || "Socket error"; + this.code = "UND_ERR_SOCKET"; + this.socket = socket; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kSocketError] === true; + } + [kSocketError] = true; + }; + var kNotSupportedError = Symbol.for("undici.error.UND_ERR_NOT_SUPPORTED"); + var NotSupportedError = class extends UndiciError { + constructor(message) { + super(message); + this.name = "NotSupportedError"; + this.message = message || "Not supported error"; + this.code = "UND_ERR_NOT_SUPPORTED"; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kNotSupportedError] === true; + } + [kNotSupportedError] = true; + }; + var kBalancedPoolMissingUpstreamError = Symbol.for("undici.error.UND_ERR_BPL_MISSING_UPSTREAM"); + var BalancedPoolMissingUpstreamError = class extends UndiciError { + constructor(message) { + super(message); + this.name = "MissingUpstreamError"; + this.message = message || "No upstream has been added to the BalancedPool"; + this.code = "UND_ERR_BPL_MISSING_UPSTREAM"; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kBalancedPoolMissingUpstreamError] === true; + } + [kBalancedPoolMissingUpstreamError] = true; + }; + var kHTTPParserError = Symbol.for("undici.error.UND_ERR_HTTP_PARSER"); + var HTTPParserError = class extends Error { + constructor(message, code, data) { + super(message); + this.name = "HTTPParserError"; + this.code = code ? `HPE_${code}` : void 0; + this.data = data ? data.toString() : void 0; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kHTTPParserError] === true; + } + [kHTTPParserError] = true; + }; + var kResponseExceededMaxSizeError = Symbol.for("undici.error.UND_ERR_RES_EXCEEDED_MAX_SIZE"); + var ResponseExceededMaxSizeError = class extends UndiciError { + constructor(message) { + super(message); + this.name = "ResponseExceededMaxSizeError"; + this.message = message || "Response content exceeded max size"; + this.code = "UND_ERR_RES_EXCEEDED_MAX_SIZE"; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kResponseExceededMaxSizeError] === true; + } + [kResponseExceededMaxSizeError] = true; + }; + var kRequestRetryError = Symbol.for("undici.error.UND_ERR_REQ_RETRY"); + var RequestRetryError = class extends UndiciError { + constructor(message, code, { headers, data }) { + super(message); + this.name = "RequestRetryError"; + this.message = message || "Request retry error"; + this.code = "UND_ERR_REQ_RETRY"; + this.statusCode = code; + this.data = data; + this.headers = headers; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kRequestRetryError] === true; + } + [kRequestRetryError] = true; + }; + var kResponseError = Symbol.for("undici.error.UND_ERR_RESPONSE"); + var ResponseError = class extends UndiciError { + constructor(message, code, { headers, data }) { + super(message); + this.name = "ResponseError"; + this.message = message || "Response error"; + this.code = "UND_ERR_RESPONSE"; + this.statusCode = code; + this.data = data; + this.headers = headers; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kResponseError] === true; + } + [kResponseError] = true; + }; + var kSecureProxyConnectionError = Symbol.for("undici.error.UND_ERR_PRX_TLS"); + var SecureProxyConnectionError = class extends UndiciError { + constructor(cause, message, options) { + super(message, { cause, ...options ?? {} }); + this.name = "SecureProxyConnectionError"; + this.message = message || "Secure Proxy Connection failed"; + this.code = "UND_ERR_PRX_TLS"; + this.cause = cause; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kSecureProxyConnectionError] === true; + } + [kSecureProxyConnectionError] = true; + }; + var kMessageSizeExceededError = Symbol.for("undici.error.UND_ERR_WS_MESSAGE_SIZE_EXCEEDED"); + var MessageSizeExceededError = class extends UndiciError { + constructor(message) { + super(message); + this.name = "MessageSizeExceededError"; + this.message = message || "Max decompressed message size exceeded"; + this.code = "UND_ERR_WS_MESSAGE_SIZE_EXCEEDED"; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kMessageSizeExceededError] === true; + } + get [kMessageSizeExceededError]() { + return true; + } + }; + module.exports = { + AbortError, + HTTPParserError, + UndiciError, + HeadersTimeoutError, + HeadersOverflowError, + BodyTimeoutError, + RequestContentLengthMismatchError, + ConnectTimeoutError, + ResponseStatusCodeError, + InvalidArgumentError, + InvalidReturnValueError, + RequestAbortedError, + ClientDestroyedError, + ClientClosedError, + InformationalError, + SocketError, + NotSupportedError, + ResponseContentLengthMismatchError, + BalancedPoolMissingUpstreamError, + ResponseExceededMaxSizeError, + RequestRetryError, + ResponseError, + SecureProxyConnectionError, + MessageSizeExceededError + }; + } +}); + +// +var require_constants = __commonJS({ + ""(exports, module) { + "use strict"; + var headerNameLowerCasedRecord = {}; + var wellknownHeaderNames = [ + "Accept", + "Accept-Encoding", + "Accept-Language", + "Accept-Ranges", + "Access-Control-Allow-Credentials", + "Access-Control-Allow-Headers", + "Access-Control-Allow-Methods", + "Access-Control-Allow-Origin", + "Access-Control-Expose-Headers", + "Access-Control-Max-Age", + "Access-Control-Request-Headers", + "Access-Control-Request-Method", + "Age", + "Allow", + "Alt-Svc", + "Alt-Used", + "Authorization", + "Cache-Control", + "Clear-Site-Data", + "Connection", + "Content-Disposition", + "Content-Encoding", + "Content-Language", + "Content-Length", + "Content-Location", + "Content-Range", + "Content-Security-Policy", + "Content-Security-Policy-Report-Only", + "Content-Type", + "Cookie", + "Cross-Origin-Embedder-Policy", + "Cross-Origin-Opener-Policy", + "Cross-Origin-Resource-Policy", + "Date", + "Device-Memory", + "Downlink", + "ECT", + "ETag", + "Expect", + "Expect-CT", + "Expires", + "Forwarded", + "From", + "Host", + "If-Match", + "If-Modified-Since", + "If-None-Match", + "If-Range", + "If-Unmodified-Since", + "Keep-Alive", + "Last-Modified", + "Link", + "Location", + "Max-Forwards", + "Origin", + "Permissions-Policy", + "Pragma", + "Proxy-Authenticate", + "Proxy-Authorization", + "RTT", + "Range", + "Referer", + "Referrer-Policy", + "Refresh", + "Retry-After", + "Sec-WebSocket-Accept", + "Sec-WebSocket-Extensions", + "Sec-WebSocket-Key", + "Sec-WebSocket-Protocol", + "Sec-WebSocket-Version", + "Server", + "Server-Timing", + "Service-Worker-Allowed", + "Service-Worker-Navigation-Preload", + "Set-Cookie", + "SourceMap", + "Strict-Transport-Security", + "Supports-Loading-Mode", + "TE", + "Timing-Allow-Origin", + "Trailer", + "Transfer-Encoding", + "Upgrade", + "Upgrade-Insecure-Requests", + "User-Agent", + "Vary", + "Via", + "WWW-Authenticate", + "X-Content-Type-Options", + "X-DNS-Prefetch-Control", + "X-Frame-Options", + "X-Permitted-Cross-Domain-Policies", + "X-Powered-By", + "X-Requested-With", + "X-XSS-Protection" + ]; + for (let i = 0; i < wellknownHeaderNames.length; ++i) { + const key = wellknownHeaderNames[i]; + const lowerCasedKey = key.toLowerCase(); + headerNameLowerCasedRecord[key] = headerNameLowerCasedRecord[lowerCasedKey] = lowerCasedKey; + } + Object.setPrototypeOf(headerNameLowerCasedRecord, null); + module.exports = { + wellknownHeaderNames, + headerNameLowerCasedRecord + }; + } +}); + +// +var require_tree = __commonJS({ + ""(exports, module) { + "use strict"; + var { + wellknownHeaderNames, + headerNameLowerCasedRecord + } = require_constants(); + var TstNode = class _TstNode { + /** @type {any} */ + value = null; + /** @type {null | TstNode} */ + left = null; + /** @type {null | TstNode} */ + middle = null; + /** @type {null | TstNode} */ + right = null; + /** @type {number} */ + code; + /** + * @param {string} key + * @param {any} value + * @param {number} index + */ + constructor(key, value, index) { + if (index === void 0 || index >= key.length) { + throw new TypeError("Unreachable"); + } + const code = this.code = key.charCodeAt(index); + if (code > 127) { + throw new TypeError("key must be ascii string"); + } + if (key.length !== ++index) { + this.middle = new _TstNode(key, value, index); + } else { + this.value = value; + } + } + /** + * @param {string} key + * @param {any} value + */ + add(key, value) { + const length = key.length; + if (length === 0) { + throw new TypeError("Unreachable"); + } + let index = 0; + let node = this; + while (true) { + const code = key.charCodeAt(index); + if (code > 127) { + throw new TypeError("key must be ascii string"); + } + if (node.code === code) { + if (length === ++index) { + node.value = value; + break; + } else if (node.middle !== null) { + node = node.middle; + } else { + node.middle = new _TstNode(key, value, index); + break; + } + } else if (node.code < code) { + if (node.left !== null) { + node = node.left; + } else { + node.left = new _TstNode(key, value, index); + break; + } + } else if (node.right !== null) { + node = node.right; + } else { + node.right = new _TstNode(key, value, index); + break; + } + } + } + /** + * @param {Uint8Array} key + * @return {TstNode | null} + */ + search(key) { + const keylength = key.length; + let index = 0; + let node = this; + while (node !== null && index < keylength) { + let code = key[index]; + if (code <= 90 && code >= 65) { + code |= 32; + } + while (node !== null) { + if (code === node.code) { + if (keylength === ++index) { + return node; + } + node = node.middle; + break; + } + node = node.code < code ? node.left : node.right; + } + } + return null; + } + }; + var TernarySearchTree = class { + /** @type {TstNode | null} */ + node = null; + /** + * @param {string} key + * @param {any} value + * */ + insert(key, value) { + if (this.node === null) { + this.node = new TstNode(key, value, 0); + } else { + this.node.add(key, value); + } + } + /** + * @param {Uint8Array} key + * @return {any} + */ + lookup(key) { + return this.node?.search(key)?.value ?? null; + } + }; + var tree = new TernarySearchTree(); + for (let i = 0; i < wellknownHeaderNames.length; ++i) { + const key = headerNameLowerCasedRecord[wellknownHeaderNames[i]]; + tree.insert(key, key); + } + module.exports = { + TernarySearchTree, + tree + }; + } +}); + +// +var require_util = __commonJS({ + ""(exports, module) { + "use strict"; + var assert = __require("node:assert"); + var { kDestroyed, kBodyUsed, kListeners, kBody } = require_symbols(); + var { IncomingMessage } = __require("node:http"); + var stream = __require("node:stream"); + var net = __require("node:net"); + var { Blob: Blob2 } = __require("node:buffer"); + var nodeUtil = __require("node:util"); + var { stringify } = __require("node:querystring"); + var { EventEmitter: EE } = __require("node:events"); + var { InvalidArgumentError } = require_errors(); + var { headerNameLowerCasedRecord } = require_constants(); + var { tree } = require_tree(); + var [nodeMajor, nodeMinor] = process.versions.node.split(".").map((v) => Number(v)); + var BodyAsyncIterable = class { + constructor(body) { + this[kBody] = body; + this[kBodyUsed] = false; + } + async *[Symbol.asyncIterator]() { + assert(!this[kBodyUsed], "disturbed"); + this[kBodyUsed] = true; + yield* this[kBody]; + } + }; + function wrapRequestBody(body) { + if (isStream(body)) { + if (bodyLength(body) === 0) { + body.on("data", function() { + assert(false); + }); + } + if (typeof body.readableDidRead !== "boolean") { + body[kBodyUsed] = false; + EE.prototype.on.call(body, "data", function() { + this[kBodyUsed] = true; + }); + } + return body; + } else if (body && typeof body.pipeTo === "function") { + return new BodyAsyncIterable(body); + } else if (body && typeof body !== "string" && !ArrayBuffer.isView(body) && isIterable(body)) { + return new BodyAsyncIterable(body); + } else { + return body; + } + } + function nop() { + } + function isStream(obj) { + return obj && typeof obj === "object" && typeof obj.pipe === "function" && typeof obj.on === "function"; + } + function isBlobLike(object) { + if (object === null) { + return false; + } else if (object instanceof Blob2) { + return true; + } else if (typeof object !== "object") { + return false; + } else { + const sTag = object[Symbol.toStringTag]; + return (sTag === "Blob" || sTag === "File") && ("stream" in object && typeof object.stream === "function" || "arrayBuffer" in object && typeof object.arrayBuffer === "function"); + } + } + function buildURL(url, queryParams) { + if (url.includes("?") || url.includes("#")) { + throw new Error('Query params cannot be passed when url already contains "?" or "#".'); + } + const stringified = stringify(queryParams); + if (stringified) { + url += "?" + stringified; + } + return url; + } + function isValidPort(port) { + const value = parseInt(port, 10); + return value === Number(port) && value >= 0 && value <= 65535; + } + function isHttpOrHttpsPrefixed(value) { + return value != null && value[0] === "h" && value[1] === "t" && value[2] === "t" && value[3] === "p" && (value[4] === ":" || value[4] === "s" && value[5] === ":"); + } + function parseURL(url) { + if (typeof url === "string") { + url = new URL(url); + if (!isHttpOrHttpsPrefixed(url.origin || url.protocol)) { + throw new InvalidArgumentError("Invalid URL protocol: the URL must start with `http:` or `https:`."); + } + return url; + } + if (!url || typeof url !== "object") { + throw new InvalidArgumentError("Invalid URL: The URL argument must be a non-null object."); + } + if (!(url instanceof URL)) { + if (url.port != null && url.port !== "" && isValidPort(url.port) === false) { + throw new InvalidArgumentError("Invalid URL: port must be a valid integer or a string representation of an integer."); + } + if (url.path != null && typeof url.path !== "string") { + throw new InvalidArgumentError("Invalid URL path: the path must be a string or null/undefined."); + } + if (url.pathname != null && typeof url.pathname !== "string") { + throw new InvalidArgumentError("Invalid URL pathname: the pathname must be a string or null/undefined."); + } + if (url.hostname != null && typeof url.hostname !== "string") { + throw new InvalidArgumentError("Invalid URL hostname: the hostname must be a string or null/undefined."); + } + if (url.origin != null && typeof url.origin !== "string") { + throw new InvalidArgumentError("Invalid URL origin: the origin must be a string or null/undefined."); + } + if (!isHttpOrHttpsPrefixed(url.origin || url.protocol)) { + throw new InvalidArgumentError("Invalid URL protocol: the URL must start with `http:` or `https:`."); + } + const port = url.port != null ? url.port : url.protocol === "https:" ? 443 : 80; + let origin = url.origin != null ? url.origin : `${url.protocol || ""}//${url.hostname || ""}:${port}`; + let path2 = url.path != null ? url.path : `${url.pathname || ""}${url.search || ""}`; + if (origin[origin.length - 1] === "/") { + origin = origin.slice(0, origin.length - 1); + } + if (path2 && path2[0] !== "/") { + path2 = `/${path2}`; + } + return new URL(`${origin}${path2}`); + } + if (!isHttpOrHttpsPrefixed(url.origin || url.protocol)) { + throw new InvalidArgumentError("Invalid URL protocol: the URL must start with `http:` or `https:`."); + } + return url; + } + function parseOrigin(url) { + url = parseURL(url); + if (url.pathname !== "/" || url.search || url.hash) { + throw new InvalidArgumentError("invalid url"); + } + return url; + } + function getHostname(host) { + if (host[0] === "[") { + const idx2 = host.indexOf("]"); + assert(idx2 !== -1); + return host.substring(1, idx2); + } + const idx = host.indexOf(":"); + if (idx === -1) + return host; + return host.substring(0, idx); + } + function getServerName(host) { + if (!host) { + return null; + } + assert(typeof host === "string"); + const servername = getHostname(host); + if (net.isIP(servername)) { + return ""; + } + return servername; + } + function deepClone(obj) { + return JSON.parse(JSON.stringify(obj)); + } + function isAsyncIterable(obj) { + return !!(obj != null && typeof obj[Symbol.asyncIterator] === "function"); + } + function isIterable(obj) { + return !!(obj != null && (typeof obj[Symbol.iterator] === "function" || typeof obj[Symbol.asyncIterator] === "function")); + } + function bodyLength(body) { + if (body == null) { + return 0; + } else if (isStream(body)) { + const state = body._readableState; + return state && state.objectMode === false && state.ended === true && Number.isFinite(state.length) ? state.length : null; + } else if (isBlobLike(body)) { + return body.size != null ? body.size : null; + } else if (isBuffer(body)) { + return body.byteLength; + } + return null; + } + function isDestroyed(body) { + return body && !!(body.destroyed || body[kDestroyed] || stream.isDestroyed?.(body)); + } + function destroy(stream2, err) { + if (stream2 == null || !isStream(stream2) || isDestroyed(stream2)) { + return; + } + if (typeof stream2.destroy === "function") { + if (Object.getPrototypeOf(stream2).constructor === IncomingMessage) { + stream2.socket = null; + } + stream2.destroy(err); + } else if (err) { + queueMicrotask(() => { + stream2.emit("error", err); + }); + } + if (stream2.destroyed !== true) { + stream2[kDestroyed] = true; + } + } + var KEEPALIVE_TIMEOUT_EXPR = /timeout=(\d+)/; + function parseKeepAliveTimeout(val) { + const m = val.toString().match(KEEPALIVE_TIMEOUT_EXPR); + return m ? parseInt(m[1], 10) * 1e3 : null; + } + function headerNameToString(value) { + return typeof value === "string" ? headerNameLowerCasedRecord[value] ?? value.toLowerCase() : tree.lookup(value) ?? value.toString("latin1").toLowerCase(); + } + function bufferToLowerCasedHeaderName(value) { + return tree.lookup(value) ?? value.toString("latin1").toLowerCase(); + } + function parseHeaders(headers, obj) { + if (obj === void 0) + obj = {}; + for (let i = 0; i < headers.length; i += 2) { + const key = headerNameToString(headers[i]); + let val = obj[key]; + if (val) { + if (typeof val === "string") { + val = [val]; + obj[key] = val; + } + val.push(headers[i + 1].toString("utf8")); + } else { + const headersValue = headers[i + 1]; + if (typeof headersValue === "string") { + obj[key] = headersValue; + } else { + obj[key] = Array.isArray(headersValue) ? headersValue.map((x) => x.toString("utf8")) : headersValue.toString("utf8"); + } + } + } + if ("content-length" in obj && "content-disposition" in obj) { + obj["content-disposition"] = Buffer.from(obj["content-disposition"]).toString("latin1"); + } + return obj; + } + function parseRawHeaders(headers) { + const len = headers.length; + const ret = new Array(len); + let hasContentLength = false; + let contentDispositionIdx = -1; + let key; + let val; + let kLen = 0; + for (let n = 0; n < headers.length; n += 2) { + key = headers[n]; + val = headers[n + 1]; + typeof key !== "string" && (key = key.toString()); + typeof val !== "string" && (val = val.toString("utf8")); + kLen = key.length; + if (kLen === 14 && key[7] === "-" && (key === "content-length" || key.toLowerCase() === "content-length")) { + hasContentLength = true; + } else if (kLen === 19 && key[7] === "-" && (key === "content-disposition" || key.toLowerCase() === "content-disposition")) { + contentDispositionIdx = n + 1; + } + ret[n] = key; + ret[n + 1] = val; + } + if (hasContentLength && contentDispositionIdx !== -1) { + ret[contentDispositionIdx] = Buffer.from(ret[contentDispositionIdx]).toString("latin1"); + } + return ret; + } + function isBuffer(buffer) { + return buffer instanceof Uint8Array || Buffer.isBuffer(buffer); + } + function validateHandler(handler, method, upgrade) { + if (!handler || typeof handler !== "object") { + throw new InvalidArgumentError("handler must be an object"); + } + if (typeof handler.onConnect !== "function") { + throw new InvalidArgumentError("invalid onConnect method"); + } + if (typeof handler.onError !== "function") { + throw new InvalidArgumentError("invalid onError method"); + } + if (typeof handler.onBodySent !== "function" && handler.onBodySent !== void 0) { + throw new InvalidArgumentError("invalid onBodySent method"); + } + if (upgrade || method === "CONNECT") { + if (typeof handler.onUpgrade !== "function") { + throw new InvalidArgumentError("invalid onUpgrade method"); + } + } else { + if (typeof handler.onHeaders !== "function") { + throw new InvalidArgumentError("invalid onHeaders method"); + } + if (typeof handler.onData !== "function") { + throw new InvalidArgumentError("invalid onData method"); + } + if (typeof handler.onComplete !== "function") { + throw new InvalidArgumentError("invalid onComplete method"); + } + } + } + function isDisturbed(body) { + return !!(body && (stream.isDisturbed(body) || body[kBodyUsed])); + } + function isErrored(body) { + return !!(body && stream.isErrored(body)); + } + function isReadable(body) { + return !!(body && stream.isReadable(body)); + } + function getSocketInfo(socket) { + return { + localAddress: socket.localAddress, + localPort: socket.localPort, + remoteAddress: socket.remoteAddress, + remotePort: socket.remotePort, + remoteFamily: socket.remoteFamily, + timeout: socket.timeout, + bytesWritten: socket.bytesWritten, + bytesRead: socket.bytesRead + }; + } + function ReadableStreamFrom(iterable) { + let iterator; + return new ReadableStream( + { + async start() { + iterator = iterable[Symbol.asyncIterator](); + }, + async pull(controller) { + const { done, value } = await iterator.next(); + if (done) { + queueMicrotask(() => { + controller.close(); + controller.byobRequest?.respond(0); + }); + } else { + const buf = Buffer.isBuffer(value) ? value : Buffer.from(value); + if (buf.byteLength) { + controller.enqueue(new Uint8Array(buf)); + } + } + return controller.desiredSize > 0; + }, + async cancel(reason) { + await iterator.return(); + }, + type: "bytes" + } + ); + } + function isFormDataLike(object) { + return object && typeof object === "object" && typeof object.append === "function" && typeof object.delete === "function" && typeof object.get === "function" && typeof object.getAll === "function" && typeof object.has === "function" && typeof object.set === "function" && object[Symbol.toStringTag] === "FormData"; + } + function addAbortListener(signal, listener) { + if ("addEventListener" in signal) { + signal.addEventListener("abort", listener, { once: true }); + return () => signal.removeEventListener("abort", listener); + } + signal.addListener("abort", listener); + return () => signal.removeListener("abort", listener); + } + var hasToWellFormed = typeof String.prototype.toWellFormed === "function"; + var hasIsWellFormed = typeof String.prototype.isWellFormed === "function"; + function toUSVString(val) { + return hasToWellFormed ? `${val}`.toWellFormed() : nodeUtil.toUSVString(val); + } + function isUSVString(val) { + return hasIsWellFormed ? `${val}`.isWellFormed() : toUSVString(val) === `${val}`; + } + function isTokenCharCode(c) { + switch (c) { + case 34: + case 40: + case 41: + case 44: + case 47: + case 58: + case 59: + case 60: + case 61: + case 62: + case 63: + case 64: + case 91: + case 92: + case 93: + case 123: + case 125: + return false; + default: + return c >= 33 && c <= 126; + } + } + function isValidHTTPToken(characters) { + if (characters.length === 0) { + return false; + } + for (let i = 0; i < characters.length; ++i) { + if (!isTokenCharCode(characters.charCodeAt(i))) { + return false; + } + } + return true; + } + var headerCharRegex = /[^\t\x20-\x7e\x80-\xff]/; + function isValidHeaderValue(characters) { + return !headerCharRegex.test(characters); + } + function parseRangeHeader(range) { + if (range == null || range === "") + return { start: 0, end: null, size: null }; + const m = range ? range.match(/^bytes (\d+)-(\d+)\/(\d+)?$/) : null; + return m ? { + start: parseInt(m[1]), + end: m[2] ? parseInt(m[2]) : null, + size: m[3] ? parseInt(m[3]) : null + } : null; + } + function addListener(obj, name, listener) { + const listeners = obj[kListeners] ??= []; + listeners.push([name, listener]); + obj.on(name, listener); + return obj; + } + function removeAllListeners(obj) { + for (const [name, listener] of obj[kListeners] ?? []) { + obj.removeListener(name, listener); + } + obj[kListeners] = null; + } + function errorRequest(client, request, err) { + try { + request.onError(err); + assert(request.aborted); + } catch (err2) { + client.emit("error", err2); + } + } + var kEnumerableProperty = /* @__PURE__ */ Object.create(null); + kEnumerableProperty.enumerable = true; + var normalizedMethodRecordsBase = { + delete: "DELETE", + DELETE: "DELETE", + get: "GET", + GET: "GET", + head: "HEAD", + HEAD: "HEAD", + options: "OPTIONS", + OPTIONS: "OPTIONS", + post: "POST", + POST: "POST", + put: "PUT", + PUT: "PUT" + }; + var normalizedMethodRecords = { + ...normalizedMethodRecordsBase, + patch: "patch", + PATCH: "PATCH" + }; + Object.setPrototypeOf(normalizedMethodRecordsBase, null); + Object.setPrototypeOf(normalizedMethodRecords, null); + module.exports = { + kEnumerableProperty, + nop, + isDisturbed, + isErrored, + isReadable, + toUSVString, + isUSVString, + isBlobLike, + parseOrigin, + parseURL, + getServerName, + isStream, + isIterable, + isAsyncIterable, + isDestroyed, + headerNameToString, + bufferToLowerCasedHeaderName, + addListener, + removeAllListeners, + errorRequest, + parseRawHeaders, + parseHeaders, + parseKeepAliveTimeout, + destroy, + bodyLength, + deepClone, + ReadableStreamFrom, + isBuffer, + validateHandler, + getSocketInfo, + isFormDataLike, + buildURL, + addAbortListener, + isValidHTTPToken, + isValidHeaderValue, + isTokenCharCode, + parseRangeHeader, + normalizedMethodRecordsBase, + normalizedMethodRecords, + isValidPort, + isHttpOrHttpsPrefixed, + nodeMajor, + nodeMinor, + safeHTTPMethods: ["GET", "HEAD", "OPTIONS", "TRACE"], + wrapRequestBody + }; + } +}); + +// +var require_diagnostics = __commonJS({ + ""(exports, module) { + "use strict"; + var diagnosticsChannel = __require("node:diagnostics_channel"); + var util = __require("node:util"); + var undiciDebugLog = util.debuglog("undici"); + var fetchDebuglog = util.debuglog("fetch"); + var websocketDebuglog = util.debuglog("websocket"); + var isClientSet = false; + var channels = { + // Client + beforeConnect: diagnosticsChannel.channel("undici:client:beforeConnect"), + connected: diagnosticsChannel.channel("undici:client:connected"), + connectError: diagnosticsChannel.channel("undici:client:connectError"), + sendHeaders: diagnosticsChannel.channel("undici:client:sendHeaders"), + // Request + create: diagnosticsChannel.channel("undici:request:create"), + bodySent: diagnosticsChannel.channel("undici:request:bodySent"), + headers: diagnosticsChannel.channel("undici:request:headers"), + trailers: diagnosticsChannel.channel("undici:request:trailers"), + error: diagnosticsChannel.channel("undici:request:error"), + // WebSocket + open: diagnosticsChannel.channel("undici:websocket:open"), + close: diagnosticsChannel.channel("undici:websocket:close"), + socketError: diagnosticsChannel.channel("undici:websocket:socket_error"), + ping: diagnosticsChannel.channel("undici:websocket:ping"), + pong: diagnosticsChannel.channel("undici:websocket:pong") + }; + if (undiciDebugLog.enabled || fetchDebuglog.enabled) { + const debuglog = fetchDebuglog.enabled ? fetchDebuglog : undiciDebugLog; + diagnosticsChannel.channel("undici:client:beforeConnect").subscribe((evt) => { + const { + connectParams: { version, protocol, port, host } + } = evt; + debuglog( + "connecting to %s using %s%s", + `${host}${port ? `:${port}` : ""}`, + protocol, + version + ); + }); + diagnosticsChannel.channel("undici:client:connected").subscribe((evt) => { + const { + connectParams: { version, protocol, port, host } + } = evt; + debuglog( + "connected to %s using %s%s", + `${host}${port ? `:${port}` : ""}`, + protocol, + version + ); + }); + diagnosticsChannel.channel("undici:client:connectError").subscribe((evt) => { + const { + connectParams: { version, protocol, port, host }, + error: error2 + } = evt; + debuglog( + "connection to %s using %s%s errored - %s", + `${host}${port ? `:${port}` : ""}`, + protocol, + version, + error2.message + ); + }); + diagnosticsChannel.channel("undici:client:sendHeaders").subscribe((evt) => { + const { + request: { method, path: path2, origin } + } = evt; + debuglog("sending request to %s %s/%s", method, origin, path2); + }); + diagnosticsChannel.channel("undici:request:headers").subscribe((evt) => { + const { + request: { method, path: path2, origin }, + response: { statusCode } + } = evt; + debuglog( + "received response to %s %s/%s - HTTP %d", + method, + origin, + path2, + statusCode + ); + }); + diagnosticsChannel.channel("undici:request:trailers").subscribe((evt) => { + const { + request: { method, path: path2, origin } + } = evt; + debuglog("trailers received from %s %s/%s", method, origin, path2); + }); + diagnosticsChannel.channel("undici:request:error").subscribe((evt) => { + const { + request: { method, path: path2, origin }, + error: error2 + } = evt; + debuglog( + "request to %s %s/%s errored - %s", + method, + origin, + path2, + error2.message + ); + }); + isClientSet = true; + } + if (websocketDebuglog.enabled) { + if (!isClientSet) { + const debuglog = undiciDebugLog.enabled ? undiciDebugLog : websocketDebuglog; + diagnosticsChannel.channel("undici:client:beforeConnect").subscribe((evt) => { + const { + connectParams: { version, protocol, port, host } + } = evt; + debuglog( + "connecting to %s%s using %s%s", + host, + port ? `:${port}` : "", + protocol, + version + ); + }); + diagnosticsChannel.channel("undici:client:connected").subscribe((evt) => { + const { + connectParams: { version, protocol, port, host } + } = evt; + debuglog( + "connected to %s%s using %s%s", + host, + port ? `:${port}` : "", + protocol, + version + ); + }); + diagnosticsChannel.channel("undici:client:connectError").subscribe((evt) => { + const { + connectParams: { version, protocol, port, host }, + error: error2 + } = evt; + debuglog( + "connection to %s%s using %s%s errored - %s", + host, + port ? `:${port}` : "", + protocol, + version, + error2.message + ); + }); + diagnosticsChannel.channel("undici:client:sendHeaders").subscribe((evt) => { + const { + request: { method, path: path2, origin } + } = evt; + debuglog("sending request to %s %s/%s", method, origin, path2); + }); + } + diagnosticsChannel.channel("undici:websocket:open").subscribe((evt) => { + const { + address: { address, port } + } = evt; + websocketDebuglog("connection opened %s%s", address, port ? `:${port}` : ""); + }); + diagnosticsChannel.channel("undici:websocket:close").subscribe((evt) => { + const { websocket, code, reason } = evt; + websocketDebuglog( + "closed connection to %s - %s %s", + websocket.url, + code, + reason + ); + }); + diagnosticsChannel.channel("undici:websocket:socket_error").subscribe((err) => { + websocketDebuglog("connection errored - %s", err.message); + }); + diagnosticsChannel.channel("undici:websocket:ping").subscribe((evt) => { + websocketDebuglog("ping received"); + }); + diagnosticsChannel.channel("undici:websocket:pong").subscribe((evt) => { + websocketDebuglog("pong received"); + }); + } + module.exports = { + channels + }; + } +}); + +// +var require_request = __commonJS({ + ""(exports, module) { + "use strict"; + var { + InvalidArgumentError, + NotSupportedError + } = require_errors(); + var assert = __require("node:assert"); + var { + isValidHTTPToken, + isValidHeaderValue, + isStream, + destroy, + isBuffer, + isFormDataLike, + isIterable, + isBlobLike, + buildURL, + validateHandler, + getServerName, + normalizedMethodRecords + } = require_util(); + var { channels } = require_diagnostics(); + var { headerNameLowerCasedRecord } = require_constants(); + var invalidPathRegex = /[^\u0021-\u00ff]/; + var kHandler = Symbol("handler"); + var Request = class { + constructor(origin, { + path: path2, + method, + body, + headers, + query, + idempotent, + blocking, + upgrade, + headersTimeout, + bodyTimeout, + reset, + throwOnError, + expectContinue, + servername + }, handler) { + if (typeof path2 !== "string") { + throw new InvalidArgumentError("path must be a string"); + } else if (path2[0] !== "/" && !(path2.startsWith("http://") || path2.startsWith("https://")) && method !== "CONNECT") { + throw new InvalidArgumentError("path must be an absolute URL or start with a slash"); + } else if (invalidPathRegex.test(path2)) { + throw new InvalidArgumentError("invalid request path"); + } + if (typeof method !== "string") { + throw new InvalidArgumentError("method must be a string"); + } else if (normalizedMethodRecords[method] === void 0 && !isValidHTTPToken(method)) { + throw new InvalidArgumentError("invalid request method"); + } + if (upgrade && typeof upgrade !== "string") { + throw new InvalidArgumentError("upgrade must be a string"); + } + if (upgrade && !isValidHeaderValue(upgrade)) { + throw new InvalidArgumentError("invalid upgrade header"); + } + if (headersTimeout != null && (!Number.isFinite(headersTimeout) || headersTimeout < 0)) { + throw new InvalidArgumentError("invalid headersTimeout"); + } + if (bodyTimeout != null && (!Number.isFinite(bodyTimeout) || bodyTimeout < 0)) { + throw new InvalidArgumentError("invalid bodyTimeout"); + } + if (reset != null && typeof reset !== "boolean") { + throw new InvalidArgumentError("invalid reset"); + } + if (expectContinue != null && typeof expectContinue !== "boolean") { + throw new InvalidArgumentError("invalid expectContinue"); + } + this.headersTimeout = headersTimeout; + this.bodyTimeout = bodyTimeout; + this.throwOnError = throwOnError === true; + this.method = method; + this.abort = null; + if (body == null) { + this.body = null; + } else if (isStream(body)) { + this.body = body; + const rState = this.body._readableState; + if (!rState || !rState.autoDestroy) { + this.endHandler = function autoDestroy() { + destroy(this); + }; + this.body.on("end", this.endHandler); + } + this.errorHandler = (err) => { + if (this.abort) { + this.abort(err); + } else { + this.error = err; + } + }; + this.body.on("error", this.errorHandler); + } else if (isBuffer(body)) { + this.body = body.byteLength ? body : null; + } else if (ArrayBuffer.isView(body)) { + this.body = body.buffer.byteLength ? Buffer.from(body.buffer, body.byteOffset, body.byteLength) : null; + } else if (body instanceof ArrayBuffer) { + this.body = body.byteLength ? Buffer.from(body) : null; + } else if (typeof body === "string") { + this.body = body.length ? Buffer.from(body) : null; + } else if (isFormDataLike(body) || isIterable(body) || isBlobLike(body)) { + this.body = body; + } else { + throw new InvalidArgumentError("body must be a string, a Buffer, a Readable stream, an iterable, or an async iterable"); + } + this.completed = false; + this.aborted = false; + this.upgrade = upgrade || null; + this.path = query ? buildURL(path2, query) : path2; + this.origin = origin; + this.idempotent = idempotent == null ? method === "HEAD" || method === "GET" : idempotent; + this.blocking = blocking == null ? false : blocking; + this.reset = reset == null ? null : reset; + this.host = null; + this.contentLength = null; + this.contentType = null; + this.headers = []; + this.expectContinue = expectContinue != null ? expectContinue : false; + if (Array.isArray(headers)) { + if (headers.length % 2 !== 0) { + throw new InvalidArgumentError("headers array must be even"); + } + for (let i = 0; i < headers.length; i += 2) { + processHeader(this, headers[i], headers[i + 1]); + } + } else if (headers && typeof headers === "object") { + if (headers[Symbol.iterator]) { + for (const header of headers) { + if (!Array.isArray(header) || header.length !== 2) { + throw new InvalidArgumentError("headers must be in key-value pair format"); + } + processHeader(this, header[0], header[1]); + } + } else { + const keys = Object.keys(headers); + for (let i = 0; i < keys.length; ++i) { + processHeader(this, keys[i], headers[keys[i]]); + } + } + } else if (headers != null) { + throw new InvalidArgumentError("headers must be an object or an array"); + } + validateHandler(handler, method, upgrade); + this.servername = servername || getServerName(this.host); + this[kHandler] = handler; + if (channels.create.hasSubscribers) { + channels.create.publish({ request: this }); + } + } + onBodySent(chunk) { + if (this[kHandler].onBodySent) { + try { + return this[kHandler].onBodySent(chunk); + } catch (err) { + this.abort(err); + } + } + } + onRequestSent() { + if (channels.bodySent.hasSubscribers) { + channels.bodySent.publish({ request: this }); + } + if (this[kHandler].onRequestSent) { + try { + return this[kHandler].onRequestSent(); + } catch (err) { + this.abort(err); + } + } + } + onConnect(abort) { + assert(!this.aborted); + assert(!this.completed); + if (this.error) { + abort(this.error); + } else { + this.abort = abort; + return this[kHandler].onConnect(abort); + } + } + onResponseStarted() { + return this[kHandler].onResponseStarted?.(); + } + onHeaders(statusCode, headers, resume, statusText) { + assert(!this.aborted); + assert(!this.completed); + if (channels.headers.hasSubscribers) { + channels.headers.publish({ request: this, response: { statusCode, headers, statusText } }); + } + try { + return this[kHandler].onHeaders(statusCode, headers, resume, statusText); + } catch (err) { + this.abort(err); + } + } + onData(chunk) { + assert(!this.aborted); + assert(!this.completed); + try { + return this[kHandler].onData(chunk); + } catch (err) { + this.abort(err); + return false; + } + } + onUpgrade(statusCode, headers, socket) { + assert(!this.aborted); + assert(!this.completed); + return this[kHandler].onUpgrade(statusCode, headers, socket); + } + onComplete(trailers) { + this.onFinally(); + assert(!this.aborted); + this.completed = true; + if (channels.trailers.hasSubscribers) { + channels.trailers.publish({ request: this, trailers }); + } + try { + return this[kHandler].onComplete(trailers); + } catch (err) { + this.onError(err); + } + } + onError(error2) { + this.onFinally(); + if (channels.error.hasSubscribers) { + channels.error.publish({ request: this, error: error2 }); + } + if (this.aborted) { + return; + } + this.aborted = true; + return this[kHandler].onError(error2); + } + onFinally() { + if (this.errorHandler) { + this.body.off("error", this.errorHandler); + this.errorHandler = null; + } + if (this.endHandler) { + this.body.off("end", this.endHandler); + this.endHandler = null; + } + } + addHeader(key, value) { + processHeader(this, key, value); + return this; + } + }; + function processHeader(request, key, val) { + if (val && (typeof val === "object" && !Array.isArray(val))) { + throw new InvalidArgumentError(`invalid ${key} header`); + } else if (val === void 0) { + return; + } + let headerName = headerNameLowerCasedRecord[key]; + if (headerName === void 0) { + headerName = key.toLowerCase(); + if (headerNameLowerCasedRecord[headerName] === void 0 && !isValidHTTPToken(headerName)) { + throw new InvalidArgumentError("invalid header key"); + } + } + if (Array.isArray(val)) { + const arr = []; + for (let i = 0; i < val.length; i++) { + if (typeof val[i] === "string") { + if (!isValidHeaderValue(val[i])) { + throw new InvalidArgumentError(`invalid ${key} header`); + } + arr.push(val[i]); + } else if (val[i] === null) { + arr.push(""); + } else if (typeof val[i] === "object") { + throw new InvalidArgumentError(`invalid ${key} header`); + } else { + arr.push(`${val[i]}`); + } + } + val = arr; + } else if (typeof val === "string") { + if (!isValidHeaderValue(val)) { + throw new InvalidArgumentError(`invalid ${key} header`); + } + } else if (val === null) { + val = ""; + } else { + val = `${val}`; + } + if (headerName === "host") { + if (request.host !== null) { + throw new InvalidArgumentError("duplicate host header"); + } + if (typeof val !== "string") { + throw new InvalidArgumentError("invalid host header"); + } + request.host = val; + } else if (headerName === "content-length") { + if (request.contentLength !== null) { + throw new InvalidArgumentError("duplicate content-length header"); + } + request.contentLength = parseInt(val, 10); + if (!Number.isFinite(request.contentLength)) { + throw new InvalidArgumentError("invalid content-length header"); + } + } else if (request.contentType === null && headerName === "content-type") { + request.contentType = val; + request.headers.push(key, val); + } else if (headerName === "transfer-encoding" || headerName === "keep-alive" || headerName === "upgrade") { + throw new InvalidArgumentError(`invalid ${headerName} header`); + } else if (headerName === "connection") { + const value = typeof val === "string" ? val.toLowerCase() : null; + if (value !== "close" && value !== "keep-alive") { + throw new InvalidArgumentError("invalid connection header"); + } + if (value === "close") { + request.reset = true; + } + } else if (headerName === "expect") { + throw new NotSupportedError("expect header not supported"); + } else { + request.headers.push(key, val); + } + } + module.exports = Request; + } +}); + +// +var require_dispatcher = __commonJS({ + ""(exports, module) { + "use strict"; + var EventEmitter = __require("node:events"); + var Dispatcher = class extends EventEmitter { + dispatch() { + throw new Error("not implemented"); + } + close() { + throw new Error("not implemented"); + } + destroy() { + throw new Error("not implemented"); + } + compose(...args) { + const interceptors = Array.isArray(args[0]) ? args[0] : args; + let dispatch = this.dispatch.bind(this); + for (const interceptor of interceptors) { + if (interceptor == null) { + continue; + } + if (typeof interceptor !== "function") { + throw new TypeError(`invalid interceptor, expected function received ${typeof interceptor}`); + } + dispatch = interceptor(dispatch); + if (dispatch == null || typeof dispatch !== "function" || dispatch.length !== 2) { + throw new TypeError("invalid interceptor"); + } + } + return new ComposedDispatcher(this, dispatch); + } + }; + var ComposedDispatcher = class extends Dispatcher { + #dispatcher = null; + #dispatch = null; + constructor(dispatcher, dispatch) { + super(); + this.#dispatcher = dispatcher; + this.#dispatch = dispatch; + } + dispatch(...args) { + this.#dispatch(...args); + } + close(...args) { + return this.#dispatcher.close(...args); + } + destroy(...args) { + return this.#dispatcher.destroy(...args); + } + }; + module.exports = Dispatcher; + } +}); + +// +var require_dispatcher_base = __commonJS({ + ""(exports, module) { + "use strict"; + var Dispatcher = require_dispatcher(); + var { + ClientDestroyedError, + ClientClosedError, + InvalidArgumentError + } = require_errors(); + var { kDestroy, kClose, kClosed, kDestroyed, kDispatch, kInterceptors } = require_symbols(); + var kOnDestroyed = Symbol("onDestroyed"); + var kOnClosed = Symbol("onClosed"); + var kInterceptedDispatch = Symbol("Intercepted Dispatch"); + var kWebSocketOptions = Symbol("webSocketOptions"); + var DispatcherBase = class extends Dispatcher { + constructor(opts) { + super(); + this[kDestroyed] = false; + this[kOnDestroyed] = null; + this[kClosed] = false; + this[kOnClosed] = []; + this[kWebSocketOptions] = opts?.webSocket ?? {}; + } + get webSocketOptions() { + return { + maxPayloadSize: this[kWebSocketOptions].maxPayloadSize ?? 128 * 1024 * 1024 + }; + } + get destroyed() { + return this[kDestroyed]; + } + get closed() { + return this[kClosed]; + } + get interceptors() { + return this[kInterceptors]; + } + set interceptors(newInterceptors) { + if (newInterceptors) { + for (let i = newInterceptors.length - 1; i >= 0; i--) { + const interceptor = this[kInterceptors][i]; + if (typeof interceptor !== "function") { + throw new InvalidArgumentError("interceptor must be an function"); + } + } + } + this[kInterceptors] = newInterceptors; + } + close(callback) { + if (callback === void 0) { + return new Promise((resolve, reject) => { + this.close((err, data) => { + return err ? reject(err) : resolve(data); + }); + }); + } + if (typeof callback !== "function") { + throw new InvalidArgumentError("invalid callback"); + } + if (this[kDestroyed]) { + queueMicrotask(() => callback(new ClientDestroyedError(), null)); + return; + } + if (this[kClosed]) { + if (this[kOnClosed]) { + this[kOnClosed].push(callback); + } else { + queueMicrotask(() => callback(null, null)); + } + return; + } + this[kClosed] = true; + this[kOnClosed].push(callback); + const onClosed = () => { + const callbacks = this[kOnClosed]; + this[kOnClosed] = null; + for (let i = 0; i < callbacks.length; i++) { + callbacks[i](null, null); + } + }; + this[kClose]().then(() => this.destroy()).then(() => { + queueMicrotask(onClosed); + }); + } + destroy(err, callback) { + if (typeof err === "function") { + callback = err; + err = null; + } + if (callback === void 0) { + return new Promise((resolve, reject) => { + this.destroy(err, (err2, data) => { + return err2 ? ( + /* istanbul ignore next: should never error */ + reject(err2) + ) : resolve(data); + }); + }); + } + if (typeof callback !== "function") { + throw new InvalidArgumentError("invalid callback"); + } + if (this[kDestroyed]) { + if (this[kOnDestroyed]) { + this[kOnDestroyed].push(callback); + } else { + queueMicrotask(() => callback(null, null)); + } + return; + } + if (!err) { + err = new ClientDestroyedError(); + } + this[kDestroyed] = true; + this[kOnDestroyed] = this[kOnDestroyed] || []; + this[kOnDestroyed].push(callback); + const onDestroyed = () => { + const callbacks = this[kOnDestroyed]; + this[kOnDestroyed] = null; + for (let i = 0; i < callbacks.length; i++) { + callbacks[i](null, null); + } + }; + this[kDestroy](err).then(() => { + queueMicrotask(onDestroyed); + }); + } + [kInterceptedDispatch](opts, handler) { + if (!this[kInterceptors] || this[kInterceptors].length === 0) { + this[kInterceptedDispatch] = this[kDispatch]; + return this[kDispatch](opts, handler); + } + let dispatch = this[kDispatch].bind(this); + for (let i = this[kInterceptors].length - 1; i >= 0; i--) { + dispatch = this[kInterceptors][i](dispatch); + } + this[kInterceptedDispatch] = dispatch; + return dispatch(opts, handler); + } + dispatch(opts, handler) { + if (!handler || typeof handler !== "object") { + throw new InvalidArgumentError("handler must be an object"); + } + try { + if (!opts || typeof opts !== "object") { + throw new InvalidArgumentError("opts must be an object."); + } + if (this[kDestroyed] || this[kOnDestroyed]) { + throw new ClientDestroyedError(); + } + if (this[kClosed]) { + throw new ClientClosedError(); + } + return this[kInterceptedDispatch](opts, handler); + } catch (err) { + if (typeof handler.onError !== "function") { + throw new InvalidArgumentError("invalid onError method"); + } + handler.onError(err); + return false; + } + } + }; + module.exports = DispatcherBase; + } +}); + +// +var require_timers = __commonJS({ + ""(exports, module) { + "use strict"; + var fastNow = 0; + var RESOLUTION_MS = 1e3; + var TICK_MS = (RESOLUTION_MS >> 1) - 1; + var fastNowTimeout; + var kFastTimer = Symbol("kFastTimer"); + var fastTimers = []; + var NOT_IN_LIST = -2; + var TO_BE_CLEARED = -1; + var PENDING = 0; + var ACTIVE = 1; + function onTick() { + fastNow += TICK_MS; + let idx = 0; + let len = fastTimers.length; + while (idx < len) { + const timer = fastTimers[idx]; + if (timer._state === PENDING) { + timer._idleStart = fastNow - TICK_MS; + timer._state = ACTIVE; + } else if (timer._state === ACTIVE && fastNow >= timer._idleStart + timer._idleTimeout) { + timer._state = TO_BE_CLEARED; + timer._idleStart = -1; + timer._onTimeout(timer._timerArg); + } + if (timer._state === TO_BE_CLEARED) { + timer._state = NOT_IN_LIST; + if (--len !== 0) { + fastTimers[idx] = fastTimers[len]; + } + } else { + ++idx; + } + } + fastTimers.length = len; + if (fastTimers.length !== 0) { + refreshTimeout(); + } + } + function refreshTimeout() { + if (fastNowTimeout) { + fastNowTimeout.refresh(); + } else { + clearTimeout(fastNowTimeout); + fastNowTimeout = setTimeout(onTick, TICK_MS); + if (fastNowTimeout.unref) { + fastNowTimeout.unref(); + } + } + } + var FastTimer = class { + [kFastTimer] = true; + /** + * The state of the timer, which can be one of the following: + * - NOT_IN_LIST (-2) + * - TO_BE_CLEARED (-1) + * - PENDING (0) + * - ACTIVE (1) + * + * @type {-2|-1|0|1} + * @private + */ + _state = NOT_IN_LIST; + /** + * The number of milliseconds to wait before calling the callback. + * + * @type {number} + * @private + */ + _idleTimeout = -1; + /** + * The time in milliseconds when the timer was started. This value is used to + * calculate when the timer should expire. + * + * @type {number} + * @default -1 + * @private + */ + _idleStart = -1; + /** + * The function to be executed when the timer expires. + * @type {Function} + * @private + */ + _onTimeout; + /** + * The argument to be passed to the callback when the timer expires. + * + * @type {*} + * @private + */ + _timerArg; + /** + * @constructor + * @param {Function} callback A function to be executed after the timer + * expires. + * @param {number} delay The time, in milliseconds that the timer should wait + * before the specified function or code is executed. + * @param {*} arg + */ + constructor(callback, delay, arg) { + this._onTimeout = callback; + this._idleTimeout = delay; + this._timerArg = arg; + this.refresh(); + } + /** + * Sets the timer's start time to the current time, and reschedules the timer + * to call its callback at the previously specified duration adjusted to the + * current time. + * Using this on a timer that has already called its callback will reactivate + * the timer. + * + * @returns {void} + */ + refresh() { + if (this._state === NOT_IN_LIST) { + fastTimers.push(this); + } + if (!fastNowTimeout || fastTimers.length === 1) { + refreshTimeout(); + } + this._state = PENDING; + } + /** + * The `clear` method cancels the timer, preventing it from executing. + * + * @returns {void} + * @private + */ + clear() { + this._state = TO_BE_CLEARED; + this._idleStart = -1; + } + }; + module.exports = { + /** + * The setTimeout() method sets a timer which executes a function once the + * timer expires. + * @param {Function} callback A function to be executed after the timer + * expires. + * @param {number} delay The time, in milliseconds that the timer should + * wait before the specified function or code is executed. + * @param {*} [arg] An optional argument to be passed to the callback function + * when the timer expires. + * @returns {NodeJS.Timeout|FastTimer} + */ + setTimeout(callback, delay, arg) { + return delay <= RESOLUTION_MS ? setTimeout(callback, delay, arg) : new FastTimer(callback, delay, arg); + }, + /** + * The clearTimeout method cancels an instantiated Timer previously created + * by calling setTimeout. + * + * @param {NodeJS.Timeout|FastTimer} timeout + */ + clearTimeout(timeout) { + if (timeout[kFastTimer]) { + timeout.clear(); + } else { + clearTimeout(timeout); + } + }, + /** + * The setFastTimeout() method sets a fastTimer which executes a function once + * the timer expires. + * @param {Function} callback A function to be executed after the timer + * expires. + * @param {number} delay The time, in milliseconds that the timer should + * wait before the specified function or code is executed. + * @param {*} [arg] An optional argument to be passed to the callback function + * when the timer expires. + * @returns {FastTimer} + */ + setFastTimeout(callback, delay, arg) { + return new FastTimer(callback, delay, arg); + }, + /** + * The clearTimeout method cancels an instantiated FastTimer previously + * created by calling setFastTimeout. + * + * @param {FastTimer} timeout + */ + clearFastTimeout(timeout) { + timeout.clear(); + }, + /** + * The now method returns the value of the internal fast timer clock. + * + * @returns {number} + */ + now() { + return fastNow; + }, + /** + * Trigger the onTick function to process the fastTimers array. + * Exported for testing purposes only. + * Marking as deprecated to discourage any use outside of testing. + * @deprecated + * @param {number} [delay=0] The delay in milliseconds to add to the now value. + */ + tick(delay = 0) { + fastNow += delay - RESOLUTION_MS + 1; + onTick(); + onTick(); + }, + /** + * Reset FastTimers. + * Exported for testing purposes only. + * Marking as deprecated to discourage any use outside of testing. + * @deprecated + */ + reset() { + fastNow = 0; + fastTimers.length = 0; + clearTimeout(fastNowTimeout); + fastNowTimeout = null; + }, + /** + * Exporting for testing purposes only. + * Marking as deprecated to discourage any use outside of testing. + * @deprecated + */ + kFastTimer + }; + } +}); + +// +var require_connect = __commonJS({ + ""(exports, module) { + "use strict"; + var net = __require("node:net"); + var assert = __require("node:assert"); + var util = require_util(); + var { InvalidArgumentError, ConnectTimeoutError } = require_errors(); + var timers = require_timers(); + function noop() { + } + var tls; + var SessionCache; + if (global.FinalizationRegistry && !(process.env.NODE_V8_COVERAGE || process.env.UNDICI_NO_FG)) { + SessionCache = class WeakSessionCache { + constructor(maxCachedSessions) { + this._maxCachedSessions = maxCachedSessions; + this._sessionCache = /* @__PURE__ */ new Map(); + this._sessionRegistry = new global.FinalizationRegistry((key) => { + if (this._sessionCache.size < this._maxCachedSessions) { + return; + } + const ref = this._sessionCache.get(key); + if (ref !== void 0 && ref.deref() === void 0) { + this._sessionCache.delete(key); + } + }); + } + get(sessionKey) { + const ref = this._sessionCache.get(sessionKey); + return ref ? ref.deref() : null; + } + set(sessionKey, session) { + if (this._maxCachedSessions === 0) { + return; + } + this._sessionCache.set(sessionKey, new WeakRef(session)); + this._sessionRegistry.register(session, sessionKey); + } + }; + } else { + SessionCache = class SimpleSessionCache { + constructor(maxCachedSessions) { + this._maxCachedSessions = maxCachedSessions; + this._sessionCache = /* @__PURE__ */ new Map(); + } + get(sessionKey) { + return this._sessionCache.get(sessionKey); + } + set(sessionKey, session) { + if (this._maxCachedSessions === 0) { + return; + } + if (this._sessionCache.size >= this._maxCachedSessions) { + const { value: oldestKey } = this._sessionCache.keys().next(); + this._sessionCache.delete(oldestKey); + } + this._sessionCache.set(sessionKey, session); + } + }; + } + function buildConnector({ allowH2, maxCachedSessions, socketPath, timeout, session: customSession, ...opts }) { + if (maxCachedSessions != null && (!Number.isInteger(maxCachedSessions) || maxCachedSessions < 0)) { + throw new InvalidArgumentError("maxCachedSessions must be a positive integer or zero"); + } + const options = { path: socketPath, ...opts }; + const sessionCache = new SessionCache(maxCachedSessions == null ? 100 : maxCachedSessions); + timeout = timeout == null ? 1e4 : timeout; + allowH2 = allowH2 != null ? allowH2 : false; + return function connect({ hostname, host, protocol, port, servername, localAddress, httpSocket }, callback) { + let socket; + if (protocol === "https:") { + if (!tls) { + tls = __require("node:tls"); + } + servername = servername || options.servername || util.getServerName(host) || null; + const sessionKey = servername || hostname; + assert(sessionKey); + const session = customSession || sessionCache.get(sessionKey) || null; + port = port || 443; + socket = tls.connect({ + highWaterMark: 16384, + // TLS in node can't have bigger HWM anyway... + ...options, + servername, + session, + localAddress, + // TODO(HTTP/2): Add support for h2c + ALPNProtocols: allowH2 ? ["http/1.1", "h2"] : ["http/1.1"], + socket: httpSocket, + // upgrade socket connection + port, + host: hostname + }); + socket.on("session", function(session2) { + sessionCache.set(sessionKey, session2); + }); + } else { + assert(!httpSocket, "httpSocket can only be sent on TLS update"); + port = port || 80; + socket = net.connect({ + highWaterMark: 64 * 1024, + // Same as nodejs fs streams. + ...options, + localAddress, + port, + host: hostname + }); + } + if (options.keepAlive == null || options.keepAlive) { + const keepAliveInitialDelay = options.keepAliveInitialDelay === void 0 ? 6e4 : options.keepAliveInitialDelay; + socket.setKeepAlive(true, keepAliveInitialDelay); + } + const clearConnectTimeout = setupConnectTimeout(new WeakRef(socket), { timeout, hostname, port }); + socket.setNoDelay(true).once(protocol === "https:" ? "secureConnect" : "connect", function() { + queueMicrotask(clearConnectTimeout); + if (callback) { + const cb = callback; + callback = null; + cb(null, this); + } + }).on("error", function(err) { + queueMicrotask(clearConnectTimeout); + if (callback) { + const cb = callback; + callback = null; + cb(err); + } + }); + return socket; + }; + } + var setupConnectTimeout = process.platform === "win32" ? (socketWeakRef, opts) => { + if (!opts.timeout) { + return noop; + } + let s1 = null; + let s2 = null; + const fastTimer = timers.setFastTimeout(() => { + s1 = setImmediate(() => { + s2 = setImmediate(() => onConnectTimeout(socketWeakRef.deref(), opts)); + }); + }, opts.timeout); + return () => { + timers.clearFastTimeout(fastTimer); + clearImmediate(s1); + clearImmediate(s2); + }; + } : (socketWeakRef, opts) => { + if (!opts.timeout) { + return noop; + } + let s1 = null; + const fastTimer = timers.setFastTimeout(() => { + s1 = setImmediate(() => { + onConnectTimeout(socketWeakRef.deref(), opts); + }); + }, opts.timeout); + return () => { + timers.clearFastTimeout(fastTimer); + clearImmediate(s1); + }; + }; + function onConnectTimeout(socket, opts) { + if (socket == null) { + return; + } + let message = "Connect Timeout Error"; + if (Array.isArray(socket.autoSelectFamilyAttemptedAddresses)) { + message += ` (attempted addresses: ${socket.autoSelectFamilyAttemptedAddresses.join(", ")},`; + } else { + message += ` (attempted address: ${opts.hostname}:${opts.port},`; + } + message += ` timeout: ${opts.timeout}ms)`; + util.destroy(socket, new ConnectTimeoutError(message)); + } + module.exports = buildConnector; + } +}); + +// +var require_utils = __commonJS({ + ""(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.enumToMap = void 0; + function enumToMap(obj) { + const res = {}; + Object.keys(obj).forEach((key) => { + const value = obj[key]; + if (typeof value === "number") { + res[key] = value; + } + }); + return res; + } + exports.enumToMap = enumToMap; + } +}); + +// +var require_constants2 = __commonJS({ + ""(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.SPECIAL_HEADERS = exports.HEADER_STATE = exports.MINOR = exports.MAJOR = exports.CONNECTION_TOKEN_CHARS = exports.HEADER_CHARS = exports.TOKEN = exports.STRICT_TOKEN = exports.HEX = exports.URL_CHAR = exports.STRICT_URL_CHAR = exports.USERINFO_CHARS = exports.MARK = exports.ALPHANUM = exports.NUM = exports.HEX_MAP = exports.NUM_MAP = exports.ALPHA = exports.FINISH = exports.H_METHOD_MAP = exports.METHOD_MAP = exports.METHODS_RTSP = exports.METHODS_ICE = exports.METHODS_HTTP = exports.METHODS = exports.LENIENT_FLAGS = exports.FLAGS = exports.TYPE = exports.ERROR = void 0; + var utils_1 = require_utils(); + var ERROR; + (function(ERROR2) { + ERROR2[ERROR2["OK"] = 0] = "OK"; + ERROR2[ERROR2["INTERNAL"] = 1] = "INTERNAL"; + ERROR2[ERROR2["STRICT"] = 2] = "STRICT"; + ERROR2[ERROR2["LF_EXPECTED"] = 3] = "LF_EXPECTED"; + ERROR2[ERROR2["UNEXPECTED_CONTENT_LENGTH"] = 4] = "UNEXPECTED_CONTENT_LENGTH"; + ERROR2[ERROR2["CLOSED_CONNECTION"] = 5] = "CLOSED_CONNECTION"; + ERROR2[ERROR2["INVALID_METHOD"] = 6] = "INVALID_METHOD"; + ERROR2[ERROR2["INVALID_URL"] = 7] = "INVALID_URL"; + ERROR2[ERROR2["INVALID_CONSTANT"] = 8] = "INVALID_CONSTANT"; + ERROR2[ERROR2["INVALID_VERSION"] = 9] = "INVALID_VERSION"; + ERROR2[ERROR2["INVALID_HEADER_TOKEN"] = 10] = "INVALID_HEADER_TOKEN"; + ERROR2[ERROR2["INVALID_CONTENT_LENGTH"] = 11] = "INVALID_CONTENT_LENGTH"; + ERROR2[ERROR2["INVALID_CHUNK_SIZE"] = 12] = "INVALID_CHUNK_SIZE"; + ERROR2[ERROR2["INVALID_STATUS"] = 13] = "INVALID_STATUS"; + ERROR2[ERROR2["INVALID_EOF_STATE"] = 14] = "INVALID_EOF_STATE"; + ERROR2[ERROR2["INVALID_TRANSFER_ENCODING"] = 15] = "INVALID_TRANSFER_ENCODING"; + ERROR2[ERROR2["CB_MESSAGE_BEGIN"] = 16] = "CB_MESSAGE_BEGIN"; + ERROR2[ERROR2["CB_HEADERS_COMPLETE"] = 17] = "CB_HEADERS_COMPLETE"; + ERROR2[ERROR2["CB_MESSAGE_COMPLETE"] = 18] = "CB_MESSAGE_COMPLETE"; + ERROR2[ERROR2["CB_CHUNK_HEADER"] = 19] = "CB_CHUNK_HEADER"; + ERROR2[ERROR2["CB_CHUNK_COMPLETE"] = 20] = "CB_CHUNK_COMPLETE"; + ERROR2[ERROR2["PAUSED"] = 21] = "PAUSED"; + ERROR2[ERROR2["PAUSED_UPGRADE"] = 22] = "PAUSED_UPGRADE"; + ERROR2[ERROR2["PAUSED_H2_UPGRADE"] = 23] = "PAUSED_H2_UPGRADE"; + ERROR2[ERROR2["USER"] = 24] = "USER"; + })(ERROR = exports.ERROR || (exports.ERROR = {})); + var TYPE; + (function(TYPE2) { + TYPE2[TYPE2["BOTH"] = 0] = "BOTH"; + TYPE2[TYPE2["REQUEST"] = 1] = "REQUEST"; + TYPE2[TYPE2["RESPONSE"] = 2] = "RESPONSE"; + })(TYPE = exports.TYPE || (exports.TYPE = {})); + var FLAGS; + (function(FLAGS2) { + FLAGS2[FLAGS2["CONNECTION_KEEP_ALIVE"] = 1] = "CONNECTION_KEEP_ALIVE"; + FLAGS2[FLAGS2["CONNECTION_CLOSE"] = 2] = "CONNECTION_CLOSE"; + FLAGS2[FLAGS2["CONNECTION_UPGRADE"] = 4] = "CONNECTION_UPGRADE"; + FLAGS2[FLAGS2["CHUNKED"] = 8] = "CHUNKED"; + FLAGS2[FLAGS2["UPGRADE"] = 16] = "UPGRADE"; + FLAGS2[FLAGS2["CONTENT_LENGTH"] = 32] = "CONTENT_LENGTH"; + FLAGS2[FLAGS2["SKIPBODY"] = 64] = "SKIPBODY"; + FLAGS2[FLAGS2["TRAILING"] = 128] = "TRAILING"; + FLAGS2[FLAGS2["TRANSFER_ENCODING"] = 512] = "TRANSFER_ENCODING"; + })(FLAGS = exports.FLAGS || (exports.FLAGS = {})); + var LENIENT_FLAGS; + (function(LENIENT_FLAGS2) { + LENIENT_FLAGS2[LENIENT_FLAGS2["HEADERS"] = 1] = "HEADERS"; + LENIENT_FLAGS2[LENIENT_FLAGS2["CHUNKED_LENGTH"] = 2] = "CHUNKED_LENGTH"; + LENIENT_FLAGS2[LENIENT_FLAGS2["KEEP_ALIVE"] = 4] = "KEEP_ALIVE"; + })(LENIENT_FLAGS = exports.LENIENT_FLAGS || (exports.LENIENT_FLAGS = {})); + var METHODS; + (function(METHODS2) { + METHODS2[METHODS2["DELETE"] = 0] = "DELETE"; + METHODS2[METHODS2["GET"] = 1] = "GET"; + METHODS2[METHODS2["HEAD"] = 2] = "HEAD"; + METHODS2[METHODS2["POST"] = 3] = "POST"; + METHODS2[METHODS2["PUT"] = 4] = "PUT"; + METHODS2[METHODS2["CONNECT"] = 5] = "CONNECT"; + METHODS2[METHODS2["OPTIONS"] = 6] = "OPTIONS"; + METHODS2[METHODS2["TRACE"] = 7] = "TRACE"; + METHODS2[METHODS2["COPY"] = 8] = "COPY"; + METHODS2[METHODS2["LOCK"] = 9] = "LOCK"; + METHODS2[METHODS2["MKCOL"] = 10] = "MKCOL"; + METHODS2[METHODS2["MOVE"] = 11] = "MOVE"; + METHODS2[METHODS2["PROPFIND"] = 12] = "PROPFIND"; + METHODS2[METHODS2["PROPPATCH"] = 13] = "PROPPATCH"; + METHODS2[METHODS2["SEARCH"] = 14] = "SEARCH"; + METHODS2[METHODS2["UNLOCK"] = 15] = "UNLOCK"; + METHODS2[METHODS2["BIND"] = 16] = "BIND"; + METHODS2[METHODS2["REBIND"] = 17] = "REBIND"; + METHODS2[METHODS2["UNBIND"] = 18] = "UNBIND"; + METHODS2[METHODS2["ACL"] = 19] = "ACL"; + METHODS2[METHODS2["REPORT"] = 20] = "REPORT"; + METHODS2[METHODS2["MKACTIVITY"] = 21] = "MKACTIVITY"; + METHODS2[METHODS2["CHECKOUT"] = 22] = "CHECKOUT"; + METHODS2[METHODS2["MERGE"] = 23] = "MERGE"; + METHODS2[METHODS2["M-SEARCH"] = 24] = "M-SEARCH"; + METHODS2[METHODS2["NOTIFY"] = 25] = "NOTIFY"; + METHODS2[METHODS2["SUBSCRIBE"] = 26] = "SUBSCRIBE"; + METHODS2[METHODS2["UNSUBSCRIBE"] = 27] = "UNSUBSCRIBE"; + METHODS2[METHODS2["PATCH"] = 28] = "PATCH"; + METHODS2[METHODS2["PURGE"] = 29] = "PURGE"; + METHODS2[METHODS2["MKCALENDAR"] = 30] = "MKCALENDAR"; + METHODS2[METHODS2["LINK"] = 31] = "LINK"; + METHODS2[METHODS2["UNLINK"] = 32] = "UNLINK"; + METHODS2[METHODS2["SOURCE"] = 33] = "SOURCE"; + METHODS2[METHODS2["PRI"] = 34] = "PRI"; + METHODS2[METHODS2["DESCRIBE"] = 35] = "DESCRIBE"; + METHODS2[METHODS2["ANNOUNCE"] = 36] = "ANNOUNCE"; + METHODS2[METHODS2["SETUP"] = 37] = "SETUP"; + METHODS2[METHODS2["PLAY"] = 38] = "PLAY"; + METHODS2[METHODS2["PAUSE"] = 39] = "PAUSE"; + METHODS2[METHODS2["TEARDOWN"] = 40] = "TEARDOWN"; + METHODS2[METHODS2["GET_PARAMETER"] = 41] = "GET_PARAMETER"; + METHODS2[METHODS2["SET_PARAMETER"] = 42] = "SET_PARAMETER"; + METHODS2[METHODS2["REDIRECT"] = 43] = "REDIRECT"; + METHODS2[METHODS2["RECORD"] = 44] = "RECORD"; + METHODS2[METHODS2["FLUSH"] = 45] = "FLUSH"; + })(METHODS = exports.METHODS || (exports.METHODS = {})); + exports.METHODS_HTTP = [ + METHODS.DELETE, + METHODS.GET, + METHODS.HEAD, + METHODS.POST, + METHODS.PUT, + METHODS.CONNECT, + METHODS.OPTIONS, + METHODS.TRACE, + METHODS.COPY, + METHODS.LOCK, + METHODS.MKCOL, + METHODS.MOVE, + METHODS.PROPFIND, + METHODS.PROPPATCH, + METHODS.SEARCH, + METHODS.UNLOCK, + METHODS.BIND, + METHODS.REBIND, + METHODS.UNBIND, + METHODS.ACL, + METHODS.REPORT, + METHODS.MKACTIVITY, + METHODS.CHECKOUT, + METHODS.MERGE, + METHODS["M-SEARCH"], + METHODS.NOTIFY, + METHODS.SUBSCRIBE, + METHODS.UNSUBSCRIBE, + METHODS.PATCH, + METHODS.PURGE, + METHODS.MKCALENDAR, + METHODS.LINK, + METHODS.UNLINK, + METHODS.PRI, + // TODO(indutny): should we allow it with HTTP? + METHODS.SOURCE + ]; + exports.METHODS_ICE = [ + METHODS.SOURCE + ]; + exports.METHODS_RTSP = [ + METHODS.OPTIONS, + METHODS.DESCRIBE, + METHODS.ANNOUNCE, + METHODS.SETUP, + METHODS.PLAY, + METHODS.PAUSE, + METHODS.TEARDOWN, + METHODS.GET_PARAMETER, + METHODS.SET_PARAMETER, + METHODS.REDIRECT, + METHODS.RECORD, + METHODS.FLUSH, + // For AirPlay + METHODS.GET, + METHODS.POST + ]; + exports.METHOD_MAP = utils_1.enumToMap(METHODS); + exports.H_METHOD_MAP = {}; + Object.keys(exports.METHOD_MAP).forEach((key) => { + if (/^H/.test(key)) { + exports.H_METHOD_MAP[key] = exports.METHOD_MAP[key]; + } + }); + var FINISH; + (function(FINISH2) { + FINISH2[FINISH2["SAFE"] = 0] = "SAFE"; + FINISH2[FINISH2["SAFE_WITH_CB"] = 1] = "SAFE_WITH_CB"; + FINISH2[FINISH2["UNSAFE"] = 2] = "UNSAFE"; + })(FINISH = exports.FINISH || (exports.FINISH = {})); + exports.ALPHA = []; + for (let i = "A".charCodeAt(0); i <= "Z".charCodeAt(0); i++) { + exports.ALPHA.push(String.fromCharCode(i)); + exports.ALPHA.push(String.fromCharCode(i + 32)); + } + exports.NUM_MAP = { + 0: 0, + 1: 1, + 2: 2, + 3: 3, + 4: 4, + 5: 5, + 6: 6, + 7: 7, + 8: 8, + 9: 9 + }; + exports.HEX_MAP = { + 0: 0, + 1: 1, + 2: 2, + 3: 3, + 4: 4, + 5: 5, + 6: 6, + 7: 7, + 8: 8, + 9: 9, + A: 10, + B: 11, + C: 12, + D: 13, + E: 14, + F: 15, + a: 10, + b: 11, + c: 12, + d: 13, + e: 14, + f: 15 + }; + exports.NUM = [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9" + ]; + exports.ALPHANUM = exports.ALPHA.concat(exports.NUM); + exports.MARK = ["-", "_", ".", "!", "~", "*", "'", "(", ")"]; + exports.USERINFO_CHARS = exports.ALPHANUM.concat(exports.MARK).concat(["%", ";", ":", "&", "=", "+", "$", ","]); + exports.STRICT_URL_CHAR = [ + "!", + '"', + "$", + "%", + "&", + "'", + "(", + ")", + "*", + "+", + ",", + "-", + ".", + "/", + ":", + ";", + "<", + "=", + ">", + "@", + "[", + "\\", + "]", + "^", + "_", + "`", + "{", + "|", + "}", + "~" + ].concat(exports.ALPHANUM); + exports.URL_CHAR = exports.STRICT_URL_CHAR.concat([" ", "\f"]); + for (let i = 128; i <= 255; i++) { + exports.URL_CHAR.push(i); + } + exports.HEX = exports.NUM.concat(["a", "b", "c", "d", "e", "f", "A", "B", "C", "D", "E", "F"]); + exports.STRICT_TOKEN = [ + "!", + "#", + "$", + "%", + "&", + "'", + "*", + "+", + "-", + ".", + "^", + "_", + "`", + "|", + "~" + ].concat(exports.ALPHANUM); + exports.TOKEN = exports.STRICT_TOKEN.concat([" "]); + exports.HEADER_CHARS = [" "]; + for (let i = 32; i <= 255; i++) { + if (i !== 127) { + exports.HEADER_CHARS.push(i); + } + } + exports.CONNECTION_TOKEN_CHARS = exports.HEADER_CHARS.filter((c) => c !== 44); + exports.MAJOR = exports.NUM_MAP; + exports.MINOR = exports.MAJOR; + var HEADER_STATE; + (function(HEADER_STATE2) { + HEADER_STATE2[HEADER_STATE2["GENERAL"] = 0] = "GENERAL"; + HEADER_STATE2[HEADER_STATE2["CONNECTION"] = 1] = "CONNECTION"; + HEADER_STATE2[HEADER_STATE2["CONTENT_LENGTH"] = 2] = "CONTENT_LENGTH"; + HEADER_STATE2[HEADER_STATE2["TRANSFER_ENCODING"] = 3] = "TRANSFER_ENCODING"; + HEADER_STATE2[HEADER_STATE2["UPGRADE"] = 4] = "UPGRADE"; + HEADER_STATE2[HEADER_STATE2["CONNECTION_KEEP_ALIVE"] = 5] = "CONNECTION_KEEP_ALIVE"; + HEADER_STATE2[HEADER_STATE2["CONNECTION_CLOSE"] = 6] = "CONNECTION_CLOSE"; + HEADER_STATE2[HEADER_STATE2["CONNECTION_UPGRADE"] = 7] = "CONNECTION_UPGRADE"; + HEADER_STATE2[HEADER_STATE2["TRANSFER_ENCODING_CHUNKED"] = 8] = "TRANSFER_ENCODING_CHUNKED"; + })(HEADER_STATE = exports.HEADER_STATE || (exports.HEADER_STATE = {})); + exports.SPECIAL_HEADERS = { + "connection": HEADER_STATE.CONNECTION, + "content-length": HEADER_STATE.CONTENT_LENGTH, + "proxy-connection": HEADER_STATE.CONNECTION, + "transfer-encoding": HEADER_STATE.TRANSFER_ENCODING, + "upgrade": HEADER_STATE.UPGRADE + }; + } +}); + +// +var require_llhttp_wasm = __commonJS({ + ""(exports, module) { + "use strict"; + var { Buffer: Buffer2 } = __require("node:buffer"); + module.exports = Buffer2.from("AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAX8AYAJ/fwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAy0sBQYAAAIAAAAAAAACAQIAAgICAAADAAAAAAMDAwMBAQEBAQEBAQEAAAIAAAAEBQFwARISBQMBAAIGCAF/AUGA1AQLB9EFIgZtZW1vcnkCAAtfaW5pdGlhbGl6ZQAIGV9faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUBAAtsbGh0dHBfaW5pdAAJGGxsaHR0cF9zaG91bGRfa2VlcF9hbGl2ZQAvDGxsaHR0cF9hbGxvYwALBm1hbGxvYwAxC2xsaHR0cF9mcmVlAAwEZnJlZQAMD2xsaHR0cF9nZXRfdHlwZQANFWxsaHR0cF9nZXRfaHR0cF9tYWpvcgAOFWxsaHR0cF9nZXRfaHR0cF9taW5vcgAPEWxsaHR0cF9nZXRfbWV0aG9kABAWbGxodHRwX2dldF9zdGF0dXNfY29kZQAREmxsaHR0cF9nZXRfdXBncmFkZQASDGxsaHR0cF9yZXNldAATDmxsaHR0cF9leGVjdXRlABQUbGxodHRwX3NldHRpbmdzX2luaXQAFQ1sbGh0dHBfZmluaXNoABYMbGxodHRwX3BhdXNlABcNbGxodHRwX3Jlc3VtZQAYG2xsaHR0cF9yZXN1bWVfYWZ0ZXJfdXBncmFkZQAZEGxsaHR0cF9nZXRfZXJybm8AGhdsbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbgAbF2xsaHR0cF9zZXRfZXJyb3JfcmVhc29uABwUbGxodHRwX2dldF9lcnJvcl9wb3MAHRFsbGh0dHBfZXJybm9fbmFtZQAeEmxsaHR0cF9tZXRob2RfbmFtZQAfEmxsaHR0cF9zdGF0dXNfbmFtZQAgGmxsaHR0cF9zZXRfbGVu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PgtBhwEMPQtBiAEMPAtBiQEMOwtBigEMOgtBiwEMOQtBjAEMOAtBjQEMNwtBjgEMNgtBjwEMNQtBkAEMNAtBkQEMMwtBkgEMMgtBkwEMMQtBlAEMMAtBlQEMLwtBlgEMLgtBlwEMLQtBmAEMLAtBmQEMKwtBmgEMKgtBmwEMKQtBnAEMKAtBnQEMJwtBngEMJgtBnwEMJQtBoAEMJAtBoQEMIwtBogEMIgtBowEMIQtBpAEMIAtBpQEMHwtBpgEMHgtBpwEMHQtBqAEMHAtBqQEMGwtBqgEMGgtBqwEMGQtBrAEMGAtBrQEMFwtBrgEMFgtBAQwVC0GvAQwUC0GwAQwTC0GxAQwSC0GzAQwRC0GyAQwQC0G0AQwPC0G1AQwOC0G2AQwNC0G3AQwMC0G4AQwLC0G5AQwKC0G6AQwJC0G7AQwIC0HGAQwHC0G8AQwGC0G9AQwFC0G+AQwEC0G/AQwDC0HAAQwCC0HCAQwBC0HBAQshAwNAAkACQAJAAkACQAJAAkACQAJAIAICfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAgJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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iQEhAwykAgtBASABLQAAQd8ARw1nGiABQQFqIQEMXgtBigEhAyABIARGDaICIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgNAIAEtAAAgAEGMzwBqLQAARw1kIABBAUYN+gEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMogILQYsBIQMgASAERg2hAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGOzwBqLQAARw1kIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyiAgsgAkEANgIAIAZBAWohAUECDGULQYwBIQMgASAERg2gAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHwzwBqLQAARw1jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyhAgsgAkEANgIAIAZBAWohAUEfDGQLQY0BIQMgASAERg2fAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHyzwBqLQAARw1iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAygAgsgAkEANgIAIAZBAWohAUEJDGMLIAEgBEYEQEGOASEDDJ8CCwJAAkAgAS0AAEHJAGsOBwBiYmJiYgFiCyABQQFqIQFB+AAhAwyGAgsgAUEBaiEBQfkAIQMMhQILQY8BIQMgASAERg2dAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGRzwBqLQAARw1gIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyeAgsgAkEANgIAIAZBAWohAUEYDGELQZABIQMgASAERg2cAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGXzwBqLQAARw1fIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAydAgsgAkEANgIAIAZBAWohAUEXDGALQZEBIQMgASAERg2bAiACKAIAIgAgBCABa2ohBSABIABrQQZqIQYCQANAIAEtAAAgAEGazwBqLQAARw1eIABBBkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAycAgsgAkEANgIAIAZBAWohAUEV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JSIARQ0RIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMtAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0gIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMswELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0iIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMsgELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0OIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMsQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0dIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMsAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0fIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMrwELIABBP0cNASABQQFqCyEBQQUhAwyUAQtBACEDIAJBADYCHCACIAE2AhQgAkH9EjYCECACQQc2AgwMrAELIAJBADYCHCACIAE2AhQgAkHcCDYCECACQQc2AgxBACEDDKsBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNByACQeUANgIcIAIgATYCFCACIAA2AgxBACEDDKoBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNFiACQdMANgIcIAIgATYCFCACIAA2AgxBACEDDKkBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNGCACQdIANgIcIAIgATYCFCACIAA2AgxBACEDDKgBCyACQQA2AhwgAiABNgIUIAJBxgo2AhAgAkEHNgIMQQAhAwynAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQMgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwymAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRIgAkHTADYCHCACIAE2AhQgAiAANgIMQQAhAwylAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRQgAkHSADYCHCACIAE2AhQgAiAANgIMQQAhAwykAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQAgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwyjAQtB1QAhAwyJAQsgAEEVRwRAIAJBADYCHCACIAE2AhQgAkG5DTYCECACQRo2AgxB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AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HhJw8LQaQhDwtByywPC0H+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB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CABB3AgLii1JbnZhbGlkIGNoYXIgaW4gdXJsIHF1ZXJ5AFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fYm9keQBDb250ZW50LUxlbmd0aCBvdmVyZmxvdwBDaHVuayBzaXplIG92ZXJmbG93AFJlc3BvbnNlIG92ZXJmbG93AEludmFsaWQgbWV0aG9kIGZvciBIVFRQL3gueCByZXF1ZXN0AEludmFsaWQgbWV0aG9kIGZvciBSVFNQL3gueCByZXF1ZXN0AEV4cGVjdGVkIFNPVVJDRSBtZXRob2QgZm9yIElDRS94LnggcmVxdWVzdABJbnZhbGlkIGNoYXIgaW4gdXJsIGZyYWdtZW50IHN0YXJ0AEV4cGVjdGVkIGRvdABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3N0YXR1cwBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cwBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zAFVzZXIgY2FsbGJhY2sgZXJyb3IAYG9uX3Jlc2V0YCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfaGVhZGVyYCBjYWxsYmFjayBlcnJvcgBgb25fbWVzc2FnZV9iZWdpbmAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3N0YXR1c19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3ZlcnNpb25fY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl91cmxfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXRob2RfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfZmllbGRfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fbmFtZWAgY2FsbGJhY2sgZXJyb3IAVW5leHBlY3RlZCBjaGFyIGluIHVybCBzZXJ2ZXIASW52YWxpZCBoZWFkZXIgdmFsdWUgY2hhcgBJbnZhbGlkIGhlYWRlciBmaWVsZCBjaGFyAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdmVyc2lvbgBJbnZhbGlkIG1pbm9yIHZlcnNpb24ASW52YWxpZCBtYWpvciB2ZXJzaW9uAEV4cGVjdGVkIHNwYWNlIGFmdGVyIHZlcnNpb24ARXhwZWN0ZWQgQ1JMRiBhZnRlciB2ZXJzaW9uAEludmFsaWQgSFRUUCB2ZXJzaW9uAEludmFsaWQgaGVhZGVyIHRva2VuAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdXJsAEludmFsaWQgY2hhcmFjdGVycyBpbiB1cmwAVW5leHBlY3RlZCBzdGFydCBjaGFyIGluIHVybABEb3VibGUgQCBpbiB1cmwARW1wdHkgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyYWN0ZXIgaW4gQ29udGVudC1MZW5ndGgARHVwbGljYXRlIENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhciBpbiB1cmwgcGF0aABDb250ZW50LUxlbmd0aCBjYW4ndCBiZSBwcmVzZW50IHdpdGggVHJhbnNmZXItRW5jb2RpbmcASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgc2l6ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl92YWx1ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgTEYgYWZ0ZXIgaGVhZGVyIHZhbHVlAEludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYCBoZWFkZXIgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZSB2YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHF1b3RlZCB2YWx1ZQBQYXVzZWQgYnkgb25faGVhZGVyc19jb21wbGV0ZQBJbnZhbGlkIEVPRiBzdGF0ZQBvbl9yZXNldCBwYXVzZQBvbl9jaHVua19oZWFkZXIgcGF1c2UAb25fbWVzc2FnZV9iZWdpbiBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fdmFsdWUgcGF1c2UAb25fc3RhdHVzX2NvbXBsZXRlIHBhdXNlAG9uX3ZlcnNpb25fY29tcGxldGUgcGF1c2UAb25fdXJsX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXNzYWdlX2NvbXBsZXRlIHBhdXNlAG9uX21ldGhvZF9jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfZmllbGRfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUgcGF1c2UAVW5leHBlY3RlZCBzcGFjZSBhZnRlciBzdGFydCBsaW5lAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBuYW1lAFBhdXNlIG9uIENPTk5FQ1QvVXBncmFkZQBQYXVzZSBvbiBQUkkvVXBncmFkZQBFeHBlY3RlZCBIVFRQLzIgQ29ubmVjdGlvbiBQcmVmYWNlAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fbWV0aG9kAEV4cGVjdGVkIHNwYWNlIGFmdGVyIG1ldGhvZABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl9maWVsZABQYXVzZWQASW52YWxpZCB3b3JkIGVuY291bnRlcmVkAEludmFsaWQgbWV0aG9kIGVuY291bnRlcmVkAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2NoZW1hAFJlcXVlc3QgaGFzIGludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYABTV0lUQ0hfUFJPWFkAVVNFX1BST1hZAE1LQUNUSVZJVFkAVU5QUk9DRVNTQUJMRV9FTlRJVFkAQ09QWQBNT1ZFRF9QRVJNQU5FTlRMWQBUT09fRUFSTFkATk9USUZZAEZBSUxFRF9ERVBFTkRFTkNZAEJBRF9HQVRFV0FZAFBMQVkAUFVUAENIRUNLT1VUAEdBVEVXQVlfVElNRU9VVABSRVFVRVNUX1RJTUVPVVQATkVUV09SS19DT05ORUNUX1RJTUVPVVQAQ09OTkVDVElPTl9USU1FT1VUAExPR0lOX1RJTUVPVVQATkVUV09SS19SRUFEX1RJTUVPVVQAUE9TVABNSVNESVJFQ1RFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX0xPQURfQkFMQU5DRURfUkVRVUVTVABCQURfUkVRVUVTVABIVFRQX1JFUVVFU1RfU0VOVF9UT19IVFRQU19QT1JUAFJFUE9SVABJTV9BX1RFQVBPVABSRVNFVF9DT05URU5UAE5PX0NPTlRFTlQAUEFSVElBTF9DT05URU5UAEhQRV9JTlZBTElEX0NPTlNUQU5UAEhQRV9DQl9SRVNFVABHRVQASFBFX1NUUklDVABDT05GTElDVABURU1QT1JBUllfUkVESVJFQ1QAUEVSTUFORU5UX1JFRElSRUNUAENPTk5FQ1QATVVMVElfU1RBVFVTAEhQRV9JTlZBTElEX1NUQVRVUwBUT09fTUFOWV9SRVFVRVNUUwBFQVJMWV9ISU5UUwBVTkFWQUlMQUJMRV9GT1JfTEVHQUxfUkVBU09OUwBPUFRJT05TAFNXSVRDSElOR19QUk9UT0NPTFMAVkFSSUFOVF9BTFNPX05FR09USUFURVMATVVMVElQTEVfQ0hPSUNFUwBJTlRFUk5BTF9TRVJWRVJfRVJST1IAV0VCX1NFUlZFUl9VTktOT1dOX0VSUk9SAFJBSUxHVU5fRVJST1IASURFTlRJVFlfUFJPVklERVJfQVVUSEVOVElDQVRJT05fRVJST1IAU1NMX0NFUlRJRklDQVRFX0VSUk9SAElOVkFMSURfWF9GT1JXQVJERURfRk9SAFNFVF9QQVJBTUVURVIAR0VUX1BBUkFNRVRFUgBIUEVfVVNFUgBTRUVfT1RIRVIASFBFX0NCX0NIVU5LX0hFQURFUgBNS0NBTEVOREFSAFNFVFVQAFdFQl9TRVJWRVJfSVNfRE9XTgBURUFSRE9XTgBIUEVfQ0xPU0VEX0NPTk5FQ1RJT04ASEVVUklTVElDX0VYUElSQVRJT04ARElTQ09OTkVDVEVEX09QRVJBVElPTgBOT05fQVVUSE9SSVRBVElWRV9JTkZPUk1BVElPTgBIUEVfSU5WQUxJRF9WRVJTSU9OAEhQRV9DQl9NRVNTQUdFX0JFR0lOAFNJVEVfSVNfRlJPWkVOAEhQRV9JTlZBTElEX0hFQURFUl9UT0tFTgBJTlZBTElEX1RPS0VOAEZPUkJJRERFTgBFTkhBTkNFX1lPVVJfQ0FMTQBIUEVfSU5WQUxJRF9VUkwAQkxPQ0tFRF9CWV9QQVJFTlRBTF9DT05UUk9MAE1LQ09MAEFDTABIUEVfSU5URVJOQUwAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRV9VTk9GRklDSUFMAEhQRV9PSwBVTkxJTksAVU5MT0NLAFBSSQBSRVRSWV9XSVRIAEhQRV9JTlZBTElEX0NPTlRFTlRfTEVOR1RIAEhQRV9VTkVYUEVDVEVEX0NPTlRFTlRfTEVOR1RIAEZMVVNIAFBST1BQQVRDSABNLVNFQVJDSABVUklfVE9PX0xPTkcAUFJPQ0VTU0lORwBNSVNDRUxMQU5FT1VTX1BFUlNJU1RFTlRfV0FSTklORwBNSVNDRUxMQU5FT1VTX1dBUk5JTkcASFBFX0lOVkFMSURfVFJBTlNGRVJfRU5DT0RJTkcARXhwZWN0ZWQgQ1JMRgBIUEVfSU5WQUxJRF9DSFVOS19TSVpFAE1PVkUAQ09OVElOVUUASFBFX0NCX1NUQVRVU19DT01QTEVURQBIUEVfQ0JfSEVBREVSU19DT01QTEVURQBIUEVfQ0JfVkVSU0lPTl9DT01QTEVURQBIUEVfQ0JfVVJMX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19DT01QTEVURQBIUEVfQ0JfSEVBREVSX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9OQU1FX0NPTVBMRVRFAEhQRV9DQl9NRVNTQUdFX0NPTVBMRVRFAEhQRV9DQl9NRVRIT0RfQ09NUExFVEUASFBFX0NCX0hFQURFUl9GSUVMRF9DT01QTEVURQBERUxFVEUASFBFX0lOVkFMSURfRU9GX1NUQVRFAElOVkFMSURfU1NMX0NFUlRJRklDQVRFAFBBVVNFAE5PX1JFU1BPTlNFAFVOU1VQUE9SVEVEX01FRElBX1RZUEUAR09ORQBOT1RfQUNDRVBUQUJMRQBTRVJWSUNFX1VOQVZBSUxBQkxFAFJBTkdFX05PVF9TQVRJU0ZJQUJMRQBPUklHSU5fSVNfVU5SRUFDSEFCTEUAUkVTUE9OU0VfSVNfU1RBTEUAUFVSR0UATUVSR0UAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRQBSRVFVRVNUX0hFQURFUl9UT09fTEFSR0UAUEFZTE9BRF9UT09fTEFSR0UASU5TVUZGSUNJRU5UX1NUT1JBR0UASFBFX1BBVVNFRF9VUEdSQURFAEhQRV9QQVVTRURfSDJfVVBHUkFERQBTT1VSQ0UAQU5OT1VOQ0UAVFJBQ0UASFBFX1VORVhQRUNURURfU1BBQ0UAREVTQ1JJQkUAVU5TVUJTQ1JJQkUAUkVDT1JEAEhQRV9JTlZBTElEX01FVEhPRABOT1RfRk9VTkQAUFJPUEZJTkQAVU5CSU5EAFJFQklORABVTkFVVEhPUklaRUQATUVUSE9EX05PVF9BTExPV0VEAEhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEAEFMUkVBRFlfUkVQT1JURUQAQUNDRVBURUQATk9UX0lNUExFTUVOVEVEAExPT1BfREVURUNURUQASFBFX0NSX0VYUEVDVEVEAEhQRV9MRl9FWFBFQ1RFRABDUkVBVEVEAElNX1VTRUQASFBFX1BBVVNFRABUSU1FT1VUX09DQ1VSRUQAUEFZTUVOVF9SRVFVSVJFRABQUkVDT05ESVRJT05fUkVRVUlSRUQAUFJPWFlfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATkVUV09SS19BVVRIRU5USUNBVElPTl9SRVFVSVJFRABMRU5HVEhfUkVRVUlSRUQAU1NMX0NFUlRJRklDQVRFX1JFUVVJUkVEAFVQR1JBREVfUkVRVUlSRUQAUEFHRV9FWFBJUkVEAFBSRUNPTkRJVElPTl9GQUlMRUQARVhQRUNUQVRJT05fRkFJTEVEAFJFVkFMSURBVElPTl9GQUlMRUQAU1NMX0hBTkRTSEFLRV9GQUlMRUQATE9DS0VEAFRSQU5TRk9STUFUSU9OX0FQUExJRUQATk9UX01PRElGSUVEAE5PVF9FWFRFTkRFRABCQU5EV0lEVEhfTElNSVRfRVhDRUVERUQAU0lURV9JU19PVkVSTE9BREVEAEhFQUQARXhwZWN0ZWQgSFRUUC8AAF4TAAAmEwAAMBAAAPAXAACdEwAAFRIAADkXAADwEgAAChAAAHUSAACtEgAAghMAAE8UAAB/EAAAoBUAACMUAACJEgAAixQAAE0VAADUEQAAzxQAABAYAADJFgAA3BYAAMERAADgFwAAuxQAAHQUAAB8FQAA5RQAAAgXAAAfEAAAZRUAAKMUAAAoFQAAAhUAAJkVAAAsEAAAixkAAE8PAADUDgAAahAAAM4QAAACFwAAiQ4AAG4TAAAcEwAAZhQAAFYXAADBEwAAzRMAAGwTAABoFwAAZhcAAF8XAAAiEwAAzg8AAGkOAADYDgAAYxYAAMsTAACqDgAAKBcAACYXAADFEwAAXRYAAOgRAABnEwAAZRMAAPIWAABzEwAAHRcAAPkWAADzEQAAzw4AAM4VAAAMEgAAsxEAAKURAABhEAAAMhcAALsTAEH5NQsBAQBBkDYL4AEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB/TcLAQEAQZE4C14CAwICAgICAAACAgACAgACAgICAgICAgICAAQAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEH9OQsBAQBBkToLXgIAAgICAgIAAAICAAICAAICAgICAgICAgIAAwAEAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgIAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgACAAIAQfA7Cw1sb3NlZWVwLWFsaXZlAEGJPAsBAQBBoDwL4AEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBiT4LAQEAQaA+C+cBAQEBAQEBAQEBAQEBAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQFjaHVua2VkAEGwwAALXwEBAAEBAQEBAAABAQABAQABAQEBAQEBAQEBAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAEGQwgALIWVjdGlvbmVudC1sZW5ndGhvbnJveHktY29ubmVjdGlvbgBBwMIACy1yYW5zZmVyLWVuY29kaW5ncGdyYWRlDQoNCg0KU00NCg0KVFRQL0NFL1RTUC8AQfnCAAsFAQIAAQMAQZDDAAvgAQQBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH5xAALBQECAAEDAEGQxQAL4AEEAQEFAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cYACwQBAAABAEGRxwAL3wEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH6yAALBAEAAAIAQZDJAAtfAwQAAAQEBAQEBAQEBAQEBQQEBAQEBAQEBAQEBAAEAAYHBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQAQfrKAAsEAQAAAQBBkMsACwEBAEGqywALQQIAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAEH6zAALBAEAAAEAQZDNAAsBAQBBms0ACwYCAAAAAAIAQbHNAAs6AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB8M4AC5YBTk9VTkNFRUNLT1VUTkVDVEVURUNSSUJFTFVTSEVURUFEU0VBUkNIUkdFQ1RJVklUWUxFTkRBUlZFT1RJRllQVElPTlNDSFNFQVlTVEFUQ0hHRU9SRElSRUNUT1JUUkNIUEFSQU1FVEVSVVJDRUJTQ1JJQkVBUkRPV05BQ0VJTkROS0NLVUJTQ1JJQkVIVFRQL0FEVFAv", "base64"); + } +}); + +// +var require_llhttp_simd_wasm = __commonJS({ + ""(exports, module) { + "use strict"; + var { Buffer: Buffer2 } = __require("node:buffer"); + module.exports = Buffer2.from("AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAX8AYAJ/fwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAy0sBQYAAAIAAAAAAAACAQIAAgICAAADAAAAAAMDAwMBAQEBAQEBAQEAAAIAAAAEBQFwARISBQMBAAIGCAF/AUGA1AQLB9EFIgZtZW1vcnkCAAtfaW5pdGlhbGl6ZQAIGV9faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUBAAtsbGh0dHBfaW5pdAAJGGxsaHR0cF9zaG91bGRfa2VlcF9hbGl2ZQAvDGxsaHR0cF9hbGxvYwALBm1hbGxvYwAxC2xsaHR0cF9mcmVlAAwEZnJlZQAMD2xsaHR0cF9nZXRfdHlwZQANFWxsaHR0cF9nZXRfaHR0cF9tYWpvcgAOFWxsaHR0cF9nZXRfaHR0cF9taW5vcgAPEWxsaHR0cF9nZXRfbWV0aG9kABAWbGxodHRwX2dldF9zdGF0dXNfY29kZQAREmxsaHR0cF9nZXRfdXBncmFkZQASDGxsaHR0cF9yZXNldAATDmxsaHR0cF9leGVjdXRlABQUbGxodHRwX3NldHRpbmdzX2luaXQAFQ1sbGh0dHBfZmluaXNoABYMbGxodHRwX3BhdXNlABcNbGxodHRwX3Jlc3VtZQAYG2xsaHR0cF9yZXN1bWVfYWZ0ZXJfdXBncmFkZQAZEGxsaHR0cF9nZXRfZXJybm8AGhdsbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbgAbF2xsaHR0cF9zZXRfZXJyb3JfcmVhc29uABwUbGxodHRwX2dldF9lcnJvcl9wb3MAHRFsbGh0dHBfZXJybm9fbmFtZQAeEmxsaHR0cF9tZXRob2RfbmFtZQAfEmxsaHR0cF9zdGF0dXNfbmFtZQAgGmxsaHR0cF9zZXRfbGVu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PgtBhwEMPQtBiAEMPAtBiQEMOwtBigEMOgtBiwEMOQtBjAEMOAtBjQEMNwtBjgEMNgtBjwEMNQtBkAEMNAtBkQEMMwtBkgEMMgtBkwEMMQtBlAEMMAtBlQEMLwtBlgEMLgtBlwEMLQtBmAEMLAtBmQEMKwtBmgEMKgtBmwEMKQtBnAEMKAtBnQEMJwtBngEMJgtBnwEMJQtBoAEMJAtBoQEMIwtBogEMIgtBowEMIQtBpAEMIAtBpQEMHwtBpgEMHgtBpwEMHQtBqAEMHAtBqQEMGwtBqgEMGgtBqwEMGQtBrAEMGAtBrQEMFwtBrgEMFgtBAQwVC0GvAQwUC0GwAQwTC0GxAQwSC0GzAQwRC0GyAQwQC0G0AQwPC0G1AQwOC0G2AQwNC0G3AQwMC0G4AQwLC0G5AQwKC0G6AQwJC0G7AQwIC0HGAQwHC0G8AQwGC0G9AQwFC0G+AQwEC0G/AQwDC0HAAQwCC0HCAQwBC0HBAQshAwNAAkACQAJAAkACQAJAAkACQAJAIAICfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAgJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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iQEhAwykAgtBASABLQAAQd8ARw1nGiABQQFqIQEMXgtBigEhAyABIARGDaICIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgNAIAEtAAAgAEGMzwBqLQAARw1kIABBAUYN+gEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMogILQYsBIQMgASAERg2hAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGOzwBqLQAARw1kIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyiAgsgAkEANgIAIAZBAWohAUECDGULQYwBIQMgASAERg2gAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHwzwBqLQAARw1jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyhAgsgAkEANgIAIAZBAWohAUEfDGQLQY0BIQMgASAERg2fAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHyzwBqLQAARw1iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAygAgsgAkEANgIAIAZBAWohAUEJDGMLIAEgBEYEQEGOASEDDJ8CCwJAAkAgAS0AAEHJAGsOBwBiYmJiYgFiCyABQQFqIQFB+AAhAwyGAgsgAUEBaiEBQfkAIQMMhQILQY8BIQMgASAERg2dAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGRzwBqLQAARw1gIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyeAgsgAkEANgIAIAZBAWohAUEYDGELQZABIQMgASAERg2cAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGXzwBqLQAARw1fIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAydAgsgAkEANgIAIAZBAWohAUEXDGALQZEBIQMgASAERg2bAiACKAIAIgAgBCABa2ohBSABIABrQQZqIQYCQANAIAEtAAAgAEGazwBqLQAARw1eIABBBkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAycAgsgAkEANgIAIAZBAWohAUEV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JSIARQ0RIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMtAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0gIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMswELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0iIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMsgELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0OIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMsQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0dIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMsAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0fIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMrwELIABBP0cNASABQQFqCyEBQQUhAwyUAQtBACEDIAJBADYCHCACIAE2AhQgAkH9EjYCECACQQc2AgwMrAELIAJBADYCHCACIAE2AhQgAkHcCDYCECACQQc2AgxBACEDDKsBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNByACQeUANgIcIAIgATYCFCACIAA2AgxBACEDDKoBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNFiACQdMANgIcIAIgATYCFCACIAA2AgxBACEDDKkBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNGCACQdIANgIcIAIgATYCFCACIAA2AgxBACEDDKgBCyACQQA2AhwgAiABNgIUIAJBxgo2AhAgAkEHNgIMQQAhAwynAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQMgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwymAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRIgAkHTADYCHCACIAE2AhQgAiAANgIMQQAhAwylAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRQgAkHSADYCHCACIAE2AhQgAiAANgIMQQAhAwykAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQAgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwyjAQtB1QAhAwyJAQsgAEEVRwRAIAJBADYCHCACIAE2AhQgAkG5DTYCECACQRo2AgxB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AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HhJw8LQaQhDwtByywPC0H+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB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AAADAEGUCAsFBAAAAAUAQaQICwkGAAAABwAAAAgAQdwIC4otSW52YWxpZCBjaGFyIGluIHVybCBxdWVyeQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2JvZHkAQ29udGVudC1MZW5ndGggb3ZlcmZsb3cAQ2h1bmsgc2l6ZSBvdmVyZmxvdwBSZXNwb25zZSBvdmVyZmxvdwBJbnZhbGlkIG1ldGhvZCBmb3IgSFRUUC94LnggcmVxdWVzdABJbnZhbGlkIG1ldGhvZCBmb3IgUlRTUC94LnggcmVxdWVzdABFeHBlY3RlZCBTT1VSQ0UgbWV0aG9kIGZvciBJQ0UveC54IHJlcXVlc3QASW52YWxpZCBjaGFyIGluIHVybCBmcmFnbWVudCBzdGFydABFeHBlY3RlZCBkb3QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9zdGF0dXMASW52YWxpZCByZXNwb25zZSBzdGF0dXMASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucwBVc2VyIGNhbGxiYWNrIGVycm9yAGBvbl9yZXNldGAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2hlYWRlcmAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfYmVnaW5gIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fdmFsdWVgIGNhbGxiYWNrIGVycm9yAGBvbl9zdGF0dXNfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl92ZXJzaW9uX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdXJsX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWV0aG9kX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX25hbWVgIGNhbGxiYWNrIGVycm9yAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2VydmVyAEludmFsaWQgaGVhZGVyIHZhbHVlIGNoYXIASW52YWxpZCBoZWFkZXIgZmllbGQgY2hhcgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3ZlcnNpb24ASW52YWxpZCBtaW5vciB2ZXJzaW9uAEludmFsaWQgbWFqb3IgdmVyc2lvbgBFeHBlY3RlZCBzcGFjZSBhZnRlciB2ZXJzaW9uAEV4cGVjdGVkIENSTEYgYWZ0ZXIgdmVyc2lvbgBJbnZhbGlkIEhUVFAgdmVyc2lvbgBJbnZhbGlkIGhlYWRlciB0b2tlbgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3VybABJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdXJsAFVuZXhwZWN0ZWQgc3RhcnQgY2hhciBpbiB1cmwARG91YmxlIEAgaW4gdXJsAEVtcHR5IENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhcmFjdGVyIGluIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBNaXNzaW5nIGV4cGVjdGVkIExGIGFmdGVyIGhlYWRlciB2YWx1ZQBJbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AgaGVhZGVyIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGUgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZWQgdmFsdWUAUGF1c2VkIGJ5IG9uX2hlYWRlcnNfY29tcGxldGUASW52YWxpZCBFT0Ygc3RhdGUAb25fcmVzZXQgcGF1c2UAb25fY2h1bmtfaGVhZGVyIHBhdXNlAG9uX21lc3NhZ2VfYmVnaW4gcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlIHBhdXNlAG9uX3N0YXR1c19jb21wbGV0ZSBwYXVzZQBvbl92ZXJzaW9uX2NvbXBsZXRlIHBhdXNlAG9uX3VybF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGUgcGF1c2UAb25fbWVzc2FnZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXRob2RfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lIHBhdXNlAFVuZXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgc3RhcnQgbGluZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgbmFtZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AAU1dJVENIX1BST1hZAFVTRV9QUk9YWQBNS0FDVElWSVRZAFVOUFJPQ0VTU0FCTEVfRU5USVRZAENPUFkATU9WRURfUEVSTUFORU5UTFkAVE9PX0VBUkxZAE5PVElGWQBGQUlMRURfREVQRU5ERU5DWQBCQURfR0FURVdBWQBQTEFZAFBVVABDSEVDS09VVABHQVRFV0FZX1RJTUVPVVQAUkVRVUVTVF9USU1FT1VUAE5FVFdPUktfQ09OTkVDVF9USU1FT1VUAENPTk5FQ1RJT05fVElNRU9VVABMT0dJTl9USU1FT1VUAE5FVFdPUktfUkVBRF9USU1FT1VUAFBPU1QATUlTRElSRUNURURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9MT0FEX0JBTEFOQ0VEX1JFUVVFU1QAQkFEX1JFUVVFU1QASFRUUF9SRVFVRVNUX1NFTlRfVE9fSFRUUFNfUE9SVABSRVBPUlQASU1fQV9URUFQT1QAUkVTRVRfQ09OVEVOVABOT19DT05URU5UAFBBUlRJQUxfQ09OVEVOVABIUEVfSU5WQUxJRF9DT05TVEFOVABIUEVfQ0JfUkVTRVQAR0VUAEhQRV9TVFJJQ1QAQ09ORkxJQ1QAVEVNUE9SQVJZX1JFRElSRUNUAFBFUk1BTkVOVF9SRURJUkVDVABDT05ORUNUAE1VTFRJX1NUQVRVUwBIUEVfSU5WQUxJRF9TVEFUVVMAVE9PX01BTllfUkVRVUVTVFMARUFSTFlfSElOVFMAVU5BVkFJTEFCTEVfRk9SX0xFR0FMX1JFQVNPTlMAT1BUSU9OUwBTV0lUQ0hJTkdfUFJPVE9DT0xTAFZBUklBTlRfQUxTT19ORUdPVElBVEVTAE1VTFRJUExFX0NIT0lDRVMASU5URVJOQUxfU0VSVkVSX0VSUk9SAFdFQl9TRVJWRVJfVU5LTk9XTl9FUlJPUgBSQUlMR1VOX0VSUk9SAElERU5USVRZX1BST1ZJREVSX0FVVEhFTlRJQ0FUSU9OX0VSUk9SAFNTTF9DRVJUSUZJQ0FURV9FUlJPUgBJTlZBTElEX1hfRk9SV0FSREVEX0ZPUgBTRVRfUEFSQU1FVEVSAEdFVF9QQVJBTUVURVIASFBFX1VTRVIAU0VFX09USEVSAEhQRV9DQl9DSFVOS19IRUFERVIATUtDQUxFTkRBUgBTRVRVUABXRUJfU0VSVkVSX0lTX0RPV04AVEVBUkRPV04ASFBFX0NMT1NFRF9DT05ORUNUSU9OAEhFVVJJU1RJQ19FWFBJUkFUSU9OAERJU0NPTk5FQ1RFRF9PUEVSQVRJT04ATk9OX0FVVEhPUklUQVRJVkVfSU5GT1JNQVRJT04ASFBFX0lOVkFMSURfVkVSU0lPTgBIUEVfQ0JfTUVTU0FHRV9CRUdJTgBTSVRFX0lTX0ZST1pFTgBIUEVfSU5WQUxJRF9IRUFERVJfVE9LRU4ASU5WQUxJRF9UT0tFTgBGT1JCSURERU4ARU5IQU5DRV9ZT1VSX0NBTE0ASFBFX0lOVkFMSURfVVJMAEJMT0NLRURfQllfUEFSRU5UQUxfQ09OVFJPTABNS0NPTABBQ0wASFBFX0lOVEVSTkFMAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0VfVU5PRkZJQ0lBTABIUEVfT0sAVU5MSU5LAFVOTE9DSwBQUkkAUkVUUllfV0lUSABIUEVfSU5WQUxJRF9DT05URU5UX0xFTkdUSABIUEVfVU5FWFBFQ1RFRF9DT05URU5UX0xFTkdUSABGTFVTSABQUk9QUEFUQ0gATS1TRUFSQ0gAVVJJX1RPT19MT05HAFBST0NFU1NJTkcATUlTQ0VMTEFORU9VU19QRVJTSVNURU5UX1dBUk5JTkcATUlTQ0VMTEFORU9VU19XQVJOSU5HAEhQRV9JTlZBTElEX1RSQU5TRkVSX0VOQ09ESU5HAEV4cGVjdGVkIENSTEYASFBFX0lOVkFMSURfQ0hVTktfU0laRQBNT1ZFAENPTlRJTlVFAEhQRV9DQl9TVEFUVVNfQ09NUExFVEUASFBFX0NCX0hFQURFUlNfQ09NUExFVEUASFBFX0NCX1ZFUlNJT05fQ09NUExFVEUASFBFX0NCX1VSTF9DT01QTEVURQBIUEVfQ0JfQ0hVTktfQ09NUExFVEUASFBFX0NCX0hFQURFUl9WQUxVRV9DT01QTEVURQBIUEVfQ0JfQ0hVTktfRVhURU5TSU9OX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fTkFNRV9DT01QTEVURQBIUEVfQ0JfTUVTU0FHRV9DT01QTEVURQBIUEVfQ0JfTUVUSE9EX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJfRklFTERfQ09NUExFVEUAREVMRVRFAEhQRV9JTlZBTElEX0VPRl9TVEFURQBJTlZBTElEX1NTTF9DRVJUSUZJQ0FURQBQQVVTRQBOT19SRVNQT05TRQBVTlNVUFBPUlRFRF9NRURJQV9UWVBFAEdPTkUATk9UX0FDQ0VQVEFCTEUAU0VSVklDRV9VTkFWQUlMQUJMRQBSQU5HRV9OT1RfU0FUSVNGSUFCTEUAT1JJR0lOX0lTX1VOUkVBQ0hBQkxFAFJFU1BPTlNFX0lTX1NUQUxFAFBVUkdFAE1FUkdFAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0UAUkVRVUVTVF9IRUFERVJfVE9PX0xBUkdFAFBBWUxPQURfVE9PX0xBUkdFAElOU1VGRklDSUVOVF9TVE9SQUdFAEhQRV9QQVVTRURfVVBHUkFERQBIUEVfUEFVU0VEX0gyX1VQR1JBREUAU09VUkNFAEFOTk9VTkNFAFRSQUNFAEhQRV9VTkVYUEVDVEVEX1NQQUNFAERFU0NSSUJFAFVOU1VCU0NSSUJFAFJFQ09SRABIUEVfSU5WQUxJRF9NRVRIT0QATk9UX0ZPVU5EAFBST1BGSU5EAFVOQklORABSRUJJTkQAVU5BVVRIT1JJWkVEAE1FVEhPRF9OT1RfQUxMT1dFRABIVFRQX1ZFUlNJT05fTk9UX1NVUFBPUlRFRABBTFJFQURZX1JFUE9SVEVEAEFDQ0VQVEVEAE5PVF9JTVBMRU1FTlRFRABMT09QX0RFVEVDVEVEAEhQRV9DUl9FWFBFQ1RFRABIUEVfTEZfRVhQRUNURUQAQ1JFQVRFRABJTV9VU0VEAEhQRV9QQVVTRUQAVElNRU9VVF9PQ0NVUkVEAFBBWU1FTlRfUkVRVUlSRUQAUFJFQ09ORElUSU9OX1JFUVVJUkVEAFBST1hZX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEAE5FVFdPUktfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATEVOR1RIX1JFUVVJUkVEAFNTTF9DRVJUSUZJQ0FURV9SRVFVSVJFRABVUEdSQURFX1JFUVVJUkVEAFBBR0VfRVhQSVJFRABQUkVDT05ESVRJT05fRkFJTEVEAEVYUEVDVEFUSU9OX0ZBSUxFRABSRVZBTElEQVRJT05fRkFJTEVEAFNTTF9IQU5EU0hBS0VfRkFJTEVEAExPQ0tFRABUUkFOU0ZPUk1BVElPTl9BUFBMSUVEAE5PVF9NT0RJRklFRABOT1RfRVhURU5ERUQAQkFORFdJRFRIX0xJTUlUX0VYQ0VFREVEAFNJVEVfSVNfT1ZFUkxPQURFRABIRUFEAEV4cGVjdGVkIEhUVFAvAABeEwAAJhMAADAQAADwFwAAnRMAABUSAAA5FwAA8BIAAAoQAAB1EgAArRIAAIITAABPFAAAfxAAAKAVAAAjFAAAiRIAAIsUAABNFQAA1BEAAM8UAAAQGAAAyRYAANwWAADBEQAA4BcAALsUAAB0FAAAfBUAAOUUAAAIFwAAHxAAAGUVAACjFAAAKBUAAAIVAACZFQAALBAAAIsZAABPDwAA1A4AAGoQAADOEAAAAhcAAIkOAABuEwAAHBMAAGYUAABWFwAAwRMAAM0TAABsEwAAaBcAAGYXAABfFwAAIhMAAM4PAABpDgAA2A4AAGMWAADLEwAAqg4AACgXAAAmFwAAxRMAAF0WAADoEQAAZxMAAGUTAADyFgAAcxMAAB0XAAD5FgAA8xEAAM8OAADOFQAADBIAALMRAAClEQAAYRAAADIXAAC7EwBB+TULAQEAQZA2C+ABAQECAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQf03CwEBAEGROAteAgMCAgICAgAAAgIAAgIAAgICAgICAgICAgAEAAAAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAIAAgBB/TkLAQEAQZE6C14CAAICAgICAAACAgACAgACAgICAgICAgICAAMABAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEHwOwsNbG9zZWVlcC1hbGl2ZQBBiTwLAQEAQaA8C+ABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQYk+CwEBAEGgPgvnAQEBAQEBAQEBAQEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBY2h1bmtlZABBsMAAC18BAQABAQEBAQAAAQEAAQEAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQBBkMIACyFlY3Rpb25lbnQtbGVuZ3Rob25yb3h5LWNvbm5lY3Rpb24AQcDCAAstcmFuc2Zlci1lbmNvZGluZ3BncmFkZQ0KDQoNClNNDQoNClRUUC9DRS9UU1AvAEH5wgALBQECAAEDAEGQwwAL4AEEAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cQACwUBAgABAwBBkMUAC+ABBAEBBQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQfnGAAsEAQAAAQBBkccAC98BAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+sgACwQBAAACAEGQyQALXwMEAAAEBAQEBAQEBAQEBAUEBAQEBAQEBAQEBAQABAAGBwQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEAEH6ygALBAEAAAEAQZDLAAsBAQBBqssAC0ECAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB+swACwQBAAABAEGQzQALAQEAQZrNAAsGAgAAAAACAEGxzQALOgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQfDOAAuWAU5PVU5DRUVDS09VVE5FQ1RFVEVDUklCRUxVU0hFVEVBRFNFQVJDSFJHRUNUSVZJVFlMRU5EQVJWRU9USUZZUFRJT05TQ0hTRUFZU1RBVENIR0VPUkRJUkVDVE9SVFJDSFBBUkFNRVRFUlVSQ0VCU0NSSUJFQVJET1dOQUNFSU5ETktDS1VCU0NSSUJFSFRUUC9BRFRQLw==", "base64"); + } +}); + +// +var require_constants3 = __commonJS({ + ""(exports, module) { + "use strict"; + var corsSafeListedMethods = ( + /** @type {const} */ + ["GET", "HEAD", "POST"] + ); + var corsSafeListedMethodsSet = new Set(corsSafeListedMethods); + var nullBodyStatus = ( + /** @type {const} */ + [101, 204, 205, 304] + ); + var redirectStatus = ( + /** @type {const} */ + [301, 302, 303, 307, 308] + ); + var redirectStatusSet = new Set(redirectStatus); + var badPorts = ( + /** @type {const} */ + [ + "1", + "7", + "9", + "11", + "13", + "15", + "17", + "19", + "20", + "21", + "22", + "23", + "25", + "37", + "42", + "43", + "53", + "69", + "77", + "79", + "87", + "95", + "101", + "102", + "103", + "104", + "109", + "110", + "111", + "113", + "115", + "117", + "119", + "123", + "135", + "137", + "139", + "143", + "161", + "179", + "389", + "427", + "465", + "512", + "513", + "514", + "515", + "526", + "530", + "531", + "532", + "540", + "548", + "554", + "556", + "563", + "587", + "601", + "636", + "989", + "990", + "993", + "995", + "1719", + "1720", + "1723", + "2049", + "3659", + "4045", + "4190", + "5060", + "5061", + "6000", + "6566", + "6665", + "6666", + "6667", + "6668", + "6669", + "6679", + "6697", + "10080" + ] + ); + var badPortsSet = new Set(badPorts); + var referrerPolicy = ( + /** @type {const} */ + [ + "", + "no-referrer", + "no-referrer-when-downgrade", + "same-origin", + "origin", + "strict-origin", + "origin-when-cross-origin", + "strict-origin-when-cross-origin", + "unsafe-url" + ] + ); + var referrerPolicySet = new Set(referrerPolicy); + var requestRedirect = ( + /** @type {const} */ + ["follow", "manual", "error"] + ); + var safeMethods = ( + /** @type {const} */ + ["GET", "HEAD", "OPTIONS", "TRACE"] + ); + var safeMethodsSet = new Set(safeMethods); + var requestMode = ( + /** @type {const} */ + ["navigate", "same-origin", "no-cors", "cors"] + ); + var requestCredentials = ( + /** @type {const} */ + ["omit", "same-origin", "include"] + ); + var requestCache = ( + /** @type {const} */ + [ + "default", + "no-store", + "reload", + "no-cache", + "force-cache", + "only-if-cached" + ] + ); + var requestBodyHeader = ( + /** @type {const} */ + [ + "content-encoding", + "content-language", + "content-location", + "content-type", + // See https://github.com/nodejs/undici/issues/2021 + // 'Content-Length' is a forbidden header name, which is typically + // removed in the Headers implementation. However, undici doesn't + // filter out headers, so we add it here. + "content-length" + ] + ); + var requestDuplex = ( + /** @type {const} */ + [ + "half" + ] + ); + var forbiddenMethods = ( + /** @type {const} */ + ["CONNECT", "TRACE", "TRACK"] + ); + var forbiddenMethodsSet = new Set(forbiddenMethods); + var subresource = ( + /** @type {const} */ + [ + "audio", + "audioworklet", + "font", + "image", + "manifest", + "paintworklet", + "script", + "style", + "track", + "video", + "xslt", + "" + ] + ); + var subresourceSet = new Set(subresource); + module.exports = { + subresource, + forbiddenMethods, + requestBodyHeader, + referrerPolicy, + requestRedirect, + requestMode, + requestCredentials, + requestCache, + redirectStatus, + corsSafeListedMethods, + nullBodyStatus, + safeMethods, + badPorts, + requestDuplex, + subresourceSet, + badPortsSet, + redirectStatusSet, + corsSafeListedMethodsSet, + safeMethodsSet, + forbiddenMethodsSet, + referrerPolicySet + }; + } +}); + +// +var require_global = __commonJS({ + ""(exports, module) { + "use strict"; + var globalOrigin = Symbol.for("undici.globalOrigin.1"); + function getGlobalOrigin() { + return globalThis[globalOrigin]; + } + function setGlobalOrigin(newOrigin) { + if (newOrigin === void 0) { + Object.defineProperty(globalThis, globalOrigin, { + value: void 0, + writable: true, + enumerable: false, + configurable: false + }); + return; + } + const parsedURL = new URL(newOrigin); + if (parsedURL.protocol !== "http:" && parsedURL.protocol !== "https:") { + throw new TypeError(`Only http & https urls are allowed, received ${parsedURL.protocol}`); + } + Object.defineProperty(globalThis, globalOrigin, { + value: parsedURL, + writable: true, + enumerable: false, + configurable: false + }); + } + module.exports = { + getGlobalOrigin, + setGlobalOrigin + }; + } +}); + +// +var require_data_url = __commonJS({ + ""(exports, module) { + "use strict"; + var assert = __require("node:assert"); + var encoder = new TextEncoder(); + var HTTP_TOKEN_CODEPOINTS = /^[!#$%&'*+\-.^_|~A-Za-z0-9]+$/; + var HTTP_WHITESPACE_REGEX = /[\u000A\u000D\u0009\u0020]/; + var ASCII_WHITESPACE_REPLACE_REGEX = /[\u0009\u000A\u000C\u000D\u0020]/g; + var HTTP_QUOTED_STRING_TOKENS = /^[\u0009\u0020-\u007E\u0080-\u00FF]+$/; + function dataURLProcessor(dataURL) { + assert(dataURL.protocol === "data:"); + let input = URLSerializer(dataURL, true); + input = input.slice(5); + const position = { position: 0 }; + let mimeType = collectASequenceOfCodePointsFast( + ",", + input, + position + ); + const mimeTypeLength = mimeType.length; + mimeType = removeASCIIWhitespace(mimeType, true, true); + if (position.position >= input.length) { + return "failure"; + } + position.position++; + const encodedBody = input.slice(mimeTypeLength + 1); + let body = stringPercentDecode(encodedBody); + if (/;(\u0020){0,}base64$/i.test(mimeType)) { + const stringBody = isomorphicDecode(body); + body = forgivingBase64(stringBody); + if (body === "failure") { + return "failure"; + } + mimeType = mimeType.slice(0, -6); + mimeType = mimeType.replace(/(\u0020)+$/, ""); + mimeType = mimeType.slice(0, -1); + } + if (mimeType.startsWith(";")) { + mimeType = "text/plain" + mimeType; + } + let mimeTypeRecord = parseMIMEType(mimeType); + if (mimeTypeRecord === "failure") { + mimeTypeRecord = parseMIMEType("text/plain;charset=US-ASCII"); + } + return { mimeType: mimeTypeRecord, body }; + } + function URLSerializer(url, excludeFragment = false) { + if (!excludeFragment) { + return url.href; + } + const href = url.href; + const hashLength = url.hash.length; + const serialized = hashLength === 0 ? href : href.substring(0, href.length - hashLength); + if (!hashLength && href.endsWith("#")) { + return serialized.slice(0, -1); + } + return serialized; + } + function collectASequenceOfCodePoints(condition, input, position) { + let result = ""; + while (position.position < input.length && condition(input[position.position])) { + result += input[position.position]; + position.position++; + } + return result; + } + function collectASequenceOfCodePointsFast(char, input, position) { + const idx = input.indexOf(char, position.position); + const start = position.position; + if (idx === -1) { + position.position = input.length; + return input.slice(start); + } + position.position = idx; + return input.slice(start, position.position); + } + function stringPercentDecode(input) { + const bytes = encoder.encode(input); + return percentDecode(bytes); + } + function isHexCharByte(byte) { + return byte >= 48 && byte <= 57 || byte >= 65 && byte <= 70 || byte >= 97 && byte <= 102; + } + function hexByteToNumber(byte) { + return ( + // 0-9 + byte >= 48 && byte <= 57 ? byte - 48 : (byte & 223) - 55 + ); + } + function percentDecode(input) { + const length = input.length; + const output = new Uint8Array(length); + let j = 0; + for (let i = 0; i < length; ++i) { + const byte = input[i]; + if (byte !== 37) { + output[j++] = byte; + } else if (byte === 37 && !(isHexCharByte(input[i + 1]) && isHexCharByte(input[i + 2]))) { + output[j++] = 37; + } else { + output[j++] = hexByteToNumber(input[i + 1]) << 4 | hexByteToNumber(input[i + 2]); + i += 2; + } + } + return length === j ? output : output.subarray(0, j); + } + function parseMIMEType(input) { + input = removeHTTPWhitespace(input, true, true); + const position = { position: 0 }; + const type = collectASequenceOfCodePointsFast( + "/", + input, + position + ); + if (type.length === 0 || !HTTP_TOKEN_CODEPOINTS.test(type)) { + return "failure"; + } + if (position.position > input.length) { + return "failure"; + } + position.position++; + let subtype = collectASequenceOfCodePointsFast( + ";", + input, + position + ); + subtype = removeHTTPWhitespace(subtype, false, true); + if (subtype.length === 0 || !HTTP_TOKEN_CODEPOINTS.test(subtype)) { + return "failure"; + } + const typeLowercase = type.toLowerCase(); + const subtypeLowercase = subtype.toLowerCase(); + const mimeType = { + type: typeLowercase, + subtype: subtypeLowercase, + /** @type {Map} */ + parameters: /* @__PURE__ */ new Map(), + // https://mimesniff.spec.whatwg.org/#mime-type-essence + essence: `${typeLowercase}/${subtypeLowercase}` + }; + while (position.position < input.length) { + position.position++; + collectASequenceOfCodePoints( + // https://fetch.spec.whatwg.org/#http-whitespace + (char) => HTTP_WHITESPACE_REGEX.test(char), + input, + position + ); + let parameterName = collectASequenceOfCodePoints( + (char) => char !== ";" && char !== "=", + input, + position + ); + parameterName = parameterName.toLowerCase(); + if (position.position < input.length) { + if (input[position.position] === ";") { + continue; + } + position.position++; + } + if (position.position > input.length) { + break; + } + let parameterValue = null; + if (input[position.position] === '"') { + parameterValue = collectAnHTTPQuotedString(input, position, true); + collectASequenceOfCodePointsFast( + ";", + input, + position + ); + } else { + parameterValue = collectASequenceOfCodePointsFast( + ";", + input, + position + ); + parameterValue = removeHTTPWhitespace(parameterValue, false, true); + if (parameterValue.length === 0) { + continue; + } + } + if (parameterName.length !== 0 && HTTP_TOKEN_CODEPOINTS.test(parameterName) && (parameterValue.length === 0 || HTTP_QUOTED_STRING_TOKENS.test(parameterValue)) && !mimeType.parameters.has(parameterName)) { + mimeType.parameters.set(parameterName, parameterValue); + } + } + return mimeType; + } + function forgivingBase64(data) { + data = data.replace(ASCII_WHITESPACE_REPLACE_REGEX, ""); + let dataLength = data.length; + if (dataLength % 4 === 0) { + if (data.charCodeAt(dataLength - 1) === 61) { + --dataLength; + if (data.charCodeAt(dataLength - 1) === 61) { + --dataLength; + } + } + } + if (dataLength % 4 === 1) { + return "failure"; + } + if (/[^+/0-9A-Za-z]/.test(data.length === dataLength ? data : data.substring(0, dataLength))) { + return "failure"; + } + const buffer = Buffer.from(data, "base64"); + return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength); + } + function collectAnHTTPQuotedString(input, position, extractValue) { + const positionStart = position.position; + let value = ""; + assert(input[position.position] === '"'); + position.position++; + while (true) { + value += collectASequenceOfCodePoints( + (char) => char !== '"' && char !== "\\", + input, + position + ); + if (position.position >= input.length) { + break; + } + const quoteOrBackslash = input[position.position]; + position.position++; + if (quoteOrBackslash === "\\") { + if (position.position >= input.length) { + value += "\\"; + break; + } + value += input[position.position]; + position.position++; + } else { + assert(quoteOrBackslash === '"'); + break; + } + } + if (extractValue) { + return value; + } + return input.slice(positionStart, position.position); + } + function serializeAMimeType(mimeType) { + assert(mimeType !== "failure"); + const { parameters, essence } = mimeType; + let serialization = essence; + for (let [name, value] of parameters.entries()) { + serialization += ";"; + serialization += name; + serialization += "="; + if (!HTTP_TOKEN_CODEPOINTS.test(value)) { + value = value.replace(/(\\|")/g, "\\$1"); + value = '"' + value; + value += '"'; + } + serialization += value; + } + return serialization; + } + function isHTTPWhiteSpace(char) { + return char === 13 || char === 10 || char === 9 || char === 32; + } + function removeHTTPWhitespace(str, leading = true, trailing = true) { + return removeChars(str, leading, trailing, isHTTPWhiteSpace); + } + function isASCIIWhitespace(char) { + return char === 13 || char === 10 || char === 9 || char === 12 || char === 32; + } + function removeASCIIWhitespace(str, leading = true, trailing = true) { + return removeChars(str, leading, trailing, isASCIIWhitespace); + } + function removeChars(str, leading, trailing, predicate) { + let lead = 0; + let trail = str.length - 1; + if (leading) { + while (lead < str.length && predicate(str.charCodeAt(lead))) + lead++; + } + if (trailing) { + while (trail > 0 && predicate(str.charCodeAt(trail))) + trail--; + } + return lead === 0 && trail === str.length - 1 ? str : str.slice(lead, trail + 1); + } + function isomorphicDecode(input) { + const length = input.length; + if ((2 << 15) - 1 > length) { + return String.fromCharCode.apply(null, input); + } + let result = ""; + let i = 0; + let addition = (2 << 15) - 1; + while (i < length) { + if (i + addition > length) { + addition = length - i; + } + result += String.fromCharCode.apply(null, input.subarray(i, i += addition)); + } + return result; + } + function minimizeSupportedMimeType(mimeType) { + switch (mimeType.essence) { + case "application/ecmascript": + case "application/javascript": + case "application/x-ecmascript": + case "application/x-javascript": + case "text/ecmascript": + case "text/javascript": + case "text/javascript1.0": + case "text/javascript1.1": + case "text/javascript1.2": + case "text/javascript1.3": + case "text/javascript1.4": + case "text/javascript1.5": + case "text/jscript": + case "text/livescript": + case "text/x-ecmascript": + case "text/x-javascript": + return "text/javascript"; + case "application/json": + case "text/json": + return "application/json"; + case "image/svg+xml": + return "image/svg+xml"; + case "text/xml": + case "application/xml": + return "application/xml"; + } + if (mimeType.subtype.endsWith("+json")) { + return "application/json"; + } + if (mimeType.subtype.endsWith("+xml")) { + return "application/xml"; + } + return ""; + } + module.exports = { + dataURLProcessor, + URLSerializer, + collectASequenceOfCodePoints, + collectASequenceOfCodePointsFast, + stringPercentDecode, + parseMIMEType, + collectAnHTTPQuotedString, + serializeAMimeType, + removeChars, + removeHTTPWhitespace, + minimizeSupportedMimeType, + HTTP_TOKEN_CODEPOINTS, + isomorphicDecode + }; + } +}); + +// +var require_webidl = __commonJS({ + ""(exports, module) { + "use strict"; + var { types, inspect } = __require("node:util"); + var { markAsUncloneable } = __require("node:worker_threads"); + var { toUSVString } = require_util(); + var webidl = {}; + webidl.converters = {}; + webidl.util = {}; + webidl.errors = {}; + webidl.errors.exception = function(message) { + return new TypeError(`${message.header}: ${message.message}`); + }; + webidl.errors.conversionFailed = function(context) { + const plural = context.types.length === 1 ? "" : " one of"; + const message = `${context.argument} could not be converted to${plural}: ${context.types.join(", ")}.`; + return webidl.errors.exception({ + header: context.prefix, + message + }); + }; + webidl.errors.invalidArgument = function(context) { + return webidl.errors.exception({ + header: context.prefix, + message: `"${context.value}" is an invalid ${context.type}.` + }); + }; + webidl.brandCheck = function(V, I, opts) { + if (opts?.strict !== false) { + if (!(V instanceof I)) { + const err = new TypeError("Illegal invocation"); + err.code = "ERR_INVALID_THIS"; + throw err; + } + } else { + if (V?.[Symbol.toStringTag] !== I.prototype[Symbol.toStringTag]) { + const err = new TypeError("Illegal invocation"); + err.code = "ERR_INVALID_THIS"; + throw err; + } + } + }; + webidl.argumentLengthCheck = function({ length }, min, ctx) { + if (length < min) { + throw webidl.errors.exception({ + message: `${min} argument${min !== 1 ? "s" : ""} required, but${length ? " only" : ""} ${length} found.`, + header: ctx + }); + } + }; + webidl.illegalConstructor = function() { + throw webidl.errors.exception({ + header: "TypeError", + message: "Illegal constructor" + }); + }; + webidl.util.Type = function(V) { + switch (typeof V) { + case "undefined": + return "Undefined"; + case "boolean": + return "Boolean"; + case "string": + return "String"; + case "symbol": + return "Symbol"; + case "number": + return "Number"; + case "bigint": + return "BigInt"; + case "function": + case "object": { + if (V === null) { + return "Null"; + } + return "Object"; + } + } + }; + webidl.util.markAsUncloneable = markAsUncloneable || (() => { + }); + webidl.util.ConvertToInt = function(V, bitLength, signedness, opts) { + let upperBound; + let lowerBound; + if (bitLength === 64) { + upperBound = Math.pow(2, 53) - 1; + if (signedness === "unsigned") { + lowerBound = 0; + } else { + lowerBound = Math.pow(-2, 53) + 1; + } + } else if (signedness === "unsigned") { + lowerBound = 0; + upperBound = Math.pow(2, bitLength) - 1; + } else { + lowerBound = Math.pow(-2, bitLength) - 1; + upperBound = Math.pow(2, bitLength - 1) - 1; + } + let x = Number(V); + if (x === 0) { + x = 0; + } + if (opts?.enforceRange === true) { + if (Number.isNaN(x) || x === Number.POSITIVE_INFINITY || x === Number.NEGATIVE_INFINITY) { + throw webidl.errors.exception({ + header: "Integer conversion", + message: `Could not convert ${webidl.util.Stringify(V)} to an integer.` + }); + } + x = webidl.util.IntegerPart(x); + if (x < lowerBound || x > upperBound) { + throw webidl.errors.exception({ + header: "Integer conversion", + message: `Value must be between ${lowerBound}-${upperBound}, got ${x}.` + }); + } + return x; + } + if (!Number.isNaN(x) && opts?.clamp === true) { + x = Math.min(Math.max(x, lowerBound), upperBound); + if (Math.floor(x) % 2 === 0) { + x = Math.floor(x); + } else { + x = Math.ceil(x); + } + return x; + } + if (Number.isNaN(x) || x === 0 && Object.is(0, x) || x === Number.POSITIVE_INFINITY || x === Number.NEGATIVE_INFINITY) { + return 0; + } + x = webidl.util.IntegerPart(x); + x = x % Math.pow(2, bitLength); + if (signedness === "signed" && x >= Math.pow(2, bitLength) - 1) { + return x - Math.pow(2, bitLength); + } + return x; + }; + webidl.util.IntegerPart = function(n) { + const r = Math.floor(Math.abs(n)); + if (n < 0) { + return -1 * r; + } + return r; + }; + webidl.util.Stringify = function(V) { + const type = webidl.util.Type(V); + switch (type) { + case "Symbol": + return `Symbol(${V.description})`; + case "Object": + return inspect(V); + case "String": + return `"${V}"`; + default: + return `${V}`; + } + }; + webidl.sequenceConverter = function(converter) { + return (V, prefix, argument, Iterable) => { + if (webidl.util.Type(V) !== "Object") { + throw webidl.errors.exception({ + header: prefix, + message: `${argument} (${webidl.util.Stringify(V)}) is not iterable.` + }); + } + const method = typeof Iterable === "function" ? Iterable() : V?.[Symbol.iterator]?.(); + const seq = []; + let index = 0; + if (method === void 0 || typeof method.next !== "function") { + throw webidl.errors.exception({ + header: prefix, + message: `${argument} is not iterable.` + }); + } + while (true) { + const { done, value } = method.next(); + if (done) { + break; + } + seq.push(converter(value, prefix, `${argument}[${index++}]`)); + } + return seq; + }; + }; + webidl.recordConverter = function(keyConverter, valueConverter) { + return (O, prefix, argument) => { + if (webidl.util.Type(O) !== "Object") { + throw webidl.errors.exception({ + header: prefix, + message: `${argument} ("${webidl.util.Type(O)}") is not an Object.` + }); + } + const result = {}; + if (!types.isProxy(O)) { + const keys2 = [...Object.getOwnPropertyNames(O), ...Object.getOwnPropertySymbols(O)]; + for (const key of keys2) { + const typedKey = keyConverter(key, prefix, argument); + const typedValue = valueConverter(O[key], prefix, argument); + result[typedKey] = typedValue; + } + return result; + } + const keys = Reflect.ownKeys(O); + for (const key of keys) { + const desc = Reflect.getOwnPropertyDescriptor(O, key); + if (desc?.enumerable) { + const typedKey = keyConverter(key, prefix, argument); + const typedValue = valueConverter(O[key], prefix, argument); + result[typedKey] = typedValue; + } + } + return result; + }; + }; + webidl.interfaceConverter = function(i) { + return (V, prefix, argument, opts) => { + if (opts?.strict !== false && !(V instanceof i)) { + throw webidl.errors.exception({ + header: prefix, + message: `Expected ${argument} ("${webidl.util.Stringify(V)}") to be an instance of ${i.name}.` + }); + } + return V; + }; + }; + webidl.dictionaryConverter = function(converters) { + return (dictionary, prefix, argument) => { + const type = webidl.util.Type(dictionary); + const dict = {}; + if (type === "Null" || type === "Undefined") { + return dict; + } else if (type !== "Object") { + throw webidl.errors.exception({ + header: prefix, + message: `Expected ${dictionary} to be one of: Null, Undefined, Object.` + }); + } + for (const options of converters) { + const { key, defaultValue, required, converter } = options; + if (required === true) { + if (!Object.hasOwn(dictionary, key)) { + throw webidl.errors.exception({ + header: prefix, + message: `Missing required key "${key}".` + }); + } + } + let value = dictionary[key]; + const hasDefault = Object.hasOwn(options, "defaultValue"); + if (hasDefault && value !== null) { + value ??= defaultValue(); + } + if (required || hasDefault || value !== void 0) { + value = converter(value, prefix, `${argument}.${key}`); + if (options.allowedValues && !options.allowedValues.includes(value)) { + throw webidl.errors.exception({ + header: prefix, + message: `${value} is not an accepted type. Expected one of ${options.allowedValues.join(", ")}.` + }); + } + dict[key] = value; + } + } + return dict; + }; + }; + webidl.nullableConverter = function(converter) { + return (V, prefix, argument) => { + if (V === null) { + return V; + } + return converter(V, prefix, argument); + }; + }; + webidl.converters.DOMString = function(V, prefix, argument, opts) { + if (V === null && opts?.legacyNullToEmptyString) { + return ""; + } + if (typeof V === "symbol") { + throw webidl.errors.exception({ + header: prefix, + message: `${argument} is a symbol, which cannot be converted to a DOMString.` + }); + } + return String(V); + }; + webidl.converters.ByteString = function(V, prefix, argument) { + const x = webidl.converters.DOMString(V, prefix, argument); + for (let index = 0; index < x.length; index++) { + if (x.charCodeAt(index) > 255) { + throw new TypeError( + `Cannot convert argument to a ByteString because the character at index ${index} has a value of ${x.charCodeAt(index)} which is greater than 255.` + ); + } + } + return x; + }; + webidl.converters.USVString = toUSVString; + webidl.converters.boolean = function(V) { + const x = Boolean(V); + return x; + }; + webidl.converters.any = function(V) { + return V; + }; + webidl.converters["long long"] = function(V, prefix, argument) { + const x = webidl.util.ConvertToInt(V, 64, "signed", void 0, prefix, argument); + return x; + }; + webidl.converters["unsigned long long"] = function(V, prefix, argument) { + const x = webidl.util.ConvertToInt(V, 64, "unsigned", void 0, prefix, argument); + return x; + }; + webidl.converters["unsigned long"] = function(V, prefix, argument) { + const x = webidl.util.ConvertToInt(V, 32, "unsigned", void 0, prefix, argument); + return x; + }; + webidl.converters["unsigned short"] = function(V, prefix, argument, opts) { + const x = webidl.util.ConvertToInt(V, 16, "unsigned", opts, prefix, argument); + return x; + }; + webidl.converters.ArrayBuffer = function(V, prefix, argument, opts) { + if (webidl.util.Type(V) !== "Object" || !types.isAnyArrayBuffer(V)) { + throw webidl.errors.conversionFailed({ + prefix, + argument: `${argument} ("${webidl.util.Stringify(V)}")`, + types: ["ArrayBuffer"] + }); + } + if (opts?.allowShared === false && types.isSharedArrayBuffer(V)) { + throw webidl.errors.exception({ + header: "ArrayBuffer", + message: "SharedArrayBuffer is not allowed." + }); + } + if (V.resizable || V.growable) { + throw webidl.errors.exception({ + header: "ArrayBuffer", + message: "Received a resizable ArrayBuffer." + }); + } + return V; + }; + webidl.converters.TypedArray = function(V, T, prefix, name, opts) { + if (webidl.util.Type(V) !== "Object" || !types.isTypedArray(V) || V.constructor.name !== T.name) { + throw webidl.errors.conversionFailed({ + prefix, + argument: `${name} ("${webidl.util.Stringify(V)}")`, + types: [T.name] + }); + } + if (opts?.allowShared === false && types.isSharedArrayBuffer(V.buffer)) { + throw webidl.errors.exception({ + header: "ArrayBuffer", + message: "SharedArrayBuffer is not allowed." + }); + } + if (V.buffer.resizable || V.buffer.growable) { + throw webidl.errors.exception({ + header: "ArrayBuffer", + message: "Received a resizable ArrayBuffer." + }); + } + return V; + }; + webidl.converters.DataView = function(V, prefix, name, opts) { + if (webidl.util.Type(V) !== "Object" || !types.isDataView(V)) { + throw webidl.errors.exception({ + header: prefix, + message: `${name} is not a DataView.` + }); + } + if (opts?.allowShared === false && types.isSharedArrayBuffer(V.buffer)) { + throw webidl.errors.exception({ + header: "ArrayBuffer", + message: "SharedArrayBuffer is not allowed." + }); + } + if (V.buffer.resizable || V.buffer.growable) { + throw webidl.errors.exception({ + header: "ArrayBuffer", + message: "Received a resizable ArrayBuffer." + }); + } + return V; + }; + webidl.converters.BufferSource = function(V, prefix, name, opts) { + if (types.isAnyArrayBuffer(V)) { + return webidl.converters.ArrayBuffer(V, prefix, name, { ...opts, allowShared: false }); + } + if (types.isTypedArray(V)) { + return webidl.converters.TypedArray(V, V.constructor, prefix, name, { ...opts, allowShared: false }); + } + if (types.isDataView(V)) { + return webidl.converters.DataView(V, prefix, name, { ...opts, allowShared: false }); + } + throw webidl.errors.conversionFailed({ + prefix, + argument: `${name} ("${webidl.util.Stringify(V)}")`, + types: ["BufferSource"] + }); + }; + webidl.converters["sequence"] = webidl.sequenceConverter( + webidl.converters.ByteString + ); + webidl.converters["sequence>"] = webidl.sequenceConverter( + webidl.converters["sequence"] + ); + webidl.converters["record"] = webidl.recordConverter( + webidl.converters.ByteString, + webidl.converters.ByteString + ); + module.exports = { + webidl + }; + } +}); + +// +var require_util2 = __commonJS({ + ""(exports, module) { + "use strict"; + var { Transform } = __require("node:stream"); + var zlib = __require("node:zlib"); + var { redirectStatusSet, referrerPolicySet: referrerPolicyTokens, badPortsSet } = require_constants3(); + var { getGlobalOrigin } = require_global(); + var { collectASequenceOfCodePoints, collectAnHTTPQuotedString, removeChars, parseMIMEType } = require_data_url(); + var { performance: performance2 } = __require("node:perf_hooks"); + var { isBlobLike, ReadableStreamFrom, isValidHTTPToken, normalizedMethodRecordsBase } = require_util(); + var assert = __require("node:assert"); + var { isUint8Array } = __require("node:util/types"); + var { webidl } = require_webidl(); + var supportedHashes = []; + var crypto; + try { + crypto = __require("node:crypto"); + const possibleRelevantHashes = ["sha256", "sha384", "sha512"]; + supportedHashes = crypto.getHashes().filter((hash) => possibleRelevantHashes.includes(hash)); + } catch { + } + function responseURL(response) { + const urlList = response.urlList; + const length = urlList.length; + return length === 0 ? null : urlList[length - 1].toString(); + } + function responseLocationURL(response, requestFragment) { + if (!redirectStatusSet.has(response.status)) { + return null; + } + let location = response.headersList.get("location", true); + if (location !== null && isValidHeaderValue(location)) { + if (!isValidEncodedURL(location)) { + location = normalizeBinaryStringToUtf8(location); + } + location = new URL(location, responseURL(response)); + } + if (location && !location.hash) { + location.hash = requestFragment; + } + return location; + } + function isValidEncodedURL(url) { + for (let i = 0; i < url.length; ++i) { + const code = url.charCodeAt(i); + if (code > 126 || // Non-US-ASCII + DEL + code < 32) { + return false; + } + } + return true; + } + function normalizeBinaryStringToUtf8(value) { + return Buffer.from(value, "binary").toString("utf8"); + } + function requestCurrentURL(request) { + return request.urlList[request.urlList.length - 1]; + } + function requestBadPort(request) { + const url = requestCurrentURL(request); + if (urlIsHttpHttpsScheme(url) && badPortsSet.has(url.port)) { + return "blocked"; + } + return "allowed"; + } + function isErrorLike(object) { + return object instanceof Error || (object?.constructor?.name === "Error" || object?.constructor?.name === "DOMException"); + } + function isValidReasonPhrase(statusText) { + for (let i = 0; i < statusText.length; ++i) { + const c = statusText.charCodeAt(i); + if (!(c === 9 || // HTAB + c >= 32 && c <= 126 || // SP / VCHAR + c >= 128 && c <= 255)) { + return false; + } + } + return true; + } + var isValidHeaderName = isValidHTTPToken; + function isValidHeaderValue(potentialValue) { + return (potentialValue[0] === " " || potentialValue[0] === " " || potentialValue[potentialValue.length - 1] === " " || potentialValue[potentialValue.length - 1] === " " || potentialValue.includes("\n") || potentialValue.includes("\r") || potentialValue.includes("\0")) === false; + } + function setRequestReferrerPolicyOnRedirect(request, actualResponse) { + const { headersList } = actualResponse; + const policyHeader = (headersList.get("referrer-policy", true) ?? "").split(","); + let policy = ""; + if (policyHeader.length > 0) { + for (let i = policyHeader.length; i !== 0; i--) { + const token = policyHeader[i - 1].trim(); + if (referrerPolicyTokens.has(token)) { + policy = token; + break; + } + } + } + if (policy !== "") { + request.referrerPolicy = policy; + } + } + function crossOriginResourcePolicyCheck() { + return "allowed"; + } + function corsCheck() { + return "success"; + } + function TAOCheck() { + return "success"; + } + function appendFetchMetadata(httpRequest) { + let header = null; + header = httpRequest.mode; + httpRequest.headersList.set("sec-fetch-mode", header, true); + } + function appendRequestOriginHeader(request) { + let serializedOrigin = request.origin; + if (serializedOrigin === "client" || serializedOrigin === void 0) { + return; + } + if (request.responseTainting === "cors" || request.mode === "websocket") { + request.headersList.append("origin", serializedOrigin, true); + } else if (request.method !== "GET" && request.method !== "HEAD") { + switch (request.referrerPolicy) { + case "no-referrer": + serializedOrigin = null; + break; + case "no-referrer-when-downgrade": + case "strict-origin": + case "strict-origin-when-cross-origin": + if (request.origin && urlHasHttpsScheme(request.origin) && !urlHasHttpsScheme(requestCurrentURL(request))) { + serializedOrigin = null; + } + break; + case "same-origin": + if (!sameOrigin(request, requestCurrentURL(request))) { + serializedOrigin = null; + } + break; + default: + } + request.headersList.append("origin", serializedOrigin, true); + } + } + function coarsenTime(timestamp, crossOriginIsolatedCapability) { + return timestamp; + } + function clampAndCoarsenConnectionTimingInfo(connectionTimingInfo, defaultStartTime, crossOriginIsolatedCapability) { + if (!connectionTimingInfo?.startTime || connectionTimingInfo.startTime < defaultStartTime) { + return { + domainLookupStartTime: defaultStartTime, + domainLookupEndTime: defaultStartTime, + connectionStartTime: defaultStartTime, + connectionEndTime: defaultStartTime, + secureConnectionStartTime: defaultStartTime, + ALPNNegotiatedProtocol: connectionTimingInfo?.ALPNNegotiatedProtocol + }; + } + return { + domainLookupStartTime: coarsenTime(connectionTimingInfo.domainLookupStartTime, crossOriginIsolatedCapability), + domainLookupEndTime: coarsenTime(connectionTimingInfo.domainLookupEndTime, crossOriginIsolatedCapability), + connectionStartTime: coarsenTime(connectionTimingInfo.connectionStartTime, crossOriginIsolatedCapability), + connectionEndTime: coarsenTime(connectionTimingInfo.connectionEndTime, crossOriginIsolatedCapability), + secureConnectionStartTime: coarsenTime(connectionTimingInfo.secureConnectionStartTime, crossOriginIsolatedCapability), + ALPNNegotiatedProtocol: connectionTimingInfo.ALPNNegotiatedProtocol + }; + } + function coarsenedSharedCurrentTime(crossOriginIsolatedCapability) { + return coarsenTime(performance2.now(), crossOriginIsolatedCapability); + } + function createOpaqueTimingInfo(timingInfo) { + return { + startTime: timingInfo.startTime ?? 0, + redirectStartTime: 0, + redirectEndTime: 0, + postRedirectStartTime: timingInfo.startTime ?? 0, + finalServiceWorkerStartTime: 0, + finalNetworkResponseStartTime: 0, + finalNetworkRequestStartTime: 0, + endTime: 0, + encodedBodySize: 0, + decodedBodySize: 0, + finalConnectionTimingInfo: null + }; + } + function makePolicyContainer() { + return { + referrerPolicy: "strict-origin-when-cross-origin" + }; + } + function clonePolicyContainer(policyContainer) { + return { + referrerPolicy: policyContainer.referrerPolicy + }; + } + function determineRequestsReferrer(request) { + const policy = request.referrerPolicy; + assert(policy); + let referrerSource = null; + if (request.referrer === "client") { + const globalOrigin = getGlobalOrigin(); + if (!globalOrigin || globalOrigin.origin === "null") { + return "no-referrer"; + } + referrerSource = new URL(globalOrigin); + } else if (request.referrer instanceof URL) { + referrerSource = request.referrer; + } + let referrerURL = stripURLForReferrer(referrerSource); + const referrerOrigin = stripURLForReferrer(referrerSource, true); + if (referrerURL.toString().length > 4096) { + referrerURL = referrerOrigin; + } + const areSameOrigin = sameOrigin(request, referrerURL); + const isNonPotentiallyTrustWorthy = isURLPotentiallyTrustworthy(referrerURL) && !isURLPotentiallyTrustworthy(request.url); + switch (policy) { + case "origin": + return referrerOrigin != null ? referrerOrigin : stripURLForReferrer(referrerSource, true); + case "unsafe-url": + return referrerURL; + case "same-origin": + return areSameOrigin ? referrerOrigin : "no-referrer"; + case "origin-when-cross-origin": + return areSameOrigin ? referrerURL : referrerOrigin; + case "strict-origin-when-cross-origin": { + const currentURL = requestCurrentURL(request); + if (sameOrigin(referrerURL, currentURL)) { + return referrerURL; + } + if (isURLPotentiallyTrustworthy(referrerURL) && !isURLPotentiallyTrustworthy(currentURL)) { + return "no-referrer"; + } + return referrerOrigin; + } + case "strict-origin": + case "no-referrer-when-downgrade": + default: + return isNonPotentiallyTrustWorthy ? "no-referrer" : referrerOrigin; + } + } + function stripURLForReferrer(url, originOnly) { + assert(url instanceof URL); + url = new URL(url); + if (url.protocol === "file:" || url.protocol === "about:" || url.protocol === "blank:") { + return "no-referrer"; + } + url.username = ""; + url.password = ""; + url.hash = ""; + if (originOnly) { + url.pathname = ""; + url.search = ""; + } + return url; + } + function isURLPotentiallyTrustworthy(url) { + if (!(url instanceof URL)) { + return false; + } + if (url.href === "about:blank" || url.href === "about:srcdoc") { + return true; + } + if (url.protocol === "data:") + return true; + if (url.protocol === "file:") + return true; + return isOriginPotentiallyTrustworthy(url.origin); + function isOriginPotentiallyTrustworthy(origin) { + if (origin == null || origin === "null") + return false; + const originAsURL = new URL(origin); + if (originAsURL.protocol === "https:" || originAsURL.protocol === "wss:") { + return true; + } + if (/^127(?:\.[0-9]+){0,2}\.[0-9]+$|^\[(?:0*:)*?:?0*1\]$/.test(originAsURL.hostname) || (originAsURL.hostname === "localhost" || originAsURL.hostname.includes("localhost.")) || originAsURL.hostname.endsWith(".localhost")) { + return true; + } + return false; + } + } + function bytesMatch(bytes, metadataList) { + if (crypto === void 0) { + return true; + } + const parsedMetadata = parseMetadata(metadataList); + if (parsedMetadata === "no metadata") { + return true; + } + if (parsedMetadata.length === 0) { + return true; + } + const strongest = getStrongestMetadata(parsedMetadata); + const metadata = filterMetadataListByAlgorithm(parsedMetadata, strongest); + for (const item of metadata) { + const algorithm = item.algo; + const expectedValue = item.hash; + let actualValue = crypto.createHash(algorithm).update(bytes).digest("base64"); + if (actualValue[actualValue.length - 1] === "=") { + if (actualValue[actualValue.length - 2] === "=") { + actualValue = actualValue.slice(0, -2); + } else { + actualValue = actualValue.slice(0, -1); + } + } + if (compareBase64Mixed(actualValue, expectedValue)) { + return true; + } + } + return false; + } + var parseHashWithOptions = /(?sha256|sha384|sha512)-((?[A-Za-z0-9+/]+|[A-Za-z0-9_-]+)={0,2}(?:\s|$)( +[!-~]*)?)?/i; + function parseMetadata(metadata) { + const result = []; + let empty = true; + for (const token of metadata.split(" ")) { + empty = false; + const parsedToken = parseHashWithOptions.exec(token); + if (parsedToken === null || parsedToken.groups === void 0 || parsedToken.groups.algo === void 0) { + continue; + } + const algorithm = parsedToken.groups.algo.toLowerCase(); + if (supportedHashes.includes(algorithm)) { + result.push(parsedToken.groups); + } + } + if (empty === true) { + return "no metadata"; + } + return result; + } + function getStrongestMetadata(metadataList) { + let algorithm = metadataList[0].algo; + if (algorithm[3] === "5") { + return algorithm; + } + for (let i = 1; i < metadataList.length; ++i) { + const metadata = metadataList[i]; + if (metadata.algo[3] === "5") { + algorithm = "sha512"; + break; + } else if (algorithm[3] === "3") { + continue; + } else if (metadata.algo[3] === "3") { + algorithm = "sha384"; + } + } + return algorithm; + } + function filterMetadataListByAlgorithm(metadataList, algorithm) { + if (metadataList.length === 1) { + return metadataList; + } + let pos = 0; + for (let i = 0; i < metadataList.length; ++i) { + if (metadataList[i].algo === algorithm) { + metadataList[pos++] = metadataList[i]; + } + } + metadataList.length = pos; + return metadataList; + } + function compareBase64Mixed(actualValue, expectedValue) { + if (actualValue.length !== expectedValue.length) { + return false; + } + for (let i = 0; i < actualValue.length; ++i) { + if (actualValue[i] !== expectedValue[i]) { + if (actualValue[i] === "+" && expectedValue[i] === "-" || actualValue[i] === "/" && expectedValue[i] === "_") { + continue; + } + return false; + } + } + return true; + } + function tryUpgradeRequestToAPotentiallyTrustworthyURL(request) { + } + function sameOrigin(A, B) { + if (A.origin === B.origin && A.origin === "null") { + return true; + } + if (A.protocol === B.protocol && A.hostname === B.hostname && A.port === B.port) { + return true; + } + return false; + } + function createDeferredPromise() { + let res; + let rej; + const promise = new Promise((resolve, reject) => { + res = resolve; + rej = reject; + }); + return { promise, resolve: res, reject: rej }; + } + function isAborted(fetchParams) { + return fetchParams.controller.state === "aborted"; + } + function isCancelled(fetchParams) { + return fetchParams.controller.state === "aborted" || fetchParams.controller.state === "terminated"; + } + function normalizeMethod(method) { + return normalizedMethodRecordsBase[method.toLowerCase()] ?? method; + } + function serializeJavascriptValueToJSONString(value) { + const result = JSON.stringify(value); + if (result === void 0) { + throw new TypeError("Value is not JSON serializable"); + } + assert(typeof result === "string"); + return result; + } + var esIteratorPrototype = Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())); + function createIterator(name, kInternalIterator, keyIndex = 0, valueIndex = 1) { + class FastIterableIterator { + /** @type {any} */ + #target; + /** @type {'key' | 'value' | 'key+value'} */ + #kind; + /** @type {number} */ + #index; + /** + * @see https://webidl.spec.whatwg.org/#dfn-default-iterator-object + * @param {unknown} target + * @param {'key' | 'value' | 'key+value'} kind + */ + constructor(target, kind) { + this.#target = target; + this.#kind = kind; + this.#index = 0; + } + next() { + if (typeof this !== "object" || this === null || !(#target in this)) { + throw new TypeError( + `'next' called on an object that does not implement interface ${name} Iterator.` + ); + } + const index = this.#index; + const values = this.#target[kInternalIterator]; + const len = values.length; + if (index >= len) { + return { + value: void 0, + done: true + }; + } + const { [keyIndex]: key, [valueIndex]: value } = values[index]; + this.#index = index + 1; + let result; + switch (this.#kind) { + case "key": + result = key; + break; + case "value": + result = value; + break; + case "key+value": + result = [key, value]; + break; + } + return { + value: result, + done: false + }; + } + } + delete FastIterableIterator.prototype.constructor; + Object.setPrototypeOf(FastIterableIterator.prototype, esIteratorPrototype); + Object.defineProperties(FastIterableIterator.prototype, { + [Symbol.toStringTag]: { + writable: false, + enumerable: false, + configurable: true, + value: `${name} Iterator` + }, + next: { writable: true, enumerable: true, configurable: true } + }); + return function(target, kind) { + return new FastIterableIterator(target, kind); + }; + } + function iteratorMixin(name, object, kInternalIterator, keyIndex = 0, valueIndex = 1) { + const makeIterator = createIterator(name, kInternalIterator, keyIndex, valueIndex); + const properties = { + keys: { + writable: true, + enumerable: true, + configurable: true, + value: function keys() { + webidl.brandCheck(this, object); + return makeIterator(this, "key"); + } + }, + values: { + writable: true, + enumerable: true, + configurable: true, + value: function values() { + webidl.brandCheck(this, object); + return makeIterator(this, "value"); + } + }, + entries: { + writable: true, + enumerable: true, + configurable: true, + value: function entries() { + webidl.brandCheck(this, object); + return makeIterator(this, "key+value"); + } + }, + forEach: { + writable: true, + enumerable: true, + configurable: true, + value: function forEach(callbackfn, thisArg = globalThis) { + webidl.brandCheck(this, object); + webidl.argumentLengthCheck(arguments, 1, `${name}.forEach`); + if (typeof callbackfn !== "function") { + throw new TypeError( + `Failed to execute 'forEach' on '${name}': parameter 1 is not of type 'Function'.` + ); + } + for (const { 0: key, 1: value } of makeIterator(this, "key+value")) { + callbackfn.call(thisArg, value, key, this); + } + } + } + }; + return Object.defineProperties(object.prototype, { + ...properties, + [Symbol.iterator]: { + writable: true, + enumerable: false, + configurable: true, + value: properties.entries.value + } + }); + } + async function fullyReadBody(body, processBody, processBodyError) { + const successSteps = processBody; + const errorSteps = processBodyError; + let reader; + try { + reader = body.stream.getReader(); + } catch (e) { + errorSteps(e); + return; + } + try { + successSteps(await readAllBytes(reader)); + } catch (e) { + errorSteps(e); + } + } + function isReadableStreamLike(stream) { + return stream instanceof ReadableStream || stream[Symbol.toStringTag] === "ReadableStream" && typeof stream.tee === "function"; + } + function readableStreamClose(controller) { + try { + controller.close(); + controller.byobRequest?.respond(0); + } catch (err) { + if (!err.message.includes("Controller is already closed") && !err.message.includes("ReadableStream is already closed")) { + throw err; + } + } + } + var invalidIsomorphicEncodeValueRegex = /[^\x00-\xFF]/; + function isomorphicEncode(input) { + assert(!invalidIsomorphicEncodeValueRegex.test(input)); + return input; + } + async function readAllBytes(reader) { + const bytes = []; + let byteLength = 0; + while (true) { + const { done, value: chunk } = await reader.read(); + if (done) { + return Buffer.concat(bytes, byteLength); + } + if (!isUint8Array(chunk)) { + throw new TypeError("Received non-Uint8Array chunk"); + } + bytes.push(chunk); + byteLength += chunk.length; + } + } + function urlIsLocal(url) { + assert("protocol" in url); + const protocol = url.protocol; + return protocol === "about:" || protocol === "blob:" || protocol === "data:"; + } + function urlHasHttpsScheme(url) { + return typeof url === "string" && url[5] === ":" && url[0] === "h" && url[1] === "t" && url[2] === "t" && url[3] === "p" && url[4] === "s" || url.protocol === "https:"; + } + function urlIsHttpHttpsScheme(url) { + assert("protocol" in url); + const protocol = url.protocol; + return protocol === "http:" || protocol === "https:"; + } + function simpleRangeHeaderValue(value, allowWhitespace) { + const data = value; + if (!data.startsWith("bytes")) { + return "failure"; + } + const position = { position: 5 }; + if (allowWhitespace) { + collectASequenceOfCodePoints( + (char) => char === " " || char === " ", + data, + position + ); + } + if (data.charCodeAt(position.position) !== 61) { + return "failure"; + } + position.position++; + if (allowWhitespace) { + collectASequenceOfCodePoints( + (char) => char === " " || char === " ", + data, + position + ); + } + const rangeStart = collectASequenceOfCodePoints( + (char) => { + const code = char.charCodeAt(0); + return code >= 48 && code <= 57; + }, + data, + position + ); + const rangeStartValue = rangeStart.length ? Number(rangeStart) : null; + if (allowWhitespace) { + collectASequenceOfCodePoints( + (char) => char === " " || char === " ", + data, + position + ); + } + if (data.charCodeAt(position.position) !== 45) { + return "failure"; + } + position.position++; + if (allowWhitespace) { + collectASequenceOfCodePoints( + (char) => char === " " || char === " ", + data, + position + ); + } + const rangeEnd = collectASequenceOfCodePoints( + (char) => { + const code = char.charCodeAt(0); + return code >= 48 && code <= 57; + }, + data, + position + ); + const rangeEndValue = rangeEnd.length ? Number(rangeEnd) : null; + if (position.position < data.length) { + return "failure"; + } + if (rangeEndValue === null && rangeStartValue === null) { + return "failure"; + } + if (rangeStartValue > rangeEndValue) { + return "failure"; + } + return { rangeStartValue, rangeEndValue }; + } + function buildContentRange(rangeStart, rangeEnd, fullLength) { + let contentRange = "bytes "; + contentRange += isomorphicEncode(`${rangeStart}`); + contentRange += "-"; + contentRange += isomorphicEncode(`${rangeEnd}`); + contentRange += "/"; + contentRange += isomorphicEncode(`${fullLength}`); + return contentRange; + } + var InflateStream = class extends Transform { + #zlibOptions; + /** @param {zlib.ZlibOptions} [zlibOptions] */ + constructor(zlibOptions) { + super(); + this.#zlibOptions = zlibOptions; + } + _transform(chunk, encoding, callback) { + if (!this._inflateStream) { + if (chunk.length === 0) { + callback(); + return; + } + this._inflateStream = (chunk[0] & 15) === 8 ? zlib.createInflate(this.#zlibOptions) : zlib.createInflateRaw(this.#zlibOptions); + this._inflateStream.on("data", this.push.bind(this)); + this._inflateStream.on("end", () => this.push(null)); + this._inflateStream.on("error", (err) => this.destroy(err)); + } + this._inflateStream.write(chunk, encoding, callback); + } + _final(callback) { + if (this._inflateStream) { + this._inflateStream.end(); + this._inflateStream = null; + } + callback(); + } + }; + function createInflate(zlibOptions) { + return new InflateStream(zlibOptions); + } + function extractMimeType(headers) { + let charset = null; + let essence = null; + let mimeType = null; + const values = getDecodeSplit("content-type", headers); + if (values === null) { + return "failure"; + } + for (const value of values) { + const temporaryMimeType = parseMIMEType(value); + if (temporaryMimeType === "failure" || temporaryMimeType.essence === "*/*") { + continue; + } + mimeType = temporaryMimeType; + if (mimeType.essence !== essence) { + charset = null; + if (mimeType.parameters.has("charset")) { + charset = mimeType.parameters.get("charset"); + } + essence = mimeType.essence; + } else if (!mimeType.parameters.has("charset") && charset !== null) { + mimeType.parameters.set("charset", charset); + } + } + if (mimeType == null) { + return "failure"; + } + return mimeType; + } + function gettingDecodingSplitting(value) { + const input = value; + const position = { position: 0 }; + const values = []; + let temporaryValue = ""; + while (position.position < input.length) { + temporaryValue += collectASequenceOfCodePoints( + (char) => char !== '"' && char !== ",", + input, + position + ); + if (position.position < input.length) { + if (input.charCodeAt(position.position) === 34) { + temporaryValue += collectAnHTTPQuotedString( + input, + position + ); + if (position.position < input.length) { + continue; + } + } else { + assert(input.charCodeAt(position.position) === 44); + position.position++; + } + } + temporaryValue = removeChars(temporaryValue, true, true, (char) => char === 9 || char === 32); + values.push(temporaryValue); + temporaryValue = ""; + } + return values; + } + function getDecodeSplit(name, list) { + const value = list.get(name, true); + if (value === null) { + return null; + } + return gettingDecodingSplitting(value); + } + var textDecoder = new TextDecoder(); + function utf8DecodeBytes(buffer) { + if (buffer.length === 0) { + return ""; + } + if (buffer[0] === 239 && buffer[1] === 187 && buffer[2] === 191) { + buffer = buffer.subarray(3); + } + const output = textDecoder.decode(buffer); + return output; + } + var EnvironmentSettingsObjectBase = class { + get baseUrl() { + return getGlobalOrigin(); + } + get origin() { + return this.baseUrl?.origin; + } + policyContainer = makePolicyContainer(); + }; + var EnvironmentSettingsObject = class { + settingsObject = new EnvironmentSettingsObjectBase(); + }; + var environmentSettingsObject = new EnvironmentSettingsObject(); + module.exports = { + isAborted, + isCancelled, + isValidEncodedURL, + createDeferredPromise, + ReadableStreamFrom, + tryUpgradeRequestToAPotentiallyTrustworthyURL, + clampAndCoarsenConnectionTimingInfo, + coarsenedSharedCurrentTime, + determineRequestsReferrer, + makePolicyContainer, + clonePolicyContainer, + appendFetchMetadata, + appendRequestOriginHeader, + TAOCheck, + corsCheck, + crossOriginResourcePolicyCheck, + createOpaqueTimingInfo, + setRequestReferrerPolicyOnRedirect, + isValidHTTPToken, + requestBadPort, + requestCurrentURL, + responseURL, + responseLocationURL, + isBlobLike, + isURLPotentiallyTrustworthy, + isValidReasonPhrase, + sameOrigin, + normalizeMethod, + serializeJavascriptValueToJSONString, + iteratorMixin, + createIterator, + isValidHeaderName, + isValidHeaderValue, + isErrorLike, + fullyReadBody, + bytesMatch, + isReadableStreamLike, + readableStreamClose, + isomorphicEncode, + urlIsLocal, + urlHasHttpsScheme, + urlIsHttpHttpsScheme, + readAllBytes, + simpleRangeHeaderValue, + buildContentRange, + parseMetadata, + createInflate, + extractMimeType, + getDecodeSplit, + utf8DecodeBytes, + environmentSettingsObject + }; + } +}); + +// +var require_symbols2 = __commonJS({ + ""(exports, module) { + "use strict"; + module.exports = { + kUrl: Symbol("url"), + kHeaders: Symbol("headers"), + kSignal: Symbol("signal"), + kState: Symbol("state"), + kDispatcher: Symbol("dispatcher") + }; + } +}); + +// +var require_file = __commonJS({ + ""(exports, module) { + "use strict"; + var { Blob: Blob2, File } = __require("node:buffer"); + var { kState } = require_symbols2(); + var { webidl } = require_webidl(); + var FileLike = class _FileLike { + constructor(blobLike, fileName, options = {}) { + const n = fileName; + const t = options.type; + const d = options.lastModified ?? Date.now(); + this[kState] = { + blobLike, + name: n, + type: t, + lastModified: d + }; + } + stream(...args) { + webidl.brandCheck(this, _FileLike); + return this[kState].blobLike.stream(...args); + } + arrayBuffer(...args) { + webidl.brandCheck(this, _FileLike); + return this[kState].blobLike.arrayBuffer(...args); + } + slice(...args) { + webidl.brandCheck(this, _FileLike); + return this[kState].blobLike.slice(...args); + } + text(...args) { + webidl.brandCheck(this, _FileLike); + return this[kState].blobLike.text(...args); + } + get size() { + webidl.brandCheck(this, _FileLike); + return this[kState].blobLike.size; + } + get type() { + webidl.brandCheck(this, _FileLike); + return this[kState].blobLike.type; + } + get name() { + webidl.brandCheck(this, _FileLike); + return this[kState].name; + } + get lastModified() { + webidl.brandCheck(this, _FileLike); + return this[kState].lastModified; + } + get [Symbol.toStringTag]() { + return "File"; + } + }; + webidl.converters.Blob = webidl.interfaceConverter(Blob2); + function isFileLike(object) { + return object instanceof File || object && (typeof object.stream === "function" || typeof object.arrayBuffer === "function") && object[Symbol.toStringTag] === "File"; + } + module.exports = { FileLike, isFileLike }; + } +}); + +// +var require_formdata = __commonJS({ + ""(exports, module) { + "use strict"; + var { isBlobLike, iteratorMixin } = require_util2(); + var { kState } = require_symbols2(); + var { kEnumerableProperty } = require_util(); + var { FileLike, isFileLike } = require_file(); + var { webidl } = require_webidl(); + var { File: NativeFile } = __require("node:buffer"); + var nodeUtil = __require("node:util"); + var File = globalThis.File ?? NativeFile; + var FormData = class _FormData { + constructor(form) { + webidl.util.markAsUncloneable(this); + if (form !== void 0) { + throw webidl.errors.conversionFailed({ + prefix: "FormData constructor", + argument: "Argument 1", + types: ["undefined"] + }); + } + this[kState] = []; + } + append(name, value, filename = void 0) { + webidl.brandCheck(this, _FormData); + const prefix = "FormData.append"; + webidl.argumentLengthCheck(arguments, 2, prefix); + if (arguments.length === 3 && !isBlobLike(value)) { + throw new TypeError( + "Failed to execute 'append' on 'FormData': parameter 2 is not of type 'Blob'" + ); + } + name = webidl.converters.USVString(name, prefix, "name"); + value = isBlobLike(value) ? webidl.converters.Blob(value, prefix, "value", { strict: false }) : webidl.converters.USVString(value, prefix, "value"); + filename = arguments.length === 3 ? webidl.converters.USVString(filename, prefix, "filename") : void 0; + const entry = makeEntry(name, value, filename); + this[kState].push(entry); + } + delete(name) { + webidl.brandCheck(this, _FormData); + const prefix = "FormData.delete"; + webidl.argumentLengthCheck(arguments, 1, prefix); + name = webidl.converters.USVString(name, prefix, "name"); + this[kState] = this[kState].filter((entry) => entry.name !== name); + } + get(name) { + webidl.brandCheck(this, _FormData); + const prefix = "FormData.get"; + webidl.argumentLengthCheck(arguments, 1, prefix); + name = webidl.converters.USVString(name, prefix, "name"); + const idx = this[kState].findIndex((entry) => entry.name === name); + if (idx === -1) { + return null; + } + return this[kState][idx].value; + } + getAll(name) { + webidl.brandCheck(this, _FormData); + const prefix = "FormData.getAll"; + webidl.argumentLengthCheck(arguments, 1, prefix); + name = webidl.converters.USVString(name, prefix, "name"); + return this[kState].filter((entry) => entry.name === name).map((entry) => entry.value); + } + has(name) { + webidl.brandCheck(this, _FormData); + const prefix = "FormData.has"; + webidl.argumentLengthCheck(arguments, 1, prefix); + name = webidl.converters.USVString(name, prefix, "name"); + return this[kState].findIndex((entry) => entry.name === name) !== -1; + } + set(name, value, filename = void 0) { + webidl.brandCheck(this, _FormData); + const prefix = "FormData.set"; + webidl.argumentLengthCheck(arguments, 2, prefix); + if (arguments.length === 3 && !isBlobLike(value)) { + throw new TypeError( + "Failed to execute 'set' on 'FormData': parameter 2 is not of type 'Blob'" + ); + } + name = webidl.converters.USVString(name, prefix, "name"); + value = isBlobLike(value) ? webidl.converters.Blob(value, prefix, "name", { strict: false }) : webidl.converters.USVString(value, prefix, "name"); + filename = arguments.length === 3 ? webidl.converters.USVString(filename, prefix, "name") : void 0; + const entry = makeEntry(name, value, filename); + const idx = this[kState].findIndex((entry2) => entry2.name === name); + if (idx !== -1) { + this[kState] = [ + ...this[kState].slice(0, idx), + entry, + ...this[kState].slice(idx + 1).filter((entry2) => entry2.name !== name) + ]; + } else { + this[kState].push(entry); + } + } + [nodeUtil.inspect.custom](depth, options) { + const state = this[kState].reduce((a, b) => { + if (a[b.name]) { + if (Array.isArray(a[b.name])) { + a[b.name].push(b.value); + } else { + a[b.name] = [a[b.name], b.value]; + } + } else { + a[b.name] = b.value; + } + return a; + }, { __proto__: null }); + options.depth ??= depth; + options.colors ??= true; + const output = nodeUtil.formatWithOptions(options, state); + return `FormData ${output.slice(output.indexOf("]") + 2)}`; + } + }; + iteratorMixin("FormData", FormData, kState, "name", "value"); + Object.defineProperties(FormData.prototype, { + append: kEnumerableProperty, + delete: kEnumerableProperty, + get: kEnumerableProperty, + getAll: kEnumerableProperty, + has: kEnumerableProperty, + set: kEnumerableProperty, + [Symbol.toStringTag]: { + value: "FormData", + configurable: true + } + }); + function makeEntry(name, value, filename) { + if (typeof value === "string") { + } else { + if (!isFileLike(value)) { + value = value instanceof Blob ? new File([value], "blob", { type: value.type }) : new FileLike(value, "blob", { type: value.type }); + } + if (filename !== void 0) { + const options = { + type: value.type, + lastModified: value.lastModified + }; + value = value instanceof NativeFile ? new File([value], filename, options) : new FileLike(value, filename, options); + } + } + return { name, value }; + } + module.exports = { FormData, makeEntry }; + } +}); + +// +var require_formdata_parser = __commonJS({ + ""(exports, module) { + "use strict"; + var { isUSVString, bufferToLowerCasedHeaderName } = require_util(); + var { utf8DecodeBytes } = require_util2(); + var { HTTP_TOKEN_CODEPOINTS, isomorphicDecode } = require_data_url(); + var { isFileLike } = require_file(); + var { makeEntry } = require_formdata(); + var assert = __require("node:assert"); + var { File: NodeFile } = __require("node:buffer"); + var File = globalThis.File ?? NodeFile; + var formDataNameBuffer = Buffer.from('form-data; name="'); + var filenameBuffer = Buffer.from("; filename"); + var dd = Buffer.from("--"); + var ddcrlf = Buffer.from("--\r\n"); + function isAsciiString(chars) { + for (let i = 0; i < chars.length; ++i) { + if ((chars.charCodeAt(i) & ~127) !== 0) { + return false; + } + } + return true; + } + function validateBoundary(boundary) { + const length = boundary.length; + if (length < 27 || length > 70) { + return false; + } + for (let i = 0; i < length; ++i) { + const cp = boundary.charCodeAt(i); + if (!(cp >= 48 && cp <= 57 || cp >= 65 && cp <= 90 || cp >= 97 && cp <= 122 || cp === 39 || cp === 45 || cp === 95)) { + return false; + } + } + return true; + } + function multipartFormDataParser(input, mimeType) { + assert(mimeType !== "failure" && mimeType.essence === "multipart/form-data"); + const boundaryString = mimeType.parameters.get("boundary"); + if (boundaryString === void 0) { + return "failure"; + } + const boundary = Buffer.from(`--${boundaryString}`, "utf8"); + const entryList = []; + const position = { position: 0 }; + while (input[position.position] === 13 && input[position.position + 1] === 10) { + position.position += 2; + } + let trailing = input.length; + while (input[trailing - 1] === 10 && input[trailing - 2] === 13) { + trailing -= 2; + } + if (trailing !== input.length) { + input = input.subarray(0, trailing); + } + while (true) { + if (input.subarray(position.position, position.position + boundary.length).equals(boundary)) { + position.position += boundary.length; + } else { + return "failure"; + } + if (position.position === input.length - 2 && bufferStartsWith(input, dd, position) || position.position === input.length - 4 && bufferStartsWith(input, ddcrlf, position)) { + return entryList; + } + if (input[position.position] !== 13 || input[position.position + 1] !== 10) { + return "failure"; + } + position.position += 2; + const result = parseMultipartFormDataHeaders(input, position); + if (result === "failure") { + return "failure"; + } + let { name, filename, contentType, encoding } = result; + position.position += 2; + let body; + { + const boundaryIndex = input.indexOf(boundary.subarray(2), position.position); + if (boundaryIndex === -1) { + return "failure"; + } + body = input.subarray(position.position, boundaryIndex - 4); + position.position += body.length; + if (encoding === "base64") { + body = Buffer.from(body.toString(), "base64"); + } + } + if (input[position.position] !== 13 || input[position.position + 1] !== 10) { + return "failure"; + } else { + position.position += 2; + } + let value; + if (filename !== null) { + contentType ??= "text/plain"; + if (!isAsciiString(contentType)) { + contentType = ""; + } + value = new File([body], filename, { type: contentType }); + } else { + value = utf8DecodeBytes(Buffer.from(body)); + } + assert(isUSVString(name)); + assert(typeof value === "string" && isUSVString(value) || isFileLike(value)); + entryList.push(makeEntry(name, value, filename)); + } + } + function parseMultipartFormDataHeaders(input, position) { + let name = null; + let filename = null; + let contentType = null; + let encoding = null; + while (true) { + if (input[position.position] === 13 && input[position.position + 1] === 10) { + if (name === null) { + return "failure"; + } + return { name, filename, contentType, encoding }; + } + let headerName = collectASequenceOfBytes( + (char) => char !== 10 && char !== 13 && char !== 58, + input, + position + ); + headerName = removeChars(headerName, true, true, (char) => char === 9 || char === 32); + if (!HTTP_TOKEN_CODEPOINTS.test(headerName.toString())) { + return "failure"; + } + if (input[position.position] !== 58) { + return "failure"; + } + position.position++; + collectASequenceOfBytes( + (char) => char === 32 || char === 9, + input, + position + ); + switch (bufferToLowerCasedHeaderName(headerName)) { + case "content-disposition": { + name = filename = null; + if (!bufferStartsWith(input, formDataNameBuffer, position)) { + return "failure"; + } + position.position += 17; + name = parseMultipartFormDataName(input, position); + if (name === null) { + return "failure"; + } + if (bufferStartsWith(input, filenameBuffer, position)) { + let check = position.position + filenameBuffer.length; + if (input[check] === 42) { + position.position += 1; + check += 1; + } + if (input[check] !== 61 || input[check + 1] !== 34) { + return "failure"; + } + position.position += 12; + filename = parseMultipartFormDataName(input, position); + if (filename === null) { + return "failure"; + } + } + break; + } + case "content-type": { + let headerValue = collectASequenceOfBytes( + (char) => char !== 10 && char !== 13, + input, + position + ); + headerValue = removeChars(headerValue, false, true, (char) => char === 9 || char === 32); + contentType = isomorphicDecode(headerValue); + break; + } + case "content-transfer-encoding": { + let headerValue = collectASequenceOfBytes( + (char) => char !== 10 && char !== 13, + input, + position + ); + headerValue = removeChars(headerValue, false, true, (char) => char === 9 || char === 32); + encoding = isomorphicDecode(headerValue); + break; + } + default: { + collectASequenceOfBytes( + (char) => char !== 10 && char !== 13, + input, + position + ); + } + } + if (input[position.position] !== 13 && input[position.position + 1] !== 10) { + return "failure"; + } else { + position.position += 2; + } + } + } + function parseMultipartFormDataName(input, position) { + assert(input[position.position - 1] === 34); + let name = collectASequenceOfBytes( + (char) => char !== 10 && char !== 13 && char !== 34, + input, + position + ); + if (input[position.position] !== 34) { + return null; + } else { + position.position++; + } + name = new TextDecoder().decode(name).replace(/%0A/ig, "\n").replace(/%0D/ig, "\r").replace(/%22/g, '"'); + return name; + } + function collectASequenceOfBytes(condition, input, position) { + let start = position.position; + while (start < input.length && condition(input[start])) { + ++start; + } + return input.subarray(position.position, position.position = start); + } + function removeChars(buf, leading, trailing, predicate) { + let lead = 0; + let trail = buf.length - 1; + if (leading) { + while (lead < buf.length && predicate(buf[lead])) + lead++; + } + if (trailing) { + while (trail > 0 && predicate(buf[trail])) + trail--; + } + return lead === 0 && trail === buf.length - 1 ? buf : buf.subarray(lead, trail + 1); + } + function bufferStartsWith(buffer, start, position) { + if (buffer.length < start.length) { + return false; + } + for (let i = 0; i < start.length; i++) { + if (start[i] !== buffer[position.position + i]) { + return false; + } + } + return true; + } + module.exports = { + multipartFormDataParser, + validateBoundary + }; + } +}); + +// +var require_body = __commonJS({ + ""(exports, module) { + "use strict"; + var util = require_util(); + var { + ReadableStreamFrom, + isBlobLike, + isReadableStreamLike, + readableStreamClose, + createDeferredPromise, + fullyReadBody, + extractMimeType, + utf8DecodeBytes + } = require_util2(); + var { FormData } = require_formdata(); + var { kState } = require_symbols2(); + var { webidl } = require_webidl(); + var { Blob: Blob2 } = __require("node:buffer"); + var assert = __require("node:assert"); + var { isErrored, isDisturbed } = __require("node:stream"); + var { isArrayBuffer } = __require("node:util/types"); + var { serializeAMimeType } = require_data_url(); + var { multipartFormDataParser } = require_formdata_parser(); + var random; + try { + const crypto = __require("node:crypto"); + random = (max) => crypto.randomInt(0, max); + } catch { + random = (max) => Math.floor(Math.random(max)); + } + var textEncoder = new TextEncoder(); + function noop() { + } + var hasFinalizationRegistry = globalThis.FinalizationRegistry && process.version.indexOf("v18") !== 0; + var streamRegistry; + if (hasFinalizationRegistry) { + streamRegistry = new FinalizationRegistry((weakRef) => { + const stream = weakRef.deref(); + if (stream && !stream.locked && !isDisturbed(stream) && !isErrored(stream)) { + stream.cancel("Response object has been garbage collected").catch(noop); + } + }); + } + function extractBody(object, keepalive = false) { + let stream = null; + if (object instanceof ReadableStream) { + stream = object; + } else if (isBlobLike(object)) { + stream = object.stream(); + } else { + stream = new ReadableStream({ + async pull(controller) { + const buffer = typeof source === "string" ? textEncoder.encode(source) : source; + if (buffer.byteLength) { + controller.enqueue(buffer); + } + queueMicrotask(() => readableStreamClose(controller)); + }, + start() { + }, + type: "bytes" + }); + } + assert(isReadableStreamLike(stream)); + let action = null; + let source = null; + let length = null; + let type = null; + if (typeof object === "string") { + source = object; + type = "text/plain;charset=UTF-8"; + } else if (object instanceof URLSearchParams) { + source = object.toString(); + type = "application/x-www-form-urlencoded;charset=UTF-8"; + } else if (isArrayBuffer(object)) { + source = new Uint8Array(object.slice()); + } else if (ArrayBuffer.isView(object)) { + source = new Uint8Array(object.buffer.slice(object.byteOffset, object.byteOffset + object.byteLength)); + } else if (util.isFormDataLike(object)) { + const boundary = `----formdata-undici-0${`${random(1e11)}`.padStart(11, "0")}`; + const prefix = `--${boundary}\r +Content-Disposition: form-data`; + const escape = (str) => str.replace(/\n/g, "%0A").replace(/\r/g, "%0D").replace(/"/g, "%22"); + const normalizeLinefeeds = (value) => value.replace(/\r?\n|\r/g, "\r\n"); + const blobParts = []; + const rn = new Uint8Array([13, 10]); + length = 0; + let hasUnknownSizeValue = false; + for (const [name, value] of object) { + if (typeof value === "string") { + const chunk2 = textEncoder.encode(prefix + `; name="${escape(normalizeLinefeeds(name))}"\r +\r +${normalizeLinefeeds(value)}\r +`); + blobParts.push(chunk2); + length += chunk2.byteLength; + } else { + const chunk2 = textEncoder.encode(`${prefix}; name="${escape(normalizeLinefeeds(name))}"` + (value.name ? `; filename="${escape(value.name)}"` : "") + `\r +Content-Type: ${value.type || "application/octet-stream"}\r +\r +`); + blobParts.push(chunk2, value, rn); + if (typeof value.size === "number") { + length += chunk2.byteLength + value.size + rn.byteLength; + } else { + hasUnknownSizeValue = true; + } + } + } + const chunk = textEncoder.encode(`--${boundary}--\r +`); + blobParts.push(chunk); + length += chunk.byteLength; + if (hasUnknownSizeValue) { + length = null; + } + source = object; + action = async function* () { + for (const part of blobParts) { + if (part.stream) { + yield* part.stream(); + } else { + yield part; + } + } + }; + type = `multipart/form-data; boundary=${boundary}`; + } else if (isBlobLike(object)) { + source = object; + length = object.size; + if (object.type) { + type = object.type; + } + } else if (typeof object[Symbol.asyncIterator] === "function") { + if (keepalive) { + throw new TypeError("keepalive"); + } + if (util.isDisturbed(object) || object.locked) { + throw new TypeError( + "Response body object should not be disturbed or locked" + ); + } + stream = object instanceof ReadableStream ? object : ReadableStreamFrom(object); + } + if (typeof source === "string" || util.isBuffer(source)) { + length = Buffer.byteLength(source); + } + if (action != null) { + let iterator; + stream = new ReadableStream({ + async start() { + iterator = action(object)[Symbol.asyncIterator](); + }, + async pull(controller) { + const { value, done } = await iterator.next(); + if (done) { + queueMicrotask(() => { + controller.close(); + controller.byobRequest?.respond(0); + }); + } else { + if (!isErrored(stream)) { + const buffer = new Uint8Array(value); + if (buffer.byteLength) { + controller.enqueue(buffer); + } + } + } + return controller.desiredSize > 0; + }, + async cancel(reason) { + await iterator.return(); + }, + type: "bytes" + }); + } + const body = { stream, source, length }; + return [body, type]; + } + function safelyExtractBody(object, keepalive = false) { + if (object instanceof ReadableStream) { + assert(!util.isDisturbed(object), "The body has already been consumed."); + assert(!object.locked, "The stream is locked."); + } + return extractBody(object, keepalive); + } + function cloneBody(instance, body) { + const [out1, out2] = body.stream.tee(); + body.stream = out1; + return { + stream: out2, + length: body.length, + source: body.source + }; + } + function throwIfAborted(state) { + if (state.aborted) { + throw new DOMException("The operation was aborted.", "AbortError"); + } + } + function bodyMixinMethods(instance) { + const methods = { + blob() { + return consumeBody(this, (bytes) => { + let mimeType = bodyMimeType(this); + if (mimeType === null) { + mimeType = ""; + } else if (mimeType) { + mimeType = serializeAMimeType(mimeType); + } + return new Blob2([bytes], { type: mimeType }); + }, instance); + }, + arrayBuffer() { + return consumeBody(this, (bytes) => { + return new Uint8Array(bytes).buffer; + }, instance); + }, + text() { + return consumeBody(this, utf8DecodeBytes, instance); + }, + json() { + return consumeBody(this, parseJSONFromBytes, instance); + }, + formData() { + return consumeBody(this, (value) => { + const mimeType = bodyMimeType(this); + if (mimeType !== null) { + switch (mimeType.essence) { + case "multipart/form-data": { + const parsed = multipartFormDataParser(value, mimeType); + if (parsed === "failure") { + throw new TypeError("Failed to parse body as FormData."); + } + const fd = new FormData(); + fd[kState] = parsed; + return fd; + } + case "application/x-www-form-urlencoded": { + const entries = new URLSearchParams(value.toString()); + const fd = new FormData(); + for (const [name, value2] of entries) { + fd.append(name, value2); + } + return fd; + } + } + } + throw new TypeError( + 'Content-Type was not one of "multipart/form-data" or "application/x-www-form-urlencoded".' + ); + }, instance); + }, + bytes() { + return consumeBody(this, (bytes) => { + return new Uint8Array(bytes); + }, instance); + } + }; + return methods; + } + function mixinBody(prototype) { + Object.assign(prototype.prototype, bodyMixinMethods(prototype)); + } + async function consumeBody(object, convertBytesToJSValue, instance) { + webidl.brandCheck(object, instance); + if (bodyUnusable(object)) { + throw new TypeError("Body is unusable: Body has already been read"); + } + throwIfAborted(object[kState]); + const promise = createDeferredPromise(); + const errorSteps = (error2) => promise.reject(error2); + const successSteps = (data) => { + try { + promise.resolve(convertBytesToJSValue(data)); + } catch (e) { + errorSteps(e); + } + }; + if (object[kState].body == null) { + successSteps(Buffer.allocUnsafe(0)); + return promise.promise; + } + await fullyReadBody(object[kState].body, successSteps, errorSteps); + return promise.promise; + } + function bodyUnusable(object) { + const body = object[kState].body; + return body != null && (body.stream.locked || util.isDisturbed(body.stream)); + } + function parseJSONFromBytes(bytes) { + return JSON.parse(utf8DecodeBytes(bytes)); + } + function bodyMimeType(requestOrResponse) { + const headers = requestOrResponse[kState].headersList; + const mimeType = extractMimeType(headers); + if (mimeType === "failure") { + return null; + } + return mimeType; + } + module.exports = { + extractBody, + safelyExtractBody, + cloneBody, + mixinBody, + streamRegistry, + hasFinalizationRegistry, + bodyUnusable + }; + } +}); + +// +var require_client_h1 = __commonJS({ + ""(exports, module) { + "use strict"; + var assert = __require("node:assert"); + var util = require_util(); + var { channels } = require_diagnostics(); + var timers = require_timers(); + var { + RequestContentLengthMismatchError, + ResponseContentLengthMismatchError, + RequestAbortedError, + HeadersTimeoutError, + HeadersOverflowError, + SocketError, + InformationalError, + BodyTimeoutError, + HTTPParserError, + ResponseExceededMaxSizeError + } = require_errors(); + var { + kUrl, + kReset, + kClient, + kParser, + kBlocking, + kRunning, + kPending, + kSize, + kWriting, + kQueue, + kNoRef, + kKeepAliveDefaultTimeout, + kHostHeader, + kPendingIdx, + kRunningIdx, + kError, + kPipelining, + kSocket, + kKeepAliveTimeoutValue, + kMaxHeadersSize, + kKeepAliveMaxTimeout, + kKeepAliveTimeoutThreshold, + kHeadersTimeout, + kBodyTimeout, + kStrictContentLength, + kMaxRequests, + kCounter, + kMaxResponseSize, + kOnError, + kResume, + kHTTPContext + } = require_symbols(); + var constants3 = require_constants2(); + var EMPTY_BUF = Buffer.alloc(0); + var FastBuffer = Buffer[Symbol.species]; + var addListener = util.addListener; + var removeAllListeners = util.removeAllListeners; + var extractBody; + async function lazyllhttp() { + const llhttpWasmData = process.env.JEST_WORKER_ID ? require_llhttp_wasm() : void 0; + let mod; + try { + mod = await WebAssembly.compile(require_llhttp_simd_wasm()); + } catch (e) { + mod = await WebAssembly.compile(llhttpWasmData || require_llhttp_wasm()); + } + return await WebAssembly.instantiate(mod, { + env: { + /* eslint-disable camelcase */ + wasm_on_url: (p, at, len) => { + return 0; + }, + wasm_on_status: (p, at, len) => { + assert(currentParser.ptr === p); + const start = at - currentBufferPtr + currentBufferRef.byteOffset; + return currentParser.onStatus(new FastBuffer(currentBufferRef.buffer, start, len)) || 0; + }, + wasm_on_message_begin: (p) => { + assert(currentParser.ptr === p); + return currentParser.onMessageBegin() || 0; + }, + wasm_on_header_field: (p, at, len) => { + assert(currentParser.ptr === p); + const start = at - currentBufferPtr + currentBufferRef.byteOffset; + return currentParser.onHeaderField(new FastBuffer(currentBufferRef.buffer, start, len)) || 0; + }, + wasm_on_header_value: (p, at, len) => { + assert(currentParser.ptr === p); + const start = at - currentBufferPtr + currentBufferRef.byteOffset; + return currentParser.onHeaderValue(new FastBuffer(currentBufferRef.buffer, start, len)) || 0; + }, + wasm_on_headers_complete: (p, statusCode, upgrade, shouldKeepAlive) => { + assert(currentParser.ptr === p); + return currentParser.onHeadersComplete(statusCode, Boolean(upgrade), Boolean(shouldKeepAlive)) || 0; + }, + wasm_on_body: (p, at, len) => { + assert(currentParser.ptr === p); + const start = at - currentBufferPtr + currentBufferRef.byteOffset; + return currentParser.onBody(new FastBuffer(currentBufferRef.buffer, start, len)) || 0; + }, + wasm_on_message_complete: (p) => { + assert(currentParser.ptr === p); + return currentParser.onMessageComplete() || 0; + } + /* eslint-enable camelcase */ + } + }); + } + var llhttpInstance = null; + var llhttpPromise = lazyllhttp(); + llhttpPromise.catch(); + var currentParser = null; + var currentBufferRef = null; + var currentBufferSize = 0; + var currentBufferPtr = null; + var USE_NATIVE_TIMER = 0; + var USE_FAST_TIMER = 1; + var TIMEOUT_HEADERS = 2 | USE_FAST_TIMER; + var TIMEOUT_BODY = 4 | USE_FAST_TIMER; + var TIMEOUT_KEEP_ALIVE = 8 | USE_NATIVE_TIMER; + var Parser = class { + constructor(client, socket, { exports: exports2 }) { + assert(Number.isFinite(client[kMaxHeadersSize]) && client[kMaxHeadersSize] > 0); + this.llhttp = exports2; + this.ptr = this.llhttp.llhttp_alloc(constants3.TYPE.RESPONSE); + this.client = client; + this.socket = socket; + this.timeout = null; + this.timeoutValue = null; + this.timeoutType = null; + this.statusCode = null; + this.statusText = ""; + this.upgrade = false; + this.headers = []; + this.headersSize = 0; + this.headersMaxSize = client[kMaxHeadersSize]; + this.shouldKeepAlive = false; + this.paused = false; + this.resume = this.resume.bind(this); + this.bytesRead = 0; + this.keepAlive = ""; + this.contentLength = ""; + this.connection = ""; + this.maxResponseSize = client[kMaxResponseSize]; + } + setTimeout(delay, type) { + if (delay !== this.timeoutValue || type & USE_FAST_TIMER ^ this.timeoutType & USE_FAST_TIMER) { + if (this.timeout) { + timers.clearTimeout(this.timeout); + this.timeout = null; + } + if (delay) { + if (type & USE_FAST_TIMER) { + this.timeout = timers.setFastTimeout(onParserTimeout, delay, new WeakRef(this)); + } else { + this.timeout = setTimeout(onParserTimeout, delay, new WeakRef(this)); + this.timeout.unref(); + } + } + this.timeoutValue = delay; + } else if (this.timeout) { + if (this.timeout.refresh) { + this.timeout.refresh(); + } + } + this.timeoutType = type; + } + resume() { + if (this.socket.destroyed || !this.paused) { + return; + } + assert(this.ptr != null); + assert(currentParser == null); + this.llhttp.llhttp_resume(this.ptr); + assert(this.timeoutType === TIMEOUT_BODY); + if (this.timeout) { + if (this.timeout.refresh) { + this.timeout.refresh(); + } + } + this.paused = false; + this.execute(this.socket.read() || EMPTY_BUF); + this.readMore(); + } + readMore() { + while (!this.paused && this.ptr) { + const chunk = this.socket.read(); + if (chunk === null) { + break; + } + this.execute(chunk); + } + } + execute(data) { + assert(this.ptr != null); + assert(currentParser == null); + assert(!this.paused); + const { socket, llhttp } = this; + if (data.length > currentBufferSize) { + if (currentBufferPtr) { + llhttp.free(currentBufferPtr); + } + currentBufferSize = Math.ceil(data.length / 4096) * 4096; + currentBufferPtr = llhttp.malloc(currentBufferSize); + } + new Uint8Array(llhttp.memory.buffer, currentBufferPtr, currentBufferSize).set(data); + try { + let ret; + try { + currentBufferRef = data; + currentParser = this; + ret = llhttp.llhttp_execute(this.ptr, currentBufferPtr, data.length); + } catch (err) { + throw err; + } finally { + currentParser = null; + currentBufferRef = null; + } + const offset = llhttp.llhttp_get_error_pos(this.ptr) - currentBufferPtr; + if (ret !== constants3.ERROR.OK) { + const body = data.subarray(offset); + if (ret === constants3.ERROR.PAUSED_UPGRADE) { + this.onUpgrade(body); + } else if (ret === constants3.ERROR.PAUSED) { + this.paused = true; + socket.unshift(body); + } else { + throw this.createError(ret, body); + } + } + } catch (err) { + util.destroy(socket, err); + } + } + finish() { + assert(currentParser === null); + assert(this.ptr != null); + assert(!this.paused); + const { llhttp } = this; + let ret; + try { + currentParser = this; + ret = llhttp.llhttp_finish(this.ptr); + } finally { + currentParser = null; + } + if (ret === constants3.ERROR.OK) { + return null; + } + if (ret === constants3.ERROR.PAUSED || ret === constants3.ERROR.PAUSED_UPGRADE) { + this.paused = true; + return null; + } + return this.createError(ret, EMPTY_BUF); + } + createError(ret, data) { + const { llhttp, contentLength, bytesRead } = this; + if (contentLength && bytesRead !== parseInt(contentLength, 10)) { + return new ResponseContentLengthMismatchError(); + } + const ptr = llhttp.llhttp_get_error_reason(this.ptr); + let message = ""; + if (ptr) { + const len = new Uint8Array(llhttp.memory.buffer, ptr).indexOf(0); + message = "Response does not match the HTTP/1.1 protocol (" + Buffer.from(llhttp.memory.buffer, ptr, len).toString() + ")"; + } + return new HTTPParserError(message, constants3.ERROR[ret], data); + } + destroy() { + assert(this.ptr != null); + assert(currentParser == null); + this.llhttp.llhttp_free(this.ptr); + this.ptr = null; + this.timeout && timers.clearTimeout(this.timeout); + this.timeout = null; + this.timeoutValue = null; + this.timeoutType = null; + this.paused = false; + } + onStatus(buf) { + this.statusText = buf.toString(); + } + onMessageBegin() { + const { socket, client } = this; + if (socket.destroyed) { + return -1; + } + const request = client[kQueue][client[kRunningIdx]]; + if (!request) { + return -1; + } + request.onResponseStarted(); + } + onHeaderField(buf) { + const len = this.headers.length; + if ((len & 1) === 0) { + this.headers.push(buf); + } else { + this.headers[len - 1] = Buffer.concat([this.headers[len - 1], buf]); + } + this.trackHeader(buf.length); + } + onHeaderValue(buf) { + let len = this.headers.length; + if ((len & 1) === 1) { + this.headers.push(buf); + len += 1; + } else { + this.headers[len - 1] = Buffer.concat([this.headers[len - 1], buf]); + } + const key = this.headers[len - 2]; + if (key.length === 10) { + const headerName = util.bufferToLowerCasedHeaderName(key); + if (headerName === "keep-alive") { + this.keepAlive += buf.toString(); + } else if (headerName === "connection") { + this.connection += buf.toString(); + } + } else if (key.length === 14 && util.bufferToLowerCasedHeaderName(key) === "content-length") { + this.contentLength += buf.toString(); + } + this.trackHeader(buf.length); + } + trackHeader(len) { + this.headersSize += len; + if (this.headersSize >= this.headersMaxSize) { + util.destroy(this.socket, new HeadersOverflowError()); + } + } + onUpgrade(head) { + const { upgrade, client, socket, headers, statusCode } = this; + assert(upgrade); + assert(client[kSocket] === socket); + assert(!socket.destroyed); + assert(!this.paused); + assert((headers.length & 1) === 0); + const request = client[kQueue][client[kRunningIdx]]; + assert(request); + assert(request.upgrade || request.method === "CONNECT"); + this.statusCode = null; + this.statusText = ""; + this.shouldKeepAlive = null; + this.headers = []; + this.headersSize = 0; + socket.unshift(head); + socket[kParser].destroy(); + socket[kParser] = null; + socket[kClient] = null; + socket[kError] = null; + removeAllListeners(socket); + client[kSocket] = null; + client[kHTTPContext] = null; + client[kQueue][client[kRunningIdx]++] = null; + client.emit("disconnect", client[kUrl], [client], new InformationalError("upgrade")); + try { + request.onUpgrade(statusCode, headers, socket); + } catch (err) { + util.destroy(socket, err); + } + client[kResume](); + } + onHeadersComplete(statusCode, upgrade, shouldKeepAlive) { + const { client, socket, headers, statusText } = this; + if (socket.destroyed) { + return -1; + } + const request = client[kQueue][client[kRunningIdx]]; + if (!request) { + return -1; + } + assert(!this.upgrade); + assert(this.statusCode < 200); + if (statusCode === 100) { + util.destroy(socket, new SocketError("bad response", util.getSocketInfo(socket))); + return -1; + } + if (upgrade && !request.upgrade) { + util.destroy(socket, new SocketError("bad upgrade", util.getSocketInfo(socket))); + return -1; + } + assert(this.timeoutType === TIMEOUT_HEADERS); + this.statusCode = statusCode; + this.shouldKeepAlive = shouldKeepAlive || // Override llhttp value which does not allow keepAlive for HEAD. + request.method === "HEAD" && !socket[kReset] && this.connection.toLowerCase() === "keep-alive"; + if (this.statusCode >= 200) { + const bodyTimeout = request.bodyTimeout != null ? request.bodyTimeout : client[kBodyTimeout]; + this.setTimeout(bodyTimeout, TIMEOUT_BODY); + } else if (this.timeout) { + if (this.timeout.refresh) { + this.timeout.refresh(); + } + } + if (request.method === "CONNECT") { + assert(client[kRunning] === 1); + this.upgrade = true; + return 2; + } + if (upgrade) { + assert(client[kRunning] === 1); + this.upgrade = true; + return 2; + } + assert((this.headers.length & 1) === 0); + this.headers = []; + this.headersSize = 0; + if (this.shouldKeepAlive && client[kPipelining]) { + const keepAliveTimeout = this.keepAlive ? util.parseKeepAliveTimeout(this.keepAlive) : null; + if (keepAliveTimeout != null) { + const timeout = Math.min( + keepAliveTimeout - client[kKeepAliveTimeoutThreshold], + client[kKeepAliveMaxTimeout] + ); + if (timeout <= 0) { + socket[kReset] = true; + } else { + client[kKeepAliveTimeoutValue] = timeout; + } + } else { + client[kKeepAliveTimeoutValue] = client[kKeepAliveDefaultTimeout]; + } + } else { + socket[kReset] = true; + } + const pause = request.onHeaders(statusCode, headers, this.resume, statusText) === false; + if (request.aborted) { + return -1; + } + if (request.method === "HEAD") { + return 1; + } + if (statusCode < 200) { + return 1; + } + if (socket[kBlocking]) { + socket[kBlocking] = false; + client[kResume](); + } + return pause ? constants3.ERROR.PAUSED : 0; + } + onBody(buf) { + const { client, socket, statusCode, maxResponseSize } = this; + if (socket.destroyed) { + return -1; + } + const request = client[kQueue][client[kRunningIdx]]; + assert(request); + assert(this.timeoutType === TIMEOUT_BODY); + if (this.timeout) { + if (this.timeout.refresh) { + this.timeout.refresh(); + } + } + assert(statusCode >= 200); + if (maxResponseSize > -1 && this.bytesRead + buf.length > maxResponseSize) { + util.destroy(socket, new ResponseExceededMaxSizeError()); + return -1; + } + this.bytesRead += buf.length; + if (request.onData(buf) === false) { + return constants3.ERROR.PAUSED; + } + } + onMessageComplete() { + const { client, socket, statusCode, upgrade, headers, contentLength, bytesRead, shouldKeepAlive } = this; + if (socket.destroyed && (!statusCode || shouldKeepAlive)) { + return -1; + } + if (upgrade) { + return; + } + assert(statusCode >= 100); + assert((this.headers.length & 1) === 0); + const request = client[kQueue][client[kRunningIdx]]; + assert(request); + this.statusCode = null; + this.statusText = ""; + this.bytesRead = 0; + this.contentLength = ""; + this.keepAlive = ""; + this.connection = ""; + this.headers = []; + this.headersSize = 0; + if (statusCode < 200) { + return; + } + if (request.method !== "HEAD" && contentLength && bytesRead !== parseInt(contentLength, 10)) { + util.destroy(socket, new ResponseContentLengthMismatchError()); + return -1; + } + request.onComplete(headers); + client[kQueue][client[kRunningIdx]++] = null; + if (socket[kWriting]) { + assert(client[kRunning] === 0); + util.destroy(socket, new InformationalError("reset")); + return constants3.ERROR.PAUSED; + } else if (!shouldKeepAlive) { + util.destroy(socket, new InformationalError("reset")); + return constants3.ERROR.PAUSED; + } else if (socket[kReset] && client[kRunning] === 0) { + util.destroy(socket, new InformationalError("reset")); + return constants3.ERROR.PAUSED; + } else if (client[kPipelining] == null || client[kPipelining] === 1) { + setImmediate(() => client[kResume]()); + } else { + client[kResume](); + } + } + }; + function onParserTimeout(parser) { + const { socket, timeoutType, client, paused } = parser.deref(); + if (timeoutType === TIMEOUT_HEADERS) { + if (!socket[kWriting] || socket.writableNeedDrain || client[kRunning] > 1) { + assert(!paused, "cannot be paused while waiting for headers"); + util.destroy(socket, new HeadersTimeoutError()); + } + } else if (timeoutType === TIMEOUT_BODY) { + if (!paused) { + util.destroy(socket, new BodyTimeoutError()); + } + } else if (timeoutType === TIMEOUT_KEEP_ALIVE) { + assert(client[kRunning] === 0 && client[kKeepAliveTimeoutValue]); + util.destroy(socket, new InformationalError("socket idle timeout")); + } + } + async function connectH1(client, socket) { + client[kSocket] = socket; + if (!llhttpInstance) { + llhttpInstance = await llhttpPromise; + llhttpPromise = null; + } + socket[kNoRef] = false; + socket[kWriting] = false; + socket[kReset] = false; + socket[kBlocking] = false; + socket[kParser] = new Parser(client, socket, llhttpInstance); + addListener(socket, "error", function(err) { + assert(err.code !== "ERR_TLS_CERT_ALTNAME_INVALID"); + const parser = this[kParser]; + if (err.code === "ECONNRESET" && parser.statusCode && !parser.shouldKeepAlive) { + const parserErr = parser.finish(); + if (parserErr) { + this[kError] = parserErr; + this[kClient][kOnError](parserErr); + } + return; + } + this[kError] = err; + this[kClient][kOnError](err); + }); + addListener(socket, "readable", function() { + const parser = this[kParser]; + if (parser) { + parser.readMore(); + } + }); + addListener(socket, "end", function() { + const parser = this[kParser]; + if (parser.statusCode && !parser.shouldKeepAlive) { + const parserErr = parser.finish(); + if (parserErr) { + util.destroy(this, parserErr); + } + return; + } + util.destroy(this, new SocketError("other side closed", util.getSocketInfo(this))); + }); + addListener(socket, "close", function() { + const client2 = this[kClient]; + const parser = this[kParser]; + if (parser) { + if (!this[kError] && parser.statusCode && !parser.shouldKeepAlive) { + this[kError] = parser.finish() || this[kError]; + } + this[kParser].destroy(); + this[kParser] = null; + } + const err = this[kError] || new SocketError("closed", util.getSocketInfo(this)); + client2[kSocket] = null; + client2[kHTTPContext] = null; + if (client2.destroyed) { + assert(client2[kPending] === 0); + const requests = client2[kQueue].splice(client2[kRunningIdx]); + for (let i = 0; i < requests.length; i++) { + const request = requests[i]; + util.errorRequest(client2, request, err); + } + } else if (client2[kRunning] > 0 && err.code !== "UND_ERR_INFO") { + const request = client2[kQueue][client2[kRunningIdx]]; + client2[kQueue][client2[kRunningIdx]++] = null; + util.errorRequest(client2, request, err); + } + client2[kPendingIdx] = client2[kRunningIdx]; + assert(client2[kRunning] === 0); + client2.emit("disconnect", client2[kUrl], [client2], err); + client2[kResume](); + }); + let closed = false; + socket.on("close", () => { + closed = true; + }); + return { + version: "h1", + defaultPipelining: 1, + write(...args) { + return writeH1(client, ...args); + }, + resume() { + resumeH1(client); + }, + destroy(err, callback) { + if (closed) { + queueMicrotask(callback); + } else { + socket.destroy(err).on("close", callback); + } + }, + get destroyed() { + return socket.destroyed; + }, + busy(request) { + if (socket[kWriting] || socket[kReset] || socket[kBlocking]) { + return true; + } + if (request) { + if (client[kRunning] > 0 && !request.idempotent) { + return true; + } + if (client[kRunning] > 0 && (request.upgrade || request.method === "CONNECT")) { + return true; + } + if (client[kRunning] > 0 && util.bodyLength(request.body) !== 0 && (util.isStream(request.body) || util.isAsyncIterable(request.body) || util.isFormDataLike(request.body))) { + return true; + } + } + return false; + } + }; + } + function resumeH1(client) { + const socket = client[kSocket]; + if (socket && !socket.destroyed) { + if (client[kSize] === 0) { + if (!socket[kNoRef] && socket.unref) { + socket.unref(); + socket[kNoRef] = true; + } + } else if (socket[kNoRef] && socket.ref) { + socket.ref(); + socket[kNoRef] = false; + } + if (client[kSize] === 0) { + if (socket[kParser].timeoutType !== TIMEOUT_KEEP_ALIVE) { + socket[kParser].setTimeout(client[kKeepAliveTimeoutValue], TIMEOUT_KEEP_ALIVE); + } + } else if (client[kRunning] > 0 && socket[kParser].statusCode < 200) { + if (socket[kParser].timeoutType !== TIMEOUT_HEADERS) { + const request = client[kQueue][client[kRunningIdx]]; + const headersTimeout = request.headersTimeout != null ? request.headersTimeout : client[kHeadersTimeout]; + socket[kParser].setTimeout(headersTimeout, TIMEOUT_HEADERS); + } + } + } + } + function shouldSendContentLength(method) { + return method !== "GET" && method !== "HEAD" && method !== "OPTIONS" && method !== "TRACE" && method !== "CONNECT"; + } + function writeH1(client, request) { + const { method, path: path2, host, upgrade, blocking, reset } = request; + let { body, headers, contentLength } = request; + const expectsPayload = method === "PUT" || method === "POST" || method === "PATCH" || method === "QUERY" || method === "PROPFIND" || method === "PROPPATCH"; + if (util.isFormDataLike(body)) { + if (!extractBody) { + extractBody = require_body().extractBody; + } + const [bodyStream, contentType] = extractBody(body); + if (request.contentType == null) { + headers.push("content-type", contentType); + } + body = bodyStream.stream; + contentLength = bodyStream.length; + } else if (util.isBlobLike(body) && request.contentType == null && body.type) { + headers.push("content-type", body.type); + } + if (body && typeof body.read === "function") { + body.read(0); + } + const bodyLength = util.bodyLength(body); + contentLength = bodyLength ?? contentLength; + if (contentLength === null) { + contentLength = request.contentLength; + } + if (contentLength === 0 && !expectsPayload) { + contentLength = null; + } + if (shouldSendContentLength(method) && contentLength > 0 && request.contentLength !== null && request.contentLength !== contentLength) { + if (client[kStrictContentLength]) { + util.errorRequest(client, request, new RequestContentLengthMismatchError()); + return false; + } + process.emitWarning(new RequestContentLengthMismatchError()); + } + const socket = client[kSocket]; + const abort = (err) => { + if (request.aborted || request.completed) { + return; + } + util.errorRequest(client, request, err || new RequestAbortedError()); + util.destroy(body); + util.destroy(socket, new InformationalError("aborted")); + }; + try { + request.onConnect(abort); + } catch (err) { + util.errorRequest(client, request, err); + } + if (request.aborted) { + return false; + } + if (method === "HEAD") { + socket[kReset] = true; + } + if (upgrade || method === "CONNECT") { + socket[kReset] = true; + } + if (reset != null) { + socket[kReset] = reset; + } + if (client[kMaxRequests] && socket[kCounter]++ >= client[kMaxRequests]) { + socket[kReset] = true; + } + if (blocking) { + socket[kBlocking] = true; + } + let header = `${method} ${path2} HTTP/1.1\r +`; + if (typeof host === "string") { + header += `host: ${host}\r +`; + } else { + header += client[kHostHeader]; + } + if (upgrade) { + header += `connection: upgrade\r +upgrade: ${upgrade}\r +`; + } else if (client[kPipelining] && !socket[kReset]) { + header += "connection: keep-alive\r\n"; + } else { + header += "connection: close\r\n"; + } + if (Array.isArray(headers)) { + for (let n = 0; n < headers.length; n += 2) { + const key = headers[n + 0]; + const val = headers[n + 1]; + if (Array.isArray(val)) { + for (let i = 0; i < val.length; i++) { + header += `${key}: ${val[i]}\r +`; + } + } else { + header += `${key}: ${val}\r +`; + } + } + } + if (channels.sendHeaders.hasSubscribers) { + channels.sendHeaders.publish({ request, headers: header, socket }); + } + if (!body || bodyLength === 0) { + writeBuffer(abort, null, client, request, socket, contentLength, header, expectsPayload); + } else if (util.isBuffer(body)) { + writeBuffer(abort, body, client, request, socket, contentLength, header, expectsPayload); + } else if (util.isBlobLike(body)) { + if (typeof body.stream === "function") { + writeIterable(abort, body.stream(), client, request, socket, contentLength, header, expectsPayload); + } else { + writeBlob(abort, body, client, request, socket, contentLength, header, expectsPayload); + } + } else if (util.isStream(body)) { + writeStream(abort, body, client, request, socket, contentLength, header, expectsPayload); + } else if (util.isIterable(body)) { + writeIterable(abort, body, client, request, socket, contentLength, header, expectsPayload); + } else { + assert(false); + } + return true; + } + function writeStream(abort, body, client, request, socket, contentLength, header, expectsPayload) { + assert(contentLength !== 0 || client[kRunning] === 0, "stream body cannot be pipelined"); + let finished = false; + const writer = new AsyncWriter({ abort, socket, request, contentLength, client, expectsPayload, header }); + const onData = function(chunk) { + if (finished) { + return; + } + try { + if (!writer.write(chunk) && this.pause) { + this.pause(); + } + } catch (err) { + util.destroy(this, err); + } + }; + const onDrain = function() { + if (finished) { + return; + } + if (body.resume) { + body.resume(); + } + }; + const onClose = function() { + queueMicrotask(() => { + body.removeListener("error", onFinished); + }); + if (!finished) { + const err = new RequestAbortedError(); + queueMicrotask(() => onFinished(err)); + } + }; + const onFinished = function(err) { + if (finished) { + return; + } + finished = true; + assert(socket.destroyed || socket[kWriting] && client[kRunning] <= 1); + socket.off("drain", onDrain).off("error", onFinished); + body.removeListener("data", onData).removeListener("end", onFinished).removeListener("close", onClose); + if (!err) { + try { + writer.end(); + } catch (er) { + err = er; + } + } + writer.destroy(err); + if (err && (err.code !== "UND_ERR_INFO" || err.message !== "reset")) { + util.destroy(body, err); + } else { + util.destroy(body); + } + }; + body.on("data", onData).on("end", onFinished).on("error", onFinished).on("close", onClose); + if (body.resume) { + body.resume(); + } + socket.on("drain", onDrain).on("error", onFinished); + if (body.errorEmitted ?? body.errored) { + setImmediate(() => onFinished(body.errored)); + } else if (body.endEmitted ?? body.readableEnded) { + setImmediate(() => onFinished(null)); + } + if (body.closeEmitted ?? body.closed) { + setImmediate(onClose); + } + } + function writeBuffer(abort, body, client, request, socket, contentLength, header, expectsPayload) { + try { + if (!body) { + if (contentLength === 0) { + socket.write(`${header}content-length: 0\r +\r +`, "latin1"); + } else { + assert(contentLength === null, "no body must not have content length"); + socket.write(`${header}\r +`, "latin1"); + } + } else if (util.isBuffer(body)) { + assert(contentLength === body.byteLength, "buffer body must have content length"); + socket.cork(); + socket.write(`${header}content-length: ${contentLength}\r +\r +`, "latin1"); + socket.write(body); + socket.uncork(); + request.onBodySent(body); + if (!expectsPayload && request.reset !== false) { + socket[kReset] = true; + } + } + request.onRequestSent(); + client[kResume](); + } catch (err) { + abort(err); + } + } + async function writeBlob(abort, body, client, request, socket, contentLength, header, expectsPayload) { + assert(contentLength === body.size, "blob body must have content length"); + try { + if (contentLength != null && contentLength !== body.size) { + throw new RequestContentLengthMismatchError(); + } + const buffer = Buffer.from(await body.arrayBuffer()); + socket.cork(); + socket.write(`${header}content-length: ${contentLength}\r +\r +`, "latin1"); + socket.write(buffer); + socket.uncork(); + request.onBodySent(buffer); + request.onRequestSent(); + if (!expectsPayload && request.reset !== false) { + socket[kReset] = true; + } + client[kResume](); + } catch (err) { + abort(err); + } + } + async function writeIterable(abort, body, client, request, socket, contentLength, header, expectsPayload) { + assert(contentLength !== 0 || client[kRunning] === 0, "iterator body cannot be pipelined"); + let callback = null; + function onDrain() { + if (callback) { + const cb = callback; + callback = null; + cb(); + } + } + const waitForDrain = () => new Promise((resolve, reject) => { + assert(callback === null); + if (socket[kError]) { + reject(socket[kError]); + } else { + callback = resolve; + } + }); + socket.on("close", onDrain).on("drain", onDrain); + const writer = new AsyncWriter({ abort, socket, request, contentLength, client, expectsPayload, header }); + try { + for await (const chunk of body) { + if (socket[kError]) { + throw socket[kError]; + } + if (!writer.write(chunk)) { + await waitForDrain(); + } + } + writer.end(); + } catch (err) { + writer.destroy(err); + } finally { + socket.off("close", onDrain).off("drain", onDrain); + } + } + var AsyncWriter = class { + constructor({ abort, socket, request, contentLength, client, expectsPayload, header }) { + this.socket = socket; + this.request = request; + this.contentLength = contentLength; + this.client = client; + this.bytesWritten = 0; + this.expectsPayload = expectsPayload; + this.header = header; + this.abort = abort; + socket[kWriting] = true; + } + write(chunk) { + const { socket, request, contentLength, client, bytesWritten, expectsPayload, header } = this; + if (socket[kError]) { + throw socket[kError]; + } + if (socket.destroyed) { + return false; + } + const len = Buffer.byteLength(chunk); + if (!len) { + return true; + } + if (contentLength !== null && bytesWritten + len > contentLength) { + if (client[kStrictContentLength]) { + throw new RequestContentLengthMismatchError(); + } + process.emitWarning(new RequestContentLengthMismatchError()); + } + socket.cork(); + if (bytesWritten === 0) { + if (!expectsPayload && request.reset !== false) { + socket[kReset] = true; + } + if (contentLength === null) { + socket.write(`${header}transfer-encoding: chunked\r +`, "latin1"); + } else { + socket.write(`${header}content-length: ${contentLength}\r +\r +`, "latin1"); + } + } + if (contentLength === null) { + socket.write(`\r +${len.toString(16)}\r +`, "latin1"); + } + this.bytesWritten += len; + const ret = socket.write(chunk); + socket.uncork(); + request.onBodySent(chunk); + if (!ret) { + if (socket[kParser].timeout && socket[kParser].timeoutType === TIMEOUT_HEADERS) { + if (socket[kParser].timeout.refresh) { + socket[kParser].timeout.refresh(); + } + } + } + return ret; + } + end() { + const { socket, contentLength, client, bytesWritten, expectsPayload, header, request } = this; + request.onRequestSent(); + socket[kWriting] = false; + if (socket[kError]) { + throw socket[kError]; + } + if (socket.destroyed) { + return; + } + if (bytesWritten === 0) { + if (expectsPayload) { + socket.write(`${header}content-length: 0\r +\r +`, "latin1"); + } else { + socket.write(`${header}\r +`, "latin1"); + } + } else if (contentLength === null) { + socket.write("\r\n0\r\n\r\n", "latin1"); + } + if (contentLength !== null && bytesWritten !== contentLength) { + if (client[kStrictContentLength]) { + throw new RequestContentLengthMismatchError(); + } else { + process.emitWarning(new RequestContentLengthMismatchError()); + } + } + if (socket[kParser].timeout && socket[kParser].timeoutType === TIMEOUT_HEADERS) { + if (socket[kParser].timeout.refresh) { + socket[kParser].timeout.refresh(); + } + } + client[kResume](); + } + destroy(err) { + const { socket, client, abort } = this; + socket[kWriting] = false; + if (err) { + assert(client[kRunning] <= 1, "pipeline should only contain this request"); + abort(err); + } + } + }; + module.exports = connectH1; + } +}); + +// +var require_client_h2 = __commonJS({ + ""(exports, module) { + "use strict"; + var assert = __require("node:assert"); + var { pipeline } = __require("node:stream"); + var util = require_util(); + var { + RequestContentLengthMismatchError, + RequestAbortedError, + SocketError, + InformationalError + } = require_errors(); + var { + kUrl, + kReset, + kClient, + kRunning, + kPending, + kQueue, + kPendingIdx, + kRunningIdx, + kError, + kSocket, + kStrictContentLength, + kOnError, + kMaxConcurrentStreams, + kHTTP2Session, + kResume, + kSize, + kHTTPContext + } = require_symbols(); + var kOpenStreams = Symbol("open streams"); + var extractBody; + var h2ExperimentalWarned = false; + var http2; + try { + http2 = __require("node:http2"); + } catch { + http2 = { constants: {} }; + } + var { + constants: { + HTTP2_HEADER_AUTHORITY, + HTTP2_HEADER_METHOD, + HTTP2_HEADER_PATH, + HTTP2_HEADER_SCHEME, + HTTP2_HEADER_CONTENT_LENGTH, + HTTP2_HEADER_EXPECT, + HTTP2_HEADER_STATUS + } + } = http2; + function parseH2Headers(headers) { + const result = []; + for (const [name, value] of Object.entries(headers)) { + if (Array.isArray(value)) { + for (const subvalue of value) { + result.push(Buffer.from(name), Buffer.from(subvalue)); + } + } else { + result.push(Buffer.from(name), Buffer.from(value)); + } + } + return result; + } + async function connectH2(client, socket) { + client[kSocket] = socket; + if (!h2ExperimentalWarned) { + h2ExperimentalWarned = true; + process.emitWarning("H2 support is experimental, expect them to change at any time.", { + code: "UNDICI-H2" + }); + } + const session = http2.connect(client[kUrl], { + createConnection: () => socket, + peerMaxConcurrentStreams: client[kMaxConcurrentStreams] + }); + session[kOpenStreams] = 0; + session[kClient] = client; + session[kSocket] = socket; + util.addListener(session, "error", onHttp2SessionError); + util.addListener(session, "frameError", onHttp2FrameError); + util.addListener(session, "end", onHttp2SessionEnd); + util.addListener(session, "goaway", onHTTP2GoAway); + util.addListener(session, "close", function() { + const { [kClient]: client2 } = this; + const { [kSocket]: socket2 } = client2; + const err = this[kSocket][kError] || this[kError] || new SocketError("closed", util.getSocketInfo(socket2)); + client2[kHTTP2Session] = null; + if (client2.destroyed) { + assert(client2[kPending] === 0); + const requests = client2[kQueue].splice(client2[kRunningIdx]); + for (let i = 0; i < requests.length; i++) { + const request = requests[i]; + util.errorRequest(client2, request, err); + } + } + }); + session.unref(); + client[kHTTP2Session] = session; + socket[kHTTP2Session] = session; + util.addListener(socket, "error", function(err) { + assert(err.code !== "ERR_TLS_CERT_ALTNAME_INVALID"); + this[kError] = err; + this[kClient][kOnError](err); + }); + util.addListener(socket, "end", function() { + util.destroy(this, new SocketError("other side closed", util.getSocketInfo(this))); + }); + util.addListener(socket, "close", function() { + const err = this[kError] || new SocketError("closed", util.getSocketInfo(this)); + client[kSocket] = null; + if (this[kHTTP2Session] != null) { + this[kHTTP2Session].destroy(err); + } + client[kPendingIdx] = client[kRunningIdx]; + assert(client[kRunning] === 0); + client.emit("disconnect", client[kUrl], [client], err); + client[kResume](); + }); + let closed = false; + socket.on("close", () => { + closed = true; + }); + return { + version: "h2", + defaultPipelining: Infinity, + write(...args) { + return writeH2(client, ...args); + }, + resume() { + resumeH2(client); + }, + destroy(err, callback) { + if (closed) { + queueMicrotask(callback); + } else { + socket.destroy(err).on("close", callback); + } + }, + get destroyed() { + return socket.destroyed; + }, + busy() { + return false; + } + }; + } + function resumeH2(client) { + const socket = client[kSocket]; + if (socket?.destroyed === false) { + if (client[kSize] === 0 && client[kMaxConcurrentStreams] === 0) { + socket.unref(); + client[kHTTP2Session].unref(); + } else { + socket.ref(); + client[kHTTP2Session].ref(); + } + } + } + function onHttp2SessionError(err) { + assert(err.code !== "ERR_TLS_CERT_ALTNAME_INVALID"); + this[kSocket][kError] = err; + this[kClient][kOnError](err); + } + function onHttp2FrameError(type, code, id) { + if (id === 0) { + const err = new InformationalError(`HTTP/2: "frameError" received - type ${type}, code ${code}`); + this[kSocket][kError] = err; + this[kClient][kOnError](err); + } + } + function onHttp2SessionEnd() { + const err = new SocketError("other side closed", util.getSocketInfo(this[kSocket])); + this.destroy(err); + util.destroy(this[kSocket], err); + } + function onHTTP2GoAway(code) { + const err = this[kError] || new SocketError(`HTTP/2: "GOAWAY" frame received with code ${code}`, util.getSocketInfo(this)); + const client = this[kClient]; + client[kSocket] = null; + client[kHTTPContext] = null; + if (this[kHTTP2Session] != null) { + this[kHTTP2Session].destroy(err); + this[kHTTP2Session] = null; + } + util.destroy(this[kSocket], err); + if (client[kRunningIdx] < client[kQueue].length) { + const request = client[kQueue][client[kRunningIdx]]; + client[kQueue][client[kRunningIdx]++] = null; + util.errorRequest(client, request, err); + client[kPendingIdx] = client[kRunningIdx]; + } + assert(client[kRunning] === 0); + client.emit("disconnect", client[kUrl], [client], err); + client[kResume](); + } + function shouldSendContentLength(method) { + return method !== "GET" && method !== "HEAD" && method !== "OPTIONS" && method !== "TRACE" && method !== "CONNECT"; + } + function writeH2(client, request) { + const session = client[kHTTP2Session]; + const { method, path: path2, host, upgrade, expectContinue, signal, headers: reqHeaders } = request; + let { body } = request; + if (upgrade) { + util.errorRequest(client, request, new Error("Upgrade not supported for H2")); + return false; + } + const headers = {}; + for (let n = 0; n < reqHeaders.length; n += 2) { + const key = reqHeaders[n + 0]; + const val = reqHeaders[n + 1]; + if (Array.isArray(val)) { + for (let i = 0; i < val.length; i++) { + if (headers[key]) { + headers[key] += `,${val[i]}`; + } else { + headers[key] = val[i]; + } + } + } else { + headers[key] = val; + } + } + let stream; + const { hostname, port } = client[kUrl]; + headers[HTTP2_HEADER_AUTHORITY] = host || `${hostname}${port ? `:${port}` : ""}`; + headers[HTTP2_HEADER_METHOD] = method; + const abort = (err) => { + if (request.aborted || request.completed) { + return; + } + err = err || new RequestAbortedError(); + util.errorRequest(client, request, err); + if (stream != null) { + util.destroy(stream, err); + } + util.destroy(body, err); + client[kQueue][client[kRunningIdx]++] = null; + client[kResume](); + }; + try { + request.onConnect(abort); + } catch (err) { + util.errorRequest(client, request, err); + } + if (request.aborted) { + return false; + } + if (method === "CONNECT") { + session.ref(); + stream = session.request(headers, { endStream: false, signal }); + if (stream.id && !stream.pending) { + request.onUpgrade(null, null, stream); + ++session[kOpenStreams]; + client[kQueue][client[kRunningIdx]++] = null; + } else { + stream.once("ready", () => { + request.onUpgrade(null, null, stream); + ++session[kOpenStreams]; + client[kQueue][client[kRunningIdx]++] = null; + }); + } + stream.once("close", () => { + session[kOpenStreams] -= 1; + if (session[kOpenStreams] === 0) + session.unref(); + }); + return true; + } + headers[HTTP2_HEADER_PATH] = path2; + headers[HTTP2_HEADER_SCHEME] = "https"; + const expectsPayload = method === "PUT" || method === "POST" || method === "PATCH"; + if (body && typeof body.read === "function") { + body.read(0); + } + let contentLength = util.bodyLength(body); + if (util.isFormDataLike(body)) { + extractBody ??= require_body().extractBody; + const [bodyStream, contentType] = extractBody(body); + headers["content-type"] = contentType; + body = bodyStream.stream; + contentLength = bodyStream.length; + } + if (contentLength == null) { + contentLength = request.contentLength; + } + if (contentLength === 0 || !expectsPayload) { + contentLength = null; + } + if (shouldSendContentLength(method) && contentLength > 0 && request.contentLength != null && request.contentLength !== contentLength) { + if (client[kStrictContentLength]) { + util.errorRequest(client, request, new RequestContentLengthMismatchError()); + return false; + } + process.emitWarning(new RequestContentLengthMismatchError()); + } + if (contentLength != null) { + assert(body, "no body must not have content length"); + headers[HTTP2_HEADER_CONTENT_LENGTH] = `${contentLength}`; + } + session.ref(); + const shouldEndStream = method === "GET" || method === "HEAD" || body === null; + if (expectContinue) { + headers[HTTP2_HEADER_EXPECT] = "100-continue"; + stream = session.request(headers, { endStream: shouldEndStream, signal }); + stream.once("continue", writeBodyH2); + } else { + stream = session.request(headers, { + endStream: shouldEndStream, + signal + }); + writeBodyH2(); + } + ++session[kOpenStreams]; + stream.once("response", (headers2) => { + const { [HTTP2_HEADER_STATUS]: statusCode, ...realHeaders } = headers2; + request.onResponseStarted(); + if (request.aborted) { + const err = new RequestAbortedError(); + util.errorRequest(client, request, err); + util.destroy(stream, err); + return; + } + if (request.onHeaders(Number(statusCode), parseH2Headers(realHeaders), stream.resume.bind(stream), "") === false) { + stream.pause(); + } + stream.on("data", (chunk) => { + if (request.onData(chunk) === false) { + stream.pause(); + } + }); + }); + stream.once("end", () => { + if (stream.state?.state == null || stream.state.state < 6) { + request.onComplete([]); + } + if (session[kOpenStreams] === 0) { + session.unref(); + } + abort(new InformationalError("HTTP/2: stream half-closed (remote)")); + client[kQueue][client[kRunningIdx]++] = null; + client[kPendingIdx] = client[kRunningIdx]; + client[kResume](); + }); + stream.once("close", () => { + session[kOpenStreams] -= 1; + if (session[kOpenStreams] === 0) { + session.unref(); + } + }); + stream.once("error", function(err) { + abort(err); + }); + stream.once("frameError", (type, code) => { + abort(new InformationalError(`HTTP/2: "frameError" received - type ${type}, code ${code}`)); + }); + return true; + function writeBodyH2() { + if (!body || contentLength === 0) { + writeBuffer( + abort, + stream, + null, + client, + request, + client[kSocket], + contentLength, + expectsPayload + ); + } else if (util.isBuffer(body)) { + writeBuffer( + abort, + stream, + body, + client, + request, + client[kSocket], + contentLength, + expectsPayload + ); + } else if (util.isBlobLike(body)) { + if (typeof body.stream === "function") { + writeIterable( + abort, + stream, + body.stream(), + client, + request, + client[kSocket], + contentLength, + expectsPayload + ); + } else { + writeBlob( + abort, + stream, + body, + client, + request, + client[kSocket], + contentLength, + expectsPayload + ); + } + } else if (util.isStream(body)) { + writeStream( + abort, + client[kSocket], + expectsPayload, + stream, + body, + client, + request, + contentLength + ); + } else if (util.isIterable(body)) { + writeIterable( + abort, + stream, + body, + client, + request, + client[kSocket], + contentLength, + expectsPayload + ); + } else { + assert(false); + } + } + } + function writeBuffer(abort, h2stream, body, client, request, socket, contentLength, expectsPayload) { + try { + if (body != null && util.isBuffer(body)) { + assert(contentLength === body.byteLength, "buffer body must have content length"); + h2stream.cork(); + h2stream.write(body); + h2stream.uncork(); + h2stream.end(); + request.onBodySent(body); + } + if (!expectsPayload) { + socket[kReset] = true; + } + request.onRequestSent(); + client[kResume](); + } catch (error2) { + abort(error2); + } + } + function writeStream(abort, socket, expectsPayload, h2stream, body, client, request, contentLength) { + assert(contentLength !== 0 || client[kRunning] === 0, "stream body cannot be pipelined"); + const pipe = pipeline( + body, + h2stream, + (err) => { + if (err) { + util.destroy(pipe, err); + abort(err); + } else { + util.removeAllListeners(pipe); + request.onRequestSent(); + if (!expectsPayload) { + socket[kReset] = true; + } + client[kResume](); + } + } + ); + util.addListener(pipe, "data", onPipeData); + function onPipeData(chunk) { + request.onBodySent(chunk); + } + } + async function writeBlob(abort, h2stream, body, client, request, socket, contentLength, expectsPayload) { + assert(contentLength === body.size, "blob body must have content length"); + try { + if (contentLength != null && contentLength !== body.size) { + throw new RequestContentLengthMismatchError(); + } + const buffer = Buffer.from(await body.arrayBuffer()); + h2stream.cork(); + h2stream.write(buffer); + h2stream.uncork(); + h2stream.end(); + request.onBodySent(buffer); + request.onRequestSent(); + if (!expectsPayload) { + socket[kReset] = true; + } + client[kResume](); + } catch (err) { + abort(err); + } + } + async function writeIterable(abort, h2stream, body, client, request, socket, contentLength, expectsPayload) { + assert(contentLength !== 0 || client[kRunning] === 0, "iterator body cannot be pipelined"); + let callback = null; + function onDrain() { + if (callback) { + const cb = callback; + callback = null; + cb(); + } + } + const waitForDrain = () => new Promise((resolve, reject) => { + assert(callback === null); + if (socket[kError]) { + reject(socket[kError]); + } else { + callback = resolve; + } + }); + h2stream.on("close", onDrain).on("drain", onDrain); + try { + for await (const chunk of body) { + if (socket[kError]) { + throw socket[kError]; + } + const res = h2stream.write(chunk); + request.onBodySent(chunk); + if (!res) { + await waitForDrain(); + } + } + h2stream.end(); + request.onRequestSent(); + if (!expectsPayload) { + socket[kReset] = true; + } + client[kResume](); + } catch (err) { + abort(err); + } finally { + h2stream.off("close", onDrain).off("drain", onDrain); + } + } + module.exports = connectH2; + } +}); + +// +var require_redirect_handler = __commonJS({ + ""(exports, module) { + "use strict"; + var util = require_util(); + var { kBodyUsed } = require_symbols(); + var assert = __require("node:assert"); + var { InvalidArgumentError } = require_errors(); + var EE = __require("node:events"); + var redirectableStatusCodes = [300, 301, 302, 303, 307, 308]; + var kBody = Symbol("body"); + var BodyAsyncIterable = class { + constructor(body) { + this[kBody] = body; + this[kBodyUsed] = false; + } + async *[Symbol.asyncIterator]() { + assert(!this[kBodyUsed], "disturbed"); + this[kBodyUsed] = true; + yield* this[kBody]; + } + }; + var RedirectHandler = class { + constructor(dispatch, maxRedirections, opts, handler) { + if (maxRedirections != null && (!Number.isInteger(maxRedirections) || maxRedirections < 0)) { + throw new InvalidArgumentError("maxRedirections must be a positive number"); + } + util.validateHandler(handler, opts.method, opts.upgrade); + this.dispatch = dispatch; + this.location = null; + this.abort = null; + this.opts = { ...opts, maxRedirections: 0 }; + this.maxRedirections = maxRedirections; + this.handler = handler; + this.history = []; + this.redirectionLimitReached = false; + if (util.isStream(this.opts.body)) { + if (util.bodyLength(this.opts.body) === 0) { + this.opts.body.on("data", function() { + assert(false); + }); + } + if (typeof this.opts.body.readableDidRead !== "boolean") { + this.opts.body[kBodyUsed] = false; + EE.prototype.on.call(this.opts.body, "data", function() { + this[kBodyUsed] = true; + }); + } + } else if (this.opts.body && typeof this.opts.body.pipeTo === "function") { + this.opts.body = new BodyAsyncIterable(this.opts.body); + } else if (this.opts.body && typeof this.opts.body !== "string" && !ArrayBuffer.isView(this.opts.body) && util.isIterable(this.opts.body)) { + this.opts.body = new BodyAsyncIterable(this.opts.body); + } + } + onConnect(abort) { + this.abort = abort; + this.handler.onConnect(abort, { history: this.history }); + } + onUpgrade(statusCode, headers, socket) { + this.handler.onUpgrade(statusCode, headers, socket); + } + onError(error2) { + this.handler.onError(error2); + } + onHeaders(statusCode, headers, resume, statusText) { + this.location = this.history.length >= this.maxRedirections || util.isDisturbed(this.opts.body) ? null : parseLocation(statusCode, headers); + if (this.opts.throwOnMaxRedirect && this.history.length >= this.maxRedirections) { + if (this.request) { + this.request.abort(new Error("max redirects")); + } + this.redirectionLimitReached = true; + this.abort(new Error("max redirects")); + return; + } + if (this.opts.origin) { + this.history.push(new URL(this.opts.path, this.opts.origin)); + } + if (!this.location) { + return this.handler.onHeaders(statusCode, headers, resume, statusText); + } + const { origin, pathname, search } = util.parseURL(new URL(this.location, this.opts.origin && new URL(this.opts.path, this.opts.origin))); + const path2 = search ? `${pathname}${search}` : pathname; + this.opts.headers = cleanRequestHeaders(this.opts.headers, statusCode === 303, this.opts.origin !== origin); + this.opts.path = path2; + this.opts.origin = origin; + this.opts.maxRedirections = 0; + this.opts.query = null; + if (statusCode === 303 && this.opts.method !== "HEAD") { + this.opts.method = "GET"; + this.opts.body = null; + } + } + onData(chunk) { + if (this.location) { + } else { + return this.handler.onData(chunk); + } + } + onComplete(trailers) { + if (this.location) { + this.location = null; + this.abort = null; + this.dispatch(this.opts, this); + } else { + this.handler.onComplete(trailers); + } + } + onBodySent(chunk) { + if (this.handler.onBodySent) { + this.handler.onBodySent(chunk); + } + } + }; + function parseLocation(statusCode, headers) { + if (redirectableStatusCodes.indexOf(statusCode) === -1) { + return null; + } + for (let i = 0; i < headers.length; i += 2) { + if (headers[i].length === 8 && util.headerNameToString(headers[i]) === "location") { + return headers[i + 1]; + } + } + } + function shouldRemoveHeader(header, removeContent, unknownOrigin) { + if (header.length === 4) { + return util.headerNameToString(header) === "host"; + } + if (removeContent && util.headerNameToString(header).startsWith("content-")) { + return true; + } + if (unknownOrigin && (header.length === 13 || header.length === 6 || header.length === 19)) { + const name = util.headerNameToString(header); + return name === "authorization" || name === "cookie" || name === "proxy-authorization"; + } + return false; + } + function cleanRequestHeaders(headers, removeContent, unknownOrigin) { + const ret = []; + if (Array.isArray(headers)) { + for (let i = 0; i < headers.length; i += 2) { + if (!shouldRemoveHeader(headers[i], removeContent, unknownOrigin)) { + ret.push(headers[i], headers[i + 1]); + } + } + } else if (headers && typeof headers === "object") { + for (const key of Object.keys(headers)) { + if (!shouldRemoveHeader(key, removeContent, unknownOrigin)) { + ret.push(key, headers[key]); + } + } + } else { + assert(headers == null, "headers must be an object or an array"); + } + return ret; + } + module.exports = RedirectHandler; + } +}); + +// +var require_redirect_interceptor = __commonJS({ + ""(exports, module) { + "use strict"; + var RedirectHandler = require_redirect_handler(); + function createRedirectInterceptor({ maxRedirections: defaultMaxRedirections }) { + return (dispatch) => { + return function Intercept(opts, handler) { + const { maxRedirections = defaultMaxRedirections } = opts; + if (!maxRedirections) { + return dispatch(opts, handler); + } + const redirectHandler = new RedirectHandler(dispatch, maxRedirections, opts, handler); + opts = { ...opts, maxRedirections: 0 }; + return dispatch(opts, redirectHandler); + }; + }; + } + module.exports = createRedirectInterceptor; + } +}); + +// +var require_client = __commonJS({ + ""(exports, module) { + "use strict"; + var assert = __require("node:assert"); + var net = __require("node:net"); + var http = __require("node:http"); + var util = require_util(); + var { channels } = require_diagnostics(); + var Request = require_request(); + var DispatcherBase = require_dispatcher_base(); + var { + InvalidArgumentError, + InformationalError, + ClientDestroyedError + } = require_errors(); + var buildConnector = require_connect(); + var { + kUrl, + kServerName, + kClient, + kBusy, + kConnect, + kResuming, + kRunning, + kPending, + kSize, + kQueue, + kConnected, + kConnecting, + kNeedDrain, + kKeepAliveDefaultTimeout, + kHostHeader, + kPendingIdx, + kRunningIdx, + kError, + kPipelining, + kKeepAliveTimeoutValue, + kMaxHeadersSize, + kKeepAliveMaxTimeout, + kKeepAliveTimeoutThreshold, + kHeadersTimeout, + kBodyTimeout, + kStrictContentLength, + kConnector, + kMaxRedirections, + kMaxRequests, + kCounter, + kClose, + kDestroy, + kDispatch, + kInterceptors, + kLocalAddress, + kMaxResponseSize, + kOnError, + kHTTPContext, + kMaxConcurrentStreams, + kResume + } = require_symbols(); + var connectH1 = require_client_h1(); + var connectH2 = require_client_h2(); + var deprecatedInterceptorWarned = false; + var kClosedResolve = Symbol("kClosedResolve"); + var noop = () => { + }; + function getPipelining(client) { + return client[kPipelining] ?? client[kHTTPContext]?.defaultPipelining ?? 1; + } + var Client = class extends DispatcherBase { + /** + * + * @param {string|URL} url + * @param {import('../../types/client.js').Client.Options} options + */ + constructor(url, { + interceptors, + maxHeaderSize, + headersTimeout, + socketTimeout, + requestTimeout, + connectTimeout, + bodyTimeout, + idleTimeout, + keepAlive, + keepAliveTimeout, + maxKeepAliveTimeout, + keepAliveMaxTimeout, + keepAliveTimeoutThreshold, + socketPath, + pipelining, + tls, + strictContentLength, + maxCachedSessions, + maxRedirections, + connect: connect2, + maxRequestsPerClient, + localAddress, + maxResponseSize, + autoSelectFamily, + autoSelectFamilyAttemptTimeout, + // h2 + maxConcurrentStreams, + allowH2, + webSocket + } = {}) { + super({ webSocket }); + if (keepAlive !== void 0) { + throw new InvalidArgumentError("unsupported keepAlive, use pipelining=0 instead"); + } + if (socketTimeout !== void 0) { + throw new InvalidArgumentError("unsupported socketTimeout, use headersTimeout & bodyTimeout instead"); + } + if (requestTimeout !== void 0) { + throw new InvalidArgumentError("unsupported requestTimeout, use headersTimeout & bodyTimeout instead"); + } + if (idleTimeout !== void 0) { + throw new InvalidArgumentError("unsupported idleTimeout, use keepAliveTimeout instead"); + } + if (maxKeepAliveTimeout !== void 0) { + throw new InvalidArgumentError("unsupported maxKeepAliveTimeout, use keepAliveMaxTimeout instead"); + } + if (maxHeaderSize != null && !Number.isFinite(maxHeaderSize)) { + throw new InvalidArgumentError("invalid maxHeaderSize"); + } + if (socketPath != null && typeof socketPath !== "string") { + throw new InvalidArgumentError("invalid socketPath"); + } + if (connectTimeout != null && (!Number.isFinite(connectTimeout) || connectTimeout < 0)) { + throw new InvalidArgumentError("invalid connectTimeout"); + } + if (keepAliveTimeout != null && (!Number.isFinite(keepAliveTimeout) || keepAliveTimeout <= 0)) { + throw new InvalidArgumentError("invalid keepAliveTimeout"); + } + if (keepAliveMaxTimeout != null && (!Number.isFinite(keepAliveMaxTimeout) || keepAliveMaxTimeout <= 0)) { + throw new InvalidArgumentError("invalid keepAliveMaxTimeout"); + } + if (keepAliveTimeoutThreshold != null && !Number.isFinite(keepAliveTimeoutThreshold)) { + throw new InvalidArgumentError("invalid keepAliveTimeoutThreshold"); + } + if (headersTimeout != null && (!Number.isInteger(headersTimeout) || headersTimeout < 0)) { + throw new InvalidArgumentError("headersTimeout must be a positive integer or zero"); + } + if (bodyTimeout != null && (!Number.isInteger(bodyTimeout) || bodyTimeout < 0)) { + throw new InvalidArgumentError("bodyTimeout must be a positive integer or zero"); + } + if (connect2 != null && typeof connect2 !== "function" && typeof connect2 !== "object") { + throw new InvalidArgumentError("connect must be a function or an object"); + } + if (maxRedirections != null && (!Number.isInteger(maxRedirections) || maxRedirections < 0)) { + throw new InvalidArgumentError("maxRedirections must be a positive number"); + } + if (maxRequestsPerClient != null && (!Number.isInteger(maxRequestsPerClient) || maxRequestsPerClient < 0)) { + throw new InvalidArgumentError("maxRequestsPerClient must be a positive number"); + } + if (localAddress != null && (typeof localAddress !== "string" || net.isIP(localAddress) === 0)) { + throw new InvalidArgumentError("localAddress must be valid string IP address"); + } + if (maxResponseSize != null && (!Number.isInteger(maxResponseSize) || maxResponseSize < -1)) { + throw new InvalidArgumentError("maxResponseSize must be a positive number"); + } + if (autoSelectFamilyAttemptTimeout != null && (!Number.isInteger(autoSelectFamilyAttemptTimeout) || autoSelectFamilyAttemptTimeout < -1)) { + throw new InvalidArgumentError("autoSelectFamilyAttemptTimeout must be a positive number"); + } + if (allowH2 != null && typeof allowH2 !== "boolean") { + throw new InvalidArgumentError("allowH2 must be a valid boolean value"); + } + if (maxConcurrentStreams != null && (typeof maxConcurrentStreams !== "number" || maxConcurrentStreams < 1)) { + throw new InvalidArgumentError("maxConcurrentStreams must be a positive integer, greater than 0"); + } + if (typeof connect2 !== "function") { + connect2 = buildConnector({ + ...tls, + maxCachedSessions, + allowH2, + socketPath, + timeout: connectTimeout, + ...autoSelectFamily ? { autoSelectFamily, autoSelectFamilyAttemptTimeout } : void 0, + ...connect2 + }); + } + if (interceptors?.Client && Array.isArray(interceptors.Client)) { + this[kInterceptors] = interceptors.Client; + if (!deprecatedInterceptorWarned) { + deprecatedInterceptorWarned = true; + process.emitWarning("Client.Options#interceptor is deprecated. Use Dispatcher#compose instead.", { + code: "UNDICI-CLIENT-INTERCEPTOR-DEPRECATED" + }); + } + } else { + this[kInterceptors] = [createRedirectInterceptor({ maxRedirections })]; + } + this[kUrl] = util.parseOrigin(url); + this[kConnector] = connect2; + this[kPipelining] = pipelining != null ? pipelining : 1; + this[kMaxHeadersSize] = maxHeaderSize || http.maxHeaderSize; + this[kKeepAliveDefaultTimeout] = keepAliveTimeout == null ? 4e3 : keepAliveTimeout; + this[kKeepAliveMaxTimeout] = keepAliveMaxTimeout == null ? 6e5 : keepAliveMaxTimeout; + this[kKeepAliveTimeoutThreshold] = keepAliveTimeoutThreshold == null ? 2e3 : keepAliveTimeoutThreshold; + this[kKeepAliveTimeoutValue] = this[kKeepAliveDefaultTimeout]; + this[kServerName] = null; + this[kLocalAddress] = localAddress != null ? localAddress : null; + this[kResuming] = 0; + this[kNeedDrain] = 0; + this[kHostHeader] = `host: ${this[kUrl].hostname}${this[kUrl].port ? `:${this[kUrl].port}` : ""}\r +`; + this[kBodyTimeout] = bodyTimeout != null ? bodyTimeout : 3e5; + this[kHeadersTimeout] = headersTimeout != null ? headersTimeout : 3e5; + this[kStrictContentLength] = strictContentLength == null ? true : strictContentLength; + this[kMaxRedirections] = maxRedirections; + this[kMaxRequests] = maxRequestsPerClient; + this[kClosedResolve] = null; + this[kMaxResponseSize] = maxResponseSize > -1 ? maxResponseSize : -1; + this[kMaxConcurrentStreams] = maxConcurrentStreams != null ? maxConcurrentStreams : 100; + this[kHTTPContext] = null; + this[kQueue] = []; + this[kRunningIdx] = 0; + this[kPendingIdx] = 0; + this[kResume] = (sync) => resume(this, sync); + this[kOnError] = (err) => onError(this, err); + } + get pipelining() { + return this[kPipelining]; + } + set pipelining(value) { + this[kPipelining] = value; + this[kResume](true); + } + get [kPending]() { + return this[kQueue].length - this[kPendingIdx]; + } + get [kRunning]() { + return this[kPendingIdx] - this[kRunningIdx]; + } + get [kSize]() { + return this[kQueue].length - this[kRunningIdx]; + } + get [kConnected]() { + return !!this[kHTTPContext] && !this[kConnecting] && !this[kHTTPContext].destroyed; + } + get [kBusy]() { + return Boolean( + this[kHTTPContext]?.busy(null) || this[kSize] >= (getPipelining(this) || 1) || this[kPending] > 0 + ); + } + /* istanbul ignore: only used for test */ + [kConnect](cb) { + connect(this); + this.once("connect", cb); + } + [kDispatch](opts, handler) { + const origin = opts.origin || this[kUrl].origin; + const request = new Request(origin, opts, handler); + this[kQueue].push(request); + if (this[kResuming]) { + } else if (util.bodyLength(request.body) == null && util.isIterable(request.body)) { + this[kResuming] = 1; + queueMicrotask(() => resume(this)); + } else { + this[kResume](true); + } + if (this[kResuming] && this[kNeedDrain] !== 2 && this[kBusy]) { + this[kNeedDrain] = 2; + } + return this[kNeedDrain] < 2; + } + async [kClose]() { + return new Promise((resolve) => { + if (this[kSize]) { + this[kClosedResolve] = resolve; + } else { + resolve(null); + } + }); + } + async [kDestroy](err) { + return new Promise((resolve) => { + const requests = this[kQueue].splice(this[kPendingIdx]); + for (let i = 0; i < requests.length; i++) { + const request = requests[i]; + util.errorRequest(this, request, err); + } + const callback = () => { + if (this[kClosedResolve]) { + this[kClosedResolve](); + this[kClosedResolve] = null; + } + resolve(null); + }; + if (this[kHTTPContext]) { + this[kHTTPContext].destroy(err, callback); + this[kHTTPContext] = null; + } else { + queueMicrotask(callback); + } + this[kResume](); + }); + } + }; + var createRedirectInterceptor = require_redirect_interceptor(); + function onError(client, err) { + if (client[kRunning] === 0 && err.code !== "UND_ERR_INFO" && err.code !== "UND_ERR_SOCKET") { + assert(client[kPendingIdx] === client[kRunningIdx]); + const requests = client[kQueue].splice(client[kRunningIdx]); + for (let i = 0; i < requests.length; i++) { + const request = requests[i]; + util.errorRequest(client, request, err); + } + assert(client[kSize] === 0); + } + } + async function connect(client) { + assert(!client[kConnecting]); + assert(!client[kHTTPContext]); + let { host, hostname, protocol, port } = client[kUrl]; + if (hostname[0] === "[") { + const idx = hostname.indexOf("]"); + assert(idx !== -1); + const ip = hostname.substring(1, idx); + assert(net.isIP(ip)); + hostname = ip; + } + client[kConnecting] = true; + if (channels.beforeConnect.hasSubscribers) { + channels.beforeConnect.publish({ + connectParams: { + host, + hostname, + protocol, + port, + version: client[kHTTPContext]?.version, + servername: client[kServerName], + localAddress: client[kLocalAddress] + }, + connector: client[kConnector] + }); + } + try { + const socket = await new Promise((resolve, reject) => { + client[kConnector]({ + host, + hostname, + protocol, + port, + servername: client[kServerName], + localAddress: client[kLocalAddress] + }, (err, socket2) => { + if (err) { + reject(err); + } else { + resolve(socket2); + } + }); + }); + if (client.destroyed) { + util.destroy(socket.on("error", noop), new ClientDestroyedError()); + return; + } + assert(socket); + try { + client[kHTTPContext] = socket.alpnProtocol === "h2" ? await connectH2(client, socket) : await connectH1(client, socket); + } catch (err) { + socket.destroy().on("error", noop); + throw err; + } + client[kConnecting] = false; + socket[kCounter] = 0; + socket[kMaxRequests] = client[kMaxRequests]; + socket[kClient] = client; + socket[kError] = null; + if (channels.connected.hasSubscribers) { + channels.connected.publish({ + connectParams: { + host, + hostname, + protocol, + port, + version: client[kHTTPContext]?.version, + servername: client[kServerName], + localAddress: client[kLocalAddress] + }, + connector: client[kConnector], + socket + }); + } + client.emit("connect", client[kUrl], [client]); + } catch (err) { + if (client.destroyed) { + return; + } + client[kConnecting] = false; + if (channels.connectError.hasSubscribers) { + channels.connectError.publish({ + connectParams: { + host, + hostname, + protocol, + port, + version: client[kHTTPContext]?.version, + servername: client[kServerName], + localAddress: client[kLocalAddress] + }, + connector: client[kConnector], + error: err + }); + } + if (err.code === "ERR_TLS_CERT_ALTNAME_INVALID") { + assert(client[kRunning] === 0); + while (client[kPending] > 0 && client[kQueue][client[kPendingIdx]].servername === client[kServerName]) { + const request = client[kQueue][client[kPendingIdx]++]; + util.errorRequest(client, request, err); + } + } else { + onError(client, err); + } + client.emit("connectionError", client[kUrl], [client], err); + } + client[kResume](); + } + function emitDrain(client) { + client[kNeedDrain] = 0; + client.emit("drain", client[kUrl], [client]); + } + function resume(client, sync) { + if (client[kResuming] === 2) { + return; + } + client[kResuming] = 2; + _resume(client, sync); + client[kResuming] = 0; + if (client[kRunningIdx] > 256) { + client[kQueue].splice(0, client[kRunningIdx]); + client[kPendingIdx] -= client[kRunningIdx]; + client[kRunningIdx] = 0; + } + } + function _resume(client, sync) { + while (true) { + if (client.destroyed) { + assert(client[kPending] === 0); + return; + } + if (client[kClosedResolve] && !client[kSize]) { + client[kClosedResolve](); + client[kClosedResolve] = null; + return; + } + if (client[kHTTPContext]) { + client[kHTTPContext].resume(); + } + if (client[kBusy]) { + client[kNeedDrain] = 2; + } else if (client[kNeedDrain] === 2) { + if (sync) { + client[kNeedDrain] = 1; + queueMicrotask(() => emitDrain(client)); + } else { + emitDrain(client); + } + continue; + } + if (client[kPending] === 0) { + return; + } + if (client[kRunning] >= (getPipelining(client) || 1)) { + return; + } + const request = client[kQueue][client[kPendingIdx]]; + if (client[kUrl].protocol === "https:" && client[kServerName] !== request.servername) { + if (client[kRunning] > 0) { + return; + } + client[kServerName] = request.servername; + client[kHTTPContext]?.destroy(new InformationalError("servername changed"), () => { + client[kHTTPContext] = null; + resume(client); + }); + } + if (client[kConnecting]) { + return; + } + if (!client[kHTTPContext]) { + connect(client); + return; + } + if (client[kHTTPContext].destroyed) { + return; + } + if (client[kHTTPContext].busy(request)) { + return; + } + if (!request.aborted && client[kHTTPContext].write(request)) { + client[kPendingIdx]++; + } else { + client[kQueue].splice(client[kPendingIdx], 1); + } + } + } + module.exports = Client; + } +}); + +// +var require_fixed_queue = __commonJS({ + ""(exports, module) { + "use strict"; + var kSize = 2048; + var kMask = kSize - 1; + var FixedCircularBuffer = class { + constructor() { + this.bottom = 0; + this.top = 0; + this.list = new Array(kSize); + this.next = null; + } + isEmpty() { + return this.top === this.bottom; + } + isFull() { + return (this.top + 1 & kMask) === this.bottom; + } + push(data) { + this.list[this.top] = data; + this.top = this.top + 1 & kMask; + } + shift() { + const nextItem = this.list[this.bottom]; + if (nextItem === void 0) + return null; + this.list[this.bottom] = void 0; + this.bottom = this.bottom + 1 & kMask; + return nextItem; + } + }; + module.exports = class FixedQueue { + constructor() { + this.head = this.tail = new FixedCircularBuffer(); + } + isEmpty() { + return this.head.isEmpty(); + } + push(data) { + if (this.head.isFull()) { + this.head = this.head.next = new FixedCircularBuffer(); + } + this.head.push(data); + } + shift() { + const tail = this.tail; + const next = tail.shift(); + if (tail.isEmpty() && tail.next !== null) { + this.tail = tail.next; + } + return next; + } + }; + } +}); + +// +var require_pool_stats = __commonJS({ + ""(exports, module) { + var { kFree, kConnected, kPending, kQueued, kRunning, kSize } = require_symbols(); + var kPool = Symbol("pool"); + var PoolStats = class { + constructor(pool) { + this[kPool] = pool; + } + get connected() { + return this[kPool][kConnected]; + } + get free() { + return this[kPool][kFree]; + } + get pending() { + return this[kPool][kPending]; + } + get queued() { + return this[kPool][kQueued]; + } + get running() { + return this[kPool][kRunning]; + } + get size() { + return this[kPool][kSize]; + } + }; + module.exports = PoolStats; + } +}); + +// +var require_pool_base = __commonJS({ + ""(exports, module) { + "use strict"; + var DispatcherBase = require_dispatcher_base(); + var FixedQueue = require_fixed_queue(); + var { kConnected, kSize, kRunning, kPending, kQueued, kBusy, kFree, kUrl, kClose, kDestroy, kDispatch } = require_symbols(); + var PoolStats = require_pool_stats(); + var kClients = Symbol("clients"); + var kNeedDrain = Symbol("needDrain"); + var kQueue = Symbol("queue"); + var kClosedResolve = Symbol("closed resolve"); + var kOnDrain = Symbol("onDrain"); + var kOnConnect = Symbol("onConnect"); + var kOnDisconnect = Symbol("onDisconnect"); + var kOnConnectionError = Symbol("onConnectionError"); + var kGetDispatcher = Symbol("get dispatcher"); + var kAddClient = Symbol("add client"); + var kRemoveClient = Symbol("remove client"); + var kStats = Symbol("stats"); + var PoolBase = class extends DispatcherBase { + constructor(opts) { + super(opts); + this[kQueue] = new FixedQueue(); + this[kClients] = []; + this[kQueued] = 0; + const pool = this; + this[kOnDrain] = function onDrain(origin, targets) { + const queue = pool[kQueue]; + let needDrain = false; + while (!needDrain) { + const item = queue.shift(); + if (!item) { + break; + } + pool[kQueued]--; + needDrain = !this.dispatch(item.opts, item.handler); + } + this[kNeedDrain] = needDrain; + if (!this[kNeedDrain] && pool[kNeedDrain]) { + pool[kNeedDrain] = false; + pool.emit("drain", origin, [pool, ...targets]); + } + if (pool[kClosedResolve] && queue.isEmpty()) { + Promise.all(pool[kClients].map((c) => c.close())).then(pool[kClosedResolve]); + } + }; + this[kOnConnect] = (origin, targets) => { + pool.emit("connect", origin, [pool, ...targets]); + }; + this[kOnDisconnect] = (origin, targets, err) => { + pool.emit("disconnect", origin, [pool, ...targets], err); + }; + this[kOnConnectionError] = (origin, targets, err) => { + pool.emit("connectionError", origin, [pool, ...targets], err); + }; + this[kStats] = new PoolStats(this); + } + get [kBusy]() { + return this[kNeedDrain]; + } + get [kConnected]() { + return this[kClients].filter((client) => client[kConnected]).length; + } + get [kFree]() { + return this[kClients].filter((client) => client[kConnected] && !client[kNeedDrain]).length; + } + get [kPending]() { + let ret = this[kQueued]; + for (const { [kPending]: pending } of this[kClients]) { + ret += pending; + } + return ret; + } + get [kRunning]() { + let ret = 0; + for (const { [kRunning]: running } of this[kClients]) { + ret += running; + } + return ret; + } + get [kSize]() { + let ret = this[kQueued]; + for (const { [kSize]: size } of this[kClients]) { + ret += size; + } + return ret; + } + get stats() { + return this[kStats]; + } + async [kClose]() { + if (this[kQueue].isEmpty()) { + await Promise.all(this[kClients].map((c) => c.close())); + } else { + await new Promise((resolve) => { + this[kClosedResolve] = resolve; + }); + } + } + async [kDestroy](err) { + while (true) { + const item = this[kQueue].shift(); + if (!item) { + break; + } + item.handler.onError(err); + } + await Promise.all(this[kClients].map((c) => c.destroy(err))); + } + [kDispatch](opts, handler) { + const dispatcher = this[kGetDispatcher](); + if (!dispatcher) { + this[kNeedDrain] = true; + this[kQueue].push({ opts, handler }); + this[kQueued]++; + } else if (!dispatcher.dispatch(opts, handler)) { + dispatcher[kNeedDrain] = true; + this[kNeedDrain] = !this[kGetDispatcher](); + } + return !this[kNeedDrain]; + } + [kAddClient](client) { + client.on("drain", this[kOnDrain]).on("connect", this[kOnConnect]).on("disconnect", this[kOnDisconnect]).on("connectionError", this[kOnConnectionError]); + this[kClients].push(client); + if (this[kNeedDrain]) { + queueMicrotask(() => { + if (this[kNeedDrain]) { + this[kOnDrain](client[kUrl], [this, client]); + } + }); + } + return this; + } + [kRemoveClient](client) { + client.close(() => { + const idx = this[kClients].indexOf(client); + if (idx !== -1) { + this[kClients].splice(idx, 1); + } + }); + this[kNeedDrain] = this[kClients].some((dispatcher) => !dispatcher[kNeedDrain] && dispatcher.closed !== true && dispatcher.destroyed !== true); + } + }; + module.exports = { + PoolBase, + kClients, + kNeedDrain, + kAddClient, + kRemoveClient, + kGetDispatcher + }; + } +}); + +// +var require_pool = __commonJS({ + ""(exports, module) { + "use strict"; + var { + PoolBase, + kClients, + kNeedDrain, + kAddClient, + kGetDispatcher + } = require_pool_base(); + var Client = require_client(); + var { + InvalidArgumentError + } = require_errors(); + var util = require_util(); + var { kUrl, kInterceptors } = require_symbols(); + var buildConnector = require_connect(); + var kOptions = Symbol("options"); + var kConnections = Symbol("connections"); + var kFactory = Symbol("factory"); + function defaultFactory(origin, opts) { + return new Client(origin, opts); + } + var Pool = class extends PoolBase { + constructor(origin, { + connections, + factory = defaultFactory, + connect, + connectTimeout, + tls, + maxCachedSessions, + socketPath, + autoSelectFamily, + autoSelectFamilyAttemptTimeout, + allowH2, + ...options + } = {}) { + if (connections != null && (!Number.isFinite(connections) || connections < 0)) { + throw new InvalidArgumentError("invalid connections"); + } + if (typeof factory !== "function") { + throw new InvalidArgumentError("factory must be a function."); + } + if (connect != null && typeof connect !== "function" && typeof connect !== "object") { + throw new InvalidArgumentError("connect must be a function or an object"); + } + if (typeof connect !== "function") { + connect = buildConnector({ + ...tls, + maxCachedSessions, + allowH2, + socketPath, + timeout: connectTimeout, + ...autoSelectFamily ? { autoSelectFamily, autoSelectFamilyAttemptTimeout } : void 0, + ...connect + }); + } + super(options); + this[kInterceptors] = options.interceptors?.Pool && Array.isArray(options.interceptors.Pool) ? options.interceptors.Pool : []; + this[kConnections] = connections || null; + this[kUrl] = util.parseOrigin(origin); + this[kOptions] = { ...util.deepClone(options), connect, allowH2 }; + this[kOptions].interceptors = options.interceptors ? { ...options.interceptors } : void 0; + this[kFactory] = factory; + this.on("connectionError", (origin2, targets, error2) => { + for (const target of targets) { + const idx = this[kClients].indexOf(target); + if (idx !== -1) { + this[kClients].splice(idx, 1); + } + } + }); + } + [kGetDispatcher]() { + for (const client of this[kClients]) { + if (!client[kNeedDrain]) { + return client; + } + } + if (!this[kConnections] || this[kClients].length < this[kConnections]) { + const dispatcher = this[kFactory](this[kUrl], this[kOptions]); + this[kAddClient](dispatcher); + return dispatcher; + } + } + }; + module.exports = Pool; + } +}); + +// +var require_balanced_pool = __commonJS({ + ""(exports, module) { + "use strict"; + var { + BalancedPoolMissingUpstreamError, + InvalidArgumentError + } = require_errors(); + var { + PoolBase, + kClients, + kNeedDrain, + kAddClient, + kRemoveClient, + kGetDispatcher + } = require_pool_base(); + var Pool = require_pool(); + var { kUrl, kInterceptors } = require_symbols(); + var { parseOrigin } = require_util(); + var kFactory = Symbol("factory"); + var kOptions = Symbol("options"); + var kGreatestCommonDivisor = Symbol("kGreatestCommonDivisor"); + var kCurrentWeight = Symbol("kCurrentWeight"); + var kIndex = Symbol("kIndex"); + var kWeight = Symbol("kWeight"); + var kMaxWeightPerServer = Symbol("kMaxWeightPerServer"); + var kErrorPenalty = Symbol("kErrorPenalty"); + function getGreatestCommonDivisor(a, b) { + if (a === 0) + return b; + while (b !== 0) { + const t = b; + b = a % b; + a = t; + } + return a; + } + function defaultFactory(origin, opts) { + return new Pool(origin, opts); + } + var BalancedPool = class extends PoolBase { + constructor(upstreams = [], { factory = defaultFactory, ...opts } = {}) { + super(); + this[kOptions] = opts; + this[kIndex] = -1; + this[kCurrentWeight] = 0; + this[kMaxWeightPerServer] = this[kOptions].maxWeightPerServer || 100; + this[kErrorPenalty] = this[kOptions].errorPenalty || 15; + if (!Array.isArray(upstreams)) { + upstreams = [upstreams]; + } + if (typeof factory !== "function") { + throw new InvalidArgumentError("factory must be a function."); + } + this[kInterceptors] = opts.interceptors?.BalancedPool && Array.isArray(opts.interceptors.BalancedPool) ? opts.interceptors.BalancedPool : []; + this[kFactory] = factory; + for (const upstream of upstreams) { + this.addUpstream(upstream); + } + this._updateBalancedPoolStats(); + } + addUpstream(upstream) { + const upstreamOrigin = parseOrigin(upstream).origin; + if (this[kClients].find((pool2) => pool2[kUrl].origin === upstreamOrigin && pool2.closed !== true && pool2.destroyed !== true)) { + return this; + } + const pool = this[kFactory](upstreamOrigin, Object.assign({}, this[kOptions])); + this[kAddClient](pool); + pool.on("connect", () => { + pool[kWeight] = Math.min(this[kMaxWeightPerServer], pool[kWeight] + this[kErrorPenalty]); + }); + pool.on("connectionError", () => { + pool[kWeight] = Math.max(1, pool[kWeight] - this[kErrorPenalty]); + this._updateBalancedPoolStats(); + }); + pool.on("disconnect", (...args) => { + const err = args[2]; + if (err && err.code === "UND_ERR_SOCKET") { + pool[kWeight] = Math.max(1, pool[kWeight] - this[kErrorPenalty]); + this._updateBalancedPoolStats(); + } + }); + for (const client of this[kClients]) { + client[kWeight] = this[kMaxWeightPerServer]; + } + this._updateBalancedPoolStats(); + return this; + } + _updateBalancedPoolStats() { + let result = 0; + for (let i = 0; i < this[kClients].length; i++) { + result = getGreatestCommonDivisor(this[kClients][i][kWeight], result); + } + this[kGreatestCommonDivisor] = result; + } + removeUpstream(upstream) { + const upstreamOrigin = parseOrigin(upstream).origin; + const pool = this[kClients].find((pool2) => pool2[kUrl].origin === upstreamOrigin && pool2.closed !== true && pool2.destroyed !== true); + if (pool) { + this[kRemoveClient](pool); + } + return this; + } + get upstreams() { + return this[kClients].filter((dispatcher) => dispatcher.closed !== true && dispatcher.destroyed !== true).map((p) => p[kUrl].origin); + } + [kGetDispatcher]() { + if (this[kClients].length === 0) { + throw new BalancedPoolMissingUpstreamError(); + } + const dispatcher = this[kClients].find((dispatcher2) => !dispatcher2[kNeedDrain] && dispatcher2.closed !== true && dispatcher2.destroyed !== true); + if (!dispatcher) { + return; + } + const allClientsBusy = this[kClients].map((pool) => pool[kNeedDrain]).reduce((a, b) => a && b, true); + if (allClientsBusy) { + return; + } + let counter = 0; + let maxWeightIndex = this[kClients].findIndex((pool) => !pool[kNeedDrain]); + while (counter++ < this[kClients].length) { + this[kIndex] = (this[kIndex] + 1) % this[kClients].length; + const pool = this[kClients][this[kIndex]]; + if (pool[kWeight] > this[kClients][maxWeightIndex][kWeight] && !pool[kNeedDrain]) { + maxWeightIndex = this[kIndex]; + } + if (this[kIndex] === 0) { + this[kCurrentWeight] = this[kCurrentWeight] - this[kGreatestCommonDivisor]; + if (this[kCurrentWeight] <= 0) { + this[kCurrentWeight] = this[kMaxWeightPerServer]; + } + } + if (pool[kWeight] >= this[kCurrentWeight] && !pool[kNeedDrain]) { + return pool; + } + } + this[kCurrentWeight] = this[kClients][maxWeightIndex][kWeight]; + this[kIndex] = maxWeightIndex; + return this[kClients][maxWeightIndex]; + } + }; + module.exports = BalancedPool; + } +}); + +// +var require_agent = __commonJS({ + ""(exports, module) { + "use strict"; + var { InvalidArgumentError } = require_errors(); + var { kClients, kRunning, kClose, kDestroy, kDispatch, kInterceptors } = require_symbols(); + var DispatcherBase = require_dispatcher_base(); + var Pool = require_pool(); + var Client = require_client(); + var util = require_util(); + var createRedirectInterceptor = require_redirect_interceptor(); + var kOnConnect = Symbol("onConnect"); + var kOnDisconnect = Symbol("onDisconnect"); + var kOnConnectionError = Symbol("onConnectionError"); + var kMaxRedirections = Symbol("maxRedirections"); + var kOnDrain = Symbol("onDrain"); + var kFactory = Symbol("factory"); + var kOptions = Symbol("options"); + function defaultFactory(origin, opts) { + return opts && opts.connections === 1 ? new Client(origin, opts) : new Pool(origin, opts); + } + var Agent = class extends DispatcherBase { + constructor({ factory = defaultFactory, maxRedirections = 0, connect, ...options } = {}) { + if (typeof factory !== "function") { + throw new InvalidArgumentError("factory must be a function."); + } + if (connect != null && typeof connect !== "function" && typeof connect !== "object") { + throw new InvalidArgumentError("connect must be a function or an object"); + } + if (!Number.isInteger(maxRedirections) || maxRedirections < 0) { + throw new InvalidArgumentError("maxRedirections must be a positive number"); + } + super(options); + if (connect && typeof connect !== "function") { + connect = { ...connect }; + } + this[kInterceptors] = options.interceptors?.Agent && Array.isArray(options.interceptors.Agent) ? options.interceptors.Agent : [createRedirectInterceptor({ maxRedirections })]; + this[kOptions] = { ...util.deepClone(options), connect }; + this[kOptions].interceptors = options.interceptors ? { ...options.interceptors } : void 0; + this[kMaxRedirections] = maxRedirections; + this[kFactory] = factory; + this[kClients] = /* @__PURE__ */ new Map(); + this[kOnDrain] = (origin, targets) => { + this.emit("drain", origin, [this, ...targets]); + }; + this[kOnConnect] = (origin, targets) => { + this.emit("connect", origin, [this, ...targets]); + }; + this[kOnDisconnect] = (origin, targets, err) => { + this.emit("disconnect", origin, [this, ...targets], err); + }; + this[kOnConnectionError] = (origin, targets, err) => { + this.emit("connectionError", origin, [this, ...targets], err); + }; + } + get [kRunning]() { + let ret = 0; + for (const client of this[kClients].values()) { + ret += client[kRunning]; + } + return ret; + } + [kDispatch](opts, handler) { + let key; + if (opts.origin && (typeof opts.origin === "string" || opts.origin instanceof URL)) { + key = String(opts.origin); + } else { + throw new InvalidArgumentError("opts.origin must be a non-empty string or URL."); + } + let dispatcher = this[kClients].get(key); + if (!dispatcher) { + dispatcher = this[kFactory](opts.origin, this[kOptions]).on("drain", this[kOnDrain]).on("connect", this[kOnConnect]).on("disconnect", this[kOnDisconnect]).on("connectionError", this[kOnConnectionError]); + this[kClients].set(key, dispatcher); + } + return dispatcher.dispatch(opts, handler); + } + async [kClose]() { + const closePromises = []; + for (const client of this[kClients].values()) { + closePromises.push(client.close()); + } + this[kClients].clear(); + await Promise.all(closePromises); + } + async [kDestroy](err) { + const destroyPromises = []; + for (const client of this[kClients].values()) { + destroyPromises.push(client.destroy(err)); + } + this[kClients].clear(); + await Promise.all(destroyPromises); + } + }; + module.exports = Agent; + } +}); + +// +var require_proxy_agent = __commonJS({ + ""(exports, module) { + "use strict"; + var { kProxy, kClose, kDestroy, kDispatch, kInterceptors } = require_symbols(); + var { URL: URL2 } = __require("node:url"); + var Agent = require_agent(); + var Pool = require_pool(); + var DispatcherBase = require_dispatcher_base(); + var { InvalidArgumentError, RequestAbortedError, SecureProxyConnectionError } = require_errors(); + var buildConnector = require_connect(); + var Client = require_client(); + var kAgent = Symbol("proxy agent"); + var kClient = Symbol("proxy client"); + var kProxyHeaders = Symbol("proxy headers"); + var kRequestTls = Symbol("request tls settings"); + var kProxyTls = Symbol("proxy tls settings"); + var kConnectEndpoint = Symbol("connect endpoint function"); + var kTunnelProxy = Symbol("tunnel proxy"); + function defaultProtocolPort(protocol) { + return protocol === "https:" ? 443 : 80; + } + function defaultFactory(origin, opts) { + return new Pool(origin, opts); + } + var noop = () => { + }; + function defaultAgentFactory(origin, opts) { + if (opts.connections === 1) { + return new Client(origin, opts); + } + return new Pool(origin, opts); + } + var Http1ProxyWrapper = class extends DispatcherBase { + #client; + constructor(proxyUrl, { headers = {}, connect, factory }) { + super(); + if (!proxyUrl) { + throw new InvalidArgumentError("Proxy URL is mandatory"); + } + this[kProxyHeaders] = headers; + if (factory) { + this.#client = factory(proxyUrl, { connect }); + } else { + this.#client = new Client(proxyUrl, { connect }); + } + } + [kDispatch](opts, handler) { + const onHeaders = handler.onHeaders; + handler.onHeaders = function(statusCode, data, resume) { + if (statusCode === 407) { + if (typeof handler.onError === "function") { + handler.onError(new InvalidArgumentError("Proxy Authentication Required (407)")); + } + return; + } + if (onHeaders) + onHeaders.call(this, statusCode, data, resume); + }; + const { + origin, + path: path2 = "/", + headers = {} + } = opts; + opts.path = origin + path2; + if (!("host" in headers) && !("Host" in headers)) { + const { host } = new URL2(origin); + headers.host = host; + } + opts.headers = { ...this[kProxyHeaders], ...headers }; + return this.#client[kDispatch](opts, handler); + } + async [kClose]() { + return this.#client.close(); + } + async [kDestroy](err) { + return this.#client.destroy(err); + } + }; + var ProxyAgent2 = class extends DispatcherBase { + constructor(opts) { + super(); + if (!opts || typeof opts === "object" && !(opts instanceof URL2) && !opts.uri) { + throw new InvalidArgumentError("Proxy uri is mandatory"); + } + const { clientFactory = defaultFactory } = opts; + if (typeof clientFactory !== "function") { + throw new InvalidArgumentError("Proxy opts.clientFactory must be a function."); + } + const { proxyTunnel = true } = opts; + const url = this.#getUrl(opts); + const { href, origin, port, protocol, username, password, hostname: proxyHostname } = url; + this[kProxy] = { uri: href, protocol }; + this[kInterceptors] = opts.interceptors?.ProxyAgent && Array.isArray(opts.interceptors.ProxyAgent) ? opts.interceptors.ProxyAgent : []; + this[kRequestTls] = opts.requestTls; + this[kProxyTls] = opts.proxyTls; + this[kProxyHeaders] = opts.headers || {}; + this[kTunnelProxy] = proxyTunnel; + if (opts.auth && opts.token) { + throw new InvalidArgumentError("opts.auth cannot be used in combination with opts.token"); + } else if (opts.auth) { + this[kProxyHeaders]["proxy-authorization"] = `Basic ${opts.auth}`; + } else if (opts.token) { + this[kProxyHeaders]["proxy-authorization"] = opts.token; + } else if (username && password) { + this[kProxyHeaders]["proxy-authorization"] = `Basic ${Buffer.from(`${decodeURIComponent(username)}:${decodeURIComponent(password)}`).toString("base64")}`; + } + const connect = buildConnector({ ...opts.proxyTls }); + this[kConnectEndpoint] = buildConnector({ ...opts.requestTls }); + const agentFactory = opts.factory || defaultAgentFactory; + const factory = (origin2, options) => { + const { protocol: protocol2 } = new URL2(origin2); + if (!this[kTunnelProxy] && protocol2 === "http:" && this[kProxy].protocol === "http:") { + return new Http1ProxyWrapper(this[kProxy].uri, { + headers: this[kProxyHeaders], + connect, + factory: agentFactory + }); + } + return agentFactory(origin2, options); + }; + this[kClient] = clientFactory(url, { connect }); + this[kAgent] = new Agent({ + ...opts, + factory, + connect: async (opts2, callback) => { + let requestedPath = opts2.host; + if (!opts2.port) { + requestedPath += `:${defaultProtocolPort(opts2.protocol)}`; + } + try { + const { socket, statusCode } = await this[kClient].connect({ + origin, + port, + path: requestedPath, + signal: opts2.signal, + headers: { + ...this[kProxyHeaders], + host: opts2.host + }, + servername: this[kProxyTls]?.servername || proxyHostname + }); + if (statusCode !== 200) { + socket.on("error", noop).destroy(); + callback(new RequestAbortedError(`Proxy response (${statusCode}) !== 200 when HTTP Tunneling`)); + } + if (opts2.protocol !== "https:") { + callback(null, socket); + return; + } + let servername; + if (this[kRequestTls]) { + servername = this[kRequestTls].servername; + } else { + servername = opts2.servername; + } + this[kConnectEndpoint]({ ...opts2, servername, httpSocket: socket }, callback); + } catch (err) { + if (err.code === "ERR_TLS_CERT_ALTNAME_INVALID") { + callback(new SecureProxyConnectionError(err)); + } else { + callback(err); + } + } + } + }); + } + dispatch(opts, handler) { + const headers = buildHeaders(opts.headers); + throwIfProxyAuthIsSent(headers); + if (headers && !("host" in headers) && !("Host" in headers)) { + const { host } = new URL2(opts.origin); + headers.host = host; + } + return this[kAgent].dispatch( + { + ...opts, + headers + }, + handler + ); + } + /** + * @param {import('../types/proxy-agent').ProxyAgent.Options | string | URL} opts + * @returns {URL} + */ + #getUrl(opts) { + if (typeof opts === "string") { + return new URL2(opts); + } else if (opts instanceof URL2) { + return opts; + } else { + return new URL2(opts.uri); + } + } + async [kClose]() { + await this[kAgent].close(); + await this[kClient].close(); + } + async [kDestroy]() { + await this[kAgent].destroy(); + await this[kClient].destroy(); + } + }; + function buildHeaders(headers) { + if (Array.isArray(headers)) { + const headersPair = {}; + for (let i = 0; i < headers.length; i += 2) { + headersPair[headers[i]] = headers[i + 1]; + } + return headersPair; + } + return headers; + } + function throwIfProxyAuthIsSent(headers) { + const existProxyAuth = headers && Object.keys(headers).find((key) => key.toLowerCase() === "proxy-authorization"); + if (existProxyAuth) { + throw new InvalidArgumentError("Proxy-Authorization should be sent in ProxyAgent constructor"); + } + } + module.exports = ProxyAgent2; + } +}); + +// +var require_env_http_proxy_agent = __commonJS({ + ""(exports, module) { + "use strict"; + var DispatcherBase = require_dispatcher_base(); + var { kClose, kDestroy, kClosed, kDestroyed, kDispatch, kNoProxyAgent, kHttpProxyAgent, kHttpsProxyAgent } = require_symbols(); + var ProxyAgent2 = require_proxy_agent(); + var Agent = require_agent(); + var DEFAULT_PORTS = { + "http:": 80, + "https:": 443 + }; + var experimentalWarned = false; + var EnvHttpProxyAgent = class extends DispatcherBase { + #noProxyValue = null; + #noProxyEntries = null; + #opts = null; + constructor(opts = {}) { + super(); + this.#opts = opts; + if (!experimentalWarned) { + experimentalWarned = true; + process.emitWarning("EnvHttpProxyAgent is experimental, expect them to change at any time.", { + code: "UNDICI-EHPA" + }); + } + const { httpProxy, httpsProxy, noProxy, ...agentOpts } = opts; + this[kNoProxyAgent] = new Agent(agentOpts); + const HTTP_PROXY = httpProxy ?? process.env.http_proxy ?? process.env.HTTP_PROXY; + if (HTTP_PROXY) { + this[kHttpProxyAgent] = new ProxyAgent2({ ...agentOpts, uri: HTTP_PROXY }); + } else { + this[kHttpProxyAgent] = this[kNoProxyAgent]; + } + const HTTPS_PROXY = httpsProxy ?? process.env.https_proxy ?? process.env.HTTPS_PROXY; + if (HTTPS_PROXY) { + this[kHttpsProxyAgent] = new ProxyAgent2({ ...agentOpts, uri: HTTPS_PROXY }); + } else { + this[kHttpsProxyAgent] = this[kHttpProxyAgent]; + } + this.#parseNoProxy(); + } + [kDispatch](opts, handler) { + const url = new URL(opts.origin); + const agent = this.#getProxyAgentForUrl(url); + return agent.dispatch(opts, handler); + } + async [kClose]() { + await this[kNoProxyAgent].close(); + if (!this[kHttpProxyAgent][kClosed]) { + await this[kHttpProxyAgent].close(); + } + if (!this[kHttpsProxyAgent][kClosed]) { + await this[kHttpsProxyAgent].close(); + } + } + async [kDestroy](err) { + await this[kNoProxyAgent].destroy(err); + if (!this[kHttpProxyAgent][kDestroyed]) { + await this[kHttpProxyAgent].destroy(err); + } + if (!this[kHttpsProxyAgent][kDestroyed]) { + await this[kHttpsProxyAgent].destroy(err); + } + } + #getProxyAgentForUrl(url) { + let { protocol, host: hostname, port } = url; + hostname = hostname.replace(/:\d*$/, "").toLowerCase(); + port = Number.parseInt(port, 10) || DEFAULT_PORTS[protocol] || 0; + if (!this.#shouldProxy(hostname, port)) { + return this[kNoProxyAgent]; + } + if (protocol === "https:") { + return this[kHttpsProxyAgent]; + } + return this[kHttpProxyAgent]; + } + #shouldProxy(hostname, port) { + if (this.#noProxyChanged) { + this.#parseNoProxy(); + } + if (this.#noProxyEntries.length === 0) { + return true; + } + if (this.#noProxyValue === "*") { + return false; + } + for (let i = 0; i < this.#noProxyEntries.length; i++) { + const entry = this.#noProxyEntries[i]; + if (entry.port && entry.port !== port) { + continue; + } + if (!/^[.*]/.test(entry.hostname)) { + if (hostname === entry.hostname) { + return false; + } + } else { + if (hostname.endsWith(entry.hostname.replace(/^\*/, ""))) { + return false; + } + } + } + return true; + } + #parseNoProxy() { + const noProxyValue = this.#opts.noProxy ?? this.#noProxyEnv; + const noProxySplit = noProxyValue.split(/[,\s]/); + const noProxyEntries = []; + for (let i = 0; i < noProxySplit.length; i++) { + const entry = noProxySplit[i]; + if (!entry) { + continue; + } + const parsed = entry.match(/^(.+):(\d+)$/); + noProxyEntries.push({ + hostname: (parsed ? parsed[1] : entry).toLowerCase(), + port: parsed ? Number.parseInt(parsed[2], 10) : 0 + }); + } + this.#noProxyValue = noProxyValue; + this.#noProxyEntries = noProxyEntries; + } + get #noProxyChanged() { + if (this.#opts.noProxy !== void 0) { + return false; + } + return this.#noProxyValue !== this.#noProxyEnv; + } + get #noProxyEnv() { + return process.env.no_proxy ?? process.env.NO_PROXY ?? ""; + } + }; + module.exports = EnvHttpProxyAgent; + } +}); + +// +var require_retry_handler = __commonJS({ + ""(exports, module) { + "use strict"; + var assert = __require("node:assert"); + var { kRetryHandlerDefaultRetry } = require_symbols(); + var { RequestRetryError } = require_errors(); + var { + isDisturbed, + parseHeaders, + parseRangeHeader, + wrapRequestBody + } = require_util(); + function calculateRetryAfterHeader(retryAfter) { + const current = Date.now(); + return new Date(retryAfter).getTime() - current; + } + var RetryHandler = class _RetryHandler { + constructor(opts, handlers) { + const { retryOptions, ...dispatchOpts } = opts; + const { + // Retry scoped + retry: retryFn, + maxRetries, + maxTimeout, + minTimeout, + timeoutFactor, + // Response scoped + methods, + errorCodes, + retryAfter, + statusCodes + } = retryOptions ?? {}; + this.dispatch = handlers.dispatch; + this.handler = handlers.handler; + this.opts = { ...dispatchOpts, body: wrapRequestBody(opts.body) }; + this.abort = null; + this.aborted = false; + this.retryOpts = { + retry: retryFn ?? _RetryHandler[kRetryHandlerDefaultRetry], + retryAfter: retryAfter ?? true, + maxTimeout: maxTimeout ?? 30 * 1e3, + // 30s, + minTimeout: minTimeout ?? 500, + // .5s + timeoutFactor: timeoutFactor ?? 2, + maxRetries: maxRetries ?? 5, + // What errors we should retry + methods: methods ?? ["GET", "HEAD", "OPTIONS", "PUT", "DELETE", "TRACE"], + // Indicates which errors to retry + statusCodes: statusCodes ?? [500, 502, 503, 504, 429], + // List of errors to retry + errorCodes: errorCodes ?? [ + "ECONNRESET", + "ECONNREFUSED", + "ENOTFOUND", + "ENETDOWN", + "ENETUNREACH", + "EHOSTDOWN", + "EHOSTUNREACH", + "EPIPE", + "UND_ERR_SOCKET" + ] + }; + this.retryCount = 0; + this.retryCountCheckpoint = 0; + this.start = 0; + this.end = null; + this.etag = null; + this.resume = null; + this.handler.onConnect((reason) => { + this.aborted = true; + if (this.abort) { + this.abort(reason); + } else { + this.reason = reason; + } + }); + } + onRequestSent() { + if (this.handler.onRequestSent) { + this.handler.onRequestSent(); + } + } + onUpgrade(statusCode, headers, socket) { + if (this.handler.onUpgrade) { + this.handler.onUpgrade(statusCode, headers, socket); + } + } + onConnect(abort) { + if (this.aborted) { + abort(this.reason); + } else { + this.abort = abort; + } + } + onBodySent(chunk) { + if (this.handler.onBodySent) + return this.handler.onBodySent(chunk); + } + static [kRetryHandlerDefaultRetry](err, { state, opts }, cb) { + const { statusCode, code, headers } = err; + const { method, retryOptions } = opts; + const { + maxRetries, + minTimeout, + maxTimeout, + timeoutFactor, + statusCodes, + errorCodes, + methods + } = retryOptions; + const { counter } = state; + if (code && code !== "UND_ERR_REQ_RETRY" && !errorCodes.includes(code)) { + cb(err); + return; + } + if (Array.isArray(methods) && !methods.includes(method)) { + cb(err); + return; + } + if (statusCode != null && Array.isArray(statusCodes) && !statusCodes.includes(statusCode)) { + cb(err); + return; + } + if (counter > maxRetries) { + cb(err); + return; + } + let retryAfterHeader = headers?.["retry-after"]; + if (retryAfterHeader) { + retryAfterHeader = Number(retryAfterHeader); + retryAfterHeader = Number.isNaN(retryAfterHeader) ? calculateRetryAfterHeader(retryAfterHeader) : retryAfterHeader * 1e3; + } + const retryTimeout = retryAfterHeader > 0 ? Math.min(retryAfterHeader, maxTimeout) : Math.min(minTimeout * timeoutFactor ** (counter - 1), maxTimeout); + setTimeout(() => cb(null), retryTimeout); + } + onHeaders(statusCode, rawHeaders, resume, statusMessage) { + const headers = parseHeaders(rawHeaders); + this.retryCount += 1; + if (statusCode >= 300) { + if (this.retryOpts.statusCodes.includes(statusCode) === false) { + return this.handler.onHeaders( + statusCode, + rawHeaders, + resume, + statusMessage + ); + } else { + this.abort( + new RequestRetryError("Request failed", statusCode, { + headers, + data: { + count: this.retryCount + } + }) + ); + return false; + } + } + if (this.resume != null) { + this.resume = null; + if (statusCode !== 206 && (this.start > 0 || statusCode !== 200)) { + this.abort( + new RequestRetryError("server does not support the range header and the payload was partially consumed", statusCode, { + headers, + data: { count: this.retryCount } + }) + ); + return false; + } + const contentRange = parseRangeHeader(headers["content-range"]); + if (!contentRange) { + this.abort( + new RequestRetryError("Content-Range mismatch", statusCode, { + headers, + data: { count: this.retryCount } + }) + ); + return false; + } + if (this.etag != null && this.etag !== headers.etag) { + this.abort( + new RequestRetryError("ETag mismatch", statusCode, { + headers, + data: { count: this.retryCount } + }) + ); + return false; + } + const { start, size, end = size - 1 } = contentRange; + assert(this.start === start, "content-range mismatch"); + assert(this.end == null || this.end === end, "content-range mismatch"); + this.resume = resume; + return true; + } + if (this.end == null) { + if (statusCode === 206) { + const range = parseRangeHeader(headers["content-range"]); + if (range == null) { + return this.handler.onHeaders( + statusCode, + rawHeaders, + resume, + statusMessage + ); + } + const { start, size, end = size - 1 } = range; + assert( + start != null && Number.isFinite(start), + "content-range mismatch" + ); + assert(end != null && Number.isFinite(end), "invalid content-length"); + this.start = start; + this.end = end; + } + if (this.end == null) { + const contentLength = headers["content-length"]; + this.end = contentLength != null ? Number(contentLength) - 1 : null; + } + assert(Number.isFinite(this.start)); + assert( + this.end == null || Number.isFinite(this.end), + "invalid content-length" + ); + this.resume = resume; + this.etag = headers.etag != null ? headers.etag : null; + if (this.etag != null && this.etag.startsWith("W/")) { + this.etag = null; + } + return this.handler.onHeaders( + statusCode, + rawHeaders, + resume, + statusMessage + ); + } + const err = new RequestRetryError("Request failed", statusCode, { + headers, + data: { count: this.retryCount } + }); + this.abort(err); + return false; + } + onData(chunk) { + this.start += chunk.length; + return this.handler.onData(chunk); + } + onComplete(rawTrailers) { + this.retryCount = 0; + return this.handler.onComplete(rawTrailers); + } + onError(err) { + if (this.aborted || isDisturbed(this.opts.body)) { + return this.handler.onError(err); + } + if (this.retryCount - this.retryCountCheckpoint > 0) { + this.retryCount = this.retryCountCheckpoint + (this.retryCount - this.retryCountCheckpoint); + } else { + this.retryCount += 1; + } + this.retryOpts.retry( + err, + { + state: { counter: this.retryCount }, + opts: { retryOptions: this.retryOpts, ...this.opts } + }, + onRetry.bind(this) + ); + function onRetry(err2) { + if (err2 != null || this.aborted || isDisturbed(this.opts.body)) { + return this.handler.onError(err2); + } + if (this.start !== 0) { + const headers = { range: `bytes=${this.start}-${this.end ?? ""}` }; + if (this.etag != null) { + headers["if-match"] = this.etag; + } + this.opts = { + ...this.opts, + headers: { + ...this.opts.headers, + ...headers + } + }; + } + try { + this.retryCountCheckpoint = this.retryCount; + this.dispatch(this.opts, this); + } catch (err3) { + this.handler.onError(err3); + } + } + } + }; + module.exports = RetryHandler; + } +}); + +// +var require_retry_agent = __commonJS({ + ""(exports, module) { + "use strict"; + var Dispatcher = require_dispatcher(); + var RetryHandler = require_retry_handler(); + var RetryAgent = class extends Dispatcher { + #agent = null; + #options = null; + constructor(agent, options = {}) { + super(options); + this.#agent = agent; + this.#options = options; + } + dispatch(opts, handler) { + const retry = new RetryHandler({ + ...opts, + retryOptions: this.#options + }, { + dispatch: this.#agent.dispatch.bind(this.#agent), + handler + }); + return this.#agent.dispatch(opts, retry); + } + close() { + return this.#agent.close(); + } + destroy() { + return this.#agent.destroy(); + } + }; + module.exports = RetryAgent; + } +}); + +// +var require_readable = __commonJS({ + ""(exports, module) { + "use strict"; + var assert = __require("node:assert"); + var { Readable } = __require("node:stream"); + var { RequestAbortedError, NotSupportedError, InvalidArgumentError, AbortError } = require_errors(); + var util = require_util(); + var { ReadableStreamFrom } = require_util(); + var kConsume = Symbol("kConsume"); + var kReading = Symbol("kReading"); + var kBody = Symbol("kBody"); + var kAbort = Symbol("kAbort"); + var kContentType = Symbol("kContentType"); + var kContentLength = Symbol("kContentLength"); + var noop = () => { + }; + var BodyReadable = class extends Readable { + constructor({ + resume, + abort, + contentType = "", + contentLength, + highWaterMark = 64 * 1024 + // Same as nodejs fs streams. + }) { + super({ + autoDestroy: true, + read: resume, + highWaterMark + }); + this._readableState.dataEmitted = false; + this[kAbort] = abort; + this[kConsume] = null; + this[kBody] = null; + this[kContentType] = contentType; + this[kContentLength] = contentLength; + this[kReading] = false; + } + destroy(err) { + if (!err && !this._readableState.endEmitted) { + err = new RequestAbortedError(); + } + if (err) { + this[kAbort](); + } + return super.destroy(err); + } + _destroy(err, callback) { + if (!this[kReading]) { + setImmediate(() => { + callback(err); + }); + } else { + callback(err); + } + } + on(ev, ...args) { + if (ev === "data" || ev === "readable") { + this[kReading] = true; + } + return super.on(ev, ...args); + } + addListener(ev, ...args) { + return this.on(ev, ...args); + } + off(ev, ...args) { + const ret = super.off(ev, ...args); + if (ev === "data" || ev === "readable") { + this[kReading] = this.listenerCount("data") > 0 || this.listenerCount("readable") > 0; + } + return ret; + } + removeListener(ev, ...args) { + return this.off(ev, ...args); + } + push(chunk) { + if (this[kConsume] && chunk !== null) { + consumePush(this[kConsume], chunk); + return this[kReading] ? super.push(chunk) : true; + } + return super.push(chunk); + } + // https://fetch.spec.whatwg.org/#dom-body-text + async text() { + return consume(this, "text"); + } + // https://fetch.spec.whatwg.org/#dom-body-json + async json() { + return consume(this, "json"); + } + // https://fetch.spec.whatwg.org/#dom-body-blob + async blob() { + return consume(this, "blob"); + } + // https://fetch.spec.whatwg.org/#dom-body-bytes + async bytes() { + return consume(this, "bytes"); + } + // https://fetch.spec.whatwg.org/#dom-body-arraybuffer + async arrayBuffer() { + return consume(this, "arrayBuffer"); + } + // https://fetch.spec.whatwg.org/#dom-body-formdata + async formData() { + throw new NotSupportedError(); + } + // https://fetch.spec.whatwg.org/#dom-body-bodyused + get bodyUsed() { + return util.isDisturbed(this); + } + // https://fetch.spec.whatwg.org/#dom-body-body + get body() { + if (!this[kBody]) { + this[kBody] = ReadableStreamFrom(this); + if (this[kConsume]) { + this[kBody].getReader(); + assert(this[kBody].locked); + } + } + return this[kBody]; + } + async dump(opts) { + let limit = Number.isFinite(opts?.limit) ? opts.limit : 128 * 1024; + const signal = opts?.signal; + if (signal != null && (typeof signal !== "object" || !("aborted" in signal))) { + throw new InvalidArgumentError("signal must be an AbortSignal"); + } + signal?.throwIfAborted(); + if (this._readableState.closeEmitted) { + return null; + } + return await new Promise((resolve, reject) => { + if (this[kContentLength] > limit) { + this.destroy(new AbortError()); + } + const onAbort = () => { + this.destroy(signal.reason ?? new AbortError()); + }; + signal?.addEventListener("abort", onAbort); + this.on("close", function() { + signal?.removeEventListener("abort", onAbort); + if (signal?.aborted) { + reject(signal.reason ?? new AbortError()); + } else { + resolve(null); + } + }).on("error", noop).on("data", function(chunk) { + limit -= chunk.length; + if (limit <= 0) { + this.destroy(); + } + }).resume(); + }); + } + }; + function isLocked(self) { + return self[kBody] && self[kBody].locked === true || self[kConsume]; + } + function isUnusable(self) { + return util.isDisturbed(self) || isLocked(self); + } + async function consume(stream, type) { + assert(!stream[kConsume]); + return new Promise((resolve, reject) => { + if (isUnusable(stream)) { + const rState = stream._readableState; + if (rState.destroyed && rState.closeEmitted === false) { + stream.on("error", (err) => { + reject(err); + }).on("close", () => { + reject(new TypeError("unusable")); + }); + } else { + reject(rState.errored ?? new TypeError("unusable")); + } + } else { + queueMicrotask(() => { + stream[kConsume] = { + type, + stream, + resolve, + reject, + length: 0, + body: [] + }; + stream.on("error", function(err) { + consumeFinish(this[kConsume], err); + }).on("close", function() { + if (this[kConsume].body !== null) { + consumeFinish(this[kConsume], new RequestAbortedError()); + } + }); + consumeStart(stream[kConsume]); + }); + } + }); + } + function consumeStart(consume2) { + if (consume2.body === null) { + return; + } + const { _readableState: state } = consume2.stream; + if (state.bufferIndex) { + const start = state.bufferIndex; + const end = state.buffer.length; + for (let n = start; n < end; n++) { + consumePush(consume2, state.buffer[n]); + } + } else { + for (const chunk of state.buffer) { + consumePush(consume2, chunk); + } + } + if (state.endEmitted) { + consumeEnd(this[kConsume]); + } else { + consume2.stream.on("end", function() { + consumeEnd(this[kConsume]); + }); + } + consume2.stream.resume(); + while (consume2.stream.read() != null) { + } + } + function chunksDecode(chunks, length) { + if (chunks.length === 0 || length === 0) { + return ""; + } + const buffer = chunks.length === 1 ? chunks[0] : Buffer.concat(chunks, length); + const bufferLength = buffer.length; + const start = bufferLength > 2 && buffer[0] === 239 && buffer[1] === 187 && buffer[2] === 191 ? 3 : 0; + return buffer.utf8Slice(start, bufferLength); + } + function chunksConcat(chunks, length) { + if (chunks.length === 0 || length === 0) { + return new Uint8Array(0); + } + if (chunks.length === 1) { + return new Uint8Array(chunks[0]); + } + const buffer = new Uint8Array(Buffer.allocUnsafeSlow(length).buffer); + let offset = 0; + for (let i = 0; i < chunks.length; ++i) { + const chunk = chunks[i]; + buffer.set(chunk, offset); + offset += chunk.length; + } + return buffer; + } + function consumeEnd(consume2) { + const { type, body, resolve, stream, length } = consume2; + try { + if (type === "text") { + resolve(chunksDecode(body, length)); + } else if (type === "json") { + resolve(JSON.parse(chunksDecode(body, length))); + } else if (type === "arrayBuffer") { + resolve(chunksConcat(body, length).buffer); + } else if (type === "blob") { + resolve(new Blob(body, { type: stream[kContentType] })); + } else if (type === "bytes") { + resolve(chunksConcat(body, length)); + } + consumeFinish(consume2); + } catch (err) { + stream.destroy(err); + } + } + function consumePush(consume2, chunk) { + consume2.length += chunk.length; + consume2.body.push(chunk); + } + function consumeFinish(consume2, err) { + if (consume2.body === null) { + return; + } + if (err) { + consume2.reject(err); + } else { + consume2.resolve(); + } + consume2.type = null; + consume2.stream = null; + consume2.resolve = null; + consume2.reject = null; + consume2.length = 0; + consume2.body = null; + } + module.exports = { Readable: BodyReadable, chunksDecode }; + } +}); + +// +var require_util3 = __commonJS({ + ""(exports, module) { + var assert = __require("node:assert"); + var { + ResponseStatusCodeError + } = require_errors(); + var { chunksDecode } = require_readable(); + var CHUNK_LIMIT = 128 * 1024; + async function getResolveErrorBodyCallback({ callback, body, contentType, statusCode, statusMessage, headers }) { + assert(body); + let chunks = []; + let length = 0; + try { + for await (const chunk of body) { + chunks.push(chunk); + length += chunk.length; + if (length > CHUNK_LIMIT) { + chunks = []; + length = 0; + break; + } + } + } catch { + chunks = []; + length = 0; + } + const message = `Response status code ${statusCode}${statusMessage ? `: ${statusMessage}` : ""}`; + if (statusCode === 204 || !contentType || !length) { + queueMicrotask(() => callback(new ResponseStatusCodeError(message, statusCode, headers))); + return; + } + const stackTraceLimit = Error.stackTraceLimit; + Error.stackTraceLimit = 0; + let payload; + try { + if (isContentTypeApplicationJson(contentType)) { + payload = JSON.parse(chunksDecode(chunks, length)); + } else if (isContentTypeText(contentType)) { + payload = chunksDecode(chunks, length); + } + } catch { + } finally { + Error.stackTraceLimit = stackTraceLimit; + } + queueMicrotask(() => callback(new ResponseStatusCodeError(message, statusCode, headers, payload))); + } + var isContentTypeApplicationJson = (contentType) => { + return contentType.length > 15 && contentType[11] === "/" && contentType[0] === "a" && contentType[1] === "p" && contentType[2] === "p" && contentType[3] === "l" && contentType[4] === "i" && contentType[5] === "c" && contentType[6] === "a" && contentType[7] === "t" && contentType[8] === "i" && contentType[9] === "o" && contentType[10] === "n" && contentType[12] === "j" && contentType[13] === "s" && contentType[14] === "o" && contentType[15] === "n"; + }; + var isContentTypeText = (contentType) => { + return contentType.length > 4 && contentType[4] === "/" && contentType[0] === "t" && contentType[1] === "e" && contentType[2] === "x" && contentType[3] === "t"; + }; + module.exports = { + getResolveErrorBodyCallback, + isContentTypeApplicationJson, + isContentTypeText + }; + } +}); + +// +var require_api_request = __commonJS({ + ""(exports, module) { + "use strict"; + var assert = __require("node:assert"); + var { Readable } = require_readable(); + var { InvalidArgumentError, RequestAbortedError } = require_errors(); + var util = require_util(); + var { getResolveErrorBodyCallback } = require_util3(); + var { AsyncResource } = __require("node:async_hooks"); + var RequestHandler = class extends AsyncResource { + constructor(opts, callback) { + if (!opts || typeof opts !== "object") { + throw new InvalidArgumentError("invalid opts"); + } + const { signal, method, opaque, body, onInfo, responseHeaders, throwOnError, highWaterMark } = opts; + try { + if (typeof callback !== "function") { + throw new InvalidArgumentError("invalid callback"); + } + if (highWaterMark && (typeof highWaterMark !== "number" || highWaterMark < 0)) { + throw new InvalidArgumentError("invalid highWaterMark"); + } + if (signal && typeof signal.on !== "function" && typeof signal.addEventListener !== "function") { + throw new InvalidArgumentError("signal must be an EventEmitter or EventTarget"); + } + if (method === "CONNECT") { + throw new InvalidArgumentError("invalid method"); + } + if (onInfo && typeof onInfo !== "function") { + throw new InvalidArgumentError("invalid onInfo callback"); + } + super("UNDICI_REQUEST"); + } catch (err) { + if (util.isStream(body)) { + util.destroy(body.on("error", util.nop), err); + } + throw err; + } + this.method = method; + this.responseHeaders = responseHeaders || null; + this.opaque = opaque || null; + this.callback = callback; + this.res = null; + this.abort = null; + this.body = body; + this.trailers = {}; + this.context = null; + this.onInfo = onInfo || null; + this.throwOnError = throwOnError; + this.highWaterMark = highWaterMark; + this.signal = signal; + this.reason = null; + this.removeAbortListener = null; + if (util.isStream(body)) { + body.on("error", (err) => { + this.onError(err); + }); + } + if (this.signal) { + if (this.signal.aborted) { + this.reason = this.signal.reason ?? new RequestAbortedError(); + } else { + this.removeAbortListener = util.addAbortListener(this.signal, () => { + this.reason = this.signal.reason ?? new RequestAbortedError(); + if (this.res) { + util.destroy(this.res.on("error", util.nop), this.reason); + } else if (this.abort) { + this.abort(this.reason); + } + if (this.removeAbortListener) { + this.res?.off("close", this.removeAbortListener); + this.removeAbortListener(); + this.removeAbortListener = null; + } + }); + } + } + } + onConnect(abort, context) { + if (this.reason) { + abort(this.reason); + return; + } + assert(this.callback); + this.abort = abort; + this.context = context; + } + onHeaders(statusCode, rawHeaders, resume, statusMessage) { + const { callback, opaque, abort, context, responseHeaders, highWaterMark } = this; + const headers = responseHeaders === "raw" ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders); + if (statusCode < 200) { + if (this.onInfo) { + this.onInfo({ statusCode, headers }); + } + return; + } + const parsedHeaders = responseHeaders === "raw" ? util.parseHeaders(rawHeaders) : headers; + const contentType = parsedHeaders["content-type"]; + const contentLength = parsedHeaders["content-length"]; + const res = new Readable({ + resume, + abort, + contentType, + contentLength: this.method !== "HEAD" && contentLength ? Number(contentLength) : null, + highWaterMark + }); + if (this.removeAbortListener) { + res.on("close", this.removeAbortListener); + } + this.callback = null; + this.res = res; + if (callback !== null) { + if (this.throwOnError && statusCode >= 400) { + this.runInAsyncScope( + getResolveErrorBodyCallback, + null, + { callback, body: res, contentType, statusCode, statusMessage, headers } + ); + } else { + this.runInAsyncScope(callback, null, null, { + statusCode, + headers, + trailers: this.trailers, + opaque, + body: res, + context + }); + } + } + } + onData(chunk) { + return this.res.push(chunk); + } + onComplete(trailers) { + util.parseHeaders(trailers, this.trailers); + this.res.push(null); + } + onError(err) { + const { res, callback, body, opaque } = this; + if (callback) { + this.callback = null; + queueMicrotask(() => { + this.runInAsyncScope(callback, null, err, { opaque }); + }); + } + if (res) { + this.res = null; + queueMicrotask(() => { + util.destroy(res, err); + }); + } + if (body) { + this.body = null; + util.destroy(body, err); + } + if (this.removeAbortListener) { + res?.off("close", this.removeAbortListener); + this.removeAbortListener(); + this.removeAbortListener = null; + } + } + }; + function request(opts, callback) { + if (callback === void 0) { + return new Promise((resolve, reject) => { + request.call(this, opts, (err, data) => { + return err ? reject(err) : resolve(data); + }); + }); + } + try { + this.dispatch(opts, new RequestHandler(opts, callback)); + } catch (err) { + if (typeof callback !== "function") { + throw err; + } + const opaque = opts?.opaque; + queueMicrotask(() => callback(err, { opaque })); + } + } + module.exports = request; + module.exports.RequestHandler = RequestHandler; + } +}); + +// +var require_abort_signal = __commonJS({ + ""(exports, module) { + var { addAbortListener } = require_util(); + var { RequestAbortedError } = require_errors(); + var kListener = Symbol("kListener"); + var kSignal = Symbol("kSignal"); + function abort(self) { + if (self.abort) { + self.abort(self[kSignal]?.reason); + } else { + self.reason = self[kSignal]?.reason ?? new RequestAbortedError(); + } + removeSignal(self); + } + function addSignal(self, signal) { + self.reason = null; + self[kSignal] = null; + self[kListener] = null; + if (!signal) { + return; + } + if (signal.aborted) { + abort(self); + return; + } + self[kSignal] = signal; + self[kListener] = () => { + abort(self); + }; + addAbortListener(self[kSignal], self[kListener]); + } + function removeSignal(self) { + if (!self[kSignal]) { + return; + } + if ("removeEventListener" in self[kSignal]) { + self[kSignal].removeEventListener("abort", self[kListener]); + } else { + self[kSignal].removeListener("abort", self[kListener]); + } + self[kSignal] = null; + self[kListener] = null; + } + module.exports = { + addSignal, + removeSignal + }; + } +}); + +// +var require_api_stream = __commonJS({ + ""(exports, module) { + "use strict"; + var assert = __require("node:assert"); + var { finished, PassThrough } = __require("node:stream"); + var { InvalidArgumentError, InvalidReturnValueError } = require_errors(); + var util = require_util(); + var { getResolveErrorBodyCallback } = require_util3(); + var { AsyncResource } = __require("node:async_hooks"); + var { addSignal, removeSignal } = require_abort_signal(); + var StreamHandler = class extends AsyncResource { + constructor(opts, factory, callback) { + if (!opts || typeof opts !== "object") { + throw new InvalidArgumentError("invalid opts"); + } + const { signal, method, opaque, body, onInfo, responseHeaders, throwOnError } = opts; + try { + if (typeof callback !== "function") { + throw new InvalidArgumentError("invalid callback"); + } + if (typeof factory !== "function") { + throw new InvalidArgumentError("invalid factory"); + } + if (signal && typeof signal.on !== "function" && typeof signal.addEventListener !== "function") { + throw new InvalidArgumentError("signal must be an EventEmitter or EventTarget"); + } + if (method === "CONNECT") { + throw new InvalidArgumentError("invalid method"); + } + if (onInfo && typeof onInfo !== "function") { + throw new InvalidArgumentError("invalid onInfo callback"); + } + super("UNDICI_STREAM"); + } catch (err) { + if (util.isStream(body)) { + util.destroy(body.on("error", util.nop), err); + } + throw err; + } + this.responseHeaders = responseHeaders || null; + this.opaque = opaque || null; + this.factory = factory; + this.callback = callback; + this.res = null; + this.abort = null; + this.context = null; + this.trailers = null; + this.body = body; + this.onInfo = onInfo || null; + this.throwOnError = throwOnError || false; + if (util.isStream(body)) { + body.on("error", (err) => { + this.onError(err); + }); + } + addSignal(this, signal); + } + onConnect(abort, context) { + if (this.reason) { + abort(this.reason); + return; + } + assert(this.callback); + this.abort = abort; + this.context = context; + } + onHeaders(statusCode, rawHeaders, resume, statusMessage) { + const { factory, opaque, context, callback, responseHeaders } = this; + const headers = responseHeaders === "raw" ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders); + if (statusCode < 200) { + if (this.onInfo) { + this.onInfo({ statusCode, headers }); + } + return; + } + this.factory = null; + let res; + if (this.throwOnError && statusCode >= 400) { + const parsedHeaders = responseHeaders === "raw" ? util.parseHeaders(rawHeaders) : headers; + const contentType = parsedHeaders["content-type"]; + res = new PassThrough(); + this.callback = null; + this.runInAsyncScope( + getResolveErrorBodyCallback, + null, + { callback, body: res, contentType, statusCode, statusMessage, headers } + ); + } else { + if (factory === null) { + return; + } + res = this.runInAsyncScope(factory, null, { + statusCode, + headers, + opaque, + context + }); + if (!res || typeof res.write !== "function" || typeof res.end !== "function" || typeof res.on !== "function") { + throw new InvalidReturnValueError("expected Writable"); + } + finished(res, { readable: false }, (err) => { + const { callback: callback2, res: res2, opaque: opaque2, trailers, abort } = this; + this.res = null; + if (err || !res2.readable) { + util.destroy(res2, err); + } + this.callback = null; + this.runInAsyncScope(callback2, null, err || null, { opaque: opaque2, trailers }); + if (err) { + abort(); + } + }); + } + res.on("drain", resume); + this.res = res; + const needDrain = res.writableNeedDrain !== void 0 ? res.writableNeedDrain : res._writableState?.needDrain; + return needDrain !== true; + } + onData(chunk) { + const { res } = this; + return res ? res.write(chunk) : true; + } + onComplete(trailers) { + const { res } = this; + removeSignal(this); + if (!res) { + return; + } + this.trailers = util.parseHeaders(trailers); + res.end(); + } + onError(err) { + const { res, callback, opaque, body } = this; + removeSignal(this); + this.factory = null; + if (res) { + this.res = null; + util.destroy(res, err); + } else if (callback) { + this.callback = null; + queueMicrotask(() => { + this.runInAsyncScope(callback, null, err, { opaque }); + }); + } + if (body) { + this.body = null; + util.destroy(body, err); + } + } + }; + function stream(opts, factory, callback) { + if (callback === void 0) { + return new Promise((resolve, reject) => { + stream.call(this, opts, factory, (err, data) => { + return err ? reject(err) : resolve(data); + }); + }); + } + try { + this.dispatch(opts, new StreamHandler(opts, factory, callback)); + } catch (err) { + if (typeof callback !== "function") { + throw err; + } + const opaque = opts?.opaque; + queueMicrotask(() => callback(err, { opaque })); + } + } + module.exports = stream; + } +}); + +// +var require_api_pipeline = __commonJS({ + ""(exports, module) { + "use strict"; + var { + Readable, + Duplex, + PassThrough + } = __require("node:stream"); + var { + InvalidArgumentError, + InvalidReturnValueError, + RequestAbortedError + } = require_errors(); + var util = require_util(); + var { AsyncResource } = __require("node:async_hooks"); + var { addSignal, removeSignal } = require_abort_signal(); + var assert = __require("node:assert"); + var kResume = Symbol("resume"); + var PipelineRequest = class extends Readable { + constructor() { + super({ autoDestroy: true }); + this[kResume] = null; + } + _read() { + const { [kResume]: resume } = this; + if (resume) { + this[kResume] = null; + resume(); + } + } + _destroy(err, callback) { + this._read(); + callback(err); + } + }; + var PipelineResponse = class extends Readable { + constructor(resume) { + super({ autoDestroy: true }); + this[kResume] = resume; + } + _read() { + this[kResume](); + } + _destroy(err, callback) { + if (!err && !this._readableState.endEmitted) { + err = new RequestAbortedError(); + } + callback(err); + } + }; + var PipelineHandler = class extends AsyncResource { + constructor(opts, handler) { + if (!opts || typeof opts !== "object") { + throw new InvalidArgumentError("invalid opts"); + } + if (typeof handler !== "function") { + throw new InvalidArgumentError("invalid handler"); + } + const { signal, method, opaque, onInfo, responseHeaders } = opts; + if (signal && typeof signal.on !== "function" && typeof signal.addEventListener !== "function") { + throw new InvalidArgumentError("signal must be an EventEmitter or EventTarget"); + } + if (method === "CONNECT") { + throw new InvalidArgumentError("invalid method"); + } + if (onInfo && typeof onInfo !== "function") { + throw new InvalidArgumentError("invalid onInfo callback"); + } + super("UNDICI_PIPELINE"); + this.opaque = opaque || null; + this.responseHeaders = responseHeaders || null; + this.handler = handler; + this.abort = null; + this.context = null; + this.onInfo = onInfo || null; + this.req = new PipelineRequest().on("error", util.nop); + this.ret = new Duplex({ + readableObjectMode: opts.objectMode, + autoDestroy: true, + read: () => { + const { body } = this; + if (body?.resume) { + body.resume(); + } + }, + write: (chunk, encoding, callback) => { + const { req } = this; + if (req.push(chunk, encoding) || req._readableState.destroyed) { + callback(); + } else { + req[kResume] = callback; + } + }, + destroy: (err, callback) => { + const { body, req, res, ret, abort } = this; + if (!err && !ret._readableState.endEmitted) { + err = new RequestAbortedError(); + } + if (abort && err) { + abort(); + } + util.destroy(body, err); + util.destroy(req, err); + util.destroy(res, err); + removeSignal(this); + callback(err); + } + }).on("prefinish", () => { + const { req } = this; + req.push(null); + }); + this.res = null; + addSignal(this, signal); + } + onConnect(abort, context) { + const { ret, res } = this; + if (this.reason) { + abort(this.reason); + return; + } + assert(!res, "pipeline cannot be retried"); + assert(!ret.destroyed); + this.abort = abort; + this.context = context; + } + onHeaders(statusCode, rawHeaders, resume) { + const { opaque, handler, context } = this; + if (statusCode < 200) { + if (this.onInfo) { + const headers = this.responseHeaders === "raw" ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders); + this.onInfo({ statusCode, headers }); + } + return; + } + this.res = new PipelineResponse(resume); + let body; + try { + this.handler = null; + const headers = this.responseHeaders === "raw" ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders); + body = this.runInAsyncScope(handler, null, { + statusCode, + headers, + opaque, + body: this.res, + context + }); + } catch (err) { + this.res.on("error", util.nop); + throw err; + } + if (!body || typeof body.on !== "function") { + throw new InvalidReturnValueError("expected Readable"); + } + body.on("data", (chunk) => { + const { ret, body: body2 } = this; + if (!ret.push(chunk) && body2.pause) { + body2.pause(); + } + }).on("error", (err) => { + const { ret } = this; + util.destroy(ret, err); + }).on("end", () => { + const { ret } = this; + ret.push(null); + }).on("close", () => { + const { ret } = this; + if (!ret._readableState.ended) { + util.destroy(ret, new RequestAbortedError()); + } + }); + this.body = body; + } + onData(chunk) { + const { res } = this; + return res.push(chunk); + } + onComplete(trailers) { + const { res } = this; + res.push(null); + } + onError(err) { + const { ret } = this; + this.handler = null; + util.destroy(ret, err); + } + }; + function pipeline(opts, handler) { + try { + const pipelineHandler = new PipelineHandler(opts, handler); + this.dispatch({ ...opts, body: pipelineHandler.req }, pipelineHandler); + return pipelineHandler.ret; + } catch (err) { + return new PassThrough().destroy(err); + } + } + module.exports = pipeline; + } +}); + +// +var require_api_upgrade = __commonJS({ + ""(exports, module) { + "use strict"; + var { InvalidArgumentError, SocketError } = require_errors(); + var { AsyncResource } = __require("node:async_hooks"); + var util = require_util(); + var { addSignal, removeSignal } = require_abort_signal(); + var assert = __require("node:assert"); + var UpgradeHandler = class extends AsyncResource { + constructor(opts, callback) { + if (!opts || typeof opts !== "object") { + throw new InvalidArgumentError("invalid opts"); + } + if (typeof callback !== "function") { + throw new InvalidArgumentError("invalid callback"); + } + const { signal, opaque, responseHeaders } = opts; + if (signal && typeof signal.on !== "function" && typeof signal.addEventListener !== "function") { + throw new InvalidArgumentError("signal must be an EventEmitter or EventTarget"); + } + super("UNDICI_UPGRADE"); + this.responseHeaders = responseHeaders || null; + this.opaque = opaque || null; + this.callback = callback; + this.abort = null; + this.context = null; + addSignal(this, signal); + } + onConnect(abort, context) { + if (this.reason) { + abort(this.reason); + return; + } + assert(this.callback); + this.abort = abort; + this.context = null; + } + onHeaders() { + throw new SocketError("bad upgrade", null); + } + onUpgrade(statusCode, rawHeaders, socket) { + assert(statusCode === 101); + const { callback, opaque, context } = this; + removeSignal(this); + this.callback = null; + const headers = this.responseHeaders === "raw" ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders); + this.runInAsyncScope(callback, null, null, { + headers, + socket, + opaque, + context + }); + } + onError(err) { + const { callback, opaque } = this; + removeSignal(this); + if (callback) { + this.callback = null; + queueMicrotask(() => { + this.runInAsyncScope(callback, null, err, { opaque }); + }); + } + } + }; + function upgrade(opts, callback) { + if (callback === void 0) { + return new Promise((resolve, reject) => { + upgrade.call(this, opts, (err, data) => { + return err ? reject(err) : resolve(data); + }); + }); + } + try { + const upgradeHandler = new UpgradeHandler(opts, callback); + this.dispatch({ + ...opts, + method: opts.method || "GET", + upgrade: opts.protocol || "Websocket" + }, upgradeHandler); + } catch (err) { + if (typeof callback !== "function") { + throw err; + } + const opaque = opts?.opaque; + queueMicrotask(() => callback(err, { opaque })); + } + } + module.exports = upgrade; + } +}); + +// +var require_api_connect = __commonJS({ + ""(exports, module) { + "use strict"; + var assert = __require("node:assert"); + var { AsyncResource } = __require("node:async_hooks"); + var { InvalidArgumentError, SocketError } = require_errors(); + var util = require_util(); + var { addSignal, removeSignal } = require_abort_signal(); + var ConnectHandler = class extends AsyncResource { + constructor(opts, callback) { + if (!opts || typeof opts !== "object") { + throw new InvalidArgumentError("invalid opts"); + } + if (typeof callback !== "function") { + throw new InvalidArgumentError("invalid callback"); + } + const { signal, opaque, responseHeaders } = opts; + if (signal && typeof signal.on !== "function" && typeof signal.addEventListener !== "function") { + throw new InvalidArgumentError("signal must be an EventEmitter or EventTarget"); + } + super("UNDICI_CONNECT"); + this.opaque = opaque || null; + this.responseHeaders = responseHeaders || null; + this.callback = callback; + this.abort = null; + addSignal(this, signal); + } + onConnect(abort, context) { + if (this.reason) { + abort(this.reason); + return; + } + assert(this.callback); + this.abort = abort; + this.context = context; + } + onHeaders() { + throw new SocketError("bad connect", null); + } + onUpgrade(statusCode, rawHeaders, socket) { + const { callback, opaque, context } = this; + removeSignal(this); + this.callback = null; + let headers = rawHeaders; + if (headers != null) { + headers = this.responseHeaders === "raw" ? util.parseRawHeaders(rawHeaders) : util.parseHeaders(rawHeaders); + } + this.runInAsyncScope(callback, null, null, { + statusCode, + headers, + socket, + opaque, + context + }); + } + onError(err) { + const { callback, opaque } = this; + removeSignal(this); + if (callback) { + this.callback = null; + queueMicrotask(() => { + this.runInAsyncScope(callback, null, err, { opaque }); + }); + } + } + }; + function connect(opts, callback) { + if (callback === void 0) { + return new Promise((resolve, reject) => { + connect.call(this, opts, (err, data) => { + return err ? reject(err) : resolve(data); + }); + }); + } + try { + const connectHandler = new ConnectHandler(opts, callback); + this.dispatch({ ...opts, method: "CONNECT" }, connectHandler); + } catch (err) { + if (typeof callback !== "function") { + throw err; + } + const opaque = opts?.opaque; + queueMicrotask(() => callback(err, { opaque })); + } + } + module.exports = connect; + } +}); + +// +var require_api = __commonJS({ + ""(exports, module) { + "use strict"; + module.exports.request = require_api_request(); + module.exports.stream = require_api_stream(); + module.exports.pipeline = require_api_pipeline(); + module.exports.upgrade = require_api_upgrade(); + module.exports.connect = require_api_connect(); + } +}); + +// +var require_mock_errors = __commonJS({ + ""(exports, module) { + "use strict"; + var { UndiciError } = require_errors(); + var kMockNotMatchedError = Symbol.for("undici.error.UND_MOCK_ERR_MOCK_NOT_MATCHED"); + var MockNotMatchedError = class _MockNotMatchedError extends UndiciError { + constructor(message) { + super(message); + Error.captureStackTrace(this, _MockNotMatchedError); + this.name = "MockNotMatchedError"; + this.message = message || "The request does not match any registered mock dispatches"; + this.code = "UND_MOCK_ERR_MOCK_NOT_MATCHED"; + } + static [Symbol.hasInstance](instance) { + return instance && instance[kMockNotMatchedError] === true; + } + [kMockNotMatchedError] = true; + }; + module.exports = { + MockNotMatchedError + }; + } +}); + +// +var require_mock_symbols = __commonJS({ + ""(exports, module) { + "use strict"; + module.exports = { + kAgent: Symbol("agent"), + kOptions: Symbol("options"), + kFactory: Symbol("factory"), + kDispatches: Symbol("dispatches"), + kDispatchKey: Symbol("dispatch key"), + kDefaultHeaders: Symbol("default headers"), + kDefaultTrailers: Symbol("default trailers"), + kContentLength: Symbol("content length"), + kMockAgent: Symbol("mock agent"), + kMockAgentSet: Symbol("mock agent set"), + kMockAgentGet: Symbol("mock agent get"), + kMockDispatch: Symbol("mock dispatch"), + kClose: Symbol("close"), + kOriginalClose: Symbol("original agent close"), + kOrigin: Symbol("origin"), + kIsMockActive: Symbol("is mock active"), + kNetConnect: Symbol("net connect"), + kGetNetConnect: Symbol("get net connect"), + kConnected: Symbol("connected") + }; + } +}); + +// +var require_mock_utils = __commonJS({ + ""(exports, module) { + "use strict"; + var { MockNotMatchedError } = require_mock_errors(); + var { + kDispatches, + kMockAgent, + kOriginalDispatch, + kOrigin, + kGetNetConnect + } = require_mock_symbols(); + var { buildURL } = require_util(); + var { STATUS_CODES } = __require("node:http"); + var { + types: { + isPromise + } + } = __require("node:util"); + function matchValue(match, value) { + if (typeof match === "string") { + return match === value; + } + if (match instanceof RegExp) { + return match.test(value); + } + if (typeof match === "function") { + return match(value) === true; + } + return false; + } + function lowerCaseEntries(headers) { + return Object.fromEntries( + Object.entries(headers).map(([headerName, headerValue]) => { + return [headerName.toLocaleLowerCase(), headerValue]; + }) + ); + } + function getHeaderByName(headers, key) { + if (Array.isArray(headers)) { + for (let i = 0; i < headers.length; i += 2) { + if (headers[i].toLocaleLowerCase() === key.toLocaleLowerCase()) { + return headers[i + 1]; + } + } + return void 0; + } else if (typeof headers.get === "function") { + return headers.get(key); + } else { + return lowerCaseEntries(headers)[key.toLocaleLowerCase()]; + } + } + function buildHeadersFromArray(headers) { + const clone = headers.slice(); + const entries = []; + for (let index = 0; index < clone.length; index += 2) { + entries.push([clone[index], clone[index + 1]]); + } + return Object.fromEntries(entries); + } + function matchHeaders(mockDispatch2, headers) { + if (typeof mockDispatch2.headers === "function") { + if (Array.isArray(headers)) { + headers = buildHeadersFromArray(headers); + } + return mockDispatch2.headers(headers ? lowerCaseEntries(headers) : {}); + } + if (typeof mockDispatch2.headers === "undefined") { + return true; + } + if (typeof headers !== "object" || typeof mockDispatch2.headers !== "object") { + return false; + } + for (const [matchHeaderName, matchHeaderValue] of Object.entries(mockDispatch2.headers)) { + const headerValue = getHeaderByName(headers, matchHeaderName); + if (!matchValue(matchHeaderValue, headerValue)) { + return false; + } + } + return true; + } + function safeUrl(path2) { + if (typeof path2 !== "string") { + return path2; + } + const pathSegments = path2.split("?"); + if (pathSegments.length !== 2) { + return path2; + } + const qp = new URLSearchParams(pathSegments.pop()); + qp.sort(); + return [...pathSegments, qp.toString()].join("?"); + } + function matchKey(mockDispatch2, { path: path2, method, body, headers }) { + const pathMatch = matchValue(mockDispatch2.path, path2); + const methodMatch = matchValue(mockDispatch2.method, method); + const bodyMatch = typeof mockDispatch2.body !== "undefined" ? matchValue(mockDispatch2.body, body) : true; + const headersMatch = matchHeaders(mockDispatch2, headers); + return pathMatch && methodMatch && bodyMatch && headersMatch; + } + function getResponseData(data) { + if (Buffer.isBuffer(data)) { + return data; + } else if (data instanceof Uint8Array) { + return data; + } else if (data instanceof ArrayBuffer) { + return data; + } else if (typeof data === "object") { + return JSON.stringify(data); + } else { + return data.toString(); + } + } + function getMockDispatch(mockDispatches, key) { + const basePath = key.query ? buildURL(key.path, key.query) : key.path; + const resolvedPath = typeof basePath === "string" ? safeUrl(basePath) : basePath; + let matchedMockDispatches = mockDispatches.filter(({ consumed }) => !consumed).filter(({ path: path2 }) => matchValue(safeUrl(path2), resolvedPath)); + if (matchedMockDispatches.length === 0) { + throw new MockNotMatchedError(`Mock dispatch not matched for path '${resolvedPath}'`); + } + matchedMockDispatches = matchedMockDispatches.filter(({ method }) => matchValue(method, key.method)); + if (matchedMockDispatches.length === 0) { + throw new MockNotMatchedError(`Mock dispatch not matched for method '${key.method}' on path '${resolvedPath}'`); + } + matchedMockDispatches = matchedMockDispatches.filter(({ body }) => typeof body !== "undefined" ? matchValue(body, key.body) : true); + if (matchedMockDispatches.length === 0) { + throw new MockNotMatchedError(`Mock dispatch not matched for body '${key.body}' on path '${resolvedPath}'`); + } + matchedMockDispatches = matchedMockDispatches.filter((mockDispatch2) => matchHeaders(mockDispatch2, key.headers)); + if (matchedMockDispatches.length === 0) { + const headers = typeof key.headers === "object" ? JSON.stringify(key.headers) : key.headers; + throw new MockNotMatchedError(`Mock dispatch not matched for headers '${headers}' on path '${resolvedPath}'`); + } + return matchedMockDispatches[0]; + } + function addMockDispatch(mockDispatches, key, data) { + const baseData = { timesInvoked: 0, times: 1, persist: false, consumed: false }; + const replyData = typeof data === "function" ? { callback: data } : { ...data }; + const newMockDispatch = { ...baseData, ...key, pending: true, data: { error: null, ...replyData } }; + mockDispatches.push(newMockDispatch); + return newMockDispatch; + } + function deleteMockDispatch(mockDispatches, key) { + const index = mockDispatches.findIndex((dispatch) => { + if (!dispatch.consumed) { + return false; + } + return matchKey(dispatch, key); + }); + if (index !== -1) { + mockDispatches.splice(index, 1); + } + } + function buildKey(opts) { + const { path: path2, method, body, headers, query } = opts; + return { + path: path2, + method, + body, + headers, + query + }; + } + function generateKeyValues(data) { + const keys = Object.keys(data); + const result = []; + for (let i = 0; i < keys.length; ++i) { + const key = keys[i]; + const value = data[key]; + const name = Buffer.from(`${key}`); + if (Array.isArray(value)) { + for (let j = 0; j < value.length; ++j) { + result.push(name, Buffer.from(`${value[j]}`)); + } + } else { + result.push(name, Buffer.from(`${value}`)); + } + } + return result; + } + function getStatusText(statusCode) { + return STATUS_CODES[statusCode] || "unknown"; + } + async function getResponse(body) { + const buffers = []; + for await (const data of body) { + buffers.push(data); + } + return Buffer.concat(buffers).toString("utf8"); + } + function mockDispatch(opts, handler) { + const key = buildKey(opts); + const mockDispatch2 = getMockDispatch(this[kDispatches], key); + mockDispatch2.timesInvoked++; + if (mockDispatch2.data.callback) { + mockDispatch2.data = { ...mockDispatch2.data, ...mockDispatch2.data.callback(opts) }; + } + const { data: { statusCode, data, headers, trailers, error: error2 }, delay, persist } = mockDispatch2; + const { timesInvoked, times } = mockDispatch2; + mockDispatch2.consumed = !persist && timesInvoked >= times; + mockDispatch2.pending = timesInvoked < times; + if (error2 !== null) { + deleteMockDispatch(this[kDispatches], key); + handler.onError(error2); + return true; + } + if (typeof delay === "number" && delay > 0) { + setTimeout(() => { + handleReply(this[kDispatches]); + }, delay); + } else { + handleReply(this[kDispatches]); + } + function handleReply(mockDispatches, _data = data) { + const optsHeaders = Array.isArray(opts.headers) ? buildHeadersFromArray(opts.headers) : opts.headers; + const body = typeof _data === "function" ? _data({ ...opts, headers: optsHeaders }) : _data; + if (isPromise(body)) { + body.then((newData) => handleReply(mockDispatches, newData)); + return; + } + const responseData = getResponseData(body); + const responseHeaders = generateKeyValues(headers); + const responseTrailers = generateKeyValues(trailers); + handler.onConnect?.((err) => handler.onError(err), null); + handler.onHeaders?.(statusCode, responseHeaders, resume, getStatusText(statusCode)); + handler.onData?.(Buffer.from(responseData)); + handler.onComplete?.(responseTrailers); + deleteMockDispatch(mockDispatches, key); + } + function resume() { + } + return true; + } + function buildMockDispatch() { + const agent = this[kMockAgent]; + const origin = this[kOrigin]; + const originalDispatch = this[kOriginalDispatch]; + return function dispatch(opts, handler) { + if (agent.isMockActive) { + try { + mockDispatch.call(this, opts, handler); + } catch (error2) { + if (error2 instanceof MockNotMatchedError) { + const netConnect = agent[kGetNetConnect](); + if (netConnect === false) { + throw new MockNotMatchedError(`${error2.message}: subsequent request to origin ${origin} was not allowed (net.connect disabled)`); + } + if (checkNetConnect(netConnect, origin)) { + originalDispatch.call(this, opts, handler); + } else { + throw new MockNotMatchedError(`${error2.message}: subsequent request to origin ${origin} was not allowed (net.connect is not enabled for this origin)`); + } + } else { + throw error2; + } + } + } else { + originalDispatch.call(this, opts, handler); + } + }; + } + function checkNetConnect(netConnect, origin) { + const url = new URL(origin); + if (netConnect === true) { + return true; + } else if (Array.isArray(netConnect) && netConnect.some((matcher) => matchValue(matcher, url.host))) { + return true; + } + return false; + } + function buildMockOptions(opts) { + if (opts) { + const { agent, ...mockOptions } = opts; + return mockOptions; + } + } + module.exports = { + getResponseData, + getMockDispatch, + addMockDispatch, + deleteMockDispatch, + buildKey, + generateKeyValues, + matchValue, + getResponse, + getStatusText, + mockDispatch, + buildMockDispatch, + checkNetConnect, + buildMockOptions, + getHeaderByName, + buildHeadersFromArray + }; + } +}); + +// +var require_mock_interceptor = __commonJS({ + ""(exports, module) { + "use strict"; + var { getResponseData, buildKey, addMockDispatch } = require_mock_utils(); + var { + kDispatches, + kDispatchKey, + kDefaultHeaders, + kDefaultTrailers, + kContentLength, + kMockDispatch + } = require_mock_symbols(); + var { InvalidArgumentError } = require_errors(); + var { buildURL } = require_util(); + var MockScope = class { + constructor(mockDispatch) { + this[kMockDispatch] = mockDispatch; + } + /** + * Delay a reply by a set amount in ms. + */ + delay(waitInMs) { + if (typeof waitInMs !== "number" || !Number.isInteger(waitInMs) || waitInMs <= 0) { + throw new InvalidArgumentError("waitInMs must be a valid integer > 0"); + } + this[kMockDispatch].delay = waitInMs; + return this; + } + /** + * For a defined reply, never mark as consumed. + */ + persist() { + this[kMockDispatch].persist = true; + return this; + } + /** + * Allow one to define a reply for a set amount of matching requests. + */ + times(repeatTimes) { + if (typeof repeatTimes !== "number" || !Number.isInteger(repeatTimes) || repeatTimes <= 0) { + throw new InvalidArgumentError("repeatTimes must be a valid integer > 0"); + } + this[kMockDispatch].times = repeatTimes; + return this; + } + }; + var MockInterceptor = class { + constructor(opts, mockDispatches) { + if (typeof opts !== "object") { + throw new InvalidArgumentError("opts must be an object"); + } + if (typeof opts.path === "undefined") { + throw new InvalidArgumentError("opts.path must be defined"); + } + if (typeof opts.method === "undefined") { + opts.method = "GET"; + } + if (typeof opts.path === "string") { + if (opts.query) { + opts.path = buildURL(opts.path, opts.query); + } else { + const parsedURL = new URL(opts.path, "data://"); + opts.path = parsedURL.pathname + parsedURL.search; + } + } + if (typeof opts.method === "string") { + opts.method = opts.method.toUpperCase(); + } + this[kDispatchKey] = buildKey(opts); + this[kDispatches] = mockDispatches; + this[kDefaultHeaders] = {}; + this[kDefaultTrailers] = {}; + this[kContentLength] = false; + } + createMockScopeDispatchData({ statusCode, data, responseOptions }) { + const responseData = getResponseData(data); + const contentLength = this[kContentLength] ? { "content-length": responseData.length } : {}; + const headers = { ...this[kDefaultHeaders], ...contentLength, ...responseOptions.headers }; + const trailers = { ...this[kDefaultTrailers], ...responseOptions.trailers }; + return { statusCode, data, headers, trailers }; + } + validateReplyParameters(replyParameters) { + if (typeof replyParameters.statusCode === "undefined") { + throw new InvalidArgumentError("statusCode must be defined"); + } + if (typeof replyParameters.responseOptions !== "object" || replyParameters.responseOptions === null) { + throw new InvalidArgumentError("responseOptions must be an object"); + } + } + /** + * Mock an undici request with a defined reply. + */ + reply(replyOptionsCallbackOrStatusCode) { + if (typeof replyOptionsCallbackOrStatusCode === "function") { + const wrappedDefaultsCallback = (opts) => { + const resolvedData = replyOptionsCallbackOrStatusCode(opts); + if (typeof resolvedData !== "object" || resolvedData === null) { + throw new InvalidArgumentError("reply options callback must return an object"); + } + const replyParameters2 = { data: "", responseOptions: {}, ...resolvedData }; + this.validateReplyParameters(replyParameters2); + return { + ...this.createMockScopeDispatchData(replyParameters2) + }; + }; + const newMockDispatch2 = addMockDispatch(this[kDispatches], this[kDispatchKey], wrappedDefaultsCallback); + return new MockScope(newMockDispatch2); + } + const replyParameters = { + statusCode: replyOptionsCallbackOrStatusCode, + data: arguments[1] === void 0 ? "" : arguments[1], + responseOptions: arguments[2] === void 0 ? {} : arguments[2] + }; + this.validateReplyParameters(replyParameters); + const dispatchData = this.createMockScopeDispatchData(replyParameters); + const newMockDispatch = addMockDispatch(this[kDispatches], this[kDispatchKey], dispatchData); + return new MockScope(newMockDispatch); + } + /** + * Mock an undici request with a defined error. + */ + replyWithError(error2) { + if (typeof error2 === "undefined") { + throw new InvalidArgumentError("error must be defined"); + } + const newMockDispatch = addMockDispatch(this[kDispatches], this[kDispatchKey], { error: error2 }); + return new MockScope(newMockDispatch); + } + /** + * Set default reply headers on the interceptor for subsequent replies + */ + defaultReplyHeaders(headers) { + if (typeof headers === "undefined") { + throw new InvalidArgumentError("headers must be defined"); + } + this[kDefaultHeaders] = headers; + return this; + } + /** + * Set default reply trailers on the interceptor for subsequent replies + */ + defaultReplyTrailers(trailers) { + if (typeof trailers === "undefined") { + throw new InvalidArgumentError("trailers must be defined"); + } + this[kDefaultTrailers] = trailers; + return this; + } + /** + * Set reply content length header for replies on the interceptor + */ + replyContentLength() { + this[kContentLength] = true; + return this; + } + }; + module.exports.MockInterceptor = MockInterceptor; + module.exports.MockScope = MockScope; + } +}); + +// +var require_mock_client = __commonJS({ + ""(exports, module) { + "use strict"; + var { promisify } = __require("node:util"); + var Client = require_client(); + var { buildMockDispatch } = require_mock_utils(); + var { + kDispatches, + kMockAgent, + kClose, + kOriginalClose, + kOrigin, + kOriginalDispatch, + kConnected + } = require_mock_symbols(); + var { MockInterceptor } = require_mock_interceptor(); + var Symbols = require_symbols(); + var { InvalidArgumentError } = require_errors(); + var MockClient = class extends Client { + constructor(origin, opts) { + super(origin, opts); + if (!opts || !opts.agent || typeof opts.agent.dispatch !== "function") { + throw new InvalidArgumentError("Argument opts.agent must implement Agent"); + } + this[kMockAgent] = opts.agent; + this[kOrigin] = origin; + this[kDispatches] = []; + this[kConnected] = 1; + this[kOriginalDispatch] = this.dispatch; + this[kOriginalClose] = this.close.bind(this); + this.dispatch = buildMockDispatch.call(this); + this.close = this[kClose]; + } + get [Symbols.kConnected]() { + return this[kConnected]; + } + /** + * Sets up the base interceptor for mocking replies from undici. + */ + intercept(opts) { + return new MockInterceptor(opts, this[kDispatches]); + } + async [kClose]() { + await promisify(this[kOriginalClose])(); + this[kConnected] = 0; + this[kMockAgent][Symbols.kClients].delete(this[kOrigin]); + } + }; + module.exports = MockClient; + } +}); + +// +var require_mock_pool = __commonJS({ + ""(exports, module) { + "use strict"; + var { promisify } = __require("node:util"); + var Pool = require_pool(); + var { buildMockDispatch } = require_mock_utils(); + var { + kDispatches, + kMockAgent, + kClose, + kOriginalClose, + kOrigin, + kOriginalDispatch, + kConnected + } = require_mock_symbols(); + var { MockInterceptor } = require_mock_interceptor(); + var Symbols = require_symbols(); + var { InvalidArgumentError } = require_errors(); + var MockPool = class extends Pool { + constructor(origin, opts) { + super(origin, opts); + if (!opts || !opts.agent || typeof opts.agent.dispatch !== "function") { + throw new InvalidArgumentError("Argument opts.agent must implement Agent"); + } + this[kMockAgent] = opts.agent; + this[kOrigin] = origin; + this[kDispatches] = []; + this[kConnected] = 1; + this[kOriginalDispatch] = this.dispatch; + this[kOriginalClose] = this.close.bind(this); + this.dispatch = buildMockDispatch.call(this); + this.close = this[kClose]; + } + get [Symbols.kConnected]() { + return this[kConnected]; + } + /** + * Sets up the base interceptor for mocking replies from undici. + */ + intercept(opts) { + return new MockInterceptor(opts, this[kDispatches]); + } + async [kClose]() { + await promisify(this[kOriginalClose])(); + this[kConnected] = 0; + this[kMockAgent][Symbols.kClients].delete(this[kOrigin]); + } + }; + module.exports = MockPool; + } +}); + +// +var require_pluralizer = __commonJS({ + ""(exports, module) { + "use strict"; + var singulars = { + pronoun: "it", + is: "is", + was: "was", + this: "this" + }; + var plurals = { + pronoun: "they", + is: "are", + was: "were", + this: "these" + }; + module.exports = class Pluralizer { + constructor(singular, plural) { + this.singular = singular; + this.plural = plural; + } + pluralize(count) { + const one = count === 1; + const keys = one ? singulars : plurals; + const noun = one ? this.singular : this.plural; + return { ...keys, count, noun }; + } + }; + } +}); + +// +var require_pending_interceptors_formatter = __commonJS({ + ""(exports, module) { + "use strict"; + var { Transform } = __require("node:stream"); + var { Console } = __require("node:console"); + var PERSISTENT = process.versions.icu ? "\u2705" : "Y "; + var NOT_PERSISTENT = process.versions.icu ? "\u274C" : "N "; + module.exports = class PendingInterceptorsFormatter { + constructor({ disableColors } = {}) { + this.transform = new Transform({ + transform(chunk, _enc, cb) { + cb(null, chunk); + } + }); + this.logger = new Console({ + stdout: this.transform, + inspectOptions: { + colors: !disableColors && !process.env.CI + } + }); + } + format(pendingInterceptors) { + const withPrettyHeaders = pendingInterceptors.map( + ({ method, path: path2, data: { statusCode }, persist, times, timesInvoked, origin }) => ({ + Method: method, + Origin: origin, + Path: path2, + "Status code": statusCode, + Persistent: persist ? PERSISTENT : NOT_PERSISTENT, + Invocations: timesInvoked, + Remaining: persist ? Infinity : times - timesInvoked + }) + ); + this.logger.table(withPrettyHeaders); + return this.transform.read().toString(); + } + }; + } +}); + +// +var require_mock_agent = __commonJS({ + ""(exports, module) { + "use strict"; + var { kClients } = require_symbols(); + var Agent = require_agent(); + var { + kAgent, + kMockAgentSet, + kMockAgentGet, + kDispatches, + kIsMockActive, + kNetConnect, + kGetNetConnect, + kOptions, + kFactory + } = require_mock_symbols(); + var MockClient = require_mock_client(); + var MockPool = require_mock_pool(); + var { matchValue, buildMockOptions } = require_mock_utils(); + var { InvalidArgumentError, UndiciError } = require_errors(); + var Dispatcher = require_dispatcher(); + var Pluralizer = require_pluralizer(); + var PendingInterceptorsFormatter = require_pending_interceptors_formatter(); + var MockAgent = class extends Dispatcher { + constructor(opts) { + super(opts); + this[kNetConnect] = true; + this[kIsMockActive] = true; + if (opts?.agent && typeof opts.agent.dispatch !== "function") { + throw new InvalidArgumentError("Argument opts.agent must implement Agent"); + } + const agent = opts?.agent ? opts.agent : new Agent(opts); + this[kAgent] = agent; + this[kClients] = agent[kClients]; + this[kOptions] = buildMockOptions(opts); + } + get(origin) { + let dispatcher = this[kMockAgentGet](origin); + if (!dispatcher) { + dispatcher = this[kFactory](origin); + this[kMockAgentSet](origin, dispatcher); + } + return dispatcher; + } + dispatch(opts, handler) { + this.get(opts.origin); + return this[kAgent].dispatch(opts, handler); + } + async close() { + await this[kAgent].close(); + this[kClients].clear(); + } + deactivate() { + this[kIsMockActive] = false; + } + activate() { + this[kIsMockActive] = true; + } + enableNetConnect(matcher) { + if (typeof matcher === "string" || typeof matcher === "function" || matcher instanceof RegExp) { + if (Array.isArray(this[kNetConnect])) { + this[kNetConnect].push(matcher); + } else { + this[kNetConnect] = [matcher]; + } + } else if (typeof matcher === "undefined") { + this[kNetConnect] = true; + } else { + throw new InvalidArgumentError("Unsupported matcher. Must be one of String|Function|RegExp."); + } + } + disableNetConnect() { + this[kNetConnect] = false; + } + // This is required to bypass issues caused by using global symbols - see: + // https://github.com/nodejs/undici/issues/1447 + get isMockActive() { + return this[kIsMockActive]; + } + [kMockAgentSet](origin, dispatcher) { + this[kClients].set(origin, dispatcher); + } + [kFactory](origin) { + const mockOptions = Object.assign({ agent: this }, this[kOptions]); + return this[kOptions] && this[kOptions].connections === 1 ? new MockClient(origin, mockOptions) : new MockPool(origin, mockOptions); + } + [kMockAgentGet](origin) { + const client = this[kClients].get(origin); + if (client) { + return client; + } + if (typeof origin !== "string") { + const dispatcher = this[kFactory]("http://localhost:9999"); + this[kMockAgentSet](origin, dispatcher); + return dispatcher; + } + for (const [keyMatcher, nonExplicitDispatcher] of Array.from(this[kClients])) { + if (nonExplicitDispatcher && typeof keyMatcher !== "string" && matchValue(keyMatcher, origin)) { + const dispatcher = this[kFactory](origin); + this[kMockAgentSet](origin, dispatcher); + dispatcher[kDispatches] = nonExplicitDispatcher[kDispatches]; + return dispatcher; + } + } + } + [kGetNetConnect]() { + return this[kNetConnect]; + } + pendingInterceptors() { + const mockAgentClients = this[kClients]; + return Array.from(mockAgentClients.entries()).flatMap(([origin, scope]) => scope[kDispatches].map((dispatch) => ({ ...dispatch, origin }))).filter(({ pending }) => pending); + } + assertNoPendingInterceptors({ pendingInterceptorsFormatter = new PendingInterceptorsFormatter() } = {}) { + const pending = this.pendingInterceptors(); + if (pending.length === 0) { + return; + } + const pluralizer = new Pluralizer("interceptor", "interceptors").pluralize(pending.length); + throw new UndiciError(` +${pluralizer.count} ${pluralizer.noun} ${pluralizer.is} pending: + +${pendingInterceptorsFormatter.format(pending)} +`.trim()); + } + }; + module.exports = MockAgent; + } +}); + +// +var require_global2 = __commonJS({ + ""(exports, module) { + "use strict"; + var globalDispatcher = Symbol.for("undici.globalDispatcher.1"); + var { InvalidArgumentError } = require_errors(); + var Agent = require_agent(); + if (getGlobalDispatcher() === void 0) { + setGlobalDispatcher(new Agent()); + } + function setGlobalDispatcher(agent) { + if (!agent || typeof agent.dispatch !== "function") { + throw new InvalidArgumentError("Argument agent must implement Agent"); + } + Object.defineProperty(globalThis, globalDispatcher, { + value: agent, + writable: true, + enumerable: false, + configurable: false + }); + } + function getGlobalDispatcher() { + return globalThis[globalDispatcher]; + } + module.exports = { + setGlobalDispatcher, + getGlobalDispatcher + }; + } +}); + +// +var require_decorator_handler = __commonJS({ + ""(exports, module) { + "use strict"; + module.exports = class DecoratorHandler { + #handler; + constructor(handler) { + if (typeof handler !== "object" || handler === null) { + throw new TypeError("handler must be an object"); + } + this.#handler = handler; + } + onConnect(...args) { + return this.#handler.onConnect?.(...args); + } + onError(...args) { + return this.#handler.onError?.(...args); + } + onUpgrade(...args) { + return this.#handler.onUpgrade?.(...args); + } + onResponseStarted(...args) { + return this.#handler.onResponseStarted?.(...args); + } + onHeaders(...args) { + return this.#handler.onHeaders?.(...args); + } + onData(...args) { + return this.#handler.onData?.(...args); + } + onComplete(...args) { + return this.#handler.onComplete?.(...args); + } + onBodySent(...args) { + return this.#handler.onBodySent?.(...args); + } + }; + } +}); + +// +var require_redirect = __commonJS({ + ""(exports, module) { + "use strict"; + var RedirectHandler = require_redirect_handler(); + module.exports = (opts) => { + const globalMaxRedirections = opts?.maxRedirections; + return (dispatch) => { + return function redirectInterceptor(opts2, handler) { + const { maxRedirections = globalMaxRedirections, ...baseOpts } = opts2; + if (!maxRedirections) { + return dispatch(opts2, handler); + } + const redirectHandler = new RedirectHandler( + dispatch, + maxRedirections, + opts2, + handler + ); + return dispatch(baseOpts, redirectHandler); + }; + }; + }; + } +}); + +// +var require_retry = __commonJS({ + ""(exports, module) { + "use strict"; + var RetryHandler = require_retry_handler(); + module.exports = (globalOpts) => { + return (dispatch) => { + return function retryInterceptor(opts, handler) { + return dispatch( + opts, + new RetryHandler( + { ...opts, retryOptions: { ...globalOpts, ...opts.retryOptions } }, + { + handler, + dispatch + } + ) + ); + }; + }; + }; + } +}); + +// +var require_dump = __commonJS({ + ""(exports, module) { + "use strict"; + var util = require_util(); + var { InvalidArgumentError, RequestAbortedError } = require_errors(); + var DecoratorHandler = require_decorator_handler(); + var DumpHandler = class extends DecoratorHandler { + #maxSize = 1024 * 1024; + #abort = null; + #dumped = false; + #aborted = false; + #size = 0; + #reason = null; + #handler = null; + constructor({ maxSize }, handler) { + super(handler); + if (maxSize != null && (!Number.isFinite(maxSize) || maxSize < 1)) { + throw new InvalidArgumentError("maxSize must be a number greater than 0"); + } + this.#maxSize = maxSize ?? this.#maxSize; + this.#handler = handler; + } + onConnect(abort) { + this.#abort = abort; + this.#handler.onConnect(this.#customAbort.bind(this)); + } + #customAbort(reason) { + this.#aborted = true; + this.#reason = reason; + } + // TODO: will require adjustment after new hooks are out + onHeaders(statusCode, rawHeaders, resume, statusMessage) { + const headers = util.parseHeaders(rawHeaders); + const contentLength = headers["content-length"]; + if (contentLength != null && contentLength > this.#maxSize) { + throw new RequestAbortedError( + `Response size (${contentLength}) larger than maxSize (${this.#maxSize})` + ); + } + if (this.#aborted) { + return true; + } + return this.#handler.onHeaders( + statusCode, + rawHeaders, + resume, + statusMessage + ); + } + onError(err) { + if (this.#dumped) { + return; + } + err = this.#reason ?? err; + this.#handler.onError(err); + } + onData(chunk) { + this.#size = this.#size + chunk.length; + if (this.#size >= this.#maxSize) { + this.#dumped = true; + if (this.#aborted) { + this.#handler.onError(this.#reason); + } else { + this.#handler.onComplete([]); + } + } + return true; + } + onComplete(trailers) { + if (this.#dumped) { + return; + } + if (this.#aborted) { + this.#handler.onError(this.reason); + return; + } + this.#handler.onComplete(trailers); + } + }; + function createDumpInterceptor({ maxSize: defaultMaxSize } = { + maxSize: 1024 * 1024 + }) { + return (dispatch) => { + return function Intercept(opts, handler) { + const { dumpMaxSize = defaultMaxSize } = opts; + const dumpHandler = new DumpHandler( + { maxSize: dumpMaxSize }, + handler + ); + return dispatch(opts, dumpHandler); + }; + }; + } + module.exports = createDumpInterceptor; + } +}); + +// +var require_dns = __commonJS({ + ""(exports, module) { + "use strict"; + var { isIP } = __require("node:net"); + var { lookup } = __require("node:dns"); + var DecoratorHandler = require_decorator_handler(); + var { InvalidArgumentError, InformationalError } = require_errors(); + var maxInt = Math.pow(2, 31) - 1; + var DNSInstance = class { + #maxTTL = 0; + #maxItems = 0; + #records = /* @__PURE__ */ new Map(); + dualStack = true; + affinity = null; + lookup = null; + pick = null; + constructor(opts) { + this.#maxTTL = opts.maxTTL; + this.#maxItems = opts.maxItems; + this.dualStack = opts.dualStack; + this.affinity = opts.affinity; + this.lookup = opts.lookup ?? this.#defaultLookup; + this.pick = opts.pick ?? this.#defaultPick; + } + get full() { + return this.#records.size === this.#maxItems; + } + runLookup(origin, opts, cb) { + const ips = this.#records.get(origin.hostname); + if (ips == null && this.full) { + cb(null, origin.origin); + return; + } + const newOpts = { + affinity: this.affinity, + dualStack: this.dualStack, + lookup: this.lookup, + pick: this.pick, + ...opts.dns, + maxTTL: this.#maxTTL, + maxItems: this.#maxItems + }; + if (ips == null) { + this.lookup(origin, newOpts, (err, addresses) => { + if (err || addresses == null || addresses.length === 0) { + cb(err ?? new InformationalError("No DNS entries found")); + return; + } + this.setRecords(origin, addresses); + const records = this.#records.get(origin.hostname); + const ip = this.pick( + origin, + records, + newOpts.affinity + ); + let port; + if (typeof ip.port === "number") { + port = `:${ip.port}`; + } else if (origin.port !== "") { + port = `:${origin.port}`; + } else { + port = ""; + } + cb( + null, + `${origin.protocol}//${ip.family === 6 ? `[${ip.address}]` : ip.address}${port}` + ); + }); + } else { + const ip = this.pick( + origin, + ips, + newOpts.affinity + ); + if (ip == null) { + this.#records.delete(origin.hostname); + this.runLookup(origin, opts, cb); + return; + } + let port; + if (typeof ip.port === "number") { + port = `:${ip.port}`; + } else if (origin.port !== "") { + port = `:${origin.port}`; + } else { + port = ""; + } + cb( + null, + `${origin.protocol}//${ip.family === 6 ? `[${ip.address}]` : ip.address}${port}` + ); + } + } + #defaultLookup(origin, opts, cb) { + lookup( + origin.hostname, + { + all: true, + family: this.dualStack === false ? this.affinity : 0, + order: "ipv4first" + }, + (err, addresses) => { + if (err) { + return cb(err); + } + const results = /* @__PURE__ */ new Map(); + for (const addr of addresses) { + results.set(`${addr.address}:${addr.family}`, addr); + } + cb(null, results.values()); + } + ); + } + #defaultPick(origin, hostnameRecords, affinity) { + let ip = null; + const { records, offset } = hostnameRecords; + let family; + if (this.dualStack) { + if (affinity == null) { + if (offset == null || offset === maxInt) { + hostnameRecords.offset = 0; + affinity = 4; + } else { + hostnameRecords.offset++; + affinity = (hostnameRecords.offset & 1) === 1 ? 6 : 4; + } + } + if (records[affinity] != null && records[affinity].ips.length > 0) { + family = records[affinity]; + } else { + family = records[affinity === 4 ? 6 : 4]; + } + } else { + family = records[affinity]; + } + if (family == null || family.ips.length === 0) { + return ip; + } + if (family.offset == null || family.offset === maxInt) { + family.offset = 0; + } else { + family.offset++; + } + const position = family.offset % family.ips.length; + ip = family.ips[position] ?? null; + if (ip == null) { + return ip; + } + if (Date.now() - ip.timestamp > ip.ttl) { + family.ips.splice(position, 1); + return this.pick(origin, hostnameRecords, affinity); + } + return ip; + } + setRecords(origin, addresses) { + const timestamp = Date.now(); + const records = { records: { 4: null, 6: null } }; + for (const record of addresses) { + record.timestamp = timestamp; + if (typeof record.ttl === "number") { + record.ttl = Math.min(record.ttl, this.#maxTTL); + } else { + record.ttl = this.#maxTTL; + } + const familyRecords = records.records[record.family] ?? { ips: [] }; + familyRecords.ips.push(record); + records.records[record.family] = familyRecords; + } + this.#records.set(origin.hostname, records); + } + getHandler(meta, opts) { + return new DNSDispatchHandler(this, meta, opts); + } + }; + var DNSDispatchHandler = class extends DecoratorHandler { + #state = null; + #opts = null; + #dispatch = null; + #handler = null; + #origin = null; + constructor(state, { origin, handler, dispatch }, opts) { + super(handler); + this.#origin = origin; + this.#handler = handler; + this.#opts = { ...opts }; + this.#state = state; + this.#dispatch = dispatch; + } + onError(err) { + switch (err.code) { + case "ETIMEDOUT": + case "ECONNREFUSED": { + if (this.#state.dualStack) { + this.#state.runLookup(this.#origin, this.#opts, (err2, newOrigin) => { + if (err2) { + return this.#handler.onError(err2); + } + const dispatchOpts = { + ...this.#opts, + origin: newOrigin + }; + this.#dispatch(dispatchOpts, this); + }); + return; + } + this.#handler.onError(err); + return; + } + case "ENOTFOUND": + this.#state.deleteRecord(this.#origin); + default: + this.#handler.onError(err); + break; + } + } + }; + module.exports = (interceptorOpts) => { + if (interceptorOpts?.maxTTL != null && (typeof interceptorOpts?.maxTTL !== "number" || interceptorOpts?.maxTTL < 0)) { + throw new InvalidArgumentError("Invalid maxTTL. Must be a positive number"); + } + if (interceptorOpts?.maxItems != null && (typeof interceptorOpts?.maxItems !== "number" || interceptorOpts?.maxItems < 1)) { + throw new InvalidArgumentError( + "Invalid maxItems. Must be a positive number and greater than zero" + ); + } + if (interceptorOpts?.affinity != null && interceptorOpts?.affinity !== 4 && interceptorOpts?.affinity !== 6) { + throw new InvalidArgumentError("Invalid affinity. Must be either 4 or 6"); + } + if (interceptorOpts?.dualStack != null && typeof interceptorOpts?.dualStack !== "boolean") { + throw new InvalidArgumentError("Invalid dualStack. Must be a boolean"); + } + if (interceptorOpts?.lookup != null && typeof interceptorOpts?.lookup !== "function") { + throw new InvalidArgumentError("Invalid lookup. Must be a function"); + } + if (interceptorOpts?.pick != null && typeof interceptorOpts?.pick !== "function") { + throw new InvalidArgumentError("Invalid pick. Must be a function"); + } + const dualStack = interceptorOpts?.dualStack ?? true; + let affinity; + if (dualStack) { + affinity = interceptorOpts?.affinity ?? null; + } else { + affinity = interceptorOpts?.affinity ?? 4; + } + const opts = { + maxTTL: interceptorOpts?.maxTTL ?? 1e4, + // Expressed in ms + lookup: interceptorOpts?.lookup ?? null, + pick: interceptorOpts?.pick ?? null, + dualStack, + affinity, + maxItems: interceptorOpts?.maxItems ?? Infinity + }; + const instance = new DNSInstance(opts); + return (dispatch) => { + return function dnsInterceptor(origDispatchOpts, handler) { + const origin = origDispatchOpts.origin.constructor === URL ? origDispatchOpts.origin : new URL(origDispatchOpts.origin); + if (isIP(origin.hostname) !== 0) { + return dispatch(origDispatchOpts, handler); + } + instance.runLookup(origin, origDispatchOpts, (err, newOrigin) => { + if (err) { + return handler.onError(err); + } + let dispatchOpts = null; + dispatchOpts = { + ...origDispatchOpts, + servername: origin.hostname, + // For SNI on TLS + origin: newOrigin, + headers: { + host: origin.hostname, + ...origDispatchOpts.headers + } + }; + dispatch( + dispatchOpts, + instance.getHandler({ origin, dispatch, handler }, origDispatchOpts) + ); + }); + return true; + }; + }; + }; + } +}); + +// +var require_headers = __commonJS({ + ""(exports, module) { + "use strict"; + var { kConstruct } = require_symbols(); + var { kEnumerableProperty } = require_util(); + var { + iteratorMixin, + isValidHeaderName, + isValidHeaderValue + } = require_util2(); + var { webidl } = require_webidl(); + var assert = __require("node:assert"); + var util = __require("node:util"); + var kHeadersMap = Symbol("headers map"); + var kHeadersSortedMap = Symbol("headers map sorted"); + function isHTTPWhiteSpaceCharCode(code) { + return code === 10 || code === 13 || code === 9 || code === 32; + } + function headerValueNormalize(potentialValue) { + let i = 0; + let j = potentialValue.length; + while (j > i && isHTTPWhiteSpaceCharCode(potentialValue.charCodeAt(j - 1))) + --j; + while (j > i && isHTTPWhiteSpaceCharCode(potentialValue.charCodeAt(i))) + ++i; + return i === 0 && j === potentialValue.length ? potentialValue : potentialValue.substring(i, j); + } + function fill(headers, object) { + if (Array.isArray(object)) { + for (let i = 0; i < object.length; ++i) { + const header = object[i]; + if (header.length !== 2) { + throw webidl.errors.exception({ + header: "Headers constructor", + message: `expected name/value pair to be length 2, found ${header.length}.` + }); + } + appendHeader(headers, header[0], header[1]); + } + } else if (typeof object === "object" && object !== null) { + const keys = Object.keys(object); + for (let i = 0; i < keys.length; ++i) { + appendHeader(headers, keys[i], object[keys[i]]); + } + } else { + throw webidl.errors.conversionFailed({ + prefix: "Headers constructor", + argument: "Argument 1", + types: ["sequence>", "record"] + }); + } + } + function appendHeader(headers, name, value) { + value = headerValueNormalize(value); + if (!isValidHeaderName(name)) { + throw webidl.errors.invalidArgument({ + prefix: "Headers.append", + value: name, + type: "header name" + }); + } else if (!isValidHeaderValue(value)) { + throw webidl.errors.invalidArgument({ + prefix: "Headers.append", + value, + type: "header value" + }); + } + if (getHeadersGuard(headers) === "immutable") { + throw new TypeError("immutable"); + } + return getHeadersList(headers).append(name, value, false); + } + function compareHeaderName(a, b) { + return a[0] < b[0] ? -1 : 1; + } + var HeadersList = class _HeadersList { + /** @type {[string, string][]|null} */ + cookies = null; + constructor(init) { + if (init instanceof _HeadersList) { + this[kHeadersMap] = new Map(init[kHeadersMap]); + this[kHeadersSortedMap] = init[kHeadersSortedMap]; + this.cookies = init.cookies === null ? null : [...init.cookies]; + } else { + this[kHeadersMap] = new Map(init); + this[kHeadersSortedMap] = null; + } + } + /** + * @see https://fetch.spec.whatwg.org/#header-list-contains + * @param {string} name + * @param {boolean} isLowerCase + */ + contains(name, isLowerCase) { + return this[kHeadersMap].has(isLowerCase ? name : name.toLowerCase()); + } + clear() { + this[kHeadersMap].clear(); + this[kHeadersSortedMap] = null; + this.cookies = null; + } + /** + * @see https://fetch.spec.whatwg.org/#concept-header-list-append + * @param {string} name + * @param {string} value + * @param {boolean} isLowerCase + */ + append(name, value, isLowerCase) { + this[kHeadersSortedMap] = null; + const lowercaseName = isLowerCase ? name : name.toLowerCase(); + const exists2 = this[kHeadersMap].get(lowercaseName); + if (exists2) { + const delimiter = lowercaseName === "cookie" ? "; " : ", "; + this[kHeadersMap].set(lowercaseName, { + name: exists2.name, + value: `${exists2.value}${delimiter}${value}` + }); + } else { + this[kHeadersMap].set(lowercaseName, { name, value }); + } + if (lowercaseName === "set-cookie") { + (this.cookies ??= []).push(value); + } + } + /** + * @see https://fetch.spec.whatwg.org/#concept-header-list-set + * @param {string} name + * @param {string} value + * @param {boolean} isLowerCase + */ + set(name, value, isLowerCase) { + this[kHeadersSortedMap] = null; + const lowercaseName = isLowerCase ? name : name.toLowerCase(); + if (lowercaseName === "set-cookie") { + this.cookies = [value]; + } + this[kHeadersMap].set(lowercaseName, { name, value }); + } + /** + * @see https://fetch.spec.whatwg.org/#concept-header-list-delete + * @param {string} name + * @param {boolean} isLowerCase + */ + delete(name, isLowerCase) { + this[kHeadersSortedMap] = null; + if (!isLowerCase) + name = name.toLowerCase(); + if (name === "set-cookie") { + this.cookies = null; + } + this[kHeadersMap].delete(name); + } + /** + * @see https://fetch.spec.whatwg.org/#concept-header-list-get + * @param {string} name + * @param {boolean} isLowerCase + * @returns {string | null} + */ + get(name, isLowerCase) { + return this[kHeadersMap].get(isLowerCase ? name : name.toLowerCase())?.value ?? null; + } + *[Symbol.iterator]() { + for (const { 0: name, 1: { value } } of this[kHeadersMap]) { + yield [name, value]; + } + } + get entries() { + const headers = {}; + if (this[kHeadersMap].size !== 0) { + for (const { name, value } of this[kHeadersMap].values()) { + headers[name] = value; + } + } + return headers; + } + rawValues() { + return this[kHeadersMap].values(); + } + get entriesList() { + const headers = []; + if (this[kHeadersMap].size !== 0) { + for (const { 0: lowerName, 1: { name, value } } of this[kHeadersMap]) { + if (lowerName === "set-cookie") { + for (const cookie of this.cookies) { + headers.push([name, cookie]); + } + } else { + headers.push([name, value]); + } + } + } + return headers; + } + // https://fetch.spec.whatwg.org/#convert-header-names-to-a-sorted-lowercase-set + toSortedArray() { + const size = this[kHeadersMap].size; + const array = new Array(size); + if (size <= 32) { + if (size === 0) { + return array; + } + const iterator = this[kHeadersMap][Symbol.iterator](); + const firstValue = iterator.next().value; + array[0] = [firstValue[0], firstValue[1].value]; + assert(firstValue[1].value !== null); + for (let i = 1, j = 0, right = 0, left = 0, pivot = 0, x, value; i < size; ++i) { + value = iterator.next().value; + x = array[i] = [value[0], value[1].value]; + assert(x[1] !== null); + left = 0; + right = i; + while (left < right) { + pivot = left + (right - left >> 1); + if (array[pivot][0] <= x[0]) { + left = pivot + 1; + } else { + right = pivot; + } + } + if (i !== pivot) { + j = i; + while (j > left) { + array[j] = array[--j]; + } + array[left] = x; + } + } + if (!iterator.next().done) { + throw new TypeError("Unreachable"); + } + return array; + } else { + let i = 0; + for (const { 0: name, 1: { value } } of this[kHeadersMap]) { + array[i++] = [name, value]; + assert(value !== null); + } + return array.sort(compareHeaderName); + } + } + }; + var Headers2 = class _Headers { + #guard; + #headersList; + constructor(init = void 0) { + webidl.util.markAsUncloneable(this); + if (init === kConstruct) { + return; + } + this.#headersList = new HeadersList(); + this.#guard = "none"; + if (init !== void 0) { + init = webidl.converters.HeadersInit(init, "Headers contructor", "init"); + fill(this, init); + } + } + // https://fetch.spec.whatwg.org/#dom-headers-append + append(name, value) { + webidl.brandCheck(this, _Headers); + webidl.argumentLengthCheck(arguments, 2, "Headers.append"); + const prefix = "Headers.append"; + name = webidl.converters.ByteString(name, prefix, "name"); + value = webidl.converters.ByteString(value, prefix, "value"); + return appendHeader(this, name, value); + } + // https://fetch.spec.whatwg.org/#dom-headers-delete + delete(name) { + webidl.brandCheck(this, _Headers); + webidl.argumentLengthCheck(arguments, 1, "Headers.delete"); + const prefix = "Headers.delete"; + name = webidl.converters.ByteString(name, prefix, "name"); + if (!isValidHeaderName(name)) { + throw webidl.errors.invalidArgument({ + prefix: "Headers.delete", + value: name, + type: "header name" + }); + } + if (this.#guard === "immutable") { + throw new TypeError("immutable"); + } + if (!this.#headersList.contains(name, false)) { + return; + } + this.#headersList.delete(name, false); + } + // https://fetch.spec.whatwg.org/#dom-headers-get + get(name) { + webidl.brandCheck(this, _Headers); + webidl.argumentLengthCheck(arguments, 1, "Headers.get"); + const prefix = "Headers.get"; + name = webidl.converters.ByteString(name, prefix, "name"); + if (!isValidHeaderName(name)) { + throw webidl.errors.invalidArgument({ + prefix, + value: name, + type: "header name" + }); + } + return this.#headersList.get(name, false); + } + // https://fetch.spec.whatwg.org/#dom-headers-has + has(name) { + webidl.brandCheck(this, _Headers); + webidl.argumentLengthCheck(arguments, 1, "Headers.has"); + const prefix = "Headers.has"; + name = webidl.converters.ByteString(name, prefix, "name"); + if (!isValidHeaderName(name)) { + throw webidl.errors.invalidArgument({ + prefix, + value: name, + type: "header name" + }); + } + return this.#headersList.contains(name, false); + } + // https://fetch.spec.whatwg.org/#dom-headers-set + set(name, value) { + webidl.brandCheck(this, _Headers); + webidl.argumentLengthCheck(arguments, 2, "Headers.set"); + const prefix = "Headers.set"; + name = webidl.converters.ByteString(name, prefix, "name"); + value = webidl.converters.ByteString(value, prefix, "value"); + value = headerValueNormalize(value); + if (!isValidHeaderName(name)) { + throw webidl.errors.invalidArgument({ + prefix, + value: name, + type: "header name" + }); + } else if (!isValidHeaderValue(value)) { + throw webidl.errors.invalidArgument({ + prefix, + value, + type: "header value" + }); + } + if (this.#guard === "immutable") { + throw new TypeError("immutable"); + } + this.#headersList.set(name, value, false); + } + // https://fetch.spec.whatwg.org/#dom-headers-getsetcookie + getSetCookie() { + webidl.brandCheck(this, _Headers); + const list = this.#headersList.cookies; + if (list) { + return [...list]; + } + return []; + } + // https://fetch.spec.whatwg.org/#concept-header-list-sort-and-combine + get [kHeadersSortedMap]() { + if (this.#headersList[kHeadersSortedMap]) { + return this.#headersList[kHeadersSortedMap]; + } + const headers = []; + const names = this.#headersList.toSortedArray(); + const cookies = this.#headersList.cookies; + if (cookies === null || cookies.length === 1) { + return this.#headersList[kHeadersSortedMap] = names; + } + for (let i = 0; i < names.length; ++i) { + const { 0: name, 1: value } = names[i]; + if (name === "set-cookie") { + for (let j = 0; j < cookies.length; ++j) { + headers.push([name, cookies[j]]); + } + } else { + headers.push([name, value]); + } + } + return this.#headersList[kHeadersSortedMap] = headers; + } + [util.inspect.custom](depth, options) { + options.depth ??= depth; + return `Headers ${util.formatWithOptions(options, this.#headersList.entries)}`; + } + static getHeadersGuard(o) { + return o.#guard; + } + static setHeadersGuard(o, guard) { + o.#guard = guard; + } + static getHeadersList(o) { + return o.#headersList; + } + static setHeadersList(o, list) { + o.#headersList = list; + } + }; + var { getHeadersGuard, setHeadersGuard, getHeadersList, setHeadersList } = Headers2; + Reflect.deleteProperty(Headers2, "getHeadersGuard"); + Reflect.deleteProperty(Headers2, "setHeadersGuard"); + Reflect.deleteProperty(Headers2, "getHeadersList"); + Reflect.deleteProperty(Headers2, "setHeadersList"); + iteratorMixin("Headers", Headers2, kHeadersSortedMap, 0, 1); + Object.defineProperties(Headers2.prototype, { + append: kEnumerableProperty, + delete: kEnumerableProperty, + get: kEnumerableProperty, + has: kEnumerableProperty, + set: kEnumerableProperty, + getSetCookie: kEnumerableProperty, + [Symbol.toStringTag]: { + value: "Headers", + configurable: true + }, + [util.inspect.custom]: { + enumerable: false + } + }); + webidl.converters.HeadersInit = function(V, prefix, argument) { + if (webidl.util.Type(V) === "Object") { + const iterator = Reflect.get(V, Symbol.iterator); + if (!util.types.isProxy(V) && iterator === Headers2.prototype.entries) { + try { + return getHeadersList(V).entriesList; + } catch { + } + } + if (typeof iterator === "function") { + return webidl.converters["sequence>"](V, prefix, argument, iterator.bind(V)); + } + return webidl.converters["record"](V, prefix, argument); + } + throw webidl.errors.conversionFailed({ + prefix: "Headers constructor", + argument: "Argument 1", + types: ["sequence>", "record"] + }); + }; + module.exports = { + fill, + // for test. + compareHeaderName, + Headers: Headers2, + HeadersList, + getHeadersGuard, + setHeadersGuard, + setHeadersList, + getHeadersList + }; + } +}); + +// +var require_response = __commonJS({ + ""(exports, module) { + "use strict"; + var { Headers: Headers2, HeadersList, fill, getHeadersGuard, setHeadersGuard, setHeadersList } = require_headers(); + var { extractBody, cloneBody, mixinBody, hasFinalizationRegistry, streamRegistry, bodyUnusable } = require_body(); + var util = require_util(); + var nodeUtil = __require("node:util"); + var { kEnumerableProperty } = util; + var { + isValidReasonPhrase, + isCancelled, + isAborted, + isBlobLike, + serializeJavascriptValueToJSONString, + isErrorLike, + isomorphicEncode, + environmentSettingsObject: relevantRealm + } = require_util2(); + var { + redirectStatusSet, + nullBodyStatus + } = require_constants3(); + var { kState, kHeaders } = require_symbols2(); + var { webidl } = require_webidl(); + var { FormData } = require_formdata(); + var { URLSerializer } = require_data_url(); + var { kConstruct } = require_symbols(); + var assert = __require("node:assert"); + var { types } = __require("node:util"); + var textEncoder = new TextEncoder("utf-8"); + var Response = class _Response { + // Creates network error Response. + static error() { + const responseObject = fromInnerResponse(makeNetworkError(), "immutable"); + return responseObject; + } + // https://fetch.spec.whatwg.org/#dom-response-json + static json(data, init = {}) { + webidl.argumentLengthCheck(arguments, 1, "Response.json"); + if (init !== null) { + init = webidl.converters.ResponseInit(init); + } + const bytes = textEncoder.encode( + serializeJavascriptValueToJSONString(data) + ); + const body = extractBody(bytes); + const responseObject = fromInnerResponse(makeResponse({}), "response"); + initializeResponse(responseObject, init, { body: body[0], type: "application/json" }); + return responseObject; + } + // Creates a redirect Response that redirects to url with status status. + static redirect(url, status = 302) { + webidl.argumentLengthCheck(arguments, 1, "Response.redirect"); + url = webidl.converters.USVString(url); + status = webidl.converters["unsigned short"](status); + let parsedURL; + try { + parsedURL = new URL(url, relevantRealm.settingsObject.baseUrl); + } catch (err) { + throw new TypeError(`Failed to parse URL from ${url}`, { cause: err }); + } + if (!redirectStatusSet.has(status)) { + throw new RangeError(`Invalid status code ${status}`); + } + const responseObject = fromInnerResponse(makeResponse({}), "immutable"); + responseObject[kState].status = status; + const value = isomorphicEncode(URLSerializer(parsedURL)); + responseObject[kState].headersList.append("location", value, true); + return responseObject; + } + // https://fetch.spec.whatwg.org/#dom-response + constructor(body = null, init = {}) { + webidl.util.markAsUncloneable(this); + if (body === kConstruct) { + return; + } + if (body !== null) { + body = webidl.converters.BodyInit(body); + } + init = webidl.converters.ResponseInit(init); + this[kState] = makeResponse({}); + this[kHeaders] = new Headers2(kConstruct); + setHeadersGuard(this[kHeaders], "response"); + setHeadersList(this[kHeaders], this[kState].headersList); + let bodyWithType = null; + if (body != null) { + const [extractedBody, type] = extractBody(body); + bodyWithType = { body: extractedBody, type }; + } + initializeResponse(this, init, bodyWithType); + } + // Returns response’s type, e.g., "cors". + get type() { + webidl.brandCheck(this, _Response); + return this[kState].type; + } + // Returns response’s URL, if it has one; otherwise the empty string. + get url() { + webidl.brandCheck(this, _Response); + const urlList = this[kState].urlList; + const url = urlList[urlList.length - 1] ?? null; + if (url === null) { + return ""; + } + return URLSerializer(url, true); + } + // Returns whether response was obtained through a redirect. + get redirected() { + webidl.brandCheck(this, _Response); + return this[kState].urlList.length > 1; + } + // Returns response’s status. + get status() { + webidl.brandCheck(this, _Response); + return this[kState].status; + } + // Returns whether response’s status is an ok status. + get ok() { + webidl.brandCheck(this, _Response); + return this[kState].status >= 200 && this[kState].status <= 299; + } + // Returns response’s status message. + get statusText() { + webidl.brandCheck(this, _Response); + return this[kState].statusText; + } + // Returns response’s headers as Headers. + get headers() { + webidl.brandCheck(this, _Response); + return this[kHeaders]; + } + get body() { + webidl.brandCheck(this, _Response); + return this[kState].body ? this[kState].body.stream : null; + } + get bodyUsed() { + webidl.brandCheck(this, _Response); + return !!this[kState].body && util.isDisturbed(this[kState].body.stream); + } + // Returns a clone of response. + clone() { + webidl.brandCheck(this, _Response); + if (bodyUnusable(this)) { + throw webidl.errors.exception({ + header: "Response.clone", + message: "Body has already been consumed." + }); + } + const clonedResponse = cloneResponse(this[kState]); + if (hasFinalizationRegistry && this[kState].body?.stream) { + streamRegistry.register(this, new WeakRef(this[kState].body.stream)); + } + return fromInnerResponse(clonedResponse, getHeadersGuard(this[kHeaders])); + } + [nodeUtil.inspect.custom](depth, options) { + if (options.depth === null) { + options.depth = 2; + } + options.colors ??= true; + const properties = { + status: this.status, + statusText: this.statusText, + headers: this.headers, + body: this.body, + bodyUsed: this.bodyUsed, + ok: this.ok, + redirected: this.redirected, + type: this.type, + url: this.url + }; + return `Response ${nodeUtil.formatWithOptions(options, properties)}`; + } + }; + mixinBody(Response); + Object.defineProperties(Response.prototype, { + type: kEnumerableProperty, + url: kEnumerableProperty, + status: kEnumerableProperty, + ok: kEnumerableProperty, + redirected: kEnumerableProperty, + statusText: kEnumerableProperty, + headers: kEnumerableProperty, + clone: kEnumerableProperty, + body: kEnumerableProperty, + bodyUsed: kEnumerableProperty, + [Symbol.toStringTag]: { + value: "Response", + configurable: true + } + }); + Object.defineProperties(Response, { + json: kEnumerableProperty, + redirect: kEnumerableProperty, + error: kEnumerableProperty + }); + function cloneResponse(response) { + if (response.internalResponse) { + return filterResponse( + cloneResponse(response.internalResponse), + response.type + ); + } + const newResponse = makeResponse({ ...response, body: null }); + if (response.body != null) { + newResponse.body = cloneBody(newResponse, response.body); + } + return newResponse; + } + function makeResponse(init) { + return { + aborted: false, + rangeRequested: false, + timingAllowPassed: false, + requestIncludesCredentials: false, + type: "default", + status: 200, + timingInfo: null, + cacheState: "", + statusText: "", + ...init, + headersList: init?.headersList ? new HeadersList(init?.headersList) : new HeadersList(), + urlList: init?.urlList ? [...init.urlList] : [] + }; + } + function makeNetworkError(reason) { + const isError = isErrorLike(reason); + return makeResponse({ + type: "error", + status: 0, + error: isError ? reason : new Error(reason ? String(reason) : reason), + aborted: reason && reason.name === "AbortError" + }); + } + function isNetworkError(response) { + return ( + // A network error is a response whose type is "error", + response.type === "error" && // status is 0 + response.status === 0 + ); + } + function makeFilteredResponse(response, state) { + state = { + internalResponse: response, + ...state + }; + return new Proxy(response, { + get(target, p) { + return p in state ? state[p] : target[p]; + }, + set(target, p, value) { + assert(!(p in state)); + target[p] = value; + return true; + } + }); + } + function filterResponse(response, type) { + if (type === "basic") { + return makeFilteredResponse(response, { + type: "basic", + headersList: response.headersList + }); + } else if (type === "cors") { + return makeFilteredResponse(response, { + type: "cors", + headersList: response.headersList + }); + } else if (type === "opaque") { + return makeFilteredResponse(response, { + type: "opaque", + urlList: Object.freeze([]), + status: 0, + statusText: "", + body: null + }); + } else if (type === "opaqueredirect") { + return makeFilteredResponse(response, { + type: "opaqueredirect", + status: 0, + statusText: "", + headersList: [], + body: null + }); + } else { + assert(false); + } + } + function makeAppropriateNetworkError(fetchParams, err = null) { + assert(isCancelled(fetchParams)); + return isAborted(fetchParams) ? makeNetworkError(Object.assign(new DOMException("The operation was aborted.", "AbortError"), { cause: err })) : makeNetworkError(Object.assign(new DOMException("Request was cancelled."), { cause: err })); + } + function initializeResponse(response, init, body) { + if (init.status !== null && (init.status < 200 || init.status > 599)) { + throw new RangeError('init["status"] must be in the range of 200 to 599, inclusive.'); + } + if ("statusText" in init && init.statusText != null) { + if (!isValidReasonPhrase(String(init.statusText))) { + throw new TypeError("Invalid statusText"); + } + } + if ("status" in init && init.status != null) { + response[kState].status = init.status; + } + if ("statusText" in init && init.statusText != null) { + response[kState].statusText = init.statusText; + } + if ("headers" in init && init.headers != null) { + fill(response[kHeaders], init.headers); + } + if (body) { + if (nullBodyStatus.includes(response.status)) { + throw webidl.errors.exception({ + header: "Response constructor", + message: `Invalid response status code ${response.status}` + }); + } + response[kState].body = body.body; + if (body.type != null && !response[kState].headersList.contains("content-type", true)) { + response[kState].headersList.append("content-type", body.type, true); + } + } + } + function fromInnerResponse(innerResponse, guard) { + const response = new Response(kConstruct); + response[kState] = innerResponse; + response[kHeaders] = new Headers2(kConstruct); + setHeadersList(response[kHeaders], innerResponse.headersList); + setHeadersGuard(response[kHeaders], guard); + if (hasFinalizationRegistry && innerResponse.body?.stream) { + streamRegistry.register(response, new WeakRef(innerResponse.body.stream)); + } + return response; + } + webidl.converters.ReadableStream = webidl.interfaceConverter( + ReadableStream + ); + webidl.converters.FormData = webidl.interfaceConverter( + FormData + ); + webidl.converters.URLSearchParams = webidl.interfaceConverter( + URLSearchParams + ); + webidl.converters.XMLHttpRequestBodyInit = function(V, prefix, name) { + if (typeof V === "string") { + return webidl.converters.USVString(V, prefix, name); + } + if (isBlobLike(V)) { + return webidl.converters.Blob(V, prefix, name, { strict: false }); + } + if (ArrayBuffer.isView(V) || types.isArrayBuffer(V)) { + return webidl.converters.BufferSource(V, prefix, name); + } + if (util.isFormDataLike(V)) { + return webidl.converters.FormData(V, prefix, name, { strict: false }); + } + if (V instanceof URLSearchParams) { + return webidl.converters.URLSearchParams(V, prefix, name); + } + return webidl.converters.DOMString(V, prefix, name); + }; + webidl.converters.BodyInit = function(V, prefix, argument) { + if (V instanceof ReadableStream) { + return webidl.converters.ReadableStream(V, prefix, argument); + } + if (V?.[Symbol.asyncIterator]) { + return V; + } + return webidl.converters.XMLHttpRequestBodyInit(V, prefix, argument); + }; + webidl.converters.ResponseInit = webidl.dictionaryConverter([ + { + key: "status", + converter: webidl.converters["unsigned short"], + defaultValue: () => 200 + }, + { + key: "statusText", + converter: webidl.converters.ByteString, + defaultValue: () => "" + }, + { + key: "headers", + converter: webidl.converters.HeadersInit + } + ]); + module.exports = { + isNetworkError, + makeNetworkError, + makeResponse, + makeAppropriateNetworkError, + filterResponse, + Response, + cloneResponse, + fromInnerResponse + }; + } +}); + +// +var require_dispatcher_weakref = __commonJS({ + ""(exports, module) { + "use strict"; + var { kConnected, kSize } = require_symbols(); + var CompatWeakRef = class { + constructor(value) { + this.value = value; + } + deref() { + return this.value[kConnected] === 0 && this.value[kSize] === 0 ? void 0 : this.value; + } + }; + var CompatFinalizer = class { + constructor(finalizer) { + this.finalizer = finalizer; + } + register(dispatcher, key) { + if (dispatcher.on) { + dispatcher.on("disconnect", () => { + if (dispatcher[kConnected] === 0 && dispatcher[kSize] === 0) { + this.finalizer(key); + } + }); + } + } + unregister(key) { + } + }; + module.exports = function() { + if (process.env.NODE_V8_COVERAGE && process.version.startsWith("v18")) { + process._rawDebug("Using compatibility WeakRef and FinalizationRegistry"); + return { + WeakRef: CompatWeakRef, + FinalizationRegistry: CompatFinalizer + }; + } + return { WeakRef, FinalizationRegistry }; + }; + } +}); + +// +var require_request2 = __commonJS({ + ""(exports, module) { + "use strict"; + var { extractBody, mixinBody, cloneBody, bodyUnusable } = require_body(); + var { Headers: Headers2, fill: fillHeaders, HeadersList, setHeadersGuard, getHeadersGuard, setHeadersList, getHeadersList } = require_headers(); + var { FinalizationRegistry: FinalizationRegistry2 } = require_dispatcher_weakref()(); + var util = require_util(); + var nodeUtil = __require("node:util"); + var { + isValidHTTPToken, + sameOrigin, + environmentSettingsObject + } = require_util2(); + var { + forbiddenMethodsSet, + corsSafeListedMethodsSet, + referrerPolicy, + requestRedirect, + requestMode, + requestCredentials, + requestCache, + requestDuplex + } = require_constants3(); + var { kEnumerableProperty, normalizedMethodRecordsBase, normalizedMethodRecords } = util; + var { kHeaders, kSignal, kState, kDispatcher } = require_symbols2(); + var { webidl } = require_webidl(); + var { URLSerializer } = require_data_url(); + var { kConstruct } = require_symbols(); + var assert = __require("node:assert"); + var { getMaxListeners, setMaxListeners, getEventListeners, defaultMaxListeners } = __require("node:events"); + var kAbortController = Symbol("abortController"); + var requestFinalizer = new FinalizationRegistry2(({ signal, abort }) => { + signal.removeEventListener("abort", abort); + }); + var dependentControllerMap = /* @__PURE__ */ new WeakMap(); + function buildAbort(acRef) { + return abort; + function abort() { + const ac = acRef.deref(); + if (ac !== void 0) { + requestFinalizer.unregister(abort); + this.removeEventListener("abort", abort); + ac.abort(this.reason); + const controllerList = dependentControllerMap.get(ac.signal); + if (controllerList !== void 0) { + if (controllerList.size !== 0) { + for (const ref of controllerList) { + const ctrl = ref.deref(); + if (ctrl !== void 0) { + ctrl.abort(this.reason); + } + } + controllerList.clear(); + } + dependentControllerMap.delete(ac.signal); + } + } + } + } + var patchMethodWarning = false; + var Request = class _Request { + // https://fetch.spec.whatwg.org/#dom-request + constructor(input, init = {}) { + webidl.util.markAsUncloneable(this); + if (input === kConstruct) { + return; + } + const prefix = "Request constructor"; + webidl.argumentLengthCheck(arguments, 1, prefix); + input = webidl.converters.RequestInfo(input, prefix, "input"); + init = webidl.converters.RequestInit(init, prefix, "init"); + let request = null; + let fallbackMode = null; + const baseUrl = environmentSettingsObject.settingsObject.baseUrl; + let signal = null; + if (typeof input === "string") { + this[kDispatcher] = init.dispatcher; + let parsedURL; + try { + parsedURL = new URL(input, baseUrl); + } catch (err) { + throw new TypeError("Failed to parse URL from " + input, { cause: err }); + } + if (parsedURL.username || parsedURL.password) { + throw new TypeError( + "Request cannot be constructed from a URL that includes credentials: " + input + ); + } + request = makeRequest({ urlList: [parsedURL] }); + fallbackMode = "cors"; + } else { + this[kDispatcher] = init.dispatcher || input[kDispatcher]; + assert(input instanceof _Request); + request = input[kState]; + signal = input[kSignal]; + } + const origin = environmentSettingsObject.settingsObject.origin; + let window = "client"; + if (request.window?.constructor?.name === "EnvironmentSettingsObject" && sameOrigin(request.window, origin)) { + window = request.window; + } + if (init.window != null) { + throw new TypeError(`'window' option '${window}' must be null`); + } + if ("window" in init) { + window = "no-window"; + } + request = makeRequest({ + // URL request’s URL. + // undici implementation note: this is set as the first item in request's urlList in makeRequest + // method request’s method. + method: request.method, + // header list A copy of request’s header list. + // undici implementation note: headersList is cloned in makeRequest + headersList: request.headersList, + // unsafe-request flag Set. + unsafeRequest: request.unsafeRequest, + // client This’s relevant settings object. + client: environmentSettingsObject.settingsObject, + // window window. + window, + // priority request’s priority. + priority: request.priority, + // origin request’s origin. The propagation of the origin is only significant for navigation requests + // being handled by a service worker. In this scenario a request can have an origin that is different + // from the current client. + origin: request.origin, + // referrer request’s referrer. + referrer: request.referrer, + // referrer policy request’s referrer policy. + referrerPolicy: request.referrerPolicy, + // mode request’s mode. + mode: request.mode, + // credentials mode request’s credentials mode. + credentials: request.credentials, + // cache mode request’s cache mode. + cache: request.cache, + // redirect mode request’s redirect mode. + redirect: request.redirect, + // integrity metadata request’s integrity metadata. + integrity: request.integrity, + // keepalive request’s keepalive. + keepalive: request.keepalive, + // reload-navigation flag request’s reload-navigation flag. + reloadNavigation: request.reloadNavigation, + // history-navigation flag request’s history-navigation flag. + historyNavigation: request.historyNavigation, + // URL list A clone of request’s URL list. + urlList: [...request.urlList] + }); + const initHasKey = Object.keys(init).length !== 0; + if (initHasKey) { + if (request.mode === "navigate") { + request.mode = "same-origin"; + } + request.reloadNavigation = false; + request.historyNavigation = false; + request.origin = "client"; + request.referrer = "client"; + request.referrerPolicy = ""; + request.url = request.urlList[request.urlList.length - 1]; + request.urlList = [request.url]; + } + if (init.referrer !== void 0) { + const referrer = init.referrer; + if (referrer === "") { + request.referrer = "no-referrer"; + } else { + let parsedReferrer; + try { + parsedReferrer = new URL(referrer, baseUrl); + } catch (err) { + throw new TypeError(`Referrer "${referrer}" is not a valid URL.`, { cause: err }); + } + if (parsedReferrer.protocol === "about:" && parsedReferrer.hostname === "client" || origin && !sameOrigin(parsedReferrer, environmentSettingsObject.settingsObject.baseUrl)) { + request.referrer = "client"; + } else { + request.referrer = parsedReferrer; + } + } + } + if (init.referrerPolicy !== void 0) { + request.referrerPolicy = init.referrerPolicy; + } + let mode; + if (init.mode !== void 0) { + mode = init.mode; + } else { + mode = fallbackMode; + } + if (mode === "navigate") { + throw webidl.errors.exception({ + header: "Request constructor", + message: "invalid request mode navigate." + }); + } + if (mode != null) { + request.mode = mode; + } + if (init.credentials !== void 0) { + request.credentials = init.credentials; + } + if (init.cache !== void 0) { + request.cache = init.cache; + } + if (request.cache === "only-if-cached" && request.mode !== "same-origin") { + throw new TypeError( + "'only-if-cached' can be set only with 'same-origin' mode" + ); + } + if (init.redirect !== void 0) { + request.redirect = init.redirect; + } + if (init.integrity != null) { + request.integrity = String(init.integrity); + } + if (init.keepalive !== void 0) { + request.keepalive = Boolean(init.keepalive); + } + if (init.method !== void 0) { + let method = init.method; + const mayBeNormalized = normalizedMethodRecords[method]; + if (mayBeNormalized !== void 0) { + request.method = mayBeNormalized; + } else { + if (!isValidHTTPToken(method)) { + throw new TypeError(`'${method}' is not a valid HTTP method.`); + } + const upperCase = method.toUpperCase(); + if (forbiddenMethodsSet.has(upperCase)) { + throw new TypeError(`'${method}' HTTP method is unsupported.`); + } + method = normalizedMethodRecordsBase[upperCase] ?? method; + request.method = method; + } + if (!patchMethodWarning && request.method === "patch") { + process.emitWarning("Using `patch` is highly likely to result in a `405 Method Not Allowed`. `PATCH` is much more likely to succeed.", { + code: "UNDICI-FETCH-patch" + }); + patchMethodWarning = true; + } + } + if (init.signal !== void 0) { + signal = init.signal; + } + this[kState] = request; + const ac = new AbortController(); + this[kSignal] = ac.signal; + if (signal != null) { + if (!signal || typeof signal.aborted !== "boolean" || typeof signal.addEventListener !== "function") { + throw new TypeError( + "Failed to construct 'Request': member signal is not of type AbortSignal." + ); + } + if (signal.aborted) { + ac.abort(signal.reason); + } else { + this[kAbortController] = ac; + const acRef = new WeakRef(ac); + const abort = buildAbort(acRef); + try { + if (typeof getMaxListeners === "function" && getMaxListeners(signal) === defaultMaxListeners) { + setMaxListeners(1500, signal); + } else if (getEventListeners(signal, "abort").length >= defaultMaxListeners) { + setMaxListeners(1500, signal); + } + } catch { + } + util.addAbortListener(signal, abort); + requestFinalizer.register(ac, { signal, abort }, abort); + } + } + this[kHeaders] = new Headers2(kConstruct); + setHeadersList(this[kHeaders], request.headersList); + setHeadersGuard(this[kHeaders], "request"); + if (mode === "no-cors") { + if (!corsSafeListedMethodsSet.has(request.method)) { + throw new TypeError( + `'${request.method} is unsupported in no-cors mode.` + ); + } + setHeadersGuard(this[kHeaders], "request-no-cors"); + } + if (initHasKey) { + const headersList = getHeadersList(this[kHeaders]); + const headers = init.headers !== void 0 ? init.headers : new HeadersList(headersList); + headersList.clear(); + if (headers instanceof HeadersList) { + for (const { name, value } of headers.rawValues()) { + headersList.append(name, value, false); + } + headersList.cookies = headers.cookies; + } else { + fillHeaders(this[kHeaders], headers); + } + } + const inputBody = input instanceof _Request ? input[kState].body : null; + if ((init.body != null || inputBody != null) && (request.method === "GET" || request.method === "HEAD")) { + throw new TypeError("Request with GET/HEAD method cannot have body."); + } + let initBody = null; + if (init.body != null) { + const [extractedBody, contentType] = extractBody( + init.body, + request.keepalive + ); + initBody = extractedBody; + if (contentType && !getHeadersList(this[kHeaders]).contains("content-type", true)) { + this[kHeaders].append("content-type", contentType); + } + } + const inputOrInitBody = initBody ?? inputBody; + if (inputOrInitBody != null && inputOrInitBody.source == null) { + if (initBody != null && init.duplex == null) { + throw new TypeError("RequestInit: duplex option is required when sending a body."); + } + if (request.mode !== "same-origin" && request.mode !== "cors") { + throw new TypeError( + 'If request is made from ReadableStream, mode should be "same-origin" or "cors"' + ); + } + request.useCORSPreflightFlag = true; + } + let finalBody = inputOrInitBody; + if (initBody == null && inputBody != null) { + if (bodyUnusable(input)) { + throw new TypeError( + "Cannot construct a Request with a Request object that has already been used." + ); + } + const identityTransform = new TransformStream(); + inputBody.stream.pipeThrough(identityTransform); + finalBody = { + source: inputBody.source, + length: inputBody.length, + stream: identityTransform.readable + }; + } + this[kState].body = finalBody; + } + // Returns request’s HTTP method, which is "GET" by default. + get method() { + webidl.brandCheck(this, _Request); + return this[kState].method; + } + // Returns the URL of request as a string. + get url() { + webidl.brandCheck(this, _Request); + return URLSerializer(this[kState].url); + } + // Returns a Headers object consisting of the headers associated with request. + // Note that headers added in the network layer by the user agent will not + // be accounted for in this object, e.g., the "Host" header. + get headers() { + webidl.brandCheck(this, _Request); + return this[kHeaders]; + } + // Returns the kind of resource requested by request, e.g., "document" + // or "script". + get destination() { + webidl.brandCheck(this, _Request); + return this[kState].destination; + } + // Returns the referrer of request. Its value can be a same-origin URL if + // explicitly set in init, the empty string to indicate no referrer, and + // "about:client" when defaulting to the global’s default. This is used + // during fetching to determine the value of the `Referer` header of the + // request being made. + get referrer() { + webidl.brandCheck(this, _Request); + if (this[kState].referrer === "no-referrer") { + return ""; + } + if (this[kState].referrer === "client") { + return "about:client"; + } + return this[kState].referrer.toString(); + } + // Returns the referrer policy associated with request. + // This is used during fetching to compute the value of the request’s + // referrer. + get referrerPolicy() { + webidl.brandCheck(this, _Request); + return this[kState].referrerPolicy; + } + // Returns the mode associated with request, which is a string indicating + // whether the request will use CORS, or will be restricted to same-origin + // URLs. + get mode() { + webidl.brandCheck(this, _Request); + return this[kState].mode; + } + // Returns the credentials mode associated with request, + // which is a string indicating whether credentials will be sent with the + // request always, never, or only when sent to a same-origin URL. + get credentials() { + return this[kState].credentials; + } + // Returns the cache mode associated with request, + // which is a string indicating how the request will + // interact with the browser’s cache when fetching. + get cache() { + webidl.brandCheck(this, _Request); + return this[kState].cache; + } + // Returns the redirect mode associated with request, + // which is a string indicating how redirects for the + // request will be handled during fetching. A request + // will follow redirects by default. + get redirect() { + webidl.brandCheck(this, _Request); + return this[kState].redirect; + } + // Returns request’s subresource integrity metadata, which is a + // cryptographic hash of the resource being fetched. Its value + // consists of multiple hashes separated by whitespace. [SRI] + get integrity() { + webidl.brandCheck(this, _Request); + return this[kState].integrity; + } + // Returns a boolean indicating whether or not request can outlive the + // global in which it was created. + get keepalive() { + webidl.brandCheck(this, _Request); + return this[kState].keepalive; + } + // Returns a boolean indicating whether or not request is for a reload + // navigation. + get isReloadNavigation() { + webidl.brandCheck(this, _Request); + return this[kState].reloadNavigation; + } + // Returns a boolean indicating whether or not request is for a history + // navigation (a.k.a. back-forward navigation). + get isHistoryNavigation() { + webidl.brandCheck(this, _Request); + return this[kState].historyNavigation; + } + // Returns the signal associated with request, which is an AbortSignal + // object indicating whether or not request has been aborted, and its + // abort event handler. + get signal() { + webidl.brandCheck(this, _Request); + return this[kSignal]; + } + get body() { + webidl.brandCheck(this, _Request); + return this[kState].body ? this[kState].body.stream : null; + } + get bodyUsed() { + webidl.brandCheck(this, _Request); + return !!this[kState].body && util.isDisturbed(this[kState].body.stream); + } + get duplex() { + webidl.brandCheck(this, _Request); + return "half"; + } + // Returns a clone of request. + clone() { + webidl.brandCheck(this, _Request); + if (bodyUnusable(this)) { + throw new TypeError("unusable"); + } + const clonedRequest = cloneRequest(this[kState]); + const ac = new AbortController(); + if (this.signal.aborted) { + ac.abort(this.signal.reason); + } else { + let list = dependentControllerMap.get(this.signal); + if (list === void 0) { + list = /* @__PURE__ */ new Set(); + dependentControllerMap.set(this.signal, list); + } + const acRef = new WeakRef(ac); + list.add(acRef); + util.addAbortListener( + ac.signal, + buildAbort(acRef) + ); + } + return fromInnerRequest(clonedRequest, ac.signal, getHeadersGuard(this[kHeaders])); + } + [nodeUtil.inspect.custom](depth, options) { + if (options.depth === null) { + options.depth = 2; + } + options.colors ??= true; + const properties = { + method: this.method, + url: this.url, + headers: this.headers, + destination: this.destination, + referrer: this.referrer, + referrerPolicy: this.referrerPolicy, + mode: this.mode, + credentials: this.credentials, + cache: this.cache, + redirect: this.redirect, + integrity: this.integrity, + keepalive: this.keepalive, + isReloadNavigation: this.isReloadNavigation, + isHistoryNavigation: this.isHistoryNavigation, + signal: this.signal + }; + return `Request ${nodeUtil.formatWithOptions(options, properties)}`; + } + }; + mixinBody(Request); + function makeRequest(init) { + return { + method: init.method ?? "GET", + localURLsOnly: init.localURLsOnly ?? false, + unsafeRequest: init.unsafeRequest ?? false, + body: init.body ?? null, + client: init.client ?? null, + reservedClient: init.reservedClient ?? null, + replacesClientId: init.replacesClientId ?? "", + window: init.window ?? "client", + keepalive: init.keepalive ?? false, + serviceWorkers: init.serviceWorkers ?? "all", + initiator: init.initiator ?? "", + destination: init.destination ?? "", + priority: init.priority ?? null, + origin: init.origin ?? "client", + policyContainer: init.policyContainer ?? "client", + referrer: init.referrer ?? "client", + referrerPolicy: init.referrerPolicy ?? "", + mode: init.mode ?? "no-cors", + useCORSPreflightFlag: init.useCORSPreflightFlag ?? false, + credentials: init.credentials ?? "same-origin", + useCredentials: init.useCredentials ?? false, + cache: init.cache ?? "default", + redirect: init.redirect ?? "follow", + integrity: init.integrity ?? "", + cryptoGraphicsNonceMetadata: init.cryptoGraphicsNonceMetadata ?? "", + parserMetadata: init.parserMetadata ?? "", + reloadNavigation: init.reloadNavigation ?? false, + historyNavigation: init.historyNavigation ?? false, + userActivation: init.userActivation ?? false, + taintedOrigin: init.taintedOrigin ?? false, + redirectCount: init.redirectCount ?? 0, + responseTainting: init.responseTainting ?? "basic", + preventNoCacheCacheControlHeaderModification: init.preventNoCacheCacheControlHeaderModification ?? false, + done: init.done ?? false, + timingAllowFailed: init.timingAllowFailed ?? false, + urlList: init.urlList, + url: init.urlList[0], + headersList: init.headersList ? new HeadersList(init.headersList) : new HeadersList() + }; + } + function cloneRequest(request) { + const newRequest = makeRequest({ ...request, body: null }); + if (request.body != null) { + newRequest.body = cloneBody(newRequest, request.body); + } + return newRequest; + } + function fromInnerRequest(innerRequest, signal, guard) { + const request = new Request(kConstruct); + request[kState] = innerRequest; + request[kSignal] = signal; + request[kHeaders] = new Headers2(kConstruct); + setHeadersList(request[kHeaders], innerRequest.headersList); + setHeadersGuard(request[kHeaders], guard); + return request; + } + Object.defineProperties(Request.prototype, { + method: kEnumerableProperty, + url: kEnumerableProperty, + headers: kEnumerableProperty, + redirect: kEnumerableProperty, + clone: kEnumerableProperty, + signal: kEnumerableProperty, + duplex: kEnumerableProperty, + destination: kEnumerableProperty, + body: kEnumerableProperty, + bodyUsed: kEnumerableProperty, + isHistoryNavigation: kEnumerableProperty, + isReloadNavigation: kEnumerableProperty, + keepalive: kEnumerableProperty, + integrity: kEnumerableProperty, + cache: kEnumerableProperty, + credentials: kEnumerableProperty, + attribute: kEnumerableProperty, + referrerPolicy: kEnumerableProperty, + referrer: kEnumerableProperty, + mode: kEnumerableProperty, + [Symbol.toStringTag]: { + value: "Request", + configurable: true + } + }); + webidl.converters.Request = webidl.interfaceConverter( + Request + ); + webidl.converters.RequestInfo = function(V, prefix, argument) { + if (typeof V === "string") { + return webidl.converters.USVString(V, prefix, argument); + } + if (V instanceof Request) { + return webidl.converters.Request(V, prefix, argument); + } + return webidl.converters.USVString(V, prefix, argument); + }; + webidl.converters.AbortSignal = webidl.interfaceConverter( + AbortSignal + ); + webidl.converters.RequestInit = webidl.dictionaryConverter([ + { + key: "method", + converter: webidl.converters.ByteString + }, + { + key: "headers", + converter: webidl.converters.HeadersInit + }, + { + key: "body", + converter: webidl.nullableConverter( + webidl.converters.BodyInit + ) + }, + { + key: "referrer", + converter: webidl.converters.USVString + }, + { + key: "referrerPolicy", + converter: webidl.converters.DOMString, + // https://w3c.github.io/webappsec-referrer-policy/#referrer-policy + allowedValues: referrerPolicy + }, + { + key: "mode", + converter: webidl.converters.DOMString, + // https://fetch.spec.whatwg.org/#concept-request-mode + allowedValues: requestMode + }, + { + key: "credentials", + converter: webidl.converters.DOMString, + // https://fetch.spec.whatwg.org/#requestcredentials + allowedValues: requestCredentials + }, + { + key: "cache", + converter: webidl.converters.DOMString, + // https://fetch.spec.whatwg.org/#requestcache + allowedValues: requestCache + }, + { + key: "redirect", + converter: webidl.converters.DOMString, + // https://fetch.spec.whatwg.org/#requestredirect + allowedValues: requestRedirect + }, + { + key: "integrity", + converter: webidl.converters.DOMString + }, + { + key: "keepalive", + converter: webidl.converters.boolean + }, + { + key: "signal", + converter: webidl.nullableConverter( + (signal) => webidl.converters.AbortSignal( + signal, + "RequestInit", + "signal", + { strict: false } + ) + ) + }, + { + key: "window", + converter: webidl.converters.any + }, + { + key: "duplex", + converter: webidl.converters.DOMString, + allowedValues: requestDuplex + }, + { + key: "dispatcher", + // undici specific option + converter: webidl.converters.any + } + ]); + module.exports = { Request, makeRequest, fromInnerRequest, cloneRequest }; + } +}); + +// +var require_fetch = __commonJS({ + ""(exports, module) { + "use strict"; + var { + makeNetworkError, + makeAppropriateNetworkError, + filterResponse, + makeResponse, + fromInnerResponse + } = require_response(); + var { HeadersList } = require_headers(); + var { Request, cloneRequest } = require_request2(); + var zlib = __require("node:zlib"); + var { + bytesMatch, + makePolicyContainer, + clonePolicyContainer, + requestBadPort, + TAOCheck, + appendRequestOriginHeader, + responseLocationURL, + requestCurrentURL, + setRequestReferrerPolicyOnRedirect, + tryUpgradeRequestToAPotentiallyTrustworthyURL, + createOpaqueTimingInfo, + appendFetchMetadata, + corsCheck, + crossOriginResourcePolicyCheck, + determineRequestsReferrer, + coarsenedSharedCurrentTime, + createDeferredPromise, + isBlobLike, + sameOrigin, + isCancelled, + isAborted, + isErrorLike, + fullyReadBody, + readableStreamClose, + isomorphicEncode, + urlIsLocal, + urlIsHttpHttpsScheme, + urlHasHttpsScheme, + clampAndCoarsenConnectionTimingInfo, + simpleRangeHeaderValue, + buildContentRange, + createInflate, + extractMimeType + } = require_util2(); + var { kState, kDispatcher } = require_symbols2(); + var assert = __require("node:assert"); + var { safelyExtractBody, extractBody } = require_body(); + var { + redirectStatusSet, + nullBodyStatus, + safeMethodsSet, + requestBodyHeader, + subresourceSet + } = require_constants3(); + var EE = __require("node:events"); + var { Readable, pipeline, finished } = __require("node:stream"); + var { addAbortListener, isErrored, isReadable, bufferToLowerCasedHeaderName } = require_util(); + var { dataURLProcessor, serializeAMimeType, minimizeSupportedMimeType } = require_data_url(); + var { getGlobalDispatcher } = require_global2(); + var { webidl } = require_webidl(); + var { STATUS_CODES } = __require("node:http"); + var GET_OR_HEAD = ["GET", "HEAD"]; + var defaultUserAgent = typeof __UNDICI_IS_NODE__ !== "undefined" || typeof esbuildDetection !== "undefined" ? "node" : "undici"; + var resolveObjectURL; + var Fetch = class extends EE { + constructor(dispatcher) { + super(); + this.dispatcher = dispatcher; + this.connection = null; + this.dump = false; + this.state = "ongoing"; + } + terminate(reason) { + if (this.state !== "ongoing") { + return; + } + this.state = "terminated"; + this.connection?.destroy(reason); + this.emit("terminated", reason); + } + // https://fetch.spec.whatwg.org/#fetch-controller-abort + abort(error2) { + if (this.state !== "ongoing") { + return; + } + this.state = "aborted"; + if (!error2) { + error2 = new DOMException("The operation was aborted.", "AbortError"); + } + this.serializedAbortReason = error2; + this.connection?.destroy(error2); + this.emit("terminated", error2); + } + }; + function handleFetchDone(response) { + finalizeAndReportTiming(response, "fetch"); + } + function fetch(input, init = void 0) { + webidl.argumentLengthCheck(arguments, 1, "globalThis.fetch"); + let p = createDeferredPromise(); + let requestObject; + try { + requestObject = new Request(input, init); + } catch (e) { + p.reject(e); + return p.promise; + } + const request = requestObject[kState]; + if (requestObject.signal.aborted) { + abortFetch(p, request, null, requestObject.signal.reason); + return p.promise; + } + const globalObject = request.client.globalObject; + if (globalObject?.constructor?.name === "ServiceWorkerGlobalScope") { + request.serviceWorkers = "none"; + } + let responseObject = null; + let locallyAborted = false; + let controller = null; + addAbortListener( + requestObject.signal, + () => { + locallyAborted = true; + assert(controller != null); + controller.abort(requestObject.signal.reason); + const realResponse = responseObject?.deref(); + abortFetch(p, request, realResponse, requestObject.signal.reason); + } + ); + const processResponse = (response) => { + if (locallyAborted) { + return; + } + if (response.aborted) { + abortFetch(p, request, responseObject, controller.serializedAbortReason); + return; + } + if (response.type === "error") { + p.reject(new TypeError("fetch failed", { cause: response.error })); + return; + } + responseObject = new WeakRef(fromInnerResponse(response, "immutable")); + p.resolve(responseObject.deref()); + p = null; + }; + controller = fetching({ + request, + processResponseEndOfBody: handleFetchDone, + processResponse, + dispatcher: requestObject[kDispatcher] + // undici + }); + return p.promise; + } + function finalizeAndReportTiming(response, initiatorType = "other") { + if (response.type === "error" && response.aborted) { + return; + } + if (!response.urlList?.length) { + return; + } + const originalURL = response.urlList[0]; + let timingInfo = response.timingInfo; + let cacheState = response.cacheState; + if (!urlIsHttpHttpsScheme(originalURL)) { + return; + } + if (timingInfo === null) { + return; + } + if (!response.timingAllowPassed) { + timingInfo = createOpaqueTimingInfo({ + startTime: timingInfo.startTime + }); + cacheState = ""; + } + timingInfo.endTime = coarsenedSharedCurrentTime(); + response.timingInfo = timingInfo; + markResourceTiming( + timingInfo, + originalURL.href, + initiatorType, + globalThis, + cacheState + ); + } + var markResourceTiming = performance.markResourceTiming; + function abortFetch(p, request, responseObject, error2) { + if (p) { + p.reject(error2); + } + if (request.body != null && isReadable(request.body?.stream)) { + request.body.stream.cancel(error2).catch((err) => { + if (err.code === "ERR_INVALID_STATE") { + return; + } + throw err; + }); + } + if (responseObject == null) { + return; + } + const response = responseObject[kState]; + if (response.body != null && isReadable(response.body?.stream)) { + response.body.stream.cancel(error2).catch((err) => { + if (err.code === "ERR_INVALID_STATE") { + return; + } + throw err; + }); + } + } + function fetching({ + request, + processRequestBodyChunkLength, + processRequestEndOfBody, + processResponse, + processResponseEndOfBody, + processResponseConsumeBody, + useParallelQueue = false, + dispatcher = getGlobalDispatcher() + // undici + }) { + assert(dispatcher); + let taskDestination = null; + let crossOriginIsolatedCapability = false; + if (request.client != null) { + taskDestination = request.client.globalObject; + crossOriginIsolatedCapability = request.client.crossOriginIsolatedCapability; + } + const currentTime = coarsenedSharedCurrentTime(crossOriginIsolatedCapability); + const timingInfo = createOpaqueTimingInfo({ + startTime: currentTime + }); + const fetchParams = { + controller: new Fetch(dispatcher), + request, + timingInfo, + processRequestBodyChunkLength, + processRequestEndOfBody, + processResponse, + processResponseConsumeBody, + processResponseEndOfBody, + taskDestination, + crossOriginIsolatedCapability + }; + assert(!request.body || request.body.stream); + if (request.window === "client") { + request.window = request.client?.globalObject?.constructor?.name === "Window" ? request.client : "no-window"; + } + if (request.origin === "client") { + request.origin = request.client.origin; + } + if (request.policyContainer === "client") { + if (request.client != null) { + request.policyContainer = clonePolicyContainer( + request.client.policyContainer + ); + } else { + request.policyContainer = makePolicyContainer(); + } + } + if (!request.headersList.contains("accept", true)) { + const value = "*/*"; + request.headersList.append("accept", value, true); + } + if (!request.headersList.contains("accept-language", true)) { + request.headersList.append("accept-language", "*", true); + } + if (request.priority === null) { + } + if (subresourceSet.has(request.destination)) { + } + mainFetch(fetchParams).catch((err) => { + fetchParams.controller.terminate(err); + }); + return fetchParams.controller; + } + async function mainFetch(fetchParams, recursive = false) { + const request = fetchParams.request; + let response = null; + if (request.localURLsOnly && !urlIsLocal(requestCurrentURL(request))) { + response = makeNetworkError("local URLs only"); + } + tryUpgradeRequestToAPotentiallyTrustworthyURL(request); + if (requestBadPort(request) === "blocked") { + response = makeNetworkError("bad port"); + } + if (request.referrerPolicy === "") { + request.referrerPolicy = request.policyContainer.referrerPolicy; + } + if (request.referrer !== "no-referrer") { + request.referrer = determineRequestsReferrer(request); + } + if (response === null) { + response = await (async () => { + const currentURL = requestCurrentURL(request); + if ( + // - request’s current URL’s origin is same origin with request’s origin, + // and request’s response tainting is "basic" + sameOrigin(currentURL, request.url) && request.responseTainting === "basic" || // request’s current URL’s scheme is "data" + currentURL.protocol === "data:" || // - request’s mode is "navigate" or "websocket" + (request.mode === "navigate" || request.mode === "websocket") + ) { + request.responseTainting = "basic"; + return await schemeFetch(fetchParams); + } + if (request.mode === "same-origin") { + return makeNetworkError('request mode cannot be "same-origin"'); + } + if (request.mode === "no-cors") { + if (request.redirect !== "follow") { + return makeNetworkError( + 'redirect mode cannot be "follow" for "no-cors" request' + ); + } + request.responseTainting = "opaque"; + return await schemeFetch(fetchParams); + } + if (!urlIsHttpHttpsScheme(requestCurrentURL(request))) { + return makeNetworkError("URL scheme must be a HTTP(S) scheme"); + } + request.responseTainting = "cors"; + return await httpFetch(fetchParams); + })(); + } + if (recursive) { + return response; + } + if (response.status !== 0 && !response.internalResponse) { + if (request.responseTainting === "cors") { + } + if (request.responseTainting === "basic") { + response = filterResponse(response, "basic"); + } else if (request.responseTainting === "cors") { + response = filterResponse(response, "cors"); + } else if (request.responseTainting === "opaque") { + response = filterResponse(response, "opaque"); + } else { + assert(false); + } + } + let internalResponse = response.status === 0 ? response : response.internalResponse; + if (internalResponse.urlList.length === 0) { + internalResponse.urlList.push(...request.urlList); + } + if (!request.timingAllowFailed) { + response.timingAllowPassed = true; + } + if (response.type === "opaque" && internalResponse.status === 206 && internalResponse.rangeRequested && !request.headers.contains("range", true)) { + response = internalResponse = makeNetworkError(); + } + if (response.status !== 0 && (request.method === "HEAD" || request.method === "CONNECT" || nullBodyStatus.includes(internalResponse.status))) { + internalResponse.body = null; + fetchParams.controller.dump = true; + } + if (request.integrity) { + const processBodyError = (reason) => fetchFinale(fetchParams, makeNetworkError(reason)); + if (request.responseTainting === "opaque" || response.body == null) { + processBodyError(response.error); + return; + } + const processBody = (bytes) => { + if (!bytesMatch(bytes, request.integrity)) { + processBodyError("integrity mismatch"); + return; + } + response.body = safelyExtractBody(bytes)[0]; + fetchFinale(fetchParams, response); + }; + await fullyReadBody(response.body, processBody, processBodyError); + } else { + fetchFinale(fetchParams, response); + } + } + function schemeFetch(fetchParams) { + if (isCancelled(fetchParams) && fetchParams.request.redirectCount === 0) { + return Promise.resolve(makeAppropriateNetworkError(fetchParams)); + } + const { request } = fetchParams; + const { protocol: scheme } = requestCurrentURL(request); + switch (scheme) { + case "about:": { + return Promise.resolve(makeNetworkError("about scheme is not supported")); + } + case "blob:": { + if (!resolveObjectURL) { + resolveObjectURL = __require("node:buffer").resolveObjectURL; + } + const blobURLEntry = requestCurrentURL(request); + if (blobURLEntry.search.length !== 0) { + return Promise.resolve(makeNetworkError("NetworkError when attempting to fetch resource.")); + } + const blob = resolveObjectURL(blobURLEntry.toString()); + if (request.method !== "GET" || !isBlobLike(blob)) { + return Promise.resolve(makeNetworkError("invalid method")); + } + const response = makeResponse(); + const fullLength = blob.size; + const serializedFullLength = isomorphicEncode(`${fullLength}`); + const type = blob.type; + if (!request.headersList.contains("range", true)) { + const bodyWithType = extractBody(blob); + response.statusText = "OK"; + response.body = bodyWithType[0]; + response.headersList.set("content-length", serializedFullLength, true); + response.headersList.set("content-type", type, true); + } else { + response.rangeRequested = true; + const rangeHeader = request.headersList.get("range", true); + const rangeValue = simpleRangeHeaderValue(rangeHeader, true); + if (rangeValue === "failure") { + return Promise.resolve(makeNetworkError("failed to fetch the data URL")); + } + let { rangeStartValue: rangeStart, rangeEndValue: rangeEnd } = rangeValue; + if (rangeStart === null) { + rangeStart = fullLength - rangeEnd; + rangeEnd = rangeStart + rangeEnd - 1; + } else { + if (rangeStart >= fullLength) { + return Promise.resolve(makeNetworkError("Range start is greater than the blob's size.")); + } + if (rangeEnd === null || rangeEnd >= fullLength) { + rangeEnd = fullLength - 1; + } + } + const slicedBlob = blob.slice(rangeStart, rangeEnd, type); + const slicedBodyWithType = extractBody(slicedBlob); + response.body = slicedBodyWithType[0]; + const serializedSlicedLength = isomorphicEncode(`${slicedBlob.size}`); + const contentRange = buildContentRange(rangeStart, rangeEnd, fullLength); + response.status = 206; + response.statusText = "Partial Content"; + response.headersList.set("content-length", serializedSlicedLength, true); + response.headersList.set("content-type", type, true); + response.headersList.set("content-range", contentRange, true); + } + return Promise.resolve(response); + } + case "data:": { + const currentURL = requestCurrentURL(request); + const dataURLStruct = dataURLProcessor(currentURL); + if (dataURLStruct === "failure") { + return Promise.resolve(makeNetworkError("failed to fetch the data URL")); + } + const mimeType = serializeAMimeType(dataURLStruct.mimeType); + return Promise.resolve(makeResponse({ + statusText: "OK", + headersList: [ + ["content-type", { name: "Content-Type", value: mimeType }] + ], + body: safelyExtractBody(dataURLStruct.body)[0] + })); + } + case "file:": { + return Promise.resolve(makeNetworkError("not implemented... yet...")); + } + case "http:": + case "https:": { + return httpFetch(fetchParams).catch((err) => makeNetworkError(err)); + } + default: { + return Promise.resolve(makeNetworkError("unknown scheme")); + } + } + } + function finalizeResponse(fetchParams, response) { + fetchParams.request.done = true; + if (fetchParams.processResponseDone != null) { + queueMicrotask(() => fetchParams.processResponseDone(response)); + } + } + function fetchFinale(fetchParams, response) { + let timingInfo = fetchParams.timingInfo; + const processResponseEndOfBody = () => { + const unsafeEndTime = Date.now(); + if (fetchParams.request.destination === "document") { + fetchParams.controller.fullTimingInfo = timingInfo; + } + fetchParams.controller.reportTimingSteps = () => { + if (fetchParams.request.url.protocol !== "https:") { + return; + } + timingInfo.endTime = unsafeEndTime; + let cacheState = response.cacheState; + const bodyInfo = response.bodyInfo; + if (!response.timingAllowPassed) { + timingInfo = createOpaqueTimingInfo(timingInfo); + cacheState = ""; + } + let responseStatus = 0; + if (fetchParams.request.mode !== "navigator" || !response.hasCrossOriginRedirects) { + responseStatus = response.status; + const mimeType = extractMimeType(response.headersList); + if (mimeType !== "failure") { + bodyInfo.contentType = minimizeSupportedMimeType(mimeType); + } + } + if (fetchParams.request.initiatorType != null) { + markResourceTiming(timingInfo, fetchParams.request.url.href, fetchParams.request.initiatorType, globalThis, cacheState, bodyInfo, responseStatus); + } + }; + const processResponseEndOfBodyTask = () => { + fetchParams.request.done = true; + if (fetchParams.processResponseEndOfBody != null) { + queueMicrotask(() => fetchParams.processResponseEndOfBody(response)); + } + if (fetchParams.request.initiatorType != null) { + fetchParams.controller.reportTimingSteps(); + } + }; + queueMicrotask(() => processResponseEndOfBodyTask()); + }; + if (fetchParams.processResponse != null) { + queueMicrotask(() => { + fetchParams.processResponse(response); + fetchParams.processResponse = null; + }); + } + const internalResponse = response.type === "error" ? response : response.internalResponse ?? response; + if (internalResponse.body == null) { + processResponseEndOfBody(); + } else { + finished(internalResponse.body.stream, () => { + processResponseEndOfBody(); + }); + } + } + async function httpFetch(fetchParams) { + const request = fetchParams.request; + let response = null; + let actualResponse = null; + const timingInfo = fetchParams.timingInfo; + if (request.serviceWorkers === "all") { + } + if (response === null) { + if (request.redirect === "follow") { + request.serviceWorkers = "none"; + } + actualResponse = response = await httpNetworkOrCacheFetch(fetchParams); + if (request.responseTainting === "cors" && corsCheck(request, response) === "failure") { + return makeNetworkError("cors failure"); + } + if (TAOCheck(request, response) === "failure") { + request.timingAllowFailed = true; + } + } + if ((request.responseTainting === "opaque" || response.type === "opaque") && crossOriginResourcePolicyCheck( + request.origin, + request.client, + request.destination, + actualResponse + ) === "blocked") { + return makeNetworkError("blocked"); + } + if (redirectStatusSet.has(actualResponse.status)) { + if (request.redirect !== "manual") { + fetchParams.controller.connection.destroy(void 0, false); + } + if (request.redirect === "error") { + response = makeNetworkError("unexpected redirect"); + } else if (request.redirect === "manual") { + response = actualResponse; + } else if (request.redirect === "follow") { + response = await httpRedirectFetch(fetchParams, response); + } else { + assert(false); + } + } + response.timingInfo = timingInfo; + return response; + } + function httpRedirectFetch(fetchParams, response) { + const request = fetchParams.request; + const actualResponse = response.internalResponse ? response.internalResponse : response; + let locationURL; + try { + locationURL = responseLocationURL( + actualResponse, + requestCurrentURL(request).hash + ); + if (locationURL == null) { + return response; + } + } catch (err) { + return Promise.resolve(makeNetworkError(err)); + } + if (!urlIsHttpHttpsScheme(locationURL)) { + return Promise.resolve(makeNetworkError("URL scheme must be a HTTP(S) scheme")); + } + if (request.redirectCount === 20) { + return Promise.resolve(makeNetworkError("redirect count exceeded")); + } + request.redirectCount += 1; + if (request.mode === "cors" && (locationURL.username || locationURL.password) && !sameOrigin(request, locationURL)) { + return Promise.resolve(makeNetworkError('cross origin not allowed for request mode "cors"')); + } + if (request.responseTainting === "cors" && (locationURL.username || locationURL.password)) { + return Promise.resolve(makeNetworkError( + 'URL cannot contain credentials for request mode "cors"' + )); + } + if (actualResponse.status !== 303 && request.body != null && request.body.source == null) { + return Promise.resolve(makeNetworkError()); + } + if ([301, 302].includes(actualResponse.status) && request.method === "POST" || actualResponse.status === 303 && !GET_OR_HEAD.includes(request.method)) { + request.method = "GET"; + request.body = null; + for (const headerName of requestBodyHeader) { + request.headersList.delete(headerName); + } + } + if (!sameOrigin(requestCurrentURL(request), locationURL)) { + request.headersList.delete("authorization", true); + request.headersList.delete("proxy-authorization", true); + request.headersList.delete("cookie", true); + request.headersList.delete("host", true); + } + if (request.body != null) { + assert(request.body.source != null); + request.body = safelyExtractBody(request.body.source)[0]; + } + const timingInfo = fetchParams.timingInfo; + timingInfo.redirectEndTime = timingInfo.postRedirectStartTime = coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability); + if (timingInfo.redirectStartTime === 0) { + timingInfo.redirectStartTime = timingInfo.startTime; + } + request.urlList.push(locationURL); + setRequestReferrerPolicyOnRedirect(request, actualResponse); + return mainFetch(fetchParams, true); + } + async function httpNetworkOrCacheFetch(fetchParams, isAuthenticationFetch = false, isNewConnectionFetch = false) { + const request = fetchParams.request; + let httpFetchParams = null; + let httpRequest = null; + let response = null; + const httpCache = null; + const revalidatingFlag = false; + if (request.window === "no-window" && request.redirect === "error") { + httpFetchParams = fetchParams; + httpRequest = request; + } else { + httpRequest = cloneRequest(request); + httpFetchParams = { ...fetchParams }; + httpFetchParams.request = httpRequest; + } + const includeCredentials = request.credentials === "include" || request.credentials === "same-origin" && request.responseTainting === "basic"; + const contentLength = httpRequest.body ? httpRequest.body.length : null; + let contentLengthHeaderValue = null; + if (httpRequest.body == null && ["POST", "PUT"].includes(httpRequest.method)) { + contentLengthHeaderValue = "0"; + } + if (contentLength != null) { + contentLengthHeaderValue = isomorphicEncode(`${contentLength}`); + } + if (contentLengthHeaderValue != null) { + httpRequest.headersList.append("content-length", contentLengthHeaderValue, true); + } + if (contentLength != null && httpRequest.keepalive) { + } + if (httpRequest.referrer instanceof URL) { + httpRequest.headersList.append("referer", isomorphicEncode(httpRequest.referrer.href), true); + } + appendRequestOriginHeader(httpRequest); + appendFetchMetadata(httpRequest); + if (!httpRequest.headersList.contains("user-agent", true)) { + httpRequest.headersList.append("user-agent", defaultUserAgent); + } + if (httpRequest.cache === "default" && (httpRequest.headersList.contains("if-modified-since", true) || httpRequest.headersList.contains("if-none-match", true) || httpRequest.headersList.contains("if-unmodified-since", true) || httpRequest.headersList.contains("if-match", true) || httpRequest.headersList.contains("if-range", true))) { + httpRequest.cache = "no-store"; + } + if (httpRequest.cache === "no-cache" && !httpRequest.preventNoCacheCacheControlHeaderModification && !httpRequest.headersList.contains("cache-control", true)) { + httpRequest.headersList.append("cache-control", "max-age=0", true); + } + if (httpRequest.cache === "no-store" || httpRequest.cache === "reload") { + if (!httpRequest.headersList.contains("pragma", true)) { + httpRequest.headersList.append("pragma", "no-cache", true); + } + if (!httpRequest.headersList.contains("cache-control", true)) { + httpRequest.headersList.append("cache-control", "no-cache", true); + } + } + if (httpRequest.headersList.contains("range", true)) { + httpRequest.headersList.append("accept-encoding", "identity", true); + } + if (!httpRequest.headersList.contains("accept-encoding", true)) { + if (urlHasHttpsScheme(requestCurrentURL(httpRequest))) { + httpRequest.headersList.append("accept-encoding", "br, gzip, deflate", true); + } else { + httpRequest.headersList.append("accept-encoding", "gzip, deflate", true); + } + } + httpRequest.headersList.delete("host", true); + if (includeCredentials) { + } + if (httpCache == null) { + httpRequest.cache = "no-store"; + } + if (httpRequest.cache !== "no-store" && httpRequest.cache !== "reload") { + } + if (response == null) { + if (httpRequest.cache === "only-if-cached") { + return makeNetworkError("only if cached"); + } + const forwardResponse = await httpNetworkFetch( + httpFetchParams, + includeCredentials, + isNewConnectionFetch + ); + if (!safeMethodsSet.has(httpRequest.method) && forwardResponse.status >= 200 && forwardResponse.status <= 399) { + } + if (revalidatingFlag && forwardResponse.status === 304) { + } + if (response == null) { + response = forwardResponse; + } + } + response.urlList = [...httpRequest.urlList]; + if (httpRequest.headersList.contains("range", true)) { + response.rangeRequested = true; + } + response.requestIncludesCredentials = includeCredentials; + if (response.status === 407) { + if (request.window === "no-window") { + return makeNetworkError(); + } + if (isCancelled(fetchParams)) { + return makeAppropriateNetworkError(fetchParams); + } + return makeNetworkError("proxy authentication required"); + } + if ( + // response’s status is 421 + response.status === 421 && // isNewConnectionFetch is false + !isNewConnectionFetch && // request’s body is null, or request’s body is non-null and request’s body’s source is non-null + (request.body == null || request.body.source != null) + ) { + if (isCancelled(fetchParams)) { + return makeAppropriateNetworkError(fetchParams); + } + fetchParams.controller.connection.destroy(); + response = await httpNetworkOrCacheFetch( + fetchParams, + isAuthenticationFetch, + true + ); + } + if (isAuthenticationFetch) { + } + return response; + } + async function httpNetworkFetch(fetchParams, includeCredentials = false, forceNewConnection = false) { + assert(!fetchParams.controller.connection || fetchParams.controller.connection.destroyed); + fetchParams.controller.connection = { + abort: null, + destroyed: false, + destroy(err, abort = true) { + if (!this.destroyed) { + this.destroyed = true; + if (abort) { + this.abort?.(err ?? new DOMException("The operation was aborted.", "AbortError")); + } + } + } + }; + const request = fetchParams.request; + let response = null; + const timingInfo = fetchParams.timingInfo; + const httpCache = null; + if (httpCache == null) { + request.cache = "no-store"; + } + const newConnection = forceNewConnection ? "yes" : "no"; + if (request.mode === "websocket") { + } else { + } + let requestBody = null; + if (request.body == null && fetchParams.processRequestEndOfBody) { + queueMicrotask(() => fetchParams.processRequestEndOfBody()); + } else if (request.body != null) { + const processBodyChunk = async function* (bytes) { + if (isCancelled(fetchParams)) { + return; + } + yield bytes; + fetchParams.processRequestBodyChunkLength?.(bytes.byteLength); + }; + const processEndOfBody = () => { + if (isCancelled(fetchParams)) { + return; + } + if (fetchParams.processRequestEndOfBody) { + fetchParams.processRequestEndOfBody(); + } + }; + const processBodyError = (e) => { + if (isCancelled(fetchParams)) { + return; + } + if (e.name === "AbortError") { + fetchParams.controller.abort(); + } else { + fetchParams.controller.terminate(e); + } + }; + requestBody = async function* () { + try { + for await (const bytes of request.body.stream) { + yield* processBodyChunk(bytes); + } + processEndOfBody(); + } catch (err) { + processBodyError(err); + } + }(); + } + try { + const { body, status, statusText, headersList, socket } = await dispatch({ body: requestBody }); + if (socket) { + response = makeResponse({ status, statusText, headersList, socket }); + } else { + const iterator = body[Symbol.asyncIterator](); + fetchParams.controller.next = () => iterator.next(); + response = makeResponse({ status, statusText, headersList }); + } + } catch (err) { + if (err.name === "AbortError") { + fetchParams.controller.connection.destroy(); + return makeAppropriateNetworkError(fetchParams, err); + } + return makeNetworkError(err); + } + const pullAlgorithm = async () => { + await fetchParams.controller.resume(); + }; + const cancelAlgorithm = (reason) => { + if (!isCancelled(fetchParams)) { + fetchParams.controller.abort(reason); + } + }; + const stream = new ReadableStream( + { + async start(controller) { + fetchParams.controller.controller = controller; + }, + async pull(controller) { + await pullAlgorithm(controller); + }, + async cancel(reason) { + await cancelAlgorithm(reason); + }, + type: "bytes" + } + ); + response.body = { stream, source: null, length: null }; + fetchParams.controller.onAborted = onAborted; + fetchParams.controller.on("terminated", onAborted); + fetchParams.controller.resume = async () => { + while (true) { + let bytes; + let isFailure; + try { + const { done, value } = await fetchParams.controller.next(); + if (isAborted(fetchParams)) { + break; + } + bytes = done ? void 0 : value; + } catch (err) { + if (fetchParams.controller.ended && !timingInfo.encodedBodySize) { + bytes = void 0; + } else { + bytes = err; + isFailure = true; + } + } + if (bytes === void 0) { + readableStreamClose(fetchParams.controller.controller); + finalizeResponse(fetchParams, response); + return; + } + timingInfo.decodedBodySize += bytes?.byteLength ?? 0; + if (isFailure) { + fetchParams.controller.terminate(bytes); + return; + } + const buffer = new Uint8Array(bytes); + if (buffer.byteLength) { + fetchParams.controller.controller.enqueue(buffer); + } + if (isErrored(stream)) { + fetchParams.controller.terminate(); + return; + } + if (fetchParams.controller.controller.desiredSize <= 0) { + return; + } + } + }; + function onAborted(reason) { + if (isAborted(fetchParams)) { + response.aborted = true; + if (isReadable(stream)) { + fetchParams.controller.controller.error( + fetchParams.controller.serializedAbortReason + ); + } + } else { + if (isReadable(stream)) { + fetchParams.controller.controller.error(new TypeError("terminated", { + cause: isErrorLike(reason) ? reason : void 0 + })); + } + } + fetchParams.controller.connection.destroy(); + } + return response; + function dispatch({ body }) { + const url = requestCurrentURL(request); + const agent = fetchParams.controller.dispatcher; + return new Promise((resolve, reject) => agent.dispatch( + { + path: url.pathname + url.search, + origin: url.origin, + method: request.method, + body: agent.isMockActive ? request.body && (request.body.source || request.body.stream) : body, + headers: request.headersList.entries, + maxRedirections: 0, + upgrade: request.mode === "websocket" ? "websocket" : void 0 + }, + { + body: null, + abort: null, + onConnect(abort) { + const { connection } = fetchParams.controller; + timingInfo.finalConnectionTimingInfo = clampAndCoarsenConnectionTimingInfo(void 0, timingInfo.postRedirectStartTime, fetchParams.crossOriginIsolatedCapability); + if (connection.destroyed) { + abort(new DOMException("The operation was aborted.", "AbortError")); + } else { + fetchParams.controller.on("terminated", abort); + this.abort = connection.abort = abort; + } + timingInfo.finalNetworkRequestStartTime = coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability); + }, + onResponseStarted() { + timingInfo.finalNetworkResponseStartTime = coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability); + }, + onHeaders(status, rawHeaders, resume, statusText) { + if (status < 200) { + return; + } + let location = ""; + const headersList = new HeadersList(); + for (let i = 0; i < rawHeaders.length; i += 2) { + headersList.append(bufferToLowerCasedHeaderName(rawHeaders[i]), rawHeaders[i + 1].toString("latin1"), true); + } + location = headersList.get("location", true); + this.body = new Readable({ read: resume }); + const decoders = []; + const willFollow = location && request.redirect === "follow" && redirectStatusSet.has(status); + if (request.method !== "HEAD" && request.method !== "CONNECT" && !nullBodyStatus.includes(status) && !willFollow) { + const contentEncoding = headersList.get("content-encoding", true); + const codings = contentEncoding ? contentEncoding.toLowerCase().split(",") : []; + const maxContentEncodings = 5; + if (codings.length > maxContentEncodings) { + reject(new Error(`too many content-encodings in response: ${codings.length}, maximum allowed is ${maxContentEncodings}`)); + return true; + } + for (let i = codings.length - 1; i >= 0; --i) { + const coding = codings[i].trim(); + if (coding === "x-gzip" || coding === "gzip") { + decoders.push(zlib.createGunzip({ + // Be less strict when decoding compressed responses, since sometimes + // servers send slightly invalid responses that are still accepted + // by common browsers. + // Always using Z_SYNC_FLUSH is what cURL does. + flush: zlib.constants.Z_SYNC_FLUSH, + finishFlush: zlib.constants.Z_SYNC_FLUSH + })); + } else if (coding === "deflate") { + decoders.push(createInflate({ + flush: zlib.constants.Z_SYNC_FLUSH, + finishFlush: zlib.constants.Z_SYNC_FLUSH + })); + } else if (coding === "br") { + decoders.push(zlib.createBrotliDecompress({ + flush: zlib.constants.BROTLI_OPERATION_FLUSH, + finishFlush: zlib.constants.BROTLI_OPERATION_FLUSH + })); + } else { + decoders.length = 0; + break; + } + } + } + const onError = this.onError.bind(this); + resolve({ + status, + statusText, + headersList, + body: decoders.length ? pipeline(this.body, ...decoders, (err) => { + if (err) { + this.onError(err); + } + }).on("error", onError) : this.body.on("error", onError) + }); + return true; + }, + onData(chunk) { + if (fetchParams.controller.dump) { + return; + } + const bytes = chunk; + timingInfo.encodedBodySize += bytes.byteLength; + return this.body.push(bytes); + }, + onComplete() { + if (this.abort) { + fetchParams.controller.off("terminated", this.abort); + } + if (fetchParams.controller.onAborted) { + fetchParams.controller.off("terminated", fetchParams.controller.onAborted); + } + fetchParams.controller.ended = true; + this.body.push(null); + }, + onError(error2) { + if (this.abort) { + fetchParams.controller.off("terminated", this.abort); + } + this.body?.destroy(error2); + fetchParams.controller.terminate(error2); + reject(error2); + }, + onUpgrade(status, rawHeaders, socket) { + if (status !== 101) { + return; + } + const headersList = new HeadersList(); + for (let i = 0; i < rawHeaders.length; i += 2) { + headersList.append(bufferToLowerCasedHeaderName(rawHeaders[i]), rawHeaders[i + 1].toString("latin1"), true); + } + resolve({ + status, + statusText: STATUS_CODES[status], + headersList, + socket + }); + return true; + } + } + )); + } + } + module.exports = { + fetch, + Fetch, + fetching, + finalizeAndReportTiming + }; + } +}); + +// +var require_symbols3 = __commonJS({ + ""(exports, module) { + "use strict"; + module.exports = { + kState: Symbol("FileReader state"), + kResult: Symbol("FileReader result"), + kError: Symbol("FileReader error"), + kLastProgressEventFired: Symbol("FileReader last progress event fired timestamp"), + kEvents: Symbol("FileReader events"), + kAborted: Symbol("FileReader aborted") + }; + } +}); + +// +var require_progressevent = __commonJS({ + ""(exports, module) { + "use strict"; + var { webidl } = require_webidl(); + var kState = Symbol("ProgressEvent state"); + var ProgressEvent = class _ProgressEvent extends Event { + constructor(type, eventInitDict = {}) { + type = webidl.converters.DOMString(type, "ProgressEvent constructor", "type"); + eventInitDict = webidl.converters.ProgressEventInit(eventInitDict ?? {}); + super(type, eventInitDict); + this[kState] = { + lengthComputable: eventInitDict.lengthComputable, + loaded: eventInitDict.loaded, + total: eventInitDict.total + }; + } + get lengthComputable() { + webidl.brandCheck(this, _ProgressEvent); + return this[kState].lengthComputable; + } + get loaded() { + webidl.brandCheck(this, _ProgressEvent); + return this[kState].loaded; + } + get total() { + webidl.brandCheck(this, _ProgressEvent); + return this[kState].total; + } + }; + webidl.converters.ProgressEventInit = webidl.dictionaryConverter([ + { + key: "lengthComputable", + converter: webidl.converters.boolean, + defaultValue: () => false + }, + { + key: "loaded", + converter: webidl.converters["unsigned long long"], + defaultValue: () => 0 + }, + { + key: "total", + converter: webidl.converters["unsigned long long"], + defaultValue: () => 0 + }, + { + key: "bubbles", + converter: webidl.converters.boolean, + defaultValue: () => false + }, + { + key: "cancelable", + converter: webidl.converters.boolean, + defaultValue: () => false + }, + { + key: "composed", + converter: webidl.converters.boolean, + defaultValue: () => false + } + ]); + module.exports = { + ProgressEvent + }; + } +}); + +// +var require_encoding = __commonJS({ + ""(exports, module) { + "use strict"; + function getEncoding(label) { + if (!label) { + return "failure"; + } + switch (label.trim().toLowerCase()) { + case "unicode-1-1-utf-8": + case "unicode11utf8": + case "unicode20utf8": + case "utf-8": + case "utf8": + case "x-unicode20utf8": + return "UTF-8"; + case "866": + case "cp866": + case "csibm866": + case "ibm866": + return "IBM866"; + case "csisolatin2": + case "iso-8859-2": + case "iso-ir-101": + case "iso8859-2": + case "iso88592": + case "iso_8859-2": + case "iso_8859-2:1987": + case "l2": + case "latin2": + return "ISO-8859-2"; + case "csisolatin3": + case "iso-8859-3": + case "iso-ir-109": + case "iso8859-3": + case "iso88593": + case "iso_8859-3": + case "iso_8859-3:1988": + case "l3": + case "latin3": + return "ISO-8859-3"; + case "csisolatin4": + case "iso-8859-4": + case "iso-ir-110": + case "iso8859-4": + case "iso88594": + case "iso_8859-4": + case "iso_8859-4:1988": + case "l4": + case "latin4": + return "ISO-8859-4"; + case "csisolatincyrillic": + case "cyrillic": + case "iso-8859-5": + case "iso-ir-144": + case "iso8859-5": + case "iso88595": + case "iso_8859-5": + case "iso_8859-5:1988": + return "ISO-8859-5"; + case "arabic": + case "asmo-708": + case "csiso88596e": + case "csiso88596i": + case "csisolatinarabic": + case "ecma-114": + case "iso-8859-6": + case "iso-8859-6-e": + case "iso-8859-6-i": + case "iso-ir-127": + case "iso8859-6": + case "iso88596": + case "iso_8859-6": + case "iso_8859-6:1987": + return "ISO-8859-6"; + case "csisolatingreek": + case "ecma-118": + case "elot_928": + case "greek": + case "greek8": + case "iso-8859-7": + case "iso-ir-126": + case "iso8859-7": + case "iso88597": + case "iso_8859-7": + case "iso_8859-7:1987": + case "sun_eu_greek": + return "ISO-8859-7"; + case "csiso88598e": + case "csisolatinhebrew": + case "hebrew": + case "iso-8859-8": + case "iso-8859-8-e": + case "iso-ir-138": + case "iso8859-8": + case "iso88598": + case "iso_8859-8": + case "iso_8859-8:1988": + case "visual": + return "ISO-8859-8"; + case "csiso88598i": + case "iso-8859-8-i": + case "logical": + return "ISO-8859-8-I"; + case "csisolatin6": + case "iso-8859-10": + case "iso-ir-157": + case "iso8859-10": + case "iso885910": + case "l6": + case "latin6": + return "ISO-8859-10"; + case "iso-8859-13": + case "iso8859-13": + case "iso885913": + return "ISO-8859-13"; + case "iso-8859-14": + case "iso8859-14": + case "iso885914": + return "ISO-8859-14"; + case "csisolatin9": + case "iso-8859-15": + case "iso8859-15": + case "iso885915": + case "iso_8859-15": + case "l9": + return "ISO-8859-15"; + case "iso-8859-16": + return "ISO-8859-16"; + case "cskoi8r": + case "koi": + case "koi8": + case "koi8-r": + case "koi8_r": + return "KOI8-R"; + case "koi8-ru": + case "koi8-u": + return "KOI8-U"; + case "csmacintosh": + case "mac": + case "macintosh": + case "x-mac-roman": + return "macintosh"; + case "iso-8859-11": + case "iso8859-11": + case "iso885911": + case "tis-620": + case "windows-874": + return "windows-874"; + case "cp1250": + case "windows-1250": + case "x-cp1250": + return "windows-1250"; + case "cp1251": + case "windows-1251": + case "x-cp1251": + return "windows-1251"; + case "ansi_x3.4-1968": + case "ascii": + case "cp1252": + case "cp819": + case "csisolatin1": + case "ibm819": + case "iso-8859-1": + case "iso-ir-100": + case "iso8859-1": + case "iso88591": + case "iso_8859-1": + case "iso_8859-1:1987": + case "l1": + case "latin1": + case "us-ascii": + case "windows-1252": + case "x-cp1252": + return "windows-1252"; + case "cp1253": + case "windows-1253": + case "x-cp1253": + return "windows-1253"; + case "cp1254": + case "csisolatin5": + case "iso-8859-9": + case "iso-ir-148": + case "iso8859-9": + case "iso88599": + case "iso_8859-9": + case "iso_8859-9:1989": + case "l5": + case "latin5": + case "windows-1254": + case "x-cp1254": + return "windows-1254"; + case "cp1255": + case "windows-1255": + case "x-cp1255": + return "windows-1255"; + case "cp1256": + case "windows-1256": + case "x-cp1256": + return "windows-1256"; + case "cp1257": + case "windows-1257": + case "x-cp1257": + return "windows-1257"; + case "cp1258": + case "windows-1258": + case "x-cp1258": + return "windows-1258"; + case "x-mac-cyrillic": + case "x-mac-ukrainian": + return "x-mac-cyrillic"; + case "chinese": + case "csgb2312": + case "csiso58gb231280": + case "gb2312": + case "gb_2312": + case "gb_2312-80": + case "gbk": + case "iso-ir-58": + case "x-gbk": + return "GBK"; + case "gb18030": + return "gb18030"; + case "big5": + case "big5-hkscs": + case "cn-big5": + case "csbig5": + case "x-x-big5": + return "Big5"; + case "cseucpkdfmtjapanese": + case "euc-jp": + case "x-euc-jp": + return "EUC-JP"; + case "csiso2022jp": + case "iso-2022-jp": + return "ISO-2022-JP"; + case "csshiftjis": + case "ms932": + case "ms_kanji": + case "shift-jis": + case "shift_jis": + case "sjis": + case "windows-31j": + case "x-sjis": + return "Shift_JIS"; + case "cseuckr": + case "csksc56011987": + case "euc-kr": + case "iso-ir-149": + case "korean": + case "ks_c_5601-1987": + case "ks_c_5601-1989": + case "ksc5601": + case "ksc_5601": + case "windows-949": + return "EUC-KR"; + case "csiso2022kr": + case "hz-gb-2312": + case "iso-2022-cn": + case "iso-2022-cn-ext": + case "iso-2022-kr": + case "replacement": + return "replacement"; + case "unicodefffe": + case "utf-16be": + return "UTF-16BE"; + case "csunicode": + case "iso-10646-ucs-2": + case "ucs-2": + case "unicode": + case "unicodefeff": + case "utf-16": + case "utf-16le": + return "UTF-16LE"; + case "x-user-defined": + return "x-user-defined"; + default: + return "failure"; + } + } + module.exports = { + getEncoding + }; + } +}); + +// +var require_util4 = __commonJS({ + ""(exports, module) { + "use strict"; + var { + kState, + kError, + kResult, + kAborted, + kLastProgressEventFired + } = require_symbols3(); + var { ProgressEvent } = require_progressevent(); + var { getEncoding } = require_encoding(); + var { serializeAMimeType, parseMIMEType } = require_data_url(); + var { types } = __require("node:util"); + var { StringDecoder } = __require("string_decoder"); + var { btoa } = __require("node:buffer"); + var staticPropertyDescriptors = { + enumerable: true, + writable: false, + configurable: false + }; + function readOperation(fr, blob, type, encodingName) { + if (fr[kState] === "loading") { + throw new DOMException("Invalid state", "InvalidStateError"); + } + fr[kState] = "loading"; + fr[kResult] = null; + fr[kError] = null; + const stream = blob.stream(); + const reader = stream.getReader(); + const bytes = []; + let chunkPromise = reader.read(); + let isFirstChunk = true; + (async () => { + while (!fr[kAborted]) { + try { + const { done, value } = await chunkPromise; + if (isFirstChunk && !fr[kAborted]) { + queueMicrotask(() => { + fireAProgressEvent("loadstart", fr); + }); + } + isFirstChunk = false; + if (!done && types.isUint8Array(value)) { + bytes.push(value); + if ((fr[kLastProgressEventFired] === void 0 || Date.now() - fr[kLastProgressEventFired] >= 50) && !fr[kAborted]) { + fr[kLastProgressEventFired] = Date.now(); + queueMicrotask(() => { + fireAProgressEvent("progress", fr); + }); + } + chunkPromise = reader.read(); + } else if (done) { + queueMicrotask(() => { + fr[kState] = "done"; + try { + const result = packageData(bytes, type, blob.type, encodingName); + if (fr[kAborted]) { + return; + } + fr[kResult] = result; + fireAProgressEvent("load", fr); + } catch (error2) { + fr[kError] = error2; + fireAProgressEvent("error", fr); + } + if (fr[kState] !== "loading") { + fireAProgressEvent("loadend", fr); + } + }); + break; + } + } catch (error2) { + if (fr[kAborted]) { + return; + } + queueMicrotask(() => { + fr[kState] = "done"; + fr[kError] = error2; + fireAProgressEvent("error", fr); + if (fr[kState] !== "loading") { + fireAProgressEvent("loadend", fr); + } + }); + break; + } + } + })(); + } + function fireAProgressEvent(e, reader) { + const event = new ProgressEvent(e, { + bubbles: false, + cancelable: false + }); + reader.dispatchEvent(event); + } + function packageData(bytes, type, mimeType, encodingName) { + switch (type) { + case "DataURL": { + let dataURL = "data:"; + const parsed = parseMIMEType(mimeType || "application/octet-stream"); + if (parsed !== "failure") { + dataURL += serializeAMimeType(parsed); + } + dataURL += ";base64,"; + const decoder = new StringDecoder("latin1"); + for (const chunk of bytes) { + dataURL += btoa(decoder.write(chunk)); + } + dataURL += btoa(decoder.end()); + return dataURL; + } + case "Text": { + let encoding = "failure"; + if (encodingName) { + encoding = getEncoding(encodingName); + } + if (encoding === "failure" && mimeType) { + const type2 = parseMIMEType(mimeType); + if (type2 !== "failure") { + encoding = getEncoding(type2.parameters.get("charset")); + } + } + if (encoding === "failure") { + encoding = "UTF-8"; + } + return decode(bytes, encoding); + } + case "ArrayBuffer": { + const sequence = combineByteSequences(bytes); + return sequence.buffer; + } + case "BinaryString": { + let binaryString = ""; + const decoder = new StringDecoder("latin1"); + for (const chunk of bytes) { + binaryString += decoder.write(chunk); + } + binaryString += decoder.end(); + return binaryString; + } + } + } + function decode(ioQueue, encoding) { + const bytes = combineByteSequences(ioQueue); + const BOMEncoding = BOMSniffing(bytes); + let slice = 0; + if (BOMEncoding !== null) { + encoding = BOMEncoding; + slice = BOMEncoding === "UTF-8" ? 3 : 2; + } + const sliced = bytes.slice(slice); + return new TextDecoder(encoding).decode(sliced); + } + function BOMSniffing(ioQueue) { + const [a, b, c] = ioQueue; + if (a === 239 && b === 187 && c === 191) { + return "UTF-8"; + } else if (a === 254 && b === 255) { + return "UTF-16BE"; + } else if (a === 255 && b === 254) { + return "UTF-16LE"; + } + return null; + } + function combineByteSequences(sequences) { + const size = sequences.reduce((a, b) => { + return a + b.byteLength; + }, 0); + let offset = 0; + return sequences.reduce((a, b) => { + a.set(b, offset); + offset += b.byteLength; + return a; + }, new Uint8Array(size)); + } + module.exports = { + staticPropertyDescriptors, + readOperation, + fireAProgressEvent + }; + } +}); + +// +var require_filereader = __commonJS({ + ""(exports, module) { + "use strict"; + var { + staticPropertyDescriptors, + readOperation, + fireAProgressEvent + } = require_util4(); + var { + kState, + kError, + kResult, + kEvents, + kAborted + } = require_symbols3(); + var { webidl } = require_webidl(); + var { kEnumerableProperty } = require_util(); + var FileReader = class _FileReader extends EventTarget { + constructor() { + super(); + this[kState] = "empty"; + this[kResult] = null; + this[kError] = null; + this[kEvents] = { + loadend: null, + error: null, + abort: null, + load: null, + progress: null, + loadstart: null + }; + } + /** + * @see https://w3c.github.io/FileAPI/#dfn-readAsArrayBuffer + * @param {import('buffer').Blob} blob + */ + readAsArrayBuffer(blob) { + webidl.brandCheck(this, _FileReader); + webidl.argumentLengthCheck(arguments, 1, "FileReader.readAsArrayBuffer"); + blob = webidl.converters.Blob(blob, { strict: false }); + readOperation(this, blob, "ArrayBuffer"); + } + /** + * @see https://w3c.github.io/FileAPI/#readAsBinaryString + * @param {import('buffer').Blob} blob + */ + readAsBinaryString(blob) { + webidl.brandCheck(this, _FileReader); + webidl.argumentLengthCheck(arguments, 1, "FileReader.readAsBinaryString"); + blob = webidl.converters.Blob(blob, { strict: false }); + readOperation(this, blob, "BinaryString"); + } + /** + * @see https://w3c.github.io/FileAPI/#readAsDataText + * @param {import('buffer').Blob} blob + * @param {string?} encoding + */ + readAsText(blob, encoding = void 0) { + webidl.brandCheck(this, _FileReader); + webidl.argumentLengthCheck(arguments, 1, "FileReader.readAsText"); + blob = webidl.converters.Blob(blob, { strict: false }); + if (encoding !== void 0) { + encoding = webidl.converters.DOMString(encoding, "FileReader.readAsText", "encoding"); + } + readOperation(this, blob, "Text", encoding); + } + /** + * @see https://w3c.github.io/FileAPI/#dfn-readAsDataURL + * @param {import('buffer').Blob} blob + */ + readAsDataURL(blob) { + webidl.brandCheck(this, _FileReader); + webidl.argumentLengthCheck(arguments, 1, "FileReader.readAsDataURL"); + blob = webidl.converters.Blob(blob, { strict: false }); + readOperation(this, blob, "DataURL"); + } + /** + * @see https://w3c.github.io/FileAPI/#dfn-abort + */ + abort() { + if (this[kState] === "empty" || this[kState] === "done") { + this[kResult] = null; + return; + } + if (this[kState] === "loading") { + this[kState] = "done"; + this[kResult] = null; + } + this[kAborted] = true; + fireAProgressEvent("abort", this); + if (this[kState] !== "loading") { + fireAProgressEvent("loadend", this); + } + } + /** + * @see https://w3c.github.io/FileAPI/#dom-filereader-readystate + */ + get readyState() { + webidl.brandCheck(this, _FileReader); + switch (this[kState]) { + case "empty": + return this.EMPTY; + case "loading": + return this.LOADING; + case "done": + return this.DONE; + } + } + /** + * @see https://w3c.github.io/FileAPI/#dom-filereader-result + */ + get result() { + webidl.brandCheck(this, _FileReader); + return this[kResult]; + } + /** + * @see https://w3c.github.io/FileAPI/#dom-filereader-error + */ + get error() { + webidl.brandCheck(this, _FileReader); + return this[kError]; + } + get onloadend() { + webidl.brandCheck(this, _FileReader); + return this[kEvents].loadend; + } + set onloadend(fn) { + webidl.brandCheck(this, _FileReader); + if (this[kEvents].loadend) { + this.removeEventListener("loadend", this[kEvents].loadend); + } + if (typeof fn === "function") { + this[kEvents].loadend = fn; + this.addEventListener("loadend", fn); + } else { + this[kEvents].loadend = null; + } + } + get onerror() { + webidl.brandCheck(this, _FileReader); + return this[kEvents].error; + } + set onerror(fn) { + webidl.brandCheck(this, _FileReader); + if (this[kEvents].error) { + this.removeEventListener("error", this[kEvents].error); + } + if (typeof fn === "function") { + this[kEvents].error = fn; + this.addEventListener("error", fn); + } else { + this[kEvents].error = null; + } + } + get onloadstart() { + webidl.brandCheck(this, _FileReader); + return this[kEvents].loadstart; + } + set onloadstart(fn) { + webidl.brandCheck(this, _FileReader); + if (this[kEvents].loadstart) { + this.removeEventListener("loadstart", this[kEvents].loadstart); + } + if (typeof fn === "function") { + this[kEvents].loadstart = fn; + this.addEventListener("loadstart", fn); + } else { + this[kEvents].loadstart = null; + } + } + get onprogress() { + webidl.brandCheck(this, _FileReader); + return this[kEvents].progress; + } + set onprogress(fn) { + webidl.brandCheck(this, _FileReader); + if (this[kEvents].progress) { + this.removeEventListener("progress", this[kEvents].progress); + } + if (typeof fn === "function") { + this[kEvents].progress = fn; + this.addEventListener("progress", fn); + } else { + this[kEvents].progress = null; + } + } + get onload() { + webidl.brandCheck(this, _FileReader); + return this[kEvents].load; + } + set onload(fn) { + webidl.brandCheck(this, _FileReader); + if (this[kEvents].load) { + this.removeEventListener("load", this[kEvents].load); + } + if (typeof fn === "function") { + this[kEvents].load = fn; + this.addEventListener("load", fn); + } else { + this[kEvents].load = null; + } + } + get onabort() { + webidl.brandCheck(this, _FileReader); + return this[kEvents].abort; + } + set onabort(fn) { + webidl.brandCheck(this, _FileReader); + if (this[kEvents].abort) { + this.removeEventListener("abort", this[kEvents].abort); + } + if (typeof fn === "function") { + this[kEvents].abort = fn; + this.addEventListener("abort", fn); + } else { + this[kEvents].abort = null; + } + } + }; + FileReader.EMPTY = FileReader.prototype.EMPTY = 0; + FileReader.LOADING = FileReader.prototype.LOADING = 1; + FileReader.DONE = FileReader.prototype.DONE = 2; + Object.defineProperties(FileReader.prototype, { + EMPTY: staticPropertyDescriptors, + LOADING: staticPropertyDescriptors, + DONE: staticPropertyDescriptors, + readAsArrayBuffer: kEnumerableProperty, + readAsBinaryString: kEnumerableProperty, + readAsText: kEnumerableProperty, + readAsDataURL: kEnumerableProperty, + abort: kEnumerableProperty, + readyState: kEnumerableProperty, + result: kEnumerableProperty, + error: kEnumerableProperty, + onloadstart: kEnumerableProperty, + onprogress: kEnumerableProperty, + onload: kEnumerableProperty, + onabort: kEnumerableProperty, + onerror: kEnumerableProperty, + onloadend: kEnumerableProperty, + [Symbol.toStringTag]: { + value: "FileReader", + writable: false, + enumerable: false, + configurable: true + } + }); + Object.defineProperties(FileReader, { + EMPTY: staticPropertyDescriptors, + LOADING: staticPropertyDescriptors, + DONE: staticPropertyDescriptors + }); + module.exports = { + FileReader + }; + } +}); + +// +var require_symbols4 = __commonJS({ + ""(exports, module) { + "use strict"; + module.exports = { + kConstruct: require_symbols().kConstruct + }; + } +}); + +// +var require_util5 = __commonJS({ + ""(exports, module) { + "use strict"; + var assert = __require("node:assert"); + var { URLSerializer } = require_data_url(); + var { isValidHeaderName } = require_util2(); + function urlEquals(A, B, excludeFragment = false) { + const serializedA = URLSerializer(A, excludeFragment); + const serializedB = URLSerializer(B, excludeFragment); + return serializedA === serializedB; + } + function getFieldValues(header) { + assert(header !== null); + const values = []; + for (let value of header.split(",")) { + value = value.trim(); + if (isValidHeaderName(value)) { + values.push(value); + } + } + return values; + } + module.exports = { + urlEquals, + getFieldValues + }; + } +}); + +// +var require_cache = __commonJS({ + ""(exports, module) { + "use strict"; + var { kConstruct } = require_symbols4(); + var { urlEquals, getFieldValues } = require_util5(); + var { kEnumerableProperty, isDisturbed } = require_util(); + var { webidl } = require_webidl(); + var { Response, cloneResponse, fromInnerResponse } = require_response(); + var { Request, fromInnerRequest } = require_request2(); + var { kState } = require_symbols2(); + var { fetching } = require_fetch(); + var { urlIsHttpHttpsScheme, createDeferredPromise, readAllBytes } = require_util2(); + var assert = __require("node:assert"); + var Cache = class _Cache { + /** + * @see https://w3c.github.io/ServiceWorker/#dfn-relevant-request-response-list + * @type {requestResponseList} + */ + #relevantRequestResponseList; + constructor() { + if (arguments[0] !== kConstruct) { + webidl.illegalConstructor(); + } + webidl.util.markAsUncloneable(this); + this.#relevantRequestResponseList = arguments[1]; + } + async match(request, options = {}) { + webidl.brandCheck(this, _Cache); + const prefix = "Cache.match"; + webidl.argumentLengthCheck(arguments, 1, prefix); + request = webidl.converters.RequestInfo(request, prefix, "request"); + options = webidl.converters.CacheQueryOptions(options, prefix, "options"); + const p = this.#internalMatchAll(request, options, 1); + if (p.length === 0) { + return; + } + return p[0]; + } + async matchAll(request = void 0, options = {}) { + webidl.brandCheck(this, _Cache); + const prefix = "Cache.matchAll"; + if (request !== void 0) + request = webidl.converters.RequestInfo(request, prefix, "request"); + options = webidl.converters.CacheQueryOptions(options, prefix, "options"); + return this.#internalMatchAll(request, options); + } + async add(request) { + webidl.brandCheck(this, _Cache); + const prefix = "Cache.add"; + webidl.argumentLengthCheck(arguments, 1, prefix); + request = webidl.converters.RequestInfo(request, prefix, "request"); + const requests = [request]; + const responseArrayPromise = this.addAll(requests); + return await responseArrayPromise; + } + async addAll(requests) { + webidl.brandCheck(this, _Cache); + const prefix = "Cache.addAll"; + webidl.argumentLengthCheck(arguments, 1, prefix); + const responsePromises = []; + const requestList = []; + for (let request of requests) { + if (request === void 0) { + throw webidl.errors.conversionFailed({ + prefix, + argument: "Argument 1", + types: ["undefined is not allowed"] + }); + } + request = webidl.converters.RequestInfo(request); + if (typeof request === "string") { + continue; + } + const r = request[kState]; + if (!urlIsHttpHttpsScheme(r.url) || r.method !== "GET") { + throw webidl.errors.exception({ + header: prefix, + message: "Expected http/s scheme when method is not GET." + }); + } + } + const fetchControllers = []; + for (const request of requests) { + const r = new Request(request)[kState]; + if (!urlIsHttpHttpsScheme(r.url)) { + throw webidl.errors.exception({ + header: prefix, + message: "Expected http/s scheme." + }); + } + r.initiator = "fetch"; + r.destination = "subresource"; + requestList.push(r); + const responsePromise = createDeferredPromise(); + fetchControllers.push(fetching({ + request: r, + processResponse(response) { + if (response.type === "error" || response.status === 206 || response.status < 200 || response.status > 299) { + responsePromise.reject(webidl.errors.exception({ + header: "Cache.addAll", + message: "Received an invalid status code or the request failed." + })); + } else if (response.headersList.contains("vary")) { + const fieldValues = getFieldValues(response.headersList.get("vary")); + for (const fieldValue of fieldValues) { + if (fieldValue === "*") { + responsePromise.reject(webidl.errors.exception({ + header: "Cache.addAll", + message: "invalid vary field value" + })); + for (const controller of fetchControllers) { + controller.abort(); + } + return; + } + } + } + }, + processResponseEndOfBody(response) { + if (response.aborted) { + responsePromise.reject(new DOMException("aborted", "AbortError")); + return; + } + responsePromise.resolve(response); + } + })); + responsePromises.push(responsePromise.promise); + } + const p = Promise.all(responsePromises); + const responses = await p; + const operations = []; + let index = 0; + for (const response of responses) { + const operation = { + type: "put", + // 7.3.2 + request: requestList[index], + // 7.3.3 + response + // 7.3.4 + }; + operations.push(operation); + index++; + } + const cacheJobPromise = createDeferredPromise(); + let errorData = null; + try { + this.#batchCacheOperations(operations); + } catch (e) { + errorData = e; + } + queueMicrotask(() => { + if (errorData === null) { + cacheJobPromise.resolve(void 0); + } else { + cacheJobPromise.reject(errorData); + } + }); + return cacheJobPromise.promise; + } + async put(request, response) { + webidl.brandCheck(this, _Cache); + const prefix = "Cache.put"; + webidl.argumentLengthCheck(arguments, 2, prefix); + request = webidl.converters.RequestInfo(request, prefix, "request"); + response = webidl.converters.Response(response, prefix, "response"); + let innerRequest = null; + if (request instanceof Request) { + innerRequest = request[kState]; + } else { + innerRequest = new Request(request)[kState]; + } + if (!urlIsHttpHttpsScheme(innerRequest.url) || innerRequest.method !== "GET") { + throw webidl.errors.exception({ + header: prefix, + message: "Expected an http/s scheme when method is not GET" + }); + } + const innerResponse = response[kState]; + if (innerResponse.status === 206) { + throw webidl.errors.exception({ + header: prefix, + message: "Got 206 status" + }); + } + if (innerResponse.headersList.contains("vary")) { + const fieldValues = getFieldValues(innerResponse.headersList.get("vary")); + for (const fieldValue of fieldValues) { + if (fieldValue === "*") { + throw webidl.errors.exception({ + header: prefix, + message: "Got * vary field value" + }); + } + } + } + if (innerResponse.body && (isDisturbed(innerResponse.body.stream) || innerResponse.body.stream.locked)) { + throw webidl.errors.exception({ + header: prefix, + message: "Response body is locked or disturbed" + }); + } + const clonedResponse = cloneResponse(innerResponse); + const bodyReadPromise = createDeferredPromise(); + if (innerResponse.body != null) { + const stream = innerResponse.body.stream; + const reader = stream.getReader(); + readAllBytes(reader).then(bodyReadPromise.resolve, bodyReadPromise.reject); + } else { + bodyReadPromise.resolve(void 0); + } + const operations = []; + const operation = { + type: "put", + // 14. + request: innerRequest, + // 15. + response: clonedResponse + // 16. + }; + operations.push(operation); + const bytes = await bodyReadPromise.promise; + if (clonedResponse.body != null) { + clonedResponse.body.source = bytes; + } + const cacheJobPromise = createDeferredPromise(); + let errorData = null; + try { + this.#batchCacheOperations(operations); + } catch (e) { + errorData = e; + } + queueMicrotask(() => { + if (errorData === null) { + cacheJobPromise.resolve(); + } else { + cacheJobPromise.reject(errorData); + } + }); + return cacheJobPromise.promise; + } + async delete(request, options = {}) { + webidl.brandCheck(this, _Cache); + const prefix = "Cache.delete"; + webidl.argumentLengthCheck(arguments, 1, prefix); + request = webidl.converters.RequestInfo(request, prefix, "request"); + options = webidl.converters.CacheQueryOptions(options, prefix, "options"); + let r = null; + if (request instanceof Request) { + r = request[kState]; + if (r.method !== "GET" && !options.ignoreMethod) { + return false; + } + } else { + assert(typeof request === "string"); + r = new Request(request)[kState]; + } + const operations = []; + const operation = { + type: "delete", + request: r, + options + }; + operations.push(operation); + const cacheJobPromise = createDeferredPromise(); + let errorData = null; + let requestResponses; + try { + requestResponses = this.#batchCacheOperations(operations); + } catch (e) { + errorData = e; + } + queueMicrotask(() => { + if (errorData === null) { + cacheJobPromise.resolve(!!requestResponses?.length); + } else { + cacheJobPromise.reject(errorData); + } + }); + return cacheJobPromise.promise; + } + /** + * @see https://w3c.github.io/ServiceWorker/#dom-cache-keys + * @param {any} request + * @param {import('../../types/cache').CacheQueryOptions} options + * @returns {Promise} + */ + async keys(request = void 0, options = {}) { + webidl.brandCheck(this, _Cache); + const prefix = "Cache.keys"; + if (request !== void 0) + request = webidl.converters.RequestInfo(request, prefix, "request"); + options = webidl.converters.CacheQueryOptions(options, prefix, "options"); + let r = null; + if (request !== void 0) { + if (request instanceof Request) { + r = request[kState]; + if (r.method !== "GET" && !options.ignoreMethod) { + return []; + } + } else if (typeof request === "string") { + r = new Request(request)[kState]; + } + } + const promise = createDeferredPromise(); + const requests = []; + if (request === void 0) { + for (const requestResponse of this.#relevantRequestResponseList) { + requests.push(requestResponse[0]); + } + } else { + const requestResponses = this.#queryCache(r, options); + for (const requestResponse of requestResponses) { + requests.push(requestResponse[0]); + } + } + queueMicrotask(() => { + const requestList = []; + for (const request2 of requests) { + const requestObject = fromInnerRequest( + request2, + new AbortController().signal, + "immutable" + ); + requestList.push(requestObject); + } + promise.resolve(Object.freeze(requestList)); + }); + return promise.promise; + } + /** + * @see https://w3c.github.io/ServiceWorker/#batch-cache-operations-algorithm + * @param {CacheBatchOperation[]} operations + * @returns {requestResponseList} + */ + #batchCacheOperations(operations) { + const cache = this.#relevantRequestResponseList; + const backupCache = [...cache]; + const addedItems = []; + const resultList = []; + try { + for (const operation of operations) { + if (operation.type !== "delete" && operation.type !== "put") { + throw webidl.errors.exception({ + header: "Cache.#batchCacheOperations", + message: 'operation type does not match "delete" or "put"' + }); + } + if (operation.type === "delete" && operation.response != null) { + throw webidl.errors.exception({ + header: "Cache.#batchCacheOperations", + message: "delete operation should not have an associated response" + }); + } + if (this.#queryCache(operation.request, operation.options, addedItems).length) { + throw new DOMException("???", "InvalidStateError"); + } + let requestResponses; + if (operation.type === "delete") { + requestResponses = this.#queryCache(operation.request, operation.options); + if (requestResponses.length === 0) { + return []; + } + for (const requestResponse of requestResponses) { + const idx = cache.indexOf(requestResponse); + assert(idx !== -1); + cache.splice(idx, 1); + } + } else if (operation.type === "put") { + if (operation.response == null) { + throw webidl.errors.exception({ + header: "Cache.#batchCacheOperations", + message: "put operation should have an associated response" + }); + } + const r = operation.request; + if (!urlIsHttpHttpsScheme(r.url)) { + throw webidl.errors.exception({ + header: "Cache.#batchCacheOperations", + message: "expected http or https scheme" + }); + } + if (r.method !== "GET") { + throw webidl.errors.exception({ + header: "Cache.#batchCacheOperations", + message: "not get method" + }); + } + if (operation.options != null) { + throw webidl.errors.exception({ + header: "Cache.#batchCacheOperations", + message: "options must not be defined" + }); + } + requestResponses = this.#queryCache(operation.request); + for (const requestResponse of requestResponses) { + const idx = cache.indexOf(requestResponse); + assert(idx !== -1); + cache.splice(idx, 1); + } + cache.push([operation.request, operation.response]); + addedItems.push([operation.request, operation.response]); + } + resultList.push([operation.request, operation.response]); + } + return resultList; + } catch (e) { + this.#relevantRequestResponseList.length = 0; + this.#relevantRequestResponseList = backupCache; + throw e; + } + } + /** + * @see https://w3c.github.io/ServiceWorker/#query-cache + * @param {any} requestQuery + * @param {import('../../types/cache').CacheQueryOptions} options + * @param {requestResponseList} targetStorage + * @returns {requestResponseList} + */ + #queryCache(requestQuery, options, targetStorage) { + const resultList = []; + const storage = targetStorage ?? this.#relevantRequestResponseList; + for (const requestResponse of storage) { + const [cachedRequest, cachedResponse] = requestResponse; + if (this.#requestMatchesCachedItem(requestQuery, cachedRequest, cachedResponse, options)) { + resultList.push(requestResponse); + } + } + return resultList; + } + /** + * @see https://w3c.github.io/ServiceWorker/#request-matches-cached-item-algorithm + * @param {any} requestQuery + * @param {any} request + * @param {any | null} response + * @param {import('../../types/cache').CacheQueryOptions | undefined} options + * @returns {boolean} + */ + #requestMatchesCachedItem(requestQuery, request, response = null, options) { + const queryURL = new URL(requestQuery.url); + const cachedURL = new URL(request.url); + if (options?.ignoreSearch) { + cachedURL.search = ""; + queryURL.search = ""; + } + if (!urlEquals(queryURL, cachedURL, true)) { + return false; + } + if (response == null || options?.ignoreVary || !response.headersList.contains("vary")) { + return true; + } + const fieldValues = getFieldValues(response.headersList.get("vary")); + for (const fieldValue of fieldValues) { + if (fieldValue === "*") { + return false; + } + const requestValue = request.headersList.get(fieldValue); + const queryValue = requestQuery.headersList.get(fieldValue); + if (requestValue !== queryValue) { + return false; + } + } + return true; + } + #internalMatchAll(request, options, maxResponses = Infinity) { + let r = null; + if (request !== void 0) { + if (request instanceof Request) { + r = request[kState]; + if (r.method !== "GET" && !options.ignoreMethod) { + return []; + } + } else if (typeof request === "string") { + r = new Request(request)[kState]; + } + } + const responses = []; + if (request === void 0) { + for (const requestResponse of this.#relevantRequestResponseList) { + responses.push(requestResponse[1]); + } + } else { + const requestResponses = this.#queryCache(r, options); + for (const requestResponse of requestResponses) { + responses.push(requestResponse[1]); + } + } + const responseList = []; + for (const response of responses) { + const responseObject = fromInnerResponse(response, "immutable"); + responseList.push(responseObject.clone()); + if (responseList.length >= maxResponses) { + break; + } + } + return Object.freeze(responseList); + } + }; + Object.defineProperties(Cache.prototype, { + [Symbol.toStringTag]: { + value: "Cache", + configurable: true + }, + match: kEnumerableProperty, + matchAll: kEnumerableProperty, + add: kEnumerableProperty, + addAll: kEnumerableProperty, + put: kEnumerableProperty, + delete: kEnumerableProperty, + keys: kEnumerableProperty + }); + var cacheQueryOptionConverters = [ + { + key: "ignoreSearch", + converter: webidl.converters.boolean, + defaultValue: () => false + }, + { + key: "ignoreMethod", + converter: webidl.converters.boolean, + defaultValue: () => false + }, + { + key: "ignoreVary", + converter: webidl.converters.boolean, + defaultValue: () => false + } + ]; + webidl.converters.CacheQueryOptions = webidl.dictionaryConverter(cacheQueryOptionConverters); + webidl.converters.MultiCacheQueryOptions = webidl.dictionaryConverter([ + ...cacheQueryOptionConverters, + { + key: "cacheName", + converter: webidl.converters.DOMString + } + ]); + webidl.converters.Response = webidl.interfaceConverter(Response); + webidl.converters["sequence"] = webidl.sequenceConverter( + webidl.converters.RequestInfo + ); + module.exports = { + Cache + }; + } +}); + +// +var require_cachestorage = __commonJS({ + ""(exports, module) { + "use strict"; + var { kConstruct } = require_symbols4(); + var { Cache } = require_cache(); + var { webidl } = require_webidl(); + var { kEnumerableProperty } = require_util(); + var CacheStorage = class _CacheStorage { + /** + * @see https://w3c.github.io/ServiceWorker/#dfn-relevant-name-to-cache-map + * @type {Map} + */ + async has(cacheName) { + webidl.brandCheck(this, _CacheStorage); + const prefix = "CacheStorage.has"; + webidl.argumentLengthCheck(arguments, 1, prefix); + cacheName = webidl.converters.DOMString(cacheName, prefix, "cacheName"); + return this.#caches.has(cacheName); + } + /** + * @see https://w3c.github.io/ServiceWorker/#dom-cachestorage-open + * @param {string} cacheName + * @returns {Promise} + */ + async open(cacheName) { + webidl.brandCheck(this, _CacheStorage); + const prefix = "CacheStorage.open"; + webidl.argumentLengthCheck(arguments, 1, prefix); + cacheName = webidl.converters.DOMString(cacheName, prefix, "cacheName"); + if (this.#caches.has(cacheName)) { + const cache2 = this.#caches.get(cacheName); + return new Cache(kConstruct, cache2); + } + const cache = []; + this.#caches.set(cacheName, cache); + return new Cache(kConstruct, cache); + } + /** + * @see https://w3c.github.io/ServiceWorker/#cache-storage-delete + * @param {string} cacheName + * @returns {Promise} + */ + async delete(cacheName) { + webidl.brandCheck(this, _CacheStorage); + const prefix = "CacheStorage.delete"; + webidl.argumentLengthCheck(arguments, 1, prefix); + cacheName = webidl.converters.DOMString(cacheName, prefix, "cacheName"); + return this.#caches.delete(cacheName); + } + /** + * @see https://w3c.github.io/ServiceWorker/#cache-storage-keys + * @returns {Promise} + */ + async keys() { + webidl.brandCheck(this, _CacheStorage); + const keys = this.#caches.keys(); + return [...keys]; + } + }; + Object.defineProperties(CacheStorage.prototype, { + [Symbol.toStringTag]: { + value: "CacheStorage", + configurable: true + }, + match: kEnumerableProperty, + has: kEnumerableProperty, + open: kEnumerableProperty, + delete: kEnumerableProperty, + keys: kEnumerableProperty + }); + module.exports = { + CacheStorage + }; + } +}); + +// +var require_constants4 = __commonJS({ + ""(exports, module) { + "use strict"; + var maxAttributeValueSize = 1024; + var maxNameValuePairSize = 4096; + module.exports = { + maxAttributeValueSize, + maxNameValuePairSize + }; + } +}); + +// +var require_util6 = __commonJS({ + ""(exports, module) { + "use strict"; + function isCTLExcludingHtab(value) { + for (let i = 0; i < value.length; ++i) { + const code = value.charCodeAt(i); + if (code >= 0 && code <= 8 || code >= 10 && code <= 31 || code === 127) { + return true; + } + } + return false; + } + function validateCookieName(name) { + for (let i = 0; i < name.length; ++i) { + const code = name.charCodeAt(i); + if (code < 33 || // exclude CTLs (0-31), SP and HT + code > 126 || // exclude non-ascii and DEL + code === 34 || // " + code === 40 || // ( + code === 41 || // ) + code === 60 || // < + code === 62 || // > + code === 64 || // @ + code === 44 || // , + code === 59 || // ; + code === 58 || // : + code === 92 || // \ + code === 47 || // / + code === 91 || // [ + code === 93 || // ] + code === 63 || // ? + code === 61 || // = + code === 123 || // { + code === 125) { + throw new Error("Invalid cookie name"); + } + } + } + function validateCookieValue(value) { + let len = value.length; + let i = 0; + if (value[0] === '"') { + if (len === 1 || value[len - 1] !== '"') { + throw new Error("Invalid cookie value"); + } + --len; + ++i; + } + while (i < len) { + const code = value.charCodeAt(i++); + if (code < 33 || // exclude CTLs (0-31) + code > 126 || // non-ascii and DEL (127) + code === 34 || // " + code === 44 || // , + code === 59 || // ; + code === 92) { + throw new Error("Invalid cookie value"); + } + } + } + function validateCookiePath(path2) { + for (let i = 0; i < path2.length; ++i) { + const code = path2.charCodeAt(i); + if (code < 32 || // exclude CTLs (0-31) + code === 127 || // DEL + code === 59) { + throw new Error("Invalid cookie path"); + } + } + } + function validateCookieDomain(domain) { + if (domain.startsWith("-") || domain.endsWith(".") || domain.endsWith("-")) { + throw new Error("Invalid cookie domain"); + } + } + var IMFDays = [ + "Sun", + "Mon", + "Tue", + "Wed", + "Thu", + "Fri", + "Sat" + ]; + var IMFMonths = [ + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec" + ]; + var IMFPaddedNumbers = Array(61).fill(0).map((_, i) => i.toString().padStart(2, "0")); + function toIMFDate(date) { + if (typeof date === "number") { + date = new Date(date); + } + return `${IMFDays[date.getUTCDay()]}, ${IMFPaddedNumbers[date.getUTCDate()]} ${IMFMonths[date.getUTCMonth()]} ${date.getUTCFullYear()} ${IMFPaddedNumbers[date.getUTCHours()]}:${IMFPaddedNumbers[date.getUTCMinutes()]}:${IMFPaddedNumbers[date.getUTCSeconds()]} GMT`; + } + function validateCookieMaxAge(maxAge) { + if (maxAge < 0) { + throw new Error("Invalid cookie max-age"); + } + } + function stringify(cookie) { + if (cookie.name.length === 0) { + return null; + } + validateCookieName(cookie.name); + validateCookieValue(cookie.value); + const out = [`${cookie.name}=${cookie.value}`]; + if (cookie.name.startsWith("__Secure-")) { + cookie.secure = true; + } + if (cookie.name.startsWith("__Host-")) { + cookie.secure = true; + cookie.domain = null; + cookie.path = "/"; + } + if (cookie.secure) { + out.push("Secure"); + } + if (cookie.httpOnly) { + out.push("HttpOnly"); + } + if (typeof cookie.maxAge === "number") { + validateCookieMaxAge(cookie.maxAge); + out.push(`Max-Age=${cookie.maxAge}`); + } + if (cookie.domain) { + validateCookieDomain(cookie.domain); + out.push(`Domain=${cookie.domain}`); + } + if (cookie.path) { + validateCookiePath(cookie.path); + out.push(`Path=${cookie.path}`); + } + if (cookie.expires && cookie.expires.toString() !== "Invalid Date") { + out.push(`Expires=${toIMFDate(cookie.expires)}`); + } + if (cookie.sameSite) { + out.push(`SameSite=${cookie.sameSite}`); + } + for (const part of cookie.unparsed) { + if (!part.includes("=")) { + throw new Error("Invalid unparsed"); + } + const [key, ...value] = part.split("="); + out.push(`${key.trim()}=${value.join("=")}`); + } + return out.join("; "); + } + module.exports = { + isCTLExcludingHtab, + validateCookieName, + validateCookiePath, + validateCookieValue, + toIMFDate, + stringify + }; + } +}); + +// +var require_parse = __commonJS({ + ""(exports, module) { + "use strict"; + var { maxNameValuePairSize, maxAttributeValueSize } = require_constants4(); + var { isCTLExcludingHtab } = require_util6(); + var { collectASequenceOfCodePointsFast } = require_data_url(); + var assert = __require("node:assert"); + function parseSetCookie(header) { + if (isCTLExcludingHtab(header)) { + return null; + } + let nameValuePair = ""; + let unparsedAttributes = ""; + let name = ""; + let value = ""; + if (header.includes(";")) { + const position = { position: 0 }; + nameValuePair = collectASequenceOfCodePointsFast(";", header, position); + unparsedAttributes = header.slice(position.position); + } else { + nameValuePair = header; + } + if (!nameValuePair.includes("=")) { + value = nameValuePair; + } else { + const position = { position: 0 }; + name = collectASequenceOfCodePointsFast( + "=", + nameValuePair, + position + ); + value = nameValuePair.slice(position.position + 1); + } + name = name.trim(); + value = value.trim(); + if (name.length + value.length > maxNameValuePairSize) { + return null; + } + return { + name, + value, + ...parseUnparsedAttributes(unparsedAttributes) + }; + } + function parseUnparsedAttributes(unparsedAttributes, cookieAttributeList = {}) { + if (unparsedAttributes.length === 0) { + return cookieAttributeList; + } + assert(unparsedAttributes[0] === ";"); + unparsedAttributes = unparsedAttributes.slice(1); + let cookieAv = ""; + if (unparsedAttributes.includes(";")) { + cookieAv = collectASequenceOfCodePointsFast( + ";", + unparsedAttributes, + { position: 0 } + ); + unparsedAttributes = unparsedAttributes.slice(cookieAv.length); + } else { + cookieAv = unparsedAttributes; + unparsedAttributes = ""; + } + let attributeName = ""; + let attributeValue = ""; + if (cookieAv.includes("=")) { + const position = { position: 0 }; + attributeName = collectASequenceOfCodePointsFast( + "=", + cookieAv, + position + ); + attributeValue = cookieAv.slice(position.position + 1); + } else { + attributeName = cookieAv; + } + attributeName = attributeName.trim(); + attributeValue = attributeValue.trim(); + if (attributeValue.length > maxAttributeValueSize) { + return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList); + } + const attributeNameLowercase = attributeName.toLowerCase(); + if (attributeNameLowercase === "expires") { + const expiryTime = new Date(attributeValue); + cookieAttributeList.expires = expiryTime; + } else if (attributeNameLowercase === "max-age") { + const charCode = attributeValue.charCodeAt(0); + if ((charCode < 48 || charCode > 57) && attributeValue[0] !== "-") { + return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList); + } + if (!/^\d+$/.test(attributeValue)) { + return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList); + } + const deltaSeconds = Number(attributeValue); + cookieAttributeList.maxAge = deltaSeconds; + } else if (attributeNameLowercase === "domain") { + let cookieDomain = attributeValue; + if (cookieDomain[0] === ".") { + cookieDomain = cookieDomain.slice(1); + } + cookieDomain = cookieDomain.toLowerCase(); + cookieAttributeList.domain = cookieDomain; + } else if (attributeNameLowercase === "path") { + let cookiePath = ""; + if (attributeValue.length === 0 || attributeValue[0] !== "/") { + cookiePath = "/"; + } else { + cookiePath = attributeValue; + } + cookieAttributeList.path = cookiePath; + } else if (attributeNameLowercase === "secure") { + cookieAttributeList.secure = true; + } else if (attributeNameLowercase === "httponly") { + cookieAttributeList.httpOnly = true; + } else if (attributeNameLowercase === "samesite") { + let enforcement = "Default"; + const attributeValueLowercase = attributeValue.toLowerCase(); + if (attributeValueLowercase.includes("none")) { + enforcement = "None"; + } + if (attributeValueLowercase.includes("strict")) { + enforcement = "Strict"; + } + if (attributeValueLowercase.includes("lax")) { + enforcement = "Lax"; + } + cookieAttributeList.sameSite = enforcement; + } else { + cookieAttributeList.unparsed ??= []; + cookieAttributeList.unparsed.push(`${attributeName}=${attributeValue}`); + } + return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList); + } + module.exports = { + parseSetCookie, + parseUnparsedAttributes + }; + } +}); + +// +var require_cookies = __commonJS({ + ""(exports, module) { + "use strict"; + var { parseSetCookie } = require_parse(); + var { stringify } = require_util6(); + var { webidl } = require_webidl(); + var { Headers: Headers2 } = require_headers(); + function getCookies(headers) { + webidl.argumentLengthCheck(arguments, 1, "getCookies"); + webidl.brandCheck(headers, Headers2, { strict: false }); + const cookie = headers.get("cookie"); + const out = {}; + if (!cookie) { + return out; + } + for (const piece of cookie.split(";")) { + const [name, ...value] = piece.split("="); + out[name.trim()] = value.join("="); + } + return out; + } + function deleteCookie(headers, name, attributes) { + webidl.brandCheck(headers, Headers2, { strict: false }); + const prefix = "deleteCookie"; + webidl.argumentLengthCheck(arguments, 2, prefix); + name = webidl.converters.DOMString(name, prefix, "name"); + attributes = webidl.converters.DeleteCookieAttributes(attributes); + setCookie(headers, { + name, + value: "", + expires: /* @__PURE__ */ new Date(0), + ...attributes + }); + } + function getSetCookies(headers) { + webidl.argumentLengthCheck(arguments, 1, "getSetCookies"); + webidl.brandCheck(headers, Headers2, { strict: false }); + const cookies = headers.getSetCookie(); + if (!cookies) { + return []; + } + return cookies.map((pair) => parseSetCookie(pair)); + } + function setCookie(headers, cookie) { + webidl.argumentLengthCheck(arguments, 2, "setCookie"); + webidl.brandCheck(headers, Headers2, { strict: false }); + cookie = webidl.converters.Cookie(cookie); + const str = stringify(cookie); + if (str) { + headers.append("Set-Cookie", str); + } + } + webidl.converters.DeleteCookieAttributes = webidl.dictionaryConverter([ + { + converter: webidl.nullableConverter(webidl.converters.DOMString), + key: "path", + defaultValue: () => null + }, + { + converter: webidl.nullableConverter(webidl.converters.DOMString), + key: "domain", + defaultValue: () => null + } + ]); + webidl.converters.Cookie = webidl.dictionaryConverter([ + { + converter: webidl.converters.DOMString, + key: "name" + }, + { + converter: webidl.converters.DOMString, + key: "value" + }, + { + converter: webidl.nullableConverter((value) => { + if (typeof value === "number") { + return webidl.converters["unsigned long long"](value); + } + return new Date(value); + }), + key: "expires", + defaultValue: () => null + }, + { + converter: webidl.nullableConverter(webidl.converters["long long"]), + key: "maxAge", + defaultValue: () => null + }, + { + converter: webidl.nullableConverter(webidl.converters.DOMString), + key: "domain", + defaultValue: () => null + }, + { + converter: webidl.nullableConverter(webidl.converters.DOMString), + key: "path", + defaultValue: () => null + }, + { + converter: webidl.nullableConverter(webidl.converters.boolean), + key: "secure", + defaultValue: () => null + }, + { + converter: webidl.nullableConverter(webidl.converters.boolean), + key: "httpOnly", + defaultValue: () => null + }, + { + converter: webidl.converters.USVString, + key: "sameSite", + allowedValues: ["Strict", "Lax", "None"] + }, + { + converter: webidl.sequenceConverter(webidl.converters.DOMString), + key: "unparsed", + defaultValue: () => new Array(0) + } + ]); + module.exports = { + getCookies, + deleteCookie, + getSetCookies, + setCookie + }; + } +}); + +// +var require_events = __commonJS({ + ""(exports, module) { + "use strict"; + var { webidl } = require_webidl(); + var { kEnumerableProperty } = require_util(); + var { kConstruct } = require_symbols(); + var { MessagePort } = __require("node:worker_threads"); + var MessageEvent = class _MessageEvent extends Event { + #eventInit; + constructor(type, eventInitDict = {}) { + if (type === kConstruct) { + super(arguments[1], arguments[2]); + webidl.util.markAsUncloneable(this); + return; + } + const prefix = "MessageEvent constructor"; + webidl.argumentLengthCheck(arguments, 1, prefix); + type = webidl.converters.DOMString(type, prefix, "type"); + eventInitDict = webidl.converters.MessageEventInit(eventInitDict, prefix, "eventInitDict"); + super(type, eventInitDict); + this.#eventInit = eventInitDict; + webidl.util.markAsUncloneable(this); + } + get data() { + webidl.brandCheck(this, _MessageEvent); + return this.#eventInit.data; + } + get origin() { + webidl.brandCheck(this, _MessageEvent); + return this.#eventInit.origin; + } + get lastEventId() { + webidl.brandCheck(this, _MessageEvent); + return this.#eventInit.lastEventId; + } + get source() { + webidl.brandCheck(this, _MessageEvent); + return this.#eventInit.source; + } + get ports() { + webidl.brandCheck(this, _MessageEvent); + if (!Object.isFrozen(this.#eventInit.ports)) { + Object.freeze(this.#eventInit.ports); + } + return this.#eventInit.ports; + } + initMessageEvent(type, bubbles = false, cancelable = false, data = null, origin = "", lastEventId = "", source = null, ports = []) { + webidl.brandCheck(this, _MessageEvent); + webidl.argumentLengthCheck(arguments, 1, "MessageEvent.initMessageEvent"); + return new _MessageEvent(type, { + bubbles, + cancelable, + data, + origin, + lastEventId, + source, + ports + }); + } + static createFastMessageEvent(type, init) { + const messageEvent = new _MessageEvent(kConstruct, type, init); + messageEvent.#eventInit = init; + messageEvent.#eventInit.data ??= null; + messageEvent.#eventInit.origin ??= ""; + messageEvent.#eventInit.lastEventId ??= ""; + messageEvent.#eventInit.source ??= null; + messageEvent.#eventInit.ports ??= []; + return messageEvent; + } + }; + var { createFastMessageEvent } = MessageEvent; + delete MessageEvent.createFastMessageEvent; + var CloseEvent = class _CloseEvent extends Event { + #eventInit; + constructor(type, eventInitDict = {}) { + const prefix = "CloseEvent constructor"; + webidl.argumentLengthCheck(arguments, 1, prefix); + type = webidl.converters.DOMString(type, prefix, "type"); + eventInitDict = webidl.converters.CloseEventInit(eventInitDict); + super(type, eventInitDict); + this.#eventInit = eventInitDict; + webidl.util.markAsUncloneable(this); + } + get wasClean() { + webidl.brandCheck(this, _CloseEvent); + return this.#eventInit.wasClean; + } + get code() { + webidl.brandCheck(this, _CloseEvent); + return this.#eventInit.code; + } + get reason() { + webidl.brandCheck(this, _CloseEvent); + return this.#eventInit.reason; + } + }; + var ErrorEvent = class _ErrorEvent extends Event { + #eventInit; + constructor(type, eventInitDict) { + const prefix = "ErrorEvent constructor"; + webidl.argumentLengthCheck(arguments, 1, prefix); + super(type, eventInitDict); + webidl.util.markAsUncloneable(this); + type = webidl.converters.DOMString(type, prefix, "type"); + eventInitDict = webidl.converters.ErrorEventInit(eventInitDict ?? {}); + this.#eventInit = eventInitDict; + } + get message() { + webidl.brandCheck(this, _ErrorEvent); + return this.#eventInit.message; + } + get filename() { + webidl.brandCheck(this, _ErrorEvent); + return this.#eventInit.filename; + } + get lineno() { + webidl.brandCheck(this, _ErrorEvent); + return this.#eventInit.lineno; + } + get colno() { + webidl.brandCheck(this, _ErrorEvent); + return this.#eventInit.colno; + } + get error() { + webidl.brandCheck(this, _ErrorEvent); + return this.#eventInit.error; + } + }; + Object.defineProperties(MessageEvent.prototype, { + [Symbol.toStringTag]: { + value: "MessageEvent", + configurable: true + }, + data: kEnumerableProperty, + origin: kEnumerableProperty, + lastEventId: kEnumerableProperty, + source: kEnumerableProperty, + ports: kEnumerableProperty, + initMessageEvent: kEnumerableProperty + }); + Object.defineProperties(CloseEvent.prototype, { + [Symbol.toStringTag]: { + value: "CloseEvent", + configurable: true + }, + reason: kEnumerableProperty, + code: kEnumerableProperty, + wasClean: kEnumerableProperty + }); + Object.defineProperties(ErrorEvent.prototype, { + [Symbol.toStringTag]: { + value: "ErrorEvent", + configurable: true + }, + message: kEnumerableProperty, + filename: kEnumerableProperty, + lineno: kEnumerableProperty, + colno: kEnumerableProperty, + error: kEnumerableProperty + }); + webidl.converters.MessagePort = webidl.interfaceConverter(MessagePort); + webidl.converters["sequence"] = webidl.sequenceConverter( + webidl.converters.MessagePort + ); + var eventInit = [ + { + key: "bubbles", + converter: webidl.converters.boolean, + defaultValue: () => false + }, + { + key: "cancelable", + converter: webidl.converters.boolean, + defaultValue: () => false + }, + { + key: "composed", + converter: webidl.converters.boolean, + defaultValue: () => false + } + ]; + webidl.converters.MessageEventInit = webidl.dictionaryConverter([ + ...eventInit, + { + key: "data", + converter: webidl.converters.any, + defaultValue: () => null + }, + { + key: "origin", + converter: webidl.converters.USVString, + defaultValue: () => "" + }, + { + key: "lastEventId", + converter: webidl.converters.DOMString, + defaultValue: () => "" + }, + { + key: "source", + // Node doesn't implement WindowProxy or ServiceWorker, so the only + // valid value for source is a MessagePort. + converter: webidl.nullableConverter(webidl.converters.MessagePort), + defaultValue: () => null + }, + { + key: "ports", + converter: webidl.converters["sequence"], + defaultValue: () => new Array(0) + } + ]); + webidl.converters.CloseEventInit = webidl.dictionaryConverter([ + ...eventInit, + { + key: "wasClean", + converter: webidl.converters.boolean, + defaultValue: () => false + }, + { + key: "code", + converter: webidl.converters["unsigned short"], + defaultValue: () => 0 + }, + { + key: "reason", + converter: webidl.converters.USVString, + defaultValue: () => "" + } + ]); + webidl.converters.ErrorEventInit = webidl.dictionaryConverter([ + ...eventInit, + { + key: "message", + converter: webidl.converters.DOMString, + defaultValue: () => "" + }, + { + key: "filename", + converter: webidl.converters.USVString, + defaultValue: () => "" + }, + { + key: "lineno", + converter: webidl.converters["unsigned long"], + defaultValue: () => 0 + }, + { + key: "colno", + converter: webidl.converters["unsigned long"], + defaultValue: () => 0 + }, + { + key: "error", + converter: webidl.converters.any + } + ]); + module.exports = { + MessageEvent, + CloseEvent, + ErrorEvent, + createFastMessageEvent + }; + } +}); + +// +var require_constants5 = __commonJS({ + ""(exports, module) { + "use strict"; + var uid = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"; + var staticPropertyDescriptors = { + enumerable: true, + writable: false, + configurable: false + }; + var states = { + CONNECTING: 0, + OPEN: 1, + CLOSING: 2, + CLOSED: 3 + }; + var sentCloseFrameState = { + NOT_SENT: 0, + PROCESSING: 1, + SENT: 2 + }; + var opcodes = { + CONTINUATION: 0, + TEXT: 1, + BINARY: 2, + CLOSE: 8, + PING: 9, + PONG: 10 + }; + var maxUnsigned16Bit = 2 ** 16 - 1; + var parserStates = { + INFO: 0, + PAYLOADLENGTH_16: 2, + PAYLOADLENGTH_64: 3, + READ_DATA: 4 + }; + var emptyBuffer = Buffer.allocUnsafe(0); + var sendHints = { + string: 1, + typedArray: 2, + arrayBuffer: 3, + blob: 4 + }; + module.exports = { + uid, + sentCloseFrameState, + staticPropertyDescriptors, + states, + opcodes, + maxUnsigned16Bit, + parserStates, + emptyBuffer, + sendHints + }; + } +}); + +// +var require_symbols5 = __commonJS({ + ""(exports, module) { + "use strict"; + module.exports = { + kWebSocketURL: Symbol("url"), + kReadyState: Symbol("ready state"), + kController: Symbol("controller"), + kResponse: Symbol("response"), + kBinaryType: Symbol("binary type"), + kSentClose: Symbol("sent close"), + kReceivedClose: Symbol("received close"), + kByteParser: Symbol("byte parser") + }; + } +}); + +// +var require_util7 = __commonJS({ + ""(exports, module) { + "use strict"; + var { kReadyState, kController, kResponse, kBinaryType, kWebSocketURL } = require_symbols5(); + var { states, opcodes } = require_constants5(); + var { ErrorEvent, createFastMessageEvent } = require_events(); + var { isUtf8 } = __require("node:buffer"); + var { collectASequenceOfCodePointsFast, removeHTTPWhitespace } = require_data_url(); + function isConnecting(ws) { + return ws[kReadyState] === states.CONNECTING; + } + function isEstablished(ws) { + return ws[kReadyState] === states.OPEN; + } + function isClosing(ws) { + return ws[kReadyState] === states.CLOSING; + } + function isClosed(ws) { + return ws[kReadyState] === states.CLOSED; + } + function fireEvent(e, target, eventFactory = (type, init) => new Event(type, init), eventInitDict = {}) { + const event = eventFactory(e, eventInitDict); + target.dispatchEvent(event); + } + function websocketMessageReceived(ws, type, data) { + if (ws[kReadyState] !== states.OPEN) { + return; + } + let dataForEvent; + if (type === opcodes.TEXT) { + try { + dataForEvent = utf8Decode(data); + } catch { + failWebsocketConnection(ws, "Received invalid UTF-8 in text frame."); + return; + } + } else if (type === opcodes.BINARY) { + if (ws[kBinaryType] === "blob") { + dataForEvent = new Blob([data]); + } else { + dataForEvent = toArrayBuffer(data); + } + } + fireEvent("message", ws, createFastMessageEvent, { + origin: ws[kWebSocketURL].origin, + data: dataForEvent + }); + } + function toArrayBuffer(buffer) { + if (buffer.byteLength === buffer.buffer.byteLength) { + return buffer.buffer; + } + return buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength); + } + function isValidSubprotocol(protocol) { + if (protocol.length === 0) { + return false; + } + for (let i = 0; i < protocol.length; ++i) { + const code = protocol.charCodeAt(i); + if (code < 33 || // CTL, contains SP (0x20) and HT (0x09) + code > 126 || code === 34 || // " + code === 40 || // ( + code === 41 || // ) + code === 44 || // , + code === 47 || // / + code === 58 || // : + code === 59 || // ; + code === 60 || // < + code === 61 || // = + code === 62 || // > + code === 63 || // ? + code === 64 || // @ + code === 91 || // [ + code === 92 || // \ + code === 93 || // ] + code === 123 || // { + code === 125) { + return false; + } + } + return true; + } + function isValidStatusCode(code) { + if (code >= 1e3 && code < 1015) { + return code !== 1004 && // reserved + code !== 1005 && // "MUST NOT be set as a status code" + code !== 1006; + } + return code >= 3e3 && code <= 4999; + } + function failWebsocketConnection(ws, reason) { + const { [kController]: controller, [kResponse]: response } = ws; + controller.abort(); + if (response?.socket && !response.socket.destroyed) { + response.socket.destroy(); + } + if (reason) { + fireEvent("error", ws, (type, init) => new ErrorEvent(type, init), { + error: new Error(reason), + message: reason + }); + } + } + function isControlFrame(opcode) { + return opcode === opcodes.CLOSE || opcode === opcodes.PING || opcode === opcodes.PONG; + } + function isContinuationFrame(opcode) { + return opcode === opcodes.CONTINUATION; + } + function isTextBinaryFrame(opcode) { + return opcode === opcodes.TEXT || opcode === opcodes.BINARY; + } + function isValidOpcode(opcode) { + return isTextBinaryFrame(opcode) || isContinuationFrame(opcode) || isControlFrame(opcode); + } + function parseExtensions(extensions) { + const position = { position: 0 }; + const extensionList = /* @__PURE__ */ new Map(); + while (position.position < extensions.length) { + const pair = collectASequenceOfCodePointsFast(";", extensions, position); + const [name, value = ""] = pair.split("="); + extensionList.set( + removeHTTPWhitespace(name, true, false), + removeHTTPWhitespace(value, false, true) + ); + position.position++; + } + return extensionList; + } + function isValidClientWindowBits(value) { + if (value.length === 0) { + return false; + } + for (let i = 0; i < value.length; i++) { + const byte = value.charCodeAt(i); + if (byte < 48 || byte > 57) { + return false; + } + } + const num = Number.parseInt(value, 10); + return num >= 8 && num <= 15; + } + var hasIntl = typeof process.versions.icu === "string"; + var fatalDecoder = hasIntl ? new TextDecoder("utf-8", { fatal: true }) : void 0; + var utf8Decode = hasIntl ? fatalDecoder.decode.bind(fatalDecoder) : function(buffer) { + if (isUtf8(buffer)) { + return buffer.toString("utf-8"); + } + throw new TypeError("Invalid utf-8 received."); + }; + module.exports = { + isConnecting, + isEstablished, + isClosing, + isClosed, + fireEvent, + isValidSubprotocol, + isValidStatusCode, + failWebsocketConnection, + websocketMessageReceived, + utf8Decode, + isControlFrame, + isContinuationFrame, + isTextBinaryFrame, + isValidOpcode, + parseExtensions, + isValidClientWindowBits + }; + } +}); + +// +var require_frame = __commonJS({ + ""(exports, module) { + "use strict"; + var { maxUnsigned16Bit } = require_constants5(); + var BUFFER_SIZE = 16386; + var crypto; + var buffer = null; + var bufIdx = BUFFER_SIZE; + try { + crypto = __require("node:crypto"); + } catch { + crypto = { + // not full compatibility, but minimum. + randomFillSync: function randomFillSync(buffer2, _offset, _size) { + for (let i = 0; i < buffer2.length; ++i) { + buffer2[i] = Math.random() * 255 | 0; + } + return buffer2; + } + }; + } + function generateMask() { + if (bufIdx === BUFFER_SIZE) { + bufIdx = 0; + crypto.randomFillSync(buffer ??= Buffer.allocUnsafe(BUFFER_SIZE), 0, BUFFER_SIZE); + } + return [buffer[bufIdx++], buffer[bufIdx++], buffer[bufIdx++], buffer[bufIdx++]]; + } + var WebsocketFrameSend = class { + /** + * @param {Buffer|undefined} data + */ + constructor(data) { + this.frameData = data; + } + createFrame(opcode) { + const frameData = this.frameData; + const maskKey = generateMask(); + const bodyLength = frameData?.byteLength ?? 0; + let payloadLength = bodyLength; + let offset = 6; + if (bodyLength > maxUnsigned16Bit) { + offset += 8; + payloadLength = 127; + } else if (bodyLength > 125) { + offset += 2; + payloadLength = 126; + } + const buffer2 = Buffer.allocUnsafe(bodyLength + offset); + buffer2[0] = buffer2[1] = 0; + buffer2[0] |= 128; + buffer2[0] = (buffer2[0] & 240) + opcode; + buffer2[offset - 4] = maskKey[0]; + buffer2[offset - 3] = maskKey[1]; + buffer2[offset - 2] = maskKey[2]; + buffer2[offset - 1] = maskKey[3]; + buffer2[1] = payloadLength; + if (payloadLength === 126) { + buffer2.writeUInt16BE(bodyLength, 2); + } else if (payloadLength === 127) { + buffer2[2] = buffer2[3] = 0; + buffer2.writeUIntBE(bodyLength, 4, 6); + } + buffer2[1] |= 128; + for (let i = 0; i < bodyLength; ++i) { + buffer2[offset + i] = frameData[i] ^ maskKey[i & 3]; + } + return buffer2; + } + }; + module.exports = { + WebsocketFrameSend + }; + } +}); + +// +var require_connection = __commonJS({ + ""(exports, module) { + "use strict"; + var { uid, states, sentCloseFrameState, emptyBuffer, opcodes } = require_constants5(); + var { + kReadyState, + kSentClose, + kByteParser, + kReceivedClose, + kResponse + } = require_symbols5(); + var { fireEvent, failWebsocketConnection, isClosing, isClosed, isEstablished, parseExtensions } = require_util7(); + var { channels } = require_diagnostics(); + var { CloseEvent } = require_events(); + var { makeRequest } = require_request2(); + var { fetching } = require_fetch(); + var { Headers: Headers2, getHeadersList } = require_headers(); + var { getDecodeSplit } = require_util2(); + var { WebsocketFrameSend } = require_frame(); + var crypto; + try { + crypto = __require("node:crypto"); + } catch { + } + function establishWebSocketConnection(url, protocols, client, ws, onEstablish, options) { + const requestURL = url; + requestURL.protocol = url.protocol === "ws:" ? "http:" : "https:"; + const request = makeRequest({ + urlList: [requestURL], + client, + serviceWorkers: "none", + referrer: "no-referrer", + mode: "websocket", + credentials: "include", + cache: "no-store", + redirect: "error" + }); + if (options.headers) { + const headersList = getHeadersList(new Headers2(options.headers)); + request.headersList = headersList; + } + const keyValue = crypto.randomBytes(16).toString("base64"); + request.headersList.append("sec-websocket-key", keyValue); + request.headersList.append("sec-websocket-version", "13"); + for (const protocol of protocols) { + request.headersList.append("sec-websocket-protocol", protocol); + } + const permessageDeflate = "permessage-deflate; client_max_window_bits"; + request.headersList.append("sec-websocket-extensions", permessageDeflate); + const controller = fetching({ + request, + useParallelQueue: true, + dispatcher: options.dispatcher, + processResponse(response) { + if (response.type === "error" || response.status !== 101) { + failWebsocketConnection(ws, "Received network error or non-101 status code."); + return; + } + if (protocols.length !== 0 && !response.headersList.get("Sec-WebSocket-Protocol")) { + failWebsocketConnection(ws, "Server did not respond with sent protocols."); + return; + } + if (response.headersList.get("Upgrade")?.toLowerCase() !== "websocket") { + failWebsocketConnection(ws, 'Server did not set Upgrade header to "websocket".'); + return; + } + if (response.headersList.get("Connection")?.toLowerCase() !== "upgrade") { + failWebsocketConnection(ws, 'Server did not set Connection header to "upgrade".'); + return; + } + const secWSAccept = response.headersList.get("Sec-WebSocket-Accept"); + const digest = crypto.createHash("sha1").update(keyValue + uid).digest("base64"); + if (secWSAccept !== digest) { + failWebsocketConnection(ws, "Incorrect hash received in Sec-WebSocket-Accept header."); + return; + } + const secExtension = response.headersList.get("Sec-WebSocket-Extensions"); + let extensions; + if (secExtension !== null) { + extensions = parseExtensions(secExtension); + if (!extensions.has("permessage-deflate")) { + failWebsocketConnection(ws, "Sec-WebSocket-Extensions header does not match."); + return; + } + } + const secProtocol = response.headersList.get("Sec-WebSocket-Protocol"); + if (secProtocol !== null) { + const requestProtocols = getDecodeSplit("sec-websocket-protocol", request.headersList); + if (!requestProtocols.includes(secProtocol)) { + failWebsocketConnection(ws, "Protocol was not set in the opening handshake."); + return; + } + } + response.socket.on("data", onSocketData); + response.socket.on("close", onSocketClose); + response.socket.on("error", onSocketError); + if (channels.open.hasSubscribers) { + channels.open.publish({ + address: response.socket.address(), + protocol: secProtocol, + extensions: secExtension + }); + } + onEstablish(response, extensions); + } + }); + return controller; + } + function closeWebSocketConnection(ws, code, reason, reasonByteLength) { + if (isClosing(ws) || isClosed(ws)) { + } else if (!isEstablished(ws)) { + failWebsocketConnection(ws, "Connection was closed before it was established."); + ws[kReadyState] = states.CLOSING; + } else if (ws[kSentClose] === sentCloseFrameState.NOT_SENT) { + ws[kSentClose] = sentCloseFrameState.PROCESSING; + const frame = new WebsocketFrameSend(); + if (code !== void 0 && reason === void 0) { + frame.frameData = Buffer.allocUnsafe(2); + frame.frameData.writeUInt16BE(code, 0); + } else if (code !== void 0 && reason !== void 0) { + frame.frameData = Buffer.allocUnsafe(2 + reasonByteLength); + frame.frameData.writeUInt16BE(code, 0); + frame.frameData.write(reason, 2, "utf-8"); + } else { + frame.frameData = emptyBuffer; + } + const socket = ws[kResponse].socket; + socket.write(frame.createFrame(opcodes.CLOSE)); + ws[kSentClose] = sentCloseFrameState.SENT; + ws[kReadyState] = states.CLOSING; + } else { + ws[kReadyState] = states.CLOSING; + } + } + function onSocketData(chunk) { + if (!this.ws[kByteParser].write(chunk)) { + this.pause(); + } + } + function onSocketClose() { + const { ws } = this; + const { [kResponse]: response } = ws; + response.socket.off("data", onSocketData); + response.socket.off("close", onSocketClose); + response.socket.off("error", onSocketError); + const wasClean = ws[kSentClose] === sentCloseFrameState.SENT && ws[kReceivedClose]; + let code = 1005; + let reason = ""; + const result = ws[kByteParser].closingInfo; + if (result && !result.error) { + code = result.code ?? 1005; + reason = result.reason; + } else if (!ws[kReceivedClose]) { + code = 1006; + } + ws[kReadyState] = states.CLOSED; + fireEvent("close", ws, (type, init) => new CloseEvent(type, init), { + wasClean, + code, + reason + }); + if (channels.close.hasSubscribers) { + channels.close.publish({ + websocket: ws, + code, + reason + }); + } + } + function onSocketError(error2) { + const { ws } = this; + ws[kReadyState] = states.CLOSING; + if (channels.socketError.hasSubscribers) { + channels.socketError.publish(error2); + } + this.destroy(); + } + module.exports = { + establishWebSocketConnection, + closeWebSocketConnection + }; + } +}); + +// +var require_permessage_deflate = __commonJS({ + ""(exports, module) { + "use strict"; + var { createInflateRaw, Z_DEFAULT_WINDOWBITS } = __require("node:zlib"); + var { isValidClientWindowBits } = require_util7(); + var { MessageSizeExceededError } = require_errors(); + var tail = Buffer.from([0, 0, 255, 255]); + var kBuffer = Symbol("kBuffer"); + var kLength = Symbol("kLength"); + var PerMessageDeflate = class { + /** @type {import('node:zlib').InflateRaw} */ + #inflate; + #options = {}; + #maxPayloadSize = 0; + /** + * @param {Map} extensions + */ + constructor(extensions, options) { + this.#options.serverNoContextTakeover = extensions.has("server_no_context_takeover"); + this.#options.serverMaxWindowBits = extensions.get("server_max_window_bits"); + this.#maxPayloadSize = options.maxPayloadSize; + } + /** + * Decompress a compressed payload. + * @param {Buffer} chunk Compressed data + * @param {boolean} fin Final fragment flag + * @param {Function} callback Callback function + */ + decompress(chunk, fin, callback) { + if (!this.#inflate) { + let windowBits = Z_DEFAULT_WINDOWBITS; + if (this.#options.serverMaxWindowBits) { + if (!isValidClientWindowBits(this.#options.serverMaxWindowBits)) { + callback(new Error("Invalid server_max_window_bits")); + return; + } + windowBits = Number.parseInt(this.#options.serverMaxWindowBits); + } + try { + this.#inflate = createInflateRaw({ windowBits }); + } catch (err) { + callback(err); + return; + } + this.#inflate[kBuffer] = []; + this.#inflate[kLength] = 0; + this.#inflate.on("data", (data) => { + this.#inflate[kLength] += data.length; + if (this.#maxPayloadSize > 0 && this.#inflate[kLength] > this.#maxPayloadSize) { + callback(new MessageSizeExceededError()); + this.#inflate.removeAllListeners(); + this.#inflate = null; + return; + } + this.#inflate[kBuffer].push(data); + }); + this.#inflate.on("error", (err) => { + this.#inflate = null; + callback(err); + }); + } + this.#inflate.write(chunk); + if (fin) { + this.#inflate.write(tail); + } + this.#inflate.flush(() => { + if (!this.#inflate) { + return; + } + const full = Buffer.concat(this.#inflate[kBuffer], this.#inflate[kLength]); + this.#inflate[kBuffer].length = 0; + this.#inflate[kLength] = 0; + callback(null, full); + }); + } + }; + module.exports = { PerMessageDeflate }; + } +}); + +// +var require_receiver = __commonJS({ + ""(exports, module) { + "use strict"; + var { Writable } = __require("node:stream"); + var assert = __require("node:assert"); + var { parserStates, opcodes, states, emptyBuffer, sentCloseFrameState } = require_constants5(); + var { kReadyState, kSentClose, kResponse, kReceivedClose } = require_symbols5(); + var { channels } = require_diagnostics(); + var { + isValidStatusCode, + isValidOpcode, + failWebsocketConnection, + websocketMessageReceived, + utf8Decode, + isControlFrame, + isTextBinaryFrame, + isContinuationFrame + } = require_util7(); + var { WebsocketFrameSend } = require_frame(); + var { closeWebSocketConnection } = require_connection(); + var { PerMessageDeflate } = require_permessage_deflate(); + var { MessageSizeExceededError } = require_errors(); + var ByteParser = class extends Writable { + #buffers = []; + #fragmentsBytes = 0; + #byteOffset = 0; + #loop = false; + #state = parserStates.INFO; + #info = {}; + #fragments = []; + /** @type {Map} */ + #extensions; + /** @type {number} */ + #maxPayloadSize; + /** + * @param {import('./websocket').WebSocket} ws + * @param {Map|null} extensions + * @param {{ maxPayloadSize?: number }} [options] + */ + constructor(ws, extensions, options = {}) { + super(); + this.ws = ws; + this.#extensions = extensions == null ? /* @__PURE__ */ new Map() : extensions; + this.#maxPayloadSize = options.maxPayloadSize ?? 0; + if (this.#extensions.has("permessage-deflate")) { + this.#extensions.set("permessage-deflate", new PerMessageDeflate(extensions, options)); + } + } + /** + * @param {Buffer} chunk + * @param {() => void} callback + */ + _write(chunk, _, callback) { + this.#buffers.push(chunk); + this.#byteOffset += chunk.length; + this.#loop = true; + this.run(callback); + } + #validatePayloadLength() { + if (this.#maxPayloadSize > 0 && !isControlFrame(this.#info.opcode) && this.#info.payloadLength > this.#maxPayloadSize) { + failWebsocketConnection(this.ws, "Payload size exceeds maximum allowed size"); + return false; + } + return true; + } + /** + * Runs whenever a new chunk is received. + * Callback is called whenever there are no more chunks buffering, + * or not enough bytes are buffered to parse. + */ + run(callback) { + while (this.#loop) { + if (this.#state === parserStates.INFO) { + if (this.#byteOffset < 2) { + return callback(); + } + const buffer = this.consume(2); + const fin = (buffer[0] & 128) !== 0; + const opcode = buffer[0] & 15; + const masked = (buffer[1] & 128) === 128; + const fragmented = !fin && opcode !== opcodes.CONTINUATION; + const payloadLength = buffer[1] & 127; + const rsv1 = buffer[0] & 64; + const rsv2 = buffer[0] & 32; + const rsv3 = buffer[0] & 16; + if (!isValidOpcode(opcode)) { + failWebsocketConnection(this.ws, "Invalid opcode received"); + return callback(); + } + if (masked) { + failWebsocketConnection(this.ws, "Frame cannot be masked"); + return callback(); + } + if (rsv1 !== 0 && !this.#extensions.has("permessage-deflate")) { + failWebsocketConnection(this.ws, "Expected RSV1 to be clear."); + return; + } + if (rsv2 !== 0 || rsv3 !== 0) { + failWebsocketConnection(this.ws, "RSV1, RSV2, RSV3 must be clear"); + return; + } + if (fragmented && !isTextBinaryFrame(opcode)) { + failWebsocketConnection(this.ws, "Invalid frame type was fragmented."); + return; + } + if (isTextBinaryFrame(opcode) && this.#fragments.length > 0) { + failWebsocketConnection(this.ws, "Expected continuation frame"); + return; + } + if (this.#info.fragmented && fragmented) { + failWebsocketConnection(this.ws, "Fragmented frame exceeded 125 bytes."); + return; + } + if ((payloadLength > 125 || fragmented) && isControlFrame(opcode)) { + failWebsocketConnection(this.ws, "Control frame either too large or fragmented"); + return; + } + if (isContinuationFrame(opcode) && this.#fragments.length === 0 && !this.#info.compressed) { + failWebsocketConnection(this.ws, "Unexpected continuation frame"); + return; + } + if (payloadLength <= 125) { + this.#info.payloadLength = payloadLength; + this.#state = parserStates.READ_DATA; + if (!this.#validatePayloadLength()) { + return; + } + } else if (payloadLength === 126) { + this.#state = parserStates.PAYLOADLENGTH_16; + } else if (payloadLength === 127) { + this.#state = parserStates.PAYLOADLENGTH_64; + } + if (isTextBinaryFrame(opcode)) { + this.#info.binaryType = opcode; + this.#info.compressed = rsv1 !== 0; + } + this.#info.opcode = opcode; + this.#info.masked = masked; + this.#info.fin = fin; + this.#info.fragmented = fragmented; + } else if (this.#state === parserStates.PAYLOADLENGTH_16) { + if (this.#byteOffset < 2) { + return callback(); + } + const buffer = this.consume(2); + this.#info.payloadLength = buffer.readUInt16BE(0); + this.#state = parserStates.READ_DATA; + if (!this.#validatePayloadLength()) { + return; + } + } else if (this.#state === parserStates.PAYLOADLENGTH_64) { + if (this.#byteOffset < 8) { + return callback(); + } + const buffer = this.consume(8); + const upper = buffer.readUInt32BE(0); + const lower = buffer.readUInt32BE(4); + if (upper !== 0 || lower > 2 ** 31 - 1) { + failWebsocketConnection(this.ws, "Received payload length > 2^31 bytes."); + return; + } + this.#info.payloadLength = lower; + this.#state = parserStates.READ_DATA; + if (!this.#validatePayloadLength()) { + return; + } + } else if (this.#state === parserStates.READ_DATA) { + if (this.#byteOffset < this.#info.payloadLength) { + return callback(); + } + const body = this.consume(this.#info.payloadLength); + if (isControlFrame(this.#info.opcode)) { + this.#loop = this.parseControlFrame(body); + this.#state = parserStates.INFO; + } else { + if (!this.#info.compressed) { + this.writeFragments(body); + if (this.#maxPayloadSize > 0 && this.#fragmentsBytes > this.#maxPayloadSize) { + failWebsocketConnection(this.ws, new MessageSizeExceededError().message); + return; + } + if (!this.#info.fragmented && this.#info.fin) { + websocketMessageReceived(this.ws, this.#info.binaryType, this.consumeFragments()); + } + this.#state = parserStates.INFO; + } else { + this.#extensions.get("permessage-deflate").decompress( + body, + this.#info.fin, + (error2, data) => { + if (error2) { + failWebsocketConnection(this.ws, error2.message); + return; + } + this.writeFragments(data); + if (this.#maxPayloadSize > 0 && this.#fragmentsBytes > this.#maxPayloadSize) { + failWebsocketConnection(this.ws, new MessageSizeExceededError().message); + return; + } + if (!this.#info.fin) { + this.#state = parserStates.INFO; + this.#loop = true; + this.run(callback); + return; + } + websocketMessageReceived(this.ws, this.#info.binaryType, this.consumeFragments()); + this.#loop = true; + this.#state = parserStates.INFO; + this.run(callback); + } + ); + this.#loop = false; + break; + } + } + } + } + } + /** + * Take n bytes from the buffered Buffers + * @param {number} n + * @returns {Buffer} + */ + consume(n) { + if (n > this.#byteOffset) { + throw new Error("Called consume() before buffers satiated."); + } else if (n === 0) { + return emptyBuffer; + } + if (this.#buffers[0].length === n) { + this.#byteOffset -= this.#buffers[0].length; + return this.#buffers.shift(); + } + const buffer = Buffer.allocUnsafe(n); + let offset = 0; + while (offset !== n) { + const next = this.#buffers[0]; + const { length } = next; + if (length + offset === n) { + buffer.set(this.#buffers.shift(), offset); + break; + } else if (length + offset > n) { + buffer.set(next.subarray(0, n - offset), offset); + this.#buffers[0] = next.subarray(n - offset); + break; + } else { + buffer.set(this.#buffers.shift(), offset); + offset += next.length; + } + } + this.#byteOffset -= n; + return buffer; + } + writeFragments(fragment) { + this.#fragmentsBytes += fragment.length; + this.#fragments.push(fragment); + } + consumeFragments() { + const fragments = this.#fragments; + if (fragments.length === 1) { + this.#fragmentsBytes = 0; + return fragments.shift(); + } + const output = Buffer.concat(fragments, this.#fragmentsBytes); + this.#fragments = []; + this.#fragmentsBytes = 0; + return output; + } + parseCloseBody(data) { + assert(data.length !== 1); + let code; + if (data.length >= 2) { + code = data.readUInt16BE(0); + } + if (code !== void 0 && !isValidStatusCode(code)) { + return { code: 1002, reason: "Invalid status code", error: true }; + } + let reason = data.subarray(2); + if (reason[0] === 239 && reason[1] === 187 && reason[2] === 191) { + reason = reason.subarray(3); + } + try { + reason = utf8Decode(reason); + } catch { + return { code: 1007, reason: "Invalid UTF-8", error: true }; + } + return { code, reason, error: false }; + } + /** + * Parses control frames. + * @param {Buffer} body + */ + parseControlFrame(body) { + const { opcode, payloadLength } = this.#info; + if (opcode === opcodes.CLOSE) { + if (payloadLength === 1) { + failWebsocketConnection(this.ws, "Received close frame with a 1-byte body."); + return false; + } + this.#info.closeInfo = this.parseCloseBody(body); + if (this.#info.closeInfo.error) { + const { code, reason } = this.#info.closeInfo; + closeWebSocketConnection(this.ws, code, reason, reason.length); + failWebsocketConnection(this.ws, reason); + return false; + } + if (this.ws[kSentClose] !== sentCloseFrameState.SENT) { + let body2 = emptyBuffer; + if (this.#info.closeInfo.code) { + body2 = Buffer.allocUnsafe(2); + body2.writeUInt16BE(this.#info.closeInfo.code, 0); + } + const closeFrame = new WebsocketFrameSend(body2); + this.ws[kResponse].socket.write( + closeFrame.createFrame(opcodes.CLOSE), + (err) => { + if (!err) { + this.ws[kSentClose] = sentCloseFrameState.SENT; + } + } + ); + } + this.ws[kReadyState] = states.CLOSING; + this.ws[kReceivedClose] = true; + return false; + } else if (opcode === opcodes.PING) { + if (!this.ws[kReceivedClose]) { + const frame = new WebsocketFrameSend(body); + this.ws[kResponse].socket.write(frame.createFrame(opcodes.PONG)); + if (channels.ping.hasSubscribers) { + channels.ping.publish({ + payload: body + }); + } + } + } else if (opcode === opcodes.PONG) { + if (channels.pong.hasSubscribers) { + channels.pong.publish({ + payload: body + }); + } + } + return true; + } + get closingInfo() { + return this.#info.closeInfo; + } + }; + module.exports = { + ByteParser + }; + } +}); + +// +var require_sender = __commonJS({ + ""(exports, module) { + "use strict"; + var { WebsocketFrameSend } = require_frame(); + var { opcodes, sendHints } = require_constants5(); + var FixedQueue = require_fixed_queue(); + var FastBuffer = Buffer[Symbol.species]; + var SendQueue = class { + /** + * @type {FixedQueue} + */ + #queue = new FixedQueue(); + /** + * @type {boolean} + */ + #running = false; + /** @type {import('node:net').Socket} */ + #socket; + constructor(socket) { + this.#socket = socket; + } + add(item, cb, hint) { + if (hint !== sendHints.blob) { + const frame = createFrame(item, hint); + if (!this.#running) { + this.#socket.write(frame, cb); + } else { + const node2 = { + promise: null, + callback: cb, + frame + }; + this.#queue.push(node2); + } + return; + } + const node = { + promise: item.arrayBuffer().then((ab) => { + node.promise = null; + node.frame = createFrame(ab, hint); + }), + callback: cb, + frame: null + }; + this.#queue.push(node); + if (!this.#running) { + this.#run(); + } + } + async #run() { + this.#running = true; + const queue = this.#queue; + while (!queue.isEmpty()) { + const node = queue.shift(); + if (node.promise !== null) { + await node.promise; + } + this.#socket.write(node.frame, node.callback); + node.callback = node.frame = null; + } + this.#running = false; + } + }; + function createFrame(data, hint) { + return new WebsocketFrameSend(toBuffer(data, hint)).createFrame(hint === sendHints.string ? opcodes.TEXT : opcodes.BINARY); + } + function toBuffer(data, hint) { + switch (hint) { + case sendHints.string: + return Buffer.from(data); + case sendHints.arrayBuffer: + case sendHints.blob: + return new FastBuffer(data); + case sendHints.typedArray: + return new FastBuffer(data.buffer, data.byteOffset, data.byteLength); + } + } + module.exports = { SendQueue }; + } +}); + +// +var require_websocket = __commonJS({ + ""(exports, module) { + "use strict"; + var { webidl } = require_webidl(); + var { URLSerializer } = require_data_url(); + var { environmentSettingsObject } = require_util2(); + var { staticPropertyDescriptors, states, sentCloseFrameState, sendHints } = require_constants5(); + var { + kWebSocketURL, + kReadyState, + kController, + kBinaryType, + kResponse, + kSentClose, + kByteParser + } = require_symbols5(); + var { + isConnecting, + isEstablished, + isClosing, + isValidSubprotocol, + fireEvent + } = require_util7(); + var { establishWebSocketConnection, closeWebSocketConnection } = require_connection(); + var { ByteParser } = require_receiver(); + var { kEnumerableProperty, isBlobLike } = require_util(); + var { getGlobalDispatcher } = require_global2(); + var { types } = __require("node:util"); + var { ErrorEvent, CloseEvent } = require_events(); + var { SendQueue } = require_sender(); + var WebSocket = class _WebSocket extends EventTarget { + #events = { + open: null, + error: null, + close: null, + message: null + }; + #bufferedAmount = 0; + #protocol = ""; + #extensions = ""; + /** @type {SendQueue} */ + #sendQueue; + /** + * @param {string} url + * @param {string|string[]} protocols + */ + constructor(url, protocols = []) { + super(); + webidl.util.markAsUncloneable(this); + const prefix = "WebSocket constructor"; + webidl.argumentLengthCheck(arguments, 1, prefix); + const options = webidl.converters["DOMString or sequence or WebSocketInit"](protocols, prefix, "options"); + url = webidl.converters.USVString(url, prefix, "url"); + protocols = options.protocols; + const baseURL = environmentSettingsObject.settingsObject.baseUrl; + let urlRecord; + try { + urlRecord = new URL(url, baseURL); + } catch (e) { + throw new DOMException(e, "SyntaxError"); + } + if (urlRecord.protocol === "http:") { + urlRecord.protocol = "ws:"; + } else if (urlRecord.protocol === "https:") { + urlRecord.protocol = "wss:"; + } + if (urlRecord.protocol !== "ws:" && urlRecord.protocol !== "wss:") { + throw new DOMException( + `Expected a ws: or wss: protocol, got ${urlRecord.protocol}`, + "SyntaxError" + ); + } + if (urlRecord.hash || urlRecord.href.endsWith("#")) { + throw new DOMException("Got fragment", "SyntaxError"); + } + if (typeof protocols === "string") { + protocols = [protocols]; + } + if (protocols.length !== new Set(protocols.map((p) => p.toLowerCase())).size) { + throw new DOMException("Invalid Sec-WebSocket-Protocol value", "SyntaxError"); + } + if (protocols.length > 0 && !protocols.every((p) => isValidSubprotocol(p))) { + throw new DOMException("Invalid Sec-WebSocket-Protocol value", "SyntaxError"); + } + this[kWebSocketURL] = new URL(urlRecord.href); + const client = environmentSettingsObject.settingsObject; + this[kController] = establishWebSocketConnection( + urlRecord, + protocols, + client, + this, + (response, extensions) => this.#onConnectionEstablished(response, extensions), + options + ); + this[kReadyState] = _WebSocket.CONNECTING; + this[kSentClose] = sentCloseFrameState.NOT_SENT; + this[kBinaryType] = "blob"; + } + /** + * @see https://websockets.spec.whatwg.org/#dom-websocket-close + * @param {number|undefined} code + * @param {string|undefined} reason + */ + close(code = void 0, reason = void 0) { + webidl.brandCheck(this, _WebSocket); + const prefix = "WebSocket.close"; + if (code !== void 0) { + code = webidl.converters["unsigned short"](code, prefix, "code", { clamp: true }); + } + if (reason !== void 0) { + reason = webidl.converters.USVString(reason, prefix, "reason"); + } + if (code !== void 0) { + if (code !== 1e3 && (code < 3e3 || code > 4999)) { + throw new DOMException("invalid code", "InvalidAccessError"); + } + } + let reasonByteLength = 0; + if (reason !== void 0) { + reasonByteLength = Buffer.byteLength(reason); + if (reasonByteLength > 123) { + throw new DOMException( + `Reason must be less than 123 bytes; received ${reasonByteLength}`, + "SyntaxError" + ); + } + } + closeWebSocketConnection(this, code, reason, reasonByteLength); + } + /** + * @see https://websockets.spec.whatwg.org/#dom-websocket-send + * @param {NodeJS.TypedArray|ArrayBuffer|Blob|string} data + */ + send(data) { + webidl.brandCheck(this, _WebSocket); + const prefix = "WebSocket.send"; + webidl.argumentLengthCheck(arguments, 1, prefix); + data = webidl.converters.WebSocketSendData(data, prefix, "data"); + if (isConnecting(this)) { + throw new DOMException("Sent before connected.", "InvalidStateError"); + } + if (!isEstablished(this) || isClosing(this)) { + return; + } + if (typeof data === "string") { + const length = Buffer.byteLength(data); + this.#bufferedAmount += length; + this.#sendQueue.add(data, () => { + this.#bufferedAmount -= length; + }, sendHints.string); + } else if (types.isArrayBuffer(data)) { + this.#bufferedAmount += data.byteLength; + this.#sendQueue.add(data, () => { + this.#bufferedAmount -= data.byteLength; + }, sendHints.arrayBuffer); + } else if (ArrayBuffer.isView(data)) { + this.#bufferedAmount += data.byteLength; + this.#sendQueue.add(data, () => { + this.#bufferedAmount -= data.byteLength; + }, sendHints.typedArray); + } else if (isBlobLike(data)) { + this.#bufferedAmount += data.size; + this.#sendQueue.add(data, () => { + this.#bufferedAmount -= data.size; + }, sendHints.blob); + } + } + get readyState() { + webidl.brandCheck(this, _WebSocket); + return this[kReadyState]; + } + get bufferedAmount() { + webidl.brandCheck(this, _WebSocket); + return this.#bufferedAmount; + } + get url() { + webidl.brandCheck(this, _WebSocket); + return URLSerializer(this[kWebSocketURL]); + } + get extensions() { + webidl.brandCheck(this, _WebSocket); + return this.#extensions; + } + get protocol() { + webidl.brandCheck(this, _WebSocket); + return this.#protocol; + } + get onopen() { + webidl.brandCheck(this, _WebSocket); + return this.#events.open; + } + set onopen(fn) { + webidl.brandCheck(this, _WebSocket); + if (this.#events.open) { + this.removeEventListener("open", this.#events.open); + } + if (typeof fn === "function") { + this.#events.open = fn; + this.addEventListener("open", fn); + } else { + this.#events.open = null; + } + } + get onerror() { + webidl.brandCheck(this, _WebSocket); + return this.#events.error; + } + set onerror(fn) { + webidl.brandCheck(this, _WebSocket); + if (this.#events.error) { + this.removeEventListener("error", this.#events.error); + } + if (typeof fn === "function") { + this.#events.error = fn; + this.addEventListener("error", fn); + } else { + this.#events.error = null; + } + } + get onclose() { + webidl.brandCheck(this, _WebSocket); + return this.#events.close; + } + set onclose(fn) { + webidl.brandCheck(this, _WebSocket); + if (this.#events.close) { + this.removeEventListener("close", this.#events.close); + } + if (typeof fn === "function") { + this.#events.close = fn; + this.addEventListener("close", fn); + } else { + this.#events.close = null; + } + } + get onmessage() { + webidl.brandCheck(this, _WebSocket); + return this.#events.message; + } + set onmessage(fn) { + webidl.brandCheck(this, _WebSocket); + if (this.#events.message) { + this.removeEventListener("message", this.#events.message); + } + if (typeof fn === "function") { + this.#events.message = fn; + this.addEventListener("message", fn); + } else { + this.#events.message = null; + } + } + get binaryType() { + webidl.brandCheck(this, _WebSocket); + return this[kBinaryType]; + } + set binaryType(type) { + webidl.brandCheck(this, _WebSocket); + if (type !== "blob" && type !== "arraybuffer") { + this[kBinaryType] = "blob"; + } else { + this[kBinaryType] = type; + } + } + /** + * @see https://websockets.spec.whatwg.org/#feedback-from-the-protocol + */ + #onConnectionEstablished(response, parsedExtensions) { + this[kResponse] = response; + const maxPayloadSize = this[kController]?.dispatcher?.webSocketOptions?.maxPayloadSize; + const parser = new ByteParser(this, parsedExtensions, { + maxPayloadSize + }); + parser.on("drain", onParserDrain); + parser.on("error", onParserError.bind(this)); + response.socket.ws = this; + this[kByteParser] = parser; + this.#sendQueue = new SendQueue(response.socket); + this[kReadyState] = states.OPEN; + const extensions = response.headersList.get("sec-websocket-extensions"); + if (extensions !== null) { + this.#extensions = extensions; + } + const protocol = response.headersList.get("sec-websocket-protocol"); + if (protocol !== null) { + this.#protocol = protocol; + } + fireEvent("open", this); + } + }; + WebSocket.CONNECTING = WebSocket.prototype.CONNECTING = states.CONNECTING; + WebSocket.OPEN = WebSocket.prototype.OPEN = states.OPEN; + WebSocket.CLOSING = WebSocket.prototype.CLOSING = states.CLOSING; + WebSocket.CLOSED = WebSocket.prototype.CLOSED = states.CLOSED; + Object.defineProperties(WebSocket.prototype, { + CONNECTING: staticPropertyDescriptors, + OPEN: staticPropertyDescriptors, + CLOSING: staticPropertyDescriptors, + CLOSED: staticPropertyDescriptors, + url: kEnumerableProperty, + readyState: kEnumerableProperty, + bufferedAmount: kEnumerableProperty, + onopen: kEnumerableProperty, + onerror: kEnumerableProperty, + onclose: kEnumerableProperty, + close: kEnumerableProperty, + onmessage: kEnumerableProperty, + binaryType: kEnumerableProperty, + send: kEnumerableProperty, + extensions: kEnumerableProperty, + protocol: kEnumerableProperty, + [Symbol.toStringTag]: { + value: "WebSocket", + writable: false, + enumerable: false, + configurable: true + } + }); + Object.defineProperties(WebSocket, { + CONNECTING: staticPropertyDescriptors, + OPEN: staticPropertyDescriptors, + CLOSING: staticPropertyDescriptors, + CLOSED: staticPropertyDescriptors + }); + webidl.converters["sequence"] = webidl.sequenceConverter( + webidl.converters.DOMString + ); + webidl.converters["DOMString or sequence"] = function(V, prefix, argument) { + if (webidl.util.Type(V) === "Object" && Symbol.iterator in V) { + return webidl.converters["sequence"](V); + } + return webidl.converters.DOMString(V, prefix, argument); + }; + webidl.converters.WebSocketInit = webidl.dictionaryConverter([ + { + key: "protocols", + converter: webidl.converters["DOMString or sequence"], + defaultValue: () => new Array(0) + }, + { + key: "dispatcher", + converter: webidl.converters.any, + defaultValue: () => getGlobalDispatcher() + }, + { + key: "headers", + converter: webidl.nullableConverter(webidl.converters.HeadersInit) + } + ]); + webidl.converters["DOMString or sequence or WebSocketInit"] = function(V) { + if (webidl.util.Type(V) === "Object" && !(Symbol.iterator in V)) { + return webidl.converters.WebSocketInit(V); + } + return { protocols: webidl.converters["DOMString or sequence"](V) }; + }; + webidl.converters.WebSocketSendData = function(V) { + if (webidl.util.Type(V) === "Object") { + if (isBlobLike(V)) { + return webidl.converters.Blob(V, { strict: false }); + } + if (ArrayBuffer.isView(V) || types.isArrayBuffer(V)) { + return webidl.converters.BufferSource(V); + } + } + return webidl.converters.USVString(V); + }; + function onParserDrain() { + this.ws[kResponse].socket.resume(); + } + function onParserError(err) { + let message; + let code; + if (err instanceof CloseEvent) { + message = err.reason; + code = err.code; + } else { + message = err.message; + } + fireEvent("error", this, () => new ErrorEvent("error", { error: err, message })); + closeWebSocketConnection(this, code); + } + module.exports = { + WebSocket + }; + } +}); + +// +var require_util8 = __commonJS({ + ""(exports, module) { + "use strict"; + function isValidLastEventId(value) { + return value.indexOf("\0") === -1; + } + function isASCIINumber(value) { + if (value.length === 0) + return false; + for (let i = 0; i < value.length; i++) { + if (value.charCodeAt(i) < 48 || value.charCodeAt(i) > 57) + return false; + } + return true; + } + function delay(ms) { + return new Promise((resolve) => { + setTimeout(resolve, ms).unref(); + }); + } + module.exports = { + isValidLastEventId, + isASCIINumber, + delay + }; + } +}); + +// +var require_eventsource_stream = __commonJS({ + ""(exports, module) { + "use strict"; + var { Transform } = __require("node:stream"); + var { isASCIINumber, isValidLastEventId } = require_util8(); + var BOM = [239, 187, 191]; + var LF = 10; + var CR = 13; + var COLON = 58; + var SPACE = 32; + var EventSourceStream = class extends Transform { + /** + * @type {eventSourceSettings} + */ + state = null; + /** + * Leading byte-order-mark check. + * @type {boolean} + */ + checkBOM = true; + /** + * @type {boolean} + */ + crlfCheck = false; + /** + * @type {boolean} + */ + eventEndCheck = false; + /** + * @type {Buffer} + */ + buffer = null; + pos = 0; + event = { + data: void 0, + event: void 0, + id: void 0, + retry: void 0 + }; + /** + * @param {object} options + * @param {eventSourceSettings} options.eventSourceSettings + * @param {Function} [options.push] + */ + constructor(options = {}) { + options.readableObjectMode = true; + super(options); + this.state = options.eventSourceSettings || {}; + if (options.push) { + this.push = options.push; + } + } + /** + * @param {Buffer} chunk + * @param {string} _encoding + * @param {Function} callback + * @returns {void} + */ + _transform(chunk, _encoding, callback) { + if (chunk.length === 0) { + callback(); + return; + } + if (this.buffer) { + this.buffer = Buffer.concat([this.buffer, chunk]); + } else { + this.buffer = chunk; + } + if (this.checkBOM) { + switch (this.buffer.length) { + case 1: + if (this.buffer[0] === BOM[0]) { + callback(); + return; + } + this.checkBOM = false; + callback(); + return; + case 2: + if (this.buffer[0] === BOM[0] && this.buffer[1] === BOM[1]) { + callback(); + return; + } + this.checkBOM = false; + break; + case 3: + if (this.buffer[0] === BOM[0] && this.buffer[1] === BOM[1] && this.buffer[2] === BOM[2]) { + this.buffer = Buffer.alloc(0); + this.checkBOM = false; + callback(); + return; + } + this.checkBOM = false; + break; + default: + if (this.buffer[0] === BOM[0] && this.buffer[1] === BOM[1] && this.buffer[2] === BOM[2]) { + this.buffer = this.buffer.subarray(3); + } + this.checkBOM = false; + break; + } + } + while (this.pos < this.buffer.length) { + if (this.eventEndCheck) { + if (this.crlfCheck) { + if (this.buffer[this.pos] === LF) { + this.buffer = this.buffer.subarray(this.pos + 1); + this.pos = 0; + this.crlfCheck = false; + continue; + } + this.crlfCheck = false; + } + if (this.buffer[this.pos] === LF || this.buffer[this.pos] === CR) { + if (this.buffer[this.pos] === CR) { + this.crlfCheck = true; + } + this.buffer = this.buffer.subarray(this.pos + 1); + this.pos = 0; + if (this.event.data !== void 0 || this.event.event || this.event.id || this.event.retry) { + this.processEvent(this.event); + } + this.clearEvent(); + continue; + } + this.eventEndCheck = false; + continue; + } + if (this.buffer[this.pos] === LF || this.buffer[this.pos] === CR) { + if (this.buffer[this.pos] === CR) { + this.crlfCheck = true; + } + this.parseLine(this.buffer.subarray(0, this.pos), this.event); + this.buffer = this.buffer.subarray(this.pos + 1); + this.pos = 0; + this.eventEndCheck = true; + continue; + } + this.pos++; + } + callback(); + } + /** + * @param {Buffer} line + * @param {EventStreamEvent} event + */ + parseLine(line, event) { + if (line.length === 0) { + return; + } + const colonPosition = line.indexOf(COLON); + if (colonPosition === 0) { + return; + } + let field = ""; + let value = ""; + if (colonPosition !== -1) { + field = line.subarray(0, colonPosition).toString("utf8"); + let valueStart = colonPosition + 1; + if (line[valueStart] === SPACE) { + ++valueStart; + } + value = line.subarray(valueStart).toString("utf8"); + } else { + field = line.toString("utf8"); + value = ""; + } + switch (field) { + case "data": + if (event[field] === void 0) { + event[field] = value; + } else { + event[field] += ` +${value}`; + } + break; + case "retry": + if (isASCIINumber(value)) { + event[field] = value; + } + break; + case "id": + if (isValidLastEventId(value)) { + event[field] = value; + } + break; + case "event": + if (value.length > 0) { + event[field] = value; + } + break; + } + } + /** + * @param {EventSourceStreamEvent} event + */ + processEvent(event) { + if (event.retry && isASCIINumber(event.retry)) { + this.state.reconnectionTime = parseInt(event.retry, 10); + } + if (event.id && isValidLastEventId(event.id)) { + this.state.lastEventId = event.id; + } + if (event.data !== void 0) { + this.push({ + type: event.event || "message", + options: { + data: event.data, + lastEventId: this.state.lastEventId, + origin: this.state.origin + } + }); + } + } + clearEvent() { + this.event = { + data: void 0, + event: void 0, + id: void 0, + retry: void 0 + }; + } + }; + module.exports = { + EventSourceStream + }; + } +}); + +// +var require_eventsource = __commonJS({ + ""(exports, module) { + "use strict"; + var { pipeline } = __require("node:stream"); + var { fetching } = require_fetch(); + var { makeRequest } = require_request2(); + var { webidl } = require_webidl(); + var { EventSourceStream } = require_eventsource_stream(); + var { parseMIMEType } = require_data_url(); + var { createFastMessageEvent } = require_events(); + var { isNetworkError } = require_response(); + var { delay } = require_util8(); + var { kEnumerableProperty } = require_util(); + var { environmentSettingsObject } = require_util2(); + var experimentalWarned = false; + var defaultReconnectionTime = 3e3; + var CONNECTING = 0; + var OPEN = 1; + var CLOSED = 2; + var ANONYMOUS = "anonymous"; + var USE_CREDENTIALS = "use-credentials"; + var EventSource = class _EventSource extends EventTarget { + #events = { + open: null, + error: null, + message: null + }; + #url = null; + #withCredentials = false; + #readyState = CONNECTING; + #request = null; + #controller = null; + #dispatcher; + /** + * @type {import('./eventsource-stream').eventSourceSettings} + */ + #state; + /** + * Creates a new EventSource object. + * @param {string} url + * @param {EventSourceInit} [eventSourceInitDict] + * @see https://html.spec.whatwg.org/multipage/server-sent-events.html#the-eventsource-interface + */ + constructor(url, eventSourceInitDict = {}) { + super(); + webidl.util.markAsUncloneable(this); + const prefix = "EventSource constructor"; + webidl.argumentLengthCheck(arguments, 1, prefix); + if (!experimentalWarned) { + experimentalWarned = true; + process.emitWarning("EventSource is experimental, expect them to change at any time.", { + code: "UNDICI-ES" + }); + } + url = webidl.converters.USVString(url, prefix, "url"); + eventSourceInitDict = webidl.converters.EventSourceInitDict(eventSourceInitDict, prefix, "eventSourceInitDict"); + this.#dispatcher = eventSourceInitDict.dispatcher; + this.#state = { + lastEventId: "", + reconnectionTime: defaultReconnectionTime + }; + const settings = environmentSettingsObject; + let urlRecord; + try { + urlRecord = new URL(url, settings.settingsObject.baseUrl); + this.#state.origin = urlRecord.origin; + } catch (e) { + throw new DOMException(e, "SyntaxError"); + } + this.#url = urlRecord.href; + let corsAttributeState = ANONYMOUS; + if (eventSourceInitDict.withCredentials) { + corsAttributeState = USE_CREDENTIALS; + this.#withCredentials = true; + } + const initRequest = { + redirect: "follow", + keepalive: true, + // @see https://html.spec.whatwg.org/multipage/urls-and-fetching.html#cors-settings-attributes + mode: "cors", + credentials: corsAttributeState === "anonymous" ? "same-origin" : "omit", + referrer: "no-referrer" + }; + initRequest.client = environmentSettingsObject.settingsObject; + initRequest.headersList = [["accept", { name: "accept", value: "text/event-stream" }]]; + initRequest.cache = "no-store"; + initRequest.initiator = "other"; + initRequest.urlList = [new URL(this.#url)]; + this.#request = makeRequest(initRequest); + this.#connect(); + } + /** + * Returns the state of this EventSource object's connection. It can have the + * values described below. + * @returns {0|1|2} + * @readonly + */ + get readyState() { + return this.#readyState; + } + /** + * Returns the URL providing the event stream. + * @readonly + * @returns {string} + */ + get url() { + return this.#url; + } + /** + * Returns a boolean indicating whether the EventSource object was + * instantiated with CORS credentials set (true), or not (false, the default). + */ + get withCredentials() { + return this.#withCredentials; + } + #connect() { + if (this.#readyState === CLOSED) + return; + this.#readyState = CONNECTING; + const fetchParams = { + request: this.#request, + dispatcher: this.#dispatcher + }; + const processEventSourceEndOfBody = (response) => { + if (isNetworkError(response)) { + this.dispatchEvent(new Event("error")); + this.close(); + } + this.#reconnect(); + }; + fetchParams.processResponseEndOfBody = processEventSourceEndOfBody; + fetchParams.processResponse = (response) => { + if (isNetworkError(response)) { + if (response.aborted) { + this.close(); + this.dispatchEvent(new Event("error")); + return; + } else { + this.#reconnect(); + return; + } + } + const contentType = response.headersList.get("content-type", true); + const mimeType = contentType !== null ? parseMIMEType(contentType) : "failure"; + const contentTypeValid = mimeType !== "failure" && mimeType.essence === "text/event-stream"; + if (response.status !== 200 || contentTypeValid === false) { + this.close(); + this.dispatchEvent(new Event("error")); + return; + } + this.#readyState = OPEN; + this.dispatchEvent(new Event("open")); + this.#state.origin = response.urlList[response.urlList.length - 1].origin; + const eventSourceStream = new EventSourceStream({ + eventSourceSettings: this.#state, + push: (event) => { + this.dispatchEvent(createFastMessageEvent( + event.type, + event.options + )); + } + }); + pipeline( + response.body.stream, + eventSourceStream, + (error2) => { + if (error2?.aborted === false) { + this.close(); + this.dispatchEvent(new Event("error")); + } + } + ); + }; + this.#controller = fetching(fetchParams); + } + /** + * @see https://html.spec.whatwg.org/multipage/server-sent-events.html#sse-processing-model + * @returns {Promise} + */ + async #reconnect() { + if (this.#readyState === CLOSED) + return; + this.#readyState = CONNECTING; + this.dispatchEvent(new Event("error")); + await delay(this.#state.reconnectionTime); + if (this.#readyState !== CONNECTING) + return; + if (this.#state.lastEventId.length) { + this.#request.headersList.set("last-event-id", this.#state.lastEventId, true); + } + this.#connect(); + } + /** + * Closes the connection, if any, and sets the readyState attribute to + * CLOSED. + */ + close() { + webidl.brandCheck(this, _EventSource); + if (this.#readyState === CLOSED) + return; + this.#readyState = CLOSED; + this.#controller.abort(); + this.#request = null; + } + get onopen() { + return this.#events.open; + } + set onopen(fn) { + if (this.#events.open) { + this.removeEventListener("open", this.#events.open); + } + if (typeof fn === "function") { + this.#events.open = fn; + this.addEventListener("open", fn); + } else { + this.#events.open = null; + } + } + get onmessage() { + return this.#events.message; + } + set onmessage(fn) { + if (this.#events.message) { + this.removeEventListener("message", this.#events.message); + } + if (typeof fn === "function") { + this.#events.message = fn; + this.addEventListener("message", fn); + } else { + this.#events.message = null; + } + } + get onerror() { + return this.#events.error; + } + set onerror(fn) { + if (this.#events.error) { + this.removeEventListener("error", this.#events.error); + } + if (typeof fn === "function") { + this.#events.error = fn; + this.addEventListener("error", fn); + } else { + this.#events.error = null; + } + } + }; + var constantsPropertyDescriptors = { + CONNECTING: { + __proto__: null, + configurable: false, + enumerable: true, + value: CONNECTING, + writable: false + }, + OPEN: { + __proto__: null, + configurable: false, + enumerable: true, + value: OPEN, + writable: false + }, + CLOSED: { + __proto__: null, + configurable: false, + enumerable: true, + value: CLOSED, + writable: false + } + }; + Object.defineProperties(EventSource, constantsPropertyDescriptors); + Object.defineProperties(EventSource.prototype, constantsPropertyDescriptors); + Object.defineProperties(EventSource.prototype, { + close: kEnumerableProperty, + onerror: kEnumerableProperty, + onmessage: kEnumerableProperty, + onopen: kEnumerableProperty, + readyState: kEnumerableProperty, + url: kEnumerableProperty, + withCredentials: kEnumerableProperty + }); + webidl.converters.EventSourceInitDict = webidl.dictionaryConverter([ + { + key: "withCredentials", + converter: webidl.converters.boolean, + defaultValue: () => false + }, + { + key: "dispatcher", + // undici only + converter: webidl.converters.any + } + ]); + module.exports = { + EventSource, + defaultReconnectionTime + }; + } +}); + +// +var require_undici = __commonJS({ + ""(exports, module) { + "use strict"; + var Client = require_client(); + var Dispatcher = require_dispatcher(); + var Pool = require_pool(); + var BalancedPool = require_balanced_pool(); + var Agent = require_agent(); + var ProxyAgent2 = require_proxy_agent(); + var EnvHttpProxyAgent = require_env_http_proxy_agent(); + var RetryAgent = require_retry_agent(); + var errors = require_errors(); + var util = require_util(); + var { InvalidArgumentError } = errors; + var api = require_api(); + var buildConnector = require_connect(); + var MockClient = require_mock_client(); + var MockAgent = require_mock_agent(); + var MockPool = require_mock_pool(); + var mockErrors = require_mock_errors(); + var RetryHandler = require_retry_handler(); + var { getGlobalDispatcher, setGlobalDispatcher } = require_global2(); + var DecoratorHandler = require_decorator_handler(); + var RedirectHandler = require_redirect_handler(); + var createRedirectInterceptor = require_redirect_interceptor(); + Object.assign(Dispatcher.prototype, api); + module.exports.Dispatcher = Dispatcher; + module.exports.Client = Client; + module.exports.Pool = Pool; + module.exports.BalancedPool = BalancedPool; + module.exports.Agent = Agent; + module.exports.ProxyAgent = ProxyAgent2; + module.exports.EnvHttpProxyAgent = EnvHttpProxyAgent; + module.exports.RetryAgent = RetryAgent; + module.exports.RetryHandler = RetryHandler; + module.exports.DecoratorHandler = DecoratorHandler; + module.exports.RedirectHandler = RedirectHandler; + module.exports.createRedirectInterceptor = createRedirectInterceptor; + module.exports.interceptors = { + redirect: require_redirect(), + retry: require_retry(), + dump: require_dump(), + dns: require_dns() + }; + module.exports.buildConnector = buildConnector; + module.exports.errors = errors; + module.exports.util = { + parseHeaders: util.parseHeaders, + headerNameToString: util.headerNameToString + }; + function makeDispatcher(fn) { + return (url, opts, handler) => { + if (typeof opts === "function") { + handler = opts; + opts = null; + } + if (!url || typeof url !== "string" && typeof url !== "object" && !(url instanceof URL)) { + throw new InvalidArgumentError("invalid url"); + } + if (opts != null && typeof opts !== "object") { + throw new InvalidArgumentError("invalid opts"); + } + if (opts && opts.path != null) { + if (typeof opts.path !== "string") { + throw new InvalidArgumentError("invalid opts.path"); + } + let path2 = opts.path; + if (!opts.path.startsWith("/")) { + path2 = `/${path2}`; + } + url = new URL(util.parseOrigin(url).origin + path2); + } else { + if (!opts) { + opts = typeof url === "object" ? url : {}; + } + url = util.parseURL(url); + } + const { agent, dispatcher = getGlobalDispatcher() } = opts; + if (agent) { + throw new InvalidArgumentError("unsupported opts.agent. Did you mean opts.client?"); + } + return fn.call(dispatcher, { + ...opts, + origin: url.origin, + path: url.search ? `${url.pathname}${url.search}` : url.pathname, + method: opts.method || (opts.body ? "PUT" : "GET") + }, handler); + }; + } + module.exports.setGlobalDispatcher = setGlobalDispatcher; + module.exports.getGlobalDispatcher = getGlobalDispatcher; + var fetchImpl = require_fetch().fetch; + module.exports.fetch = async function fetch(init, options = void 0) { + try { + return await fetchImpl(init, options); + } catch (err) { + if (err && typeof err === "object") { + Error.captureStackTrace(err); + } + throw err; + } + }; + module.exports.Headers = require_headers().Headers; + module.exports.Response = require_response().Response; + module.exports.Request = require_request2().Request; + module.exports.FormData = require_formdata().FormData; + module.exports.File = globalThis.File ?? __require("node:buffer").File; + module.exports.FileReader = require_filereader().FileReader; + var { setGlobalOrigin, getGlobalOrigin } = require_global(); + module.exports.setGlobalOrigin = setGlobalOrigin; + module.exports.getGlobalOrigin = getGlobalOrigin; + var { CacheStorage } = require_cachestorage(); + var { kConstruct } = require_symbols4(); + module.exports.caches = new CacheStorage(kConstruct); + var { deleteCookie, getCookies, getSetCookies, setCookie } = require_cookies(); + module.exports.deleteCookie = deleteCookie; + module.exports.getCookies = getCookies; + module.exports.getSetCookies = getSetCookies; + module.exports.setCookie = setCookie; + var { parseMIMEType, serializeAMimeType } = require_data_url(); + module.exports.parseMIMEType = parseMIMEType; + module.exports.serializeAMimeType = serializeAMimeType; + var { CloseEvent, ErrorEvent, MessageEvent } = require_events(); + module.exports.WebSocket = require_websocket().WebSocket; + module.exports.CloseEvent = CloseEvent; + module.exports.ErrorEvent = ErrorEvent; + module.exports.MessageEvent = MessageEvent; + module.exports.request = makeDispatcher(api.request); + module.exports.stream = makeDispatcher(api.stream); + module.exports.pipeline = makeDispatcher(api.pipeline); + module.exports.connect = makeDispatcher(api.connect); + module.exports.upgrade = makeDispatcher(api.upgrade); + module.exports.MockClient = MockClient; + module.exports.MockPool = MockPool; + module.exports.MockAgent = MockAgent; + module.exports.mockErrors = mockErrors; + var { EventSource } = require_eventsource(); + module.exports.EventSource = EventSource; + } +}); + +// github-actions/linting/gha-sha-enforcer/lib/main.ts +import * as fs2 from "node:fs"; +import * as path from "node:path"; + +// +import * as os from "os"; + +// +function toCommandValue(input) { + if (input === null || input === void 0) { + return ""; + } else if (typeof input === "string" || input instanceof String) { + return input; + } + return JSON.stringify(input); +} +function toCommandProperties(annotationProperties) { + if (!Object.keys(annotationProperties).length) { + return {}; + } + return { + title: annotationProperties.title, + file: annotationProperties.file, + line: annotationProperties.startLine, + endLine: annotationProperties.endLine, + col: annotationProperties.startColumn, + endColumn: annotationProperties.endColumn + }; +} + +// +function issueCommand(command, properties, message) { + const cmd = new Command(command, properties, message); + process.stdout.write(cmd.toString() + os.EOL); +} +var CMD_STRING = "::"; +var Command = class { + constructor(command, properties, message) { + if (!command) { + command = "missing.command"; + } + this.command = command; + this.properties = properties; + this.message = message; + } + toString() { + let cmdStr = CMD_STRING + this.command; + if (this.properties && Object.keys(this.properties).length > 0) { + cmdStr += " "; + let first = true; + for (const key in this.properties) { + if (this.properties.hasOwnProperty(key)) { + const val = this.properties[key]; + if (val) { + if (first) { + first = false; + } else { + cmdStr += ","; + } + cmdStr += `${key}=${escapeProperty(val)}`; + } + } + } + } + cmdStr += `${CMD_STRING}${escapeData(this.message)}`; + return cmdStr; + } +}; +function escapeData(s) { + return toCommandValue(s).replace(/%/g, "%25").replace(/\r/g, "%0D").replace(/\n/g, "%0A"); +} +function escapeProperty(s) { + return toCommandValue(s).replace(/%/g, "%25").replace(/\r/g, "%0D").replace(/\n/g, "%0A").replace(/:/g, "%3A").replace(/,/g, "%2C"); +} + +// +import * as os3 from "os"; + +// +var tunnel = __toESM(require_tunnel2()); +var import_undici = __toESM(require_undici()); +var HttpCodes; +(function(HttpCodes2) { + HttpCodes2[HttpCodes2["OK"] = 200] = "OK"; + HttpCodes2[HttpCodes2["MultipleChoices"] = 300] = "MultipleChoices"; + HttpCodes2[HttpCodes2["MovedPermanently"] = 301] = "MovedPermanently"; + HttpCodes2[HttpCodes2["ResourceMoved"] = 302] = "ResourceMoved"; + HttpCodes2[HttpCodes2["SeeOther"] = 303] = "SeeOther"; + HttpCodes2[HttpCodes2["NotModified"] = 304] = "NotModified"; + HttpCodes2[HttpCodes2["UseProxy"] = 305] = "UseProxy"; + HttpCodes2[HttpCodes2["SwitchProxy"] = 306] = "SwitchProxy"; + HttpCodes2[HttpCodes2["TemporaryRedirect"] = 307] = "TemporaryRedirect"; + HttpCodes2[HttpCodes2["PermanentRedirect"] = 308] = "PermanentRedirect"; + HttpCodes2[HttpCodes2["BadRequest"] = 400] = "BadRequest"; + HttpCodes2[HttpCodes2["Unauthorized"] = 401] = "Unauthorized"; + HttpCodes2[HttpCodes2["PaymentRequired"] = 402] = "PaymentRequired"; + HttpCodes2[HttpCodes2["Forbidden"] = 403] = "Forbidden"; + HttpCodes2[HttpCodes2["NotFound"] = 404] = "NotFound"; + HttpCodes2[HttpCodes2["MethodNotAllowed"] = 405] = "MethodNotAllowed"; + HttpCodes2[HttpCodes2["NotAcceptable"] = 406] = "NotAcceptable"; + HttpCodes2[HttpCodes2["ProxyAuthenticationRequired"] = 407] = "ProxyAuthenticationRequired"; + HttpCodes2[HttpCodes2["RequestTimeout"] = 408] = "RequestTimeout"; + HttpCodes2[HttpCodes2["Conflict"] = 409] = "Conflict"; + HttpCodes2[HttpCodes2["Gone"] = 410] = "Gone"; + HttpCodes2[HttpCodes2["TooManyRequests"] = 429] = "TooManyRequests"; + HttpCodes2[HttpCodes2["InternalServerError"] = 500] = "InternalServerError"; + HttpCodes2[HttpCodes2["NotImplemented"] = 501] = "NotImplemented"; + HttpCodes2[HttpCodes2["BadGateway"] = 502] = "BadGateway"; + HttpCodes2[HttpCodes2["ServiceUnavailable"] = 503] = "ServiceUnavailable"; + HttpCodes2[HttpCodes2["GatewayTimeout"] = 504] = "GatewayTimeout"; +})(HttpCodes || (HttpCodes = {})); +var Headers; +(function(Headers2) { + Headers2["Accept"] = "accept"; + Headers2["ContentType"] = "content-type"; +})(Headers || (Headers = {})); +var MediaTypes; +(function(MediaTypes2) { + MediaTypes2["ApplicationJson"] = "application/json"; +})(MediaTypes || (MediaTypes = {})); +var HttpRedirectCodes = [ + HttpCodes.MovedPermanently, + HttpCodes.ResourceMoved, + HttpCodes.SeeOther, + HttpCodes.TemporaryRedirect, + HttpCodes.PermanentRedirect +]; +var HttpResponseRetryCodes = [ + HttpCodes.BadGateway, + HttpCodes.ServiceUnavailable, + HttpCodes.GatewayTimeout +]; + +// +import { EOL as EOL2 } from "os"; +import { constants, promises } from "fs"; +var __awaiter = function(thisArg, _arguments, P, generator) { + function adopt(value) { + return value instanceof P ? value : new P(function(resolve) { + resolve(value); + }); + } + return new (P || (P = Promise))(function(resolve, reject) { + function fulfilled(value) { + try { + step(generator.next(value)); + } catch (e) { + reject(e); + } + } + function rejected(value) { + try { + step(generator["throw"](value)); + } catch (e) { + reject(e); + } + } + function step(result) { + result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); + } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var { access, appendFile, writeFile } = promises; +var SUMMARY_ENV_VAR = "GITHUB_STEP_SUMMARY"; +var Summary = class { + constructor() { + this._buffer = ""; + } + /** + * Finds the summary file path from the environment, rejects if env var is not found or file does not exist + * Also checks r/w permissions. + * + * @returns step summary file path + */ + filePath() { + return __awaiter(this, void 0, void 0, function* () { + if (this._filePath) { + return this._filePath; + } + const pathFromEnv = process.env[SUMMARY_ENV_VAR]; + if (!pathFromEnv) { + throw new Error(`Unable to find environment variable for $${SUMMARY_ENV_VAR}. Check if your runtime environment supports job summaries.`); + } + try { + yield access(pathFromEnv, constants.R_OK | constants.W_OK); + } catch (_a) { + throw new Error(`Unable to access summary file: '${pathFromEnv}'. Check if the file has correct read/write permissions.`); + } + this._filePath = pathFromEnv; + return this._filePath; + }); + } + /** + * Wraps content in an HTML tag, adding any HTML attributes + * + * @param {string} tag HTML tag to wrap + * @param {string | null} content content within the tag + * @param {[attribute: string]: string} attrs key-value list of HTML attributes to add + * + * @returns {string} content wrapped in HTML element + */ + wrap(tag, content, attrs = {}) { + const htmlAttrs = Object.entries(attrs).map(([key, value]) => ` ${key}="${value}"`).join(""); + if (!content) { + return `<${tag}${htmlAttrs}>`; + } + return `<${tag}${htmlAttrs}>${content}`; + } + /** + * Writes text in the buffer to the summary buffer file and empties buffer. Will append by default. + * + * @param {SummaryWriteOptions} [options] (optional) options for write operation + * + * @returns {Promise} summary instance + */ + write(options) { + return __awaiter(this, void 0, void 0, function* () { + const overwrite = !!(options === null || options === void 0 ? void 0 : options.overwrite); + const filePath = yield this.filePath(); + const writeFunc = overwrite ? writeFile : appendFile; + yield writeFunc(filePath, this._buffer, { encoding: "utf8" }); + return this.emptyBuffer(); + }); + } + /** + * Clears the summary buffer and wipes the summary file + * + * @returns {Summary} summary instance + */ + clear() { + return __awaiter(this, void 0, void 0, function* () { + return this.emptyBuffer().write({ overwrite: true }); + }); + } + /** + * Returns the current summary buffer as a string + * + * @returns {string} string of summary buffer + */ + stringify() { + return this._buffer; + } + /** + * If the summary buffer is empty + * + * @returns {boolen} true if the buffer is empty + */ + isEmptyBuffer() { + return this._buffer.length === 0; + } + /** + * Resets the summary buffer without writing to summary file + * + * @returns {Summary} summary instance + */ + emptyBuffer() { + this._buffer = ""; + return this; + } + /** + * Adds raw text to the summary buffer + * + * @param {string} text content to add + * @param {boolean} [addEOL=false] (optional) append an EOL to the raw text (default: false) + * + * @returns {Summary} summary instance + */ + addRaw(text, addEOL = false) { + this._buffer += text; + return addEOL ? this.addEOL() : this; + } + /** + * Adds the operating system-specific end-of-line marker to the buffer + * + * @returns {Summary} summary instance + */ + addEOL() { + return this.addRaw(EOL2); + } + /** + * Adds an HTML codeblock to the summary buffer + * + * @param {string} code content to render within fenced code block + * @param {string} lang (optional) language to syntax highlight code + * + * @returns {Summary} summary instance + */ + addCodeBlock(code, lang) { + const attrs = Object.assign({}, lang && { lang }); + const element = this.wrap("pre", this.wrap("code", code), attrs); + return this.addRaw(element).addEOL(); + } + /** + * Adds an HTML list to the summary buffer + * + * @param {string[]} items list of items to render + * @param {boolean} [ordered=false] (optional) if the rendered list should be ordered or not (default: false) + * + * @returns {Summary} summary instance + */ + addList(items, ordered = false) { + const tag = ordered ? "ol" : "ul"; + const listItems = items.map((item) => this.wrap("li", item)).join(""); + const element = this.wrap(tag, listItems); + return this.addRaw(element).addEOL(); + } + /** + * Adds an HTML table to the summary buffer + * + * @param {SummaryTableCell[]} rows table rows + * + * @returns {Summary} summary instance + */ + addTable(rows) { + const tableBody = rows.map((row) => { + const cells = row.map((cell) => { + if (typeof cell === "string") { + return this.wrap("td", cell); + } + const { header, data, colspan, rowspan } = cell; + const tag = header ? "th" : "td"; + const attrs = Object.assign(Object.assign({}, colspan && { colspan }), rowspan && { rowspan }); + return this.wrap(tag, data, attrs); + }).join(""); + return this.wrap("tr", cells); + }).join(""); + const element = this.wrap("table", tableBody); + return this.addRaw(element).addEOL(); + } + /** + * Adds a collapsable HTML details element to the summary buffer + * + * @param {string} label text for the closed state + * @param {string} content collapsable content + * + * @returns {Summary} summary instance + */ + addDetails(label, content) { + const element = this.wrap("details", this.wrap("summary", label) + content); + return this.addRaw(element).addEOL(); + } + /** + * Adds an HTML image tag to the summary buffer + * + * @param {string} src path to the image you to embed + * @param {string} alt text description of the image + * @param {SummaryImageOptions} options (optional) addition image attributes + * + * @returns {Summary} summary instance + */ + addImage(src, alt, options) { + const { width, height } = options || {}; + const attrs = Object.assign(Object.assign({}, width && { width }), height && { height }); + const element = this.wrap("img", null, Object.assign({ src, alt }, attrs)); + return this.addRaw(element).addEOL(); + } + /** + * Adds an HTML section heading element + * + * @param {string} text heading text + * @param {number | string} [level=1] (optional) the heading level, default: 1 + * + * @returns {Summary} summary instance + */ + addHeading(text, level) { + const tag = `h${level}`; + const allowedTag = ["h1", "h2", "h3", "h4", "h5", "h6"].includes(tag) ? tag : "h1"; + const element = this.wrap(allowedTag, text); + return this.addRaw(element).addEOL(); + } + /** + * Adds an HTML thematic break (
) to the summary buffer + * + * @returns {Summary} summary instance + */ + addSeparator() { + const element = this.wrap("hr", null); + return this.addRaw(element).addEOL(); + } + /** + * Adds an HTML line break (
) to the summary buffer + * + * @returns {Summary} summary instance + */ + addBreak() { + const element = this.wrap("br", null); + return this.addRaw(element).addEOL(); + } + /** + * Adds an HTML blockquote to the summary buffer + * + * @param {string} text quote text + * @param {string} cite (optional) citation url + * + * @returns {Summary} summary instance + */ + addQuote(text, cite) { + const attrs = Object.assign({}, cite && { cite }); + const element = this.wrap("blockquote", text, attrs); + return this.addRaw(element).addEOL(); + } + /** + * Adds an HTML anchor tag to the summary buffer + * + * @param {string} text link text/content + * @param {string} href hyperlink + * + * @returns {Summary} summary instance + */ + addLink(text, href) { + const element = this.wrap("a", text, { href }); + return this.addRaw(element).addEOL(); + } +}; +var _summary = new Summary(); + +// +import os2 from "os"; + +// +import * as fs from "fs"; +var { chmod, copyFile, lstat, mkdir, open, readdir, rename, rm, rmdir, stat, symlink, unlink } = fs.promises; +var IS_WINDOWS = process.platform === "win32"; +var READONLY = fs.constants.O_RDONLY; + +// +var IS_WINDOWS2 = process.platform === "win32"; + +// +var platform = os2.platform(); +var arch = os2.arch(); + +// +var ExitCode; +(function(ExitCode2) { + ExitCode2[ExitCode2["Success"] = 0] = "Success"; + ExitCode2[ExitCode2["Failure"] = 1] = "Failure"; +})(ExitCode || (ExitCode = {})); +function setFailed(message) { + process.exitCode = ExitCode.Failure; + error(message); +} +function error(message, properties = {}) { + issueCommand("error", toCommandProperties(properties), message instanceof Error ? message.toString() : message); +} +function info(message) { + process.stdout.write(message + os3.EOL); +} + +// github-actions/linting/gha-sha-enforcer/lib/main.ts +var USES_REGEX = /^\s*(?:-\s*)?uses:\s*(.+)$/; +var BLOCK_SCALAR_REGEX = /^\s*(?:-\s*)?[a-zA-Z0-9_-]+\s*:\s*[|>]/; +function checkWorkflowFile(filePath) { + const content = fs2.readFileSync(filePath, "utf8"); + const lines = content.split("\n"); + let isValid = true; + let inBlockScalar = false; + let blockIndent = 0; + lines.forEach((line, index) => { + if (inBlockScalar) { + const currentIndent = line.search(/\S/); + if (currentIndent !== -1 && currentIndent <= blockIndent) { + inBlockScalar = false; + } else { + return; + } + } + if (line.match(BLOCK_SCALAR_REGEX)) { + inBlockScalar = true; + blockIndent = line.search(/\S/); + } + const match = line.match(USES_REGEX); + if (match) { + const fullUses = match[1].trim(); + const hashIndex = fullUses.indexOf("#"); + let usesPart = fullUses; + let commentPart = ""; + if (hashIndex !== -1) { + usesPart = fullUses.substring(0, hashIndex).trim(); + commentPart = fullUses.substring(hashIndex + 1).trim(); + } + const uses = usesPart.replace(/^['"]|['"]$/g, "").trim(); + if (uses.startsWith("./")) { + return; + } + const atIndex = uses.indexOf("@"); + if (atIndex === -1) { + error( + `${filePath}:${index + 1}: Action "${uses}" should use "action-name@SHA # version" format (missing @).` + ); + isValid = false; + return; + } + const action = uses.substring(0, atIndex); + const version = uses.substring(atIndex + 1); + const isSha = /^[a-fA-F0-9]{40}$/.test(version); + if (!isSha) { + error( + `${filePath}:${index + 1}: Action "${action}" should use a 40-character SHA for version, but got "${version}".` + ); + isValid = false; + } + if (!commentPart) { + error( + `${filePath}:${index + 1}: Action "${action}" is missing a version comment (e.g. "# v1.0.0").` + ); + isValid = false; + } else { + const isVersionComment = /^v\d+/.test(commentPart); + if (!isVersionComment) { + error( + `${filePath}:${index + 1}: Action "${action}" has comment "${commentPart}" which does not look like a version (should start with 'v', e.g. '# v1.0.0').` + ); + isValid = false; + } + } + } + }); + return isValid; +} +function run() { + try { + const workspace = process.env.GITHUB_WORKSPACE || process.cwd(); + const workflowsDir = path.join(workspace, ".github/workflows"); + if (!fs2.existsSync(workflowsDir)) { + setFailed(`Workflows directory not found: ${workflowsDir}`); + return; + } + const files = fs2.readdirSync(workflowsDir, { withFileTypes: true }).filter( + (entry) => entry.isFile() && (entry.name.endsWith(".yml") || entry.name.endsWith(".yaml")) + ).map((entry) => entry.name); + let allValid = true; + for (const file of files) { + const filePath = path.join(workflowsDir, file); + info(`Checking ${file}...`); + if (!checkWorkflowFile(filePath)) { + allValid = false; + } + } + if (!allValid) { + setFailed("Some workflows are using unpinned actions or missing version comments."); + } else { + info("All workflows are valid!"); + } + } catch (error2) { + setFailed(error2.message); + } +} +run(); +/*! Bundled license information: + +undici/lib/web/fetch/body.js: + (*! formdata-polyfill. MIT License. Jimmy Wärting *) + +undici/lib/web/websocket/frame.js: + (*! ws. MIT License. Einar Otto Stangvik *) +*/ +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdHVubmVsQDAuMC42L25vZGVfbW9kdWxlcy90dW5uZWwvbGliL3R1bm5lbC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy90dW5uZWxAMC4wLjYvbm9kZV9tb2R1bGVzL3R1bm5lbC9pbmRleC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvc3ltYm9scy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvZXJyb3JzLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS9jb25zdGFudHMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjYuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb3JlL3RyZWUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjYuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb3JlL3V0aWwuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjYuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb3JlL2RpYWdub3N0aWNzLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS9yZXF1ZXN0LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9kaXNwYXRjaGVyLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9kaXNwYXRjaGVyLWJhc2UuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjYuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi91dGlsL3RpbWVycy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvY29ubmVjdC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2xsaHR0cC91dGlscy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2xsaHR0cC9jb25zdGFudHMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjYuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9sbGh0dHAvbGxodHRwLXdhc20uanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjYuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9sbGh0dHAvbGxodHRwX3NpbWQtd2FzbS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC9jb25zdGFudHMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjYuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmV0Y2gvZ2xvYmFsLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZldGNoL2RhdGEtdXJsLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZldGNoL3dlYmlkbC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC91dGlsLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZldGNoL3N5bWJvbHMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjYuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmV0Y2gvZmlsZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC9mb3JtZGF0YS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC9mb3JtZGF0YS1wYXJzZXIuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjYuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmV0Y2gvYm9keS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXIvY2xpZW50LWgxLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9jbGllbnQtaDIuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjYuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9oYW5kbGVyL3JlZGlyZWN0LWhhbmRsZXIuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjYuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9pbnRlcmNlcHRvci9yZWRpcmVjdC1pbnRlcmNlcHRvci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXIvY2xpZW50LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9maXhlZC1xdWV1ZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXIvcG9vbC1zdGF0cy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXIvcG9vbC1iYXNlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9wb29sLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9iYWxhbmNlZC1wb29sLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9hZ2VudC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXIvcHJveHktYWdlbnQuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjYuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9kaXNwYXRjaGVyL2Vudi1odHRwLXByb3h5LWFnZW50LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaGFuZGxlci9yZXRyeS1oYW5kbGVyLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9yZXRyeS1hZ2VudC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9yZWFkYWJsZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS91dGlsLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL2FwaS1yZXF1ZXN0LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL2Fib3J0LXNpZ25hbC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktc3RyZWFtLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL2FwaS1waXBlbGluZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktdXBncmFkZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktY29ubmVjdC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9pbmRleC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1lcnJvcnMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjYuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL21vY2stc3ltYm9scy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay11dGlscy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1pbnRlcmNlcHRvci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1jbGllbnQuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjYuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL21vY2stcG9vbC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svcGx1cmFsaXplci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svcGVuZGluZy1pbnRlcmNlcHRvcnMtZm9ybWF0dGVyLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9tb2NrLWFnZW50LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZ2xvYmFsLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaGFuZGxlci9kZWNvcmF0b3ItaGFuZGxlci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ludGVyY2VwdG9yL3JlZGlyZWN0LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaW50ZXJjZXB0b3IvcmV0cnkuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjYuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9pbnRlcmNlcHRvci9kdW1wLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaW50ZXJjZXB0b3IvZG5zLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZldGNoL2hlYWRlcnMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjYuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmV0Y2gvcmVzcG9uc2UuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjYuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmV0Y2gvZGlzcGF0Y2hlci13ZWFrcmVmLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZldGNoL3JlcXVlc3QuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjYuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmV0Y2gvaW5kZXguanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjYuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmlsZWFwaS9zeW1ib2xzLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZpbGVhcGkvcHJvZ3Jlc3NldmVudC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9maWxlYXBpL2VuY29kaW5nLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZpbGVhcGkvdXRpbC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9maWxlYXBpL2ZpbGVyZWFkZXIuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjYuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvY2FjaGUvc3ltYm9scy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9jYWNoZS91dGlsLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2NhY2hlL2NhY2hlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2NhY2hlL2NhY2hlc3RvcmFnZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9jb29raWVzL2NvbnN0YW50cy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9jb29raWVzL3V0aWwuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjYuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvY29va2llcy9wYXJzZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9jb29raWVzL2luZGV4LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL3dlYnNvY2tldC9ldmVudHMuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjYuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvd2Vic29ja2V0L2NvbnN0YW50cy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi93ZWJzb2NrZXQvc3ltYm9scy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi93ZWJzb2NrZXQvdXRpbC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi93ZWJzb2NrZXQvZnJhbWUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjYuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvd2Vic29ja2V0L2Nvbm5lY3Rpb24uanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjYuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvd2Vic29ja2V0L3Blcm1lc3NhZ2UtZGVmbGF0ZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi93ZWJzb2NrZXQvcmVjZWl2ZXIuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjYuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvd2Vic29ja2V0L3NlbmRlci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yNi4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi93ZWJzb2NrZXQvd2Vic29ja2V0LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2V2ZW50c291cmNlL3V0aWwuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjYuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2Utc3RyZWFtLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2V2ZW50c291cmNlL2V2ZW50c291cmNlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjI2LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9pbmRleC5qcyIsICJsaWIvbWFpbi50cyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9AYWN0aW9ucytjb3JlQDMuMC4xL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9jb3JlL3NyYy9jb21tYW5kLnRzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL0BhY3Rpb25zK2NvcmVAMy4wLjEvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2NvcmUvc3JjL3V0aWxzLnRzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL0BhY3Rpb25zK2NvcmVAMy4wLjEvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2NvcmUvc3JjL2NvcmUudHMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvQGFjdGlvbnMraHR0cC1jbGllbnRANC4wLjEvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2h0dHAtY2xpZW50L3NyYy9pbmRleC50cyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9AYWN0aW9ucytjb3JlQDMuMC4xL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9jb3JlL3NyYy9zdW1tYXJ5LnRzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL0BhY3Rpb25zK2NvcmVAMy4wLjEvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2NvcmUvc3JjL3BsYXRmb3JtLnRzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL0BhY3Rpb25zK2lvQDMuMC4yL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9pby9zcmMvaW8tdXRpbC50cyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9AYWN0aW9ucytleGVjQDMuMC4wL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9leGVjL3NyYy90b29scnVubmVyLnRzIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFFQSxRQUFJLE1BQU0sVUFBUSxLQUFLO0FBQ3ZCLFFBQUksTUFBTSxVQUFRLEtBQUs7QUFDdkIsUUFBSSxPQUFPLFVBQVEsTUFBTTtBQUN6QixRQUFJLFFBQVEsVUFBUSxPQUFPO0FBQzNCLFFBQUksU0FBUyxVQUFRLFFBQVE7QUFDN0IsUUFBSSxTQUFTLFVBQVEsUUFBUTtBQUM3QixRQUFJLE9BQU8sVUFBUSxNQUFNO0FBR3pCLFlBQVEsZUFBZUE7QUFDdkIsWUFBUSxnQkFBZ0JDO0FBQ3hCLFlBQVEsZ0JBQWdCQztBQUN4QixZQUFRLGlCQUFpQkM7QUFHekIsYUFBU0gsY0FBYSxTQUFTO0FBQzdCLFVBQUksUUFBUSxJQUFJLGVBQWUsT0FBTztBQUN0QyxZQUFNLFVBQVUsS0FBSztBQUNyQixhQUFPO0FBQUEsSUFDVDtBQUVBLGFBQVNDLGVBQWMsU0FBUztBQUM5QixVQUFJLFFBQVEsSUFBSSxlQUFlLE9BQU87QUFDdEMsWUFBTSxVQUFVLEtBQUs7QUFDckIsWUFBTSxlQUFlO0FBQ3JCLFlBQU0sY0FBYztBQUNwQixhQUFPO0FBQUEsSUFDVDtBQUVBLGFBQVNDLGVBQWMsU0FBUztBQUM5QixVQUFJLFFBQVEsSUFBSSxlQUFlLE9BQU87QUFDdEMsWUFBTSxVQUFVLE1BQU07QUFDdEIsYUFBTztBQUFBLElBQ1Q7QUFFQSxhQUFTQyxnQkFBZSxTQUFTO0FBQy9CLFVBQUksUUFBUSxJQUFJLGVBQWUsT0FBTztBQUN0QyxZQUFNLFVBQVUsTUFBTTtBQUN0QixZQUFNLGVBQWU7QUFDckIsWUFBTSxjQUFjO0FBQ3BCLGFBQU87QUFBQSxJQUNUO0FBR0EsYUFBUyxlQUFlLFNBQVM7QUFDL0IsVUFBSSxPQUFPO0FBQ1gsV0FBSyxVQUFVLFdBQVcsQ0FBQztBQUMzQixXQUFLLGVBQWUsS0FBSyxRQUFRLFNBQVMsQ0FBQztBQUMzQyxXQUFLLGFBQWEsS0FBSyxRQUFRLGNBQWMsS0FBSyxNQUFNO0FBQ3hELFdBQUssV0FBVyxDQUFDO0FBQ2pCLFdBQUssVUFBVSxDQUFDO0FBRWhCLFdBQUssR0FBRyxRQUFRLFNBQVMsT0FBTyxRQUFRLE1BQU0sTUFBTSxjQUFjO0FBQ2hFLFlBQUlDLFdBQVUsVUFBVSxNQUFNLE1BQU0sWUFBWTtBQUNoRCxpQkFBUyxJQUFJLEdBQUcsTUFBTSxLQUFLLFNBQVMsUUFBUSxJQUFJLEtBQUssRUFBRSxHQUFHO0FBQ3hELGNBQUksVUFBVSxLQUFLLFNBQVMsQ0FBQztBQUM3QixjQUFJLFFBQVEsU0FBU0EsU0FBUSxRQUFRLFFBQVEsU0FBU0EsU0FBUSxNQUFNO0FBR2xFLGlCQUFLLFNBQVMsT0FBTyxHQUFHLENBQUM7QUFDekIsb0JBQVEsUUFBUSxTQUFTLE1BQU07QUFDL0I7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUNBLGVBQU8sUUFBUTtBQUNmLGFBQUssYUFBYSxNQUFNO0FBQUEsTUFDMUIsQ0FBQztBQUFBLElBQ0g7QUFDQSxTQUFLLFNBQVMsZ0JBQWdCLE9BQU8sWUFBWTtBQUVqRCxtQkFBZSxVQUFVLGFBQWEsU0FBUyxXQUFXLEtBQUssTUFBTSxNQUFNLGNBQWM7QUFDdkYsVUFBSSxPQUFPO0FBQ1gsVUFBSSxVQUFVLGFBQWEsRUFBQyxTQUFTLElBQUcsR0FBRyxLQUFLLFNBQVMsVUFBVSxNQUFNLE1BQU0sWUFBWSxDQUFDO0FBRTVGLFVBQUksS0FBSyxRQUFRLFVBQVUsS0FBSyxZQUFZO0FBRTFDLGFBQUssU0FBUyxLQUFLLE9BQU87QUFDMUI7QUFBQSxNQUNGO0FBR0EsV0FBSyxhQUFhLFNBQVMsU0FBUyxRQUFRO0FBQzFDLGVBQU8sR0FBRyxRQUFRLE1BQU07QUFDeEIsZUFBTyxHQUFHLFNBQVMsZUFBZTtBQUNsQyxlQUFPLEdBQUcsZUFBZSxlQUFlO0FBQ3hDLFlBQUksU0FBUyxNQUFNO0FBRW5CLGlCQUFTLFNBQVM7QUFDaEIsZUFBSyxLQUFLLFFBQVEsUUFBUSxPQUFPO0FBQUEsUUFDbkM7QUFFQSxpQkFBUyxnQkFBZ0IsS0FBSztBQUM1QixlQUFLLGFBQWEsTUFBTTtBQUN4QixpQkFBTyxlQUFlLFFBQVEsTUFBTTtBQUNwQyxpQkFBTyxlQUFlLFNBQVMsZUFBZTtBQUM5QyxpQkFBTyxlQUFlLGVBQWUsZUFBZTtBQUFBLFFBQ3REO0FBQUEsTUFDRixDQUFDO0FBQUEsSUFDSDtBQUVBLG1CQUFlLFVBQVUsZUFBZSxTQUFTLGFBQWEsU0FBUyxJQUFJO0FBQ3pFLFVBQUksT0FBTztBQUNYLFVBQUksY0FBYyxDQUFDO0FBQ25CLFdBQUssUUFBUSxLQUFLLFdBQVc7QUFFN0IsVUFBSSxpQkFBaUIsYUFBYSxDQUFDLEdBQUcsS0FBSyxjQUFjO0FBQUEsUUFDdkQsUUFBUTtBQUFBLFFBQ1IsTUFBTSxRQUFRLE9BQU8sTUFBTSxRQUFRO0FBQUEsUUFDbkMsT0FBTztBQUFBLFFBQ1AsU0FBUztBQUFBLFVBQ1AsTUFBTSxRQUFRLE9BQU8sTUFBTSxRQUFRO0FBQUEsUUFDckM7QUFBQSxNQUNGLENBQUM7QUFDRCxVQUFJLFFBQVEsY0FBYztBQUN4Qix1QkFBZSxlQUFlLFFBQVE7QUFBQSxNQUN4QztBQUNBLFVBQUksZUFBZSxXQUFXO0FBQzVCLHVCQUFlLFVBQVUsZUFBZSxXQUFXLENBQUM7QUFDcEQsdUJBQWUsUUFBUSxxQkFBcUIsSUFBSSxXQUM1QyxJQUFJLE9BQU8sZUFBZSxTQUFTLEVBQUUsU0FBUyxRQUFRO0FBQUEsTUFDNUQ7QUFFQSxNQUFBQyxPQUFNLHdCQUF3QjtBQUM5QixVQUFJLGFBQWEsS0FBSyxRQUFRLGNBQWM7QUFDNUMsaUJBQVcsOEJBQThCO0FBQ3pDLGlCQUFXLEtBQUssWUFBWSxVQUFVO0FBQ3RDLGlCQUFXLEtBQUssV0FBVyxTQUFTO0FBQ3BDLGlCQUFXLEtBQUssV0FBVyxTQUFTO0FBQ3BDLGlCQUFXLEtBQUssU0FBUyxPQUFPO0FBQ2hDLGlCQUFXLElBQUk7QUFFZixlQUFTLFdBQVcsS0FBSztBQUV2QixZQUFJLFVBQVU7QUFBQSxNQUNoQjtBQUVBLGVBQVMsVUFBVSxLQUFLLFFBQVEsTUFBTTtBQUVwQyxnQkFBUSxTQUFTLFdBQVc7QUFDMUIsb0JBQVUsS0FBSyxRQUFRLElBQUk7QUFBQSxRQUM3QixDQUFDO0FBQUEsTUFDSDtBQUVBLGVBQVMsVUFBVSxLQUFLLFFBQVEsTUFBTTtBQUNwQyxtQkFBVyxtQkFBbUI7QUFDOUIsZUFBTyxtQkFBbUI7QUFFMUIsWUFBSSxJQUFJLGVBQWUsS0FBSztBQUMxQixVQUFBQTtBQUFBLFlBQU07QUFBQSxZQUNKLElBQUk7QUFBQSxVQUFVO0FBQ2hCLGlCQUFPLFFBQVE7QUFDZixjQUFJQyxTQUFRLElBQUksTUFBTSwyREFDSixJQUFJLFVBQVU7QUFDaEMsVUFBQUEsT0FBTSxPQUFPO0FBQ2Isa0JBQVEsUUFBUSxLQUFLLFNBQVNBLE1BQUs7QUFDbkMsZUFBSyxhQUFhLFdBQVc7QUFDN0I7QUFBQSxRQUNGO0FBQ0EsWUFBSSxLQUFLLFNBQVMsR0FBRztBQUNuQixVQUFBRCxPQUFNLHNDQUFzQztBQUM1QyxpQkFBTyxRQUFRO0FBQ2YsY0FBSUMsU0FBUSxJQUFJLE1BQU0sc0NBQXNDO0FBQzVELFVBQUFBLE9BQU0sT0FBTztBQUNiLGtCQUFRLFFBQVEsS0FBSyxTQUFTQSxNQUFLO0FBQ25DLGVBQUssYUFBYSxXQUFXO0FBQzdCO0FBQUEsUUFDRjtBQUNBLFFBQUFELE9BQU0sc0NBQXNDO0FBQzVDLGFBQUssUUFBUSxLQUFLLFFBQVEsUUFBUSxXQUFXLENBQUMsSUFBSTtBQUNsRCxlQUFPLEdBQUcsTUFBTTtBQUFBLE1BQ2xCO0FBRUEsZUFBUyxRQUFRLE9BQU87QUFDdEIsbUJBQVcsbUJBQW1CO0FBRTlCLFFBQUFBO0FBQUEsVUFBTTtBQUFBLFVBQ0EsTUFBTTtBQUFBLFVBQVMsTUFBTTtBQUFBLFFBQUs7QUFDaEMsWUFBSUMsU0FBUSxJQUFJLE1BQU0sc0RBQ1csTUFBTSxPQUFPO0FBQzlDLFFBQUFBLE9BQU0sT0FBTztBQUNiLGdCQUFRLFFBQVEsS0FBSyxTQUFTQSxNQUFLO0FBQ25DLGFBQUssYUFBYSxXQUFXO0FBQUEsTUFDL0I7QUFBQSxJQUNGO0FBRUEsbUJBQWUsVUFBVSxlQUFlLFNBQVMsYUFBYSxRQUFRO0FBQ3BFLFVBQUksTUFBTSxLQUFLLFFBQVEsUUFBUSxNQUFNO0FBQ3JDLFVBQUksUUFBUSxJQUFJO0FBQ2Q7QUFBQSxNQUNGO0FBQ0EsV0FBSyxRQUFRLE9BQU8sS0FBSyxDQUFDO0FBRTFCLFVBQUksVUFBVSxLQUFLLFNBQVMsTUFBTTtBQUNsQyxVQUFJLFNBQVM7QUFHWCxhQUFLLGFBQWEsU0FBUyxTQUFTQyxTQUFRO0FBQzFDLGtCQUFRLFFBQVEsU0FBU0EsT0FBTTtBQUFBLFFBQ2pDLENBQUM7QUFBQSxNQUNIO0FBQUEsSUFDRjtBQUVBLGFBQVMsbUJBQW1CLFNBQVMsSUFBSTtBQUN2QyxVQUFJLE9BQU87QUFDWCxxQkFBZSxVQUFVLGFBQWEsS0FBSyxNQUFNLFNBQVMsU0FBUyxRQUFRO0FBQ3pFLFlBQUksYUFBYSxRQUFRLFFBQVEsVUFBVSxNQUFNO0FBQ2pELFlBQUksYUFBYSxhQUFhLENBQUMsR0FBRyxLQUFLLFNBQVM7QUFBQSxVQUM5QztBQUFBLFVBQ0EsWUFBWSxhQUFhLFdBQVcsUUFBUSxRQUFRLEVBQUUsSUFBSSxRQUFRO0FBQUEsUUFDcEUsQ0FBQztBQUdELFlBQUksZUFBZSxJQUFJLFFBQVEsR0FBRyxVQUFVO0FBQzVDLGFBQUssUUFBUSxLQUFLLFFBQVEsUUFBUSxNQUFNLENBQUMsSUFBSTtBQUM3QyxXQUFHLFlBQVk7QUFBQSxNQUNqQixDQUFDO0FBQUEsSUFDSDtBQUdBLGFBQVMsVUFBVSxNQUFNLE1BQU0sY0FBYztBQUMzQyxVQUFJLE9BQU8sU0FBUyxVQUFVO0FBQzVCLGVBQU87QUFBQSxVQUNMO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUNBLGFBQU87QUFBQSxJQUNUO0FBRUEsYUFBUyxhQUFhLFFBQVE7QUFDNUIsZUFBUyxJQUFJLEdBQUcsTUFBTSxVQUFVLFFBQVEsSUFBSSxLQUFLLEVBQUUsR0FBRztBQUNwRCxZQUFJLFlBQVksVUFBVSxDQUFDO0FBQzNCLFlBQUksT0FBTyxjQUFjLFVBQVU7QUFDakMsY0FBSSxPQUFPLE9BQU8sS0FBSyxTQUFTO0FBQ2hDLG1CQUFTLElBQUksR0FBRyxTQUFTLEtBQUssUUFBUSxJQUFJLFFBQVEsRUFBRSxHQUFHO0FBQ3JELGdCQUFJLElBQUksS0FBSyxDQUFDO0FBQ2QsZ0JBQUksVUFBVSxDQUFDLE1BQU0sUUFBVztBQUM5QixxQkFBTyxDQUFDLElBQUksVUFBVSxDQUFDO0FBQUEsWUFDekI7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFDQSxhQUFPO0FBQUEsSUFDVDtBQUdBLFFBQUlGO0FBQ0osUUFBSSxRQUFRLElBQUksY0FBYyxhQUFhLEtBQUssUUFBUSxJQUFJLFVBQVUsR0FBRztBQUN2RSxNQUFBQSxTQUFRLFdBQVc7QUFDakIsWUFBSSxPQUFPLE1BQU0sVUFBVSxNQUFNLEtBQUssU0FBUztBQUMvQyxZQUFJLE9BQU8sS0FBSyxDQUFDLE1BQU0sVUFBVTtBQUMvQixlQUFLLENBQUMsSUFBSSxhQUFhLEtBQUssQ0FBQztBQUFBLFFBQy9CLE9BQU87QUFDTCxlQUFLLFFBQVEsU0FBUztBQUFBLFFBQ3hCO0FBQ0EsZ0JBQVEsTUFBTSxNQUFNLFNBQVMsSUFBSTtBQUFBLE1BQ25DO0FBQUEsSUFDRixPQUFPO0FBQ0wsTUFBQUEsU0FBUSxXQUFXO0FBQUEsTUFBQztBQUFBLElBQ3RCO0FBQ0EsWUFBUSxRQUFRQTtBQUFBO0FBQUE7OztBQ3ZRaEIsSUFBQUcsa0JBQUE7QUFBQTtBQUFBLFdBQU8sVUFBVTtBQUFBO0FBQUE7OztBQ0FqQjtBQUFBO0FBQUEsV0FBTyxVQUFVO0FBQUEsTUFDZixRQUFRLE9BQU8sT0FBTztBQUFBLE1BQ3RCLFVBQVUsT0FBTyxTQUFTO0FBQUEsTUFDMUIsV0FBVyxPQUFPLFVBQVU7QUFBQSxNQUM1QixNQUFNLE9BQU8sS0FBSztBQUFBLE1BQ2xCLFVBQVUsT0FBTyxTQUFTO0FBQUEsTUFDMUIsV0FBVyxPQUFPLFVBQVU7QUFBQSxNQUM1QixRQUFRLE9BQU8sT0FBTztBQUFBLE1BQ3RCLFVBQVUsT0FBTyxTQUFTO0FBQUEsTUFDMUIsYUFBYSxPQUFPLFlBQVk7QUFBQSxNQUNoQywwQkFBMEIsT0FBTyw0QkFBNEI7QUFBQSxNQUM3RCxzQkFBc0IsT0FBTyx3QkFBd0I7QUFBQSxNQUNyRCw0QkFBNEIsT0FBTyw4QkFBOEI7QUFBQSxNQUNqRSx3QkFBd0IsT0FBTyxvQkFBb0I7QUFBQSxNQUNuRCxZQUFZLE9BQU8sWUFBWTtBQUFBLE1BQy9CLGlCQUFpQixPQUFPLGlCQUFpQjtBQUFBLE1BQ3pDLGNBQWMsT0FBTyxjQUFjO0FBQUEsTUFDbkMsYUFBYSxPQUFPLGFBQWE7QUFBQSxNQUNqQyxlQUFlLE9BQU8sZUFBZTtBQUFBLE1BQ3JDLE9BQU8sT0FBTyxNQUFNO0FBQUEsTUFDcEIsUUFBUSxPQUFPLFFBQVE7QUFBQSxNQUN2QixXQUFXLE9BQU8sTUFBTTtBQUFBLE1BQ3hCLE9BQU8sT0FBTyx5QkFBeUI7QUFBQSxNQUN2QyxVQUFVLE9BQU8sU0FBUztBQUFBLE1BQzFCLFdBQVcsT0FBTyxVQUFVO0FBQUEsTUFDNUIsVUFBVSxPQUFPLFNBQVM7QUFBQSxNQUMxQixPQUFPLE9BQU8sTUFBTTtBQUFBLE1BQ3BCLE9BQU8sT0FBTyxNQUFNO0FBQUEsTUFDcEIsU0FBUyxPQUFPLFFBQVE7QUFBQSxNQUN4QixPQUFPLE9BQU8sTUFBTTtBQUFBLE1BQ3BCLFlBQVksT0FBTyxXQUFXO0FBQUEsTUFDOUIsU0FBUyxPQUFPLFFBQVE7QUFBQSxNQUN4QixZQUFZLE9BQU8sWUFBWTtBQUFBLE1BQy9CLFFBQVEsT0FBTyxPQUFPO0FBQUEsTUFDdEIsWUFBWSxPQUFPLElBQUkseUJBQXlCO0FBQUEsTUFDaEQsU0FBUyxPQUFPLFFBQVE7QUFBQSxNQUN4QixVQUFVLE9BQU8sVUFBVTtBQUFBLE1BQzNCLGlCQUFpQixPQUFPLGtCQUFrQjtBQUFBLE1BQzFDLGFBQWEsT0FBTyxlQUFlO0FBQUEsTUFDbkMsYUFBYSxPQUFPLGVBQWU7QUFBQSxNQUNuQyxRQUFRLE9BQU8sT0FBTztBQUFBLE1BQ3RCLFVBQVUsT0FBTyxTQUFTO0FBQUEsTUFDMUIsU0FBUyxPQUFPLFFBQVE7QUFBQSxNQUN4QixTQUFTLE9BQU8sUUFBUTtBQUFBLE1BQ3hCLGNBQWMsT0FBTyxtQkFBbUI7QUFBQSxNQUN4QyxhQUFhLE9BQU8sWUFBWTtBQUFBLE1BQ2hDLFNBQVMsT0FBTyxRQUFRO0FBQUEsTUFDeEIsYUFBYSxPQUFPLGFBQWE7QUFBQSxNQUNqQyxZQUFZLE9BQU8sV0FBVztBQUFBLE1BQzlCLHNCQUFzQixPQUFPLHVCQUF1QjtBQUFBLE1BQ3BELGtCQUFrQixPQUFPLGlCQUFpQjtBQUFBLE1BQzFDLGNBQWMsT0FBTyxzQkFBc0I7QUFBQSxNQUMzQyxRQUFRLE9BQU8scUJBQXFCO0FBQUEsTUFDcEMsVUFBVSxPQUFPLHdCQUF3QjtBQUFBLE1BQ3pDLGVBQWUsT0FBTyx1QkFBdUI7QUFBQSxNQUM3QyxrQkFBa0IsT0FBTyxtQkFBbUI7QUFBQSxNQUM1QyxlQUFlLE9BQU8sY0FBYztBQUFBLE1BQ3BDLG9CQUFvQixPQUFPLG9CQUFvQjtBQUFBLE1BQy9DLDJCQUEyQixPQUFPLDJCQUEyQjtBQUFBLE1BQzdELFlBQVksT0FBTyxlQUFlO0FBQUEsTUFDbEMsWUFBWSxPQUFPLFdBQVc7QUFBQSxNQUM5QixjQUFjLE9BQU8sY0FBYztBQUFBLE1BQ25DLHVCQUF1QixPQUFPLHdCQUF3QjtBQUFBLE1BQ3RELGVBQWUsT0FBTyxnQkFBZ0I7QUFBQSxNQUN0QyxpQkFBaUIsT0FBTyxrQkFBa0I7QUFBQSxNQUMxQyxrQkFBa0IsT0FBTyxtQkFBbUI7QUFBQSxJQUM5QztBQUFBO0FBQUE7OztBQ2xFQTtBQUFBO0FBQUE7QUFFQSxRQUFNLGVBQWUsT0FBTyxJQUFJLHNCQUFzQjtBQUN0RCxRQUFNLGNBQU4sY0FBMEIsTUFBTTtBQUFBLE1BQzlCLFlBQWEsU0FBUztBQUNwQixjQUFNLE9BQU87QUFDYixhQUFLLE9BQU87QUFDWixhQUFLLE9BQU87QUFBQSxNQUNkO0FBQUEsTUFFQSxRQUFRLE9BQU8sV0FBVyxFQUFHLFVBQVU7QUFDckMsZUFBTyxZQUFZLFNBQVMsWUFBWSxNQUFNO0FBQUEsTUFDaEQ7QUFBQSxNQUVBLENBQUMsWUFBWSxJQUFJO0FBQUEsSUFDbkI7QUFFQSxRQUFNLHVCQUF1QixPQUFPLElBQUksc0NBQXNDO0FBQzlFLFFBQU0sc0JBQU4sY0FBa0MsWUFBWTtBQUFBLE1BQzVDLFlBQWEsU0FBUztBQUNwQixjQUFNLE9BQU87QUFDYixhQUFLLE9BQU87QUFDWixhQUFLLFVBQVUsV0FBVztBQUMxQixhQUFLLE9BQU87QUFBQSxNQUNkO0FBQUEsTUFFQSxRQUFRLE9BQU8sV0FBVyxFQUFHLFVBQVU7QUFDckMsZUFBTyxZQUFZLFNBQVMsb0JBQW9CLE1BQU07QUFBQSxNQUN4RDtBQUFBLE1BRUEsQ0FBQyxvQkFBb0IsSUFBSTtBQUFBLElBQzNCO0FBRUEsUUFBTSx1QkFBdUIsT0FBTyxJQUFJLHNDQUFzQztBQUM5RSxRQUFNLHNCQUFOLGNBQWtDLFlBQVk7QUFBQSxNQUM1QyxZQUFhLFNBQVM7QUFDcEIsY0FBTSxPQUFPO0FBQ2IsYUFBSyxPQUFPO0FBQ1osYUFBSyxVQUFVLFdBQVc7QUFDMUIsYUFBSyxPQUFPO0FBQUEsTUFDZDtBQUFBLE1BRUEsUUFBUSxPQUFPLFdBQVcsRUFBRyxVQUFVO0FBQ3JDLGVBQU8sWUFBWSxTQUFTLG9CQUFvQixNQUFNO0FBQUEsTUFDeEQ7QUFBQSxNQUVBLENBQUMsb0JBQW9CLElBQUk7QUFBQSxJQUMzQjtBQUVBLFFBQU0sd0JBQXdCLE9BQU8sSUFBSSx1Q0FBdUM7QUFDaEYsUUFBTSx1QkFBTixjQUFtQyxZQUFZO0FBQUEsTUFDN0MsWUFBYSxTQUFTO0FBQ3BCLGNBQU0sT0FBTztBQUNiLGFBQUssT0FBTztBQUNaLGFBQUssVUFBVSxXQUFXO0FBQzFCLGFBQUssT0FBTztBQUFBLE1BQ2Q7QUFBQSxNQUVBLFFBQVEsT0FBTyxXQUFXLEVBQUcsVUFBVTtBQUNyQyxlQUFPLFlBQVksU0FBUyxxQkFBcUIsTUFBTTtBQUFBLE1BQ3pEO0FBQUEsTUFFQSxDQUFDLHFCQUFxQixJQUFJO0FBQUEsSUFDNUI7QUFFQSxRQUFNLG9CQUFvQixPQUFPLElBQUksbUNBQW1DO0FBQ3hFLFFBQU0sbUJBQU4sY0FBK0IsWUFBWTtBQUFBLE1BQ3pDLFlBQWEsU0FBUztBQUNwQixjQUFNLE9BQU87QUFDYixhQUFLLE9BQU87QUFDWixhQUFLLFVBQVUsV0FBVztBQUMxQixhQUFLLE9BQU87QUFBQSxNQUNkO0FBQUEsTUFFQSxRQUFRLE9BQU8sV0FBVyxFQUFHLFVBQVU7QUFDckMsZUFBTyxZQUFZLFNBQVMsaUJBQWlCLE1BQU07QUFBQSxNQUNyRDtBQUFBLE1BRUEsQ0FBQyxpQkFBaUIsSUFBSTtBQUFBLElBQ3hCO0FBRUEsUUFBTSwyQkFBMkIsT0FBTyxJQUFJLDJDQUEyQztBQUN2RixRQUFNLDBCQUFOLGNBQXNDLFlBQVk7QUFBQSxNQUNoRCxZQUFhLFNBQVMsWUFBWSxTQUFTLE1BQU07QUFDL0MsY0FBTSxPQUFPO0FBQ2IsYUFBSyxPQUFPO0FBQ1osYUFBSyxVQUFVLFdBQVc7QUFDMUIsYUFBSyxPQUFPO0FBQ1osYUFBSyxPQUFPO0FBQ1osYUFBSyxTQUFTO0FBQ2QsYUFBSyxhQUFhO0FBQ2xCLGFBQUssVUFBVTtBQUFBLE1BQ2pCO0FBQUEsTUFFQSxRQUFRLE9BQU8sV0FBVyxFQUFHLFVBQVU7QUFDckMsZUFBTyxZQUFZLFNBQVMsd0JBQXdCLE1BQU07QUFBQSxNQUM1RDtBQUFBLE1BRUEsQ0FBQyx3QkFBd0IsSUFBSTtBQUFBLElBQy9CO0FBRUEsUUFBTSx3QkFBd0IsT0FBTyxJQUFJLGtDQUFrQztBQUMzRSxRQUFNLHVCQUFOLGNBQW1DLFlBQVk7QUFBQSxNQUM3QyxZQUFhLFNBQVM7QUFDcEIsY0FBTSxPQUFPO0FBQ2IsYUFBSyxPQUFPO0FBQ1osYUFBSyxVQUFVLFdBQVc7QUFDMUIsYUFBSyxPQUFPO0FBQUEsTUFDZDtBQUFBLE1BRUEsUUFBUSxPQUFPLFdBQVcsRUFBRyxVQUFVO0FBQ3JDLGVBQU8sWUFBWSxTQUFTLHFCQUFxQixNQUFNO0FBQUEsTUFDekQ7QUFBQSxNQUVBLENBQUMscUJBQXFCLElBQUk7QUFBQSxJQUM1QjtBQUVBLFFBQU0sMkJBQTJCLE9BQU8sSUFBSSwyQ0FBMkM7QUFDdkYsUUFBTSwwQkFBTixjQUFzQyxZQUFZO0FBQUEsTUFDaEQsWUFBYSxTQUFTO0FBQ3BCLGNBQU0sT0FBTztBQUNiLGFBQUssT0FBTztBQUNaLGFBQUssVUFBVSxXQUFXO0FBQzFCLGFBQUssT0FBTztBQUFBLE1BQ2Q7QUFBQSxNQUVBLFFBQVEsT0FBTyxXQUFXLEVBQUcsVUFBVTtBQUNyQyxlQUFPLFlBQVksU0FBUyx3QkFBd0IsTUFBTTtBQUFBLE1BQzVEO0FBQUEsTUFFQSxDQUFDLHdCQUF3QixJQUFJO0FBQUEsSUFDL0I7QUFFQSxRQUFNLGNBQWMsT0FBTyxJQUFJLDRCQUE0QjtBQUMzRCxRQUFNLGFBQU4sY0FBeUIsWUFBWTtBQUFBLE1BQ25DLFlBQWEsU0FBUztBQUNwQixjQUFNLE9BQU87QUFDYixhQUFLLE9BQU87QUFDWixhQUFLLFVBQVUsV0FBVztBQUMxQixhQUFLLE9BQU87QUFBQSxNQUNkO0FBQUEsTUFFQSxRQUFRLE9BQU8sV0FBVyxFQUFHLFVBQVU7QUFDckMsZUFBTyxZQUFZLFNBQVMsV0FBVyxNQUFNO0FBQUEsTUFDL0M7QUFBQSxNQUVBLENBQUMsV0FBVyxJQUFJO0FBQUEsSUFDbEI7QUFFQSxRQUFNLHVCQUF1QixPQUFPLElBQUksOEJBQThCO0FBQ3RFLFFBQU0sc0JBQU4sY0FBa0MsV0FBVztBQUFBLE1BQzNDLFlBQWEsU0FBUztBQUNwQixjQUFNLE9BQU87QUFDYixhQUFLLE9BQU87QUFDWixhQUFLLFVBQVUsV0FBVztBQUMxQixhQUFLLE9BQU87QUFBQSxNQUNkO0FBQUEsTUFFQSxRQUFRLE9BQU8sV0FBVyxFQUFHLFVBQVU7QUFDckMsZUFBTyxZQUFZLFNBQVMsb0JBQW9CLE1BQU07QUFBQSxNQUN4RDtBQUFBLE1BRUEsQ0FBQyxvQkFBb0IsSUFBSTtBQUFBLElBQzNCO0FBRUEsUUFBTSxzQkFBc0IsT0FBTyxJQUFJLDJCQUEyQjtBQUNsRSxRQUFNLHFCQUFOLGNBQWlDLFlBQVk7QUFBQSxNQUMzQyxZQUFhLFNBQVM7QUFDcEIsY0FBTSxPQUFPO0FBQ2IsYUFBSyxPQUFPO0FBQ1osYUFBSyxVQUFVLFdBQVc7QUFDMUIsYUFBSyxPQUFPO0FBQUEsTUFDZDtBQUFBLE1BRUEsUUFBUSxPQUFPLFdBQVcsRUFBRyxVQUFVO0FBQ3JDLGVBQU8sWUFBWSxTQUFTLG1CQUFtQixNQUFNO0FBQUEsTUFDdkQ7QUFBQSxNQUVBLENBQUMsbUJBQW1CLElBQUk7QUFBQSxJQUMxQjtBQUVBLFFBQU0scUNBQXFDLE9BQU8sSUFBSSxrREFBa0Q7QUFDeEcsUUFBTSxvQ0FBTixjQUFnRCxZQUFZO0FBQUEsTUFDMUQsWUFBYSxTQUFTO0FBQ3BCLGNBQU0sT0FBTztBQUNiLGFBQUssT0FBTztBQUNaLGFBQUssVUFBVSxXQUFXO0FBQzFCLGFBQUssT0FBTztBQUFBLE1BQ2Q7QUFBQSxNQUVBLFFBQVEsT0FBTyxXQUFXLEVBQUcsVUFBVTtBQUNyQyxlQUFPLFlBQVksU0FBUyxrQ0FBa0MsTUFBTTtBQUFBLE1BQ3RFO0FBQUEsTUFFQSxDQUFDLGtDQUFrQyxJQUFJO0FBQUEsSUFDekM7QUFFQSxRQUFNLHNDQUFzQyxPQUFPLElBQUksa0RBQWtEO0FBQ3pHLFFBQU0scUNBQU4sY0FBaUQsWUFBWTtBQUFBLE1BQzNELFlBQWEsU0FBUztBQUNwQixjQUFNLE9BQU87QUFDYixhQUFLLE9BQU87QUFDWixhQUFLLFVBQVUsV0FBVztBQUMxQixhQUFLLE9BQU87QUFBQSxNQUNkO0FBQUEsTUFFQSxRQUFRLE9BQU8sV0FBVyxFQUFHLFVBQVU7QUFDckMsZUFBTyxZQUFZLFNBQVMsbUNBQW1DLE1BQU07QUFBQSxNQUN2RTtBQUFBLE1BRUEsQ0FBQyxtQ0FBbUMsSUFBSTtBQUFBLElBQzFDO0FBRUEsUUFBTSx3QkFBd0IsT0FBTyxJQUFJLGdDQUFnQztBQUN6RSxRQUFNLHVCQUFOLGNBQW1DLFlBQVk7QUFBQSxNQUM3QyxZQUFhLFNBQVM7QUFDcEIsY0FBTSxPQUFPO0FBQ2IsYUFBSyxPQUFPO0FBQ1osYUFBSyxVQUFVLFdBQVc7QUFDMUIsYUFBSyxPQUFPO0FBQUEsTUFDZDtBQUFBLE1BRUEsUUFBUSxPQUFPLFdBQVcsRUFBRyxVQUFVO0FBQ3JDLGVBQU8sWUFBWSxTQUFTLHFCQUFxQixNQUFNO0FBQUEsTUFDekQ7QUFBQSxNQUVBLENBQUMscUJBQXFCLElBQUk7QUFBQSxJQUM1QjtBQUVBLFFBQU0scUJBQXFCLE9BQU8sSUFBSSw2QkFBNkI7QUFDbkUsUUFBTSxvQkFBTixjQUFnQyxZQUFZO0FBQUEsTUFDMUMsWUFBYSxTQUFTO0FBQ3BCLGNBQU0sT0FBTztBQUNiLGFBQUssT0FBTztBQUNaLGFBQUssVUFBVSxXQUFXO0FBQzFCLGFBQUssT0FBTztBQUFBLE1BQ2Q7QUFBQSxNQUVBLFFBQVEsT0FBTyxXQUFXLEVBQUcsVUFBVTtBQUNyQyxlQUFPLFlBQVksU0FBUyxrQkFBa0IsTUFBTTtBQUFBLE1BQ3REO0FBQUEsTUFFQSxDQUFDLGtCQUFrQixJQUFJO0FBQUEsSUFDekI7QUFFQSxRQUFNLGVBQWUsT0FBTyxJQUFJLDZCQUE2QjtBQUM3RCxRQUFNLGNBQU4sY0FBMEIsWUFBWTtBQUFBLE1BQ3BDLFlBQWEsU0FBUyxRQUFRO0FBQzVCLGNBQU0sT0FBTztBQUNiLGFBQUssT0FBTztBQUNaLGFBQUssVUFBVSxXQUFXO0FBQzFCLGFBQUssT0FBTztBQUNaLGFBQUssU0FBUztBQUFBLE1BQ2hCO0FBQUEsTUFFQSxRQUFRLE9BQU8sV0FBVyxFQUFHLFVBQVU7QUFDckMsZUFBTyxZQUFZLFNBQVMsWUFBWSxNQUFNO0FBQUEsTUFDaEQ7QUFBQSxNQUVBLENBQUMsWUFBWSxJQUFJO0FBQUEsSUFDbkI7QUFFQSxRQUFNLHFCQUFxQixPQUFPLElBQUksb0NBQW9DO0FBQzFFLFFBQU0sb0JBQU4sY0FBZ0MsWUFBWTtBQUFBLE1BQzFDLFlBQWEsU0FBUztBQUNwQixjQUFNLE9BQU87QUFDYixhQUFLLE9BQU87QUFDWixhQUFLLFVBQVUsV0FBVztBQUMxQixhQUFLLE9BQU87QUFBQSxNQUNkO0FBQUEsTUFFQSxRQUFRLE9BQU8sV0FBVyxFQUFHLFVBQVU7QUFDckMsZUFBTyxZQUFZLFNBQVMsa0JBQWtCLE1BQU07QUFBQSxNQUN0RDtBQUFBLE1BRUEsQ0FBQyxrQkFBa0IsSUFBSTtBQUFBLElBQ3pCO0FBRUEsUUFBTSxvQ0FBb0MsT0FBTyxJQUFJLDJDQUEyQztBQUNoRyxRQUFNLG1DQUFOLGNBQStDLFlBQVk7QUFBQSxNQUN6RCxZQUFhLFNBQVM7QUFDcEIsY0FBTSxPQUFPO0FBQ2IsYUFBSyxPQUFPO0FBQ1osYUFBSyxVQUFVLFdBQVc7QUFDMUIsYUFBSyxPQUFPO0FBQUEsTUFDZDtBQUFBLE1BRUEsUUFBUSxPQUFPLFdBQVcsRUFBRyxVQUFVO0FBQ3JDLGVBQU8sWUFBWSxTQUFTLGlDQUFpQyxNQUFNO0FBQUEsTUFDckU7QUFBQSxNQUVBLENBQUMsaUNBQWlDLElBQUk7QUFBQSxJQUN4QztBQUVBLFFBQU0sbUJBQW1CLE9BQU8sSUFBSSxrQ0FBa0M7QUFDdEUsUUFBTSxrQkFBTixjQUE4QixNQUFNO0FBQUEsTUFDbEMsWUFBYSxTQUFTLE1BQU0sTUFBTTtBQUNoQyxjQUFNLE9BQU87QUFDYixhQUFLLE9BQU87QUFDWixhQUFLLE9BQU8sT0FBTyxPQUFPLElBQUksS0FBSztBQUNuQyxhQUFLLE9BQU8sT0FBTyxLQUFLLFNBQVMsSUFBSTtBQUFBLE1BQ3ZDO0FBQUEsTUFFQSxRQUFRLE9BQU8sV0FBVyxFQUFHLFVBQVU7QUFDckMsZUFBTyxZQUFZLFNBQVMsZ0JBQWdCLE1BQU07QUFBQSxNQUNwRDtBQUFBLE1BRUEsQ0FBQyxnQkFBZ0IsSUFBSTtBQUFBLElBQ3ZCO0FBRUEsUUFBTSxnQ0FBZ0MsT0FBTyxJQUFJLDRDQUE0QztBQUM3RixRQUFNLCtCQUFOLGNBQTJDLFlBQVk7QUFBQSxNQUNyRCxZQUFhLFNBQVM7QUFDcEIsY0FBTSxPQUFPO0FBQ2IsYUFBSyxPQUFPO0FBQ1osYUFBSyxVQUFVLFdBQVc7QUFDMUIsYUFBSyxPQUFPO0FBQUEsTUFDZDtBQUFBLE1BRUEsUUFBUSxPQUFPLFdBQVcsRUFBRyxVQUFVO0FBQ3JDLGVBQU8sWUFBWSxTQUFTLDZCQUE2QixNQUFNO0FBQUEsTUFDakU7QUFBQSxNQUVBLENBQUMsNkJBQTZCLElBQUk7QUFBQSxJQUNwQztBQUVBLFFBQU0scUJBQXFCLE9BQU8sSUFBSSxnQ0FBZ0M7QUFDdEUsUUFBTSxvQkFBTixjQUFnQyxZQUFZO0FBQUEsTUFDMUMsWUFBYSxTQUFTLE1BQU0sRUFBRSxTQUFTLEtBQUssR0FBRztBQUM3QyxjQUFNLE9BQU87QUFDYixhQUFLLE9BQU87QUFDWixhQUFLLFVBQVUsV0FBVztBQUMxQixhQUFLLE9BQU87QUFDWixhQUFLLGFBQWE7QUFDbEIsYUFBSyxPQUFPO0FBQ1osYUFBSyxVQUFVO0FBQUEsTUFDakI7QUFBQSxNQUVBLFFBQVEsT0FBTyxXQUFXLEVBQUcsVUFBVTtBQUNyQyxlQUFPLFlBQVksU0FBUyxrQkFBa0IsTUFBTTtBQUFBLE1BQ3REO0FBQUEsTUFFQSxDQUFDLGtCQUFrQixJQUFJO0FBQUEsSUFDekI7QUFFQSxRQUFNLGlCQUFpQixPQUFPLElBQUksK0JBQStCO0FBQ2pFLFFBQU0sZ0JBQU4sY0FBNEIsWUFBWTtBQUFBLE1BQ3RDLFlBQWEsU0FBUyxNQUFNLEVBQUUsU0FBUyxLQUFLLEdBQUc7QUFDN0MsY0FBTSxPQUFPO0FBQ2IsYUFBSyxPQUFPO0FBQ1osYUFBSyxVQUFVLFdBQVc7QUFDMUIsYUFBSyxPQUFPO0FBQ1osYUFBSyxhQUFhO0FBQ2xCLGFBQUssT0FBTztBQUNaLGFBQUssVUFBVTtBQUFBLE1BQ2pCO0FBQUEsTUFFQSxRQUFRLE9BQU8sV0FBVyxFQUFHLFVBQVU7QUFDckMsZUFBTyxZQUFZLFNBQVMsY0FBYyxNQUFNO0FBQUEsTUFDbEQ7QUFBQSxNQUVBLENBQUMsY0FBYyxJQUFJO0FBQUEsSUFDckI7QUFFQSxRQUFNLDhCQUE4QixPQUFPLElBQUksOEJBQThCO0FBQzdFLFFBQU0sNkJBQU4sY0FBeUMsWUFBWTtBQUFBLE1BQ25ELFlBQWEsT0FBTyxTQUFTLFNBQVM7QUFDcEMsY0FBTSxTQUFTLEVBQUUsT0FBTyxHQUFJLFdBQVcsQ0FBQyxFQUFHLENBQUM7QUFDNUMsYUFBSyxPQUFPO0FBQ1osYUFBSyxVQUFVLFdBQVc7QUFDMUIsYUFBSyxPQUFPO0FBQ1osYUFBSyxRQUFRO0FBQUEsTUFDZjtBQUFBLE1BRUEsUUFBUSxPQUFPLFdBQVcsRUFBRyxVQUFVO0FBQ3JDLGVBQU8sWUFBWSxTQUFTLDJCQUEyQixNQUFNO0FBQUEsTUFDL0Q7QUFBQSxNQUVBLENBQUMsMkJBQTJCLElBQUk7QUFBQSxJQUNsQztBQUVBLFFBQU0sNEJBQTRCLE9BQU8sSUFBSSwrQ0FBK0M7QUFDNUYsUUFBTSwyQkFBTixjQUF1QyxZQUFZO0FBQUEsTUFDakQsWUFBYSxTQUFTO0FBQ3BCLGNBQU0sT0FBTztBQUNiLGFBQUssT0FBTztBQUNaLGFBQUssVUFBVSxXQUFXO0FBQzFCLGFBQUssT0FBTztBQUFBLE1BQ2Q7QUFBQSxNQUVBLFFBQVEsT0FBTyxXQUFXLEVBQUcsVUFBVTtBQUNyQyxlQUFPLFlBQVksU0FBUyx5QkFBeUIsTUFBTTtBQUFBLE1BQzdEO0FBQUEsTUFFQSxLQUFLLHlCQUF5QixJQUFLO0FBQ2pDLGVBQU87QUFBQSxNQUNUO0FBQUEsSUFDRjtBQUVBLFdBQU8sVUFBVTtBQUFBLE1BQ2Y7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0Y7QUFBQTtBQUFBOzs7QUN4YUE7QUFBQTtBQUFBO0FBR0EsUUFBTSw2QkFBNkIsQ0FBQztBQUdwQyxRQUFNLHVCQUF1QjtBQUFBLE1BQzNCO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtB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Q0FBQyxJQUFJO0FBQy9CLE1BQUFBLFNBQVFBLFNBQVEsTUFBTSxJQUFJLENBQUMsSUFBSTtBQUMvQixNQUFBQSxTQUFRQSxTQUFRLEtBQUssSUFBSSxDQUFDLElBQUk7QUFFOUIsTUFBQUEsU0FBUUEsU0FBUSxTQUFTLElBQUksQ0FBQyxJQUFJO0FBQ2xDLE1BQUFBLFNBQVFBLFNBQVEsU0FBUyxJQUFJLENBQUMsSUFBSTtBQUNsQyxNQUFBQSxTQUFRQSxTQUFRLE9BQU8sSUFBSSxDQUFDLElBQUk7QUFFaEMsTUFBQUEsU0FBUUEsU0FBUSxNQUFNLElBQUksQ0FBQyxJQUFJO0FBQy9CLE1BQUFBLFNBQVFBLFNBQVEsTUFBTSxJQUFJLENBQUMsSUFBSTtBQUMvQixNQUFBQSxTQUFRQSxTQUFRLE9BQU8sSUFBSSxFQUFFLElBQUk7QUFDakMsTUFBQUEsU0FBUUEsU0FBUSxNQUFNLElBQUksRUFBRSxJQUFJO0FBQ2hDLE1BQUFBLFNBQVFBLFNBQVEsVUFBVSxJQUFJLEVBQUUsSUFBSTtBQUNwQyxNQUFBQSxTQUFRQSxTQUFRLFdBQVcsSUFBSSxFQUFFLElBQUk7QUFDckMsTUFBQUEsU0FBUUEsU0FBUSxRQUFRLElBQUksRUFBRSxJQUFJO0FBQ2xDLE1BQUFBLFNBQVFBLFNBQVEsUUFBUSxJQUFJLEVBQUUsSUFBSTtBQUNsQyxNQUFBQSxTQUFRQSxTQUFRLE1BQU0sSUFBSSxFQUFFLElBQUk7QUFDaEMsTUFBQUEsU0FBUUEsU0FBUSxRQUFRLElBQUksRUFBRSxJQUFJO0FBQ2xDLE1BQUFBLFNBQVFBLFNBQVEsUUFBUSxJQUFJLEVBQUUsSUFBSTtBQUNsQyxNQUFBQSxTQUFRQSxTQUFRLEtBQUssSUFBSSxFQUFFLElBQUk7QUFFL0IsTUFBQUEsU0FBUUEsU0FBUSxRQUFRLElBQUksRUFBRSxJQUFJO0FBQ2xDLE1BQUFBLFNBQVFBLFNBQVEsWUFBWSxJQUFJLEVBQUUsSUFBSTtBQUN0QyxNQUFBQSxTQUFRQSxTQUFRLFVBQVUsSUFBSSxFQUFFLElBQUk7QUFDcEMsTUFBQUEsU0FBUUEsU0FBUSxPQUFPLElBQUksRUFBRSxJQUFJO0FBRWpDLE1BQUFBLFNBQVFBLFNBQVEsVUFBVSxJQUFJLEVBQUUsSUFBSTtBQUNwQyxNQUFBQSxTQUFRQSxTQUFRLFFBQVEsSUFBSSxFQUFFLElBQUk7QUFDbEMsTUFBQUEsU0FBUUEsU0FBUSxXQUFXLElBQUksRUFBRSxJQUFJO0FBQ3JDLE1BQUFBLFNBQVFBLFNBQVEsYUFBYSxJQUFJLEVBQUUsSUFBSTtBQUV2QyxNQUFBQSxTQUFRQSxTQUFRLE9BQU8sSUFBSSxFQUFFLElBQUk7QUFDakMsTUFBQUEsU0FBUUEsU0FBUSxPQUFPLElBQUksRUFBRSxJQUFJO0FBRWpDLE1BQUFBLFNBQVFBLFNBQVEsWUFBWSxJQUFJLEVBQUUsSUFBSTtBQUV0QyxNQUFBQSxTQUFRQSxTQUFRLE1BQU0sSUFBSSxFQUFFLElBQUk7QUFDaEMsTUFBQUEsU0FBUUEsU0FBUSxRQUFRLElBQUksRUFBRSxJQUFJO0FBRWxDLE1BQUFBLFNBQVFBLFNBQVEsUUFBUSxJQUFJLEVBQUUsSUFBSTtBQUVsQyxNQUFBQSxTQUFRQSxTQUFRLEtBQUssSUFBSSxFQUFFLElBQUk7QUFFL0IsTUFBQUEsU0FBUUEsU0FBUSxVQUFVLElBQUksRUFBRSxJQUFJO0FBQ3BDLE1BQUFBLFNBQVFBLFNBQVEsVUFBVSxJQUFJLEVBQUUsSUFBSTtBQUNwQyxNQUFBQSxTQUFRQSxTQUFRLE9BQU8sSUFBSSxFQUFFLElBQUk7QUFDakMsTUFBQUEsU0FBUUEsU0FBUSxNQUFNLElBQUksRUFBRSxJQUFJO0FBQ2hDLE1BQUFBLFNBQVFBLFNBQVEsT0FBTyxJQUFJLEVBQUUsSUFBSTtBQUNqQyxNQUFBQSxTQUFRQSxTQUFRLFVBQVUsSUFBSSxFQUFFLElBQUk7QUFDcEMsTUFBQUEsU0FBUUEsU0FBUSxlQUFlLElBQUksRUFBRSxJQUFJO0FBQ3pDLE1BQUFBLFNBQVFBLFNBQVEsZUFBZSxJQUFJLEVBQUUsSUFBSTtBQUN6QyxNQUFBQSxTQUFRQSxTQUFRLFVBQVUsSUFBSSxFQUFFLElBQUk7QUFDcEMsTUFBQUEsU0FBUUEsU0FBUSxRQUFRLElBQUksRUFBRSxJQUFJO0FBRWxDLE1BQUFBLFNBQVFBLFNBQVEsT0FBTyxJQUFJLEVBQUUsSUFBSTtBQUFBLElBQ3JDLEdBQUcsVUFBVSxRQUFRLFlBQVksUUFBUSxVQUFVLENBQUMsRUFBRTtBQUN0RCxZQUFRLGVBQWU7QUFBQSxNQUNuQixRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsTUFDUixRQUFRLFVBQVU7QUFBQSxNQUNsQixRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUE7QUFBQSxNQUVSLFFBQVE7QUFBQSxJQUNaO0FBQ0EsWUFBUSxjQUFjO0FBQUEsTUFDbEIsUUFBUTtBQUFBLElBQ1o7QUFDQSxZQUFRLGVBQWU7QUFBQSxNQUNuQixRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEsTUFDUixRQUFRO0FBQUEs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QTtBQUVoRSxRQUFNO0FBQUE7QUFBQSxNQUF1QyxDQUFDLEtBQUssS0FBSyxLQUFLLEtBQUssR0FBRztBQUFBO0FBQ3JFLFFBQU0sb0JBQW9CLElBQUksSUFBSSxjQUFjO0FBS2hELFFBQU07QUFBQTtBQUFBLE1BQWlDO0FBQUEsUUFDckM7QUFBQSxRQUFLO0FBQUEsUUFBSztBQUFBLFFBQUs7QUFBQSxRQUFNO0FBQUEsUUFBTTtBQUFBLFFBQU07QUFBQSxRQUFNO0FBQUEsUUFBTTtBQUFBLFFBQU07QUFBQSxRQUFNO0FBQUEsUUFBTTtBQUFBLFFBQU07QUFBQSxRQUFNO0FBQUEsUUFBTTtBQUFBLFFBQU07QUFBQSxRQUFNO0FBQUEsUUFBTTtBQUFBLFFBQU07QUFBQSxRQUFNO0FBQUEsUUFDL0c7QUFBQSxRQUFNO0FBQUEsUUFBTTtBQUFBLFFBQU87QUFBQSxRQUFPO0FBQUEsUUFBTztBQUFBLFFBQU87QUFBQSxRQUFPO0FBQUEsUUFBTztBQUFBLFFBQU87QUFBQSxRQUFPO0FBQUEsUUFBTztBQUFBLFFBQU87QUFBQSxRQUFPO0FBQUEsUUFBTztBQUFBLFFBQU87QUFBQSxRQUN2RztBQUFBLFFBQU87QUFBQSxRQUFPO0FBQUEsUUFBTztBQUFBLFFBQU87QUFBQSxRQUFPO0FBQUEsUUFBTztBQUFBLFFBQU87QUFBQSxRQUFPO0FBQUEsUUFBTztBQUFBLFFBQU87QUFBQSxRQUFPO0FBQUEsUUFBTztBQUFBLFFBQU87QUFBQSxRQUFPO0FBQUEsUUFDbEc7QUFBQSxRQUFPO0FBQUEsUUFBTztBQUFBLFFBQU87QUFBQSxRQUFPO0FBQUEsUUFBTztBQUFBLFFBQU87QUFBQSxRQUFPO0FBQUEsUUFBTztBQUFBLFFBQU87QUFBQSxRQUFPO0FBQUEsUUFBTztBQUFBLFFBQU87QUFBQSxRQUFRO0FBQUEsUUFBUTtBQUFBLFFBQ3BHO0FBQUEsUUFBUTtBQUFBLFFBQVE7QUFBQSxRQUFRO0FBQUEsUUFBUTtBQUFBLFFBQVE7QUFBQSxRQUFRO0FBQUEsUUFBUTtBQUFBLFFBQVE7QUFBQSxRQUFRO0FBQUEsUUFBUTtB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UUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztB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QSxJQUFBLEdBQUEsSUFBQTtBQUNBLEVBQUFBLFdBQUFBLFdBQUEsVUFBQSxJQUFBLEdBQUEsSUFBQTtBQUNBLEVBQUFBLFdBQUFBLFdBQUEsYUFBQSxJQUFBLEdBQUEsSUFBQTtBQUNBLEVBQUFBLFdBQUFBLFdBQUEsVUFBQSxJQUFBLEdBQUEsSUFBQTtBQUNBLEVBQUFBLFdBQUFBLFdBQUEsYUFBQSxJQUFBLEdBQUEsSUFBQTtBQUNBLEVBQUFBLFdBQUFBLFdBQUEsbUJBQUEsSUFBQSxHQUFBLElBQUE7QUFDQSxFQUFBQSxXQUFBQSxXQUFBLG1CQUFBLElBQUEsR0FBQSxJQUFBO0FBQ0EsRUFBQUEsV0FBQUEsV0FBQSxZQUFBLElBQUEsR0FBQSxJQUFBO0FBQ0EsRUFBQUEsV0FBQUEsV0FBQSxjQUFBLElBQUEsR0FBQSxJQUFBO0FBQ0EsRUFBQUEsV0FBQUEsV0FBQSxpQkFBQSxJQUFBLEdBQUEsSUFBQTtBQUNBLEVBQUFBLFdBQUFBLFdBQUEsV0FBQSxJQUFBLEdBQUEsSUFBQTtBQUNBLEVBQUFBLFdBQUFBLFdBQUEsVUFBQSxJQUFBLEdBQUEsSUFBQTtBQUNBLEVBQUFBLFdBQUFBLFdBQUEsa0JBQUEsSUFBQSxHQUFBLElBQUE7QUFDQSxFQUFBQSxXQUFBQSxXQUFBLGVBQUEsSUFBQSxHQUFBLElBQUE7QUFDQSxFQUFBQSxXQUFBQSxXQUFBLDZCQUFBLElBQUEsR0FBQSxJQUFBO0FBQ0EsRUFBQUEsV0FBQUEsV0FBQSxnQkFBQSxJQUFBLEdBQUEsSUFBQTtBQUNBLEVBQUFBLFdBQUFBLFdBQUEsVUFBQSxJQUFBLEdBQUEsSUFBQTtBQUNBLEVBQUFBLFdBQUFBLFdBQUEsTUFBQSxJQUFBLEdBQUEsSUFBQTtBQUNBLEVBQUFBLFdBQUFBLFdBQUEsaUJBQUEsSUFBQSxHQUFBLElBQUE7QUFDQSxFQUFBQSxXQUFBQSxXQUFBLHFCQUFBLElBQUEsR0FBQSxJQUFBO0FBQ0EsRUFBQUEsV0FBQUEsV0FBQSxnQkFBQSxJQUFBLEdBQUEsSUFBQTtBQUNBLEVBQUFBLFdBQUFBLFdBQUEsWUFBQSxJQUFBLEdB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LFlBQVksSUFBSSxLQUFLO0FBQy9CLFVBQUksQ0FBQyxrQkFBa0IsUUFBUSxHQUFHO0FBQ2hDLG1CQUFXO0FBQUEsTUFDYjtBQUFBLElBQ0Y7QUFFQSxRQUFJLENBQUMsVUFBVTtBQUNiLE1BQUssVUFBVSx3RUFBd0U7QUFBQSxJQUN6RixPQUFPO0FBQ0wsTUFBSyxLQUFLLDBCQUEwQjtBQUFBLElBQ3RDO0FBQUEsRUFDRixTQUFTQyxRQUFZO0FBQ25CLElBQUssVUFBVUEsT0FBTSxPQUFPO0FBQUEsRUFDOUI7QUFDRjtBQUVBLElBQUk7IiwKICAibmFtZXMiOiBbImh0dHBPdmVySHR0cCIsICJodHRwc092ZXJIdHRwIiwgImh0dHBPdmVySHR0cHMiLCAiaHR0cHNPdmVySHR0cHMiLCAib3B0aW9ucyIsICJkZWJ1ZyIsICJlcnJvciIsICJzb2NrZXQiLCAicmVxdWlyZV90dW5uZWwiLCAiQmxvYiIsICJwYXRoIiwgImlkeCIsICJzdHJlYW0iLCAiZXJyIiwgImVycm9yIiwgInBhdGgiLCAicGF0aCIsICJlcnJvciIsICJlcnIiLCAic2Vzc2lvbiIsICJyZXF1aXJlX2NvbnN0YW50cyIsICJFUlJPUiIsICJUWVBFIiwgIkZMQUdTIiwgIkxFTklFTlRfRkxBR1MiLCAiTUVUSE9EUyIsICJGSU5JU0giLCAiSEVBREVSX1NUQVRFIiwgIkJ1ZmZlciIsICJCdWZmZXIiLCAicmVxdWlyZV9jb25zdGFudHMiLCAia2V5cyIsICJyZXF1aXJlX3V0aWwiLCAicGVyZm9ybWFuY2UiLCAicmVxdWlyZV9zeW1ib2xzIiwgIkJsb2IiLCAiZW50cnkiLCAiQmxvYiIsICJjaHVuayIsICJ2YWx1ZSIsICJlcnJvciIsICJjb25zdGFudHMiLCAiZXhwb3J0cyIsICJjbGllbnQiLCAicGF0aCIsICJjbGllbnQiLCAic29ja2V0IiwgInBhdGgiLCAiaGVhZGVycyIsICJlcnJvciIsICJlcnJvciIsICJwYXRoIiwgImNvbm5lY3QiLCAic29ja2V0IiwgIm9yaWdpbiIsICJlcnJvciIsICJwb29sIiwgImRpc3BhdGNoZXIiLCAiVVJMIiwgInBhdGgiLCAiUHJveHlBZ2VudCIsICJvcmlnaW4iLCAicHJvdG9jb2wiLCAib3B0cyIsICJQcm94eUFnZW50IiwgImVyciIsICJjb25zdW1lIiwgInJlcXVpcmVfdXRpbCIsICJjYWxsYmFjayIsICJyZXMiLCAib3BhcXVlIiwgImJvZHkiLCAibW9ja0Rpc3BhdGNoIiwgInBhdGgiLCAiZXJyb3IiLCAicmVwbHlQYXJhbWV0ZXJzIiwgIm5ld01vY2tEaXNwYXRjaCIsICJlcnJvciIsICJwYXRoIiwgInJlcXVpcmVfZ2xvYmFsIiwgIm9wdHMiLCAiZXJyIiwgImV4aXN0cyIsICJIZWFkZXJzIiwgIkhlYWRlcnMiLCAicmVxdWlyZV9yZXF1ZXN0IiwgIkhlYWRlcnMiLCAiRmluYWxpemF0aW9uUmVnaXN0cnkiLCAiZXJyb3IiLCAicmVxdWlyZV9zeW1ib2xzIiwgInJlcXVpcmVfdXRpbCIsICJlcnJvciIsICJ0eXBlIiwgInJlcXVpcmVfc3ltYm9scyIsICJyZXF1aXJlX3V0aWwiLCAicmVxdWVzdCIsICJjYWNoZSIsICJyZXF1aXJlX2NvbnN0YW50cyIsICJyZXF1aXJlX3V0aWwiLCAicGF0aCIsICJIZWFkZXJzIiwgInJlcXVpcmVfY29uc3RhbnRzIiwgInJlcXVpcmVfc3ltYm9scyIsICJyZXF1aXJlX3V0aWwiLCAiYnVmZmVyIiwgIkhlYWRlcnMiLCAiZXJyb3IiLCAiZXJyb3IiLCAiYm9keSIsICJub2RlIiwgInJlcXVpcmVfdXRpbCIsICJlcnJvciIsICJQcm94eUFnZW50IiwgInBhdGgiLCAiZnMiLCAib3MiLCAiSHR0cENvZGVzIiwgIkhlYWRlcnMiLCAiTWVkaWFUeXBlcyIsICJFT0wiLCAiRU9MIiwgIm9zIiwgIklTX1dJTkRPV1MiLCAib3MiLCAiRXhpdENvZGUiLCAiZXJyb3IiXQp9Cg== diff --git a/github-actions/linting/gha-sha-enforcer/package.json b/github-actions/linting/gha-sha-enforcer/package.json new file mode 100644 index 0000000000..1fcbfe473e --- /dev/null +++ b/github-actions/linting/gha-sha-enforcer/package.json @@ -0,0 +1,7 @@ +{ + "type": "module", + "dependencies": { + "@actions/core": "3.0.1", + "@types/node": "24.12.4" + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 792adac518..b141ad3883 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,7 +12,7 @@ importers: dependencies: '@angular/compiler-cli': specifier: 22.1.0-next.0 - version: 22.1.0-next.0(@angular/compiler@22.1.0-next.0)(typescript@6.0.3) + version: 22.1.0-next.0(@angular/compiler@22.1.0-next.0)(supports-color@10.2.2)(typescript@6.0.3) typescript: specifier: 6.0.3 version: 6.0.3 @@ -25,7 +25,7 @@ importers: version: 8.2.1 firebase-tools: specifier: 15.20.0 - version: 15.20.0(@types/node@24.13.2)(bufferutil@4.1.0)(encoding@0.1.13) + version: 15.20.0(@types/node@24.13.2)(bufferutil@4.1.0)(encoding@0.1.13)(supports-color@10.2.2) husky: specifier: 9.1.7 version: 9.1.7 @@ -157,7 +157,7 @@ importers: version: 22.1.0-next.0(@angular/compiler@22.1.0-next.0)(rxjs@7.8.2)(zone.js@0.16.2) '@angular/fire': specifier: 21.0.0-rc.0 - version: 21.0.0-rc.0(@angular/common@22.1.0-next.0(@angular/core@22.1.0-next.0(@angular/compiler@22.1.0-next.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0-next.0(@angular/compiler@22.1.0-next.0)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.1.0-next.0(@angular/animations@22.1.0-next.0(@angular/core@22.1.0-next.0(@angular/compiler@22.1.0-next.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.0-next.0(@angular/core@22.1.0-next.0(@angular/compiler@22.1.0-next.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0-next.0(@angular/compiler@22.1.0-next.0)(rxjs@7.8.2)(zone.js@0.16.2)))(chokidar@5.0.0)(firebase-tools@15.20.0(@types/node@24.13.2)(bufferutil@4.1.0)(encoding@0.1.13))(rxjs@7.8.2) + version: 21.0.0-rc.0(@angular/common@22.1.0-next.0(@angular/core@22.1.0-next.0(@angular/compiler@22.1.0-next.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0-next.0(@angular/compiler@22.1.0-next.0)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.1.0-next.0(@angular/animations@22.1.0-next.0(@angular/core@22.1.0-next.0(@angular/compiler@22.1.0-next.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.0-next.0(@angular/core@22.1.0-next.0(@angular/compiler@22.1.0-next.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0-next.0(@angular/compiler@22.1.0-next.0)(rxjs@7.8.2)(zone.js@0.16.2)))(chokidar@5.0.0)(firebase-tools@15.20.0(@types/node@24.13.2)(bufferutil@4.1.0)(encoding@0.1.13)(supports-color@10.2.2))(rxjs@7.8.2) '@angular/forms': specifier: 22.1.0-next.0 version: 22.1.0-next.0(@angular/common@22.1.0-next.0(@angular/core@22.1.0-next.0(@angular/compiler@22.1.0-next.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0-next.0(@angular/compiler@22.1.0-next.0)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.1.0-next.0(@angular/animations@22.1.0-next.0(@angular/core@22.1.0-next.0(@angular/compiler@22.1.0-next.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.0-next.0(@angular/core@22.1.0-next.0(@angular/compiler@22.1.0-next.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0-next.0(@angular/compiler@22.1.0-next.0)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2) @@ -205,13 +205,13 @@ importers: version: 24.13.2 firebase-admin: specifier: 13.10.0 - version: 13.10.0(encoding@0.1.13) + version: 13.10.0(encoding@0.1.13)(supports-color@10.2.2) firebase-functions: specifier: 7.2.5 - version: 7.2.5(@apollo/server@5.5.1(graphql@16.14.2))(@as-integrations/express4@1.1.2(@apollo/server@5.5.1(graphql@16.14.2))(express@5.2.1))(firebase-admin@13.10.0(encoding@0.1.13))(graphql@16.14.2) + version: 7.2.5(@apollo/server@5.5.1(graphql@16.14.2))(@as-integrations/express4@1.1.2(@apollo/server@5.5.1(graphql@16.14.2))(express@5.2.1))(firebase-admin@13.10.0(encoding@0.1.13)(supports-color@10.2.2))(graphql@16.14.2) firebase-tools: specifier: 15.20.0 - version: 15.20.0(@types/node@24.13.2)(bufferutil@4.1.0)(encoding@0.1.13) + version: 15.20.0(@types/node@24.13.2)(bufferutil@4.1.0)(encoding@0.1.13)(supports-color@10.2.2) bazel: dependencies: @@ -241,7 +241,7 @@ importers: version: 5.3.4 browser-sync: specifier: 3.0.4 - version: 3.0.4(bufferutil@4.1.0)(utf-8-validate@6.0.6) + version: 3.0.4(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6) diff: specifier: ^9.0.0 version: 9.0.0 @@ -432,6 +432,15 @@ importers: specifier: 3.1.6 version: 3.1.6 + github-actions/linting/gha-sha-enforcer: + dependencies: + '@actions/core': + specifier: 3.0.1 + version: 3.0.1 + '@types/node': + specifier: 24.12.4 + version: 24.12.4 + github-actions/org-file-sync: dependencies: '@actions/core': @@ -6196,10 +6205,10 @@ snapshots: rxjs: 7.8.2 tslib: 2.8.1 - '@angular/compiler-cli@22.1.0-next.0(@angular/compiler@22.1.0-next.0)(typescript@6.0.3)': + '@angular/compiler-cli@22.1.0-next.0(@angular/compiler@22.1.0-next.0)(supports-color@10.2.2)(typescript@6.0.3)': dependencies: '@angular/compiler': 22.1.0-next.0 - '@babel/core': 7.29.7 + '@babel/core': 7.29.7(supports-color@10.2.2) '@jridgewell/sourcemap-codec': 1.5.5 chokidar: 5.0.0 convert-source-map: 1.9.0 @@ -6224,7 +6233,7 @@ snapshots: '@angular/compiler': 22.1.0-next.0 zone.js: 0.16.2 - '@angular/fire@21.0.0-rc.0(@angular/common@22.1.0-next.0(@angular/core@22.1.0-next.0(@angular/compiler@22.1.0-next.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0-next.0(@angular/compiler@22.1.0-next.0)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.1.0-next.0(@angular/animations@22.1.0-next.0(@angular/core@22.1.0-next.0(@angular/compiler@22.1.0-next.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.0-next.0(@angular/core@22.1.0-next.0(@angular/compiler@22.1.0-next.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0-next.0(@angular/compiler@22.1.0-next.0)(rxjs@7.8.2)(zone.js@0.16.2)))(chokidar@5.0.0)(firebase-tools@15.20.0(@types/node@24.13.2)(bufferutil@4.1.0)(encoding@0.1.13))(rxjs@7.8.2)': + '@angular/fire@21.0.0-rc.0(@angular/common@22.1.0-next.0(@angular/core@22.1.0-next.0(@angular/compiler@22.1.0-next.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0-next.0(@angular/compiler@22.1.0-next.0)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.1.0-next.0(@angular/animations@22.1.0-next.0(@angular/core@22.1.0-next.0(@angular/compiler@22.1.0-next.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.0-next.0(@angular/core@22.1.0-next.0(@angular/compiler@22.1.0-next.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0-next.0(@angular/compiler@22.1.0-next.0)(rxjs@7.8.2)(zone.js@0.16.2)))(chokidar@5.0.0)(firebase-tools@15.20.0(@types/node@24.13.2)(bufferutil@4.1.0)(encoding@0.1.13)(supports-color@10.2.2))(rxjs@7.8.2)': dependencies: '@angular-devkit/schematics': 21.2.15(chokidar@5.0.0) '@angular/common': 22.1.0-next.0(@angular/core@22.1.0-next.0(@angular/compiler@22.1.0-next.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2) @@ -6236,7 +6245,7 @@ snapshots: rxjs: 7.8.2 tslib: 2.8.1 optionalDependencies: - firebase-tools: 15.20.0(@types/node@24.13.2)(bufferutil@4.1.0)(encoding@0.1.13) + firebase-tools: 15.20.0(@types/node@24.13.2)(bufferutil@4.1.0)(encoding@0.1.13)(supports-color@10.2.2) transitivePeerDependencies: - '@react-native-async-storage/async-storage' - chokidar @@ -6425,7 +6434,7 @@ snapshots: '@babel/compat-data@7.29.7': {} - '@babel/core@7.29.7': + '@babel/core@7.29.7(supports-color@10.2.2)': dependencies: '@babel/code-frame': 7.29.7 '@babel/generator': 7.29.7 @@ -6434,7 +6443,7 @@ snapshots: '@babel/helpers': 7.29.7 '@babel/parser': 7.29.7 '@babel/template': 7.29.7 - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@10.2.2) '@babel/types': 7.29.7 '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 @@ -6465,17 +6474,17 @@ snapshots: '@babel/helper-module-imports@7.29.7': dependencies: - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@10.2.2) '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.29.7 + '@babel/core': 7.29.7(supports-color@10.2.2) '@babel/helper-module-imports': 7.29.7 '@babel/helper-validator-identifier': 7.29.7 - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@10.2.2) transitivePeerDependencies: - supports-color @@ -6500,7 +6509,7 @@ snapshots: '@babel/parser': 7.29.7 '@babel/types': 7.29.7 - '@babel/traverse@7.29.7': + '@babel/traverse@7.29.7(supports-color@10.2.2)': dependencies: '@babel/code-frame': 7.29.7 '@babel/generator': 7.29.7 @@ -7105,7 +7114,7 @@ snapshots: async-retry: 1.3.3 duplexify: 4.1.3 fast-xml-parser: 5.9.0 - gaxios: 6.7.1(encoding@0.1.13) + gaxios: 6.7.1(encoding@0.1.13)(supports-color@10.2.2) google-auth-library: 9.15.1(encoding@0.1.13) html-entities: 2.6.0 mime: 3.0.0 @@ -8456,24 +8465,24 @@ snapshots: fresh: 0.5.2 mitt: 1.2.0 - browser-sync-ui@3.0.4(bufferutil@4.1.0)(utf-8-validate@6.0.6): + browser-sync-ui@3.0.4(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6): dependencies: async-each-series: 0.1.1 chalk: 4.1.2 connect-history-api-fallback: 1.6.0 immutable: 3.8.3 server-destroy: 1.0.1 - socket.io-client: 4.8.3(bufferutil@4.1.0)(utf-8-validate@6.0.6) + socket.io-client: 4.8.3(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6) stream-throttle: 0.1.3 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - browser-sync@3.0.4(bufferutil@4.1.0)(utf-8-validate@6.0.6): + browser-sync@3.0.4(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6): dependencies: browser-sync-client: 3.0.4 - browser-sync-ui: 3.0.4(bufferutil@4.1.0)(utf-8-validate@6.0.6) + browser-sync-ui: 3.0.4(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6) bs-recipes: 1.3.4 chalk: 4.1.2 chokidar: 3.6.0 @@ -8497,7 +8506,7 @@ snapshots: serve-index: 1.9.2 serve-static: 1.16.3 server-destroy: 1.0.1 - socket.io: 4.8.3(bufferutil@4.1.0)(utf-8-validate@6.0.6) + socket.io: 4.8.3(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6) ua-parser-js: 1.0.41 yargs: 17.7.2 transitivePeerDependencies: @@ -9024,7 +9033,7 @@ snapshots: dependencies: once: 1.4.0 - engine.io-client@6.6.5(bufferutil@4.1.0)(utf-8-validate@6.0.6): + engine.io-client@6.6.5(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6): dependencies: '@socket.io/component-emitter': 3.1.2 debug: 4.4.3(supports-color@10.2.2) @@ -9038,7 +9047,7 @@ snapshots: engine.io-parser@5.2.3: {} - engine.io@6.6.8(bufferutil@4.1.0)(utf-8-validate@6.0.6): + engine.io@6.6.8(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6): dependencies: '@types/cors': 2.8.19 '@types/node': 24.13.2 @@ -9389,7 +9398,7 @@ snapshots: locate-path: 5.0.0 path-exists: 4.0.0 - firebase-admin@13.10.0(encoding@0.1.13): + firebase-admin@13.10.0(encoding@0.1.13)(supports-color@10.2.2): dependencies: '@fastify/busboy': 3.2.0 '@firebase/database-compat': 2.1.4 @@ -9398,7 +9407,7 @@ snapshots: fast-deep-equal: 3.1.3 google-auth-library: 10.7.0(supports-color@10.2.2) jsonwebtoken: 9.0.3 - jwks-rsa: 3.2.2 + jwks-rsa: 3.2.2(supports-color@10.2.2) optionalDependencies: '@google-cloud/firestore': 7.11.6(encoding@0.1.13) '@google-cloud/storage': 7.21.0(encoding@0.1.13) @@ -9406,13 +9415,13 @@ snapshots: - encoding - supports-color - firebase-functions@7.2.5(@apollo/server@5.5.1(graphql@16.14.2))(@as-integrations/express4@1.1.2(@apollo/server@5.5.1(graphql@16.14.2))(express@5.2.1))(firebase-admin@13.10.0(encoding@0.1.13))(graphql@16.14.2): + firebase-functions@7.2.5(@apollo/server@5.5.1(graphql@16.14.2))(@as-integrations/express4@1.1.2(@apollo/server@5.5.1(graphql@16.14.2))(express@5.2.1))(firebase-admin@13.10.0(encoding@0.1.13)(supports-color@10.2.2))(graphql@16.14.2): dependencies: '@types/cors': 2.8.19 '@types/express': 4.17.25 cors: 2.8.6 express: 4.22.2 - firebase-admin: 13.10.0(encoding@0.1.13) + firebase-admin: 13.10.0(encoding@0.1.13)(supports-color@10.2.2) protobufjs: 7.6.4 optionalDependencies: '@apollo/server': 5.5.1(graphql@16.14.2) @@ -9421,7 +9430,7 @@ snapshots: transitivePeerDependencies: - supports-color - firebase-tools@15.20.0(@types/node@24.13.2)(bufferutil@4.1.0)(encoding@0.1.13): + firebase-tools@15.20.0(@types/node@24.13.2)(bufferutil@4.1.0)(encoding@0.1.13)(supports-color@10.2.2): dependencies: '@apphosting/common': 0.0.8 '@electric-sql/pglite': 0.3.16 @@ -9454,7 +9463,7 @@ snapshots: form-data: 4.0.6 fs-extra: 10.1.0 fuzzy: 0.1.3 - gaxios: 6.7.1(encoding@0.1.13) + gaxios: 6.7.1(encoding@0.1.13)(supports-color@10.2.2) glob: 10.5.0 google-auth-library: 9.15.1(encoding@0.1.13) ignore: 7.0.5 @@ -9476,9 +9485,9 @@ snapshots: pg: 8.21.0 pg-gateway: 0.3.0-beta.4 pglite-2: '@electric-sql/pglite@0.2.17' - portfinder: 1.0.38 + portfinder: 1.0.38(supports-color@10.2.2) progress: 2.0.3 - proxy-agent: 6.5.0 + proxy-agent: 6.5.0(supports-color@10.2.2) retry: 0.13.1 semver: 7.8.4 sql-formatter: 15.8.1 @@ -9489,7 +9498,7 @@ snapshots: tcp-port-used: 1.0.3 tmp: 0.2.7 triple-beam: 1.4.1 - universal-analytics: 0.5.4 + universal-analytics: 0.5.4(supports-color@10.2.2) update-notifier-cjs: 5.1.7(encoding@0.1.13) uuid: 11.1.1 winston: 3.19.0 @@ -9629,7 +9638,7 @@ snapshots: fuzzy@0.1.3: {} - gaxios@6.7.1(encoding@0.1.13): + gaxios@6.7.1(encoding@0.1.13)(supports-color@10.2.2): dependencies: extend: 3.0.2 https-proxy-agent: 7.0.6(supports-color@10.2.2) @@ -9659,7 +9668,7 @@ snapshots: gcp-metadata@6.1.1(encoding@0.1.13): dependencies: - gaxios: 6.7.1(encoding@0.1.13) + gaxios: 6.7.1(encoding@0.1.13)(supports-color@10.2.2) google-logging-utils: 0.0.2 json-bigint: 1.0.0 transitivePeerDependencies: @@ -9669,7 +9678,7 @@ snapshots: gcp-metadata@8.1.2(supports-color@10.2.2): dependencies: gaxios: 7.1.5(supports-color@10.2.2) - google-logging-utils: 1.1.3 + google-logging-utils: 1.1.4 json-bigint: 1.0.0 transitivePeerDependencies: - supports-color @@ -9710,7 +9719,7 @@ snapshots: dependencies: resolve-pkg-maps: 1.0.0 - get-uri@6.0.5: + get-uri@6.0.5(supports-color@10.2.2): dependencies: basic-ftp: 5.3.1 data-uri-to-buffer: 6.0.2 @@ -9777,7 +9786,7 @@ snapshots: ecdsa-sig-formatter: 1.0.11 gaxios: 7.1.5(supports-color@10.2.2) gcp-metadata: 8.1.3(supports-color@10.2.2) - google-logging-utils: 1.1.3 + google-logging-utils: 1.1.4 gtoken: 8.0.0(supports-color@10.2.2) jws: 4.0.1 transitivePeerDependencies: @@ -9798,7 +9807,7 @@ snapshots: dependencies: base64-js: 1.5.1 ecdsa-sig-formatter: 1.0.11 - gaxios: 6.7.1(encoding@0.1.13) + gaxios: 6.7.1(encoding@0.1.13)(supports-color@10.2.2) gcp-metadata: 6.1.1(encoding@0.1.13) gtoken: 7.1.0(encoding@0.1.13) jws: 4.0.1 @@ -9878,7 +9887,7 @@ snapshots: gtoken@7.1.0(encoding@0.1.13): dependencies: - gaxios: 6.7.1(encoding@0.1.13) + gaxios: 6.7.1(encoding@0.1.13)(supports-color@10.2.2) jws: 4.0.1 transitivePeerDependencies: - encoding @@ -10325,7 +10334,7 @@ snapshots: ecdsa-sig-formatter: 1.0.11 safe-buffer: 5.2.1 - jwks-rsa@3.2.2: + jwks-rsa@3.2.2(supports-color@10.2.2): dependencies: '@types/jsonwebtoken': 9.0.10 debug: 4.4.3(supports-color@10.2.2) @@ -10766,12 +10775,12 @@ snapshots: p-try@2.2.0: {} - pac-proxy-agent@7.2.0: + pac-proxy-agent@7.2.0(supports-color@10.2.2): dependencies: '@tootallnate/quickjs-emscripten': 0.23.0 agent-base: 7.1.4 debug: 4.4.3(supports-color@10.2.2) - get-uri: 6.0.5 + get-uri: 6.0.5(supports-color@10.2.2) http-proxy-agent: 7.0.2(supports-color@10.2.2) https-proxy-agent: 7.0.6(supports-color@10.2.2) pac-resolver: 7.0.1 @@ -10892,7 +10901,7 @@ snapshots: pkce-challenge@5.0.1: {} - portfinder@1.0.38: + portfinder@1.0.38(supports-color@10.2.2): dependencies: async: 3.2.6 debug: 4.4.3(supports-color@10.2.2) @@ -10981,14 +10990,14 @@ snapshots: forwarded: 0.2.0 ipaddr.js: 1.9.1 - proxy-agent@6.5.0: + proxy-agent@6.5.0(supports-color@10.2.2): dependencies: agent-base: 7.1.4 debug: 4.4.3(supports-color@10.2.2) http-proxy-agent: 7.0.2(supports-color@10.2.2) https-proxy-agent: 7.0.6(supports-color@10.2.2) lru-cache: 7.18.3 - pac-proxy-agent: 7.2.0 + pac-proxy-agent: 7.2.0(supports-color@10.2.2) proxy-from-env: 1.1.0 socks-proxy-agent: 8.0.5 transitivePeerDependencies: @@ -11405,7 +11414,7 @@ snapshots: smart-buffer@4.2.0: {} - socket.io-adapter@2.5.7(bufferutil@4.1.0)(utf-8-validate@6.0.6): + socket.io-adapter@2.5.7(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6): dependencies: debug: 4.4.3(supports-color@10.2.2) ws: 8.20.1(bufferutil@4.1.0)(utf-8-validate@6.0.6) @@ -11414,11 +11423,11 @@ snapshots: - supports-color - utf-8-validate - socket.io-client@4.8.3(bufferutil@4.1.0)(utf-8-validate@6.0.6): + socket.io-client@4.8.3(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6): dependencies: '@socket.io/component-emitter': 3.1.2 debug: 4.4.3(supports-color@10.2.2) - engine.io-client: 6.6.5(bufferutil@4.1.0)(utf-8-validate@6.0.6) + engine.io-client: 6.6.5(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6) socket.io-parser: 4.2.6 transitivePeerDependencies: - bufferutil @@ -11432,14 +11441,14 @@ snapshots: transitivePeerDependencies: - supports-color - socket.io@4.8.3(bufferutil@4.1.0)(utf-8-validate@6.0.6): + socket.io@4.8.3(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6): dependencies: accepts: 1.3.8 base64id: 2.0.0 cors: 2.8.6 debug: 4.4.3(supports-color@10.2.2) - engine.io: 6.6.8(bufferutil@4.1.0)(utf-8-validate@6.0.6) - socket.io-adapter: 2.5.7(bufferutil@4.1.0)(utf-8-validate@6.0.6) + engine.io: 6.6.8(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6) + socket.io-adapter: 2.5.7(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6) socket.io-parser: 4.2.6 transitivePeerDependencies: - bufferutil @@ -11876,7 +11885,7 @@ snapshots: dependencies: crypto-random-string: 2.0.0 - universal-analytics@0.5.4: + universal-analytics@0.5.4(supports-color@10.2.2): dependencies: debug: 4.4.3(supports-color@10.2.2) uuid: 14.0.0 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index c61a00e51c..e1f40b8cc0 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -17,6 +17,7 @@ packages: - github-actions/previews/pack-and-upload-artifact - github-actions/previews/upload-artifacts-to-firebase - github-actions/post-approval-changes + - github-actions/linting/gha-sha-enforcer - github-actions/org-file-sync - github-actions/branch-manager - github-actions/saucelabs