summaryrefslogtreecommitdiff
path: root/includes/external/discord/node_modules/undici
diff options
context:
space:
mode:
authorRaindropsSys <contact@minteck.org>2023-03-21 16:21:21 +0100
committerRaindropsSys <contact@minteck.org>2023-03-21 16:21:21 +0100
commit475c5731bf3362b6ac8d2dc5d5b43e4b4a6117bd (patch)
tree2cff46debf9c1e13892e7babff9deb6874ecb4b2 /includes/external/discord/node_modules/undici
parent7ccc2de87f9e25c715dc09b9aba4eb5c66f80424 (diff)
downloadpluralconnect-475c5731bf3362b6ac8d2dc5d5b43e4b4a6117bd.tar.gz
pluralconnect-475c5731bf3362b6ac8d2dc5d5b43e4b4a6117bd.tar.bz2
pluralconnect-475c5731bf3362b6ac8d2dc5d5b43e4b4a6117bd.zip
Updated 26 files and added 1074 files (automated)
Diffstat (limited to 'includes/external/discord/node_modules/undici')
-rw-r--r--includes/external/discord/node_modules/undici/LICENSE21
-rw-r--r--includes/external/discord/node_modules/undici/README.md438
-rw-r--r--includes/external/discord/node_modules/undici/docs/api/Agent.md80
-rw-r--r--includes/external/discord/node_modules/undici/docs/api/BalancedPool.md99
-rw-r--r--includes/external/discord/node_modules/undici/docs/api/Client.md269
-rw-r--r--includes/external/discord/node_modules/undici/docs/api/Connector.md115
-rw-r--r--includes/external/discord/node_modules/undici/docs/api/ContentType.md57
-rw-r--r--includes/external/discord/node_modules/undici/docs/api/Cookies.md101
-rw-r--r--includes/external/discord/node_modules/undici/docs/api/DiagnosticsChannel.md204
-rw-r--r--includes/external/discord/node_modules/undici/docs/api/DispatchInterceptor.md60
-rw-r--r--includes/external/discord/node_modules/undici/docs/api/Dispatcher.md886
-rw-r--r--includes/external/discord/node_modules/undici/docs/api/Errors.md41
-rw-r--r--includes/external/discord/node_modules/undici/docs/api/Fetch.md25
-rw-r--r--includes/external/discord/node_modules/undici/docs/api/MockAgent.md540
-rw-r--r--includes/external/discord/node_modules/undici/docs/api/MockClient.md77
-rw-r--r--includes/external/discord/node_modules/undici/docs/api/MockErrors.md12
-rw-r--r--includes/external/discord/node_modules/undici/docs/api/MockPool.md512
-rw-r--r--includes/external/discord/node_modules/undici/docs/api/Pool.md84
-rw-r--r--includes/external/discord/node_modules/undici/docs/api/PoolStats.md35
-rw-r--r--includes/external/discord/node_modules/undici/docs/api/ProxyAgent.md124
-rw-r--r--includes/external/discord/node_modules/undici/docs/api/WebSocket.md20
-rw-r--r--includes/external/discord/node_modules/undici/docs/api/api-lifecycle.md62
-rw-r--r--includes/external/discord/node_modules/undici/docs/assets/lifecycle-diagram.pngbin0 -> 47090 bytes
-rw-r--r--includes/external/discord/node_modules/undici/docs/best-practices/client-certificate.md64
-rw-r--r--includes/external/discord/node_modules/undici/docs/best-practices/mocking-request.md136
-rw-r--r--includes/external/discord/node_modules/undici/docs/best-practices/proxy.md127
-rw-r--r--includes/external/discord/node_modules/undici/docs/best-practices/writing-tests.md20
-rw-r--r--includes/external/discord/node_modules/undici/index.d.ts55
-rw-r--r--includes/external/discord/node_modules/undici/lib/fetch/LICENSE21
-rw-r--r--includes/external/discord/node_modules/undici/lib/llhttp/constants.d.ts199
-rwxr-xr-xincludes/external/discord/node_modules/undici/lib/llhttp/llhttp.wasmbin0 -> 56001 bytes
-rwxr-xr-xincludes/external/discord/node_modules/undici/lib/llhttp/llhttp_simd.wasmbin0 -> 55985 bytes
-rw-r--r--includes/external/discord/node_modules/undici/lib/llhttp/utils.d.ts4
-rw-r--r--includes/external/discord/node_modules/undici/package.json136
-rw-r--r--includes/external/discord/node_modules/undici/types/agent.d.ts31
-rw-r--r--includes/external/discord/node_modules/undici/types/api.d.ts43
-rw-r--r--includes/external/discord/node_modules/undici/types/balanced-pool.d.ts18
-rw-r--r--includes/external/discord/node_modules/undici/types/client.d.ts88
-rw-r--r--includes/external/discord/node_modules/undici/types/connector.d.ts39
-rw-r--r--includes/external/discord/node_modules/undici/types/content-type.d.ts21
-rw-r--r--includes/external/discord/node_modules/undici/types/cookies.d.ts28
-rw-r--r--includes/external/discord/node_modules/undici/types/diagnostics-channel.d.ts67
-rw-r--r--includes/external/discord/node_modules/undici/types/dispatcher.d.ts237
-rw-r--r--includes/external/discord/node_modules/undici/types/errors.d.ts119
-rw-r--r--includes/external/discord/node_modules/undici/types/fetch.d.ts209
-rw-r--r--includes/external/discord/node_modules/undici/types/file.d.ts39
-rw-r--r--includes/external/discord/node_modules/undici/types/filereader.d.ts54
-rw-r--r--includes/external/discord/node_modules/undici/types/formdata.d.ts108
-rw-r--r--includes/external/discord/node_modules/undici/types/global-dispatcher.d.ts9
-rw-r--r--includes/external/discord/node_modules/undici/types/global-origin.d.ts7
-rw-r--r--includes/external/discord/node_modules/undici/types/handlers.d.ts9
-rw-r--r--includes/external/discord/node_modules/undici/types/header.d.ts4
-rw-r--r--includes/external/discord/node_modules/undici/types/interceptors.d.ts5
-rw-r--r--includes/external/discord/node_modules/undici/types/mock-agent.d.ts50
-rw-r--r--includes/external/discord/node_modules/undici/types/mock-client.d.ts25
-rw-r--r--includes/external/discord/node_modules/undici/types/mock-errors.d.ts12
-rw-r--r--includes/external/discord/node_modules/undici/types/mock-interceptor.d.ts93
-rw-r--r--includes/external/discord/node_modules/undici/types/mock-pool.d.ts25
-rw-r--r--includes/external/discord/node_modules/undici/types/patch.d.ts71
-rw-r--r--includes/external/discord/node_modules/undici/types/pool-stats.d.ts19
-rw-r--r--includes/external/discord/node_modules/undici/types/pool.d.ts28
-rw-r--r--includes/external/discord/node_modules/undici/types/proxy-agent.d.ts30
-rw-r--r--includes/external/discord/node_modules/undici/types/readable.d.ts61
-rw-r--r--includes/external/discord/node_modules/undici/types/webidl.d.ts218
-rw-r--r--includes/external/discord/node_modules/undici/types/websocket.d.ts122
65 files changed, 6513 insertions, 0 deletions
diff --git a/includes/external/discord/node_modules/undici/LICENSE b/includes/external/discord/node_modules/undici/LICENSE
new file mode 100644
index 0000000..e7323bb
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) Matteo Collina and Undici contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/includes/external/discord/node_modules/undici/README.md b/includes/external/discord/node_modules/undici/README.md
new file mode 100644
index 0000000..05a5d21
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/README.md
@@ -0,0 +1,438 @@
+# undici
+
+[![Node CI](https://github.com/nodejs/undici/actions/workflows/nodejs.yml/badge.svg)](https://github.com/nodejs/undici/actions/workflows/nodejs.yml) [![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat)](http://standardjs.com/) [![npm version](https://badge.fury.io/js/undici.svg)](https://badge.fury.io/js/undici) [![codecov](https://codecov.io/gh/nodejs/undici/branch/main/graph/badge.svg?token=yZL6LtXkOA)](https://codecov.io/gh/nodejs/undici)
+
+An HTTP/1.1 client, written from scratch for Node.js.
+
+> Undici means eleven in Italian. 1.1 -> 11 -> Eleven -> Undici.
+It is also a Stranger Things reference.
+
+Have a question about using Undici? Open a [Q&A Discussion](https://github.com/nodejs/undici/discussions/new) or join our official OpenJS [Slack](https://openjs-foundation.slack.com/archives/C01QF9Q31QD) channel.
+
+## Install
+
+```
+npm i undici
+```
+
+## Benchmarks
+
+The benchmark is a simple `hello world` [example](benchmarks/benchmark.js) using a
+number of unix sockets (connections) with a pipelining depth of 10 running on Node 16.
+The benchmarks below have the [simd](https://github.com/WebAssembly/simd) feature enabled.
+
+### Connections 1
+
+| Tests | Samples | Result | Tolerance | Difference with slowest |
+|---------------------|---------|---------------|-----------|-------------------------|
+| http - no keepalive | 15 | 4.63 req/sec | ± 2.77 % | - |
+| http - keepalive | 10 | 4.81 req/sec | ± 2.16 % | + 3.94 % |
+| undici - stream | 25 | 62.22 req/sec | ± 2.67 % | + 1244.58 % |
+| undici - dispatch | 15 | 64.33 req/sec | ± 2.47 % | + 1290.24 % |
+| undici - request | 15 | 66.08 req/sec | ± 2.48 % | + 1327.88 % |
+| undici - pipeline | 10 | 66.13 req/sec | ± 1.39 % | + 1329.08 % |
+
+### Connections 50
+
+| Tests | Samples | Result | Tolerance | Difference with slowest |
+|---------------------|---------|------------------|-----------|-------------------------|
+| http - no keepalive | 50 | 3546.49 req/sec | ± 2.90 % | - |
+| http - keepalive | 15 | 5692.67 req/sec | ± 2.48 % | + 60.52 % |
+| undici - pipeline | 25 | 8478.71 req/sec | ± 2.62 % | + 139.07 % |
+| undici - request | 20 | 9766.66 req/sec | ± 2.79 % | + 175.39 % |
+| undici - stream | 15 | 10109.74 req/sec | ± 2.94 % | + 185.06 % |
+| undici - dispatch | 25 | 10949.73 req/sec | ± 2.54 % | + 208.75 % |
+
+## Quick Start
+
+```js
+import { request } from 'undici'
+
+const {
+ statusCode,
+ headers,
+ trailers,
+ body
+} = await request('http://localhost:3000/foo')
+
+console.log('response received', statusCode)
+console.log('headers', headers)
+
+for await (const data of body) {
+ console.log('data', data)
+}
+
+console.log('trailers', trailers)
+```
+
+## Body Mixins
+
+The `body` mixins are the most common way to format the request/response body. Mixins include:
+
+- [`.formData()`](https://fetch.spec.whatwg.org/#dom-body-formdata)
+- [`.json()`](https://fetch.spec.whatwg.org/#dom-body-json)
+- [`.text()`](https://fetch.spec.whatwg.org/#dom-body-text)
+
+Example usage:
+
+```js
+import { request } from 'undici'
+
+const {
+ statusCode,
+ headers,
+ trailers,
+ body
+} = await request('http://localhost:3000/foo')
+
+console.log('response received', statusCode)
+console.log('headers', headers)
+console.log('data', await body.json())
+console.log('trailers', trailers)
+```
+
+_Note: Once a mixin has been called then the body cannot be reused, thus calling additional mixins on `.body`, e.g. `.body.json(); .body.text()` will result in an error `TypeError: unusable` being thrown and returned through the `Promise` rejection._
+
+Should you need to access the `body` in plain-text after using a mixin, the best practice is to use the `.text()` mixin first and then manually parse the text to the desired format.
+
+For more information about their behavior, please reference the body mixin from the [Fetch Standard](https://fetch.spec.whatwg.org/#body-mixin).
+
+## Common API Methods
+
+This section documents our most commonly used API methods. Additional APIs are documented in their own files within the [docs](./docs/) folder and are accessible via the navigation list on the left side of the docs site.
+
+### `undici.request([url, options]): Promise`
+
+Arguments:
+
+* **url** `string | URL | UrlObject`
+* **options** [`RequestOptions`](./docs/api/Dispatcher.md#parameter-requestoptions)
+ * **dispatcher** `Dispatcher` - Default: [getGlobalDispatcher](#undicigetglobaldispatcher)
+ * **method** `String` - Default: `PUT` if `options.body`, otherwise `GET`
+ * **maxRedirections** `Integer` - Default: `0`
+
+Returns a promise with the result of the `Dispatcher.request` method.
+
+Calls `options.dispatcher.request(options)`.
+
+See [Dispatcher.request](./docs/api/Dispatcher.md#dispatcherrequestoptions-callback) for more details.
+
+### `undici.stream([url, options, ]factory): Promise`
+
+Arguments:
+
+* **url** `string | URL | UrlObject`
+* **options** [`StreamOptions`](./docs/api/Dispatcher.md#parameter-streamoptions)
+ * **dispatcher** `Dispatcher` - Default: [getGlobalDispatcher](#undicigetglobaldispatcher)
+ * **method** `String` - Default: `PUT` if `options.body`, otherwise `GET`
+ * **maxRedirections** `Integer` - Default: `0`
+* **factory** `Dispatcher.stream.factory`
+
+Returns a promise with the result of the `Dispatcher.stream` method.
+
+Calls `options.dispatcher.stream(options, factory)`.
+
+See [Dispatcher.stream](docs/api/Dispatcher.md#dispatcherstreamoptions-factory-callback) for more details.
+
+### `undici.pipeline([url, options, ]handler): Duplex`
+
+Arguments:
+
+* **url** `string | URL | UrlObject`
+* **options** [`PipelineOptions`](docs/api/Dispatcher.md#parameter-pipelineoptions)
+ * **dispatcher** `Dispatcher` - Default: [getGlobalDispatcher](#undicigetglobaldispatcher)
+ * **method** `String` - Default: `PUT` if `options.body`, otherwise `GET`
+ * **maxRedirections** `Integer` - Default: `0`
+* **handler** `Dispatcher.pipeline.handler`
+
+Returns: `stream.Duplex`
+
+Calls `options.dispatch.pipeline(options, handler)`.
+
+See [Dispatcher.pipeline](docs/api/Dispatcher.md#dispatcherpipelineoptions-handler) for more details.
+
+### `undici.connect([url, options]): Promise`
+
+Starts two-way communications with the requested resource using [HTTP CONNECT](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/CONNECT).
+
+Arguments:
+
+* **url** `string | URL | UrlObject`
+* **options** [`ConnectOptions`](docs/api/Dispatcher.md#parameter-connectoptions)
+ * **dispatcher** `Dispatcher` - Default: [getGlobalDispatcher](#undicigetglobaldispatcher)
+ * **maxRedirections** `Integer` - Default: `0`
+* **callback** `(err: Error | null, data: ConnectData | null) => void` (optional)
+
+Returns a promise with the result of the `Dispatcher.connect` method.
+
+Calls `options.dispatch.connect(options)`.
+
+See [Dispatcher.connect](docs/api/Dispatcher.md#dispatcherconnectoptions-callback) for more details.
+
+### `undici.fetch(input[, init]): Promise`
+
+Implements [fetch](https://fetch.spec.whatwg.org/#fetch-method).
+
+* https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch
+* https://fetch.spec.whatwg.org/#fetch-method
+
+Only supported on Node 16.8+.
+
+Basic usage example:
+
+```js
+import { fetch } from 'undici'
+
+
+const res = await fetch('https://example.com')
+const json = await res.json()
+console.log(json)
+```
+
+You can pass an optional dispatcher to `fetch` as:
+
+```js
+import { fetch, Agent } from 'undici'
+
+const res = await fetch('https://example.com', {
+ // Mocks are also supported
+ dispatcher: new Agent({
+ keepAliveTimeout: 10,
+ keepAliveMaxTimeout: 10
+ })
+})
+const json = await res.json()
+console.log(json)
+```
+
+#### `request.body`
+
+A body can be of the following types:
+
+- ArrayBuffer
+- ArrayBufferView
+- AsyncIterables
+- Blob
+- Iterables
+- String
+- URLSearchParams
+- FormData
+
+In this implementation of fetch, ```request.body``` now accepts ```Async Iterables```. It is not present in the [Fetch Standard.](https://fetch.spec.whatwg.org)
+
+```js
+import { fetch } from 'undici'
+
+const data = {
+ async *[Symbol.asyncIterator]() {
+ yield 'hello'
+ yield 'world'
+ },
+}
+
+await fetch('https://example.com', { body: data, method: 'POST', duplex: 'half' })
+```
+
+#### `request.duplex`
+
+- half
+
+In this implementation of fetch, `request.duplex` must be set if `request.body` is `ReadableStream` or `Async Iterables`. And fetch requests are currently always be full duplex. More detail refer to [Fetch Standard.](https://fetch.spec.whatwg.org/#dom-requestinit-duplex)
+
+#### `response.body`
+
+Nodejs has two kinds of streams: [web streams](https://nodejs.org/dist/latest-v16.x/docs/api/webstreams.html), which follow the API of the WHATWG web standard found in browsers, and an older Node-specific [streams API](https://nodejs.org/api/stream.html). `response.body` returns a readable web stream. If you would prefer to work with a Node stream you can convert a web stream using `.fromWeb()`.
+
+```js
+import { fetch } from 'undici'
+import { Readable } from 'node:stream'
+
+const response = await fetch('https://example.com')
+const readableWebStream = response.body
+const readableNodeStream = Readable.fromWeb(readableWebStream)
+```
+
+#### Specification Compliance
+
+This section documents parts of the [Fetch Standard](https://fetch.spec.whatwg.org) that Undici does
+not support or does not fully implement.
+
+##### Garbage Collection
+
+* https://fetch.spec.whatwg.org/#garbage-collection
+
+The [Fetch Standard](https://fetch.spec.whatwg.org) allows users to skip consuming the response body by relying on
+[garbage collection](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management#garbage_collection) to release connection resources. Undici does not do the same. Therefore, it is important to always either consume or cancel the response body.
+
+Garbage collection in Node is less aggressive and deterministic
+(due to the lack of clear idle periods that browsers have through the rendering refresh rate)
+which means that leaving the release of connection resources to the garbage collector can lead
+to excessive connection usage, reduced performance (due to less connection re-use), and even
+stalls or deadlocks when running out of connections.
+
+```js
+// Do
+const headers = await fetch(url)
+ .then(async res => {
+ for await (const chunk of res.body) {
+ // force consumption of body
+ }
+ return res.headers
+ })
+
+// Do not
+const headers = await fetch(url)
+ .then(res => res.headers)
+```
+
+However, if you want to get only headers, it might be better to use `HEAD` request method. Usage of this method will obviate the need for consumption or cancelling of the response body. See [MDN - HTTP - HTTP request methods - HEAD](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/HEAD) for more details.
+
+```js
+const headers = await fetch(url, { method: 'HEAD' })
+ .then(res => res.headers)
+```
+
+##### Forbidden and Safelisted Header Names
+
+* https://fetch.spec.whatwg.org/#cors-safelisted-response-header-name
+* https://fetch.spec.whatwg.org/#forbidden-header-name
+* https://fetch.spec.whatwg.org/#forbidden-response-header-name
+* https://github.com/wintercg/fetch/issues/6
+
+The [Fetch Standard](https://fetch.spec.whatwg.org) requires implementations to exclude certain headers from requests and responses. In browser environments, some headers are forbidden so the user agent remains in full control over them. In Undici, these constraints are removed to give more control to the user.
+
+### `undici.upgrade([url, options]): Promise`
+
+Upgrade to a different protocol. See [MDN - HTTP - Protocol upgrade mechanism](https://developer.mozilla.org/en-US/docs/Web/HTTP/Protocol_upgrade_mechanism) for more details.
+
+Arguments:
+
+* **url** `string | URL | UrlObject`
+* **options** [`UpgradeOptions`](docs/api/Dispatcher.md#parameter-upgradeoptions)
+ * **dispatcher** `Dispatcher` - Default: [getGlobalDispatcher](#undicigetglobaldispatcher)
+ * **maxRedirections** `Integer` - Default: `0`
+* **callback** `(error: Error | null, data: UpgradeData) => void` (optional)
+
+Returns a promise with the result of the `Dispatcher.upgrade` method.
+
+Calls `options.dispatcher.upgrade(options)`.
+
+See [Dispatcher.upgrade](docs/api/Dispatcher.md#dispatcherupgradeoptions-callback) for more details.
+
+### `undici.setGlobalDispatcher(dispatcher)`
+
+* dispatcher `Dispatcher`
+
+Sets the global dispatcher used by Common API Methods.
+
+### `undici.getGlobalDispatcher()`
+
+Gets the global dispatcher used by Common API Methods.
+
+Returns: `Dispatcher`
+
+### `undici.setGlobalOrigin(origin)`
+
+* origin `string | URL | undefined`
+
+Sets the global origin used in `fetch`.
+
+If `undefined` is passed, the global origin will be reset. This will cause `Response.redirect`, `new Request()`, and `fetch` to throw an error when a relative path is passed.
+
+```js
+setGlobalOrigin('http://localhost:3000')
+
+const response = await fetch('/api/ping')
+
+console.log(response.url) // http://localhost:3000/api/ping
+```
+
+### `undici.getGlobalOrigin()`
+
+Gets the global origin used in `fetch`.
+
+Returns: `URL`
+
+### `UrlObject`
+
+* **port** `string | number` (optional)
+* **path** `string` (optional)
+* **pathname** `string` (optional)
+* **hostname** `string` (optional)
+* **origin** `string` (optional)
+* **protocol** `string` (optional)
+* **search** `string` (optional)
+
+## Specification Compliance
+
+This section documents parts of the HTTP/1.1 specification that Undici does
+not support or does not fully implement.
+
+### Expect
+
+Undici does not support the `Expect` request header field. The request
+body is always immediately sent and the `100 Continue` response will be
+ignored.
+
+Refs: https://tools.ietf.org/html/rfc7231#section-5.1.1
+
+### Pipelining
+
+Undici will only use pipelining if configured with a `pipelining` factor
+greater than `1`.
+
+Undici always assumes that connections are persistent and will immediately
+pipeline requests, without checking whether the connection is persistent.
+Hence, automatic fallback to HTTP/1.0 or HTTP/1.1 without pipelining is
+not supported.
+
+Undici will immediately pipeline when retrying requests after a failed
+connection. However, Undici will not retry the first remaining requests in
+the prior pipeline and instead error the corresponding callback/promise/stream.
+
+Undici will abort all running requests in the pipeline when any of them are
+aborted.
+
+* Refs: https://tools.ietf.org/html/rfc2616#section-8.1.2.2
+* Refs: https://tools.ietf.org/html/rfc7230#section-6.3.2
+
+### Manual Redirect
+
+Since it is not possible to manually follow an HTTP redirect on the server-side,
+Undici returns the actual response instead of an `opaqueredirect` filtered one
+when invoked with a `manual` redirect. This aligns `fetch()` with the other
+implementations in Deno and Cloudflare Workers.
+
+Refs: https://fetch.spec.whatwg.org/#atomic-http-redirect-handling
+
+## Workarounds
+
+### Network address family autoselection.
+
+If you experience problem when connecting to a remote server that is resolved by your DNS servers to a IPv6 (AAAA record)
+first, there are chances that your local router or ISP might have problem connecting to IPv6 networks. In that case
+undici will throw an error with code `UND_ERR_CONNECT_TIMEOUT`.
+
+If the target server resolves to both a IPv6 and IPv4 (A records) address and you are using a compatible Node version
+(18.3.0 and above), you can fix the problem by providing the `autoSelectFamily` option (support by both `undici.request`
+and `undici.Agent`) which will enable the family autoselection algorithm when establishing the connection.
+
+## Collaborators
+
+* [__Daniele Belardi__](https://github.com/dnlup), <https://www.npmjs.com/~dnlup>
+* [__Ethan Arrowood__](https://github.com/ethan-arrowood), <https://www.npmjs.com/~ethan_arrowood>
+* [__Matteo Collina__](https://github.com/mcollina), <https://www.npmjs.com/~matteo.collina>
+* [__Matthew Aitken__](https://github.com/KhafraDev), <https://www.npmjs.com/~khaf>
+* [__Robert Nagy__](https://github.com/ronag), <https://www.npmjs.com/~ronag>
+* [__Szymon Marczak__](https://github.com/szmarczak), <https://www.npmjs.com/~szmarczak>
+* [__Tomas Della Vedova__](https://github.com/delvedor), <https://www.npmjs.com/~delvedor>
+
+### Releasers
+
+* [__Ethan Arrowood__](https://github.com/ethan-arrowood), <https://www.npmjs.com/~ethan_arrowood>
+* [__Matteo Collina__](https://github.com/mcollina), <https://www.npmjs.com/~matteo.collina>
+* [__Robert Nagy__](https://github.com/ronag), <https://www.npmjs.com/~ronag>
+
+## License
+
+MIT
diff --git a/includes/external/discord/node_modules/undici/docs/api/Agent.md b/includes/external/discord/node_modules/undici/docs/api/Agent.md
new file mode 100644
index 0000000..dd5d99b
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/docs/api/Agent.md
@@ -0,0 +1,80 @@
+# Agent
+
+Extends: `undici.Dispatcher`
+
+Agent allow dispatching requests against multiple different origins.
+
+Requests are not guaranteed to be dispatched in order of invocation.
+
+## `new undici.Agent([options])`
+
+Arguments:
+
+* **options** `AgentOptions` (optional)
+
+Returns: `Agent`
+
+### Parameter: `AgentOptions`
+
+Extends: [`PoolOptions`](Pool.md#parameter-pooloptions)
+
+* **factory** `(origin: URL, opts: Object) => Dispatcher` - Default: `(origin, opts) => new Pool(origin, opts)`
+* **maxRedirections** `Integer` - Default: `0`. The number of HTTP redirection to follow unless otherwise specified in `DispatchOptions`.
+* **interceptors** `{ Agent: DispatchInterceptor[] }` - Default: `[RedirectInterceptor]` - A list of interceptors that are applied to the dispatch method. Additional logic can be applied (such as, but not limited to: 302 status code handling, authentication, cookies, compression and caching). Note that the behavior of interceptors is Experimental and might change at any given time.
+
+## Instance Properties
+
+### `Agent.closed`
+
+Implements [Client.closed](Client.md#clientclosed)
+
+### `Agent.destroyed`
+
+Implements [Client.destroyed](Client.md#clientdestroyed)
+
+## Instance Methods
+
+### `Agent.close([callback])`
+
+Implements [`Dispatcher.close([callback])`](Dispatcher.md#dispatcherclosecallback-promise).
+
+### `Agent.destroy([error, callback])`
+
+Implements [`Dispatcher.destroy([error, callback])`](Dispatcher.md#dispatcherdestroyerror-callback-promise).
+
+### `Agent.dispatch(options, handler: AgentDispatchOptions)`
+
+Implements [`Dispatcher.dispatch(options, handler)`](Dispatcher.md#dispatcherdispatchoptions-handler).
+
+#### Parameter: `AgentDispatchOptions`
+
+Extends: [`DispatchOptions`](Dispatcher.md#parameter-dispatchoptions)
+
+* **origin** `string | URL`
+* **maxRedirections** `Integer`.
+
+Implements [`Dispatcher.destroy([error, callback])`](Dispatcher.md#dispatcherdestroyerror-callback-promise).
+
+### `Agent.connect(options[, callback])`
+
+See [`Dispatcher.connect(options[, callback])`](Dispatcher.md#dispatcherconnectoptions-callback).
+
+### `Agent.dispatch(options, handler)`
+
+Implements [`Dispatcher.dispatch(options, handler)`](Dispatcher.md#dispatcherdispatchoptions-handler).
+
+### `Agent.pipeline(options, handler)`
+
+See [`Dispatcher.pipeline(options, handler)`](Dispatcher.md#dispatcherpipelineoptions-handler).
+
+### `Agent.request(options[, callback])`
+
+See [`Dispatcher.request(options [, callback])`](Dispatcher.md#dispatcherrequestoptions-callback).
+
+### `Agent.stream(options, factory[, callback])`
+
+See [`Dispatcher.stream(options, factory[, callback])`](Dispatcher.md#dispatcherstreamoptions-factory-callback).
+
+### `Agent.upgrade(options[, callback])`
+
+See [`Dispatcher.upgrade(options[, callback])`](Dispatcher.md#dispatcherupgradeoptions-callback).
diff --git a/includes/external/discord/node_modules/undici/docs/api/BalancedPool.md b/includes/external/discord/node_modules/undici/docs/api/BalancedPool.md
new file mode 100644
index 0000000..290c734
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/docs/api/BalancedPool.md
@@ -0,0 +1,99 @@
+# Class: BalancedPool
+
+Extends: `undici.Dispatcher`
+
+A pool of [Pool](Pool.md) instances connected to multiple upstreams.
+
+Requests are not guaranteed to be dispatched in order of invocation.
+
+## `new BalancedPool(upstreams [, options])`
+
+Arguments:
+
+* **upstreams** `URL | string | string[]` - It should only include the **protocol, hostname, and port**.
+* **options** `BalancedPoolOptions` (optional)
+
+### Parameter: `BalancedPoolOptions`
+
+Extends: [`PoolOptions`](Pool.md#parameter-pooloptions)
+
+* **factory** `(origin: URL, opts: Object) => Dispatcher` - Default: `(origin, opts) => new Pool(origin, opts)`
+
+The `PoolOptions` are passed to each of the `Pool` instances being created.
+## Instance Properties
+
+### `BalancedPool.upstreams`
+
+Returns an array of upstreams that were previously added.
+
+### `BalancedPool.closed`
+
+Implements [Client.closed](Client.md#clientclosed)
+
+### `BalancedPool.destroyed`
+
+Implements [Client.destroyed](Client.md#clientdestroyed)
+
+### `Pool.stats`
+
+Returns [`PoolStats`](PoolStats.md) instance for this pool.
+
+## Instance Methods
+
+### `BalancedPool.addUpstream(upstream)`
+
+Add an upstream.
+
+Arguments:
+
+* **upstream** `string` - It should only include the **protocol, hostname, and port**.
+
+### `BalancedPool.removeUpstream(upstream)`
+
+Removes an upstream that was previously addded.
+
+### `BalancedPool.close([callback])`
+
+Implements [`Dispatcher.close([callback])`](Dispatcher.md#dispatcherclosecallback-promise).
+
+### `BalancedPool.destroy([error, callback])`
+
+Implements [`Dispatcher.destroy([error, callback])`](Dispatcher.md#dispatcherdestroyerror-callback-promise).
+
+### `BalancedPool.connect(options[, callback])`
+
+See [`Dispatcher.connect(options[, callback])`](Dispatcher.md#dispatcherconnectoptions-callback).
+
+### `BalancedPool.dispatch(options, handlers)`
+
+Implements [`Dispatcher.dispatch(options, handlers)`](Dispatcher.md#dispatcherdispatchoptions-handler).
+
+### `BalancedPool.pipeline(options, handler)`
+
+See [`Dispatcher.pipeline(options, handler)`](Dispatcher.md#dispatcherpipelineoptions-handler).
+
+### `BalancedPool.request(options[, callback])`
+
+See [`Dispatcher.request(options [, callback])`](Dispatcher.md#dispatcherrequestoptions-callback).
+
+### `BalancedPool.stream(options, factory[, callback])`
+
+See [`Dispatcher.stream(options, factory[, callback])`](Dispatcher.md#dispatcherstreamoptions-factory-callback).
+
+### `BalancedPool.upgrade(options[, callback])`
+
+See [`Dispatcher.upgrade(options[, callback])`](Dispatcher.md#dispatcherupgradeoptions-callback).
+
+## Instance Events
+
+### Event: `'connect'`
+
+See [Dispatcher Event: `'connect'`](Dispatcher.md#event-connect).
+
+### Event: `'disconnect'`
+
+See [Dispatcher Event: `'disconnect'`](Dispatcher.md#event-disconnect).
+
+### Event: `'drain'`
+
+See [Dispatcher Event: `'drain'`](Dispatcher.md#event-drain).
diff --git a/includes/external/discord/node_modules/undici/docs/api/Client.md b/includes/external/discord/node_modules/undici/docs/api/Client.md
new file mode 100644
index 0000000..fc7c5d2
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/docs/api/Client.md
@@ -0,0 +1,269 @@
+# Class: Client
+
+Extends: `undici.Dispatcher`
+
+A basic HTTP/1.1 client, mapped on top a single TCP/TLS connection. Pipelining is disabled by default.
+
+Requests are not guaranteed to be dispatched in order of invocation.
+
+## `new Client(url[, options])`
+
+Arguments:
+
+* **url** `URL | string` - Should only include the **protocol, hostname, and port**.
+* **options** `ClientOptions` (optional)
+
+Returns: `Client`
+
+### Parameter: `ClientOptions`
+
+* **bodyTimeout** `number | null` (optional) - Default: `300e3` - The timeout after which a request will time out, in milliseconds. Monitors time between receiving body data. Use `0` to disable it entirely. Defaults to 300 seconds.
+* **headersTimeout** `number | null` (optional) - Default: `300e3` - The amount of time the parser will wait to receive the complete HTTP headers while not sending the request. Defaults to 300 seconds.
+* **keepAliveMaxTimeout** `number | null` (optional) - Default: `600e3` - The maximum allowed `keepAliveTimeout` when overridden by *keep-alive* hints from the server. Defaults to 10 minutes.
+* **keepAliveTimeout** `number | null` (optional) - Default: `4e3` - The timeout after which a socket without active requests will time out. Monitors time between activity on a connected socket. This value may be overridden by *keep-alive* hints from the server. See [MDN: HTTP - Headers - Keep-Alive directives](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Keep-Alive#directives) for more details. Defaults to 4 seconds.
+* **keepAliveTimeoutThreshold** `number | null` (optional) - Default: `1e3` - A number subtracted from server *keep-alive* hints when overriding `keepAliveTimeout` to account for timing inaccuracies caused by e.g. transport latency. Defaults to 1 second.
+* **maxHeaderSize** `number | null` (optional) - Default: `16384` - The maximum length of request headers in bytes. Defaults to 16KiB.
+* **maxResponseSize** `number | null` (optional) - Default: `-1` - The maximum length of response body in bytes. Set to `-1` to disable.
+* **pipelining** `number | null` (optional) - Default: `1` - The amount of concurrent requests to be sent over the single TCP/TLS connection according to [RFC7230](https://tools.ietf.org/html/rfc7230#section-6.3.2). Carefully consider your workload and environment before enabling concurrent requests as pipelining may reduce performance if used incorrectly. Pipelining is sensitive to network stack settings as well as head of line blocking caused by e.g. long running requests. Set to `0` to disable keep-alive connections.
+* **connect** `ConnectOptions | Function | null` (optional) - Default: `null`.
+* **strictContentLength** `Boolean` (optional) - Default: `true` - Whether to treat request content length mismatches as errors. If true, an error is thrown when the request content-length header doesn't match the length of the request body.
+* **interceptors** `{ Client: DispatchInterceptor[] }` - Default: `[RedirectInterceptor]` - A list of interceptors that are applied to the dispatch method. Additional logic can be applied (such as, but not limited to: 302 status code handling, authentication, cookies, compression and caching). Note that the behavior of interceptors is Experimental and might change at any given time.
+* **autoSelectFamily**: `boolean` (optional) - Default: depends on local Node version, on Node 18.13.0 and above is `false`. Enables a family autodetection algorithm that loosely implements section 5 of [RFC 8305](https://tools.ietf.org/html/rfc8305#section-5). See [here](https://nodejs.org/api/net.html#socketconnectoptions-connectlistener) for more details. This option is ignored if not supported by the current Node version.
+* **autoSelectFamilyAttemptTimeout**: `number` - Default: depends on local Node version, on Node 18.13.0 and above is `250`. The amount of time in milliseconds to wait for a connection attempt to finish before trying the next address when using the `autoSelectFamily` option. See [here](https://nodejs.org/api/net.html#socketconnectoptions-connectlistener) for more details.
+
+#### Parameter: `ConnectOptions`
+
+Every Tls option, see [here](https://nodejs.org/api/tls.html#tls_tls_connect_options_callback).
+Furthermore, the following options can be passed:
+
+* **socketPath** `string | null` (optional) - Default: `null` - An IPC endpoint, either Unix domain socket or Windows named pipe.
+* **maxCachedSessions** `number | null` (optional) - Default: `100` - Maximum number of TLS cached sessions. Use 0 to disable TLS session caching. Default: 100.
+* **timeout** `number | null` (optional) - Default `10e3`
+* **servername** `string | null` (optional)
+* **keepAlive** `boolean | null` (optional) - Default: `true` - TCP keep-alive enabled
+* **keepAliveInitialDelay** `number | null` (optional) - Default: `60000` - TCP keep-alive interval for the socket in milliseconds
+
+### Example - Basic Client instantiation
+
+This will instantiate the undici Client, but it will not connect to the origin until something is queued. Consider using `client.connect` to prematurely connect to the origin, or just call `client.request`.
+
+```js
+'use strict'
+import { Client } from 'undici'
+
+const client = new Client('http://localhost:3000')
+```
+
+### Example - Custom connector
+
+This will allow you to perform some additional check on the socket that will be used for the next request.
+
+```js
+'use strict'
+import { Client, buildConnector } from 'undici'
+
+const connector = buildConnector({ rejectUnauthorized: false })
+const client = new Client('https://localhost:3000', {
+ connect (opts, cb) {
+ connector(opts, (err, socket) => {
+ if (err) {
+ cb(err)
+ } else if (/* assertion */) {
+ socket.destroy()
+ cb(new Error('kaboom'))
+ } else {
+ cb(null, socket)
+ }
+ })
+ }
+})
+```
+
+## Instance Methods
+
+### `Client.close([callback])`
+
+Implements [`Dispatcher.close([callback])`](Dispatcher.md#dispatcherclosecallback-promise).
+
+### `Client.destroy([error, callback])`
+
+Implements [`Dispatcher.destroy([error, callback])`](Dispatcher.md#dispatcherdestroyerror-callback-promise).
+
+Waits until socket is closed before invoking the callback (or returning a promise if no callback is provided).
+
+### `Client.connect(options[, callback])`
+
+See [`Dispatcher.connect(options[, callback])`](Dispatcher.md#dispatcherconnectoptions-callback).
+
+### `Client.dispatch(options, handlers)`
+
+Implements [`Dispatcher.dispatch(options, handlers)`](Dispatcher.md#dispatcherdispatchoptions-handler).
+
+### `Client.pipeline(options, handler)`
+
+See [`Dispatcher.pipeline(options, handler)`](Dispatcher.md#dispatcherpipelineoptions-handler).
+
+### `Client.request(options[, callback])`
+
+See [`Dispatcher.request(options [, callback])`](Dispatcher.md#dispatcherrequestoptions-callback).
+
+### `Client.stream(options, factory[, callback])`
+
+See [`Dispatcher.stream(options, factory[, callback])`](Dispatcher.md#dispatcherstreamoptions-factory-callback).
+
+### `Client.upgrade(options[, callback])`
+
+See [`Dispatcher.upgrade(options[, callback])`](Dispatcher.md#dispatcherupgradeoptions-callback).
+
+## Instance Properties
+
+### `Client.closed`
+
+* `boolean`
+
+`true` after `client.close()` has been called.
+
+### `Client.destroyed`
+
+* `boolean`
+
+`true` after `client.destroyed()` has been called or `client.close()` has been called and the client shutdown has completed.
+
+### `Client.pipelining`
+
+* `number`
+
+Property to get and set the pipelining factor.
+
+## Instance Events
+
+### Event: `'connect'`
+
+See [Dispatcher Event: `'connect'`](Dispatcher.md#event-connect).
+
+Parameters:
+
+* **origin** `URL`
+* **targets** `Array<Dispatcher>`
+
+Emitted when a socket has been created and connected. The client will connect once `client.size > 0`.
+
+#### Example - Client connect event
+
+```js
+import { createServer } from 'http'
+import { Client } from 'undici'
+import { once } from 'events'
+
+const server = createServer((request, response) => {
+ response.end('Hello, World!')
+}).listen()
+
+await once(server, 'listening')
+
+const client = new Client(`http://localhost:${server.address().port}`)
+
+client.on('connect', (origin) => {
+ console.log(`Connected to ${origin}`) // should print before the request body statement
+})
+
+try {
+ const { body } = await client.request({
+ path: '/',
+ method: 'GET'
+ })
+ body.setEncoding('utf-8')
+ body.on('data', console.log)
+ client.close()
+ server.close()
+} catch (error) {
+ console.error(error)
+ client.close()
+ server.close()
+}
+```
+
+### Event: `'disconnect'`
+
+See [Dispatcher Event: `'disconnect'`](Dispatcher.md#event-disconnect).
+
+Parameters:
+
+* **origin** `URL`
+* **targets** `Array<Dispatcher>`
+* **error** `Error`
+
+Emitted when socket has disconnected. The error argument of the event is the error which caused the socket to disconnect. The client will reconnect if or once `client.size > 0`.
+
+#### Example - Client disconnect event
+
+```js
+import { createServer } from 'http'
+import { Client } from 'undici'
+import { once } from 'events'
+
+const server = createServer((request, response) => {
+ response.destroy()
+}).listen()
+
+await once(server, 'listening')
+
+const client = new Client(`http://localhost:${server.address().port}`)
+
+client.on('disconnect', (origin) => {
+ console.log(`Disconnected from ${origin}`)
+})
+
+try {
+ await client.request({
+ path: '/',
+ method: 'GET'
+ })
+} catch (error) {
+ console.error(error.message)
+ client.close()
+ server.close()
+}
+```
+
+### Event: `'drain'`
+
+Emitted when pipeline is no longer busy.
+
+See [Dispatcher Event: `'drain'`](Dispatcher.md#event-drain).
+
+#### Example - Client drain event
+
+```js
+import { createServer } from 'http'
+import { Client } from 'undici'
+import { once } from 'events'
+
+const server = createServer((request, response) => {
+ response.end('Hello, World!')
+}).listen()
+
+await once(server, 'listening')
+
+const client = new Client(`http://localhost:${server.address().port}`)
+
+client.on('drain', () => {
+ console.log('drain event')
+ client.close()
+ server.close()
+})
+
+const requests = [
+ client.request({ path: '/', method: 'GET' }),
+ client.request({ path: '/', method: 'GET' }),
+ client.request({ path: '/', method: 'GET' })
+]
+
+await Promise.all(requests)
+
+console.log('requests completed')
+```
+
+### Event: `'error'`
+
+Invoked for users errors such as throwing in the `onError` handler.
diff --git a/includes/external/discord/node_modules/undici/docs/api/Connector.md b/includes/external/discord/node_modules/undici/docs/api/Connector.md
new file mode 100644
index 0000000..7c96650
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/docs/api/Connector.md
@@ -0,0 +1,115 @@
+# Connector
+
+Undici creates the underlying socket via the connector builder.
+Normally, this happens automatically and you don't need to care about this,
+but if you need to perform some additional check over the currently used socket,
+this is the right place.
+
+If you want to create a custom connector, you must import the `buildConnector` utility.
+
+#### Parameter: `buildConnector.BuildOptions`
+
+Every Tls option, see [here](https://nodejs.org/api/tls.html#tls_tls_connect_options_callback).
+Furthermore, the following options can be passed:
+
+* **socketPath** `string | null` (optional) - Default: `null` - An IPC endpoint, either Unix domain socket or Windows named pipe.
+* **maxCachedSessions** `number | null` (optional) - Default: `100` - Maximum number of TLS cached sessions. Use 0 to disable TLS session caching. Default: 100.
+* **timeout** `number | null` (optional) - Default `10e3`
+* **servername** `string | null` (optional)
+
+Once you call `buildConnector`, it will return a connector function, which takes the following parameters.
+
+#### Parameter: `connector.Options`
+
+* **hostname** `string` (required)
+* **host** `string` (optional)
+* **protocol** `string` (required)
+* **port** `string` (required)
+* **servername** `string` (optional)
+* **localAddress** `string | null` (optional) Local address the socket should connect from.
+* **httpSocket** `Socket` (optional) Establish secure connection on a given socket rather than creating a new socket. It can only be sent on TLS update.
+
+### Basic example
+
+```js
+'use strict'
+
+import { Client, buildConnector } from 'undici'
+
+const connector = buildConnector({ rejectUnauthorized: false })
+const client = new Client('https://localhost:3000', {
+ connect (opts, cb) {
+ connector(opts, (err, socket) => {
+ if (err) {
+ cb(err)
+ } else if (/* assertion */) {
+ socket.destroy()
+ cb(new Error('kaboom'))
+ } else {
+ cb(null, socket)
+ }
+ })
+ }
+})
+```
+
+### Example: validate the CA fingerprint
+
+```js
+'use strict'
+
+import { Client, buildConnector } from 'undici'
+
+const caFingerprint = 'FO:OB:AR'
+const connector = buildConnector({ rejectUnauthorized: false })
+const client = new Client('https://localhost:3000', {
+ connect (opts, cb) {
+ connector(opts, (err, socket) => {
+ if (err) {
+ cb(err)
+ } else if (getIssuerCertificate(socket).fingerprint256 !== caFingerprint) {
+ socket.destroy()
+ cb(new Error('Fingerprint does not match or malformed certificate'))
+ } else {
+ cb(null, socket)
+ }
+ })
+ }
+})
+
+client.request({
+ path: '/',
+ method: 'GET'
+}, (err, data) => {
+ if (err) throw err
+
+ const bufs = []
+ data.body.on('data', (buf) => {
+ bufs.push(buf)
+ })
+ data.body.on('end', () => {
+ console.log(Buffer.concat(bufs).toString('utf8'))
+ client.close()
+ })
+})
+
+function getIssuerCertificate (socket) {
+ let certificate = socket.getPeerCertificate(true)
+ while (certificate && Object.keys(certificate).length > 0) {
+ // invalid certificate
+ if (certificate.issuerCertificate == null) {
+ return null
+ }
+
+ // We have reached the root certificate.
+ // In case of self-signed certificates, `issuerCertificate` may be a circular reference.
+ if (certificate.fingerprint256 === certificate.issuerCertificate.fingerprint256) {
+ break
+ }
+
+ // continue the loop
+ certificate = certificate.issuerCertificate
+ }
+ return certificate
+}
+```
diff --git a/includes/external/discord/node_modules/undici/docs/api/ContentType.md b/includes/external/discord/node_modules/undici/docs/api/ContentType.md
new file mode 100644
index 0000000..2bcc9f7
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/docs/api/ContentType.md
@@ -0,0 +1,57 @@
+# MIME Type Parsing
+
+## `MIMEType` interface
+
+* **type** `string`
+* **subtype** `string`
+* **parameters** `Map<string, string>`
+* **essence** `string`
+
+## `parseMIMEType(input)`
+
+Implements [parse a MIME type](https://mimesniff.spec.whatwg.org/#parse-a-mime-type).
+
+Parses a MIME type, returning its type, subtype, and any associated parameters. If the parser can't parse an input it returns the string literal `'failure'`.
+
+```js
+import { parseMIMEType } from 'undici'
+
+parseMIMEType('text/html; charset=gbk')
+// {
+// type: 'text',
+// subtype: 'html',
+// parameters: Map(1) { 'charset' => 'gbk' },
+// essence: 'text/html'
+// }
+```
+
+Arguments:
+
+* **input** `string`
+
+Returns: `MIMEType|'failure'`
+
+## `serializeAMimeType(input)`
+
+Implements [serialize a MIME type](https://mimesniff.spec.whatwg.org/#serialize-a-mime-type).
+
+Serializes a MIMEType object.
+
+```js
+import { serializeAMimeType } from 'undici'
+
+serializeAMimeType({
+ type: 'text',
+ subtype: 'html',
+ parameters: new Map([['charset', 'gbk']]),
+ essence: 'text/html'
+})
+// text/html;charset=gbk
+
+```
+
+Arguments:
+
+* **mimeType** `MIMEType`
+
+Returns: `string`
diff --git a/includes/external/discord/node_modules/undici/docs/api/Cookies.md b/includes/external/discord/node_modules/undici/docs/api/Cookies.md
new file mode 100644
index 0000000..0cad379
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/docs/api/Cookies.md
@@ -0,0 +1,101 @@
+# Cookie Handling
+
+## `Cookie` interface
+
+* **name** `string`
+* **value** `string`
+* **expires** `Date|number` (optional)
+* **maxAge** `number` (optional)
+* **domain** `string` (optional)
+* **path** `string` (optional)
+* **secure** `boolean` (optional)
+* **httpOnly** `boolean` (optional)
+* **sameSite** `'String'|'Lax'|'None'` (optional)
+* **unparsed** `string[]` (optional) Left over attributes that weren't parsed.
+
+## `deleteCookie(headers, name[, attributes])`
+
+Sets the expiry time of the cookie to the unix epoch, causing browsers to delete it when received.
+
+```js
+import { deleteCookie, Headers } from 'undici'
+
+const headers = new Headers()
+deleteCookie(headers, 'name')
+
+console.log(headers.get('set-cookie')) // name=; Expires=Thu, 01 Jan 1970 00:00:00 GMT
+```
+
+Arguments:
+
+* **headers** `Headers`
+* **name** `string`
+* **attributes** `{ path?: string, domain?: string }` (optional)
+
+Returns: `void`
+
+## `getCookies(headers)`
+
+Parses the `Cookie` header and returns a list of attributes and values.
+
+```js
+import { getCookies, Headers } from 'undici'
+
+const headers = new Headers({
+ cookie: 'get=cookies; and=attributes'
+})
+
+console.log(getCookies(headers)) // { get: 'cookies', and: 'attributes' }
+```
+
+Arguments:
+
+* **headers** `Headers`
+
+Returns: `Record<string, string>`
+
+## `getSetCookies(headers)`
+
+Parses all `Set-Cookie` headers.
+
+```js
+import { getSetCookies, Headers } from 'undici'
+
+const headers = new Headers({ 'set-cookie': 'undici=getSetCookies; Secure' })
+
+console.log(getSetCookies(headers))
+// [
+// {
+// name: 'undici',
+// value: 'getSetCookies',
+// secure: true
+// }
+// ]
+
+```
+
+Arguments:
+
+* **headers** `Headers`
+
+Returns: `Cookie[]`
+
+## `setCookie(headers, cookie)`
+
+Appends a cookie to the `Set-Cookie` header.
+
+```js
+import { setCookie, Headers } from 'undici'
+
+const headers = new Headers()
+setCookie(headers, { name: 'undici', value: 'setCookie' })
+
+console.log(headers.get('Set-Cookie')) // undici=setCookie
+```
+
+Arguments:
+
+* **headers** `Headers`
+* **cookie** `Cookie`
+
+Returns: `void`
diff --git a/includes/external/discord/node_modules/undici/docs/api/DiagnosticsChannel.md b/includes/external/discord/node_modules/undici/docs/api/DiagnosticsChannel.md
new file mode 100644
index 0000000..0aa0b9a
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/docs/api/DiagnosticsChannel.md
@@ -0,0 +1,204 @@
+# Diagnostics Channel Support
+
+Stability: Experimental.
+
+Undici supports the [`diagnostics_channel`](https://nodejs.org/api/diagnostics_channel.html) (currently available only on Node.js v16+).
+It is the preferred way to instrument Undici and retrieve internal information.
+
+The channels available are the following.
+
+## `undici:request:create`
+
+This message is published when a new outgoing request is created.
+
+```js
+import diagnosticsChannel from 'diagnostics_channel'
+
+diagnosticsChannel.channel('undici:request:create').subscribe(({ request }) => {
+ console.log('origin', request.origin)
+ console.log('completed', request.completed)
+ console.log('method', request.method)
+ console.log('path', request.path)
+ console.log('headers') // raw text, e.g: 'bar: bar\r\n'
+ request.addHeader('hello', 'world')
+ console.log('headers', request.headers) // e.g. 'bar: bar\r\nhello: world\r\n'
+})
+```
+
+Note: a request is only loosely completed to a given socket.
+
+
+## `undici:request:bodySent`
+
+```js
+import diagnosticsChannel from 'diagnostics_channel'
+
+diagnosticsChannel.channel('undici:request:bodySent').subscribe(({ request }) => {
+ // request is the same object undici:request:create
+})
+```
+
+## `undici:request:headers`
+
+This message is published after the response headers have been received, i.e. the response has been completed.
+
+```js
+import diagnosticsChannel from 'diagnostics_channel'
+
+diagnosticsChannel.channel('undici:request:headers').subscribe(({ request, response }) => {
+ // request is the same object undici:request:create
+ console.log('statusCode', response.statusCode)
+ console.log(response.statusText)
+ // response.headers are buffers.
+ console.log(response.headers.map((x) => x.toString()))
+})
+```
+
+## `undici:request:trailers`
+
+This message is published after the response body and trailers have been received, i.e. the response has been completed.
+
+```js
+import diagnosticsChannel from 'diagnostics_channel'
+
+diagnosticsChannel.channel('undici:request:trailers').subscribe(({ request, trailers }) => {
+ // request is the same object undici:request:create
+ console.log('completed', request.completed)
+ // trailers are buffers.
+ console.log(trailers.map((x) => x.toString()))
+})
+```
+
+## `undici:request:error`
+
+This message is published if the request is going to error, but it has not errored yet.
+
+```js
+import diagnosticsChannel from 'diagnostics_channel'
+
+diagnosticsChannel.channel('undici:request:error').subscribe(({ request, error }) => {
+ // request is the same object undici:request:create
+})
+```
+
+## `undici:client:sendHeaders`
+
+This message is published right before the first byte of the request is written to the socket.
+
+*Note*: It will publish the exact headers that will be sent to the server in raw format.
+
+```js
+import diagnosticsChannel from 'diagnostics_channel'
+
+diagnosticsChannel.channel('undici:client:sendHeaders').subscribe(({ request, headers, socket }) => {
+ // request is the same object undici:request:create
+ console.log(`Full headers list ${headers.split('\r\n')}`);
+})
+```
+
+## `undici:client:beforeConnect`
+
+This message is published before creating a new connection for **any** request.
+You can not assume that this event is related to any specific request.
+
+```js
+import diagnosticsChannel from 'diagnostics_channel'
+
+diagnosticsChannel.channel('undici:client:beforeConnect').subscribe(({ connectParams, connector }) => {
+ // const { host, hostname, protocol, port, servername } = connectParams
+ // connector is a function that creates the socket
+})
+```
+
+## `undici:client:connected`
+
+This message is published after a connection is established.
+
+```js
+import diagnosticsChannel from 'diagnostics_channel'
+
+diagnosticsChannel.channel('undici:client:connected').subscribe(({ socket, connectParams, connector }) => {
+ // const { host, hostname, protocol, port, servername } = connectParams
+ // connector is a function that creates the socket
+})
+```
+
+## `undici:client:connectError`
+
+This message is published if it did not succeed to create new connection
+
+```js
+import diagnosticsChannel from 'diagnostics_channel'
+
+diagnosticsChannel.channel('undici:client:connectError').subscribe(({ error, socket, connectParams, connector }) => {
+ // const { host, hostname, protocol, port, servername } = connectParams
+ // connector is a function that creates the socket
+ console.log(`Connect failed with ${error.message}`)
+})
+```
+
+## `undici:websocket:open`
+
+This message is published after the client has successfully connected to a server.
+
+```js
+import diagnosticsChannel from 'diagnostics_channel'
+
+diagnosticsChannel.channel('undici:websocket:open').subscribe(({ address, protocol, extensions }) => {
+ console.log(address) // address, family, and port
+ console.log(protocol) // negotiated subprotocols
+ console.log(extensions) // negotiated extensions
+})
+```
+
+## `undici:websocket:close`
+
+This message is published after the connection has closed.
+
+```js
+import diagnosticsChannel from 'diagnostics_channel'
+
+diagnosticsChannel.channel('undici:websocket:close').subscribe(({ websocket, code, reason }) => {
+ console.log(websocket) // the WebSocket object
+ console.log(code) // the closing status code
+ console.log(reason) // the closing reason
+})
+```
+
+## `undici:websocket:socket_error`
+
+This message is published if the socket experiences an error.
+
+```js
+import diagnosticsChannel from 'diagnostics_channel'
+
+diagnosticsChannel.channel('undici:websocket:socket_error').subscribe((error) => {
+ console.log(error)
+})
+```
+
+## `undici:websocket:ping`
+
+This message is published after the client receives a ping frame, if the connection is not closing.
+
+```js
+import diagnosticsChannel from 'diagnostics_channel'
+
+diagnosticsChannel.channel('undici:websocket:ping').subscribe(({ payload }) => {
+ // a Buffer or undefined, containing the optional application data of the frame
+ console.log(payload)
+})
+```
+
+## `undici:websocket:pong`
+
+This message is published after the client receives a pong frame.
+
+```js
+import diagnosticsChannel from 'diagnostics_channel'
+
+diagnosticsChannel.channel('undici:websocket:pong').subscribe(({ payload }) => {
+ // a Buffer or undefined, containing the optional application data of the frame
+ console.log(payload)
+})
+```
diff --git a/includes/external/discord/node_modules/undici/docs/api/DispatchInterceptor.md b/includes/external/discord/node_modules/undici/docs/api/DispatchInterceptor.md
new file mode 100644
index 0000000..652b2e8
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/docs/api/DispatchInterceptor.md
@@ -0,0 +1,60 @@
+#Interface: DispatchInterceptor
+
+Extends: `Function`
+
+A function that can be applied to the `Dispatcher.Dispatch` function before it is invoked with a dispatch request.
+
+This allows one to write logic to intercept both the outgoing request, and the incoming response.
+
+### Parameter: `Dispatcher.Dispatch`
+
+The base dispatch function you are decorating.
+
+### ReturnType: `Dispatcher.Dispatch`
+
+A dispatch function that has been altered to provide additional logic
+
+### Basic Example
+
+Here is an example of an interceptor being used to provide a JWT bearer token
+
+```js
+'use strict'
+
+const insertHeaderInterceptor = dispatch => {
+ return function InterceptedDispatch(opts, handler){
+ opts.headers.push('Authorization', 'Bearer [Some token]')
+ return dispatch(opts, handler)
+ }
+}
+
+const client = new Client('https://localhost:3000', {
+ interceptors: { Client: [insertHeaderInterceptor] }
+})
+
+```
+
+### Basic Example 2
+
+Here is a contrived example of an interceptor stripping the headers from a response.
+
+```js
+'use strict'
+
+const clearHeadersInterceptor = dispatch => {
+ const { DecoratorHandler } = require('undici')
+ class ResultInterceptor extends DecoratorHandler {
+ onHeaders (statusCode, headers, resume) {
+ return super.onHeaders(statusCode, [], resume)
+ }
+ }
+ return function InterceptedDispatch(opts, handler){
+ return dispatch(opts, new ResultInterceptor(handler))
+ }
+}
+
+const client = new Client('https://localhost:3000', {
+ interceptors: { Client: [clearHeadersInterceptor] }
+})
+
+```
diff --git a/includes/external/discord/node_modules/undici/docs/api/Dispatcher.md b/includes/external/discord/node_modules/undici/docs/api/Dispatcher.md
new file mode 100644
index 0000000..a506429
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/docs/api/Dispatcher.md
@@ -0,0 +1,886 @@
+# Dispatcher
+
+Extends: `events.EventEmitter`
+
+Dispatcher is the core API used to dispatch requests.
+
+Requests are not guaranteed to be dispatched in order of invocation.
+
+## Instance Methods
+
+### `Dispatcher.close([callback]): Promise`
+
+Closes the dispatcher and gracefully waits for enqueued requests to complete before resolving.
+
+Arguments:
+
+* **callback** `(error: Error | null, data: null) => void` (optional)
+
+Returns: `void | Promise<null>` - Only returns a `Promise` if no `callback` argument was passed
+
+```js
+dispatcher.close() // -> Promise
+dispatcher.close(() => {}) // -> void
+```
+
+#### Example - Request resolves before Client closes
+
+```js
+import { createServer } from 'http'
+import { Client } from 'undici'
+import { once } from 'events'
+
+const server = createServer((request, response) => {
+ response.end('undici')
+}).listen()
+
+await once(server, 'listening')
+
+const client = new Client(`http://localhost:${server.address().port}`)
+
+try {
+ const { body } = await client.request({
+ path: '/',
+ method: 'GET'
+ })
+ body.setEncoding('utf8')
+ body.on('data', console.log)
+} catch (error) {}
+
+await client.close()
+
+console.log('Client closed')
+server.close()
+```
+
+### `Dispatcher.connect(options[, callback])`
+
+Starts two-way communications with the requested resource using [HTTP CONNECT](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/CONNECT).
+
+Arguments:
+
+* **options** `ConnectOptions`
+* **callback** `(err: Error | null, data: ConnectData | null) => void` (optional)
+
+Returns: `void | Promise<ConnectData>` - Only returns a `Promise` if no `callback` argument was passed
+
+#### Parameter: `ConnectOptions`
+
+* **path** `string`
+* **headers** `UndiciHeaders` (optional) - Default: `null`
+* **signal** `AbortSignal | events.EventEmitter | null` (optional) - Default: `null`
+* **opaque** `unknown` (optional) - This argument parameter is passed through to `ConnectData`
+
+#### Parameter: `ConnectData`
+
+* **statusCode** `number`
+* **headers** `Record<string, string | string[] | undefined>`
+* **socket** `stream.Duplex`
+* **opaque** `unknown`
+
+#### Example - Connect request with echo
+
+```js
+import { createServer } from 'http'
+import { Client } from 'undici'
+import { once } from 'events'
+
+const server = createServer((request, response) => {
+ throw Error('should never get here')
+}).listen()
+
+server.on('connect', (req, socket, head) => {
+ socket.write('HTTP/1.1 200 Connection established\r\n\r\n')
+
+ let data = head.toString()
+ socket.on('data', (buf) => {
+ data += buf.toString()
+ })
+
+ socket.on('end', () => {
+ socket.end(data)
+ })
+})
+
+await once(server, 'listening')
+
+const client = new Client(`http://localhost:${server.address().port}`)
+
+try {
+ const { socket } = await client.connect({
+ path: '/'
+ })
+ const wanted = 'Body'
+ let data = ''
+ socket.on('data', d => { data += d })
+ socket.on('end', () => {
+ console.log(`Data received: ${data.toString()} | Data wanted: ${wanted}`)
+ client.close()
+ server.close()
+ })
+ socket.write(wanted)
+ socket.end()
+} catch (error) { }
+```
+
+### `Dispatcher.destroy([error, callback]): Promise`
+
+Destroy the dispatcher abruptly with the given error. All the pending and running requests will be asynchronously aborted and error. Since this operation is asynchronously dispatched there might still be some progress on dispatched requests.
+
+Both arguments are optional; the method can be called in four different ways:
+
+Arguments:
+
+* **error** `Error | null` (optional)
+* **callback** `(error: Error | null, data: null) => void` (optional)
+
+Returns: `void | Promise<void>` - Only returns a `Promise` if no `callback` argument was passed
+
+```js
+dispatcher.destroy() // -> Promise
+dispatcher.destroy(new Error()) // -> Promise
+dispatcher.destroy(() => {}) // -> void
+dispatcher.destroy(new Error(), () => {}) // -> void
+```
+
+#### Example - Request is aborted when Client is destroyed
+
+```js
+import { createServer } from 'http'
+import { Client } from 'undici'
+import { once } from 'events'
+
+const server = createServer((request, response) => {
+ response.end()
+}).listen()
+
+await once(server, 'listening')
+
+const client = new Client(`http://localhost:${server.address().port}`)
+
+try {
+ const request = client.request({
+ path: '/',
+ method: 'GET'
+ })
+ client.destroy()
+ .then(() => {
+ console.log('Client destroyed')
+ server.close()
+ })
+ await request
+} catch (error) {
+ console.error(error)
+}
+```
+
+### `Dispatcher.dispatch(options, handler)`
+
+This is the low level API which all the preceding APIs are implemented on top of.
+This API is expected to evolve through semver-major versions and is less stable than the preceding higher level APIs.
+It is primarily intended for library developers who implement higher level APIs on top of this.
+
+Arguments:
+
+* **options** `DispatchOptions`
+* **handler** `DispatchHandler`
+
+Returns: `Boolean` - `false` if dispatcher is busy and further dispatch calls won't make any progress until the `'drain'` event has been emitted.
+
+#### Parameter: `DispatchOptions`
+
+* **origin** `string | URL`
+* **path** `string`
+* **method** `string`
+* **reset** `boolean` (optional) - Default: `false` - If `false`, the request will attempt to create a long-living connection by sending the `connection: keep-alive` header,otherwise will attempt to close it immediately after response by sending `connection: close` within the request and closing the socket afterwards.
+* **body** `string | Buffer | Uint8Array | stream.Readable | Iterable | AsyncIterable | null` (optional) - Default: `null`
+* **headers** `UndiciHeaders | string[]` (optional) - Default: `null`.
+* **query** `Record<string, any> | null` (optional) - Default: `null` - Query string params to be embedded in the request URL. Note that both keys and values of query are encoded using `encodeURIComponent`. If for some reason you need to send them unencoded, embed query params into path directly instead.
+* **idempotent** `boolean` (optional) - Default: `true` if `method` is `'HEAD'` or `'GET'` - Whether the requests can be safely retried or not. If `false` the request won't be sent until all preceding requests in the pipeline has completed.
+* **blocking** `boolean` (optional) - Default: `false` - Whether the response is expected to take a long time and would end up blocking the pipeline. When this is set to `true` further pipelining will be avoided on the same connection until headers have been received.
+* **upgrade** `string | null` (optional) - Default: `null` - Upgrade the request. Should be used to specify the kind of upgrade i.e. `'Websocket'`.
+* **bodyTimeout** `number | null` (optional) - The timeout after which a request will time out, in milliseconds. Monitors time between receiving body data. Use `0` to disable it entirely. Defaults to 300 seconds.
+* **headersTimeout** `number | null` (optional) - The amount of time the parser will wait to receive the complete HTTP headers while not sending the request. Defaults to 300 seconds.
+* **throwOnError** `boolean` (optional) - Default: `false` - Whether Undici should throw an error upon receiving a 4xx or 5xx response from the server.
+
+#### Parameter: `DispatchHandler`
+
+* **onConnect** `(abort: () => void, context: object) => void` - Invoked before request is dispatched on socket. May be invoked multiple times when a request is retried when the request at the head of the pipeline fails.
+* **onError** `(error: Error) => void` - Invoked when an error has occurred. May not throw.
+* **onUpgrade** `(statusCode: number, headers: Buffer[], socket: Duplex) => void` (optional) - Invoked when request is upgraded. Required if `DispatchOptions.upgrade` is defined or `DispatchOptions.method === 'CONNECT'`.
+* **onHeaders** `(statusCode: number, headers: Buffer[], resume: () => void, statusText: string) => boolean` - Invoked when statusCode and headers have been received. May be invoked multiple times due to 1xx informational headers. Not required for `upgrade` requests.
+* **onData** `(chunk: Buffer) => boolean` - Invoked when response payload data is received. Not required for `upgrade` requests.
+* **onComplete** `(trailers: Buffer[]) => void` - Invoked when response payload and trailers have been received and the request has completed. Not required for `upgrade` requests.
+* **onBodySent** `(chunk: string | Buffer | Uint8Array) => void` - Invoked when a body chunk is sent to the server. Not required. For a stream or iterable body this will be invoked for every chunk. For other body types, it will be invoked once after the body is sent.
+
+#### Example 1 - Dispatch GET request
+
+```js
+import { createServer } from 'http'
+import { Client } from 'undici'
+import { once } from 'events'
+
+const server = createServer((request, response) => {
+ response.end('Hello, World!')
+}).listen()
+
+await once(server, 'listening')
+
+const client = new Client(`http://localhost:${server.address().port}`)
+
+const data = []
+
+client.dispatch({
+ path: '/',
+ method: 'GET',
+ headers: {
+ 'x-foo': 'bar'
+ }
+}, {
+ onConnect: () => {
+ console.log('Connected!')
+ },
+ onError: (error) => {
+ console.error(error)
+ },
+ onHeaders: (statusCode, headers) => {
+ console.log(`onHeaders | statusCode: ${statusCode} | headers: ${headers}`)
+ },
+ onData: (chunk) => {
+ console.log('onData: chunk received')
+ data.push(chunk)
+ },
+ onComplete: (trailers) => {
+ console.log(`onComplete | trailers: ${trailers}`)
+ const res = Buffer.concat(data).toString('utf8')
+ console.log(`Data: ${res}`)
+ client.close()
+ server.close()
+ }
+})
+```
+
+#### Example 2 - Dispatch Upgrade Request
+
+```js
+import { createServer } from 'http'
+import { Client } from 'undici'
+import { once } from 'events'
+
+const server = createServer((request, response) => {
+ response.end()
+}).listen()
+
+await once(server, 'listening')
+
+server.on('upgrade', (request, socket, head) => {
+ console.log('Node.js Server - upgrade event')
+ socket.write('HTTP/1.1 101 Web Socket Protocol Handshake\r\n')
+ socket.write('Upgrade: WebSocket\r\n')
+ socket.write('Connection: Upgrade\r\n')
+ socket.write('\r\n')
+ socket.end()
+})
+
+const client = new Client(`http://localhost:${server.address().port}`)
+
+client.dispatch({
+ path: '/',
+ method: 'GET',
+ upgrade: 'websocket'
+}, {
+ onConnect: () => {
+ console.log('Undici Client - onConnect')
+ },
+ onError: (error) => {
+ console.log('onError') // shouldn't print
+ },
+ onUpgrade: (statusCode, headers, socket) => {
+ console.log('Undici Client - onUpgrade')
+ console.log(`onUpgrade Headers: ${headers}`)
+ socket.on('data', buffer => {
+ console.log(buffer.toString('utf8'))
+ })
+ socket.on('end', () => {
+ client.close()
+ server.close()
+ })
+ socket.end()
+ }
+})
+```
+
+#### Example 3 - Dispatch POST request
+
+```js
+import { createServer } from 'http'
+import { Client } from 'undici'
+import { once } from 'events'
+
+const server = createServer((request, response) => {
+ request.on('data', (data) => {
+ console.log(`Request Data: ${data.toString('utf8')}`)
+ const body = JSON.parse(data)
+ body.message = 'World'
+ response.end(JSON.stringify(body))
+ })
+}).listen()
+
+await once(server, 'listening')
+
+const client = new Client(`http://localhost:${server.address().port}`)
+
+const data = []
+
+client.dispatch({
+ path: '/',
+ method: 'POST',
+ headers: {
+ 'content-type': 'application/json'
+ },
+ body: JSON.stringify({ message: 'Hello' })
+}, {
+ onConnect: () => {
+ console.log('Connected!')
+ },
+ onError: (error) => {
+ console.error(error)
+ },
+ onHeaders: (statusCode, headers) => {
+ console.log(`onHeaders | statusCode: ${statusCode} | headers: ${headers}`)
+ },
+ onData: (chunk) => {
+ console.log('onData: chunk received')
+ data.push(chunk)
+ },
+ onComplete: (trailers) => {
+ console.log(`onComplete | trailers: ${trailers}`)
+ const res = Buffer.concat(data).toString('utf8')
+ console.log(`Response Data: ${res}`)
+ client.close()
+ server.close()
+ }
+})
+```
+
+### `Dispatcher.pipeline(options, handler)`
+
+For easy use with [stream.pipeline](https://nodejs.org/api/stream.html#stream_stream_pipeline_source_transforms_destination_callback). The `handler` argument should return a `Readable` from which the result will be read. Usually it should just return the `body` argument unless some kind of transformation needs to be performed based on e.g. `headers` or `statusCode`. The `handler` should validate the response and save any required state. If there is an error, it should be thrown. The function returns a `Duplex` which writes to the request and reads from the response.
+
+Arguments:
+
+* **options** `PipelineOptions`
+* **handler** `(data: PipelineHandlerData) => stream.Readable`
+
+Returns: `stream.Duplex`
+
+#### Parameter: PipelineOptions
+
+Extends: [`RequestOptions`](#parameter-requestoptions)
+
+* **objectMode** `boolean` (optional) - Default: `false` - Set to `true` if the `handler` will return an object stream.
+
+#### Parameter: PipelineHandlerData
+
+* **statusCode** `number`
+* **headers** `Record<string, string | string[] | undefined>`
+* **opaque** `unknown`
+* **body** `stream.Readable`
+* **context** `object`
+* **onInfo** `({statusCode: number, headers: Record<string, string | string[]>}) => void | null` (optional) - Default: `null` - Callback collecting all the info headers (HTTP 100-199) received.
+
+#### Example 1 - Pipeline Echo
+
+```js
+import { Readable, Writable, PassThrough, pipeline } from 'stream'
+import { createServer } from 'http'
+import { Client } from 'undici'
+import { once } from 'events'
+
+const server = createServer((request, response) => {
+ request.pipe(response)
+}).listen()
+
+await once(server, 'listening')
+
+const client = new Client(`http://localhost:${server.address().port}`)
+
+let res = ''
+
+pipeline(
+ new Readable({
+ read () {
+ this.push(Buffer.from('undici'))
+ this.push(null)
+ }
+ }),
+ client.pipeline({
+ path: '/',
+ method: 'GET'
+ }, ({ statusCode, headers, body }) => {
+ console.log(`response received ${statusCode}`)
+ console.log('headers', headers)
+ return pipeline(body, new PassThrough(), () => {})
+ }),
+ new Writable({
+ write (chunk, _, callback) {
+ res += chunk.toString()
+ callback()
+ },
+ final (callback) {
+ console.log(`Response pipelined to writable: ${res}`)
+ callback()
+ }
+ }),
+ error => {
+ if (error) {
+ console.error(error)
+ }
+
+ client.close()
+ server.close()
+ }
+)
+```
+
+### `Dispatcher.request(options[, callback])`
+
+Performs a HTTP request.
+
+Non-idempotent requests will not be pipelined in order
+to avoid indirect failures.
+
+Idempotent requests will be automatically retried if
+they fail due to indirect failure from the request
+at the head of the pipeline. This does not apply to
+idempotent requests with a stream request body.
+
+All response bodies must always be fully consumed or destroyed.
+
+Arguments:
+
+* **options** `RequestOptions`
+* **callback** `(error: Error | null, data: ResponseData) => void` (optional)
+
+Returns: `void | Promise<ResponseData>` - Only returns a `Promise` if no `callback` argument was passed.
+
+#### Parameter: `RequestOptions`
+
+Extends: [`DispatchOptions`](#parameter-dispatchoptions)
+
+* **opaque** `unknown` (optional) - Default: `null` - Used for passing through context to `ResponseData`.
+* **signal** `AbortSignal | events.EventEmitter | null` (optional) - Default: `null`.
+* **onInfo** `({statusCode: number, headers: Record<string, string | string[]>}) => void | null` (optional) - Default: `null` - Callback collecting all the info headers (HTTP 100-199) received.
+
+The `RequestOptions.method` property should not be value `'CONNECT'`.
+
+#### Parameter: `ResponseData`
+
+* **statusCode** `number`
+* **headers** `Record<string, string | string[]>` - Note that all header keys are lower-cased, e. g. `content-type`.
+* **body** `stream.Readable` which also implements [the body mixin from the Fetch Standard](https://fetch.spec.whatwg.org/#body-mixin).
+* **trailers** `Record<string, string>` - This object starts out
+ as empty and will be mutated to contain trailers after `body` has emitted `'end'`.
+* **opaque** `unknown`
+* **context** `object`
+
+`body` contains the following additional [body mixin](https://fetch.spec.whatwg.org/#body-mixin) methods and properties:
+
+- `text()`
+- `json()`
+- `arrayBuffer()`
+- `body`
+- `bodyUsed`
+
+`body` can not be consumed twice. For example, calling `text()` after `json()` throws `TypeError`.
+
+`body` contains the following additional extensions:
+
+- `dump({ limit: Integer })`, dump the response by reading up to `limit` bytes without killing the socket (optional) - Default: 262144.
+
+Note that body will still be a `Readable` even if it is empty, but attempting to deserialize it with `json()` will result in an exception. Recommended way to ensure there is a body to deserialize is to check if status code is not 204, and `content-type` header starts with `application/json`.
+
+#### Example 1 - Basic GET Request
+
+```js
+import { createServer } from 'http'
+import { Client } from 'undici'
+import { once } from 'events'
+
+const server = createServer((request, response) => {
+ response.end('Hello, World!')
+}).listen()
+
+await once(server, 'listening')
+
+const client = new Client(`http://localhost:${server.address().port}`)
+
+try {
+ const { body, headers, statusCode, trailers } = await client.request({
+ path: '/',
+ method: 'GET'
+ })
+ console.log(`response received ${statusCode}`)
+ console.log('headers', headers)
+ body.setEncoding('utf8')
+ body.on('data', console.log)
+ body.on('end', () => {
+ console.log('trailers', trailers)
+ })
+
+ client.close()
+ server.close()
+} catch (error) {
+ console.error(error)
+}
+```
+
+#### Example 2 - Aborting a request
+
+> Node.js v15+ is required to run this example
+
+```js
+import { createServer } from 'http'
+import { Client } from 'undici'
+import { once } from 'events'
+
+const server = createServer((request, response) => {
+ response.end('Hello, World!')
+}).listen()
+
+await once(server, 'listening')
+
+const client = new Client(`http://localhost:${server.address().port}`)
+const abortController = new AbortController()
+
+try {
+ client.request({
+ path: '/',
+ method: 'GET',
+ signal: abortController.signal
+ })
+} catch (error) {
+ console.error(error) // should print an RequestAbortedError
+ client.close()
+ server.close()
+}
+
+abortController.abort()
+```
+
+Alternatively, any `EventEmitter` that emits an `'abort'` event may be used as an abort controller:
+
+```js
+import { createServer } from 'http'
+import { Client } from 'undici'
+import EventEmitter, { once } from 'events'
+
+const server = createServer((request, response) => {
+ response.end('Hello, World!')
+}).listen()
+
+await once(server, 'listening')
+
+const client = new Client(`http://localhost:${server.address().port}`)
+const ee = new EventEmitter()
+
+try {
+ client.request({
+ path: '/',
+ method: 'GET',
+ signal: ee
+ })
+} catch (error) {
+ console.error(error) // should print an RequestAbortedError
+ client.close()
+ server.close()
+}
+
+ee.emit('abort')
+```
+
+Destroying the request or response body will have the same effect.
+
+```js
+import { createServer } from 'http'
+import { Client } from 'undici'
+import { once } from 'events'
+
+const server = createServer((request, response) => {
+ response.end('Hello, World!')
+}).listen()
+
+await once(server, 'listening')
+
+const client = new Client(`http://localhost:${server.address().port}`)
+
+try {
+ const { body } = await client.request({
+ path: '/',
+ method: 'GET'
+ })
+ body.destroy()
+} catch (error) {
+ console.error(error) // should print an RequestAbortedError
+ client.close()
+ server.close()
+}
+```
+
+### `Dispatcher.stream(options, factory[, callback])`
+
+A faster version of `Dispatcher.request`. This method expects the second argument `factory` to return a [`stream.Writable`](https://nodejs.org/api/stream.html#stream_class_stream_writable) stream which the response will be written to. This improves performance by avoiding creating an intermediate [`stream.Readable`](https://nodejs.org/api/stream.html#stream_readable_streams) stream when the user expects to directly pipe the response body to a [`stream.Writable`](https://nodejs.org/api/stream.html#stream_class_stream_writable) stream.
+
+As demonstrated in [Example 1 - Basic GET stream request](#example-1---basic-get-stream-request), it is recommended to use the `option.opaque` property to avoid creating a closure for the `factory` method. This pattern works well with Node.js Web Frameworks such as [Fastify](https://fastify.io). See [Example 2 - Stream to Fastify Response](#example-2---stream-to-fastify-response) for more details.
+
+Arguments:
+
+* **options** `RequestOptions`
+* **factory** `(data: StreamFactoryData) => stream.Writable`
+* **callback** `(error: Error | null, data: StreamData) => void` (optional)
+
+Returns: `void | Promise<StreamData>` - Only returns a `Promise` if no `callback` argument was passed
+
+#### Parameter: `StreamFactoryData`
+
+* **statusCode** `number`
+* **headers** `Record<string, string | string[] | undefined>`
+* **opaque** `unknown`
+* **onInfo** `({statusCode: number, headers: Record<string, string | string[]>}) => void | null` (optional) - Default: `null` - Callback collecting all the info headers (HTTP 100-199) received.
+
+#### Parameter: `StreamData`
+
+* **opaque** `unknown`
+* **trailers** `Record<string, string>`
+* **context** `object`
+
+#### Example 1 - Basic GET stream request
+
+```js
+import { createServer } from 'http'
+import { Client } from 'undici'
+import { once } from 'events'
+import { Writable } from 'stream'
+
+const server = createServer((request, response) => {
+ response.end('Hello, World!')
+}).listen()
+
+await once(server, 'listening')
+
+const client = new Client(`http://localhost:${server.address().port}`)
+
+const bufs = []
+
+try {
+ await client.stream({
+ path: '/',
+ method: 'GET',
+ opaque: { bufs }
+ }, ({ statusCode, headers, opaque: { bufs } }) => {
+ console.log(`response received ${statusCode}`)
+ console.log('headers', headers)
+ return new Writable({
+ write (chunk, encoding, callback) {
+ bufs.push(chunk)
+ callback()
+ }
+ })
+ })
+
+ console.log(Buffer.concat(bufs).toString('utf-8'))
+
+ client.close()
+ server.close()
+} catch (error) {
+ console.error(error)
+}
+```
+
+#### Example 2 - Stream to Fastify Response
+
+In this example, a (fake) request is made to the fastify server using `fastify.inject()`. This request then executes the fastify route handler which makes a subsequent request to the raw Node.js http server using `undici.dispatcher.stream()`. The fastify response is passed to the `opaque` option so that undici can tap into the underlying writable stream using `response.raw`. This methodology demonstrates how one could use undici and fastify together to create fast-as-possible requests from one backend server to another.
+
+```js
+import { createServer } from 'http'
+import { Client } from 'undici'
+import { once } from 'events'
+import fastify from 'fastify'
+
+const nodeServer = createServer((request, response) => {
+ response.end('Hello, World! From Node.js HTTP Server')
+}).listen()
+
+await once(nodeServer, 'listening')
+
+console.log('Node Server listening')
+
+const nodeServerUndiciClient = new Client(`http://localhost:${nodeServer.address().port}`)
+
+const fastifyServer = fastify()
+
+fastifyServer.route({
+ url: '/',
+ method: 'GET',
+ handler: (request, response) => {
+ nodeServerUndiciClient.stream({
+ path: '/',
+ method: 'GET',
+ opaque: response
+ }, ({ opaque }) => opaque.raw)
+ }
+})
+
+await fastifyServer.listen()
+
+console.log('Fastify Server listening')
+
+const fastifyServerUndiciClient = new Client(`http://localhost:${fastifyServer.server.address().port}`)
+
+try {
+ const { statusCode, body } = await fastifyServerUndiciClient.request({
+ path: '/',
+ method: 'GET'
+ })
+
+ console.log(`response received ${statusCode}`)
+ body.setEncoding('utf8')
+ body.on('data', console.log)
+
+ nodeServerUndiciClient.close()
+ fastifyServerUndiciClient.close()
+ fastifyServer.close()
+ nodeServer.close()
+} catch (error) { }
+```
+
+### `Dispatcher.upgrade(options[, callback])`
+
+Upgrade to a different protocol. Visit [MDN - HTTP - Protocol upgrade mechanism](https://developer.mozilla.org/en-US/docs/Web/HTTP/Protocol_upgrade_mechanism) for more details.
+
+Arguments:
+
+* **options** `UpgradeOptions`
+
+* **callback** `(error: Error | null, data: UpgradeData) => void` (optional)
+
+Returns: `void | Promise<UpgradeData>` - Only returns a `Promise` if no `callback` argument was passed
+
+#### Parameter: `UpgradeOptions`
+
+* **path** `string`
+* **method** `string` (optional) - Default: `'GET'`
+* **headers** `UndiciHeaders` (optional) - Default: `null`
+* **protocol** `string` (optional) - Default: `'Websocket'` - A string of comma separated protocols, in descending preference order.
+* **signal** `AbortSignal | EventEmitter | null` (optional) - Default: `null`
+
+#### Parameter: `UpgradeData`
+
+* **headers** `http.IncomingHeaders`
+* **socket** `stream.Duplex`
+* **opaque** `unknown`
+
+#### Example 1 - Basic Upgrade Request
+
+```js
+import { createServer } from 'http'
+import { Client } from 'undici'
+import { once } from 'events'
+
+const server = createServer((request, response) => {
+ response.statusCode = 101
+ response.setHeader('connection', 'upgrade')
+ response.setHeader('upgrade', request.headers.upgrade)
+ response.end()
+}).listen()
+
+await once(server, 'listening')
+
+const client = new Client(`http://localhost:${server.address().port}`)
+
+try {
+ const { headers, socket } = await client.upgrade({
+ path: '/',
+ })
+ socket.on('end', () => {
+ console.log(`upgrade: ${headers.upgrade}`) // upgrade: Websocket
+ client.close()
+ server.close()
+ })
+ socket.end()
+} catch (error) {
+ console.error(error)
+ client.close()
+ server.close()
+}
+```
+
+## Instance Events
+
+### Event: `'connect'`
+
+Parameters:
+
+* **origin** `URL`
+* **targets** `Array<Dispatcher>`
+
+### Event: `'disconnect'`
+
+Parameters:
+
+* **origin** `URL`
+* **targets** `Array<Dispatcher>`
+* **error** `Error`
+
+### Event: `'connectionError'`
+
+Parameters:
+
+* **origin** `URL`
+* **targets** `Array<Dispatcher>`
+* **error** `Error`
+
+Emitted when dispatcher fails to connect to
+origin.
+
+### Event: `'drain'`
+
+Parameters:
+
+* **origin** `URL`
+
+Emitted when dispatcher is no longer busy.
+
+## Parameter: `UndiciHeaders`
+
+* `Record<string, string | string[] | undefined> | string[] | null`
+
+Header arguments such as `options.headers` in [`Client.dispatch`](Client.md#clientdispatchoptions-handlers) can be specified in two forms; either as an object specified by the `Record<string, string | string[] | undefined>` (`IncomingHttpHeaders`) type, or an array of strings. An array representation of a header list must have an even length or an `InvalidArgumentError` will be thrown.
+
+Keys are lowercase and values are not modified.
+
+Response headers will derive a `host` from the `url` of the [Client](Client.md#class-client) instance if no `host` header was previously specified.
+
+### Example 1 - Object
+
+```js
+{
+ 'content-length': '123',
+ 'content-type': 'text/plain',
+ connection: 'keep-alive',
+ host: 'mysite.com',
+ accept: '*/*'
+}
+```
+
+### Example 2 - Array
+
+```js
+[
+ 'content-length', '123',
+ 'content-type', 'text/plain',
+ 'connection', 'keep-alive',
+ 'host', 'mysite.com',
+ 'accept', '*/*'
+]
+```
diff --git a/includes/external/discord/node_modules/undici/docs/api/Errors.md b/includes/external/discord/node_modules/undici/docs/api/Errors.md
new file mode 100644
index 0000000..fba0e8c
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/docs/api/Errors.md
@@ -0,0 +1,41 @@
+# Errors
+
+Undici exposes a variety of error objects that you can use to enhance your error handling.
+You can find all the error objects inside the `errors` key.
+
+```js
+import { errors } from 'undici'
+```
+
+| Error | Error Codes | Description |
+| ------------------------------------ | ------------------------------------- | -------------------------------------------------- |
+| `InvalidArgumentError` | `UND_ERR_INVALID_ARG` | passed an invalid argument. |
+| `InvalidReturnValueError` | `UND_ERR_INVALID_RETURN_VALUE` | returned an invalid value. |
+| `RequestAbortedError` | `UND_ERR_ABORTED` | the request has been aborted by the user |
+| `ClientDestroyedError` | `UND_ERR_DESTROYED` | trying to use a destroyed client. |
+| `ClientClosedError` | `UND_ERR_CLOSED` | trying to use a closed client. |
+| `SocketError` | `UND_ERR_SOCKET` | there is an error with the socket. |
+| `NotSupportedError` | `UND_ERR_NOT_SUPPORTED` | encountered unsupported functionality. |
+| `RequestContentLengthMismatchError` | `UND_ERR_REQ_CONTENT_LENGTH_MISMATCH` | request body does not match content-length header |
+| `ResponseContentLengthMismatchError` | `UND_ERR_RES_CONTENT_LENGTH_MISMATCH` | response body does not match content-length header |
+| `InformationalError` | `UND_ERR_INFO` | expected error with reason |
+| `ResponseExceededMaxSizeError` | `UND_ERR_RES_EXCEEDED_MAX_SIZE` | response body exceed the max size allowed |
+
+### `SocketError`
+
+The `SocketError` has a `.socket` property which holds socket metadata:
+
+```ts
+interface SocketInfo {
+ localAddress?: string
+ localPort?: number
+ remoteAddress?: string
+ remotePort?: number
+ remoteFamily?: string
+ timeout?: number
+ bytesWritten?: number
+ bytesRead?: number
+}
+```
+
+Be aware that in some cases the `.socket` property can be `null`.
diff --git a/includes/external/discord/node_modules/undici/docs/api/Fetch.md b/includes/external/discord/node_modules/undici/docs/api/Fetch.md
new file mode 100644
index 0000000..0a5c3d0
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/docs/api/Fetch.md
@@ -0,0 +1,25 @@
+# Fetch
+
+Undici exposes a fetch() method starts the process of fetching a resource from the network.
+
+Documentation and examples can be found on [MDN](https://developer.mozilla.org/en-US/docs/Web/API/fetch).
+
+## File
+
+This API is implemented as per the standard, you can find documentation on [MDN](https://developer.mozilla.org/en-US/docs/Web/API/File)
+
+## FormData
+
+This API is implemented as per the standard, you can find documentation on [MDN](https://developer.mozilla.org/en-US/docs/Web/API/FormData)
+
+## Response
+
+This API is implemented as per the standard, you can find documentation on [MDN](https://developer.mozilla.org/en-US/docs/Web/API/Response)
+
+## Request
+
+This API is implemented as per the standard, you can find documentation on [MDN](https://developer.mozilla.org/en-US/docs/Web/API/Request)
+
+## Header
+
+This API is implemented as per the standard, you can find documentation on [MDN](https://developer.mozilla.org/en-US/docs/Web/API/Headers)
diff --git a/includes/external/discord/node_modules/undici/docs/api/MockAgent.md b/includes/external/discord/node_modules/undici/docs/api/MockAgent.md
new file mode 100644
index 0000000..85ae690
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/docs/api/MockAgent.md
@@ -0,0 +1,540 @@
+# Class: MockAgent
+
+Extends: `undici.Dispatcher`
+
+A mocked Agent class that implements the Agent API. It allows one to intercept HTTP requests made through undici and return mocked responses instead.
+
+## `new MockAgent([options])`
+
+Arguments:
+
+* **options** `MockAgentOptions` (optional) - It extends the `Agent` options.
+
+Returns: `MockAgent`
+
+### Parameter: `MockAgentOptions`
+
+Extends: [`AgentOptions`](Agent.md#parameter-agentoptions)
+
+* **agent** `Agent` (optional) - Default: `new Agent([options])` - a custom agent encapsulated by the MockAgent.
+
+### Example - Basic MockAgent instantiation
+
+This will instantiate the MockAgent. It will not do anything until registered as the agent to use with requests and mock interceptions are added.
+
+```js
+import { MockAgent } from 'undici'
+
+const mockAgent = new MockAgent()
+```
+
+### Example - Basic MockAgent instantiation with custom agent
+
+```js
+import { Agent, MockAgent } from 'undici'
+
+const agent = new Agent()
+
+const mockAgent = new MockAgent({ agent })
+```
+
+## Instance Methods
+
+### `MockAgent.get(origin)`
+
+This method creates and retrieves MockPool or MockClient instances which can then be used to intercept HTTP requests. If the number of connections on the mock agent is set to 1, a MockClient instance is returned. Otherwise a MockPool instance is returned.
+
+For subsequent `MockAgent.get` calls on the same origin, the same mock instance will be returned.
+
+Arguments:
+
+* **origin** `string | RegExp | (value) => boolean` - a matcher for the pool origin to be retrieved from the MockAgent.
+
+| Matcher type | Condition to pass |
+|:------------:| -------------------------- |
+| `string` | Exact match against string |
+| `RegExp` | Regex must pass |
+| `Function` | Function must return true |
+
+Returns: `MockClient | MockPool`.
+
+| `MockAgentOptions` | Mock instance returned |
+| -------------------- | ---------------------- |
+| `connections === 1` | `MockClient` |
+| `connections` > `1` | `MockPool` |
+
+#### Example - Basic Mocked Request
+
+```js
+import { MockAgent, setGlobalDispatcher, request } from 'undici'
+
+const mockAgent = new MockAgent()
+setGlobalDispatcher(mockAgent)
+
+const mockPool = mockAgent.get('http://localhost:3000')
+mockPool.intercept({ path: '/foo' }).reply(200, 'foo')
+
+const { statusCode, body } = await request('http://localhost:3000/foo')
+
+console.log('response received', statusCode) // response received 200
+
+for await (const data of body) {
+ console.log('data', data.toString('utf8')) // data foo
+}
+```
+
+#### Example - Basic Mocked Request with local mock agent dispatcher
+
+```js
+import { MockAgent, request } from 'undici'
+
+const mockAgent = new MockAgent()
+
+const mockPool = mockAgent.get('http://localhost:3000')
+mockPool.intercept({ path: '/foo' }).reply(200, 'foo')
+
+const {
+ statusCode,
+ body
+} = await request('http://localhost:3000/foo', { dispatcher: mockAgent })
+
+console.log('response received', statusCode) // response received 200
+
+for await (const data of body) {
+ console.log('data', data.toString('utf8')) // data foo
+}
+```
+
+#### Example - Basic Mocked Request with local mock pool dispatcher
+
+```js
+import { MockAgent, request } from 'undici'
+
+const mockAgent = new MockAgent()
+
+const mockPool = mockAgent.get('http://localhost:3000')
+mockPool.intercept({ path: '/foo' }).reply(200, 'foo')
+
+const {
+ statusCode,
+ body
+} = await request('http://localhost:3000/foo', { dispatcher: mockPool })
+
+console.log('response received', statusCode) // response received 200
+
+for await (const data of body) {
+ console.log('data', data.toString('utf8')) // data foo
+}
+```
+
+#### Example - Basic Mocked Request with local mock client dispatcher
+
+```js
+import { MockAgent, request } from 'undici'
+
+const mockAgent = new MockAgent({ connections: 1 })
+
+const mockClient = mockAgent.get('http://localhost:3000')
+mockClient.intercept({ path: '/foo' }).reply(200, 'foo')
+
+const {
+ statusCode,
+ body
+} = await request('http://localhost:3000/foo', { dispatcher: mockClient })
+
+console.log('response received', statusCode) // response received 200
+
+for await (const data of body) {
+ console.log('data', data.toString('utf8')) // data foo
+}
+```
+
+#### Example - Basic Mocked requests with multiple intercepts
+
+```js
+import { MockAgent, setGlobalDispatcher, request } from 'undici'
+
+const mockAgent = new MockAgent()
+setGlobalDispatcher(mockAgent)
+
+const mockPool = mockAgent.get('http://localhost:3000')
+mockPool.intercept({ path: '/foo' }).reply(200, 'foo')
+mockPool.intercept({ path: '/hello'}).reply(200, 'hello')
+
+const result1 = await request('http://localhost:3000/foo')
+
+console.log('response received', result1.statusCode) // response received 200
+
+for await (const data of result1.body) {
+ console.log('data', data.toString('utf8')) // data foo
+}
+
+const result2 = await request('http://localhost:3000/hello')
+
+console.log('response received', result2.statusCode) // response received 200
+
+for await (const data of result2.body) {
+ console.log('data', data.toString('utf8')) // data hello
+}
+```
+#### Example - Mock different requests within the same file
+```js
+const { MockAgent, setGlobalDispatcher } = require('undici');
+const agent = new MockAgent();
+agent.disableNetConnect();
+setGlobalDispatcher(agent);
+describe('Test', () => {
+ it('200', async () => {
+ const mockAgent = agent.get('http://test.com');
+ // your test
+ });
+ it('200', async () => {
+ const mockAgent = agent.get('http://testing.com');
+ // your test
+ });
+});
+```
+
+#### Example - Mocked request with query body, headers and trailers
+
+```js
+import { MockAgent, setGlobalDispatcher, request } from 'undici'
+
+const mockAgent = new MockAgent()
+setGlobalDispatcher(mockAgent)
+
+const mockPool = mockAgent.get('http://localhost:3000')
+
+mockPool.intercept({
+ path: '/foo?hello=there&see=ya',
+ method: 'POST',
+ body: 'form1=data1&form2=data2'
+}).reply(200, { foo: 'bar' }, {
+ headers: { 'content-type': 'application/json' },
+ trailers: { 'Content-MD5': 'test' }
+})
+
+const {
+ statusCode,
+ headers,
+ trailers,
+ body
+} = await request('http://localhost:3000/foo?hello=there&see=ya', {
+ method: 'POST',
+ body: 'form1=data1&form2=data2'
+})
+
+console.log('response received', statusCode) // response received 200
+console.log('headers', headers) // { 'content-type': 'application/json' }
+
+for await (const data of body) {
+ console.log('data', data.toString('utf8')) // '{"foo":"bar"}'
+}
+
+console.log('trailers', trailers) // { 'content-md5': 'test' }
+```
+
+#### Example - Mocked request with origin regex
+
+```js
+import { MockAgent, setGlobalDispatcher, request } from 'undici'
+
+const mockAgent = new MockAgent()
+setGlobalDispatcher(mockAgent)
+
+const mockPool = mockAgent.get(new RegExp('http://localhost:3000'))
+mockPool.intercept({ path: '/foo' }).reply(200, 'foo')
+
+const {
+ statusCode,
+ body
+} = await request('http://localhost:3000/foo')
+
+console.log('response received', statusCode) // response received 200
+
+for await (const data of body) {
+ console.log('data', data.toString('utf8')) // data foo
+}
+```
+
+#### Example - Mocked request with origin function
+
+```js
+import { MockAgent, setGlobalDispatcher, request } from 'undici'
+
+const mockAgent = new MockAgent()
+setGlobalDispatcher(mockAgent)
+
+const mockPool = mockAgent.get((origin) => origin === 'http://localhost:3000')
+mockPool.intercept({ path: '/foo' }).reply(200, 'foo')
+
+const {
+ statusCode,
+ body
+} = await request('http://localhost:3000/foo')
+
+console.log('response received', statusCode) // response received 200
+
+for await (const data of body) {
+ console.log('data', data.toString('utf8')) // data foo
+}
+```
+
+### `MockAgent.close()`
+
+Closes the mock agent and waits for registered mock pools and clients to also close before resolving.
+
+Returns: `Promise<void>`
+
+#### Example - clean up after tests are complete
+
+```js
+import { MockAgent, setGlobalDispatcher } from 'undici'
+
+const mockAgent = new MockAgent()
+setGlobalDispatcher(mockAgent)
+
+await mockAgent.close()
+```
+
+### `MockAgent.dispatch(options, handlers)`
+
+Implements [`Agent.dispatch(options, handlers)`](Agent.md#parameter-agentdispatchoptions).
+
+### `MockAgent.request(options[, callback])`
+
+See [`Dispatcher.request(options [, callback])`](Dispatcher.md#dispatcherrequestoptions-callback).
+
+#### Example - MockAgent request
+
+```js
+import { MockAgent } from 'undici'
+
+const mockAgent = new MockAgent()
+
+const mockPool = mockAgent.get('http://localhost:3000')
+mockPool.intercept({ path: '/foo' }).reply(200, 'foo')
+
+const {
+ statusCode,
+ body
+} = await mockAgent.request({
+ origin: 'http://localhost:3000',
+ path: '/foo',
+ method: 'GET'
+})
+
+console.log('response received', statusCode) // response received 200
+
+for await (const data of body) {
+ console.log('data', data.toString('utf8')) // data foo
+}
+```
+
+### `MockAgent.deactivate()`
+
+This method disables mocking in MockAgent.
+
+Returns: `void`
+
+#### Example - Deactivate Mocking
+
+```js
+import { MockAgent, setGlobalDispatcher } from 'undici'
+
+const mockAgent = new MockAgent()
+setGlobalDispatcher(mockAgent)
+
+mockAgent.deactivate()
+```
+
+### `MockAgent.activate()`
+
+This method enables mocking in a MockAgent instance. When instantiated, a MockAgent is automatically activated. Therefore, this method is only effective after `MockAgent.deactivate` has been called.
+
+Returns: `void`
+
+#### Example - Activate Mocking
+
+```js
+import { MockAgent, setGlobalDispatcher } from 'undici'
+
+const mockAgent = new MockAgent()
+setGlobalDispatcher(mockAgent)
+
+mockAgent.deactivate()
+// No mocking will occur
+
+// Later
+mockAgent.activate()
+```
+
+### `MockAgent.enableNetConnect([host])`
+
+When requests are not matched in a MockAgent intercept, a real HTTP request is attempted. We can control this further through the use of `enableNetConnect`. This is achieved by defining host matchers so only matching requests will be attempted.
+
+When using a string, it should only include the **hostname and optionally, the port**. In addition, calling this method multiple times with a string will allow all HTTP requests that match these values.
+
+Arguments:
+
+* **host** `string | RegExp | (value) => boolean` - (optional)
+
+Returns: `void`
+
+#### Example - Allow all non-matching urls to be dispatched in a real HTTP request
+
+```js
+import { MockAgent, setGlobalDispatcher, request } from 'undici'
+
+const mockAgent = new MockAgent()
+setGlobalDispatcher(mockAgent)
+
+mockAgent.enableNetConnect()
+
+await request('http://example.com')
+// A real request is made
+```
+
+#### Example - Allow requests matching a host string to make real requests
+
+```js
+import { MockAgent, setGlobalDispatcher, request } from 'undici'
+
+const mockAgent = new MockAgent()
+setGlobalDispatcher(mockAgent)
+
+mockAgent.enableNetConnect('example-1.com')
+mockAgent.enableNetConnect('example-2.com:8080')
+
+await request('http://example-1.com')
+// A real request is made
+
+await request('http://example-2.com:8080')
+// A real request is made
+
+await request('http://example-3.com')
+// Will throw
+```
+
+#### Example - Allow requests matching a host regex to make real requests
+
+```js
+import { MockAgent, setGlobalDispatcher, request } from 'undici'
+
+const mockAgent = new MockAgent()
+setGlobalDispatcher(mockAgent)
+
+mockAgent.enableNetConnect(new RegExp('example.com'))
+
+await request('http://example.com')
+// A real request is made
+```
+
+#### Example - Allow requests matching a host function to make real requests
+
+```js
+import { MockAgent, setGlobalDispatcher, request } from 'undici'
+
+const mockAgent = new MockAgent()
+setGlobalDispatcher(mockAgent)
+
+mockAgent.enableNetConnect((value) => value === 'example.com')
+
+await request('http://example.com')
+// A real request is made
+```
+
+### `MockAgent.disableNetConnect()`
+
+This method causes all requests to throw when requests are not matched in a MockAgent intercept.
+
+Returns: `void`
+
+#### Example - Disable all non-matching requests by throwing an error for each
+
+```js
+import { MockAgent, request } from 'undici'
+
+const mockAgent = new MockAgent()
+
+mockAgent.disableNetConnect()
+
+await request('http://example.com')
+// Will throw
+```
+
+### `MockAgent.pendingInterceptors()`
+
+This method returns any pending interceptors registered on a mock agent. A pending interceptor meets one of the following criteria:
+
+- Is registered with neither `.times(<number>)` nor `.persist()`, and has not been invoked;
+- Is persistent (i.e., registered with `.persist()`) and has not been invoked;
+- Is registered with `.times(<number>)` and has not been invoked `<number>` of times.
+
+Returns: `PendingInterceptor[]` (where `PendingInterceptor` is a `MockDispatch` with an additional `origin: string`)
+
+#### Example - List all pending inteceptors
+
+```js
+const agent = new MockAgent()
+agent.disableNetConnect()
+
+agent
+ .get('https://example.com')
+ .intercept({ method: 'GET', path: '/' })
+ .reply(200)
+
+const pendingInterceptors = agent.pendingInterceptors()
+// Returns [
+// {
+// timesInvoked: 0,
+// times: 1,
+// persist: false,
+// consumed: false,
+// pending: true,
+// path: '/',
+// method: 'GET',
+// body: undefined,
+// headers: undefined,
+// data: {
+// error: null,
+// statusCode: 200,
+// data: '',
+// headers: {},
+// trailers: {}
+// },
+// origin: 'https://example.com'
+// }
+// ]
+```
+
+### `MockAgent.assertNoPendingInterceptors([options])`
+
+This method throws if the mock agent has any pending interceptors. A pending interceptor meets one of the following criteria:
+
+- Is registered with neither `.times(<number>)` nor `.persist()`, and has not been invoked;
+- Is persistent (i.e., registered with `.persist()`) and has not been invoked;
+- Is registered with `.times(<number>)` and has not been invoked `<number>` of times.
+
+#### Example - Check that there are no pending interceptors
+
+```js
+const agent = new MockAgent()
+agent.disableNetConnect()
+
+agent
+ .get('https://example.com')
+ .intercept({ method: 'GET', path: '/' })
+ .reply(200)
+
+agent.assertNoPendingInterceptors()
+// Throws an UndiciError with the following message:
+//
+// 1 interceptor is pending:
+//
+// ┌─────────┬────────┬───────────────────────┬──────┬─────────────┬────────────┬─────────────┬───────────┐
+// │ (index) │ Method │ Origin │ Path │ Status code │ Persistent │ Invocations │ Remaining │
+// ├─────────┼────────┼───────────────────────┼──────┼─────────────┼────────────┼─────────────┼───────────┤
+// │ 0 │ 'GET' │ 'https://example.com' │ '/' │ 200 │ '❌' │ 0 │ 1 │
+// └─────────┴────────┴───────────────────────┴──────┴─────────────┴────────────┴─────────────┴───────────┘
+```
diff --git a/includes/external/discord/node_modules/undici/docs/api/MockClient.md b/includes/external/discord/node_modules/undici/docs/api/MockClient.md
new file mode 100644
index 0000000..ac54691
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/docs/api/MockClient.md
@@ -0,0 +1,77 @@
+# Class: MockClient
+
+Extends: `undici.Client`
+
+A mock client class that implements the same api as [MockPool](MockPool.md).
+
+## `new MockClient(origin, [options])`
+
+Arguments:
+
+* **origin** `string` - It should only include the **protocol, hostname, and port**.
+* **options** `MockClientOptions` - It extends the `Client` options.
+
+Returns: `MockClient`
+
+### Parameter: `MockClientOptions`
+
+Extends: `ClientOptions`
+
+* **agent** `Agent` - the agent to associate this MockClient with.
+
+### Example - Basic MockClient instantiation
+
+We can use MockAgent to instantiate a MockClient ready to be used to intercept specified requests. It will not do anything until registered as the agent to use and any mock request are registered.
+
+```js
+import { MockAgent } from 'undici'
+
+// Connections must be set to 1 to return a MockClient instance
+const mockAgent = new MockAgent({ connections: 1 })
+
+const mockClient = mockAgent.get('http://localhost:3000')
+```
+
+## Instance Methods
+
+### `MockClient.intercept(options)`
+
+Implements: [`MockPool.intercept(options)`](MockPool.md#mockpoolinterceptoptions)
+
+### `MockClient.close()`
+
+Implements: [`MockPool.close()`](MockPool.md#mockpoolclose)
+
+### `MockClient.dispatch(options, handlers)`
+
+Implements [`Dispatcher.dispatch(options, handlers)`](Dispatcher.md#dispatcherdispatchoptions-handler).
+
+### `MockClient.request(options[, callback])`
+
+See [`Dispatcher.request(options [, callback])`](Dispatcher.md#dispatcherrequestoptions-callback).
+
+#### Example - MockClient request
+
+```js
+import { MockAgent } from 'undici'
+
+const mockAgent = new MockAgent({ connections: 1 })
+
+const mockClient = mockAgent.get('http://localhost:3000')
+mockClient.intercept({ path: '/foo' }).reply(200, 'foo')
+
+const {
+ statusCode,
+ body
+} = await mockClient.request({
+ origin: 'http://localhost:3000',
+ path: '/foo',
+ method: 'GET'
+})
+
+console.log('response received', statusCode) // response received 200
+
+for await (const data of body) {
+ console.log('data', data.toString('utf8')) // data foo
+}
+```
diff --git a/includes/external/discord/node_modules/undici/docs/api/MockErrors.md b/includes/external/discord/node_modules/undici/docs/api/MockErrors.md
new file mode 100644
index 0000000..c1aa3db
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/docs/api/MockErrors.md
@@ -0,0 +1,12 @@
+# MockErrors
+
+Undici exposes a variety of mock error objects that you can use to enhance your mock error handling.
+You can find all the mock error objects inside the `mockErrors` key.
+
+```js
+import { mockErrors } from 'undici'
+```
+
+| Mock Error | Mock Error Codes | Description |
+| --------------------- | ------------------------------- | ---------------------------------------------------------- |
+| `MockNotMatchedError` | `UND_MOCK_ERR_MOCK_NOT_MATCHED` | The request does not match any registered mock dispatches. |
diff --git a/includes/external/discord/node_modules/undici/docs/api/MockPool.md b/includes/external/discord/node_modules/undici/docs/api/MockPool.md
new file mode 100644
index 0000000..923c157
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/docs/api/MockPool.md
@@ -0,0 +1,512 @@
+# Class: MockPool
+
+Extends: `undici.Pool`
+
+A mock Pool class that implements the Pool API and is used by MockAgent to intercept real requests and return mocked responses.
+
+## `new MockPool(origin, [options])`
+
+Arguments:
+
+* **origin** `string` - It should only include the **protocol, hostname, and port**.
+* **options** `MockPoolOptions` - It extends the `Pool` options.
+
+Returns: `MockPool`
+
+### Parameter: `MockPoolOptions`
+
+Extends: `PoolOptions`
+
+* **agent** `Agent` - the agent to associate this MockPool with.
+
+### Example - Basic MockPool instantiation
+
+We can use MockAgent to instantiate a MockPool ready to be used to intercept specified requests. It will not do anything until registered as the agent to use and any mock request are registered.
+
+```js
+import { MockAgent } from 'undici'
+
+const mockAgent = new MockAgent()
+
+const mockPool = mockAgent.get('http://localhost:3000')
+```
+
+## Instance Methods
+
+### `MockPool.intercept(options)`
+
+This method defines the interception rules for matching against requests for a MockPool or MockPool. We can intercept multiple times on a single instance.
+
+When defining interception rules, all the rules must pass for a request to be intercepted. If a request is not intercepted, a real request will be attempted.
+
+| Matcher type | Condition to pass |
+|:------------:| -------------------------- |
+| `string` | Exact match against string |
+| `RegExp` | Regex must pass |
+| `Function` | Function must return true |
+
+Arguments:
+
+* **options** `MockPoolInterceptOptions` - Interception options.
+
+Returns: `MockInterceptor` corresponding to the input options.
+
+### Parameter: `MockPoolInterceptOptions`
+
+* **path** `string | RegExp | (path: string) => boolean` - a matcher for the HTTP request path.
+* **method** `string | RegExp | (method: string) => boolean` - (optional) - a matcher for the HTTP request method. Defaults to `GET`.
+* **body** `string | RegExp | (body: string) => boolean` - (optional) - a matcher for the HTTP request body.
+* **headers** `Record<string, string | RegExp | (body: string) => boolean`> - (optional) - a matcher for the HTTP request headers. To be intercepted, a request must match all defined headers. Extra headers not defined here may (or may not) be included in the request and do not affect the interception in any way.
+* **query** `Record<string, any> | null` - (optional) - a matcher for the HTTP request query string params.
+
+### Return: `MockInterceptor`
+
+We can define the behaviour of an intercepted request with the following options.
+
+* **reply** `(statusCode: number, replyData: string | Buffer | object | MockInterceptor.MockResponseDataHandler, responseOptions?: MockResponseOptions) => MockScope` - define a reply for a matching request. You can define the replyData as a callback to read incoming request data. Default for `responseOptions` is `{}`.
+* **reply** `(callback: MockInterceptor.MockReplyOptionsCallback) => MockScope` - define a reply for a matching request, allowing dynamic mocking of all reply options rather than just the data.
+* **replyWithError** `(error: Error) => MockScope` - define an error for a matching request to throw.
+* **defaultReplyHeaders** `(headers: Record<string, string>) => MockInterceptor` - define default headers to be included in subsequent replies. These are in addition to headers on a specific reply.
+* **defaultReplyTrailers** `(trailers: Record<string, string>) => MockInterceptor` - define default trailers to be included in subsequent replies. These are in addition to trailers on a specific reply.
+* **replyContentLength** `() => MockInterceptor` - define automatically calculated `content-length` headers to be included in subsequent replies.
+
+The reply data of an intercepted request may either be a string, buffer, or JavaScript object. Objects are converted to JSON while strings and buffers are sent as-is.
+
+By default, `reply` and `replyWithError` define the behaviour for the first matching request only. Subsequent requests will not be affected (this can be changed using the returned `MockScope`).
+
+### Parameter: `MockResponseOptions`
+
+* **headers** `Record<string, string>` - headers to be included on the mocked reply.
+* **trailers** `Record<string, string>` - trailers to be included on the mocked reply.
+
+### Return: `MockScope`
+
+A `MockScope` is associated with a single `MockInterceptor`. With this, we can configure the default behaviour of a intercepted reply.
+
+* **delay** `(waitInMs: number) => MockScope` - delay the associated reply by a set amount in ms.
+* **persist** `() => MockScope` - any matching request will always reply with the defined response indefinitely.
+* **times** `(repeatTimes: number) => MockScope` - any matching request will reply with the defined response a fixed amount of times. This is overridden by **persist**.
+
+#### Example - Basic Mocked Request
+
+```js
+import { MockAgent, setGlobalDispatcher, request } from 'undici'
+
+const mockAgent = new MockAgent()
+setGlobalDispatcher(mockAgent)
+
+// MockPool
+const mockPool = mockAgent.get('http://localhost:3000')
+mockPool.intercept({ path: '/foo' }).reply(200, 'foo')
+
+const {
+ statusCode,
+ body
+} = await request('http://localhost:3000/foo')
+
+console.log('response received', statusCode) // response received 200
+
+for await (const data of body) {
+ console.log('data', data.toString('utf8')) // data foo
+}
+```
+
+#### Example - Mocked request using reply data callbacks
+
+```js
+import { MockAgent, setGlobalDispatcher, request } from 'undici'
+
+const mockAgent = new MockAgent()
+setGlobalDispatcher(mockAgent)
+
+const mockPool = mockAgent.get('http://localhost:3000')
+
+mockPool.intercept({
+ path: '/echo',
+ method: 'GET',
+ headers: {
+ 'User-Agent': 'undici',
+ Host: 'example.com'
+ }
+}).reply(200, ({ headers }) => ({ message: headers.get('message') }))
+
+const { statusCode, body, headers } = await request('http://localhost:3000', {
+ headers: {
+ message: 'hello world!'
+ }
+})
+
+console.log('response received', statusCode) // response received 200
+console.log('headers', headers) // { 'content-type': 'application/json' }
+
+for await (const data of body) {
+ console.log('data', data.toString('utf8')) // { "message":"hello world!" }
+}
+```
+
+#### Example - Mocked request using reply options callback
+
+```js
+import { MockAgent, setGlobalDispatcher, request } from 'undici'
+
+const mockAgent = new MockAgent()
+setGlobalDispatcher(mockAgent)
+
+const mockPool = mockAgent.get('http://localhost:3000')
+
+mockPool.intercept({
+ path: '/echo',
+ method: 'GET',
+ headers: {
+ 'User-Agent': 'undici',
+ Host: 'example.com'
+ }
+}).reply(({ headers }) => ({ statusCode: 200, data: { message: headers.get('message') }})))
+
+const { statusCode, body, headers } = await request('http://localhost:3000', {
+ headers: {
+ message: 'hello world!'
+ }
+})
+
+console.log('response received', statusCode) // response received 200
+console.log('headers', headers) // { 'content-type': 'application/json' }
+
+for await (const data of body) {
+ console.log('data', data.toString('utf8')) // { "message":"hello world!" }
+}
+```
+
+#### Example - Basic Mocked requests with multiple intercepts
+
+```js
+import { MockAgent, setGlobalDispatcher, request } from 'undici'
+
+const mockAgent = new MockAgent()
+setGlobalDispatcher(mockAgent)
+
+const mockPool = mockAgent.get('http://localhost:3000')
+
+mockPool.intercept({
+ path: '/foo',
+ method: 'GET'
+}).reply(200, 'foo')
+
+mockPool.intercept({
+ path: '/hello',
+ method: 'GET',
+}).reply(200, 'hello')
+
+const result1 = await request('http://localhost:3000/foo')
+
+console.log('response received', result1.statusCode) // response received 200
+
+for await (const data of result1.body) {
+ console.log('data', data.toString('utf8')) // data foo
+}
+
+const result2 = await request('http://localhost:3000/hello')
+
+console.log('response received', result2.statusCode) // response received 200
+
+for await (const data of result2.body) {
+ console.log('data', data.toString('utf8')) // data hello
+}
+```
+
+#### Example - Mocked request with query body, request headers and response headers and trailers
+
+```js
+import { MockAgent, setGlobalDispatcher, request } from 'undici'
+
+const mockAgent = new MockAgent()
+setGlobalDispatcher(mockAgent)
+
+const mockPool = mockAgent.get('http://localhost:3000')
+
+mockPool.intercept({
+ path: '/foo?hello=there&see=ya',
+ method: 'POST',
+ body: 'form1=data1&form2=data2',
+ headers: {
+ 'User-Agent': 'undici',
+ Host: 'example.com'
+ }
+}).reply(200, { foo: 'bar' }, {
+ headers: { 'content-type': 'application/json' },
+ trailers: { 'Content-MD5': 'test' }
+})
+
+const {
+ statusCode,
+ headers,
+ trailers,
+ body
+} = await request('http://localhost:3000/foo?hello=there&see=ya', {
+ method: 'POST',
+ body: 'form1=data1&form2=data2',
+ headers: {
+ foo: 'bar',
+ 'User-Agent': 'undici',
+ Host: 'example.com'
+ }
+ })
+
+console.log('response received', statusCode) // response received 200
+console.log('headers', headers) // { 'content-type': 'application/json' }
+
+for await (const data of body) {
+ console.log('data', data.toString('utf8')) // '{"foo":"bar"}'
+}
+
+console.log('trailers', trailers) // { 'content-md5': 'test' }
+```
+
+#### Example - Mocked request using different matchers
+
+```js
+import { MockAgent, setGlobalDispatcher, request } from 'undici'
+
+const mockAgent = new MockAgent()
+setGlobalDispatcher(mockAgent)
+
+const mockPool = mockAgent.get('http://localhost:3000')
+
+mockPool.intercept({
+ path: '/foo',
+ method: /^GET$/,
+ body: (value) => value === 'form=data',
+ headers: {
+ 'User-Agent': 'undici',
+ Host: /^example.com$/
+ }
+}).reply(200, 'foo')
+
+const {
+ statusCode,
+ body
+} = await request('http://localhost:3000/foo', {
+ method: 'GET',
+ body: 'form=data',
+ headers: {
+ foo: 'bar',
+ 'User-Agent': 'undici',
+ Host: 'example.com'
+ }
+})
+
+console.log('response received', statusCode) // response received 200
+
+for await (const data of body) {
+ console.log('data', data.toString('utf8')) // data foo
+}
+```
+
+#### Example - Mocked request with reply with a defined error
+
+```js
+import { MockAgent, setGlobalDispatcher, request } from 'undici'
+
+const mockAgent = new MockAgent()
+setGlobalDispatcher(mockAgent)
+
+const mockPool = mockAgent.get('http://localhost:3000')
+
+mockPool.intercept({
+ path: '/foo',
+ method: 'GET'
+}).replyWithError(new Error('kaboom'))
+
+try {
+ await request('http://localhost:3000/foo', {
+ method: 'GET'
+ })
+} catch (error) {
+ console.error(error) // Error: kaboom
+}
+```
+
+#### Example - Mocked request with defaultReplyHeaders
+
+```js
+import { MockAgent, setGlobalDispatcher, request } from 'undici'
+
+const mockAgent = new MockAgent()
+setGlobalDispatcher(mockAgent)
+
+const mockPool = mockAgent.get('http://localhost:3000')
+
+mockPool.intercept({
+ path: '/foo',
+ method: 'GET'
+}).defaultReplyHeaders({ foo: 'bar' })
+ .reply(200, 'foo')
+
+const { headers } = await request('http://localhost:3000/foo')
+
+console.log('headers', headers) // headers { foo: 'bar' }
+```
+
+#### Example - Mocked request with defaultReplyTrailers
+
+```js
+import { MockAgent, setGlobalDispatcher, request } from 'undici'
+
+const mockAgent = new MockAgent()
+setGlobalDispatcher(mockAgent)
+
+const mockPool = mockAgent.get('http://localhost:3000')
+
+mockPool.intercept({
+ path: '/foo',
+ method: 'GET'
+}).defaultReplyTrailers({ foo: 'bar' })
+ .reply(200, 'foo')
+
+const { trailers } = await request('http://localhost:3000/foo')
+
+console.log('trailers', trailers) // trailers { foo: 'bar' }
+```
+
+#### Example - Mocked request with automatic content-length calculation
+
+```js
+import { MockAgent, setGlobalDispatcher, request } from 'undici'
+
+const mockAgent = new MockAgent()
+setGlobalDispatcher(mockAgent)
+
+const mockPool = mockAgent.get('http://localhost:3000')
+
+mockPool.intercept({
+ path: '/foo',
+ method: 'GET'
+}).replyContentLength().reply(200, 'foo')
+
+const { headers } = await request('http://localhost:3000/foo')
+
+console.log('headers', headers) // headers { 'content-length': '3' }
+```
+
+#### Example - Mocked request with automatic content-length calculation on an object
+
+```js
+import { MockAgent, setGlobalDispatcher, request } from 'undici'
+
+const mockAgent = new MockAgent()
+setGlobalDispatcher(mockAgent)
+
+const mockPool = mockAgent.get('http://localhost:3000')
+
+mockPool.intercept({
+ path: '/foo',
+ method: 'GET'
+}).replyContentLength().reply(200, { foo: 'bar' })
+
+const { headers } = await request('http://localhost:3000/foo')
+
+console.log('headers', headers) // headers { 'content-length': '13' }
+```
+
+#### Example - Mocked request with persist enabled
+
+```js
+import { MockAgent, setGlobalDispatcher, request } from 'undici'
+
+const mockAgent = new MockAgent()
+setGlobalDispatcher(mockAgent)
+
+const mockPool = mockAgent.get('http://localhost:3000')
+
+mockPool.intercept({
+ path: '/foo',
+ method: 'GET'
+}).reply(200, 'foo').persist()
+
+const result1 = await request('http://localhost:3000/foo')
+// Will match and return mocked data
+
+const result2 = await request('http://localhost:3000/foo')
+// Will match and return mocked data
+
+// Etc
+```
+
+#### Example - Mocked request with times enabled
+
+```js
+import { MockAgent, setGlobalDispatcher, request } from 'undici'
+
+const mockAgent = new MockAgent()
+setGlobalDispatcher(mockAgent)
+
+const mockPool = mockAgent.get('http://localhost:3000')
+
+mockPool.intercept({
+ path: '/foo',
+ method: 'GET'
+}).reply(200, 'foo').times(2)
+
+const result1 = await request('http://localhost:3000/foo')
+// Will match and return mocked data
+
+const result2 = await request('http://localhost:3000/foo')
+// Will match and return mocked data
+
+const result3 = await request('http://localhost:3000/foo')
+// Will not match and make attempt a real request
+```
+
+### `MockPool.close()`
+
+Closes the mock pool and de-registers from associated MockAgent.
+
+Returns: `Promise<void>`
+
+#### Example - clean up after tests are complete
+
+```js
+import { MockAgent } from 'undici'
+
+const mockAgent = new MockAgent()
+const mockPool = mockAgent.get('http://localhost:3000')
+
+await mockPool.close()
+```
+
+### `MockPool.dispatch(options, handlers)`
+
+Implements [`Dispatcher.dispatch(options, handlers)`](Dispatcher.md#dispatcherdispatchoptions-handler).
+
+### `MockPool.request(options[, callback])`
+
+See [`Dispatcher.request(options [, callback])`](Dispatcher.md#dispatcherrequestoptions-callback).
+
+#### Example - MockPool request
+
+```js
+import { MockAgent } from 'undici'
+
+const mockAgent = new MockAgent()
+
+const mockPool = mockAgent.get('http://localhost:3000')
+mockPool.intercept({
+ path: '/foo',
+ method: 'GET',
+}).reply(200, 'foo')
+
+const {
+ statusCode,
+ body
+} = await mockPool.request({
+ origin: 'http://localhost:3000',
+ path: '/foo',
+ method: 'GET'
+})
+
+console.log('response received', statusCode) // response received 200
+
+for await (const data of body) {
+ console.log('data', data.toString('utf8')) // data foo
+}
+```
diff --git a/includes/external/discord/node_modules/undici/docs/api/Pool.md b/includes/external/discord/node_modules/undici/docs/api/Pool.md
new file mode 100644
index 0000000..8fcabac
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/docs/api/Pool.md
@@ -0,0 +1,84 @@
+# Class: Pool
+
+Extends: `undici.Dispatcher`
+
+A pool of [Client](Client.md) instances connected to the same upstream target.
+
+Requests are not guaranteed to be dispatched in order of invocation.
+
+## `new Pool(url[, options])`
+
+Arguments:
+
+* **url** `URL | string` - It should only include the **protocol, hostname, and port**.
+* **options** `PoolOptions` (optional)
+
+### Parameter: `PoolOptions`
+
+Extends: [`ClientOptions`](Client.md#parameter-clientoptions)
+
+* **factory** `(origin: URL, opts: Object) => Dispatcher` - Default: `(origin, opts) => new Client(origin, opts)`
+* **connections** `number | null` (optional) - Default: `null` - The number of `Client` instances to create. When set to `null`, the `Pool` instance will create an unlimited amount of `Client` instances.
+* **interceptors** `{ Pool: DispatchInterceptor[] } }` - Default: `{ Pool: [] }` - A list of interceptors that are applied to the dispatch method. Additional logic can be applied (such as, but not limited to: 302 status code handling, authentication, cookies, compression and caching).
+
+## Instance Properties
+
+### `Pool.closed`
+
+Implements [Client.closed](Client.md#clientclosed)
+
+### `Pool.destroyed`
+
+Implements [Client.destroyed](Client.md#clientdestroyed)
+
+### `Pool.stats`
+
+Returns [`PoolStats`](PoolStats.md) instance for this pool.
+
+## Instance Methods
+
+### `Pool.close([callback])`
+
+Implements [`Dispatcher.close([callback])`](Dispatcher.md#dispatcherclosecallback-promise).
+
+### `Pool.destroy([error, callback])`
+
+Implements [`Dispatcher.destroy([error, callback])`](Dispatcher.md#dispatcherdestroyerror-callback-promise).
+
+### `Pool.connect(options[, callback])`
+
+See [`Dispatcher.connect(options[, callback])`](Dispatcher.md#dispatcherconnectoptions-callback).
+
+### `Pool.dispatch(options, handler)`
+
+Implements [`Dispatcher.dispatch(options, handler)`](Dispatcher.md#dispatcherdispatchoptions-handler).
+
+### `Pool.pipeline(options, handler)`
+
+See [`Dispatcher.pipeline(options, handler)`](Dispatcher.md#dispatcherpipelineoptions-handler).
+
+### `Pool.request(options[, callback])`
+
+See [`Dispatcher.request(options [, callback])`](Dispatcher.md#dispatcherrequestoptions-callback).
+
+### `Pool.stream(options, factory[, callback])`
+
+See [`Dispatcher.stream(options, factory[, callback])`](Dispatcher.md#dispatcherstreamoptions-factory-callback).
+
+### `Pool.upgrade(options[, callback])`
+
+See [`Dispatcher.upgrade(options[, callback])`](Dispatcher.md#dispatcherupgradeoptions-callback).
+
+## Instance Events
+
+### Event: `'connect'`
+
+See [Dispatcher Event: `'connect'`](Dispatcher.md#event-connect).
+
+### Event: `'disconnect'`
+
+See [Dispatcher Event: `'disconnect'`](Dispatcher.md#event-disconnect).
+
+### Event: `'drain'`
+
+See [Dispatcher Event: `'drain'`](Dispatcher.md#event-drain).
diff --git a/includes/external/discord/node_modules/undici/docs/api/PoolStats.md b/includes/external/discord/node_modules/undici/docs/api/PoolStats.md
new file mode 100644
index 0000000..16b6dc2
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/docs/api/PoolStats.md
@@ -0,0 +1,35 @@
+# Class: PoolStats
+
+Aggregate stats for a [Pool](Pool.md) or [BalancedPool](BalancedPool.md).
+
+## `new PoolStats(pool)`
+
+Arguments:
+
+* **pool** `Pool` - Pool or BalancedPool from which to return stats.
+
+## Instance Properties
+
+### `PoolStats.connected`
+
+Number of open socket connections in this pool.
+
+### `PoolStats.free`
+
+Number of open socket connections in this pool that do not have an active request.
+
+### `PoolStats.pending`
+
+Number of pending requests across all clients in this pool.
+
+### `PoolStats.queued`
+
+Number of queued requests across all clients in this pool.
+
+### `PoolStats.running`
+
+Number of currently active requests across all clients in this pool.
+
+### `PoolStats.size`
+
+Number of active, pending, or queued requests across all clients in this pool.
diff --git a/includes/external/discord/node_modules/undici/docs/api/ProxyAgent.md b/includes/external/discord/node_modules/undici/docs/api/ProxyAgent.md
new file mode 100644
index 0000000..6a8b07f
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/docs/api/ProxyAgent.md
@@ -0,0 +1,124 @@
+# Class: ProxyAgent
+
+Extends: `undici.Dispatcher`
+
+A Proxy Agent class that implements the Agent API. It allows the connection through proxy in a simple way.
+
+## `new ProxyAgent([options])`
+
+Arguments:
+
+* **options** `ProxyAgentOptions` (required) - It extends the `Agent` options.
+
+Returns: `ProxyAgent`
+
+### Parameter: `ProxyAgentOptions`
+
+Extends: [`AgentOptions`](Agent.md#parameter-agentoptions)
+
+* **uri** `string` (required) - It can be passed either by a string or a object containing `uri` as string.
+* **token** `string` (optional) - It can be passed by a string of token for authentication.
+* **auth** `string` (**deprecated**) - Use token.
+* **clientFactory** `(origin: URL, opts: Object) => Dispatcher` - Default: `(origin, opts) => new Pool(origin, opts)`
+
+Examples:
+
+```js
+import { ProxyAgent } from 'undici'
+
+const proxyAgent = new ProxyAgent('my.proxy.server')
+// or
+const proxyAgent = new ProxyAgent({ uri: 'my.proxy.server' })
+```
+
+#### Example - Basic ProxyAgent instantiation
+
+This will instantiate the ProxyAgent. It will not do anything until registered as the agent to use with requests.
+
+```js
+import { ProxyAgent } from 'undici'
+
+const proxyAgent = new ProxyAgent('my.proxy.server')
+```
+
+#### Example - Basic Proxy Request with global agent dispatcher
+
+```js
+import { setGlobalDispatcher, request, ProxyAgent } from 'undici'
+
+const proxyAgent = new ProxyAgent('my.proxy.server')
+setGlobalDispatcher(proxyAgent)
+
+const { statusCode, body } = await request('http://localhost:3000/foo')
+
+console.log('response received', statusCode) // response received 200
+
+for await (const data of body) {
+ console.log('data', data.toString('utf8')) // data foo
+}
+```
+
+#### Example - Basic Proxy Request with local agent dispatcher
+
+```js
+import { ProxyAgent, request } from 'undici'
+
+const proxyAgent = new ProxyAgent('my.proxy.server')
+
+const {
+ statusCode,
+ body
+} = await request('http://localhost:3000/foo', { dispatcher: proxyAgent })
+
+console.log('response received', statusCode) // response received 200
+
+for await (const data of body) {
+ console.log('data', data.toString('utf8')) // data foo
+}
+```
+
+#### Example - Basic Proxy Request with authentication
+
+```js
+import { setGlobalDispatcher, request, ProxyAgent } from 'undici';
+
+const proxyAgent = new ProxyAgent({
+ uri: 'my.proxy.server',
+ // token: 'Bearer xxxx'
+ token: `Basic ${Buffer.from('username:password').toString('base64')}`
+});
+setGlobalDispatcher(proxyAgent);
+
+const { statusCode, body } = await request('http://localhost:3000/foo');
+
+console.log('response received', statusCode); // response received 200
+
+for await (const data of body) {
+ console.log('data', data.toString('utf8')); // data foo
+}
+```
+
+### `ProxyAgent.close()`
+
+Closes the proxy agent and waits for registered pools and clients to also close before resolving.
+
+Returns: `Promise<void>`
+
+#### Example - clean up after tests are complete
+
+```js
+import { ProxyAgent, setGlobalDispatcher } from 'undici'
+
+const proxyAgent = new ProxyAgent('my.proxy.server')
+setGlobalDispatcher(proxyAgent)
+
+await proxyAgent.close()
+```
+
+### `ProxyAgent.dispatch(options, handlers)`
+
+Implements [`Agent.dispatch(options, handlers)`](Agent.md#parameter-agentdispatchoptions).
+
+### `ProxyAgent.request(options[, callback])`
+
+See [`Dispatcher.request(options [, callback])`](Dispatcher.md#dispatcherrequestoptions-callback).
diff --git a/includes/external/discord/node_modules/undici/docs/api/WebSocket.md b/includes/external/discord/node_modules/undici/docs/api/WebSocket.md
new file mode 100644
index 0000000..639a533
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/docs/api/WebSocket.md
@@ -0,0 +1,20 @@
+# Class: WebSocket
+
+> ⚠️ Warning: the WebSocket API is experimental and has known bugs.
+
+Extends: [`EventTarget`](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget)
+
+The WebSocket object provides a way to manage a WebSocket connection to a server, allowing bidirectional communication. The API follows the [WebSocket spec](https://developer.mozilla.org/en-US/docs/Web/API/WebSocket).
+
+## `new WebSocket(url[, protocol])`
+
+Arguments:
+
+* **url** `URL | string` - The url's protocol *must* be `ws` or `wss`.
+* **protocol** `string | string[]` (optional) - Subprotocol(s) to request the server use.
+
+## Read More
+
+- [MDN - WebSocket](https://developer.mozilla.org/en-US/docs/Web/API/WebSocket)
+- [The WebSocket Specification](https://www.rfc-editor.org/rfc/rfc6455)
+- [The WHATWG WebSocket Specification](https://websockets.spec.whatwg.org/)
diff --git a/includes/external/discord/node_modules/undici/docs/api/api-lifecycle.md b/includes/external/discord/node_modules/undici/docs/api/api-lifecycle.md
new file mode 100644
index 0000000..d158126
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/docs/api/api-lifecycle.md
@@ -0,0 +1,62 @@
+# Client Lifecycle
+
+An Undici [Client](Client.md) can be best described as a state machine. The following list is a summary of the various state transitions the `Client` will go through in its lifecycle. This document also contains detailed breakdowns of each state.
+
+> This diagram is not a perfect representation of the undici Client. Since the Client class is not actually implemented as a state-machine, actual execution may deviate slightly from what is described below. Consider this as a general resource for understanding the inner workings of the Undici client rather than some kind of formal specification.
+
+## State Transition Overview
+
+* A `Client` begins in the **idle** state with no socket connection and no requests in queue.
+ * The *connect* event transitions the `Client` to the **pending** state where requests can be queued prior to processing.
+ * The *close* and *destroy* events transition the `Client` to the **destroyed** state. Since there are no requests in the queue, the *close* event immediately transitions to the **destroyed** state.
+* The **pending** state indicates the underlying socket connection has been successfully established and requests are queueing.
+ * The *process* event transitions the `Client` to the **processing** state where requests are processed.
+ * If requests are queued, the *close* event transitions to the **processing** state; otherwise, it transitions to the **destroyed** state.
+ * The *destroy* event transitions to the **destroyed** state.
+* The **processing** state initializes to the **processing.running** state.
+ * If the current request requires draining, the *needDrain* event transitions the `Client` into the **processing.busy** state which will return to the **processing.running** state with the *drainComplete* event.
+ * After all queued requests are completed, the *keepalive* event transitions the `Client` back to the **pending** state. If no requests are queued during the timeout, the **close** event transitions the `Client` to the **destroyed** state.
+ * If the *close* event is fired while the `Client` still has queued requests, the `Client` transitions to the **process.closing** state where it will complete all existing requests before firing the *done* event.
+ * The *done* event gracefully transitions the `Client` to the **destroyed** state.
+ * At any point in time, the *destroy* event will transition the `Client` from the **processing** state to the **destroyed** state, destroying any queued requests.
+* The **destroyed** state is a final state and the `Client` is no longer functional.
+
+![A state diagram representing an Undici Client instance](../assets/lifecycle-diagram.png)
+
+> The diagram was generated using Mermaid.js Live Editor. Modify the state diagram [here](https://mermaid-js.github.io/mermaid-live-editor/#/edit/eyJjb2RlIjoic3RhdGVEaWFncmFtLXYyXG4gICAgWypdIC0tPiBpZGxlXG4gICAgaWRsZSAtLT4gcGVuZGluZyA6IGNvbm5lY3RcbiAgICBpZGxlIC0tPiBkZXN0cm95ZWQgOiBkZXN0cm95L2Nsb3NlXG4gICAgXG4gICAgcGVuZGluZyAtLT4gaWRsZSA6IHRpbWVvdXRcbiAgICBwZW5kaW5nIC0tPiBkZXN0cm95ZWQgOiBkZXN0cm95XG5cbiAgICBzdGF0ZSBjbG9zZV9mb3JrIDw8Zm9yaz4-XG4gICAgcGVuZGluZyAtLT4gY2xvc2VfZm9yayA6IGNsb3NlXG4gICAgY2xvc2VfZm9yayAtLT4gcHJvY2Vzc2luZ1xuICAgIGNsb3NlX2ZvcmsgLS0-IGRlc3Ryb3llZFxuXG4gICAgcGVuZGluZyAtLT4gcHJvY2Vzc2luZyA6IHByb2Nlc3NcblxuICAgIHByb2Nlc3NpbmcgLS0-IHBlbmRpbmcgOiBrZWVwYWxpdmVcbiAgICBwcm9jZXNzaW5nIC0tPiBkZXN0cm95ZWQgOiBkb25lXG4gICAgcHJvY2Vzc2luZyAtLT4gZGVzdHJveWVkIDogZGVzdHJveVxuXG4gICAgc3RhdGUgcHJvY2Vzc2luZyB7XG4gICAgICAgIHJ1bm5pbmcgLS0-IGJ1c3kgOiBuZWVkRHJhaW5cbiAgICAgICAgYnVzeSAtLT4gcnVubmluZyA6IGRyYWluQ29tcGxldGVcbiAgICAgICAgcnVubmluZyAtLT4gWypdIDoga2VlcGFsaXZlXG4gICAgICAgIHJ1bm5pbmcgLS0-IGNsb3NpbmcgOiBjbG9zZVxuICAgICAgICBjbG9zaW5nIC0tPiBbKl0gOiBkb25lXG4gICAgICAgIFsqXSAtLT4gcnVubmluZ1xuICAgIH1cbiAgICAiLCJtZXJtYWlkIjp7InRoZW1lIjoiYmFzZSJ9LCJ1cGRhdGVFZGl0b3IiOmZhbHNlfQ)
+
+## State details
+
+### idle
+
+The **idle** state is the initial state of a `Client` instance. While an `origin` is required for instantiating a `Client` instance, the underlying socket connection will not be established until a request is queued using [`Client.dispatch()`](Client.md#clientdispatchoptions-handlers). By calling `Client.dispatch()` directly or using one of the multiple implementations ([`Client.connect()`](Client.md#clientconnectoptions-callback), [`Client.pipeline()`](Client.md#clientpipelineoptions-handler), [`Client.request()`](Client.md#clientrequestoptions-callback), [`Client.stream()`](Client.md#clientstreamoptions-factory-callback), and [`Client.upgrade()`](Client.md#clientupgradeoptions-callback)), the `Client` instance will transition from **idle** to [**pending**](#pending) and then most likely directly to [**processing**](#processing).
+
+Calling [`Client.close()`](Client.md#clientclosecallback) or [`Client.destroy()`](Client.md#clientdestroyerror-callback) transitions directly to the [**destroyed**](#destroyed) state since the `Client` instance will have no queued requests in this state.
+
+### pending
+
+The **pending** state signifies a non-processing `Client`. Upon entering this state, the `Client` establishes a socket connection and emits the [`'connect'`](Client.md#event-connect) event signalling a connection was successfully established with the `origin` provided during `Client` instantiation. The internal queue is initially empty, and requests can start queueing.
+
+Calling [`Client.close()`](Client.md#clientclosecallback) with queued requests, transitions the `Client` to the [**processing**](#processing) state. Without queued requests, it transitions to the [**destroyed**](#destroyed) state.
+
+Calling [`Client.destroy()`](Client.md#clientdestroyerror-callback) transitions directly to the [**destroyed**](#destroyed) state regardless of existing requests.
+
+### processing
+
+The **processing** state is a state machine within itself. It initializes to the [**processing.running**](#running) state. The [`Client.dispatch()`](Client.md#clientdispatchoptions-handlers), [`Client.close()`](Client.md#clientclosecallback), and [`Client.destroy()`](Client.md#clientdestroyerror-callback) can be called at any time while the `Client` is in this state. `Client.dispatch()` will add more requests to the queue while existing requests continue to be processed. `Client.close()` will transition to the [**processing.closing**](#closing) state. And `Client.destroy()` will transition to [**destroyed**](#destroyed).
+
+#### running
+
+In the **processing.running** sub-state, queued requests are being processed in a FIFO order. If a request body requires draining, the *needDrain* event transitions to the [**processing.busy**](#busy) sub-state. The *close* event transitions the Client to the [**process.closing**](#closing) sub-state. If all queued requests are processed and neither [`Client.close()`](Client.md#clientclosecallback) nor [`Client.destroy()`](Client.md#clientdestroyerror-callback) are called, then the [**processing**](#processing) machine will trigger a *keepalive* event transitioning the `Client` back to the [**pending**](#pending) state. During this time, the `Client` is waiting for the socket connection to timeout, and once it does, it triggers the *timeout* event and transitions to the [**idle**](#idle) state.
+
+#### busy
+
+This sub-state is only entered when a request body is an instance of [Stream](https://nodejs.org/api/stream.html) and requires draining. The `Client` cannot process additional requests while in this state and must wait until the currently processing request body is completely drained before transitioning back to [**processing.running**](#running).
+
+#### closing
+
+This sub-state is only entered when a `Client` instance has queued requests and the [`Client.close()`](Client.md#clientclosecallback) method is called. In this state, the `Client` instance continues to process requests as usual, with the one exception that no additional requests can be queued. Once all of the queued requests are processed, the `Client` will trigger the *done* event gracefully entering the [**destroyed**](#destroyed) state without an error.
+
+### destroyed
+
+The **destroyed** state is a final state for the `Client` instance. Once in this state, a `Client` is nonfunctional. Calling any other `Client` methods will result in an `ClientDestroyedError`.
diff --git a/includes/external/discord/node_modules/undici/docs/assets/lifecycle-diagram.png b/includes/external/discord/node_modules/undici/docs/assets/lifecycle-diagram.png
new file mode 100644
index 0000000..4ef17b5
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/docs/assets/lifecycle-diagram.png
Binary files differ
diff --git a/includes/external/discord/node_modules/undici/docs/best-practices/client-certificate.md b/includes/external/discord/node_modules/undici/docs/best-practices/client-certificate.md
new file mode 100644
index 0000000..4fc84ec
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/docs/best-practices/client-certificate.md
@@ -0,0 +1,64 @@
+# Client certificate
+
+Client certificate authentication can be configured with the `Client`, the required options are passed along through the `connect` option.
+
+The client certificates must be signed by a trusted CA. The Node.js default is to trust the well-known CAs curated by Mozilla.
+
+Setting the server option `requestCert: true` tells the server to request the client certificate.
+
+The server option `rejectUnauthorized: false` allows us to handle any invalid certificate errors in client code. The `authorized` property on the socket of the incoming request will show if the client certificate was valid. The `authorizationError` property will give the reason if the certificate was not valid.
+
+### Client Certificate Authentication
+
+```js
+const { readFileSync } = require('fs')
+const { join } = require('path')
+const { createServer } = require('https')
+const { Client } = require('undici')
+
+const serverOptions = {
+ ca: [
+ readFileSync(join(__dirname, 'client-ca-crt.pem'), 'utf8')
+ ],
+ key: readFileSync(join(__dirname, 'server-key.pem'), 'utf8'),
+ cert: readFileSync(join(__dirname, 'server-crt.pem'), 'utf8'),
+ requestCert: true,
+ rejectUnauthorized: false
+}
+
+const server = createServer(serverOptions, (req, res) => {
+ // true if client cert is valid
+ if(req.client.authorized === true) {
+ console.log('valid')
+ } else {
+ console.error(req.client.authorizationError)
+ }
+ res.end()
+})
+
+server.listen(0, function () {
+ const tls = {
+ ca: [
+ readFileSync(join(__dirname, 'server-ca-crt.pem'), 'utf8')
+ ],
+ key: readFileSync(join(__dirname, 'client-key.pem'), 'utf8'),
+ cert: readFileSync(join(__dirname, 'client-crt.pem'), 'utf8'),
+ rejectUnauthorized: false,
+ servername: 'agent1'
+ }
+ const client = new Client(`https://localhost:${server.address().port}`, {
+ connect: tls
+ })
+
+ client.request({
+ path: '/',
+ method: 'GET'
+ }, (err, { body }) => {
+ body.on('data', (buf) => {})
+ body.on('end', () => {
+ client.close()
+ server.close()
+ })
+ })
+})
+```
diff --git a/includes/external/discord/node_modules/undici/docs/best-practices/mocking-request.md b/includes/external/discord/node_modules/undici/docs/best-practices/mocking-request.md
new file mode 100644
index 0000000..6954392
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/docs/best-practices/mocking-request.md
@@ -0,0 +1,136 @@
+# Mocking Request
+
+Undici has its own mocking [utility](../api/MockAgent.md). It allow us to intercept undici HTTP requests and return mocked values instead. It can be useful for testing purposes.
+
+Example:
+
+```js
+// bank.mjs
+import { request } from 'undici'
+
+export async function bankTransfer(recipient, amount) {
+ const { body } = await request('http://localhost:3000/bank-transfer',
+ {
+ method: 'POST',
+ headers: {
+ 'X-TOKEN-SECRET': 'SuperSecretToken',
+ },
+ body: JSON.stringify({
+ recipient,
+ amount
+ })
+ }
+ )
+ return await body.json()
+}
+```
+
+And this is what the test file looks like:
+
+```js
+// index.test.mjs
+import { strict as assert } from 'assert'
+import { MockAgent, setGlobalDispatcher, } from 'undici'
+import { bankTransfer } from './bank.mjs'
+
+const mockAgent = new MockAgent();
+
+setGlobalDispatcher(mockAgent);
+
+// Provide the base url to the request
+const mockPool = mockAgent.get('http://localhost:3000');
+
+// intercept the request
+mockPool.intercept({
+ path: '/bank-transfer',
+ method: 'POST',
+ headers: {
+ 'X-TOKEN-SECRET': 'SuperSecretToken',
+ },
+ body: JSON.stringify({
+ recipient: '1234567890',
+ amount: '100'
+ })
+}).reply(200, {
+ message: 'transaction processed'
+})
+
+const success = await bankTransfer('1234567890', '100')
+
+assert.deepEqual(success, { message: 'transaction processed' })
+
+// if you dont want to check whether the body or the headers contain the same value
+// just remove it from interceptor
+mockPool.intercept({
+ path: '/bank-transfer',
+ method: 'POST',
+}).reply(400, {
+ message: 'bank account not found'
+})
+
+const badRequest = await bankTransfer('1234567890', '100')
+
+assert.deepEqual(badRequest, { message: 'bank account not found' })
+```
+
+Explore other MockAgent functionality [here](../api/MockAgent.md)
+
+## Debug Mock Value
+
+When the interceptor and the request options are not the same, undici will automatically make a real HTTP request. To prevent real requests from being made, use `mockAgent.disableNetConnect()`:
+
+```js
+const mockAgent = new MockAgent();
+
+setGlobalDispatcher(mockAgent);
+mockAgent.disableNetConnect()
+
+// Provide the base url to the request
+const mockPool = mockAgent.get('http://localhost:3000');
+
+mockPool.intercept({
+ path: '/bank-transfer',
+ method: 'POST',
+}).reply(200, {
+ message: 'transaction processed'
+})
+
+const badRequest = await bankTransfer('1234567890', '100')
+// Will throw an error
+// MockNotMatchedError: Mock dispatch not matched for path '/bank-transfer':
+// subsequent request to origin http://localhost:3000 was not allowed (net.connect disabled)
+```
+
+## Reply with data based on request
+
+If the mocked response needs to be dynamically derived from the request parameters, you can provide a function instead of an object to `reply`:
+
+```js
+mockPool.intercept({
+ path: '/bank-transfer',
+ method: 'POST',
+ headers: {
+ 'X-TOKEN-SECRET': 'SuperSecretToken',
+ },
+ body: JSON.stringify({
+ recipient: '1234567890',
+ amount: '100'
+ })
+}).reply(200, (opts) => {
+ // do something with opts
+
+ return { message: 'transaction processed' }
+})
+```
+
+in this case opts will be
+
+```
+{
+ method: 'POST',
+ headers: { 'X-TOKEN-SECRET': 'SuperSecretToken' },
+ body: '{"recipient":"1234567890","amount":"100"}',
+ origin: 'http://localhost:3000',
+ path: '/bank-transfer'
+}
+```
diff --git a/includes/external/discord/node_modules/undici/docs/best-practices/proxy.md b/includes/external/discord/node_modules/undici/docs/best-practices/proxy.md
new file mode 100644
index 0000000..bf10295
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/docs/best-practices/proxy.md
@@ -0,0 +1,127 @@
+# Connecting through a proxy
+
+Connecting through a proxy is possible by:
+
+- Using [AgentProxy](../api/ProxyAgent.md).
+- Configuring `Client` or `Pool` constructor.
+
+The proxy url should be passed to the `Client` or `Pool` constructor, while the upstream server url
+should be added to every request call in the `path`.
+For instance, if you need to send a request to the `/hello` route of your upstream server,
+the `path` should be `path: 'http://upstream.server:port/hello?foo=bar'`.
+
+If you proxy requires basic authentication, you can send it via the `proxy-authorization` header.
+
+### Connect without authentication
+
+```js
+import { Client } from 'undici'
+import { createServer } from 'http'
+import proxy from 'proxy'
+
+const server = await buildServer()
+const proxyServer = await buildProxy()
+
+const serverUrl = `http://localhost:${server.address().port}`
+const proxyUrl = `http://localhost:${proxyServer.address().port}`
+
+server.on('request', (req, res) => {
+ console.log(req.url) // '/hello?foo=bar'
+ res.setHeader('content-type', 'application/json')
+ res.end(JSON.stringify({ hello: 'world' }))
+})
+
+const client = new Client(proxyUrl)
+
+const response = await client.request({
+ method: 'GET',
+ path: serverUrl + '/hello?foo=bar'
+})
+
+response.body.setEncoding('utf8')
+let data = ''
+for await (const chunk of response.body) {
+ data += chunk
+}
+console.log(response.statusCode) // 200
+console.log(JSON.parse(data)) // { hello: 'world' }
+
+server.close()
+proxyServer.close()
+client.close()
+
+function buildServer () {
+ return new Promise((resolve, reject) => {
+ const server = createServer()
+ server.listen(0, () => resolve(server))
+ })
+}
+
+function buildProxy () {
+ return new Promise((resolve, reject) => {
+ const server = proxy(createServer())
+ server.listen(0, () => resolve(server))
+ })
+}
+```
+
+### Connect with authentication
+
+```js
+import { Client } from 'undici'
+import { createServer } from 'http'
+import proxy from 'proxy'
+
+const server = await buildServer()
+const proxyServer = await buildProxy()
+
+const serverUrl = `http://localhost:${server.address().port}`
+const proxyUrl = `http://localhost:${proxyServer.address().port}`
+
+proxyServer.authenticate = function (req, fn) {
+ fn(null, req.headers['proxy-authorization'] === `Basic ${Buffer.from('user:pass').toString('base64')}`)
+}
+
+server.on('request', (req, res) => {
+ console.log(req.url) // '/hello?foo=bar'
+ res.setHeader('content-type', 'application/json')
+ res.end(JSON.stringify({ hello: 'world' }))
+})
+
+const client = new Client(proxyUrl)
+
+const response = await client.request({
+ method: 'GET',
+ path: serverUrl + '/hello?foo=bar',
+ headers: {
+ 'proxy-authorization': `Basic ${Buffer.from('user:pass').toString('base64')}`
+ }
+})
+
+response.body.setEncoding('utf8')
+let data = ''
+for await (const chunk of response.body) {
+ data += chunk
+}
+console.log(response.statusCode) // 200
+console.log(JSON.parse(data)) // { hello: 'world' }
+
+server.close()
+proxyServer.close()
+client.close()
+
+function buildServer () {
+ return new Promise((resolve, reject) => {
+ const server = createServer()
+ server.listen(0, () => resolve(server))
+ })
+}
+
+function buildProxy () {
+ return new Promise((resolve, reject) => {
+ const server = proxy(createServer())
+ server.listen(0, () => resolve(server))
+ })
+}
+```
+
diff --git a/includes/external/discord/node_modules/undici/docs/best-practices/writing-tests.md b/includes/external/discord/node_modules/undici/docs/best-practices/writing-tests.md
new file mode 100644
index 0000000..57549de
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/docs/best-practices/writing-tests.md
@@ -0,0 +1,20 @@
+# Writing tests
+
+Undici is tuned for a production use case and its default will keep
+a socket open for a few seconds after an HTTP request is completed to
+remove the overhead of opening up a new socket. These settings that makes
+Undici shine in production are not a good fit for using Undici in automated
+tests, as it will result in longer execution times.
+
+The following are good defaults that will keep the socket open for only 10ms:
+
+```js
+import { request, setGlobalDispatcher, Agent } from 'undici'
+
+const agent = new Agent({
+ keepAliveTimeout: 10, // milliseconds
+ keepAliveMaxTimeout: 10 // milliseconds
+})
+
+setGlobalDispatcher(agent)
+```
diff --git a/includes/external/discord/node_modules/undici/index.d.ts b/includes/external/discord/node_modules/undici/index.d.ts
new file mode 100644
index 0000000..d67de97
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/index.d.ts
@@ -0,0 +1,55 @@
+import Dispatcher from'./types/dispatcher'
+import { setGlobalDispatcher, getGlobalDispatcher } from './types/global-dispatcher'
+import { setGlobalOrigin, getGlobalOrigin } from './types/global-origin'
+import Pool from'./types/pool'
+import { RedirectHandler, DecoratorHandler } from './types/handlers'
+
+import BalancedPool from './types/balanced-pool'
+import Client from'./types/client'
+import buildConnector from'./types/connector'
+import errors from'./types/errors'
+import Agent from'./types/agent'
+import MockClient from'./types/mock-client'
+import MockPool from'./types/mock-pool'
+import MockAgent from'./types/mock-agent'
+import mockErrors from'./types/mock-errors'
+import ProxyAgent from'./types/proxy-agent'
+import { request, pipeline, stream, connect, upgrade } from './types/api'
+
+export * from './types/cookies'
+export * from './types/fetch'
+export * from './types/file'
+export * from './types/filereader'
+export * from './types/formdata'
+export * from './types/diagnostics-channel'
+export * from './types/websocket'
+export * from './types/content-type'
+export { Interceptable } from './types/mock-interceptor'
+
+export { Dispatcher, BalancedPool, Pool, Client, buildConnector, errors, Agent, request, stream, pipeline, connect, upgrade, setGlobalDispatcher, getGlobalDispatcher, setGlobalOrigin, getGlobalOrigin, MockClient, MockPool, MockAgent, mockErrors, ProxyAgent, RedirectHandler, DecoratorHandler }
+export default Undici
+
+declare namespace Undici {
+ var Dispatcher: typeof import('./types/dispatcher').default
+ var Pool: typeof import('./types/pool').default;
+ var RedirectHandler: typeof import ('./types/handlers').RedirectHandler
+ var DecoratorHandler: typeof import ('./types/handlers').DecoratorHandler
+ var createRedirectInterceptor: typeof import ('./types/interceptors').createRedirectInterceptor
+ var BalancedPool: typeof import('./types/balanced-pool').default;
+ var Client: typeof import('./types/client').default;
+ var buildConnector: typeof import('./types/connector').default;
+ var errors: typeof import('./types/errors').default;
+ var Agent: typeof import('./types/agent').default;
+ var setGlobalDispatcher: typeof import('./types/global-dispatcher').setGlobalDispatcher;
+ var getGlobalDispatcher: typeof import('./types/global-dispatcher').getGlobalDispatcher;
+ var request: typeof import('./types/api').request;
+ var stream: typeof import('./types/api').stream;
+ var pipeline: typeof import('./types/api').pipeline;
+ var connect: typeof import('./types/api').connect;
+ var upgrade: typeof import('./types/api').upgrade;
+ var MockClient: typeof import('./types/mock-client').default;
+ var MockPool: typeof import('./types/mock-pool').default;
+ var MockAgent: typeof import('./types/mock-agent').default;
+ var mockErrors: typeof import('./types/mock-errors').default;
+ var fetch: typeof import('./types/fetch').fetch;
+}
diff --git a/includes/external/discord/node_modules/undici/lib/fetch/LICENSE b/includes/external/discord/node_modules/undici/lib/fetch/LICENSE
new file mode 100644
index 0000000..2943500
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/lib/fetch/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2020 Ethan Arrowood
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/includes/external/discord/node_modules/undici/lib/llhttp/constants.d.ts b/includes/external/discord/node_modules/undici/lib/llhttp/constants.d.ts
new file mode 100644
index 0000000..b75ab1b
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/lib/llhttp/constants.d.ts
@@ -0,0 +1,199 @@
+import { IEnumMap } from './utils';
+export declare type HTTPMode = 'loose' | 'strict';
+export declare enum ERROR {
+ OK = 0,
+ INTERNAL = 1,
+ STRICT = 2,
+ LF_EXPECTED = 3,
+ UNEXPECTED_CONTENT_LENGTH = 4,
+ CLOSED_CONNECTION = 5,
+ INVALID_METHOD = 6,
+ INVALID_URL = 7,
+ INVALID_CONSTANT = 8,
+ INVALID_VERSION = 9,
+ INVALID_HEADER_TOKEN = 10,
+ INVALID_CONTENT_LENGTH = 11,
+ INVALID_CHUNK_SIZE = 12,
+ INVALID_STATUS = 13,
+ INVALID_EOF_STATE = 14,
+ INVALID_TRANSFER_ENCODING = 15,
+ CB_MESSAGE_BEGIN = 16,
+ CB_HEADERS_COMPLETE = 17,
+ CB_MESSAGE_COMPLETE = 18,
+ CB_CHUNK_HEADER = 19,
+ CB_CHUNK_COMPLETE = 20,
+ PAUSED = 21,
+ PAUSED_UPGRADE = 22,
+ PAUSED_H2_UPGRADE = 23,
+ USER = 24
+}
+export declare enum TYPE {
+ BOTH = 0,
+ REQUEST = 1,
+ RESPONSE = 2
+}
+export declare enum FLAGS {
+ CONNECTION_KEEP_ALIVE = 1,
+ CONNECTION_CLOSE = 2,
+ CONNECTION_UPGRADE = 4,
+ CHUNKED = 8,
+ UPGRADE = 16,
+ CONTENT_LENGTH = 32,
+ SKIPBODY = 64,
+ TRAILING = 128,
+ TRANSFER_ENCODING = 512
+}
+export declare enum LENIENT_FLAGS {
+ HEADERS = 1,
+ CHUNKED_LENGTH = 2,
+ KEEP_ALIVE = 4
+}
+export declare enum METHODS {
+ DELETE = 0,
+ GET = 1,
+ HEAD = 2,
+ POST = 3,
+ PUT = 4,
+ CONNECT = 5,
+ OPTIONS = 6,
+ TRACE = 7,
+ COPY = 8,
+ LOCK = 9,
+ MKCOL = 10,
+ MOVE = 11,
+ PROPFIND = 12,
+ PROPPATCH = 13,
+ SEARCH = 14,
+ UNLOCK = 15,
+ BIND = 16,
+ REBIND = 17,
+ UNBIND = 18,
+ ACL = 19,
+ REPORT = 20,
+ MKACTIVITY = 21,
+ CHECKOUT = 22,
+ MERGE = 23,
+ 'M-SEARCH' = 24,
+ NOTIFY = 25,
+ SUBSCRIBE = 26,
+ UNSUBSCRIBE = 27,
+ PATCH = 28,
+ PURGE = 29,
+ MKCALENDAR = 30,
+ LINK = 31,
+ UNLINK = 32,
+ SOURCE = 33,
+ PRI = 34,
+ DESCRIBE = 35,
+ ANNOUNCE = 36,
+ SETUP = 37,
+ PLAY = 38,
+ PAUSE = 39,
+ TEARDOWN = 40,
+ GET_PARAMETER = 41,
+ SET_PARAMETER = 42,
+ REDIRECT = 43,
+ RECORD = 44,
+ FLUSH = 45
+}
+export declare const METHODS_HTTP: METHODS[];
+export declare const METHODS_ICE: METHODS[];
+export declare const METHODS_RTSP: METHODS[];
+export declare const METHOD_MAP: IEnumMap;
+export declare const H_METHOD_MAP: IEnumMap;
+export declare enum FINISH {
+ SAFE = 0,
+ SAFE_WITH_CB = 1,
+ UNSAFE = 2
+}
+export declare type CharList = Array<string | number>;
+export declare const ALPHA: CharList;
+export declare const NUM_MAP: {
+ 0: number;
+ 1: number;
+ 2: number;
+ 3: number;
+ 4: number;
+ 5: number;
+ 6: number;
+ 7: number;
+ 8: number;
+ 9: number;
+};
+export declare const HEX_MAP: {
+ 0: number;
+ 1: number;
+ 2: number;
+ 3: number;
+ 4: number;
+ 5: number;
+ 6: number;
+ 7: number;
+ 8: number;
+ 9: number;
+ A: number;
+ B: number;
+ C: number;
+ D: number;
+ E: number;
+ F: number;
+ a: number;
+ b: number;
+ c: number;
+ d: number;
+ e: number;
+ f: number;
+};
+export declare const NUM: CharList;
+export declare const ALPHANUM: CharList;
+export declare const MARK: CharList;
+export declare const USERINFO_CHARS: CharList;
+export declare const STRICT_URL_CHAR: CharList;
+export declare const URL_CHAR: CharList;
+export declare const HEX: CharList;
+export declare const STRICT_TOKEN: CharList;
+export declare const TOKEN: CharList;
+export declare const HEADER_CHARS: CharList;
+export declare const CONNECTION_TOKEN_CHARS: CharList;
+export declare const MAJOR: {
+ 0: number;
+ 1: number;
+ 2: number;
+ 3: number;
+ 4: number;
+ 5: number;
+ 6: number;
+ 7: number;
+ 8: number;
+ 9: number;
+};
+export declare const MINOR: {
+ 0: number;
+ 1: number;
+ 2: number;
+ 3: number;
+ 4: number;
+ 5: number;
+ 6: number;
+ 7: number;
+ 8: number;
+ 9: number;
+};
+export declare enum HEADER_STATE {
+ GENERAL = 0,
+ CONNECTION = 1,
+ CONTENT_LENGTH = 2,
+ TRANSFER_ENCODING = 3,
+ UPGRADE = 4,
+ CONNECTION_KEEP_ALIVE = 5,
+ CONNECTION_CLOSE = 6,
+ CONNECTION_UPGRADE = 7,
+ TRANSFER_ENCODING_CHUNKED = 8
+}
+export declare const SPECIAL_HEADERS: {
+ connection: HEADER_STATE;
+ 'content-length': HEADER_STATE;
+ 'proxy-connection': HEADER_STATE;
+ 'transfer-encoding': HEADER_STATE;
+ upgrade: HEADER_STATE;
+};
diff --git a/includes/external/discord/node_modules/undici/lib/llhttp/llhttp.wasm b/includes/external/discord/node_modules/undici/lib/llhttp/llhttp.wasm
new file mode 100755
index 0000000..633d00a
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/lib/llhttp/llhttp.wasm
Binary files differ
diff --git a/includes/external/discord/node_modules/undici/lib/llhttp/llhttp_simd.wasm b/includes/external/discord/node_modules/undici/lib/llhttp/llhttp_simd.wasm
new file mode 100755
index 0000000..93cdf56
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/lib/llhttp/llhttp_simd.wasm
Binary files differ
diff --git a/includes/external/discord/node_modules/undici/lib/llhttp/utils.d.ts b/includes/external/discord/node_modules/undici/lib/llhttp/utils.d.ts
new file mode 100644
index 0000000..15497f3
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/lib/llhttp/utils.d.ts
@@ -0,0 +1,4 @@
+export interface IEnumMap {
+ [key: string]: number;
+}
+export declare function enumToMap(obj: any): IEnumMap;
diff --git a/includes/external/discord/node_modules/undici/package.json b/includes/external/discord/node_modules/undici/package.json
new file mode 100644
index 0000000..39be173
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/package.json
@@ -0,0 +1,136 @@
+{
+ "name": "undici",
+ "version": "5.21.0",
+ "description": "An HTTP/1.1 client, written from scratch for Node.js",
+ "homepage": "https://undici.nodejs.org",
+ "bugs": {
+ "url": "https://github.com/nodejs/undici/issues"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/nodejs/undici.git"
+ },
+ "license": "MIT",
+ "author": "Matteo Collina <hello@matteocollina.com>",
+ "contributors": [
+ {
+ "name": "Robert Nagy",
+ "url": "https://github.com/ronag",
+ "author": true
+ }
+ ],
+ "keywords": [
+ "fetch",
+ "http",
+ "https",
+ "promise",
+ "request",
+ "curl",
+ "wget",
+ "xhr",
+ "whatwg"
+ ],
+ "main": "index.js",
+ "types": "index.d.ts",
+ "files": [
+ "*.d.ts",
+ "index.js",
+ "index-fetch.js",
+ "lib",
+ "types",
+ "docs"
+ ],
+ "scripts": {
+ "build:node": "npx esbuild@0.14.38 index-fetch.js --bundle --platform=node --outfile=undici-fetch.js",
+ "prebuild:wasm": "docker build -t llhttp_wasm_builder -f build/Dockerfile .",
+ "build:wasm": "node build/wasm.js --docker",
+ "lint": "standard | snazzy",
+ "lint:fix": "standard --fix | snazzy",
+ "test": "npm run test:tap && npm run test:node-fetch && npm run test:fetch && npm run test:cookies && npm run test:wpt && npm run test:websocket && npm run test:jest && tsd",
+ "test:cookies": "node scripts/verifyVersion 16 || tap test/cookie/*.js",
+ "test:node-fetch": "node scripts/verifyVersion.js 16 || mocha test/node-fetch",
+ "test:fetch": "node scripts/verifyVersion.js 16 || (npm run build:node && tap test/fetch/*.js && tap test/webidl/*.js)",
+ "test:jest": "node scripts/verifyVersion.js 14 || jest",
+ "test:tap": "tap test/*.js test/diagnostics-channel/*.js",
+ "test:tdd": "tap test/*.js test/diagnostics-channel/*.js -w",
+ "test:typescript": "tsd && tsc test/imports/undici-import.ts",
+ "test:websocket": "node scripts/verifyVersion.js 18 || tap test/websocket/*.js",
+ "test:wpt": "node scripts/verifyVersion 18 || (node test/wpt/start-fetch.mjs && node test/wpt/start-FileAPI.mjs && node test/wpt/start-mimesniff.mjs && node test/wpt/start-xhr.mjs && node --no-warnings test/wpt/start-websockets.mjs)",
+ "coverage": "nyc --reporter=text --reporter=html npm run test",
+ "coverage:ci": "nyc --reporter=lcov npm run test",
+ "bench": "PORT=3042 concurrently -k -s first npm:bench:server npm:bench:run",
+ "bench:server": "node benchmarks/server.js",
+ "prebench:run": "node benchmarks/wait.js",
+ "bench:run": "CONNECTIONS=1 node --experimental-wasm-simd benchmarks/benchmark.js; CONNECTIONS=50 node --experimental-wasm-simd benchmarks/benchmark.js",
+ "serve:website": "docsify serve .",
+ "prepare": "husky install",
+ "fuzz": "jsfuzz test/fuzzing/fuzz.js corpus"
+ },
+ "devDependencies": {
+ "@sinonjs/fake-timers": "^10.0.2",
+ "@types/node": "^18.0.3",
+ "abort-controller": "^3.0.0",
+ "atomic-sleep": "^1.0.0",
+ "chai": "^4.3.4",
+ "chai-as-promised": "^7.1.1",
+ "chai-iterator": "^3.0.2",
+ "chai-string": "^1.5.0",
+ "concurrently": "^7.1.0",
+ "cronometro": "^1.0.5",
+ "delay": "^5.0.0",
+ "dns-packet": "^5.4.0",
+ "docsify-cli": "^4.4.3",
+ "form-data": "^4.0.0",
+ "formdata-node": "^4.3.1",
+ "https-pem": "^3.0.0",
+ "husky": "^8.0.1",
+ "import-fresh": "^3.3.0",
+ "jest": "^29.0.2",
+ "jsdom": "^21.1.0",
+ "jsfuzz": "^1.0.15",
+ "mocha": "^10.0.0",
+ "p-timeout": "^3.2.0",
+ "pre-commit": "^1.2.2",
+ "proxy": "^1.0.2",
+ "proxyquire": "^2.1.3",
+ "sinon": "^15.0.0",
+ "snazzy": "^9.0.0",
+ "standard": "^17.0.0",
+ "table": "^6.8.0",
+ "tap": "^16.1.0",
+ "tsd": "^0.25.0",
+ "typescript": "^4.9.5",
+ "wait-on": "^6.0.0",
+ "ws": "^8.11.0"
+ },
+ "engines": {
+ "node": ">=12.18"
+ },
+ "standard": {
+ "env": [
+ "mocha"
+ ],
+ "ignore": [
+ "lib/llhttp/constants.js",
+ "lib/llhttp/utils.js",
+ "test/wpt/tests"
+ ]
+ },
+ "tsd": {
+ "directory": "test/types",
+ "compilerOptions": {
+ "esModuleInterop": true,
+ "lib": [
+ "esnext"
+ ]
+ }
+ },
+ "jest": {
+ "testMatch": [
+ "<rootDir>/test/jest/**"
+ ]
+ },
+ "dependencies": {
+ "busboy": "^1.6.0"
+ }
+}
diff --git a/includes/external/discord/node_modules/undici/types/agent.d.ts b/includes/external/discord/node_modules/undici/types/agent.d.ts
new file mode 100644
index 0000000..0813735
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/types/agent.d.ts
@@ -0,0 +1,31 @@
+import { URL } from 'url'
+import Pool from './pool'
+import Dispatcher from "./dispatcher";
+
+export default Agent
+
+declare class Agent extends Dispatcher{
+ constructor(opts?: Agent.Options)
+ /** `true` after `dispatcher.close()` has been called. */
+ closed: boolean;
+ /** `true` after `dispatcher.destroyed()` has been called or `dispatcher.close()` has been called and the dispatcher shutdown has completed. */
+ destroyed: boolean;
+ /** Dispatches a request. */
+ dispatch(options: Agent.DispatchOptions, handler: Dispatcher.DispatchHandlers): boolean;
+}
+
+declare namespace Agent {
+ export interface Options extends Pool.Options {
+ /** Default: `(origin, opts) => new Pool(origin, opts)`. */
+ factory?(origin: URL, opts: Object): Dispatcher;
+ /** Integer. Default: `0` */
+ maxRedirections?: number;
+
+ interceptors?: { Agent?: readonly Dispatcher.DispatchInterceptor[] } & Pool.Options["interceptors"]
+ }
+
+ export interface DispatchOptions extends Dispatcher.DispatchOptions {
+ /** Integer. */
+ maxRedirections?: number;
+ }
+}
diff --git a/includes/external/discord/node_modules/undici/types/api.d.ts b/includes/external/discord/node_modules/undici/types/api.d.ts
new file mode 100644
index 0000000..400341d
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/types/api.d.ts
@@ -0,0 +1,43 @@
+import { URL, UrlObject } from 'url'
+import { Duplex } from 'stream'
+import Dispatcher from './dispatcher'
+
+export {
+ request,
+ stream,
+ pipeline,
+ connect,
+ upgrade,
+}
+
+/** Performs an HTTP request. */
+declare function request(
+ url: string | URL | UrlObject,
+ options?: { dispatcher?: Dispatcher } & Omit<Dispatcher.RequestOptions, 'origin' | 'path' | 'method'> & Partial<Pick<Dispatcher.RequestOptions, 'method'>>,
+): Promise<Dispatcher.ResponseData>;
+
+/** A faster version of `request`. */
+declare function stream(
+ url: string | URL | UrlObject,
+ options: { dispatcher?: Dispatcher } & Omit<Dispatcher.RequestOptions, 'origin' | 'path'>,
+ factory: Dispatcher.StreamFactory
+): Promise<Dispatcher.StreamData>;
+
+/** For easy use with `stream.pipeline`. */
+declare function pipeline(
+ url: string | URL | UrlObject,
+ options: { dispatcher?: Dispatcher } & Omit<Dispatcher.PipelineOptions, 'origin' | 'path'>,
+ handler: Dispatcher.PipelineHandler
+): Duplex;
+
+/** Starts two-way communications with the requested resource. */
+declare function connect(
+ url: string | URL | UrlObject,
+ options?: { dispatcher?: Dispatcher } & Omit<Dispatcher.ConnectOptions, 'origin' | 'path'>
+): Promise<Dispatcher.ConnectData>;
+
+/** Upgrade to a different protocol. */
+declare function upgrade(
+ url: string | URL | UrlObject,
+ options?: { dispatcher?: Dispatcher } & Omit<Dispatcher.UpgradeOptions, 'origin' | 'path'>
+): Promise<Dispatcher.UpgradeData>;
diff --git a/includes/external/discord/node_modules/undici/types/balanced-pool.d.ts b/includes/external/discord/node_modules/undici/types/balanced-pool.d.ts
new file mode 100644
index 0000000..d1e9375
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/types/balanced-pool.d.ts
@@ -0,0 +1,18 @@
+import Pool from './pool'
+import Dispatcher from './dispatcher'
+import { URL } from 'url'
+
+export default BalancedPool
+
+declare class BalancedPool extends Dispatcher {
+ constructor(url: string | string[] | URL | URL[], options?: Pool.Options);
+
+ addUpstream(upstream: string | URL): BalancedPool;
+ removeUpstream(upstream: string | URL): BalancedPool;
+ upstreams: Array<string>;
+
+ /** `true` after `pool.close()` has been called. */
+ closed: boolean;
+ /** `true` after `pool.destroyed()` has been called or `pool.close()` has been called and the pool shutdown has completed. */
+ destroyed: boolean;
+}
diff --git a/includes/external/discord/node_modules/undici/types/client.d.ts b/includes/external/discord/node_modules/undici/types/client.d.ts
new file mode 100644
index 0000000..56074a1
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/types/client.d.ts
@@ -0,0 +1,88 @@
+import { URL } from 'url'
+import { TlsOptions } from 'tls'
+import Dispatcher from './dispatcher'
+import DispatchInterceptor from './dispatcher'
+import buildConnector from "./connector";
+
+/**
+ * A basic HTTP/1.1 client, mapped on top a single TCP/TLS connection. Pipelining is disabled by default.
+ */
+export class Client extends Dispatcher {
+ constructor(url: string | URL, options?: Client.Options);
+ /** Property to get and set the pipelining factor. */
+ pipelining: number;
+ /** `true` after `client.close()` has been called. */
+ closed: boolean;
+ /** `true` after `client.destroyed()` has been called or `client.close()` has been called and the client shutdown has completed. */
+ destroyed: boolean;
+}
+
+export declare namespace Client {
+ export interface OptionsInterceptors {
+ Client: readonly DispatchInterceptor[];
+ }
+ export interface Options {
+ /** TODO */
+ interceptors?: OptionsInterceptors;
+ /** The maximum length of request headers in bytes. Default: `16384` (16KiB). */
+ maxHeaderSize?: number;
+ /** The amount of time the parser will wait to receive the complete HTTP headers (Node 14 and above only). Default: `300e3` milliseconds (300s). */
+ headersTimeout?: number;
+ /** @deprecated unsupported socketTimeout, use headersTimeout & bodyTimeout instead */
+ socketTimeout?: never;
+ /** @deprecated unsupported requestTimeout, use headersTimeout & bodyTimeout instead */
+ requestTimeout?: never;
+ /** TODO */
+ connectTimeout?: number;
+ /** The timeout after which a request will time out, in milliseconds. Monitors time between receiving body data. Use `0` to disable it entirely. Default: `300e3` milliseconds (300s). */
+ bodyTimeout?: number;
+ /** @deprecated unsupported idleTimeout, use keepAliveTimeout instead */
+ idleTimeout?: never;
+ /** @deprecated unsupported keepAlive, use pipelining=0 instead */
+ keepAlive?: never;
+ /** the timeout after which a socket without active requests will time out. Monitors time between activity on a connected socket. This value may be overridden by *keep-alive* hints from the server. Default: `4e3` milliseconds (4s). */
+ keepAliveTimeout?: number;
+ /** @deprecated unsupported maxKeepAliveTimeout, use keepAliveMaxTimeout instead */
+ maxKeepAliveTimeout?: never;
+ /** the maximum allowed `idleTimeout` when overridden by *keep-alive* hints from the server. Default: `600e3` milliseconds (10min). */
+ keepAliveMaxTimeout?: number;
+ /** A number subtracted from server *keep-alive* hints when overriding `idleTimeout` to account for timing inaccuracies caused by e.g. transport latency. Default: `1e3` milliseconds (1s). */
+ keepAliveTimeoutThreshold?: number;
+ /** TODO */
+ socketPath?: string;
+ /** The amount of concurrent requests to be sent over the single TCP/TLS connection according to [RFC7230](https://tools.ietf.org/html/rfc7230#section-6.3.2). Default: `1`. */
+ pipelining?: number;
+ /** @deprecated use the connect option instead */
+ tls?: never;
+ /** If `true`, an error is thrown when the request content-length header doesn't match the length of the request body. Default: `true`. */
+ strictContentLength?: boolean;
+ /** TODO */
+ maxCachedSessions?: number;
+ /** TODO */
+ maxRedirections?: number;
+ /** TODO */
+ connect?: buildConnector.BuildOptions | buildConnector.connector;
+ /** TODO */
+ maxRequestsPerClient?: number;
+ /** TODO */
+ localAddress?: string;
+ /** Max response body size in bytes, -1 is disabled */
+ maxResponseSize?: number;
+ /** Enables a family autodetection algorithm that loosely implements section 5 of RFC 8305. */
+ autoSelectFamily?: boolean;
+ /** The amount of time in milliseconds to wait for a connection attempt to finish before trying the next address when using the `autoSelectFamily` option. */
+ autoSelectFamilyAttemptTimeout?: number;
+ }
+ export interface SocketInfo {
+ localAddress?: string
+ localPort?: number
+ remoteAddress?: string
+ remotePort?: number
+ remoteFamily?: string
+ timeout?: number
+ bytesWritten?: number
+ bytesRead?: number
+ }
+}
+
+export default Client;
diff --git a/includes/external/discord/node_modules/undici/types/connector.d.ts b/includes/external/discord/node_modules/undici/types/connector.d.ts
new file mode 100644
index 0000000..d53d795
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/types/connector.d.ts
@@ -0,0 +1,39 @@
+import { TLSSocket, ConnectionOptions } from 'tls'
+import { IpcNetConnectOpts, Socket, TcpNetConnectOpts } from 'net'
+
+export default buildConnector
+declare function buildConnector (options?: buildConnector.BuildOptions): buildConnector.connector
+
+declare namespace buildConnector {
+ export type BuildOptions = (ConnectionOptions | TcpNetConnectOpts | IpcNetConnectOpts) & {
+ maxCachedSessions?: number | null;
+ socketPath?: string | null;
+ timeout?: number | null;
+ port?: number;
+ keepAlive?: boolean | null;
+ keepAliveInitialDelay?: number | null;
+ }
+
+ export interface Options {
+ hostname: string
+ host?: string
+ protocol: string
+ port: string
+ servername?: string
+ localAddress?: string | null
+ httpSocket?: Socket
+ }
+
+ export type Callback = (...args: CallbackArgs) => void
+ type CallbackArgs = [null, Socket | TLSSocket] | [Error, null]
+
+ export type connector = connectorAsync | connectorSync
+
+ interface connectorSync {
+ (options: buildConnector.Options): Socket | TLSSocket
+ }
+
+ interface connectorAsync {
+ (options: buildConnector.Options, callback: buildConnector.Callback): void
+ }
+}
diff --git a/includes/external/discord/node_modules/undici/types/content-type.d.ts b/includes/external/discord/node_modules/undici/types/content-type.d.ts
new file mode 100644
index 0000000..f2a87f1
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/types/content-type.d.ts
@@ -0,0 +1,21 @@
+/// <reference types="node" />
+
+interface MIMEType {
+ type: string
+ subtype: string
+ parameters: Map<string, string>
+ essence: string
+}
+
+/**
+ * Parse a string to a {@link MIMEType} object. Returns `failure` if the string
+ * couldn't be parsed.
+ * @see https://mimesniff.spec.whatwg.org/#parse-a-mime-type
+ */
+export function parseMIMEType (input: string): 'failure' | MIMEType
+
+/**
+ * Convert a MIMEType object to a string.
+ * @see https://mimesniff.spec.whatwg.org/#serialize-a-mime-type
+ */
+export function serializeAMimeType (mimeType: MIMEType): string
diff --git a/includes/external/discord/node_modules/undici/types/cookies.d.ts b/includes/external/discord/node_modules/undici/types/cookies.d.ts
new file mode 100644
index 0000000..aa38cae
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/types/cookies.d.ts
@@ -0,0 +1,28 @@
+/// <reference types="node" />
+
+import type { Headers } from './fetch'
+
+export interface Cookie {
+ name: string
+ value: string
+ expires?: Date | number
+ maxAge?: number
+ domain?: string
+ path?: string
+ secure?: boolean
+ httpOnly?: boolean
+ sameSite?: 'Strict' | 'Lax' | 'None'
+ unparsed?: string[]
+}
+
+export function deleteCookie (
+ headers: Headers,
+ name: string,
+ attributes?: { name?: string, domain?: string }
+): void
+
+export function getCookies (headers: Headers): Record<string, string>
+
+export function getSetCookies (headers: Headers): Cookie[]
+
+export function setCookie (headers: Headers, cookie: Cookie): void
diff --git a/includes/external/discord/node_modules/undici/types/diagnostics-channel.d.ts b/includes/external/discord/node_modules/undici/types/diagnostics-channel.d.ts
new file mode 100644
index 0000000..85d4482
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/types/diagnostics-channel.d.ts
@@ -0,0 +1,67 @@
+import { Socket } from "net";
+import { URL } from "url";
+import Connector from "./connector";
+import Dispatcher from "./dispatcher";
+
+declare namespace DiagnosticsChannel {
+ interface Request {
+ origin?: string | URL;
+ completed: boolean;
+ method?: Dispatcher.HttpMethod;
+ path: string;
+ headers: string;
+ addHeader(key: string, value: string): Request;
+ }
+ interface Response {
+ statusCode: number;
+ statusText: string;
+ headers: Array<Buffer>;
+ }
+ type Error = unknown;
+ interface ConnectParams {
+ host: URL["host"];
+ hostname: URL["hostname"];
+ protocol: URL["protocol"];
+ port: URL["port"];
+ servername: string | null;
+ }
+ type Connector = Connector.connector;
+ export interface RequestCreateMessage {
+ request: Request;
+ }
+ export interface RequestBodySentMessage {
+ request: Request;
+ }
+ export interface RequestHeadersMessage {
+ request: Request;
+ response: Response;
+ }
+ export interface RequestTrailersMessage {
+ request: Request;
+ trailers: Array<Buffer>;
+ }
+ export interface RequestErrorMessage {
+ request: Request;
+ error: Error;
+ }
+ export interface ClientSendHeadersMessage {
+ request: Request;
+ headers: string;
+ socket: Socket;
+ }
+ export interface ClientBeforeConnectMessage {
+ connectParams: ConnectParams;
+ connector: Connector;
+ }
+ export interface ClientConnectedMessage {
+ socket: Socket;
+ connectParams: ConnectParams;
+ connector: Connector;
+ }
+ export interface ClientConnectErrorMessage {
+ error: Error;
+ socket: Socket;
+ connectParams: ConnectParams;
+ connector: Connector;
+ }
+}
diff --git a/includes/external/discord/node_modules/undici/types/dispatcher.d.ts b/includes/external/discord/node_modules/undici/types/dispatcher.d.ts
new file mode 100644
index 0000000..c6b0c88
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/types/dispatcher.d.ts
@@ -0,0 +1,237 @@
+import { URL } from 'url'
+import { Duplex, Readable, Writable } from 'stream'
+import { EventEmitter } from 'events'
+import { Blob } from 'buffer'
+import { IncomingHttpHeaders } from './header'
+import BodyReadable from './readable'
+import { FormData } from './formdata'
+import Errors from './errors'
+
+type AbortSignal = unknown;
+
+export default Dispatcher
+
+/** Dispatcher is the core API used to dispatch requests. */
+declare class Dispatcher extends EventEmitter {
+ /** Dispatches a request. This API is expected to evolve through semver-major versions and is less stable than the preceding higher level APIs. It is primarily intended for library developers who implement higher level APIs on top of this. */
+ dispatch(options: Dispatcher.DispatchOptions, handler: Dispatcher.DispatchHandlers): boolean;
+ /** Starts two-way communications with the requested resource. */
+ connect(options: Dispatcher.ConnectOptions): Promise<Dispatcher.ConnectData>;
+ connect(options: Dispatcher.ConnectOptions, callback: (err: Error | null, data: Dispatcher.ConnectData) => void): void;
+ /** Performs an HTTP request. */
+ request(options: Dispatcher.RequestOptions): Promise<Dispatcher.ResponseData>;
+ request(options: Dispatcher.RequestOptions, callback: (err: Error | null, data: Dispatcher.ResponseData) => void): void;
+ /** For easy use with `stream.pipeline`. */
+ pipeline(options: Dispatcher.PipelineOptions, handler: Dispatcher.PipelineHandler): Duplex;
+ /** A faster version of `Dispatcher.request`. */
+ stream(options: Dispatcher.RequestOptions, factory: Dispatcher.StreamFactory): Promise<Dispatcher.StreamData>;
+ stream(options: Dispatcher.RequestOptions, factory: Dispatcher.StreamFactory, callback: (err: Error | null, data: Dispatcher.StreamData) => void): void;
+ /** Upgrade to a different protocol. */
+ upgrade(options: Dispatcher.UpgradeOptions): Promise<Dispatcher.UpgradeData>;
+ upgrade(options: Dispatcher.UpgradeOptions, callback: (err: Error | null, data: Dispatcher.UpgradeData) => void): void;
+ /** Closes the client and gracefully waits for enqueued requests to complete before invoking the callback (or returning a promise if no callback is provided). */
+ close(): Promise<void>;
+ close(callback: () => void): void;
+ /** Destroy the client abruptly with the given err. All the pending and running requests will be asynchronously aborted and error. Waits until socket is closed before invoking the callback (or returning a promise if no callback is provided). Since this operation is asynchronously dispatched there might still be some progress on dispatched requests. */
+ destroy(): Promise<void>;
+ destroy(err: Error | null): Promise<void>;
+ destroy(callback: () => void): void;
+ destroy(err: Error | null, callback: () => void): void;
+
+ on(eventName: 'connect', callback: (origin: URL, targets: readonly Dispatcher[]) => void): this;
+ on(eventName: 'disconnect', callback: (origin: URL, targets: readonly Dispatcher[], error: Errors.UndiciError) => void): this;
+ on(eventName: 'connectionError', callback: (origin: URL, targets: readonly Dispatcher[], error: Errors.UndiciError) => void): this;
+ on(eventName: 'drain', callback: (origin: URL) => void): this;
+
+
+ once(eventName: 'connect', callback: (origin: URL, targets: readonly Dispatcher[]) => void): this;
+ once(eventName: 'disconnect', callback: (origin: URL, targets: readonly Dispatcher[], error: Errors.UndiciError) => void): this;
+ once(eventName: 'connectionError', callback: (origin: URL, targets: readonly Dispatcher[], error: Errors.UndiciError) => void): this;
+ once(eventName: 'drain', callback: (origin: URL) => void): this;
+
+
+ off(eventName: 'connect', callback: (origin: URL, targets: readonly Dispatcher[]) => void): this;
+ off(eventName: 'disconnect', callback: (origin: URL, targets: readonly Dispatcher[], error: Errors.UndiciError) => void): this;
+ off(eventName: 'connectionError', callback: (origin: URL, targets: readonly Dispatcher[], error: Errors.UndiciError) => void): this;
+ off(eventName: 'drain', callback: (origin: URL) => void): this;
+
+
+ addListener(eventName: 'connect', callback: (origin: URL, targets: readonly Dispatcher[]) => void): this;
+ addListener(eventName: 'disconnect', callback: (origin: URL, targets: readonly Dispatcher[], error: Errors.UndiciError) => void): this;
+ addListener(eventName: 'connectionError', callback: (origin: URL, targets: readonly Dispatcher[], error: Errors.UndiciError) => void): this;
+ addListener(eventName: 'drain', callback: (origin: URL) => void): this;
+
+ removeListener(eventName: 'connect', callback: (origin: URL, targets: readonly Dispatcher[]) => void): this;
+ removeListener(eventName: 'disconnect', callback: (origin: URL, targets: readonly Dispatcher[], error: Errors.UndiciError) => void): this;
+ removeListener(eventName: 'connectionError', callback: (origin: URL, targets: readonly Dispatcher[], error: Errors.UndiciError) => void): this;
+ removeListener(eventName: 'drain', callback: (origin: URL) => void): this;
+
+ prependListener(eventName: 'connect', callback: (origin: URL, targets: readonly Dispatcher[]) => void): this;
+ prependListener(eventName: 'disconnect', callback: (origin: URL, targets: readonly Dispatcher[], error: Errors.UndiciError) => void): this;
+ prependListener(eventName: 'connectionError', callback: (origin: URL, targets: readonly Dispatcher[], error: Errors.UndiciError) => void): this;
+ prependListener(eventName: 'drain', callback: (origin: URL) => void): this;
+
+ prependOnceListener(eventName: 'connect', callback: (origin: URL, targets: readonly Dispatcher[]) => void): this;
+ prependOnceListener(eventName: 'disconnect', callback: (origin: URL, targets: readonly Dispatcher[], error: Errors.UndiciError) => void): this;
+ prependOnceListener(eventName: 'connectionError', callback: (origin: URL, targets: readonly Dispatcher[], error: Errors.UndiciError) => void): this;
+ prependOnceListener(eventName: 'drain', callback: (origin: URL) => void): this;
+
+ listeners(eventName: 'connect'): ((origin: URL, targets: readonly Dispatcher[]) => void)[]
+ listeners(eventName: 'disconnect'): ((origin: URL, targets: readonly Dispatcher[], error: Errors.UndiciError) => void)[];
+ listeners(eventName: 'connectionError'): ((origin: URL, targets: readonly Dispatcher[], error: Errors.UndiciError) => void)[];
+ listeners(eventName: 'drain'): ((origin: URL) => void)[];
+
+ rawListeners(eventName: 'connect'): ((origin: URL, targets: readonly Dispatcher[]) => void)[]
+ rawListeners(eventName: 'disconnect'): ((origin: URL, targets: readonly Dispatcher[], error: Errors.UndiciError) => void)[];
+ rawListeners(eventName: 'connectionError'): ((origin: URL, targets: readonly Dispatcher[], error: Errors.UndiciError) => void)[];
+ rawListeners(eventName: 'drain'): ((origin: URL) => void)[];
+
+ emit(eventName: 'connect', origin: URL, targets: readonly Dispatcher[]): boolean;
+ emit(eventName: 'disconnect', origin: URL, targets: readonly Dispatcher[], error: Errors.UndiciError): boolean;
+ emit(eventName: 'connectionError', origin: URL, targets: readonly Dispatcher[], error: Errors.UndiciError): boolean;
+ emit(eventName: 'drain', origin: URL): boolean;
+}
+
+declare namespace Dispatcher {
+ export interface DispatchOptions {
+ origin?: string | URL;
+ path: string;
+ method: HttpMethod;
+ /** Default: `null` */
+ body?: string | Buffer | Uint8Array | Readable | null | FormData;
+ /** Default: `null` */
+ headers?: IncomingHttpHeaders | string[] | null;
+ /** Query string params to be embedded in the request URL. Default: `null` */
+ query?: Record<string, any>;
+ /** Whether the requests can be safely retried or not. If `false` the request won't be sent until all preceding requests in the pipeline have completed. Default: `true` if `method` is `HEAD` or `GET`. */
+ idempotent?: boolean;
+ /** Whether the response is expected to take a long time and would end up blocking the pipeline. When this is set to `true` further pipelining will be avoided on the same connection until headers have been received. */
+ blocking?: boolean;
+ /** Upgrade the request. Should be used to specify the kind of upgrade i.e. `'Websocket'`. Default: `method === 'CONNECT' || null`. */
+ upgrade?: boolean | string | null;
+ /** The amount of time the parser will wait to receive the complete HTTP headers. Defaults to 300 seconds. */
+ headersTimeout?: number | null;
+ /** The timeout after which a request will time out, in milliseconds. Monitors time between receiving body data. Use 0 to disable it entirely. Defaults to 300 seconds. */
+ bodyTimeout?: number | null;
+ /** Whether the request should stablish a keep-alive or not. Default `false` */
+ reset?: boolean;
+ /** Whether Undici should throw an error upon receiving a 4xx or 5xx response from the server. Defaults to false */
+ throwOnError?: boolean;
+ }
+ export interface ConnectOptions {
+ path: string;
+ /** Default: `null` */
+ headers?: IncomingHttpHeaders | string[] | null;
+ /** Default: `null` */
+ signal?: AbortSignal | EventEmitter | null;
+ /** This argument parameter is passed through to `ConnectData` */
+ opaque?: unknown;
+ /** Default: 0 */
+ maxRedirections?: number;
+ /** Default: `null` */
+ responseHeader?: 'raw' | null;
+ }
+ export interface RequestOptions extends DispatchOptions {
+ /** Default: `null` */
+ opaque?: unknown;
+ /** Default: `null` */
+ signal?: AbortSignal | EventEmitter | null;
+ /** Default: 0 */
+ maxRedirections?: number;
+ /** Default: `null` */
+ onInfo?: (info: { statusCode: number, headers: Record<string, string | string[]> }) => void;
+ /** Default: `null` */
+ responseHeader?: 'raw' | null;
+ }
+ export interface PipelineOptions extends RequestOptions {
+ /** `true` if the `handler` will return an object stream. Default: `false` */
+ objectMode?: boolean;
+ }
+ export interface UpgradeOptions {
+ path: string;
+ /** Default: `'GET'` */
+ method?: string;
+ /** Default: `null` */
+ headers?: IncomingHttpHeaders | string[] | null;
+ /** A string of comma separated protocols, in descending preference order. Default: `'Websocket'` */
+ protocol?: string;
+ /** Default: `null` */
+ signal?: AbortSignal | EventEmitter | null;
+ /** Default: 0 */
+ maxRedirections?: number;
+ /** Default: `null` */
+ responseHeader?: 'raw' | null;
+ }
+ export interface ConnectData {
+ statusCode: number;
+ headers: IncomingHttpHeaders;
+ socket: Duplex;
+ opaque: unknown;
+ }
+ export interface ResponseData {
+ statusCode: number;
+ headers: IncomingHttpHeaders;
+ body: BodyReadable & BodyMixin;
+ trailers: Record<string, string>;
+ opaque: unknown;
+ context: object;
+ }
+ export interface PipelineHandlerData {
+ statusCode: number;
+ headers: IncomingHttpHeaders;
+ opaque: unknown;
+ body: BodyReadable;
+ context: object;
+ }
+ export interface StreamData {
+ opaque: unknown;
+ trailers: Record<string, string>;
+ }
+ export interface UpgradeData {
+ headers: IncomingHttpHeaders;
+ socket: Duplex;
+ opaque: unknown;
+ }
+ export interface StreamFactoryData {
+ statusCode: number;
+ headers: IncomingHttpHeaders;
+ opaque: unknown;
+ context: object;
+ }
+ export type StreamFactory = (data: StreamFactoryData) => Writable;
+ export interface DispatchHandlers {
+ /** Invoked before request is dispatched on socket. May be invoked multiple times when a request is retried when the request at the head of the pipeline fails. */
+ onConnect?(abort: () => void): void;
+ /** Invoked when an error has occurred. */
+ onError?(err: Error): void;
+ /** Invoked when request is upgraded either due to a `Upgrade` header or `CONNECT` method. */
+ onUpgrade?(statusCode: number, headers: Buffer[] | string[] | null, socket: Duplex): void;
+ /** Invoked when statusCode and headers have been received. May be invoked multiple times due to 1xx informational headers. */
+ onHeaders?(statusCode: number, headers: Buffer[] | string[] | null, resume: () => void): boolean;
+ /** Invoked when response payload data is received. */
+ onData?(chunk: Buffer): boolean;
+ /** Invoked when response payload and trailers have been received and the request has completed. */
+ onComplete?(trailers: string[] | null): void;
+ /** Invoked when a body chunk is sent to the server. May be invoked multiple times for chunked requests */
+ onBodySent?(chunkSize: number, totalBytesSent: number): void;
+ }
+ export type PipelineHandler = (data: PipelineHandlerData) => Readable;
+ export type HttpMethod = 'GET' | 'HEAD' | 'POST' | 'PUT' | 'DELETE' | 'CONNECT' | 'OPTIONS' | 'TRACE' | 'PATCH';
+
+ /**
+ * @link https://fetch.spec.whatwg.org/#body-mixin
+ */
+ interface BodyMixin {
+ readonly body?: never; // throws on node v16.6.0
+ readonly bodyUsed: boolean;
+ arrayBuffer(): Promise<ArrayBuffer>;
+ blob(): Promise<Blob>;
+ formData(): Promise<never>;
+ json(): Promise<any>;
+ text(): Promise<string>;
+ }
+
+ export interface DispatchInterceptor {
+ (dispatch: Dispatcher['dispatch']): Dispatcher['dispatch']
+ }
+}
diff --git a/includes/external/discord/node_modules/undici/types/errors.d.ts b/includes/external/discord/node_modules/undici/types/errors.d.ts
new file mode 100644
index 0000000..fd2ce7c
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/types/errors.d.ts
@@ -0,0 +1,119 @@
+import { IncomingHttpHeaders } from "./header";
+import Client from './client'
+
+export default Errors
+
+declare namespace Errors {
+ export class UndiciError extends Error { }
+
+ /** Connect timeout error. */
+ export class ConnectTimeoutError extends UndiciError {
+ name: 'ConnectTimeoutError';
+ code: 'UND_ERR_CONNECT_TIMEOUT';
+ }
+
+ /** A header exceeds the `headersTimeout` option. */
+ export class HeadersTimeoutError extends UndiciError {
+ name: 'HeadersTimeoutError';
+ code: 'UND_ERR_HEADERS_TIMEOUT';
+ }
+
+ /** Headers overflow error. */
+ export class HeadersOverflowError extends UndiciError {
+ name: 'HeadersOverflowError'
+ code: 'UND_ERR_HEADERS_OVERFLOW'
+ }
+
+ /** A body exceeds the `bodyTimeout` option. */
+ export class BodyTimeoutError extends UndiciError {
+ name: 'BodyTimeoutError';
+ code: 'UND_ERR_BODY_TIMEOUT';
+ }
+
+ export class ResponseStatusCodeError extends UndiciError {
+ name: 'ResponseStatusCodeError';
+ code: 'UND_ERR_RESPONSE_STATUS_CODE';
+ body: null | Record<string, any> | string
+ status: number
+ statusCode: number
+ headers: IncomingHttpHeaders | string[] | null;
+ }
+
+ /** Passed an invalid argument. */
+ export class InvalidArgumentError extends UndiciError {
+ name: 'InvalidArgumentError';
+ code: 'UND_ERR_INVALID_ARG';
+ }
+
+ /** Returned an invalid value. */
+ export class InvalidReturnValueError extends UndiciError {
+ name: 'InvalidReturnValueError';
+ code: 'UND_ERR_INVALID_RETURN_VALUE';
+ }
+
+ /** The request has been aborted by the user. */
+ export class RequestAbortedError extends UndiciError {
+ name: 'AbortError';
+ code: 'UND_ERR_ABORTED';
+ }
+
+ /** Expected error with reason. */
+ export class InformationalError extends UndiciError {
+ name: 'InformationalError';
+ code: 'UND_ERR_INFO';
+ }
+
+ /** Request body length does not match content-length header. */
+ export class RequestContentLengthMismatchError extends UndiciError {
+ name: 'RequestContentLengthMismatchError';
+ code: 'UND_ERR_REQ_CONTENT_LENGTH_MISMATCH';
+ }
+
+ /** Response body length does not match content-length header. */
+ export class ResponseContentLengthMismatchError extends UndiciError {
+ name: 'ResponseContentLengthMismatchError';
+ code: 'UND_ERR_RES_CONTENT_LENGTH_MISMATCH';
+ }
+
+ /** Trying to use a destroyed client. */
+ export class ClientDestroyedError extends UndiciError {
+ name: 'ClientDestroyedError';
+ code: 'UND_ERR_DESTROYED';
+ }
+
+ /** Trying to use a closed client. */
+ export class ClientClosedError extends UndiciError {
+ name: 'ClientClosedError';
+ code: 'UND_ERR_CLOSED';
+ }
+
+ /** There is an error with the socket. */
+ export class SocketError extends UndiciError {
+ name: 'SocketError';
+ code: 'UND_ERR_SOCKET';
+ socket: Client.SocketInfo | null
+ }
+
+ /** Encountered unsupported functionality. */
+ export class NotSupportedError extends UndiciError {
+ name: 'NotSupportedError';
+ code: 'UND_ERR_NOT_SUPPORTED';
+ }
+
+ /** No upstream has been added to the BalancedPool. */
+ export class BalancedPoolMissingUpstreamError extends UndiciError {
+ name: 'MissingUpstreamError';
+ code: 'UND_ERR_BPL_MISSING_UPSTREAM';
+ }
+
+ export class HTTPParserError extends UndiciError {
+ name: 'HTTPParserError';
+ code: string;
+ }
+
+ /** The response exceed the length allowed. */
+ export class ResponseExceededMaxSizeError extends UndiciError {
+ name: 'ResponseExceededMaxSizeError';
+ code: 'UND_ERR_RES_EXCEEDED_MAX_SIZE';
+ }
+}
diff --git a/includes/external/discord/node_modules/undici/types/fetch.d.ts b/includes/external/discord/node_modules/undici/types/fetch.d.ts
new file mode 100644
index 0000000..fa4619c
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/types/fetch.d.ts
@@ -0,0 +1,209 @@
+// based on https://github.com/Ethan-Arrowood/undici-fetch/blob/249269714db874351589d2d364a0645d5160ae71/index.d.ts (MIT license)
+// and https://github.com/node-fetch/node-fetch/blob/914ce6be5ec67a8bab63d68510aabf07cb818b6d/index.d.ts (MIT license)
+/// <reference types="node" />
+
+import { Blob } from 'buffer'
+import { URL, URLSearchParams } from 'url'
+import { ReadableStream } from 'stream/web'
+import { FormData } from './formdata'
+
+import Dispatcher from './dispatcher'
+
+export type RequestInfo = string | URL | Request
+
+export declare function fetch (
+ input: RequestInfo,
+ init?: RequestInit
+): Promise<Response>
+
+export type BodyInit =
+ | ArrayBuffer
+ | AsyncIterable<Uint8Array>
+ | Blob
+ | FormData
+ | Iterable<Uint8Array>
+ | NodeJS.ArrayBufferView
+ | URLSearchParams
+ | null
+ | string
+
+export interface BodyMixin {
+ readonly body: ReadableStream | null
+ readonly bodyUsed: boolean
+
+ readonly arrayBuffer: () => Promise<ArrayBuffer>
+ readonly blob: () => Promise<Blob>
+ readonly formData: () => Promise<FormData>
+ readonly json: () => Promise<unknown>
+ readonly text: () => Promise<string>
+}
+
+export interface SpecIterator<T, TReturn = any, TNext = undefined> {
+ next(...args: [] | [TNext]): IteratorResult<T, TReturn>;
+}
+
+export interface SpecIterableIterator<T> extends SpecIterator<T> {
+ [Symbol.iterator](): SpecIterableIterator<T>;
+}
+
+export interface SpecIterable<T> {
+ [Symbol.iterator](): SpecIterator<T>;
+}
+
+export type HeadersInit = string[][] | Record<string, string | ReadonlyArray<string>> | Headers
+
+export declare class Headers implements SpecIterable<[string, string]> {
+ constructor (init?: HeadersInit)
+ readonly append: (name: string, value: string) => void
+ readonly delete: (name: string) => void
+ readonly get: (name: string) => string | null
+ readonly has: (name: string) => boolean
+ readonly set: (name: string, value: string) => void
+ readonly getSetCookie: () => string[]
+ readonly forEach: (
+ callbackfn: (value: string, key: string, iterable: Headers) => void,
+ thisArg?: unknown
+ ) => void
+
+ readonly keys: () => SpecIterableIterator<string>
+ readonly values: () => SpecIterableIterator<string>
+ readonly entries: () => SpecIterableIterator<[string, string]>
+ readonly [Symbol.iterator]: () => SpecIterator<[string, string]>
+}
+
+export type RequestCache =
+ | 'default'
+ | 'force-cache'
+ | 'no-cache'
+ | 'no-store'
+ | 'only-if-cached'
+ | 'reload'
+
+export type RequestCredentials = 'omit' | 'include' | 'same-origin'
+
+type RequestDestination =
+ | ''
+ | 'audio'
+ | 'audioworklet'
+ | 'document'
+ | 'embed'
+ | 'font'
+ | 'image'
+ | 'manifest'
+ | 'object'
+ | 'paintworklet'
+ | 'report'
+ | 'script'
+ | 'sharedworker'
+ | 'style'
+ | 'track'
+ | 'video'
+ | 'worker'
+ | 'xslt'
+
+export interface RequestInit {
+ method?: string
+ keepalive?: boolean
+ headers?: HeadersInit
+ body?: BodyInit
+ redirect?: RequestRedirect
+ integrity?: string
+ signal?: AbortSignal
+ credentials?: RequestCredentials
+ mode?: RequestMode
+ referrer?: string
+ referrerPolicy?: ReferrerPolicy
+ window?: null
+ dispatcher?: Dispatcher
+ duplex?: RequestDuplex
+}
+
+export type ReferrerPolicy =
+ | ''
+ | 'no-referrer'
+ | 'no-referrer-when-downgrade'
+ | 'origin'
+ | 'origin-when-cross-origin'
+ | 'same-origin'
+ | 'strict-origin'
+ | 'strict-origin-when-cross-origin'
+ | 'unsafe-url';
+
+export type RequestMode = 'cors' | 'navigate' | 'no-cors' | 'same-origin'
+
+export type RequestRedirect = 'error' | 'follow' | 'manual'
+
+export type RequestDuplex = 'half'
+
+export declare class Request implements BodyMixin {
+ constructor (input: RequestInfo, init?: RequestInit)
+
+ readonly cache: RequestCache
+ readonly credentials: RequestCredentials
+ readonly destination: RequestDestination
+ readonly headers: Headers
+ readonly integrity: string
+ readonly method: string
+ readonly mode: RequestMode
+ readonly redirect: RequestRedirect
+ readonly referrerPolicy: string
+ readonly url: string
+
+ readonly keepalive: boolean
+ readonly signal: AbortSignal
+ readonly duplex: RequestDuplex
+
+ readonly body: ReadableStream | null
+ readonly bodyUsed: boolean
+
+ readonly arrayBuffer: () => Promise<ArrayBuffer>
+ readonly blob: () => Promise<Blob>
+ readonly formData: () => Promise<FormData>
+ readonly json: () => Promise<unknown>
+ readonly text: () => Promise<string>
+
+ readonly clone: () => Request
+}
+
+export interface ResponseInit {
+ readonly status?: number
+ readonly statusText?: string
+ readonly headers?: HeadersInit
+}
+
+export type ResponseType =
+ | 'basic'
+ | 'cors'
+ | 'default'
+ | 'error'
+ | 'opaque'
+ | 'opaqueredirect'
+
+export type ResponseRedirectStatus = 301 | 302 | 303 | 307 | 308
+
+export declare class Response implements BodyMixin {
+ constructor (body?: BodyInit, init?: ResponseInit)
+
+ readonly headers: Headers
+ readonly ok: boolean
+ readonly status: number
+ readonly statusText: string
+ readonly type: ResponseType
+ readonly url: string
+ readonly redirected: boolean
+
+ readonly body: ReadableStream | null
+ readonly bodyUsed: boolean
+
+ readonly arrayBuffer: () => Promise<ArrayBuffer>
+ readonly blob: () => Promise<Blob>
+ readonly formData: () => Promise<FormData>
+ readonly json: () => Promise<unknown>
+ readonly text: () => Promise<string>
+
+ readonly clone: () => Response
+
+ static error (): Response
+ static json(data: any, init?: ResponseInit): Response
+ static redirect (url: string | URL, status: ResponseRedirectStatus): Response
+}
diff --git a/includes/external/discord/node_modules/undici/types/file.d.ts b/includes/external/discord/node_modules/undici/types/file.d.ts
new file mode 100644
index 0000000..c695b7a
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/types/file.d.ts
@@ -0,0 +1,39 @@
+// Based on https://github.com/octet-stream/form-data/blob/2d0f0dc371517444ce1f22cdde13f51995d0953a/lib/File.ts (MIT)
+/// <reference types="node" />
+
+import { Blob } from 'buffer'
+
+export interface BlobPropertyBag {
+ type?: string
+ endings?: 'native' | 'transparent'
+}
+
+export interface FilePropertyBag extends BlobPropertyBag {
+ /**
+ * The last modified date of the file as the number of milliseconds since the Unix epoch (January 1, 1970 at midnight). Files without a known last modified date return the current date.
+ */
+ lastModified?: number
+}
+
+export declare class File extends Blob {
+ /**
+ * Creates a new File instance.
+ *
+ * @param fileBits An `Array` strings, or [`ArrayBuffer`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer), [`ArrayBufferView`](https://developer.mozilla.org/en-US/docs/Web/API/ArrayBufferView), [`Blob`](https://developer.mozilla.org/en-US/docs/Web/API/Blob) objects, or a mix of any of such objects, that will be put inside the [`File`](https://developer.mozilla.org/en-US/docs/Web/API/File).
+ * @param fileName The name of the file.
+ * @param options An options object containing optional attributes for the file.
+ */
+ constructor(fileBits: ReadonlyArray<string | NodeJS.ArrayBufferView | Blob>, fileName: string, options?: FilePropertyBag)
+
+ /**
+ * Name of the file referenced by the File object.
+ */
+ readonly name: string
+
+ /**
+ * The last modified date of the file as the number of milliseconds since the Unix epoch (January 1, 1970 at midnight). Files without a known last modified date return the current date.
+ */
+ readonly lastModified: number
+
+ readonly [Symbol.toStringTag]: string
+}
diff --git a/includes/external/discord/node_modules/undici/types/filereader.d.ts b/includes/external/discord/node_modules/undici/types/filereader.d.ts
new file mode 100644
index 0000000..f05d231
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/types/filereader.d.ts
@@ -0,0 +1,54 @@
+/// <reference types="node" />
+
+import { Blob } from 'buffer'
+import { DOMException, Event, EventInit, EventTarget } from './patch'
+
+export declare class FileReader {
+ __proto__: EventTarget & FileReader
+
+ constructor ()
+
+ readAsArrayBuffer (blob: Blob): void
+ readAsBinaryString (blob: Blob): void
+ readAsText (blob: Blob, encoding?: string): void
+ readAsDataURL (blob: Blob): void
+
+ abort (): void
+
+ static readonly EMPTY = 0
+ static readonly LOADING = 1
+ static readonly DONE = 2
+
+ readonly EMPTY = 0
+ readonly LOADING = 1
+ readonly DONE = 2
+
+ readonly readyState: number
+
+ readonly result: string | ArrayBuffer | null
+
+ readonly error: DOMException | null
+
+ onloadstart: null | ((this: FileReader, event: ProgressEvent) => void)
+ onprogress: null | ((this: FileReader, event: ProgressEvent) => void)
+ onload: null | ((this: FileReader, event: ProgressEvent) => void)
+ onabort: null | ((this: FileReader, event: ProgressEvent) => void)
+ onerror: null | ((this: FileReader, event: ProgressEvent) => void)
+ onloadend: null | ((this: FileReader, event: ProgressEvent) => void)
+}
+
+export interface ProgressEventInit extends EventInit {
+ lengthComputable?: boolean
+ loaded?: number
+ total?: number
+}
+
+export declare class ProgressEvent {
+ __proto__: Event & ProgressEvent
+
+ constructor (type: string, eventInitDict?: ProgressEventInit)
+
+ readonly lengthComputable: boolean
+ readonly loaded: number
+ readonly total: number
+}
diff --git a/includes/external/discord/node_modules/undici/types/formdata.d.ts b/includes/external/discord/node_modules/undici/types/formdata.d.ts
new file mode 100644
index 0000000..df29a57
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/types/formdata.d.ts
@@ -0,0 +1,108 @@
+// Based on https://github.com/octet-stream/form-data/blob/2d0f0dc371517444ce1f22cdde13f51995d0953a/lib/FormData.ts (MIT)
+/// <reference types="node" />
+
+import { File } from './file'
+import { SpecIterator, SpecIterableIterator } from './fetch'
+
+/**
+ * A `string` or `File` that represents a single value from a set of `FormData` key-value pairs.
+ */
+declare type FormDataEntryValue = string | File
+
+/**
+ * Provides a way to easily construct a set of key/value pairs representing form fields and their values, which can then be easily sent using fetch().
+ */
+export declare class FormData {
+ /**
+ * Appends a new value onto an existing key inside a FormData object,
+ * or adds the key if it does not already exist.
+ *
+ * The difference between `set()` and `append()` is that if the specified key already exists, `set()` will overwrite all existing values with the new one, whereas `append()` will append the new value onto the end of the existing set of values.
+ *
+ * @param name The name of the field whose data is contained in `value`.
+ * @param value The field's value. This can be [`Blob`](https://developer.mozilla.org/en-US/docs/Web/API/Blob)
+ or [`File`](https://developer.mozilla.org/en-US/docs/Web/API/File). If none of these are specified the value is converted to a string.
+ * @param fileName The filename reported to the server, when a Blob or File is passed as the second parameter. The default filename for Blob objects is "blob". The default filename for File objects is the file's filename.
+ */
+ append(name: string, value: unknown, fileName?: string): void
+
+ /**
+ * Set a new value for an existing key inside FormData,
+ * or add the new field if it does not already exist.
+ *
+ * @param name The name of the field whose data is contained in `value`.
+ * @param value The field's value. This can be [`Blob`](https://developer.mozilla.org/en-US/docs/Web/API/Blob)
+ or [`File`](https://developer.mozilla.org/en-US/docs/Web/API/File). If none of these are specified the value is converted to a string.
+ * @param fileName The filename reported to the server, when a Blob or File is passed as the second parameter. The default filename for Blob objects is "blob". The default filename for File objects is the file's filename.
+ *
+ */
+ set(name: string, value: unknown, fileName?: string): void
+
+ /**
+ * Returns the first value associated with a given key from within a `FormData` object.
+ * If you expect multiple values and want all of them, use the `getAll()` method instead.
+ *
+ * @param {string} name A name of the value you want to retrieve.
+ *
+ * @returns A `FormDataEntryValue` containing the value. If the key doesn't exist, the method returns null.
+ */
+ get(name: string): FormDataEntryValue | null
+
+ /**
+ * Returns all the values associated with a given key from within a `FormData` object.
+ *
+ * @param {string} name A name of the value you want to retrieve.
+ *
+ * @returns An array of `FormDataEntryValue` whose key matches the value passed in the `name` parameter. If the key doesn't exist, the method returns an empty list.
+ */
+ getAll(name: string): FormDataEntryValue[]
+
+ /**
+ * Returns a boolean stating whether a `FormData` object contains a certain key.
+ *
+ * @param name A string representing the name of the key you want to test for.
+ *
+ * @return A boolean value.
+ */
+ has(name: string): boolean
+
+ /**
+ * Deletes a key and its value(s) from a `FormData` object.
+ *
+ * @param name The name of the key you want to delete.
+ */
+ delete(name: string): void
+
+ /**
+ * Executes given callback function for each field of the FormData instance
+ */
+ forEach: (
+ callbackfn: (value: FormDataEntryValue, key: string, iterable: FormData) => void,
+ thisArg?: unknown
+ ) => void
+
+ /**
+ * Returns an [`iterator`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols) allowing to go through all keys contained in this `FormData` object.
+ * Each key is a `string`.
+ */
+ keys: () => SpecIterableIterator<string>
+
+ /**
+ * Returns an [`iterator`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols) allowing to go through all values contained in this object `FormData` object.
+ * Each value is a [`FormDataValue`](https://developer.mozilla.org/en-US/docs/Web/API/FormDataEntryValue).
+ */
+ values: () => SpecIterableIterator<FormDataEntryValue>
+
+ /**
+ * Returns an [`iterator`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols) allowing to go through the `FormData` key/value pairs.
+ * The key of each pair is a string; the value is a [`FormDataValue`](https://developer.mozilla.org/en-US/docs/Web/API/FormDataEntryValue).
+ */
+ entries: () => SpecIterableIterator<[string, FormDataEntryValue]>
+
+ /**
+ * An alias for FormData#entries()
+ */
+ [Symbol.iterator]: () => SpecIterableIterator<[string, FormDataEntryValue]>
+
+ readonly [Symbol.toStringTag]: string
+}
diff --git a/includes/external/discord/node_modules/undici/types/global-dispatcher.d.ts b/includes/external/discord/node_modules/undici/types/global-dispatcher.d.ts
new file mode 100644
index 0000000..728f95c
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/types/global-dispatcher.d.ts
@@ -0,0 +1,9 @@
+import Dispatcher from "./dispatcher";
+
+export {
+ getGlobalDispatcher,
+ setGlobalDispatcher
+}
+
+declare function setGlobalDispatcher<DispatcherImplementation extends Dispatcher>(dispatcher: DispatcherImplementation): void;
+declare function getGlobalDispatcher(): Dispatcher;
diff --git a/includes/external/discord/node_modules/undici/types/global-origin.d.ts b/includes/external/discord/node_modules/undici/types/global-origin.d.ts
new file mode 100644
index 0000000..322542d
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/types/global-origin.d.ts
@@ -0,0 +1,7 @@
+export {
+ setGlobalOrigin,
+ getGlobalOrigin
+}
+
+declare function setGlobalOrigin(origin: string | URL | undefined): void;
+declare function getGlobalOrigin(): URL | undefined; \ No newline at end of file
diff --git a/includes/external/discord/node_modules/undici/types/handlers.d.ts b/includes/external/discord/node_modules/undici/types/handlers.d.ts
new file mode 100644
index 0000000..eb4f5a9
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/types/handlers.d.ts
@@ -0,0 +1,9 @@
+import Dispatcher from "./dispatcher";
+
+export declare class RedirectHandler implements Dispatcher.DispatchHandlers{
+ constructor (dispatch: Dispatcher, maxRedirections: number, opts: Dispatcher.DispatchOptions, handler: Dispatcher.DispatchHandlers)
+}
+
+export declare class DecoratorHandler implements Dispatcher.DispatchHandlers{
+ constructor (handler: Dispatcher.DispatchHandlers)
+}
diff --git a/includes/external/discord/node_modules/undici/types/header.d.ts b/includes/external/discord/node_modules/undici/types/header.d.ts
new file mode 100644
index 0000000..bfdb329
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/types/header.d.ts
@@ -0,0 +1,4 @@
+/**
+ * The header type declaration of `undici`.
+ */
+export type IncomingHttpHeaders = Record<string, string | string[] | undefined>;
diff --git a/includes/external/discord/node_modules/undici/types/interceptors.d.ts b/includes/external/discord/node_modules/undici/types/interceptors.d.ts
new file mode 100644
index 0000000..047ac17
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/types/interceptors.d.ts
@@ -0,0 +1,5 @@
+import Dispatcher from "./dispatcher";
+
+type RedirectInterceptorOpts = { maxRedirections?: number }
+
+export declare function createRedirectInterceptor (opts: RedirectInterceptorOpts): Dispatcher.DispatchInterceptor
diff --git a/includes/external/discord/node_modules/undici/types/mock-agent.d.ts b/includes/external/discord/node_modules/undici/types/mock-agent.d.ts
new file mode 100644
index 0000000..98cd645
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/types/mock-agent.d.ts
@@ -0,0 +1,50 @@
+import Agent from './agent'
+import Dispatcher from './dispatcher'
+import { Interceptable, MockInterceptor } from './mock-interceptor'
+import MockDispatch = MockInterceptor.MockDispatch;
+
+export default MockAgent
+
+interface PendingInterceptor extends MockDispatch {
+ origin: string;
+}
+
+/** A mocked Agent class that implements the Agent API. It allows one to intercept HTTP requests made through undici and return mocked responses instead. */
+declare class MockAgent<TMockAgentOptions extends MockAgent.Options = MockAgent.Options> extends Dispatcher {
+ constructor(options?: MockAgent.Options)
+ /** Creates and retrieves mock Dispatcher instances which can then be used to intercept HTTP requests. If the number of connections on the mock agent is set to 1, a MockClient instance is returned. Otherwise a MockPool instance is returned. */
+ get<TInterceptable extends Interceptable>(origin: string): TInterceptable;
+ get<TInterceptable extends Interceptable>(origin: RegExp): TInterceptable;
+ get<TInterceptable extends Interceptable>(origin: ((origin: string) => boolean)): TInterceptable;
+ /** Dispatches a mocked request. */
+ dispatch(options: Agent.DispatchOptions, handler: Dispatcher.DispatchHandlers): boolean;
+ /** Closes the mock agent and waits for registered mock pools and clients to also close before resolving. */
+ close(): Promise<void>;
+ /** Disables mocking in MockAgent. */
+ deactivate(): void;
+ /** Enables mocking in a MockAgent instance. When instantiated, a MockAgent is automatically activated. Therefore, this method is only effective after `MockAgent.deactivate` has been called. */
+ activate(): void;
+ /** Define host matchers so only matching requests that aren't intercepted by the mock dispatchers will be attempted. */
+ enableNetConnect(): void;
+ enableNetConnect(host: string): void;
+ enableNetConnect(host: RegExp): void;
+ enableNetConnect(host: ((host: string) => boolean)): void;
+ /** Causes all requests to throw when requests are not matched in a MockAgent intercept. */
+ disableNetConnect(): void;
+ pendingInterceptors(): PendingInterceptor[];
+ assertNoPendingInterceptors(options?: {
+ pendingInterceptorsFormatter?: PendingInterceptorsFormatter;
+ }): void;
+}
+
+interface PendingInterceptorsFormatter {
+ format(pendingInterceptors: readonly PendingInterceptor[]): string;
+}
+
+declare namespace MockAgent {
+ /** MockAgent options. */
+ export interface Options extends Agent.Options {
+ /** A custom agent to be encapsulated by the MockAgent. */
+ agent?: Agent;
+ }
+}
diff --git a/includes/external/discord/node_modules/undici/types/mock-client.d.ts b/includes/external/discord/node_modules/undici/types/mock-client.d.ts
new file mode 100644
index 0000000..51d008c
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/types/mock-client.d.ts
@@ -0,0 +1,25 @@
+import Client from './client'
+import Dispatcher from './dispatcher'
+import MockAgent from './mock-agent'
+import { MockInterceptor, Interceptable } from './mock-interceptor'
+
+export default MockClient
+
+/** MockClient extends the Client API and allows one to mock requests. */
+declare class MockClient extends Client implements Interceptable {
+ constructor(origin: string, options: MockClient.Options);
+ /** Intercepts any matching requests that use the same origin as this mock client. */
+ intercept(options: MockInterceptor.Options): MockInterceptor;
+ /** Dispatches a mocked request. */
+ dispatch(options: Dispatcher.DispatchOptions, handlers: Dispatcher.DispatchHandlers): boolean;
+ /** Closes the mock client and gracefully waits for enqueued requests to complete. */
+ close(): Promise<void>;
+}
+
+declare namespace MockClient {
+ /** MockClient options. */
+ export interface Options extends Client.Options {
+ /** The agent to associate this MockClient with. */
+ agent: MockAgent;
+ }
+}
diff --git a/includes/external/discord/node_modules/undici/types/mock-errors.d.ts b/includes/external/discord/node_modules/undici/types/mock-errors.d.ts
new file mode 100644
index 0000000..3d9e727
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/types/mock-errors.d.ts
@@ -0,0 +1,12 @@
+import Errors from './errors'
+
+export default MockErrors
+
+declare namespace MockErrors {
+ /** The request does not match any registered mock dispatches. */
+ export class MockNotMatchedError extends Errors.UndiciError {
+ constructor(message?: string);
+ name: 'MockNotMatchedError';
+ code: 'UND_MOCK_ERR_MOCK_NOT_MATCHED';
+ }
+}
diff --git a/includes/external/discord/node_modules/undici/types/mock-interceptor.d.ts b/includes/external/discord/node_modules/undici/types/mock-interceptor.d.ts
new file mode 100644
index 0000000..6b3961c
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/types/mock-interceptor.d.ts
@@ -0,0 +1,93 @@
+import { IncomingHttpHeaders } from './header'
+import Dispatcher from './dispatcher';
+import { BodyInit, Headers } from './fetch'
+
+export {
+ Interceptable,
+ MockInterceptor,
+ MockScope
+}
+
+/** The scope associated with a mock dispatch. */
+declare class MockScope<TData extends object = object> {
+ constructor(mockDispatch: MockInterceptor.MockDispatch<TData>);
+ /** Delay a reply by a set amount of time in ms. */
+ delay(waitInMs: number): MockScope<TData>;
+ /** Persist the defined mock data for the associated reply. It will return the defined mock data indefinitely. */
+ persist(): MockScope<TData>;
+ /** Define a reply for a set amount of matching requests. */
+ times(repeatTimes: number): MockScope<TData>;
+}
+
+/** The interceptor for a Mock. */
+declare class MockInterceptor {
+ constructor(options: MockInterceptor.Options, mockDispatches: MockInterceptor.MockDispatch[]);
+ /** Mock an undici request with the defined reply. */
+ reply<TData extends object = object>(replyOptionsCallback: MockInterceptor.MockReplyOptionsCallback<TData>): MockScope<TData>;
+ reply<TData extends object = object>(
+ statusCode: number,
+ data?: TData | Buffer | string | MockInterceptor.MockResponseDataHandler<TData>,
+ responseOptions?: MockInterceptor.MockResponseOptions
+ ): MockScope<TData>;
+ /** Mock an undici request by throwing the defined reply error. */
+ replyWithError<TError extends Error = Error>(error: TError): MockScope;
+ /** Set default reply headers on the interceptor for subsequent mocked replies. */
+ defaultReplyHeaders(headers: IncomingHttpHeaders): MockInterceptor;
+ /** Set default reply trailers on the interceptor for subsequent mocked replies. */
+ defaultReplyTrailers(trailers: Record<string, string>): MockInterceptor;
+ /** Set automatically calculated content-length header on subsequent mocked replies. */
+ replyContentLength(): MockInterceptor;
+}
+
+declare namespace MockInterceptor {
+ /** MockInterceptor options. */
+ export interface Options {
+ /** Path to intercept on. */
+ path: string | RegExp | ((path: string) => boolean);
+ /** Method to intercept on. Defaults to GET. */
+ method?: string | RegExp | ((method: string) => boolean);
+ /** Body to intercept on. */
+ body?: string | RegExp | ((body: string) => boolean);
+ /** Headers to intercept on. */
+ headers?: Record<string, string | RegExp | ((body: string) => boolean)> | ((headers: Record<string, string>) => boolean);
+ /** Query params to intercept on */
+ query?: Record<string, any>;
+ }
+ export interface MockDispatch<TData extends object = object, TError extends Error = Error> extends Options {
+ times: number | null;
+ persist: boolean;
+ consumed: boolean;
+ data: MockDispatchData<TData, TError>;
+ }
+ export interface MockDispatchData<TData extends object = object, TError extends Error = Error> extends MockResponseOptions {
+ error: TError | null;
+ statusCode?: number;
+ data?: TData | string;
+ }
+ export interface MockResponseOptions {
+ headers?: IncomingHttpHeaders;
+ trailers?: Record<string, string>;
+ }
+
+ export interface MockResponseCallbackOptions {
+ path: string;
+ origin: string;
+ method: string;
+ body?: BodyInit | Dispatcher.DispatchOptions['body'];
+ headers: Headers | Record<string, string>;
+ maxRedirections: number;
+ }
+
+ export type MockResponseDataHandler<TData extends object = object> = (
+ opts: MockResponseCallbackOptions
+ ) => TData | Buffer | string;
+
+ export type MockReplyOptionsCallback<TData extends object = object> = (
+ opts: MockResponseCallbackOptions
+ ) => { statusCode: number, data?: TData | Buffer | string, responseOptions?: MockResponseOptions }
+}
+
+interface Interceptable extends Dispatcher {
+ /** Intercepts any matching requests that use the same origin as this mock client. */
+ intercept(options: MockInterceptor.Options): MockInterceptor;
+}
diff --git a/includes/external/discord/node_modules/undici/types/mock-pool.d.ts b/includes/external/discord/node_modules/undici/types/mock-pool.d.ts
new file mode 100644
index 0000000..39e709a
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/types/mock-pool.d.ts
@@ -0,0 +1,25 @@
+import Pool from './pool'
+import MockAgent from './mock-agent'
+import { Interceptable, MockInterceptor } from './mock-interceptor'
+import Dispatcher from './dispatcher'
+
+export default MockPool
+
+/** MockPool extends the Pool API and allows one to mock requests. */
+declare class MockPool extends Pool implements Interceptable {
+ constructor(origin: string, options: MockPool.Options);
+ /** Intercepts any matching requests that use the same origin as this mock pool. */
+ intercept(options: MockInterceptor.Options): MockInterceptor;
+ /** Dispatches a mocked request. */
+ dispatch(options: Dispatcher.DispatchOptions, handlers: Dispatcher.DispatchHandlers): boolean;
+ /** Closes the mock pool and gracefully waits for enqueued requests to complete. */
+ close(): Promise<void>;
+}
+
+declare namespace MockPool {
+ /** MockPool options. */
+ export interface Options extends Pool.Options {
+ /** The agent to associate this MockPool with. */
+ agent: MockAgent;
+ }
+}
diff --git a/includes/external/discord/node_modules/undici/types/patch.d.ts b/includes/external/discord/node_modules/undici/types/patch.d.ts
new file mode 100644
index 0000000..3871acf
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/types/patch.d.ts
@@ -0,0 +1,71 @@
+/// <reference types="node" />
+
+// See https://github.com/nodejs/undici/issues/1740
+
+export type DOMException = typeof globalThis extends { DOMException: infer T }
+ ? T
+ : any
+
+export type EventTarget = typeof globalThis extends { EventTarget: infer T }
+ ? T
+ : {
+ addEventListener(
+ type: string,
+ listener: any,
+ options?: any,
+ ): void
+ dispatchEvent(event: Event): boolean
+ removeEventListener(
+ type: string,
+ listener: any,
+ options?: any | boolean,
+ ): void
+ }
+
+export type Event = typeof globalThis extends { Event: infer T }
+ ? T
+ : {
+ readonly bubbles: boolean
+ cancelBubble: () => void
+ readonly cancelable: boolean
+ readonly composed: boolean
+ composedPath(): [EventTarget?]
+ readonly currentTarget: EventTarget | null
+ readonly defaultPrevented: boolean
+ readonly eventPhase: 0 | 2
+ readonly isTrusted: boolean
+ preventDefault(): void
+ returnValue: boolean
+ readonly srcElement: EventTarget | null
+ stopImmediatePropagation(): void
+ stopPropagation(): void
+ readonly target: EventTarget | null
+ readonly timeStamp: number
+ readonly type: string
+ }
+
+export interface EventInit {
+ bubbles?: boolean
+ cancelable?: boolean
+ composed?: boolean
+}
+
+export interface EventListenerOptions {
+ capture?: boolean
+}
+
+export interface AddEventListenerOptions extends EventListenerOptions {
+ once?: boolean
+ passive?: boolean
+ signal?: AbortSignal
+}
+
+export type EventListenerOrEventListenerObject = EventListener | EventListenerObject
+
+export interface EventListenerObject {
+ handleEvent (object: Event): void
+}
+
+export interface EventListener {
+ (evt: Event): void
+}
diff --git a/includes/external/discord/node_modules/undici/types/pool-stats.d.ts b/includes/external/discord/node_modules/undici/types/pool-stats.d.ts
new file mode 100644
index 0000000..8b6d2bf
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/types/pool-stats.d.ts
@@ -0,0 +1,19 @@
+import Pool from "./pool"
+
+export default PoolStats
+
+declare class PoolStats {
+ constructor(pool: Pool);
+ /** Number of open socket connections in this pool. */
+ connected: number;
+ /** Number of open socket connections in this pool that do not have an active request. */
+ free: number;
+ /** Number of pending requests across all clients in this pool. */
+ pending: number;
+ /** Number of queued requests across all clients in this pool. */
+ queued: number;
+ /** Number of currently active requests across all clients in this pool. */
+ running: number;
+ /** Number of active, pending, or queued requests across all clients in this pool. */
+ size: number;
+}
diff --git a/includes/external/discord/node_modules/undici/types/pool.d.ts b/includes/external/discord/node_modules/undici/types/pool.d.ts
new file mode 100644
index 0000000..7747d48
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/types/pool.d.ts
@@ -0,0 +1,28 @@
+import Client from './client'
+import TPoolStats from './pool-stats'
+import { URL } from 'url'
+import Dispatcher from "./dispatcher";
+
+export default Pool
+
+declare class Pool extends Dispatcher {
+ constructor(url: string | URL, options?: Pool.Options)
+ /** `true` after `pool.close()` has been called. */
+ closed: boolean;
+ /** `true` after `pool.destroyed()` has been called or `pool.close()` has been called and the pool shutdown has completed. */
+ destroyed: boolean;
+ /** Aggregate stats for a Pool. */
+ readonly stats: TPoolStats;
+}
+
+declare namespace Pool {
+ export type PoolStats = TPoolStats;
+ export interface Options extends Client.Options {
+ /** Default: `(origin, opts) => new Client(origin, opts)`. */
+ factory?(origin: URL, opts: object): Dispatcher;
+ /** The max number of clients to create. `null` if no limit. Default `null`. */
+ connections?: number | null;
+
+ interceptors?: { Pool?: readonly Dispatcher.DispatchInterceptor[] } & Client.Options["interceptors"]
+ }
+}
diff --git a/includes/external/discord/node_modules/undici/types/proxy-agent.d.ts b/includes/external/discord/node_modules/undici/types/proxy-agent.d.ts
new file mode 100644
index 0000000..96b2638
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/types/proxy-agent.d.ts
@@ -0,0 +1,30 @@
+import Agent from './agent'
+import buildConnector from './connector';
+import Client from './client'
+import Dispatcher from './dispatcher'
+import { IncomingHttpHeaders } from './header'
+import Pool from './pool'
+
+export default ProxyAgent
+
+declare class ProxyAgent extends Dispatcher {
+ constructor(options: ProxyAgent.Options | string)
+
+ dispatch(options: Agent.DispatchOptions, handler: Dispatcher.DispatchHandlers): boolean;
+ close(): Promise<void>;
+}
+
+declare namespace ProxyAgent {
+ export interface Options extends Agent.Options {
+ uri: string;
+ /**
+ * @deprecated use opts.token
+ */
+ auth?: string;
+ token?: string;
+ headers?: IncomingHttpHeaders;
+ requestTls?: buildConnector.BuildOptions;
+ proxyTls?: buildConnector.BuildOptions;
+ clientFactory?(origin: URL, opts: object): Dispatcher;
+ }
+}
diff --git a/includes/external/discord/node_modules/undici/types/readable.d.ts b/includes/external/discord/node_modules/undici/types/readable.d.ts
new file mode 100644
index 0000000..032b53b
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/types/readable.d.ts
@@ -0,0 +1,61 @@
+import { Readable } from "stream";
+import { Blob } from 'buffer'
+
+export default BodyReadable
+
+declare class BodyReadable extends Readable {
+ constructor(
+ resume?: (this: Readable, size: number) => void | null,
+ abort?: () => void | null,
+ contentType?: string
+ )
+
+ /** Consumes and returns the body as a string
+ * https://fetch.spec.whatwg.org/#dom-body-text
+ */
+ text(): Promise<string>
+
+ /** Consumes and returns the body as a JavaScript Object
+ * https://fetch.spec.whatwg.org/#dom-body-json
+ */
+ json(): Promise<any>
+
+ /** Consumes and returns the body as a Blob
+ * https://fetch.spec.whatwg.org/#dom-body-blob
+ */
+ blob(): Promise<Blob>
+
+ /** Consumes and returns the body as an ArrayBuffer
+ * https://fetch.spec.whatwg.org/#dom-body-arraybuffer
+ */
+ arrayBuffer(): Promise<ArrayBuffer>
+
+ /** Not implemented
+ *
+ * https://fetch.spec.whatwg.org/#dom-body-formdata
+ */
+ formData(): Promise<never>
+
+ /** Returns true if the body is not null and the body has been consumed
+ *
+ * Otherwise, returns false
+ *
+ * https://fetch.spec.whatwg.org/#dom-body-bodyused
+ */
+ readonly bodyUsed: boolean
+
+ /** Throws on node 16.6.0
+ *
+ * If body is null, it should return null as the body
+ *
+ * If body is not null, should return the body as a ReadableStream
+ *
+ * https://fetch.spec.whatwg.org/#dom-body-body
+ */
+ readonly body: never | undefined
+
+ /** Dumps the response body by reading `limit` number of bytes.
+ * @param opts.limit Number of bytes to read (optional) - Default: 262144
+ */
+ dump(opts?: { limit: number }): Promise<void>
+}
diff --git a/includes/external/discord/node_modules/undici/types/webidl.d.ts b/includes/external/discord/node_modules/undici/types/webidl.d.ts
new file mode 100644
index 0000000..182d18e
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/types/webidl.d.ts
@@ -0,0 +1,218 @@
+// These types are not exported, and are only used internally
+
+/**
+ * Take in an unknown value and return one that is of type T
+ */
+type Converter<T> = (object: unknown) => T
+
+type SequenceConverter<T> = (object: unknown) => T[]
+
+type RecordConverter<K extends string, V> = (object: unknown) => Record<K, V>
+
+interface ConvertToIntOpts {
+ clamp?: boolean
+ enforceRange?: boolean
+}
+
+interface WebidlErrors {
+ exception (opts: { header: string, message: string }): TypeError
+ /**
+ * @description Throw an error when conversion from one type to another has failed
+ */
+ conversionFailed (opts: {
+ prefix: string
+ argument: string
+ types: string[]
+ }): TypeError
+ /**
+ * @description Throw an error when an invalid argument is provided
+ */
+ invalidArgument (opts: {
+ prefix: string
+ value: string
+ type: string
+ }): TypeError
+}
+
+interface WebidlUtil {
+ /**
+ * @see https://tc39.es/ecma262/#sec-ecmascript-data-types-and-values
+ */
+ Type (object: unknown):
+ | 'Undefined'
+ | 'Boolean'
+ | 'String'
+ | 'Symbol'
+ | 'Number'
+ | 'BigInt'
+ | 'Null'
+ | 'Object'
+
+ /**
+ * @see https://webidl.spec.whatwg.org/#abstract-opdef-converttoint
+ */
+ ConvertToInt (
+ V: unknown,
+ bitLength: number,
+ signedness: 'signed' | 'unsigned',
+ opts?: ConvertToIntOpts
+ ): number
+
+ /**
+ * @see https://webidl.spec.whatwg.org/#abstract-opdef-converttoint
+ */
+ IntegerPart (N: number): number
+}
+
+interface WebidlConverters {
+ /**
+ * @see https://webidl.spec.whatwg.org/#es-DOMString
+ */
+ DOMString (V: unknown, opts?: {
+ legacyNullToEmptyString: boolean
+ }): string
+
+ /**
+ * @see https://webidl.spec.whatwg.org/#es-ByteString
+ */
+ ByteString (V: unknown): string
+
+ /**
+ * @see https://webidl.spec.whatwg.org/#es-USVString
+ */
+ USVString (V: unknown): string
+
+ /**
+ * @see https://webidl.spec.whatwg.org/#es-boolean
+ */
+ boolean (V: unknown): boolean
+
+ /**
+ * @see https://webidl.spec.whatwg.org/#es-any
+ */
+ any <Value>(V: Value): Value
+
+ /**
+ * @see https://webidl.spec.whatwg.org/#es-long-long
+ */
+ ['long long'] (V: unknown): number
+
+ /**
+ * @see https://webidl.spec.whatwg.org/#es-unsigned-long-long
+ */
+ ['unsigned long long'] (V: unknown): number
+
+ /**
+ * @see https://webidl.spec.whatwg.org/#es-unsigned-long
+ */
+ ['unsigned long'] (V: unknown): number
+
+ /**
+ * @see https://webidl.spec.whatwg.org/#es-unsigned-short
+ */
+ ['unsigned short'] (V: unknown, opts?: ConvertToIntOpts): number
+
+ /**
+ * @see https://webidl.spec.whatwg.org/#idl-ArrayBuffer
+ */
+ ArrayBuffer (V: unknown): ArrayBufferLike
+ ArrayBuffer (V: unknown, opts: { allowShared: false }): ArrayBuffer
+
+ /**
+ * @see https://webidl.spec.whatwg.org/#es-buffer-source-types
+ */
+ TypedArray (
+ V: unknown,
+ TypedArray: NodeJS.TypedArray | ArrayBufferLike
+ ): NodeJS.TypedArray | ArrayBufferLike
+ TypedArray (
+ V: unknown,
+ TypedArray: NodeJS.TypedArray | ArrayBufferLike,
+ opts?: { allowShared: false }
+ ): NodeJS.TypedArray | ArrayBuffer
+
+ /**
+ * @see https://webidl.spec.whatwg.org/#es-buffer-source-types
+ */
+ DataView (V: unknown, opts?: { allowShared: boolean }): DataView
+
+ /**
+ * @see https://webidl.spec.whatwg.org/#BufferSource
+ */
+ BufferSource (
+ V: unknown,
+ opts?: { allowShared: boolean }
+ ): NodeJS.TypedArray | ArrayBufferLike | DataView
+
+ ['sequence<ByteString>']: SequenceConverter<string>
+
+ ['sequence<sequence<ByteString>>']: SequenceConverter<string[]>
+
+ ['record<ByteString, ByteString>']: RecordConverter<string, string>
+
+ [Key: string]: (...args: any[]) => unknown
+}
+
+export interface Webidl {
+ errors: WebidlErrors
+ util: WebidlUtil
+ converters: WebidlConverters
+
+ /**
+ * @description Performs a brand-check on {@param V} to ensure it is a
+ * {@param cls} object.
+ */
+ brandCheck <Interface>(V: unknown, cls: Interface, opts?: { strict?: boolean }): asserts V is Interface
+
+ /**
+ * @see https://webidl.spec.whatwg.org/#es-sequence
+ * @description Convert a value, V, to a WebIDL sequence type.
+ */
+ sequenceConverter <Type>(C: Converter<Type>): SequenceConverter<Type>
+
+ /**
+ * @see https://webidl.spec.whatwg.org/#es-to-record
+ * @description Convert a value, V, to a WebIDL record type.
+ */
+ recordConverter <K extends string, V>(
+ keyConverter: Converter<K>,
+ valueConverter: Converter<V>
+ ): RecordConverter<K, V>
+
+ /**
+ * Similar to {@link Webidl.brandCheck} but allows skipping the check if third party
+ * interfaces are allowed.
+ */
+ interfaceConverter <Interface>(cls: Interface): (
+ V: unknown,
+ opts?: { strict: boolean }
+ ) => asserts V is typeof cls
+
+ // TODO(@KhafraDev): a type could likely be implemented that can infer the return type
+ // from the converters given?
+ /**
+ * Converts a value, V, to a WebIDL dictionary types. Allows limiting which keys are
+ * allowed, values allowed, optional and required keys. Auto converts the value to
+ * a type given a converter.
+ */
+ dictionaryConverter (converters: {
+ key: string,
+ defaultValue?: unknown,
+ required?: boolean,
+ converter: (...args: unknown[]) => unknown,
+ allowedValues?: unknown[]
+ }[]): (V: unknown) => Record<string, unknown>
+
+ /**
+ * @see https://webidl.spec.whatwg.org/#idl-nullable-type
+ * @description allows a type, V, to be null
+ */
+ nullableConverter <T>(
+ converter: Converter<T>
+ ): (V: unknown) => ReturnType<typeof converter> | null
+
+ argumentLengthCheck (args: { length: number }, min: number, context: {
+ header: string
+ message?: string
+ }): void
+}
diff --git a/includes/external/discord/node_modules/undici/types/websocket.d.ts b/includes/external/discord/node_modules/undici/types/websocket.d.ts
new file mode 100644
index 0000000..dadd801
--- /dev/null
+++ b/includes/external/discord/node_modules/undici/types/websocket.d.ts
@@ -0,0 +1,122 @@
+/// <reference types="node" />
+
+import type { MessagePort } from 'worker_threads'
+import {
+ EventTarget,
+ Event,
+ EventInit,
+ EventListenerOptions,
+ AddEventListenerOptions,
+ EventListenerOrEventListenerObject
+} from './patch'
+
+export type BinaryType = 'blob' | 'arraybuffer'
+
+interface WebSocketEventMap {
+ close: CloseEvent
+ error: Event
+ message: MessageEvent
+ open: Event
+}
+
+interface WebSocket extends EventTarget {
+ binaryType: BinaryType
+
+ readonly bufferedAmount: number
+ readonly extensions: string
+
+ onclose: ((this: WebSocket, ev: WebSocketEventMap['close']) => any) | null
+ onerror: ((this: WebSocket, ev: WebSocketEventMap['error']) => any) | null
+ onmessage: ((this: WebSocket, ev: WebSocketEventMap['message']) => any) | null
+ onopen: ((this: WebSocket, ev: WebSocketEventMap['open']) => any) | null
+
+ readonly protocol: string
+ readonly readyState: number
+ readonly url: string
+
+ close(code?: number, reason?: string): void
+ send(data: string | ArrayBufferLike | Blob | ArrayBufferView): void
+
+ readonly CLOSED: number
+ readonly CLOSING: number
+ readonly CONNECTING: number
+ readonly OPEN: number
+
+ addEventListener<K extends keyof WebSocketEventMap>(
+ type: K,
+ listener: (this: WebSocket, ev: WebSocketEventMap[K]) => any,
+ options?: boolean | AddEventListenerOptions
+ ): void
+ addEventListener(
+ type: string,
+ listener: EventListenerOrEventListenerObject,
+ options?: boolean | AddEventListenerOptions
+ ): void
+ removeEventListener<K extends keyof WebSocketEventMap>(
+ type: K,
+ listener: (this: WebSocket, ev: WebSocketEventMap[K]) => any,
+ options?: boolean | EventListenerOptions
+ ): void
+ removeEventListener(
+ type: string,
+ listener: EventListenerOrEventListenerObject,
+ options?: boolean | EventListenerOptions
+ ): void
+}
+
+export declare const WebSocket: {
+ prototype: WebSocket
+ new (url: string | URL, protocols?: string | string[]): WebSocket
+ readonly CLOSED: number
+ readonly CLOSING: number
+ readonly CONNECTING: number
+ readonly OPEN: number
+}
+
+interface CloseEventInit extends EventInit {
+ code?: number
+ reason?: string
+ wasClean?: boolean
+}
+
+interface CloseEvent extends Event {
+ readonly code: number
+ readonly reason: string
+ readonly wasClean: boolean
+}
+
+export declare const CloseEvent: {
+ prototype: CloseEvent
+ new (type: string, eventInitDict?: CloseEventInit): CloseEvent
+}
+
+interface MessageEventInit<T = any> extends EventInit {
+ data?: T
+ lastEventId?: string
+ origin?: string
+ ports?: (typeof MessagePort)[]
+ source?: typeof MessagePort | null
+}
+
+interface MessageEvent<T = any> extends Event {
+ readonly data: T
+ readonly lastEventId: string
+ readonly origin: string
+ readonly ports: ReadonlyArray<typeof MessagePort>
+ readonly source: typeof MessagePort | null
+ initMessageEvent(
+ type: string,
+ bubbles?: boolean,
+ cancelable?: boolean,
+ data?: any,
+ origin?: string,
+ lastEventId?: string,
+ source?: typeof MessagePort | null,
+ ports?: (typeof MessagePort)[]
+ ): void;
+}
+
+export declare const MessageEvent: {
+ prototype: MessageEvent
+ new<T>(type: string, eventInitDict?: MessageEventInit<T>): MessageEvent<T>
+}