diff --git a/.prettierignore b/.prettierignore index bd211fdcd..90844de6d 100644 --- a/.prettierignore +++ b/.prettierignore @@ -15,6 +15,7 @@ github-actions/previews/pack-and-upload-artifact/inject-artifact-metadata.js github-actions/previews/upload-artifacts-to-firebase/extract-artifact-metadata.js github-actions/previews/upload-artifacts-to-firebase/fetch-workflow-artifact.js github-actions/saucelabs/set-saucelabs-env.js +github-actions/issue-labeling/main.js github-actions/slash-commands/main.js github-actions/unified-status-check/main.js diff --git a/github-actions/issue-labeling/BUILD.bazel b/github-actions/issue-labeling/BUILD.bazel new file mode 100644 index 000000000..d4083aa5c --- /dev/null +++ b/github-actions/issue-labeling/BUILD.bazel @@ -0,0 +1,65 @@ +load("@devinfra_npm//:defs.bzl", "npm_link_all_packages") +load("//tools:defaults.bzl", "esbuild_checked_in", "jasmine_test", "ts_project") + +package(default_visibility = ["//github-actions/issue-labeling:__subpackages__"]) + +npm_link_all_packages() + +ts_project( + name = "lib", + srcs = glob( + ["lib/*.ts"], + exclude = ["lib/*.spec.ts"], + ), + tsconfig = "//github-actions:tsconfig", + deps = [ + ":node_modules/@actions/core", + ":node_modules/@actions/github", + ":node_modules/@google/generative-ai", + ":node_modules/@octokit/openapi-types", + ":node_modules/@octokit/rest", + ":node_modules/@types/node", + "//github-actions:utils", + ], +) + +ts_project( + name = "test_lib", + testonly = True, + srcs = glob(["lib/*.spec.ts"]), + tsconfig = "//github-actions:tsconfig_test", + deps = [ + ":lib", + ":node_modules/@actions/core", + ":node_modules/@actions/github", + ":node_modules/@google/generative-ai", + ":node_modules/@octokit/openapi-types", + ":node_modules/@octokit/rest", + ":node_modules/@types/jasmine", + ":node_modules/@types/node", + "//github-actions:utils", + ], +) + +jasmine_test( + name = "test", + data = [ + "issue-context.json", + ":test_lib", + ], + env = { + "GITHUB_REPOSITORY": "angular/angular", + "GITHUB_EVENT_PATH": "$(location :issue-context.json)", + }, +) + +esbuild_checked_in( + name = "main", + srcs = [ + ":lib", + ], + entry_point = "lib/main.ts", + format = "esm", + platform = "node", + target = "node22", +) diff --git a/github-actions/issue-labeling/action.yml b/github-actions/issue-labeling/action.yml new file mode 100644 index 000000000..3370ff488 --- /dev/null +++ b/github-actions/issue-labeling/action.yml @@ -0,0 +1,12 @@ +name: 'Issue Labeling' +description: 'Automatically labels issues using Gemini based on their content' +inputs: + angular-robot-key: + description: 'The private key for the Angular Robot' + required: true + google-generative-ai-key: + description: 'The API key for Google Generative AI' + required: true +runs: + using: 'node22' + main: 'main.js' diff --git a/github-actions/issue-labeling/issue-context.json b/github-actions/issue-labeling/issue-context.json new file mode 100644 index 000000000..c21375b63 --- /dev/null +++ b/github-actions/issue-labeling/issue-context.json @@ -0,0 +1,13 @@ +{ + "issue": { + "number": 123, + "owner": "angular", + "repo": "angular", + "title": "Tough Issue", + "body": "Complex Body" + }, + "repo": { + "owner": "angular", + "repo": "angular" + } +} diff --git a/github-actions/issue-labeling/lib/issue-labeling.ts b/github-actions/issue-labeling/lib/issue-labeling.ts new file mode 100644 index 000000000..7ed226666 --- /dev/null +++ b/github-actions/issue-labeling/lib/issue-labeling.ts @@ -0,0 +1,125 @@ +import * as core from '@actions/core'; +import {context} from '@actions/github'; +import {GoogleGenerativeAI} from '@google/generative-ai'; +import {Octokit} from '@octokit/rest'; +import {ANGULAR_ROBOT, getAuthTokenFor, revokeActiveInstallationToken} from '../../utils.js'; +import {components} from '@octokit/openapi-types'; + +export class IssueLabeling { + static run = async () => { + const token = await getAuthTokenFor(ANGULAR_ROBOT); + const git = new Octokit({auth: token}); + try { + const inst = new this(git, core); + await inst.run(); + } finally { + await revokeActiveInstallationToken(git); + } + }; + + /** Set of area labels available in the current repository. */ + repoAreaLabels = new Set(); + /** The issue data fetched from Github. */ + issueData?: components['schemas']['issue']; + + constructor( + private git: Octokit, + private coreService: typeof core, + ) {} + + async run() { + const {issue} = context; + if (!issue || !issue.number) { + this.coreService.info('No issue context found. Skipping.'); + return; + } + this.coreService.info(`Issue #${issue.number}`); + + // Initialize labels and issue data + await this.initialize(); + + const model = this.getGenerativeModel(); + + const prompt = ` +You are a helper for an open source repository. +Your task is to allow the user to categorize the issue with an "area: " label. +The following is the issue title and body: + +Title: ${this.issueData!.title} +Body: +${this.issueData!.body} + +The available area labels are: +${Array.from(this.repoAreaLabels) + .map((label) => ` - ${label}`) + .join('\n')} + +Based on the content, which area label is the best fit? +Respond ONLY with the exact label name (e.g. "area: core"). +If you are strictly unsure or if multiple labels match equally well, respond with "ambiguous". +If no area label applies, respond with "none". +`; + + try { + const result = await model.generateContent(prompt); + const response = result.response; + const text = response.text().trim(); + + this.coreService.info(`Gemini suggested label: ${text}`); + + if (this.repoAreaLabels.has(text)) { + await this.addLabel(text); + } else { + this.coreService.info( + `Generated label "${text}" is not in the list of valid area labels or is "ambiguous"/"none".`, + ); + } + } catch (e) { + this.coreService.error('Failed to generate content from Gemini.'); + this.coreService.setFailed(e as Error); + } + } + + getGenerativeModel() { + const apiKey = this.coreService.getInput('google-generative-ai-key', {required: true}); + const genAI = new GoogleGenerativeAI(apiKey); + return genAI.getGenerativeModel({model: 'gemini-2.0-flash'}); + } + + async addLabel(label: string) { + const {number: issue_number, owner, repo} = context.issue; + try { + await this.git.issues.addLabels({repo, owner, issue_number, labels: [label]}); + this.coreService.info(`Added ${label} label to Issue #${issue_number}`); + } catch (err) { + this.coreService.error(`Failed to add ${label} label to Issue #${issue_number}`); + this.coreService.debug(err as string); + } + } + + async initialize() { + const {owner, repo} = context.issue; + await Promise.all([ + this.git + .paginate(this.git.issues.listLabelsForRepo, {owner, repo}) + .then((labels) => + labels + .filter((l) => l.name.startsWith('area: ')) + .forEach((l) => this.repoAreaLabels.add(l.name)), + ), + this.git.issues.get({owner, repo, issue_number: context.issue.number}).then((resp) => { + this.issueData = resp.data; + }), + ]); + + if (this.repoAreaLabels.size === 0) { + this.coreService.warning('No area labels found in the repository.'); + return; + } + + if (!this.issueData) { + this.coreService.error('Failed to fetch issue data.'); + return; + } + } +} diff --git a/github-actions/issue-labeling/lib/main.spec.ts b/github-actions/issue-labeling/lib/main.spec.ts new file mode 100644 index 000000000..bcff2e48c --- /dev/null +++ b/github-actions/issue-labeling/lib/main.spec.ts @@ -0,0 +1,124 @@ +import {Octokit} from '@octokit/rest'; +import * as core from '@actions/core'; +import {context} from '@actions/github'; +import {GenerativeModel} from '@google/generative-ai'; +import {IssueLabeling} from './issue-labeling.js'; + +describe('IssueLabeling', () => { + let mockGit: { + paginate: jasmine.Spy; + issues: { + listLabelsForRepo: jasmine.Spy; + addLabels: jasmine.Spy; + get: jasmine.Spy; + }; + }; + let mockModel: jasmine.SpyObj; + let mockCore: jasmine.SpyObj; + let issueLabeling: IssueLabeling; + + beforeEach(() => { + mockGit = { + paginate: jasmine.createSpy('paginate'), + issues: { + listLabelsForRepo: jasmine.createSpy('listLabelsForRepo'), + addLabels: jasmine.createSpy('addLabels'), + get: jasmine.createSpy('get'), + }, + }; + + mockGit.issues.addLabels.and.returnValue(Promise.resolve({})); + mockGit.issues.get.and.returnValue( + Promise.resolve({ + data: { + title: 'Tough Issue', + body: 'Complex Body', + }, + }), + ); + mockGit.paginate.and.callFake((fn: any, opts: any) => { + // Return value matching listLabelsForRepo signature + return Promise.resolve([{name: 'area: core'}, {name: 'area: router'}, {name: 'bug'}]); + }); + + mockModel = jasmine.createSpyObj('GenerativeModel', ['generateContent']); + mockCore = jasmine.createSpyObj('core', [ + 'getInput', + 'info', + 'error', + 'warning', + 'debug', + 'setFailed', + ]); + mockCore.getInput.and.returnValue('mock-ai-key'); + mockCore.error.and.callFake(console.error); + mockCore.info.and.callFake(console.info); + mockCore.warning.and.callFake(console.warn); + mockCore.debug.and.callFake(console.debug); + mockCore.setFailed.and.callFake(console.error); + + // We must cast the mock to Octokit because the mock only implements the subset used by the class. + // This is standard for mocking large interfaces like Octokit. + issueLabeling = new IssueLabeling(mockGit as unknown as Octokit, mockCore); + + spyOn(issueLabeling, 'getGenerativeModel').and.returnValue(mockModel); + }); + + it('should initialize labels correctly', async () => { + await issueLabeling.initialize(); + expect(issueLabeling.repoAreaLabels.has('area: core')).toBe(true); + expect(issueLabeling.repoAreaLabels.has('area: router')).toBe(true); + expect(issueLabeling.repoAreaLabels.has('bug')).toBe(false); + }); + + it('should apply a label when Gemini is confident', async () => { + mockModel.generateContent.and.returnValue( + Promise.resolve({ + response: { + text: () => 'area: core', + } as any, // Cast response structure as any because it's deeply nested and hard to construct manually + }), + ); + + await issueLabeling.run(); + + expect(mockGit.issues.addLabels).toHaveBeenCalledWith( + jasmine.objectContaining({ + labels: ['area: core'], + }), + ); + }); + + it('should NOT apply a label when Gemini returns "ambiguous"', async () => { + mockModel.generateContent.and.returnValue( + Promise.resolve({ + response: { + text: () => 'ambiguous', + } as any, + }), + ); + + await issueLabeling.run(); + + expect(mockGit.issues.addLabels).not.toHaveBeenCalled(); + }); + + it('should NOT apply a label when Gemini returns an invalid label', async () => { + mockModel.generateContent.and.returnValue( + Promise.resolve({ + response: { + text: () => 'area: invalid', + } as any, + }), + ); + + await issueLabeling.run(); + + expect(mockGit.issues.addLabels).not.toHaveBeenCalled(); + }); + + it('should initialize and run with manual instantiation check', () => { + expect(issueLabeling).toBeDefined(); + expect(mockCore.getInput).not.toHaveBeenCalled(); // until run is called + }); +}); diff --git a/github-actions/issue-labeling/lib/main.ts b/github-actions/issue-labeling/lib/main.ts new file mode 100644 index 000000000..98046c321 --- /dev/null +++ b/github-actions/issue-labeling/lib/main.ts @@ -0,0 +1,16 @@ +import * as core from '@actions/core'; +import {context} from '@actions/github'; +import {IssueLabeling} from './issue-labeling.js'; + +// Only run if the action is executed in a repository within the Angular org. +if (context.repo.owner === 'angular') { + IssueLabeling.run().catch((e: Error) => { + console.error(e); + core.setFailed(e.message); + }); +} else { + core.warning( + 'Automatic labeling was skipped as this action is only meant to run ' + + 'in repos belonging to the Angular organization.', + ); +} diff --git a/github-actions/issue-labeling/main.js b/github-actions/issue-labeling/main.js new file mode 100644 index 000000000..d46ab0e70 --- /dev/null +++ b/github-actions/issue-labeling/main.js @@ -0,0 +1,27431 @@ +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 __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +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 http2 = __require("http"); + var https2 = __require("https"); + var events2 = __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 = http2.request; + return agent; + } + function httpsOverHttp2(options) { + var agent = new TunnelingAgent(options); + agent.request = http2.request; + agent.createSocket = createSecureSocket; + agent.defaultPort = 443; + return agent; + } + function httpOverHttps2(options) { + var agent = new TunnelingAgent(options); + agent.request = https2.request; + return agent; + } + function httpsOverHttps2(options) { + var agent = new TunnelingAgent(options); + agent.request = https2.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 || http2.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, events2.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; + }; + 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 + }; + } +}); + +// +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 path6 = url.path != null ? url.path : `${url.pathname || ""}${url.search || ""}`; + if (origin[origin.length - 1] === "/") { + origin = origin.slice(0, origin.length - 1); + } + if (path6 && path6[0] !== "/") { + path6 = `/${path6}`; + } + return new URL(`${origin}${path6}`); + } + 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(handler2, method, upgrade) { + if (!handler2 || typeof handler2 !== "object") { + throw new InvalidArgumentError("handler must be an object"); + } + if (typeof handler2.onConnect !== "function") { + throw new InvalidArgumentError("invalid onConnect method"); + } + if (typeof handler2.onError !== "function") { + throw new InvalidArgumentError("invalid onError method"); + } + if (typeof handler2.onBodySent !== "function" && handler2.onBodySent !== void 0) { + throw new InvalidArgumentError("invalid onBodySent method"); + } + if (upgrade || method === "CONNECT") { + if (typeof handler2.onUpgrade !== "function") { + throw new InvalidArgumentError("invalid onUpgrade method"); + } + } else { + if (typeof handler2.onHeaders !== "function") { + throw new InvalidArgumentError("invalid onHeaders method"); + } + if (typeof handler2.onData !== "function") { + throw new InvalidArgumentError("invalid onData method"); + } + if (typeof handler2.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 iterator2; + return new ReadableStream( + { + async start() { + iterator2 = iterable[Symbol.asyncIterator](); + }, + async pull(controller) { + const { done, value } = await iterator2.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 iterator2.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, request2, err) { + try { + request2.onError(err); + assert(request2.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: path6, origin } + } = evt; + debuglog("sending request to %s %s/%s", method, origin, path6); + }); + diagnosticsChannel.channel("undici:request:headers").subscribe((evt) => { + const { + request: { method, path: path6, origin }, + response: { statusCode } + } = evt; + debuglog( + "received response to %s %s/%s - HTTP %d", + method, + origin, + path6, + statusCode + ); + }); + diagnosticsChannel.channel("undici:request:trailers").subscribe((evt) => { + const { + request: { method, path: path6, origin } + } = evt; + debuglog("trailers received from %s %s/%s", method, origin, path6); + }); + diagnosticsChannel.channel("undici:request:error").subscribe((evt) => { + const { + request: { method, path: path6, origin }, + error: error2 + } = evt; + debuglog( + "request to %s %s/%s errored - %s", + method, + origin, + path6, + 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: path6, origin } + } = evt; + debuglog("sending request to %s %s/%s", method, origin, path6); + }); + } + 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: path6, + method, + body, + headers, + query, + idempotent, + blocking, + upgrade, + headersTimeout, + bodyTimeout, + reset, + throwOnError, + expectContinue, + servername + }, handler2) { + if (typeof path6 !== "string") { + throw new InvalidArgumentError("path must be a string"); + } else if (path6[0] !== "/" && !(path6.startsWith("http://") || path6.startsWith("https://")) && method !== "CONNECT") { + throw new InvalidArgumentError("path must be an absolute URL or start with a slash"); + } else if (invalidPathRegex.test(path6)) { + 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 (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(path6, query) : path6; + 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(handler2, method, upgrade); + this.servername = servername || getServerName(this.host); + this[kHandler] = handler2; + 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(request2, 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 (request2.host === null && headerName === "host") { + if (typeof val !== "string") { + throw new InvalidArgumentError("invalid host header"); + } + request2.host = val; + } else if (request2.contentLength === null && headerName === "content-length") { + request2.contentLength = parseInt(val, 10); + if (!Number.isFinite(request2.contentLength)) { + throw new InvalidArgumentError("invalid content-length header"); + } + } else if (request2.contentType === null && headerName === "content-type") { + request2.contentType = val; + request2.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") { + request2.reset = true; + } + } else if (headerName === "expect") { + throw new NotSupportedError("expect header not supported"); + } else { + request2.headers.push(key, val); + } + } + module.exports = Request; + } +}); + +// +var require_dispatcher = __commonJS({ + ""(exports, module) { + "use strict"; + var EventEmitter2 = __require("node:events"); + var Dispatcher = class extends EventEmitter2 { + 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 DispatcherBase = class extends Dispatcher { + constructor() { + super(); + this[kDestroyed] = false; + this[kOnDestroyed] = null; + this[kClosed] = false; + this[kOnClosed] = []; + } + 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((resolve2, reject) => { + this.close((err, data) => { + return err ? reject(err) : resolve2(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((resolve2, reject) => { + this.destroy(err, (err2, data) => { + return err2 ? ( + /* istanbul ignore next: should never error */ + reject(err2) + ) : resolve2(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, handler2) { + if (!this[kInterceptors] || this[kInterceptors].length === 0) { + this[kInterceptedDispatch] = this[kDispatch]; + return this[kDispatch](opts, handler2); + } + 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, handler2); + } + dispatch(opts, handler2) { + if (!handler2 || typeof handler2 !== "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, handler2); + } catch (err) { + if (typeof handler2.onError !== "function") { + throw new InvalidArgumentError("invalid onError method"); + } + handler2.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 noop3() { + } + 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 noop3; + } + 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 noop3; + } + 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/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCADDsYBAAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHyAhIyUmKCorLC8wMTIzNDU2Nzk6Ozw9lANAQkRFRklLTk9QUVJTVFVWWFpbXF1eX2BhYmNkZWZnaGpsb3Bxc3V2eHl6e3x/gAGBAYIBgwGEAYUBhgGHAYgBiQGKAYsBjAGNAY4BjwGQAZEBkgGTAZQBlQGWAZcBmAGZAZoBmwGcAZ0BngGfAaABoQGiAaMBpAGlAaYBpwGoAakBqgGrAawBrQGuAa8BsAGxAbIBswG0AbUBtgG3AbgBuQG6AbsBvAG9Ab4BvwHAAcEBwgHDAcQBxQHGAccByAHJAcsBzAHNAc4BzwGKA4kDiAOHA4QDgwOAA/sC+gL5AvgC9wL0AvMC8gLLAsECsALZAQsgASAERw3wAkHdASEDDLMDCyABIARHDcgBQcMBIQMMsgMLIAEgBEcNe0H3ACEDDLEDCyABIARHDXBB7wAhAwywAwsgASAERw1pQeoAIQMMrwMLIAEgBEcNZUHoACEDDK4DCyABIARHDWJB5gAhAwytAwsgASAERw0aQRghAwysAwsgASAERw0VQRIhAwyrAwsgASAERw1CQcUAIQMMqgMLIAEgBEcNNEE/IQMMqQMLIAEgBEcNMkE8IQMMqAMLIAEgBEcNK0ExIQMMpwMLIAItAC5BAUYNnwMMwQILQQAhAAJAAkACQCACLQAqRQ0AIAItACtFDQAgAi8BMCIDQQJxRQ0BDAILIAIvATAiA0EBcUUNAQtBASEAIAItAChBAUYNACACLwEyIgVB5ABrQeQASQ0AIAVBzAFGDQAgBUGwAkYNACADQcAAcQ0AQQAhACADQYgEcUGABEYNACADQShxQQBHIQALIAJBADsBMCACQQA6AC8gAEUN3wIgAkIANwMgDOACC0EAIQACQCACKAI4IgNFDQAgAygCLCIDRQ0AIAIgAxEAACEACyAARQ3MASAAQRVHDd0CIAJBBDYCHCACIAE2AhQgAkGwGDYCECACQRU2AgxBACEDDKQDCyABIARGBEBBBiEDDKQDCyABQQFqIQFBACEAAkAgAigCOCIDRQ0AIAMoAlQiA0UNACACIAMRAAAhAAsgAA3ZAgwcCyACQgA3AyBBEiEDDIkDCyABIARHDRZBHSEDDKEDCyABIARHBEAgAUEBaiEBQRAhAwyIAwtBByEDDKADCyACIAIpAyAiCiAEIAFrrSILfSIMQgAgCiAMWhs3AyAgCiALWA3UAkEIIQMMnwMLIAEgBEcEQCACQQk2AgggAiABNgIEQRQhAwyGAwtBCSEDDJ4DCyACKQMgQgBSDccBIAIgAi8BMEGAAXI7ATAMQgsgASAERw0/QdAAIQMMnAMLIAEgBEYEQEELIQMMnAMLIAFBAWohAUEAIQACQCACKAI4IgNFDQAgAygCUCIDRQ0AIAIgAxEAACEACyAADc8CDMYBC0EAIQACQCACKAI4IgNFDQAgAygCSCIDRQ0AIAIgAxEAACEACyAARQ3GASAAQRVHDc0CIAJBCzYCHCACIAE2AhQgAkGCGTYCECACQRU2AgxBACEDDJoDC0EAIQACQCACKAI4IgNFDQAgAygCSCIDRQ0AIAIgAxEAACEACyAARQ0MIABBFUcNygIgAkEaNgIcIAIgATYCFCACQYIZNgIQIAJBFTYCDEEAIQMMmQMLQQAhAAJAIAIoAjgiA0UNACADKAJMIgNFDQAgAiADEQAAIQALIABFDcQBIABBFUcNxwIgAkELNgIcIAIgATYCFCACQZEXNgIQIAJBFTYCDEEAIQMMmAMLIAEgBEYEQEEPIQMMmAMLIAEtAAAiAEE7Rg0HIABBDUcNxAIgAUEBaiEBDMMBC0EAIQACQCACKAI4IgNFDQAgAygCTCIDRQ0AIAIgAxEAACEACyAARQ3DASAAQRVHDcICIAJBDzYCHCACIAE2AhQgAkGRFzYCECACQRU2AgxBACEDDJYDCwNAIAEtAABB8DVqLQAAIgBBAUcEQCAAQQJHDcECIAIoAgQhAEEAIQMgAkEANgIEIAIgACABQQFqIgEQLSIADcICDMUBCyAEIAFBAWoiAUcNAAtBEiEDDJUDC0EAIQACQCACKAI4IgNFDQAgAygCTCIDRQ0AIAIgAxEAACEACyAARQ3FASAAQRVHDb0CIAJBGzYCHCACIAE2AhQgAkGRFzYCECACQRU2AgxBACEDDJQDCyABIARGBEBBFiEDDJQDCyACQQo2AgggAiABNgIEQQAhAAJAIAIoAjgiA0UNACADKAJIIgNFDQAgAiADEQAAIQALIABFDcIBIABBFUcNuQIgAkEVNgIcIAIgATYCFCACQYIZNgIQIAJBFTYCDEEAIQMMkwMLIAEgBEcEQANAIAEtAABB8DdqLQAAIgBBAkcEQAJAIABBAWsOBMQCvQIAvgK9AgsgAUEBaiEBQQghAwz8AgsgBCABQQFqIgFHDQALQRUhAwyTAwtBFSEDDJIDCwNAIAEtAABB8DlqLQAAIgBBAkcEQCAAQQFrDgTFArcCwwK4ArcCCyAEIAFBAWoiAUcNAAtBGCEDDJEDCyABIARHBEAgAkELNgIIIAIgATYCBEEHIQMM+AILQRkhAwyQAwsgAUEBaiEBDAILIAEgBEYEQEEaIQMMjwMLAkAgAS0AAEENaw4UtQG/Ab8BvwG/Ab8BvwG/Ab8BvwG/Ab8BvwG/Ab8BvwG/Ab8BvwEAvwELQQAhAyACQQA2AhwgAkGvCzYCECACQQI2AgwgAiABQQFqNgIUDI4DCyABIARGBEBBGyEDDI4DCyABLQAAIgBBO0cEQCAAQQ1HDbECIAFBAWohAQy6AQsgAUEBaiEBC0EiIQMM8wILIAEgBEYEQEEcIQMMjAMLQgAhCgJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAS0AAEEwaw43wQLAAgABAgMEBQYH0AHQAdAB0AHQAdAB0AEICQoLDA3QAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdABDg8QERIT0AELQgIhCgzAAgtCAyEKDL8CC0IEIQoMvgILQgUhCgy9AgtCBiEKDLwCC0IHIQoMuwILQgghCgy6AgtCCSEKDLkCC0IKIQoMuAILQgshCgy3AgtCDCEKDLYCC0INIQoMtQILQg4hCgy0AgtCDyEKDLMCC0IKIQoMsgILQgshCgyxAgtCDCEKDLACC0INIQoMrwILQg4hCgyuAgtCDyEKDK0CC0IAIQoCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAEtAABBMGsON8ACvwIAAQIDBAUGB74CvgK+Ar4CvgK+Ar4CCAkKCwwNvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ag4PEBESE74CC0ICIQoMvwILQgMhCgy+AgtCBCEKDL0CC0IFIQoMvAILQgYhCgy7AgtCByEKDLoCC0IIIQoMuQILQgkhCgy4AgtCCiEKDLcCC0ILIQoMtgILQgwhCgy1AgtCDSEKDLQCC0IOIQoMswILQg8hCgyyAgtCCiEKDLECC0ILIQoMsAILQgwhCgyvAgtCDSEKDK4CC0IOIQoMrQILQg8hCgysAgsgAiACKQMgIgogBCABa60iC30iDEIAIAogDFobNwMgIAogC1gNpwJBHyEDDIkDCyABIARHBEAgAkEJNgIIIAIgATYCBEElIQMM8AILQSAhAwyIAwtBASEFIAIvATAiA0EIcUUEQCACKQMgQgBSIQULAkAgAi0ALgRAQQEhACACLQApQQVGDQEgA0HAAHFFIAVxRQ0BC0EAIQAgA0HAAHENAEECIQAgA0EIcQ0AIANBgARxBEACQCACLQAoQQFHDQAgAi0ALUEKcQ0AQQUhAAwCC0EEIQAMAQsgA0EgcUUEQAJAIAItAChBAUYNACACLwEyIgBB5ABrQeQASQ0AIABBzAFGDQAgAEGwAkYNAEEEIQAgA0EocUUNAiADQYgEcUGABEYNAgtBACEADAELQQBBAyACKQMgUBshAAsgAEEBaw4FvgIAsAEBpAKhAgtBESEDDO0CCyACQQE6AC8MhAMLIAEgBEcNnQJBJCEDDIQDCyABIARHDRxBxgAhAwyDAwtBACEAAkAgAigCOCIDRQ0AIAMoAkQiA0UNACACIAMRAAAhAAsgAEUNJyAAQRVHDZgCIAJB0AA2AhwgAiABNgIUIAJBkRg2AhAgAkEVNgIMQQAhAwyCAwsgASAERgRAQSghAwyCAwtBACEDIAJBADYCBCACQQw2AgggAiABIAEQKiIARQ2UAiACQSc2AhwgAiABNgIUIAIgADYCDAyBAwsgASAERgRAQSkhAwyBAwsgAS0AACIAQSBGDRMgAEEJRw2VAiABQQFqIQEMFAsgASAERwRAIAFBAWohAQwWC0EqIQMM/wILIAEgBEYEQEErIQMM/wILIAEtAAAiAEEJRyAAQSBHcQ2QAiACLQAsQQhHDd0CIAJBADoALAzdAgsgASAERgRAQSwhAwz+AgsgAS0AAEEKRw2OAiABQQFqIQEMsAELIAEgBEcNigJBLyEDDPwCCwNAIAEtAAAiAEEgRwRAIABBCmsOBIQCiAKIAoQChgILIAQgAUEBaiIBRw0AC0ExIQMM+wILQTIhAyABIARGDfoCIAIoAgAiACAEIAFraiEHIAEgAGtBA2ohBgJAA0AgAEHwO2otAAAgAS0AACIFQSByIAUgBUHBAGtB/wFxQRpJG0H/AXFHDQEgAEEDRgRAQQYhAQziAgsgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAc2AgAM+wILIAJBADYCAAyGAgtBMyEDIAQgASIARg35AiAEIAFrIAIoAgAiAWohByAAIAFrQQhqIQYCQANAIAFB9DtqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw0BIAFBCEYEQEEFIQEM4QILIAFBAWohASAEIABBAWoiAEcNAAsgAiAHNgIADPoCCyACQQA2AgAgACEBDIUCC0E0IQMgBCABIgBGDfgCIAQgAWsgAigCACIBaiEHIAAgAWtBBWohBgJAA0AgAUHQwgBqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw0BIAFBBUYEQEEHIQEM4AILIAFBAWohASAEIABBAWoiAEcNAAsgAiAHNgIADPkCCyACQQA2AgAgACEBDIQCCyABIARHBEADQCABLQAAQYA+ai0AACIAQQFHBEAgAEECRg0JDIECCyAEIAFBAWoiAUcNAAtBMCEDDPgCC0EwIQMM9wILIAEgBEcEQANAIAEtAAAiAEEgRwRAIABBCmsOBP8B/gH+Af8B/gELIAQgAUEBaiIBRw0AC0E4IQMM9wILQTghAwz2AgsDQCABLQAAIgBBIEcgAEEJR3EN9gEgBCABQQFqIgFHDQALQTwhAwz1AgsDQCABLQAAIgBBIEcEQAJAIABBCmsOBPkBBAT5AQALIABBLEYN9QEMAwsgBCABQQFqIgFHDQALQT8hAwz0AgtBwAAhAyABIARGDfMCIAIoAgAiACAEIAFraiEFIAEgAGtBBmohBgJAA0AgAEGAQGstAAAgAS0AAEEgckcNASAAQQZGDdsCIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADPQCCyACQQA2AgALQTYhAwzZAgsgASAERgRAQcEAIQMM8gILIAJBDDYCCCACIAE2AgQgAi0ALEEBaw4E+wHuAewB6wHUAgsgAUEBaiEBDPoBCyABIARHBEADQAJAIAEtAAAiAEEgciAAIABBwQBrQf8BcUEaSRtB/wFxIgBBCUYNACAAQSBGDQACQAJAAkACQCAAQeMAaw4TAAMDAwMDAwMBAwMDAwMDAwMDAgMLIAFBAWohAUExIQMM3AILIAFBAWohAUEyIQMM2wILIAFBAWohAUEzIQMM2gILDP4BCyAEIAFBAWoiAUcNAAtBNSEDDPACC0E1IQMM7wILIAEgBEcEQANAIAEtAABBgDxqLQAAQQFHDfcBIAQgAUEBaiIBRw0AC0E9IQMM7wILQT0hAwzuAgtBACEAAkAgAigCOCIDRQ0AIAMoAkAiA0UNACACIAMRAAAhAAsgAEUNASAAQRVHDeYBIAJBwgA2AhwgAiABNgIUIAJB4xg2AhAgAkEVNgIMQQAhAwztAgsgAUEBaiEBC0E8IQMM0gILIAEgBEYEQEHCACEDDOsCCwJAA0ACQCABLQAAQQlrDhgAAswCzALRAswCzALMAswCzALMAswCzALMAswCzALMAswCzALMAswCzALMAgDMAgsgBCABQQFqIgFHDQALQcIAIQMM6wILIAFBAWohASACLQAtQQFxRQ3+AQtBLCEDDNACCyABIARHDd4BQcQAIQMM6AILA0AgAS0AAEGQwABqLQAAQQFHDZwBIAQgAUEBaiIBRw0AC0HFACEDDOcCCyABLQAAIgBBIEYN/gEgAEE6Rw3AAiACKAIEIQBBACEDIAJBADYCBCACIAAgARApIgAN3gEM3QELQccAIQMgBCABIgBGDeUCIAQgAWsgAigCACIBaiEHIAAgAWtBBWohBgNAIAFBkMIAai0AACAALQAAIgVBIHIgBSAFQcEAa0H/AXFBGkkbQf8BcUcNvwIgAUEFRg3CAiABQQFqIQEgBCAAQQFqIgBHDQALIAIgBzYCAAzlAgtByAAhAyAEIAEiAEYN5AIgBCABayACKAIAIgFqIQcgACABa0EJaiEGA0AgAUGWwgBqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw2+AkECIAFBCUYNwgIaIAFBAWohASAEIABBAWoiAEcNAAsgAiAHNgIADOQCCyABIARGBEBByQAhAwzkAgsCQAJAIAEtAAAiAEEgciAAIABBwQBrQf8BcUEaSRtB/wFxQe4Aaw4HAL8CvwK/Ar8CvwIBvwILIAFBAWohAUE+IQMMywILIAFBAWohAUE/IQMMygILQcoAIQMgBCABIgBGDeICIAQgAWsgAigCACIBaiEGIAAgAWtBAWohBwNAIAFBoMIAai0AACAALQAAIgVBIHIgBSAFQcEAa0H/AXFBGkkbQf8BcUcNvAIgAUEBRg2+AiABQQFqIQEgBCAAQQFqIgBHDQALIAIgBjYCAAziAgtBywAhAyAEIAEiAEYN4QIgBCABayACKAIAIgFqIQcgACABa0EOaiEGA0AgAUGiwgBqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw27AiABQQ5GDb4CIAFBAWohASAEIABBAWoiAEcNAAsgAiAHNgIADOECC0HMACEDIAQgASIARg3gAiAEIAFrIAIoAgAiAWohByAAIAFrQQ9qIQYDQCABQcDCAGotAAAgAC0AACIFQSByIAUgBUHBAGtB/wFxQRpJG0H/AXFHDboCQQMgAUEPRg2+AhogAUEBaiEBIAQgAEEBaiIARw0ACyACIAc2AgAM4AILQc0AIQMgBCABIgBGDd8CIAQgAWsgAigCACIBaiEHIAAgAWtBBWohBgNAIAFB0MIAai0AACAALQAAIgVBIHIgBSAFQcEAa0H/AXFBGkkbQf8BcUcNuQJBBCABQQVGDb0CGiABQQFqIQEgBCAAQQFqIgBHDQALIAIgBzYCAAzfAgsgASAERgRAQc4AIQMM3wILAkACQAJAAkAgAS0AACIAQSByIAAgAEHBAGtB/wFxQRpJG0H/AXFB4wBrDhMAvAK8ArwCvAK8ArwCvAK8ArwCvAK8ArwCAbwCvAK8AgIDvAILIAFBAWohAUHBACEDDMgCCyABQQFqIQFBwgAhAwzHAgsgAUEBaiEBQcMAIQMMxgILIAFBAWohAUHEACEDDMUCCyABIARHBEAgAkENNgIIIAIgATYCBEHFACEDDMUCC0HPACEDDN0CCwJAAkAgAS0AAEEKaw4EAZABkAEAkAELIAFBAWohAQtBKCEDDMMCCyABIARGBEBB0QAhAwzcAgsgAS0AAEEgRw0AIAFBAWohASACLQAtQQFxRQ3QAQtBFyEDDMECCyABIARHDcsBQdIAIQMM2QILQdMAIQMgASAERg3YAiACKAIAIgAgBCABa2ohBiABIABrQQFqIQUDQCABLQAAIABB1sIAai0AAEcNxwEgAEEBRg3KASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBjYCAAzYAgsgASAERgRAQdUAIQMM2AILIAEtAABBCkcNwgEgAUEBaiEBDMoBCyABIARGBEBB1gAhAwzXAgsCQAJAIAEtAABBCmsOBADDAcMBAcMBCyABQQFqIQEMygELIAFBAWohAUHKACEDDL0CC0EAIQACQCACKAI4IgNFDQAgAygCPCIDRQ0AIAIgAxEAACEACyAADb8BQc0AIQMMvAILIAItAClBIkYNzwIMiQELIAQgASIFRgRAQdsAIQMM1AILQQAhAEEBIQFBASEGQQAhAwJAAn8CQAJAAkACQAJAAkACQCAFLQAAQTBrDgrFAcQBAAECAwQFBgjDAQtBAgwGC0EDDAULQQQMBAtBBQwDC0EGDAILQQcMAQtBCAshA0EAIQFBACEGDL0BC0EJIQNBASEAQQAhAUEAIQYMvAELIAEgBEYEQEHdACEDDNMCCyABLQAAQS5HDbgBIAFBAWohAQyIAQsgASAERw22AUHfACEDDNECCyABIARHBEAgAkEONgIIIAIgATYCBEHQACEDDLgCC0HgACEDDNACC0HhACEDIAEgBEYNzwIgAigCACIAIAQgAWtqIQUgASAAa0EDaiEGA0AgAS0AACAAQeLCAGotAABHDbEBIABBA0YNswEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMzwILQeIAIQMgASAERg3OAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYDQCABLQAAIABB5sIAai0AAEcNsAEgAEECRg2vASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAzOAgtB4wAhAyABIARGDc0CIAIoAgAiACAEIAFraiEFIAEgAGtBA2ohBgNAIAEtAAAgAEHpwgBqLQAARw2vASAAQQNGDa0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADM0CCyABIARGBEBB5QAhAwzNAgsgAUEBaiEBQQAhAAJAIAIoAjgiA0UNACADKAIwIgNFDQAgAiADEQAAIQALIAANqgFB1gAhAwyzAgsgASAERwRAA0AgAS0AACIAQSBHBEACQAJAAkAgAEHIAGsOCwABswGzAbMBswGzAbMBswGzAQKzAQsgAUEBaiEBQdIAIQMMtwILIAFBAWohAUHTACEDDLYCCyABQQFqIQFB1AAhAwy1AgsgBCABQQFqIgFHDQALQeQAIQMMzAILQeQAIQMMywILA0AgAS0AAEHwwgBqLQAAIgBBAUcEQCAAQQJrDgOnAaYBpQGkAQsgBCABQQFqIgFHDQALQeYAIQMMygILIAFBAWogASAERw0CGkHnACEDDMkCCwNAIAEtAABB8MQAai0AACIAQQFHBEACQCAAQQJrDgSiAaEBoAEAnwELQdcAIQMMsQILIAQgAUEBaiIBRw0AC0HoACEDDMgCCyABIARGBEBB6QAhAwzIAgsCQCABLQAAIgBBCmsOGrcBmwGbAbQBmwGbAZsBmwGbAZsBmwGbAZsBmwGbAZsBmwGbAZsBmwGbAZsBpAGbAZsBAJkBCyABQQFqCyEBQQYhAwytAgsDQCABLQAAQfDGAGotAABBAUcNfSAEIAFBAWoiAUcNAAtB6gAhAwzFAgsgAUEBaiABIARHDQIaQesAIQMMxAILIAEgBEYEQEHsACEDDMQCCyABQQFqDAELIAEgBEYEQEHtACEDDMMCCyABQQFqCyEBQQQhAwyoAgsgASAERgRAQe4AIQMMwQILAkACQAJAIAEtAABB8MgAai0AAEEBaw4HkAGPAY4BAHwBAo0BCyABQQFqIQEMCwsgAUEBagyTAQtBACEDIAJBADYCHCACQZsSNgIQIAJBBzYCDCACIAFBAWo2AhQMwAILAkADQCABLQAAQfDIAGotAAAiAEEERwRAAkACQCAAQQFrDgeUAZMBkgGNAQAEAY0BC0HaACEDDKoCCyABQQFqIQFB3AAhAwypAgsgBCABQQFqIgFHDQALQe8AIQMMwAILIAFBAWoMkQELIAQgASIARgRAQfAAIQMMvwILIAAtAABBL0cNASAAQQFqIQEMBwsgBCABIgBGBEBB8QAhAwy+AgsgAC0AACIBQS9GBEAgAEEBaiEBQd0AIQMMpQILIAFBCmsiA0EWSw0AIAAhAUEBIAN0QYmAgAJxDfkBC0EAIQMgAkEANgIcIAIgADYCFCACQYwcNgIQIAJBBzYCDAy8AgsgASAERwRAIAFBAWohAUHeACEDDKMCC0HyACEDDLsCCyABIARGBEBB9AAhAwy7AgsCQCABLQAAQfDMAGotAABBAWsOA/cBcwCCAQtB4QAhAwyhAgsgASAERwRAA0AgAS0AAEHwygBqLQAAIgBBA0cEQAJAIABBAWsOAvkBAIUBC0HfACEDDKMCCyAEIAFBAWoiAUcNAAtB8wAhAwy6AgtB8wAhAwy5AgsgASAERwRAIAJBDzYCCCACIAE2AgRB4AAhAwygAgtB9QAhAwy4AgsgASAERgRAQfYAIQMMuAILIAJBDzYCCCACIAE2AgQLQQMhAwydAgsDQCABLQAAQSBHDY4CIAQgAUEBaiIBRw0AC0H3ACEDDLUCCyABIARGBEBB+AAhAwy1AgsgAS0AAEEgRw16IAFBAWohAQxbC0EAIQACQCACKAI4IgNFDQAgAygCOCIDRQ0AIAIgAxEAACEACyAADXgMgAILIAEgBEYEQEH6ACEDDLMCCyABLQAAQcwARw10IAFBAWohAUETDHYLQfsAIQMgASAERg2xAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYDQCABLQAAIABB8M4Aai0AAEcNcyAAQQVGDXUgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMsQILIAEgBEYEQEH8ACEDDLECCwJAAkAgAS0AAEHDAGsODAB0dHR0dHR0dHR0AXQLIAFBAWohAUHmACEDDJgCCyABQQFqIQFB5wAhAwyXAgtB/QAhAyABIARGDa8CIAIoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQe3PAGotAABHDXIgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADLACCyACQQA2AgAgBkEBaiEBQRAMcwtB/gAhAyABIARGDa4CIAIoAgAiACAEIAFraiEFIAEgAGtBBWohBgJAA0AgAS0AACAAQfbOAGotAABHDXEgAEEFRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADK8CCyACQQA2AgAgBkEBaiEBQRYMcgtB/wAhAyABIARGDa0CIAIoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQfzOAGotAABHDXAgAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADK4CCyACQQA2AgAgBkEBaiEBQQUMcQsgASAERgRAQYABIQMMrQILIAEtAABB2QBHDW4gAUEBaiEBQQgMcAsgASAERgRAQYEBIQMMrAILAkACQCABLQAAQc4Aaw4DAG8BbwsgAUEBaiEBQesAIQMMkwILIAFBAWohAUHsACEDDJICCyABIARGBEBBggEhAwyrAgsCQAJAIAEtAABByABrDggAbm5ubm5uAW4LIAFBAWohAUHqACEDDJICCyABQQFqIQFB7QAhAwyRAgtBgwEhAyABIARGDakCIAIoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQYDPAGotAABHDWwgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADKoCCyACQQA2AgAgBkEBaiEBQQAMbQtBhAEhAyABIARGDagCIAIoAgAiACAEIAFraiEFIAEgAGtBBGohBgJAA0AgAS0AACAAQYPPAGotAABHDWsgAEEERg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADKkCCyACQQA2AgAgBkEBaiEBQSMMbAsgASAERgRAQYUBIQMMqAILAkACQCABLQAAQcwAaw4IAGtra2trawFrCyABQQFqIQFB7wAhAwyPAgsgAUEBaiEBQfAAIQMMjgILIAEgBEYEQEGGASEDDKcCCyABLQAAQcUARw1oIAFBAWohAQxgC0GHASEDIAEgBEYNpQIgAigCACIAIAQgAWtqIQUgASAAa0EDaiEGAkADQCABLQAAIABBiM8Aai0AAEcNaCAAQQNGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMpgILIAJBADYCACAGQQFqIQFBLQxpC0GIASEDIAEgBEYNpAIgAigCACIAIAQgAWtqIQUgASAAa0EIaiEGAkADQCABLQAAIABB0M8Aai0AAEcNZyAAQQhGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMpQILIAJBADYCACAGQQFqIQFBKQxoCyABIARGBEBBiQEhAwykAgtBASABLQAAQd8ARw1nGiABQQFqIQEMXgtBigEhAyABIARGDaICIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgNAIAEtAAAgAEGMzwBqLQAARw1kIABBAUYN+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(context3) { + const plural = context3.types.length === 1 ? "" : " one of"; + const message = `${context3.argument} could not be converted to${plural}: ${context3.types.join(", ")}.`; + return webidl.errors.exception({ + header: context3.prefix, + message + }); + }; + webidl.errors.invalidArgument = function(context3) { + return webidl.errors.exception({ + header: context3.prefix, + message: `"${context3.value}" is an invalid ${context3.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 crypto2; + try { + crypto2 = __require("node:crypto"); + const possibleRelevantHashes = ["sha256", "sha384", "sha512"]; + supportedHashes = crypto2.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(request2) { + return request2.urlList[request2.urlList.length - 1]; + } + function requestBadPort(request2) { + const url = requestCurrentURL(request2); + 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(request2, 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 !== "") { + request2.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(request2) { + let serializedOrigin = request2.origin; + if (serializedOrigin === "client" || serializedOrigin === void 0) { + return; + } + if (request2.responseTainting === "cors" || request2.mode === "websocket") { + request2.headersList.append("origin", serializedOrigin, true); + } else if (request2.method !== "GET" && request2.method !== "HEAD") { + switch (request2.referrerPolicy) { + case "no-referrer": + serializedOrigin = null; + break; + case "no-referrer-when-downgrade": + case "strict-origin": + case "strict-origin-when-cross-origin": + if (request2.origin && urlHasHttpsScheme(request2.origin) && !urlHasHttpsScheme(requestCurrentURL(request2))) { + serializedOrigin = null; + } + break; + case "same-origin": + if (!sameOrigin(request2, requestCurrentURL(request2))) { + serializedOrigin = null; + } + break; + default: + } + request2.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(request2) { + const policy = request2.referrerPolicy; + assert(policy); + let referrerSource = null; + if (request2.referrer === "client") { + const globalOrigin = getGlobalOrigin(); + if (!globalOrigin || globalOrigin.origin === "null") { + return "no-referrer"; + } + referrerSource = new URL(globalOrigin); + } else if (request2.referrer instanceof URL) { + referrerSource = request2.referrer; + } + let referrerURL = stripURLForReferrer(referrerSource); + const referrerOrigin = stripURLForReferrer(referrerSource, true); + if (referrerURL.toString().length > 4096) { + referrerURL = referrerOrigin; + } + const areSameOrigin = sameOrigin(request2, referrerURL); + const isNonPotentiallyTrustWorthy = isURLPotentiallyTrustworthy(referrerURL) && !isURLPotentiallyTrustworthy(request2.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(request2); + 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 (crypto2 === 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 = crypto2.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(request2) { + } + 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((resolve2, reject) => { + res = resolve2; + 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 crypto2 = __require("node:crypto"); + random = (max) => crypto2.randomInt(0, max); + } catch { + random = (max) => Math.floor(Math.random(max)); + } + var textEncoder = new TextEncoder(); + function noop3() { + } + 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(noop3); + } + }); + } + 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 iterator2; + stream = new ReadableStream({ + async start() { + iterator2 = action(object)[Symbol.asyncIterator](); + }, + async pull(controller) { + const { value, done } = await iterator2.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 iterator2.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.PAUSED_UPGRADE) { + this.onUpgrade(data.slice(offset)); + } else if (ret === constants3.ERROR.PAUSED) { + this.paused = true; + socket.unshift(data.slice(offset)); + } else if (ret !== constants3.ERROR.OK) { + 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() + ")"; + } + throw new HTTPParserError(message, constants3.ERROR[ret], data.slice(offset)); + } + } catch (err) { + util.destroy(socket, err); + } + } + 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 request2 = client[kQueue][client[kRunningIdx]]; + if (!request2) { + return -1; + } + request2.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 request2 = client[kQueue][client[kRunningIdx]]; + assert(request2); + assert(request2.upgrade || request2.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 { + request2.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 request2 = client[kQueue][client[kRunningIdx]]; + if (!request2) { + 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 && !request2.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. + request2.method === "HEAD" && !socket[kReset] && this.connection.toLowerCase() === "keep-alive"; + if (this.statusCode >= 200) { + const bodyTimeout = request2.bodyTimeout != null ? request2.bodyTimeout : client[kBodyTimeout]; + this.setTimeout(bodyTimeout, TIMEOUT_BODY); + } else if (this.timeout) { + if (this.timeout.refresh) { + this.timeout.refresh(); + } + } + if (request2.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 = request2.onHeaders(statusCode, headers, this.resume, statusText) === false; + if (request2.aborted) { + return -1; + } + if (request2.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 request2 = client[kQueue][client[kRunningIdx]]; + assert(request2); + 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 (request2.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 request2 = client[kQueue][client[kRunningIdx]]; + assert(request2); + this.statusCode = null; + this.statusText = ""; + this.bytesRead = 0; + this.contentLength = ""; + this.keepAlive = ""; + this.connection = ""; + this.headers = []; + this.headersSize = 0; + if (statusCode < 200) { + return; + } + if (request2.method !== "HEAD" && contentLength && bytesRead !== parseInt(contentLength, 10)) { + util.destroy(socket, new ResponseContentLengthMismatchError()); + return -1; + } + request2.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) { + parser.onMessageComplete(); + 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) { + parser.onMessageComplete(); + 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) { + parser.onMessageComplete(); + } + 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 request2 = requests[i]; + util.errorRequest(client2, request2, err); + } + } else if (client2[kRunning] > 0 && err.code !== "UND_ERR_INFO") { + const request2 = client2[kQueue][client2[kRunningIdx]]; + client2[kQueue][client2[kRunningIdx]++] = null; + util.errorRequest(client2, request2, 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(request2) { + if (socket[kWriting] || socket[kReset] || socket[kBlocking]) { + return true; + } + if (request2) { + if (client[kRunning] > 0 && !request2.idempotent) { + return true; + } + if (client[kRunning] > 0 && (request2.upgrade || request2.method === "CONNECT")) { + return true; + } + if (client[kRunning] > 0 && util.bodyLength(request2.body) !== 0 && (util.isStream(request2.body) || util.isAsyncIterable(request2.body) || util.isFormDataLike(request2.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 request2 = client[kQueue][client[kRunningIdx]]; + const headersTimeout = request2.headersTimeout != null ? request2.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, request2) { + const { method, path: path6, host, upgrade, blocking, reset } = request2; + let { body, headers, contentLength } = request2; + 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 (request2.contentType == null) { + headers.push("content-type", contentType); + } + body = bodyStream.stream; + contentLength = bodyStream.length; + } else if (util.isBlobLike(body) && request2.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 = request2.contentLength; + } + if (contentLength === 0 && !expectsPayload) { + contentLength = null; + } + if (shouldSendContentLength(method) && contentLength > 0 && request2.contentLength !== null && request2.contentLength !== contentLength) { + if (client[kStrictContentLength]) { + util.errorRequest(client, request2, new RequestContentLengthMismatchError()); + return false; + } + process.emitWarning(new RequestContentLengthMismatchError()); + } + const socket = client[kSocket]; + const abort = (err) => { + if (request2.aborted || request2.completed) { + return; + } + util.errorRequest(client, request2, err || new RequestAbortedError()); + util.destroy(body); + util.destroy(socket, new InformationalError("aborted")); + }; + try { + request2.onConnect(abort); + } catch (err) { + util.errorRequest(client, request2, err); + } + if (request2.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} ${path6} 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: request2, headers: header, socket }); + } + if (!body || bodyLength === 0) { + writeBuffer(abort, null, client, request2, socket, contentLength, header, expectsPayload); + } else if (util.isBuffer(body)) { + writeBuffer(abort, body, client, request2, socket, contentLength, header, expectsPayload); + } else if (util.isBlobLike(body)) { + if (typeof body.stream === "function") { + writeIterable(abort, body.stream(), client, request2, socket, contentLength, header, expectsPayload); + } else { + writeBlob(abort, body, client, request2, socket, contentLength, header, expectsPayload); + } + } else if (util.isStream(body)) { + writeStream(abort, body, client, request2, socket, contentLength, header, expectsPayload); + } else if (util.isIterable(body)) { + writeIterable(abort, body, client, request2, socket, contentLength, header, expectsPayload); + } else { + assert(false); + } + return true; + } + function writeStream(abort, body, client, request2, 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: request2, 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, request2, 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(); + request2.onBodySent(body); + if (!expectsPayload && request2.reset !== false) { + socket[kReset] = true; + } + } + request2.onRequestSent(); + client[kResume](); + } catch (err) { + abort(err); + } + } + async function writeBlob(abort, body, client, request2, 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(); + request2.onBodySent(buffer); + request2.onRequestSent(); + if (!expectsPayload && request2.reset !== false) { + socket[kReset] = true; + } + client[kResume](); + } catch (err) { + abort(err); + } + } + async function writeIterable(abort, body, client, request2, 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((resolve2, reject) => { + assert(callback === null); + if (socket[kError]) { + reject(socket[kError]); + } else { + callback = resolve2; + } + }); + socket.on("close", onDrain).on("drain", onDrain); + const writer = new AsyncWriter({ abort, socket, request: request2, 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: request2, contentLength, client, expectsPayload, header }) { + this.socket = socket; + this.request = request2; + 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: request2, 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 && request2.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(); + request2.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: request2 } = this; + request2.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 request2 = requests[i]; + util.errorRequest(client2, request2, 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 request2 = client[kQueue][client[kRunningIdx]]; + client[kQueue][client[kRunningIdx]++] = null; + util.errorRequest(client, request2, 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, request2) { + const session = client[kHTTP2Session]; + const { method, path: path6, host, upgrade, expectContinue, signal, headers: reqHeaders } = request2; + let { body } = request2; + if (upgrade) { + util.errorRequest(client, request2, 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 (request2.aborted || request2.completed) { + return; + } + err = err || new RequestAbortedError(); + util.errorRequest(client, request2, err); + if (stream != null) { + util.destroy(stream, err); + } + util.destroy(body, err); + client[kQueue][client[kRunningIdx]++] = null; + client[kResume](); + }; + try { + request2.onConnect(abort); + } catch (err) { + util.errorRequest(client, request2, err); + } + if (request2.aborted) { + return false; + } + if (method === "CONNECT") { + session.ref(); + stream = session.request(headers, { endStream: false, signal }); + if (stream.id && !stream.pending) { + request2.onUpgrade(null, null, stream); + ++session[kOpenStreams]; + client[kQueue][client[kRunningIdx]++] = null; + } else { + stream.once("ready", () => { + request2.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] = path6; + 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 = request2.contentLength; + } + if (contentLength === 0 || !expectsPayload) { + contentLength = null; + } + if (shouldSendContentLength(method) && contentLength > 0 && request2.contentLength != null && request2.contentLength !== contentLength) { + if (client[kStrictContentLength]) { + util.errorRequest(client, request2, 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; + request2.onResponseStarted(); + if (request2.aborted) { + const err = new RequestAbortedError(); + util.errorRequest(client, request2, err); + util.destroy(stream, err); + return; + } + if (request2.onHeaders(Number(statusCode), parseH2Headers(realHeaders), stream.resume.bind(stream), "") === false) { + stream.pause(); + } + stream.on("data", (chunk) => { + if (request2.onData(chunk) === false) { + stream.pause(); + } + }); + }); + stream.once("end", () => { + if (stream.state?.state == null || stream.state.state < 6) { + request2.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, + request2, + client[kSocket], + contentLength, + expectsPayload + ); + } else if (util.isBuffer(body)) { + writeBuffer( + abort, + stream, + body, + client, + request2, + client[kSocket], + contentLength, + expectsPayload + ); + } else if (util.isBlobLike(body)) { + if (typeof body.stream === "function") { + writeIterable( + abort, + stream, + body.stream(), + client, + request2, + client[kSocket], + contentLength, + expectsPayload + ); + } else { + writeBlob( + abort, + stream, + body, + client, + request2, + client[kSocket], + contentLength, + expectsPayload + ); + } + } else if (util.isStream(body)) { + writeStream( + abort, + client[kSocket], + expectsPayload, + stream, + body, + client, + request2, + contentLength + ); + } else if (util.isIterable(body)) { + writeIterable( + abort, + stream, + body, + client, + request2, + client[kSocket], + contentLength, + expectsPayload + ); + } else { + assert(false); + } + } + } + function writeBuffer(abort, h2stream, body, client, request2, 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(); + request2.onBodySent(body); + } + if (!expectsPayload) { + socket[kReset] = true; + } + request2.onRequestSent(); + client[kResume](); + } catch (error2) { + abort(error2); + } + } + function writeStream(abort, socket, expectsPayload, h2stream, body, client, request2, 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); + request2.onRequestSent(); + if (!expectsPayload) { + socket[kReset] = true; + } + client[kResume](); + } + } + ); + util.addListener(pipe, "data", onPipeData); + function onPipeData(chunk) { + request2.onBodySent(chunk); + } + } + async function writeBlob(abort, h2stream, body, client, request2, 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(); + request2.onBodySent(buffer); + request2.onRequestSent(); + if (!expectsPayload) { + socket[kReset] = true; + } + client[kResume](); + } catch (err) { + abort(err); + } + } + async function writeIterable(abort, h2stream, body, client, request2, 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((resolve2, reject) => { + assert(callback === null); + if (socket[kError]) { + reject(socket[kError]); + } else { + callback = resolve2; + } + }); + 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); + request2.onBodySent(chunk); + if (!res) { + await waitForDrain(); + } + } + h2stream.end(); + request2.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, handler2) { + if (maxRedirections != null && (!Number.isInteger(maxRedirections) || maxRedirections < 0)) { + throw new InvalidArgumentError("maxRedirections must be a positive number"); + } + util.validateHandler(handler2, opts.method, opts.upgrade); + this.dispatch = dispatch; + this.location = null; + this.abort = null; + this.opts = { ...opts, maxRedirections: 0 }; + this.maxRedirections = maxRedirections; + this.handler = handler2; + 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 path6 = search ? `${pathname}${search}` : pathname; + this.opts.headers = cleanRequestHeaders(this.opts.headers, statusCode === 303, this.opts.origin !== origin); + this.opts.path = path6; + 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, handler2) { + const { maxRedirections = defaultMaxRedirections } = opts; + if (!maxRedirections) { + return dispatch(opts, handler2); + } + const redirectHandler = new RedirectHandler(dispatch, maxRedirections, opts, handler2); + 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 http2 = __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 noop3 = () => { + }; + 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 + } = {}) { + super(); + 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 || http2.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, handler2) { + const origin = opts.origin || this[kUrl].origin; + const request2 = new Request(origin, opts, handler2); + this[kQueue].push(request2); + if (this[kResuming]) { + } else if (util.bodyLength(request2.body) == null && util.isIterable(request2.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((resolve2) => { + if (this[kSize]) { + this[kClosedResolve] = resolve2; + } else { + resolve2(null); + } + }); + } + async [kDestroy](err) { + return new Promise((resolve2) => { + const requests = this[kQueue].splice(this[kPendingIdx]); + for (let i = 0; i < requests.length; i++) { + const request2 = requests[i]; + util.errorRequest(this, request2, err); + } + const callback = () => { + if (this[kClosedResolve]) { + this[kClosedResolve](); + this[kClosedResolve] = null; + } + resolve2(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 request2 = requests[i]; + util.errorRequest(client, request2, 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((resolve2, reject) => { + client[kConnector]({ + host, + hostname, + protocol, + port, + servername: client[kServerName], + localAddress: client[kLocalAddress] + }, (err, socket2) => { + if (err) { + reject(err); + } else { + resolve2(socket2); + } + }); + }); + if (client.destroyed) { + util.destroy(socket.on("error", noop3), 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", noop3); + 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 request2 = client[kQueue][client[kPendingIdx]++]; + util.errorRequest(client, request2, 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 request2 = client[kQueue][client[kPendingIdx]]; + if (client[kUrl].protocol === "https:" && client[kServerName] !== request2.servername) { + if (client[kRunning] > 0) { + return; + } + client[kServerName] = request2.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(request2)) { + return; + } + if (!request2.aborted && client[kHTTPContext].write(request2)) { + 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() { + super(); + 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((resolve2) => { + this[kClosedResolve] = resolve2; + }); + } + } + 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, handler2) { + const dispatcher = this[kGetDispatcher](); + if (!dispatcher) { + this[kNeedDrain] = true; + this[kQueue].push({ opts, handler: handler2 }); + this[kQueued]++; + } else if (!dispatcher.dispatch(opts, handler2)) { + 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 + } = {}) { + super(); + 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 + }); + } + 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 Agent3 = class extends DispatcherBase { + constructor({ factory = defaultFactory, maxRedirections = 0, connect, ...options } = {}) { + super(); + 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"); + } + 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, handler2) { + 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, handler2); + } + 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 = Agent3; + } +}); + +// +var require_proxy_agent = __commonJS({ + ""(exports, module) { + "use strict"; + var { kProxy, kClose, kDestroy, kDispatch, kInterceptors } = require_symbols(); + var { URL: URL2 } = __require("node:url"); + var Agent3 = 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 noop3 = () => { + }; + 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, handler2) { + const onHeaders = handler2.onHeaders; + handler2.onHeaders = function(statusCode, data, resume) { + if (statusCode === 407) { + if (typeof handler2.onError === "function") { + handler2.onError(new InvalidArgumentError("Proxy Authentication Required (407)")); + } + return; + } + if (onHeaders) + onHeaders.call(this, statusCode, data, resume); + }; + const { + origin, + path: path6 = "/", + headers = {} + } = opts; + opts.path = origin + path6; + 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, handler2); + } + 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 Agent3({ + ...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", noop3).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, handler2) { + 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 + }, + handler2 + ); + } + /** + * @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 Agent3 = 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 Agent3(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, handler2) { + const url = new URL(opts.origin); + const agent = this.#getProxyAgentForUrl(url); + return agent.dispatch(opts, handler2); + } + 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, handler2) { + const retry = new RetryHandler({ + ...opts, + retryOptions: this.#options + }, { + dispatch: this.#agent.dispatch.bind(this.#agent), + handler: handler2 + }); + 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 noop3 = () => { + }; + 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((resolve2, 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 { + resolve2(null); + } + }).on("error", noop3).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((resolve2, 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: resolve2, + 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: resolve2, stream, length } = consume2; + try { + if (type === "text") { + resolve2(chunksDecode(body, length)); + } else if (type === "json") { + resolve2(JSON.parse(chunksDecode(body, length))); + } else if (type === "arrayBuffer") { + resolve2(chunksConcat(body, length).buffer); + } else if (type === "blob") { + resolve2(new Blob(body, { type: stream[kContentType] })); + } else if (type === "bytes") { + resolve2(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, context3) { + if (this.reason) { + abort(this.reason); + return; + } + assert(this.callback); + this.abort = abort; + this.context = context3; + } + onHeaders(statusCode, rawHeaders, resume, statusMessage) { + const { callback, opaque, abort, context: context3, 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: context3 + }); + } + } + } + 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 request2(opts, callback) { + if (callback === void 0) { + return new Promise((resolve2, reject) => { + request2.call(this, opts, (err, data) => { + return err ? reject(err) : resolve2(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 = request2; + 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, context3) { + if (this.reason) { + abort(this.reason); + return; + } + assert(this.callback); + this.abort = abort; + this.context = context3; + } + onHeaders(statusCode, rawHeaders, resume, statusMessage) { + const { factory, opaque, context: context3, 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: context3 + }); + 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((resolve2, reject) => { + stream.call(this, opts, factory, (err, data) => { + return err ? reject(err) : resolve2(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, handler2) { + if (!opts || typeof opts !== "object") { + throw new InvalidArgumentError("invalid opts"); + } + if (typeof handler2 !== "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 = handler2; + 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, context3) { + 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 = context3; + } + onHeaders(statusCode, rawHeaders, resume) { + const { opaque, handler: handler2, context: context3 } = 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(handler2, null, { + statusCode, + headers, + opaque, + body: this.res, + context: context3 + }); + } 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, handler2) { + try { + const pipelineHandler = new PipelineHandler(opts, handler2); + 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, context3) { + 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: context3 } = 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: context3 + }); + } + 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((resolve2, reject) => { + upgrade.call(this, opts, (err, data) => { + return err ? reject(err) : resolve2(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, context3) { + if (this.reason) { + abort(this.reason); + return; + } + assert(this.callback); + this.abort = abort; + this.context = context3; + } + onHeaders() { + throw new SocketError("bad connect", null); + } + onUpgrade(statusCode, rawHeaders, socket) { + const { callback, opaque, context: context3 } = 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: context3 + }); + } + 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((resolve2, reject) => { + connect.call(this, opts, (err, data) => { + return err ? reject(err) : resolve2(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(path6) { + if (typeof path6 !== "string") { + return path6; + } + const pathSegments = path6.split("?"); + if (pathSegments.length !== 2) { + return path6; + } + const qp = new URLSearchParams(pathSegments.pop()); + qp.sort(); + return [...pathSegments, qp.toString()].join("?"); + } + function matchKey(mockDispatch2, { path: path6, method, body, headers }) { + const pathMatch = matchValue(mockDispatch2.path, path6); + 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 getResponseData2(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: path6 }) => matchValue(safeUrl(path6), 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: path6, method, body, headers, query } = opts; + return { + path: path6, + 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, handler2) { + 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); + handler2.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 = getResponseData2(body); + const responseHeaders = generateKeyValues(headers); + const responseTrailers = generateKeyValues(trailers); + handler2.onConnect?.((err) => handler2.onError(err), null); + handler2.onHeaders?.(statusCode, responseHeaders, resume, getStatusText(statusCode)); + handler2.onData?.(Buffer.from(responseData)); + handler2.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, handler2) { + if (agent.isMockActive) { + try { + mockDispatch.call(this, opts, handler2); + } 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, handler2); + } 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, handler2); + } + }; + } + 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: getResponseData2, + 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: getResponseData2, 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 = getResponseData2(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: path6, data: { statusCode }, persist, times, timesInvoked, origin }) => ({ + Method: method, + Origin: origin, + Path: path6, + "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 Agent3 = 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 Agent3(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, handler2) { + this.get(opts.origin); + return this[kAgent].dispatch(opts, handler2); + } + 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 Agent3 = require_agent(); + if (getGlobalDispatcher() === void 0) { + setGlobalDispatcher(new Agent3()); + } + 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(handler2) { + if (typeof handler2 !== "object" || handler2 === null) { + throw new TypeError("handler must be an object"); + } + this.#handler = handler2; + } + 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, handler2) { + const { maxRedirections = globalMaxRedirections, ...baseOpts } = opts2; + if (!maxRedirections) { + return dispatch(opts2, handler2); + } + const redirectHandler = new RedirectHandler( + dispatch, + maxRedirections, + opts2, + handler2 + ); + 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, handler2) { + return dispatch( + opts, + new RetryHandler( + { ...opts, retryOptions: { ...globalOpts, ...opts.retryOptions } }, + { + handler: handler2, + 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 }, handler2) { + super(handler2); + 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 = handler2; + } + 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, handler2) { + const { dumpMaxSize = defaultMaxSize } = opts; + const dumpHandler = new DumpHandler( + { maxSize: dumpMaxSize }, + handler2 + ); + 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: handler2, dispatch }, opts) { + super(handler2); + this.#origin = origin; + this.#handler = handler2; + 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, handler2) { + const origin = origDispatchOpts.origin.constructor === URL ? origDispatchOpts.origin : new URL(origDispatchOpts.origin); + if (isIP(origin.hostname) !== 0) { + return dispatch(origDispatchOpts, handler2); + } + instance.runLookup(origin, origDispatchOpts, (err, newOrigin) => { + if (err) { + return handler2.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: handler2 }, 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 delimiter3 = lowercaseName === "cookie" ? "; " : ", "; + this[kHeadersMap].set(lowercaseName, { + name: exists2.name, + value: `${exists2.value}${delimiter3}${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 iterator2 = this[kHeadersMap][Symbol.iterator](); + const firstValue = iterator2.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 = iterator2.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 (!iterator2.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 iterator2 = Reflect.get(V, Symbol.iterator); + if (!util.types.isProxy(V) && iterator2 === Headers2.prototype.entries) { + try { + return getHeadersList(V).entriesList; + } catch { + } + } + if (typeof iterator2 === "function") { + return webidl.converters["sequence>"](V, prefix, argument, iterator2.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 request2 = null; + let fallbackMode = null; + const baseUrl2 = environmentSettingsObject.settingsObject.baseUrl; + let signal = null; + if (typeof input === "string") { + this[kDispatcher] = init.dispatcher; + let parsedURL; + try { + parsedURL = new URL(input, baseUrl2); + } 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 + ); + } + request2 = makeRequest2({ urlList: [parsedURL] }); + fallbackMode = "cors"; + } else { + this[kDispatcher] = init.dispatcher || input[kDispatcher]; + assert(input instanceof _Request); + request2 = input[kState]; + signal = input[kSignal]; + } + const origin = environmentSettingsObject.settingsObject.origin; + let window = "client"; + if (request2.window?.constructor?.name === "EnvironmentSettingsObject" && sameOrigin(request2.window, origin)) { + window = request2.window; + } + if (init.window != null) { + throw new TypeError(`'window' option '${window}' must be null`); + } + if ("window" in init) { + window = "no-window"; + } + request2 = makeRequest2({ + // 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: request2.method, + // header list A copy of request’s header list. + // undici implementation note: headersList is cloned in makeRequest + headersList: request2.headersList, + // unsafe-request flag Set. + unsafeRequest: request2.unsafeRequest, + // client This’s relevant settings object. + client: environmentSettingsObject.settingsObject, + // window window. + window, + // priority request’s priority. + priority: request2.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: request2.origin, + // referrer request’s referrer. + referrer: request2.referrer, + // referrer policy request’s referrer policy. + referrerPolicy: request2.referrerPolicy, + // mode request’s mode. + mode: request2.mode, + // credentials mode request’s credentials mode. + credentials: request2.credentials, + // cache mode request’s cache mode. + cache: request2.cache, + // redirect mode request’s redirect mode. + redirect: request2.redirect, + // integrity metadata request’s integrity metadata. + integrity: request2.integrity, + // keepalive request’s keepalive. + keepalive: request2.keepalive, + // reload-navigation flag request’s reload-navigation flag. + reloadNavigation: request2.reloadNavigation, + // history-navigation flag request’s history-navigation flag. + historyNavigation: request2.historyNavigation, + // URL list A clone of request’s URL list. + urlList: [...request2.urlList] + }); + const initHasKey = Object.keys(init).length !== 0; + if (initHasKey) { + if (request2.mode === "navigate") { + request2.mode = "same-origin"; + } + request2.reloadNavigation = false; + request2.historyNavigation = false; + request2.origin = "client"; + request2.referrer = "client"; + request2.referrerPolicy = ""; + request2.url = request2.urlList[request2.urlList.length - 1]; + request2.urlList = [request2.url]; + } + if (init.referrer !== void 0) { + const referrer = init.referrer; + if (referrer === "") { + request2.referrer = "no-referrer"; + } else { + let parsedReferrer; + try { + parsedReferrer = new URL(referrer, baseUrl2); + } 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)) { + request2.referrer = "client"; + } else { + request2.referrer = parsedReferrer; + } + } + } + if (init.referrerPolicy !== void 0) { + request2.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) { + request2.mode = mode; + } + if (init.credentials !== void 0) { + request2.credentials = init.credentials; + } + if (init.cache !== void 0) { + request2.cache = init.cache; + } + if (request2.cache === "only-if-cached" && request2.mode !== "same-origin") { + throw new TypeError( + "'only-if-cached' can be set only with 'same-origin' mode" + ); + } + if (init.redirect !== void 0) { + request2.redirect = init.redirect; + } + if (init.integrity != null) { + request2.integrity = String(init.integrity); + } + if (init.keepalive !== void 0) { + request2.keepalive = Boolean(init.keepalive); + } + if (init.method !== void 0) { + let method = init.method; + const mayBeNormalized = normalizedMethodRecords[method]; + if (mayBeNormalized !== void 0) { + request2.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; + request2.method = method; + } + if (!patchMethodWarning && request2.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] = request2; + 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], request2.headersList); + setHeadersGuard(this[kHeaders], "request"); + if (mode === "no-cors") { + if (!corsSafeListedMethodsSet.has(request2.method)) { + throw new TypeError( + `'${request2.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) && (request2.method === "GET" || request2.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, + request2.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 (request2.mode !== "same-origin" && request2.mode !== "cors") { + throw new TypeError( + 'If request is made from ReadableStream, mode should be "same-origin" or "cors"' + ); + } + request2.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 makeRequest2(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(request2) { + const newRequest = makeRequest2({ ...request2, body: null }); + if (request2.body != null) { + newRequest.body = cloneBody(newRequest, request2.body); + } + return newRequest; + } + function fromInnerRequest(innerRequest, signal, guard) { + const request2 = new Request(kConstruct); + request2[kState] = innerRequest; + request2[kSignal] = signal; + request2[kHeaders] = new Headers2(kConstruct); + setHeadersList(request2[kHeaders], innerRequest.headersList); + setHeadersGuard(request2[kHeaders], guard); + return request2; + } + 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: makeRequest2, 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 fetch3(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 request2 = requestObject[kState]; + if (requestObject.signal.aborted) { + abortFetch(p, request2, null, requestObject.signal.reason); + return p.promise; + } + const globalObject = request2.client.globalObject; + if (globalObject?.constructor?.name === "ServiceWorkerGlobalScope") { + request2.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, request2, realResponse, requestObject.signal.reason); + } + ); + const processResponse = (response) => { + if (locallyAborted) { + return; + } + if (response.aborted) { + abortFetch(p, request2, 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: request2, + 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, request2, responseObject, error2) { + if (p) { + p.reject(error2); + } + if (request2.body != null && isReadable(request2.body?.stream)) { + request2.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: request2, + processRequestBodyChunkLength, + processRequestEndOfBody, + processResponse, + processResponseEndOfBody, + processResponseConsumeBody, + useParallelQueue = false, + dispatcher = getGlobalDispatcher() + // undici + }) { + assert(dispatcher); + let taskDestination = null; + let crossOriginIsolatedCapability = false; + if (request2.client != null) { + taskDestination = request2.client.globalObject; + crossOriginIsolatedCapability = request2.client.crossOriginIsolatedCapability; + } + const currentTime = coarsenedSharedCurrentTime(crossOriginIsolatedCapability); + const timingInfo = createOpaqueTimingInfo({ + startTime: currentTime + }); + const fetchParams = { + controller: new Fetch(dispatcher), + request: request2, + timingInfo, + processRequestBodyChunkLength, + processRequestEndOfBody, + processResponse, + processResponseConsumeBody, + processResponseEndOfBody, + taskDestination, + crossOriginIsolatedCapability + }; + assert(!request2.body || request2.body.stream); + if (request2.window === "client") { + request2.window = request2.client?.globalObject?.constructor?.name === "Window" ? request2.client : "no-window"; + } + if (request2.origin === "client") { + request2.origin = request2.client.origin; + } + if (request2.policyContainer === "client") { + if (request2.client != null) { + request2.policyContainer = clonePolicyContainer( + request2.client.policyContainer + ); + } else { + request2.policyContainer = makePolicyContainer(); + } + } + if (!request2.headersList.contains("accept", true)) { + const value = "*/*"; + request2.headersList.append("accept", value, true); + } + if (!request2.headersList.contains("accept-language", true)) { + request2.headersList.append("accept-language", "*", true); + } + if (request2.priority === null) { + } + if (subresourceSet.has(request2.destination)) { + } + mainFetch(fetchParams).catch((err) => { + fetchParams.controller.terminate(err); + }); + return fetchParams.controller; + } + async function mainFetch(fetchParams, recursive = false) { + const request2 = fetchParams.request; + let response = null; + if (request2.localURLsOnly && !urlIsLocal(requestCurrentURL(request2))) { + response = makeNetworkError("local URLs only"); + } + tryUpgradeRequestToAPotentiallyTrustworthyURL(request2); + if (requestBadPort(request2) === "blocked") { + response = makeNetworkError("bad port"); + } + if (request2.referrerPolicy === "") { + request2.referrerPolicy = request2.policyContainer.referrerPolicy; + } + if (request2.referrer !== "no-referrer") { + request2.referrer = determineRequestsReferrer(request2); + } + if (response === null) { + response = await (async () => { + const currentURL = requestCurrentURL(request2); + if ( + // - request’s current URL’s origin is same origin with request’s origin, + // and request’s response tainting is "basic" + sameOrigin(currentURL, request2.url) && request2.responseTainting === "basic" || // request’s current URL’s scheme is "data" + currentURL.protocol === "data:" || // - request’s mode is "navigate" or "websocket" + (request2.mode === "navigate" || request2.mode === "websocket") + ) { + request2.responseTainting = "basic"; + return await schemeFetch(fetchParams); + } + if (request2.mode === "same-origin") { + return makeNetworkError('request mode cannot be "same-origin"'); + } + if (request2.mode === "no-cors") { + if (request2.redirect !== "follow") { + return makeNetworkError( + 'redirect mode cannot be "follow" for "no-cors" request' + ); + } + request2.responseTainting = "opaque"; + return await schemeFetch(fetchParams); + } + if (!urlIsHttpHttpsScheme(requestCurrentURL(request2))) { + return makeNetworkError("URL scheme must be a HTTP(S) scheme"); + } + request2.responseTainting = "cors"; + return await httpFetch(fetchParams); + })(); + } + if (recursive) { + return response; + } + if (response.status !== 0 && !response.internalResponse) { + if (request2.responseTainting === "cors") { + } + if (request2.responseTainting === "basic") { + response = filterResponse(response, "basic"); + } else if (request2.responseTainting === "cors") { + response = filterResponse(response, "cors"); + } else if (request2.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(...request2.urlList); + } + if (!request2.timingAllowFailed) { + response.timingAllowPassed = true; + } + if (response.type === "opaque" && internalResponse.status === 206 && internalResponse.rangeRequested && !request2.headers.contains("range", true)) { + response = internalResponse = makeNetworkError(); + } + if (response.status !== 0 && (request2.method === "HEAD" || request2.method === "CONNECT" || nullBodyStatus.includes(internalResponse.status))) { + internalResponse.body = null; + fetchParams.controller.dump = true; + } + if (request2.integrity) { + const processBodyError = (reason) => fetchFinale(fetchParams, makeNetworkError(reason)); + if (request2.responseTainting === "opaque" || response.body == null) { + processBodyError(response.error); + return; + } + const processBody = (bytes) => { + if (!bytesMatch(bytes, request2.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: request2 } = fetchParams; + const { protocol: scheme } = requestCurrentURL(request2); + 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(request2); + if (blobURLEntry.search.length !== 0) { + return Promise.resolve(makeNetworkError("NetworkError when attempting to fetch resource.")); + } + const blob = resolveObjectURL(blobURLEntry.toString()); + if (request2.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 (!request2.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 = request2.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(request2); + 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 request2 = fetchParams.request; + let response = null; + let actualResponse = null; + const timingInfo = fetchParams.timingInfo; + if (request2.serviceWorkers === "all") { + } + if (response === null) { + if (request2.redirect === "follow") { + request2.serviceWorkers = "none"; + } + actualResponse = response = await httpNetworkOrCacheFetch(fetchParams); + if (request2.responseTainting === "cors" && corsCheck(request2, response) === "failure") { + return makeNetworkError("cors failure"); + } + if (TAOCheck(request2, response) === "failure") { + request2.timingAllowFailed = true; + } + } + if ((request2.responseTainting === "opaque" || response.type === "opaque") && crossOriginResourcePolicyCheck( + request2.origin, + request2.client, + request2.destination, + actualResponse + ) === "blocked") { + return makeNetworkError("blocked"); + } + if (redirectStatusSet.has(actualResponse.status)) { + if (request2.redirect !== "manual") { + fetchParams.controller.connection.destroy(void 0, false); + } + if (request2.redirect === "error") { + response = makeNetworkError("unexpected redirect"); + } else if (request2.redirect === "manual") { + response = actualResponse; + } else if (request2.redirect === "follow") { + response = await httpRedirectFetch(fetchParams, response); + } else { + assert(false); + } + } + response.timingInfo = timingInfo; + return response; + } + function httpRedirectFetch(fetchParams, response) { + const request2 = fetchParams.request; + const actualResponse = response.internalResponse ? response.internalResponse : response; + let locationURL; + try { + locationURL = responseLocationURL( + actualResponse, + requestCurrentURL(request2).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 (request2.redirectCount === 20) { + return Promise.resolve(makeNetworkError("redirect count exceeded")); + } + request2.redirectCount += 1; + if (request2.mode === "cors" && (locationURL.username || locationURL.password) && !sameOrigin(request2, locationURL)) { + return Promise.resolve(makeNetworkError('cross origin not allowed for request mode "cors"')); + } + if (request2.responseTainting === "cors" && (locationURL.username || locationURL.password)) { + return Promise.resolve(makeNetworkError( + 'URL cannot contain credentials for request mode "cors"' + )); + } + if (actualResponse.status !== 303 && request2.body != null && request2.body.source == null) { + return Promise.resolve(makeNetworkError()); + } + if ([301, 302].includes(actualResponse.status) && request2.method === "POST" || actualResponse.status === 303 && !GET_OR_HEAD.includes(request2.method)) { + request2.method = "GET"; + request2.body = null; + for (const headerName of requestBodyHeader) { + request2.headersList.delete(headerName); + } + } + if (!sameOrigin(requestCurrentURL(request2), locationURL)) { + request2.headersList.delete("authorization", true); + request2.headersList.delete("proxy-authorization", true); + request2.headersList.delete("cookie", true); + request2.headersList.delete("host", true); + } + if (request2.body != null) { + assert(request2.body.source != null); + request2.body = safelyExtractBody(request2.body.source)[0]; + } + const timingInfo = fetchParams.timingInfo; + timingInfo.redirectEndTime = timingInfo.postRedirectStartTime = coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability); + if (timingInfo.redirectStartTime === 0) { + timingInfo.redirectStartTime = timingInfo.startTime; + } + request2.urlList.push(locationURL); + setRequestReferrerPolicyOnRedirect(request2, actualResponse); + return mainFetch(fetchParams, true); + } + async function httpNetworkOrCacheFetch(fetchParams, isAuthenticationFetch = false, isNewConnectionFetch = false) { + const request2 = fetchParams.request; + let httpFetchParams = null; + let httpRequest = null; + let response = null; + const httpCache = null; + const revalidatingFlag = false; + if (request2.window === "no-window" && request2.redirect === "error") { + httpFetchParams = fetchParams; + httpRequest = request2; + } else { + httpRequest = cloneRequest(request2); + httpFetchParams = { ...fetchParams }; + httpFetchParams.request = httpRequest; + } + const includeCredentials = request2.credentials === "include" || request2.credentials === "same-origin" && request2.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 (request2.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 + (request2.body == null || request2.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 request2 = fetchParams.request; + let response = null; + const timingInfo = fetchParams.timingInfo; + const httpCache = null; + if (httpCache == null) { + request2.cache = "no-store"; + } + const newConnection = forceNewConnection ? "yes" : "no"; + if (request2.mode === "websocket") { + } else { + } + let requestBody = null; + if (request2.body == null && fetchParams.processRequestEndOfBody) { + queueMicrotask(() => fetchParams.processRequestEndOfBody()); + } else if (request2.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 request2.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 iterator2 = body[Symbol.asyncIterator](); + fetchParams.controller.next = () => iterator2.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(request2); + const agent = fetchParams.controller.dispatcher; + return new Promise((resolve2, reject) => agent.dispatch( + { + path: url.pathname + url.search, + origin: url.origin, + method: request2.method, + body: agent.isMockActive ? request2.body && (request2.body.source || request2.body.stream) : body, + headers: request2.headersList.entries, + maxRedirections: 0, + upgrade: request2.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 && request2.redirect === "follow" && redirectStatusSet.has(status); + if (request2.method !== "HEAD" && request2.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); + resolve2({ + 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); + } + resolve2({ + status, + statusText: STATUS_CODES[status], + headersList, + socket + }); + return true; + } + } + )); + } + } + module.exports = { + fetch: fetch3, + 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: StringDecoder2 } = __require("string_decoder"); + var { btoa: btoa2 } = __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 StringDecoder2("latin1"); + for (const chunk of bytes) { + dataURL += btoa2(decoder.write(chunk)); + } + dataURL += btoa2(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 StringDecoder2("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(request2, options = {}) { + webidl.brandCheck(this, _Cache); + const prefix = "Cache.match"; + webidl.argumentLengthCheck(arguments, 1, prefix); + request2 = webidl.converters.RequestInfo(request2, prefix, "request"); + options = webidl.converters.CacheQueryOptions(options, prefix, "options"); + const p = this.#internalMatchAll(request2, options, 1); + if (p.length === 0) { + return; + } + return p[0]; + } + async matchAll(request2 = void 0, options = {}) { + webidl.brandCheck(this, _Cache); + const prefix = "Cache.matchAll"; + if (request2 !== void 0) + request2 = webidl.converters.RequestInfo(request2, prefix, "request"); + options = webidl.converters.CacheQueryOptions(options, prefix, "options"); + return this.#internalMatchAll(request2, options); + } + async add(request2) { + webidl.brandCheck(this, _Cache); + const prefix = "Cache.add"; + webidl.argumentLengthCheck(arguments, 1, prefix); + request2 = webidl.converters.RequestInfo(request2, prefix, "request"); + const requests = [request2]; + 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 request2 of requests) { + if (request2 === void 0) { + throw webidl.errors.conversionFailed({ + prefix, + argument: "Argument 1", + types: ["undefined is not allowed"] + }); + } + request2 = webidl.converters.RequestInfo(request2); + if (typeof request2 === "string") { + continue; + } + const r = request2[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 request2 of requests) { + const r = new Request(request2)[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(request2, response) { + webidl.brandCheck(this, _Cache); + const prefix = "Cache.put"; + webidl.argumentLengthCheck(arguments, 2, prefix); + request2 = webidl.converters.RequestInfo(request2, prefix, "request"); + response = webidl.converters.Response(response, prefix, "response"); + let innerRequest = null; + if (request2 instanceof Request) { + innerRequest = request2[kState]; + } else { + innerRequest = new Request(request2)[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(request2, options = {}) { + webidl.brandCheck(this, _Cache); + const prefix = "Cache.delete"; + webidl.argumentLengthCheck(arguments, 1, prefix); + request2 = webidl.converters.RequestInfo(request2, prefix, "request"); + options = webidl.converters.CacheQueryOptions(options, prefix, "options"); + let r = null; + if (request2 instanceof Request) { + r = request2[kState]; + if (r.method !== "GET" && !options.ignoreMethod) { + return false; + } + } else { + assert(typeof request2 === "string"); + r = new Request(request2)[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(request2 = void 0, options = {}) { + webidl.brandCheck(this, _Cache); + const prefix = "Cache.keys"; + if (request2 !== void 0) + request2 = webidl.converters.RequestInfo(request2, prefix, "request"); + options = webidl.converters.CacheQueryOptions(options, prefix, "options"); + let r = null; + if (request2 !== void 0) { + if (request2 instanceof Request) { + r = request2[kState]; + if (r.method !== "GET" && !options.ignoreMethod) { + return []; + } + } else if (typeof request2 === "string") { + r = new Request(request2)[kState]; + } + } + const promise = createDeferredPromise(); + const requests = []; + if (request2 === 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 request3 of requests) { + const requestObject = fromInnerRequest( + request3, + 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, request2, response = null, options) { + const queryURL = new URL(requestQuery.url); + const cachedURL = new URL(request2.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 = request2.headersList.get(fieldValue); + const queryValue = requestQuery.headersList.get(fieldValue); + if (requestValue !== queryValue) { + return false; + } + } + return true; + } + #internalMatchAll(request2, options, maxResponses = Infinity) { + let r = null; + if (request2 !== void 0) { + if (request2 instanceof Request) { + r = request2[kState]; + if (r.method !== "GET" && !options.ignoreMethod) { + return []; + } + } else if (typeof request2 === "string") { + r = new Request(request2)[kState]; + } + } + const responses = []; + if (request2 === 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(path6) { + for (let i = 0; i < path6.length; ++i) { + const code = path6.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) { + for (let i = 0; i < value.length; i++) { + const byte = value.charCodeAt(i); + if (byte < 48 || byte > 57) { + return false; + } + } + return true; + } + 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 crypto2; + var buffer = null; + var bufIdx = BUFFER_SIZE; + try { + crypto2 = __require("node:crypto"); + } catch { + crypto2 = { + // 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; + crypto2.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: makeRequest2 } = require_request2(); + var { fetching } = require_fetch(); + var { Headers: Headers2, getHeadersList } = require_headers(); + var { getDecodeSplit } = require_util2(); + var { WebsocketFrameSend } = require_frame(); + var crypto2; + try { + crypto2 = __require("node:crypto"); + } catch { + } + function establishWebSocketConnection(url, protocols, client, ws, onEstablish, options) { + const requestURL = url; + requestURL.protocol = url.protocol === "ws:" ? "http:" : "https:"; + const request2 = makeRequest2({ + 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)); + request2.headersList = headersList; + } + const keyValue = crypto2.randomBytes(16).toString("base64"); + request2.headersList.append("sec-websocket-key", keyValue); + request2.headersList.append("sec-websocket-version", "13"); + for (const protocol of protocols) { + request2.headersList.append("sec-websocket-protocol", protocol); + } + const permessageDeflate = "permessage-deflate; client_max_window_bits"; + request2.headersList.append("sec-websocket-extensions", permessageDeflate); + const controller = fetching({ + request: request2, + 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 = crypto2.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", request2.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 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 = {}; + constructor(extensions) { + this.#options.serverNoContextTakeover = extensions.has("server_no_context_takeover"); + this.#options.serverMaxWindowBits = extensions.get("server_max_window_bits"); + } + 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); + } + this.#inflate = createInflateRaw({ windowBits }); + this.#inflate[kBuffer] = []; + this.#inflate[kLength] = 0; + this.#inflate.on("data", (data) => { + this.#inflate[kBuffer].push(data); + this.#inflate[kLength] += data.length; + }); + this.#inflate.on("error", (err) => { + this.#inflate = null; + callback(err); + }); + } + this.#inflate.write(chunk); + if (fin) { + this.#inflate.write(tail); + } + this.#inflate.flush(() => { + 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 ByteParser = class extends Writable { + #buffers = []; + #byteOffset = 0; + #loop = false; + #state = parserStates.INFO; + #info = {}; + #fragments = []; + /** @type {Map} */ + #extensions; + constructor(ws, extensions) { + super(); + this.ws = ws; + this.#extensions = extensions == null ? /* @__PURE__ */ new Map() : extensions; + if (this.#extensions.has("permessage-deflate")) { + this.#extensions.set("permessage-deflate", new PerMessageDeflate(extensions)); + } + } + /** + * @param {Buffer} chunk + * @param {() => void} callback + */ + _write(chunk, _, callback) { + this.#buffers.push(chunk); + this.#byteOffset += chunk.length; + this.#loop = true; + this.run(callback); + } + /** + * 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; + } 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; + } else if (this.#state === parserStates.PAYLOADLENGTH_64) { + if (this.#byteOffset < 8) { + return callback(); + } + const buffer = this.consume(8); + const upper = buffer.readUInt32BE(0); + if (upper > 2 ** 31 - 1) { + failWebsocketConnection(this.ws, "Received payload length > 2^31 bytes."); + return; + } + const lower = buffer.readUInt32BE(4); + this.#info.payloadLength = (upper << 8) + lower; + this.#state = parserStates.READ_DATA; + } 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.#fragments.push(body); + if (!this.#info.fragmented && this.#info.fin) { + const fullMessage = Buffer.concat(this.#fragments); + websocketMessageReceived(this.ws, this.#info.binaryType, fullMessage); + this.#fragments.length = 0; + } + this.#state = parserStates.INFO; + } else { + this.#extensions.get("permessage-deflate").decompress(body, this.#info.fin, (error2, data) => { + if (error2) { + closeWebSocketConnection(this.ws, 1007, error2.message, error2.message.length); + return; + } + this.#fragments.push(data); + if (!this.#info.fin) { + this.#state = parserStates.INFO; + this.#loop = true; + this.run(callback); + return; + } + websocketMessageReceived(this.ws, this.#info.binaryType, Buffer.concat(this.#fragments)); + this.#loop = true; + this.#state = parserStates.INFO; + this.#fragments.length = 0; + 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; + } + 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 parser = new ByteParser(this, parsedExtensions); + 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((resolve2) => { + setTimeout(resolve2, 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: makeRequest2 } = 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 = makeRequest2(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 Agent3 = 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 = Agent3; + 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, handler2) => { + if (typeof opts === "function") { + handler2 = 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 path6 = opts.path; + if (!opts.path.startsWith("/")) { + path6 = `/${path6}`; + } + url = new URL(util.parseOrigin(url).origin + path6); + } 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") + }, handler2); + }; + } + module.exports.setGlobalDispatcher = setGlobalDispatcher; + module.exports.getGlobalDispatcher = getGlobalDispatcher; + var fetchImpl = require_fetch().fetch; + module.exports.fetch = async function fetch3(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; + } +}); + +// +var require_proxy = __commonJS({ + ""(exports) { + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.getProxyUrl = getProxyUrl2; + exports.checkBypass = checkBypass2; + function getProxyUrl2(reqUrl) { + const usingSsl = reqUrl.protocol === "https:"; + if (checkBypass2(reqUrl)) { + return void 0; + } + const proxyVar = (() => { + if (usingSsl) { + return process.env["https_proxy"] || process.env["HTTPS_PROXY"]; + } else { + return process.env["http_proxy"] || process.env["HTTP_PROXY"]; + } + })(); + if (proxyVar) { + try { + return new DecodedURL2(proxyVar); + } catch (_a2) { + if (!proxyVar.startsWith("http://") && !proxyVar.startsWith("https://")) + return new DecodedURL2(`http://${proxyVar}`); + } + } else { + return void 0; + } + } + function checkBypass2(reqUrl) { + if (!reqUrl.hostname) { + return false; + } + const reqHost = reqUrl.hostname; + if (isLoopbackAddress2(reqHost)) { + return true; + } + const noProxy = process.env["no_proxy"] || process.env["NO_PROXY"] || ""; + if (!noProxy) { + return false; + } + let reqPort; + if (reqUrl.port) { + reqPort = Number(reqUrl.port); + } else if (reqUrl.protocol === "http:") { + reqPort = 80; + } else if (reqUrl.protocol === "https:") { + reqPort = 443; + } + const upperReqHosts = [reqUrl.hostname.toUpperCase()]; + if (typeof reqPort === "number") { + upperReqHosts.push(`${upperReqHosts[0]}:${reqPort}`); + } + for (const upperNoProxyItem of noProxy.split(",").map((x) => x.trim().toUpperCase()).filter((x) => x)) { + if (upperNoProxyItem === "*" || upperReqHosts.some((x) => x === upperNoProxyItem || x.endsWith(`.${upperNoProxyItem}`) || upperNoProxyItem.startsWith(".") && x.endsWith(`${upperNoProxyItem}`))) { + return true; + } + } + return false; + } + function isLoopbackAddress2(host) { + const hostLower = host.toLowerCase(); + return hostLower === "localhost" || hostLower.startsWith("127.") || hostLower.startsWith("[::1]") || hostLower.startsWith("[0:0:0:0:0:0:0:1]"); + } + var DecodedURL2 = class extends URL { + constructor(url, base) { + super(url, base); + this._decodedUsername = decodeURIComponent(super.username); + this._decodedPassword = decodeURIComponent(super.password); + } + get username() { + return this._decodedUsername; + } + get password() { + return this._decodedPassword; + } + }; + } +}); + +// +var require_lib = __commonJS({ + ""(exports) { + "use strict"; + var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) { + if (k2 === void 0) + k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { + return m[k]; + } }; + } + Object.defineProperty(o, k2, desc); + } : function(o, m, k, k2) { + if (k2 === void 0) + k2 = k; + o[k2] = m[k]; + }); + var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); + } : function(o, v) { + o["default"] = v; + }); + var __importStar = exports && exports.__importStar || /* @__PURE__ */ function() { + var ownKeys = function(o) { + ownKeys = Object.getOwnPropertyNames || function(o2) { + var ar = []; + for (var k in o2) + if (Object.prototype.hasOwnProperty.call(o2, k)) + ar[ar.length] = k; + return ar; + }; + return ownKeys(o); + }; + return function(mod) { + if (mod && mod.__esModule) + return mod; + var result = {}; + if (mod != null) { + for (var k = ownKeys(mod), i = 0; i < k.length; i++) + if (k[i] !== "default") + __createBinding(result, mod, k[i]); + } + __setModuleDefault(result, mod); + return result; + }; + }(); + var __awaiter12 = exports && exports.__awaiter || function(thisArg, _arguments, P, generator) { + function adopt(value) { + return value instanceof P ? value : new P(function(resolve2) { + resolve2(value); + }); + } + return new (P || (P = Promise))(function(resolve2, 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 ? resolve2(result.value) : adopt(result.value).then(fulfilled, rejected); + } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); + }; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.HttpClient = exports.HttpClientResponse = exports.HttpClientError = exports.MediaTypes = exports.Headers = exports.HttpCodes = void 0; + exports.getProxyUrl = getProxyUrl2; + exports.isHttps = isHttps; + var http2 = __importStar(__require("http")); + var https2 = __importStar(__require("https")); + var pm = __importStar(require_proxy()); + var tunnel2 = __importStar(require_tunnel2()); + var undici_1 = require_undici(); + var HttpCodes2; + (function(HttpCodes3) { + HttpCodes3[HttpCodes3["OK"] = 200] = "OK"; + HttpCodes3[HttpCodes3["MultipleChoices"] = 300] = "MultipleChoices"; + HttpCodes3[HttpCodes3["MovedPermanently"] = 301] = "MovedPermanently"; + HttpCodes3[HttpCodes3["ResourceMoved"] = 302] = "ResourceMoved"; + HttpCodes3[HttpCodes3["SeeOther"] = 303] = "SeeOther"; + HttpCodes3[HttpCodes3["NotModified"] = 304] = "NotModified"; + HttpCodes3[HttpCodes3["UseProxy"] = 305] = "UseProxy"; + HttpCodes3[HttpCodes3["SwitchProxy"] = 306] = "SwitchProxy"; + HttpCodes3[HttpCodes3["TemporaryRedirect"] = 307] = "TemporaryRedirect"; + HttpCodes3[HttpCodes3["PermanentRedirect"] = 308] = "PermanentRedirect"; + HttpCodes3[HttpCodes3["BadRequest"] = 400] = "BadRequest"; + HttpCodes3[HttpCodes3["Unauthorized"] = 401] = "Unauthorized"; + HttpCodes3[HttpCodes3["PaymentRequired"] = 402] = "PaymentRequired"; + HttpCodes3[HttpCodes3["Forbidden"] = 403] = "Forbidden"; + HttpCodes3[HttpCodes3["NotFound"] = 404] = "NotFound"; + HttpCodes3[HttpCodes3["MethodNotAllowed"] = 405] = "MethodNotAllowed"; + HttpCodes3[HttpCodes3["NotAcceptable"] = 406] = "NotAcceptable"; + HttpCodes3[HttpCodes3["ProxyAuthenticationRequired"] = 407] = "ProxyAuthenticationRequired"; + HttpCodes3[HttpCodes3["RequestTimeout"] = 408] = "RequestTimeout"; + HttpCodes3[HttpCodes3["Conflict"] = 409] = "Conflict"; + HttpCodes3[HttpCodes3["Gone"] = 410] = "Gone"; + HttpCodes3[HttpCodes3["TooManyRequests"] = 429] = "TooManyRequests"; + HttpCodes3[HttpCodes3["InternalServerError"] = 500] = "InternalServerError"; + HttpCodes3[HttpCodes3["NotImplemented"] = 501] = "NotImplemented"; + HttpCodes3[HttpCodes3["BadGateway"] = 502] = "BadGateway"; + HttpCodes3[HttpCodes3["ServiceUnavailable"] = 503] = "ServiceUnavailable"; + HttpCodes3[HttpCodes3["GatewayTimeout"] = 504] = "GatewayTimeout"; + })(HttpCodes2 || (exports.HttpCodes = HttpCodes2 = {})); + var Headers2; + (function(Headers3) { + Headers3["Accept"] = "accept"; + Headers3["ContentType"] = "content-type"; + })(Headers2 || (exports.Headers = Headers2 = {})); + var MediaTypes2; + (function(MediaTypes3) { + MediaTypes3["ApplicationJson"] = "application/json"; + })(MediaTypes2 || (exports.MediaTypes = MediaTypes2 = {})); + function getProxyUrl2(serverUrl) { + const proxyUrl = pm.getProxyUrl(new URL(serverUrl)); + return proxyUrl ? proxyUrl.href : ""; + } + var HttpRedirectCodes2 = [ + HttpCodes2.MovedPermanently, + HttpCodes2.ResourceMoved, + HttpCodes2.SeeOther, + HttpCodes2.TemporaryRedirect, + HttpCodes2.PermanentRedirect + ]; + var HttpResponseRetryCodes2 = [ + HttpCodes2.BadGateway, + HttpCodes2.ServiceUnavailable, + HttpCodes2.GatewayTimeout + ]; + var RetryableHttpVerbs2 = ["OPTIONS", "GET", "DELETE", "HEAD"]; + var ExponentialBackoffCeiling2 = 10; + var ExponentialBackoffTimeSlice2 = 5; + var HttpClientError2 = class _HttpClientError extends Error { + constructor(message, statusCode) { + super(message); + this.name = "HttpClientError"; + this.statusCode = statusCode; + Object.setPrototypeOf(this, _HttpClientError.prototype); + } + }; + exports.HttpClientError = HttpClientError2; + var HttpClientResponse2 = class { + constructor(message) { + this.message = message; + } + readBody() { + return __awaiter12(this, void 0, void 0, function* () { + return new Promise((resolve2) => __awaiter12(this, void 0, void 0, function* () { + let output = Buffer.alloc(0); + this.message.on("data", (chunk) => { + output = Buffer.concat([output, chunk]); + }); + this.message.on("end", () => { + resolve2(output.toString()); + }); + })); + }); + } + readBodyBuffer() { + return __awaiter12(this, void 0, void 0, function* () { + return new Promise((resolve2) => __awaiter12(this, void 0, void 0, function* () { + const chunks = []; + this.message.on("data", (chunk) => { + chunks.push(chunk); + }); + this.message.on("end", () => { + resolve2(Buffer.concat(chunks)); + }); + })); + }); + } + }; + exports.HttpClientResponse = HttpClientResponse2; + function isHttps(requestUrl) { + const parsedUrl = new URL(requestUrl); + return parsedUrl.protocol === "https:"; + } + var HttpClient3 = class { + constructor(userAgent2, handlers, requestOptions) { + this._ignoreSslError = false; + this._allowRedirects = true; + this._allowRedirectDowngrade = false; + this._maxRedirects = 50; + this._allowRetries = false; + this._maxRetries = 1; + this._keepAlive = false; + this._disposed = false; + this.userAgent = this._getUserAgentWithOrchestrationId(userAgent2); + this.handlers = handlers || []; + this.requestOptions = requestOptions; + if (requestOptions) { + if (requestOptions.ignoreSslError != null) { + this._ignoreSslError = requestOptions.ignoreSslError; + } + this._socketTimeout = requestOptions.socketTimeout; + if (requestOptions.allowRedirects != null) { + this._allowRedirects = requestOptions.allowRedirects; + } + if (requestOptions.allowRedirectDowngrade != null) { + this._allowRedirectDowngrade = requestOptions.allowRedirectDowngrade; + } + if (requestOptions.maxRedirects != null) { + this._maxRedirects = Math.max(requestOptions.maxRedirects, 0); + } + if (requestOptions.keepAlive != null) { + this._keepAlive = requestOptions.keepAlive; + } + if (requestOptions.allowRetries != null) { + this._allowRetries = requestOptions.allowRetries; + } + if (requestOptions.maxRetries != null) { + this._maxRetries = requestOptions.maxRetries; + } + } + } + options(requestUrl, additionalHeaders) { + return __awaiter12(this, void 0, void 0, function* () { + return this.request("OPTIONS", requestUrl, null, additionalHeaders || {}); + }); + } + get(requestUrl, additionalHeaders) { + return __awaiter12(this, void 0, void 0, function* () { + return this.request("GET", requestUrl, null, additionalHeaders || {}); + }); + } + del(requestUrl, additionalHeaders) { + return __awaiter12(this, void 0, void 0, function* () { + return this.request("DELETE", requestUrl, null, additionalHeaders || {}); + }); + } + post(requestUrl, data, additionalHeaders) { + return __awaiter12(this, void 0, void 0, function* () { + return this.request("POST", requestUrl, data, additionalHeaders || {}); + }); + } + patch(requestUrl, data, additionalHeaders) { + return __awaiter12(this, void 0, void 0, function* () { + return this.request("PATCH", requestUrl, data, additionalHeaders || {}); + }); + } + put(requestUrl, data, additionalHeaders) { + return __awaiter12(this, void 0, void 0, function* () { + return this.request("PUT", requestUrl, data, additionalHeaders || {}); + }); + } + head(requestUrl, additionalHeaders) { + return __awaiter12(this, void 0, void 0, function* () { + return this.request("HEAD", requestUrl, null, additionalHeaders || {}); + }); + } + sendStream(verb, requestUrl, stream, additionalHeaders) { + return __awaiter12(this, void 0, void 0, function* () { + return this.request(verb, requestUrl, stream, additionalHeaders); + }); + } + /** + * Gets a typed object from an endpoint + * Be aware that not found returns a null. Other errors (4xx, 5xx) reject the promise + */ + getJson(requestUrl_1) { + return __awaiter12(this, arguments, void 0, function* (requestUrl, additionalHeaders = {}) { + additionalHeaders[Headers2.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers2.Accept, MediaTypes2.ApplicationJson); + const res = yield this.get(requestUrl, additionalHeaders); + return this._processResponse(res, this.requestOptions); + }); + } + postJson(requestUrl_1, obj_1) { + return __awaiter12(this, arguments, void 0, function* (requestUrl, obj, additionalHeaders = {}) { + const data = JSON.stringify(obj, null, 2); + additionalHeaders[Headers2.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers2.Accept, MediaTypes2.ApplicationJson); + additionalHeaders[Headers2.ContentType] = this._getExistingOrDefaultContentTypeHeader(additionalHeaders, MediaTypes2.ApplicationJson); + const res = yield this.post(requestUrl, data, additionalHeaders); + return this._processResponse(res, this.requestOptions); + }); + } + putJson(requestUrl_1, obj_1) { + return __awaiter12(this, arguments, void 0, function* (requestUrl, obj, additionalHeaders = {}) { + const data = JSON.stringify(obj, null, 2); + additionalHeaders[Headers2.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers2.Accept, MediaTypes2.ApplicationJson); + additionalHeaders[Headers2.ContentType] = this._getExistingOrDefaultContentTypeHeader(additionalHeaders, MediaTypes2.ApplicationJson); + const res = yield this.put(requestUrl, data, additionalHeaders); + return this._processResponse(res, this.requestOptions); + }); + } + patchJson(requestUrl_1, obj_1) { + return __awaiter12(this, arguments, void 0, function* (requestUrl, obj, additionalHeaders = {}) { + const data = JSON.stringify(obj, null, 2); + additionalHeaders[Headers2.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers2.Accept, MediaTypes2.ApplicationJson); + additionalHeaders[Headers2.ContentType] = this._getExistingOrDefaultContentTypeHeader(additionalHeaders, MediaTypes2.ApplicationJson); + const res = yield this.patch(requestUrl, data, additionalHeaders); + return this._processResponse(res, this.requestOptions); + }); + } + /** + * Makes a raw http request. + * All other methods such as get, post, patch, and request ultimately call this. + * Prefer get, del, post and patch + */ + request(verb, requestUrl, data, headers) { + return __awaiter12(this, void 0, void 0, function* () { + if (this._disposed) { + throw new Error("Client has already been disposed."); + } + const parsedUrl = new URL(requestUrl); + let info2 = this._prepareRequest(verb, parsedUrl, headers); + const maxTries = this._allowRetries && RetryableHttpVerbs2.includes(verb) ? this._maxRetries + 1 : 1; + let numTries = 0; + let response; + do { + response = yield this.requestRaw(info2, data); + if (response && response.message && response.message.statusCode === HttpCodes2.Unauthorized) { + let authenticationHandler; + for (const handler2 of this.handlers) { + if (handler2.canHandleAuthentication(response)) { + authenticationHandler = handler2; + break; + } + } + if (authenticationHandler) { + return authenticationHandler.handleAuthentication(this, info2, data); + } else { + return response; + } + } + let redirectsRemaining = this._maxRedirects; + while (response.message.statusCode && HttpRedirectCodes2.includes(response.message.statusCode) && this._allowRedirects && redirectsRemaining > 0) { + const redirectUrl = response.message.headers["location"]; + if (!redirectUrl) { + break; + } + const parsedRedirectUrl = new URL(redirectUrl); + if (parsedUrl.protocol === "https:" && parsedUrl.protocol !== parsedRedirectUrl.protocol && !this._allowRedirectDowngrade) { + throw new Error("Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true."); + } + yield response.readBody(); + if (parsedRedirectUrl.hostname !== parsedUrl.hostname) { + for (const header in headers) { + if (header.toLowerCase() === "authorization") { + delete headers[header]; + } + } + } + info2 = this._prepareRequest(verb, parsedRedirectUrl, headers); + response = yield this.requestRaw(info2, data); + redirectsRemaining--; + } + if (!response.message.statusCode || !HttpResponseRetryCodes2.includes(response.message.statusCode)) { + return response; + } + numTries += 1; + if (numTries < maxTries) { + yield response.readBody(); + yield this._performExponentialBackoff(numTries); + } + } while (numTries < maxTries); + return response; + }); + } + /** + * Needs to be called if keepAlive is set to true in request options. + */ + dispose() { + if (this._agent) { + this._agent.destroy(); + } + this._disposed = true; + } + /** + * Raw request. + * @param info + * @param data + */ + requestRaw(info2, data) { + return __awaiter12(this, void 0, void 0, function* () { + return new Promise((resolve2, reject) => { + function callbackForResult(err, res) { + if (err) { + reject(err); + } else if (!res) { + reject(new Error("Unknown error")); + } else { + resolve2(res); + } + } + this.requestRawWithCallback(info2, data, callbackForResult); + }); + }); + } + /** + * Raw request with callback. + * @param info + * @param data + * @param onResult + */ + requestRawWithCallback(info2, data, onResult) { + if (typeof data === "string") { + if (!info2.options.headers) { + info2.options.headers = {}; + } + info2.options.headers["Content-Length"] = Buffer.byteLength(data, "utf8"); + } + let callbackCalled = false; + function handleResult(err, res) { + if (!callbackCalled) { + callbackCalled = true; + onResult(err, res); + } + } + const req = info2.httpModule.request(info2.options, (msg) => { + const res = new HttpClientResponse2(msg); + handleResult(void 0, res); + }); + let socket; + req.on("socket", (sock) => { + socket = sock; + }); + req.setTimeout(this._socketTimeout || 3 * 6e4, () => { + if (socket) { + socket.end(); + } + handleResult(new Error(`Request timeout: ${info2.options.path}`)); + }); + req.on("error", function(err) { + handleResult(err); + }); + if (data && typeof data === "string") { + req.write(data, "utf8"); + } + if (data && typeof data !== "string") { + data.on("close", function() { + req.end(); + }); + data.pipe(req); + } else { + req.end(); + } + } + /** + * Gets an http agent. This function is useful when you need an http agent that handles + * routing through a proxy server - depending upon the url and proxy environment variables. + * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com + */ + getAgent(serverUrl) { + const parsedUrl = new URL(serverUrl); + return this._getAgent(parsedUrl); + } + getAgentDispatcher(serverUrl) { + const parsedUrl = new URL(serverUrl); + const proxyUrl = pm.getProxyUrl(parsedUrl); + const useProxy = proxyUrl && proxyUrl.hostname; + if (!useProxy) { + return; + } + return this._getProxyAgentDispatcher(parsedUrl, proxyUrl); + } + _prepareRequest(method, requestUrl, headers) { + const info2 = {}; + info2.parsedUrl = requestUrl; + const usingSsl = info2.parsedUrl.protocol === "https:"; + info2.httpModule = usingSsl ? https2 : http2; + const defaultPort = usingSsl ? 443 : 80; + info2.options = {}; + info2.options.host = info2.parsedUrl.hostname; + info2.options.port = info2.parsedUrl.port ? parseInt(info2.parsedUrl.port) : defaultPort; + info2.options.path = (info2.parsedUrl.pathname || "") + (info2.parsedUrl.search || ""); + info2.options.method = method; + info2.options.headers = this._mergeHeaders(headers); + if (this.userAgent != null) { + info2.options.headers["user-agent"] = this.userAgent; + } + info2.options.agent = this._getAgent(info2.parsedUrl); + if (this.handlers) { + for (const handler2 of this.handlers) { + handler2.prepareRequest(info2.options); + } + } + return info2; + } + _mergeHeaders(headers) { + if (this.requestOptions && this.requestOptions.headers) { + return Object.assign({}, lowercaseKeys3(this.requestOptions.headers), lowercaseKeys3(headers || {})); + } + return lowercaseKeys3(headers || {}); + } + /** + * Gets an existing header value or returns a default. + * Handles converting number header values to strings since HTTP headers must be strings. + * Note: This returns string | string[] since some headers can have multiple values. + * For headers that must always be a single string (like Content-Type), use the + * specialized _getExistingOrDefaultContentTypeHeader method instead. + */ + _getExistingOrDefaultHeader(additionalHeaders, header, _default) { + let clientHeader; + if (this.requestOptions && this.requestOptions.headers) { + const headerValue = lowercaseKeys3(this.requestOptions.headers)[header]; + if (headerValue) { + clientHeader = typeof headerValue === "number" ? headerValue.toString() : headerValue; + } + } + const additionalValue = additionalHeaders[header]; + if (additionalValue !== void 0) { + return typeof additionalValue === "number" ? additionalValue.toString() : additionalValue; + } + if (clientHeader !== void 0) { + return clientHeader; + } + return _default; + } + /** + * Specialized version of _getExistingOrDefaultHeader for Content-Type header. + * Always returns a single string (not an array) since Content-Type should be a single value. + * Converts arrays to comma-separated strings and numbers to strings to ensure type safety. + * This was split from _getExistingOrDefaultHeader to provide stricter typing for callers + * that assign the result to places expecting a string (e.g., additionalHeaders[Headers.ContentType]). + */ + _getExistingOrDefaultContentTypeHeader(additionalHeaders, _default) { + let clientHeader; + if (this.requestOptions && this.requestOptions.headers) { + const headerValue = lowercaseKeys3(this.requestOptions.headers)[Headers2.ContentType]; + if (headerValue) { + if (typeof headerValue === "number") { + clientHeader = String(headerValue); + } else if (Array.isArray(headerValue)) { + clientHeader = headerValue.join(", "); + } else { + clientHeader = headerValue; + } + } + } + const additionalValue = additionalHeaders[Headers2.ContentType]; + if (additionalValue !== void 0) { + if (typeof additionalValue === "number") { + return String(additionalValue); + } else if (Array.isArray(additionalValue)) { + return additionalValue.join(", "); + } else { + return additionalValue; + } + } + if (clientHeader !== void 0) { + return clientHeader; + } + return _default; + } + _getAgent(parsedUrl) { + let agent; + const proxyUrl = pm.getProxyUrl(parsedUrl); + const useProxy = proxyUrl && proxyUrl.hostname; + if (this._keepAlive && useProxy) { + agent = this._proxyAgent; + } + if (!useProxy) { + agent = this._agent; + } + if (agent) { + return agent; + } + const usingSsl = parsedUrl.protocol === "https:"; + let maxSockets = 100; + if (this.requestOptions) { + maxSockets = this.requestOptions.maxSockets || http2.globalAgent.maxSockets; + } + if (proxyUrl && proxyUrl.hostname) { + const agentOptions = { + maxSockets, + keepAlive: this._keepAlive, + proxy: Object.assign(Object.assign({}, (proxyUrl.username || proxyUrl.password) && { + proxyAuth: `${proxyUrl.username}:${proxyUrl.password}` + }), { host: proxyUrl.hostname, port: proxyUrl.port }) + }; + let tunnelAgent; + const overHttps = proxyUrl.protocol === "https:"; + if (usingSsl) { + tunnelAgent = overHttps ? tunnel2.httpsOverHttps : tunnel2.httpsOverHttp; + } else { + tunnelAgent = overHttps ? tunnel2.httpOverHttps : tunnel2.httpOverHttp; + } + agent = tunnelAgent(agentOptions); + this._proxyAgent = agent; + } + if (!agent) { + const options = { keepAlive: this._keepAlive, maxSockets }; + agent = usingSsl ? new https2.Agent(options) : new http2.Agent(options); + this._agent = agent; + } + if (usingSsl && this._ignoreSslError) { + agent.options = Object.assign(agent.options || {}, { + rejectUnauthorized: false + }); + } + return agent; + } + _getProxyAgentDispatcher(parsedUrl, proxyUrl) { + let proxyAgent; + if (this._keepAlive) { + proxyAgent = this._proxyAgentDispatcher; + } + if (proxyAgent) { + return proxyAgent; + } + const usingSsl = parsedUrl.protocol === "https:"; + proxyAgent = new undici_1.ProxyAgent(Object.assign({ uri: proxyUrl.href, pipelining: !this._keepAlive ? 0 : 1 }, (proxyUrl.username || proxyUrl.password) && { + token: `Basic ${Buffer.from(`${proxyUrl.username}:${proxyUrl.password}`).toString("base64")}` + })); + this._proxyAgentDispatcher = proxyAgent; + if (usingSsl && this._ignoreSslError) { + proxyAgent.options = Object.assign(proxyAgent.options.requestTls || {}, { + rejectUnauthorized: false + }); + } + return proxyAgent; + } + _getUserAgentWithOrchestrationId(userAgent2) { + const baseUserAgent = userAgent2 || "actions/http-client"; + const orchId = process.env["ACTIONS_ORCHESTRATION_ID"]; + if (orchId) { + const sanitizedId = orchId.replace(/[^a-z0-9_.-]/gi, "_"); + return `${baseUserAgent} actions_orchestration_id/${sanitizedId}`; + } + return baseUserAgent; + } + _performExponentialBackoff(retryNumber) { + return __awaiter12(this, void 0, void 0, function* () { + retryNumber = Math.min(ExponentialBackoffCeiling2, retryNumber); + const ms = ExponentialBackoffTimeSlice2 * Math.pow(2, retryNumber); + return new Promise((resolve2) => setTimeout(() => resolve2(), ms)); + }); + } + _processResponse(res, options) { + return __awaiter12(this, void 0, void 0, function* () { + return new Promise((resolve2, reject) => __awaiter12(this, void 0, void 0, function* () { + const statusCode = res.message.statusCode || 0; + const response = { + statusCode, + result: null, + headers: {} + }; + if (statusCode === HttpCodes2.NotFound) { + resolve2(response); + } + function dateTimeDeserializer(key, value) { + if (typeof value === "string") { + const a = new Date(value); + if (!isNaN(a.valueOf())) { + return a; + } + } + return value; + } + let obj; + let contents; + try { + contents = yield res.readBody(); + if (contents && contents.length > 0) { + if (options && options.deserializeDates) { + obj = JSON.parse(contents, dateTimeDeserializer); + } else { + obj = JSON.parse(contents); + } + response.result = obj; + } + response.headers = res.message.headers; + } catch (err) { + } + if (statusCode > 299) { + let msg; + if (obj && obj.message) { + msg = obj.message; + } else if (contents && contents.length > 0) { + msg = contents; + } else { + msg = `Failed request: (${statusCode})`; + } + const err = new HttpClientError2(msg, statusCode); + err.result = response.result; + reject(err); + } else { + resolve2(response); + } + })); + }); + } + }; + exports.HttpClient = HttpClient3; + var lowercaseKeys3 = (obj) => Object.keys(obj).reduce((c, k) => (c[k.toLowerCase()] = obj[k], c), {}); + } +}); + +// +var require_fast_content_type_parse = __commonJS({ + ""(exports, module) { + "use strict"; + var NullObject = function NullObject2() { + }; + NullObject.prototype = /* @__PURE__ */ Object.create(null); + var paramRE = /; *([!#$%&'*+.^\w`|~-]+)=("(?:[\v\u0020\u0021\u0023-\u005b\u005d-\u007e\u0080-\u00ff]|\\[\v\u0020-\u00ff])*"|[!#$%&'*+.^\w`|~-]+) */gu; + var quotedPairRE = /\\([\v\u0020-\u00ff])/gu; + var mediaTypeRE = /^[!#$%&'*+.^\w|~-]+\/[!#$%&'*+.^\w|~-]+$/u; + var defaultContentType = { type: "", parameters: new NullObject() }; + Object.freeze(defaultContentType.parameters); + Object.freeze(defaultContentType); + function parse2(header) { + if (typeof header !== "string") { + throw new TypeError("argument header is required and must be a string"); + } + let index = header.indexOf(";"); + const type = index !== -1 ? header.slice(0, index).trim() : header.trim(); + if (mediaTypeRE.test(type) === false) { + throw new TypeError("invalid media type"); + } + const result = { + type: type.toLowerCase(), + parameters: new NullObject() + }; + if (index === -1) { + return result; + } + let key; + let match; + let value; + paramRE.lastIndex = index; + while (match = paramRE.exec(header)) { + if (match.index !== index) { + throw new TypeError("invalid parameter format"); + } + index += match[0].length; + key = match[1].toLowerCase(); + value = match[2]; + if (value[0] === '"') { + value = value.slice(1, value.length - 1); + quotedPairRE.test(value) && (value = value.replace(quotedPairRE, "$1")); + } + result.parameters[key] = value; + } + if (index !== header.length) { + throw new TypeError("invalid parameter format"); + } + return result; + } + function safeParse2(header) { + if (typeof header !== "string") { + return defaultContentType; + } + let index = header.indexOf(";"); + const type = index !== -1 ? header.slice(0, index).trim() : header.trim(); + if (mediaTypeRE.test(type) === false) { + return defaultContentType; + } + const result = { + type: type.toLowerCase(), + parameters: new NullObject() + }; + if (index === -1) { + return result; + } + let key; + let match; + let value; + paramRE.lastIndex = index; + while (match = paramRE.exec(header)) { + if (match.index !== index) { + return defaultContentType; + } + index += match[0].length; + key = match[1].toLowerCase(); + value = match[2]; + if (value[0] === '"') { + value = value.slice(1, value.length - 1); + quotedPairRE.test(value) && (value = value.replace(quotedPairRE, "$1")); + } + result.parameters[key] = value; + } + if (index !== header.length) { + return defaultContentType; + } + return result; + } + module.exports.default = { parse: parse2, safeParse: safeParse2 }; + module.exports.parse = parse2; + module.exports.safeParse = safeParse2; + module.exports.defaultContentType = defaultContentType; + } +}); + +// +var core_exports = {}; +__export(core_exports, { + ExitCode: () => ExitCode, + addPath: () => addPath, + debug: () => debug, + endGroup: () => endGroup, + error: () => error, + exportVariable: () => exportVariable, + getBooleanInput: () => getBooleanInput, + getIDToken: () => getIDToken, + getInput: () => getInput, + getMultilineInput: () => getMultilineInput, + getState: () => getState, + group: () => group, + info: () => info, + isDebug: () => isDebug, + markdownSummary: () => markdownSummary, + notice: () => notice, + platform: () => platform_exports, + saveState: () => saveState, + setCommandEcho: () => setCommandEcho, + setFailed: () => setFailed, + setOutput: () => setOutput, + setSecret: () => setSecret, + startGroup: () => startGroup, + summary: () => summary, + toPlatformPath: () => toPlatformPath, + toPosixPath: () => toPosixPath, + toWin32Path: () => toWin32Path, + warning: () => warning +}); + +// +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); +} +function issue(name, message = "") { + issueCommand(name, {}, message); +} +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 crypto from "crypto"; +import * as fs from "fs"; +import * as os2 from "os"; +function issueFileCommand(command, message) { + const filePath = process.env[`GITHUB_${command}`]; + if (!filePath) { + throw new Error(`Unable to find environment variable for file command ${command}`); + } + if (!fs.existsSync(filePath)) { + throw new Error(`Missing file at path: ${filePath}`); + } + fs.appendFileSync(filePath, `${toCommandValue(message)}${os2.EOL}`, { + encoding: "utf8" + }); +} +function prepareKeyValueMessage(key, value) { + const delimiter3 = `ghadelimiter_${crypto.randomUUID()}`; + const convertedValue = toCommandValue(value); + if (key.includes(delimiter3)) { + throw new Error(`Unexpected input: name should not contain the delimiter "${delimiter3}"`); + } + if (convertedValue.includes(delimiter3)) { + throw new Error(`Unexpected input: value should not contain the delimiter "${delimiter3}"`); + } + return `${key}<<${delimiter3}${os2.EOL}${convertedValue}${os2.EOL}${delimiter3}`; +} + +// +import * as os5 from "os"; +import * as path5 from "path"; + +// +import * as http from "http"; +import * as https from "https"; + +// +function getProxyUrl(reqUrl) { + const usingSsl = reqUrl.protocol === "https:"; + if (checkBypass(reqUrl)) { + return void 0; + } + const proxyVar = (() => { + if (usingSsl) { + return process.env["https_proxy"] || process.env["HTTPS_PROXY"]; + } else { + return process.env["http_proxy"] || process.env["HTTP_PROXY"]; + } + })(); + if (proxyVar) { + try { + return new DecodedURL(proxyVar); + } catch (_a2) { + if (!proxyVar.startsWith("http://") && !proxyVar.startsWith("https://")) + return new DecodedURL(`http://${proxyVar}`); + } + } else { + return void 0; + } +} +function checkBypass(reqUrl) { + if (!reqUrl.hostname) { + return false; + } + const reqHost = reqUrl.hostname; + if (isLoopbackAddress(reqHost)) { + return true; + } + const noProxy = process.env["no_proxy"] || process.env["NO_PROXY"] || ""; + if (!noProxy) { + return false; + } + let reqPort; + if (reqUrl.port) { + reqPort = Number(reqUrl.port); + } else if (reqUrl.protocol === "http:") { + reqPort = 80; + } else if (reqUrl.protocol === "https:") { + reqPort = 443; + } + const upperReqHosts = [reqUrl.hostname.toUpperCase()]; + if (typeof reqPort === "number") { + upperReqHosts.push(`${upperReqHosts[0]}:${reqPort}`); + } + for (const upperNoProxyItem of noProxy.split(",").map((x) => x.trim().toUpperCase()).filter((x) => x)) { + if (upperNoProxyItem === "*" || upperReqHosts.some((x) => x === upperNoProxyItem || x.endsWith(`.${upperNoProxyItem}`) || upperNoProxyItem.startsWith(".") && x.endsWith(`${upperNoProxyItem}`))) { + return true; + } + } + return false; +} +function isLoopbackAddress(host) { + const hostLower = host.toLowerCase(); + return hostLower === "localhost" || hostLower.startsWith("127.") || hostLower.startsWith("[::1]") || hostLower.startsWith("[0:0:0:0:0:0:0:1]"); +} +var DecodedURL = class extends URL { + constructor(url, base) { + super(url, base); + this._decodedUsername = decodeURIComponent(super.username); + this._decodedPassword = decodeURIComponent(super.password); + } + get username() { + return this._decodedUsername; + } + get password() { + return this._decodedPassword; + } +}; + +// +var tunnel = __toESM(require_tunnel2()); +var import_undici = __toESM(require_undici()); +var __awaiter = function(thisArg, _arguments, P, generator) { + function adopt(value) { + return value instanceof P ? value : new P(function(resolve2) { + resolve2(value); + }); + } + return new (P || (P = Promise))(function(resolve2, 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 ? resolve2(result.value) : adopt(result.value).then(fulfilled, rejected); + } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +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 +]; +var RetryableHttpVerbs = ["OPTIONS", "GET", "DELETE", "HEAD"]; +var ExponentialBackoffCeiling = 10; +var ExponentialBackoffTimeSlice = 5; +var HttpClientError = class _HttpClientError extends Error { + constructor(message, statusCode) { + super(message); + this.name = "HttpClientError"; + this.statusCode = statusCode; + Object.setPrototypeOf(this, _HttpClientError.prototype); + } +}; +var HttpClientResponse = class { + constructor(message) { + this.message = message; + } + readBody() { + return __awaiter(this, void 0, void 0, function* () { + return new Promise((resolve2) => __awaiter(this, void 0, void 0, function* () { + let output = Buffer.alloc(0); + this.message.on("data", (chunk) => { + output = Buffer.concat([output, chunk]); + }); + this.message.on("end", () => { + resolve2(output.toString()); + }); + })); + }); + } + readBodyBuffer() { + return __awaiter(this, void 0, void 0, function* () { + return new Promise((resolve2) => __awaiter(this, void 0, void 0, function* () { + const chunks = []; + this.message.on("data", (chunk) => { + chunks.push(chunk); + }); + this.message.on("end", () => { + resolve2(Buffer.concat(chunks)); + }); + })); + }); + } +}; +var HttpClient = class { + constructor(userAgent2, handlers, requestOptions) { + this._ignoreSslError = false; + this._allowRedirects = true; + this._allowRedirectDowngrade = false; + this._maxRedirects = 50; + this._allowRetries = false; + this._maxRetries = 1; + this._keepAlive = false; + this._disposed = false; + this.userAgent = this._getUserAgentWithOrchestrationId(userAgent2); + this.handlers = handlers || []; + this.requestOptions = requestOptions; + if (requestOptions) { + if (requestOptions.ignoreSslError != null) { + this._ignoreSslError = requestOptions.ignoreSslError; + } + this._socketTimeout = requestOptions.socketTimeout; + if (requestOptions.allowRedirects != null) { + this._allowRedirects = requestOptions.allowRedirects; + } + if (requestOptions.allowRedirectDowngrade != null) { + this._allowRedirectDowngrade = requestOptions.allowRedirectDowngrade; + } + if (requestOptions.maxRedirects != null) { + this._maxRedirects = Math.max(requestOptions.maxRedirects, 0); + } + if (requestOptions.keepAlive != null) { + this._keepAlive = requestOptions.keepAlive; + } + if (requestOptions.allowRetries != null) { + this._allowRetries = requestOptions.allowRetries; + } + if (requestOptions.maxRetries != null) { + this._maxRetries = requestOptions.maxRetries; + } + } + } + options(requestUrl, additionalHeaders) { + return __awaiter(this, void 0, void 0, function* () { + return this.request("OPTIONS", requestUrl, null, additionalHeaders || {}); + }); + } + get(requestUrl, additionalHeaders) { + return __awaiter(this, void 0, void 0, function* () { + return this.request("GET", requestUrl, null, additionalHeaders || {}); + }); + } + del(requestUrl, additionalHeaders) { + return __awaiter(this, void 0, void 0, function* () { + return this.request("DELETE", requestUrl, null, additionalHeaders || {}); + }); + } + post(requestUrl, data, additionalHeaders) { + return __awaiter(this, void 0, void 0, function* () { + return this.request("POST", requestUrl, data, additionalHeaders || {}); + }); + } + patch(requestUrl, data, additionalHeaders) { + return __awaiter(this, void 0, void 0, function* () { + return this.request("PATCH", requestUrl, data, additionalHeaders || {}); + }); + } + put(requestUrl, data, additionalHeaders) { + return __awaiter(this, void 0, void 0, function* () { + return this.request("PUT", requestUrl, data, additionalHeaders || {}); + }); + } + head(requestUrl, additionalHeaders) { + return __awaiter(this, void 0, void 0, function* () { + return this.request("HEAD", requestUrl, null, additionalHeaders || {}); + }); + } + sendStream(verb, requestUrl, stream, additionalHeaders) { + return __awaiter(this, void 0, void 0, function* () { + return this.request(verb, requestUrl, stream, additionalHeaders); + }); + } + /** + * Gets a typed object from an endpoint + * Be aware that not found returns a null. Other errors (4xx, 5xx) reject the promise + */ + getJson(requestUrl_1) { + return __awaiter(this, arguments, void 0, function* (requestUrl, additionalHeaders = {}) { + additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); + const res = yield this.get(requestUrl, additionalHeaders); + return this._processResponse(res, this.requestOptions); + }); + } + postJson(requestUrl_1, obj_1) { + return __awaiter(this, arguments, void 0, function* (requestUrl, obj, additionalHeaders = {}) { + const data = JSON.stringify(obj, null, 2); + additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); + additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultContentTypeHeader(additionalHeaders, MediaTypes.ApplicationJson); + const res = yield this.post(requestUrl, data, additionalHeaders); + return this._processResponse(res, this.requestOptions); + }); + } + putJson(requestUrl_1, obj_1) { + return __awaiter(this, arguments, void 0, function* (requestUrl, obj, additionalHeaders = {}) { + const data = JSON.stringify(obj, null, 2); + additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); + additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultContentTypeHeader(additionalHeaders, MediaTypes.ApplicationJson); + const res = yield this.put(requestUrl, data, additionalHeaders); + return this._processResponse(res, this.requestOptions); + }); + } + patchJson(requestUrl_1, obj_1) { + return __awaiter(this, arguments, void 0, function* (requestUrl, obj, additionalHeaders = {}) { + const data = JSON.stringify(obj, null, 2); + additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); + additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultContentTypeHeader(additionalHeaders, MediaTypes.ApplicationJson); + const res = yield this.patch(requestUrl, data, additionalHeaders); + return this._processResponse(res, this.requestOptions); + }); + } + /** + * Makes a raw http request. + * All other methods such as get, post, patch, and request ultimately call this. + * Prefer get, del, post and patch + */ + request(verb, requestUrl, data, headers) { + return __awaiter(this, void 0, void 0, function* () { + if (this._disposed) { + throw new Error("Client has already been disposed."); + } + const parsedUrl = new URL(requestUrl); + let info2 = this._prepareRequest(verb, parsedUrl, headers); + const maxTries = this._allowRetries && RetryableHttpVerbs.includes(verb) ? this._maxRetries + 1 : 1; + let numTries = 0; + let response; + do { + response = yield this.requestRaw(info2, data); + if (response && response.message && response.message.statusCode === HttpCodes.Unauthorized) { + let authenticationHandler; + for (const handler2 of this.handlers) { + if (handler2.canHandleAuthentication(response)) { + authenticationHandler = handler2; + break; + } + } + if (authenticationHandler) { + return authenticationHandler.handleAuthentication(this, info2, data); + } else { + return response; + } + } + let redirectsRemaining = this._maxRedirects; + while (response.message.statusCode && HttpRedirectCodes.includes(response.message.statusCode) && this._allowRedirects && redirectsRemaining > 0) { + const redirectUrl = response.message.headers["location"]; + if (!redirectUrl) { + break; + } + const parsedRedirectUrl = new URL(redirectUrl); + if (parsedUrl.protocol === "https:" && parsedUrl.protocol !== parsedRedirectUrl.protocol && !this._allowRedirectDowngrade) { + throw new Error("Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true."); + } + yield response.readBody(); + if (parsedRedirectUrl.hostname !== parsedUrl.hostname) { + for (const header in headers) { + if (header.toLowerCase() === "authorization") { + delete headers[header]; + } + } + } + info2 = this._prepareRequest(verb, parsedRedirectUrl, headers); + response = yield this.requestRaw(info2, data); + redirectsRemaining--; + } + if (!response.message.statusCode || !HttpResponseRetryCodes.includes(response.message.statusCode)) { + return response; + } + numTries += 1; + if (numTries < maxTries) { + yield response.readBody(); + yield this._performExponentialBackoff(numTries); + } + } while (numTries < maxTries); + return response; + }); + } + /** + * Needs to be called if keepAlive is set to true in request options. + */ + dispose() { + if (this._agent) { + this._agent.destroy(); + } + this._disposed = true; + } + /** + * Raw request. + * @param info + * @param data + */ + requestRaw(info2, data) { + return __awaiter(this, void 0, void 0, function* () { + return new Promise((resolve2, reject) => { + function callbackForResult(err, res) { + if (err) { + reject(err); + } else if (!res) { + reject(new Error("Unknown error")); + } else { + resolve2(res); + } + } + this.requestRawWithCallback(info2, data, callbackForResult); + }); + }); + } + /** + * Raw request with callback. + * @param info + * @param data + * @param onResult + */ + requestRawWithCallback(info2, data, onResult) { + if (typeof data === "string") { + if (!info2.options.headers) { + info2.options.headers = {}; + } + info2.options.headers["Content-Length"] = Buffer.byteLength(data, "utf8"); + } + let callbackCalled = false; + function handleResult(err, res) { + if (!callbackCalled) { + callbackCalled = true; + onResult(err, res); + } + } + const req = info2.httpModule.request(info2.options, (msg) => { + const res = new HttpClientResponse(msg); + handleResult(void 0, res); + }); + let socket; + req.on("socket", (sock) => { + socket = sock; + }); + req.setTimeout(this._socketTimeout || 3 * 6e4, () => { + if (socket) { + socket.end(); + } + handleResult(new Error(`Request timeout: ${info2.options.path}`)); + }); + req.on("error", function(err) { + handleResult(err); + }); + if (data && typeof data === "string") { + req.write(data, "utf8"); + } + if (data && typeof data !== "string") { + data.on("close", function() { + req.end(); + }); + data.pipe(req); + } else { + req.end(); + } + } + /** + * Gets an http agent. This function is useful when you need an http agent that handles + * routing through a proxy server - depending upon the url and proxy environment variables. + * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com + */ + getAgent(serverUrl) { + const parsedUrl = new URL(serverUrl); + return this._getAgent(parsedUrl); + } + getAgentDispatcher(serverUrl) { + const parsedUrl = new URL(serverUrl); + const proxyUrl = getProxyUrl(parsedUrl); + const useProxy = proxyUrl && proxyUrl.hostname; + if (!useProxy) { + return; + } + return this._getProxyAgentDispatcher(parsedUrl, proxyUrl); + } + _prepareRequest(method, requestUrl, headers) { + const info2 = {}; + info2.parsedUrl = requestUrl; + const usingSsl = info2.parsedUrl.protocol === "https:"; + info2.httpModule = usingSsl ? https : http; + const defaultPort = usingSsl ? 443 : 80; + info2.options = {}; + info2.options.host = info2.parsedUrl.hostname; + info2.options.port = info2.parsedUrl.port ? parseInt(info2.parsedUrl.port) : defaultPort; + info2.options.path = (info2.parsedUrl.pathname || "") + (info2.parsedUrl.search || ""); + info2.options.method = method; + info2.options.headers = this._mergeHeaders(headers); + if (this.userAgent != null) { + info2.options.headers["user-agent"] = this.userAgent; + } + info2.options.agent = this._getAgent(info2.parsedUrl); + if (this.handlers) { + for (const handler2 of this.handlers) { + handler2.prepareRequest(info2.options); + } + } + return info2; + } + _mergeHeaders(headers) { + if (this.requestOptions && this.requestOptions.headers) { + return Object.assign({}, lowercaseKeys(this.requestOptions.headers), lowercaseKeys(headers || {})); + } + return lowercaseKeys(headers || {}); + } + /** + * Gets an existing header value or returns a default. + * Handles converting number header values to strings since HTTP headers must be strings. + * Note: This returns string | string[] since some headers can have multiple values. + * For headers that must always be a single string (like Content-Type), use the + * specialized _getExistingOrDefaultContentTypeHeader method instead. + */ + _getExistingOrDefaultHeader(additionalHeaders, header, _default) { + let clientHeader; + if (this.requestOptions && this.requestOptions.headers) { + const headerValue = lowercaseKeys(this.requestOptions.headers)[header]; + if (headerValue) { + clientHeader = typeof headerValue === "number" ? headerValue.toString() : headerValue; + } + } + const additionalValue = additionalHeaders[header]; + if (additionalValue !== void 0) { + return typeof additionalValue === "number" ? additionalValue.toString() : additionalValue; + } + if (clientHeader !== void 0) { + return clientHeader; + } + return _default; + } + /** + * Specialized version of _getExistingOrDefaultHeader for Content-Type header. + * Always returns a single string (not an array) since Content-Type should be a single value. + * Converts arrays to comma-separated strings and numbers to strings to ensure type safety. + * This was split from _getExistingOrDefaultHeader to provide stricter typing for callers + * that assign the result to places expecting a string (e.g., additionalHeaders[Headers.ContentType]). + */ + _getExistingOrDefaultContentTypeHeader(additionalHeaders, _default) { + let clientHeader; + if (this.requestOptions && this.requestOptions.headers) { + const headerValue = lowercaseKeys(this.requestOptions.headers)[Headers.ContentType]; + if (headerValue) { + if (typeof headerValue === "number") { + clientHeader = String(headerValue); + } else if (Array.isArray(headerValue)) { + clientHeader = headerValue.join(", "); + } else { + clientHeader = headerValue; + } + } + } + const additionalValue = additionalHeaders[Headers.ContentType]; + if (additionalValue !== void 0) { + if (typeof additionalValue === "number") { + return String(additionalValue); + } else if (Array.isArray(additionalValue)) { + return additionalValue.join(", "); + } else { + return additionalValue; + } + } + if (clientHeader !== void 0) { + return clientHeader; + } + return _default; + } + _getAgent(parsedUrl) { + let agent; + const proxyUrl = getProxyUrl(parsedUrl); + const useProxy = proxyUrl && proxyUrl.hostname; + if (this._keepAlive && useProxy) { + agent = this._proxyAgent; + } + if (!useProxy) { + agent = this._agent; + } + if (agent) { + return agent; + } + const usingSsl = parsedUrl.protocol === "https:"; + let maxSockets = 100; + if (this.requestOptions) { + maxSockets = this.requestOptions.maxSockets || http.globalAgent.maxSockets; + } + if (proxyUrl && proxyUrl.hostname) { + const agentOptions = { + maxSockets, + keepAlive: this._keepAlive, + proxy: Object.assign(Object.assign({}, (proxyUrl.username || proxyUrl.password) && { + proxyAuth: `${proxyUrl.username}:${proxyUrl.password}` + }), { host: proxyUrl.hostname, port: proxyUrl.port }) + }; + let tunnelAgent; + const overHttps = proxyUrl.protocol === "https:"; + if (usingSsl) { + tunnelAgent = overHttps ? tunnel.httpsOverHttps : tunnel.httpsOverHttp; + } else { + tunnelAgent = overHttps ? tunnel.httpOverHttps : tunnel.httpOverHttp; + } + agent = tunnelAgent(agentOptions); + this._proxyAgent = agent; + } + if (!agent) { + const options = { keepAlive: this._keepAlive, maxSockets }; + agent = usingSsl ? new https.Agent(options) : new http.Agent(options); + this._agent = agent; + } + if (usingSsl && this._ignoreSslError) { + agent.options = Object.assign(agent.options || {}, { + rejectUnauthorized: false + }); + } + return agent; + } + _getProxyAgentDispatcher(parsedUrl, proxyUrl) { + let proxyAgent; + if (this._keepAlive) { + proxyAgent = this._proxyAgentDispatcher; + } + if (proxyAgent) { + return proxyAgent; + } + const usingSsl = parsedUrl.protocol === "https:"; + proxyAgent = new import_undici.ProxyAgent(Object.assign({ uri: proxyUrl.href, pipelining: !this._keepAlive ? 0 : 1 }, (proxyUrl.username || proxyUrl.password) && { + token: `Basic ${Buffer.from(`${proxyUrl.username}:${proxyUrl.password}`).toString("base64")}` + })); + this._proxyAgentDispatcher = proxyAgent; + if (usingSsl && this._ignoreSslError) { + proxyAgent.options = Object.assign(proxyAgent.options.requestTls || {}, { + rejectUnauthorized: false + }); + } + return proxyAgent; + } + _getUserAgentWithOrchestrationId(userAgent2) { + const baseUserAgent = userAgent2 || "actions/http-client"; + const orchId = process.env["ACTIONS_ORCHESTRATION_ID"]; + if (orchId) { + const sanitizedId = orchId.replace(/[^a-z0-9_.-]/gi, "_"); + return `${baseUserAgent} actions_orchestration_id/${sanitizedId}`; + } + return baseUserAgent; + } + _performExponentialBackoff(retryNumber) { + return __awaiter(this, void 0, void 0, function* () { + retryNumber = Math.min(ExponentialBackoffCeiling, retryNumber); + const ms = ExponentialBackoffTimeSlice * Math.pow(2, retryNumber); + return new Promise((resolve2) => setTimeout(() => resolve2(), ms)); + }); + } + _processResponse(res, options) { + return __awaiter(this, void 0, void 0, function* () { + return new Promise((resolve2, reject) => __awaiter(this, void 0, void 0, function* () { + const statusCode = res.message.statusCode || 0; + const response = { + statusCode, + result: null, + headers: {} + }; + if (statusCode === HttpCodes.NotFound) { + resolve2(response); + } + function dateTimeDeserializer(key, value) { + if (typeof value === "string") { + const a = new Date(value); + if (!isNaN(a.valueOf())) { + return a; + } + } + return value; + } + let obj; + let contents; + try { + contents = yield res.readBody(); + if (contents && contents.length > 0) { + if (options && options.deserializeDates) { + obj = JSON.parse(contents, dateTimeDeserializer); + } else { + obj = JSON.parse(contents); + } + response.result = obj; + } + response.headers = res.message.headers; + } catch (err) { + } + if (statusCode > 299) { + let msg; + if (obj && obj.message) { + msg = obj.message; + } else if (contents && contents.length > 0) { + msg = contents; + } else { + msg = `Failed request: (${statusCode})`; + } + const err = new HttpClientError(msg, statusCode); + err.result = response.result; + reject(err); + } else { + resolve2(response); + } + })); + }); + } +}; +var lowercaseKeys = (obj) => Object.keys(obj).reduce((c, k) => (c[k.toLowerCase()] = obj[k], c), {}); + +// +var __awaiter2 = function(thisArg, _arguments, P, generator) { + function adopt(value) { + return value instanceof P ? value : new P(function(resolve2) { + resolve2(value); + }); + } + return new (P || (P = Promise))(function(resolve2, 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 ? resolve2(result.value) : adopt(result.value).then(fulfilled, rejected); + } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var BearerCredentialHandler = class { + constructor(token) { + this.token = token; + } + // currently implements pre-authorization + // TODO: support preAuth = false where it hooks on 401 + prepareRequest(options) { + if (!options.headers) { + throw Error("The request has no headers"); + } + options.headers["Authorization"] = `Bearer ${this.token}`; + } + // This handler cannot handle 401 + canHandleAuthentication() { + return false; + } + handleAuthentication() { + return __awaiter2(this, void 0, void 0, function* () { + throw new Error("not implemented"); + }); + } +}; + +// +var __awaiter3 = function(thisArg, _arguments, P, generator) { + function adopt(value) { + return value instanceof P ? value : new P(function(resolve2) { + resolve2(value); + }); + } + return new (P || (P = Promise))(function(resolve2, 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 ? resolve2(result.value) : adopt(result.value).then(fulfilled, rejected); + } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var OidcClient = class _OidcClient { + static createHttpClient(allowRetry = true, maxRetry = 10) { + const requestOptions = { + allowRetries: allowRetry, + maxRetries: maxRetry + }; + return new HttpClient("actions/oidc-client", [new BearerCredentialHandler(_OidcClient.getRequestToken())], requestOptions); + } + static getRequestToken() { + const token = process.env["ACTIONS_ID_TOKEN_REQUEST_TOKEN"]; + if (!token) { + throw new Error("Unable to get ACTIONS_ID_TOKEN_REQUEST_TOKEN env variable"); + } + return token; + } + static getIDTokenUrl() { + const runtimeUrl = process.env["ACTIONS_ID_TOKEN_REQUEST_URL"]; + if (!runtimeUrl) { + throw new Error("Unable to get ACTIONS_ID_TOKEN_REQUEST_URL env variable"); + } + return runtimeUrl; + } + static getCall(id_token_url) { + return __awaiter3(this, void 0, void 0, function* () { + var _a2; + const httpclient = _OidcClient.createHttpClient(); + const res = yield httpclient.getJson(id_token_url).catch((error2) => { + throw new Error(`Failed to get ID Token. + + Error Code : ${error2.statusCode} + + Error Message: ${error2.message}`); + }); + const id_token = (_a2 = res.result) === null || _a2 === void 0 ? void 0 : _a2.value; + if (!id_token) { + throw new Error("Response json body do not have ID Token field"); + } + return id_token; + }); + } + static getIDToken(audience) { + return __awaiter3(this, void 0, void 0, function* () { + try { + let id_token_url = _OidcClient.getIDTokenUrl(); + if (audience) { + const encodedAudience = encodeURIComponent(audience); + id_token_url = `${id_token_url}&audience=${encodedAudience}`; + } + debug(`ID token url is ${id_token_url}`); + const id_token = yield _OidcClient.getCall(id_token_url); + setSecret(id_token); + return id_token; + } catch (error2) { + throw new Error(`Error message: ${error2.message}`); + } + }); + } +}; + +// +import { EOL as EOL3 } from "os"; +import { constants, promises } from "fs"; +var __awaiter4 = function(thisArg, _arguments, P, generator) { + function adopt(value) { + return value instanceof P ? value : new P(function(resolve2) { + resolve2(value); + }); + } + return new (P || (P = Promise))(function(resolve2, 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 ? resolve2(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 __awaiter4(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 (_a2) { + 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 __awaiter4(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 __awaiter4(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(EOL3); + } + /** + * 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(); +var markdownSummary = _summary; +var summary = _summary; + +// +import * as path from "path"; +function toPosixPath(pth) { + return pth.replace(/[\\]/g, "/"); +} +function toWin32Path(pth) { + return pth.replace(/[/]/g, "\\"); +} +function toPlatformPath(pth) { + return pth.replace(/[/\\]/g, path.sep); +} + +// +var platform_exports = {}; +__export(platform_exports, { + arch: () => arch, + getDetails: () => getDetails, + isLinux: () => isLinux, + isMacOS: () => isMacOS, + isWindows: () => isWindows, + platform: () => platform +}); +import os4 from "os"; + +// +import { StringDecoder } from "string_decoder"; + +// +import * as os3 from "os"; +import * as events from "events"; +import * as child from "child_process"; +import * as path4 from "path"; + +// +import * as path3 from "path"; + +// +import * as fs2 from "fs"; +import * as path2 from "path"; +var __awaiter5 = function(thisArg, _arguments, P, generator) { + function adopt(value) { + return value instanceof P ? value : new P(function(resolve2) { + resolve2(value); + }); + } + return new (P || (P = Promise))(function(resolve2, 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 ? resolve2(result.value) : adopt(result.value).then(fulfilled, rejected); + } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var { chmod, copyFile, lstat, mkdir, open, readdir, rename, rm, rmdir, stat, symlink, unlink } = fs2.promises; +var IS_WINDOWS = process.platform === "win32"; +var READONLY = fs2.constants.O_RDONLY; +function exists(fsPath) { + return __awaiter5(this, void 0, void 0, function* () { + try { + yield stat(fsPath); + } catch (err) { + if (err.code === "ENOENT") { + return false; + } + throw err; + } + return true; + }); +} +function isRooted(p) { + p = normalizeSeparators(p); + if (!p) { + throw new Error('isRooted() parameter "p" cannot be empty'); + } + if (IS_WINDOWS) { + return p.startsWith("\\") || /^[A-Z]:/i.test(p); + } + return p.startsWith("/"); +} +function tryGetExecutablePath(filePath, extensions) { + return __awaiter5(this, void 0, void 0, function* () { + let stats = void 0; + try { + stats = yield stat(filePath); + } catch (err) { + if (err.code !== "ENOENT") { + console.log(`Unexpected error attempting to determine if executable file exists '${filePath}': ${err}`); + } + } + if (stats && stats.isFile()) { + if (IS_WINDOWS) { + const upperExt = path2.extname(filePath).toUpperCase(); + if (extensions.some((validExt) => validExt.toUpperCase() === upperExt)) { + return filePath; + } + } else { + if (isUnixExecutable(stats)) { + return filePath; + } + } + } + const originalFilePath = filePath; + for (const extension of extensions) { + filePath = originalFilePath + extension; + stats = void 0; + try { + stats = yield stat(filePath); + } catch (err) { + if (err.code !== "ENOENT") { + console.log(`Unexpected error attempting to determine if executable file exists '${filePath}': ${err}`); + } + } + if (stats && stats.isFile()) { + if (IS_WINDOWS) { + try { + const directory = path2.dirname(filePath); + const upperName = path2.basename(filePath).toUpperCase(); + for (const actualName of yield readdir(directory)) { + if (upperName === actualName.toUpperCase()) { + filePath = path2.join(directory, actualName); + break; + } + } + } catch (err) { + console.log(`Unexpected error attempting to determine the actual case of the file '${filePath}': ${err}`); + } + return filePath; + } else { + if (isUnixExecutable(stats)) { + return filePath; + } + } + } + } + return ""; + }); +} +function normalizeSeparators(p) { + p = p || ""; + if (IS_WINDOWS) { + p = p.replace(/\//g, "\\"); + return p.replace(/\\\\+/g, "\\"); + } + return p.replace(/\/\/+/g, "/"); +} +function isUnixExecutable(stats) { + return (stats.mode & 1) > 0 || (stats.mode & 8) > 0 && process.getgid !== void 0 && stats.gid === process.getgid() || (stats.mode & 64) > 0 && process.getuid !== void 0 && stats.uid === process.getuid(); +} + +// +var __awaiter6 = function(thisArg, _arguments, P, generator) { + function adopt(value) { + return value instanceof P ? value : new P(function(resolve2) { + resolve2(value); + }); + } + return new (P || (P = Promise))(function(resolve2, 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 ? resolve2(result.value) : adopt(result.value).then(fulfilled, rejected); + } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +function which(tool, check) { + return __awaiter6(this, void 0, void 0, function* () { + if (!tool) { + throw new Error("parameter 'tool' is required"); + } + if (check) { + const result = yield which(tool, false); + if (!result) { + if (IS_WINDOWS) { + throw new Error(`Unable to locate executable file: ${tool}. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also verify the file has a valid extension for an executable file.`); + } else { + throw new Error(`Unable to locate executable file: ${tool}. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also check the file mode to verify the file is executable.`); + } + } + return result; + } + const matches = yield findInPath(tool); + if (matches && matches.length > 0) { + return matches[0]; + } + return ""; + }); +} +function findInPath(tool) { + return __awaiter6(this, void 0, void 0, function* () { + if (!tool) { + throw new Error("parameter 'tool' is required"); + } + const extensions = []; + if (IS_WINDOWS && process.env["PATHEXT"]) { + for (const extension of process.env["PATHEXT"].split(path3.delimiter)) { + if (extension) { + extensions.push(extension); + } + } + } + if (isRooted(tool)) { + const filePath = yield tryGetExecutablePath(tool, extensions); + if (filePath) { + return [filePath]; + } + return []; + } + if (tool.includes(path3.sep)) { + return []; + } + const directories = []; + if (process.env.PATH) { + for (const p of process.env.PATH.split(path3.delimiter)) { + if (p) { + directories.push(p); + } + } + } + const matches = []; + for (const directory of directories) { + const filePath = yield tryGetExecutablePath(path3.join(directory, tool), extensions); + if (filePath) { + matches.push(filePath); + } + } + return matches; + }); +} + +// +import { setTimeout as setTimeout2 } from "timers"; +var __awaiter7 = function(thisArg, _arguments, P, generator) { + function adopt(value) { + return value instanceof P ? value : new P(function(resolve2) { + resolve2(value); + }); + } + return new (P || (P = Promise))(function(resolve2, 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 ? resolve2(result.value) : adopt(result.value).then(fulfilled, rejected); + } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var IS_WINDOWS2 = process.platform === "win32"; +var ToolRunner = class extends events.EventEmitter { + constructor(toolPath, args, options) { + super(); + if (!toolPath) { + throw new Error("Parameter 'toolPath' cannot be null or empty."); + } + this.toolPath = toolPath; + this.args = args || []; + this.options = options || {}; + } + _debug(message) { + if (this.options.listeners && this.options.listeners.debug) { + this.options.listeners.debug(message); + } + } + _getCommandString(options, noPrefix) { + const toolPath = this._getSpawnFileName(); + const args = this._getSpawnArgs(options); + let cmd = noPrefix ? "" : "[command]"; + if (IS_WINDOWS2) { + if (this._isCmdFile()) { + cmd += toolPath; + for (const a of args) { + cmd += ` ${a}`; + } + } else if (options.windowsVerbatimArguments) { + cmd += `"${toolPath}"`; + for (const a of args) { + cmd += ` ${a}`; + } + } else { + cmd += this._windowsQuoteCmdArg(toolPath); + for (const a of args) { + cmd += ` ${this._windowsQuoteCmdArg(a)}`; + } + } + } else { + cmd += toolPath; + for (const a of args) { + cmd += ` ${a}`; + } + } + return cmd; + } + _processLineBuffer(data, strBuffer, onLine) { + try { + let s = strBuffer + data.toString(); + let n = s.indexOf(os3.EOL); + while (n > -1) { + const line = s.substring(0, n); + onLine(line); + s = s.substring(n + os3.EOL.length); + n = s.indexOf(os3.EOL); + } + return s; + } catch (err) { + this._debug(`error processing line. Failed with error ${err}`); + return ""; + } + } + _getSpawnFileName() { + if (IS_WINDOWS2) { + if (this._isCmdFile()) { + return process.env["COMSPEC"] || "cmd.exe"; + } + } + return this.toolPath; + } + _getSpawnArgs(options) { + if (IS_WINDOWS2) { + if (this._isCmdFile()) { + let argline = `/D /S /C "${this._windowsQuoteCmdArg(this.toolPath)}`; + for (const a of this.args) { + argline += " "; + argline += options.windowsVerbatimArguments ? a : this._windowsQuoteCmdArg(a); + } + argline += '"'; + return [argline]; + } + } + return this.args; + } + _endsWith(str, end) { + return str.endsWith(end); + } + _isCmdFile() { + const upperToolPath = this.toolPath.toUpperCase(); + return this._endsWith(upperToolPath, ".CMD") || this._endsWith(upperToolPath, ".BAT"); + } + _windowsQuoteCmdArg(arg) { + if (!this._isCmdFile()) { + return this._uvQuoteCmdArg(arg); + } + if (!arg) { + return '""'; + } + const cmdSpecialChars = [ + " ", + " ", + "&", + "(", + ")", + "[", + "]", + "{", + "}", + "^", + "=", + ";", + "!", + "'", + "+", + ",", + "`", + "~", + "|", + "<", + ">", + '"' + ]; + let needsQuotes = false; + for (const char of arg) { + if (cmdSpecialChars.some((x) => x === char)) { + needsQuotes = true; + break; + } + } + if (!needsQuotes) { + return arg; + } + let reverse = '"'; + let quoteHit = true; + for (let i = arg.length; i > 0; i--) { + reverse += arg[i - 1]; + if (quoteHit && arg[i - 1] === "\\") { + reverse += "\\"; + } else if (arg[i - 1] === '"') { + quoteHit = true; + reverse += '"'; + } else { + quoteHit = false; + } + } + reverse += '"'; + return reverse.split("").reverse().join(""); + } + _uvQuoteCmdArg(arg) { + if (!arg) { + return '""'; + } + if (!arg.includes(" ") && !arg.includes(" ") && !arg.includes('"')) { + return arg; + } + if (!arg.includes('"') && !arg.includes("\\")) { + return `"${arg}"`; + } + let reverse = '"'; + let quoteHit = true; + for (let i = arg.length; i > 0; i--) { + reverse += arg[i - 1]; + if (quoteHit && arg[i - 1] === "\\") { + reverse += "\\"; + } else if (arg[i - 1] === '"') { + quoteHit = true; + reverse += "\\"; + } else { + quoteHit = false; + } + } + reverse += '"'; + return reverse.split("").reverse().join(""); + } + _cloneExecOptions(options) { + options = options || {}; + const result = { + cwd: options.cwd || process.cwd(), + env: options.env || process.env, + silent: options.silent || false, + windowsVerbatimArguments: options.windowsVerbatimArguments || false, + failOnStdErr: options.failOnStdErr || false, + ignoreReturnCode: options.ignoreReturnCode || false, + delay: options.delay || 1e4 + }; + result.outStream = options.outStream || process.stdout; + result.errStream = options.errStream || process.stderr; + return result; + } + _getSpawnOptions(options, toolPath) { + options = options || {}; + const result = {}; + result.cwd = options.cwd; + result.env = options.env; + result["windowsVerbatimArguments"] = options.windowsVerbatimArguments || this._isCmdFile(); + if (options.windowsVerbatimArguments) { + result.argv0 = `"${toolPath}"`; + } + return result; + } + /** + * Exec a tool. + * Output will be streamed to the live console. + * Returns promise with return code + * + * @param tool path to tool to exec + * @param options optional exec options. See ExecOptions + * @returns number + */ + exec() { + return __awaiter7(this, void 0, void 0, function* () { + if (!isRooted(this.toolPath) && (this.toolPath.includes("/") || IS_WINDOWS2 && this.toolPath.includes("\\"))) { + this.toolPath = path4.resolve(process.cwd(), this.options.cwd || process.cwd(), this.toolPath); + } + this.toolPath = yield which(this.toolPath, true); + return new Promise((resolve2, reject) => __awaiter7(this, void 0, void 0, function* () { + this._debug(`exec tool: ${this.toolPath}`); + this._debug("arguments:"); + for (const arg of this.args) { + this._debug(` ${arg}`); + } + const optionsNonNull = this._cloneExecOptions(this.options); + if (!optionsNonNull.silent && optionsNonNull.outStream) { + optionsNonNull.outStream.write(this._getCommandString(optionsNonNull) + os3.EOL); + } + const state = new ExecState(optionsNonNull, this.toolPath); + state.on("debug", (message) => { + this._debug(message); + }); + if (this.options.cwd && !(yield exists(this.options.cwd))) { + return reject(new Error(`The cwd: ${this.options.cwd} does not exist!`)); + } + const fileName = this._getSpawnFileName(); + const cp = child.spawn(fileName, this._getSpawnArgs(optionsNonNull), this._getSpawnOptions(this.options, fileName)); + let stdbuffer = ""; + if (cp.stdout) { + cp.stdout.on("data", (data) => { + if (this.options.listeners && this.options.listeners.stdout) { + this.options.listeners.stdout(data); + } + if (!optionsNonNull.silent && optionsNonNull.outStream) { + optionsNonNull.outStream.write(data); + } + stdbuffer = this._processLineBuffer(data, stdbuffer, (line) => { + if (this.options.listeners && this.options.listeners.stdline) { + this.options.listeners.stdline(line); + } + }); + }); + } + let errbuffer = ""; + if (cp.stderr) { + cp.stderr.on("data", (data) => { + state.processStderr = true; + if (this.options.listeners && this.options.listeners.stderr) { + this.options.listeners.stderr(data); + } + if (!optionsNonNull.silent && optionsNonNull.errStream && optionsNonNull.outStream) { + const s = optionsNonNull.failOnStdErr ? optionsNonNull.errStream : optionsNonNull.outStream; + s.write(data); + } + errbuffer = this._processLineBuffer(data, errbuffer, (line) => { + if (this.options.listeners && this.options.listeners.errline) { + this.options.listeners.errline(line); + } + }); + }); + } + cp.on("error", (err) => { + state.processError = err.message; + state.processExited = true; + state.processClosed = true; + state.CheckComplete(); + }); + cp.on("exit", (code) => { + state.processExitCode = code; + state.processExited = true; + this._debug(`Exit code ${code} received from tool '${this.toolPath}'`); + state.CheckComplete(); + }); + cp.on("close", (code) => { + state.processExitCode = code; + state.processExited = true; + state.processClosed = true; + this._debug(`STDIO streams have closed for tool '${this.toolPath}'`); + state.CheckComplete(); + }); + state.on("done", (error2, exitCode) => { + if (stdbuffer.length > 0) { + this.emit("stdline", stdbuffer); + } + if (errbuffer.length > 0) { + this.emit("errline", errbuffer); + } + cp.removeAllListeners(); + if (error2) { + reject(error2); + } else { + resolve2(exitCode); + } + }); + if (this.options.input) { + if (!cp.stdin) { + throw new Error("child process missing stdin"); + } + cp.stdin.end(this.options.input); + } + })); + }); + } +}; +function argStringToArray(argString) { + const args = []; + let inQuotes = false; + let escaped = false; + let arg = ""; + function append(c) { + if (escaped && c !== '"') { + arg += "\\"; + } + arg += c; + escaped = false; + } + for (let i = 0; i < argString.length; i++) { + const c = argString.charAt(i); + if (c === '"') { + if (!escaped) { + inQuotes = !inQuotes; + } else { + append(c); + } + continue; + } + if (c === "\\" && escaped) { + append(c); + continue; + } + if (c === "\\" && inQuotes) { + escaped = true; + continue; + } + if (c === " " && !inQuotes) { + if (arg.length > 0) { + args.push(arg); + arg = ""; + } + continue; + } + append(c); + } + if (arg.length > 0) { + args.push(arg.trim()); + } + return args; +} +var ExecState = class _ExecState extends events.EventEmitter { + constructor(options, toolPath) { + super(); + this.processClosed = false; + this.processError = ""; + this.processExitCode = 0; + this.processExited = false; + this.processStderr = false; + this.delay = 1e4; + this.done = false; + this.timeout = null; + if (!toolPath) { + throw new Error("toolPath must not be empty"); + } + this.options = options; + this.toolPath = toolPath; + if (options.delay) { + this.delay = options.delay; + } + } + CheckComplete() { + if (this.done) { + return; + } + if (this.processClosed) { + this._setResult(); + } else if (this.processExited) { + this.timeout = setTimeout2(_ExecState.HandleTimeout, this.delay, this); + } + } + _debug(message) { + this.emit("debug", message); + } + _setResult() { + let error2; + if (this.processExited) { + if (this.processError) { + error2 = new Error(`There was an error when attempting to execute the process '${this.toolPath}'. This may indicate the process failed to start. Error: ${this.processError}`); + } else if (this.processExitCode !== 0 && !this.options.ignoreReturnCode) { + error2 = new Error(`The process '${this.toolPath}' failed with exit code ${this.processExitCode}`); + } else if (this.processStderr && this.options.failOnStdErr) { + error2 = new Error(`The process '${this.toolPath}' failed because one or more lines were written to the STDERR stream`); + } + } + if (this.timeout) { + clearTimeout(this.timeout); + this.timeout = null; + } + this.done = true; + this.emit("done", error2, this.processExitCode); + } + static HandleTimeout(state) { + if (state.done) { + return; + } + if (!state.processClosed && state.processExited) { + const message = `The STDIO streams did not close within ${state.delay / 1e3} seconds of the exit event from process '${state.toolPath}'. This may indicate a child process inherited the STDIO streams and has not yet exited.`; + state._debug(message); + } + state._setResult(); + } +}; + +// +var __awaiter8 = function(thisArg, _arguments, P, generator) { + function adopt(value) { + return value instanceof P ? value : new P(function(resolve2) { + resolve2(value); + }); + } + return new (P || (P = Promise))(function(resolve2, 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 ? resolve2(result.value) : adopt(result.value).then(fulfilled, rejected); + } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +function exec(commandLine, args, options) { + return __awaiter8(this, void 0, void 0, function* () { + const commandArgs = argStringToArray(commandLine); + if (commandArgs.length === 0) { + throw new Error(`Parameter 'commandLine' cannot be null or empty.`); + } + const toolPath = commandArgs[0]; + args = commandArgs.slice(1).concat(args || []); + const runner = new ToolRunner(toolPath, args, options); + return runner.exec(); + }); +} +function getExecOutput(commandLine, args, options) { + return __awaiter8(this, void 0, void 0, function* () { + var _a2, _b; + let stdout = ""; + let stderr = ""; + const stdoutDecoder = new StringDecoder("utf8"); + const stderrDecoder = new StringDecoder("utf8"); + const originalStdoutListener = (_a2 = options === null || options === void 0 ? void 0 : options.listeners) === null || _a2 === void 0 ? void 0 : _a2.stdout; + const originalStdErrListener = (_b = options === null || options === void 0 ? void 0 : options.listeners) === null || _b === void 0 ? void 0 : _b.stderr; + const stdErrListener = (data) => { + stderr += stderrDecoder.write(data); + if (originalStdErrListener) { + originalStdErrListener(data); + } + }; + const stdOutListener = (data) => { + stdout += stdoutDecoder.write(data); + if (originalStdoutListener) { + originalStdoutListener(data); + } + }; + const listeners = Object.assign(Object.assign({}, options === null || options === void 0 ? void 0 : options.listeners), { stdout: stdOutListener, stderr: stdErrListener }); + const exitCode = yield exec(commandLine, args, Object.assign(Object.assign({}, options), { listeners })); + stdout += stdoutDecoder.end(); + stderr += stderrDecoder.end(); + return { + exitCode, + stdout, + stderr + }; + }); +} + +// +var __awaiter9 = function(thisArg, _arguments, P, generator) { + function adopt(value) { + return value instanceof P ? value : new P(function(resolve2) { + resolve2(value); + }); + } + return new (P || (P = Promise))(function(resolve2, 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 ? resolve2(result.value) : adopt(result.value).then(fulfilled, rejected); + } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var getWindowsInfo = () => __awaiter9(void 0, void 0, void 0, function* () { + const { stdout: version } = yield getExecOutput('powershell -command "(Get-CimInstance -ClassName Win32_OperatingSystem).Version"', void 0, { + silent: true + }); + const { stdout: name } = yield getExecOutput('powershell -command "(Get-CimInstance -ClassName Win32_OperatingSystem).Caption"', void 0, { + silent: true + }); + return { + name: name.trim(), + version: version.trim() + }; +}); +var getMacOsInfo = () => __awaiter9(void 0, void 0, void 0, function* () { + var _a2, _b, _c, _d; + const { stdout } = yield getExecOutput("sw_vers", void 0, { + silent: true + }); + const version = (_b = (_a2 = stdout.match(/ProductVersion:\s*(.+)/)) === null || _a2 === void 0 ? void 0 : _a2[1]) !== null && _b !== void 0 ? _b : ""; + const name = (_d = (_c = stdout.match(/ProductName:\s*(.+)/)) === null || _c === void 0 ? void 0 : _c[1]) !== null && _d !== void 0 ? _d : ""; + return { + name, + version + }; +}); +var getLinuxInfo = () => __awaiter9(void 0, void 0, void 0, function* () { + const { stdout } = yield getExecOutput("lsb_release", ["-i", "-r", "-s"], { + silent: true + }); + const [name, version] = stdout.trim().split("\n"); + return { + name, + version + }; +}); +var platform = os4.platform(); +var arch = os4.arch(); +var isWindows = platform === "win32"; +var isMacOS = platform === "darwin"; +var isLinux = platform === "linux"; +function getDetails() { + return __awaiter9(this, void 0, void 0, function* () { + return Object.assign(Object.assign({}, yield isWindows ? getWindowsInfo() : isMacOS ? getMacOsInfo() : getLinuxInfo()), { + platform, + arch, + isWindows, + isMacOS, + isLinux + }); + }); +} + +// +var __awaiter10 = function(thisArg, _arguments, P, generator) { + function adopt(value) { + return value instanceof P ? value : new P(function(resolve2) { + resolve2(value); + }); + } + return new (P || (P = Promise))(function(resolve2, 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 ? resolve2(result.value) : adopt(result.value).then(fulfilled, rejected); + } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var ExitCode; +(function(ExitCode2) { + ExitCode2[ExitCode2["Success"] = 0] = "Success"; + ExitCode2[ExitCode2["Failure"] = 1] = "Failure"; +})(ExitCode || (ExitCode = {})); +function exportVariable(name, val) { + const convertedVal = toCommandValue(val); + process.env[name] = convertedVal; + const filePath = process.env["GITHUB_ENV"] || ""; + if (filePath) { + return issueFileCommand("ENV", prepareKeyValueMessage(name, val)); + } + issueCommand("set-env", { name }, convertedVal); +} +function setSecret(secret) { + issueCommand("add-mask", {}, secret); +} +function addPath(inputPath) { + const filePath = process.env["GITHUB_PATH"] || ""; + if (filePath) { + issueFileCommand("PATH", inputPath); + } else { + issueCommand("add-path", {}, inputPath); + } + process.env["PATH"] = `${inputPath}${path5.delimiter}${process.env["PATH"]}`; +} +function getInput(name, options) { + const val = process.env[`INPUT_${name.replace(/ /g, "_").toUpperCase()}`] || ""; + if (options && options.required && !val) { + throw new Error(`Input required and not supplied: ${name}`); + } + if (options && options.trimWhitespace === false) { + return val; + } + return val.trim(); +} +function getMultilineInput(name, options) { + const inputs = getInput(name, options).split("\n").filter((x) => x !== ""); + if (options && options.trimWhitespace === false) { + return inputs; + } + return inputs.map((input) => input.trim()); +} +function getBooleanInput(name, options) { + const trueValue = ["true", "True", "TRUE"]; + const falseValue = ["false", "False", "FALSE"]; + const val = getInput(name, options); + if (trueValue.includes(val)) + return true; + if (falseValue.includes(val)) + return false; + throw new TypeError(`Input does not meet YAML 1.2 "Core Schema" specification: ${name} +Support boolean input list: \`true | True | TRUE | false | False | FALSE\``); +} +function setOutput(name, value) { + const filePath = process.env["GITHUB_OUTPUT"] || ""; + if (filePath) { + return issueFileCommand("OUTPUT", prepareKeyValueMessage(name, value)); + } + process.stdout.write(os5.EOL); + issueCommand("set-output", { name }, toCommandValue(value)); +} +function setCommandEcho(enabled) { + issue("echo", enabled ? "on" : "off"); +} +function setFailed(message) { + process.exitCode = ExitCode.Failure; + error(message); +} +function isDebug() { + return process.env["RUNNER_DEBUG"] === "1"; +} +function debug(message) { + issueCommand("debug", {}, message); +} +function error(message, properties = {}) { + issueCommand("error", toCommandProperties(properties), message instanceof Error ? message.toString() : message); +} +function warning(message, properties = {}) { + issueCommand("warning", toCommandProperties(properties), message instanceof Error ? message.toString() : message); +} +function notice(message, properties = {}) { + issueCommand("notice", toCommandProperties(properties), message instanceof Error ? message.toString() : message); +} +function info(message) { + process.stdout.write(message + os5.EOL); +} +function startGroup(name) { + issue("group", name); +} +function endGroup() { + issue("endgroup"); +} +function group(name, fn) { + return __awaiter10(this, void 0, void 0, function* () { + startGroup(name); + let result; + try { + result = yield fn(); + } finally { + endGroup(); + } + return result; + }); +} +function saveState(name, value) { + const filePath = process.env["GITHUB_STATE"] || ""; + if (filePath) { + return issueFileCommand("STATE", prepareKeyValueMessage(name, value)); + } + issueCommand("save-state", { name }, toCommandValue(value)); +} +function getState(name) { + return process.env[`STATE_${name}`] || ""; +} +function getIDToken(aud) { + return __awaiter10(this, void 0, void 0, function* () { + return yield OidcClient.getIDToken(aud); + }); +} + +// +import { readFileSync, existsSync as existsSync2 } from "fs"; +import { EOL as EOL6 } from "os"; +var Context = class { + /** + * Hydrate the context from the environment + */ + constructor() { + var _a2, _b, _c; + this.payload = {}; + if (process.env.GITHUB_EVENT_PATH) { + if (existsSync2(process.env.GITHUB_EVENT_PATH)) { + this.payload = JSON.parse(readFileSync(process.env.GITHUB_EVENT_PATH, { encoding: "utf8" })); + } else { + const path6 = process.env.GITHUB_EVENT_PATH; + process.stdout.write(`GITHUB_EVENT_PATH ${path6} does not exist${EOL6}`); + } + } + this.eventName = process.env.GITHUB_EVENT_NAME; + this.sha = process.env.GITHUB_SHA; + this.ref = process.env.GITHUB_REF; + this.workflow = process.env.GITHUB_WORKFLOW; + this.action = process.env.GITHUB_ACTION; + this.actor = process.env.GITHUB_ACTOR; + this.job = process.env.GITHUB_JOB; + this.runAttempt = parseInt(process.env.GITHUB_RUN_ATTEMPT, 10); + this.runNumber = parseInt(process.env.GITHUB_RUN_NUMBER, 10); + this.runId = parseInt(process.env.GITHUB_RUN_ID, 10); + this.apiUrl = (_a2 = process.env.GITHUB_API_URL) !== null && _a2 !== void 0 ? _a2 : `https://api.github.com`; + this.serverUrl = (_b = process.env.GITHUB_SERVER_URL) !== null && _b !== void 0 ? _b : `https://github.com`; + this.graphqlUrl = (_c = process.env.GITHUB_GRAPHQL_URL) !== null && _c !== void 0 ? _c : `https://api.github.com/graphql`; + } + get issue() { + const payload = this.payload; + return Object.assign(Object.assign({}, this.repo), { number: (payload.issue || payload.pull_request || payload).number }); + } + get repo() { + if (process.env.GITHUB_REPOSITORY) { + const [owner, repo] = process.env.GITHUB_REPOSITORY.split("/"); + return { owner, repo }; + } + if (this.payload.repository) { + return { + owner: this.payload.repository.owner.login, + repo: this.payload.repository.name + }; + } + throw new Error("context.repo requires a GITHUB_REPOSITORY environment variable like 'owner/repo'"); + } +}; + +// +var httpClient = __toESM(require_lib()); +var import_undici2 = __toESM(require_undici()); +var __awaiter11 = function(thisArg, _arguments, P, generator) { + function adopt(value) { + return value instanceof P ? value : new P(function(resolve2) { + resolve2(value); + }); + } + return new (P || (P = Promise))(function(resolve2, 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 ? resolve2(result.value) : adopt(result.value).then(fulfilled, rejected); + } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +function getProxyAgent(destinationUrl) { + const hc = new httpClient.HttpClient(); + return hc.getAgent(destinationUrl); +} +function getProxyAgentDispatcher(destinationUrl) { + const hc = new httpClient.HttpClient(); + return hc.getAgentDispatcher(destinationUrl); +} +function getProxyFetch(destinationUrl) { + const httpDispatcher = getProxyAgentDispatcher(destinationUrl); + const proxyFetch = (url, opts) => __awaiter11(this, void 0, void 0, function* () { + return (0, import_undici2.fetch)(url, Object.assign(Object.assign({}, opts), { dispatcher: httpDispatcher })); + }); + return proxyFetch; +} +function getApiBaseUrl() { + return process.env["GITHUB_API_URL"] || "https://api.github.com"; +} + +// +function getUserAgent() { + if (typeof navigator === "object" && "userAgent" in navigator) { + return navigator.userAgent; + } + if (typeof process === "object" && process.version !== void 0) { + return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`; + } + return ""; +} + +// +function register(state, name, method, options) { + if (typeof method !== "function") { + throw new Error("method for before hook must be a function"); + } + if (!options) { + options = {}; + } + if (Array.isArray(name)) { + return name.reverse().reduce((callback, name2) => { + return register.bind(null, state, name2, callback, options); + }, method)(); + } + return Promise.resolve().then(() => { + if (!state.registry[name]) { + return method(options); + } + return state.registry[name].reduce((method2, registered) => { + return registered.hook.bind(null, method2, options); + }, method)(); + }); +} + +// +function addHook(state, kind, name, hook6) { + const orig = hook6; + if (!state.registry[name]) { + state.registry[name] = []; + } + if (kind === "before") { + hook6 = (method, options) => { + return Promise.resolve().then(orig.bind(null, options)).then(method.bind(null, options)); + }; + } + if (kind === "after") { + hook6 = (method, options) => { + let result; + return Promise.resolve().then(method.bind(null, options)).then((result_) => { + result = result_; + return orig(result, options); + }).then(() => { + return result; + }); + }; + } + if (kind === "error") { + hook6 = (method, options) => { + return Promise.resolve().then(method.bind(null, options)).catch((error2) => { + return orig(error2, options); + }); + }; + } + state.registry[name].push({ + hook: hook6, + orig + }); +} + +// +function removeHook(state, name, method) { + if (!state.registry[name]) { + return; + } + const index = state.registry[name].map((registered) => { + return registered.orig; + }).indexOf(method); + if (index === -1) { + return; + } + state.registry[name].splice(index, 1); +} + +// +var bind = Function.bind; +var bindable = bind.bind(bind); +function bindApi(hook6, state, name) { + const removeHookRef = bindable(removeHook, null).apply( + null, + name ? [state, name] : [state] + ); + hook6.api = { remove: removeHookRef }; + hook6.remove = removeHookRef; + ["before", "error", "after", "wrap"].forEach((kind) => { + const args = name ? [state, kind, name] : [state, kind]; + hook6[kind] = hook6.api[kind] = bindable(addHook, null).apply(null, args); + }); +} +function Singular() { + const singularHookName = Symbol("Singular"); + const singularHookState = { + registry: {} + }; + const singularHook = register.bind(null, singularHookState, singularHookName); + bindApi(singularHook, singularHookState, singularHookName); + return singularHook; +} +function Collection() { + const state = { + registry: {} + }; + const hook6 = register.bind(null, state); + bindApi(hook6, state); + return hook6; +} +var before_after_hook_default = { Singular, Collection }; + +// +var VERSION = "0.0.0-development"; +var userAgent = `octokit-endpoint.js/${VERSION} ${getUserAgent()}`; +var DEFAULTS = { + method: "GET", + baseUrl: "https://api.github.com", + headers: { + accept: "application/vnd.github.v3+json", + "user-agent": userAgent + }, + mediaType: { + format: "" + } +}; +function lowercaseKeys2(object) { + if (!object) { + return {}; + } + return Object.keys(object).reduce((newObj, key) => { + newObj[key.toLowerCase()] = object[key]; + return newObj; + }, {}); +} +function isPlainObject(value) { + if (typeof value !== "object" || value === null) + return false; + if (Object.prototype.toString.call(value) !== "[object Object]") + return false; + const proto = Object.getPrototypeOf(value); + if (proto === null) + return true; + const Ctor = Object.prototype.hasOwnProperty.call(proto, "constructor") && proto.constructor; + return typeof Ctor === "function" && Ctor instanceof Ctor && Function.prototype.call(Ctor) === Function.prototype.call(value); +} +function mergeDeep(defaults2, options) { + const result = Object.assign({}, defaults2); + Object.keys(options).forEach((key) => { + if (isPlainObject(options[key])) { + if (!(key in defaults2)) + Object.assign(result, { [key]: options[key] }); + else + result[key] = mergeDeep(defaults2[key], options[key]); + } else { + Object.assign(result, { [key]: options[key] }); + } + }); + return result; +} +function removeUndefinedProperties(obj) { + for (const key in obj) { + if (obj[key] === void 0) { + delete obj[key]; + } + } + return obj; +} +function merge(defaults2, route, options) { + if (typeof route === "string") { + let [method, url] = route.split(" "); + options = Object.assign(url ? { method, url } : { url: method }, options); + } else { + options = Object.assign({}, route); + } + options.headers = lowercaseKeys2(options.headers); + removeUndefinedProperties(options); + removeUndefinedProperties(options.headers); + const mergedOptions = mergeDeep(defaults2 || {}, options); + if (options.url === "/graphql") { + if (defaults2 && defaults2.mediaType.previews?.length) { + mergedOptions.mediaType.previews = defaults2.mediaType.previews.filter( + (preview) => !mergedOptions.mediaType.previews.includes(preview) + ).concat(mergedOptions.mediaType.previews); + } + mergedOptions.mediaType.previews = (mergedOptions.mediaType.previews || []).map((preview) => preview.replace(/-preview/, "")); + } + return mergedOptions; +} +function addQueryParameters(url, parameters) { + const separator = /\?/.test(url) ? "&" : "?"; + const names = Object.keys(parameters); + if (names.length === 0) { + return url; + } + return url + separator + names.map((name) => { + if (name === "q") { + return "q=" + parameters.q.split("+").map(encodeURIComponent).join("+"); + } + return `${name}=${encodeURIComponent(parameters[name])}`; + }).join("&"); +} +var urlVariableRegex = /\{[^{}}]+\}/g; +function removeNonChars(variableName) { + return variableName.replace(/(?:^\W+)|(?:(? a.concat(b), []); +} +function omit(object, keysToOmit) { + const result = { __proto__: null }; + for (const key of Object.keys(object)) { + if (keysToOmit.indexOf(key) === -1) { + result[key] = object[key]; + } + } + return result; +} +function encodeReserved(str) { + return str.split(/(%[0-9A-Fa-f]{2})/g).map(function(part) { + if (!/%[0-9A-Fa-f]/.test(part)) { + part = encodeURI(part).replace(/%5B/g, "[").replace(/%5D/g, "]"); + } + return part; + }).join(""); +} +function encodeUnreserved(str) { + return encodeURIComponent(str).replace(/[!'()*]/g, function(c) { + return "%" + c.charCodeAt(0).toString(16).toUpperCase(); + }); +} +function encodeValue(operator, value, key) { + value = operator === "+" || operator === "#" ? encodeReserved(value) : encodeUnreserved(value); + if (key) { + return encodeUnreserved(key) + "=" + value; + } else { + return value; + } +} +function isDefined(value) { + return value !== void 0 && value !== null; +} +function isKeyOperator(operator) { + return operator === ";" || operator === "&" || operator === "?"; +} +function getValues(context3, operator, key, modifier) { + var value = context3[key], result = []; + if (isDefined(value) && value !== "") { + if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") { + value = value.toString(); + if (modifier && modifier !== "*") { + value = value.substring(0, parseInt(modifier, 10)); + } + result.push( + encodeValue(operator, value, isKeyOperator(operator) ? key : "") + ); + } else { + if (modifier === "*") { + if (Array.isArray(value)) { + value.filter(isDefined).forEach(function(value2) { + result.push( + encodeValue(operator, value2, isKeyOperator(operator) ? key : "") + ); + }); + } else { + Object.keys(value).forEach(function(k) { + if (isDefined(value[k])) { + result.push(encodeValue(operator, value[k], k)); + } + }); + } + } else { + const tmp = []; + if (Array.isArray(value)) { + value.filter(isDefined).forEach(function(value2) { + tmp.push(encodeValue(operator, value2)); + }); + } else { + Object.keys(value).forEach(function(k) { + if (isDefined(value[k])) { + tmp.push(encodeUnreserved(k)); + tmp.push(encodeValue(operator, value[k].toString())); + } + }); + } + if (isKeyOperator(operator)) { + result.push(encodeUnreserved(key) + "=" + tmp.join(",")); + } else if (tmp.length !== 0) { + result.push(tmp.join(",")); + } + } + } + } else { + if (operator === ";") { + if (isDefined(value)) { + result.push(encodeUnreserved(key)); + } + } else if (value === "" && (operator === "&" || operator === "?")) { + result.push(encodeUnreserved(key) + "="); + } else if (value === "") { + result.push(""); + } + } + return result; +} +function parseUrl(template) { + return { + expand: expand.bind(null, template) + }; +} +function expand(template, context3) { + var operators = ["+", "#", ".", "/", ";", "?", "&"]; + template = template.replace( + /\{([^\{\}]+)\}|([^\{\}]+)/g, + function(_, expression, literal) { + if (expression) { + let operator = ""; + const values = []; + if (operators.indexOf(expression.charAt(0)) !== -1) { + operator = expression.charAt(0); + expression = expression.substr(1); + } + expression.split(/,/g).forEach(function(variable) { + var tmp = /([^:\*]*)(?::(\d+)|(\*))?/.exec(variable); + values.push(getValues(context3, operator, tmp[1], tmp[2] || tmp[3])); + }); + if (operator && operator !== "+") { + var separator = ","; + if (operator === "?") { + separator = "&"; + } else if (operator !== "#") { + separator = operator; + } + return (values.length !== 0 ? operator : "") + values.join(separator); + } else { + return values.join(","); + } + } else { + return encodeReserved(literal); + } + } + ); + if (template === "/") { + return template; + } else { + return template.replace(/\/$/, ""); + } +} +function parse(options) { + let method = options.method.toUpperCase(); + let url = (options.url || "/").replace(/:([a-z]\w+)/g, "{$1}"); + let headers = Object.assign({}, options.headers); + let body; + let parameters = omit(options, [ + "method", + "baseUrl", + "url", + "headers", + "request", + "mediaType" + ]); + const urlVariableNames = extractUrlVariableNames(url); + url = parseUrl(url).expand(parameters); + if (!/^http/.test(url)) { + url = options.baseUrl + url; + } + const omittedParameters = Object.keys(options).filter((option) => urlVariableNames.includes(option)).concat("baseUrl"); + const remainingParameters = omit(parameters, omittedParameters); + const isBinaryRequest = /application\/octet-stream/i.test(headers.accept); + if (!isBinaryRequest) { + if (options.mediaType.format) { + headers.accept = headers.accept.split(/,/).map( + (format) => format.replace( + /application\/vnd(\.\w+)(\.v3)?(\.\w+)?(\+json)?$/, + `application/vnd$1$2.${options.mediaType.format}` + ) + ).join(","); + } + if (url.endsWith("/graphql")) { + if (options.mediaType.previews?.length) { + const previewsFromAcceptHeader = headers.accept.match(/(? { + const format = options.mediaType.format ? `.${options.mediaType.format}` : "+json"; + return `application/vnd.github.${preview}-preview${format}`; + }).join(","); + } + } + } + if (["GET", "HEAD"].includes(method)) { + url = addQueryParameters(url, remainingParameters); + } else { + if ("data" in remainingParameters) { + body = remainingParameters.data; + } else { + if (Object.keys(remainingParameters).length) { + body = remainingParameters; + } + } + } + if (!headers["content-type"] && typeof body !== "undefined") { + headers["content-type"] = "application/json; charset=utf-8"; + } + if (["PATCH", "PUT"].includes(method) && typeof body === "undefined") { + body = ""; + } + return Object.assign( + { method, url, headers }, + typeof body !== "undefined" ? { body } : null, + options.request ? { request: options.request } : null + ); +} +function endpointWithDefaults(defaults2, route, options) { + return parse(merge(defaults2, route, options)); +} +function withDefaults(oldDefaults, newDefaults) { + const DEFAULTS2 = merge(oldDefaults, newDefaults); + const endpoint2 = endpointWithDefaults.bind(null, DEFAULTS2); + return Object.assign(endpoint2, { + DEFAULTS: DEFAULTS2, + defaults: withDefaults.bind(null, DEFAULTS2), + merge: merge.bind(null, DEFAULTS2), + parse + }); +} +var endpoint = withDefaults(null, DEFAULTS); + +// +var import_fast_content_type_parse = __toESM(require_fast_content_type_parse()); + +// +var RequestError = class extends Error { + name; + /** + * http status code + */ + status; + /** + * Request options that lead to the error. + */ + request; + /** + * Response object if a response was received + */ + response; + constructor(message, statusCode, options) { + super(message, { cause: options.cause }); + this.name = "HttpError"; + this.status = Number.parseInt(statusCode); + if (Number.isNaN(this.status)) { + this.status = 0; + } + if ("response" in options) { + this.response = options.response; + } + const requestCopy = Object.assign({}, options.request); + if (options.request.headers.authorization) { + requestCopy.headers = Object.assign({}, options.request.headers, { + authorization: options.request.headers.authorization.replace( + /(? ""; +async function fetchWrapper(requestOptions) { + const fetch3 = requestOptions.request?.fetch || globalThis.fetch; + if (!fetch3) { + throw new Error( + "fetch is not set. Please pass a fetch implementation as new Octokit({ request: { fetch }}). Learn more at https://github.com/octokit/octokit.js/#fetch-missing" + ); + } + const log = requestOptions.request?.log || console; + const parseSuccessResponseBody = requestOptions.request?.parseSuccessResponseBody !== false; + const body = isPlainObject2(requestOptions.body) || Array.isArray(requestOptions.body) ? JSON.stringify(requestOptions.body) : requestOptions.body; + const requestHeaders = Object.fromEntries( + Object.entries(requestOptions.headers).map(([name, value]) => [ + name, + String(value) + ]) + ); + let fetchResponse; + try { + fetchResponse = await fetch3(requestOptions.url, { + method: requestOptions.method, + body, + redirect: requestOptions.request?.redirect, + headers: requestHeaders, + signal: requestOptions.request?.signal, + // duplex must be set if request.body is ReadableStream or Async Iterables. + // See https://fetch.spec.whatwg.org/#dom-requestinit-duplex. + ...requestOptions.body && { duplex: "half" } + }); + } catch (error2) { + let message = "Unknown Error"; + if (error2 instanceof Error) { + if (error2.name === "AbortError") { + error2.status = 500; + throw error2; + } + message = error2.message; + if (error2.name === "TypeError" && "cause" in error2) { + if (error2.cause instanceof Error) { + message = error2.cause.message; + } else if (typeof error2.cause === "string") { + message = error2.cause; + } + } + } + const requestError = new RequestError(message, 500, { + request: requestOptions + }); + requestError.cause = error2; + throw requestError; + } + const status = fetchResponse.status; + const url = fetchResponse.url; + const responseHeaders = {}; + for (const [key, value] of fetchResponse.headers) { + responseHeaders[key] = value; + } + const octokitResponse = { + url, + status, + headers: responseHeaders, + data: "" + }; + if ("deprecation" in responseHeaders) { + const matches = responseHeaders.link && responseHeaders.link.match(/<([^<>]+)>; rel="deprecation"/); + const deprecationLink = matches && matches.pop(); + log.warn( + `[@octokit/request] "${requestOptions.method} ${requestOptions.url}" is deprecated. It is scheduled to be removed on ${responseHeaders.sunset}${deprecationLink ? `. See ${deprecationLink}` : ""}` + ); + } + if (status === 204 || status === 205) { + return octokitResponse; + } + if (requestOptions.method === "HEAD") { + if (status < 400) { + return octokitResponse; + } + throw new RequestError(fetchResponse.statusText, status, { + response: octokitResponse, + request: requestOptions + }); + } + if (status === 304) { + octokitResponse.data = await getResponseData(fetchResponse); + throw new RequestError("Not modified", status, { + response: octokitResponse, + request: requestOptions + }); + } + if (status >= 400) { + octokitResponse.data = await getResponseData(fetchResponse); + throw new RequestError(toErrorMessage(octokitResponse.data), status, { + response: octokitResponse, + request: requestOptions + }); + } + octokitResponse.data = parseSuccessResponseBody ? await getResponseData(fetchResponse) : fetchResponse.body; + return octokitResponse; +} +async function getResponseData(response) { + const contentType = response.headers.get("content-type"); + if (!contentType) { + return response.text().catch(noop); + } + const mimetype = (0, import_fast_content_type_parse.safeParse)(contentType); + if (isJSONResponse(mimetype)) { + let text = ""; + try { + text = await response.text(); + return JSON.parse(text); + } catch (err) { + return text; + } + } else if (mimetype.type.startsWith("text/") || mimetype.parameters.charset?.toLowerCase() === "utf-8") { + return response.text().catch(noop); + } else { + return response.arrayBuffer().catch( + /* v8 ignore next -- @preserve */ + () => new ArrayBuffer(0) + ); + } +} +function isJSONResponse(mimetype) { + return mimetype.type === "application/json" || mimetype.type === "application/scim+json"; +} +function toErrorMessage(data) { + if (typeof data === "string") { + return data; + } + if (data instanceof ArrayBuffer) { + return "Unknown error"; + } + if ("message" in data) { + const suffix = "documentation_url" in data ? ` - ${data.documentation_url}` : ""; + return Array.isArray(data.errors) ? `${data.message}: ${data.errors.map((v) => JSON.stringify(v)).join(", ")}${suffix}` : `${data.message}${suffix}`; + } + return `Unknown error: ${JSON.stringify(data)}`; +} +function withDefaults2(oldEndpoint, newDefaults) { + const endpoint2 = oldEndpoint.defaults(newDefaults); + const newApi = function(route, parameters) { + const endpointOptions = endpoint2.merge(route, parameters); + if (!endpointOptions.request || !endpointOptions.request.hook) { + return fetchWrapper(endpoint2.parse(endpointOptions)); + } + const request2 = (route2, parameters2) => { + return fetchWrapper( + endpoint2.parse(endpoint2.merge(route2, parameters2)) + ); + }; + Object.assign(request2, { + endpoint: endpoint2, + defaults: withDefaults2.bind(null, endpoint2) + }); + return endpointOptions.request.hook(request2, endpointOptions); + }; + return Object.assign(newApi, { + endpoint: endpoint2, + defaults: withDefaults2.bind(null, endpoint2) + }); +} +var request = withDefaults2(endpoint, defaults_default); + +// +var VERSION3 = "0.0.0-development"; +function _buildMessageForResponseErrors(data) { + return `Request failed due to following response errors: +` + data.errors.map((e) => ` - ${e.message}`).join("\n"); +} +var GraphqlResponseError = class extends Error { + constructor(request2, headers, response) { + super(_buildMessageForResponseErrors(response)); + this.request = request2; + this.headers = headers; + this.response = response; + this.errors = response.errors; + this.data = response.data; + if (Error.captureStackTrace) { + Error.captureStackTrace(this, this.constructor); + } + } + name = "GraphqlResponseError"; + errors; + data; +}; +var NON_VARIABLE_OPTIONS = [ + "method", + "baseUrl", + "url", + "headers", + "request", + "query", + "mediaType", + "operationName" +]; +var FORBIDDEN_VARIABLE_OPTIONS = ["query", "method", "url"]; +var GHES_V3_SUFFIX_REGEX = /\/api\/v3\/?$/; +function graphql(request2, query, options) { + if (options) { + if (typeof query === "string" && "query" in options) { + return Promise.reject( + new Error(`[@octokit/graphql] "query" cannot be used as variable name`) + ); + } + for (const key in options) { + if (!FORBIDDEN_VARIABLE_OPTIONS.includes(key)) + continue; + return Promise.reject( + new Error( + `[@octokit/graphql] "${key}" cannot be used as variable name` + ) + ); + } + } + const parsedOptions = typeof query === "string" ? Object.assign({ query }, options) : query; + const requestOptions = Object.keys( + parsedOptions + ).reduce((result, key) => { + if (NON_VARIABLE_OPTIONS.includes(key)) { + result[key] = parsedOptions[key]; + return result; + } + if (!result.variables) { + result.variables = {}; + } + result.variables[key] = parsedOptions[key]; + return result; + }, {}); + const baseUrl2 = parsedOptions.baseUrl || request2.endpoint.DEFAULTS.baseUrl; + if (GHES_V3_SUFFIX_REGEX.test(baseUrl2)) { + requestOptions.url = baseUrl2.replace(GHES_V3_SUFFIX_REGEX, "/api/graphql"); + } + return request2(requestOptions).then((response) => { + if (response.data.errors) { + const headers = {}; + for (const key of Object.keys(response.headers)) { + headers[key] = response.headers[key]; + } + throw new GraphqlResponseError( + requestOptions, + headers, + response.data + ); + } + return response.data.data; + }); +} +function withDefaults3(request2, newDefaults) { + const newRequest = request2.defaults(newDefaults); + const newApi = (query, options) => { + return graphql(newRequest, query, options); + }; + return Object.assign(newApi, { + defaults: withDefaults3.bind(null, newRequest), + endpoint: newRequest.endpoint + }); +} +var graphql2 = withDefaults3(request, { + headers: { + "user-agent": `octokit-graphql.js/${VERSION3} ${getUserAgent()}` + }, + method: "POST", + url: "/graphql" +}); +function withCustomRequest(customRequest) { + return withDefaults3(customRequest, { + method: "POST", + url: "/graphql" + }); +} + +// +var b64url = "(?:[a-zA-Z0-9_-]+)"; +var sep3 = "\\."; +var jwtRE = new RegExp(`^${b64url}${sep3}${b64url}${sep3}${b64url}$`); +var isJWT = jwtRE.test.bind(jwtRE); +async function auth(token) { + const isApp = isJWT(token); + const isInstallation = token.startsWith("v1.") || token.startsWith("ghs_"); + const isUserToServer = token.startsWith("ghu_"); + const tokenType = isApp ? "app" : isInstallation ? "installation" : isUserToServer ? "user-to-server" : "oauth"; + return { + type: "token", + token, + tokenType + }; +} +function withAuthorizationPrefix(token) { + if (token.split(/\./).length === 3) { + return `bearer ${token}`; + } + return `token ${token}`; +} +async function hook(token, request2, route, parameters) { + const endpoint2 = request2.endpoint.merge( + route, + parameters + ); + endpoint2.headers.authorization = withAuthorizationPrefix(token); + return request2(endpoint2); +} +var createTokenAuth = function createTokenAuth2(token) { + if (!token) { + throw new Error("[@octokit/auth-token] No token passed to createTokenAuth"); + } + if (typeof token !== "string") { + throw new Error( + "[@octokit/auth-token] Token passed to createTokenAuth is not a string" + ); + } + token = token.replace(/^(token|bearer) +/i, ""); + return Object.assign(auth.bind(null, token), { + hook: hook.bind(null, token) + }); +}; + +// +var VERSION4 = "7.0.6"; + +// +var noop2 = () => { +}; +var consoleWarn = console.warn.bind(console); +var consoleError = console.error.bind(console); +function createLogger(logger = {}) { + if (typeof logger.debug !== "function") { + logger.debug = noop2; + } + if (typeof logger.info !== "function") { + logger.info = noop2; + } + if (typeof logger.warn !== "function") { + logger.warn = consoleWarn; + } + if (typeof logger.error !== "function") { + logger.error = consoleError; + } + return logger; +} +var userAgentTrail = `octokit-core.js/${VERSION4} ${getUserAgent()}`; +var Octokit = class { + static VERSION = VERSION4; + static defaults(defaults2) { + const OctokitWithDefaults = class extends this { + constructor(...args) { + const options = args[0] || {}; + if (typeof defaults2 === "function") { + super(defaults2(options)); + return; + } + super( + Object.assign( + {}, + defaults2, + options, + options.userAgent && defaults2.userAgent ? { + userAgent: `${options.userAgent} ${defaults2.userAgent}` + } : null + ) + ); + } + }; + return OctokitWithDefaults; + } + static plugins = []; + /** + * Attach a plugin (or many) to your Octokit instance. + * + * @example + * const API = Octokit.plugin(plugin1, plugin2, plugin3, ...) + */ + static plugin(...newPlugins) { + const currentPlugins = this.plugins; + const NewOctokit = class extends this { + static plugins = currentPlugins.concat( + newPlugins.filter((plugin) => !currentPlugins.includes(plugin)) + ); + }; + return NewOctokit; + } + constructor(options = {}) { + const hook6 = new before_after_hook_default.Collection(); + const requestDefaults = { + baseUrl: request.endpoint.DEFAULTS.baseUrl, + headers: {}, + request: Object.assign({}, options.request, { + // @ts-ignore internal usage only, no need to type + hook: hook6.bind(null, "request") + }), + mediaType: { + previews: [], + format: "" + } + }; + requestDefaults.headers["user-agent"] = options.userAgent ? `${options.userAgent} ${userAgentTrail}` : userAgentTrail; + if (options.baseUrl) { + requestDefaults.baseUrl = options.baseUrl; + } + if (options.previews) { + requestDefaults.mediaType.previews = options.previews; + } + if (options.timeZone) { + requestDefaults.headers["time-zone"] = options.timeZone; + } + this.request = request.defaults(requestDefaults); + this.graphql = withCustomRequest(this.request).defaults(requestDefaults); + this.log = createLogger(options.log); + this.hook = hook6; + if (!options.authStrategy) { + if (!options.auth) { + this.auth = async () => ({ + type: "unauthenticated" + }); + } else { + const auth6 = createTokenAuth(options.auth); + hook6.wrap("request", auth6.hook); + this.auth = auth6; + } + } else { + const { authStrategy, ...otherOptions } = options; + const auth6 = authStrategy( + Object.assign( + { + request: this.request, + log: this.log, + // we pass the current octokit instance as well as its constructor options + // to allow for authentication strategies that return a new octokit instance + // that shares the same internal state as the current one. The original + // requirement for this was the "event-octokit" authentication strategy + // of https://github.com/probot/octokit-auth-probot. + octokit: this, + octokitOptions: otherOptions + }, + options.auth + ) + ); + hook6.wrap("request", auth6.hook); + this.auth = auth6; + } + const classConstructor = this.constructor; + for (let i = 0; i < classConstructor.plugins.length; ++i) { + Object.assign(this, classConstructor.plugins[i](this, options)); + } + } + // assigned during constructor + request; + graphql; + log; + hook; + // TODO: type `octokit.auth` based on passed options.authStrategy + auth; +}; + +// +var VERSION5 = "17.0.0"; + +// +var Endpoints = { + actions: { + addCustomLabelsToSelfHostedRunnerForOrg: [ + "POST /orgs/{org}/actions/runners/{runner_id}/labels" + ], + addCustomLabelsToSelfHostedRunnerForRepo: [ + "POST /repos/{owner}/{repo}/actions/runners/{runner_id}/labels" + ], + addRepoAccessToSelfHostedRunnerGroupInOrg: [ + "PUT /orgs/{org}/actions/runner-groups/{runner_group_id}/repositories/{repository_id}" + ], + addSelectedRepoToOrgSecret: [ + "PUT /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}" + ], + addSelectedRepoToOrgVariable: [ + "PUT /orgs/{org}/actions/variables/{name}/repositories/{repository_id}" + ], + approveWorkflowRun: [ + "POST /repos/{owner}/{repo}/actions/runs/{run_id}/approve" + ], + cancelWorkflowRun: [ + "POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel" + ], + createEnvironmentVariable: [ + "POST /repos/{owner}/{repo}/environments/{environment_name}/variables" + ], + createHostedRunnerForOrg: ["POST /orgs/{org}/actions/hosted-runners"], + createOrUpdateEnvironmentSecret: [ + "PUT /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name}" + ], + createOrUpdateOrgSecret: ["PUT /orgs/{org}/actions/secrets/{secret_name}"], + createOrUpdateRepoSecret: [ + "PUT /repos/{owner}/{repo}/actions/secrets/{secret_name}" + ], + createOrgVariable: ["POST /orgs/{org}/actions/variables"], + createRegistrationTokenForOrg: [ + "POST /orgs/{org}/actions/runners/registration-token" + ], + createRegistrationTokenForRepo: [ + "POST /repos/{owner}/{repo}/actions/runners/registration-token" + ], + createRemoveTokenForOrg: ["POST /orgs/{org}/actions/runners/remove-token"], + createRemoveTokenForRepo: [ + "POST /repos/{owner}/{repo}/actions/runners/remove-token" + ], + createRepoVariable: ["POST /repos/{owner}/{repo}/actions/variables"], + createWorkflowDispatch: [ + "POST /repos/{owner}/{repo}/actions/workflows/{workflow_id}/dispatches" + ], + deleteActionsCacheById: [ + "DELETE /repos/{owner}/{repo}/actions/caches/{cache_id}" + ], + deleteActionsCacheByKey: [ + "DELETE /repos/{owner}/{repo}/actions/caches{?key,ref}" + ], + deleteArtifact: [ + "DELETE /repos/{owner}/{repo}/actions/artifacts/{artifact_id}" + ], + deleteCustomImageFromOrg: [ + "DELETE /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}" + ], + deleteCustomImageVersionFromOrg: [ + "DELETE /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}/versions/{version}" + ], + deleteEnvironmentSecret: [ + "DELETE /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name}" + ], + deleteEnvironmentVariable: [ + "DELETE /repos/{owner}/{repo}/environments/{environment_name}/variables/{name}" + ], + deleteHostedRunnerForOrg: [ + "DELETE /orgs/{org}/actions/hosted-runners/{hosted_runner_id}" + ], + deleteOrgSecret: ["DELETE /orgs/{org}/actions/secrets/{secret_name}"], + deleteOrgVariable: ["DELETE /orgs/{org}/actions/variables/{name}"], + deleteRepoSecret: [ + "DELETE /repos/{owner}/{repo}/actions/secrets/{secret_name}" + ], + deleteRepoVariable: [ + "DELETE /repos/{owner}/{repo}/actions/variables/{name}" + ], + deleteSelfHostedRunnerFromOrg: [ + "DELETE /orgs/{org}/actions/runners/{runner_id}" + ], + deleteSelfHostedRunnerFromRepo: [ + "DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}" + ], + deleteWorkflowRun: ["DELETE /repos/{owner}/{repo}/actions/runs/{run_id}"], + deleteWorkflowRunLogs: [ + "DELETE /repos/{owner}/{repo}/actions/runs/{run_id}/logs" + ], + disableSelectedRepositoryGithubActionsOrganization: [ + "DELETE /orgs/{org}/actions/permissions/repositories/{repository_id}" + ], + disableWorkflow: [ + "PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/disable" + ], + downloadArtifact: [ + "GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}/{archive_format}" + ], + downloadJobLogsForWorkflowRun: [ + "GET /repos/{owner}/{repo}/actions/jobs/{job_id}/logs" + ], + downloadWorkflowRunAttemptLogs: [ + "GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/logs" + ], + downloadWorkflowRunLogs: [ + "GET /repos/{owner}/{repo}/actions/runs/{run_id}/logs" + ], + enableSelectedRepositoryGithubActionsOrganization: [ + "PUT /orgs/{org}/actions/permissions/repositories/{repository_id}" + ], + enableWorkflow: [ + "PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/enable" + ], + forceCancelWorkflowRun: [ + "POST /repos/{owner}/{repo}/actions/runs/{run_id}/force-cancel" + ], + generateRunnerJitconfigForOrg: [ + "POST /orgs/{org}/actions/runners/generate-jitconfig" + ], + generateRunnerJitconfigForRepo: [ + "POST /repos/{owner}/{repo}/actions/runners/generate-jitconfig" + ], + getActionsCacheList: ["GET /repos/{owner}/{repo}/actions/caches"], + getActionsCacheUsage: ["GET /repos/{owner}/{repo}/actions/cache/usage"], + getActionsCacheUsageByRepoForOrg: [ + "GET /orgs/{org}/actions/cache/usage-by-repository" + ], + getActionsCacheUsageForOrg: ["GET /orgs/{org}/actions/cache/usage"], + getAllowedActionsOrganization: [ + "GET /orgs/{org}/actions/permissions/selected-actions" + ], + getAllowedActionsRepository: [ + "GET /repos/{owner}/{repo}/actions/permissions/selected-actions" + ], + getArtifact: ["GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}"], + getCustomImageForOrg: [ + "GET /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}" + ], + getCustomImageVersionForOrg: [ + "GET /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}/versions/{version}" + ], + getCustomOidcSubClaimForRepo: [ + "GET /repos/{owner}/{repo}/actions/oidc/customization/sub" + ], + getEnvironmentPublicKey: [ + "GET /repos/{owner}/{repo}/environments/{environment_name}/secrets/public-key" + ], + getEnvironmentSecret: [ + "GET /repos/{owner}/{repo}/environments/{environment_name}/secrets/{secret_name}" + ], + getEnvironmentVariable: [ + "GET /repos/{owner}/{repo}/environments/{environment_name}/variables/{name}" + ], + getGithubActionsDefaultWorkflowPermissionsOrganization: [ + "GET /orgs/{org}/actions/permissions/workflow" + ], + getGithubActionsDefaultWorkflowPermissionsRepository: [ + "GET /repos/{owner}/{repo}/actions/permissions/workflow" + ], + getGithubActionsPermissionsOrganization: [ + "GET /orgs/{org}/actions/permissions" + ], + getGithubActionsPermissionsRepository: [ + "GET /repos/{owner}/{repo}/actions/permissions" + ], + getHostedRunnerForOrg: [ + "GET /orgs/{org}/actions/hosted-runners/{hosted_runner_id}" + ], + getHostedRunnersGithubOwnedImagesForOrg: [ + "GET /orgs/{org}/actions/hosted-runners/images/github-owned" + ], + getHostedRunnersLimitsForOrg: [ + "GET /orgs/{org}/actions/hosted-runners/limits" + ], + getHostedRunnersMachineSpecsForOrg: [ + "GET /orgs/{org}/actions/hosted-runners/machine-sizes" + ], + getHostedRunnersPartnerImagesForOrg: [ + "GET /orgs/{org}/actions/hosted-runners/images/partner" + ], + getHostedRunnersPlatformsForOrg: [ + "GET /orgs/{org}/actions/hosted-runners/platforms" + ], + getJobForWorkflowRun: ["GET /repos/{owner}/{repo}/actions/jobs/{job_id}"], + getOrgPublicKey: ["GET /orgs/{org}/actions/secrets/public-key"], + getOrgSecret: ["GET /orgs/{org}/actions/secrets/{secret_name}"], + getOrgVariable: ["GET /orgs/{org}/actions/variables/{name}"], + getPendingDeploymentsForRun: [ + "GET /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments" + ], + getRepoPermissions: [ + "GET /repos/{owner}/{repo}/actions/permissions", + {}, + { renamed: ["actions", "getGithubActionsPermissionsRepository"] } + ], + getRepoPublicKey: ["GET /repos/{owner}/{repo}/actions/secrets/public-key"], + getRepoSecret: ["GET /repos/{owner}/{repo}/actions/secrets/{secret_name}"], + getRepoVariable: ["GET /repos/{owner}/{repo}/actions/variables/{name}"], + getReviewsForRun: [ + "GET /repos/{owner}/{repo}/actions/runs/{run_id}/approvals" + ], + getSelfHostedRunnerForOrg: ["GET /orgs/{org}/actions/runners/{runner_id}"], + getSelfHostedRunnerForRepo: [ + "GET /repos/{owner}/{repo}/actions/runners/{runner_id}" + ], + getWorkflow: ["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}"], + getWorkflowAccessToRepository: [ + "GET /repos/{owner}/{repo}/actions/permissions/access" + ], + getWorkflowRun: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}"], + getWorkflowRunAttempt: [ + "GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}" + ], + getWorkflowRunUsage: [ + "GET /repos/{owner}/{repo}/actions/runs/{run_id}/timing" + ], + getWorkflowUsage: [ + "GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/timing" + ], + listArtifactsForRepo: ["GET /repos/{owner}/{repo}/actions/artifacts"], + listCustomImageVersionsForOrg: [ + "GET /orgs/{org}/actions/hosted-runners/images/custom/{image_definition_id}/versions" + ], + listCustomImagesForOrg: [ + "GET /orgs/{org}/actions/hosted-runners/images/custom" + ], + listEnvironmentSecrets: [ + "GET /repos/{owner}/{repo}/environments/{environment_name}/secrets" + ], + listEnvironmentVariables: [ + "GET /repos/{owner}/{repo}/environments/{environment_name}/variables" + ], + listGithubHostedRunnersInGroupForOrg: [ + "GET /orgs/{org}/actions/runner-groups/{runner_group_id}/hosted-runners" + ], + listHostedRunnersForOrg: ["GET /orgs/{org}/actions/hosted-runners"], + listJobsForWorkflowRun: [ + "GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs" + ], + listJobsForWorkflowRunAttempt: [ + "GET /repos/{owner}/{repo}/actions/runs/{run_id}/attempts/{attempt_number}/jobs" + ], + listLabelsForSelfHostedRunnerForOrg: [ + "GET /orgs/{org}/actions/runners/{runner_id}/labels" + ], + listLabelsForSelfHostedRunnerForRepo: [ + "GET /repos/{owner}/{repo}/actions/runners/{runner_id}/labels" + ], + listOrgSecrets: ["GET /orgs/{org}/actions/secrets"], + listOrgVariables: ["GET /orgs/{org}/actions/variables"], + listRepoOrganizationSecrets: [ + "GET /repos/{owner}/{repo}/actions/organization-secrets" + ], + listRepoOrganizationVariables: [ + "GET /repos/{owner}/{repo}/actions/organization-variables" + ], + listRepoSecrets: ["GET /repos/{owner}/{repo}/actions/secrets"], + listRepoVariables: ["GET /repos/{owner}/{repo}/actions/variables"], + listRepoWorkflows: ["GET /repos/{owner}/{repo}/actions/workflows"], + listRunnerApplicationsForOrg: ["GET /orgs/{org}/actions/runners/downloads"], + listRunnerApplicationsForRepo: [ + "GET /repos/{owner}/{repo}/actions/runners/downloads" + ], + listSelectedReposForOrgSecret: [ + "GET /orgs/{org}/actions/secrets/{secret_name}/repositories" + ], + listSelectedReposForOrgVariable: [ + "GET /orgs/{org}/actions/variables/{name}/repositories" + ], + listSelectedRepositoriesEnabledGithubActionsOrganization: [ + "GET /orgs/{org}/actions/permissions/repositories" + ], + listSelfHostedRunnersForOrg: ["GET /orgs/{org}/actions/runners"], + listSelfHostedRunnersForRepo: ["GET /repos/{owner}/{repo}/actions/runners"], + listWorkflowRunArtifacts: [ + "GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts" + ], + listWorkflowRuns: [ + "GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs" + ], + listWorkflowRunsForRepo: ["GET /repos/{owner}/{repo}/actions/runs"], + reRunJobForWorkflowRun: [ + "POST /repos/{owner}/{repo}/actions/jobs/{job_id}/rerun" + ], + reRunWorkflow: ["POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun"], + reRunWorkflowFailedJobs: [ + "POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun-failed-jobs" + ], + removeAllCustomLabelsFromSelfHostedRunnerForOrg: [ + "DELETE /orgs/{org}/actions/runners/{runner_id}/labels" + ], + removeAllCustomLabelsFromSelfHostedRunnerForRepo: [ + "DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels" + ], + removeCustomLabelFromSelfHostedRunnerForOrg: [ + "DELETE /orgs/{org}/actions/runners/{runner_id}/labels/{name}" + ], + removeCustomLabelFromSelfHostedRunnerForRepo: [ + "DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}/labels/{name}" + ], + removeSelectedRepoFromOrgSecret: [ + "DELETE /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}" + ], + removeSelectedRepoFromOrgVariable: [ + "DELETE /orgs/{org}/actions/variables/{name}/repositories/{repository_id}" + ], + reviewCustomGatesForRun: [ + "POST /repos/{owner}/{repo}/actions/runs/{run_id}/deployment_protection_rule" + ], + reviewPendingDeploymentsForRun: [ + "POST /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments" + ], + setAllowedActionsOrganization: [ + "PUT /orgs/{org}/actions/permissions/selected-actions" + ], + setAllowedActionsRepository: [ + "PUT /repos/{owner}/{repo}/actions/permissions/selected-actions" + ], + setCustomLabelsForSelfHostedRunnerForOrg: [ + "PUT /orgs/{org}/actions/runners/{runner_id}/labels" + ], + setCustomLabelsForSelfHostedRunnerForRepo: [ + "PUT /repos/{owner}/{repo}/actions/runners/{runner_id}/labels" + ], + setCustomOidcSubClaimForRepo: [ + "PUT /repos/{owner}/{repo}/actions/oidc/customization/sub" + ], + setGithubActionsDefaultWorkflowPermissionsOrganization: [ + "PUT /orgs/{org}/actions/permissions/workflow" + ], + setGithubActionsDefaultWorkflowPermissionsRepository: [ + "PUT /repos/{owner}/{repo}/actions/permissions/workflow" + ], + setGithubActionsPermissionsOrganization: [ + "PUT /orgs/{org}/actions/permissions" + ], + setGithubActionsPermissionsRepository: [ + "PUT /repos/{owner}/{repo}/actions/permissions" + ], + setSelectedReposForOrgSecret: [ + "PUT /orgs/{org}/actions/secrets/{secret_name}/repositories" + ], + setSelectedReposForOrgVariable: [ + "PUT /orgs/{org}/actions/variables/{name}/repositories" + ], + setSelectedRepositoriesEnabledGithubActionsOrganization: [ + "PUT /orgs/{org}/actions/permissions/repositories" + ], + setWorkflowAccessToRepository: [ + "PUT /repos/{owner}/{repo}/actions/permissions/access" + ], + updateEnvironmentVariable: [ + "PATCH /repos/{owner}/{repo}/environments/{environment_name}/variables/{name}" + ], + updateHostedRunnerForOrg: [ + "PATCH /orgs/{org}/actions/hosted-runners/{hosted_runner_id}" + ], + updateOrgVariable: ["PATCH /orgs/{org}/actions/variables/{name}"], + updateRepoVariable: [ + "PATCH /repos/{owner}/{repo}/actions/variables/{name}" + ] + }, + activity: { + checkRepoIsStarredByAuthenticatedUser: ["GET /user/starred/{owner}/{repo}"], + deleteRepoSubscription: ["DELETE /repos/{owner}/{repo}/subscription"], + deleteThreadSubscription: [ + "DELETE /notifications/threads/{thread_id}/subscription" + ], + getFeeds: ["GET /feeds"], + getRepoSubscription: ["GET /repos/{owner}/{repo}/subscription"], + getThread: ["GET /notifications/threads/{thread_id}"], + getThreadSubscriptionForAuthenticatedUser: [ + "GET /notifications/threads/{thread_id}/subscription" + ], + listEventsForAuthenticatedUser: ["GET /users/{username}/events"], + listNotificationsForAuthenticatedUser: ["GET /notifications"], + listOrgEventsForAuthenticatedUser: [ + "GET /users/{username}/events/orgs/{org}" + ], + listPublicEvents: ["GET /events"], + listPublicEventsForRepoNetwork: ["GET /networks/{owner}/{repo}/events"], + listPublicEventsForUser: ["GET /users/{username}/events/public"], + listPublicOrgEvents: ["GET /orgs/{org}/events"], + listReceivedEventsForUser: ["GET /users/{username}/received_events"], + listReceivedPublicEventsForUser: [ + "GET /users/{username}/received_events/public" + ], + listRepoEvents: ["GET /repos/{owner}/{repo}/events"], + listRepoNotificationsForAuthenticatedUser: [ + "GET /repos/{owner}/{repo}/notifications" + ], + listReposStarredByAuthenticatedUser: ["GET /user/starred"], + listReposStarredByUser: ["GET /users/{username}/starred"], + listReposWatchedByUser: ["GET /users/{username}/subscriptions"], + listStargazersForRepo: ["GET /repos/{owner}/{repo}/stargazers"], + listWatchedReposForAuthenticatedUser: ["GET /user/subscriptions"], + listWatchersForRepo: ["GET /repos/{owner}/{repo}/subscribers"], + markNotificationsAsRead: ["PUT /notifications"], + markRepoNotificationsAsRead: ["PUT /repos/{owner}/{repo}/notifications"], + markThreadAsDone: ["DELETE /notifications/threads/{thread_id}"], + markThreadAsRead: ["PATCH /notifications/threads/{thread_id}"], + setRepoSubscription: ["PUT /repos/{owner}/{repo}/subscription"], + setThreadSubscription: [ + "PUT /notifications/threads/{thread_id}/subscription" + ], + starRepoForAuthenticatedUser: ["PUT /user/starred/{owner}/{repo}"], + unstarRepoForAuthenticatedUser: ["DELETE /user/starred/{owner}/{repo}"] + }, + apps: { + addRepoToInstallation: [ + "PUT /user/installations/{installation_id}/repositories/{repository_id}", + {}, + { renamed: ["apps", "addRepoToInstallationForAuthenticatedUser"] } + ], + addRepoToInstallationForAuthenticatedUser: [ + "PUT /user/installations/{installation_id}/repositories/{repository_id}" + ], + checkToken: ["POST /applications/{client_id}/token"], + createFromManifest: ["POST /app-manifests/{code}/conversions"], + createInstallationAccessToken: [ + "POST /app/installations/{installation_id}/access_tokens" + ], + deleteAuthorization: ["DELETE /applications/{client_id}/grant"], + deleteInstallation: ["DELETE /app/installations/{installation_id}"], + deleteToken: ["DELETE /applications/{client_id}/token"], + getAuthenticated: ["GET /app"], + getBySlug: ["GET /apps/{app_slug}"], + getInstallation: ["GET /app/installations/{installation_id}"], + getOrgInstallation: ["GET /orgs/{org}/installation"], + getRepoInstallation: ["GET /repos/{owner}/{repo}/installation"], + getSubscriptionPlanForAccount: [ + "GET /marketplace_listing/accounts/{account_id}" + ], + getSubscriptionPlanForAccountStubbed: [ + "GET /marketplace_listing/stubbed/accounts/{account_id}" + ], + getUserInstallation: ["GET /users/{username}/installation"], + getWebhookConfigForApp: ["GET /app/hook/config"], + getWebhookDelivery: ["GET /app/hook/deliveries/{delivery_id}"], + listAccountsForPlan: ["GET /marketplace_listing/plans/{plan_id}/accounts"], + listAccountsForPlanStubbed: [ + "GET /marketplace_listing/stubbed/plans/{plan_id}/accounts" + ], + listInstallationReposForAuthenticatedUser: [ + "GET /user/installations/{installation_id}/repositories" + ], + listInstallationRequestsForAuthenticatedApp: [ + "GET /app/installation-requests" + ], + listInstallations: ["GET /app/installations"], + listInstallationsForAuthenticatedUser: ["GET /user/installations"], + listPlans: ["GET /marketplace_listing/plans"], + listPlansStubbed: ["GET /marketplace_listing/stubbed/plans"], + listReposAccessibleToInstallation: ["GET /installation/repositories"], + listSubscriptionsForAuthenticatedUser: ["GET /user/marketplace_purchases"], + listSubscriptionsForAuthenticatedUserStubbed: [ + "GET /user/marketplace_purchases/stubbed" + ], + listWebhookDeliveries: ["GET /app/hook/deliveries"], + redeliverWebhookDelivery: [ + "POST /app/hook/deliveries/{delivery_id}/attempts" + ], + removeRepoFromInstallation: [ + "DELETE /user/installations/{installation_id}/repositories/{repository_id}", + {}, + { renamed: ["apps", "removeRepoFromInstallationForAuthenticatedUser"] } + ], + removeRepoFromInstallationForAuthenticatedUser: [ + "DELETE /user/installations/{installation_id}/repositories/{repository_id}" + ], + resetToken: ["PATCH /applications/{client_id}/token"], + revokeInstallationAccessToken: ["DELETE /installation/token"], + scopeToken: ["POST /applications/{client_id}/token/scoped"], + suspendInstallation: ["PUT /app/installations/{installation_id}/suspended"], + unsuspendInstallation: [ + "DELETE /app/installations/{installation_id}/suspended" + ], + updateWebhookConfigForApp: ["PATCH /app/hook/config"] + }, + billing: { + getGithubActionsBillingOrg: ["GET /orgs/{org}/settings/billing/actions"], + getGithubActionsBillingUser: [ + "GET /users/{username}/settings/billing/actions" + ], + getGithubBillingPremiumRequestUsageReportOrg: [ + "GET /organizations/{org}/settings/billing/premium_request/usage" + ], + getGithubBillingPremiumRequestUsageReportUser: [ + "GET /users/{username}/settings/billing/premium_request/usage" + ], + getGithubBillingUsageReportOrg: [ + "GET /organizations/{org}/settings/billing/usage" + ], + getGithubBillingUsageReportUser: [ + "GET /users/{username}/settings/billing/usage" + ], + getGithubPackagesBillingOrg: ["GET /orgs/{org}/settings/billing/packages"], + getGithubPackagesBillingUser: [ + "GET /users/{username}/settings/billing/packages" + ], + getSharedStorageBillingOrg: [ + "GET /orgs/{org}/settings/billing/shared-storage" + ], + getSharedStorageBillingUser: [ + "GET /users/{username}/settings/billing/shared-storage" + ] + }, + campaigns: { + createCampaign: ["POST /orgs/{org}/campaigns"], + deleteCampaign: ["DELETE /orgs/{org}/campaigns/{campaign_number}"], + getCampaignSummary: ["GET /orgs/{org}/campaigns/{campaign_number}"], + listOrgCampaigns: ["GET /orgs/{org}/campaigns"], + updateCampaign: ["PATCH /orgs/{org}/campaigns/{campaign_number}"] + }, + checks: { + create: ["POST /repos/{owner}/{repo}/check-runs"], + createSuite: ["POST /repos/{owner}/{repo}/check-suites"], + get: ["GET /repos/{owner}/{repo}/check-runs/{check_run_id}"], + getSuite: ["GET /repos/{owner}/{repo}/check-suites/{check_suite_id}"], + listAnnotations: [ + "GET /repos/{owner}/{repo}/check-runs/{check_run_id}/annotations" + ], + listForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/check-runs"], + listForSuite: [ + "GET /repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs" + ], + listSuitesForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/check-suites"], + rerequestRun: [ + "POST /repos/{owner}/{repo}/check-runs/{check_run_id}/rerequest" + ], + rerequestSuite: [ + "POST /repos/{owner}/{repo}/check-suites/{check_suite_id}/rerequest" + ], + setSuitesPreferences: [ + "PATCH /repos/{owner}/{repo}/check-suites/preferences" + ], + update: ["PATCH /repos/{owner}/{repo}/check-runs/{check_run_id}"] + }, + codeScanning: { + commitAutofix: [ + "POST /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/autofix/commits" + ], + createAutofix: [ + "POST /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/autofix" + ], + createVariantAnalysis: [ + "POST /repos/{owner}/{repo}/code-scanning/codeql/variant-analyses" + ], + deleteAnalysis: [ + "DELETE /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}{?confirm_delete}" + ], + deleteCodeqlDatabase: [ + "DELETE /repos/{owner}/{repo}/code-scanning/codeql/databases/{language}" + ], + getAlert: [ + "GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}", + {}, + { renamedParameters: { alert_id: "alert_number" } } + ], + getAnalysis: [ + "GET /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}" + ], + getAutofix: [ + "GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/autofix" + ], + getCodeqlDatabase: [ + "GET /repos/{owner}/{repo}/code-scanning/codeql/databases/{language}" + ], + getDefaultSetup: ["GET /repos/{owner}/{repo}/code-scanning/default-setup"], + getSarif: ["GET /repos/{owner}/{repo}/code-scanning/sarifs/{sarif_id}"], + getVariantAnalysis: [ + "GET /repos/{owner}/{repo}/code-scanning/codeql/variant-analyses/{codeql_variant_analysis_id}" + ], + getVariantAnalysisRepoTask: [ + "GET /repos/{owner}/{repo}/code-scanning/codeql/variant-analyses/{codeql_variant_analysis_id}/repos/{repo_owner}/{repo_name}" + ], + listAlertInstances: [ + "GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances" + ], + listAlertsForOrg: ["GET /orgs/{org}/code-scanning/alerts"], + listAlertsForRepo: ["GET /repos/{owner}/{repo}/code-scanning/alerts"], + listAlertsInstances: [ + "GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances", + {}, + { renamed: ["codeScanning", "listAlertInstances"] } + ], + listCodeqlDatabases: [ + "GET /repos/{owner}/{repo}/code-scanning/codeql/databases" + ], + listRecentAnalyses: ["GET /repos/{owner}/{repo}/code-scanning/analyses"], + updateAlert: [ + "PATCH /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}" + ], + updateDefaultSetup: [ + "PATCH /repos/{owner}/{repo}/code-scanning/default-setup" + ], + uploadSarif: ["POST /repos/{owner}/{repo}/code-scanning/sarifs"] + }, + codeSecurity: { + attachConfiguration: [ + "POST /orgs/{org}/code-security/configurations/{configuration_id}/attach" + ], + attachEnterpriseConfiguration: [ + "POST /enterprises/{enterprise}/code-security/configurations/{configuration_id}/attach" + ], + createConfiguration: ["POST /orgs/{org}/code-security/configurations"], + createConfigurationForEnterprise: [ + "POST /enterprises/{enterprise}/code-security/configurations" + ], + deleteConfiguration: [ + "DELETE /orgs/{org}/code-security/configurations/{configuration_id}" + ], + deleteConfigurationForEnterprise: [ + "DELETE /enterprises/{enterprise}/code-security/configurations/{configuration_id}" + ], + detachConfiguration: [ + "DELETE /orgs/{org}/code-security/configurations/detach" + ], + getConfiguration: [ + "GET /orgs/{org}/code-security/configurations/{configuration_id}" + ], + getConfigurationForRepository: [ + "GET /repos/{owner}/{repo}/code-security-configuration" + ], + getConfigurationsForEnterprise: [ + "GET /enterprises/{enterprise}/code-security/configurations" + ], + getConfigurationsForOrg: ["GET /orgs/{org}/code-security/configurations"], + getDefaultConfigurations: [ + "GET /orgs/{org}/code-security/configurations/defaults" + ], + getDefaultConfigurationsForEnterprise: [ + "GET /enterprises/{enterprise}/code-security/configurations/defaults" + ], + getRepositoriesForConfiguration: [ + "GET /orgs/{org}/code-security/configurations/{configuration_id}/repositories" + ], + getRepositoriesForEnterpriseConfiguration: [ + "GET /enterprises/{enterprise}/code-security/configurations/{configuration_id}/repositories" + ], + getSingleConfigurationForEnterprise: [ + "GET /enterprises/{enterprise}/code-security/configurations/{configuration_id}" + ], + setConfigurationAsDefault: [ + "PUT /orgs/{org}/code-security/configurations/{configuration_id}/defaults" + ], + setConfigurationAsDefaultForEnterprise: [ + "PUT /enterprises/{enterprise}/code-security/configurations/{configuration_id}/defaults" + ], + updateConfiguration: [ + "PATCH /orgs/{org}/code-security/configurations/{configuration_id}" + ], + updateEnterpriseConfiguration: [ + "PATCH /enterprises/{enterprise}/code-security/configurations/{configuration_id}" + ] + }, + codesOfConduct: { + getAllCodesOfConduct: ["GET /codes_of_conduct"], + getConductCode: ["GET /codes_of_conduct/{key}"] + }, + codespaces: { + addRepositoryForSecretForAuthenticatedUser: [ + "PUT /user/codespaces/secrets/{secret_name}/repositories/{repository_id}" + ], + addSelectedRepoToOrgSecret: [ + "PUT /orgs/{org}/codespaces/secrets/{secret_name}/repositories/{repository_id}" + ], + checkPermissionsForDevcontainer: [ + "GET /repos/{owner}/{repo}/codespaces/permissions_check" + ], + codespaceMachinesForAuthenticatedUser: [ + "GET /user/codespaces/{codespace_name}/machines" + ], + createForAuthenticatedUser: ["POST /user/codespaces"], + createOrUpdateOrgSecret: [ + "PUT /orgs/{org}/codespaces/secrets/{secret_name}" + ], + createOrUpdateRepoSecret: [ + "PUT /repos/{owner}/{repo}/codespaces/secrets/{secret_name}" + ], + createOrUpdateSecretForAuthenticatedUser: [ + "PUT /user/codespaces/secrets/{secret_name}" + ], + createWithPrForAuthenticatedUser: [ + "POST /repos/{owner}/{repo}/pulls/{pull_number}/codespaces" + ], + createWithRepoForAuthenticatedUser: [ + "POST /repos/{owner}/{repo}/codespaces" + ], + deleteForAuthenticatedUser: ["DELETE /user/codespaces/{codespace_name}"], + deleteFromOrganization: [ + "DELETE /orgs/{org}/members/{username}/codespaces/{codespace_name}" + ], + deleteOrgSecret: ["DELETE /orgs/{org}/codespaces/secrets/{secret_name}"], + deleteRepoSecret: [ + "DELETE /repos/{owner}/{repo}/codespaces/secrets/{secret_name}" + ], + deleteSecretForAuthenticatedUser: [ + "DELETE /user/codespaces/secrets/{secret_name}" + ], + exportForAuthenticatedUser: [ + "POST /user/codespaces/{codespace_name}/exports" + ], + getCodespacesForUserInOrg: [ + "GET /orgs/{org}/members/{username}/codespaces" + ], + getExportDetailsForAuthenticatedUser: [ + "GET /user/codespaces/{codespace_name}/exports/{export_id}" + ], + getForAuthenticatedUser: ["GET /user/codespaces/{codespace_name}"], + getOrgPublicKey: ["GET /orgs/{org}/codespaces/secrets/public-key"], + getOrgSecret: ["GET /orgs/{org}/codespaces/secrets/{secret_name}"], + getPublicKeyForAuthenticatedUser: [ + "GET /user/codespaces/secrets/public-key" + ], + getRepoPublicKey: [ + "GET /repos/{owner}/{repo}/codespaces/secrets/public-key" + ], + getRepoSecret: [ + "GET /repos/{owner}/{repo}/codespaces/secrets/{secret_name}" + ], + getSecretForAuthenticatedUser: [ + "GET /user/codespaces/secrets/{secret_name}" + ], + listDevcontainersInRepositoryForAuthenticatedUser: [ + "GET /repos/{owner}/{repo}/codespaces/devcontainers" + ], + listForAuthenticatedUser: ["GET /user/codespaces"], + listInOrganization: [ + "GET /orgs/{org}/codespaces", + {}, + { renamedParameters: { org_id: "org" } } + ], + listInRepositoryForAuthenticatedUser: [ + "GET /repos/{owner}/{repo}/codespaces" + ], + listOrgSecrets: ["GET /orgs/{org}/codespaces/secrets"], + listRepoSecrets: ["GET /repos/{owner}/{repo}/codespaces/secrets"], + listRepositoriesForSecretForAuthenticatedUser: [ + "GET /user/codespaces/secrets/{secret_name}/repositories" + ], + listSecretsForAuthenticatedUser: ["GET /user/codespaces/secrets"], + listSelectedReposForOrgSecret: [ + "GET /orgs/{org}/codespaces/secrets/{secret_name}/repositories" + ], + preFlightWithRepoForAuthenticatedUser: [ + "GET /repos/{owner}/{repo}/codespaces/new" + ], + publishForAuthenticatedUser: [ + "POST /user/codespaces/{codespace_name}/publish" + ], + removeRepositoryForSecretForAuthenticatedUser: [ + "DELETE /user/codespaces/secrets/{secret_name}/repositories/{repository_id}" + ], + removeSelectedRepoFromOrgSecret: [ + "DELETE /orgs/{org}/codespaces/secrets/{secret_name}/repositories/{repository_id}" + ], + repoMachinesForAuthenticatedUser: [ + "GET /repos/{owner}/{repo}/codespaces/machines" + ], + setRepositoriesForSecretForAuthenticatedUser: [ + "PUT /user/codespaces/secrets/{secret_name}/repositories" + ], + setSelectedReposForOrgSecret: [ + "PUT /orgs/{org}/codespaces/secrets/{secret_name}/repositories" + ], + startForAuthenticatedUser: ["POST /user/codespaces/{codespace_name}/start"], + stopForAuthenticatedUser: ["POST /user/codespaces/{codespace_name}/stop"], + stopInOrganization: [ + "POST /orgs/{org}/members/{username}/codespaces/{codespace_name}/stop" + ], + updateForAuthenticatedUser: ["PATCH /user/codespaces/{codespace_name}"] + }, + copilot: { + addCopilotSeatsForTeams: [ + "POST /orgs/{org}/copilot/billing/selected_teams" + ], + addCopilotSeatsForUsers: [ + "POST /orgs/{org}/copilot/billing/selected_users" + ], + cancelCopilotSeatAssignmentForTeams: [ + "DELETE /orgs/{org}/copilot/billing/selected_teams" + ], + cancelCopilotSeatAssignmentForUsers: [ + "DELETE /orgs/{org}/copilot/billing/selected_users" + ], + copilotMetricsForOrganization: ["GET /orgs/{org}/copilot/metrics"], + copilotMetricsForTeam: ["GET /orgs/{org}/team/{team_slug}/copilot/metrics"], + getCopilotOrganizationDetails: ["GET /orgs/{org}/copilot/billing"], + getCopilotSeatDetailsForUser: [ + "GET /orgs/{org}/members/{username}/copilot" + ], + listCopilotSeats: ["GET /orgs/{org}/copilot/billing/seats"] + }, + credentials: { revoke: ["POST /credentials/revoke"] }, + dependabot: { + addSelectedRepoToOrgSecret: [ + "PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}" + ], + createOrUpdateOrgSecret: [ + "PUT /orgs/{org}/dependabot/secrets/{secret_name}" + ], + createOrUpdateRepoSecret: [ + "PUT /repos/{owner}/{repo}/dependabot/secrets/{secret_name}" + ], + deleteOrgSecret: ["DELETE /orgs/{org}/dependabot/secrets/{secret_name}"], + deleteRepoSecret: [ + "DELETE /repos/{owner}/{repo}/dependabot/secrets/{secret_name}" + ], + getAlert: ["GET /repos/{owner}/{repo}/dependabot/alerts/{alert_number}"], + getOrgPublicKey: ["GET /orgs/{org}/dependabot/secrets/public-key"], + getOrgSecret: ["GET /orgs/{org}/dependabot/secrets/{secret_name}"], + getRepoPublicKey: [ + "GET /repos/{owner}/{repo}/dependabot/secrets/public-key" + ], + getRepoSecret: [ + "GET /repos/{owner}/{repo}/dependabot/secrets/{secret_name}" + ], + listAlertsForEnterprise: [ + "GET /enterprises/{enterprise}/dependabot/alerts" + ], + listAlertsForOrg: ["GET /orgs/{org}/dependabot/alerts"], + listAlertsForRepo: ["GET /repos/{owner}/{repo}/dependabot/alerts"], + listOrgSecrets: ["GET /orgs/{org}/dependabot/secrets"], + listRepoSecrets: ["GET /repos/{owner}/{repo}/dependabot/secrets"], + listSelectedReposForOrgSecret: [ + "GET /orgs/{org}/dependabot/secrets/{secret_name}/repositories" + ], + removeSelectedRepoFromOrgSecret: [ + "DELETE /orgs/{org}/dependabot/secrets/{secret_name}/repositories/{repository_id}" + ], + repositoryAccessForOrg: [ + "GET /organizations/{org}/dependabot/repository-access" + ], + setRepositoryAccessDefaultLevel: [ + "PUT /organizations/{org}/dependabot/repository-access/default-level" + ], + setSelectedReposForOrgSecret: [ + "PUT /orgs/{org}/dependabot/secrets/{secret_name}/repositories" + ], + updateAlert: [ + "PATCH /repos/{owner}/{repo}/dependabot/alerts/{alert_number}" + ], + updateRepositoryAccessForOrg: [ + "PATCH /organizations/{org}/dependabot/repository-access" + ] + }, + dependencyGraph: { + createRepositorySnapshot: [ + "POST /repos/{owner}/{repo}/dependency-graph/snapshots" + ], + diffRange: [ + "GET /repos/{owner}/{repo}/dependency-graph/compare/{basehead}" + ], + exportSbom: ["GET /repos/{owner}/{repo}/dependency-graph/sbom"] + }, + emojis: { get: ["GET /emojis"] }, + enterpriseTeamMemberships: { + add: [ + "PUT /enterprises/{enterprise}/teams/{enterprise-team}/memberships/{username}" + ], + bulkAdd: [ + "POST /enterprises/{enterprise}/teams/{enterprise-team}/memberships/add" + ], + bulkRemove: [ + "POST /enterprises/{enterprise}/teams/{enterprise-team}/memberships/remove" + ], + get: [ + "GET /enterprises/{enterprise}/teams/{enterprise-team}/memberships/{username}" + ], + list: ["GET /enterprises/{enterprise}/teams/{enterprise-team}/memberships"], + remove: [ + "DELETE /enterprises/{enterprise}/teams/{enterprise-team}/memberships/{username}" + ] + }, + enterpriseTeamOrganizations: { + add: [ + "PUT /enterprises/{enterprise}/teams/{enterprise-team}/organizations/{org}" + ], + bulkAdd: [ + "POST /enterprises/{enterprise}/teams/{enterprise-team}/organizations/add" + ], + bulkRemove: [ + "POST /enterprises/{enterprise}/teams/{enterprise-team}/organizations/remove" + ], + delete: [ + "DELETE /enterprises/{enterprise}/teams/{enterprise-team}/organizations/{org}" + ], + getAssignment: [ + "GET /enterprises/{enterprise}/teams/{enterprise-team}/organizations/{org}" + ], + getAssignments: [ + "GET /enterprises/{enterprise}/teams/{enterprise-team}/organizations" + ] + }, + enterpriseTeams: { + create: ["POST /enterprises/{enterprise}/teams"], + delete: ["DELETE /enterprises/{enterprise}/teams/{team_slug}"], + get: ["GET /enterprises/{enterprise}/teams/{team_slug}"], + list: ["GET /enterprises/{enterprise}/teams"], + update: ["PATCH /enterprises/{enterprise}/teams/{team_slug}"] + }, + gists: { + checkIsStarred: ["GET /gists/{gist_id}/star"], + create: ["POST /gists"], + createComment: ["POST /gists/{gist_id}/comments"], + delete: ["DELETE /gists/{gist_id}"], + deleteComment: ["DELETE /gists/{gist_id}/comments/{comment_id}"], + fork: ["POST /gists/{gist_id}/forks"], + get: ["GET /gists/{gist_id}"], + getComment: ["GET /gists/{gist_id}/comments/{comment_id}"], + getRevision: ["GET /gists/{gist_id}/{sha}"], + list: ["GET /gists"], + listComments: ["GET /gists/{gist_id}/comments"], + listCommits: ["GET /gists/{gist_id}/commits"], + listForUser: ["GET /users/{username}/gists"], + listForks: ["GET /gists/{gist_id}/forks"], + listPublic: ["GET /gists/public"], + listStarred: ["GET /gists/starred"], + star: ["PUT /gists/{gist_id}/star"], + unstar: ["DELETE /gists/{gist_id}/star"], + update: ["PATCH /gists/{gist_id}"], + updateComment: ["PATCH /gists/{gist_id}/comments/{comment_id}"] + }, + git: { + createBlob: ["POST /repos/{owner}/{repo}/git/blobs"], + createCommit: ["POST /repos/{owner}/{repo}/git/commits"], + createRef: ["POST /repos/{owner}/{repo}/git/refs"], + createTag: ["POST /repos/{owner}/{repo}/git/tags"], + createTree: ["POST /repos/{owner}/{repo}/git/trees"], + deleteRef: ["DELETE /repos/{owner}/{repo}/git/refs/{ref}"], + getBlob: ["GET /repos/{owner}/{repo}/git/blobs/{file_sha}"], + getCommit: ["GET /repos/{owner}/{repo}/git/commits/{commit_sha}"], + getRef: ["GET /repos/{owner}/{repo}/git/ref/{ref}"], + getTag: ["GET /repos/{owner}/{repo}/git/tags/{tag_sha}"], + getTree: ["GET /repos/{owner}/{repo}/git/trees/{tree_sha}"], + listMatchingRefs: ["GET /repos/{owner}/{repo}/git/matching-refs/{ref}"], + updateRef: ["PATCH /repos/{owner}/{repo}/git/refs/{ref}"] + }, + gitignore: { + getAllTemplates: ["GET /gitignore/templates"], + getTemplate: ["GET /gitignore/templates/{name}"] + }, + hostedCompute: { + createNetworkConfigurationForOrg: [ + "POST /orgs/{org}/settings/network-configurations" + ], + deleteNetworkConfigurationFromOrg: [ + "DELETE /orgs/{org}/settings/network-configurations/{network_configuration_id}" + ], + getNetworkConfigurationForOrg: [ + "GET /orgs/{org}/settings/network-configurations/{network_configuration_id}" + ], + getNetworkSettingsForOrg: [ + "GET /orgs/{org}/settings/network-settings/{network_settings_id}" + ], + listNetworkConfigurationsForOrg: [ + "GET /orgs/{org}/settings/network-configurations" + ], + updateNetworkConfigurationForOrg: [ + "PATCH /orgs/{org}/settings/network-configurations/{network_configuration_id}" + ] + }, + interactions: { + getRestrictionsForAuthenticatedUser: ["GET /user/interaction-limits"], + getRestrictionsForOrg: ["GET /orgs/{org}/interaction-limits"], + getRestrictionsForRepo: ["GET /repos/{owner}/{repo}/interaction-limits"], + getRestrictionsForYourPublicRepos: [ + "GET /user/interaction-limits", + {}, + { renamed: ["interactions", "getRestrictionsForAuthenticatedUser"] } + ], + removeRestrictionsForAuthenticatedUser: ["DELETE /user/interaction-limits"], + removeRestrictionsForOrg: ["DELETE /orgs/{org}/interaction-limits"], + removeRestrictionsForRepo: [ + "DELETE /repos/{owner}/{repo}/interaction-limits" + ], + removeRestrictionsForYourPublicRepos: [ + "DELETE /user/interaction-limits", + {}, + { renamed: ["interactions", "removeRestrictionsForAuthenticatedUser"] } + ], + setRestrictionsForAuthenticatedUser: ["PUT /user/interaction-limits"], + setRestrictionsForOrg: ["PUT /orgs/{org}/interaction-limits"], + setRestrictionsForRepo: ["PUT /repos/{owner}/{repo}/interaction-limits"], + setRestrictionsForYourPublicRepos: [ + "PUT /user/interaction-limits", + {}, + { renamed: ["interactions", "setRestrictionsForAuthenticatedUser"] } + ] + }, + issues: { + addAssignees: [ + "POST /repos/{owner}/{repo}/issues/{issue_number}/assignees" + ], + addBlockedByDependency: [ + "POST /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocked_by" + ], + addLabels: ["POST /repos/{owner}/{repo}/issues/{issue_number}/labels"], + addSubIssue: [ + "POST /repos/{owner}/{repo}/issues/{issue_number}/sub_issues" + ], + checkUserCanBeAssigned: ["GET /repos/{owner}/{repo}/assignees/{assignee}"], + checkUserCanBeAssignedToIssue: [ + "GET /repos/{owner}/{repo}/issues/{issue_number}/assignees/{assignee}" + ], + create: ["POST /repos/{owner}/{repo}/issues"], + createComment: [ + "POST /repos/{owner}/{repo}/issues/{issue_number}/comments" + ], + createLabel: ["POST /repos/{owner}/{repo}/labels"], + createMilestone: ["POST /repos/{owner}/{repo}/milestones"], + deleteComment: [ + "DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}" + ], + deleteLabel: ["DELETE /repos/{owner}/{repo}/labels/{name}"], + deleteMilestone: [ + "DELETE /repos/{owner}/{repo}/milestones/{milestone_number}" + ], + get: ["GET /repos/{owner}/{repo}/issues/{issue_number}"], + getComment: ["GET /repos/{owner}/{repo}/issues/comments/{comment_id}"], + getEvent: ["GET /repos/{owner}/{repo}/issues/events/{event_id}"], + getLabel: ["GET /repos/{owner}/{repo}/labels/{name}"], + getMilestone: ["GET /repos/{owner}/{repo}/milestones/{milestone_number}"], + getParent: ["GET /repos/{owner}/{repo}/issues/{issue_number}/parent"], + list: ["GET /issues"], + listAssignees: ["GET /repos/{owner}/{repo}/assignees"], + listComments: ["GET /repos/{owner}/{repo}/issues/{issue_number}/comments"], + listCommentsForRepo: ["GET /repos/{owner}/{repo}/issues/comments"], + listDependenciesBlockedBy: [ + "GET /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocked_by" + ], + listDependenciesBlocking: [ + "GET /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocking" + ], + listEvents: ["GET /repos/{owner}/{repo}/issues/{issue_number}/events"], + listEventsForRepo: ["GET /repos/{owner}/{repo}/issues/events"], + listEventsForTimeline: [ + "GET /repos/{owner}/{repo}/issues/{issue_number}/timeline" + ], + listForAuthenticatedUser: ["GET /user/issues"], + listForOrg: ["GET /orgs/{org}/issues"], + listForRepo: ["GET /repos/{owner}/{repo}/issues"], + listLabelsForMilestone: [ + "GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels" + ], + listLabelsForRepo: ["GET /repos/{owner}/{repo}/labels"], + listLabelsOnIssue: [ + "GET /repos/{owner}/{repo}/issues/{issue_number}/labels" + ], + listMilestones: ["GET /repos/{owner}/{repo}/milestones"], + listSubIssues: [ + "GET /repos/{owner}/{repo}/issues/{issue_number}/sub_issues" + ], + lock: ["PUT /repos/{owner}/{repo}/issues/{issue_number}/lock"], + removeAllLabels: [ + "DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels" + ], + removeAssignees: [ + "DELETE /repos/{owner}/{repo}/issues/{issue_number}/assignees" + ], + removeDependencyBlockedBy: [ + "DELETE /repos/{owner}/{repo}/issues/{issue_number}/dependencies/blocked_by/{issue_id}" + ], + removeLabel: [ + "DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels/{name}" + ], + removeSubIssue: [ + "DELETE /repos/{owner}/{repo}/issues/{issue_number}/sub_issue" + ], + reprioritizeSubIssue: [ + "PATCH /repos/{owner}/{repo}/issues/{issue_number}/sub_issues/priority" + ], + setLabels: ["PUT /repos/{owner}/{repo}/issues/{issue_number}/labels"], + unlock: ["DELETE /repos/{owner}/{repo}/issues/{issue_number}/lock"], + update: ["PATCH /repos/{owner}/{repo}/issues/{issue_number}"], + updateComment: ["PATCH /repos/{owner}/{repo}/issues/comments/{comment_id}"], + updateLabel: ["PATCH /repos/{owner}/{repo}/labels/{name}"], + updateMilestone: [ + "PATCH /repos/{owner}/{repo}/milestones/{milestone_number}" + ] + }, + licenses: { + get: ["GET /licenses/{license}"], + getAllCommonlyUsed: ["GET /licenses"], + getForRepo: ["GET /repos/{owner}/{repo}/license"] + }, + markdown: { + render: ["POST /markdown"], + renderRaw: [ + "POST /markdown/raw", + { headers: { "content-type": "text/plain; charset=utf-8" } } + ] + }, + meta: { + get: ["GET /meta"], + getAllVersions: ["GET /versions"], + getOctocat: ["GET /octocat"], + getZen: ["GET /zen"], + root: ["GET /"] + }, + migrations: { + deleteArchiveForAuthenticatedUser: [ + "DELETE /user/migrations/{migration_id}/archive" + ], + deleteArchiveForOrg: [ + "DELETE /orgs/{org}/migrations/{migration_id}/archive" + ], + downloadArchiveForOrg: [ + "GET /orgs/{org}/migrations/{migration_id}/archive" + ], + getArchiveForAuthenticatedUser: [ + "GET /user/migrations/{migration_id}/archive" + ], + getStatusForAuthenticatedUser: ["GET /user/migrations/{migration_id}"], + getStatusForOrg: ["GET /orgs/{org}/migrations/{migration_id}"], + listForAuthenticatedUser: ["GET /user/migrations"], + listForOrg: ["GET /orgs/{org}/migrations"], + listReposForAuthenticatedUser: [ + "GET /user/migrations/{migration_id}/repositories" + ], + listReposForOrg: ["GET /orgs/{org}/migrations/{migration_id}/repositories"], + listReposForUser: [ + "GET /user/migrations/{migration_id}/repositories", + {}, + { renamed: ["migrations", "listReposForAuthenticatedUser"] } + ], + startForAuthenticatedUser: ["POST /user/migrations"], + startForOrg: ["POST /orgs/{org}/migrations"], + unlockRepoForAuthenticatedUser: [ + "DELETE /user/migrations/{migration_id}/repos/{repo_name}/lock" + ], + unlockRepoForOrg: [ + "DELETE /orgs/{org}/migrations/{migration_id}/repos/{repo_name}/lock" + ] + }, + oidc: { + getOidcCustomSubTemplateForOrg: [ + "GET /orgs/{org}/actions/oidc/customization/sub" + ], + updateOidcCustomSubTemplateForOrg: [ + "PUT /orgs/{org}/actions/oidc/customization/sub" + ] + }, + orgs: { + addSecurityManagerTeam: [ + "PUT /orgs/{org}/security-managers/teams/{team_slug}", + {}, + { + deprecated: "octokit.rest.orgs.addSecurityManagerTeam() is deprecated, see https://docs.github.com/rest/orgs/security-managers#add-a-security-manager-team" + } + ], + assignTeamToOrgRole: [ + "PUT /orgs/{org}/organization-roles/teams/{team_slug}/{role_id}" + ], + assignUserToOrgRole: [ + "PUT /orgs/{org}/organization-roles/users/{username}/{role_id}" + ], + blockUser: ["PUT /orgs/{org}/blocks/{username}"], + cancelInvitation: ["DELETE /orgs/{org}/invitations/{invitation_id}"], + checkBlockedUser: ["GET /orgs/{org}/blocks/{username}"], + checkMembershipForUser: ["GET /orgs/{org}/members/{username}"], + checkPublicMembershipForUser: ["GET /orgs/{org}/public_members/{username}"], + convertMemberToOutsideCollaborator: [ + "PUT /orgs/{org}/outside_collaborators/{username}" + ], + createArtifactStorageRecord: [ + "POST /orgs/{org}/artifacts/metadata/storage-record" + ], + createInvitation: ["POST /orgs/{org}/invitations"], + createIssueType: ["POST /orgs/{org}/issue-types"], + createWebhook: ["POST /orgs/{org}/hooks"], + customPropertiesForOrgsCreateOrUpdateOrganizationValues: [ + "PATCH /organizations/{org}/org-properties/values" + ], + customPropertiesForOrgsGetOrganizationValues: [ + "GET /organizations/{org}/org-properties/values" + ], + customPropertiesForReposCreateOrUpdateOrganizationDefinition: [ + "PUT /orgs/{org}/properties/schema/{custom_property_name}" + ], + customPropertiesForReposCreateOrUpdateOrganizationDefinitions: [ + "PATCH /orgs/{org}/properties/schema" + ], + customPropertiesForReposCreateOrUpdateOrganizationValues: [ + "PATCH /orgs/{org}/properties/values" + ], + customPropertiesForReposDeleteOrganizationDefinition: [ + "DELETE /orgs/{org}/properties/schema/{custom_property_name}" + ], + customPropertiesForReposGetOrganizationDefinition: [ + "GET /orgs/{org}/properties/schema/{custom_property_name}" + ], + customPropertiesForReposGetOrganizationDefinitions: [ + "GET /orgs/{org}/properties/schema" + ], + customPropertiesForReposGetOrganizationValues: [ + "GET /orgs/{org}/properties/values" + ], + delete: ["DELETE /orgs/{org}"], + deleteAttestationsBulk: ["POST /orgs/{org}/attestations/delete-request"], + deleteAttestationsById: [ + "DELETE /orgs/{org}/attestations/{attestation_id}" + ], + deleteAttestationsBySubjectDigest: [ + "DELETE /orgs/{org}/attestations/digest/{subject_digest}" + ], + deleteIssueType: ["DELETE /orgs/{org}/issue-types/{issue_type_id}"], + deleteWebhook: ["DELETE /orgs/{org}/hooks/{hook_id}"], + disableSelectedRepositoryImmutableReleasesOrganization: [ + "DELETE /orgs/{org}/settings/immutable-releases/repositories/{repository_id}" + ], + enableSelectedRepositoryImmutableReleasesOrganization: [ + "PUT /orgs/{org}/settings/immutable-releases/repositories/{repository_id}" + ], + get: ["GET /orgs/{org}"], + getImmutableReleasesSettings: [ + "GET /orgs/{org}/settings/immutable-releases" + ], + getImmutableReleasesSettingsRepositories: [ + "GET /orgs/{org}/settings/immutable-releases/repositories" + ], + getMembershipForAuthenticatedUser: ["GET /user/memberships/orgs/{org}"], + getMembershipForUser: ["GET /orgs/{org}/memberships/{username}"], + getOrgRole: ["GET /orgs/{org}/organization-roles/{role_id}"], + getOrgRulesetHistory: ["GET /orgs/{org}/rulesets/{ruleset_id}/history"], + getOrgRulesetVersion: [ + "GET /orgs/{org}/rulesets/{ruleset_id}/history/{version_id}" + ], + getWebhook: ["GET /orgs/{org}/hooks/{hook_id}"], + getWebhookConfigForOrg: ["GET /orgs/{org}/hooks/{hook_id}/config"], + getWebhookDelivery: [ + "GET /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}" + ], + list: ["GET /organizations"], + listAppInstallations: ["GET /orgs/{org}/installations"], + listArtifactStorageRecords: [ + "GET /orgs/{org}/artifacts/{subject_digest}/metadata/storage-records" + ], + listAttestationRepositories: ["GET /orgs/{org}/attestations/repositories"], + listAttestations: ["GET /orgs/{org}/attestations/{subject_digest}"], + listAttestationsBulk: [ + "POST /orgs/{org}/attestations/bulk-list{?per_page,before,after}" + ], + listBlockedUsers: ["GET /orgs/{org}/blocks"], + listFailedInvitations: ["GET /orgs/{org}/failed_invitations"], + listForAuthenticatedUser: ["GET /user/orgs"], + listForUser: ["GET /users/{username}/orgs"], + listInvitationTeams: ["GET /orgs/{org}/invitations/{invitation_id}/teams"], + listIssueTypes: ["GET /orgs/{org}/issue-types"], + listMembers: ["GET /orgs/{org}/members"], + listMembershipsForAuthenticatedUser: ["GET /user/memberships/orgs"], + listOrgRoleTeams: ["GET /orgs/{org}/organization-roles/{role_id}/teams"], + listOrgRoleUsers: ["GET /orgs/{org}/organization-roles/{role_id}/users"], + listOrgRoles: ["GET /orgs/{org}/organization-roles"], + listOrganizationFineGrainedPermissions: [ + "GET /orgs/{org}/organization-fine-grained-permissions" + ], + listOutsideCollaborators: ["GET /orgs/{org}/outside_collaborators"], + listPatGrantRepositories: [ + "GET /orgs/{org}/personal-access-tokens/{pat_id}/repositories" + ], + listPatGrantRequestRepositories: [ + "GET /orgs/{org}/personal-access-token-requests/{pat_request_id}/repositories" + ], + listPatGrantRequests: ["GET /orgs/{org}/personal-access-token-requests"], + listPatGrants: ["GET /orgs/{org}/personal-access-tokens"], + listPendingInvitations: ["GET /orgs/{org}/invitations"], + listPublicMembers: ["GET /orgs/{org}/public_members"], + listSecurityManagerTeams: [ + "GET /orgs/{org}/security-managers", + {}, + { + deprecated: "octokit.rest.orgs.listSecurityManagerTeams() is deprecated, see https://docs.github.com/rest/orgs/security-managers#list-security-manager-teams" + } + ], + listWebhookDeliveries: ["GET /orgs/{org}/hooks/{hook_id}/deliveries"], + listWebhooks: ["GET /orgs/{org}/hooks"], + pingWebhook: ["POST /orgs/{org}/hooks/{hook_id}/pings"], + redeliverWebhookDelivery: [ + "POST /orgs/{org}/hooks/{hook_id}/deliveries/{delivery_id}/attempts" + ], + removeMember: ["DELETE /orgs/{org}/members/{username}"], + removeMembershipForUser: ["DELETE /orgs/{org}/memberships/{username}"], + removeOutsideCollaborator: [ + "DELETE /orgs/{org}/outside_collaborators/{username}" + ], + removePublicMembershipForAuthenticatedUser: [ + "DELETE /orgs/{org}/public_members/{username}" + ], + removeSecurityManagerTeam: [ + "DELETE /orgs/{org}/security-managers/teams/{team_slug}", + {}, + { + deprecated: "octokit.rest.orgs.removeSecurityManagerTeam() is deprecated, see https://docs.github.com/rest/orgs/security-managers#remove-a-security-manager-team" + } + ], + reviewPatGrantRequest: [ + "POST /orgs/{org}/personal-access-token-requests/{pat_request_id}" + ], + reviewPatGrantRequestsInBulk: [ + "POST /orgs/{org}/personal-access-token-requests" + ], + revokeAllOrgRolesTeam: [ + "DELETE /orgs/{org}/organization-roles/teams/{team_slug}" + ], + revokeAllOrgRolesUser: [ + "DELETE /orgs/{org}/organization-roles/users/{username}" + ], + revokeOrgRoleTeam: [ + "DELETE /orgs/{org}/organization-roles/teams/{team_slug}/{role_id}" + ], + revokeOrgRoleUser: [ + "DELETE /orgs/{org}/organization-roles/users/{username}/{role_id}" + ], + setImmutableReleasesSettings: [ + "PUT /orgs/{org}/settings/immutable-releases" + ], + setImmutableReleasesSettingsRepositories: [ + "PUT /orgs/{org}/settings/immutable-releases/repositories" + ], + setMembershipForUser: ["PUT /orgs/{org}/memberships/{username}"], + setPublicMembershipForAuthenticatedUser: [ + "PUT /orgs/{org}/public_members/{username}" + ], + unblockUser: ["DELETE /orgs/{org}/blocks/{username}"], + update: ["PATCH /orgs/{org}"], + updateIssueType: ["PUT /orgs/{org}/issue-types/{issue_type_id}"], + updateMembershipForAuthenticatedUser: [ + "PATCH /user/memberships/orgs/{org}" + ], + updatePatAccess: ["POST /orgs/{org}/personal-access-tokens/{pat_id}"], + updatePatAccesses: ["POST /orgs/{org}/personal-access-tokens"], + updateWebhook: ["PATCH /orgs/{org}/hooks/{hook_id}"], + updateWebhookConfigForOrg: ["PATCH /orgs/{org}/hooks/{hook_id}/config"] + }, + packages: { + deletePackageForAuthenticatedUser: [ + "DELETE /user/packages/{package_type}/{package_name}" + ], + deletePackageForOrg: [ + "DELETE /orgs/{org}/packages/{package_type}/{package_name}" + ], + deletePackageForUser: [ + "DELETE /users/{username}/packages/{package_type}/{package_name}" + ], + deletePackageVersionForAuthenticatedUser: [ + "DELETE /user/packages/{package_type}/{package_name}/versions/{package_version_id}" + ], + deletePackageVersionForOrg: [ + "DELETE /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}" + ], + deletePackageVersionForUser: [ + "DELETE /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}" + ], + getAllPackageVersionsForAPackageOwnedByAnOrg: [ + "GET /orgs/{org}/packages/{package_type}/{package_name}/versions", + {}, + { renamed: ["packages", "getAllPackageVersionsForPackageOwnedByOrg"] } + ], + getAllPackageVersionsForAPackageOwnedByTheAuthenticatedUser: [ + "GET /user/packages/{package_type}/{package_name}/versions", + {}, + { + renamed: [ + "packages", + "getAllPackageVersionsForPackageOwnedByAuthenticatedUser" + ] + } + ], + getAllPackageVersionsForPackageOwnedByAuthenticatedUser: [ + "GET /user/packages/{package_type}/{package_name}/versions" + ], + getAllPackageVersionsForPackageOwnedByOrg: [ + "GET /orgs/{org}/packages/{package_type}/{package_name}/versions" + ], + getAllPackageVersionsForPackageOwnedByUser: [ + "GET /users/{username}/packages/{package_type}/{package_name}/versions" + ], + getPackageForAuthenticatedUser: [ + "GET /user/packages/{package_type}/{package_name}" + ], + getPackageForOrganization: [ + "GET /orgs/{org}/packages/{package_type}/{package_name}" + ], + getPackageForUser: [ + "GET /users/{username}/packages/{package_type}/{package_name}" + ], + getPackageVersionForAuthenticatedUser: [ + "GET /user/packages/{package_type}/{package_name}/versions/{package_version_id}" + ], + getPackageVersionForOrganization: [ + "GET /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}" + ], + getPackageVersionForUser: [ + "GET /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}" + ], + listDockerMigrationConflictingPackagesForAuthenticatedUser: [ + "GET /user/docker/conflicts" + ], + listDockerMigrationConflictingPackagesForOrganization: [ + "GET /orgs/{org}/docker/conflicts" + ], + listDockerMigrationConflictingPackagesForUser: [ + "GET /users/{username}/docker/conflicts" + ], + listPackagesForAuthenticatedUser: ["GET /user/packages"], + listPackagesForOrganization: ["GET /orgs/{org}/packages"], + listPackagesForUser: ["GET /users/{username}/packages"], + restorePackageForAuthenticatedUser: [ + "POST /user/packages/{package_type}/{package_name}/restore{?token}" + ], + restorePackageForOrg: [ + "POST /orgs/{org}/packages/{package_type}/{package_name}/restore{?token}" + ], + restorePackageForUser: [ + "POST /users/{username}/packages/{package_type}/{package_name}/restore{?token}" + ], + restorePackageVersionForAuthenticatedUser: [ + "POST /user/packages/{package_type}/{package_name}/versions/{package_version_id}/restore" + ], + restorePackageVersionForOrg: [ + "POST /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore" + ], + restorePackageVersionForUser: [ + "POST /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore" + ] + }, + privateRegistries: { + createOrgPrivateRegistry: ["POST /orgs/{org}/private-registries"], + deleteOrgPrivateRegistry: [ + "DELETE /orgs/{org}/private-registries/{secret_name}" + ], + getOrgPrivateRegistry: ["GET /orgs/{org}/private-registries/{secret_name}"], + getOrgPublicKey: ["GET /orgs/{org}/private-registries/public-key"], + listOrgPrivateRegistries: ["GET /orgs/{org}/private-registries"], + updateOrgPrivateRegistry: [ + "PATCH /orgs/{org}/private-registries/{secret_name}" + ] + }, + projects: { + addItemForOrg: ["POST /orgs/{org}/projectsV2/{project_number}/items"], + addItemForUser: [ + "POST /users/{username}/projectsV2/{project_number}/items" + ], + deleteItemForOrg: [ + "DELETE /orgs/{org}/projectsV2/{project_number}/items/{item_id}" + ], + deleteItemForUser: [ + "DELETE /users/{username}/projectsV2/{project_number}/items/{item_id}" + ], + getFieldForOrg: [ + "GET /orgs/{org}/projectsV2/{project_number}/fields/{field_id}" + ], + getFieldForUser: [ + "GET /users/{username}/projectsV2/{project_number}/fields/{field_id}" + ], + getForOrg: ["GET /orgs/{org}/projectsV2/{project_number}"], + getForUser: ["GET /users/{username}/projectsV2/{project_number}"], + getOrgItem: ["GET /orgs/{org}/projectsV2/{project_number}/items/{item_id}"], + getUserItem: [ + "GET /users/{username}/projectsV2/{project_number}/items/{item_id}" + ], + listFieldsForOrg: ["GET /orgs/{org}/projectsV2/{project_number}/fields"], + listFieldsForUser: [ + "GET /users/{username}/projectsV2/{project_number}/fields" + ], + listForOrg: ["GET /orgs/{org}/projectsV2"], + listForUser: ["GET /users/{username}/projectsV2"], + listItemsForOrg: ["GET /orgs/{org}/projectsV2/{project_number}/items"], + listItemsForUser: [ + "GET /users/{username}/projectsV2/{project_number}/items" + ], + updateItemForOrg: [ + "PATCH /orgs/{org}/projectsV2/{project_number}/items/{item_id}" + ], + updateItemForUser: [ + "PATCH /users/{username}/projectsV2/{project_number}/items/{item_id}" + ] + }, + pulls: { + checkIfMerged: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/merge"], + create: ["POST /repos/{owner}/{repo}/pulls"], + createReplyForReviewComment: [ + "POST /repos/{owner}/{repo}/pulls/{pull_number}/comments/{comment_id}/replies" + ], + createReview: ["POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews"], + createReviewComment: [ + "POST /repos/{owner}/{repo}/pulls/{pull_number}/comments" + ], + deletePendingReview: [ + "DELETE /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}" + ], + deleteReviewComment: [ + "DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}" + ], + dismissReview: [ + "PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/dismissals" + ], + get: ["GET /repos/{owner}/{repo}/pulls/{pull_number}"], + getReview: [ + "GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}" + ], + getReviewComment: ["GET /repos/{owner}/{repo}/pulls/comments/{comment_id}"], + list: ["GET /repos/{owner}/{repo}/pulls"], + listCommentsForReview: [ + "GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments" + ], + listCommits: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/commits"], + listFiles: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/files"], + listRequestedReviewers: [ + "GET /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers" + ], + listReviewComments: [ + "GET /repos/{owner}/{repo}/pulls/{pull_number}/comments" + ], + listReviewCommentsForRepo: ["GET /repos/{owner}/{repo}/pulls/comments"], + listReviews: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews"], + merge: ["PUT /repos/{owner}/{repo}/pulls/{pull_number}/merge"], + removeRequestedReviewers: [ + "DELETE /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers" + ], + requestReviewers: [ + "POST /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers" + ], + submitReview: [ + "POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/events" + ], + update: ["PATCH /repos/{owner}/{repo}/pulls/{pull_number}"], + updateBranch: [ + "PUT /repos/{owner}/{repo}/pulls/{pull_number}/update-branch" + ], + updateReview: [ + "PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}" + ], + updateReviewComment: [ + "PATCH /repos/{owner}/{repo}/pulls/comments/{comment_id}" + ] + }, + rateLimit: { get: ["GET /rate_limit"] }, + reactions: { + createForCommitComment: [ + "POST /repos/{owner}/{repo}/comments/{comment_id}/reactions" + ], + createForIssue: [ + "POST /repos/{owner}/{repo}/issues/{issue_number}/reactions" + ], + createForIssueComment: [ + "POST /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions" + ], + createForPullRequestReviewComment: [ + "POST /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions" + ], + createForRelease: [ + "POST /repos/{owner}/{repo}/releases/{release_id}/reactions" + ], + createForTeamDiscussionCommentInOrg: [ + "POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions" + ], + createForTeamDiscussionInOrg: [ + "POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions" + ], + deleteForCommitComment: [ + "DELETE /repos/{owner}/{repo}/comments/{comment_id}/reactions/{reaction_id}" + ], + deleteForIssue: [ + "DELETE /repos/{owner}/{repo}/issues/{issue_number}/reactions/{reaction_id}" + ], + deleteForIssueComment: [ + "DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions/{reaction_id}" + ], + deleteForPullRequestComment: [ + "DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions/{reaction_id}" + ], + deleteForRelease: [ + "DELETE /repos/{owner}/{repo}/releases/{release_id}/reactions/{reaction_id}" + ], + deleteForTeamDiscussion: [ + "DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions/{reaction_id}" + ], + deleteForTeamDiscussionComment: [ + "DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions/{reaction_id}" + ], + listForCommitComment: [ + "GET /repos/{owner}/{repo}/comments/{comment_id}/reactions" + ], + listForIssue: ["GET /repos/{owner}/{repo}/issues/{issue_number}/reactions"], + listForIssueComment: [ + "GET /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions" + ], + listForPullRequestReviewComment: [ + "GET /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions" + ], + listForRelease: [ + "GET /repos/{owner}/{repo}/releases/{release_id}/reactions" + ], + listForTeamDiscussionCommentInOrg: [ + "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions" + ], + listForTeamDiscussionInOrg: [ + "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions" + ] + }, + repos: { + acceptInvitation: [ + "PATCH /user/repository_invitations/{invitation_id}", + {}, + { renamed: ["repos", "acceptInvitationForAuthenticatedUser"] } + ], + acceptInvitationForAuthenticatedUser: [ + "PATCH /user/repository_invitations/{invitation_id}" + ], + addAppAccessRestrictions: [ + "POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps", + {}, + { mapToData: "apps" } + ], + addCollaborator: ["PUT /repos/{owner}/{repo}/collaborators/{username}"], + addStatusCheckContexts: [ + "POST /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts", + {}, + { mapToData: "contexts" } + ], + addTeamAccessRestrictions: [ + "POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams", + {}, + { mapToData: "teams" } + ], + addUserAccessRestrictions: [ + "POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users", + {}, + { mapToData: "users" } + ], + cancelPagesDeployment: [ + "POST /repos/{owner}/{repo}/pages/deployments/{pages_deployment_id}/cancel" + ], + checkAutomatedSecurityFixes: [ + "GET /repos/{owner}/{repo}/automated-security-fixes" + ], + checkCollaborator: ["GET /repos/{owner}/{repo}/collaborators/{username}"], + checkImmutableReleases: ["GET /repos/{owner}/{repo}/immutable-releases"], + checkPrivateVulnerabilityReporting: [ + "GET /repos/{owner}/{repo}/private-vulnerability-reporting" + ], + checkVulnerabilityAlerts: [ + "GET /repos/{owner}/{repo}/vulnerability-alerts" + ], + codeownersErrors: ["GET /repos/{owner}/{repo}/codeowners/errors"], + compareCommits: ["GET /repos/{owner}/{repo}/compare/{base}...{head}"], + compareCommitsWithBasehead: [ + "GET /repos/{owner}/{repo}/compare/{basehead}" + ], + createAttestation: ["POST /repos/{owner}/{repo}/attestations"], + createAutolink: ["POST /repos/{owner}/{repo}/autolinks"], + createCommitComment: [ + "POST /repos/{owner}/{repo}/commits/{commit_sha}/comments" + ], + createCommitSignatureProtection: [ + "POST /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures" + ], + createCommitStatus: ["POST /repos/{owner}/{repo}/statuses/{sha}"], + createDeployKey: ["POST /repos/{owner}/{repo}/keys"], + createDeployment: ["POST /repos/{owner}/{repo}/deployments"], + createDeploymentBranchPolicy: [ + "POST /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies" + ], + createDeploymentProtectionRule: [ + "POST /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules" + ], + createDeploymentStatus: [ + "POST /repos/{owner}/{repo}/deployments/{deployment_id}/statuses" + ], + createDispatchEvent: ["POST /repos/{owner}/{repo}/dispatches"], + createForAuthenticatedUser: ["POST /user/repos"], + createFork: ["POST /repos/{owner}/{repo}/forks"], + createInOrg: ["POST /orgs/{org}/repos"], + createOrUpdateEnvironment: [ + "PUT /repos/{owner}/{repo}/environments/{environment_name}" + ], + createOrUpdateFileContents: ["PUT /repos/{owner}/{repo}/contents/{path}"], + createOrgRuleset: ["POST /orgs/{org}/rulesets"], + createPagesDeployment: ["POST /repos/{owner}/{repo}/pages/deployments"], + createPagesSite: ["POST /repos/{owner}/{repo}/pages"], + createRelease: ["POST /repos/{owner}/{repo}/releases"], + createRepoRuleset: ["POST /repos/{owner}/{repo}/rulesets"], + createUsingTemplate: [ + "POST /repos/{template_owner}/{template_repo}/generate" + ], + createWebhook: ["POST /repos/{owner}/{repo}/hooks"], + customPropertiesForReposCreateOrUpdateRepositoryValues: [ + "PATCH /repos/{owner}/{repo}/properties/values" + ], + customPropertiesForReposGetRepositoryValues: [ + "GET /repos/{owner}/{repo}/properties/values" + ], + declineInvitation: [ + "DELETE /user/repository_invitations/{invitation_id}", + {}, + { renamed: ["repos", "declineInvitationForAuthenticatedUser"] } + ], + declineInvitationForAuthenticatedUser: [ + "DELETE /user/repository_invitations/{invitation_id}" + ], + delete: ["DELETE /repos/{owner}/{repo}"], + deleteAccessRestrictions: [ + "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions" + ], + deleteAdminBranchProtection: [ + "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins" + ], + deleteAnEnvironment: [ + "DELETE /repos/{owner}/{repo}/environments/{environment_name}" + ], + deleteAutolink: ["DELETE /repos/{owner}/{repo}/autolinks/{autolink_id}"], + deleteBranchProtection: [ + "DELETE /repos/{owner}/{repo}/branches/{branch}/protection" + ], + deleteCommitComment: ["DELETE /repos/{owner}/{repo}/comments/{comment_id}"], + deleteCommitSignatureProtection: [ + "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures" + ], + deleteDeployKey: ["DELETE /repos/{owner}/{repo}/keys/{key_id}"], + deleteDeployment: [ + "DELETE /repos/{owner}/{repo}/deployments/{deployment_id}" + ], + deleteDeploymentBranchPolicy: [ + "DELETE /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}" + ], + deleteFile: ["DELETE /repos/{owner}/{repo}/contents/{path}"], + deleteInvitation: [ + "DELETE /repos/{owner}/{repo}/invitations/{invitation_id}" + ], + deleteOrgRuleset: ["DELETE /orgs/{org}/rulesets/{ruleset_id}"], + deletePagesSite: ["DELETE /repos/{owner}/{repo}/pages"], + deletePullRequestReviewProtection: [ + "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews" + ], + deleteRelease: ["DELETE /repos/{owner}/{repo}/releases/{release_id}"], + deleteReleaseAsset: [ + "DELETE /repos/{owner}/{repo}/releases/assets/{asset_id}" + ], + deleteRepoRuleset: ["DELETE /repos/{owner}/{repo}/rulesets/{ruleset_id}"], + deleteWebhook: ["DELETE /repos/{owner}/{repo}/hooks/{hook_id}"], + disableAutomatedSecurityFixes: [ + "DELETE /repos/{owner}/{repo}/automated-security-fixes" + ], + disableDeploymentProtectionRule: [ + "DELETE /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/{protection_rule_id}" + ], + disableImmutableReleases: [ + "DELETE /repos/{owner}/{repo}/immutable-releases" + ], + disablePrivateVulnerabilityReporting: [ + "DELETE /repos/{owner}/{repo}/private-vulnerability-reporting" + ], + disableVulnerabilityAlerts: [ + "DELETE /repos/{owner}/{repo}/vulnerability-alerts" + ], + downloadArchive: [ + "GET /repos/{owner}/{repo}/zipball/{ref}", + {}, + { renamed: ["repos", "downloadZipballArchive"] } + ], + downloadTarballArchive: ["GET /repos/{owner}/{repo}/tarball/{ref}"], + downloadZipballArchive: ["GET /repos/{owner}/{repo}/zipball/{ref}"], + enableAutomatedSecurityFixes: [ + "PUT /repos/{owner}/{repo}/automated-security-fixes" + ], + enableImmutableReleases: ["PUT /repos/{owner}/{repo}/immutable-releases"], + enablePrivateVulnerabilityReporting: [ + "PUT /repos/{owner}/{repo}/private-vulnerability-reporting" + ], + enableVulnerabilityAlerts: [ + "PUT /repos/{owner}/{repo}/vulnerability-alerts" + ], + generateReleaseNotes: [ + "POST /repos/{owner}/{repo}/releases/generate-notes" + ], + get: ["GET /repos/{owner}/{repo}"], + getAccessRestrictions: [ + "GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions" + ], + getAdminBranchProtection: [ + "GET /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins" + ], + getAllDeploymentProtectionRules: [ + "GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules" + ], + getAllEnvironments: ["GET /repos/{owner}/{repo}/environments"], + getAllStatusCheckContexts: [ + "GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts" + ], + getAllTopics: ["GET /repos/{owner}/{repo}/topics"], + getAppsWithAccessToProtectedBranch: [ + "GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps" + ], + getAutolink: ["GET /repos/{owner}/{repo}/autolinks/{autolink_id}"], + getBranch: ["GET /repos/{owner}/{repo}/branches/{branch}"], + getBranchProtection: [ + "GET /repos/{owner}/{repo}/branches/{branch}/protection" + ], + getBranchRules: ["GET /repos/{owner}/{repo}/rules/branches/{branch}"], + getClones: ["GET /repos/{owner}/{repo}/traffic/clones"], + getCodeFrequencyStats: ["GET /repos/{owner}/{repo}/stats/code_frequency"], + getCollaboratorPermissionLevel: [ + "GET /repos/{owner}/{repo}/collaborators/{username}/permission" + ], + getCombinedStatusForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/status"], + getCommit: ["GET /repos/{owner}/{repo}/commits/{ref}"], + getCommitActivityStats: ["GET /repos/{owner}/{repo}/stats/commit_activity"], + getCommitComment: ["GET /repos/{owner}/{repo}/comments/{comment_id}"], + getCommitSignatureProtection: [ + "GET /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures" + ], + getCommunityProfileMetrics: ["GET /repos/{owner}/{repo}/community/profile"], + getContent: ["GET /repos/{owner}/{repo}/contents/{path}"], + getContributorsStats: ["GET /repos/{owner}/{repo}/stats/contributors"], + getCustomDeploymentProtectionRule: [ + "GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/{protection_rule_id}" + ], + getDeployKey: ["GET /repos/{owner}/{repo}/keys/{key_id}"], + getDeployment: ["GET /repos/{owner}/{repo}/deployments/{deployment_id}"], + getDeploymentBranchPolicy: [ + "GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}" + ], + getDeploymentStatus: [ + "GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses/{status_id}" + ], + getEnvironment: [ + "GET /repos/{owner}/{repo}/environments/{environment_name}" + ], + getLatestPagesBuild: ["GET /repos/{owner}/{repo}/pages/builds/latest"], + getLatestRelease: ["GET /repos/{owner}/{repo}/releases/latest"], + getOrgRuleSuite: ["GET /orgs/{org}/rulesets/rule-suites/{rule_suite_id}"], + getOrgRuleSuites: ["GET /orgs/{org}/rulesets/rule-suites"], + getOrgRuleset: ["GET /orgs/{org}/rulesets/{ruleset_id}"], + getOrgRulesets: ["GET /orgs/{org}/rulesets"], + getPages: ["GET /repos/{owner}/{repo}/pages"], + getPagesBuild: ["GET /repos/{owner}/{repo}/pages/builds/{build_id}"], + getPagesDeployment: [ + "GET /repos/{owner}/{repo}/pages/deployments/{pages_deployment_id}" + ], + getPagesHealthCheck: ["GET /repos/{owner}/{repo}/pages/health"], + getParticipationStats: ["GET /repos/{owner}/{repo}/stats/participation"], + getPullRequestReviewProtection: [ + "GET /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews" + ], + getPunchCardStats: ["GET /repos/{owner}/{repo}/stats/punch_card"], + getReadme: ["GET /repos/{owner}/{repo}/readme"], + getReadmeInDirectory: ["GET /repos/{owner}/{repo}/readme/{dir}"], + getRelease: ["GET /repos/{owner}/{repo}/releases/{release_id}"], + getReleaseAsset: ["GET /repos/{owner}/{repo}/releases/assets/{asset_id}"], + getReleaseByTag: ["GET /repos/{owner}/{repo}/releases/tags/{tag}"], + getRepoRuleSuite: [ + "GET /repos/{owner}/{repo}/rulesets/rule-suites/{rule_suite_id}" + ], + getRepoRuleSuites: ["GET /repos/{owner}/{repo}/rulesets/rule-suites"], + getRepoRuleset: ["GET /repos/{owner}/{repo}/rulesets/{ruleset_id}"], + getRepoRulesetHistory: [ + "GET /repos/{owner}/{repo}/rulesets/{ruleset_id}/history" + ], + getRepoRulesetVersion: [ + "GET /repos/{owner}/{repo}/rulesets/{ruleset_id}/history/{version_id}" + ], + getRepoRulesets: ["GET /repos/{owner}/{repo}/rulesets"], + getStatusChecksProtection: [ + "GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks" + ], + getTeamsWithAccessToProtectedBranch: [ + "GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams" + ], + getTopPaths: ["GET /repos/{owner}/{repo}/traffic/popular/paths"], + getTopReferrers: ["GET /repos/{owner}/{repo}/traffic/popular/referrers"], + getUsersWithAccessToProtectedBranch: [ + "GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users" + ], + getViews: ["GET /repos/{owner}/{repo}/traffic/views"], + getWebhook: ["GET /repos/{owner}/{repo}/hooks/{hook_id}"], + getWebhookConfigForRepo: [ + "GET /repos/{owner}/{repo}/hooks/{hook_id}/config" + ], + getWebhookDelivery: [ + "GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}" + ], + listActivities: ["GET /repos/{owner}/{repo}/activity"], + listAttestations: [ + "GET /repos/{owner}/{repo}/attestations/{subject_digest}" + ], + listAutolinks: ["GET /repos/{owner}/{repo}/autolinks"], + listBranches: ["GET /repos/{owner}/{repo}/branches"], + listBranchesForHeadCommit: [ + "GET /repos/{owner}/{repo}/commits/{commit_sha}/branches-where-head" + ], + listCollaborators: ["GET /repos/{owner}/{repo}/collaborators"], + listCommentsForCommit: [ + "GET /repos/{owner}/{repo}/commits/{commit_sha}/comments" + ], + listCommitCommentsForRepo: ["GET /repos/{owner}/{repo}/comments"], + listCommitStatusesForRef: [ + "GET /repos/{owner}/{repo}/commits/{ref}/statuses" + ], + listCommits: ["GET /repos/{owner}/{repo}/commits"], + listContributors: ["GET /repos/{owner}/{repo}/contributors"], + listCustomDeploymentRuleIntegrations: [ + "GET /repos/{owner}/{repo}/environments/{environment_name}/deployment_protection_rules/apps" + ], + listDeployKeys: ["GET /repos/{owner}/{repo}/keys"], + listDeploymentBranchPolicies: [ + "GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies" + ], + listDeploymentStatuses: [ + "GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses" + ], + listDeployments: ["GET /repos/{owner}/{repo}/deployments"], + listForAuthenticatedUser: ["GET /user/repos"], + listForOrg: ["GET /orgs/{org}/repos"], + listForUser: ["GET /users/{username}/repos"], + listForks: ["GET /repos/{owner}/{repo}/forks"], + listInvitations: ["GET /repos/{owner}/{repo}/invitations"], + listInvitationsForAuthenticatedUser: ["GET /user/repository_invitations"], + listLanguages: ["GET /repos/{owner}/{repo}/languages"], + listPagesBuilds: ["GET /repos/{owner}/{repo}/pages/builds"], + listPublic: ["GET /repositories"], + listPullRequestsAssociatedWithCommit: [ + "GET /repos/{owner}/{repo}/commits/{commit_sha}/pulls" + ], + listReleaseAssets: [ + "GET /repos/{owner}/{repo}/releases/{release_id}/assets" + ], + listReleases: ["GET /repos/{owner}/{repo}/releases"], + listTags: ["GET /repos/{owner}/{repo}/tags"], + listTeams: ["GET /repos/{owner}/{repo}/teams"], + listWebhookDeliveries: [ + "GET /repos/{owner}/{repo}/hooks/{hook_id}/deliveries" + ], + listWebhooks: ["GET /repos/{owner}/{repo}/hooks"], + merge: ["POST /repos/{owner}/{repo}/merges"], + mergeUpstream: ["POST /repos/{owner}/{repo}/merge-upstream"], + pingWebhook: ["POST /repos/{owner}/{repo}/hooks/{hook_id}/pings"], + redeliverWebhookDelivery: [ + "POST /repos/{owner}/{repo}/hooks/{hook_id}/deliveries/{delivery_id}/attempts" + ], + removeAppAccessRestrictions: [ + "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps", + {}, + { mapToData: "apps" } + ], + removeCollaborator: [ + "DELETE /repos/{owner}/{repo}/collaborators/{username}" + ], + removeStatusCheckContexts: [ + "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts", + {}, + { mapToData: "contexts" } + ], + removeStatusCheckProtection: [ + "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks" + ], + removeTeamAccessRestrictions: [ + "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams", + {}, + { mapToData: "teams" } + ], + removeUserAccessRestrictions: [ + "DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users", + {}, + { mapToData: "users" } + ], + renameBranch: ["POST /repos/{owner}/{repo}/branches/{branch}/rename"], + replaceAllTopics: ["PUT /repos/{owner}/{repo}/topics"], + requestPagesBuild: ["POST /repos/{owner}/{repo}/pages/builds"], + setAdminBranchProtection: [ + "POST /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins" + ], + setAppAccessRestrictions: [ + "PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps", + {}, + { mapToData: "apps" } + ], + setStatusCheckContexts: [ + "PUT /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts", + {}, + { mapToData: "contexts" } + ], + setTeamAccessRestrictions: [ + "PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams", + {}, + { mapToData: "teams" } + ], + setUserAccessRestrictions: [ + "PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users", + {}, + { mapToData: "users" } + ], + testPushWebhook: ["POST /repos/{owner}/{repo}/hooks/{hook_id}/tests"], + transfer: ["POST /repos/{owner}/{repo}/transfer"], + update: ["PATCH /repos/{owner}/{repo}"], + updateBranchProtection: [ + "PUT /repos/{owner}/{repo}/branches/{branch}/protection" + ], + updateCommitComment: ["PATCH /repos/{owner}/{repo}/comments/{comment_id}"], + updateDeploymentBranchPolicy: [ + "PUT /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}" + ], + updateInformationAboutPagesSite: ["PUT /repos/{owner}/{repo}/pages"], + updateInvitation: [ + "PATCH /repos/{owner}/{repo}/invitations/{invitation_id}" + ], + updateOrgRuleset: ["PUT /orgs/{org}/rulesets/{ruleset_id}"], + updatePullRequestReviewProtection: [ + "PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews" + ], + updateRelease: ["PATCH /repos/{owner}/{repo}/releases/{release_id}"], + updateReleaseAsset: [ + "PATCH /repos/{owner}/{repo}/releases/assets/{asset_id}" + ], + updateRepoRuleset: ["PUT /repos/{owner}/{repo}/rulesets/{ruleset_id}"], + updateStatusCheckPotection: [ + "PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks", + {}, + { renamed: ["repos", "updateStatusCheckProtection"] } + ], + updateStatusCheckProtection: [ + "PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks" + ], + updateWebhook: ["PATCH /repos/{owner}/{repo}/hooks/{hook_id}"], + updateWebhookConfigForRepo: [ + "PATCH /repos/{owner}/{repo}/hooks/{hook_id}/config" + ], + uploadReleaseAsset: [ + "POST /repos/{owner}/{repo}/releases/{release_id}/assets{?name,label}", + { baseUrl: "https://uploads.github.com" } + ] + }, + search: { + code: ["GET /search/code"], + commits: ["GET /search/commits"], + issuesAndPullRequests: ["GET /search/issues"], + labels: ["GET /search/labels"], + repos: ["GET /search/repositories"], + topics: ["GET /search/topics"], + users: ["GET /search/users"] + }, + secretScanning: { + createPushProtectionBypass: [ + "POST /repos/{owner}/{repo}/secret-scanning/push-protection-bypasses" + ], + getAlert: [ + "GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}" + ], + getScanHistory: ["GET /repos/{owner}/{repo}/secret-scanning/scan-history"], + listAlertsForOrg: ["GET /orgs/{org}/secret-scanning/alerts"], + listAlertsForRepo: ["GET /repos/{owner}/{repo}/secret-scanning/alerts"], + listLocationsForAlert: [ + "GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}/locations" + ], + listOrgPatternConfigs: [ + "GET /orgs/{org}/secret-scanning/pattern-configurations" + ], + updateAlert: [ + "PATCH /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}" + ], + updateOrgPatternConfigs: [ + "PATCH /orgs/{org}/secret-scanning/pattern-configurations" + ] + }, + securityAdvisories: { + createFork: [ + "POST /repos/{owner}/{repo}/security-advisories/{ghsa_id}/forks" + ], + createPrivateVulnerabilityReport: [ + "POST /repos/{owner}/{repo}/security-advisories/reports" + ], + createRepositoryAdvisory: [ + "POST /repos/{owner}/{repo}/security-advisories" + ], + createRepositoryAdvisoryCveRequest: [ + "POST /repos/{owner}/{repo}/security-advisories/{ghsa_id}/cve" + ], + getGlobalAdvisory: ["GET /advisories/{ghsa_id}"], + getRepositoryAdvisory: [ + "GET /repos/{owner}/{repo}/security-advisories/{ghsa_id}" + ], + listGlobalAdvisories: ["GET /advisories"], + listOrgRepositoryAdvisories: ["GET /orgs/{org}/security-advisories"], + listRepositoryAdvisories: ["GET /repos/{owner}/{repo}/security-advisories"], + updateRepositoryAdvisory: [ + "PATCH /repos/{owner}/{repo}/security-advisories/{ghsa_id}" + ] + }, + teams: { + addOrUpdateMembershipForUserInOrg: [ + "PUT /orgs/{org}/teams/{team_slug}/memberships/{username}" + ], + addOrUpdateRepoPermissionsInOrg: [ + "PUT /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}" + ], + checkPermissionsForRepoInOrg: [ + "GET /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}" + ], + create: ["POST /orgs/{org}/teams"], + createDiscussionCommentInOrg: [ + "POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments" + ], + createDiscussionInOrg: ["POST /orgs/{org}/teams/{team_slug}/discussions"], + deleteDiscussionCommentInOrg: [ + "DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}" + ], + deleteDiscussionInOrg: [ + "DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}" + ], + deleteInOrg: ["DELETE /orgs/{org}/teams/{team_slug}"], + getByName: ["GET /orgs/{org}/teams/{team_slug}"], + getDiscussionCommentInOrg: [ + "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}" + ], + getDiscussionInOrg: [ + "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}" + ], + getMembershipForUserInOrg: [ + "GET /orgs/{org}/teams/{team_slug}/memberships/{username}" + ], + list: ["GET /orgs/{org}/teams"], + listChildInOrg: ["GET /orgs/{org}/teams/{team_slug}/teams"], + listDiscussionCommentsInOrg: [ + "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments" + ], + listDiscussionsInOrg: ["GET /orgs/{org}/teams/{team_slug}/discussions"], + listForAuthenticatedUser: ["GET /user/teams"], + listMembersInOrg: ["GET /orgs/{org}/teams/{team_slug}/members"], + listPendingInvitationsInOrg: [ + "GET /orgs/{org}/teams/{team_slug}/invitations" + ], + listReposInOrg: ["GET /orgs/{org}/teams/{team_slug}/repos"], + removeMembershipForUserInOrg: [ + "DELETE /orgs/{org}/teams/{team_slug}/memberships/{username}" + ], + removeRepoInOrg: [ + "DELETE /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}" + ], + updateDiscussionCommentInOrg: [ + "PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}" + ], + updateDiscussionInOrg: [ + "PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}" + ], + updateInOrg: ["PATCH /orgs/{org}/teams/{team_slug}"] + }, + users: { + addEmailForAuthenticated: [ + "POST /user/emails", + {}, + { renamed: ["users", "addEmailForAuthenticatedUser"] } + ], + addEmailForAuthenticatedUser: ["POST /user/emails"], + addSocialAccountForAuthenticatedUser: ["POST /user/social_accounts"], + block: ["PUT /user/blocks/{username}"], + checkBlocked: ["GET /user/blocks/{username}"], + checkFollowingForUser: ["GET /users/{username}/following/{target_user}"], + checkPersonIsFollowedByAuthenticated: ["GET /user/following/{username}"], + createGpgKeyForAuthenticated: [ + "POST /user/gpg_keys", + {}, + { renamed: ["users", "createGpgKeyForAuthenticatedUser"] } + ], + createGpgKeyForAuthenticatedUser: ["POST /user/gpg_keys"], + createPublicSshKeyForAuthenticated: [ + "POST /user/keys", + {}, + { renamed: ["users", "createPublicSshKeyForAuthenticatedUser"] } + ], + createPublicSshKeyForAuthenticatedUser: ["POST /user/keys"], + createSshSigningKeyForAuthenticatedUser: ["POST /user/ssh_signing_keys"], + deleteAttestationsBulk: [ + "POST /users/{username}/attestations/delete-request" + ], + deleteAttestationsById: [ + "DELETE /users/{username}/attestations/{attestation_id}" + ], + deleteAttestationsBySubjectDigest: [ + "DELETE /users/{username}/attestations/digest/{subject_digest}" + ], + deleteEmailForAuthenticated: [ + "DELETE /user/emails", + {}, + { renamed: ["users", "deleteEmailForAuthenticatedUser"] } + ], + deleteEmailForAuthenticatedUser: ["DELETE /user/emails"], + deleteGpgKeyForAuthenticated: [ + "DELETE /user/gpg_keys/{gpg_key_id}", + {}, + { renamed: ["users", "deleteGpgKeyForAuthenticatedUser"] } + ], + deleteGpgKeyForAuthenticatedUser: ["DELETE /user/gpg_keys/{gpg_key_id}"], + deletePublicSshKeyForAuthenticated: [ + "DELETE /user/keys/{key_id}", + {}, + { renamed: ["users", "deletePublicSshKeyForAuthenticatedUser"] } + ], + deletePublicSshKeyForAuthenticatedUser: ["DELETE /user/keys/{key_id}"], + deleteSocialAccountForAuthenticatedUser: ["DELETE /user/social_accounts"], + deleteSshSigningKeyForAuthenticatedUser: [ + "DELETE /user/ssh_signing_keys/{ssh_signing_key_id}" + ], + follow: ["PUT /user/following/{username}"], + getAuthenticated: ["GET /user"], + getById: ["GET /user/{account_id}"], + getByUsername: ["GET /users/{username}"], + getContextForUser: ["GET /users/{username}/hovercard"], + getGpgKeyForAuthenticated: [ + "GET /user/gpg_keys/{gpg_key_id}", + {}, + { renamed: ["users", "getGpgKeyForAuthenticatedUser"] } + ], + getGpgKeyForAuthenticatedUser: ["GET /user/gpg_keys/{gpg_key_id}"], + getPublicSshKeyForAuthenticated: [ + "GET /user/keys/{key_id}", + {}, + { renamed: ["users", "getPublicSshKeyForAuthenticatedUser"] } + ], + getPublicSshKeyForAuthenticatedUser: ["GET /user/keys/{key_id}"], + getSshSigningKeyForAuthenticatedUser: [ + "GET /user/ssh_signing_keys/{ssh_signing_key_id}" + ], + list: ["GET /users"], + listAttestations: ["GET /users/{username}/attestations/{subject_digest}"], + listAttestationsBulk: [ + "POST /users/{username}/attestations/bulk-list{?per_page,before,after}" + ], + listBlockedByAuthenticated: [ + "GET /user/blocks", + {}, + { renamed: ["users", "listBlockedByAuthenticatedUser"] } + ], + listBlockedByAuthenticatedUser: ["GET /user/blocks"], + listEmailsForAuthenticated: [ + "GET /user/emails", + {}, + { renamed: ["users", "listEmailsForAuthenticatedUser"] } + ], + listEmailsForAuthenticatedUser: ["GET /user/emails"], + listFollowedByAuthenticated: [ + "GET /user/following", + {}, + { renamed: ["users", "listFollowedByAuthenticatedUser"] } + ], + listFollowedByAuthenticatedUser: ["GET /user/following"], + listFollowersForAuthenticatedUser: ["GET /user/followers"], + listFollowersForUser: ["GET /users/{username}/followers"], + listFollowingForUser: ["GET /users/{username}/following"], + listGpgKeysForAuthenticated: [ + "GET /user/gpg_keys", + {}, + { renamed: ["users", "listGpgKeysForAuthenticatedUser"] } + ], + listGpgKeysForAuthenticatedUser: ["GET /user/gpg_keys"], + listGpgKeysForUser: ["GET /users/{username}/gpg_keys"], + listPublicEmailsForAuthenticated: [ + "GET /user/public_emails", + {}, + { renamed: ["users", "listPublicEmailsForAuthenticatedUser"] } + ], + listPublicEmailsForAuthenticatedUser: ["GET /user/public_emails"], + listPublicKeysForUser: ["GET /users/{username}/keys"], + listPublicSshKeysForAuthenticated: [ + "GET /user/keys", + {}, + { renamed: ["users", "listPublicSshKeysForAuthenticatedUser"] } + ], + listPublicSshKeysForAuthenticatedUser: ["GET /user/keys"], + listSocialAccountsForAuthenticatedUser: ["GET /user/social_accounts"], + listSocialAccountsForUser: ["GET /users/{username}/social_accounts"], + listSshSigningKeysForAuthenticatedUser: ["GET /user/ssh_signing_keys"], + listSshSigningKeysForUser: ["GET /users/{username}/ssh_signing_keys"], + setPrimaryEmailVisibilityForAuthenticated: [ + "PATCH /user/email/visibility", + {}, + { renamed: ["users", "setPrimaryEmailVisibilityForAuthenticatedUser"] } + ], + setPrimaryEmailVisibilityForAuthenticatedUser: [ + "PATCH /user/email/visibility" + ], + unblock: ["DELETE /user/blocks/{username}"], + unfollow: ["DELETE /user/following/{username}"], + updateAuthenticated: ["PATCH /user"] + } +}; +var endpoints_default = Endpoints; + +// +var endpointMethodsMap = /* @__PURE__ */ new Map(); +for (const [scope, endpoints] of Object.entries(endpoints_default)) { + for (const [methodName, endpoint2] of Object.entries(endpoints)) { + const [route, defaults2, decorations] = endpoint2; + const [method, url] = route.split(/ /); + const endpointDefaults = Object.assign( + { + method, + url + }, + defaults2 + ); + if (!endpointMethodsMap.has(scope)) { + endpointMethodsMap.set(scope, /* @__PURE__ */ new Map()); + } + endpointMethodsMap.get(scope).set(methodName, { + scope, + methodName, + endpointDefaults, + decorations + }); + } +} +var handler = { + has({ scope }, methodName) { + return endpointMethodsMap.get(scope).has(methodName); + }, + getOwnPropertyDescriptor(target, methodName) { + return { + value: this.get(target, methodName), + // ensures method is in the cache + configurable: true, + writable: true, + enumerable: true + }; + }, + defineProperty(target, methodName, descriptor) { + Object.defineProperty(target.cache, methodName, descriptor); + return true; + }, + deleteProperty(target, methodName) { + delete target.cache[methodName]; + return true; + }, + ownKeys({ scope }) { + return [...endpointMethodsMap.get(scope).keys()]; + }, + set(target, methodName, value) { + return target.cache[methodName] = value; + }, + get({ octokit, scope, cache }, methodName) { + if (cache[methodName]) { + return cache[methodName]; + } + const method = endpointMethodsMap.get(scope).get(methodName); + if (!method) { + return void 0; + } + const { endpointDefaults, decorations } = method; + if (decorations) { + cache[methodName] = decorate( + octokit, + scope, + methodName, + endpointDefaults, + decorations + ); + } else { + cache[methodName] = octokit.request.defaults(endpointDefaults); + } + return cache[methodName]; + } +}; +function endpointsToMethods(octokit) { + const newMethods = {}; + for (const scope of endpointMethodsMap.keys()) { + newMethods[scope] = new Proxy({ octokit, scope, cache: {} }, handler); + } + return newMethods; +} +function decorate(octokit, scope, methodName, defaults2, decorations) { + const requestWithDefaults = octokit.request.defaults(defaults2); + function withDecorations(...args) { + let options = requestWithDefaults.endpoint.merge(...args); + if (decorations.mapToData) { + options = Object.assign({}, options, { + data: options[decorations.mapToData], + [decorations.mapToData]: void 0 + }); + return requestWithDefaults(options); + } + if (decorations.renamed) { + const [newScope, newMethodName] = decorations.renamed; + octokit.log.warn( + `octokit.${scope}.${methodName}() has been renamed to octokit.${newScope}.${newMethodName}()` + ); + } + if (decorations.deprecated) { + octokit.log.warn(decorations.deprecated); + } + if (decorations.renamedParameters) { + const options2 = requestWithDefaults.endpoint.merge(...args); + for (const [name, alias] of Object.entries( + decorations.renamedParameters + )) { + if (name in options2) { + octokit.log.warn( + `"${name}" parameter is deprecated for "octokit.${scope}.${methodName}()". Use "${alias}" instead` + ); + if (!(alias in options2)) { + options2[alias] = options2[name]; + } + delete options2[name]; + } + } + return requestWithDefaults(options2); + } + return requestWithDefaults(...args); + } + return Object.assign(withDecorations, requestWithDefaults); +} + +// +function restEndpointMethods(octokit) { + const api = endpointsToMethods(octokit); + return { + rest: api + }; +} +restEndpointMethods.VERSION = VERSION5; +function legacyRestEndpointMethods(octokit) { + const api = endpointsToMethods(octokit); + return { + ...api, + rest: api + }; +} +legacyRestEndpointMethods.VERSION = VERSION5; + +// +var VERSION6 = "0.0.0-development"; +function normalizePaginatedListResponse(response) { + if (!response.data) { + return { + ...response, + data: [] + }; + } + const responseNeedsNormalization = ("total_count" in response.data || "total_commits" in response.data) && !("url" in response.data); + if (!responseNeedsNormalization) + return response; + const incompleteResults = response.data.incomplete_results; + const repositorySelection = response.data.repository_selection; + const totalCount = response.data.total_count; + const totalCommits = response.data.total_commits; + delete response.data.incomplete_results; + delete response.data.repository_selection; + delete response.data.total_count; + delete response.data.total_commits; + const namespaceKey = Object.keys(response.data)[0]; + const data = response.data[namespaceKey]; + response.data = data; + if (typeof incompleteResults !== "undefined") { + response.data.incomplete_results = incompleteResults; + } + if (typeof repositorySelection !== "undefined") { + response.data.repository_selection = repositorySelection; + } + response.data.total_count = totalCount; + response.data.total_commits = totalCommits; + return response; +} +function iterator(octokit, route, parameters) { + const options = typeof route === "function" ? route.endpoint(parameters) : octokit.request.endpoint(route, parameters); + const requestMethod = typeof route === "function" ? route : octokit.request; + const method = options.method; + const headers = options.headers; + let url = options.url; + return { + [Symbol.asyncIterator]: () => ({ + async next() { + if (!url) + return { done: true }; + try { + const response = await requestMethod({ method, url, headers }); + const normalizedResponse = normalizePaginatedListResponse(response); + url = ((normalizedResponse.headers.link || "").match( + /<([^<>]+)>;\s*rel="next"/ + ) || [])[1]; + if (!url && "total_commits" in normalizedResponse.data) { + const parsedUrl = new URL(normalizedResponse.url); + const params = parsedUrl.searchParams; + const page = parseInt(params.get("page") || "1", 10); + const per_page = parseInt(params.get("per_page") || "250", 10); + if (page * per_page < normalizedResponse.data.total_commits) { + params.set("page", String(page + 1)); + url = parsedUrl.toString(); + } + } + return { value: normalizedResponse }; + } catch (error2) { + if (error2.status !== 409) + throw error2; + url = ""; + return { + value: { + status: 200, + headers: {}, + data: [] + } + }; + } + } + }) + }; +} +function paginate(octokit, route, parameters, mapFn) { + if (typeof parameters === "function") { + mapFn = parameters; + parameters = void 0; + } + return gather( + octokit, + [], + iterator(octokit, route, parameters)[Symbol.asyncIterator](), + mapFn + ); +} +function gather(octokit, results, iterator2, mapFn) { + return iterator2.next().then((result) => { + if (result.done) { + return results; + } + let earlyExit = false; + function done() { + earlyExit = true; + } + results = results.concat( + mapFn ? mapFn(result.value, done) : result.value.data + ); + if (earlyExit) { + return results; + } + return gather(octokit, results, iterator2, mapFn); + }); +} +var composePaginateRest = Object.assign(paginate, { + iterator +}); +function paginateRest(octokit) { + return { + paginate: Object.assign(paginate.bind(null, octokit), { + iterator: iterator.bind(null, octokit) + }) + }; +} +paginateRest.VERSION = VERSION6; + +// +var context = new Context(); +var baseUrl = getApiBaseUrl(); +var defaults = { + baseUrl, + request: { + agent: getProxyAgent(baseUrl), + fetch: getProxyFetch(baseUrl) + } +}; +var GitHub = Octokit.plugin(restEndpointMethods, paginateRest).defaults(defaults); + +// +var context2 = new Context(); + +// +var HarmCategory; +(function(HarmCategory2) { + HarmCategory2["HARM_CATEGORY_UNSPECIFIED"] = "HARM_CATEGORY_UNSPECIFIED"; + HarmCategory2["HARM_CATEGORY_HATE_SPEECH"] = "HARM_CATEGORY_HATE_SPEECH"; + HarmCategory2["HARM_CATEGORY_SEXUALLY_EXPLICIT"] = "HARM_CATEGORY_SEXUALLY_EXPLICIT"; + HarmCategory2["HARM_CATEGORY_HARASSMENT"] = "HARM_CATEGORY_HARASSMENT"; + HarmCategory2["HARM_CATEGORY_DANGEROUS_CONTENT"] = "HARM_CATEGORY_DANGEROUS_CONTENT"; +})(HarmCategory || (HarmCategory = {})); +var HarmBlockThreshold; +(function(HarmBlockThreshold2) { + HarmBlockThreshold2["HARM_BLOCK_THRESHOLD_UNSPECIFIED"] = "HARM_BLOCK_THRESHOLD_UNSPECIFIED"; + HarmBlockThreshold2["BLOCK_LOW_AND_ABOVE"] = "BLOCK_LOW_AND_ABOVE"; + HarmBlockThreshold2["BLOCK_MEDIUM_AND_ABOVE"] = "BLOCK_MEDIUM_AND_ABOVE"; + HarmBlockThreshold2["BLOCK_ONLY_HIGH"] = "BLOCK_ONLY_HIGH"; + HarmBlockThreshold2["BLOCK_NONE"] = "BLOCK_NONE"; +})(HarmBlockThreshold || (HarmBlockThreshold = {})); +var HarmProbability; +(function(HarmProbability2) { + HarmProbability2["HARM_PROBABILITY_UNSPECIFIED"] = "HARM_PROBABILITY_UNSPECIFIED"; + HarmProbability2["NEGLIGIBLE"] = "NEGLIGIBLE"; + HarmProbability2["LOW"] = "LOW"; + HarmProbability2["MEDIUM"] = "MEDIUM"; + HarmProbability2["HIGH"] = "HIGH"; +})(HarmProbability || (HarmProbability = {})); +var BlockReason; +(function(BlockReason2) { + BlockReason2["BLOCKED_REASON_UNSPECIFIED"] = "BLOCKED_REASON_UNSPECIFIED"; + BlockReason2["SAFETY"] = "SAFETY"; + BlockReason2["OTHER"] = "OTHER"; +})(BlockReason || (BlockReason = {})); +var FinishReason; +(function(FinishReason2) { + FinishReason2["FINISH_REASON_UNSPECIFIED"] = "FINISH_REASON_UNSPECIFIED"; + FinishReason2["STOP"] = "STOP"; + FinishReason2["MAX_TOKENS"] = "MAX_TOKENS"; + FinishReason2["SAFETY"] = "SAFETY"; + FinishReason2["RECITATION"] = "RECITATION"; + FinishReason2["OTHER"] = "OTHER"; +})(FinishReason || (FinishReason = {})); +var TaskType; +(function(TaskType2) { + TaskType2["TASK_TYPE_UNSPECIFIED"] = "TASK_TYPE_UNSPECIFIED"; + TaskType2["RETRIEVAL_QUERY"] = "RETRIEVAL_QUERY"; + TaskType2["RETRIEVAL_DOCUMENT"] = "RETRIEVAL_DOCUMENT"; + TaskType2["SEMANTIC_SIMILARITY"] = "SEMANTIC_SIMILARITY"; + TaskType2["CLASSIFICATION"] = "CLASSIFICATION"; + TaskType2["CLUSTERING"] = "CLUSTERING"; +})(TaskType || (TaskType = {})); +var GoogleGenerativeAIError = class extends Error { + constructor(message) { + super(`[GoogleGenerativeAI Error]: ${message}`); + } +}; +var GoogleGenerativeAIResponseError = class extends GoogleGenerativeAIError { + constructor(message, response) { + super(message); + this.response = response; + } +}; +var BASE_URL = "https://generativelanguage.googleapis.com"; +var API_VERSION = "v1"; +var PACKAGE_VERSION = "0.2.1"; +var PACKAGE_LOG_HEADER = "genai-js"; +var Task; +(function(Task2) { + Task2["GENERATE_CONTENT"] = "generateContent"; + Task2["STREAM_GENERATE_CONTENT"] = "streamGenerateContent"; + Task2["COUNT_TOKENS"] = "countTokens"; + Task2["EMBED_CONTENT"] = "embedContent"; + Task2["BATCH_EMBED_CONTENTS"] = "batchEmbedContents"; +})(Task || (Task = {})); +var RequestUrl = class { + constructor(model, task, apiKey, stream) { + this.model = model; + this.task = task; + this.apiKey = apiKey; + this.stream = stream; + } + toString() { + let url = `${BASE_URL}/${API_VERSION}/${this.model}:${this.task}`; + if (this.stream) { + url += "?alt=sse"; + } + return url; + } +}; +function getClientHeaders() { + return `${PACKAGE_LOG_HEADER}/${PACKAGE_VERSION}`; +} +async function makeRequest(url, body, requestOptions) { + let response; + try { + response = await fetch(url.toString(), Object.assign(Object.assign({}, buildFetchOptions(requestOptions)), { method: "POST", headers: { + "Content-Type": "application/json", + "x-goog-api-client": getClientHeaders(), + "x-goog-api-key": url.apiKey + }, body })); + if (!response.ok) { + let message = ""; + try { + const json = await response.json(); + message = json.error.message; + if (json.error.details) { + message += ` ${JSON.stringify(json.error.details)}`; + } + } catch (e) { + } + throw new Error(`[${response.status} ${response.statusText}] ${message}`); + } + } catch (e) { + const err = new GoogleGenerativeAIError(`Error fetching from ${url.toString()}: ${e.message}`); + err.stack = e.stack; + throw err; + } + return response; +} +function buildFetchOptions(requestOptions) { + const fetchOptions = {}; + if ((requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.timeout) >= 0) { + const abortController = new AbortController(); + const signal = abortController.signal; + setTimeout(() => abortController.abort(), requestOptions.timeout); + fetchOptions.signal = signal; + } + return fetchOptions; +} +function addHelpers(response) { + response.text = () => { + if (response.candidates && response.candidates.length > 0) { + if (response.candidates.length > 1) { + console.warn(`This response had ${response.candidates.length} candidates. Returning text from the first candidate only. Access response.candidates directly to use the other candidates.`); + } + if (hadBadFinishReason(response.candidates[0])) { + throw new GoogleGenerativeAIResponseError(`${formatBlockErrorMessage(response)}`, response); + } + return getText(response); + } else if (response.promptFeedback) { + throw new GoogleGenerativeAIResponseError(`Text not available. ${formatBlockErrorMessage(response)}`, response); + } + return ""; + }; + return response; +} +function getText(response) { + var _a2, _b, _c, _d; + if ((_d = (_c = (_b = (_a2 = response.candidates) === null || _a2 === void 0 ? void 0 : _a2[0].content) === null || _b === void 0 ? void 0 : _b.parts) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.text) { + return response.candidates[0].content.parts[0].text; + } else { + return ""; + } +} +var badFinishReasons = [FinishReason.RECITATION, FinishReason.SAFETY]; +function hadBadFinishReason(candidate) { + return !!candidate.finishReason && badFinishReasons.includes(candidate.finishReason); +} +function formatBlockErrorMessage(response) { + var _a2, _b, _c; + let message = ""; + if ((!response.candidates || response.candidates.length === 0) && response.promptFeedback) { + message += "Response was blocked"; + if ((_a2 = response.promptFeedback) === null || _a2 === void 0 ? void 0 : _a2.blockReason) { + message += ` due to ${response.promptFeedback.blockReason}`; + } + if ((_b = response.promptFeedback) === null || _b === void 0 ? void 0 : _b.blockReasonMessage) { + message += `: ${response.promptFeedback.blockReasonMessage}`; + } + } else if ((_c = response.candidates) === null || _c === void 0 ? void 0 : _c[0]) { + const firstCandidate = response.candidates[0]; + if (hadBadFinishReason(firstCandidate)) { + message += `Candidate was blocked due to ${firstCandidate.finishReason}`; + if (firstCandidate.finishMessage) { + message += `: ${firstCandidate.finishMessage}`; + } + } + } + return message; +} +function __await(v) { + return this instanceof __await ? (this.v = v, this) : new __await(v); +} +function __asyncGenerator(thisArg, _arguments, generator) { + if (!Symbol.asyncIterator) + throw new TypeError("Symbol.asyncIterator is not defined."); + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function() { + return this; + }, i; + function verb(n) { + if (g[n]) + i[n] = function(v) { + return new Promise(function(a, b) { + q.push([n, v, a, b]) > 1 || resume(n, v); + }); + }; + } + function resume(n, v) { + try { + step(g[n](v)); + } catch (e) { + settle(q[0][3], e); + } + } + function step(r) { + r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); + } + function fulfill(value) { + resume("next", value); + } + function reject(value) { + resume("throw", value); + } + function settle(f, v) { + if (f(v), q.shift(), q.length) + resume(q[0][0], q[0][1]); + } +} +var responseLineRE = /^data\: (.*)(?:\n\n|\r\r|\r\n\r\n)/; +function processStream(response) { + const inputStream = response.body.pipeThrough(new TextDecoderStream("utf8", { fatal: true })); + const responseStream = getResponseStream(inputStream); + const [stream1, stream2] = responseStream.tee(); + return { + stream: generateResponseSequence(stream1), + response: getResponsePromise(stream2) + }; +} +async function getResponsePromise(stream) { + const allResponses = []; + const reader = stream.getReader(); + while (true) { + const { done, value } = await reader.read(); + if (done) { + return addHelpers(aggregateResponses(allResponses)); + } + allResponses.push(value); + } +} +function generateResponseSequence(stream) { + return __asyncGenerator(this, arguments, function* generateResponseSequence_1() { + const reader = stream.getReader(); + while (true) { + const { value, done } = yield __await(reader.read()); + if (done) { + break; + } + yield yield __await(addHelpers(value)); + } + }); +} +function getResponseStream(inputStream) { + const reader = inputStream.getReader(); + const stream = new ReadableStream({ + start(controller) { + let currentText = ""; + return pump(); + function pump() { + return reader.read().then(({ value, done }) => { + if (done) { + if (currentText.trim()) { + controller.error(new GoogleGenerativeAIError("Failed to parse stream")); + return; + } + controller.close(); + return; + } + currentText += value; + let match = currentText.match(responseLineRE); + let parsedResponse; + while (match) { + try { + parsedResponse = JSON.parse(match[1]); + } catch (e) { + controller.error(new GoogleGenerativeAIError(`Error parsing JSON response: "${match[1]}"`)); + return; + } + controller.enqueue(parsedResponse); + currentText = currentText.substring(match[0].length); + match = currentText.match(responseLineRE); + } + return pump(); + }); + } + } + }); + return stream; +} +function aggregateResponses(responses) { + const lastResponse = responses[responses.length - 1]; + const aggregatedResponse = { + promptFeedback: lastResponse === null || lastResponse === void 0 ? void 0 : lastResponse.promptFeedback + }; + for (const response of responses) { + if (response.candidates) { + for (const candidate of response.candidates) { + const i = candidate.index; + if (!aggregatedResponse.candidates) { + aggregatedResponse.candidates = []; + } + if (!aggregatedResponse.candidates[i]) { + aggregatedResponse.candidates[i] = { + index: candidate.index + }; + } + aggregatedResponse.candidates[i].citationMetadata = candidate.citationMetadata; + aggregatedResponse.candidates[i].finishReason = candidate.finishReason; + aggregatedResponse.candidates[i].finishMessage = candidate.finishMessage; + aggregatedResponse.candidates[i].safetyRatings = candidate.safetyRatings; + if (candidate.content && candidate.content.parts) { + if (!aggregatedResponse.candidates[i].content) { + aggregatedResponse.candidates[i].content = { + role: candidate.content.role || "user", + parts: [{ text: "" }] + }; + } + for (const part of candidate.content.parts) { + if (part.text) { + aggregatedResponse.candidates[i].content.parts[0].text += part.text; + } + } + } + } + } + } + return aggregatedResponse; +} +async function generateContentStream(apiKey, model, params, requestOptions) { + const url = new RequestUrl( + model, + Task.STREAM_GENERATE_CONTENT, + apiKey, + /* stream */ + true + ); + const response = await makeRequest(url, JSON.stringify(params), requestOptions); + return processStream(response); +} +async function generateContent(apiKey, model, params, requestOptions) { + const url = new RequestUrl( + model, + Task.GENERATE_CONTENT, + apiKey, + /* stream */ + false + ); + const response = await makeRequest(url, JSON.stringify(params), requestOptions); + const responseJson = await response.json(); + const enhancedResponse = addHelpers(responseJson); + return { + response: enhancedResponse + }; +} +function formatNewContent(request2, role) { + let newParts = []; + if (typeof request2 === "string") { + newParts = [{ text: request2 }]; + } else { + for (const partOrString of request2) { + if (typeof partOrString === "string") { + newParts.push({ text: partOrString }); + } else { + newParts.push(partOrString); + } + } + } + return { role, parts: newParts }; +} +function formatGenerateContentInput(params) { + if (params.contents) { + return params; + } else { + const content = formatNewContent(params, "user"); + return { contents: [content] }; + } +} +function formatEmbedContentInput(params) { + if (typeof params === "string" || Array.isArray(params)) { + const content = formatNewContent(params, "user"); + return { content }; + } + return params; +} +var SILENT_ERROR = "SILENT_ERROR"; +var ChatSession = class { + constructor(apiKey, model, params, requestOptions) { + this.model = model; + this.params = params; + this.requestOptions = requestOptions; + this._history = []; + this._sendPromise = Promise.resolve(); + this._apiKey = apiKey; + if (params === null || params === void 0 ? void 0 : params.history) { + this._history = params.history.map((content) => { + if (!content.role) { + throw new Error("Missing role for history item: " + JSON.stringify(content)); + } + return formatNewContent(content.parts, content.role); + }); + } + } + /** + * Gets the chat history so far. Blocked prompts are not added to history. + * Blocked candidates are not added to history, nor are the prompts that + * generated them. + */ + async getHistory() { + await this._sendPromise; + return this._history; + } + /** + * Sends a chat message and receives a non-streaming + * {@link GenerateContentResult} + */ + async sendMessage(request2) { + var _a2, _b; + await this._sendPromise; + const newContent = formatNewContent(request2, "user"); + const generateContentRequest = { + safetySettings: (_a2 = this.params) === null || _a2 === void 0 ? void 0 : _a2.safetySettings, + generationConfig: (_b = this.params) === null || _b === void 0 ? void 0 : _b.generationConfig, + contents: [...this._history, newContent] + }; + let finalResult; + this._sendPromise = this._sendPromise.then(() => generateContent(this._apiKey, this.model, generateContentRequest, this.requestOptions)).then((result) => { + var _a3; + if (result.response.candidates && result.response.candidates.length > 0) { + this._history.push(newContent); + const responseContent = Object.assign({ + parts: [], + // Response seems to come back without a role set. + role: "model" + }, (_a3 = result.response.candidates) === null || _a3 === void 0 ? void 0 : _a3[0].content); + this._history.push(responseContent); + } else { + const blockErrorMessage = formatBlockErrorMessage(result.response); + if (blockErrorMessage) { + console.warn(`sendMessage() was unsuccessful. ${blockErrorMessage}. Inspect response object for details.`); + } + } + finalResult = result; + }); + await this._sendPromise; + return finalResult; + } + /** + * Sends a chat message and receives the response as a + * {@link GenerateContentStreamResult} containing an iterable stream + * and a response promise. + */ + async sendMessageStream(request2) { + var _a2, _b; + await this._sendPromise; + const newContent = formatNewContent(request2, "user"); + const generateContentRequest = { + safetySettings: (_a2 = this.params) === null || _a2 === void 0 ? void 0 : _a2.safetySettings, + generationConfig: (_b = this.params) === null || _b === void 0 ? void 0 : _b.generationConfig, + contents: [...this._history, newContent] + }; + const streamPromise = generateContentStream(this._apiKey, this.model, generateContentRequest, this.requestOptions); + this._sendPromise = this._sendPromise.then(() => streamPromise).catch((_ignored) => { + throw new Error(SILENT_ERROR); + }).then((streamResult) => streamResult.response).then((response) => { + if (response.candidates && response.candidates.length > 0) { + this._history.push(newContent); + const responseContent = Object.assign({}, response.candidates[0].content); + if (!responseContent.role) { + responseContent.role = "model"; + } + this._history.push(responseContent); + } else { + const blockErrorMessage = formatBlockErrorMessage(response); + if (blockErrorMessage) { + console.warn(`sendMessageStream() was unsuccessful. ${blockErrorMessage}. Inspect response object for details.`); + } + } + }).catch((e) => { + if (e.message !== SILENT_ERROR) { + console.error(e); + } + }); + return streamPromise; + } +}; +async function countTokens(apiKey, model, params, requestOptions) { + const url = new RequestUrl(model, Task.COUNT_TOKENS, apiKey, false); + const response = await makeRequest(url, JSON.stringify(Object.assign(Object.assign({}, params), { model })), requestOptions); + return response.json(); +} +async function embedContent(apiKey, model, params, requestOptions) { + const url = new RequestUrl(model, Task.EMBED_CONTENT, apiKey, false); + const response = await makeRequest(url, JSON.stringify(params), requestOptions); + return response.json(); +} +async function batchEmbedContents(apiKey, model, params, requestOptions) { + const url = new RequestUrl(model, Task.BATCH_EMBED_CONTENTS, apiKey, false); + const requestsWithModel = params.requests.map((request2) => { + return Object.assign(Object.assign({}, request2), { model }); + }); + const response = await makeRequest(url, JSON.stringify({ requests: requestsWithModel }), requestOptions); + return response.json(); +} +var GenerativeModel = class { + constructor(apiKey, modelParams, requestOptions) { + this.apiKey = apiKey; + if (modelParams.model.includes("/")) { + this.model = modelParams.model; + } else { + this.model = `models/${modelParams.model}`; + } + this.generationConfig = modelParams.generationConfig || {}; + this.safetySettings = modelParams.safetySettings || []; + this.requestOptions = requestOptions || {}; + } + /** + * Makes a single non-streaming call to the model + * and returns an object containing a single {@link GenerateContentResponse}. + */ + async generateContent(request2) { + const formattedParams = formatGenerateContentInput(request2); + return generateContent(this.apiKey, this.model, Object.assign({ generationConfig: this.generationConfig, safetySettings: this.safetySettings }, formattedParams), this.requestOptions); + } + /** + * Makes a single streaming call to the model + * and returns an object containing an iterable stream that iterates + * over all chunks in the streaming response as well as + * a promise that returns the final aggregated response. + */ + async generateContentStream(request2) { + const formattedParams = formatGenerateContentInput(request2); + return generateContentStream(this.apiKey, this.model, Object.assign({ generationConfig: this.generationConfig, safetySettings: this.safetySettings }, formattedParams), this.requestOptions); + } + /** + * Gets a new {@link ChatSession} instance which can be used for + * multi-turn chats. + */ + startChat(startChatParams) { + return new ChatSession(this.apiKey, this.model, startChatParams, this.requestOptions); + } + /** + * Counts the tokens in the provided request. + */ + async countTokens(request2) { + const formattedParams = formatGenerateContentInput(request2); + return countTokens(this.apiKey, this.model, formattedParams); + } + /** + * Embeds the provided content. + */ + async embedContent(request2) { + const formattedParams = formatEmbedContentInput(request2); + return embedContent(this.apiKey, this.model, formattedParams); + } + /** + * Embeds an array of {@link EmbedContentRequest}s. + */ + async batchEmbedContents(batchEmbedContentRequest) { + return batchEmbedContents(this.apiKey, this.model, batchEmbedContentRequest, this.requestOptions); + } +}; +var GoogleGenerativeAI = class { + constructor(apiKey) { + this.apiKey = apiKey; + } + /** + * Gets a {@link GenerativeModel} instance for the provided model name. + */ + getGenerativeModel(modelParams, requestOptions) { + if (!modelParams.model) { + throw new GoogleGenerativeAIError(`Must provide a model name. Example: genai.getGenerativeModel({ model: 'my-model-name' })`); + } + return new GenerativeModel(this.apiKey, modelParams, requestOptions); + } +}; + +// +var VERSION7 = "6.0.0"; + +// +function requestLog(octokit) { + octokit.hook.wrap("request", (request2, options) => { + octokit.log.debug("request", options); + const start = Date.now(); + const requestOptions = octokit.request.endpoint.parse(options); + const path6 = requestOptions.url.replace(options.baseUrl, ""); + return request2(options).then((response) => { + const requestId = response.headers["x-github-request-id"]; + octokit.log.info( + `${requestOptions.method} ${path6} - ${response.status} with id ${requestId} in ${Date.now() - start}ms` + ); + return response; + }).catch((error2) => { + const requestId = error2.response?.headers["x-github-request-id"] || "UNKNOWN"; + octokit.log.error( + `${requestOptions.method} ${path6} - ${error2.status} with id ${requestId} in ${Date.now() - start}ms` + ); + throw error2; + }); + }); +} +requestLog.VERSION = VERSION7; + +// +var VERSION8 = "22.0.1"; + +// +var Octokit2 = Octokit.plugin(requestLog, legacyRestEndpointMethods, paginateRest).defaults( + { + userAgent: `octokit-rest.js/${VERSION8}` + } +); + +// +function requestToOAuthBaseUrl(request2) { + const endpointDefaults = request2.endpoint.DEFAULTS; + return /^https:\/\/(api\.)?github\.com$/.test(endpointDefaults.baseUrl) ? "https://github.com" : endpointDefaults.baseUrl.replace("/api/v3", ""); +} +async function oauthRequest(request2, route, parameters) { + const withOAuthParameters = { + baseUrl: requestToOAuthBaseUrl(request2), + headers: { + accept: "application/json" + }, + ...parameters + }; + const response = await request2(route, withOAuthParameters); + if ("error" in response.data) { + const error2 = new RequestError( + `${response.data.error_description} (${response.data.error}, ${response.data.error_uri})`, + 400, + { + request: request2.endpoint.merge( + route, + withOAuthParameters + ) + } + ); + error2.response = response; + throw error2; + } + return response; +} +async function exchangeWebFlowCode(options) { + const request2 = options.request || request; + const response = await oauthRequest( + request2, + "POST /login/oauth/access_token", + { + client_id: options.clientId, + client_secret: options.clientSecret, + code: options.code, + redirect_uri: options.redirectUrl + } + ); + const authentication = { + clientType: options.clientType, + clientId: options.clientId, + clientSecret: options.clientSecret, + token: response.data.access_token, + scopes: response.data.scope.split(/\s+/).filter(Boolean) + }; + if (options.clientType === "github-app") { + if ("refresh_token" in response.data) { + const apiTimeInMs = new Date(response.headers.date).getTime(); + authentication.refreshToken = response.data.refresh_token, authentication.expiresAt = toTimestamp( + apiTimeInMs, + response.data.expires_in + ), authentication.refreshTokenExpiresAt = toTimestamp( + apiTimeInMs, + response.data.refresh_token_expires_in + ); + } + delete authentication.scopes; + } + return { ...response, authentication }; +} +function toTimestamp(apiTimeInMs, expirationInSeconds) { + return new Date(apiTimeInMs + expirationInSeconds * 1e3).toISOString(); +} +async function createDeviceCode(options) { + const request2 = options.request || request; + const parameters = { + client_id: options.clientId + }; + if ("scopes" in options && Array.isArray(options.scopes)) { + parameters.scope = options.scopes.join(" "); + } + return oauthRequest(request2, "POST /login/device/code", parameters); +} +async function exchangeDeviceCode(options) { + const request2 = options.request || request; + const response = await oauthRequest( + request2, + "POST /login/oauth/access_token", + { + client_id: options.clientId, + device_code: options.code, + grant_type: "urn:ietf:params:oauth:grant-type:device_code" + } + ); + const authentication = { + clientType: options.clientType, + clientId: options.clientId, + token: response.data.access_token, + scopes: response.data.scope.split(/\s+/).filter(Boolean) + }; + if ("clientSecret" in options) { + authentication.clientSecret = options.clientSecret; + } + if (options.clientType === "github-app") { + if ("refresh_token" in response.data) { + const apiTimeInMs = new Date(response.headers.date).getTime(); + authentication.refreshToken = response.data.refresh_token, authentication.expiresAt = toTimestamp2( + apiTimeInMs, + response.data.expires_in + ), authentication.refreshTokenExpiresAt = toTimestamp2( + apiTimeInMs, + response.data.refresh_token_expires_in + ); + } + delete authentication.scopes; + } + return { ...response, authentication }; +} +function toTimestamp2(apiTimeInMs, expirationInSeconds) { + return new Date(apiTimeInMs + expirationInSeconds * 1e3).toISOString(); +} +async function checkToken(options) { + const request2 = options.request || request; + const response = await request2("POST /applications/{client_id}/token", { + headers: { + authorization: `basic ${btoa( + `${options.clientId}:${options.clientSecret}` + )}` + }, + client_id: options.clientId, + access_token: options.token + }); + const authentication = { + clientType: options.clientType, + clientId: options.clientId, + clientSecret: options.clientSecret, + token: options.token, + scopes: response.data.scopes + }; + if (response.data.expires_at) + authentication.expiresAt = response.data.expires_at; + if (options.clientType === "github-app") { + delete authentication.scopes; + } + return { ...response, authentication }; +} +async function refreshToken(options) { + const request2 = options.request || request; + const response = await oauthRequest( + request2, + "POST /login/oauth/access_token", + { + client_id: options.clientId, + client_secret: options.clientSecret, + grant_type: "refresh_token", + refresh_token: options.refreshToken + } + ); + const apiTimeInMs = new Date(response.headers.date).getTime(); + const authentication = { + clientType: "github-app", + clientId: options.clientId, + clientSecret: options.clientSecret, + token: response.data.access_token, + refreshToken: response.data.refresh_token, + expiresAt: toTimestamp3(apiTimeInMs, response.data.expires_in), + refreshTokenExpiresAt: toTimestamp3( + apiTimeInMs, + response.data.refresh_token_expires_in + ) + }; + return { ...response, authentication }; +} +function toTimestamp3(apiTimeInMs, expirationInSeconds) { + return new Date(apiTimeInMs + expirationInSeconds * 1e3).toISOString(); +} +async function resetToken(options) { + const request2 = options.request || request; + const auth6 = btoa(`${options.clientId}:${options.clientSecret}`); + const response = await request2( + "PATCH /applications/{client_id}/token", + { + headers: { + authorization: `basic ${auth6}` + }, + client_id: options.clientId, + access_token: options.token + } + ); + const authentication = { + clientType: options.clientType, + clientId: options.clientId, + clientSecret: options.clientSecret, + token: response.data.token, + scopes: response.data.scopes + }; + if (response.data.expires_at) + authentication.expiresAt = response.data.expires_at; + if (options.clientType === "github-app") { + delete authentication.scopes; + } + return { ...response, authentication }; +} +async function deleteToken(options) { + const request2 = options.request || request; + const auth6 = btoa(`${options.clientId}:${options.clientSecret}`); + return request2( + "DELETE /applications/{client_id}/token", + { + headers: { + authorization: `basic ${auth6}` + }, + client_id: options.clientId, + access_token: options.token + } + ); +} +async function deleteAuthorization(options) { + const request2 = options.request || request; + const auth6 = btoa(`${options.clientId}:${options.clientSecret}`); + return request2( + "DELETE /applications/{client_id}/grant", + { + headers: { + authorization: `basic ${auth6}` + }, + client_id: options.clientId, + access_token: options.token + } + ); +} + +// +async function getOAuthAccessToken(state, options) { + const cachedAuthentication = getCachedAuthentication(state, options.auth); + if (cachedAuthentication) + return cachedAuthentication; + const { data: verification } = await createDeviceCode({ + clientType: state.clientType, + clientId: state.clientId, + request: options.request || state.request, + // @ts-expect-error the extra code to make TS happy is not worth it + scopes: options.auth.scopes || state.scopes + }); + await state.onVerification(verification); + const authentication = await waitForAccessToken( + options.request || state.request, + state.clientId, + state.clientType, + verification + ); + state.authentication = authentication; + return authentication; +} +function getCachedAuthentication(state, auth22) { + if (auth22.refresh === true) + return false; + if (!state.authentication) + return false; + if (state.clientType === "github-app") { + return state.authentication; + } + const authentication = state.authentication; + const newScope = ("scopes" in auth22 && auth22.scopes || state.scopes).join( + " " + ); + const currentScope = authentication.scopes.join(" "); + return newScope === currentScope ? authentication : false; +} +async function wait(seconds) { + await new Promise((resolve2) => setTimeout(resolve2, seconds * 1e3)); +} +async function waitForAccessToken(request2, clientId, clientType, verification) { + try { + const options = { + clientId, + request: request2, + code: verification.device_code + }; + const { authentication } = clientType === "oauth-app" ? await exchangeDeviceCode({ + ...options, + clientType: "oauth-app" + }) : await exchangeDeviceCode({ + ...options, + clientType: "github-app" + }); + return { + type: "token", + tokenType: "oauth", + ...authentication + }; + } catch (error2) { + if (!error2.response) + throw error2; + const errorType = error2.response.data.error; + if (errorType === "authorization_pending") { + await wait(verification.interval); + return waitForAccessToken(request2, clientId, clientType, verification); + } + if (errorType === "slow_down") { + await wait(verification.interval + 7); + return waitForAccessToken(request2, clientId, clientType, verification); + } + throw error2; + } +} +async function auth2(state, authOptions) { + return getOAuthAccessToken(state, { + auth: authOptions + }); +} +async function hook2(state, request2, route, parameters) { + let endpoint2 = request2.endpoint.merge( + route, + parameters + ); + if (/\/login\/(oauth\/access_token|device\/code)$/.test(endpoint2.url)) { + return request2(endpoint2); + } + const { token } = await getOAuthAccessToken(state, { + request: request2, + auth: { type: "oauth" } + }); + endpoint2.headers.authorization = `token ${token}`; + return request2(endpoint2); +} +var VERSION9 = "0.0.0-development"; +function createOAuthDeviceAuth(options) { + const requestWithDefaults = options.request || request.defaults({ + headers: { + "user-agent": `octokit-auth-oauth-device.js/${VERSION9} ${getUserAgent()}` + } + }); + const { request: request2 = requestWithDefaults, ...otherOptions } = options; + const state = options.clientType === "github-app" ? { + ...otherOptions, + clientType: "github-app", + request: request2 + } : { + ...otherOptions, + clientType: "oauth-app", + request: request2, + scopes: options.scopes || [] + }; + if (!options.clientId) { + throw new Error( + '[@octokit/auth-oauth-device] "clientId" option must be set (https://github.com/octokit/auth-oauth-device.js#usage)' + ); + } + if (!options.onVerification) { + throw new Error( + '[@octokit/auth-oauth-device] "onVerification" option must be a function (https://github.com/octokit/auth-oauth-device.js#usage)' + ); + } + return Object.assign(auth2.bind(null, state), { + hook: hook2.bind(null, state) + }); +} + +// +var VERSION10 = "0.0.0-development"; +async function getAuthentication(state) { + if ("code" in state.strategyOptions) { + const { authentication } = await exchangeWebFlowCode({ + clientId: state.clientId, + clientSecret: state.clientSecret, + clientType: state.clientType, + onTokenCreated: state.onTokenCreated, + ...state.strategyOptions, + request: state.request + }); + return { + type: "token", + tokenType: "oauth", + ...authentication + }; + } + if ("onVerification" in state.strategyOptions) { + const deviceAuth = createOAuthDeviceAuth({ + clientType: state.clientType, + clientId: state.clientId, + onTokenCreated: state.onTokenCreated, + ...state.strategyOptions, + request: state.request + }); + const authentication = await deviceAuth({ + type: "oauth" + }); + return { + clientSecret: state.clientSecret, + ...authentication + }; + } + if ("token" in state.strategyOptions) { + return { + type: "token", + tokenType: "oauth", + clientId: state.clientId, + clientSecret: state.clientSecret, + clientType: state.clientType, + onTokenCreated: state.onTokenCreated, + ...state.strategyOptions + }; + } + throw new Error("[@octokit/auth-oauth-user] Invalid strategy options"); +} +async function auth3(state, options = {}) { + if (!state.authentication) { + state.authentication = state.clientType === "oauth-app" ? await getAuthentication(state) : await getAuthentication(state); + } + if (state.authentication.invalid) { + throw new Error("[@octokit/auth-oauth-user] Token is invalid"); + } + const currentAuthentication = state.authentication; + if ("expiresAt" in currentAuthentication) { + if (options.type === "refresh" || new Date(currentAuthentication.expiresAt) < /* @__PURE__ */ new Date()) { + const { authentication } = await refreshToken({ + clientType: "github-app", + clientId: state.clientId, + clientSecret: state.clientSecret, + refreshToken: currentAuthentication.refreshToken, + request: state.request + }); + state.authentication = { + tokenType: "oauth", + type: "token", + ...authentication + }; + } + } + if (options.type === "refresh") { + if (state.clientType === "oauth-app") { + throw new Error( + "[@octokit/auth-oauth-user] OAuth Apps do not support expiring tokens" + ); + } + if (!currentAuthentication.hasOwnProperty("expiresAt")) { + throw new Error("[@octokit/auth-oauth-user] Refresh token missing"); + } + await state.onTokenCreated?.(state.authentication, { + type: options.type + }); + } + if (options.type === "check" || options.type === "reset") { + const method = options.type === "check" ? checkToken : resetToken; + try { + const { authentication } = await method({ + // @ts-expect-error making TS happy would require unnecessary code so no + clientType: state.clientType, + clientId: state.clientId, + clientSecret: state.clientSecret, + token: state.authentication.token, + request: state.request + }); + state.authentication = { + tokenType: "oauth", + type: "token", + // @ts-expect-error TBD + ...authentication + }; + if (options.type === "reset") { + await state.onTokenCreated?.(state.authentication, { + type: options.type + }); + } + return state.authentication; + } catch (error2) { + if (error2.status === 404) { + error2.message = "[@octokit/auth-oauth-user] Token is invalid"; + state.authentication.invalid = true; + } + throw error2; + } + } + if (options.type === "delete" || options.type === "deleteAuthorization") { + const method = options.type === "delete" ? deleteToken : deleteAuthorization; + try { + await method({ + // @ts-expect-error making TS happy would require unnecessary code so no + clientType: state.clientType, + clientId: state.clientId, + clientSecret: state.clientSecret, + token: state.authentication.token, + request: state.request + }); + } catch (error2) { + if (error2.status !== 404) + throw error2; + } + state.authentication.invalid = true; + return state.authentication; + } + return state.authentication; +} +var ROUTES_REQUIRING_BASIC_AUTH = /\/applications\/[^/]+\/(token|grant)s?/; +function requiresBasicAuth(url) { + return url && ROUTES_REQUIRING_BASIC_AUTH.test(url); +} +async function hook3(state, request2, route, parameters = {}) { + const endpoint2 = request2.endpoint.merge( + route, + parameters + ); + if (/\/login\/(oauth\/access_token|device\/code)$/.test(endpoint2.url)) { + return request2(endpoint2); + } + if (requiresBasicAuth(endpoint2.url)) { + const credentials = btoa(`${state.clientId}:${state.clientSecret}`); + endpoint2.headers.authorization = `basic ${credentials}`; + return request2(endpoint2); + } + const { token } = state.clientType === "oauth-app" ? await auth3({ ...state, request: request2 }) : await auth3({ ...state, request: request2 }); + endpoint2.headers.authorization = "token " + token; + return request2(endpoint2); +} +function createOAuthUserAuth({ + clientId, + clientSecret, + clientType = "oauth-app", + request: request2 = request.defaults({ + headers: { + "user-agent": `octokit-auth-oauth-app.js/${VERSION10} ${getUserAgent()}` + } + }), + onTokenCreated, + ...strategyOptions +}) { + const state = Object.assign({ + clientType, + clientId, + clientSecret, + onTokenCreated, + strategyOptions, + request: request2 + }); + return Object.assign(auth3.bind(null, state), { + // @ts-expect-error not worth the extra code needed to appease TS + hook: hook3.bind(null, state) + }); +} +createOAuthUserAuth.VERSION = VERSION10; + +// +async function auth4(state, authOptions) { + if (authOptions.type === "oauth-app") { + return { + type: "oauth-app", + clientId: state.clientId, + clientSecret: state.clientSecret, + clientType: state.clientType, + headers: { + authorization: `basic ${btoa( + `${state.clientId}:${state.clientSecret}` + )}` + } + }; + } + if ("factory" in authOptions) { + const { type, ...options } = { + ...authOptions, + ...state + }; + return authOptions.factory(options); + } + const common = { + clientId: state.clientId, + clientSecret: state.clientSecret, + request: state.request, + ...authOptions + }; + const userAuth = state.clientType === "oauth-app" ? await createOAuthUserAuth({ + ...common, + clientType: state.clientType + }) : await createOAuthUserAuth({ + ...common, + clientType: state.clientType + }); + return userAuth(); +} +async function hook4(state, request2, route, parameters) { + let endpoint2 = request2.endpoint.merge( + route, + parameters + ); + if (/\/login\/(oauth\/access_token|device\/code)$/.test(endpoint2.url)) { + return request2(endpoint2); + } + if (state.clientType === "github-app" && !requiresBasicAuth(endpoint2.url)) { + throw new Error( + `[@octokit/auth-oauth-app] GitHub Apps cannot use their client ID/secret for basic authentication for endpoints other than "/applications/{client_id}/**". "${endpoint2.method} ${endpoint2.url}" is not supported.` + ); + } + const credentials = btoa(`${state.clientId}:${state.clientSecret}`); + endpoint2.headers.authorization = `basic ${credentials}`; + try { + return await request2(endpoint2); + } catch (error2) { + if (error2.status !== 401) + throw error2; + error2.message = `[@octokit/auth-oauth-app] "${endpoint2.method} ${endpoint2.url}" does not support clientId/clientSecret basic authentication.`; + throw error2; + } +} +var VERSION11 = "0.0.0-development"; +function createOAuthAppAuth(options) { + const state = Object.assign( + { + request: request.defaults({ + headers: { + "user-agent": `octokit-auth-oauth-app.js/${VERSION11} ${getUserAgent()}` + } + }), + clientType: "oauth-app" + }, + options + ); + return Object.assign(auth4.bind(null, state), { + hook: hook4.bind(null, state) + }); +} + +// +function isPkcs1(privateKey) { + return privateKey.includes("-----BEGIN RSA PRIVATE KEY-----"); +} +function isOpenSsh(privateKey) { + return privateKey.includes("-----BEGIN OPENSSH PRIVATE KEY-----"); +} +function string2ArrayBuffer(str) { + const buf = new ArrayBuffer(str.length); + const bufView = new Uint8Array(buf); + for (let i = 0, strLen = str.length; i < strLen; i++) { + bufView[i] = str.charCodeAt(i); + } + return buf; +} +function getDERfromPEM(pem) { + const pemB64 = pem.trim().split("\n").slice(1, -1).join(""); + const decoded = atob(pemB64); + return string2ArrayBuffer(decoded); +} +function getEncodedMessage(header, payload) { + return `${base64encodeJSON(header)}.${base64encodeJSON(payload)}`; +} +function base64encode(buffer) { + var binary = ""; + var bytes = new Uint8Array(buffer); + var len = bytes.byteLength; + for (var i = 0; i < len; i++) { + binary += String.fromCharCode(bytes[i]); + } + return fromBase64(btoa(binary)); +} +function fromBase64(base64) { + return base64.replace(/=/g, "").replace(/\+/g, "-").replace(/\//g, "_"); +} +function base64encodeJSON(obj) { + return fromBase64(btoa(JSON.stringify(obj))); +} + +// +import { subtle } from "node:crypto"; +import { createPrivateKey } from "node:crypto"; +function convertPrivateKey(privateKey) { + if (!isPkcs1(privateKey)) + return privateKey; + return createPrivateKey(privateKey).export({ + type: "pkcs8", + format: "pem" + }); +} + +// +async function getToken({ privateKey, payload }) { + const convertedPrivateKey = convertPrivateKey(privateKey); + if (isPkcs1(convertedPrivateKey)) { + throw new Error( + "[universal-github-app-jwt] Private Key is in PKCS#1 format, but only PKCS#8 is supported. See https://github.com/gr2m/universal-github-app-jwt#private-key-formats" + ); + } + if (isOpenSsh(convertedPrivateKey)) { + throw new Error( + "[universal-github-app-jwt] Private Key is in OpenSSH format, but only PKCS#8 is supported. See https://github.com/gr2m/universal-github-app-jwt#private-key-formats" + ); + } + const algorithm = { + name: "RSASSA-PKCS1-v1_5", + hash: { name: "SHA-256" } + }; + const header = { alg: "RS256", typ: "JWT" }; + const privateKeyDER = getDERfromPEM(convertedPrivateKey); + const importedKey = await subtle.importKey( + "pkcs8", + privateKeyDER, + algorithm, + false, + ["sign"] + ); + const encodedMessage = getEncodedMessage(header, payload); + const encodedMessageArrBuf = string2ArrayBuffer(encodedMessage); + const signatureArrBuf = await subtle.sign( + algorithm.name, + importedKey, + encodedMessageArrBuf + ); + const encodedSignature = base64encode(signatureArrBuf); + return `${encodedMessage}.${encodedSignature}`; +} + +// +async function githubAppJwt({ + id, + privateKey, + now = Math.floor(Date.now() / 1e3) +}) { + const privateKeyWithNewlines = privateKey.replace(/\\n/g, "\n"); + const nowWithSafetyMargin = now - 30; + const expiration = nowWithSafetyMargin + 60 * 10; + const payload = { + iat: nowWithSafetyMargin, + // Issued at time + exp: expiration, + iss: id + }; + const token = await getToken({ + privateKey: privateKeyWithNewlines, + payload + }); + return { + appId: id, + expiration, + token + }; +} + +// +var LruObject = class { + constructor(max = 1e3, ttlInMsecs = 0) { + if (isNaN(max) || max < 0) { + throw new Error("Invalid max value"); + } + if (isNaN(ttlInMsecs) || ttlInMsecs < 0) { + throw new Error("Invalid ttl value"); + } + this.first = null; + this.items = /* @__PURE__ */ Object.create(null); + this.last = null; + this.size = 0; + this.max = max; + this.ttl = ttlInMsecs; + } + bumpLru(item) { + if (this.last === item) { + return; + } + const last = this.last; + const next = item.next; + const prev = item.prev; + if (this.first === item) { + this.first = next; + } + item.next = null; + item.prev = last; + last.next = item; + if (prev !== null) { + prev.next = next; + } + if (next !== null) { + next.prev = prev; + } + this.last = item; + } + clear() { + this.items = /* @__PURE__ */ Object.create(null); + this.first = null; + this.last = null; + this.size = 0; + } + delete(key) { + if (Object.prototype.hasOwnProperty.call(this.items, key)) { + const item = this.items[key]; + delete this.items[key]; + this.size--; + if (item.prev !== null) { + item.prev.next = item.next; + } + if (item.next !== null) { + item.next.prev = item.prev; + } + if (this.first === item) { + this.first = item.next; + } + if (this.last === item) { + this.last = item.prev; + } + } + } + deleteMany(keys) { + for (var i = 0; i < keys.length; i++) { + this.delete(keys[i]); + } + } + evict() { + if (this.size > 0) { + const item = this.first; + delete this.items[item.key]; + if (--this.size === 0) { + this.first = null; + this.last = null; + } else { + this.first = item.next; + this.first.prev = null; + } + } + } + expiresAt(key) { + if (Object.prototype.hasOwnProperty.call(this.items, key)) { + return this.items[key].expiry; + } + } + get(key) { + if (Object.prototype.hasOwnProperty.call(this.items, key)) { + const item = this.items[key]; + if (this.ttl > 0 && item.expiry <= Date.now()) { + this.delete(key); + return; + } + this.bumpLru(item); + return item.value; + } + } + getMany(keys) { + const result = []; + for (var i = 0; i < keys.length; i++) { + result.push(this.get(keys[i])); + } + return result; + } + keys() { + return Object.keys(this.items); + } + set(key, value) { + if (Object.prototype.hasOwnProperty.call(this.items, key)) { + const item2 = this.items[key]; + item2.value = value; + item2.expiry = this.ttl > 0 ? Date.now() + this.ttl : this.ttl; + if (this.last !== item2) { + this.bumpLru(item2); + } + return; + } + if (this.max > 0 && this.size === this.max) { + this.evict(); + } + const item = { + expiry: this.ttl > 0 ? Date.now() + this.ttl : this.ttl, + key, + prev: this.last, + next: null, + value + }; + this.items[key] = item; + if (++this.size === 1) { + this.first = item; + } else { + this.last.next = item; + } + this.last = item; + } +}; + +// +async function getAppAuthentication({ + appId, + privateKey, + timeDifference, + createJwt +}) { + try { + if (createJwt) { + const { jwt, expiresAt } = await createJwt(appId, timeDifference); + return { + type: "app", + token: jwt, + appId, + expiresAt + }; + } + const authOptions = { + id: appId, + privateKey + }; + if (timeDifference) { + Object.assign(authOptions, { + now: Math.floor(Date.now() / 1e3) + timeDifference + }); + } + const appAuthentication = await githubAppJwt(authOptions); + return { + type: "app", + token: appAuthentication.token, + appId: appAuthentication.appId, + expiresAt: new Date(appAuthentication.expiration * 1e3).toISOString() + }; + } catch (error2) { + if (privateKey === "-----BEGIN RSA PRIVATE KEY-----") { + throw new Error( + "The 'privateKey` option contains only the first line '-----BEGIN RSA PRIVATE KEY-----'. If you are setting it using a `.env` file, make sure it is set on a single line with newlines replaced by '\n'" + ); + } else { + throw error2; + } + } +} +function getCache() { + return new LruObject( + // cache max. 15000 tokens, that will use less than 10mb memory + 15e3, + // Cache for 1 minute less than GitHub expiry + 1e3 * 60 * 59 + ); +} +async function get(cache, options) { + const cacheKey = optionsToCacheKey(options); + const result = await cache.get(cacheKey); + if (!result) { + return; + } + const [ + token, + createdAt, + expiresAt, + repositorySelection, + permissionsString, + singleFileName + ] = result.split("|"); + const permissions = options.permissions || permissionsString.split(/,/).reduce((permissions2, string) => { + if (/!$/.test(string)) { + permissions2[string.slice(0, -1)] = "write"; + } else { + permissions2[string] = "read"; + } + return permissions2; + }, {}); + return { + token, + createdAt, + expiresAt, + permissions, + repositoryIds: options.repositoryIds, + repositoryNames: options.repositoryNames, + singleFileName, + repositorySelection + }; +} +async function set(cache, options, data) { + const key = optionsToCacheKey(options); + const permissionsString = options.permissions ? "" : Object.keys(data.permissions).map( + (name) => `${name}${data.permissions[name] === "write" ? "!" : ""}` + ).join(","); + const value = [ + data.token, + data.createdAt, + data.expiresAt, + data.repositorySelection, + permissionsString, + data.singleFileName + ].join("|"); + await cache.set(key, value); +} +function optionsToCacheKey({ + installationId, + permissions = {}, + repositoryIds = [], + repositoryNames = [] +}) { + const permissionsString = Object.keys(permissions).sort().map((name) => permissions[name] === "read" ? name : `${name}!`).join(","); + const repositoryIdsString = repositoryIds.sort().join(","); + const repositoryNamesString = repositoryNames.join(","); + return [ + installationId, + repositoryIdsString, + repositoryNamesString, + permissionsString + ].filter(Boolean).join("|"); +} +function toTokenAuthentication({ + installationId, + token, + createdAt, + expiresAt, + repositorySelection, + permissions, + repositoryIds, + repositoryNames, + singleFileName +}) { + return Object.assign( + { + type: "token", + tokenType: "installation", + token, + installationId, + permissions, + createdAt, + expiresAt, + repositorySelection + }, + repositoryIds ? { repositoryIds } : null, + repositoryNames ? { repositoryNames } : null, + singleFileName ? { singleFileName } : null + ); +} +async function getInstallationAuthentication(state, options, customRequest) { + const installationId = Number(options.installationId || state.installationId); + if (!installationId) { + throw new Error( + "[@octokit/auth-app] installationId option is required for installation authentication." + ); + } + if (options.factory) { + const { type, factory, oauthApp, ...factoryAuthOptions } = { + ...state, + ...options + }; + return factory(factoryAuthOptions); + } + const request2 = customRequest || state.request; + return getInstallationAuthenticationConcurrently( + state, + { ...options, installationId }, + request2 + ); +} +var pendingPromises = /* @__PURE__ */ new Map(); +function getInstallationAuthenticationConcurrently(state, options, request2) { + const cacheKey = optionsToCacheKey(options); + if (pendingPromises.has(cacheKey)) { + return pendingPromises.get(cacheKey); + } + const promise = getInstallationAuthenticationImpl( + state, + options, + request2 + ).finally(() => pendingPromises.delete(cacheKey)); + pendingPromises.set(cacheKey, promise); + return promise; +} +async function getInstallationAuthenticationImpl(state, options, request2) { + if (!options.refresh) { + const result = await get(state.cache, options); + if (result) { + const { + token: token2, + createdAt: createdAt2, + expiresAt: expiresAt2, + permissions: permissions2, + repositoryIds: repositoryIds2, + repositoryNames: repositoryNames2, + singleFileName: singleFileName2, + repositorySelection: repositorySelection2 + } = result; + return toTokenAuthentication({ + installationId: options.installationId, + token: token2, + createdAt: createdAt2, + expiresAt: expiresAt2, + permissions: permissions2, + repositorySelection: repositorySelection2, + repositoryIds: repositoryIds2, + repositoryNames: repositoryNames2, + singleFileName: singleFileName2 + }); + } + } + const appAuthentication = await getAppAuthentication(state); + const payload = { + installation_id: options.installationId, + mediaType: { + previews: ["machine-man"] + }, + headers: { + authorization: `bearer ${appAuthentication.token}` + } + }; + if (options.repositoryIds) { + Object.assign(payload, { repository_ids: options.repositoryIds }); + } + if (options.repositoryNames) { + Object.assign(payload, { + repositories: options.repositoryNames + }); + } + if (options.permissions) { + Object.assign(payload, { permissions: options.permissions }); + } + const { + data: { + token, + expires_at: expiresAt, + repositories, + permissions: permissionsOptional, + repository_selection: repositorySelectionOptional, + single_file: singleFileName + } + } = await request2( + "POST /app/installations/{installation_id}/access_tokens", + payload + ); + const permissions = permissionsOptional || {}; + const repositorySelection = repositorySelectionOptional || "all"; + const repositoryIds = repositories ? repositories.map((r) => r.id) : void 0; + const repositoryNames = repositories ? repositories.map((repo) => repo.name) : void 0; + const createdAt = (/* @__PURE__ */ new Date()).toISOString(); + const cacheOptions = { + token, + createdAt, + expiresAt, + repositorySelection, + permissions, + repositoryIds, + repositoryNames + }; + if (singleFileName) { + Object.assign(payload, { singleFileName }); + } + await set(state.cache, options, cacheOptions); + const cacheData = { + installationId: options.installationId, + token, + createdAt, + expiresAt, + repositorySelection, + permissions, + repositoryIds, + repositoryNames + }; + if (singleFileName) { + Object.assign(cacheData, { singleFileName }); + } + return toTokenAuthentication(cacheData); +} +async function auth5(state, authOptions) { + switch (authOptions.type) { + case "app": + return getAppAuthentication(state); + case "oauth-app": + return state.oauthApp({ type: "oauth-app" }); + case "installation": + authOptions; + return getInstallationAuthentication(state, { + ...authOptions, + type: "installation" + }); + case "oauth-user": + return state.oauthApp(authOptions); + default: + throw new Error(`Invalid auth type: ${authOptions.type}`); + } +} +var PATHS = [ + "/app", + "/app/hook/config", + "/app/hook/deliveries", + "/app/hook/deliveries/{delivery_id}", + "/app/hook/deliveries/{delivery_id}/attempts", + "/app/installations", + "/app/installations/{installation_id}", + "/app/installations/{installation_id}/access_tokens", + "/app/installations/{installation_id}/suspended", + "/app/installation-requests", + "/marketplace_listing/accounts/{account_id}", + "/marketplace_listing/plan", + "/marketplace_listing/plans", + "/marketplace_listing/plans/{plan_id}/accounts", + "/marketplace_listing/stubbed/accounts/{account_id}", + "/marketplace_listing/stubbed/plan", + "/marketplace_listing/stubbed/plans", + "/marketplace_listing/stubbed/plans/{plan_id}/accounts", + "/orgs/{org}/installation", + "/repos/{owner}/{repo}/installation", + "/users/{username}/installation" +]; +function routeMatcher(paths) { + const regexes = paths.map( + (p) => p.split("/").map((c) => c.startsWith("{") ? "(?:.+?)" : c).join("/") + ); + const regex = `^(?:${regexes.map((r) => `(?:${r})`).join("|")})$`; + return new RegExp(regex, "i"); +} +var REGEX = routeMatcher(PATHS); +function requiresAppAuth(url) { + return !!url && REGEX.test(url.split("?")[0]); +} +var FIVE_SECONDS_IN_MS = 5 * 1e3; +function isNotTimeSkewError(error2) { + return !(error2.message.match( + /'Expiration time' claim \('exp'\) must be a numeric value representing the future time at which the assertion expires/ + ) || error2.message.match( + /'Issued at' claim \('iat'\) must be an Integer representing the time that the assertion was issued/ + )); +} +async function hook5(state, request2, route, parameters) { + const endpoint2 = request2.endpoint.merge(route, parameters); + const url = endpoint2.url; + if (/\/login\/oauth\/access_token$/.test(url)) { + return request2(endpoint2); + } + if (requiresAppAuth(url.replace(request2.endpoint.DEFAULTS.baseUrl, ""))) { + const { token: token2 } = await getAppAuthentication(state); + endpoint2.headers.authorization = `bearer ${token2}`; + let response; + try { + response = await request2(endpoint2); + } catch (error2) { + if (isNotTimeSkewError(error2)) { + throw error2; + } + if (typeof error2.response.headers.date === "undefined") { + throw error2; + } + const diff = Math.floor( + (Date.parse(error2.response.headers.date) - Date.parse((/* @__PURE__ */ new Date()).toString())) / 1e3 + ); + state.log.warn(error2.message); + state.log.warn( + `[@octokit/auth-app] GitHub API time and system time are different by ${diff} seconds. Retrying request with the difference accounted for.` + ); + const { token: token3 } = await getAppAuthentication({ + ...state, + timeDifference: diff + }); + endpoint2.headers.authorization = `bearer ${token3}`; + return request2(endpoint2); + } + return response; + } + if (requiresBasicAuth(url)) { + const authentication = await state.oauthApp({ type: "oauth-app" }); + endpoint2.headers.authorization = authentication.headers.authorization; + return request2(endpoint2); + } + const { token, createdAt } = await getInstallationAuthentication( + state, + // @ts-expect-error TBD + {}, + request2.defaults({ baseUrl: endpoint2.baseUrl }) + ); + endpoint2.headers.authorization = `token ${token}`; + return sendRequestWithRetries( + state, + request2, + endpoint2, + createdAt + ); +} +async function sendRequestWithRetries(state, request2, options, createdAt, retries = 0) { + const timeSinceTokenCreationInMs = +/* @__PURE__ */ new Date() - +new Date(createdAt); + try { + return await request2(options); + } catch (error2) { + if (error2.status !== 401) { + throw error2; + } + if (timeSinceTokenCreationInMs >= FIVE_SECONDS_IN_MS) { + if (retries > 0) { + error2.message = `After ${retries} retries within ${timeSinceTokenCreationInMs / 1e3}s of creating the installation access token, the response remains 401. At this point, the cause may be an authentication problem or a system outage. Please check https://www.githubstatus.com for status information`; + } + throw error2; + } + ++retries; + const awaitTime = retries * 1e3; + state.log.warn( + `[@octokit/auth-app] Retrying after 401 response to account for token replication delay (retry: ${retries}, wait: ${awaitTime / 1e3}s)` + ); + await new Promise((resolve2) => setTimeout(resolve2, awaitTime)); + return sendRequestWithRetries(state, request2, options, createdAt, retries); + } +} +var VERSION12 = "8.1.2"; +function createAppAuth(options) { + if (!options.appId) { + throw new Error("[@octokit/auth-app] appId option is required"); + } + if (!options.privateKey && !options.createJwt) { + throw new Error("[@octokit/auth-app] privateKey option is required"); + } else if (options.privateKey && options.createJwt) { + throw new Error( + "[@octokit/auth-app] privateKey and createJwt options are mutually exclusive" + ); + } + if ("installationId" in options && !options.installationId) { + throw new Error( + "[@octokit/auth-app] installationId is set to a falsy value" + ); + } + const log = options.log || {}; + if (typeof log.warn !== "function") { + log.warn = console.warn.bind(console); + } + const request2 = options.request || request.defaults({ + headers: { + "user-agent": `octokit-auth-app.js/${VERSION12} ${getUserAgent()}` + } + }); + const state = Object.assign( + { + request: request2, + cache: getCache() + }, + options, + options.installationId ? { installationId: Number(options.installationId) } : {}, + { + log, + oauthApp: createOAuthAppAuth({ + clientType: "github-app", + clientId: options.clientId || "", + clientSecret: options.clientSecret || "", + request: request2 + }) + } + ); + return Object.assign(auth5.bind(null, state), { + hook: hook5.bind(null, state) + }); +} + +// github-actions/utils.js +var ANGULAR_ROBOT = [43341, "angular-robot-key"]; +async function getJwtAuthedAppClient([appId, inputKey]) { + const privateKey = getInput(inputKey, { required: true }); + return new Octokit2({ + authStrategy: createAppAuth, + auth: { appId, privateKey } + }); +} +async function getAuthTokenFor(app, orgOrRepo = context2.repo) { + const github = await getJwtAuthedAppClient(app); + let id; + let org = orgOrRepo; + let repo = orgOrRepo; + if (typeof org.org === "string") { + id = (await github.apps.getOrgInstallation({ ...org })).data.id; + } else { + id = (await github.apps.getRepoInstallation({ ...repo })).data.id; + } + const { token } = (await github.rest.apps.createInstallationAccessToken({ + installation_id: id + })).data; + return token; +} +async function revokeActiveInstallationToken(githubOrToken) { + if (typeof githubOrToken === "string") { + await new Octokit2({ auth: githubOrToken, request: { fetch } }).apps.revokeInstallationAccessToken(); + } else { + await githubOrToken.apps.revokeInstallationAccessToken(); + } + info("Revoked installation token used for Angular Robot."); +} + +// github-actions/issue-labeling/lib/issue-labeling.js +var _a; +var IssueLabeling = class { + constructor(git, coreService) { + this.git = git; + this.coreService = coreService; + this.repoAreaLabels = /* @__PURE__ */ new Set(); + } + async run() { + const { issue: issue2 } = context2; + if (!issue2 || !issue2.number) { + this.coreService.info("No issue context found. Skipping."); + return; + } + this.coreService.info(`Issue #${issue2.number}`); + await this.initialize(); + const model = this.getGenerativeModel(); + const prompt = ` +You are a helper for an open source repository. +Your task is to allow the user to categorize the issue with an "area: " label. +The following is the issue title and body: + +Title: ${this.issueData.title} +Body: +${this.issueData.body} + +The available area labels are: +${Array.from(this.repoAreaLabels).map((label) => ` - ${label}`).join("\n")} + +Based on the content, which area label is the best fit? +Respond ONLY with the exact label name (e.g. "area: core"). +If you are strictly unsure or if multiple labels match equally well, respond with "ambiguous". +If no area label applies, respond with "none". +`; + try { + const result = await model.generateContent(prompt); + const response = result.response; + const text = response.text().trim(); + this.coreService.info(`Gemini suggested label: ${text}`); + if (this.repoAreaLabels.has(text)) { + await this.addLabel(text); + } else { + this.coreService.info(`Generated label "${text}" is not in the list of valid area labels or is "ambiguous"/"none".`); + } + } catch (e) { + this.coreService.error("Failed to generate content from Gemini."); + this.coreService.setFailed(e); + } + } + getGenerativeModel() { + const apiKey = this.coreService.getInput("google-generative-ai-key", { required: true }); + const genAI = new GoogleGenerativeAI(apiKey); + return genAI.getGenerativeModel({ model: "gemini-2.0-flash" }); + } + async addLabel(label) { + const { number: issue_number, owner, repo } = context2.issue; + try { + await this.git.issues.addLabels({ repo, owner, issue_number, labels: [label] }); + this.coreService.info(`Added ${label} label to Issue #${issue_number}`); + } catch (err) { + this.coreService.error(`Failed to add ${label} label to Issue #${issue_number}`); + this.coreService.debug(err); + } + } + async initialize() { + const { owner, repo } = context2.issue; + await Promise.all([ + this.git.paginate(this.git.issues.listLabelsForRepo, { owner, repo }).then((labels) => labels.filter((l) => l.name.startsWith("area: ")).forEach((l) => this.repoAreaLabels.add(l.name))), + this.git.issues.get({ owner, repo, issue_number: context2.issue.number }).then((resp) => { + this.issueData = resp.data; + }) + ]); + if (this.repoAreaLabels.size === 0) { + this.coreService.warning("No area labels found in the repository."); + return; + } + if (!this.issueData) { + this.coreService.error("Failed to fetch issue data."); + return; + } + } +}; +_a = IssueLabeling; +IssueLabeling.run = async () => { + const token = await getAuthTokenFor(ANGULAR_ROBOT); + const git = new Octokit2({ auth: token }); + try { + const inst = new _a(git, core_exports); + await inst.run(); + } finally { + await revokeActiveInstallationToken(git); + } +}; + +// github-actions/issue-labeling/lib/main.ts +if (context2.repo.owner === "angular") { + IssueLabeling.run().catch((e) => { + console.error(e); + setFailed(e.message); + }); +} else { + warning( + "Automatic labeling was skipped as this action is only meant to run in repos belonging to the Angular organization." + ); +} +/*! 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 *) + +@octokit/request-error/dist-src/index.js: + (* v8 ignore else -- @preserve -- Bug with vitest coverage where it sees an else branch that doesn't exist *) + +@octokit/request/dist-bundle/index.js: + (* v8 ignore next -- @preserve *) + (* v8 ignore else -- @preserve *) + +@google/generative-ai/dist/index.mjs: + (** + * @license + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *) + +@google/generative-ai/dist/index.mjs: + (** + * @license + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *) + +toad-cache/dist/toad-cache.mjs: + (** + * toad-cache + * + * @copyright 2024 Igor Savin + * @license MIT + * @version 3.7.0 + *) +*/ +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdHVubmVsQDAuMC42L25vZGVfbW9kdWxlcy90dW5uZWwvbGliL3R1bm5lbC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy90dW5uZWxAMC4wLjYvbm9kZV9tb2R1bGVzL3R1bm5lbC9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yMy4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvc3ltYm9scy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yMy4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvZXJyb3JzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjIzLjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS9jb25zdGFudHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjMuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb3JlL3RyZWUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjMuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb3JlL3V0aWwuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjMuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb3JlL2RpYWdub3N0aWNzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjIzLjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS9yZXF1ZXN0LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjIzLjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9kaXNwYXRjaGVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjIzLjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9kaXNwYXRjaGVyLWJhc2UuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjMuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi91dGlsL3RpbWVycy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yMy4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvY29ubmVjdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yMy4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2xsaHR0cC91dGlscy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yMy4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2xsaHR0cC9jb25zdGFudHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjMuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9sbGh0dHAvbGxodHRwLXdhc20uanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjMuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9sbGh0dHAvbGxodHRwX3NpbWQtd2FzbS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yMy4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC9jb25zdGFudHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjMuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmV0Y2gvZ2xvYmFsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjIzLjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZldGNoL2RhdGEtdXJsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjIzLjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZldGNoL3dlYmlkbC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yMy4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC91dGlsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjIzLjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZldGNoL3N5bWJvbHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjMuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmV0Y2gvZmlsZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yMy4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC9mb3JtZGF0YS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yMy4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC9mb3JtZGF0YS1wYXJzZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjMuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmV0Y2gvYm9keS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yMy4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXIvY2xpZW50LWgxLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjIzLjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9jbGllbnQtaDIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjMuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9oYW5kbGVyL3JlZGlyZWN0LWhhbmRsZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjMuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9pbnRlcmNlcHRvci9yZWRpcmVjdC1pbnRlcmNlcHRvci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yMy4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXIvY2xpZW50LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjIzLjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9maXhlZC1xdWV1ZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yMy4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXIvcG9vbC1zdGF0cy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yMy4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXIvcG9vbC1iYXNlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjIzLjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9wb29sLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjIzLjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9iYWxhbmNlZC1wb29sLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjIzLjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9hZ2VudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yMy4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXIvcHJveHktYWdlbnQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjMuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9kaXNwYXRjaGVyL2Vudi1odHRwLXByb3h5LWFnZW50LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjIzLjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaGFuZGxlci9yZXRyeS1oYW5kbGVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjIzLjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9yZXRyeS1hZ2VudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yMy4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9yZWFkYWJsZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yMy4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS91dGlsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjIzLjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL2FwaS1yZXF1ZXN0LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjIzLjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL2Fib3J0LXNpZ25hbC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yMy4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktc3RyZWFtLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjIzLjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL2FwaS1waXBlbGluZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yMy4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktdXBncmFkZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yMy4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktY29ubmVjdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yMy4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yMy4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1lcnJvcnMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjMuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL21vY2stc3ltYm9scy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yMy4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay11dGlscy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yMy4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1pbnRlcmNlcHRvci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yMy4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1jbGllbnQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjMuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL21vY2stcG9vbC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yMy4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svcGx1cmFsaXplci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yMy4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svcGVuZGluZy1pbnRlcmNlcHRvcnMtZm9ybWF0dGVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjIzLjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9tb2NrLWFnZW50LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjIzLjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZ2xvYmFsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjIzLjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaGFuZGxlci9kZWNvcmF0b3ItaGFuZGxlci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yMy4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ludGVyY2VwdG9yL3JlZGlyZWN0LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjIzLjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaW50ZXJjZXB0b3IvcmV0cnkuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjMuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9pbnRlcmNlcHRvci9kdW1wLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjIzLjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaW50ZXJjZXB0b3IvZG5zLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjIzLjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZldGNoL2hlYWRlcnMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjMuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmV0Y2gvcmVzcG9uc2UuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjMuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmV0Y2gvZGlzcGF0Y2hlci13ZWFrcmVmLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjIzLjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZldGNoL3JlcXVlc3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjMuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmV0Y2gvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjMuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmlsZWFwaS9zeW1ib2xzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjIzLjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZpbGVhcGkvcHJvZ3Jlc3NldmVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yMy4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9maWxlYXBpL2VuY29kaW5nLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjIzLjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZpbGVhcGkvdXRpbC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yMy4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9maWxlYXBpL2ZpbGVyZWFkZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjMuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvY2FjaGUvc3ltYm9scy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yMy4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9jYWNoZS91dGlsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjIzLjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2NhY2hlL2NhY2hlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjIzLjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2NhY2hlL2NhY2hlc3RvcmFnZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yMy4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9jb29raWVzL2NvbnN0YW50cy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yMy4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9jb29raWVzL3V0aWwuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjMuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvY29va2llcy9wYXJzZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yMy4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9jb29raWVzL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjIzLjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL3dlYnNvY2tldC9ldmVudHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjMuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvd2Vic29ja2V0L2NvbnN0YW50cy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yMy4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi93ZWJzb2NrZXQvc3ltYm9scy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yMy4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi93ZWJzb2NrZXQvdXRpbC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yMy4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi93ZWJzb2NrZXQvZnJhbWUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjMuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvd2Vic29ja2V0L2Nvbm5lY3Rpb24uanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjMuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvd2Vic29ja2V0L3Blcm1lc3NhZ2UtZGVmbGF0ZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yMy4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi93ZWJzb2NrZXQvcmVjZWl2ZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjMuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvd2Vic29ja2V0L3NlbmRlci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bmRpY2lANi4yMy4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi93ZWJzb2NrZXQvd2Vic29ja2V0LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjIzLjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2V2ZW50c291cmNlL3V0aWwuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5kaWNpQDYuMjMuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2Utc3RyZWFtLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjIzLjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2V2ZW50c291cmNlL2V2ZW50c291cmNlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuZGljaUA2LjIzLjAvbm9kZV9tb2R1bGVzL3VuZGljaS9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9AYWN0aW9ucytodHRwLWNsaWVudEAzLjAuMi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvaHR0cC1jbGllbnQvc3JjL3Byb3h5LnRzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL0BhY3Rpb25zK2h0dHAtY2xpZW50QDMuMC4yL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9odHRwLWNsaWVudC9zcmMvaW5kZXgudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvZmFzdC1jb250ZW50LXR5cGUtcGFyc2VAMy4wLjAvbm9kZV9tb2R1bGVzL2Zhc3QtY29udGVudC10eXBlLXBhcnNlL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL0BhY3Rpb25zK2NvcmVAMy4wLjAvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2NvcmUvc3JjL2NvbW1hbmQudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvQGFjdGlvbnMrY29yZUAzLjAuMC9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9zcmMvdXRpbHMudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvQGFjdGlvbnMrY29yZUAzLjAuMC9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9zcmMvZmlsZS1jb21tYW5kLnRzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL0BhY3Rpb25zK2NvcmVAMy4wLjAvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2NvcmUvc3JjL2NvcmUudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvQGFjdGlvbnMraHR0cC1jbGllbnRANC4wLjAvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2h0dHAtY2xpZW50L3NyYy9pbmRleC50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9AYWN0aW9ucytodHRwLWNsaWVudEA0LjAuMC9ub2RlX21vZHVsZXMvQGFjdGlvbnMvaHR0cC1jbGllbnQvc3JjL3Byb3h5LnRzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL0BhY3Rpb25zK2h0dHAtY2xpZW50QDQuMC4wL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9odHRwLWNsaWVudC9zcmMvYXV0aC50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9AYWN0aW9ucytjb3JlQDMuMC4wL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9jb3JlL3NyYy9vaWRjLXV0aWxzLnRzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL0BhY3Rpb25zK2NvcmVAMy4wLjAvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2NvcmUvc3JjL3N1bW1hcnkudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvQGFjdGlvbnMrY29yZUAzLjAuMC9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9zcmMvcGF0aC11dGlscy50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9AYWN0aW9ucytjb3JlQDMuMC4wL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9jb3JlL3NyYy9wbGF0Zm9ybS50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9AYWN0aW9ucytleGVjQDMuMC4wL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9leGVjL3NyYy9leGVjLnRzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL0BhY3Rpb25zK2V4ZWNAMy4wLjAvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2V4ZWMvc3JjL3Rvb2xydW5uZXIudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvQGFjdGlvbnMraW9AMy4wLjIvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2lvL3NyYy9pby50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9AYWN0aW9ucytpb0AzLjAuMi9ub2RlX21vZHVsZXMvQGFjdGlvbnMvaW8vc3JjL2lvLXV0aWwudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvQGFjdGlvbnMrZ2l0aHViQDkuMC4wL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9naXRodWIvc3JjL2NvbnRleHQudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvQGFjdGlvbnMrZ2l0aHViQDkuMC4wL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9naXRodWIvc3JjL2ludGVybmFsL3V0aWxzLnRzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuaXZlcnNhbC11c2VyLWFnZW50QDcuMC4zL25vZGVfbW9kdWxlcy91bml2ZXJzYWwtdXNlci1hZ2VudC9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9iZWZvcmUtYWZ0ZXItaG9va0A0LjAuMC9ub2RlX21vZHVsZXMvYmVmb3JlLWFmdGVyLWhvb2svbGliL3JlZ2lzdGVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL2JlZm9yZS1hZnRlci1ob29rQDQuMC4wL25vZGVfbW9kdWxlcy9iZWZvcmUtYWZ0ZXItaG9vay9saWIvYWRkLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL2JlZm9yZS1hZnRlci1ob29rQDQuMC4wL25vZGVfbW9kdWxlcy9iZWZvcmUtYWZ0ZXItaG9vay9saWIvcmVtb3ZlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL2JlZm9yZS1hZnRlci1ob29rQDQuMC4wL25vZGVfbW9kdWxlcy9iZWZvcmUtYWZ0ZXItaG9vay9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9Ab2N0b2tpdCtlbmRwb2ludEAxMS4wLjIvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2VuZHBvaW50L2Rpc3QtYnVuZGxlL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL0BvY3Rva2l0K3JlcXVlc3RAMTAuMC43L25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9yZXF1ZXN0L2Rpc3QtYnVuZGxlL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL0BvY3Rva2l0K3JlcXVlc3QtZXJyb3JANy4xLjAvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3JlcXVlc3QtZXJyb3IvZGlzdC1zcmMvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvQG9jdG9raXQrZ3JhcGhxbEA5LjAuMy9ub2RlX21vZHVsZXMvQG9jdG9raXQvZ3JhcGhxbC9kaXN0LWJ1bmRsZS9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9Ab2N0b2tpdCthdXRoLXRva2VuQDYuMC4wL25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9hdXRoLXRva2VuL2Rpc3QtYnVuZGxlL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL0BvY3Rva2l0K2NvcmVANy4wLjYvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2NvcmUvZGlzdC1zcmMvdmVyc2lvbi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9Ab2N0b2tpdCtjb3JlQDcuMC42L25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9jb3JlL2Rpc3Qtc3JjL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL0BvY3Rva2l0K3BsdWdpbi1yZXN0LWVuZHBvaW50LW1ldGhvZHNAMTcuMC4wX2F0X29jdG9raXRfY29yZV83LjAuNi9ub2RlX21vZHVsZXMvQG9jdG9raXQvc3JjL3ZlcnNpb24udHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvQG9jdG9raXQrcGx1Z2luLXJlc3QtZW5kcG9pbnQtbWV0aG9kc0AxNy4wLjBfYXRfb2N0b2tpdF9jb3JlXzcuMC42L25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9zcmMvZ2VuZXJhdGVkL2VuZHBvaW50cy50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9Ab2N0b2tpdCtwbHVnaW4tcmVzdC1lbmRwb2ludC1tZXRob2RzQDE3LjAuMF9hdF9vY3Rva2l0X2NvcmVfNy4wLjYvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3NyYy9lbmRwb2ludHMtdG8tbWV0aG9kcy50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9Ab2N0b2tpdCtwbHVnaW4tcmVzdC1lbmRwb2ludC1tZXRob2RzQDE3LjAuMF9hdF9vY3Rva2l0X2NvcmVfNy4wLjYvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3NyYy9pbmRleC50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9Ab2N0b2tpdCtwbHVnaW4tcGFnaW5hdGUtcmVzdEAxNC4wLjBfYXRfb2N0b2tpdF9jb3JlXzcuMC42L25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9wbHVnaW4tcGFnaW5hdGUtcmVzdC9kaXN0LWJ1bmRsZS9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9AYWN0aW9ucytnaXRodWJAOS4wLjAvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2dpdGh1Yi9zcmMvdXRpbHMudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvQGFjdGlvbnMrZ2l0aHViQDkuMC4wL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9naXRodWIvc3JjL2dpdGh1Yi50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9AZ29vZ2xlK2dlbmVyYXRpdmUtYWlAMC4yLjEvbm9kZV9tb2R1bGVzL0Bnb29nbGUvZ2VuZXJhdGl2ZS1haS9kaXN0L2luZGV4Lm1qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9Ab2N0b2tpdCtwbHVnaW4tcmVxdWVzdC1sb2dANi4wLjBfYXRfb2N0b2tpdF9jb3JlXzcuMC42L25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9wbHVnaW4tcmVxdWVzdC1sb2cvZGlzdC1zcmMvdmVyc2lvbi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9Ab2N0b2tpdCtwbHVnaW4tcmVxdWVzdC1sb2dANi4wLjBfYXRfb2N0b2tpdF9jb3JlXzcuMC42L25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9wbHVnaW4tcmVxdWVzdC1sb2cvZGlzdC1zcmMvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvQG9jdG9raXQrcmVzdEAyMi4wLjEvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3Jlc3QvZGlzdC1zcmMvdmVyc2lvbi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9Ab2N0b2tpdCtyZXN0QDIyLjAuMS9ub2RlX21vZHVsZXMvQG9jdG9raXQvcmVzdC9kaXN0LXNyYy9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9Ab2N0b2tpdCtvYXV0aC1tZXRob2RzQDYuMC4yL25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9vYXV0aC1tZXRob2RzL2Rpc3QtYnVuZGxlL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL0BvY3Rva2l0K2F1dGgtb2F1dGgtZGV2aWNlQDguMC4zL25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9hdXRoLW9hdXRoLWRldmljZS9kaXN0LWJ1bmRsZS9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9Ab2N0b2tpdCthdXRoLW9hdXRoLXVzZXJANi4wLjIvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2F1dGgtb2F1dGgtdXNlci9kaXN0LWJ1bmRsZS9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9Ab2N0b2tpdCthdXRoLW9hdXRoLWFwcEA5LjAuMy9ub2RlX21vZHVsZXMvQG9jdG9raXQvYXV0aC1vYXV0aC1hcHAvZGlzdC1idW5kbGUvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5hc3BlY3RfcnVsZXNfanMvdW5pdmVyc2FsLWdpdGh1Yi1hcHAtand0QDIuMi4yL25vZGVfbW9kdWxlcy91bml2ZXJzYWwtZ2l0aHViLWFwcC1qd3QvbGliL3V0aWxzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuaXZlcnNhbC1naXRodWItYXBwLWp3dEAyLjIuMi9ub2RlX21vZHVsZXMvdW5pdmVyc2FsLWdpdGh1Yi1hcHAtand0L2xpYi9jcnlwdG8tbm9kZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy91bml2ZXJzYWwtZ2l0aHViLWFwcC1qd3RAMi4yLjIvbm9kZV9tb2R1bGVzL3VuaXZlcnNhbC1naXRodWItYXBwLWp3dC9saWIvZ2V0LXRva2VuLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3VuaXZlcnNhbC1naXRodWItYXBwLWp3dEAyLjIuMi9ub2RlX21vZHVsZXMvdW5pdmVyc2FsLWdpdGh1Yi1hcHAtand0L2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYXNwZWN0X3J1bGVzX2pzL3RvYWQtY2FjaGVAMy43LjAvbm9kZV9tb2R1bGVzL3RvYWQtY2FjaGUvZGlzdC90b2FkLWNhY2hlLm1qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmFzcGVjdF9ydWxlc19qcy9Ab2N0b2tpdCthdXRoLWFwcEA4LjEuMi9ub2RlX21vZHVsZXMvQG9jdG9raXQvYXV0aC1hcHAvZGlzdC1ub2RlL2luZGV4LmpzIiwgIi4uL3V0aWxzLnRzIiwgImxpYi9pc3N1ZS1sYWJlbGluZy50cyIsICJsaWIvbWFpbi50cyJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUVBLFFBQUksTUFBTSxVQUFRLEtBQUs7QUFDdkIsUUFBSSxNQUFNLFVBQVEsS0FBSztBQUN2QixRQUFJQSxRQUFPLFVBQVEsTUFBTTtBQUN6QixRQUFJQyxTQUFRLFVBQVEsT0FBTztB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QUFVO0FBQUEsTUFDZjtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDclpBO0FBQUE7QUFBQTtBQUdBLFFBQU0sNkJBQTZCLENBQUM7QUFHcEMsUUFBTSx1QkFBdUI7QUFBQSxNQUMzQjtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1B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QUksQ0FBQyxJQUFJO0FBQ2pDLE1BQUFBLFNBQVFBLFNBQVEsS0FBSyxJQUFJLENBQUMsSUFBSTtBQUM5QixNQUFBQSxTQUFRQSxTQUFRLE1BQU0sSUFBSSxDQUFDLElBQUk7QUFDL0IsTUFBQUEsU0FBUUEsU0FBUSxNQUFNLElBQUksQ0FBQyxJQUFJO0FBQy9CLE1BQUFBLFNBQVFBLFNBQVEsS0FBSyxJQUFJLENBQUMsSUFBSTtBQUU5QixNQUFBQSxTQUFRQSxTQUFRLFNBQVMsSUFBSSxDQUFDLElBQUk7QUFDbEMsTUFBQUEsU0FBUUEsU0FBUSxTQUFTLElBQUksQ0FBQyxJQUFJO0FBQ2xDLE1BQUFBLFNBQVFBLFNBQVEsT0FBTyxJQUFJLENBQUMsSUFBSTtBQUVoQyxNQUFBQSxTQUFRQSxTQUFRLE1BQU0sSUFBSSxDQUFDLElBQUk7QUFDL0IsTUFBQUEsU0FBUUEsU0FBUSxNQUFNLElBQUksQ0FBQyxJQUFJO0FBQy9CLE1BQUFBLFNBQVFBLFNBQVEsT0FBTyxJQUFJLEVBQUUsSUFBSTtBQUNqQyxNQUFBQSxTQUFRQSxTQUFRLE1BQU0sSUFBSSxFQUFFLElBQUk7QUFDaEMsTUFBQUEsU0FBUUEsU0FBUSxVQUFVLElBQUksRUFBRSxJQUFJO0FBQ3BDLE1BQUFBLFNBQVFBLFNBQVEsV0FBVyxJQUFJLEVBQUUsSUFBSTtBQUNyQyxNQUFBQSxTQUFRQSxTQUFRLFFBQVEsSUFBSSxFQUFFLElBQUk7QUFDbEMsTUFBQUEsU0FBUUEsU0FBUSxRQUFRLElBQUksRUFBRSxJQUFJO0FBQ2xDLE1BQUFBLFNBQVFBLFNBQVEsTUFBTSxJQUFJLEVBQUUsSUFBSTtBQUNoQyxNQUFBQSxTQUFRQSxTQUFRLFFBQVEsSUFBSSxFQUFFLElBQUk7QUFDbEMsTUFBQUEsU0FBUUEsU0FBUSxRQUFRLElBQUksRUFBRSxJQUFJO0FBQ2xDLE1BQUFBLFNBQVFBLFNBQVEsS0FBSyxJQUFJLEVBQUUsSUFBSTtBQUUvQixNQUFBQSxTQUFRQSxTQUFRLFFBQVEsSUFBSSxFQUFFLElBQUk7QUFDbEMsTUFBQUEsU0FBUUEsU0FBUSxZQUFZ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UUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFB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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRXpCLElBQVk7Q0FBWixTQUFZQyxZQUFTO0FBQ25CLEVBQUFBLFdBQUFBLFdBQUEsSUFBQSxJQUFBLEdBQUEsSUFBQTtBQUNBLEVBQUFBLFdBQUFBLFdBQUEsaUJBQUEsSUFBQSxHQUFBLElBQUE7QUFDQSxFQUFBQSxXQUFBQSxXQUFBLGtCQUFBLElBQUEsR0FBQSxJQUFBO0FBQ0EsRUFBQUEsV0FBQUEsV0FBQSxlQUFBLElBQUEsR0FBQSxJQUFBO0FBQ0EsRUFBQUEsV0FBQUEsV0FBQSxVQUFBLElBQUEsR0FBQSxJQUFBO0FBQ0EsRUFBQUEsV0FBQUEsV0FBQSxhQUFBLElBQUEsR0FBQSxJQUFBO0FBQ0EsRUFBQUEsV0FBQUEsV0FBQSxVQUFBLElBQUEsR0FBQSxJQUFBO0FBQ0EsRUFBQUEsV0FBQUEsV0FBQSxhQUFBLElBQUEsR0FBQSxJQUFBO0FBQ0EsRUFBQUEsV0FBQUEsV0FBQSxtQkFBQSxJQUFBLEdBQUEsSUFBQTtBQUNBLEVBQUFBLFdBQUFBLFdBQUEsbUJBQUEsSUFBQSxHQUFBLElBQUE7QUFDQSxFQUFBQSxXQUFBQSxXQUFBLFlBQUEsSUFBQSxHQUFBLElBQUE7QUFDQSxFQUFBQSxXQUFBQSxXQUFBLGNBQUEsSUFBQSxHQUFBLElBQUE7QUFDQSxFQUFBQSxXQUFBQSxXQUFBLGlCQUFBLElBQUEsR0FBQSxJQUFBO0FBQ0EsRUFBQUEsV0FBQUEsV0FBQSxXQUFBLElBQUEsR0FBQSxJQUFBO0FBQ0EsRUFBQUEsV0FBQUEsV0FBQSxVQUFBLElBQUEsR0FBQSxJQUFBO0FBQ0EsRUFBQUEsV0FBQUEsV0FBQSxrQkFBQSxJQUFBLEdBQUEsSUFBQTtBQUNBLEVBQUFBLFdBQUFBLFdBQUEsZUFBQSxJQUFBLEdBQUEsSUFBQTtBQUNBLEVBQUFBLFdBQUFBLFdBQUEsNkJBQUEsSUFBQSxHQUFBLElBQUE7QUFDQSxFQUFBQSxXQUFBQSxXQUFBLGdCQUFBLElBQUEsR0FBQSxJQUFBO0FBQ0EsRUFBQUEsV0FBQUEsV0FBQSxVQUFBLElBQUEsR0FBQSxJ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dHRwIiwgImh0dHBzT3Zlckh0dHAiLCAiaHR0cE92ZXJIdHRwcyIsICJodHRwc092ZXJIdHRwcyIsICJvcHRpb25zIiwgImRlYnVnIiwgImVycm9yIiwgInNvY2tldCIsICJyZXF1aXJlX3R1bm5lbCIsICJCbG9iIiwgInBhdGgiLCAiaWR4IiwgInN0cmVhbSIsICJoYW5kbGVyIiwgIml0ZXJhdG9yIiwgInJlcXVlc3QiLCAiZXJyIiwgImVycm9yIiwgInBhdGgiLCAicGF0aCIsICJoYW5kbGVyIiwgImVycm9yIiwgInJlcXVlc3QiLCAiRXZlbnRFbWl0dGVyIiwgInJlc29sdmUiLCAiZXJyIiwgImhhbmRsZXIiLCAibm9vcCIsICJzZXNzaW9uIiwgInJlcXVpcmVfY29uc3RhbnRzIiwgIkVSUk9SIiwgIlRZUEUiLCAiRkxBR1MiLCAiTEVOSUVOVF9GTEFHUyIsICJNRVRIT0RTIiwgIkZJTklTSCIsICJIRUFERVJfU1RBVEUiLCAiQnVmZmVyIiwgIkJ1ZmZlciIsICJyZXF1aXJlX2NvbnN0YW50cyIsICJjb250ZXh0IiwgImtleXMiLCAicmVxdWlyZV91dGlsIiwgInBlcmZvcm1hbmNlIiwgImNyeXB0byIsICJyZXF1ZXN0IiwgInJlc29sdmUiLCAicmVxdWlyZV9zeW1ib2xzIiwgIkJsb2IiLCAiZW50cnkiLCAiQmxvYiIsICJjcnlwdG8iLCAibm9vcCIsICJjaHVuayIsICJpdGVyYXRvciIsICJ2YWx1ZSIsICJlcnJvciIsICJjb25zdGFudHMiLCAiZXhwb3J0cyIsICJyZXF1ZXN0IiwgImNsaWVudCIsICJwYXRoIiwgInJlc29sdmUiLCAiY2xpZW50IiwgInNvY2tldCIsICJyZXF1ZXN0IiwgInBhdGgiLCAiaGVhZGVycyIsICJlcnJvciIsICJyZXNvbHZlIiwgImhhbmRsZXIiLCAiZXJyb3IiLCAicGF0aCIsICJoYW5kbGVyIiwgImh0dHAiLCAibm9vcCIsICJjb25uZWN0IiwgImhhbmRsZXIiLCAicmVxdWVzdCIsICJyZXNvbHZlIiwgInNvY2tldCIsICJyZXNvbHZlIiwgImhhbmRsZXIiLCAib3JpZ2luIiwgImVycm9yIiwgInBvb2wiLCAiZGlzcGF0Y2hlciIsICJBZ2VudCIsICJoYW5kbGVyIiwgIlVSTCIsICJBZ2VudCIsICJub29wIiwgImhhbmRsZXIiLCAicGF0aCIsICJQcm94eUFnZW50IiwgIm9yaWdpbiIsICJwcm90b2NvbCIsICJvcHRzIiwgIlByb3h5QWdlbnQiLCAiQWdlbnQiLCAiaGFuZGxlciIsICJlcnIiLCAiaGFuZGxlciIsICJub29wIiwgInJlc29sdmUiLCAiY29uc3VtZSIsICJyZXF1aXJlX3V0aWwiLCAiY29udGV4dCIsICJyZXF1ZXN0IiwgInJlc29sdmUiLCAiY29udGV4dCIsICJjYWxsYmFjayIsICJyZXMiLCAib3BhcXVlIiwgInJlc29sdmUiLCAiaGFuZGxlciIsICJjb250ZXh0IiwgImJvZHkiLCAiY29udGV4dCIsICJyZXNvbHZlIiwgImNvbnRleHQiLCAicmVzb2x2ZSIsICJtb2NrRGlzcGF0Y2giLCAicGF0aCIsICJnZXRSZXNwb25zZURhdGEiLCAiaGFuZGxlciIsICJlcnJvciIsICJnZXRSZXNwb25zZURhdGEiLCAicmVwbHlQYXJhbWV0ZXJzIiwgIm5ld01vY2tEaXNwYXRjaCIsICJlcnJvciIsICJwYXRoIiwgIkFnZW50IiwgImhhbmRsZXIiLCAicmVxdWlyZV9nbG9iYWwiLCAiQWdlbnQiLCAiaGFuZGxlciIsICJvcHRzIiwgImhhbmRsZXIiLCAiaGFuZGxlciIsICJoYW5kbGVyIiwgImhhbmRsZXIiLCAiZXJyIiwgImV4aXN0cyIsICJkZWxpbWl0ZXIiLCAiaXRlcmF0b3IiLCAiSGVhZGVycyIsICJIZWFkZXJzIiwgInJlcXVpcmVfcmVxdWVzdCIsICJIZWFkZXJzIiwgIkZpbmFsaXphdGlvblJlZ2lzdHJ5IiwgInJlcXVlc3QiLCAiYmFzZVVybCIsICJtYWtlUmVxdWVzdCIsICJlcnJvciIsICJmZXRjaCIsICJyZXF1ZXN0IiwgIml0ZXJhdG9yIiwgInJlc29sdmUiLCAicmVxdWlyZV9zeW1ib2xzIiwgInJlcXVpcmVfdXRpbCIsICJTdHJpbmdEZWNvZGVyIiwgImJ0b2EiLCAiZXJyb3IiLCAidHlwZSIsICJyZXF1aXJlX3N5bWJvbHMiLCAicmVxdWlyZV91dGlsIiwgInJlcXVlc3QiLCAicmVxdWVzdCIsICJjYWNoZSIsICJyZXF1aXJlX2NvbnN0YW50cyIsICJyZXF1aXJlX3V0aWwiLCAicGF0aCIsICJIZWFkZXJzIiwgInJlcXVpcmVfY29uc3RhbnRzIiwgInJlcXVpcmVfc3ltYm9scyIsICJyZXF1aXJlX3V0aWwiLCAiY3J5cHRvIiwgImJ1ZmZlciIsICJtYWtlUmVxdWVzdCIsICJIZWFkZXJzIiwgImNyeXB0byIsICJyZXF1ZXN0IiwgImVycm9yIiwgImVycm9yIiwgImJvZHkiLCAibm9kZSIsICJyZXF1aXJlX3V0aWwiLCAicmVzb2x2ZSIsICJtYWtlUmVxdWVzdCIsICJlcnJvciIsICJBZ2VudCIsICJQcm94eUFnZW50IiwgImhhbmRsZXIiLCAicGF0aCIsICJmZXRjaCIsICJnZXRQcm94eVVybCIsICJjaGVja0J5cGFzcyIsICJEZWNvZGVkVVJMIiwgIl9hIiwgImlzTG9vcGJhY2tBZGRyZXNzIiwgImdldFByb3h5VXJsIiwgImh0dHAiLCAiaHR0cHMiLCAidHVubmVsIiwgIkh0dHBDb2RlcyIsICJIZWFkZXJzIiwgIk1lZGlhVHlwZXMiLCAiSHR0cFJlZGlyZWN0Q29kZXMiLCAiSHR0cFJlc3BvbnNlUmV0cnlDb2RlcyIsICJSZXRyeWFibGVIdHRwVmVyYnMiLCAiRXhwb25lbnRpYWxCYWNrb2ZmQ2VpbGluZyIsICJFeHBvbmVudGlhbEJhY2tvZmZUaW1lU2xpY2UiLCAiSHR0cENsaWVudEVycm9yIiwgIkh0dHBDbGllbnRSZXNwb25zZSIsICJyZXNvbHZlIiwgIl9fYXdhaXRlciIsICJIdHRwQ2xpZW50IiwgInVzZXJBZ2VudCIsICJpbmZvIiwgImhhbmRsZXIiLCAibG93ZXJjYXNlS2V5cyIsICJOdWxsT2JqZWN0IiwgInBhcnNlIiwgInNhZmVQYXJzZSIsICJvcyIsICJkZWxpbWl0ZXIiLCAib3MiLCAicGF0aCIsICJfYSIsICJIdHRwQ29kZXMiLCAiSGVhZGVycyIsICJNZWRpYVR5cGVzIiwgInJlc29sdmUiLCAidXNlckFnZW50IiwgImluZm8iLCAiaGFuZGxlciIsICJyZXNvbHZlIiwgImVycm9yIiwgIl9hIiwgIkVPTCIsICJfYSIsICJFT0wiLCAib3MiLCAib3MiLCAicGF0aCIsICJwYXRoIiwgImZzIiwgInBhdGgiLCAic2V0VGltZW91dCIsICJJU19XSU5ET1dTIiwgInJlc29sdmUiLCAiX19hd2FpdGVyIiwgImVycm9yIiwgIl9hIiwgIl9fYXdhaXRlciIsICJfYSIsICJvcyIsICJFeGl0Q29kZSIsICJleGlzdHNTeW5jIiwgIkVPTCIsICJwYXRoIiwgIl9hIiwgImltcG9ydF91bmRpY2kiLCAiX19hd2FpdGVyIiwgIm5hbWUiLCAibWV0aG9kIiwgImhvb2siLCAiZXJyb3IiLCAiaG9vayIsICJsb3dlcmNhc2VLZXlzIiwgImRlZmF1bHRzIiwgImNvbnRleHQiLCAiVkVSU0lPTiIsICJpc1BsYWluT2JqZWN0IiwgImZldGNoIiwgImVycm9yIiwgIndpdGhEZWZhdWx0cyIsICJWRVJTSU9OIiwgImJhc2VVcmwiLCAid2l0aERlZmF1bHRzIiwgInNlcCIsICJyZXF1ZXN0IiwgImVuZHBvaW50IiwgIlZFUlNJT04iLCAibm9vcCIsICJWRVJTSU9OIiwgImRlZmF1bHRzIiwgImhvb2siLCAiYXV0aCIsICJWRVJTSU9OIiwgImVuZHBvaW50IiwgImRlZmF1bHRzIiwgIm9wdGlvbnMiLCAiVkVSU0lPTiIsICJWRVJTSU9OIiwgImVycm9yIiwgIlZFUlNJT04iLCAiY29udGV4dCIsICJIYXJtQ2F0ZWdvcnkiLCAiSGFybUJsb2NrVGhyZXNob2xkIiwgIkhhcm1Qcm9iYWJpbGl0eSIsICJCbG9ja1JlYXNvbiIsICJGaW5pc2hSZWFzb24iLCAiVGFza1R5cGUiLCAiVGFzayIsICJfYSIsICJyZXF1ZXN0IiwgIl9hIiwgIlZFUlNJT04iLCAicmVxdWVzdCIsICJwYXRoIiwgImVycm9yIiwgIlZFUlNJT04iLCAiVkVSU0lPTiIsICJPY3Rva2l0IiwgIlZFUlNJT04iLCAicmVxdWVzdCIsICJlcnJvciIsICJyZXF1ZXN0IiwgInJlcXVlc3QiLCAiYXV0aCIsICJhdXRoMiIsICJyZXNvbHZlIiwgInJlcXVlc3QiLCAiZXJyb3IiLCAiYXV0aCIsICJob29rIiwgImVuZHBvaW50IiwgIlZFUlNJT04iLCAiVkVSU0lPTiIsICJhdXRoIiwgImVycm9yIiwgImhvb2siLCAicmVxdWVzdCIsICJlbmRwb2ludCIsICJhdXRoIiwgImhvb2siLCAiZW5kcG9pbnQiLCAiZXJyb3IiLCAiVkVSU0lPTiIsICJpdGVtIiwgImVycm9yIiwgInJlcXVlc3QiLCAiYXV0aCIsICJob29rIiwgImVuZHBvaW50IiwgInJlc29sdmUiLCAiVkVSU0lPTiIsICJPY3Rva2l0IiwgImNvbnRleHQiLCAiaXNzdWUiLCAiY29udGV4dCIsICJPY3Rva2l0IiwgImNvbnRleHQiXQp9Cg== diff --git a/github-actions/issue-labeling/package.json b/github-actions/issue-labeling/package.json new file mode 100644 index 000000000..7314435dc --- /dev/null +++ b/github-actions/issue-labeling/package.json @@ -0,0 +1,13 @@ +{ + "type": "module", + "dependencies": { + "@actions/core": "3.0.0", + "@actions/github": "9.0.0", + "@octokit/openapi-types": "27.0.0", + "@octokit/rest": "22.0.1", + "@google/generative-ai": "^0.2.0", + "@types/jasmine": "6.0.0", + "@types/node": "24.10.9", + "jasmine": "6.0.0" + } +} diff --git a/github-actions/package.json b/github-actions/package.json index b7725d5b8..f9a80f963 100644 --- a/github-actions/package.json +++ b/github-actions/package.json @@ -6,6 +6,7 @@ "@octokit/auth-app": "8.1.2", "@octokit/rest": "22.0.1", "@types/jasmine": "6.0.0", - "@types/node": "24.10.9" + "@types/node": "24.10.9", + "@google/generative-ai": "^0.2.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b8d112e91..20eeee082 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -301,6 +301,9 @@ importers: '@actions/github': specifier: 9.0.0 version: 9.0.0 + '@google/generative-ai': + specifier: ^0.2.0 + version: 0.2.1 '@octokit/auth-app': specifier: 8.1.2 version: 8.1.2 @@ -410,6 +413,33 @@ importers: specifier: 7.19.2 version: 7.19.2 + github-actions/issue-labeling: + dependencies: + '@actions/core': + specifier: 3.0.0 + version: 3.0.0 + '@actions/github': + specifier: 9.0.0 + version: 9.0.0 + '@google/generative-ai': + specifier: ^0.2.0 + version: 0.2.1 + '@octokit/openapi-types': + specifier: 27.0.0 + version: 27.0.0 + '@octokit/rest': + specifier: 22.0.1 + version: 22.0.1 + '@types/jasmine': + specifier: 6.0.0 + version: 6.0.0 + '@types/node': + specifier: 24.10.9 + version: 24.10.9 + jasmine: + specifier: 6.0.0 + version: 6.0.0 + github-actions/org-file-sync: dependencies: '@actions/core': @@ -1557,6 +1587,10 @@ packages: '@modelcontextprotocol/sdk': optional: true + '@google/generative-ai@0.2.1': + resolution: {integrity: sha512-gNmMFadfwi7qf/6M9gImgyGJXY1jKQ/de8vGOqgJ0PPYgQ7WwzZDavbKrIuXS2zdqZZaYtxW3EFN6aG9x5wtFw==} + engines: {node: '>=18.0.0'} + '@googleapis/sqladmin@35.0.0': resolution: {integrity: sha512-L9HaDhGBv7ElppWw3Sr+L2fbP+9pnP61bu1ZmfgoztSMMhtihQ3FGb175V1qx1zshiyCorspl0OiunA80G3Xjw==} engines: {node: '>=12.0.0'} @@ -7250,6 +7284,8 @@ snapshots: - supports-color - utf-8-validate + '@google/generative-ai@0.2.1': {} + '@googleapis/sqladmin@35.0.0': dependencies: googleapis-common: 8.0.1 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 1a03820b1..355e787ce 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -21,6 +21,7 @@ packages: - github-actions/branch-manager - github-actions/saucelabs - github-actions/browserstack + - github-actions/issue-labeling - github-actions/bazel/configure-remote # The minimum age of a release to be considered for dependency installation. # The value is in minutes (1440 minutes = 1 day).