diff --git a/.eslintrc.cjs b/.eslintrc.cjs
new file mode 100644
index 0000000..f96e195
--- /dev/null
+++ b/.eslintrc.cjs
@@ -0,0 +1,24 @@
+/** @type {import("eslint").Linter.Config} */
+module.exports = {
+ extends: ['plugin:astro/recommended'],
+ parser: '@typescript-eslint/parser',
+ parserOptions: {
+ tsconfigRootDir: __dirname,
+ sourceType: 'module',
+ ecmaVersion: 'latest'
+ },
+ overrides: [
+ {
+ files: ['*.astro'],
+ parser: 'astro-eslint-parser',
+ parserOptions: {
+ parser: '@typescript-eslint/parser',
+ extraFileExtensions: ['.astro']
+ },
+ rules: {
+ // override/add rules settings here, such as:
+ // "astro/no-set-html-directive": "error"
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..2687565
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,24 @@
+# build output
+dist/
+# generated types
+.astro/
+
+# dependencies
+node_modules/
+
+# logs
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+
+
+# environment variables
+.env
+.env.production
+
+# macOS-specific files
+.DS_Store
+
+# submodule
+shoukaku/
diff --git a/.gitmodules b/.gitmodules
index 91f8392..44102a1 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,4 +1,4 @@
[submodule "shoukaku"]
path = shoukaku
url = https://github.com/shipgirlproject/shoukaku
- branch = v2
+ branch = master
diff --git a/.vscode/extensions.json b/.vscode/extensions.json
new file mode 100644
index 0000000..22a1505
--- /dev/null
+++ b/.vscode/extensions.json
@@ -0,0 +1,4 @@
+{
+ "recommendations": ["astro-build.astro-vscode"],
+ "unwantedRecommendations": []
+}
diff --git a/.vscode/launch.json b/.vscode/launch.json
new file mode 100644
index 0000000..d642209
--- /dev/null
+++ b/.vscode/launch.json
@@ -0,0 +1,11 @@
+{
+ "version": "0.2.0",
+ "configurations": [
+ {
+ "command": "./node_modules/.bin/astro dev",
+ "name": "Development server",
+ "request": "launch",
+ "type": "node-terminal"
+ }
+ ]
+}
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..b51abaa
--- /dev/null
+++ b/README.md
@@ -0,0 +1,54 @@
+# Starlight Starter Kit: Basics
+
+[](https://starlight.astro.build)
+
+```
+npm create astro@latest -- --template starlight
+```
+
+[](https://stackblitz.com/github/withastro/starlight/tree/main/examples/basics)
+[](https://codesandbox.io/p/sandbox/github/withastro/starlight/tree/main/examples/basics)
+[](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fwithastro%2Fstarlight%2Ftree%2Fmain%2Fexamples%2Fbasics&project-name=my-starlight-docs&repository-name=my-starlight-docs)
+
+> π§βπ **Seasoned astronaut?** Delete this file. Have fun!
+
+## π Project Structure
+
+Inside of your Astro + Starlight project, you'll see the following folders and files:
+
+```
+.
+βββ public/
+βββ src/
+β βββ assets/
+β βββ content/
+β β βββ docs/
+β β βββ config.ts
+β βββ env.d.ts
+βββ astro.config.mjs
+βββ package.json
+βββ tsconfig.json
+```
+
+Starlight looks for `.md` or `.mdx` files in the `src/content/docs/` directory. Each file is exposed as a route based on its file name.
+
+Images can be added to `src/assets/` and embedded in Markdown with a relative link.
+
+Static assets, like favicons, can be placed in the `public/` directory.
+
+## π§ Commands
+
+All commands are run from the root of the project, from a terminal:
+
+| Command | Action |
+| :------------------------ | :----------------------------------------------- |
+| `npm install` | Installs dependencies |
+| `npm run dev` | Starts local dev server at `localhost:4321` |
+| `npm run build` | Build your production site to `./dist/` |
+| `npm run preview` | Preview your build locally, before deploying |
+| `npm run astro ...` | Run CLI commands like `astro add`, `astro check` |
+| `npm run astro -- --help` | Get help using the Astro CLI |
+
+## π Want to learn more?
+
+Check out [Starlightβs docs](https://starlight.astro.build/), read [the Astro documentation](https://docs.astro.build), or jump into the [Astro Discord server](https://astro.build/chat).
diff --git a/astro.config.mjs b/astro.config.mjs
new file mode 100644
index 0000000..bea52ac
--- /dev/null
+++ b/astro.config.mjs
@@ -0,0 +1,44 @@
+import { defineConfig } from 'astro/config';
+import starlight from '@astrojs/starlight';
+import starlightTypeDoc, { typeDocSidebarGroup } from 'starlight-typedoc';
+import starlightVersions from 'starlight-versions';
+
+// https://astro.build/config
+export default defineConfig({
+ integrations: [
+ starlight({
+ plugins: [
+ // Generate the documentation.
+ starlightTypeDoc({
+ entryPoints: ['./shoukaku/index.ts'],
+ tsconfig: './shoukaku/tsconfig.json',
+ sidebar: {
+ collapsed: false,
+ label: "API Reference",
+ },
+ }),
+ starlightVersions({
+ versions: [
+ { slug: '4.0.1' },
+ { slug: '3.4.2' },
+ ],
+ }),
+ ],
+ title: 'Shoukaku Docs',
+ social: {
+ github: 'https://github.com/shipgirlproject/shoukaku',
+ discord: 'https://discord.gg/FVqbtGu',
+ },
+ sidebar: [
+ {
+ label: 'Guides',
+ autogenerate: { directory: 'guides' },
+ },
+ typeDocSidebarGroup,
+ ],
+ editLink: {
+ baseUrl: "https://github.com/shipgirlproject/shoukaku-docs/edit/main/"
+ }
+ }),
+ ],
+});
diff --git a/bun.lockb b/bun.lockb
new file mode 100644
index 0000000..1533397
Binary files /dev/null and b/bun.lockb differ
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..9899885
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,7714 @@
+{
+ "name": "shoukaku-docs",
+ "version": "0.0.1",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "version": "0.0.1",
+ "dependencies": {
+ "@astrojs/check": "^0.7.0",
+ "@astrojs/starlight": "^0.24.5",
+ "astro": "^4.10.2",
+ "sharp": "^0.32.5",
+ "typescript": "^5.5.2"
+ }
+ },
+ "node_modules/@ampproject/remapping": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
+ "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@astrojs/check": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/@astrojs/check/-/check-0.7.0.tgz",
+ "integrity": "sha512-UTqwOeKNu9IYZmJXEeWnQuTdSd/pX58Hl4TUARsMlT97SVDL//kLBE4T/ctxRz6J573N87oE5ddtW/uOOnQTug==",
+ "dependencies": {
+ "@astrojs/language-server": "^2.10.0",
+ "chokidar": "^3.5.3",
+ "fast-glob": "^3.3.1",
+ "kleur": "^4.1.5",
+ "yargs": "^17.7.2"
+ },
+ "bin": {
+ "astro-check": "dist/bin.js"
+ },
+ "peerDependencies": {
+ "typescript": "^5.0.0"
+ }
+ },
+ "node_modules/@astrojs/compiler": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-2.8.1.tgz",
+ "integrity": "sha512-NGfPAgU/9rvDEwsXu82RI1AxiivaxtEYBK9saW1f+2fTHUUqCJQ27HYtb2akG2QxCmFikgZ9zk26BEWgiHho1Q=="
+ },
+ "node_modules/@astrojs/internal-helpers": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.4.1.tgz",
+ "integrity": "sha512-bMf9jFihO8YP940uD70SI/RDzIhUHJAolWVcO1v5PUivxGKvfLZTLTVVxEYzGYyPsA3ivdLNqMnL5VgmQySa+g=="
+ },
+ "node_modules/@astrojs/language-server": {
+ "version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/@astrojs/language-server/-/language-server-2.10.0.tgz",
+ "integrity": "sha512-crHXpqYfA5qWioiuZnZFpTsNItgBlF1f0S9MzDYS7/pfCALkHNJ7K3w9U/j0uMKymsT4hC7BfMaX0DYlfdSzHg==",
+ "dependencies": {
+ "@astrojs/compiler": "^2.7.0",
+ "@jridgewell/sourcemap-codec": "^1.4.15",
+ "@volar/kit": "~2.2.3",
+ "@volar/language-core": "~2.2.3",
+ "@volar/language-server": "~2.2.3",
+ "@volar/language-service": "~2.2.3",
+ "@volar/typescript": "~2.2.3",
+ "fast-glob": "^3.2.12",
+ "volar-service-css": "0.0.45",
+ "volar-service-emmet": "0.0.45",
+ "volar-service-html": "0.0.45",
+ "volar-service-prettier": "0.0.45",
+ "volar-service-typescript": "0.0.45",
+ "volar-service-typescript-twoslash-queries": "0.0.45",
+ "vscode-html-languageservice": "^5.2.0",
+ "vscode-uri": "^3.0.8"
+ },
+ "bin": {
+ "astro-ls": "bin/nodeServer.js"
+ },
+ "peerDependencies": {
+ "prettier": "^3.0.0",
+ "prettier-plugin-astro": ">=0.11.0"
+ },
+ "peerDependenciesMeta": {
+ "prettier": {
+ "optional": true
+ },
+ "prettier-plugin-astro": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@astrojs/markdown-remark": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-5.1.1.tgz",
+ "integrity": "sha512-rkWWjR9jVo0LAMxQ2+T19RKbQUa7NwBGhFj03bAz3hGf3blqeBIXs1NSPpizshO5kZzcOqKe8OlG6XpYO8esHg==",
+ "dependencies": {
+ "@astrojs/prism": "3.1.0",
+ "github-slugger": "^2.0.0",
+ "hast-util-from-html": "^2.0.1",
+ "hast-util-to-text": "^4.0.2",
+ "import-meta-resolve": "^4.1.0",
+ "mdast-util-definitions": "^6.0.0",
+ "rehype-raw": "^7.0.0",
+ "rehype-stringify": "^10.0.0",
+ "remark-gfm": "^4.0.0",
+ "remark-parse": "^11.0.0",
+ "remark-rehype": "^11.1.0",
+ "remark-smartypants": "^3.0.1",
+ "shiki": "^1.9.0",
+ "unified": "^11.0.5",
+ "unist-util-remove-position": "^5.0.0",
+ "unist-util-visit": "^5.0.0",
+ "unist-util-visit-parents": "^6.0.1",
+ "vfile": "^6.0.1"
+ }
+ },
+ "node_modules/@astrojs/mdx": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@astrojs/mdx/-/mdx-3.1.2.tgz",
+ "integrity": "sha512-0EizCWhUi0wdYPm31kNOHsOrGmn8pEJy+YEGQlHWt4Flg2NYfV7nWZuYG8KxoRSK/W397vPhyHYrITCYo7JMYw==",
+ "dependencies": {
+ "@astrojs/markdown-remark": "5.1.1",
+ "@mdx-js/mdx": "^3.0.1",
+ "acorn": "^8.12.0",
+ "es-module-lexer": "^1.5.4",
+ "estree-util-visit": "^2.0.0",
+ "github-slugger": "^2.0.0",
+ "gray-matter": "^4.0.3",
+ "hast-util-to-html": "^9.0.1",
+ "kleur": "^4.1.5",
+ "rehype-raw": "^7.0.0",
+ "remark-gfm": "^4.0.0",
+ "remark-smartypants": "^3.0.1",
+ "source-map": "^0.7.4",
+ "unist-util-visit": "^5.0.0",
+ "vfile": "^6.0.1"
+ },
+ "engines": {
+ "node": "^18.17.1 || ^20.3.0 || >=21.0.0"
+ },
+ "peerDependencies": {
+ "astro": "^4.8.0"
+ }
+ },
+ "node_modules/@astrojs/prism": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-3.1.0.tgz",
+ "integrity": "sha512-Z9IYjuXSArkAUx3N6xj6+Bnvx8OdUSHA8YoOgyepp3+zJmtVYJIl/I18GozdJVW1p5u/CNpl3Km7/gwTJK85cw==",
+ "dependencies": {
+ "prismjs": "^1.29.0"
+ },
+ "engines": {
+ "node": "^18.17.1 || ^20.3.0 || >=21.0.0"
+ }
+ },
+ "node_modules/@astrojs/sitemap": {
+ "version": "3.1.6",
+ "resolved": "https://registry.npmjs.org/@astrojs/sitemap/-/sitemap-3.1.6.tgz",
+ "integrity": "sha512-1Qp2NvAzVImqA6y+LubKi1DVhve/hXXgFvB0szxiipzh7BvtuKe4oJJ9dXSqaubaTkt4nMa6dv6RCCAYeB6xaQ==",
+ "dependencies": {
+ "sitemap": "^7.1.2",
+ "stream-replace-string": "^2.0.0",
+ "zod": "^3.23.8"
+ }
+ },
+ "node_modules/@astrojs/starlight": {
+ "version": "0.24.5",
+ "resolved": "https://registry.npmjs.org/@astrojs/starlight/-/starlight-0.24.5.tgz",
+ "integrity": "sha512-DDI8NpLzk+ReBudhAV09OhO5DxD+KN4Nnp3YlG6kwn/F8fmywNTNgY7VW67Z8aad+A/85OOiQOtq9wIFNRy3YA==",
+ "dependencies": {
+ "@astrojs/mdx": "^3.1.0",
+ "@astrojs/sitemap": "^3.1.5",
+ "@pagefind/default-ui": "^1.0.3",
+ "@types/hast": "^3.0.4",
+ "@types/mdast": "^4.0.4",
+ "astro-expressive-code": "^0.35.3",
+ "bcp-47": "^2.1.0",
+ "hast-util-from-html": "^2.0.1",
+ "hast-util-select": "^6.0.2",
+ "hast-util-to-string": "^3.0.0",
+ "hastscript": "^9.0.0",
+ "mdast-util-directive": "^3.0.0",
+ "mdast-util-to-markdown": "^2.1.0",
+ "pagefind": "^1.0.3",
+ "rehype": "^13.0.1",
+ "rehype-format": "^5.0.0",
+ "remark-directive": "^3.0.0",
+ "unified": "^11.0.4",
+ "unist-util-visit": "^5.0.0",
+ "vfile": "^6.0.1"
+ },
+ "peerDependencies": {
+ "astro": "^4.8.6"
+ }
+ },
+ "node_modules/@astrojs/telemetry": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.1.0.tgz",
+ "integrity": "sha512-/ca/+D8MIKEC8/A9cSaPUqQNZm+Es/ZinRv0ZAzvu2ios7POQSsVD+VOj7/hypWNsNM3T7RpfgNq7H2TU1KEHA==",
+ "dependencies": {
+ "ci-info": "^4.0.0",
+ "debug": "^4.3.4",
+ "dlv": "^1.1.3",
+ "dset": "^3.1.3",
+ "is-docker": "^3.0.0",
+ "is-wsl": "^3.0.0",
+ "which-pm-runs": "^1.1.0"
+ },
+ "engines": {
+ "node": "^18.17.1 || ^20.3.0 || >=21.0.0"
+ }
+ },
+ "node_modules/@babel/code-frame": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz",
+ "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==",
+ "dependencies": {
+ "@babel/highlight": "^7.24.7",
+ "picocolors": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/compat-data": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.7.tgz",
+ "integrity": "sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/core": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.7.tgz",
+ "integrity": "sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==",
+ "dependencies": {
+ "@ampproject/remapping": "^2.2.0",
+ "@babel/code-frame": "^7.24.7",
+ "@babel/generator": "^7.24.7",
+ "@babel/helper-compilation-targets": "^7.24.7",
+ "@babel/helper-module-transforms": "^7.24.7",
+ "@babel/helpers": "^7.24.7",
+ "@babel/parser": "^7.24.7",
+ "@babel/template": "^7.24.7",
+ "@babel/traverse": "^7.24.7",
+ "@babel/types": "^7.24.7",
+ "convert-source-map": "^2.0.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.2",
+ "json5": "^2.2.3",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/babel"
+ }
+ },
+ "node_modules/@babel/core/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/@babel/generator": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz",
+ "integrity": "sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==",
+ "dependencies": {
+ "@babel/types": "^7.24.7",
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.25",
+ "jsesc": "^2.5.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-annotate-as-pure": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz",
+ "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==",
+ "dependencies": {
+ "@babel/types": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-compilation-targets": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.7.tgz",
+ "integrity": "sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==",
+ "dependencies": {
+ "@babel/compat-data": "^7.24.7",
+ "@babel/helper-validator-option": "^7.24.7",
+ "browserslist": "^4.22.2",
+ "lru-cache": "^5.1.1",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-compilation-targets/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/@babel/helper-environment-visitor": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz",
+ "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==",
+ "dependencies": {
+ "@babel/types": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-function-name": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz",
+ "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==",
+ "dependencies": {
+ "@babel/template": "^7.24.7",
+ "@babel/types": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-hoist-variables": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz",
+ "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==",
+ "dependencies": {
+ "@babel/types": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-module-imports": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz",
+ "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==",
+ "dependencies": {
+ "@babel/traverse": "^7.24.7",
+ "@babel/types": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-module-transforms": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.7.tgz",
+ "integrity": "sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==",
+ "dependencies": {
+ "@babel/helper-environment-visitor": "^7.24.7",
+ "@babel/helper-module-imports": "^7.24.7",
+ "@babel/helper-simple-access": "^7.24.7",
+ "@babel/helper-split-export-declaration": "^7.24.7",
+ "@babel/helper-validator-identifier": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/helper-plugin-utils": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.7.tgz",
+ "integrity": "sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-simple-access": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz",
+ "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==",
+ "dependencies": {
+ "@babel/traverse": "^7.24.7",
+ "@babel/types": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-split-export-declaration": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz",
+ "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==",
+ "dependencies": {
+ "@babel/types": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-string-parser": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz",
+ "integrity": "sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz",
+ "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-option": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz",
+ "integrity": "sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helpers": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.7.tgz",
+ "integrity": "sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==",
+ "dependencies": {
+ "@babel/template": "^7.24.7",
+ "@babel/types": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/highlight": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz",
+ "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==",
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.24.7",
+ "chalk": "^2.4.2",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/parser": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz",
+ "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==",
+ "bin": {
+ "parser": "bin/babel-parser.js"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-jsx": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz",
+ "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-react-jsx": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.24.7.tgz",
+ "integrity": "sha512-+Dj06GDZEFRYvclU6k4bme55GKBEWUmByM/eoKuqg4zTNQHiApWRhQph5fxQB2wAEFvRzL1tOEj1RJ19wJrhoA==",
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.24.7",
+ "@babel/helper-module-imports": "^7.24.7",
+ "@babel/helper-plugin-utils": "^7.24.7",
+ "@babel/plugin-syntax-jsx": "^7.24.7",
+ "@babel/types": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/template": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz",
+ "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==",
+ "dependencies": {
+ "@babel/code-frame": "^7.24.7",
+ "@babel/parser": "^7.24.7",
+ "@babel/types": "^7.24.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/traverse": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz",
+ "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==",
+ "dependencies": {
+ "@babel/code-frame": "^7.24.7",
+ "@babel/generator": "^7.24.7",
+ "@babel/helper-environment-visitor": "^7.24.7",
+ "@babel/helper-function-name": "^7.24.7",
+ "@babel/helper-hoist-variables": "^7.24.7",
+ "@babel/helper-split-export-declaration": "^7.24.7",
+ "@babel/parser": "^7.24.7",
+ "@babel/types": "^7.24.7",
+ "debug": "^4.3.1",
+ "globals": "^11.1.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/types": {
+ "version": "7.24.7",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.7.tgz",
+ "integrity": "sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==",
+ "dependencies": {
+ "@babel/helper-string-parser": "^7.24.7",
+ "@babel/helper-validator-identifier": "^7.24.7",
+ "to-fast-properties": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@ctrl/tinycolor": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-4.1.0.tgz",
+ "integrity": "sha512-WyOx8cJQ+FQus4Mm4uPIZA64gbk3Wxh0so5Lcii0aJifqwoVOlfFtorjLE0Hen4OYyHZMXDWqMmaQemBhgxFRQ==",
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@emmetio/abbreviation": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/@emmetio/abbreviation/-/abbreviation-2.3.3.tgz",
+ "integrity": "sha512-mgv58UrU3rh4YgbE/TzgLQwJ3pFsHHhCLqY20aJq+9comytTXUDNGG/SMtSeMJdkpxgXSXunBGLD8Boka3JyVA==",
+ "dependencies": {
+ "@emmetio/scanner": "^1.0.4"
+ }
+ },
+ "node_modules/@emmetio/css-abbreviation": {
+ "version": "2.1.8",
+ "resolved": "https://registry.npmjs.org/@emmetio/css-abbreviation/-/css-abbreviation-2.1.8.tgz",
+ "integrity": "sha512-s9yjhJ6saOO/uk1V74eifykk2CBYi01STTK3WlXWGOepyKa23ymJ053+DNQjpFcy1ingpaO7AxCcwLvHFY9tuw==",
+ "dependencies": {
+ "@emmetio/scanner": "^1.0.4"
+ }
+ },
+ "node_modules/@emmetio/css-parser": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/@emmetio/css-parser/-/css-parser-0.4.0.tgz",
+ "integrity": "sha512-z7wkxRSZgrQHXVzObGkXG+Vmj3uRlpM11oCZ9pbaz0nFejvCDmAiNDpY75+wgXOcffKpj4rzGtwGaZxfJKsJxw==",
+ "dependencies": {
+ "@emmetio/stream-reader": "^2.2.0",
+ "@emmetio/stream-reader-utils": "^0.1.0"
+ }
+ },
+ "node_modules/@emmetio/html-matcher": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@emmetio/html-matcher/-/html-matcher-1.3.0.tgz",
+ "integrity": "sha512-NTbsvppE5eVyBMuyGfVu2CRrLvo7J4YHb6t9sBFLyY03WYhXET37qA4zOYUjBWFCRHO7pS1B9khERtY0f5JXPQ==",
+ "dependencies": {
+ "@emmetio/scanner": "^1.0.0"
+ }
+ },
+ "node_modules/@emmetio/scanner": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@emmetio/scanner/-/scanner-1.0.4.tgz",
+ "integrity": "sha512-IqRuJtQff7YHHBk4G8YZ45uB9BaAGcwQeVzgj/zj8/UdOhtQpEIupUhSk8dys6spFIWVZVeK20CzGEnqR5SbqA=="
+ },
+ "node_modules/@emmetio/stream-reader": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/@emmetio/stream-reader/-/stream-reader-2.2.0.tgz",
+ "integrity": "sha512-fXVXEyFA5Yv3M3n8sUGT7+fvecGrZP4k6FnWWMSZVQf69kAq0LLpaBQLGcPR30m3zMmKYhECP4k/ZkzvhEW5kw=="
+ },
+ "node_modules/@emmetio/stream-reader-utils": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/@emmetio/stream-reader-utils/-/stream-reader-utils-0.1.0.tgz",
+ "integrity": "sha512-ZsZ2I9Vzso3Ho/pjZFsmmZ++FWeEd/txqybHTm4OgaZzdS8V9V/YYWQwg5TC38Z7uLWUV1vavpLLbjJtKubR1A=="
+ },
+ "node_modules/@emnapi/runtime": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.2.0.tgz",
+ "integrity": "sha512-bV21/9LQmcQeCPEg3BDFtvwL6cwiTMksYNWQQ4KOxCZikEGalWtenoZ0wCiukJINlGCIi2KXx01g4FoH/LxpzQ==",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz",
+ "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz",
+ "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==",
+ "cpu": [
+ "arm"
+ ],
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz",
+ "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz",
+ "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz",
+ "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz",
+ "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz",
+ "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz",
+ "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz",
+ "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==",
+ "cpu": [
+ "arm"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz",
+ "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz",
+ "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==",
+ "cpu": [
+ "ia32"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz",
+ "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==",
+ "cpu": [
+ "loong64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz",
+ "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==",
+ "cpu": [
+ "mips64el"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz",
+ "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==",
+ "cpu": [
+ "ppc64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz",
+ "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==",
+ "cpu": [
+ "riscv64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz",
+ "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==",
+ "cpu": [
+ "s390x"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz",
+ "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz",
+ "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz",
+ "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz",
+ "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz",
+ "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz",
+ "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==",
+ "cpu": [
+ "ia32"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz",
+ "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@expressive-code/core": {
+ "version": "0.35.3",
+ "resolved": "https://registry.npmjs.org/@expressive-code/core/-/core-0.35.3.tgz",
+ "integrity": "sha512-SYamcarAjufYhbuK/kfvJSvAXLsfnM7DKc78R7Dq4B73R5bKQK2m5zR0l57tXr4yp2C5Z8lu5xZncdwWxcmPdg==",
+ "dependencies": {
+ "@ctrl/tinycolor": "^4.0.4",
+ "hast-util-select": "^6.0.2",
+ "hast-util-to-html": "^9.0.1",
+ "hast-util-to-text": "^4.0.1",
+ "hastscript": "^9.0.0",
+ "postcss": "^8.4.38",
+ "postcss-nested": "^6.0.1",
+ "unist-util-visit": "^5.0.0",
+ "unist-util-visit-parents": "^6.0.1"
+ }
+ },
+ "node_modules/@expressive-code/plugin-frames": {
+ "version": "0.35.3",
+ "resolved": "https://registry.npmjs.org/@expressive-code/plugin-frames/-/plugin-frames-0.35.3.tgz",
+ "integrity": "sha512-QYytMq6IsaHgTofQ5b6d+CnbxkqLdikSF2hC+IL/ZZwPYHYZoUlmjIwmJZhY4/hHqJGELrtZsyVdlt06RntgmA==",
+ "dependencies": {
+ "@expressive-code/core": "^0.35.3"
+ }
+ },
+ "node_modules/@expressive-code/plugin-shiki": {
+ "version": "0.35.3",
+ "resolved": "https://registry.npmjs.org/@expressive-code/plugin-shiki/-/plugin-shiki-0.35.3.tgz",
+ "integrity": "sha512-aFQBPepv0zhVXqJFAvfQ4vXYv/meJKiqmEEKSxdjAfwXllIV49PDlnGEXmbGYjR4hUQQjbfDgzAbrbfePc3YVQ==",
+ "dependencies": {
+ "@expressive-code/core": "^0.35.3",
+ "shiki": "^1.1.7"
+ }
+ },
+ "node_modules/@expressive-code/plugin-text-markers": {
+ "version": "0.35.3",
+ "resolved": "https://registry.npmjs.org/@expressive-code/plugin-text-markers/-/plugin-text-markers-0.35.3.tgz",
+ "integrity": "sha512-gDdnQrfDRXw5Y+PKHJDkpAUdf2pthYOthGcgy3JB8GOTQ3EL1h+755Ct/bGc4MR6jn+dgnQP47uHMWQaccvN6Q==",
+ "dependencies": {
+ "@expressive-code/core": "^0.35.3"
+ }
+ },
+ "node_modules/@img/sharp-darwin-arm64": {
+ "version": "0.33.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.4.tgz",
+ "integrity": "sha512-p0suNqXufJs9t3RqLBO6vvrgr5OhgbWp76s5gTRvdmxmuv9E1rcaqGUsl3l4mKVmXPkTkTErXediAui4x+8PSA==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "glibc": ">=2.26",
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0",
+ "npm": ">=9.6.5",
+ "pnpm": ">=7.1.0",
+ "yarn": ">=3.2.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-darwin-arm64": "1.0.2"
+ }
+ },
+ "node_modules/@img/sharp-darwin-x64": {
+ "version": "0.33.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.4.tgz",
+ "integrity": "sha512-0l7yRObwtTi82Z6ebVI2PnHT8EB2NxBgpK2MiKJZJ7cz32R4lxd001ecMhzzsZig3Yv9oclvqqdV93jo9hy+Dw==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "glibc": ">=2.26",
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0",
+ "npm": ">=9.6.5",
+ "pnpm": ">=7.1.0",
+ "yarn": ">=3.2.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-darwin-x64": "1.0.2"
+ }
+ },
+ "node_modules/@img/sharp-libvips-darwin-arm64": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.2.tgz",
+ "integrity": "sha512-tcK/41Rq8IKlSaKRCCAuuY3lDJjQnYIW1UXU1kxcEKrfL8WR7N6+rzNoOxoQRJWTAECuKwgAHnPvqXGN8XfkHA==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "macos": ">=11",
+ "npm": ">=9.6.5",
+ "pnpm": ">=7.1.0",
+ "yarn": ">=3.2.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-darwin-x64": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.2.tgz",
+ "integrity": "sha512-Ofw+7oaWa0HiiMiKWqqaZbaYV3/UGL2wAPeLuJTx+9cXpCRdvQhCLG0IH8YGwM0yGWGLpsF4Su9vM1o6aer+Fw==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "macos": ">=10.13",
+ "npm": ">=9.6.5",
+ "pnpm": ">=7.1.0",
+ "yarn": ">=3.2.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linux-arm": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.2.tgz",
+ "integrity": "sha512-iLWCvrKgeFoglQxdEwzu1eQV04o8YeYGFXtfWU26Zr2wWT3q3MTzC+QTCO3ZQfWd3doKHT4Pm2kRmLbupT+sZw==",
+ "cpu": [
+ "arm"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "glibc": ">=2.28",
+ "npm": ">=9.6.5",
+ "pnpm": ">=7.1.0",
+ "yarn": ">=3.2.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linux-arm64": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.2.tgz",
+ "integrity": "sha512-x7kCt3N00ofFmmkkdshwj3vGPCnmiDh7Gwnd4nUwZln2YjqPxV1NlTyZOvoDWdKQVDL911487HOueBvrpflagw==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "glibc": ">=2.26",
+ "npm": ">=9.6.5",
+ "pnpm": ">=7.1.0",
+ "yarn": ">=3.2.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linux-s390x": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.2.tgz",
+ "integrity": "sha512-cmhQ1J4qVhfmS6szYW7RT+gLJq9dH2i4maq+qyXayUSn9/3iY2ZeWpbAgSpSVbV2E1JUL2Gg7pwnYQ1h8rQIog==",
+ "cpu": [
+ "s390x"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "glibc": ">=2.28",
+ "npm": ">=9.6.5",
+ "pnpm": ">=7.1.0",
+ "yarn": ">=3.2.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linux-x64": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.2.tgz",
+ "integrity": "sha512-E441q4Qdb+7yuyiADVi5J+44x8ctlrqn8XgkDTwr4qPJzWkaHwD489iZ4nGDgcuya4iMN3ULV6NwbhRZJ9Z7SQ==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "glibc": ">=2.26",
+ "npm": ">=9.6.5",
+ "pnpm": ">=7.1.0",
+ "yarn": ">=3.2.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linuxmusl-arm64": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.2.tgz",
+ "integrity": "sha512-3CAkndNpYUrlDqkCM5qhksfE+qSIREVpyoeHIU6jd48SJZViAmznoQQLAv4hVXF7xyUB9zf+G++e2v1ABjCbEQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "musl": ">=1.2.2",
+ "npm": ">=9.6.5",
+ "pnpm": ">=7.1.0",
+ "yarn": ">=3.2.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linuxmusl-x64": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.2.tgz",
+ "integrity": "sha512-VI94Q6khIHqHWNOh6LLdm9s2Ry4zdjWJwH56WoiJU7NTeDwyApdZZ8c+SADC8OH98KWNQXnE01UdJ9CSfZvwZw==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "musl": ">=1.2.2",
+ "npm": ">=9.6.5",
+ "pnpm": ">=7.1.0",
+ "yarn": ">=3.2.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-linux-arm": {
+ "version": "0.33.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.4.tgz",
+ "integrity": "sha512-RUgBD1c0+gCYZGCCe6mMdTiOFS0Zc/XrN0fYd6hISIKcDUbAW5NtSQW9g/powkrXYm6Vzwd6y+fqmExDuCdHNQ==",
+ "cpu": [
+ "arm"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "glibc": ">=2.28",
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0",
+ "npm": ">=9.6.5",
+ "pnpm": ">=7.1.0",
+ "yarn": ">=3.2.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-arm": "1.0.2"
+ }
+ },
+ "node_modules/@img/sharp-linux-arm64": {
+ "version": "0.33.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.4.tgz",
+ "integrity": "sha512-2800clwVg1ZQtxwSoTlHvtm9ObgAax7V6MTAB/hDT945Tfyy3hVkmiHpeLPCKYqYR1Gcmv1uDZ3a4OFwkdBL7Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "glibc": ">=2.26",
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0",
+ "npm": ">=9.6.5",
+ "pnpm": ">=7.1.0",
+ "yarn": ">=3.2.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-arm64": "1.0.2"
+ }
+ },
+ "node_modules/@img/sharp-linux-s390x": {
+ "version": "0.33.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.4.tgz",
+ "integrity": "sha512-h3RAL3siQoyzSoH36tUeS0PDmb5wINKGYzcLB5C6DIiAn2F3udeFAum+gj8IbA/82+8RGCTn7XW8WTFnqag4tQ==",
+ "cpu": [
+ "s390x"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "glibc": ">=2.31",
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0",
+ "npm": ">=9.6.5",
+ "pnpm": ">=7.1.0",
+ "yarn": ">=3.2.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-s390x": "1.0.2"
+ }
+ },
+ "node_modules/@img/sharp-linux-x64": {
+ "version": "0.33.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.4.tgz",
+ "integrity": "sha512-GoR++s0XW9DGVi8SUGQ/U4AeIzLdNjHka6jidVwapQ/JebGVQIpi52OdyxCNVRE++n1FCLzjDovJNozif7w/Aw==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "glibc": ">=2.26",
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0",
+ "npm": ">=9.6.5",
+ "pnpm": ">=7.1.0",
+ "yarn": ">=3.2.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-x64": "1.0.2"
+ }
+ },
+ "node_modules/@img/sharp-linuxmusl-arm64": {
+ "version": "0.33.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.4.tgz",
+ "integrity": "sha512-nhr1yC3BlVrKDTl6cO12gTpXMl4ITBUZieehFvMntlCXFzH2bvKG76tBL2Y/OqhupZt81pR7R+Q5YhJxW0rGgQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "musl": ">=1.2.2",
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0",
+ "npm": ">=9.6.5",
+ "pnpm": ">=7.1.0",
+ "yarn": ">=3.2.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linuxmusl-arm64": "1.0.2"
+ }
+ },
+ "node_modules/@img/sharp-linuxmusl-x64": {
+ "version": "0.33.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.4.tgz",
+ "integrity": "sha512-uCPTku0zwqDmZEOi4ILyGdmW76tH7dm8kKlOIV1XC5cLyJ71ENAAqarOHQh0RLfpIpbV5KOpXzdU6XkJtS0daw==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "musl": ">=1.2.2",
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0",
+ "npm": ">=9.6.5",
+ "pnpm": ">=7.1.0",
+ "yarn": ">=3.2.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linuxmusl-x64": "1.0.2"
+ }
+ },
+ "node_modules/@img/sharp-wasm32": {
+ "version": "0.33.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.4.tgz",
+ "integrity": "sha512-Bmmauh4sXUsUqkleQahpdNXKvo+wa1V9KhT2pDA4VJGKwnKMJXiSTGphn0gnJrlooda0QxCtXc6RX1XAU6hMnQ==",
+ "cpu": [
+ "wasm32"
+ ],
+ "optional": true,
+ "dependencies": {
+ "@emnapi/runtime": "^1.1.1"
+ },
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0",
+ "npm": ">=9.6.5",
+ "pnpm": ">=7.1.0",
+ "yarn": ">=3.2.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-win32-ia32": {
+ "version": "0.33.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.4.tgz",
+ "integrity": "sha512-99SJ91XzUhYHbx7uhK3+9Lf7+LjwMGQZMDlO/E/YVJ7Nc3lyDFZPGhjwiYdctoH2BOzW9+TnfqcaMKt0jHLdqw==",
+ "cpu": [
+ "ia32"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0",
+ "npm": ">=9.6.5",
+ "pnpm": ">=7.1.0",
+ "yarn": ">=3.2.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-win32-x64": {
+ "version": "0.33.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.4.tgz",
+ "integrity": "sha512-3QLocdTRVIrFNye5YocZl+KKpYKP+fksi1QhmOArgx7GyhIbQp/WrJRu176jm8IxromS7RIkzMiMINVdBtC8Aw==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0",
+ "npm": ">=9.6.5",
+ "pnpm": ">=7.1.0",
+ "yarn": ">=3.2.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
+ "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
+ "dependencies": {
+ "@jridgewell/set-array": "^1.2.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/set-array": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
+ "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.4.15",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
+ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.25",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
+ "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
+ }
+ },
+ "node_modules/@mdx-js/mdx": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.0.1.tgz",
+ "integrity": "sha512-eIQ4QTrOWyL3LWEe/bu6Taqzq2HQvHcyTMaOrI95P2/LmJE7AsfPfgJGuFLPVqBUE1BC1rik3VIhU+s9u72arA==",
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "@types/estree-jsx": "^1.0.0",
+ "@types/hast": "^3.0.0",
+ "@types/mdx": "^2.0.0",
+ "collapse-white-space": "^2.0.0",
+ "devlop": "^1.0.0",
+ "estree-util-build-jsx": "^3.0.0",
+ "estree-util-is-identifier-name": "^3.0.0",
+ "estree-util-to-js": "^2.0.0",
+ "estree-walker": "^3.0.0",
+ "hast-util-to-estree": "^3.0.0",
+ "hast-util-to-jsx-runtime": "^2.0.0",
+ "markdown-extensions": "^2.0.0",
+ "periscopic": "^3.0.0",
+ "remark-mdx": "^3.0.0",
+ "remark-parse": "^11.0.0",
+ "remark-rehype": "^11.0.0",
+ "source-map": "^0.7.0",
+ "unified": "^11.0.0",
+ "unist-util-position-from-estree": "^2.0.0",
+ "unist-util-stringify-position": "^4.0.0",
+ "unist-util-visit": "^5.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@pagefind/darwin-arm64": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@pagefind/darwin-arm64/-/darwin-arm64-1.1.0.tgz",
+ "integrity": "sha512-SLsXNLtSilGZjvqis8sX42fBWsWAVkcDh1oerxwqbac84HbiwxpxOC2jm8hRwcR0Z55HPZPWO77XeRix/8GwTg==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@pagefind/darwin-x64": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@pagefind/darwin-x64/-/darwin-x64-1.1.0.tgz",
+ "integrity": "sha512-QjQSE/L5oS1C8N8GdljGaWtjCBMgMtfrPAoiCmINTu9Y9dp0ggAyXvF8K7Qg3VyIMYJ6v8vg2PN7Z3b+AaAqUA==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@pagefind/default-ui": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@pagefind/default-ui/-/default-ui-1.1.0.tgz",
+ "integrity": "sha512-+XiAJAK++C64nQcD7s3Prdmd5S92lT05fwjOxm0L1jj80jbL+tmvcqkkFnPpoqhnicIPgcAX/Y5W0HRZnBt35w=="
+ },
+ "node_modules/@pagefind/linux-arm64": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@pagefind/linux-arm64/-/linux-arm64-1.1.0.tgz",
+ "integrity": "sha512-8zjYCa2BtNEL7KnXtysPtBELCyv5DSQ4yHeK/nsEq6w4ToAMTBl0K06khqxdSGgjMSwwrxvLzq3so0LC5Q14dA==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@pagefind/linux-x64": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@pagefind/linux-x64/-/linux-x64-1.1.0.tgz",
+ "integrity": "sha512-4lsg6VB7A6PWTwaP8oSmXV4O9H0IHX7AlwTDcfyT+YJo/sPXOVjqycD5cdBgqNLfUk8B9bkWcTDCRmJbHrKeCw==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@pagefind/windows-x64": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@pagefind/windows-x64/-/windows-x64-1.1.0.tgz",
+ "integrity": "sha512-OboCM76BcMKT9IoSfZuFhiqMRgTde8x4qDDvKulFmycgiJrlL5WnIqBHJLQxZq+o2KyZpoHF97iwsGAm8c32sQ==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-android-arm-eabi": {
+ "version": "4.18.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz",
+ "integrity": "sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==",
+ "cpu": [
+ "arm"
+ ],
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-android-arm64": {
+ "version": "4.18.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz",
+ "integrity": "sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-arm64": {
+ "version": "4.18.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz",
+ "integrity": "sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-x64": {
+ "version": "4.18.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz",
+ "integrity": "sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+ "version": "4.18.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz",
+ "integrity": "sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==",
+ "cpu": [
+ "arm"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-musleabihf": {
+ "version": "4.18.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz",
+ "integrity": "sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==",
+ "cpu": [
+ "arm"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-gnu": {
+ "version": "4.18.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz",
+ "integrity": "sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-musl": {
+ "version": "4.18.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz",
+ "integrity": "sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
+ "version": "4.18.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz",
+ "integrity": "sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-gnu": {
+ "version": "4.18.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz",
+ "integrity": "sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==",
+ "cpu": [
+ "riscv64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-s390x-gnu": {
+ "version": "4.18.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz",
+ "integrity": "sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==",
+ "cpu": [
+ "s390x"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
+ "version": "4.18.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz",
+ "integrity": "sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-musl": {
+ "version": "4.18.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz",
+ "integrity": "sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-arm64-msvc": {
+ "version": "4.18.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz",
+ "integrity": "sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-ia32-msvc": {
+ "version": "4.18.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz",
+ "integrity": "sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==",
+ "cpu": [
+ "ia32"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
+ "version": "4.18.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz",
+ "integrity": "sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@shikijs/core": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.10.0.tgz",
+ "integrity": "sha512-BZcr6FCmPfP6TXaekvujZcnkFmJHZ/Yglu97r/9VjzVndQA56/F4WjUKtJRQUnK59Wi7p/UTAOekMfCJv7jnYg=="
+ },
+ "node_modules/@types/acorn": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz",
+ "integrity": "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==",
+ "dependencies": {
+ "@types/estree": "*"
+ }
+ },
+ "node_modules/@types/babel__core": {
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
+ "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
+ "dependencies": {
+ "@babel/parser": "^7.20.7",
+ "@babel/types": "^7.20.7",
+ "@types/babel__generator": "*",
+ "@types/babel__template": "*",
+ "@types/babel__traverse": "*"
+ }
+ },
+ "node_modules/@types/babel__generator": {
+ "version": "7.6.8",
+ "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz",
+ "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==",
+ "dependencies": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "node_modules/@types/babel__template": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz",
+ "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==",
+ "dependencies": {
+ "@babel/parser": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "node_modules/@types/babel__traverse": {
+ "version": "7.20.6",
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz",
+ "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==",
+ "dependencies": {
+ "@babel/types": "^7.20.7"
+ }
+ },
+ "node_modules/@types/cookie": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz",
+ "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA=="
+ },
+ "node_modules/@types/debug": {
+ "version": "4.1.12",
+ "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz",
+ "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==",
+ "dependencies": {
+ "@types/ms": "*"
+ }
+ },
+ "node_modules/@types/estree": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
+ "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw=="
+ },
+ "node_modules/@types/estree-jsx": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz",
+ "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==",
+ "dependencies": {
+ "@types/estree": "*"
+ }
+ },
+ "node_modules/@types/hast": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz",
+ "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==",
+ "dependencies": {
+ "@types/unist": "*"
+ }
+ },
+ "node_modules/@types/mdast": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
+ "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
+ "dependencies": {
+ "@types/unist": "*"
+ }
+ },
+ "node_modules/@types/mdx": {
+ "version": "2.0.13",
+ "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz",
+ "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw=="
+ },
+ "node_modules/@types/ms": {
+ "version": "0.7.34",
+ "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz",
+ "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g=="
+ },
+ "node_modules/@types/nlcst": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@types/nlcst/-/nlcst-2.0.3.tgz",
+ "integrity": "sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==",
+ "dependencies": {
+ "@types/unist": "*"
+ }
+ },
+ "node_modules/@types/node": {
+ "version": "20.14.9",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.9.tgz",
+ "integrity": "sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==",
+ "dependencies": {
+ "undici-types": "~5.26.4"
+ }
+ },
+ "node_modules/@types/sax": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.7.tgz",
+ "integrity": "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==",
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/unist": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
+ "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
+ },
+ "node_modules/@ungap/structured-clone": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
+ "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ=="
+ },
+ "node_modules/@volar/kit": {
+ "version": "2.2.5",
+ "resolved": "https://registry.npmjs.org/@volar/kit/-/kit-2.2.5.tgz",
+ "integrity": "sha512-Bmn0UCaT43xUGGRwcmFG9lKhiCCLjRT4ScSLLPn5C9ltUcSGnIFFDlbZZa1PreHYHq25/4zkXt9Ap32klAh17w==",
+ "dependencies": {
+ "@volar/language-service": "2.2.5",
+ "@volar/typescript": "2.2.5",
+ "typesafe-path": "^0.2.2",
+ "vscode-languageserver-textdocument": "^1.0.11",
+ "vscode-uri": "^3.0.8"
+ },
+ "peerDependencies": {
+ "typescript": "*"
+ }
+ },
+ "node_modules/@volar/language-core": {
+ "version": "2.2.5",
+ "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.2.5.tgz",
+ "integrity": "sha512-2htyAuxRrAgETmFeUhT4XLELk3LiEcqoW/B8YUXMF6BrGWLMwIR09MFaZYvrA2UhbdAeSyeQ726HaWSWkexUcQ==",
+ "dependencies": {
+ "@volar/source-map": "2.2.5"
+ }
+ },
+ "node_modules/@volar/language-server": {
+ "version": "2.2.5",
+ "resolved": "https://registry.npmjs.org/@volar/language-server/-/language-server-2.2.5.tgz",
+ "integrity": "sha512-PV/jkUkI+m72HTXwnY7hsGqLY3VNi96ZRoWFRzVC9QG/853bixxjveXPJIiydMJ9I739lO3kcj3hnGrF5Sm+HA==",
+ "dependencies": {
+ "@volar/language-core": "2.2.5",
+ "@volar/language-service": "2.2.5",
+ "@volar/snapshot-document": "2.2.5",
+ "@volar/typescript": "2.2.5",
+ "@vscode/l10n": "^0.0.16",
+ "path-browserify": "^1.0.1",
+ "request-light": "^0.7.0",
+ "vscode-languageserver": "^9.0.1",
+ "vscode-languageserver-protocol": "^3.17.5",
+ "vscode-languageserver-textdocument": "^1.0.11",
+ "vscode-uri": "^3.0.8"
+ }
+ },
+ "node_modules/@volar/language-service": {
+ "version": "2.2.5",
+ "resolved": "https://registry.npmjs.org/@volar/language-service/-/language-service-2.2.5.tgz",
+ "integrity": "sha512-a97e/0uCe+uSu23F4zvgvldqJtZe6jugQeEHWjTfhgOEO8+Be0t5CZNNVItQqmPyAsD8eElg0S/cP6uxvCmCSQ==",
+ "dependencies": {
+ "@volar/language-core": "2.2.5",
+ "vscode-languageserver-protocol": "^3.17.5",
+ "vscode-languageserver-textdocument": "^1.0.11",
+ "vscode-uri": "^3.0.8"
+ }
+ },
+ "node_modules/@volar/snapshot-document": {
+ "version": "2.2.5",
+ "resolved": "https://registry.npmjs.org/@volar/snapshot-document/-/snapshot-document-2.2.5.tgz",
+ "integrity": "sha512-MTOvWVKxM7ugKO3Amffkv2pND03fe2JtfygYaputqjVFML7YxtTXj8SPnI2pODLeSwOKzDYL6Q8r5j6Y5AgUzQ==",
+ "dependencies": {
+ "vscode-languageserver-protocol": "^3.17.5",
+ "vscode-languageserver-textdocument": "^1.0.11"
+ }
+ },
+ "node_modules/@volar/source-map": {
+ "version": "2.2.5",
+ "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.2.5.tgz",
+ "integrity": "sha512-wrOEIiZNf4E+PWB0AxyM4tfhkfldPsb3bxg8N6FHrxJH2ohar7aGu48e98bp3pR9HUA7P/pR9VrLmkTrgCCnWQ==",
+ "dependencies": {
+ "muggle-string": "^0.4.0"
+ }
+ },
+ "node_modules/@volar/typescript": {
+ "version": "2.2.5",
+ "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.2.5.tgz",
+ "integrity": "sha512-eSV/n75+ppfEVugMC/salZsI44nXDPAyL6+iTYCNLtiLHGJsnMv9GwiDMujrvAUj/aLQyqRJgYtXRoxop2clCw==",
+ "dependencies": {
+ "@volar/language-core": "2.2.5",
+ "path-browserify": "^1.0.1"
+ }
+ },
+ "node_modules/@vscode/emmet-helper": {
+ "version": "2.9.3",
+ "resolved": "https://registry.npmjs.org/@vscode/emmet-helper/-/emmet-helper-2.9.3.tgz",
+ "integrity": "sha512-rB39LHWWPQYYlYfpv9qCoZOVioPCftKXXqrsyqN1mTWZM6dTnONT63Db+03vgrBbHzJN45IrgS/AGxw9iiqfEw==",
+ "dependencies": {
+ "emmet": "^2.4.3",
+ "jsonc-parser": "^2.3.0",
+ "vscode-languageserver-textdocument": "^1.0.1",
+ "vscode-languageserver-types": "^3.15.1",
+ "vscode-uri": "^2.1.2"
+ }
+ },
+ "node_modules/@vscode/emmet-helper/node_modules/vscode-uri": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-2.1.2.tgz",
+ "integrity": "sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A=="
+ },
+ "node_modules/@vscode/l10n": {
+ "version": "0.0.16",
+ "resolved": "https://registry.npmjs.org/@vscode/l10n/-/l10n-0.0.16.tgz",
+ "integrity": "sha512-JT5CvrIYYCrmB+dCana8sUqJEcGB1ZDXNLMQ2+42bW995WmNoenijWMUdZfwmuQUTQcEVVIa2OecZzTYWUW9Cg=="
+ },
+ "node_modules/acorn": {
+ "version": "8.12.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.0.tgz",
+ "integrity": "sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/ansi-align": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz",
+ "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==",
+ "dependencies": {
+ "string-width": "^4.1.0"
+ }
+ },
+ "node_modules/ansi-align/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-align/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+ },
+ "node_modules/ansi-align/node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-align/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+ "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/arg": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
+ "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
+ },
+ "node_modules/aria-query": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz",
+ "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==",
+ "dependencies": {
+ "dequal": "^2.0.3"
+ }
+ },
+ "node_modules/array-iterate": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/array-iterate/-/array-iterate-2.0.1.tgz",
+ "integrity": "sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/astring": {
+ "version": "1.8.6",
+ "resolved": "https://registry.npmjs.org/astring/-/astring-1.8.6.tgz",
+ "integrity": "sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==",
+ "bin": {
+ "astring": "bin/astring"
+ }
+ },
+ "node_modules/astro": {
+ "version": "4.11.3",
+ "resolved": "https://registry.npmjs.org/astro/-/astro-4.11.3.tgz",
+ "integrity": "sha512-SuZbB/71XVn+WqWNCe7XOfHuqhS+k4gj8+A3wluTZQrORGaHUFRn/f8F9Tu5yESQZB1q8UKhahvHwkTV3AdVsg==",
+ "dependencies": {
+ "@astrojs/compiler": "^2.8.1",
+ "@astrojs/internal-helpers": "0.4.1",
+ "@astrojs/markdown-remark": "5.1.1",
+ "@astrojs/telemetry": "3.1.0",
+ "@babel/core": "^7.24.7",
+ "@babel/generator": "^7.24.7",
+ "@babel/parser": "^7.24.7",
+ "@babel/plugin-transform-react-jsx": "^7.24.7",
+ "@babel/traverse": "^7.24.7",
+ "@babel/types": "^7.24.7",
+ "@types/babel__core": "^7.20.5",
+ "@types/cookie": "^0.6.0",
+ "acorn": "^8.12.0",
+ "aria-query": "^5.3.0",
+ "axobject-query": "^4.0.0",
+ "boxen": "^7.1.1",
+ "chokidar": "^3.6.0",
+ "ci-info": "^4.0.0",
+ "clsx": "^2.1.1",
+ "common-ancestor-path": "^1.0.1",
+ "cookie": "^0.6.0",
+ "cssesc": "^3.0.0",
+ "debug": "^4.3.5",
+ "deterministic-object-hash": "^2.0.2",
+ "devalue": "^5.0.0",
+ "diff": "^5.2.0",
+ "dlv": "^1.1.3",
+ "dset": "^3.1.3",
+ "es-module-lexer": "^1.5.4",
+ "esbuild": "^0.21.5",
+ "estree-walker": "^3.0.3",
+ "execa": "^8.0.1",
+ "fast-glob": "^3.3.2",
+ "flattie": "^1.1.1",
+ "github-slugger": "^2.0.0",
+ "gray-matter": "^4.0.3",
+ "html-escaper": "^3.0.3",
+ "http-cache-semantics": "^4.1.1",
+ "js-yaml": "^4.1.0",
+ "kleur": "^4.1.5",
+ "magic-string": "^0.30.10",
+ "mrmime": "^2.0.0",
+ "ora": "^8.0.1",
+ "p-limit": "^5.0.0",
+ "p-queue": "^8.0.1",
+ "path-to-regexp": "^6.2.2",
+ "preferred-pm": "^3.1.3",
+ "prompts": "^2.4.2",
+ "rehype": "^13.0.1",
+ "semver": "^7.6.2",
+ "shiki": "^1.9.0",
+ "string-width": "^7.1.0",
+ "strip-ansi": "^7.1.0",
+ "tsconfck": "^3.1.0",
+ "unist-util-visit": "^5.0.0",
+ "vfile": "^6.0.1",
+ "vite": "^5.3.1",
+ "vitefu": "^0.2.5",
+ "which-pm": "^2.2.0",
+ "yargs-parser": "^21.1.1",
+ "zod": "^3.23.8",
+ "zod-to-json-schema": "^3.23.1"
+ },
+ "bin": {
+ "astro": "astro.js"
+ },
+ "engines": {
+ "node": "^18.17.1 || ^20.3.0 || >=21.0.0",
+ "npm": ">=9.6.5",
+ "pnpm": ">=7.1.0"
+ },
+ "optionalDependencies": {
+ "sharp": "^0.33.3"
+ }
+ },
+ "node_modules/astro-expressive-code": {
+ "version": "0.35.3",
+ "resolved": "https://registry.npmjs.org/astro-expressive-code/-/astro-expressive-code-0.35.3.tgz",
+ "integrity": "sha512-f1L1m3J3EzZHDEox6TXmuKo5fTSbaNxE/HU0S0UQmvlCowtOKnU/LOsoDwsbQSYGKz+fdLRPsCjFMiKqEoyfcw==",
+ "dependencies": {
+ "rehype-expressive-code": "^0.35.3"
+ },
+ "peerDependencies": {
+ "astro": "^4.0.0-beta || ^3.3.0"
+ }
+ },
+ "node_modules/astro/node_modules/sharp": {
+ "version": "0.33.4",
+ "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.4.tgz",
+ "integrity": "sha512-7i/dt5kGl7qR4gwPRD2biwD2/SvBn3O04J77XKFgL2OnZtQw+AG9wnuS/csmu80nPRHLYE9E41fyEiG8nhH6/Q==",
+ "hasInstallScript": true,
+ "optional": true,
+ "dependencies": {
+ "color": "^4.2.3",
+ "detect-libc": "^2.0.3",
+ "semver": "^7.6.0"
+ },
+ "engines": {
+ "libvips": ">=8.15.2",
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-darwin-arm64": "0.33.4",
+ "@img/sharp-darwin-x64": "0.33.4",
+ "@img/sharp-libvips-darwin-arm64": "1.0.2",
+ "@img/sharp-libvips-darwin-x64": "1.0.2",
+ "@img/sharp-libvips-linux-arm": "1.0.2",
+ "@img/sharp-libvips-linux-arm64": "1.0.2",
+ "@img/sharp-libvips-linux-s390x": "1.0.2",
+ "@img/sharp-libvips-linux-x64": "1.0.2",
+ "@img/sharp-libvips-linuxmusl-arm64": "1.0.2",
+ "@img/sharp-libvips-linuxmusl-x64": "1.0.2",
+ "@img/sharp-linux-arm": "0.33.4",
+ "@img/sharp-linux-arm64": "0.33.4",
+ "@img/sharp-linux-s390x": "0.33.4",
+ "@img/sharp-linux-x64": "0.33.4",
+ "@img/sharp-linuxmusl-arm64": "0.33.4",
+ "@img/sharp-linuxmusl-x64": "0.33.4",
+ "@img/sharp-wasm32": "0.33.4",
+ "@img/sharp-win32-ia32": "0.33.4",
+ "@img/sharp-win32-x64": "0.33.4"
+ }
+ },
+ "node_modules/axobject-query": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.0.0.tgz",
+ "integrity": "sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==",
+ "dependencies": {
+ "dequal": "^2.0.3"
+ }
+ },
+ "node_modules/b4a": {
+ "version": "1.6.6",
+ "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz",
+ "integrity": "sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg=="
+ },
+ "node_modules/bail": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz",
+ "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/bare-events": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.4.2.tgz",
+ "integrity": "sha512-qMKFd2qG/36aA4GwvKq8MxnPgCQAmBWmSyLWsJcbn8v03wvIPQ/hG1Ms8bPzndZxMDoHpxez5VOS+gC9Yi24/Q==",
+ "optional": true
+ },
+ "node_modules/bare-fs": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.3.1.tgz",
+ "integrity": "sha512-W/Hfxc/6VehXlsgFtbB5B4xFcsCl+pAh30cYhoFyXErf6oGrwjh8SwiPAdHgpmWonKuYpZgGywN0SXt7dgsADA==",
+ "optional": true,
+ "dependencies": {
+ "bare-events": "^2.0.0",
+ "bare-path": "^2.0.0",
+ "bare-stream": "^2.0.0"
+ }
+ },
+ "node_modules/bare-os": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.4.0.tgz",
+ "integrity": "sha512-v8DTT08AS/G0F9xrhyLtepoo9EJBJ85FRSMbu1pQUlAf6A8T0tEEQGMVObWeqpjhSPXsE0VGlluFBJu2fdoTNg==",
+ "optional": true
+ },
+ "node_modules/bare-path": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-2.1.3.tgz",
+ "integrity": "sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA==",
+ "optional": true,
+ "dependencies": {
+ "bare-os": "^2.1.0"
+ }
+ },
+ "node_modules/bare-stream": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.1.3.tgz",
+ "integrity": "sha512-tiDAH9H/kP+tvNO5sczyn9ZAA7utrSMobyDchsnyyXBuUe2FSQWbxhtuHB8jwpHYYevVo2UJpcmvvjrbHboUUQ==",
+ "optional": true,
+ "dependencies": {
+ "streamx": "^2.18.0"
+ }
+ },
+ "node_modules/base-64": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/base-64/-/base-64-1.0.0.tgz",
+ "integrity": "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg=="
+ },
+ "node_modules/base64-js": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/bcp-47": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/bcp-47/-/bcp-47-2.1.0.tgz",
+ "integrity": "sha512-9IIS3UPrvIa1Ej+lVDdDwO7zLehjqsaByECw0bu2RRGP73jALm6FYbzI5gWbgHLvNdkvfXB5YrSbocZdOS0c0w==",
+ "dependencies": {
+ "is-alphabetical": "^2.0.0",
+ "is-alphanumerical": "^2.0.0",
+ "is-decimal": "^2.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/bcp-47-match": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/bcp-47-match/-/bcp-47-match-2.0.3.tgz",
+ "integrity": "sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/binary-extensions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
+ "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/bl": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
+ "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
+ "dependencies": {
+ "buffer": "^5.5.0",
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.4.0"
+ }
+ },
+ "node_modules/boolbase": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+ "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="
+ },
+ "node_modules/boxen": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.1.1.tgz",
+ "integrity": "sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==",
+ "dependencies": {
+ "ansi-align": "^3.0.1",
+ "camelcase": "^7.0.1",
+ "chalk": "^5.2.0",
+ "cli-boxes": "^3.0.0",
+ "string-width": "^5.1.2",
+ "type-fest": "^2.13.0",
+ "widest-line": "^4.0.1",
+ "wrap-ansi": "^8.1.0"
+ },
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/boxen/node_modules/chalk": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz",
+ "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==",
+ "engines": {
+ "node": "^12.17.0 || ^14.13 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/boxen/node_modules/emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="
+ },
+ "node_modules/boxen/node_modules/string-width": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+ "dependencies": {
+ "eastasianwidth": "^0.2.0",
+ "emoji-regex": "^9.2.2",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+ "dependencies": {
+ "fill-range": "^7.1.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/browserslist": {
+ "version": "4.23.1",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz",
+ "integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "caniuse-lite": "^1.0.30001629",
+ "electron-to-chromium": "^1.4.796",
+ "node-releases": "^2.0.14",
+ "update-browserslist-db": "^1.0.16"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
+ "node_modules/buffer": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+ "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.1.13"
+ }
+ },
+ "node_modules/camelcase": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz",
+ "integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==",
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001638",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001638.tgz",
+ "integrity": "sha512-5SuJUJ7cZnhPpeLHaH0c/HPAnAHZvS6ElWyHK9GSIbVOQABLzowiI2pjmpvZ1WEbkyz46iFd4UXlOHR5SqgfMQ==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ]
+ },
+ "node_modules/ccount": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz",
+ "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/character-entities": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz",
+ "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/character-entities-html4": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz",
+ "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/character-entities-legacy": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz",
+ "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/character-reference-invalid": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz",
+ "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/chokidar": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+ "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/chownr": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
+ "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="
+ },
+ "node_modules/ci-info": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.0.0.tgz",
+ "integrity": "sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/sibiraj-s"
+ }
+ ],
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cli-boxes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz",
+ "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/cli-cursor": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz",
+ "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==",
+ "dependencies": {
+ "restore-cursor": "^4.0.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/cli-spinners": {
+ "version": "2.9.2",
+ "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz",
+ "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==",
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/cliui": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.1",
+ "wrap-ansi": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/cliui/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cliui/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/cliui/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/cliui/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "node_modules/cliui/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+ },
+ "node_modules/cliui/node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cliui/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cliui/node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/clsx": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
+ "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/collapse-white-space": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz",
+ "integrity": "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/color": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz",
+ "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==",
+ "dependencies": {
+ "color-convert": "^2.0.1",
+ "color-string": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=12.5.0"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
+ },
+ "node_modules/color-string": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
+ "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
+ "dependencies": {
+ "color-name": "^1.0.0",
+ "simple-swizzle": "^0.2.2"
+ }
+ },
+ "node_modules/color/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "node_modules/comma-separated-tokens": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz",
+ "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/common-ancestor-path": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz",
+ "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w=="
+ },
+ "node_modules/convert-source-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="
+ },
+ "node_modules/cookie": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",
+ "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/css-selector-parser": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/css-selector-parser/-/css-selector-parser-3.0.5.tgz",
+ "integrity": "sha512-3itoDFbKUNx1eKmVpYMFyqKX04Ww9osZ+dLgrk6GEv6KMVeXUhUnp4I5X+evw+u3ZxVU6RFXSSRxlTeMh8bA+g==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/mdevils"
+ },
+ {
+ "type": "patreon",
+ "url": "https://patreon.com/mdevils"
+ }
+ ]
+ },
+ "node_modules/cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+ "bin": {
+ "cssesc": "bin/cssesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.3.5",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz",
+ "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/decode-named-character-reference": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz",
+ "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==",
+ "dependencies": {
+ "character-entities": "^2.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/decompress-response": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
+ "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
+ "dependencies": {
+ "mimic-response": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/deep-extend": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
+ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/dequal": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
+ "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/detect-libc": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz",
+ "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/deterministic-object-hash": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/deterministic-object-hash/-/deterministic-object-hash-2.0.2.tgz",
+ "integrity": "sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ==",
+ "dependencies": {
+ "base-64": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/devalue": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.0.0.tgz",
+ "integrity": "sha512-gO+/OMXF7488D+u3ue+G7Y4AA3ZmUnB3eHJXmBTgNHvr4ZNzl36A0ZtG+XCRNYCkYx/bFmw4qtkoFLa+wSrwAA=="
+ },
+ "node_modules/devlop": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz",
+ "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==",
+ "dependencies": {
+ "dequal": "^2.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/diff": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz",
+ "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==",
+ "engines": {
+ "node": ">=0.3.1"
+ }
+ },
+ "node_modules/direction": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/direction/-/direction-2.0.1.tgz",
+ "integrity": "sha512-9S6m9Sukh1cZNknO1CWAr2QAWsbKLafQiyM5gZ7VgXHeuaoUwffKN4q6NC4A/Mf9iiPlOXQEKW/Mv/mh9/3YFA==",
+ "bin": {
+ "direction": "cli.js"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/dlv": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
+ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="
+ },
+ "node_modules/dset": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.3.tgz",
+ "integrity": "sha512-20TuZZHCEZ2O71q9/+8BwKwZ0QtD9D8ObhrihJPr+vLLYlSuAU3/zL4cSlgbfeoGHTjCSJBa7NGcrF9/Bx/WJQ==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/eastasianwidth": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
+ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.4.814",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.814.tgz",
+ "integrity": "sha512-GVulpHjFu1Y9ZvikvbArHmAhZXtm3wHlpjTMcXNGKl4IQ4jMQjlnz8yMQYYqdLHKi/jEL2+CBC2akWVCoIGUdw=="
+ },
+ "node_modules/emmet": {
+ "version": "2.4.7",
+ "resolved": "https://registry.npmjs.org/emmet/-/emmet-2.4.7.tgz",
+ "integrity": "sha512-O5O5QNqtdlnQM2bmKHtJgyChcrFMgQuulI+WdiOw2NArzprUqqxUW6bgYtKvzKgrsYpuLWalOkdhNP+1jluhCA==",
+ "dependencies": {
+ "@emmetio/abbreviation": "^2.3.3",
+ "@emmetio/css-abbreviation": "^2.1.8"
+ }
+ },
+ "node_modules/emoji-regex": {
+ "version": "10.3.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz",
+ "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw=="
+ },
+ "node_modules/end-of-stream": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
+ "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
+ "dependencies": {
+ "once": "^1.4.0"
+ }
+ },
+ "node_modules/entities": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+ "engines": {
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
+ "node_modules/es-module-lexer": {
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz",
+ "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw=="
+ },
+ "node_modules/esbuild": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz",
+ "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
+ "hasInstallScript": true,
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.21.5",
+ "@esbuild/android-arm": "0.21.5",
+ "@esbuild/android-arm64": "0.21.5",
+ "@esbuild/android-x64": "0.21.5",
+ "@esbuild/darwin-arm64": "0.21.5",
+ "@esbuild/darwin-x64": "0.21.5",
+ "@esbuild/freebsd-arm64": "0.21.5",
+ "@esbuild/freebsd-x64": "0.21.5",
+ "@esbuild/linux-arm": "0.21.5",
+ "@esbuild/linux-arm64": "0.21.5",
+ "@esbuild/linux-ia32": "0.21.5",
+ "@esbuild/linux-loong64": "0.21.5",
+ "@esbuild/linux-mips64el": "0.21.5",
+ "@esbuild/linux-ppc64": "0.21.5",
+ "@esbuild/linux-riscv64": "0.21.5",
+ "@esbuild/linux-s390x": "0.21.5",
+ "@esbuild/linux-x64": "0.21.5",
+ "@esbuild/netbsd-x64": "0.21.5",
+ "@esbuild/openbsd-x64": "0.21.5",
+ "@esbuild/sunos-x64": "0.21.5",
+ "@esbuild/win32-arm64": "0.21.5",
+ "@esbuild/win32-ia32": "0.21.5",
+ "@esbuild/win32-x64": "0.21.5"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
+ "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/estree-util-attach-comments": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz",
+ "integrity": "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==",
+ "dependencies": {
+ "@types/estree": "^1.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/estree-util-build-jsx": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz",
+ "integrity": "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==",
+ "dependencies": {
+ "@types/estree-jsx": "^1.0.0",
+ "devlop": "^1.0.0",
+ "estree-util-is-identifier-name": "^3.0.0",
+ "estree-walker": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/estree-util-is-identifier-name": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz",
+ "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/estree-util-to-js": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz",
+ "integrity": "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==",
+ "dependencies": {
+ "@types/estree-jsx": "^1.0.0",
+ "astring": "^1.8.0",
+ "source-map": "^0.7.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/estree-util-visit": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz",
+ "integrity": "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==",
+ "dependencies": {
+ "@types/estree-jsx": "^1.0.0",
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/estree-walker": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
+ "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
+ "dependencies": {
+ "@types/estree": "^1.0.0"
+ }
+ },
+ "node_modules/eventemitter3": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz",
+ "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA=="
+ },
+ "node_modules/execa": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz",
+ "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==",
+ "dependencies": {
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^8.0.1",
+ "human-signals": "^5.0.0",
+ "is-stream": "^3.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^5.1.0",
+ "onetime": "^6.0.0",
+ "signal-exit": "^4.1.0",
+ "strip-final-newline": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=16.17"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/execa?sponsor=1"
+ }
+ },
+ "node_modules/expand-template": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz",
+ "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/expressive-code": {
+ "version": "0.35.3",
+ "resolved": "https://registry.npmjs.org/expressive-code/-/expressive-code-0.35.3.tgz",
+ "integrity": "sha512-XjWWUCxS4uQjPoRM98R7SNWWIYlFEaOeHm1piWv+c7coHCekuWno81thsc3g/UJ+DajNtOEsIQIAAcsBQZ8LMg==",
+ "dependencies": {
+ "@expressive-code/core": "^0.35.3",
+ "@expressive-code/plugin-frames": "^0.35.3",
+ "@expressive-code/plugin-shiki": "^0.35.3",
+ "@expressive-code/plugin-text-markers": "^0.35.3"
+ }
+ },
+ "node_modules/extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
+ },
+ "node_modules/extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
+ "dependencies": {
+ "is-extendable": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/fast-fifo": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz",
+ "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ=="
+ },
+ "node_modules/fast-glob": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
+ "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/fastq": {
+ "version": "1.17.1",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
+ "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/find-yarn-workspace-root2": {
+ "version": "1.2.16",
+ "resolved": "https://registry.npmjs.org/find-yarn-workspace-root2/-/find-yarn-workspace-root2-1.2.16.tgz",
+ "integrity": "sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==",
+ "dependencies": {
+ "micromatch": "^4.0.2",
+ "pkg-dir": "^4.2.0"
+ }
+ },
+ "node_modules/flattie": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/flattie/-/flattie-1.1.1.tgz",
+ "integrity": "sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/fs-constants": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
+ "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "hasInstallScript": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/gensync": {
+ "version": "1.0.0-beta.2",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "engines": {
+ "node": "6.* || 8.* || >= 10.*"
+ }
+ },
+ "node_modules/get-east-asian-width": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz",
+ "integrity": "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/get-stream": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz",
+ "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==",
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/github-from-package": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz",
+ "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw=="
+ },
+ "node_modules/github-slugger": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz",
+ "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw=="
+ },
+ "node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
+ },
+ "node_modules/gray-matter": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz",
+ "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==",
+ "dependencies": {
+ "js-yaml": "^3.13.1",
+ "kind-of": "^6.0.2",
+ "section-matter": "^1.0.0",
+ "strip-bom-string": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=6.0"
+ }
+ },
+ "node_modules/gray-matter/node_modules/argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dependencies": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "node_modules/gray-matter/node_modules/js-yaml": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "dependencies": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/hast-util-embedded": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/hast-util-embedded/-/hast-util-embedded-3.0.0.tgz",
+ "integrity": "sha512-naH8sld4Pe2ep03qqULEtvYr7EjrLK2QHY8KJR6RJkTUjPGObe1vnx585uzem2hGra+s1q08DZZpfgDVYRbaXA==",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "hast-util-is-element": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-from-html": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-2.0.1.tgz",
+ "integrity": "sha512-RXQBLMl9kjKVNkJTIO6bZyb2n+cUH8LFaSSzo82jiLT6Tfc+Pt7VQCS+/h3YwG4jaNE2TA2sdJisGWR+aJrp0g==",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "devlop": "^1.1.0",
+ "hast-util-from-parse5": "^8.0.0",
+ "parse5": "^7.0.0",
+ "vfile": "^6.0.0",
+ "vfile-message": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-from-parse5": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.1.tgz",
+ "integrity": "sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/unist": "^3.0.0",
+ "devlop": "^1.0.0",
+ "hastscript": "^8.0.0",
+ "property-information": "^6.0.0",
+ "vfile": "^6.0.0",
+ "vfile-location": "^5.0.0",
+ "web-namespaces": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-from-parse5/node_modules/hastscript": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-8.0.0.tgz",
+ "integrity": "sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "comma-separated-tokens": "^2.0.0",
+ "hast-util-parse-selector": "^4.0.0",
+ "property-information": "^6.0.0",
+ "space-separated-tokens": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-has-property": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/hast-util-has-property/-/hast-util-has-property-3.0.0.tgz",
+ "integrity": "sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA==",
+ "dependencies": {
+ "@types/hast": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-is-body-ok-link": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/hast-util-is-body-ok-link/-/hast-util-is-body-ok-link-3.0.0.tgz",
+ "integrity": "sha512-VFHY5bo2nY8HiV6nir2ynmEB1XkxzuUffhEGeVx7orbu/B1KaGyeGgMZldvMVx5xWrDlLLG/kQ6YkJAMkBEx0w==",
+ "dependencies": {
+ "@types/hast": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-is-element": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz",
+ "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==",
+ "dependencies": {
+ "@types/hast": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-parse-selector": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz",
+ "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==",
+ "dependencies": {
+ "@types/hast": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-phrasing": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/hast-util-phrasing/-/hast-util-phrasing-3.0.1.tgz",
+ "integrity": "sha512-6h60VfI3uBQUxHqTyMymMZnEbNl1XmEGtOxxKYL7stY2o601COo62AWAYBQR9lZbYXYSBoxag8UpPRXK+9fqSQ==",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "hast-util-embedded": "^3.0.0",
+ "hast-util-has-property": "^3.0.0",
+ "hast-util-is-body-ok-link": "^3.0.0",
+ "hast-util-is-element": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-raw": {
+ "version": "9.0.4",
+ "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.0.4.tgz",
+ "integrity": "sha512-LHE65TD2YiNsHD3YuXcKPHXPLuYh/gjp12mOfU8jxSrm1f/yJpsb0F/KKljS6U9LJoP0Ux+tCe8iJ2AsPzTdgA==",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/unist": "^3.0.0",
+ "@ungap/structured-clone": "^1.0.0",
+ "hast-util-from-parse5": "^8.0.0",
+ "hast-util-to-parse5": "^8.0.0",
+ "html-void-elements": "^3.0.0",
+ "mdast-util-to-hast": "^13.0.0",
+ "parse5": "^7.0.0",
+ "unist-util-position": "^5.0.0",
+ "unist-util-visit": "^5.0.0",
+ "vfile": "^6.0.0",
+ "web-namespaces": "^2.0.0",
+ "zwitch": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-select": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/hast-util-select/-/hast-util-select-6.0.2.tgz",
+ "integrity": "sha512-hT/SD/d/Meu+iobvgkffo1QecV8WeKWxwsNMzcTJsKw1cKTQKSR/7ArJeURLNJF9HDjp9nVoORyNNJxrvBye8Q==",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/unist": "^3.0.0",
+ "bcp-47-match": "^2.0.0",
+ "comma-separated-tokens": "^2.0.0",
+ "css-selector-parser": "^3.0.0",
+ "devlop": "^1.0.0",
+ "direction": "^2.0.0",
+ "hast-util-has-property": "^3.0.0",
+ "hast-util-to-string": "^3.0.0",
+ "hast-util-whitespace": "^3.0.0",
+ "not": "^0.1.0",
+ "nth-check": "^2.0.0",
+ "property-information": "^6.0.0",
+ "space-separated-tokens": "^2.0.0",
+ "unist-util-visit": "^5.0.0",
+ "zwitch": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-to-estree": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.0.tgz",
+ "integrity": "sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw==",
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "@types/estree-jsx": "^1.0.0",
+ "@types/hast": "^3.0.0",
+ "comma-separated-tokens": "^2.0.0",
+ "devlop": "^1.0.0",
+ "estree-util-attach-comments": "^3.0.0",
+ "estree-util-is-identifier-name": "^3.0.0",
+ "hast-util-whitespace": "^3.0.0",
+ "mdast-util-mdx-expression": "^2.0.0",
+ "mdast-util-mdx-jsx": "^3.0.0",
+ "mdast-util-mdxjs-esm": "^2.0.0",
+ "property-information": "^6.0.0",
+ "space-separated-tokens": "^2.0.0",
+ "style-to-object": "^0.4.0",
+ "unist-util-position": "^5.0.0",
+ "zwitch": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-to-html": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.1.tgz",
+ "integrity": "sha512-hZOofyZANbyWo+9RP75xIDV/gq+OUKx+T46IlwERnKmfpwp81XBFbT9mi26ws+SJchA4RVUQwIBJpqEOBhMzEQ==",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/unist": "^3.0.0",
+ "ccount": "^2.0.0",
+ "comma-separated-tokens": "^2.0.0",
+ "hast-util-raw": "^9.0.0",
+ "hast-util-whitespace": "^3.0.0",
+ "html-void-elements": "^3.0.0",
+ "mdast-util-to-hast": "^13.0.0",
+ "property-information": "^6.0.0",
+ "space-separated-tokens": "^2.0.0",
+ "stringify-entities": "^4.0.0",
+ "zwitch": "^2.0.4"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-to-jsx-runtime": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.0.tgz",
+ "integrity": "sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==",
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "@types/hast": "^3.0.0",
+ "@types/unist": "^3.0.0",
+ "comma-separated-tokens": "^2.0.0",
+ "devlop": "^1.0.0",
+ "estree-util-is-identifier-name": "^3.0.0",
+ "hast-util-whitespace": "^3.0.0",
+ "mdast-util-mdx-expression": "^2.0.0",
+ "mdast-util-mdx-jsx": "^3.0.0",
+ "mdast-util-mdxjs-esm": "^2.0.0",
+ "property-information": "^6.0.0",
+ "space-separated-tokens": "^2.0.0",
+ "style-to-object": "^1.0.0",
+ "unist-util-position": "^5.0.0",
+ "vfile-message": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-to-jsx-runtime/node_modules/inline-style-parser": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.3.tgz",
+ "integrity": "sha512-qlD8YNDqyTKTyuITrDOffsl6Tdhv+UC4hcdAVuQsK4IMQ99nSgd1MIA/Q+jQYoh9r3hVUXhYh7urSRmXPkW04g=="
+ },
+ "node_modules/hast-util-to-jsx-runtime/node_modules/style-to-object": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.6.tgz",
+ "integrity": "sha512-khxq+Qm3xEyZfKd/y9L3oIWQimxuc4STrQKtQn8aSDRHb8mFgpukgX1hdzfrMEW6JCjyJ8p89x+IUMVnCBI1PA==",
+ "dependencies": {
+ "inline-style-parser": "0.2.3"
+ }
+ },
+ "node_modules/hast-util-to-parse5": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz",
+ "integrity": "sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "comma-separated-tokens": "^2.0.0",
+ "devlop": "^1.0.0",
+ "property-information": "^6.0.0",
+ "space-separated-tokens": "^2.0.0",
+ "web-namespaces": "^2.0.0",
+ "zwitch": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-to-string": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/hast-util-to-string/-/hast-util-to-string-3.0.0.tgz",
+ "integrity": "sha512-OGkAxX1Ua3cbcW6EJ5pT/tslVb90uViVkcJ4ZZIMW/R33DX/AkcJcRrPebPwJkHYwlDHXz4aIwvAAaAdtrACFA==",
+ "dependencies": {
+ "@types/hast": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-to-text": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.2.tgz",
+ "integrity": "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/unist": "^3.0.0",
+ "hast-util-is-element": "^3.0.0",
+ "unist-util-find-after": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-whitespace": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz",
+ "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==",
+ "dependencies": {
+ "@types/hast": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hastscript": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.0.tgz",
+ "integrity": "sha512-jzaLBGavEDKHrc5EfFImKN7nZKKBdSLIdGvCwDZ9TfzbF2ffXiov8CKE445L2Z1Ek2t/m4SKQ2j6Ipv7NyUolw==",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "comma-separated-tokens": "^2.0.0",
+ "hast-util-parse-selector": "^4.0.0",
+ "property-information": "^6.0.0",
+ "space-separated-tokens": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/html-escaper": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz",
+ "integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ=="
+ },
+ "node_modules/html-void-elements": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz",
+ "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/html-whitespace-sensitive-tag-names": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/html-whitespace-sensitive-tag-names/-/html-whitespace-sensitive-tag-names-3.0.0.tgz",
+ "integrity": "sha512-KlClZ3/Qy5UgvpvVvDomGhnQhNWH5INE8GwvSIQ9CWt1K0zbbXrl7eN5bWaafOZgtmO3jMPwUqmrmEwinhPq1w==",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/http-cache-semantics": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz",
+ "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ=="
+ },
+ "node_modules/human-signals": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz",
+ "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==",
+ "engines": {
+ "node": ">=16.17.0"
+ }
+ },
+ "node_modules/ieee754": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/import-meta-resolve": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz",
+ "integrity": "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "node_modules/ini": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="
+ },
+ "node_modules/inline-style-parser": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz",
+ "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q=="
+ },
+ "node_modules/is-alphabetical": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz",
+ "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/is-alphanumerical": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz",
+ "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==",
+ "dependencies": {
+ "is-alphabetical": "^2.0.0",
+ "is-decimal": "^2.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/is-arrayish": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
+ "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
+ },
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-decimal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz",
+ "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/is-docker": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz",
+ "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==",
+ "bin": {
+ "is-docker": "cli.js"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-hexadecimal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz",
+ "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/is-inside-container": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz",
+ "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==",
+ "dependencies": {
+ "is-docker": "^3.0.0"
+ },
+ "bin": {
+ "is-inside-container": "cli.js"
+ },
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-interactive": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz",
+ "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-plain-obj": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
+ "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-reference": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz",
+ "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==",
+ "dependencies": {
+ "@types/estree": "*"
+ }
+ },
+ "node_modules/is-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
+ "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==",
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-unicode-supported": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.0.0.tgz",
+ "integrity": "sha512-FRdAyx5lusK1iHG0TWpVtk9+1i+GjrzRffhDg4ovQ7mcidMQ6mj+MhKPmvh7Xwyv5gIS06ns49CA7Sqg7lC22Q==",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-wsl": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz",
+ "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==",
+ "dependencies": {
+ "is-inside-container": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/jsesc": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+ "bin": {
+ "jsesc": "bin/jsesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/json5": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+ "bin": {
+ "json5": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/jsonc-parser": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.3.1.tgz",
+ "integrity": "sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg=="
+ },
+ "node_modules/kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/kleur": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz",
+ "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/load-yaml-file": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/load-yaml-file/-/load-yaml-file-0.2.0.tgz",
+ "integrity": "sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==",
+ "dependencies": {
+ "graceful-fs": "^4.1.5",
+ "js-yaml": "^3.13.0",
+ "pify": "^4.0.1",
+ "strip-bom": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/load-yaml-file/node_modules/argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dependencies": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "node_modules/load-yaml-file/node_modules/js-yaml": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "dependencies": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/log-symbols": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz",
+ "integrity": "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==",
+ "dependencies": {
+ "chalk": "^5.3.0",
+ "is-unicode-supported": "^1.3.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/log-symbols/node_modules/chalk": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz",
+ "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==",
+ "engines": {
+ "node": "^12.17.0 || ^14.13 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/log-symbols/node_modules/is-unicode-supported": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz",
+ "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/longest-streak": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz",
+ "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "dependencies": {
+ "yallist": "^3.0.2"
+ }
+ },
+ "node_modules/magic-string": {
+ "version": "0.30.10",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz",
+ "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.4.15"
+ }
+ },
+ "node_modules/markdown-extensions": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz",
+ "integrity": "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==",
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/markdown-table": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.3.tgz",
+ "integrity": "sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/mdast-util-definitions": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-6.0.0.tgz",
+ "integrity": "sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "@types/unist": "^3.0.0",
+ "unist-util-visit": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-directive": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-directive/-/mdast-util-directive-3.0.0.tgz",
+ "integrity": "sha512-JUpYOqKI4mM3sZcNxmF/ox04XYFFkNwr0CFlrQIkCwbvH0xzMCqkMqAde9wRd80VAhaUrwFwKm2nxretdT1h7Q==",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "@types/unist": "^3.0.0",
+ "devlop": "^1.0.0",
+ "mdast-util-from-markdown": "^2.0.0",
+ "mdast-util-to-markdown": "^2.0.0",
+ "parse-entities": "^4.0.0",
+ "stringify-entities": "^4.0.0",
+ "unist-util-visit-parents": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-find-and-replace": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.1.tgz",
+ "integrity": "sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "escape-string-regexp": "^5.0.0",
+ "unist-util-is": "^6.0.0",
+ "unist-util-visit-parents": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
+ "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/mdast-util-from-markdown": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.1.tgz",
+ "integrity": "sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA==",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "@types/unist": "^3.0.0",
+ "decode-named-character-reference": "^1.0.0",
+ "devlop": "^1.0.0",
+ "mdast-util-to-string": "^4.0.0",
+ "micromark": "^4.0.0",
+ "micromark-util-decode-numeric-character-reference": "^2.0.0",
+ "micromark-util-decode-string": "^2.0.0",
+ "micromark-util-normalize-identifier": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0",
+ "unist-util-stringify-position": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-gfm": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.0.0.tgz",
+ "integrity": "sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==",
+ "dependencies": {
+ "mdast-util-from-markdown": "^2.0.0",
+ "mdast-util-gfm-autolink-literal": "^2.0.0",
+ "mdast-util-gfm-footnote": "^2.0.0",
+ "mdast-util-gfm-strikethrough": "^2.0.0",
+ "mdast-util-gfm-table": "^2.0.0",
+ "mdast-util-gfm-task-list-item": "^2.0.0",
+ "mdast-util-to-markdown": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-gfm-autolink-literal": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.0.tgz",
+ "integrity": "sha512-FyzMsduZZHSc3i0Px3PQcBT4WJY/X/RCtEJKuybiC6sjPqLv7h1yqAkmILZtuxMSsUyaLUWNp71+vQH2zqp5cg==",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "ccount": "^2.0.0",
+ "devlop": "^1.0.0",
+ "mdast-util-find-and-replace": "^3.0.0",
+ "micromark-util-character": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-gfm-footnote": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.0.0.tgz",
+ "integrity": "sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "devlop": "^1.1.0",
+ "mdast-util-from-markdown": "^2.0.0",
+ "mdast-util-to-markdown": "^2.0.0",
+ "micromark-util-normalize-identifier": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-gfm-strikethrough": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz",
+ "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "mdast-util-from-markdown": "^2.0.0",
+ "mdast-util-to-markdown": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-gfm-table": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz",
+ "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "devlop": "^1.0.0",
+ "markdown-table": "^3.0.0",
+ "mdast-util-from-markdown": "^2.0.0",
+ "mdast-util-to-markdown": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-gfm-task-list-item": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz",
+ "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "devlop": "^1.0.0",
+ "mdast-util-from-markdown": "^2.0.0",
+ "mdast-util-to-markdown": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-mdx": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz",
+ "integrity": "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==",
+ "dependencies": {
+ "mdast-util-from-markdown": "^2.0.0",
+ "mdast-util-mdx-expression": "^2.0.0",
+ "mdast-util-mdx-jsx": "^3.0.0",
+ "mdast-util-mdxjs-esm": "^2.0.0",
+ "mdast-util-to-markdown": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-mdx-expression": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.0.tgz",
+ "integrity": "sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw==",
+ "dependencies": {
+ "@types/estree-jsx": "^1.0.0",
+ "@types/hast": "^3.0.0",
+ "@types/mdast": "^4.0.0",
+ "devlop": "^1.0.0",
+ "mdast-util-from-markdown": "^2.0.0",
+ "mdast-util-to-markdown": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-mdx-jsx": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.2.tgz",
+ "integrity": "sha512-eKMQDeywY2wlHc97k5eD8VC+9ASMjN8ItEZQNGwJ6E0XWKiW/Z0V5/H8pvoXUf+y+Mj0VIgeRRbujBmFn4FTyA==",
+ "dependencies": {
+ "@types/estree-jsx": "^1.0.0",
+ "@types/hast": "^3.0.0",
+ "@types/mdast": "^4.0.0",
+ "@types/unist": "^3.0.0",
+ "ccount": "^2.0.0",
+ "devlop": "^1.1.0",
+ "mdast-util-from-markdown": "^2.0.0",
+ "mdast-util-to-markdown": "^2.0.0",
+ "parse-entities": "^4.0.0",
+ "stringify-entities": "^4.0.0",
+ "unist-util-remove-position": "^5.0.0",
+ "unist-util-stringify-position": "^4.0.0",
+ "vfile-message": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-mdxjs-esm": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz",
+ "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==",
+ "dependencies": {
+ "@types/estree-jsx": "^1.0.0",
+ "@types/hast": "^3.0.0",
+ "@types/mdast": "^4.0.0",
+ "devlop": "^1.0.0",
+ "mdast-util-from-markdown": "^2.0.0",
+ "mdast-util-to-markdown": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-phrasing": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz",
+ "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "unist-util-is": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-to-hast": {
+ "version": "13.2.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz",
+ "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/mdast": "^4.0.0",
+ "@ungap/structured-clone": "^1.0.0",
+ "devlop": "^1.0.0",
+ "micromark-util-sanitize-uri": "^2.0.0",
+ "trim-lines": "^3.0.0",
+ "unist-util-position": "^5.0.0",
+ "unist-util-visit": "^5.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-to-markdown": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz",
+ "integrity": "sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "@types/unist": "^3.0.0",
+ "longest-streak": "^3.0.0",
+ "mdast-util-phrasing": "^4.0.0",
+ "mdast-util-to-string": "^4.0.0",
+ "micromark-util-decode-string": "^2.0.0",
+ "unist-util-visit": "^5.0.0",
+ "zwitch": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-to-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz",
+ "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==",
+ "dependencies": {
+ "@types/mdast": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/merge-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="
+ },
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/micromark": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz",
+ "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "@types/debug": "^4.0.0",
+ "debug": "^4.0.0",
+ "decode-named-character-reference": "^1.0.0",
+ "devlop": "^1.0.0",
+ "micromark-core-commonmark": "^2.0.0",
+ "micromark-factory-space": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-chunked": "^2.0.0",
+ "micromark-util-combine-extensions": "^2.0.0",
+ "micromark-util-decode-numeric-character-reference": "^2.0.0",
+ "micromark-util-encode": "^2.0.0",
+ "micromark-util-normalize-identifier": "^2.0.0",
+ "micromark-util-resolve-all": "^2.0.0",
+ "micromark-util-sanitize-uri": "^2.0.0",
+ "micromark-util-subtokenize": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-core-commonmark": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz",
+ "integrity": "sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "decode-named-character-reference": "^1.0.0",
+ "devlop": "^1.0.0",
+ "micromark-factory-destination": "^2.0.0",
+ "micromark-factory-label": "^2.0.0",
+ "micromark-factory-space": "^2.0.0",
+ "micromark-factory-title": "^2.0.0",
+ "micromark-factory-whitespace": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-chunked": "^2.0.0",
+ "micromark-util-classify-character": "^2.0.0",
+ "micromark-util-html-tag-name": "^2.0.0",
+ "micromark-util-normalize-identifier": "^2.0.0",
+ "micromark-util-resolve-all": "^2.0.0",
+ "micromark-util-subtokenize": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-extension-directive": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-3.0.0.tgz",
+ "integrity": "sha512-61OI07qpQrERc+0wEysLHMvoiO3s2R56x5u7glHq2Yqq6EHbH4dW25G9GfDdGCDYqA21KE6DWgNSzxSwHc2hSg==",
+ "dependencies": {
+ "devlop": "^1.0.0",
+ "micromark-factory-space": "^2.0.0",
+ "micromark-factory-whitespace": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0",
+ "parse-entities": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-gfm": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz",
+ "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==",
+ "dependencies": {
+ "micromark-extension-gfm-autolink-literal": "^2.0.0",
+ "micromark-extension-gfm-footnote": "^2.0.0",
+ "micromark-extension-gfm-strikethrough": "^2.0.0",
+ "micromark-extension-gfm-table": "^2.0.0",
+ "micromark-extension-gfm-tagfilter": "^2.0.0",
+ "micromark-extension-gfm-task-list-item": "^2.0.0",
+ "micromark-util-combine-extensions": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-gfm-autolink-literal": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.0.0.tgz",
+ "integrity": "sha512-rTHfnpt/Q7dEAK1Y5ii0W8bhfJlVJFnJMHIPisfPK3gpVNuOP0VnRl96+YJ3RYWV/P4gFeQoGKNlT3RhuvpqAg==",
+ "dependencies": {
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-sanitize-uri": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-gfm-footnote": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.0.0.tgz",
+ "integrity": "sha512-6Rzu0CYRKDv3BfLAUnZsSlzx3ak6HAoI85KTiijuKIz5UxZxbUI+pD6oHgw+6UtQuiRwnGRhzMmPRv4smcz0fg==",
+ "dependencies": {
+ "devlop": "^1.0.0",
+ "micromark-core-commonmark": "^2.0.0",
+ "micromark-factory-space": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-normalize-identifier": "^2.0.0",
+ "micromark-util-sanitize-uri": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-gfm-strikethrough": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.0.0.tgz",
+ "integrity": "sha512-c3BR1ClMp5fxxmwP6AoOY2fXO9U8uFMKs4ADD66ahLTNcwzSCyRVU4k7LPV5Nxo/VJiR4TdzxRQY2v3qIUceCw==",
+ "dependencies": {
+ "devlop": "^1.0.0",
+ "micromark-util-chunked": "^2.0.0",
+ "micromark-util-classify-character": "^2.0.0",
+ "micromark-util-resolve-all": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-gfm-table": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.0.0.tgz",
+ "integrity": "sha512-PoHlhypg1ItIucOaHmKE8fbin3vTLpDOUg8KAr8gRCF1MOZI9Nquq2i/44wFvviM4WuxJzc3demT8Y3dkfvYrw==",
+ "dependencies": {
+ "devlop": "^1.0.0",
+ "micromark-factory-space": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-gfm-tagfilter": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz",
+ "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==",
+ "dependencies": {
+ "micromark-util-types": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-gfm-task-list-item": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.0.1.tgz",
+ "integrity": "sha512-cY5PzGcnULaN5O7T+cOzfMoHjBW7j+T9D2sucA5d/KbsBTPcYdebm9zUd9zzdgJGCwahV+/W78Z3nbulBYVbTw==",
+ "dependencies": {
+ "devlop": "^1.0.0",
+ "micromark-factory-space": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-mdx-expression": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.0.tgz",
+ "integrity": "sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "devlop": "^1.0.0",
+ "micromark-factory-mdx-expression": "^2.0.0",
+ "micromark-factory-space": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-events-to-acorn": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-extension-mdx-jsx": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.0.tgz",
+ "integrity": "sha512-uvhhss8OGuzR4/N17L1JwvmJIpPhAd8oByMawEKx6NVdBCbesjH4t+vjEp3ZXft9DwvlKSD07fCeI44/N0Vf2w==",
+ "dependencies": {
+ "@types/acorn": "^4.0.0",
+ "@types/estree": "^1.0.0",
+ "devlop": "^1.0.0",
+ "estree-util-is-identifier-name": "^3.0.0",
+ "micromark-factory-mdx-expression": "^2.0.0",
+ "micromark-factory-space": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0",
+ "vfile-message": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-mdx-md": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz",
+ "integrity": "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==",
+ "dependencies": {
+ "micromark-util-types": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-mdxjs": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz",
+ "integrity": "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==",
+ "dependencies": {
+ "acorn": "^8.0.0",
+ "acorn-jsx": "^5.0.0",
+ "micromark-extension-mdx-expression": "^3.0.0",
+ "micromark-extension-mdx-jsx": "^3.0.0",
+ "micromark-extension-mdx-md": "^2.0.0",
+ "micromark-extension-mdxjs-esm": "^3.0.0",
+ "micromark-util-combine-extensions": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-mdxjs-esm": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz",
+ "integrity": "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==",
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "devlop": "^1.0.0",
+ "micromark-core-commonmark": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-events-to-acorn": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0",
+ "unist-util-position-from-estree": "^2.0.0",
+ "vfile-message": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-factory-destination": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz",
+ "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-factory-label": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz",
+ "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "devlop": "^1.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-factory-mdx-expression": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.1.tgz",
+ "integrity": "sha512-F0ccWIUHRLRrYp5TC9ZYXmZo+p2AM13ggbsW4T0b5CRKP8KHVRB8t4pwtBgTxtjRmwrK0Irwm7vs2JOZabHZfg==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "devlop": "^1.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-events-to-acorn": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0",
+ "unist-util-position-from-estree": "^2.0.0",
+ "vfile-message": "^4.0.0"
+ }
+ },
+ "node_modules/micromark-factory-space": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz",
+ "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-factory-title": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz",
+ "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-factory-space": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-factory-whitespace": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz",
+ "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-factory-space": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-character": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz",
+ "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-chunked": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz",
+ "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-util-symbol": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-classify-character": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz",
+ "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-combine-extensions": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz",
+ "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-util-chunked": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-decode-numeric-character-reference": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz",
+ "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-util-symbol": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-decode-string": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz",
+ "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "decode-named-character-reference": "^1.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-decode-numeric-character-reference": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-encode": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz",
+ "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ]
+ },
+ "node_modules/micromark-util-events-to-acorn": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.2.tgz",
+ "integrity": "sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "@types/acorn": "^4.0.0",
+ "@types/estree": "^1.0.0",
+ "@types/unist": "^3.0.0",
+ "devlop": "^1.0.0",
+ "estree-util-visit": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0",
+ "vfile-message": "^4.0.0"
+ }
+ },
+ "node_modules/micromark-util-html-tag-name": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz",
+ "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ]
+ },
+ "node_modules/micromark-util-normalize-identifier": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz",
+ "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-util-symbol": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-resolve-all": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz",
+ "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-sanitize-uri": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz",
+ "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-encode": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-subtokenize": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.1.tgz",
+ "integrity": "sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "dependencies": {
+ "devlop": "^1.0.0",
+ "micromark-util-chunked": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-symbol": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz",
+ "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ]
+ },
+ "node_modules/micromark-util-types": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz",
+ "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ]
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz",
+ "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==",
+ "dependencies": {
+ "braces": "^3.0.3",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/mimic-fn": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
+ "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/mimic-response": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
+ "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/mkdirp-classic": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
+ "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A=="
+ },
+ "node_modules/mrmime": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz",
+ "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "node_modules/muggle-string": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz",
+ "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ=="
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.7",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
+ "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/napi-build-utils": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz",
+ "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg=="
+ },
+ "node_modules/nlcst-to-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-4.0.0.tgz",
+ "integrity": "sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==",
+ "dependencies": {
+ "@types/nlcst": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/node-abi": {
+ "version": "3.65.0",
+ "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.65.0.tgz",
+ "integrity": "sha512-ThjYBfoDNr08AWx6hGaRbfPwxKV9kVzAzOzlLKbk2CuqXE2xnCh+cbAGnwM3t8Lq4v9rUB7VfondlkBckcJrVA==",
+ "dependencies": {
+ "semver": "^7.3.5"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/node-addon-api": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz",
+ "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA=="
+ },
+ "node_modules/node-releases": {
+ "version": "2.0.14",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
+ "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw=="
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/not": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/not/-/not-0.1.0.tgz",
+ "integrity": "sha512-5PDmaAsVfnWUgTUbJ3ERwn7u79Z0dYxN9ErxCpVJJqe2RK0PJ3z+iFUxuqjwtlDDegXvtWoxD/3Fzxox7tFGWA=="
+ },
+ "node_modules/npm-run-path": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz",
+ "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==",
+ "dependencies": {
+ "path-key": "^4.0.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/npm-run-path/node_modules/path-key": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz",
+ "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/nth-check": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
+ "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
+ "dependencies": {
+ "boolbase": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/nth-check?sponsor=1"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/onetime": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz",
+ "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==",
+ "dependencies": {
+ "mimic-fn": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ora": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/ora/-/ora-8.0.1.tgz",
+ "integrity": "sha512-ANIvzobt1rls2BDny5fWZ3ZVKyD6nscLvfFRpQgfWsythlcsVUC9kL0zq6j2Z5z9wwp1kd7wpsD/T9qNPVLCaQ==",
+ "dependencies": {
+ "chalk": "^5.3.0",
+ "cli-cursor": "^4.0.0",
+ "cli-spinners": "^2.9.2",
+ "is-interactive": "^2.0.0",
+ "is-unicode-supported": "^2.0.0",
+ "log-symbols": "^6.0.0",
+ "stdin-discarder": "^0.2.1",
+ "string-width": "^7.0.0",
+ "strip-ansi": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ora/node_modules/chalk": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz",
+ "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==",
+ "engines": {
+ "node": "^12.17.0 || ^14.13 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-5.0.0.tgz",
+ "integrity": "sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==",
+ "dependencies": {
+ "yocto-queue": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate/node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate/node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-queue": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-8.0.1.tgz",
+ "integrity": "sha512-NXzu9aQJTAzbBqOt2hwsR63ea7yvxJc0PwN/zobNAudYfb1B7R08SzB4TsLeSbUCuG467NhnoT0oO6w1qRO+BA==",
+ "dependencies": {
+ "eventemitter3": "^5.0.1",
+ "p-timeout": "^6.1.2"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-timeout": {
+ "version": "6.1.2",
+ "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.2.tgz",
+ "integrity": "sha512-UbD77BuZ9Bc9aABo74gfXhNvzC9Tx7SxtHSh1fxvx3jTLLYvmVhiQZZrJzqqU0jKbN32kb5VOKiLEQI/3bIjgQ==",
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/pagefind": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/pagefind/-/pagefind-1.1.0.tgz",
+ "integrity": "sha512-1nmj0/vfYcMxNEQj0YDRp6bTVv9hI7HLdPhK/vBBYlrnwjATndQvHyicj5Y7pUHrpCFZpFnLVQXIF829tpFmaw==",
+ "bin": {
+ "pagefind": "lib/runner/bin.cjs"
+ },
+ "optionalDependencies": {
+ "@pagefind/darwin-arm64": "1.1.0",
+ "@pagefind/darwin-x64": "1.1.0",
+ "@pagefind/linux-arm64": "1.1.0",
+ "@pagefind/linux-x64": "1.1.0",
+ "@pagefind/windows-x64": "1.1.0"
+ }
+ },
+ "node_modules/parse-entities": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.1.tgz",
+ "integrity": "sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==",
+ "dependencies": {
+ "@types/unist": "^2.0.0",
+ "character-entities": "^2.0.0",
+ "character-entities-legacy": "^3.0.0",
+ "character-reference-invalid": "^2.0.0",
+ "decode-named-character-reference": "^1.0.0",
+ "is-alphanumerical": "^2.0.0",
+ "is-decimal": "^2.0.0",
+ "is-hexadecimal": "^2.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/parse-entities/node_modules/@types/unist": {
+ "version": "2.0.10",
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz",
+ "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA=="
+ },
+ "node_modules/parse-latin": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/parse-latin/-/parse-latin-7.0.0.tgz",
+ "integrity": "sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==",
+ "dependencies": {
+ "@types/nlcst": "^2.0.0",
+ "@types/unist": "^3.0.0",
+ "nlcst-to-string": "^4.0.0",
+ "unist-util-modify-children": "^4.0.0",
+ "unist-util-visit-children": "^3.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/parse5": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
+ "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==",
+ "dependencies": {
+ "entities": "^4.4.0"
+ },
+ "funding": {
+ "url": "https://github.com/inikulin/parse5?sponsor=1"
+ }
+ },
+ "node_modules/path-browserify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
+ "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="
+ },
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-to-regexp": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.2.tgz",
+ "integrity": "sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw=="
+ },
+ "node_modules/periscopic": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz",
+ "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==",
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "estree-walker": "^3.0.0",
+ "is-reference": "^3.0.0"
+ }
+ },
+ "node_modules/picocolors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
+ "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew=="
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pify": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "dependencies": {
+ "find-up": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/pkg-dir/node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/pkg-dir/node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/pkg-dir/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/pkg-dir/node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.4.38",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz",
+ "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "nanoid": "^3.3.7",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.2.0"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/postcss-nested": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz",
+ "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==",
+ "dependencies": {
+ "postcss-selector-parser": "^6.0.11"
+ },
+ "engines": {
+ "node": ">=12.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.14"
+ }
+ },
+ "node_modules/postcss-selector-parser": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz",
+ "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==",
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/prebuild-install": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz",
+ "integrity": "sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==",
+ "dependencies": {
+ "detect-libc": "^2.0.0",
+ "expand-template": "^2.0.3",
+ "github-from-package": "0.0.0",
+ "minimist": "^1.2.3",
+ "mkdirp-classic": "^0.5.3",
+ "napi-build-utils": "^1.0.1",
+ "node-abi": "^3.3.0",
+ "pump": "^3.0.0",
+ "rc": "^1.2.7",
+ "simple-get": "^4.0.0",
+ "tar-fs": "^2.0.0",
+ "tunnel-agent": "^0.6.0"
+ },
+ "bin": {
+ "prebuild-install": "bin.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/prebuild-install/node_modules/tar-fs": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz",
+ "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==",
+ "dependencies": {
+ "chownr": "^1.1.1",
+ "mkdirp-classic": "^0.5.2",
+ "pump": "^3.0.0",
+ "tar-stream": "^2.1.4"
+ }
+ },
+ "node_modules/prebuild-install/node_modules/tar-stream": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
+ "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
+ "dependencies": {
+ "bl": "^4.0.3",
+ "end-of-stream": "^1.4.1",
+ "fs-constants": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^3.1.1"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/preferred-pm": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/preferred-pm/-/preferred-pm-3.1.3.tgz",
+ "integrity": "sha512-MkXsENfftWSRpzCzImcp4FRsCc3y1opwB73CfCNWyzMqArju2CrlMHlqB7VexKiPEOjGMbttv1r9fSCn5S610w==",
+ "dependencies": {
+ "find-up": "^5.0.0",
+ "find-yarn-workspace-root2": "1.2.16",
+ "path-exists": "^4.0.0",
+ "which-pm": "2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/preferred-pm/node_modules/which-pm": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/which-pm/-/which-pm-2.0.0.tgz",
+ "integrity": "sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==",
+ "dependencies": {
+ "load-yaml-file": "^0.2.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8.15"
+ }
+ },
+ "node_modules/prismjs": {
+ "version": "1.29.0",
+ "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz",
+ "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/prompts": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
+ "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
+ "dependencies": {
+ "kleur": "^3.0.3",
+ "sisteransi": "^1.0.5"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/prompts/node_modules/kleur": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
+ "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/property-information": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz",
+ "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/pump": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+ "dependencies": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/queue-tick": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz",
+ "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag=="
+ },
+ "node_modules/rc": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
+ "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
+ "dependencies": {
+ "deep-extend": "^0.6.0",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ },
+ "bin": {
+ "rc": "cli.js"
+ }
+ },
+ "node_modules/readable-stream": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/rehype": {
+ "version": "13.0.1",
+ "resolved": "https://registry.npmjs.org/rehype/-/rehype-13.0.1.tgz",
+ "integrity": "sha512-AcSLS2mItY+0fYu9xKxOu1LhUZeBZZBx8//5HKzF+0XP+eP8+6a5MXn2+DW2kfXR6Dtp1FEXMVrjyKAcvcU8vg==",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "rehype-parse": "^9.0.0",
+ "rehype-stringify": "^10.0.0",
+ "unified": "^11.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/rehype-expressive-code": {
+ "version": "0.35.3",
+ "resolved": "https://registry.npmjs.org/rehype-expressive-code/-/rehype-expressive-code-0.35.3.tgz",
+ "integrity": "sha512-kj43Rg+WzYUs8RRr6XyBr60pnrIZEgbmn9yJoV6qka1UDpcx7r8icn6Q2uSAgaLtlEUy+HCPgQJraOZrA53LOQ==",
+ "dependencies": {
+ "expressive-code": "^0.35.3"
+ }
+ },
+ "node_modules/rehype-format": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/rehype-format/-/rehype-format-5.0.0.tgz",
+ "integrity": "sha512-kM4II8krCHmUhxrlvzFSptvaWh280Fr7UGNJU5DCMuvmAwGCNmGfi9CvFAQK6JDjsNoRMWQStglK3zKJH685Wg==",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "hast-util-embedded": "^3.0.0",
+ "hast-util-is-element": "^3.0.0",
+ "hast-util-phrasing": "^3.0.0",
+ "hast-util-whitespace": "^3.0.0",
+ "html-whitespace-sensitive-tag-names": "^3.0.0",
+ "rehype-minify-whitespace": "^6.0.0",
+ "unist-util-visit-parents": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/rehype-minify-whitespace": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/rehype-minify-whitespace/-/rehype-minify-whitespace-6.0.0.tgz",
+ "integrity": "sha512-i9It4YHR0Sf3GsnlR5jFUKXRr9oayvEk9GKQUkwZv6hs70OH9q3OCZrq9PpLvIGKt3W+JxBOxCidNVpH/6rWdA==",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "hast-util-embedded": "^3.0.0",
+ "hast-util-is-element": "^3.0.0",
+ "hast-util-whitespace": "^3.0.0",
+ "unist-util-is": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/rehype-parse": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-9.0.0.tgz",
+ "integrity": "sha512-WG7nfvmWWkCR++KEkZevZb/uw41E8TsH4DsY9UxsTbIXCVGbAs4S+r8FrQ+OtH5EEQAs+5UxKC42VinkmpA1Yw==",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "hast-util-from-html": "^2.0.0",
+ "unified": "^11.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/rehype-raw": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz",
+ "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "hast-util-raw": "^9.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/rehype-stringify": {
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-10.0.0.tgz",
+ "integrity": "sha512-1TX1i048LooI9QoecrXy7nGFFbFSufxVRAfc6Y9YMRAi56l+oB0zP51mLSV312uRuvVLPV1opSlJmslozR1XHQ==",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "hast-util-to-html": "^9.0.0",
+ "unified": "^11.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-directive": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/remark-directive/-/remark-directive-3.0.0.tgz",
+ "integrity": "sha512-l1UyWJ6Eg1VPU7Hm/9tt0zKtReJQNOA4+iDMAxTyZNWnJnFlbS/7zhiel/rogTLQ2vMYwDzSJa4BiVNqGlqIMA==",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "mdast-util-directive": "^3.0.0",
+ "micromark-extension-directive": "^3.0.0",
+ "unified": "^11.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-gfm": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.0.tgz",
+ "integrity": "sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "mdast-util-gfm": "^3.0.0",
+ "micromark-extension-gfm": "^3.0.0",
+ "remark-parse": "^11.0.0",
+ "remark-stringify": "^11.0.0",
+ "unified": "^11.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-mdx": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.0.1.tgz",
+ "integrity": "sha512-3Pz3yPQ5Rht2pM5R+0J2MrGoBSrzf+tJG94N+t/ilfdh8YLyyKYtidAYwTveB20BoHAcwIopOUqhcmh2F7hGYA==",
+ "dependencies": {
+ "mdast-util-mdx": "^3.0.0",
+ "micromark-extension-mdxjs": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-parse": {
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz",
+ "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "mdast-util-from-markdown": "^2.0.0",
+ "micromark-util-types": "^2.0.0",
+ "unified": "^11.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-rehype": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.0.tgz",
+ "integrity": "sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/mdast": "^4.0.0",
+ "mdast-util-to-hast": "^13.0.0",
+ "unified": "^11.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-smartypants": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/remark-smartypants/-/remark-smartypants-3.0.1.tgz",
+ "integrity": "sha512-qyshfCl2eLO0i0558e79ZJsfojC5wjnYLByjt0FmjJQN6aYwcRxpoj784LZJSoWCdnA2ubh5rLNGb8Uur/wDng==",
+ "dependencies": {
+ "retext": "^9.0.0",
+ "retext-smartypants": "^6.0.0",
+ "unified": "^11.0.4",
+ "unist-util-visit": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/remark-stringify": {
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz",
+ "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "mdast-util-to-markdown": "^2.0.0",
+ "unified": "^11.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/request-light": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/request-light/-/request-light-0.7.0.tgz",
+ "integrity": "sha512-lMbBMrDoxgsyO+yB3sDcrDuX85yYt7sS8BfQd11jtbW/z5ZWgLZRcEGLsLoYw7I0WSUGQBs8CC8ScIxkTX1+6Q=="
+ },
+ "node_modules/require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/restore-cursor": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz",
+ "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==",
+ "dependencies": {
+ "onetime": "^5.1.0",
+ "signal-exit": "^3.0.2"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/restore-cursor/node_modules/mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/restore-cursor/node_modules/onetime": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+ "dependencies": {
+ "mimic-fn": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/restore-cursor/node_modules/signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
+ },
+ "node_modules/retext": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/retext/-/retext-9.0.0.tgz",
+ "integrity": "sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==",
+ "dependencies": {
+ "@types/nlcst": "^2.0.0",
+ "retext-latin": "^4.0.0",
+ "retext-stringify": "^4.0.0",
+ "unified": "^11.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/retext-latin": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/retext-latin/-/retext-latin-4.0.0.tgz",
+ "integrity": "sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==",
+ "dependencies": {
+ "@types/nlcst": "^2.0.0",
+ "parse-latin": "^7.0.0",
+ "unified": "^11.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/retext-smartypants": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/retext-smartypants/-/retext-smartypants-6.1.0.tgz",
+ "integrity": "sha512-LDPXg95346bqFZnDMHo0S7Rq5p64+B+N8Vz733+wPMDtwb9rCOs9LIdIEhrUOU+TAywX9St+ocQWJt8wrzivcQ==",
+ "dependencies": {
+ "@types/nlcst": "^2.0.0",
+ "nlcst-to-string": "^4.0.0",
+ "unist-util-visit": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/retext-stringify": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/retext-stringify/-/retext-stringify-4.0.0.tgz",
+ "integrity": "sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==",
+ "dependencies": {
+ "@types/nlcst": "^2.0.0",
+ "nlcst-to-string": "^4.0.0",
+ "unified": "^11.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rollup": {
+ "version": "4.18.0",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.0.tgz",
+ "integrity": "sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==",
+ "dependencies": {
+ "@types/estree": "1.0.5"
+ },
+ "bin": {
+ "rollup": "dist/bin/rollup"
+ },
+ "engines": {
+ "node": ">=18.0.0",
+ "npm": ">=8.0.0"
+ },
+ "optionalDependencies": {
+ "@rollup/rollup-android-arm-eabi": "4.18.0",
+ "@rollup/rollup-android-arm64": "4.18.0",
+ "@rollup/rollup-darwin-arm64": "4.18.0",
+ "@rollup/rollup-darwin-x64": "4.18.0",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.18.0",
+ "@rollup/rollup-linux-arm-musleabihf": "4.18.0",
+ "@rollup/rollup-linux-arm64-gnu": "4.18.0",
+ "@rollup/rollup-linux-arm64-musl": "4.18.0",
+ "@rollup/rollup-linux-powerpc64le-gnu": "4.18.0",
+ "@rollup/rollup-linux-riscv64-gnu": "4.18.0",
+ "@rollup/rollup-linux-s390x-gnu": "4.18.0",
+ "@rollup/rollup-linux-x64-gnu": "4.18.0",
+ "@rollup/rollup-linux-x64-musl": "4.18.0",
+ "@rollup/rollup-win32-arm64-msvc": "4.18.0",
+ "@rollup/rollup-win32-ia32-msvc": "4.18.0",
+ "@rollup/rollup-win32-x64-msvc": "4.18.0",
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/sax": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz",
+ "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg=="
+ },
+ "node_modules/section-matter": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz",
+ "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==",
+ "dependencies": {
+ "extend-shallow": "^2.0.1",
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/semver": {
+ "version": "7.6.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
+ "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/sharp": {
+ "version": "0.32.6",
+ "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.32.6.tgz",
+ "integrity": "sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==",
+ "hasInstallScript": true,
+ "dependencies": {
+ "color": "^4.2.3",
+ "detect-libc": "^2.0.2",
+ "node-addon-api": "^6.1.0",
+ "prebuild-install": "^7.1.1",
+ "semver": "^7.5.4",
+ "simple-get": "^4.0.1",
+ "tar-fs": "^3.0.4",
+ "tunnel-agent": "^0.6.0"
+ },
+ "engines": {
+ "node": ">=14.15.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shiki": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.10.0.tgz",
+ "integrity": "sha512-YD2sXQ+TMD/F9BimV9Jn0wj35pqOvywvOG/3PB6hGHyGKlM7TJ9tyJ02jOb2kF8F0HfJwKNYrh3sW7jEcuRlXA==",
+ "dependencies": {
+ "@shikijs/core": "1.10.0"
+ }
+ },
+ "node_modules/signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/simple-concat": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz",
+ "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/simple-get": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz",
+ "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "decompress-response": "^6.0.0",
+ "once": "^1.3.1",
+ "simple-concat": "^1.0.0"
+ }
+ },
+ "node_modules/simple-swizzle": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
+ "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==",
+ "dependencies": {
+ "is-arrayish": "^0.3.1"
+ }
+ },
+ "node_modules/sisteransi": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
+ "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="
+ },
+ "node_modules/sitemap": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.2.tgz",
+ "integrity": "sha512-ARCqzHJ0p4gWt+j7NlU5eDlIO9+Rkr/JhPFZKKQ1l5GCus7rJH4UdrlVAh0xC/gDS/Qir2UMxqYNHtsKr2rpCw==",
+ "dependencies": {
+ "@types/node": "^17.0.5",
+ "@types/sax": "^1.2.1",
+ "arg": "^5.0.0",
+ "sax": "^1.2.4"
+ },
+ "bin": {
+ "sitemap": "dist/cli.js"
+ },
+ "engines": {
+ "node": ">=12.0.0",
+ "npm": ">=5.6.0"
+ }
+ },
+ "node_modules/sitemap/node_modules/@types/node": {
+ "version": "17.0.45",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz",
+ "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw=="
+ },
+ "node_modules/source-map": {
+ "version": "0.7.4",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
+ "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
+ "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/space-separated-tokens": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz",
+ "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="
+ },
+ "node_modules/stdin-discarder": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz",
+ "integrity": "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/stream-replace-string": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/stream-replace-string/-/stream-replace-string-2.0.0.tgz",
+ "integrity": "sha512-TlnjJ1C0QrmxRNrON00JvaFFlNh5TTG00APw23j74ET7gkQpTASi6/L2fuiav8pzK715HXtUeClpBTw2NPSn6w=="
+ },
+ "node_modules/streamx": {
+ "version": "2.18.0",
+ "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.18.0.tgz",
+ "integrity": "sha512-LLUC1TWdjVdn1weXGcSxyTR3T4+acB6tVGXT95y0nGbca4t4o/ng1wKAGTljm9VicuCVLvRlqFYXYy5GwgM7sQ==",
+ "dependencies": {
+ "fast-fifo": "^1.3.2",
+ "queue-tick": "^1.0.1",
+ "text-decoder": "^1.1.0"
+ },
+ "optionalDependencies": {
+ "bare-events": "^2.2.0"
+ }
+ },
+ "node_modules/string_decoder": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+ "dependencies": {
+ "safe-buffer": "~5.2.0"
+ }
+ },
+ "node_modules/string-width": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz",
+ "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==",
+ "dependencies": {
+ "emoji-regex": "^10.3.0",
+ "get-east-asian-width": "^1.0.0",
+ "strip-ansi": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/stringify-entities": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz",
+ "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==",
+ "dependencies": {
+ "character-entities-html4": "^2.0.0",
+ "character-entities-legacy": "^3.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
+ "node_modules/strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/strip-bom-string": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz",
+ "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/strip-final-newline": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
+ "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/style-to-object": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.4.tgz",
+ "integrity": "sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==",
+ "dependencies": {
+ "inline-style-parser": "0.1.1"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/tar-fs": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.6.tgz",
+ "integrity": "sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==",
+ "dependencies": {
+ "pump": "^3.0.0",
+ "tar-stream": "^3.1.5"
+ },
+ "optionalDependencies": {
+ "bare-fs": "^2.1.1",
+ "bare-path": "^2.1.0"
+ }
+ },
+ "node_modules/tar-stream": {
+ "version": "3.1.7",
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz",
+ "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==",
+ "dependencies": {
+ "b4a": "^1.6.4",
+ "fast-fifo": "^1.2.0",
+ "streamx": "^2.15.0"
+ }
+ },
+ "node_modules/text-decoder": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.1.0.tgz",
+ "integrity": "sha512-TmLJNj6UgX8xcUZo4UDStGQtDiTzF7BzWlzn9g7UWrjkpHr5uJTK1ld16wZ3LXb2vb6jH8qU89dW5whuMdXYdw==",
+ "dependencies": {
+ "b4a": "^1.6.4"
+ }
+ },
+ "node_modules/to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/trim-lines": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz",
+ "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/trough": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz",
+ "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/tsconfck": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.1.tgz",
+ "integrity": "sha512-00eoI6WY57SvZEVjm13stEVE90VkEdJAFGgpFLTsZbJyW/LwFQ7uQxJHWpZ2hzSWgCPKc9AnBnNP+0X7o3hAmQ==",
+ "bin": {
+ "tsconfck": "bin/tsconfck.js"
+ },
+ "engines": {
+ "node": "^18 || >=20"
+ },
+ "peerDependencies": {
+ "typescript": "^5.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/tslib": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
+ "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==",
+ "optional": true
+ },
+ "node_modules/tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
+ "dependencies": {
+ "safe-buffer": "^5.0.1"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/type-fest": {
+ "version": "2.19.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz",
+ "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==",
+ "engines": {
+ "node": ">=12.20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/typesafe-path": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/typesafe-path/-/typesafe-path-0.2.2.tgz",
+ "integrity": "sha512-OJabfkAg1WLZSqJAJ0Z6Sdt3utnbzr/jh+NAHoyWHJe8CMSy79Gm085094M9nvTPy22KzTVn5Zq5mbapCI/hPA=="
+ },
+ "node_modules/typescript": {
+ "version": "5.5.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.2.tgz",
+ "integrity": "sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==",
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
+ "node_modules/typescript-auto-import-cache": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/typescript-auto-import-cache/-/typescript-auto-import-cache-0.3.3.tgz",
+ "integrity": "sha512-ojEC7+Ci1ij9eE6hp8Jl9VUNnsEKzztktP5gtYNRMrTmfXVwA1PITYYAkpxCvvupdSYa/Re51B6KMcv1CTZEUA==",
+ "dependencies": {
+ "semver": "^7.3.8"
+ }
+ },
+ "node_modules/undici-types": {
+ "version": "5.26.5",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
+ "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="
+ },
+ "node_modules/unified": {
+ "version": "11.0.5",
+ "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz",
+ "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "bail": "^2.0.0",
+ "devlop": "^1.0.0",
+ "extend": "^3.0.0",
+ "is-plain-obj": "^4.0.0",
+ "trough": "^2.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-find-after": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz",
+ "integrity": "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-is": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-is": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz",
+ "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==",
+ "dependencies": {
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-modify-children": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-modify-children/-/unist-util-modify-children-4.0.0.tgz",
+ "integrity": "sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "array-iterate": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-position": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz",
+ "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==",
+ "dependencies": {
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-position-from-estree": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz",
+ "integrity": "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==",
+ "dependencies": {
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-remove-position": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz",
+ "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-visit": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-stringify-position": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz",
+ "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==",
+ "dependencies": {
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-visit": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz",
+ "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-is": "^6.0.0",
+ "unist-util-visit-parents": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-visit-children": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-visit-children/-/unist-util-visit-children-3.0.0.tgz",
+ "integrity": "sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==",
+ "dependencies": {
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/unist-util-visit-parents": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz",
+ "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-is": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/update-browserslist-db": {
+ "version": "1.0.16",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz",
+ "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "escalade": "^3.1.2",
+ "picocolors": "^1.0.1"
+ },
+ "bin": {
+ "update-browserslist-db": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
+ }
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
+ "node_modules/vfile": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz",
+ "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-stringify-position": "^4.0.0",
+ "vfile-message": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/vfile-location": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.2.tgz",
+ "integrity": "sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/vfile-message": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz",
+ "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-stringify-position": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/vite": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.2.tgz",
+ "integrity": "sha512-6lA7OBHBlXUxiJxbO5aAY2fsHHzDr1q7DvXYnyZycRs2Dz+dXBWuhpWHvmljTRTpQC2uvGmUFFkSHF2vGo90MA==",
+ "dependencies": {
+ "esbuild": "^0.21.3",
+ "postcss": "^8.4.38",
+ "rollup": "^4.13.0"
+ },
+ "bin": {
+ "vite": "bin/vite.js"
+ },
+ "engines": {
+ "node": "^18.0.0 || >=20.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/vitejs/vite?sponsor=1"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.3"
+ },
+ "peerDependencies": {
+ "@types/node": "^18.0.0 || >=20.0.0",
+ "less": "*",
+ "lightningcss": "^1.21.0",
+ "sass": "*",
+ "stylus": "*",
+ "sugarss": "*",
+ "terser": "^5.4.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "less": {
+ "optional": true
+ },
+ "lightningcss": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "stylus": {
+ "optional": true
+ },
+ "sugarss": {
+ "optional": true
+ },
+ "terser": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vitefu": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.5.tgz",
+ "integrity": "sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==",
+ "peerDependencies": {
+ "vite": "^3.0.0 || ^4.0.0 || ^5.0.0"
+ },
+ "peerDependenciesMeta": {
+ "vite": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/volar-service-css": {
+ "version": "0.0.45",
+ "resolved": "https://registry.npmjs.org/volar-service-css/-/volar-service-css-0.0.45.tgz",
+ "integrity": "sha512-f+AlUI1+kESbcZSVaNJVAnK0c/9Da5StoxzPqA5/8VqUHJWNdubWNnwG5xpFVTfgh6pgTcey3UBhBfHytFaIOg==",
+ "dependencies": {
+ "vscode-css-languageservice": "^6.2.10",
+ "vscode-languageserver-textdocument": "^1.0.11",
+ "vscode-uri": "^3.0.8"
+ },
+ "peerDependencies": {
+ "@volar/language-service": "~2.2.3"
+ },
+ "peerDependenciesMeta": {
+ "@volar/language-service": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/volar-service-emmet": {
+ "version": "0.0.45",
+ "resolved": "https://registry.npmjs.org/volar-service-emmet/-/volar-service-emmet-0.0.45.tgz",
+ "integrity": "sha512-9nLXSDkR1vA/3fQkFEsSXAu3XovQxOpTkVG2jilQgfek/K1ZLkaA/WMhN/TtmPmQg4NxE9Ni6mA5udBQ5gVXIA==",
+ "dependencies": {
+ "@emmetio/css-parser": "^0.4.0",
+ "@emmetio/html-matcher": "^1.3.0",
+ "@vscode/emmet-helper": "^2.9.2"
+ },
+ "peerDependencies": {
+ "@volar/language-service": "~2.2.3"
+ },
+ "peerDependenciesMeta": {
+ "@volar/language-service": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/volar-service-html": {
+ "version": "0.0.45",
+ "resolved": "https://registry.npmjs.org/volar-service-html/-/volar-service-html-0.0.45.tgz",
+ "integrity": "sha512-tLTJqfy1v5C4nmeAsfekFIKPl4r4qDMyL0L9MWywr/EApZzPCsbeUGxCqdzxSMC2q7PMCfX2i167txDo+J0LVA==",
+ "dependencies": {
+ "vscode-html-languageservice": "npm:@johnsoncodehk/vscode-html-languageservice@5.2.0-34a5462",
+ "vscode-languageserver-textdocument": "^1.0.11",
+ "vscode-uri": "^3.0.8"
+ },
+ "peerDependencies": {
+ "@volar/language-service": "~2.2.3"
+ },
+ "peerDependenciesMeta": {
+ "@volar/language-service": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/volar-service-html/node_modules/@vscode/l10n": {
+ "version": "0.0.18",
+ "resolved": "https://registry.npmjs.org/@vscode/l10n/-/l10n-0.0.18.tgz",
+ "integrity": "sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ=="
+ },
+ "node_modules/volar-service-html/node_modules/vscode-html-languageservice": {
+ "name": "@johnsoncodehk/vscode-html-languageservice",
+ "version": "5.2.0-34a5462",
+ "resolved": "https://registry.npmjs.org/@johnsoncodehk/vscode-html-languageservice/-/vscode-html-languageservice-5.2.0-34a5462.tgz",
+ "integrity": "sha512-etqLfpSJ5zaw76KUNF603be6d6QsiQPmaHr9FKEp4zhLZJzWCCMH6Icak7MtLUFLZLMpL761mZNImi/joBo1ZA==",
+ "dependencies": {
+ "@vscode/l10n": "^0.0.18",
+ "vscode-languageserver-textdocument": "^1.0.11",
+ "vscode-languageserver-types": "^3.17.5",
+ "vscode-uri": "^3.0.8"
+ }
+ },
+ "node_modules/volar-service-prettier": {
+ "version": "0.0.45",
+ "resolved": "https://registry.npmjs.org/volar-service-prettier/-/volar-service-prettier-0.0.45.tgz",
+ "integrity": "sha512-+mBS2EsDgp/kunKEBnHvhBwIQm5v2ahw4NKpKdg4sTpXy3UxqHt+Fq/wRYQ7Z8LlNVNRVfp75ThjM+w2zaZBAw==",
+ "dependencies": {
+ "vscode-uri": "^3.0.8"
+ },
+ "peerDependencies": {
+ "@volar/language-service": "~2.2.3",
+ "prettier": "^2.2 || ^3.0"
+ },
+ "peerDependenciesMeta": {
+ "@volar/language-service": {
+ "optional": true
+ },
+ "prettier": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/volar-service-typescript": {
+ "version": "0.0.45",
+ "resolved": "https://registry.npmjs.org/volar-service-typescript/-/volar-service-typescript-0.0.45.tgz",
+ "integrity": "sha512-i/mMIIAMastJ2kgPo3qvX0Rrl7NyxhIYZ0ug/B4ambZcLPI1vzBgS2fmvyWX3jhBYHh8NmbAotFj+0Y9JtN47A==",
+ "dependencies": {
+ "path-browserify": "^1.0.1",
+ "semver": "^7.5.4",
+ "typescript-auto-import-cache": "^0.3.1",
+ "vscode-languageserver-textdocument": "^1.0.11",
+ "vscode-nls": "^5.2.0"
+ },
+ "peerDependencies": {
+ "@volar/language-service": "~2.2.3"
+ },
+ "peerDependenciesMeta": {
+ "@volar/language-service": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/volar-service-typescript-twoslash-queries": {
+ "version": "0.0.45",
+ "resolved": "https://registry.npmjs.org/volar-service-typescript-twoslash-queries/-/volar-service-typescript-twoslash-queries-0.0.45.tgz",
+ "integrity": "sha512-KrPUUvKggZgV9mrDpstCzmf20irgv0ooMv+FGDzIIQUkya+d2+nSS8Mx2h9FvsYgLccUVw5jU3Rhwhd3pv/7qg==",
+ "peerDependencies": {
+ "@volar/language-service": "~2.2.3"
+ },
+ "peerDependenciesMeta": {
+ "@volar/language-service": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vscode-css-languageservice": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/vscode-css-languageservice/-/vscode-css-languageservice-6.3.0.tgz",
+ "integrity": "sha512-nU92imtkgzpCL0xikrIb8WvedV553F2BENzgz23wFuok/HLN5BeQmroMy26pUwFxV2eV8oNRmYCUv8iO7kSMhw==",
+ "dependencies": {
+ "@vscode/l10n": "^0.0.18",
+ "vscode-languageserver-textdocument": "^1.0.11",
+ "vscode-languageserver-types": "3.17.5",
+ "vscode-uri": "^3.0.8"
+ }
+ },
+ "node_modules/vscode-css-languageservice/node_modules/@vscode/l10n": {
+ "version": "0.0.18",
+ "resolved": "https://registry.npmjs.org/@vscode/l10n/-/l10n-0.0.18.tgz",
+ "integrity": "sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ=="
+ },
+ "node_modules/vscode-html-languageservice": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/vscode-html-languageservice/-/vscode-html-languageservice-5.3.0.tgz",
+ "integrity": "sha512-C4Z3KsP5Ih+fjHpiBc5jxmvCl+4iEwvXegIrzu2F5pktbWvQaBT3YkVPk8N+QlSSMk8oCG6PKtZ/Sq2YHb5e8g==",
+ "dependencies": {
+ "@vscode/l10n": "^0.0.18",
+ "vscode-languageserver-textdocument": "^1.0.11",
+ "vscode-languageserver-types": "^3.17.5",
+ "vscode-uri": "^3.0.8"
+ }
+ },
+ "node_modules/vscode-html-languageservice/node_modules/@vscode/l10n": {
+ "version": "0.0.18",
+ "resolved": "https://registry.npmjs.org/@vscode/l10n/-/l10n-0.0.18.tgz",
+ "integrity": "sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ=="
+ },
+ "node_modules/vscode-jsonrpc": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz",
+ "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==",
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/vscode-languageserver": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-9.0.1.tgz",
+ "integrity": "sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==",
+ "dependencies": {
+ "vscode-languageserver-protocol": "3.17.5"
+ },
+ "bin": {
+ "installServerIntoExtension": "bin/installServerIntoExtension"
+ }
+ },
+ "node_modules/vscode-languageserver-protocol": {
+ "version": "3.17.5",
+ "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz",
+ "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==",
+ "dependencies": {
+ "vscode-jsonrpc": "8.2.0",
+ "vscode-languageserver-types": "3.17.5"
+ }
+ },
+ "node_modules/vscode-languageserver-textdocument": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.11.tgz",
+ "integrity": "sha512-X+8T3GoiwTVlJbicx/sIAF+yuJAqz8VvwJyoMVhwEMoEKE/fkDmrqUgDMyBECcM2A2frVZIUj5HI/ErRXCfOeA=="
+ },
+ "node_modules/vscode-languageserver-types": {
+ "version": "3.17.5",
+ "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz",
+ "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg=="
+ },
+ "node_modules/vscode-nls": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-5.2.0.tgz",
+ "integrity": "sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng=="
+ },
+ "node_modules/vscode-uri": {
+ "version": "3.0.8",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz",
+ "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw=="
+ },
+ "node_modules/web-namespaces": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz",
+ "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/which-pm": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/which-pm/-/which-pm-2.2.0.tgz",
+ "integrity": "sha512-MOiaDbA5ZZgUjkeMWM5EkJp4loW5ZRoa5bc3/aeMox/PJelMhE6t7S/mLuiY43DBupyxH+S0U1bTui9kWUlmsw==",
+ "dependencies": {
+ "load-yaml-file": "^0.2.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8.15"
+ }
+ },
+ "node_modules/which-pm-runs": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz",
+ "integrity": "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/widest-line": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz",
+ "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==",
+ "dependencies": {
+ "string-width": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/widest-line/node_modules/emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="
+ },
+ "node_modules/widest-line/node_modules/string-width": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+ "dependencies": {
+ "eastasianwidth": "^0.2.0",
+ "emoji-regex": "^9.2.2",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/wrap-ansi": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+ "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
+ "dependencies": {
+ "ansi-styles": "^6.1.0",
+ "string-width": "^5.0.1",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/ansi-styles": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="
+ },
+ "node_modules/wrap-ansi/node_modules/string-width": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+ "dependencies": {
+ "eastasianwidth": "^0.2.0",
+ "emoji-regex": "^9.2.2",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+ },
+ "node_modules/y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
+ },
+ "node_modules/yargs": {
+ "version": "17.7.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+ "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
+ "dependencies": {
+ "cliui": "^8.0.1",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.3",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^21.1.1"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yargs-parser": {
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yargs/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/yargs/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+ },
+ "node_modules/yargs/node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/yargs/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/yocto-queue": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.0.tgz",
+ "integrity": "sha512-cMojmlnwkAgIXqga+2sXshlgrrcI0QEPJ5n58pEvtuFo4PaekfomlCudArDD7hj8Hkswjl0/x4eu4q+Xa0WFgQ==",
+ "engines": {
+ "node": ">=12.20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/zod": {
+ "version": "3.23.8",
+ "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz",
+ "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==",
+ "funding": {
+ "url": "https://github.com/sponsors/colinhacks"
+ }
+ },
+ "node_modules/zod-to-json-schema": {
+ "version": "3.23.1",
+ "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.23.1.tgz",
+ "integrity": "sha512-oT9INvydob1XV0v1d2IadrR74rLtDInLvDFfAa1CG0Pmg/vxATk7I2gSelfj271mbzeM4Da0uuDQE/Nkj3DWNw==",
+ "peerDependencies": {
+ "zod": "^3.23.3"
+ }
+ },
+ "node_modules/zwitch": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz",
+ "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..66e53ea
--- /dev/null
+++ b/package.json
@@ -0,0 +1,31 @@
+{
+ "name": "shoukaku-docs",
+ "type": "module",
+ "version": "0.0.1",
+ "scripts": {
+ "dev": "astro dev",
+ "start": "astro dev",
+ "build": "astro check && astro build",
+ "preview": "astro preview",
+ "astro": "astro"
+ },
+ "dependencies": {
+ "@astrojs/check": "^0.7.0",
+ "@astrojs/starlight": "^0.24.5",
+ "astro": "^4.10.2",
+ "sharp": "^0.32.5",
+ "starlight-package-managers": "^0.6.0",
+ "starlight-typedoc": "^0.13.0",
+ "starlight-versions": "^0.1.0",
+ "typescript": "^5.5.2"
+ },
+ "devDependencies": {
+ "@typescript-eslint/parser": "^7.14.1",
+ "eslint": "^8.56.0",
+ "eslint-plugin-astro": "^1.2.2",
+ "eslint-plugin-jsx-a11y": "^6.9.0",
+ "prettier": "^3.3.2",
+ "prettier-config-standard": "^7.0.0",
+ "prettier-plugin-astro": "^0.14.0"
+ }
+}
\ No newline at end of file
diff --git a/prettier.config.cjs b/prettier.config.cjs
new file mode 100644
index 0000000..1d3eabf
--- /dev/null
+++ b/prettier.config.cjs
@@ -0,0 +1,14 @@
+/** @type {import("prettier").Config} */
+module.exports = {
+ ...require('prettier-config-standard'),
+ pluginSearchDirs: [__dirname],
+ plugins: [require.resolve('prettier-plugin-astro')],
+ overrides: [
+ {
+ files: '*.astro',
+ options: {
+ parser: 'astro'
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/public/favicon.svg b/public/favicon.svg
new file mode 100644
index 0000000..cba5ac1
--- /dev/null
+++ b/public/favicon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/shoukaku b/shoukaku
index 6468e25..761f40f 160000
--- a/shoukaku
+++ b/shoukaku
@@ -1 +1 @@
-Subproject commit 6468e258183d4279de6991b75c68720f170b5d8c
+Subproject commit 761f40f7c0b54473070fa1c40602d1504a8bf167
diff --git a/src/assets/3.4.2/shoukaku.png b/src/assets/3.4.2/shoukaku.png
new file mode 100644
index 0000000..853515a
Binary files /dev/null and b/src/assets/3.4.2/shoukaku.png differ
diff --git a/src/assets/4.0.1/shoukaku.webp b/src/assets/4.0.1/shoukaku.webp
new file mode 100644
index 0000000..5514903
Binary files /dev/null and b/src/assets/4.0.1/shoukaku.webp differ
diff --git a/src/assets/shoukaku.webp b/src/assets/shoukaku.webp
new file mode 100644
index 0000000..5514903
Binary files /dev/null and b/src/assets/shoukaku.webp differ
diff --git a/src/content/config.ts b/src/content/config.ts
new file mode 100644
index 0000000..9567855
--- /dev/null
+++ b/src/content/config.ts
@@ -0,0 +1,8 @@
+import { defineCollection } from 'astro:content';
+import { docsSchema } from '@astrojs/starlight/schema';
+import { docsVersionsSchema } from 'starlight-versions/schema';
+
+export const collections = {
+ docs: defineCollection({ schema: docsSchema() }),
+ versions: defineCollection({ type: 'data', schema: docsVersionsSchema() }),
+};
diff --git a/src/content/docs/3.4.2/api/README.md b/src/content/docs/3.4.2/api/README.md
new file mode 100644
index 0000000..6d04277
--- /dev/null
+++ b/src/content/docs/3.4.2/api/README.md
@@ -0,0 +1,68 @@
+---
+editUrl: false
+next: false
+prev: false
+title: shoukaku
+slug: 3.4.2/api/readme
+---
+
+## Namespaces
+
+* [Connectors](/3.4.2/api/namespaces/connectors/readme/)
+* [Constants](/3.4.2/api/namespaces/constants/readme/)
+* [Utils](/3.4.2/api/namespaces/utils/readme/)
+
+## Classes
+
+* [Connection](/3.4.2/api/classes/connection/)
+* [Connector](/3.4.2/api/classes/connector/)
+* [Filters](/3.4.2/api/classes/filters/)
+* [Node](/3.4.2/api/classes/node/)
+* [Player](/3.4.2/api/classes/player/)
+* [Rest](/3.4.2/api/classes/rest/)
+* [Shoukaku](/3.4.2/api/classes/shoukaku/)
+
+## Interfaces
+
+* [Address](/3.4.2/api/interfaces/address/)
+* [Band](/3.4.2/api/interfaces/band/)
+* [ChannelMixSettings](/3.4.2/api/interfaces/channelmixsettings/)
+* [ConnectorMethods](/3.4.2/api/interfaces/connectormethods/)
+* [DistortionSettings](/3.4.2/api/interfaces/distortionsettings/)
+* [Exception](/3.4.2/api/interfaces/exception/)
+* [FilterOptions](/3.4.2/api/interfaces/filteroptions/)
+* [FreqSettings](/3.4.2/api/interfaces/freqsettings/)
+* [KaraokeSettings](/3.4.2/api/interfaces/karaokesettings/)
+* [LavalinkResponse](/3.4.2/api/interfaces/lavalinkresponse/)
+* [LowPassSettings](/3.4.2/api/interfaces/lowpasssettings/)
+* [MergedShoukakuOptions](/3.4.2/api/interfaces/mergedshoukakuoptions/)
+* [NodeOption](/3.4.2/api/interfaces/nodeoption/)
+* [NodeStats](/3.4.2/api/interfaces/nodestats/)
+* [NonResumableHeaders](/3.4.2/api/interfaces/nonresumableheaders/)
+* [PlayOptions](/3.4.2/api/interfaces/playoptions/)
+* [PlayPayload](/3.4.2/api/interfaces/playpayload/)
+* [PlayerEvent](/3.4.2/api/interfaces/playerevent/)
+* [PlayerUpdate](/3.4.2/api/interfaces/playerupdate/)
+* [ResumableHeaders](/3.4.2/api/interfaces/resumableheaders/)
+* [ResumeOptions](/3.4.2/api/interfaces/resumeoptions/)
+* [RotationSettings](/3.4.2/api/interfaces/rotationsettings/)
+* [RoutePlanner](/3.4.2/api/interfaces/routeplanner/)
+* [ServerUpdate](/3.4.2/api/interfaces/serverupdate/)
+* [ShoukakuOptions](/3.4.2/api/interfaces/shoukakuoptions/)
+* [StateUpdatePartial](/3.4.2/api/interfaces/stateupdatepartial/)
+* [Structures](/3.4.2/api/interfaces/structures/)
+* [TimescaleSettings](/3.4.2/api/interfaces/timescalesettings/)
+* [Track](/3.4.2/api/interfaces/track/)
+* [TrackEndEvent](/3.4.2/api/interfaces/trackendevent/)
+* [TrackExceptionEvent](/3.4.2/api/interfaces/trackexceptionevent/)
+* [TrackStartEvent](/3.4.2/api/interfaces/trackstartevent/)
+* [TrackStuckEvent](/3.4.2/api/interfaces/trackstuckevent/)
+* [VoiceChannelOptions](/3.4.2/api/interfaces/voicechanneloptions/)
+* [WebSocketClosedEvent](/3.4.2/api/interfaces/websocketclosedevent/)
+
+## Type Aliases
+
+* [LoadType](/3.4.2/api/type-aliases/loadtype/)
+* [PlayerEventType](/3.4.2/api/type-aliases/playereventtype/)
+* [Severity](/3.4.2/api/type-aliases/severity/)
+* [TrackEndReason](/3.4.2/api/type-aliases/trackendreason/)
diff --git a/src/content/docs/3.4.2/api/classes/Connection.md b/src/content/docs/3.4.2/api/classes/Connection.md
new file mode 100644
index 0000000..13e9b15
--- /dev/null
+++ b/src/content/docs/3.4.2/api/classes/Connection.md
@@ -0,0 +1,1693 @@
+---
+editUrl: false
+next: false
+prev: false
+title: Connection
+slug: 3.4.2/apiclasses/connection
+---
+
+Represents a connection to a Discord voice channel
+
+## Extends
+
+* `EventEmitter`
+
+## Constructors
+
+### new Connection()
+
+> **new Connection**(`player`, `options`): [`Connection`](/3.4.2/api/classes/connection/)
+
+#### Parameters
+
+β’ **player**: [`Player`](/3.4.2/api/classes/player/)
+
+Shoukaku Player class
+
+β’ **options**: [`VoiceChannelOptions`](/3.4.2/api/interfaces/voicechanneloptions/)
+
+#### Returns
+
+[`Connection`](/3.4.2/api/classes/connection/)
+
+#### Overrides
+
+`EventEmitter.constructor`
+
+#### Defined in
+
+[src/guild/Connection.ts:85](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Connection.ts#L85)
+
+## Properties
+
+### channelId
+
+> **channelId**: `null` | `string`
+
+ID of the connected voice channel
+
+#### Defined in
+
+[src/guild/Connection.ts:40](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Connection.ts#L40)
+
+***
+
+### deafened
+
+> **deafened**: `boolean`
+
+Deafen status in connected voice channel
+
+#### Defined in
+
+[src/guild/Connection.ts:60](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Connection.ts#L60)
+
+***
+
+### guildId
+
+> **guildId**: `string`
+
+ID of Guild that contains the connected voice channel
+
+#### Defined in
+
+[src/guild/Connection.ts:36](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Connection.ts#L36)
+
+***
+
+### moved
+
+> **moved**: `boolean`
+
+Boolean that indicates if voice channel changed since initial connection
+
+#### Defined in
+
+[src/guild/Connection.ts:68](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Connection.ts#L68)
+
+***
+
+### muted
+
+> **muted**: `boolean`
+
+Mute status in connected voice channel
+
+#### Defined in
+
+[src/guild/Connection.ts:56](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Connection.ts#L56)
+
+***
+
+### player
+
+> `readonly` **player**: [`Player`](/3.4.2/api/classes/player/)
+
+An instance of the Player class
+
+#### Defined in
+
+[src/guild/Connection.ts:32](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Connection.ts#L32)
+
+***
+
+### reconnecting
+
+> **reconnecting**: `boolean`
+
+Boolean that indicates if this instance is reconnecting
+
+#### Defined in
+
+[src/guild/Connection.ts:72](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Connection.ts#L72)
+
+***
+
+### region
+
+> **region**: `null` | `string`
+
+Region of connected voice channel
+
+#### Defined in
+
+[src/guild/Connection.ts:52](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Connection.ts#L52)
+
+***
+
+### sessionId
+
+> **sessionId**: `null` | `string`
+
+ID of current session
+
+#### Defined in
+
+[src/guild/Connection.ts:48](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Connection.ts#L48)
+
+***
+
+### shardId
+
+> **shardId**: `number`
+
+ID of the Shard that contains the guild that contains the connected voice channel
+
+#### Defined in
+
+[src/guild/Connection.ts:44](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Connection.ts#L44)
+
+***
+
+### state
+
+> **state**: [`State`](/3.4.2/api/namespaces/constants/enumerations/state/)
+
+Connection state
+
+#### Defined in
+
+[src/guild/Connection.ts:64](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Connection.ts#L64)
+
+***
+
+### captureRejectionSymbol
+
+> `readonly` `static` **captureRejectionSymbol**: *typeof* [`captureRejectionSymbol`](/3.4.2/api/classes/connection/#capturerejectionsymbol)
+
+Value: `Symbol.for('nodejs.rejection')`
+
+See how to write a custom `rejection handler`.
+
+#### Since
+
+v13.4.0, v12.16.0
+
+#### Inherited from
+
+`EventEmitter.captureRejectionSymbol`
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:452
+
+***
+
+### captureRejections
+
+> `static` **captureRejections**: `boolean`
+
+Value: [boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type)
+
+Change the default `captureRejections` option on all new `EventEmitter` objects.
+
+#### Since
+
+v13.4.0, v12.16.0
+
+#### Inherited from
+
+`EventEmitter.captureRejections`
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:459
+
+***
+
+### defaultMaxListeners
+
+> `static` **defaultMaxListeners**: `number`
+
+By default, a maximum of `10` listeners can be registered for any single
+event. This limit can be changed for individual `EventEmitter` instances
+using the `emitter.setMaxListeners(n)` method. To change the default
+for *all*`EventEmitter` instances, the `events.defaultMaxListeners` property
+can be used. If this value is not a positive number, a `RangeError` is thrown.
+
+Take caution when setting the `events.defaultMaxListeners` because the
+change affects *all* `EventEmitter` instances, including those created before
+the change is made. However, calling `emitter.setMaxListeners(n)` still has
+precedence over `events.defaultMaxListeners`.
+
+This is not a hard limit. The `EventEmitter` instance will allow
+more listeners to be added but will output a trace warning to stderr indicating
+that a "possible EventEmitter memory leak" has been detected. For any single
+`EventEmitter`, the `emitter.getMaxListeners()` and `emitter.setMaxListeners()` methods can be used to
+temporarily avoid this warning:
+
+```js
+import { EventEmitter } from 'node:events';
+const emitter = new EventEmitter();
+emitter.setMaxListeners(emitter.getMaxListeners() + 1);
+emitter.once('event', () => {
+ // do stuff
+ emitter.setMaxListeners(Math.max(emitter.getMaxListeners() - 1, 0));
+});
+```
+
+The `--trace-warnings` command-line flag can be used to display the
+stack trace for such warnings.
+
+The emitted warning can be inspected with `process.on('warning')` and will
+have the additional `emitter`, `type`, and `count` properties, referring to
+the event emitter instance, the event's name and the number of attached
+listeners, respectively.
+Its `name` property is set to `'MaxListenersExceededWarning'`.
+
+#### Since
+
+v0.11.2
+
+#### Inherited from
+
+`EventEmitter.defaultMaxListeners`
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:498
+
+***
+
+### errorMonitor
+
+> `readonly` `static` **errorMonitor**: *typeof* [`errorMonitor`](/3.4.2/api/classes/connection/#errormonitor)
+
+This symbol shall be used to install a listener for only monitoring `'error'` events. Listeners installed using this symbol are called before the regular `'error'` listeners are called.
+
+Installing a listener using this symbol does not change the behavior once an `'error'` event is emitted. Therefore, the process will still crash if no
+regular `'error'` listener is installed.
+
+#### Since
+
+v13.6.0, v12.17.0
+
+#### Inherited from
+
+`EventEmitter.errorMonitor`
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:445
+
+## Methods
+
+### \[captureRejectionSymbol]\()?
+
+> `optional` **\[captureRejectionSymbol]**\<`K`>(`error`, `event`, ...`args`): `void`
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **error**: `Error`
+
+β’ **event**: `string` | `symbol`
+
+β’ ...**args**: `AnyRest`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+`EventEmitter.[captureRejectionSymbol]`
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:136
+
+***
+
+### addListener()
+
+> **addListener**\<`K`>(`eventName`, `listener`): `this`
+
+Alias for `emitter.on(eventName, listener)`.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+β’ **listener**
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+`EventEmitter.addListener`
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:597
+
+***
+
+### connect()
+
+> **connect**(`options`): `Promise`\<`void`>
+
+Connect the current bot user to a voice channel
+
+#### Parameters
+
+β’ **options**: [`VoiceChannelOptions`](/3.4.2/api/interfaces/voicechanneloptions/)
+
+#### Returns
+
+`Promise`\<`void`>
+
+#### Defined in
+
+[src/guild/Connection.ts:145](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Connection.ts#L145)
+
+***
+
+### destroyLavalinkPlayer()
+
+> **destroyLavalinkPlayer**(): `void`
+
+Destroy the current Lavalink player
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/guild/Connection.ts:244](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Connection.ts#L244)
+
+***
+
+### disconnect()
+
+> **disconnect**(): `void`
+
+Disconnect the current bot user from the connected voice channel
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/guild/Connection.ts:124](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Connection.ts#L124)
+
+***
+
+### emit()
+
+> **emit**\<`K`>(`eventName`, ...`args`): `boolean`
+
+Synchronously calls each of the listeners registered for the event named `eventName`, in the order they were registered, passing the supplied arguments
+to each.
+
+Returns `true` if the event had listeners, `false` otherwise.
+
+```js
+import { EventEmitter } from 'node:events';
+const myEmitter = new EventEmitter();
+
+// First listener
+myEmitter.on('event', function firstListener() {
+ console.log('Helloooo! first listener');
+});
+// Second listener
+myEmitter.on('event', function secondListener(arg1, arg2) {
+ console.log(`event with parameters ${arg1}, ${arg2} in second listener`);
+});
+// Third listener
+myEmitter.on('event', function thirdListener(...args) {
+ const parameters = args.join(', ');
+ console.log(`event with parameters ${parameters} in third listener`);
+});
+
+console.log(myEmitter.listeners('event'));
+
+myEmitter.emit('event', 1, 2, 3, 4, 5);
+
+// Prints:
+// [
+// [Function: firstListener],
+// [Function: secondListener],
+// [Function: thirdListener]
+// ]
+// Helloooo! first listener
+// event with parameters 1, 2 in second listener
+// event with parameters 1, 2, 3, 4, 5 in third listener
+```
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+β’ ...**args**: `AnyRest`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+`EventEmitter.emit`
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:859
+
+***
+
+### eventNames()
+
+> **eventNames**(): (`string` | `symbol`)\[]
+
+Returns an array listing the events for which the emitter has registered
+listeners. The values in the array are strings or `Symbol`s.
+
+```js
+import { EventEmitter } from 'node:events';
+
+const myEE = new EventEmitter();
+myEE.on('foo', () => {});
+myEE.on('bar', () => {});
+
+const sym = Symbol('symbol');
+myEE.on(sym, () => {});
+
+console.log(myEE.eventNames());
+// Prints: [ 'foo', 'bar', Symbol(symbol) ]
+```
+
+#### Returns
+
+(`string` | `symbol`)\[]
+
+#### Inherited from
+
+`EventEmitter.eventNames`
+
+#### Since
+
+v6.0.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:922
+
+***
+
+### getMaxListeners()
+
+> **getMaxListeners**(): `number`
+
+Returns the current max listener value for the `EventEmitter` which is either
+set by `emitter.setMaxListeners(n)` or defaults to [defaultMaxListeners](../../../../../../api/classes/connection/#defaultmaxlisteners).
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+`EventEmitter.getMaxListeners`
+
+#### Since
+
+v1.0.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:774
+
+***
+
+### listenerCount()
+
+> **listenerCount**\<`K`>(`eventName`, `listener`?): `number`
+
+Returns the number of listeners listening for the event named `eventName`.
+If `listener` is provided, it will return how many times the listener is found
+in the list of the listeners of the event.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+The name of the event being listened for
+
+β’ **listener?**: `Function`
+
+The event handler function
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+`EventEmitter.listenerCount`
+
+#### Since
+
+v3.2.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:868
+
+***
+
+### listeners()
+
+> **listeners**\<`K`>(`eventName`): `Function`\[]
+
+Returns a copy of the array of listeners for the event named `eventName`.
+
+```js
+server.on('connection', (stream) => {
+ console.log('someone connected!');
+});
+console.log(util.inspect(server.listeners('connection')));
+// Prints: [ [Function] ]
+```
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+#### Returns
+
+`Function`\[]
+
+#### Inherited from
+
+`EventEmitter.listeners`
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:787
+
+***
+
+### off()
+
+> **off**\<`K`>(`eventName`, `listener`): `this`
+
+Alias for `emitter.removeListener()`.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+β’ **listener**
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+`EventEmitter.off`
+
+#### Since
+
+v10.0.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:747
+
+***
+
+### on()
+
+> **on**\<`K`>(`eventName`, `listener`): `this`
+
+Adds the `listener` function to the end of the listeners array for the event
+named `eventName`. No checks are made to see if the `listener` has already
+been added. Multiple calls passing the same combination of `eventName` and
+`listener` will result in the `listener` being added, and called, multiple times.
+
+```js
+server.on('connection', (stream) => {
+ console.log('someone connected!');
+});
+```
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+By default, event listeners are invoked in the order they are added. The `emitter.prependListener()` method can be used as an alternative to add the
+event listener to the beginning of the listeners array.
+
+```js
+import { EventEmitter } from 'node:events';
+const myEE = new EventEmitter();
+myEE.on('foo', () => console.log('a'));
+myEE.prependListener('foo', () => console.log('b'));
+myEE.emit('foo');
+// Prints:
+// b
+// a
+```
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+The name of the event.
+
+β’ **listener**
+
+The callback function
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+`EventEmitter.on`
+
+#### Since
+
+v0.1.101
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:629
+
+***
+
+### once()
+
+> **once**\<`K`>(`eventName`, `listener`): `this`
+
+Adds a **one-time** `listener` function for the event named `eventName`. The
+next time `eventName` is triggered, this listener is removed and then invoked.
+
+```js
+server.once('connection', (stream) => {
+ console.log('Ah, we have our first user!');
+});
+```
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+By default, event listeners are invoked in the order they are added. The `emitter.prependOnceListener()` method can be used as an alternative to add the
+event listener to the beginning of the listeners array.
+
+```js
+import { EventEmitter } from 'node:events';
+const myEE = new EventEmitter();
+myEE.once('foo', () => console.log('a'));
+myEE.prependOnceListener('foo', () => console.log('b'));
+myEE.emit('foo');
+// Prints:
+// b
+// a
+```
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+The name of the event.
+
+β’ **listener**
+
+The callback function
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+`EventEmitter.once`
+
+#### Since
+
+v0.3.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:659
+
+***
+
+### prependListener()
+
+> **prependListener**\<`K`>(`eventName`, `listener`): `this`
+
+Adds the `listener` function to the *beginning* of the listeners array for the
+event named `eventName`. No checks are made to see if the `listener` has
+already been added. Multiple calls passing the same combination of `eventName`
+and `listener` will result in the `listener` being added, and called, multiple times.
+
+```js
+server.prependListener('connection', (stream) => {
+ console.log('someone connected!');
+});
+```
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+The name of the event.
+
+β’ **listener**
+
+The callback function
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+`EventEmitter.prependListener`
+
+#### Since
+
+v6.0.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:886
+
+***
+
+### prependOnceListener()
+
+> **prependOnceListener**\<`K`>(`eventName`, `listener`): `this`
+
+Adds a **one-time**`listener` function for the event named `eventName` to the *beginning* of the listeners array. The next time `eventName` is triggered, this
+listener is removed, and then invoked.
+
+```js
+server.prependOnceListener('connection', (stream) => {
+ console.log('Ah, we have our first user!');
+});
+```
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+The name of the event.
+
+β’ **listener**
+
+The callback function
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+`EventEmitter.prependOnceListener`
+
+#### Since
+
+v6.0.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:902
+
+***
+
+### rawListeners()
+
+> **rawListeners**\<`K`>(`eventName`): `Function`\[]
+
+Returns a copy of the array of listeners for the event named `eventName`,
+including any wrappers (such as those created by `.once()`).
+
+```js
+import { EventEmitter } from 'node:events';
+const emitter = new EventEmitter();
+emitter.once('log', () => console.log('log once'));
+
+// Returns a new Array with a function `onceWrapper` which has a property
+// `listener` which contains the original listener bound above
+const listeners = emitter.rawListeners('log');
+const logFnWrapper = listeners[0];
+
+// Logs "log once" to the console and does not unbind the `once` event
+logFnWrapper.listener();
+
+// Logs "log once" to the console and removes the listener
+logFnWrapper();
+
+emitter.on('log', () => console.log('log persistently'));
+// Will return a new Array with a single function bound by `.on()` above
+const newListeners = emitter.rawListeners('log');
+
+// Logs "log persistently" twice
+newListeners[0]();
+emitter.emit('log');
+```
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+#### Returns
+
+`Function`\[]
+
+#### Inherited from
+
+`EventEmitter.rawListeners`
+
+#### Since
+
+v9.4.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:818
+
+***
+
+### removeAllListeners()
+
+> **removeAllListeners**(`eventName`?): `this`
+
+Removes all listeners, or those of the specified `eventName`.
+
+It is bad practice to remove listeners added elsewhere in the code,
+particularly when the `EventEmitter` instance was created by some other
+component or module (e.g. sockets or file streams).
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Parameters
+
+β’ **eventName?**: `string` | `symbol`
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+`EventEmitter.removeAllListeners`
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:758
+
+***
+
+### removeListener()
+
+> **removeListener**\<`K`>(`eventName`, `listener`): `this`
+
+Removes the specified `listener` from the listener array for the event named `eventName`.
+
+```js
+const callback = (stream) => {
+ console.log('someone connected!');
+};
+server.on('connection', callback);
+// ...
+server.removeListener('connection', callback);
+```
+
+`removeListener()` will remove, at most, one instance of a listener from the
+listener array. If any single listener has been added multiple times to the
+listener array for the specified `eventName`, then `removeListener()` must be
+called multiple times to remove each instance.
+
+Once an event is emitted, all listeners attached to it at the
+time of emitting are called in order. This implies that any `removeListener()` or `removeAllListeners()` calls *after* emitting and *before* the last listener finishes execution
+will not remove them from`emit()` in progress. Subsequent events behave as expected.
+
+```js
+import { EventEmitter } from 'node:events';
+class MyEmitter extends EventEmitter {}
+const myEmitter = new MyEmitter();
+
+const callbackA = () => {
+ console.log('A');
+ myEmitter.removeListener('event', callbackB);
+};
+
+const callbackB = () => {
+ console.log('B');
+};
+
+myEmitter.on('event', callbackA);
+
+myEmitter.on('event', callbackB);
+
+// callbackA removes listener callbackB but it will still be called.
+// Internal listener array at time of emit [callbackA, callbackB]
+myEmitter.emit('event');
+// Prints:
+// A
+// B
+
+// callbackB is now removed.
+// Internal listener array [callbackA]
+myEmitter.emit('event');
+// Prints:
+// A
+```
+
+Because listeners are managed using an internal array, calling this will
+change the position indices of any listener registered *after* the listener
+being removed. This will not impact the order in which listeners are called,
+but it means that any copies of the listener array as returned by
+the `emitter.listeners()` method will need to be recreated.
+
+When a single function has been added as a handler multiple times for a single
+event (as in the example below), `removeListener()` will remove the most
+recently added instance. In the example the `once('ping')` listener is removed:
+
+```js
+import { EventEmitter } from 'node:events';
+const ee = new EventEmitter();
+
+function pong() {
+ console.log('pong');
+}
+
+ee.on('ping', pong);
+ee.once('ping', pong);
+ee.removeListener('ping', pong);
+
+ee.emit('ping');
+ee.emit('ping');
+```
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+β’ **listener**
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+`EventEmitter.removeListener`
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:742
+
+***
+
+### setDeaf()
+
+> **setDeaf**(`deaf`): `void`
+
+Set the deafen status for the current bot user
+
+#### Parameters
+
+β’ **deaf**: `boolean` = `false`
+
+Boolean value to indicate whether to deafen or undeafen
+
+#### Returns
+
+`void`
+
+#### Default Value
+
+```ts
+false
+```
+
+#### Defined in
+
+[src/guild/Connection.ts:106](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Connection.ts#L106)
+
+***
+
+### setMaxListeners()
+
+> **setMaxListeners**(`n`): `this`
+
+By default `EventEmitter`s will print a warning if more than `10` listeners are
+added for a particular event. This is a useful default that helps finding
+memory leaks. The `emitter.setMaxListeners()` method allows the limit to be
+modified for this specific `EventEmitter` instance. The value can be set to `Infinity` (or `0`) to indicate an unlimited number of listeners.
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Parameters
+
+β’ **n**: `number`
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+`EventEmitter.setMaxListeners`
+
+#### Since
+
+v0.3.5
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:768
+
+***
+
+### setMute()
+
+> **setMute**(`mute`): `void`
+
+Set the mute status for the current bot user
+
+#### Parameters
+
+β’ **mute**: `boolean` = `false`
+
+Boolean value to indicate whether to mute or unmute
+
+#### Returns
+
+`void`
+
+#### Default Value
+
+```ts
+false
+```
+
+#### Defined in
+
+[src/guild/Connection.ts:116](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Connection.ts#L116)
+
+***
+
+### addAbortListener()
+
+> `static` **addAbortListener**(`signal`, `resource`): `Disposable`
+
+Listens once to the `abort` event on the provided `signal`.
+
+Listening to the `abort` event on abort signals is unsafe and may
+lead to resource leaks since another third party with the signal can
+call `e.stopImmediatePropagation()`. Unfortunately Node.js cannot change
+this since it would violate the web standard. Additionally, the original
+API makes it easy to forget to remove listeners.
+
+This API allows safely using `AbortSignal`s in Node.js APIs by solving these
+two issues by listening to the event such that `stopImmediatePropagation` does
+not prevent the listener from running.
+
+Returns a disposable so that it may be unsubscribed from more easily.
+
+```js
+import { addAbortListener } from 'node:events';
+
+function example(signal) {
+ let disposable;
+ try {
+ signal.addEventListener('abort', (e) => e.stopImmediatePropagation());
+ disposable = addAbortListener(signal, (e) => {
+ // Do something when signal is aborted.
+ });
+ } finally {
+ disposable?.[Symbol.dispose]();
+ }
+}
+```
+
+:::caution\[Experimental]
+This API should not be used in production and may be trimmed from a public release.
+:::
+
+#### Parameters
+
+β’ **signal**: `AbortSignal`
+
+β’ **resource**
+
+#### Returns
+
+`Disposable`
+
+Disposable that removes the `abort` listener.
+
+#### Inherited from
+
+`EventEmitter.addAbortListener`
+
+#### Since
+
+v20.5.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:437
+
+***
+
+### getEventListeners()
+
+> `static` **getEventListeners**(`emitter`, `name`): `Function`\[]
+
+Returns a copy of the array of listeners for the event named `eventName`.
+
+For `EventEmitter`s this behaves exactly the same as calling `.listeners` on
+the emitter.
+
+For `EventTarget`s this is the only way to get the event listeners for the
+event target. This is useful for debugging and diagnostic purposes.
+
+```js
+import { getEventListeners, EventEmitter } from 'node:events';
+
+{
+ const ee = new EventEmitter();
+ const listener = () => console.log('Events are fun');
+ ee.on('foo', listener);
+ console.log(getEventListeners(ee, 'foo')); // [ [Function: listener] ]
+}
+{
+ const et = new EventTarget();
+ const listener = () => console.log('Events are fun');
+ et.addEventListener('foo', listener);
+ console.log(getEventListeners(et, 'foo')); // [ [Function: listener] ]
+}
+```
+
+#### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`> | `EventTarget`
+
+β’ **name**: `string` | `symbol`
+
+#### Returns
+
+`Function`\[]
+
+#### Inherited from
+
+`EventEmitter.getEventListeners`
+
+#### Since
+
+v15.2.0, v14.17.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:358
+
+***
+
+### getMaxListeners()
+
+> `static` **getMaxListeners**(`emitter`): `number`
+
+Returns the currently set max amount of listeners.
+
+For `EventEmitter`s this behaves exactly the same as calling `.getMaxListeners` on
+the emitter.
+
+For `EventTarget`s this is the only way to get the max event listeners for the
+event target. If the number of event handlers on a single EventTarget exceeds
+the max set, the EventTarget will print a warning.
+
+```js
+import { getMaxListeners, setMaxListeners, EventEmitter } from 'node:events';
+
+{
+ const ee = new EventEmitter();
+ console.log(getMaxListeners(ee)); // 10
+ setMaxListeners(11, ee);
+ console.log(getMaxListeners(ee)); // 11
+}
+{
+ const et = new EventTarget();
+ console.log(getMaxListeners(et)); // 10
+ setMaxListeners(11, et);
+ console.log(getMaxListeners(et)); // 11
+}
+```
+
+#### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`> | `EventTarget`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+`EventEmitter.getMaxListeners`
+
+#### Since
+
+v19.9.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:387
+
+***
+
+### ~~listenerCount()~~
+
+> `static` **listenerCount**(`emitter`, `eventName`): `number`
+
+A class method that returns the number of listeners for the given `eventName` registered on the given `emitter`.
+
+```js
+import { EventEmitter, listenerCount } from 'node:events';
+
+const myEmitter = new EventEmitter();
+myEmitter.on('event', () => {});
+myEmitter.on('event', () => {});
+console.log(listenerCount(myEmitter, 'event'));
+// Prints: 2
+```
+
+:::caution\[Deprecated]
+Since v3.2.0 - Use `listenerCount` instead.
+:::
+
+#### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`>
+
+The emitter to query
+
+β’ **eventName**: `string` | `symbol`
+
+The event name
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+`EventEmitter.listenerCount`
+
+#### Since
+
+v0.9.12
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:330
+
+***
+
+### on()
+
+#### on(emitter, eventName, options)
+
+> `static` **on**(`emitter`, `eventName`, `options`?): `AsyncIterableIterator`\<`any`\[]>
+
+```js
+import { on, EventEmitter } from 'node:events';
+import process from 'node:process';
+
+const ee = new EventEmitter();
+
+// Emit later on
+process.nextTick(() => {
+ ee.emit('foo', 'bar');
+ ee.emit('foo', 42);
+});
+
+for await (const event of on(ee, 'foo')) {
+ // The execution of this inner block is synchronous and it
+ // processes one event at a time (even with await). Do not use
+ // if concurrent execution is required.
+ console.log(event); // prints ['bar'] [42]
+}
+// Unreachable here
+```
+
+Returns an `AsyncIterator` that iterates `eventName` events. It will throw
+if the `EventEmitter` emits `'error'`. It removes all listeners when
+exiting the loop. The `value` returned by each iteration is an array
+composed of the emitted event arguments.
+
+An `AbortSignal` can be used to cancel waiting on events:
+
+```js
+import { on, EventEmitter } from 'node:events';
+import process from 'node:process';
+
+const ac = new AbortController();
+
+(async () => {
+ const ee = new EventEmitter();
+
+ // Emit later on
+ process.nextTick(() => {
+ ee.emit('foo', 'bar');
+ ee.emit('foo', 42);
+ });
+
+ for await (const event of on(ee, 'foo', { signal: ac.signal })) {
+ // The execution of this inner block is synchronous and it
+ // processes one event at a time (even with await). Do not use
+ // if concurrent execution is required.
+ console.log(event); // prints ['bar'] [42]
+ }
+ // Unreachable here
+})();
+
+process.nextTick(() => ac.abort());
+```
+
+Use the `close` option to specify an array of event names that will end the iteration:
+
+```js
+import { on, EventEmitter } from 'node:events';
+import process from 'node:process';
+
+const ee = new EventEmitter();
+
+// Emit later on
+process.nextTick(() => {
+ ee.emit('foo', 'bar');
+ ee.emit('foo', 42);
+ ee.emit('close');
+});
+
+for await (const event of on(ee, 'foo', { close: ['close'] })) {
+ console.log(event); // prints ['bar'] [42]
+}
+// the loop will exit after 'close' is emitted
+console.log('done'); // prints 'done'
+```
+
+##### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`>
+
+β’ **eventName**: `string` | `symbol`
+
+β’ **options?**: `StaticEventEmitterIteratorOptions`
+
+##### Returns
+
+`AsyncIterableIterator`\<`any`\[]>
+
+An `AsyncIterator` that iterates `eventName` events emitted by the `emitter`
+
+##### Inherited from
+
+`EventEmitter.on`
+
+##### Since
+
+v13.6.0, v12.16.0
+
+##### Defined in
+
+node\_modules/@types/node/events.d.ts:303
+
+#### on(emitter, eventName, options)
+
+> `static` **on**(`emitter`, `eventName`, `options`?): `AsyncIterableIterator`\<`any`\[]>
+
+##### Parameters
+
+β’ **emitter**: `EventTarget`
+
+β’ **eventName**: `string`
+
+β’ **options?**: `StaticEventEmitterIteratorOptions`
+
+##### Returns
+
+`AsyncIterableIterator`\<`any`\[]>
+
+##### Inherited from
+
+`EventEmitter.on`
+
+##### Defined in
+
+node\_modules/@types/node/events.d.ts:308
+
+***
+
+### once()
+
+#### once(emitter, eventName, options)
+
+> `static` **once**(`emitter`, `eventName`, `options`?): `Promise`\<`any`\[]>
+
+Creates a `Promise` that is fulfilled when the `EventEmitter` emits the given
+event or that is rejected if the `EventEmitter` emits `'error'` while waiting.
+The `Promise` will resolve with an array of all the arguments emitted to the
+given event.
+
+This method is intentionally generic and works with the web platform [EventTarget](https://dom.spec.whatwg.org/#interface-eventtarget) interface, which has no special`'error'` event
+semantics and does not listen to the `'error'` event.
+
+```js
+import { once, EventEmitter } from 'node:events';
+import process from 'node:process';
+
+const ee = new EventEmitter();
+
+process.nextTick(() => {
+ ee.emit('myevent', 42);
+});
+
+const [value] = await once(ee, 'myevent');
+console.log(value);
+
+const err = new Error('kaboom');
+process.nextTick(() => {
+ ee.emit('error', err);
+});
+
+try {
+ await once(ee, 'myevent');
+} catch (err) {
+ console.error('error happened', err);
+}
+```
+
+The special handling of the `'error'` event is only used when `events.once()` is used to wait for another event. If `events.once()` is used to wait for the
+'`error'` event itself, then it is treated as any other kind of event without
+special handling:
+
+```js
+import { EventEmitter, once } from 'node:events';
+
+const ee = new EventEmitter();
+
+once(ee, 'error')
+ .then(([err]) => console.log('ok', err.message))
+ .catch((err) => console.error('error', err.message));
+
+ee.emit('error', new Error('boom'));
+
+// Prints: ok boom
+```
+
+An `AbortSignal` can be used to cancel waiting for the event:
+
+```js
+import { EventEmitter, once } from 'node:events';
+
+const ee = new EventEmitter();
+const ac = new AbortController();
+
+async function foo(emitter, event, signal) {
+ try {
+ await once(emitter, event, { signal });
+ console.log('event emitted!');
+ } catch (error) {
+ if (error.name === 'AbortError') {
+ console.error('Waiting for the event was canceled!');
+ } else {
+ console.error('There was an error', error.message);
+ }
+ }
+}
+
+foo(ee, 'foo', ac.signal);
+ac.abort(); // Abort waiting for the event
+ee.emit('foo'); // Prints: Waiting for the event was canceled!
+```
+
+##### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`>
+
+β’ **eventName**: `string` | `symbol`
+
+β’ **options?**: `StaticEventEmitterOptions`
+
+##### Returns
+
+`Promise`\<`any`\[]>
+
+##### Inherited from
+
+`EventEmitter.once`
+
+##### Since
+
+v11.13.0, v10.16.0
+
+##### Defined in
+
+node\_modules/@types/node/events.d.ts:217
+
+#### once(emitter, eventName, options)
+
+> `static` **once**(`emitter`, `eventName`, `options`?): `Promise`\<`any`\[]>
+
+##### Parameters
+
+β’ **emitter**: `EventTarget`
+
+β’ **eventName**: `string`
+
+β’ **options?**: `StaticEventEmitterOptions`
+
+##### Returns
+
+`Promise`\<`any`\[]>
+
+##### Inherited from
+
+`EventEmitter.once`
+
+##### Defined in
+
+node\_modules/@types/node/events.d.ts:222
+
+***
+
+### setMaxListeners()
+
+> `static` **setMaxListeners**(`n`?, ...`eventTargets`?): `void`
+
+```js
+import { setMaxListeners, EventEmitter } from 'node:events';
+
+const target = new EventTarget();
+const emitter = new EventEmitter();
+
+setMaxListeners(5, target, emitter);
+```
+
+#### Parameters
+
+β’ **n?**: `number`
+
+A non-negative number. The maximum number of listeners per `EventTarget` event.
+
+β’ ...**eventTargets?**: (`EventEmitter`\<`DefaultEventMap`> | `EventTarget`)\[]
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+`EventEmitter.setMaxListeners`
+
+#### Since
+
+v15.4.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:402
diff --git a/src/content/docs/3.4.2/api/classes/Connector.md b/src/content/docs/3.4.2/api/classes/Connector.md
new file mode 100644
index 0000000..1268df4
--- /dev/null
+++ b/src/content/docs/3.4.2/api/classes/Connector.md
@@ -0,0 +1,103 @@
+---
+editUrl: false
+next: false
+prev: false
+title: Connector
+slug: 3.4.2/apiclasses/connector
+---
+
+## Extended by
+
+* [`DiscordJS`](/3.4.2/api/namespaces/connectors/classes/discordjs/)
+* [`Eris`](/3.4.2/api/namespaces/connectors/classes/eris/)
+* [`OceanicJS`](/3.4.2/api/namespaces/connectors/classes/oceanicjs/)
+
+## Constructors
+
+### new Connector()
+
+> **new Connector**(`client`): [`Connector`](/3.4.2/api/classes/connector/)
+
+#### Parameters
+
+β’ **client**: `any`
+
+#### Returns
+
+[`Connector`](/3.4.2/api/classes/connector/)
+
+#### Defined in
+
+[src/connectors/Connector.ts:13](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/connectors/Connector.ts#L13)
+
+## Methods
+
+### getId()
+
+> `abstract` **getId**(): `string`
+
+#### Returns
+
+`string`
+
+#### Defined in
+
+[src/connectors/Connector.ts:34](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/connectors/Connector.ts#L34)
+
+***
+
+### listen()
+
+> `abstract` **listen**(`nodes`): `void`
+
+#### Parameters
+
+β’ **nodes**: [`NodeOption`](/3.4.2/api/interfaces/nodeoption/)\[]
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/connectors/Connector.ts:38](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/connectors/Connector.ts#L38)
+
+***
+
+### sendPacket()
+
+> `abstract` **sendPacket**(`shardId`, `payload`, `important`): `void`
+
+#### Parameters
+
+β’ **shardId**: `number`
+
+β’ **payload**: `any`
+
+β’ **important**: `boolean`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/connectors/Connector.ts:36](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/connectors/Connector.ts#L36)
+
+***
+
+### set()
+
+> **set**(`manager`): [`Connector`](/3.4.2/api/classes/connector/)
+
+#### Parameters
+
+β’ **manager**: [`Shoukaku`](/3.4.2/api/classes/shoukaku/)
+
+#### Returns
+
+[`Connector`](/3.4.2/api/classes/connector/)
+
+#### Defined in
+
+[src/connectors/Connector.ts:18](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/connectors/Connector.ts#L18)
diff --git a/src/content/docs/3.4.2/api/classes/Filters.md b/src/content/docs/3.4.2/api/classes/Filters.md
new file mode 100644
index 0000000..5b1be7f
--- /dev/null
+++ b/src/content/docs/3.4.2/api/classes/Filters.md
@@ -0,0 +1,129 @@
+---
+editUrl: false
+next: false
+prev: false
+title: Filters
+slug: 3.4.2/apiclasses/filters
+---
+
+Lavalink filters
+
+## Constructors
+
+### new Filters()
+
+> **new Filters**(`options`): [`Filters`](/3.4.2/api/classes/filters/)
+
+Options to initialize this filters instance with
+
+#### Parameters
+
+β’ **options**: [`FilterOptions`](/3.4.2/api/interfaces/filteroptions/) = `{}`
+
+#### Returns
+
+[`Filters`](/3.4.2/api/classes/filters/)
+
+#### Defined in
+
+[src/guild/Player.ts:187](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L187)
+
+## Properties
+
+### channelMix
+
+> **channelMix**: `null` | [`ChannelMixSettings`](/3.4.2/api/interfaces/channelmixsettings/)
+
+#### Defined in
+
+[src/guild/Player.ts:172](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L172)
+
+***
+
+### distortion
+
+> **distortion**: `null` | [`DistortionSettings`](/3.4.2/api/interfaces/distortionsettings/)
+
+#### Defined in
+
+[src/guild/Player.ts:171](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L171)
+
+***
+
+### equalizer
+
+> **equalizer**: [`Band`](/3.4.2/api/interfaces/band/)\[]
+
+#### Defined in
+
+[src/guild/Player.ts:165](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L165)
+
+***
+
+### karaoke
+
+> **karaoke**: `null` | [`KaraokeSettings`](/3.4.2/api/interfaces/karaokesettings/)
+
+#### Defined in
+
+[src/guild/Player.ts:166](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L166)
+
+***
+
+### lowPass
+
+> **lowPass**: `null` | [`LowPassSettings`](/3.4.2/api/interfaces/lowpasssettings/)
+
+#### Defined in
+
+[src/guild/Player.ts:173](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L173)
+
+***
+
+### rotation
+
+> **rotation**: `null` | [`RotationSettings`](/3.4.2/api/interfaces/rotationsettings/)
+
+#### Defined in
+
+[src/guild/Player.ts:170](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L170)
+
+***
+
+### timescale
+
+> **timescale**: `null` | [`TimescaleSettings`](/3.4.2/api/interfaces/timescalesettings/)
+
+#### Defined in
+
+[src/guild/Player.ts:167](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L167)
+
+***
+
+### tremolo
+
+> **tremolo**: `null` | [`FreqSettings`](/3.4.2/api/interfaces/freqsettings/)
+
+#### Defined in
+
+[src/guild/Player.ts:168](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L168)
+
+***
+
+### vibrato
+
+> **vibrato**: `null` | [`FreqSettings`](/3.4.2/api/interfaces/freqsettings/)
+
+#### Defined in
+
+[src/guild/Player.ts:169](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L169)
+
+***
+
+### volume
+
+> **volume**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:164](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L164)
diff --git a/src/content/docs/3.4.2/api/classes/Node.md b/src/content/docs/3.4.2/api/classes/Node.md
new file mode 100644
index 0000000..23b81c6
--- /dev/null
+++ b/src/content/docs/3.4.2/api/classes/Node.md
@@ -0,0 +1,1659 @@
+---
+editUrl: false
+next: false
+prev: false
+title: Node
+slug: 3.4.2/apiclasses/node
+---
+
+Represents a Lavalink node
+
+## Extends
+
+* `EventEmitter`
+
+## Constructors
+
+### new Node()
+
+> **new Node**(`manager`, `options`): [`Node`](/3.4.2/api/classes/node/)
+
+#### Parameters
+
+β’ **manager**: [`Shoukaku`](/3.4.2/api/classes/shoukaku/)
+
+Shoukaku instance
+
+β’ **options**: [`NodeOption`](/3.4.2/api/interfaces/nodeoption/)
+
+#### Returns
+
+[`Node`](/3.4.2/api/classes/node/)
+
+#### Overrides
+
+`EventEmitter.constructor`
+
+#### Defined in
+
+[src/node/Node.ts:125](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/node/Node.ts#L125)
+
+## Properties
+
+### group?
+
+> `readonly` `optional` **group**: `string`
+
+Group in which this node is contained
+
+#### Defined in
+
+[src/node/Node.ts:84](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/node/Node.ts#L84)
+
+***
+
+### manager
+
+> `readonly` **manager**: [`Shoukaku`](/3.4.2/api/classes/shoukaku/)
+
+Shoukaku class
+
+#### Defined in
+
+[src/node/Node.ts:64](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/node/Node.ts#L64)
+
+***
+
+### name
+
+> `readonly` **name**: `string`
+
+Name of this node
+
+#### Defined in
+
+[src/node/Node.ts:80](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/node/Node.ts#L80)
+
+***
+
+### players
+
+> `readonly` **players**: `Map`\<`string`, [`Player`](/3.4.2/api/classes/player/)>
+
+A map of guild ID to players
+
+#### Defined in
+
+[src/node/Node.ts:68](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/node/Node.ts#L68)
+
+***
+
+### queue
+
+> `readonly` **queue**: `Queue`
+
+Lavalink API message queue
+
+#### Defined in
+
+[src/node/Node.ts:76](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/node/Node.ts#L76)
+
+***
+
+### reconnects
+
+> **reconnects**: `number`
+
+The number of reconnects to Lavalink
+
+#### Defined in
+
+[src/node/Node.ts:96](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/node/Node.ts#L96)
+
+***
+
+### rest
+
+> `readonly` **rest**: [`Rest`](/3.4.2/api/classes/rest/)
+
+Lavalink rest API
+
+#### Defined in
+
+[src/node/Node.ts:72](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/node/Node.ts#L72)
+
+***
+
+### state
+
+> **state**: [`State`](/3.4.2/api/namespaces/constants/enumerations/state/)
+
+The state of this connection
+
+#### Defined in
+
+[src/node/Node.ts:100](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/node/Node.ts#L100)
+
+***
+
+### stats
+
+> **stats**: `null` | [`NodeStats`](/3.4.2/api/interfaces/nodestats/)
+
+Statistics from Lavalink
+
+#### Defined in
+
+[src/node/Node.ts:104](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/node/Node.ts#L104)
+
+***
+
+### ws
+
+> **ws**: `null` | `WebSocket`
+
+Websocket instance
+
+#### Defined in
+
+[src/node/Node.ts:108](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/node/Node.ts#L108)
+
+***
+
+### captureRejectionSymbol
+
+> `readonly` `static` **captureRejectionSymbol**: *typeof* [`captureRejectionSymbol`](/3.4.2/api/classes/connection/#capturerejectionsymbol)
+
+Value: `Symbol.for('nodejs.rejection')`
+
+See how to write a custom `rejection handler`.
+
+#### Since
+
+v13.4.0, v12.16.0
+
+#### Inherited from
+
+`EventEmitter.captureRejectionSymbol`
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:452
+
+***
+
+### captureRejections
+
+> `static` **captureRejections**: `boolean`
+
+Value: [boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type)
+
+Change the default `captureRejections` option on all new `EventEmitter` objects.
+
+#### Since
+
+v13.4.0, v12.16.0
+
+#### Inherited from
+
+`EventEmitter.captureRejections`
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:459
+
+***
+
+### defaultMaxListeners
+
+> `static` **defaultMaxListeners**: `number`
+
+By default, a maximum of `10` listeners can be registered for any single
+event. This limit can be changed for individual `EventEmitter` instances
+using the `emitter.setMaxListeners(n)` method. To change the default
+for *all*`EventEmitter` instances, the `events.defaultMaxListeners` property
+can be used. If this value is not a positive number, a `RangeError` is thrown.
+
+Take caution when setting the `events.defaultMaxListeners` because the
+change affects *all* `EventEmitter` instances, including those created before
+the change is made. However, calling `emitter.setMaxListeners(n)` still has
+precedence over `events.defaultMaxListeners`.
+
+This is not a hard limit. The `EventEmitter` instance will allow
+more listeners to be added but will output a trace warning to stderr indicating
+that a "possible EventEmitter memory leak" has been detected. For any single
+`EventEmitter`, the `emitter.getMaxListeners()` and `emitter.setMaxListeners()` methods can be used to
+temporarily avoid this warning:
+
+```js
+import { EventEmitter } from 'node:events';
+const emitter = new EventEmitter();
+emitter.setMaxListeners(emitter.getMaxListeners() + 1);
+emitter.once('event', () => {
+ // do stuff
+ emitter.setMaxListeners(Math.max(emitter.getMaxListeners() - 1, 0));
+});
+```
+
+The `--trace-warnings` command-line flag can be used to display the
+stack trace for such warnings.
+
+The emitted warning can be inspected with `process.on('warning')` and will
+have the additional `emitter`, `type`, and `count` properties, referring to
+the event emitter instance, the event's name and the number of attached
+listeners, respectively.
+Its `name` property is set to `'MaxListenersExceededWarning'`.
+
+#### Since
+
+v0.11.2
+
+#### Inherited from
+
+`EventEmitter.defaultMaxListeners`
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:498
+
+***
+
+### errorMonitor
+
+> `readonly` `static` **errorMonitor**: *typeof* [`errorMonitor`](/3.4.2/api/classes/connection/#errormonitor)
+
+This symbol shall be used to install a listener for only monitoring `'error'` events. Listeners installed using this symbol are called before the regular `'error'` listeners are called.
+
+Installing a listener using this symbol does not change the behavior once an `'error'` event is emitted. Therefore, the process will still crash if no
+regular `'error'` listener is installed.
+
+#### Since
+
+v13.6.0, v12.17.0
+
+#### Inherited from
+
+`EventEmitter.errorMonitor`
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:445
+
+## Methods
+
+### \[captureRejectionSymbol]\()?
+
+> `optional` **\[captureRejectionSymbol]**\<`K`>(`error`, `event`, ...`args`): `void`
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **error**: `Error`
+
+β’ **event**: `string` | `symbol`
+
+β’ ...**args**: `AnyRest`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+`EventEmitter.[captureRejectionSymbol]`
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:136
+
+***
+
+### addListener()
+
+> **addListener**\<`K`>(`eventName`, `listener`): `this`
+
+Alias for `emitter.on(eventName, listener)`.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+β’ **listener**
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+`EventEmitter.addListener`
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:597
+
+***
+
+### connect()
+
+> **connect**(): `void`
+
+Connect to Lavalink
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/node/Node.ts:166](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/node/Node.ts#L166)
+
+***
+
+### disconnect()
+
+> **disconnect**(`code`, `reason`?): `void`
+
+Disconnect from lavalink
+
+#### Parameters
+
+β’ **code**: `number`
+
+Status code
+
+β’ **reason?**: `string`
+
+Reason for disconnect
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/node/Node.ts:207](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/node/Node.ts#L207)
+
+***
+
+### emit()
+
+> **emit**\<`K`>(`eventName`, ...`args`): `boolean`
+
+Synchronously calls each of the listeners registered for the event named `eventName`, in the order they were registered, passing the supplied arguments
+to each.
+
+Returns `true` if the event had listeners, `false` otherwise.
+
+```js
+import { EventEmitter } from 'node:events';
+const myEmitter = new EventEmitter();
+
+// First listener
+myEmitter.on('event', function firstListener() {
+ console.log('Helloooo! first listener');
+});
+// Second listener
+myEmitter.on('event', function secondListener(arg1, arg2) {
+ console.log(`event with parameters ${arg1}, ${arg2} in second listener`);
+});
+// Third listener
+myEmitter.on('event', function thirdListener(...args) {
+ const parameters = args.join(', ');
+ console.log(`event with parameters ${parameters} in third listener`);
+});
+
+console.log(myEmitter.listeners('event'));
+
+myEmitter.emit('event', 1, 2, 3, 4, 5);
+
+// Prints:
+// [
+// [Function: firstListener],
+// [Function: secondListener],
+// [Function: thirdListener]
+// ]
+// Helloooo! first listener
+// event with parameters 1, 2 in second listener
+// event with parameters 1, 2, 3, 4, 5 in third listener
+```
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+β’ ...**args**: `AnyRest`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+`EventEmitter.emit`
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:859
+
+***
+
+### eventNames()
+
+> **eventNames**(): (`string` | `symbol`)\[]
+
+Returns an array listing the events for which the emitter has registered
+listeners. The values in the array are strings or `Symbol`s.
+
+```js
+import { EventEmitter } from 'node:events';
+
+const myEE = new EventEmitter();
+myEE.on('foo', () => {});
+myEE.on('bar', () => {});
+
+const sym = Symbol('symbol');
+myEE.on(sym, () => {});
+
+console.log(myEE.eventNames());
+// Prints: [ 'foo', 'bar', Symbol(symbol) ]
+```
+
+#### Returns
+
+(`string` | `symbol`)\[]
+
+#### Inherited from
+
+`EventEmitter.eventNames`
+
+#### Since
+
+v6.0.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:922
+
+***
+
+### getMaxListeners()
+
+> **getMaxListeners**(): `number`
+
+Returns the current max listener value for the `EventEmitter` which is either
+set by `emitter.setMaxListeners(n)` or defaults to [defaultMaxListeners](../../../../../../api/classes/node/#defaultmaxlisteners).
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+`EventEmitter.getMaxListeners`
+
+#### Since
+
+v1.0.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:774
+
+***
+
+### joinChannel()
+
+> **joinChannel**(`options`): `Promise`\<[`Player`](/3.4.2/api/classes/player/)>
+
+Join a voice channel in a guild
+
+#### Parameters
+
+β’ **options**: [`VoiceChannelOptions`](/3.4.2/api/interfaces/voicechanneloptions/)
+
+#### Returns
+
+`Promise`\<[`Player`](/3.4.2/api/classes/player/)>
+
+A promise that resolves to a player class
+
+#### Defined in
+
+[src/node/Node.ts:225](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/node/Node.ts#L225)
+
+***
+
+### leaveChannel()
+
+> **leaveChannel**(`guildId`): `void`
+
+Disconnect from connected voice channel
+
+#### Parameters
+
+β’ **guildId**: `string`
+
+ID of guild that contains voice channel
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/node/Node.ts:256](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/node/Node.ts#L256)
+
+***
+
+### listenerCount()
+
+> **listenerCount**\<`K`>(`eventName`, `listener`?): `number`
+
+Returns the number of listeners listening for the event named `eventName`.
+If `listener` is provided, it will return how many times the listener is found
+in the list of the listeners of the event.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+The name of the event being listened for
+
+β’ **listener?**: `Function`
+
+The event handler function
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+`EventEmitter.listenerCount`
+
+#### Since
+
+v3.2.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:868
+
+***
+
+### listeners()
+
+> **listeners**\<`K`>(`eventName`): `Function`\[]
+
+Returns a copy of the array of listeners for the event named `eventName`.
+
+```js
+server.on('connection', (stream) => {
+ console.log('someone connected!');
+});
+console.log(util.inspect(server.listeners('connection')));
+// Prints: [ [Function] ]
+```
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+#### Returns
+
+`Function`\[]
+
+#### Inherited from
+
+`EventEmitter.listeners`
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:787
+
+***
+
+### off()
+
+> **off**\<`K`>(`eventName`, `listener`): `this`
+
+Alias for `emitter.removeListener()`.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+β’ **listener**
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+`EventEmitter.off`
+
+#### Since
+
+v10.0.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:747
+
+***
+
+### on()
+
+> **on**\<`K`>(`eventName`, `listener`): `this`
+
+Adds the `listener` function to the end of the listeners array for the event
+named `eventName`. No checks are made to see if the `listener` has already
+been added. Multiple calls passing the same combination of `eventName` and
+`listener` will result in the `listener` being added, and called, multiple times.
+
+```js
+server.on('connection', (stream) => {
+ console.log('someone connected!');
+});
+```
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+By default, event listeners are invoked in the order they are added. The `emitter.prependListener()` method can be used as an alternative to add the
+event listener to the beginning of the listeners array.
+
+```js
+import { EventEmitter } from 'node:events';
+const myEE = new EventEmitter();
+myEE.on('foo', () => console.log('a'));
+myEE.prependListener('foo', () => console.log('b'));
+myEE.emit('foo');
+// Prints:
+// b
+// a
+```
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+The name of the event.
+
+β’ **listener**
+
+The callback function
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+`EventEmitter.on`
+
+#### Since
+
+v0.1.101
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:629
+
+***
+
+### once()
+
+> **once**\<`K`>(`eventName`, `listener`): `this`
+
+Adds a **one-time** `listener` function for the event named `eventName`. The
+next time `eventName` is triggered, this listener is removed and then invoked.
+
+```js
+server.once('connection', (stream) => {
+ console.log('Ah, we have our first user!');
+});
+```
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+By default, event listeners are invoked in the order they are added. The `emitter.prependOnceListener()` method can be used as an alternative to add the
+event listener to the beginning of the listeners array.
+
+```js
+import { EventEmitter } from 'node:events';
+const myEE = new EventEmitter();
+myEE.once('foo', () => console.log('a'));
+myEE.prependOnceListener('foo', () => console.log('b'));
+myEE.emit('foo');
+// Prints:
+// b
+// a
+```
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+The name of the event.
+
+β’ **listener**
+
+The callback function
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+`EventEmitter.once`
+
+#### Since
+
+v0.3.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:659
+
+***
+
+### prependListener()
+
+> **prependListener**\<`K`>(`eventName`, `listener`): `this`
+
+Adds the `listener` function to the *beginning* of the listeners array for the
+event named `eventName`. No checks are made to see if the `listener` has
+already been added. Multiple calls passing the same combination of `eventName`
+and `listener` will result in the `listener` being added, and called, multiple times.
+
+```js
+server.prependListener('connection', (stream) => {
+ console.log('someone connected!');
+});
+```
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+The name of the event.
+
+β’ **listener**
+
+The callback function
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+`EventEmitter.prependListener`
+
+#### Since
+
+v6.0.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:886
+
+***
+
+### prependOnceListener()
+
+> **prependOnceListener**\<`K`>(`eventName`, `listener`): `this`
+
+Adds a **one-time**`listener` function for the event named `eventName` to the *beginning* of the listeners array. The next time `eventName` is triggered, this
+listener is removed, and then invoked.
+
+```js
+server.prependOnceListener('connection', (stream) => {
+ console.log('Ah, we have our first user!');
+});
+```
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+The name of the event.
+
+β’ **listener**
+
+The callback function
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+`EventEmitter.prependOnceListener`
+
+#### Since
+
+v6.0.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:902
+
+***
+
+### rawListeners()
+
+> **rawListeners**\<`K`>(`eventName`): `Function`\[]
+
+Returns a copy of the array of listeners for the event named `eventName`,
+including any wrappers (such as those created by `.once()`).
+
+```js
+import { EventEmitter } from 'node:events';
+const emitter = new EventEmitter();
+emitter.once('log', () => console.log('log once'));
+
+// Returns a new Array with a function `onceWrapper` which has a property
+// `listener` which contains the original listener bound above
+const listeners = emitter.rawListeners('log');
+const logFnWrapper = listeners[0];
+
+// Logs "log once" to the console and does not unbind the `once` event
+logFnWrapper.listener();
+
+// Logs "log once" to the console and removes the listener
+logFnWrapper();
+
+emitter.on('log', () => console.log('log persistently'));
+// Will return a new Array with a single function bound by `.on()` above
+const newListeners = emitter.rawListeners('log');
+
+// Logs "log persistently" twice
+newListeners[0]();
+emitter.emit('log');
+```
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+#### Returns
+
+`Function`\[]
+
+#### Inherited from
+
+`EventEmitter.rawListeners`
+
+#### Since
+
+v9.4.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:818
+
+***
+
+### removeAllListeners()
+
+> **removeAllListeners**(`eventName`?): `this`
+
+Removes all listeners, or those of the specified `eventName`.
+
+It is bad practice to remove listeners added elsewhere in the code,
+particularly when the `EventEmitter` instance was created by some other
+component or module (e.g. sockets or file streams).
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Parameters
+
+β’ **eventName?**: `string` | `symbol`
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+`EventEmitter.removeAllListeners`
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:758
+
+***
+
+### removeListener()
+
+> **removeListener**\<`K`>(`eventName`, `listener`): `this`
+
+Removes the specified `listener` from the listener array for the event named `eventName`.
+
+```js
+const callback = (stream) => {
+ console.log('someone connected!');
+};
+server.on('connection', callback);
+// ...
+server.removeListener('connection', callback);
+```
+
+`removeListener()` will remove, at most, one instance of a listener from the
+listener array. If any single listener has been added multiple times to the
+listener array for the specified `eventName`, then `removeListener()` must be
+called multiple times to remove each instance.
+
+Once an event is emitted, all listeners attached to it at the
+time of emitting are called in order. This implies that any `removeListener()` or `removeAllListeners()` calls *after* emitting and *before* the last listener finishes execution
+will not remove them from`emit()` in progress. Subsequent events behave as expected.
+
+```js
+import { EventEmitter } from 'node:events';
+class MyEmitter extends EventEmitter {}
+const myEmitter = new MyEmitter();
+
+const callbackA = () => {
+ console.log('A');
+ myEmitter.removeListener('event', callbackB);
+};
+
+const callbackB = () => {
+ console.log('B');
+};
+
+myEmitter.on('event', callbackA);
+
+myEmitter.on('event', callbackB);
+
+// callbackA removes listener callbackB but it will still be called.
+// Internal listener array at time of emit [callbackA, callbackB]
+myEmitter.emit('event');
+// Prints:
+// A
+// B
+
+// callbackB is now removed.
+// Internal listener array [callbackA]
+myEmitter.emit('event');
+// Prints:
+// A
+```
+
+Because listeners are managed using an internal array, calling this will
+change the position indices of any listener registered *after* the listener
+being removed. This will not impact the order in which listeners are called,
+but it means that any copies of the listener array as returned by
+the `emitter.listeners()` method will need to be recreated.
+
+When a single function has been added as a handler multiple times for a single
+event (as in the example below), `removeListener()` will remove the most
+recently added instance. In the example the `once('ping')` listener is removed:
+
+```js
+import { EventEmitter } from 'node:events';
+const ee = new EventEmitter();
+
+function pong() {
+ console.log('pong');
+}
+
+ee.on('ping', pong);
+ee.once('ping', pong);
+ee.removeListener('ping', pong);
+
+ee.emit('ping');
+ee.emit('ping');
+```
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+β’ **listener**
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+`EventEmitter.removeListener`
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:742
+
+***
+
+### setMaxListeners()
+
+> **setMaxListeners**(`n`): `this`
+
+By default `EventEmitter`s will print a warning if more than `10` listeners are
+added for a particular event. This is a useful default that helps finding
+memory leaks. The `emitter.setMaxListeners()` method allows the limit to be
+modified for this specific `EventEmitter` instance. The value can be set to `Infinity` (or `0`) to indicate an unlimited number of listeners.
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Parameters
+
+β’ **n**: `number`
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+`EventEmitter.setMaxListeners`
+
+#### Since
+
+v0.3.5
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:768
+
+***
+
+### addAbortListener()
+
+> `static` **addAbortListener**(`signal`, `resource`): `Disposable`
+
+Listens once to the `abort` event on the provided `signal`.
+
+Listening to the `abort` event on abort signals is unsafe and may
+lead to resource leaks since another third party with the signal can
+call `e.stopImmediatePropagation()`. Unfortunately Node.js cannot change
+this since it would violate the web standard. Additionally, the original
+API makes it easy to forget to remove listeners.
+
+This API allows safely using `AbortSignal`s in Node.js APIs by solving these
+two issues by listening to the event such that `stopImmediatePropagation` does
+not prevent the listener from running.
+
+Returns a disposable so that it may be unsubscribed from more easily.
+
+```js
+import { addAbortListener } from 'node:events';
+
+function example(signal) {
+ let disposable;
+ try {
+ signal.addEventListener('abort', (e) => e.stopImmediatePropagation());
+ disposable = addAbortListener(signal, (e) => {
+ // Do something when signal is aborted.
+ });
+ } finally {
+ disposable?.[Symbol.dispose]();
+ }
+}
+```
+
+:::caution\[Experimental]
+This API should not be used in production and may be trimmed from a public release.
+:::
+
+#### Parameters
+
+β’ **signal**: `AbortSignal`
+
+β’ **resource**
+
+#### Returns
+
+`Disposable`
+
+Disposable that removes the `abort` listener.
+
+#### Inherited from
+
+`EventEmitter.addAbortListener`
+
+#### Since
+
+v20.5.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:437
+
+***
+
+### getEventListeners()
+
+> `static` **getEventListeners**(`emitter`, `name`): `Function`\[]
+
+Returns a copy of the array of listeners for the event named `eventName`.
+
+For `EventEmitter`s this behaves exactly the same as calling `.listeners` on
+the emitter.
+
+For `EventTarget`s this is the only way to get the event listeners for the
+event target. This is useful for debugging and diagnostic purposes.
+
+```js
+import { getEventListeners, EventEmitter } from 'node:events';
+
+{
+ const ee = new EventEmitter();
+ const listener = () => console.log('Events are fun');
+ ee.on('foo', listener);
+ console.log(getEventListeners(ee, 'foo')); // [ [Function: listener] ]
+}
+{
+ const et = new EventTarget();
+ const listener = () => console.log('Events are fun');
+ et.addEventListener('foo', listener);
+ console.log(getEventListeners(et, 'foo')); // [ [Function: listener] ]
+}
+```
+
+#### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`> | `EventTarget`
+
+β’ **name**: `string` | `symbol`
+
+#### Returns
+
+`Function`\[]
+
+#### Inherited from
+
+`EventEmitter.getEventListeners`
+
+#### Since
+
+v15.2.0, v14.17.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:358
+
+***
+
+### getMaxListeners()
+
+> `static` **getMaxListeners**(`emitter`): `number`
+
+Returns the currently set max amount of listeners.
+
+For `EventEmitter`s this behaves exactly the same as calling `.getMaxListeners` on
+the emitter.
+
+For `EventTarget`s this is the only way to get the max event listeners for the
+event target. If the number of event handlers on a single EventTarget exceeds
+the max set, the EventTarget will print a warning.
+
+```js
+import { getMaxListeners, setMaxListeners, EventEmitter } from 'node:events';
+
+{
+ const ee = new EventEmitter();
+ console.log(getMaxListeners(ee)); // 10
+ setMaxListeners(11, ee);
+ console.log(getMaxListeners(ee)); // 11
+}
+{
+ const et = new EventTarget();
+ console.log(getMaxListeners(et)); // 10
+ setMaxListeners(11, et);
+ console.log(getMaxListeners(et)); // 11
+}
+```
+
+#### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`> | `EventTarget`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+`EventEmitter.getMaxListeners`
+
+#### Since
+
+v19.9.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:387
+
+***
+
+### ~~listenerCount()~~
+
+> `static` **listenerCount**(`emitter`, `eventName`): `number`
+
+A class method that returns the number of listeners for the given `eventName` registered on the given `emitter`.
+
+```js
+import { EventEmitter, listenerCount } from 'node:events';
+
+const myEmitter = new EventEmitter();
+myEmitter.on('event', () => {});
+myEmitter.on('event', () => {});
+console.log(listenerCount(myEmitter, 'event'));
+// Prints: 2
+```
+
+:::caution\[Deprecated]
+Since v3.2.0 - Use `listenerCount` instead.
+:::
+
+#### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`>
+
+The emitter to query
+
+β’ **eventName**: `string` | `symbol`
+
+The event name
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+`EventEmitter.listenerCount`
+
+#### Since
+
+v0.9.12
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:330
+
+***
+
+### on()
+
+#### on(emitter, eventName, options)
+
+> `static` **on**(`emitter`, `eventName`, `options`?): `AsyncIterableIterator`\<`any`\[]>
+
+```js
+import { on, EventEmitter } from 'node:events';
+import process from 'node:process';
+
+const ee = new EventEmitter();
+
+// Emit later on
+process.nextTick(() => {
+ ee.emit('foo', 'bar');
+ ee.emit('foo', 42);
+});
+
+for await (const event of on(ee, 'foo')) {
+ // The execution of this inner block is synchronous and it
+ // processes one event at a time (even with await). Do not use
+ // if concurrent execution is required.
+ console.log(event); // prints ['bar'] [42]
+}
+// Unreachable here
+```
+
+Returns an `AsyncIterator` that iterates `eventName` events. It will throw
+if the `EventEmitter` emits `'error'`. It removes all listeners when
+exiting the loop. The `value` returned by each iteration is an array
+composed of the emitted event arguments.
+
+An `AbortSignal` can be used to cancel waiting on events:
+
+```js
+import { on, EventEmitter } from 'node:events';
+import process from 'node:process';
+
+const ac = new AbortController();
+
+(async () => {
+ const ee = new EventEmitter();
+
+ // Emit later on
+ process.nextTick(() => {
+ ee.emit('foo', 'bar');
+ ee.emit('foo', 42);
+ });
+
+ for await (const event of on(ee, 'foo', { signal: ac.signal })) {
+ // The execution of this inner block is synchronous and it
+ // processes one event at a time (even with await). Do not use
+ // if concurrent execution is required.
+ console.log(event); // prints ['bar'] [42]
+ }
+ // Unreachable here
+})();
+
+process.nextTick(() => ac.abort());
+```
+
+Use the `close` option to specify an array of event names that will end the iteration:
+
+```js
+import { on, EventEmitter } from 'node:events';
+import process from 'node:process';
+
+const ee = new EventEmitter();
+
+// Emit later on
+process.nextTick(() => {
+ ee.emit('foo', 'bar');
+ ee.emit('foo', 42);
+ ee.emit('close');
+});
+
+for await (const event of on(ee, 'foo', { close: ['close'] })) {
+ console.log(event); // prints ['bar'] [42]
+}
+// the loop will exit after 'close' is emitted
+console.log('done'); // prints 'done'
+```
+
+##### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`>
+
+β’ **eventName**: `string` | `symbol`
+
+β’ **options?**: `StaticEventEmitterIteratorOptions`
+
+##### Returns
+
+`AsyncIterableIterator`\<`any`\[]>
+
+An `AsyncIterator` that iterates `eventName` events emitted by the `emitter`
+
+##### Inherited from
+
+`EventEmitter.on`
+
+##### Since
+
+v13.6.0, v12.16.0
+
+##### Defined in
+
+node\_modules/@types/node/events.d.ts:303
+
+#### on(emitter, eventName, options)
+
+> `static` **on**(`emitter`, `eventName`, `options`?): `AsyncIterableIterator`\<`any`\[]>
+
+##### Parameters
+
+β’ **emitter**: `EventTarget`
+
+β’ **eventName**: `string`
+
+β’ **options?**: `StaticEventEmitterIteratorOptions`
+
+##### Returns
+
+`AsyncIterableIterator`\<`any`\[]>
+
+##### Inherited from
+
+`EventEmitter.on`
+
+##### Defined in
+
+node\_modules/@types/node/events.d.ts:308
+
+***
+
+### once()
+
+#### once(emitter, eventName, options)
+
+> `static` **once**(`emitter`, `eventName`, `options`?): `Promise`\<`any`\[]>
+
+Creates a `Promise` that is fulfilled when the `EventEmitter` emits the given
+event or that is rejected if the `EventEmitter` emits `'error'` while waiting.
+The `Promise` will resolve with an array of all the arguments emitted to the
+given event.
+
+This method is intentionally generic and works with the web platform [EventTarget](https://dom.spec.whatwg.org/#interface-eventtarget) interface, which has no special`'error'` event
+semantics and does not listen to the `'error'` event.
+
+```js
+import { once, EventEmitter } from 'node:events';
+import process from 'node:process';
+
+const ee = new EventEmitter();
+
+process.nextTick(() => {
+ ee.emit('myevent', 42);
+});
+
+const [value] = await once(ee, 'myevent');
+console.log(value);
+
+const err = new Error('kaboom');
+process.nextTick(() => {
+ ee.emit('error', err);
+});
+
+try {
+ await once(ee, 'myevent');
+} catch (err) {
+ console.error('error happened', err);
+}
+```
+
+The special handling of the `'error'` event is only used when `events.once()` is used to wait for another event. If `events.once()` is used to wait for the
+'`error'` event itself, then it is treated as any other kind of event without
+special handling:
+
+```js
+import { EventEmitter, once } from 'node:events';
+
+const ee = new EventEmitter();
+
+once(ee, 'error')
+ .then(([err]) => console.log('ok', err.message))
+ .catch((err) => console.error('error', err.message));
+
+ee.emit('error', new Error('boom'));
+
+// Prints: ok boom
+```
+
+An `AbortSignal` can be used to cancel waiting for the event:
+
+```js
+import { EventEmitter, once } from 'node:events';
+
+const ee = new EventEmitter();
+const ac = new AbortController();
+
+async function foo(emitter, event, signal) {
+ try {
+ await once(emitter, event, { signal });
+ console.log('event emitted!');
+ } catch (error) {
+ if (error.name === 'AbortError') {
+ console.error('Waiting for the event was canceled!');
+ } else {
+ console.error('There was an error', error.message);
+ }
+ }
+}
+
+foo(ee, 'foo', ac.signal);
+ac.abort(); // Abort waiting for the event
+ee.emit('foo'); // Prints: Waiting for the event was canceled!
+```
+
+##### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`>
+
+β’ **eventName**: `string` | `symbol`
+
+β’ **options?**: `StaticEventEmitterOptions`
+
+##### Returns
+
+`Promise`\<`any`\[]>
+
+##### Inherited from
+
+`EventEmitter.once`
+
+##### Since
+
+v11.13.0, v10.16.0
+
+##### Defined in
+
+node\_modules/@types/node/events.d.ts:217
+
+#### once(emitter, eventName, options)
+
+> `static` **once**(`emitter`, `eventName`, `options`?): `Promise`\<`any`\[]>
+
+##### Parameters
+
+β’ **emitter**: `EventTarget`
+
+β’ **eventName**: `string`
+
+β’ **options?**: `StaticEventEmitterOptions`
+
+##### Returns
+
+`Promise`\<`any`\[]>
+
+##### Inherited from
+
+`EventEmitter.once`
+
+##### Defined in
+
+node\_modules/@types/node/events.d.ts:222
+
+***
+
+### setMaxListeners()
+
+> `static` **setMaxListeners**(`n`?, ...`eventTargets`?): `void`
+
+```js
+import { setMaxListeners, EventEmitter } from 'node:events';
+
+const target = new EventTarget();
+const emitter = new EventEmitter();
+
+setMaxListeners(5, target, emitter);
+```
+
+#### Parameters
+
+β’ **n?**: `number`
+
+A non-negative number. The maximum number of listeners per `EventTarget` event.
+
+β’ ...**eventTargets?**: (`EventEmitter`\<`DefaultEventMap`> | `EventTarget`)\[]
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+`EventEmitter.setMaxListeners`
+
+#### Since
+
+v15.4.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:402
diff --git a/src/content/docs/3.4.2/api/classes/Player.md b/src/content/docs/3.4.2/api/classes/Player.md
new file mode 100644
index 0000000..5de4ac2
--- /dev/null
+++ b/src/content/docs/3.4.2/api/classes/Player.md
@@ -0,0 +1,2111 @@
+---
+editUrl: false
+next: false
+prev: false
+title: Player
+slug: 3.4.2/apiclasses/player
+---
+
+Wrapper object around Lavalink
+
+## Extends
+
+* `EventEmitter`
+
+## Constructors
+
+### new Player()
+
+> **new Player**(`node`, `options`): [`Player`](/3.4.2/api/classes/player/)
+
+#### Parameters
+
+β’ **node**: [`Node`](/3.4.2/api/classes/node/)
+
+An instance of Node (Lavalink API wrapper)
+
+β’ **options**: [`VoiceChannelOptions`](/3.4.2/api/interfaces/voicechanneloptions/)
+
+#### Returns
+
+[`Player`](/3.4.2/api/classes/player/)
+
+#### Defined in
+
+[src/guild/Player.ts:293](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L293)
+
+## Properties
+
+### connection
+
+> `readonly` **connection**: [`Connection`](/3.4.2/api/classes/connection/)
+
+Discort voice channel that this player is connected to
+
+#### Defined in
+
+[src/guild/Player.ts:264](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L264)
+
+***
+
+### filters
+
+> **filters**: [`Filters`](/3.4.2/api/classes/filters/)
+
+Filters on current track
+
+#### Defined in
+
+[src/guild/Player.ts:284](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L284)
+
+***
+
+### node
+
+> **node**: [`Node`](/3.4.2/api/classes/node/)
+
+Lavalink node this player is connected to
+
+#### Defined in
+
+[src/guild/Player.ts:260](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L260)
+
+***
+
+### paused
+
+> **paused**: `boolean`
+
+Pause status in current player
+
+#### Defined in
+
+[src/guild/Player.ts:272](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L272)
+
+***
+
+### ping
+
+> **ping**: `number`
+
+Ping represents the number of milliseconds between heartbeat and ack. Could be `-1` if not connected
+
+#### Defined in
+
+[src/guild/Player.ts:276](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L276)
+
+***
+
+### position
+
+> **position**: `number`
+
+Position in ms of current track
+
+#### Defined in
+
+[src/guild/Player.ts:280](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L280)
+
+***
+
+### track
+
+> **track**: `null` | `string`
+
+ID of current track
+
+#### Defined in
+
+[src/guild/Player.ts:268](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L268)
+
+***
+
+### captureRejectionSymbol
+
+> `readonly` `static` **captureRejectionSymbol**: *typeof* [`captureRejectionSymbol`](/3.4.2/api/classes/connection/#capturerejectionsymbol)
+
+Value: `Symbol.for('nodejs.rejection')`
+
+See how to write a custom `rejection handler`.
+
+#### Since
+
+v13.4.0, v12.16.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:452
+
+***
+
+### captureRejections
+
+> `static` **captureRejections**: `boolean`
+
+Value: [boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type)
+
+Change the default `captureRejections` option on all new `EventEmitter` objects.
+
+#### Since
+
+v13.4.0, v12.16.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:459
+
+***
+
+### defaultMaxListeners
+
+> `static` **defaultMaxListeners**: `number`
+
+By default, a maximum of `10` listeners can be registered for any single
+event. This limit can be changed for individual `EventEmitter` instances
+using the `emitter.setMaxListeners(n)` method. To change the default
+for *all*`EventEmitter` instances, the `events.defaultMaxListeners` property
+can be used. If this value is not a positive number, a `RangeError` is thrown.
+
+Take caution when setting the `events.defaultMaxListeners` because the
+change affects *all* `EventEmitter` instances, including those created before
+the change is made. However, calling `emitter.setMaxListeners(n)` still has
+precedence over `events.defaultMaxListeners`.
+
+This is not a hard limit. The `EventEmitter` instance will allow
+more listeners to be added but will output a trace warning to stderr indicating
+that a "possible EventEmitter memory leak" has been detected. For any single
+`EventEmitter`, the `emitter.getMaxListeners()` and `emitter.setMaxListeners()` methods can be used to
+temporarily avoid this warning:
+
+```js
+import { EventEmitter } from 'node:events';
+const emitter = new EventEmitter();
+emitter.setMaxListeners(emitter.getMaxListeners() + 1);
+emitter.once('event', () => {
+ // do stuff
+ emitter.setMaxListeners(Math.max(emitter.getMaxListeners() - 1, 0));
+});
+```
+
+The `--trace-warnings` command-line flag can be used to display the
+stack trace for such warnings.
+
+The emitted warning can be inspected with `process.on('warning')` and will
+have the additional `emitter`, `type`, and `count` properties, referring to
+the event emitter instance, the event's name and the number of attached
+listeners, respectively.
+Its `name` property is set to `'MaxListenersExceededWarning'`.
+
+#### Since
+
+v0.11.2
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:498
+
+***
+
+### errorMonitor
+
+> `readonly` `static` **errorMonitor**: *typeof* [`errorMonitor`](/3.4.2/api/classes/connection/#errormonitor)
+
+This symbol shall be used to install a listener for only monitoring `'error'` events. Listeners installed using this symbol are called before the regular `'error'` listeners are called.
+
+Installing a listener using this symbol does not change the behavior once an `'error'` event is emitted. Therefore, the process will still crash if no
+regular `'error'` listener is installed.
+
+#### Since
+
+v13.6.0, v12.17.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:445
+
+## Methods
+
+### \[captureRejectionSymbol]\()?
+
+> `optional` **\[captureRejectionSymbol]**\<`K`>(`error`, `event`, ...`args`): `void`
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **error**: `Error`
+
+β’ **event**: `string` | `symbol`
+
+β’ ...**args**: `AnyRest`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:136
+
+***
+
+### addListener()
+
+> **addListener**\<`K`>(`eventName`, `listener`): `this`
+
+Alias for `emitter.on(eventName, listener)`.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+β’ **listener**
+
+#### Returns
+
+`this`
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:597
+
+***
+
+### clearFilters()
+
+> **clearFilters**(): [`Player`](/3.4.2/api/classes/player/)
+
+Clear all filters applied to the currently playing track
+
+#### Returns
+
+[`Player`](/3.4.2/api/classes/player/)
+
+The current player instance
+
+#### Defined in
+
+[src/guild/Player.ts:530](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L530)
+
+***
+
+### emit()
+
+> **emit**\<`K`>(`eventName`, ...`args`): `boolean`
+
+Synchronously calls each of the listeners registered for the event named `eventName`, in the order they were registered, passing the supplied arguments
+to each.
+
+Returns `true` if the event had listeners, `false` otherwise.
+
+```js
+import { EventEmitter } from 'node:events';
+const myEmitter = new EventEmitter();
+
+// First listener
+myEmitter.on('event', function firstListener() {
+ console.log('Helloooo! first listener');
+});
+// Second listener
+myEmitter.on('event', function secondListener(arg1, arg2) {
+ console.log(`event with parameters ${arg1}, ${arg2} in second listener`);
+});
+// Third listener
+myEmitter.on('event', function thirdListener(...args) {
+ const parameters = args.join(', ');
+ console.log(`event with parameters ${parameters} in third listener`);
+});
+
+console.log(myEmitter.listeners('event'));
+
+myEmitter.emit('event', 1, 2, 3, 4, 5);
+
+// Prints:
+// [
+// [Function: firstListener],
+// [Function: secondListener],
+// [Function: thirdListener]
+// ]
+// Helloooo! first listener
+// event with parameters 1, 2 in second listener
+// event with parameters 1, 2, 3, 4, 5 in third listener
+```
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+β’ ...**args**: `AnyRest`
+
+#### Returns
+
+`boolean`
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:859
+
+***
+
+### eventNames()
+
+> **eventNames**(): (`string` | `symbol`)\[]
+
+Returns an array listing the events for which the emitter has registered
+listeners. The values in the array are strings or `Symbol`s.
+
+```js
+import { EventEmitter } from 'node:events';
+
+const myEE = new EventEmitter();
+myEE.on('foo', () => {});
+myEE.on('bar', () => {});
+
+const sym = Symbol('symbol');
+myEE.on(sym, () => {});
+
+console.log(myEE.eventNames());
+// Prints: [ 'foo', 'bar', Symbol(symbol) ]
+```
+
+#### Returns
+
+(`string` | `symbol`)\[]
+
+#### Since
+
+v6.0.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:922
+
+***
+
+### getMaxListeners()
+
+> **getMaxListeners**(): `number`
+
+Returns the current max listener value for the `EventEmitter` which is either
+set by `emitter.setMaxListeners(n)` or defaults to [defaultMaxListeners](../../../../../../api/classes/player/#defaultmaxlisteners).
+
+#### Returns
+
+`number`
+
+#### Since
+
+v1.0.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:774
+
+***
+
+### listenerCount()
+
+> **listenerCount**\<`K`>(`eventName`, `listener`?): `number`
+
+Returns the number of listeners listening for the event named `eventName`.
+If `listener` is provided, it will return how many times the listener is found
+in the list of the listeners of the event.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+The name of the event being listened for
+
+β’ **listener?**: `Function`
+
+The event handler function
+
+#### Returns
+
+`number`
+
+#### Since
+
+v3.2.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:868
+
+***
+
+### listeners()
+
+> **listeners**\<`K`>(`eventName`): `Function`\[]
+
+Returns a copy of the array of listeners for the event named `eventName`.
+
+```js
+server.on('connection', (stream) => {
+ console.log('someone connected!');
+});
+console.log(util.inspect(server.listeners('connection')));
+// Prints: [ [Function] ]
+```
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+#### Returns
+
+`Function`\[]
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:787
+
+***
+
+### move()
+
+> **move**(`name`): [`Player`](/3.4.2/api/classes/player/)
+
+Move player to another node
+
+#### Parameters
+
+β’ **name**: `string`
+
+Name of node to move to
+
+#### Returns
+
+[`Player`](/3.4.2/api/classes/player/)
+
+The current player instance
+
+#### Defined in
+
+[src/guild/Player.ts:309](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L309)
+
+***
+
+### off()
+
+#### off(event, listener)
+
+> **off**(`event`, `listener`): `this`
+
+##### Parameters
+
+β’ **event**: `"end"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/guild/Player.ts:244](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L244)
+
+#### off(event, listener)
+
+> **off**(`event`, `listener`): `this`
+
+##### Parameters
+
+β’ **event**: `"stuck"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/guild/Player.ts:245](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L245)
+
+#### off(event, listener)
+
+> **off**(`event`, `listener`): `this`
+
+##### Parameters
+
+β’ **event**: `"closed"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/guild/Player.ts:246](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L246)
+
+#### off(event, listener)
+
+> **off**(`event`, `listener`): `this`
+
+##### Parameters
+
+β’ **event**: `"start"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/guild/Player.ts:247](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L247)
+
+#### off(event, listener)
+
+> **off**(`event`, `listener`): `this`
+
+##### Parameters
+
+β’ **event**: `"exception"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/guild/Player.ts:248](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L248)
+
+#### off(event, listener)
+
+> **off**(`event`, `listener`): `this`
+
+##### Parameters
+
+β’ **event**: `"resumed"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/guild/Player.ts:249](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L249)
+
+#### off(event, listener)
+
+> **off**(`event`, `listener`): `this`
+
+##### Parameters
+
+β’ **event**: `"update"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/guild/Player.ts:250](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L250)
+
+***
+
+### once()
+
+#### once(event, listener)
+
+> **once**(`event`, `listener`): `this`
+
+##### Parameters
+
+β’ **event**: `"end"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/guild/Player.ts:237](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L237)
+
+#### once(event, listener)
+
+> **once**(`event`, `listener`): `this`
+
+##### Parameters
+
+β’ **event**: `"stuck"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/guild/Player.ts:238](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L238)
+
+#### once(event, listener)
+
+> **once**(`event`, `listener`): `this`
+
+##### Parameters
+
+β’ **event**: `"closed"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/guild/Player.ts:239](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L239)
+
+#### once(event, listener)
+
+> **once**(`event`, `listener`): `this`
+
+##### Parameters
+
+β’ **event**: `"start"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/guild/Player.ts:240](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L240)
+
+#### once(event, listener)
+
+> **once**(`event`, `listener`): `this`
+
+##### Parameters
+
+β’ **event**: `"exception"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/guild/Player.ts:241](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L241)
+
+#### once(event, listener)
+
+> **once**(`event`, `listener`): `this`
+
+##### Parameters
+
+β’ **event**: `"resumed"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/guild/Player.ts:242](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L242)
+
+#### once(event, listener)
+
+> **once**(`event`, `listener`): `this`
+
+##### Parameters
+
+β’ **event**: `"update"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/guild/Player.ts:243](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L243)
+
+***
+
+### playTrack()
+
+> **playTrack**(`playable`): [`Player`](/3.4.2/api/classes/player/)
+
+Play a new track
+
+#### Parameters
+
+β’ **playable**: [`PlayOptions`](/3.4.2/api/interfaces/playoptions/)
+
+Options for playing this track
+
+#### Returns
+
+[`Player`](/3.4.2/api/classes/player/)
+
+The current player instance
+
+#### Defined in
+
+[src/guild/Player.ts:328](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L328)
+
+***
+
+### prependListener()
+
+> **prependListener**\<`K`>(`eventName`, `listener`): `this`
+
+Adds the `listener` function to the *beginning* of the listeners array for the
+event named `eventName`. No checks are made to see if the `listener` has
+already been added. Multiple calls passing the same combination of `eventName`
+and `listener` will result in the `listener` being added, and called, multiple times.
+
+```js
+server.prependListener('connection', (stream) => {
+ console.log('someone connected!');
+});
+```
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+The name of the event.
+
+β’ **listener**
+
+The callback function
+
+#### Returns
+
+`this`
+
+#### Since
+
+v6.0.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:886
+
+***
+
+### prependOnceListener()
+
+> **prependOnceListener**\<`K`>(`eventName`, `listener`): `this`
+
+Adds a **one-time**`listener` function for the event named `eventName` to the *beginning* of the listeners array. The next time `eventName` is triggered, this
+listener is removed, and then invoked.
+
+```js
+server.prependOnceListener('connection', (stream) => {
+ console.log('Ah, we have our first user!');
+});
+```
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+The name of the event.
+
+β’ **listener**
+
+The callback function
+
+#### Returns
+
+`this`
+
+#### Since
+
+v6.0.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:902
+
+***
+
+### rawListeners()
+
+> **rawListeners**\<`K`>(`eventName`): `Function`\[]
+
+Returns a copy of the array of listeners for the event named `eventName`,
+including any wrappers (such as those created by `.once()`).
+
+```js
+import { EventEmitter } from 'node:events';
+const emitter = new EventEmitter();
+emitter.once('log', () => console.log('log once'));
+
+// Returns a new Array with a function `onceWrapper` which has a property
+// `listener` which contains the original listener bound above
+const listeners = emitter.rawListeners('log');
+const logFnWrapper = listeners[0];
+
+// Logs "log once" to the console and does not unbind the `once` event
+logFnWrapper.listener();
+
+// Logs "log once" to the console and removes the listener
+logFnWrapper();
+
+emitter.on('log', () => console.log('log persistently'));
+// Will return a new Array with a single function bound by `.on()` above
+const newListeners = emitter.rawListeners('log');
+
+// Logs "log persistently" twice
+newListeners[0]();
+emitter.emit('log');
+```
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+#### Returns
+
+`Function`\[]
+
+#### Since
+
+v9.4.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:818
+
+***
+
+### removeAllListeners()
+
+> **removeAllListeners**(`eventName`?): `this`
+
+Removes all listeners, or those of the specified `eventName`.
+
+It is bad practice to remove listeners added elsewhere in the code,
+particularly when the `EventEmitter` instance was created by some other
+component or module (e.g. sockets or file streams).
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Parameters
+
+β’ **eventName?**: `string` | `symbol`
+
+#### Returns
+
+`this`
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:758
+
+***
+
+### removeListener()
+
+> **removeListener**\<`K`>(`eventName`, `listener`): `this`
+
+Removes the specified `listener` from the listener array for the event named `eventName`.
+
+```js
+const callback = (stream) => {
+ console.log('someone connected!');
+};
+server.on('connection', callback);
+// ...
+server.removeListener('connection', callback);
+```
+
+`removeListener()` will remove, at most, one instance of a listener from the
+listener array. If any single listener has been added multiple times to the
+listener array for the specified `eventName`, then `removeListener()` must be
+called multiple times to remove each instance.
+
+Once an event is emitted, all listeners attached to it at the
+time of emitting are called in order. This implies that any `removeListener()` or `removeAllListeners()` calls *after* emitting and *before* the last listener finishes execution
+will not remove them from`emit()` in progress. Subsequent events behave as expected.
+
+```js
+import { EventEmitter } from 'node:events';
+class MyEmitter extends EventEmitter {}
+const myEmitter = new MyEmitter();
+
+const callbackA = () => {
+ console.log('A');
+ myEmitter.removeListener('event', callbackB);
+};
+
+const callbackB = () => {
+ console.log('B');
+};
+
+myEmitter.on('event', callbackA);
+
+myEmitter.on('event', callbackB);
+
+// callbackA removes listener callbackB but it will still be called.
+// Internal listener array at time of emit [callbackA, callbackB]
+myEmitter.emit('event');
+// Prints:
+// A
+// B
+
+// callbackB is now removed.
+// Internal listener array [callbackA]
+myEmitter.emit('event');
+// Prints:
+// A
+```
+
+Because listeners are managed using an internal array, calling this will
+change the position indices of any listener registered *after* the listener
+being removed. This will not impact the order in which listeners are called,
+but it means that any copies of the listener array as returned by
+the `emitter.listeners()` method will need to be recreated.
+
+When a single function has been added as a handler multiple times for a single
+event (as in the example below), `removeListener()` will remove the most
+recently added instance. In the example the `once('ping')` listener is removed:
+
+```js
+import { EventEmitter } from 'node:events';
+const ee = new EventEmitter();
+
+function pong() {
+ console.log('pong');
+}
+
+ee.on('ping', pong);
+ee.once('ping', pong);
+ee.removeListener('ping', pong);
+
+ee.emit('ping');
+ee.emit('ping');
+```
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+β’ **listener**
+
+#### Returns
+
+`this`
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:742
+
+***
+
+### reset()
+
+> **reset**(): `void`
+
+Reset the track, position and filters on this instance to defaults
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/guild/Player.ts:590](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L590)
+
+***
+
+### resume()
+
+> **resume**(`options`): [`Player`](/3.4.2/api/classes/player/)
+
+Resume the current track
+
+#### Parameters
+
+β’ **options**: [`ResumeOptions`](/3.4.2/api/interfaces/resumeoptions/) = `{}`
+
+An object that conforms to ResumeOptions that specify behavior on resuming
+
+#### Returns
+
+[`Player`](/3.4.2/api/classes/player/)
+
+The current player instance
+
+#### Defined in
+
+[src/guild/Player.ts:545](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L545)
+
+***
+
+### seekTo()
+
+> **seekTo**(`position`): [`Player`](/3.4.2/api/classes/player/)
+
+Seek to a specific time in the currently playing track
+
+#### Parameters
+
+β’ **position**: `number`
+
+Position to seek to in milliseconds
+
+#### Returns
+
+[`Player`](/3.4.2/api/classes/player/)
+
+The current player instance
+
+#### Defined in
+
+[src/guild/Player.ts:383](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L383)
+
+***
+
+### setChannelMix()
+
+> **setChannelMix**(`mix`): [`Player`](/3.4.2/api/classes/player/)
+
+Change the channel mix settings applied to the currently playing track
+
+#### Parameters
+
+β’ **mix**: [`ChannelMixSettings`](/3.4.2/api/interfaces/channelmixsettings/)
+
+An object that conforms to ChannelMixSettings that defines how much the left and right channels affect each other (setting all factors to 0.5 causes both channels to get the same audio)
+
+#### Returns
+
+[`Player`](/3.4.2/api/classes/player/)
+
+The current player instance
+
+#### Defined in
+
+[src/guild/Player.ts:495](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L495)
+
+***
+
+### setDistortion()
+
+> **setDistortion**(`distortion`): [`Player`](/3.4.2/api/classes/player/)
+
+Change the distortion settings applied to the currently playing track
+
+#### Parameters
+
+β’ **distortion**: [`DistortionSettings`](/3.4.2/api/interfaces/distortionsettings/)
+
+An object that conforms to DistortionSettings that defines distortions in the audio
+
+#### Returns
+
+[`Player`](/3.4.2/api/classes/player/)
+
+The current player instance
+
+#### Defined in
+
+[src/guild/Player.ts:483](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L483)
+
+***
+
+### setEqualizer()
+
+> **setEqualizer**(`bands`): [`Player`](/3.4.2/api/classes/player/)
+
+Change the equalizer settings applied to the currently playing track
+
+#### Parameters
+
+β’ **bands**: [`Band`](/3.4.2/api/interfaces/band/)\[]
+
+An array of objects that conforms to the Bands type that define volumes at different frequencies
+
+#### Returns
+
+[`Player`](/3.4.2/api/classes/player/)
+
+The current player instance
+
+#### Defined in
+
+[src/guild/Player.ts:411](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L411)
+
+***
+
+### setFilters()
+
+> **setFilters**(`options`): [`Player`](/3.4.2/api/classes/player/)
+
+Change the all filter settings applied to the currently playing track
+
+#### Parameters
+
+β’ **options**: [`FilterOptions`](/3.4.2/api/interfaces/filteroptions/)
+
+An object that conforms to FilterOptions that defines all filters to apply/modify
+
+#### Returns
+
+[`Player`](/3.4.2/api/classes/player/)
+
+The current player instance
+
+#### Defined in
+
+[src/guild/Player.ts:519](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L519)
+
+***
+
+### setKaraoke()
+
+> **setKaraoke**(`karaoke`?): [`Player`](/3.4.2/api/classes/player/)
+
+Change the karaoke settings applied to the currently playing track
+
+#### Parameters
+
+β’ **karaoke?**: [`KaraokeSettings`](/3.4.2/api/interfaces/karaokesettings/)
+
+An object that conforms to the KaraokeSettings type that defines a range of frequencies to mute
+
+#### Returns
+
+[`Player`](/3.4.2/api/classes/player/)
+
+The current player instance
+
+#### Defined in
+
+[src/guild/Player.ts:423](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L423)
+
+***
+
+### setLowPass()
+
+> **setLowPass**(`pass`): [`Player`](/3.4.2/api/classes/player/)
+
+Change the low pass settings applied to the currently playing track
+
+#### Parameters
+
+β’ **pass**: [`LowPassSettings`](/3.4.2/api/interfaces/lowpasssettings/)
+
+An object that conforms to LowPassSettings that defines the amount of suppression on higher frequencies
+
+#### Returns
+
+[`Player`](/3.4.2/api/classes/player/)
+
+The current player instance
+
+#### Defined in
+
+[src/guild/Player.ts:507](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L507)
+
+***
+
+### setMaxListeners()
+
+> **setMaxListeners**(`n`): `this`
+
+By default `EventEmitter`s will print a warning if more than `10` listeners are
+added for a particular event. This is a useful default that helps finding
+memory leaks. The `emitter.setMaxListeners()` method allows the limit to be
+modified for this specific `EventEmitter` instance. The value can be set to `Infinity` (or `0`) to indicate an unlimited number of listeners.
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Parameters
+
+β’ **n**: `number`
+
+#### Returns
+
+`this`
+
+#### Since
+
+v0.3.5
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:768
+
+***
+
+### setPaused()
+
+> **setPaused**(`pause`): [`Player`](/3.4.2/api/classes/player/)
+
+Pause or unpause the currently playing track
+
+#### Parameters
+
+β’ **pause**: `boolean` = `true`
+
+Boolean value to specify whether to pause or unpause the current bot user
+
+#### Returns
+
+[`Player`](/3.4.2/api/classes/player/)
+
+The current player instance
+
+#### Defined in
+
+[src/guild/Player.ts:367](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L367)
+
+***
+
+### setRotation()
+
+> **setRotation**(`rotation`?): [`Player`](/3.4.2/api/classes/player/)
+
+Change the rotation settings applied to the currently playing track
+
+#### Parameters
+
+β’ **rotation?**: [`RotationSettings`](/3.4.2/api/interfaces/rotationsettings/)
+
+An object that conforms to the RotationSettings type that defines the frequency of audio rotating round the listener
+
+#### Returns
+
+[`Player`](/3.4.2/api/classes/player/)
+
+The current player instance
+
+#### Defined in
+
+[src/guild/Player.ts:471](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L471)
+
+***
+
+### setTimescale()
+
+> **setTimescale**(`timescale`?): [`Player`](/3.4.2/api/classes/player/)
+
+Change the timescale settings applied to the currently playing track
+
+#### Parameters
+
+β’ **timescale?**: [`TimescaleSettings`](/3.4.2/api/interfaces/timescalesettings/)
+
+An object that conforms to the TimescaleSettings type that defines the time signature to play the audio at
+
+#### Returns
+
+[`Player`](/3.4.2/api/classes/player/)
+
+The current player instance
+
+#### Defined in
+
+[src/guild/Player.ts:435](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L435)
+
+***
+
+### setTremolo()
+
+> **setTremolo**(`tremolo`?): [`Player`](/3.4.2/api/classes/player/)
+
+Change the tremolo settings applied to the currently playing track
+
+#### Parameters
+
+β’ **tremolo?**: [`FreqSettings`](/3.4.2/api/interfaces/freqsettings/)
+
+An object that conforms to the FreqSettings type that defines an ocillation in volume
+
+#### Returns
+
+[`Player`](/3.4.2/api/classes/player/)
+
+The current player instance
+
+#### Defined in
+
+[src/guild/Player.ts:447](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L447)
+
+***
+
+### setVibrato()
+
+> **setVibrato**(`vibrato`?): [`Player`](/3.4.2/api/classes/player/)
+
+Change the vibrato settings applied to the currently playing track
+
+#### Parameters
+
+β’ **vibrato?**: [`FreqSettings`](/3.4.2/api/interfaces/freqsettings/)
+
+An object that conforms to the FreqSettings type that defines an ocillation in pitch
+
+#### Returns
+
+[`Player`](/3.4.2/api/classes/player/)
+
+The current player instance
+
+#### Defined in
+
+[src/guild/Player.ts:459](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L459)
+
+***
+
+### setVolume()
+
+> **setVolume**(`volume`): [`Player`](/3.4.2/api/classes/player/)
+
+Change the volume of the currently playing track
+
+#### Parameters
+
+β’ **volume**: `number`
+
+Target volume as a decimal
+
+#### Returns
+
+[`Player`](/3.4.2/api/classes/player/)
+
+The current player instance
+
+#### Defined in
+
+[src/guild/Player.ts:398](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L398)
+
+***
+
+### stopTrack()
+
+> **stopTrack**(): [`Player`](/3.4.2/api/classes/player/)
+
+Stop the currently playing track
+
+#### Returns
+
+[`Player`](/3.4.2/api/classes/player/)
+
+The current player instance
+
+#### Defined in
+
+[src/guild/Player.ts:352](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L352)
+
+***
+
+### addAbortListener()
+
+> `static` **addAbortListener**(`signal`, `resource`): `Disposable`
+
+Listens once to the `abort` event on the provided `signal`.
+
+Listening to the `abort` event on abort signals is unsafe and may
+lead to resource leaks since another third party with the signal can
+call `e.stopImmediatePropagation()`. Unfortunately Node.js cannot change
+this since it would violate the web standard. Additionally, the original
+API makes it easy to forget to remove listeners.
+
+This API allows safely using `AbortSignal`s in Node.js APIs by solving these
+two issues by listening to the event such that `stopImmediatePropagation` does
+not prevent the listener from running.
+
+Returns a disposable so that it may be unsubscribed from more easily.
+
+```js
+import { addAbortListener } from 'node:events';
+
+function example(signal) {
+ let disposable;
+ try {
+ signal.addEventListener('abort', (e) => e.stopImmediatePropagation());
+ disposable = addAbortListener(signal, (e) => {
+ // Do something when signal is aborted.
+ });
+ } finally {
+ disposable?.[Symbol.dispose]();
+ }
+}
+```
+
+:::caution\[Experimental]
+This API should not be used in production and may be trimmed from a public release.
+:::
+
+#### Parameters
+
+β’ **signal**: `AbortSignal`
+
+β’ **resource**
+
+#### Returns
+
+`Disposable`
+
+Disposable that removes the `abort` listener.
+
+#### Since
+
+v20.5.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:437
+
+***
+
+### getEventListeners()
+
+> `static` **getEventListeners**(`emitter`, `name`): `Function`\[]
+
+Returns a copy of the array of listeners for the event named `eventName`.
+
+For `EventEmitter`s this behaves exactly the same as calling `.listeners` on
+the emitter.
+
+For `EventTarget`s this is the only way to get the event listeners for the
+event target. This is useful for debugging and diagnostic purposes.
+
+```js
+import { getEventListeners, EventEmitter } from 'node:events';
+
+{
+ const ee = new EventEmitter();
+ const listener = () => console.log('Events are fun');
+ ee.on('foo', listener);
+ console.log(getEventListeners(ee, 'foo')); // [ [Function: listener] ]
+}
+{
+ const et = new EventTarget();
+ const listener = () => console.log('Events are fun');
+ et.addEventListener('foo', listener);
+ console.log(getEventListeners(et, 'foo')); // [ [Function: listener] ]
+}
+```
+
+#### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`> | `EventTarget`
+
+β’ **name**: `string` | `symbol`
+
+#### Returns
+
+`Function`\[]
+
+#### Since
+
+v15.2.0, v14.17.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:358
+
+***
+
+### getMaxListeners()
+
+> `static` **getMaxListeners**(`emitter`): `number`
+
+Returns the currently set max amount of listeners.
+
+For `EventEmitter`s this behaves exactly the same as calling `.getMaxListeners` on
+the emitter.
+
+For `EventTarget`s this is the only way to get the max event listeners for the
+event target. If the number of event handlers on a single EventTarget exceeds
+the max set, the EventTarget will print a warning.
+
+```js
+import { getMaxListeners, setMaxListeners, EventEmitter } from 'node:events';
+
+{
+ const ee = new EventEmitter();
+ console.log(getMaxListeners(ee)); // 10
+ setMaxListeners(11, ee);
+ console.log(getMaxListeners(ee)); // 11
+}
+{
+ const et = new EventTarget();
+ console.log(getMaxListeners(et)); // 10
+ setMaxListeners(11, et);
+ console.log(getMaxListeners(et)); // 11
+}
+```
+
+#### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`> | `EventTarget`
+
+#### Returns
+
+`number`
+
+#### Since
+
+v19.9.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:387
+
+***
+
+### ~~listenerCount()~~
+
+> `static` **listenerCount**(`emitter`, `eventName`): `number`
+
+A class method that returns the number of listeners for the given `eventName` registered on the given `emitter`.
+
+```js
+import { EventEmitter, listenerCount } from 'node:events';
+
+const myEmitter = new EventEmitter();
+myEmitter.on('event', () => {});
+myEmitter.on('event', () => {});
+console.log(listenerCount(myEmitter, 'event'));
+// Prints: 2
+```
+
+:::caution\[Deprecated]
+Since v3.2.0 - Use `listenerCount` instead.
+:::
+
+#### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`>
+
+The emitter to query
+
+β’ **eventName**: `string` | `symbol`
+
+The event name
+
+#### Returns
+
+`number`
+
+#### Since
+
+v0.9.12
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:330
+
+***
+
+### on()
+
+#### on(emitter, eventName, options)
+
+> `static` **on**(`emitter`, `eventName`, `options`?): `AsyncIterableIterator`\<`any`\[]>
+
+```js
+import { on, EventEmitter } from 'node:events';
+import process from 'node:process';
+
+const ee = new EventEmitter();
+
+// Emit later on
+process.nextTick(() => {
+ ee.emit('foo', 'bar');
+ ee.emit('foo', 42);
+});
+
+for await (const event of on(ee, 'foo')) {
+ // The execution of this inner block is synchronous and it
+ // processes one event at a time (even with await). Do not use
+ // if concurrent execution is required.
+ console.log(event); // prints ['bar'] [42]
+}
+// Unreachable here
+```
+
+Returns an `AsyncIterator` that iterates `eventName` events. It will throw
+if the `EventEmitter` emits `'error'`. It removes all listeners when
+exiting the loop. The `value` returned by each iteration is an array
+composed of the emitted event arguments.
+
+An `AbortSignal` can be used to cancel waiting on events:
+
+```js
+import { on, EventEmitter } from 'node:events';
+import process from 'node:process';
+
+const ac = new AbortController();
+
+(async () => {
+ const ee = new EventEmitter();
+
+ // Emit later on
+ process.nextTick(() => {
+ ee.emit('foo', 'bar');
+ ee.emit('foo', 42);
+ });
+
+ for await (const event of on(ee, 'foo', { signal: ac.signal })) {
+ // The execution of this inner block is synchronous and it
+ // processes one event at a time (even with await). Do not use
+ // if concurrent execution is required.
+ console.log(event); // prints ['bar'] [42]
+ }
+ // Unreachable here
+})();
+
+process.nextTick(() => ac.abort());
+```
+
+Use the `close` option to specify an array of event names that will end the iteration:
+
+```js
+import { on, EventEmitter } from 'node:events';
+import process from 'node:process';
+
+const ee = new EventEmitter();
+
+// Emit later on
+process.nextTick(() => {
+ ee.emit('foo', 'bar');
+ ee.emit('foo', 42);
+ ee.emit('close');
+});
+
+for await (const event of on(ee, 'foo', { close: ['close'] })) {
+ console.log(event); // prints ['bar'] [42]
+}
+// the loop will exit after 'close' is emitted
+console.log('done'); // prints 'done'
+```
+
+##### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`>
+
+β’ **eventName**: `string` | `symbol`
+
+β’ **options?**: `StaticEventEmitterIteratorOptions`
+
+##### Returns
+
+`AsyncIterableIterator`\<`any`\[]>
+
+An `AsyncIterator` that iterates `eventName` events emitted by the `emitter`
+
+##### Since
+
+v13.6.0, v12.16.0
+
+##### Defined in
+
+node\_modules/@types/node/events.d.ts:303
+
+#### on(emitter, eventName, options)
+
+> `static` **on**(`emitter`, `eventName`, `options`?): `AsyncIterableIterator`\<`any`\[]>
+
+##### Parameters
+
+β’ **emitter**: `EventTarget`
+
+β’ **eventName**: `string`
+
+β’ **options?**: `StaticEventEmitterIteratorOptions`
+
+##### Returns
+
+`AsyncIterableIterator`\<`any`\[]>
+
+##### Defined in
+
+node\_modules/@types/node/events.d.ts:308
+
+***
+
+### once()
+
+#### once(emitter, eventName, options)
+
+> `static` **once**(`emitter`, `eventName`, `options`?): `Promise`\<`any`\[]>
+
+Creates a `Promise` that is fulfilled when the `EventEmitter` emits the given
+event or that is rejected if the `EventEmitter` emits `'error'` while waiting.
+The `Promise` will resolve with an array of all the arguments emitted to the
+given event.
+
+This method is intentionally generic and works with the web platform [EventTarget](https://dom.spec.whatwg.org/#interface-eventtarget) interface, which has no special`'error'` event
+semantics and does not listen to the `'error'` event.
+
+```js
+import { once, EventEmitter } from 'node:events';
+import process from 'node:process';
+
+const ee = new EventEmitter();
+
+process.nextTick(() => {
+ ee.emit('myevent', 42);
+});
+
+const [value] = await once(ee, 'myevent');
+console.log(value);
+
+const err = new Error('kaboom');
+process.nextTick(() => {
+ ee.emit('error', err);
+});
+
+try {
+ await once(ee, 'myevent');
+} catch (err) {
+ console.error('error happened', err);
+}
+```
+
+The special handling of the `'error'` event is only used when `events.once()` is used to wait for another event. If `events.once()` is used to wait for the
+'`error'` event itself, then it is treated as any other kind of event without
+special handling:
+
+```js
+import { EventEmitter, once } from 'node:events';
+
+const ee = new EventEmitter();
+
+once(ee, 'error')
+ .then(([err]) => console.log('ok', err.message))
+ .catch((err) => console.error('error', err.message));
+
+ee.emit('error', new Error('boom'));
+
+// Prints: ok boom
+```
+
+An `AbortSignal` can be used to cancel waiting for the event:
+
+```js
+import { EventEmitter, once } from 'node:events';
+
+const ee = new EventEmitter();
+const ac = new AbortController();
+
+async function foo(emitter, event, signal) {
+ try {
+ await once(emitter, event, { signal });
+ console.log('event emitted!');
+ } catch (error) {
+ if (error.name === 'AbortError') {
+ console.error('Waiting for the event was canceled!');
+ } else {
+ console.error('There was an error', error.message);
+ }
+ }
+}
+
+foo(ee, 'foo', ac.signal);
+ac.abort(); // Abort waiting for the event
+ee.emit('foo'); // Prints: Waiting for the event was canceled!
+```
+
+##### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`>
+
+β’ **eventName**: `string` | `symbol`
+
+β’ **options?**: `StaticEventEmitterOptions`
+
+##### Returns
+
+`Promise`\<`any`\[]>
+
+##### Since
+
+v11.13.0, v10.16.0
+
+##### Defined in
+
+node\_modules/@types/node/events.d.ts:217
+
+#### once(emitter, eventName, options)
+
+> `static` **once**(`emitter`, `eventName`, `options`?): `Promise`\<`any`\[]>
+
+##### Parameters
+
+β’ **emitter**: `EventTarget`
+
+β’ **eventName**: `string`
+
+β’ **options?**: `StaticEventEmitterOptions`
+
+##### Returns
+
+`Promise`\<`any`\[]>
+
+##### Defined in
+
+node\_modules/@types/node/events.d.ts:222
+
+***
+
+### setMaxListeners()
+
+> `static` **setMaxListeners**(`n`?, ...`eventTargets`?): `void`
+
+```js
+import { setMaxListeners, EventEmitter } from 'node:events';
+
+const target = new EventTarget();
+const emitter = new EventEmitter();
+
+setMaxListeners(5, target, emitter);
+```
+
+#### Parameters
+
+β’ **n?**: `number`
+
+A non-negative number. The maximum number of listeners per `EventTarget` event.
+
+β’ ...**eventTargets?**: (`EventEmitter`\<`DefaultEventMap`> | `EventTarget`)\[]
+
+#### Returns
+
+`void`
+
+#### Since
+
+v15.4.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:402
+
+## Events
+
+### on()
+
+#### on(event, listener)
+
+> **on**(`event`, `listener`): `this`
+
+Emitted when the current playing track ends
+
+##### Parameters
+
+β’ **event**: `"end"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/guild/Player.ts:206](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L206)
+
+#### on(event, listener)
+
+> **on**(`event`, `listener`): `this`
+
+Emitted when the current playing track gets stuck due to an error
+
+##### Parameters
+
+β’ **event**: `"stuck"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/guild/Player.ts:211](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L211)
+
+#### on(event, listener)
+
+> **on**(`event`, `listener`): `this`
+
+Emitted when the current websocket connection is closed
+
+##### Parameters
+
+β’ **event**: `"closed"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/guild/Player.ts:216](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L216)
+
+#### on(event, listener)
+
+> **on**(`event`, `listener`): `this`
+
+Emitted when a new track starts
+
+##### Parameters
+
+β’ **event**: `"start"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/guild/Player.ts:221](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L221)
+
+#### on(event, listener)
+
+> **on**(`event`, `listener`): `this`
+
+Emitted when there is an error caused by the current playing track
+
+##### Parameters
+
+β’ **event**: `"exception"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/guild/Player.ts:226](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L226)
+
+#### on(event, listener)
+
+> **on**(`event`, `listener`): `this`
+
+Emitted when the library manages to resume the player
+
+##### Parameters
+
+β’ **event**: `"resumed"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/guild/Player.ts:231](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L231)
+
+#### on(event, listener)
+
+> **on**(`event`, `listener`): `this`
+
+Emitted when a playerUpdate even is recieved from Lavalink
+
+##### Parameters
+
+β’ **event**: `"update"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/guild/Player.ts:236](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L236)
diff --git a/src/content/docs/3.4.2/api/classes/Rest.md b/src/content/docs/3.4.2/api/classes/Rest.md
new file mode 100644
index 0000000..eb59e0b
--- /dev/null
+++ b/src/content/docs/3.4.2/api/classes/Rest.md
@@ -0,0 +1,79 @@
+---
+editUrl: false
+next: false
+prev: false
+title: Rest
+slug: 3.4.2/apiclasses/rest
+---
+
+Wrapper around Lavalink REST API
+
+## Constructors
+
+### new Rest()
+
+> **new Rest**(`node`, `options`): [`Rest`](/3.4.2/api/classes/rest/)
+
+#### Parameters
+
+β’ **node**: [`Node`](/3.4.2/api/classes/node/)
+
+An instance of Node
+
+β’ **options**: [`NodeOption`](/3.4.2/api/interfaces/nodeoption/)
+
+#### Returns
+
+[`Rest`](/3.4.2/api/classes/rest/)
+
+#### Defined in
+
+[src/node/Rest.ts:88](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/node/Rest.ts#L88)
+
+## Methods
+
+### decode()
+
+> **decode**(`track`): `Promise`\<`null` | [`Track`](/3.4.2/api/interfaces/track/)>
+
+Decode a track
+
+#### Parameters
+
+β’ **track**: `string`
+
+Encoded track
+
+#### Returns
+
+`Promise`\<`null` | [`Track`](/3.4.2/api/interfaces/track/)>
+
+Promise that resolves to a track or void
+
+#### Defined in
+
+[src/node/Rest.ts:113](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/node/Rest.ts#L113)
+
+***
+
+### resolve()
+
+> **resolve**(`identifier`): `Promise`\<`null` | [`LavalinkResponse`](/3.4.2/api/interfaces/lavalinkresponse/)>
+
+Resolve a track
+
+#### Parameters
+
+β’ **identifier**: `string`
+
+Track ID
+
+#### Returns
+
+`Promise`\<`null` | [`LavalinkResponse`](/3.4.2/api/interfaces/lavalinkresponse/)>
+
+A promise that resolves to a Lavalink response or void
+
+#### Defined in
+
+[src/node/Rest.ts:99](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/node/Rest.ts#L99)
diff --git a/src/content/docs/3.4.2/api/classes/Shoukaku.md b/src/content/docs/3.4.2/api/classes/Shoukaku.md
new file mode 100644
index 0000000..b51c309
--- /dev/null
+++ b/src/content/docs/3.4.2/api/classes/Shoukaku.md
@@ -0,0 +1,1731 @@
+---
+editUrl: false
+next: false
+prev: false
+title: Shoukaku
+slug: 3.4.2/apiclasses/shoukaku
+---
+
+Main Shoukaku class
+
+## Extends
+
+* `EventEmitter`
+
+## Constructors
+
+### new Shoukaku()
+
+> **new Shoukaku**(`connector`, `nodes`, `options`): [`Shoukaku`](/3.4.2/api/classes/shoukaku/)
+
+#### Parameters
+
+β’ **connector**: [`Connector`](/3.4.2/api/classes/connector/)
+
+A Discord library connector
+
+β’ **nodes**: [`NodeOption`](/3.4.2/api/interfaces/nodeoption/)\[]
+
+An array that conforms to the NodeOption type that specifies nodes to connect to
+
+β’ **options**: [`ShoukakuOptions`](/3.4.2/api/interfaces/shoukakuoptions/) = `{}`
+
+#### Returns
+
+[`Shoukaku`](/3.4.2/api/classes/shoukaku/)
+
+#### Defined in
+
+[src/Shoukaku.ts:191](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L191)
+
+## Properties
+
+### connector
+
+> `readonly` **connector**: [`Connector`](/3.4.2/api/classes/connector/)
+
+Discord library connector
+
+#### Defined in
+
+[src/Shoukaku.ts:163](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L163)
+
+***
+
+### id
+
+> **id**: `null` | `string`
+
+Shoukaku instance identifier
+
+#### Defined in
+
+[src/Shoukaku.ts:175](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L175)
+
+***
+
+### nodes
+
+> `readonly` **nodes**: `Map`\<`string`, [`Node`](/3.4.2/api/classes/node/)>
+
+Connected Lavalink nodes
+
+#### Defined in
+
+[src/Shoukaku.ts:171](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L171)
+
+***
+
+### options
+
+> `readonly` **options**: [`MergedShoukakuOptions`](/3.4.2/api/interfaces/mergedshoukakuoptions/)
+
+Shoukaku options
+
+#### Defined in
+
+[src/Shoukaku.ts:167](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L167)
+
+***
+
+### captureRejectionSymbol
+
+> `readonly` `static` **captureRejectionSymbol**: *typeof* [`captureRejectionSymbol`](/3.4.2/api/classes/connection/#capturerejectionsymbol)
+
+Value: `Symbol.for('nodejs.rejection')`
+
+See how to write a custom `rejection handler`.
+
+#### Since
+
+v13.4.0, v12.16.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:452
+
+***
+
+### captureRejections
+
+> `static` **captureRejections**: `boolean`
+
+Value: [boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type)
+
+Change the default `captureRejections` option on all new `EventEmitter` objects.
+
+#### Since
+
+v13.4.0, v12.16.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:459
+
+***
+
+### defaultMaxListeners
+
+> `static` **defaultMaxListeners**: `number`
+
+By default, a maximum of `10` listeners can be registered for any single
+event. This limit can be changed for individual `EventEmitter` instances
+using the `emitter.setMaxListeners(n)` method. To change the default
+for *all*`EventEmitter` instances, the `events.defaultMaxListeners` property
+can be used. If this value is not a positive number, a `RangeError` is thrown.
+
+Take caution when setting the `events.defaultMaxListeners` because the
+change affects *all* `EventEmitter` instances, including those created before
+the change is made. However, calling `emitter.setMaxListeners(n)` still has
+precedence over `events.defaultMaxListeners`.
+
+This is not a hard limit. The `EventEmitter` instance will allow
+more listeners to be added but will output a trace warning to stderr indicating
+that a "possible EventEmitter memory leak" has been detected. For any single
+`EventEmitter`, the `emitter.getMaxListeners()` and `emitter.setMaxListeners()` methods can be used to
+temporarily avoid this warning:
+
+```js
+import { EventEmitter } from 'node:events';
+const emitter = new EventEmitter();
+emitter.setMaxListeners(emitter.getMaxListeners() + 1);
+emitter.once('event', () => {
+ // do stuff
+ emitter.setMaxListeners(Math.max(emitter.getMaxListeners() - 1, 0));
+});
+```
+
+The `--trace-warnings` command-line flag can be used to display the
+stack trace for such warnings.
+
+The emitted warning can be inspected with `process.on('warning')` and will
+have the additional `emitter`, `type`, and `count` properties, referring to
+the event emitter instance, the event's name and the number of attached
+listeners, respectively.
+Its `name` property is set to `'MaxListenersExceededWarning'`.
+
+#### Since
+
+v0.11.2
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:498
+
+***
+
+### errorMonitor
+
+> `readonly` `static` **errorMonitor**: *typeof* [`errorMonitor`](/3.4.2/api/classes/connection/#errormonitor)
+
+This symbol shall be used to install a listener for only monitoring `'error'` events. Listeners installed using this symbol are called before the regular `'error'` listeners are called.
+
+Installing a listener using this symbol does not change the behavior once an `'error'` event is emitted. Therefore, the process will still crash if no
+regular `'error'` listener is installed.
+
+#### Since
+
+v13.6.0, v12.17.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:445
+
+## Accessors
+
+### players
+
+> `get` **players**(): `Map`\<`string`, [`Player`](/3.4.2/api/classes/player/)>
+
+Get a list of players
+
+#### Returns
+
+`Map`\<`string`, [`Player`](/3.4.2/api/classes/player/)>
+
+A map of guild IDs and players
+
+#### Defined in
+
+[src/Shoukaku.ts:205](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L205)
+
+## Methods
+
+### \[captureRejectionSymbol]\()?
+
+> `optional` **\[captureRejectionSymbol]**\<`K`>(`error`, `event`, ...`args`): `void`
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **error**: `Error`
+
+β’ **event**: `string` | `symbol`
+
+β’ ...**args**: `AnyRest`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:136
+
+***
+
+### addListener()
+
+> **addListener**\<`K`>(`eventName`, `listener`): `this`
+
+Alias for `emitter.on(eventName, listener)`.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+β’ **listener**
+
+#### Returns
+
+`this`
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:597
+
+***
+
+### addNode()
+
+> **addNode**(`options`): `void`
+
+Add a Lavalink node to the pool of available nodes
+
+#### Parameters
+
+β’ **options**: [`NodeOption`](/3.4.2/api/interfaces/nodeoption/)
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/Shoukaku.ts:221](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L221)
+
+***
+
+### emit()
+
+> **emit**\<`K`>(`eventName`, ...`args`): `boolean`
+
+Synchronously calls each of the listeners registered for the event named `eventName`, in the order they were registered, passing the supplied arguments
+to each.
+
+Returns `true` if the event had listeners, `false` otherwise.
+
+```js
+import { EventEmitter } from 'node:events';
+const myEmitter = new EventEmitter();
+
+// First listener
+myEmitter.on('event', function firstListener() {
+ console.log('Helloooo! first listener');
+});
+// Second listener
+myEmitter.on('event', function secondListener(arg1, arg2) {
+ console.log(`event with parameters ${arg1}, ${arg2} in second listener`);
+});
+// Third listener
+myEmitter.on('event', function thirdListener(...args) {
+ const parameters = args.join(', ');
+ console.log(`event with parameters ${parameters} in third listener`);
+});
+
+console.log(myEmitter.listeners('event'));
+
+myEmitter.emit('event', 1, 2, 3, 4, 5);
+
+// Prints:
+// [
+// [Function: firstListener],
+// [Function: secondListener],
+// [Function: thirdListener]
+// ]
+// Helloooo! first listener
+// event with parameters 1, 2 in second listener
+// event with parameters 1, 2, 3, 4, 5 in third listener
+```
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+β’ ...**args**: `AnyRest`
+
+#### Returns
+
+`boolean`
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:859
+
+***
+
+### eventNames()
+
+> **eventNames**(): (`string` | `symbol`)\[]
+
+Returns an array listing the events for which the emitter has registered
+listeners. The values in the array are strings or `Symbol`s.
+
+```js
+import { EventEmitter } from 'node:events';
+
+const myEE = new EventEmitter();
+myEE.on('foo', () => {});
+myEE.on('bar', () => {});
+
+const sym = Symbol('symbol');
+myEE.on(sym, () => {});
+
+console.log(myEE.eventNames());
+// Prints: [ 'foo', 'bar', Symbol(symbol) ]
+```
+
+#### Returns
+
+(`string` | `symbol`)\[]
+
+#### Since
+
+v6.0.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:922
+
+***
+
+### getMaxListeners()
+
+> **getMaxListeners**(): `number`
+
+Returns the current max listener value for the `EventEmitter` which is either
+set by `emitter.setMaxListeners(n)` or defaults to [defaultMaxListeners](../../../../../../api/classes/shoukaku/#defaultmaxlisteners).
+
+#### Returns
+
+`number`
+
+#### Since
+
+v1.0.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:774
+
+***
+
+### getNode()
+
+> **getNode**(`name`): `undefined` | [`Node`](/3.4.2/api/classes/node/)
+
+Select a Lavalink node from the pool of nodes
+
+#### Parameters
+
+β’ **name**: `string` | `string`\[] = `'auto'`
+
+A specific node, an array of nodes, or the string `auto`
+
+#### Returns
+
+`undefined` | [`Node`](/3.4.2/api/classes/node/)
+
+A Lavalink node or undefined
+
+#### Defined in
+
+[src/Shoukaku.ts:251](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L251)
+
+***
+
+### listenerCount()
+
+> **listenerCount**\<`K`>(`eventName`, `listener`?): `number`
+
+Returns the number of listeners listening for the event named `eventName`.
+If `listener` is provided, it will return how many times the listener is found
+in the list of the listeners of the event.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+The name of the event being listened for
+
+β’ **listener?**: `Function`
+
+The event handler function
+
+#### Returns
+
+`number`
+
+#### Since
+
+v3.2.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:868
+
+***
+
+### listeners()
+
+> **listeners**\<`K`>(`eventName`): `Function`\[]
+
+Returns a copy of the array of listeners for the event named `eventName`.
+
+```js
+server.on('connection', (stream) => {
+ console.log('someone connected!');
+});
+console.log(util.inspect(server.listeners('connection')));
+// Prints: [ [Function] ]
+```
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+#### Returns
+
+`Function`\[]
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:787
+
+***
+
+### off()
+
+#### off(event, listener)
+
+> **off**(`event`, `listener`): `this`
+
+##### Parameters
+
+β’ **event**: `"reconnecting"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/Shoukaku.ts:147](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L147)
+
+#### off(event, listener)
+
+> **off**(`event`, `listener`): `this`
+
+##### Parameters
+
+β’ **event**: `"debug"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/Shoukaku.ts:148](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L148)
+
+#### off(event, listener)
+
+> **off**(`event`, `listener`): `this`
+
+##### Parameters
+
+β’ **event**: `"error"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/Shoukaku.ts:149](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L149)
+
+#### off(event, listener)
+
+> **off**(`event`, `listener`): `this`
+
+##### Parameters
+
+β’ **event**: `"ready"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/Shoukaku.ts:150](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L150)
+
+#### off(event, listener)
+
+> **off**(`event`, `listener`): `this`
+
+##### Parameters
+
+β’ **event**: `"close"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/Shoukaku.ts:151](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L151)
+
+#### off(event, listener)
+
+> **off**(`event`, `listener`): `this`
+
+##### Parameters
+
+β’ **event**: `"disconnect"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/Shoukaku.ts:152](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L152)
+
+#### off(event, listener)
+
+> **off**(`event`, `listener`): `this`
+
+##### Parameters
+
+β’ **event**: `"raw"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/Shoukaku.ts:153](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L153)
+
+***
+
+### once()
+
+#### once(event, listener)
+
+> **once**(`event`, `listener`): `this`
+
+##### Parameters
+
+β’ **event**: `"reconnecting"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/Shoukaku.ts:140](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L140)
+
+#### once(event, listener)
+
+> **once**(`event`, `listener`): `this`
+
+##### Parameters
+
+β’ **event**: `"debug"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/Shoukaku.ts:141](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L141)
+
+#### once(event, listener)
+
+> **once**(`event`, `listener`): `this`
+
+##### Parameters
+
+β’ **event**: `"error"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/Shoukaku.ts:142](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L142)
+
+#### once(event, listener)
+
+> **once**(`event`, `listener`): `this`
+
+##### Parameters
+
+β’ **event**: `"ready"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/Shoukaku.ts:143](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L143)
+
+#### once(event, listener)
+
+> **once**(`event`, `listener`): `this`
+
+##### Parameters
+
+β’ **event**: `"close"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/Shoukaku.ts:144](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L144)
+
+#### once(event, listener)
+
+> **once**(`event`, `listener`): `this`
+
+##### Parameters
+
+β’ **event**: `"disconnect"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/Shoukaku.ts:145](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L145)
+
+#### once(event, listener)
+
+> **once**(`event`, `listener`): `this`
+
+##### Parameters
+
+β’ **event**: `"raw"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/Shoukaku.ts:146](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L146)
+
+***
+
+### prependListener()
+
+> **prependListener**\<`K`>(`eventName`, `listener`): `this`
+
+Adds the `listener` function to the *beginning* of the listeners array for the
+event named `eventName`. No checks are made to see if the `listener` has
+already been added. Multiple calls passing the same combination of `eventName`
+and `listener` will result in the `listener` being added, and called, multiple times.
+
+```js
+server.prependListener('connection', (stream) => {
+ console.log('someone connected!');
+});
+```
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+The name of the event.
+
+β’ **listener**
+
+The callback function
+
+#### Returns
+
+`this`
+
+#### Since
+
+v6.0.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:886
+
+***
+
+### prependOnceListener()
+
+> **prependOnceListener**\<`K`>(`eventName`, `listener`): `this`
+
+Adds a **one-time**`listener` function for the event named `eventName` to the *beginning* of the listeners array. The next time `eventName` is triggered, this
+listener is removed, and then invoked.
+
+```js
+server.prependOnceListener('connection', (stream) => {
+ console.log('Ah, we have our first user!');
+});
+```
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+The name of the event.
+
+β’ **listener**
+
+The callback function
+
+#### Returns
+
+`this`
+
+#### Since
+
+v6.0.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:902
+
+***
+
+### rawListeners()
+
+> **rawListeners**\<`K`>(`eventName`): `Function`\[]
+
+Returns a copy of the array of listeners for the event named `eventName`,
+including any wrappers (such as those created by `.once()`).
+
+```js
+import { EventEmitter } from 'node:events';
+const emitter = new EventEmitter();
+emitter.once('log', () => console.log('log once'));
+
+// Returns a new Array with a function `onceWrapper` which has a property
+// `listener` which contains the original listener bound above
+const listeners = emitter.rawListeners('log');
+const logFnWrapper = listeners[0];
+
+// Logs "log once" to the console and does not unbind the `once` event
+logFnWrapper.listener();
+
+// Logs "log once" to the console and removes the listener
+logFnWrapper();
+
+emitter.on('log', () => console.log('log persistently'));
+// Will return a new Array with a single function bound by `.on()` above
+const newListeners = emitter.rawListeners('log');
+
+// Logs "log persistently" twice
+newListeners[0]();
+emitter.emit('log');
+```
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+#### Returns
+
+`Function`\[]
+
+#### Since
+
+v9.4.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:818
+
+***
+
+### removeAllListeners()
+
+> **removeAllListeners**(`eventName`?): `this`
+
+Removes all listeners, or those of the specified `eventName`.
+
+It is bad practice to remove listeners added elsewhere in the code,
+particularly when the `EventEmitter` instance was created by some other
+component or module (e.g. sockets or file streams).
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Parameters
+
+β’ **eventName?**: `string` | `symbol`
+
+#### Returns
+
+`this`
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:758
+
+***
+
+### removeListener()
+
+> **removeListener**\<`K`>(`eventName`, `listener`): `this`
+
+Removes the specified `listener` from the listener array for the event named `eventName`.
+
+```js
+const callback = (stream) => {
+ console.log('someone connected!');
+};
+server.on('connection', callback);
+// ...
+server.removeListener('connection', callback);
+```
+
+`removeListener()` will remove, at most, one instance of a listener from the
+listener array. If any single listener has been added multiple times to the
+listener array for the specified `eventName`, then `removeListener()` must be
+called multiple times to remove each instance.
+
+Once an event is emitted, all listeners attached to it at the
+time of emitting are called in order. This implies that any `removeListener()` or `removeAllListeners()` calls *after* emitting and *before* the last listener finishes execution
+will not remove them from`emit()` in progress. Subsequent events behave as expected.
+
+```js
+import { EventEmitter } from 'node:events';
+class MyEmitter extends EventEmitter {}
+const myEmitter = new MyEmitter();
+
+const callbackA = () => {
+ console.log('A');
+ myEmitter.removeListener('event', callbackB);
+};
+
+const callbackB = () => {
+ console.log('B');
+};
+
+myEmitter.on('event', callbackA);
+
+myEmitter.on('event', callbackB);
+
+// callbackA removes listener callbackB but it will still be called.
+// Internal listener array at time of emit [callbackA, callbackB]
+myEmitter.emit('event');
+// Prints:
+// A
+// B
+
+// callbackB is now removed.
+// Internal listener array [callbackA]
+myEmitter.emit('event');
+// Prints:
+// A
+```
+
+Because listeners are managed using an internal array, calling this will
+change the position indices of any listener registered *after* the listener
+being removed. This will not impact the order in which listeners are called,
+but it means that any copies of the listener array as returned by
+the `emitter.listeners()` method will need to be recreated.
+
+When a single function has been added as a handler multiple times for a single
+event (as in the example below), `removeListener()` will remove the most
+recently added instance. In the example the `once('ping')` listener is removed:
+
+```js
+import { EventEmitter } from 'node:events';
+const ee = new EventEmitter();
+
+function pong() {
+ console.log('pong');
+}
+
+ee.on('ping', pong);
+ee.once('ping', pong);
+ee.removeListener('ping', pong);
+
+ee.emit('ping');
+ee.emit('ping');
+```
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+β’ **listener**
+
+#### Returns
+
+`this`
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:742
+
+***
+
+### removeNode()
+
+> **removeNode**(`name`, `reason`): `void`
+
+Remove a Lavalink node from the pool of available nodes
+
+#### Parameters
+
+β’ **name**: `string`
+
+Name of the node
+
+β’ **reason**: `string` = `'Remove node executed'`
+
+Reason of removing the node
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/Shoukaku.ts:239](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L239)
+
+***
+
+### setMaxListeners()
+
+> **setMaxListeners**(`n`): `this`
+
+By default `EventEmitter`s will print a warning if more than `10` listeners are
+added for a particular event. This is a useful default that helps finding
+memory leaks. The `emitter.setMaxListeners()` method allows the limit to be
+modified for this specific `EventEmitter` instance. The value can be set to `Infinity` (or `0`) to indicate an unlimited number of listeners.
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Parameters
+
+β’ **n**: `number`
+
+#### Returns
+
+`this`
+
+#### Since
+
+v0.3.5
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:768
+
+***
+
+### addAbortListener()
+
+> `static` **addAbortListener**(`signal`, `resource`): `Disposable`
+
+Listens once to the `abort` event on the provided `signal`.
+
+Listening to the `abort` event on abort signals is unsafe and may
+lead to resource leaks since another third party with the signal can
+call `e.stopImmediatePropagation()`. Unfortunately Node.js cannot change
+this since it would violate the web standard. Additionally, the original
+API makes it easy to forget to remove listeners.
+
+This API allows safely using `AbortSignal`s in Node.js APIs by solving these
+two issues by listening to the event such that `stopImmediatePropagation` does
+not prevent the listener from running.
+
+Returns a disposable so that it may be unsubscribed from more easily.
+
+```js
+import { addAbortListener } from 'node:events';
+
+function example(signal) {
+ let disposable;
+ try {
+ signal.addEventListener('abort', (e) => e.stopImmediatePropagation());
+ disposable = addAbortListener(signal, (e) => {
+ // Do something when signal is aborted.
+ });
+ } finally {
+ disposable?.[Symbol.dispose]();
+ }
+}
+```
+
+:::caution\[Experimental]
+This API should not be used in production and may be trimmed from a public release.
+:::
+
+#### Parameters
+
+β’ **signal**: `AbortSignal`
+
+β’ **resource**
+
+#### Returns
+
+`Disposable`
+
+Disposable that removes the `abort` listener.
+
+#### Since
+
+v20.5.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:437
+
+***
+
+### getEventListeners()
+
+> `static` **getEventListeners**(`emitter`, `name`): `Function`\[]
+
+Returns a copy of the array of listeners for the event named `eventName`.
+
+For `EventEmitter`s this behaves exactly the same as calling `.listeners` on
+the emitter.
+
+For `EventTarget`s this is the only way to get the event listeners for the
+event target. This is useful for debugging and diagnostic purposes.
+
+```js
+import { getEventListeners, EventEmitter } from 'node:events';
+
+{
+ const ee = new EventEmitter();
+ const listener = () => console.log('Events are fun');
+ ee.on('foo', listener);
+ console.log(getEventListeners(ee, 'foo')); // [ [Function: listener] ]
+}
+{
+ const et = new EventTarget();
+ const listener = () => console.log('Events are fun');
+ et.addEventListener('foo', listener);
+ console.log(getEventListeners(et, 'foo')); // [ [Function: listener] ]
+}
+```
+
+#### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`> | `EventTarget`
+
+β’ **name**: `string` | `symbol`
+
+#### Returns
+
+`Function`\[]
+
+#### Since
+
+v15.2.0, v14.17.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:358
+
+***
+
+### getMaxListeners()
+
+> `static` **getMaxListeners**(`emitter`): `number`
+
+Returns the currently set max amount of listeners.
+
+For `EventEmitter`s this behaves exactly the same as calling `.getMaxListeners` on
+the emitter.
+
+For `EventTarget`s this is the only way to get the max event listeners for the
+event target. If the number of event handlers on a single EventTarget exceeds
+the max set, the EventTarget will print a warning.
+
+```js
+import { getMaxListeners, setMaxListeners, EventEmitter } from 'node:events';
+
+{
+ const ee = new EventEmitter();
+ console.log(getMaxListeners(ee)); // 10
+ setMaxListeners(11, ee);
+ console.log(getMaxListeners(ee)); // 11
+}
+{
+ const et = new EventTarget();
+ console.log(getMaxListeners(et)); // 10
+ setMaxListeners(11, et);
+ console.log(getMaxListeners(et)); // 11
+}
+```
+
+#### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`> | `EventTarget`
+
+#### Returns
+
+`number`
+
+#### Since
+
+v19.9.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:387
+
+***
+
+### ~~listenerCount()~~
+
+> `static` **listenerCount**(`emitter`, `eventName`): `number`
+
+A class method that returns the number of listeners for the given `eventName` registered on the given `emitter`.
+
+```js
+import { EventEmitter, listenerCount } from 'node:events';
+
+const myEmitter = new EventEmitter();
+myEmitter.on('event', () => {});
+myEmitter.on('event', () => {});
+console.log(listenerCount(myEmitter, 'event'));
+// Prints: 2
+```
+
+:::caution\[Deprecated]
+Since v3.2.0 - Use `listenerCount` instead.
+:::
+
+#### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`>
+
+The emitter to query
+
+β’ **eventName**: `string` | `symbol`
+
+The event name
+
+#### Returns
+
+`number`
+
+#### Since
+
+v0.9.12
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:330
+
+***
+
+### on()
+
+#### on(emitter, eventName, options)
+
+> `static` **on**(`emitter`, `eventName`, `options`?): `AsyncIterableIterator`\<`any`\[]>
+
+```js
+import { on, EventEmitter } from 'node:events';
+import process from 'node:process';
+
+const ee = new EventEmitter();
+
+// Emit later on
+process.nextTick(() => {
+ ee.emit('foo', 'bar');
+ ee.emit('foo', 42);
+});
+
+for await (const event of on(ee, 'foo')) {
+ // The execution of this inner block is synchronous and it
+ // processes one event at a time (even with await). Do not use
+ // if concurrent execution is required.
+ console.log(event); // prints ['bar'] [42]
+}
+// Unreachable here
+```
+
+Returns an `AsyncIterator` that iterates `eventName` events. It will throw
+if the `EventEmitter` emits `'error'`. It removes all listeners when
+exiting the loop. The `value` returned by each iteration is an array
+composed of the emitted event arguments.
+
+An `AbortSignal` can be used to cancel waiting on events:
+
+```js
+import { on, EventEmitter } from 'node:events';
+import process from 'node:process';
+
+const ac = new AbortController();
+
+(async () => {
+ const ee = new EventEmitter();
+
+ // Emit later on
+ process.nextTick(() => {
+ ee.emit('foo', 'bar');
+ ee.emit('foo', 42);
+ });
+
+ for await (const event of on(ee, 'foo', { signal: ac.signal })) {
+ // The execution of this inner block is synchronous and it
+ // processes one event at a time (even with await). Do not use
+ // if concurrent execution is required.
+ console.log(event); // prints ['bar'] [42]
+ }
+ // Unreachable here
+})();
+
+process.nextTick(() => ac.abort());
+```
+
+Use the `close` option to specify an array of event names that will end the iteration:
+
+```js
+import { on, EventEmitter } from 'node:events';
+import process from 'node:process';
+
+const ee = new EventEmitter();
+
+// Emit later on
+process.nextTick(() => {
+ ee.emit('foo', 'bar');
+ ee.emit('foo', 42);
+ ee.emit('close');
+});
+
+for await (const event of on(ee, 'foo', { close: ['close'] })) {
+ console.log(event); // prints ['bar'] [42]
+}
+// the loop will exit after 'close' is emitted
+console.log('done'); // prints 'done'
+```
+
+##### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`>
+
+β’ **eventName**: `string` | `symbol`
+
+β’ **options?**: `StaticEventEmitterIteratorOptions`
+
+##### Returns
+
+`AsyncIterableIterator`\<`any`\[]>
+
+An `AsyncIterator` that iterates `eventName` events emitted by the `emitter`
+
+##### Since
+
+v13.6.0, v12.16.0
+
+##### Defined in
+
+node\_modules/@types/node/events.d.ts:303
+
+#### on(emitter, eventName, options)
+
+> `static` **on**(`emitter`, `eventName`, `options`?): `AsyncIterableIterator`\<`any`\[]>
+
+##### Parameters
+
+β’ **emitter**: `EventTarget`
+
+β’ **eventName**: `string`
+
+β’ **options?**: `StaticEventEmitterIteratorOptions`
+
+##### Returns
+
+`AsyncIterableIterator`\<`any`\[]>
+
+##### Defined in
+
+node\_modules/@types/node/events.d.ts:308
+
+***
+
+### once()
+
+#### once(emitter, eventName, options)
+
+> `static` **once**(`emitter`, `eventName`, `options`?): `Promise`\<`any`\[]>
+
+Creates a `Promise` that is fulfilled when the `EventEmitter` emits the given
+event or that is rejected if the `EventEmitter` emits `'error'` while waiting.
+The `Promise` will resolve with an array of all the arguments emitted to the
+given event.
+
+This method is intentionally generic and works with the web platform [EventTarget](https://dom.spec.whatwg.org/#interface-eventtarget) interface, which has no special`'error'` event
+semantics and does not listen to the `'error'` event.
+
+```js
+import { once, EventEmitter } from 'node:events';
+import process from 'node:process';
+
+const ee = new EventEmitter();
+
+process.nextTick(() => {
+ ee.emit('myevent', 42);
+});
+
+const [value] = await once(ee, 'myevent');
+console.log(value);
+
+const err = new Error('kaboom');
+process.nextTick(() => {
+ ee.emit('error', err);
+});
+
+try {
+ await once(ee, 'myevent');
+} catch (err) {
+ console.error('error happened', err);
+}
+```
+
+The special handling of the `'error'` event is only used when `events.once()` is used to wait for another event. If `events.once()` is used to wait for the
+'`error'` event itself, then it is treated as any other kind of event without
+special handling:
+
+```js
+import { EventEmitter, once } from 'node:events';
+
+const ee = new EventEmitter();
+
+once(ee, 'error')
+ .then(([err]) => console.log('ok', err.message))
+ .catch((err) => console.error('error', err.message));
+
+ee.emit('error', new Error('boom'));
+
+// Prints: ok boom
+```
+
+An `AbortSignal` can be used to cancel waiting for the event:
+
+```js
+import { EventEmitter, once } from 'node:events';
+
+const ee = new EventEmitter();
+const ac = new AbortController();
+
+async function foo(emitter, event, signal) {
+ try {
+ await once(emitter, event, { signal });
+ console.log('event emitted!');
+ } catch (error) {
+ if (error.name === 'AbortError') {
+ console.error('Waiting for the event was canceled!');
+ } else {
+ console.error('There was an error', error.message);
+ }
+ }
+}
+
+foo(ee, 'foo', ac.signal);
+ac.abort(); // Abort waiting for the event
+ee.emit('foo'); // Prints: Waiting for the event was canceled!
+```
+
+##### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`>
+
+β’ **eventName**: `string` | `symbol`
+
+β’ **options?**: `StaticEventEmitterOptions`
+
+##### Returns
+
+`Promise`\<`any`\[]>
+
+##### Since
+
+v11.13.0, v10.16.0
+
+##### Defined in
+
+node\_modules/@types/node/events.d.ts:217
+
+#### once(emitter, eventName, options)
+
+> `static` **once**(`emitter`, `eventName`, `options`?): `Promise`\<`any`\[]>
+
+##### Parameters
+
+β’ **emitter**: `EventTarget`
+
+β’ **eventName**: `string`
+
+β’ **options?**: `StaticEventEmitterOptions`
+
+##### Returns
+
+`Promise`\<`any`\[]>
+
+##### Defined in
+
+node\_modules/@types/node/events.d.ts:222
+
+***
+
+### setMaxListeners()
+
+> `static` **setMaxListeners**(`n`?, ...`eventTargets`?): `void`
+
+```js
+import { setMaxListeners, EventEmitter } from 'node:events';
+
+const target = new EventTarget();
+const emitter = new EventEmitter();
+
+setMaxListeners(5, target, emitter);
+```
+
+#### Parameters
+
+β’ **n?**: `number`
+
+A non-negative number. The maximum number of listeners per `EventTarget` event.
+
+β’ ...**eventTargets?**: (`EventEmitter`\<`DefaultEventMap`> | `EventTarget`)\[]
+
+#### Returns
+
+`void`
+
+#### Since
+
+v15.4.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:402
+
+## Events
+
+### on()
+
+#### on(event, listener)
+
+> **on**(`event`, `listener`): `this`
+
+Emitted when reconnect tries are occurring and how many tries are left
+
+##### Parameters
+
+β’ **event**: `"reconnecting"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/Shoukaku.ts:109](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L109)
+
+#### on(event, listener)
+
+> **on**(`event`, `listener`): `this`
+
+Emitted when data useful for debugging is produced
+
+##### Parameters
+
+β’ **event**: `"debug"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/Shoukaku.ts:114](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L114)
+
+#### on(event, listener)
+
+> **on**(`event`, `listener`): `this`
+
+Emitted when an error occurs
+
+##### Parameters
+
+β’ **event**: `"error"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/Shoukaku.ts:119](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L119)
+
+#### on(event, listener)
+
+> **on**(`event`, `listener`): `this`
+
+Emitted when Shoukaku is ready to recieve operations
+
+##### Parameters
+
+β’ **event**: `"ready"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/Shoukaku.ts:124](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L124)
+
+#### on(event, listener)
+
+> **on**(`event`, `listener`): `this`
+
+Emitted when a websocket connection to Lavalink closes
+
+##### Parameters
+
+β’ **event**: `"close"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/Shoukaku.ts:129](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L129)
+
+#### on(event, listener)
+
+> **on**(`event`, `listener`): `this`
+
+Emitted when a websocket connection to Lavalink disconnects
+
+##### Parameters
+
+β’ **event**: `"disconnect"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/Shoukaku.ts:134](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L134)
+
+#### on(event, listener)
+
+> **on**(`event`, `listener`): `this`
+
+Emitted when a raw message is recived from Lavalink
+
+##### Parameters
+
+β’ **event**: `"raw"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/Shoukaku.ts:139](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L139)
diff --git a/src/content/docs/3.4.2/api/interfaces/Address.md b/src/content/docs/3.4.2/api/interfaces/Address.md
new file mode 100644
index 0000000..19450ab
--- /dev/null
+++ b/src/content/docs/3.4.2/api/interfaces/Address.md
@@ -0,0 +1,37 @@
+---
+editUrl: false
+next: false
+prev: false
+title: Address
+slug: 3.4.2/apiinterfaces/address
+---
+
+## Properties
+
+### address
+
+> **address**: `string`
+
+#### Defined in
+
+[src/node/Rest.ts:43](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/node/Rest.ts#L43)
+
+***
+
+### failingTime
+
+> **failingTime**: `string`
+
+#### Defined in
+
+[src/node/Rest.ts:45](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/node/Rest.ts#L45)
+
+***
+
+### failingTimestamp
+
+> **failingTimestamp**: `number`
+
+#### Defined in
+
+[src/node/Rest.ts:44](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/node/Rest.ts#L44)
diff --git a/src/content/docs/3.4.2/api/interfaces/Band.md b/src/content/docs/3.4.2/api/interfaces/Band.md
new file mode 100644
index 0000000..83923e6
--- /dev/null
+++ b/src/content/docs/3.4.2/api/interfaces/Band.md
@@ -0,0 +1,27 @@
+---
+editUrl: false
+next: false
+prev: false
+title: Band
+slug: 3.4.2/apiinterfaces/band
+---
+
+## Properties
+
+### band
+
+> **band**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:42](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L42)
+
+***
+
+### gain
+
+> **gain**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:43](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L43)
diff --git a/src/content/docs/3.4.2/api/interfaces/ChannelMixSettings.md b/src/content/docs/3.4.2/api/interfaces/ChannelMixSettings.md
new file mode 100644
index 0000000..65d3cea
--- /dev/null
+++ b/src/content/docs/3.4.2/api/interfaces/ChannelMixSettings.md
@@ -0,0 +1,47 @@
+---
+editUrl: false
+next: false
+prev: false
+title: ChannelMixSettings
+slug: 3.4.2/apiinterfaces/channelmixsettings
+---
+
+## Properties
+
+### leftToLeft?
+
+> `optional` **leftToLeft**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:80](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L80)
+
+***
+
+### leftToRight?
+
+> `optional` **leftToRight**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:81](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L81)
+
+***
+
+### rightToLeft?
+
+> `optional` **rightToLeft**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:82](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L82)
+
+***
+
+### rightToRight?
+
+> `optional` **rightToRight**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:83](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L83)
diff --git a/src/content/docs/3.4.2/api/interfaces/ConnectorMethods.md b/src/content/docs/3.4.2/api/interfaces/ConnectorMethods.md
new file mode 100644
index 0000000..bccd4ca
--- /dev/null
+++ b/src/content/docs/3.4.2/api/interfaces/ConnectorMethods.md
@@ -0,0 +1,27 @@
+---
+editUrl: false
+next: false
+prev: false
+title: ConnectorMethods
+slug: 3.4.2/apiinterfaces/connectormethods
+---
+
+## Properties
+
+### getId
+
+> **getId**: `any`
+
+#### Defined in
+
+[src/connectors/Connector.ts:7](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/connectors/Connector.ts#L7)
+
+***
+
+### sendPacket
+
+> **sendPacket**: `any`
+
+#### Defined in
+
+[src/connectors/Connector.ts:6](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/connectors/Connector.ts#L6)
diff --git a/src/content/docs/3.4.2/api/interfaces/DistortionSettings.md b/src/content/docs/3.4.2/api/interfaces/DistortionSettings.md
new file mode 100644
index 0000000..fd4cf1f
--- /dev/null
+++ b/src/content/docs/3.4.2/api/interfaces/DistortionSettings.md
@@ -0,0 +1,87 @@
+---
+editUrl: false
+next: false
+prev: false
+title: DistortionSettings
+slug: 3.4.2/apiinterfaces/distortionsettings
+---
+
+## Properties
+
+### cosOffset?
+
+> `optional` **cosOffset**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:71](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L71)
+
+***
+
+### cosScale?
+
+> `optional` **cosScale**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:72](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L72)
+
+***
+
+### offset?
+
+> `optional` **offset**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:75](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L75)
+
+***
+
+### scale?
+
+> `optional` **scale**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:76](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L76)
+
+***
+
+### sinOffset?
+
+> `optional` **sinOffset**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:69](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L69)
+
+***
+
+### sinScale?
+
+> `optional` **sinScale**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:70](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L70)
+
+***
+
+### tanOffset?
+
+> `optional` **tanOffset**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:73](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L73)
+
+***
+
+### tanScale?
+
+> `optional` **tanScale**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:74](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L74)
diff --git a/src/content/docs/3.4.2/api/interfaces/Exception.md b/src/content/docs/3.4.2/api/interfaces/Exception.md
new file mode 100644
index 0000000..44856ec
--- /dev/null
+++ b/src/content/docs/3.4.2/api/interfaces/Exception.md
@@ -0,0 +1,37 @@
+---
+editUrl: false
+next: false
+prev: false
+title: Exception
+slug: 3.4.2/apiinterfaces/exception
+---
+
+## Properties
+
+### cause
+
+> **cause**: `string`
+
+#### Defined in
+
+[src/guild/Player.ts:99](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L99)
+
+***
+
+### message
+
+> **message**: `string`
+
+#### Defined in
+
+[src/guild/Player.ts:98](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L98)
+
+***
+
+### severity
+
+> **severity**: [`Severity`](/3.4.2/api/type-aliases/severity/)
+
+#### Defined in
+
+[src/guild/Player.ts:97](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L97)
diff --git a/src/content/docs/3.4.2/api/interfaces/FilterOptions.md b/src/content/docs/3.4.2/api/interfaces/FilterOptions.md
new file mode 100644
index 0000000..d957863
--- /dev/null
+++ b/src/content/docs/3.4.2/api/interfaces/FilterOptions.md
@@ -0,0 +1,107 @@
+---
+editUrl: false
+next: false
+prev: false
+title: FilterOptions
+slug: 3.4.2/apiinterfaces/filteroptions
+---
+
+## Properties
+
+### channelMix?
+
+> `optional` **channelMix**: `null` | [`ChannelMixSettings`](/3.4.2/api/interfaces/channelmixsettings/)
+
+#### Defined in
+
+[src/guild/Player.ts:156](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L156)
+
+***
+
+### distortion?
+
+> `optional` **distortion**: `null` | [`DistortionSettings`](/3.4.2/api/interfaces/distortionsettings/)
+
+#### Defined in
+
+[src/guild/Player.ts:155](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L155)
+
+***
+
+### equalizer?
+
+> `optional` **equalizer**: [`Band`](/3.4.2/api/interfaces/band/)\[]
+
+#### Defined in
+
+[src/guild/Player.ts:149](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L149)
+
+***
+
+### karaoke?
+
+> `optional` **karaoke**: `null` | [`KaraokeSettings`](/3.4.2/api/interfaces/karaokesettings/)
+
+#### Defined in
+
+[src/guild/Player.ts:150](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L150)
+
+***
+
+### lowPass?
+
+> `optional` **lowPass**: `null` | [`LowPassSettings`](/3.4.2/api/interfaces/lowpasssettings/)
+
+#### Defined in
+
+[src/guild/Player.ts:157](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L157)
+
+***
+
+### rotation?
+
+> `optional` **rotation**: `null` | [`RotationSettings`](/3.4.2/api/interfaces/rotationsettings/)
+
+#### Defined in
+
+[src/guild/Player.ts:154](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L154)
+
+***
+
+### timescale?
+
+> `optional` **timescale**: `null` | [`TimescaleSettings`](/3.4.2/api/interfaces/timescalesettings/)
+
+#### Defined in
+
+[src/guild/Player.ts:151](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L151)
+
+***
+
+### tremolo?
+
+> `optional` **tremolo**: `null` | [`FreqSettings`](/3.4.2/api/interfaces/freqsettings/)
+
+#### Defined in
+
+[src/guild/Player.ts:152](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L152)
+
+***
+
+### vibrato?
+
+> `optional` **vibrato**: `null` | [`FreqSettings`](/3.4.2/api/interfaces/freqsettings/)
+
+#### Defined in
+
+[src/guild/Player.ts:153](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L153)
+
+***
+
+### volume?
+
+> `optional` **volume**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:148](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L148)
diff --git a/src/content/docs/3.4.2/api/interfaces/FreqSettings.md b/src/content/docs/3.4.2/api/interfaces/FreqSettings.md
new file mode 100644
index 0000000..3505d0f
--- /dev/null
+++ b/src/content/docs/3.4.2/api/interfaces/FreqSettings.md
@@ -0,0 +1,27 @@
+---
+editUrl: false
+next: false
+prev: false
+title: FreqSettings
+slug: 3.4.2/apiinterfaces/freqsettings
+---
+
+## Properties
+
+### depth?
+
+> `optional` **depth**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:61](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L61)
+
+***
+
+### frequency?
+
+> `optional` **frequency**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:60](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L60)
diff --git a/src/content/docs/3.4.2/api/interfaces/KaraokeSettings.md b/src/content/docs/3.4.2/api/interfaces/KaraokeSettings.md
new file mode 100644
index 0000000..323ab91
--- /dev/null
+++ b/src/content/docs/3.4.2/api/interfaces/KaraokeSettings.md
@@ -0,0 +1,47 @@
+---
+editUrl: false
+next: false
+prev: false
+title: KaraokeSettings
+slug: 3.4.2/apiinterfaces/karaokesettings
+---
+
+## Properties
+
+### filterBand?
+
+> `optional` **filterBand**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:49](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L49)
+
+***
+
+### filterWidth?
+
+> `optional` **filterWidth**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:50](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L50)
+
+***
+
+### level?
+
+> `optional` **level**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:47](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L47)
+
+***
+
+### monoLevel?
+
+> `optional` **monoLevel**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:48](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L48)
diff --git a/src/content/docs/3.4.2/api/interfaces/LavalinkResponse.md b/src/content/docs/3.4.2/api/interfaces/LavalinkResponse.md
new file mode 100644
index 0000000..be1e67b
--- /dev/null
+++ b/src/content/docs/3.4.2/api/interfaces/LavalinkResponse.md
@@ -0,0 +1,45 @@
+---
+editUrl: false
+next: false
+prev: false
+title: LavalinkResponse
+slug: 3.4.2/apiinterfaces/lavalinkresponse
+---
+
+## Properties
+
+### loadType
+
+> **loadType**: [`LoadType`](/3.4.2/api/type-aliases/loadtype/)
+
+#### Defined in
+
+[src/node/Rest.ts:34](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/node/Rest.ts#L34)
+
+***
+
+### playlistInfo
+
+> **playlistInfo**: `object`
+
+#### name?
+
+> `optional` **name**: `string`
+
+#### selectedTrack?
+
+> `optional` **selectedTrack**: `number`
+
+#### Defined in
+
+[src/node/Rest.ts:35](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/node/Rest.ts#L35)
+
+***
+
+### tracks
+
+> **tracks**: [`Track`](/3.4.2/api/interfaces/track/)\[]
+
+#### Defined in
+
+[src/node/Rest.ts:39](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/node/Rest.ts#L39)
diff --git a/src/content/docs/3.4.2/api/interfaces/LowPassSettings.md b/src/content/docs/3.4.2/api/interfaces/LowPassSettings.md
new file mode 100644
index 0000000..85b9818
--- /dev/null
+++ b/src/content/docs/3.4.2/api/interfaces/LowPassSettings.md
@@ -0,0 +1,17 @@
+---
+editUrl: false
+next: false
+prev: false
+title: LowPassSettings
+slug: 3.4.2/apiinterfaces/lowpasssettings
+---
+
+## Properties
+
+### smoothing?
+
+> `optional` **smoothing**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:87](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L87)
diff --git a/src/content/docs/3.4.2/api/interfaces/MergedShoukakuOptions.md b/src/content/docs/3.4.2/api/interfaces/MergedShoukakuOptions.md
new file mode 100644
index 0000000..9ed4acc
--- /dev/null
+++ b/src/content/docs/3.4.2/api/interfaces/MergedShoukakuOptions.md
@@ -0,0 +1,117 @@
+---
+editUrl: false
+next: false
+prev: false
+title: MergedShoukakuOptions
+slug: 3.4.2/apiinterfaces/mergedshoukakuoptions
+---
+
+## Properties
+
+### alwaysSendResumeKey
+
+> **alwaysSendResumeKey**: `boolean`
+
+#### Defined in
+
+[src/Shoukaku.ts:95](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L95)
+
+***
+
+### moveOnDisconnect
+
+> **moveOnDisconnect**: `boolean`
+
+#### Defined in
+
+[src/Shoukaku.ts:99](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L99)
+
+***
+
+### reconnectInterval
+
+> **reconnectInterval**: `number`
+
+#### Defined in
+
+[src/Shoukaku.ts:97](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L97)
+
+***
+
+### reconnectTries
+
+> **reconnectTries**: `number`
+
+#### Defined in
+
+[src/Shoukaku.ts:96](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L96)
+
+***
+
+### restTimeout
+
+> **restTimeout**: `number`
+
+#### Defined in
+
+[src/Shoukaku.ts:98](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L98)
+
+***
+
+### resume
+
+> **resume**: `boolean`
+
+#### Defined in
+
+[src/Shoukaku.ts:91](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L91)
+
+***
+
+### resumeByLibrary
+
+> **resumeByLibrary**: `boolean`
+
+#### Defined in
+
+[src/Shoukaku.ts:94](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L94)
+
+***
+
+### resumeKey
+
+> **resumeKey**: `string`
+
+#### Defined in
+
+[src/Shoukaku.ts:92](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L92)
+
+***
+
+### resumeTimeout
+
+> **resumeTimeout**: `number`
+
+#### Defined in
+
+[src/Shoukaku.ts:93](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L93)
+
+***
+
+### structures
+
+> **structures**: [`Structures`](/3.4.2/api/interfaces/structures/)
+
+#### Defined in
+
+[src/Shoukaku.ts:101](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L101)
+
+***
+
+### userAgent
+
+> **userAgent**: `string`
+
+#### Defined in
+
+[src/Shoukaku.ts:100](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L100)
diff --git a/src/content/docs/3.4.2/api/interfaces/NodeOption.md b/src/content/docs/3.4.2/api/interfaces/NodeOption.md
new file mode 100644
index 0000000..e8c58f8
--- /dev/null
+++ b/src/content/docs/3.4.2/api/interfaces/NodeOption.md
@@ -0,0 +1,67 @@
+---
+editUrl: false
+next: false
+prev: false
+title: NodeOption
+slug: 3.4.2/apiinterfaces/nodeoption
+---
+
+## Properties
+
+### auth
+
+> **auth**: `string`
+
+Credentials to access Lavalnk
+
+#### Defined in
+
+[src/Shoukaku.ts:32](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L32)
+
+***
+
+### group?
+
+> `optional` **group**: `string`
+
+Group of this node
+
+#### Defined in
+
+[src/Shoukaku.ts:40](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L40)
+
+***
+
+### name
+
+> **name**: `string`
+
+Name of this node
+
+#### Defined in
+
+[src/Shoukaku.ts:24](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L24)
+
+***
+
+### secure?
+
+> `optional` **secure**: `boolean`
+
+Whether to use secure protocols or not
+
+#### Defined in
+
+[src/Shoukaku.ts:36](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L36)
+
+***
+
+### url
+
+> **url**: `string`
+
+URL of Lavalink
+
+#### Defined in
+
+[src/Shoukaku.ts:28](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L28)
diff --git a/src/content/docs/3.4.2/api/interfaces/NodeStats.md b/src/content/docs/3.4.2/api/interfaces/NodeStats.md
new file mode 100644
index 0000000..f067e5c
--- /dev/null
+++ b/src/content/docs/3.4.2/api/interfaces/NodeStats.md
@@ -0,0 +1,107 @@
+---
+editUrl: false
+next: false
+prev: false
+title: NodeStats
+slug: 3.4.2/apiinterfaces/nodestats
+---
+
+## Properties
+
+### cpu
+
+> **cpu**: `object`
+
+#### cores
+
+> **cores**: `number`
+
+#### lavalinkLoad
+
+> **lavalinkLoad**: `number`
+
+#### systemLoad
+
+> **systemLoad**: `number`
+
+#### Defined in
+
+[src/node/Node.ts:32](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/node/Node.ts#L32)
+
+***
+
+### frameStats
+
+> **frameStats**: `object`
+
+#### deficit
+
+> **deficit**: `number`
+
+#### nulled
+
+> **nulled**: `number`
+
+#### sent
+
+> **sent**: `number`
+
+#### Defined in
+
+[src/node/Node.ts:27](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/node/Node.ts#L27)
+
+***
+
+### memory
+
+> **memory**: `object`
+
+#### allocated
+
+> **allocated**: `number`
+
+#### free
+
+> **free**: `number`
+
+#### reservable
+
+> **reservable**: `number`
+
+#### used
+
+> **used**: `number`
+
+#### Defined in
+
+[src/node/Node.ts:21](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/node/Node.ts#L21)
+
+***
+
+### players
+
+> **players**: `number`
+
+#### Defined in
+
+[src/node/Node.ts:19](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/node/Node.ts#L19)
+
+***
+
+### playingPlayers
+
+> **playingPlayers**: `number`
+
+#### Defined in
+
+[src/node/Node.ts:20](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/node/Node.ts#L20)
+
+***
+
+### uptime
+
+> **uptime**: `number`
+
+#### Defined in
+
+[src/node/Node.ts:37](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/node/Node.ts#L37)
diff --git a/src/content/docs/3.4.2/api/interfaces/NonResumableHeaders.md b/src/content/docs/3.4.2/api/interfaces/NonResumableHeaders.md
new file mode 100644
index 0000000..0c42e43
--- /dev/null
+++ b/src/content/docs/3.4.2/api/interfaces/NonResumableHeaders.md
@@ -0,0 +1,51 @@
+---
+editUrl: false
+next: false
+prev: false
+title: NonResumableHeaders
+slug: 3.4.2/apiinterfaces/nonresumableheaders
+---
+
+## Indexable
+
+\[`key`: `string`]: `string`
+
+## Properties
+
+### Authorization
+
+> **Authorization**: `string`
+
+#### Defined in
+
+[src/node/Node.ts:53](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/node/Node.ts#L53)
+
+***
+
+### Client-Name
+
+> **Client-Name**: `string`
+
+#### Defined in
+
+[src/node/Node.ts:51](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/node/Node.ts#L51)
+
+***
+
+### User-Agent
+
+> **User-Agent**: `string`
+
+#### Defined in
+
+[src/node/Node.ts:52](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/node/Node.ts#L52)
+
+***
+
+### User-Id
+
+> **User-Id**: `string`
+
+#### Defined in
+
+[src/node/Node.ts:54](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/node/Node.ts#L54)
diff --git a/src/content/docs/3.4.2/api/interfaces/PlayOptions.md b/src/content/docs/3.4.2/api/interfaces/PlayOptions.md
new file mode 100644
index 0000000..703153f
--- /dev/null
+++ b/src/content/docs/3.4.2/api/interfaces/PlayOptions.md
@@ -0,0 +1,45 @@
+---
+editUrl: false
+next: false
+prev: false
+title: PlayOptions
+slug: 3.4.2/apiinterfaces/playoptions
+---
+
+Options when playing a new track
+
+## Properties
+
+### options?
+
+> `optional` **options**: `object`
+
+#### endTime?
+
+> `optional` **endTime**: `number`
+
+#### noReplace?
+
+> `optional` **noReplace**: `boolean`
+
+#### pause?
+
+> `optional` **pause**: `boolean`
+
+#### startTime?
+
+> `optional` **startTime**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:16](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L16)
+
+***
+
+### track
+
+> **track**: `string`
+
+#### Defined in
+
+[src/guild/Player.ts:15](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L15)
diff --git a/src/content/docs/3.4.2/api/interfaces/PlayPayload.md b/src/content/docs/3.4.2/api/interfaces/PlayPayload.md
new file mode 100644
index 0000000..20ea137
--- /dev/null
+++ b/src/content/docs/3.4.2/api/interfaces/PlayPayload.md
@@ -0,0 +1,77 @@
+---
+editUrl: false
+next: false
+prev: false
+title: PlayPayload
+slug: 3.4.2/apiinterfaces/playpayload
+---
+
+## Properties
+
+### endTime?
+
+> `optional` **endTime**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:31](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L31)
+
+***
+
+### guildId
+
+> **guildId**: `string`
+
+#### Defined in
+
+[src/guild/Player.ts:26](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L26)
+
+***
+
+### noReplace
+
+> **noReplace**: `boolean`
+
+#### Defined in
+
+[src/guild/Player.ts:28](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L28)
+
+***
+
+### op
+
+> **op**: `string`
+
+#### Defined in
+
+[src/guild/Player.ts:25](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L25)
+
+***
+
+### pause
+
+> **pause**: `boolean`
+
+#### Defined in
+
+[src/guild/Player.ts:29](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L29)
+
+***
+
+### startTime?
+
+> `optional` **startTime**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:30](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L30)
+
+***
+
+### track
+
+> **track**: `string`
+
+#### Defined in
+
+[src/guild/Player.ts:27](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L27)
diff --git a/src/content/docs/3.4.2/api/interfaces/PlayerEvent.md b/src/content/docs/3.4.2/api/interfaces/PlayerEvent.md
new file mode 100644
index 0000000..6bb204b
--- /dev/null
+++ b/src/content/docs/3.4.2/api/interfaces/PlayerEvent.md
@@ -0,0 +1,45 @@
+---
+editUrl: false
+next: false
+prev: false
+title: PlayerEvent
+slug: 3.4.2/apiinterfaces/playerevent
+---
+
+## Extended by
+
+* [`TrackStartEvent`](/3.4.2/api/interfaces/trackstartevent/)
+* [`TrackEndEvent`](/3.4.2/api/interfaces/trackendevent/)
+* [`TrackStuckEvent`](/3.4.2/api/interfaces/trackstuckevent/)
+* [`TrackExceptionEvent`](/3.4.2/api/interfaces/trackexceptionevent/)
+* [`WebSocketClosedEvent`](/3.4.2/api/interfaces/websocketclosedevent/)
+
+## Properties
+
+### guildId
+
+> **guildId**: `string`
+
+#### Defined in
+
+[src/guild/Player.ts:93](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L93)
+
+***
+
+### op
+
+> **op**: [`EVENT`](/3.4.2/api/namespaces/constants/enumerations/opcodes/#event)
+
+#### Defined in
+
+[src/guild/Player.ts:91](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L91)
+
+***
+
+### type
+
+> **type**: [`PlayerEventType`](/3.4.2/api/type-aliases/playereventtype/)
+
+#### Defined in
+
+[src/guild/Player.ts:92](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L92)
diff --git a/src/content/docs/3.4.2/api/interfaces/PlayerUpdate.md b/src/content/docs/3.4.2/api/interfaces/PlayerUpdate.md
new file mode 100644
index 0000000..25e40bf
--- /dev/null
+++ b/src/content/docs/3.4.2/api/interfaces/PlayerUpdate.md
@@ -0,0 +1,49 @@
+---
+editUrl: false
+next: false
+prev: false
+title: PlayerUpdate
+slug: 3.4.2/apiinterfaces/playerupdate
+---
+
+## Properties
+
+### guildId
+
+> **guildId**: `string`
+
+#### Defined in
+
+[src/guild/Player.ts:144](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L144)
+
+***
+
+### op
+
+> **op**: [`PLAYER_UPDATE`](/3.4.2/api/namespaces/constants/enumerations/opcodes/#player_update)
+
+#### Defined in
+
+[src/guild/Player.ts:138](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L138)
+
+***
+
+### state
+
+> **state**: `object`
+
+#### connected
+
+> **connected**: `boolean`
+
+#### position?
+
+> `optional` **position**: `number`
+
+#### time
+
+> **time**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:139](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L139)
diff --git a/src/content/docs/3.4.2/api/interfaces/ResumableHeaders.md b/src/content/docs/3.4.2/api/interfaces/ResumableHeaders.md
new file mode 100644
index 0000000..45428c6
--- /dev/null
+++ b/src/content/docs/3.4.2/api/interfaces/ResumableHeaders.md
@@ -0,0 +1,61 @@
+---
+editUrl: false
+next: false
+prev: false
+title: ResumableHeaders
+slug: 3.4.2/apiinterfaces/resumableheaders
+---
+
+## Indexable
+
+\[`key`: `string`]: `string`
+
+## Properties
+
+### Authorization
+
+> **Authorization**: `string`
+
+#### Defined in
+
+[src/node/Node.ts:44](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/node/Node.ts#L44)
+
+***
+
+### Client-Name
+
+> **Client-Name**: `string`
+
+#### Defined in
+
+[src/node/Node.ts:42](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/node/Node.ts#L42)
+
+***
+
+### Resume-Key
+
+> **Resume-Key**: `string`
+
+#### Defined in
+
+[src/node/Node.ts:46](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/node/Node.ts#L46)
+
+***
+
+### User-Agent
+
+> **User-Agent**: `string`
+
+#### Defined in
+
+[src/node/Node.ts:43](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/node/Node.ts#L43)
+
+***
+
+### User-Id
+
+> **User-Id**: `string`
+
+#### Defined in
+
+[src/node/Node.ts:45](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/node/Node.ts#L45)
diff --git a/src/content/docs/3.4.2/api/interfaces/ResumeOptions.md b/src/content/docs/3.4.2/api/interfaces/ResumeOptions.md
new file mode 100644
index 0000000..56d61dc
--- /dev/null
+++ b/src/content/docs/3.4.2/api/interfaces/ResumeOptions.md
@@ -0,0 +1,47 @@
+---
+editUrl: false
+next: false
+prev: false
+title: ResumeOptions
+slug: 3.4.2/apiinterfaces/resumeoptions
+---
+
+## Properties
+
+### endtime?
+
+> `optional` **endtime**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:38](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L38)
+
+***
+
+### noReplace?
+
+> `optional` **noReplace**: `boolean`
+
+#### Defined in
+
+[src/guild/Player.ts:35](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L35)
+
+***
+
+### pause?
+
+> `optional` **pause**: `boolean`
+
+#### Defined in
+
+[src/guild/Player.ts:36](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L36)
+
+***
+
+### startTime?
+
+> `optional` **startTime**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:37](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L37)
diff --git a/src/content/docs/3.4.2/api/interfaces/RotationSettings.md b/src/content/docs/3.4.2/api/interfaces/RotationSettings.md
new file mode 100644
index 0000000..31ed501
--- /dev/null
+++ b/src/content/docs/3.4.2/api/interfaces/RotationSettings.md
@@ -0,0 +1,17 @@
+---
+editUrl: false
+next: false
+prev: false
+title: RotationSettings
+slug: 3.4.2/apiinterfaces/rotationsettings
+---
+
+## Properties
+
+### rotationHz?
+
+> `optional` **rotationHz**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:65](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L65)
diff --git a/src/content/docs/3.4.2/api/interfaces/RoutePlanner.md b/src/content/docs/3.4.2/api/interfaces/RoutePlanner.md
new file mode 100644
index 0000000..36c8062
--- /dev/null
+++ b/src/content/docs/3.4.2/api/interfaces/RoutePlanner.md
@@ -0,0 +1,93 @@
+---
+editUrl: false
+next: false
+prev: false
+title: RoutePlanner
+slug: 3.4.2/apiinterfaces/routeplanner
+---
+
+## Properties
+
+### blockIndex?
+
+> `optional` **blockIndex**: `string`
+
+#### Defined in
+
+[src/node/Rest.ts:60](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/node/Rest.ts#L60)
+
+***
+
+### class?
+
+> `optional` **class**: `string`
+
+#### Defined in
+
+[src/node/Rest.ts:49](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/node/Rest.ts#L49)
+
+***
+
+### currentAddress?
+
+> `optional` **currentAddress**: `string`
+
+#### Defined in
+
+[src/node/Rest.ts:59](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/node/Rest.ts#L59)
+
+***
+
+### currentAddressIndex?
+
+> `optional` **currentAddressIndex**: `string`
+
+#### Defined in
+
+[src/node/Rest.ts:61](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/node/Rest.ts#L61)
+
+***
+
+### details?
+
+> `optional` **details**: `object`
+
+#### failingAddresses
+
+> **failingAddresses**: [`Address`](/3.4.2/api/interfaces/address/)\[]
+
+#### ipBlock
+
+> **ipBlock**: `object`
+
+#### ipBlock.size
+
+> **size**: `string`
+
+#### ipBlock.type
+
+> **type**: `string`
+
+#### Defined in
+
+[src/node/Rest.ts:50](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/node/Rest.ts#L50)
+
+***
+
+### ipIndex?
+
+> `optional` **ipIndex**: `string`
+
+#### Defined in
+
+[src/node/Rest.ts:58](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/node/Rest.ts#L58)
+
+***
+
+### rotateIndex?
+
+> `optional` **rotateIndex**: `string`
+
+#### Defined in
+
+[src/node/Rest.ts:57](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/node/Rest.ts#L57)
diff --git a/src/content/docs/3.4.2/api/interfaces/ServerUpdate.md b/src/content/docs/3.4.2/api/interfaces/ServerUpdate.md
new file mode 100644
index 0000000..1d13377
--- /dev/null
+++ b/src/content/docs/3.4.2/api/interfaces/ServerUpdate.md
@@ -0,0 +1,39 @@
+---
+editUrl: false
+next: false
+prev: false
+title: ServerUpdate
+slug: 3.4.2/apiinterfaces/serverupdate
+---
+
+Represents the payload from a serverUpdate event
+
+## Properties
+
+### endpoint
+
+> **endpoint**: `string`
+
+#### Defined in
+
+[src/guild/Connection.ts:22](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Connection.ts#L22)
+
+***
+
+### guild\_id
+
+> **guild\_id**: `string`
+
+#### Defined in
+
+[src/guild/Connection.ts:21](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Connection.ts#L21)
+
+***
+
+### token
+
+> **token**: `string`
+
+#### Defined in
+
+[src/guild/Connection.ts:20](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Connection.ts#L20)
diff --git a/src/content/docs/3.4.2/api/interfaces/ShoukakuOptions.md b/src/content/docs/3.4.2/api/interfaces/ShoukakuOptions.md
new file mode 100644
index 0000000..b76ae53
--- /dev/null
+++ b/src/content/docs/3.4.2/api/interfaces/ShoukakuOptions.md
@@ -0,0 +1,139 @@
+---
+editUrl: false
+next: false
+prev: false
+title: ShoukakuOptions
+slug: 3.4.2/apiinterfaces/shoukakuoptions
+---
+
+## Properties
+
+### alwaysSendResumeKey?
+
+> `optional` **alwaysSendResumeKey**: `boolean`
+
+Disables the first time initialization tracking of nodes, and just sends the resume key always (Note: Useful for people who save their players to redis and wants to resume sessions even at first boot)
+
+#### Defined in
+
+[src/Shoukaku.ts:63](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L63)
+
+***
+
+### moveOnDisconnect?
+
+> `optional` **moveOnDisconnect**: `boolean`
+
+Whether to move players to a different Lavalink node when a node disconnects
+
+#### Defined in
+
+[src/Shoukaku.ts:79](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L79)
+
+***
+
+### reconnectInterval?
+
+> `optional` **reconnectInterval**: `number`
+
+Timeout before trying to reconnect
+
+#### Defined in
+
+[src/Shoukaku.ts:71](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L71)
+
+***
+
+### reconnectTries?
+
+> `optional` **reconnectTries**: `number`
+
+Number of times to try and reconnect to Lavalink before giving up
+
+#### Defined in
+
+[src/Shoukaku.ts:67](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L67)
+
+***
+
+### restTimeout?
+
+> `optional` **restTimeout**: `number`
+
+Time to wait for a response from the Lavalink REST API before giving up
+
+#### Defined in
+
+[src/Shoukaku.ts:75](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L75)
+
+***
+
+### resume?
+
+> `optional` **resume**: `boolean`
+
+Whether to resume a connection on disconnect to Lavalink (Server Side) (Note: DOES NOT RESUME WHEN THE LAVALINK SERVER DIES)
+
+#### Defined in
+
+[src/Shoukaku.ts:47](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L47)
+
+***
+
+### resumeByLibrary?
+
+> `optional` **resumeByLibrary**: `boolean`
+
+Whether to resume the players by doing it in the library side (Client Side) (Note: TRIES TO RESUME REGARDLESS OF WHAT HAPPENED ON A LAVALINK SERVER)
+
+#### Defined in
+
+[src/Shoukaku.ts:59](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L59)
+
+***
+
+### resumeKey?
+
+> `optional` **resumeKey**: `string`
+
+Resume key for Lavalink
+
+#### Defined in
+
+[src/Shoukaku.ts:51](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L51)
+
+***
+
+### resumeTimeout?
+
+> `optional` **resumeTimeout**: `number`
+
+Time to wait before lavalink starts to destroy the players of the disconnected client
+
+#### Defined in
+
+[src/Shoukaku.ts:55](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L55)
+
+***
+
+### structures?
+
+> `optional` **structures**: [`Structures`](/3.4.2/api/interfaces/structures/)
+
+Custom structures for shoukaku to use
+
+#### Defined in
+
+[src/Shoukaku.ts:87](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L87)
+
+***
+
+### userAgent?
+
+> `optional` **userAgent**: `string`
+
+User Agent to use when making requests to Lavalink
+
+#### Defined in
+
+[src/Shoukaku.ts:83](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L83)
diff --git a/src/content/docs/3.4.2/api/interfaces/StateUpdatePartial.md b/src/content/docs/3.4.2/api/interfaces/StateUpdatePartial.md
new file mode 100644
index 0000000..6e5c1bd
--- /dev/null
+++ b/src/content/docs/3.4.2/api/interfaces/StateUpdatePartial.md
@@ -0,0 +1,49 @@
+---
+editUrl: false
+next: false
+prev: false
+title: StateUpdatePartial
+slug: 3.4.2/apiinterfaces/stateupdatepartial
+---
+
+Represents the partial payload from a stateUpdate event
+
+## Properties
+
+### channel\_id?
+
+> `optional` **channel\_id**: `string`
+
+#### Defined in
+
+[src/guild/Connection.ts:10](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Connection.ts#L10)
+
+***
+
+### self\_deaf
+
+> **self\_deaf**: `boolean`
+
+#### Defined in
+
+[src/guild/Connection.ts:12](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Connection.ts#L12)
+
+***
+
+### self\_mute
+
+> **self\_mute**: `boolean`
+
+#### Defined in
+
+[src/guild/Connection.ts:13](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Connection.ts#L13)
+
+***
+
+### session\_id?
+
+> `optional` **session\_id**: `string`
+
+#### Defined in
+
+[src/guild/Connection.ts:11](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Connection.ts#L11)
diff --git a/src/content/docs/3.4.2/api/interfaces/Structures.md b/src/content/docs/3.4.2/api/interfaces/Structures.md
new file mode 100644
index 0000000..74721eb
--- /dev/null
+++ b/src/content/docs/3.4.2/api/interfaces/Structures.md
@@ -0,0 +1,31 @@
+---
+editUrl: false
+next: false
+prev: false
+title: Structures
+slug: 3.4.2/apiinterfaces/structures
+---
+
+## Properties
+
+### player?
+
+> `optional` **player**: [`Constructor`](/3.4.2/api/namespaces/utils/type-aliases/constructor/)\<[`Player`](/3.4.2/api/classes/player/)>
+
+A custom structure that extends the Player class
+
+#### Defined in
+
+[src/Shoukaku.ts:17](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L17)
+
+***
+
+### rest?
+
+> `optional` **rest**: [`Constructor`](/3.4.2/api/namespaces/utils/type-aliases/constructor/)\<[`Rest`](/3.4.2/api/classes/rest/)>
+
+A custom structure that extends the Rest class
+
+#### Defined in
+
+[src/Shoukaku.ts:13](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Shoukaku.ts#L13)
diff --git a/src/content/docs/3.4.2/api/interfaces/TimescaleSettings.md b/src/content/docs/3.4.2/api/interfaces/TimescaleSettings.md
new file mode 100644
index 0000000..823138d
--- /dev/null
+++ b/src/content/docs/3.4.2/api/interfaces/TimescaleSettings.md
@@ -0,0 +1,37 @@
+---
+editUrl: false
+next: false
+prev: false
+title: TimescaleSettings
+slug: 3.4.2/apiinterfaces/timescalesettings
+---
+
+## Properties
+
+### pitch?
+
+> `optional` **pitch**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:55](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L55)
+
+***
+
+### rate?
+
+> `optional` **rate**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:56](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L56)
+
+***
+
+### speed?
+
+> `optional` **speed**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:54](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L54)
diff --git a/src/content/docs/3.4.2/api/interfaces/Track.md b/src/content/docs/3.4.2/api/interfaces/Track.md
new file mode 100644
index 0000000..444a1be
--- /dev/null
+++ b/src/content/docs/3.4.2/api/interfaces/Track.md
@@ -0,0 +1,63 @@
+---
+editUrl: false
+next: false
+prev: false
+title: Track
+slug: 3.4.2/apiinterfaces/track
+---
+
+## Properties
+
+### info
+
+> **info**: `object`
+
+#### author
+
+> **author**: `string`
+
+#### identifier
+
+> **identifier**: `string`
+
+#### isSeekable
+
+> **isSeekable**: `boolean`
+
+#### isStream
+
+> **isStream**: `boolean`
+
+#### length
+
+> **length**: `number`
+
+#### position
+
+> **position**: `number`
+
+#### sourceName
+
+> **sourceName**: `string`
+
+#### title
+
+> **title**: `string`
+
+#### uri
+
+> **uri**: `string`
+
+#### Defined in
+
+[src/node/Rest.ts:20](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/node/Rest.ts#L20)
+
+***
+
+### track
+
+> **track**: `string`
+
+#### Defined in
+
+[src/node/Rest.ts:19](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/node/Rest.ts#L19)
diff --git a/src/content/docs/3.4.2/api/interfaces/TrackEndEvent.md b/src/content/docs/3.4.2/api/interfaces/TrackEndEvent.md
new file mode 100644
index 0000000..e85aaa2
--- /dev/null
+++ b/src/content/docs/3.4.2/api/interfaces/TrackEndEvent.md
@@ -0,0 +1,73 @@
+---
+editUrl: false
+next: false
+prev: false
+title: TrackEndEvent
+slug: 3.4.2/apiinterfaces/trackendevent
+---
+
+## Extends
+
+* [`PlayerEvent`](/3.4.2/api/interfaces/playerevent/)
+
+## Properties
+
+### guildId
+
+> **guildId**: `string`
+
+#### Inherited from
+
+[`PlayerEvent`](/3.4.2/api/interfaces/playerevent/).[`guildId`](/3.4.2/api/interfaces/playerevent/#guildid)
+
+#### Defined in
+
+[src/guild/Player.ts:93](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L93)
+
+***
+
+### op
+
+> **op**: [`EVENT`](/3.4.2/api/namespaces/constants/enumerations/opcodes/#event)
+
+#### Inherited from
+
+[`PlayerEvent`](/3.4.2/api/interfaces/playerevent/).[`op`](/3.4.2/api/interfaces/playerevent/#op)
+
+#### Defined in
+
+[src/guild/Player.ts:91](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L91)
+
+***
+
+### reason
+
+> **reason**: [`TrackEndReason`](/3.4.2/api/type-aliases/trackendreason/)
+
+#### Defined in
+
+[src/guild/Player.ts:110](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L110)
+
+***
+
+### track
+
+> **track**: `string`
+
+#### Defined in
+
+[src/guild/Player.ts:109](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L109)
+
+***
+
+### type
+
+> **type**: `"TrackEndEvent"`
+
+#### Overrides
+
+[`PlayerEvent`](/3.4.2/api/interfaces/playerevent/).[`type`](/3.4.2/api/interfaces/playerevent/#type)
+
+#### Defined in
+
+[src/guild/Player.ts:108](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L108)
diff --git a/src/content/docs/3.4.2/api/interfaces/TrackExceptionEvent.md b/src/content/docs/3.4.2/api/interfaces/TrackExceptionEvent.md
new file mode 100644
index 0000000..d3c90b9
--- /dev/null
+++ b/src/content/docs/3.4.2/api/interfaces/TrackExceptionEvent.md
@@ -0,0 +1,73 @@
+---
+editUrl: false
+next: false
+prev: false
+title: TrackExceptionEvent
+slug: 3.4.2/apiinterfaces/trackexceptionevent
+---
+
+## Extends
+
+* [`PlayerEvent`](/3.4.2/api/interfaces/playerevent/)
+
+## Properties
+
+### error
+
+> **error**: `string`
+
+#### Defined in
+
+[src/guild/Player.ts:122](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L122)
+
+***
+
+### exception?
+
+> `optional` **exception**: [`Exception`](/3.4.2/api/interfaces/exception/)
+
+#### Defined in
+
+[src/guild/Player.ts:121](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L121)
+
+***
+
+### guildId
+
+> **guildId**: `string`
+
+#### Inherited from
+
+[`PlayerEvent`](/3.4.2/api/interfaces/playerevent/).[`guildId`](/3.4.2/api/interfaces/playerevent/#guildid)
+
+#### Defined in
+
+[src/guild/Player.ts:93](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L93)
+
+***
+
+### op
+
+> **op**: [`EVENT`](/3.4.2/api/namespaces/constants/enumerations/opcodes/#event)
+
+#### Inherited from
+
+[`PlayerEvent`](/3.4.2/api/interfaces/playerevent/).[`op`](/3.4.2/api/interfaces/playerevent/#op)
+
+#### Defined in
+
+[src/guild/Player.ts:91](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L91)
+
+***
+
+### type
+
+> **type**: `"TrackExceptionEvent"`
+
+#### Overrides
+
+[`PlayerEvent`](/3.4.2/api/interfaces/playerevent/).[`type`](/3.4.2/api/interfaces/playerevent/#type)
+
+#### Defined in
+
+[src/guild/Player.ts:120](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L120)
diff --git a/src/content/docs/3.4.2/api/interfaces/TrackStartEvent.md b/src/content/docs/3.4.2/api/interfaces/TrackStartEvent.md
new file mode 100644
index 0000000..8a805df
--- /dev/null
+++ b/src/content/docs/3.4.2/api/interfaces/TrackStartEvent.md
@@ -0,0 +1,63 @@
+---
+editUrl: false
+next: false
+prev: false
+title: TrackStartEvent
+slug: 3.4.2/apiinterfaces/trackstartevent
+---
+
+## Extends
+
+* [`PlayerEvent`](/3.4.2/api/interfaces/playerevent/)
+
+## Properties
+
+### guildId
+
+> **guildId**: `string`
+
+#### Inherited from
+
+[`PlayerEvent`](/3.4.2/api/interfaces/playerevent/).[`guildId`](/3.4.2/api/interfaces/playerevent/#guildid)
+
+#### Defined in
+
+[src/guild/Player.ts:93](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L93)
+
+***
+
+### op
+
+> **op**: [`EVENT`](/3.4.2/api/namespaces/constants/enumerations/opcodes/#event)
+
+#### Inherited from
+
+[`PlayerEvent`](/3.4.2/api/interfaces/playerevent/).[`op`](/3.4.2/api/interfaces/playerevent/#op)
+
+#### Defined in
+
+[src/guild/Player.ts:91](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L91)
+
+***
+
+### track
+
+> **track**: `string`
+
+#### Defined in
+
+[src/guild/Player.ts:104](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L104)
+
+***
+
+### type
+
+> **type**: `"TrackStartEvent"`
+
+#### Overrides
+
+[`PlayerEvent`](/3.4.2/api/interfaces/playerevent/).[`type`](/3.4.2/api/interfaces/playerevent/#type)
+
+#### Defined in
+
+[src/guild/Player.ts:103](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L103)
diff --git a/src/content/docs/3.4.2/api/interfaces/TrackStuckEvent.md b/src/content/docs/3.4.2/api/interfaces/TrackStuckEvent.md
new file mode 100644
index 0000000..a750e16
--- /dev/null
+++ b/src/content/docs/3.4.2/api/interfaces/TrackStuckEvent.md
@@ -0,0 +1,73 @@
+---
+editUrl: false
+next: false
+prev: false
+title: TrackStuckEvent
+slug: 3.4.2/apiinterfaces/trackstuckevent
+---
+
+## Extends
+
+* [`PlayerEvent`](/3.4.2/api/interfaces/playerevent/)
+
+## Properties
+
+### guildId
+
+> **guildId**: `string`
+
+#### Inherited from
+
+[`PlayerEvent`](/3.4.2/api/interfaces/playerevent/).[`guildId`](/3.4.2/api/interfaces/playerevent/#guildid)
+
+#### Defined in
+
+[src/guild/Player.ts:93](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L93)
+
+***
+
+### op
+
+> **op**: [`EVENT`](/3.4.2/api/namespaces/constants/enumerations/opcodes/#event)
+
+#### Inherited from
+
+[`PlayerEvent`](/3.4.2/api/interfaces/playerevent/).[`op`](/3.4.2/api/interfaces/playerevent/#op)
+
+#### Defined in
+
+[src/guild/Player.ts:91](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L91)
+
+***
+
+### thresholdMs
+
+> **thresholdMs**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:116](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L116)
+
+***
+
+### track
+
+> **track**: `string`
+
+#### Defined in
+
+[src/guild/Player.ts:115](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L115)
+
+***
+
+### type
+
+> **type**: `"TrackStuckEvent"`
+
+#### Inherited from
+
+[`PlayerEvent`](/3.4.2/api/interfaces/playerevent/).[`type`](/3.4.2/api/interfaces/playerevent/#type)
+
+#### Defined in
+
+[src/guild/Player.ts:114](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L114)
diff --git a/src/content/docs/3.4.2/api/interfaces/VoiceChannelOptions.md b/src/content/docs/3.4.2/api/interfaces/VoiceChannelOptions.md
new file mode 100644
index 0000000..271d469
--- /dev/null
+++ b/src/content/docs/3.4.2/api/interfaces/VoiceChannelOptions.md
@@ -0,0 +1,57 @@
+---
+editUrl: false
+next: false
+prev: false
+title: VoiceChannelOptions
+slug: 3.4.2/apiinterfaces/voicechanneloptions
+---
+
+## Properties
+
+### channelId
+
+> **channelId**: `string`
+
+#### Defined in
+
+[src/node/Node.ts:13](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/node/Node.ts#L13)
+
+***
+
+### deaf?
+
+> `optional` **deaf**: `boolean`
+
+#### Defined in
+
+[src/node/Node.ts:14](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/node/Node.ts#L14)
+
+***
+
+### guildId
+
+> **guildId**: `string`
+
+#### Defined in
+
+[src/node/Node.ts:11](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/node/Node.ts#L11)
+
+***
+
+### mute?
+
+> `optional` **mute**: `boolean`
+
+#### Defined in
+
+[src/node/Node.ts:15](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/node/Node.ts#L15)
+
+***
+
+### shardId
+
+> **shardId**: `number`
+
+#### Defined in
+
+[src/node/Node.ts:12](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/node/Node.ts#L12)
diff --git a/src/content/docs/3.4.2/api/interfaces/WebSocketClosedEvent.md b/src/content/docs/3.4.2/api/interfaces/WebSocketClosedEvent.md
new file mode 100644
index 0000000..4e93329
--- /dev/null
+++ b/src/content/docs/3.4.2/api/interfaces/WebSocketClosedEvent.md
@@ -0,0 +1,83 @@
+---
+editUrl: false
+next: false
+prev: false
+title: WebSocketClosedEvent
+slug: 3.4.2/apiinterfaces/websocketclosedevent
+---
+
+## Extends
+
+* [`PlayerEvent`](/3.4.2/api/interfaces/playerevent/)
+
+## Properties
+
+### byRemote
+
+> **byRemote**: `boolean`
+
+#### Defined in
+
+[src/guild/Player.ts:133](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L133)
+
+***
+
+### code
+
+> **code**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:132](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L132)
+
+***
+
+### guildId
+
+> **guildId**: `string`
+
+#### Inherited from
+
+[`PlayerEvent`](/3.4.2/api/interfaces/playerevent/).[`guildId`](/3.4.2/api/interfaces/playerevent/#guildid)
+
+#### Defined in
+
+[src/guild/Player.ts:93](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L93)
+
+***
+
+### op
+
+> **op**: [`EVENT`](/3.4.2/api/namespaces/constants/enumerations/opcodes/#event)
+
+#### Inherited from
+
+[`PlayerEvent`](/3.4.2/api/interfaces/playerevent/).[`op`](/3.4.2/api/interfaces/playerevent/#op)
+
+#### Defined in
+
+[src/guild/Player.ts:91](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L91)
+
+***
+
+### reason
+
+> **reason**: `string`
+
+#### Defined in
+
+[src/guild/Player.ts:134](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L134)
+
+***
+
+### type
+
+> **type**: `"WebSocketClosedEvent"`
+
+#### Overrides
+
+[`PlayerEvent`](/3.4.2/api/interfaces/playerevent/).[`type`](/3.4.2/api/interfaces/playerevent/#type)
+
+#### Defined in
+
+[src/guild/Player.ts:131](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L131)
diff --git a/src/content/docs/3.4.2/api/namespaces/Connectors/classes/DiscordJS.md b/src/content/docs/3.4.2/api/namespaces/Connectors/classes/DiscordJS.md
new file mode 100644
index 0000000..9ceb9a8
--- /dev/null
+++ b/src/content/docs/3.4.2/api/namespaces/Connectors/classes/DiscordJS.md
@@ -0,0 +1,121 @@
+---
+editUrl: false
+next: false
+prev: false
+title: DiscordJS
+slug: 3.4.2/apinamespacesconnectorsclasses/discordjs
+---
+
+## Extends
+
+* [`Connector`](/3.4.2/api/classes/connector/)
+
+## Constructors
+
+### new DiscordJS()
+
+> **new DiscordJS**(`client`): [`DiscordJS`](/3.4.2/api/namespaces/connectors/classes/discordjs/)
+
+#### Parameters
+
+β’ **client**: `any`
+
+#### Returns
+
+[`DiscordJS`](/3.4.2/api/namespaces/connectors/classes/discordjs/)
+
+#### Inherited from
+
+[`Connector`](/3.4.2/api/classes/connector/).[`constructor`](/3.4.2/api/classes/connector/#constructors)
+
+#### Defined in
+
+[src/connectors/Connector.ts:13](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/connectors/Connector.ts#L13)
+
+## Methods
+
+### getId()
+
+> **getId**(): `string`
+
+#### Returns
+
+`string`
+
+#### Overrides
+
+[`Connector`](/3.4.2/api/classes/connector/).[`getId`](/3.4.2/api/classes/connector/#getid)
+
+#### Defined in
+
+[src/connectors/libs/DiscordJS.ts:10](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/connectors/libs/DiscordJS.ts#L10)
+
+***
+
+### listen()
+
+> **listen**(`nodes`): `void`
+
+#### Parameters
+
+β’ **nodes**: [`NodeOption`](/3.4.2/api/interfaces/nodeoption/)\[]
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[`Connector`](/3.4.2/api/classes/connector/).[`listen`](/3.4.2/api/classes/connector/#listen)
+
+#### Defined in
+
+[src/connectors/libs/DiscordJS.ts:14](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/connectors/libs/DiscordJS.ts#L14)
+
+***
+
+### sendPacket()
+
+> **sendPacket**(`shardId`, `payload`, `important`): `void`
+
+#### Parameters
+
+β’ **shardId**: `number`
+
+β’ **payload**: `any`
+
+β’ **important**: `boolean`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[`Connector`](/3.4.2/api/classes/connector/).[`sendPacket`](/3.4.2/api/classes/connector/#sendpacket)
+
+#### Defined in
+
+[src/connectors/libs/DiscordJS.ts:6](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/connectors/libs/DiscordJS.ts#L6)
+
+***
+
+### set()
+
+> **set**(`manager`): [`Connector`](/3.4.2/api/classes/connector/)
+
+#### Parameters
+
+β’ **manager**: [`Shoukaku`](/3.4.2/api/classes/shoukaku/)
+
+#### Returns
+
+[`Connector`](/3.4.2/api/classes/connector/)
+
+#### Inherited from
+
+[`Connector`](/3.4.2/api/classes/connector/).[`set`](/3.4.2/api/classes/connector/#set)
+
+#### Defined in
+
+[src/connectors/Connector.ts:18](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/connectors/Connector.ts#L18)
diff --git a/src/content/docs/3.4.2/api/namespaces/Connectors/classes/Eris.md b/src/content/docs/3.4.2/api/namespaces/Connectors/classes/Eris.md
new file mode 100644
index 0000000..40032a7
--- /dev/null
+++ b/src/content/docs/3.4.2/api/namespaces/Connectors/classes/Eris.md
@@ -0,0 +1,121 @@
+---
+editUrl: false
+next: false
+prev: false
+title: Eris
+slug: 3.4.2/apinamespacesconnectorsclasses/eris
+---
+
+## Extends
+
+* [`Connector`](/3.4.2/api/classes/connector/)
+
+## Constructors
+
+### new Eris()
+
+> **new Eris**(`client`): [`Eris`](/3.4.2/api/namespaces/connectors/classes/eris/)
+
+#### Parameters
+
+β’ **client**: `any`
+
+#### Returns
+
+[`Eris`](/3.4.2/api/namespaces/connectors/classes/eris/)
+
+#### Inherited from
+
+[`Connector`](/3.4.2/api/classes/connector/).[`constructor`](/3.4.2/api/classes/connector/#constructors)
+
+#### Defined in
+
+[src/connectors/Connector.ts:13](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/connectors/Connector.ts#L13)
+
+## Methods
+
+### getId()
+
+> **getId**(): `string`
+
+#### Returns
+
+`string`
+
+#### Overrides
+
+[`Connector`](/3.4.2/api/classes/connector/).[`getId`](/3.4.2/api/classes/connector/#getid)
+
+#### Defined in
+
+[src/connectors/libs/Eris.ts:10](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/connectors/libs/Eris.ts#L10)
+
+***
+
+### listen()
+
+> **listen**(`nodes`): `void`
+
+#### Parameters
+
+β’ **nodes**: [`NodeOption`](/3.4.2/api/interfaces/nodeoption/)\[]
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[`Connector`](/3.4.2/api/classes/connector/).[`listen`](/3.4.2/api/classes/connector/#listen)
+
+#### Defined in
+
+[src/connectors/libs/Eris.ts:14](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/connectors/libs/Eris.ts#L14)
+
+***
+
+### sendPacket()
+
+> **sendPacket**(`shardId`, `payload`, `important`): `void`
+
+#### Parameters
+
+β’ **shardId**: `number`
+
+β’ **payload**: `any`
+
+β’ **important**: `boolean`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[`Connector`](/3.4.2/api/classes/connector/).[`sendPacket`](/3.4.2/api/classes/connector/#sendpacket)
+
+#### Defined in
+
+[src/connectors/libs/Eris.ts:6](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/connectors/libs/Eris.ts#L6)
+
+***
+
+### set()
+
+> **set**(`manager`): [`Connector`](/3.4.2/api/classes/connector/)
+
+#### Parameters
+
+β’ **manager**: [`Shoukaku`](/3.4.2/api/classes/shoukaku/)
+
+#### Returns
+
+[`Connector`](/3.4.2/api/classes/connector/)
+
+#### Inherited from
+
+[`Connector`](/3.4.2/api/classes/connector/).[`set`](/3.4.2/api/classes/connector/#set)
+
+#### Defined in
+
+[src/connectors/Connector.ts:18](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/connectors/Connector.ts#L18)
diff --git a/src/content/docs/3.4.2/api/namespaces/Connectors/classes/OceanicJS.md b/src/content/docs/3.4.2/api/namespaces/Connectors/classes/OceanicJS.md
new file mode 100644
index 0000000..737ab1f
--- /dev/null
+++ b/src/content/docs/3.4.2/api/namespaces/Connectors/classes/OceanicJS.md
@@ -0,0 +1,121 @@
+---
+editUrl: false
+next: false
+prev: false
+title: OceanicJS
+slug: 3.4.2/apinamespacesconnectorsclasses/oceanicjs
+---
+
+## Extends
+
+* [`Connector`](/3.4.2/api/classes/connector/)
+
+## Constructors
+
+### new OceanicJS()
+
+> **new OceanicJS**(`client`): [`OceanicJS`](/3.4.2/api/namespaces/connectors/classes/oceanicjs/)
+
+#### Parameters
+
+β’ **client**: `any`
+
+#### Returns
+
+[`OceanicJS`](/3.4.2/api/namespaces/connectors/classes/oceanicjs/)
+
+#### Inherited from
+
+[`Connector`](/3.4.2/api/classes/connector/).[`constructor`](/3.4.2/api/classes/connector/#constructors)
+
+#### Defined in
+
+[src/connectors/Connector.ts:13](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/connectors/Connector.ts#L13)
+
+## Methods
+
+### getId()
+
+> **getId**(): `string`
+
+#### Returns
+
+`string`
+
+#### Overrides
+
+[`Connector`](/3.4.2/api/classes/connector/).[`getId`](/3.4.2/api/classes/connector/#getid)
+
+#### Defined in
+
+[src/connectors/libs/OceanicJS.ts:10](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/connectors/libs/OceanicJS.ts#L10)
+
+***
+
+### listen()
+
+> **listen**(`nodes`): `void`
+
+#### Parameters
+
+β’ **nodes**: [`NodeOption`](/3.4.2/api/interfaces/nodeoption/)\[]
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[`Connector`](/3.4.2/api/classes/connector/).[`listen`](/3.4.2/api/classes/connector/#listen)
+
+#### Defined in
+
+[src/connectors/libs/OceanicJS.ts:14](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/connectors/libs/OceanicJS.ts#L14)
+
+***
+
+### sendPacket()
+
+> **sendPacket**(`shardId`, `payload`, `important`): `void`
+
+#### Parameters
+
+β’ **shardId**: `number`
+
+β’ **payload**: `any`
+
+β’ **important**: `boolean`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[`Connector`](/3.4.2/api/classes/connector/).[`sendPacket`](/3.4.2/api/classes/connector/#sendpacket)
+
+#### Defined in
+
+[src/connectors/libs/OceanicJS.ts:6](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/connectors/libs/OceanicJS.ts#L6)
+
+***
+
+### set()
+
+> **set**(`manager`): [`Connector`](/3.4.2/api/classes/connector/)
+
+#### Parameters
+
+β’ **manager**: [`Shoukaku`](/3.4.2/api/classes/shoukaku/)
+
+#### Returns
+
+[`Connector`](/3.4.2/api/classes/connector/)
+
+#### Inherited from
+
+[`Connector`](/3.4.2/api/classes/connector/).[`set`](/3.4.2/api/classes/connector/#set)
+
+#### Defined in
+
+[src/connectors/Connector.ts:18](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/connectors/Connector.ts#L18)
diff --git a/src/content/docs/3.4.2/api/namespaces/Constants/enumerations/OPCodes.md b/src/content/docs/3.4.2/api/namespaces/Constants/enumerations/OPCodes.md
new file mode 100644
index 0000000..47dd610
--- /dev/null
+++ b/src/content/docs/3.4.2/api/namespaces/Constants/enumerations/OPCodes.md
@@ -0,0 +1,127 @@
+---
+editUrl: false
+next: false
+prev: false
+title: OPCodes
+slug: 3.4.2/apinamespacesconstantsenumerations/opcodes
+---
+
+## Enumeration Members
+
+### CONFIGURE\_RESUMING
+
+> **CONFIGURE\_RESUMING**: `"configureResuming"`
+
+#### Defined in
+
+[src/Constants.ts:29](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Constants.ts#L29)
+
+***
+
+### DESTROY
+
+> **DESTROY**: `"destroy"`
+
+#### Defined in
+
+[src/Constants.ts:26](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Constants.ts#L26)
+
+***
+
+### EVENT
+
+> **EVENT**: `"event"`
+
+#### Defined in
+
+[src/Constants.ts:31](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Constants.ts#L31)
+
+***
+
+### FILTERS
+
+> **FILTERS**: `"filters"`
+
+#### Defined in
+
+[src/Constants.ts:25](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Constants.ts#L25)
+
+***
+
+### PAUSE
+
+> **PAUSE**: `"pause"`
+
+#### Defined in
+
+[src/Constants.ts:22](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Constants.ts#L22)
+
+***
+
+### PLAY
+
+> **PLAY**: `"play"`
+
+#### Defined in
+
+[src/Constants.ts:20](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Constants.ts#L20)
+
+***
+
+### PLAYER\_UPDATE
+
+> **PLAYER\_UPDATE**: `"playerUpdate"`
+
+#### Defined in
+
+[src/Constants.ts:28](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Constants.ts#L28)
+
+***
+
+### SEEK
+
+> **SEEK**: `"seek"`
+
+#### Defined in
+
+[src/Constants.ts:23](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Constants.ts#L23)
+
+***
+
+### STATS
+
+> **STATS**: `"stats"`
+
+#### Defined in
+
+[src/Constants.ts:30](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Constants.ts#L30)
+
+***
+
+### STOP
+
+> **STOP**: `"stop"`
+
+#### Defined in
+
+[src/Constants.ts:21](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Constants.ts#L21)
+
+***
+
+### VOICE\_UPDATE
+
+> **VOICE\_UPDATE**: `"voiceUpdate"`
+
+#### Defined in
+
+[src/Constants.ts:19](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Constants.ts#L19)
+
+***
+
+### VOLUME
+
+> **VOLUME**: `"volume"`
+
+#### Defined in
+
+[src/Constants.ts:24](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Constants.ts#L24)
diff --git a/src/content/docs/3.4.2/api/namespaces/Constants/enumerations/State.md b/src/content/docs/3.4.2/api/namespaces/Constants/enumerations/State.md
new file mode 100644
index 0000000..6466417
--- /dev/null
+++ b/src/content/docs/3.4.2/api/namespaces/Constants/enumerations/State.md
@@ -0,0 +1,47 @@
+---
+editUrl: false
+next: false
+prev: false
+title: State
+slug: 3.4.2/apinamespacesconstantsenumerations/state
+---
+
+## Enumeration Members
+
+### CONNECTED
+
+> **CONNECTED**: `1`
+
+#### Defined in
+
+[src/Constants.ts:6](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Constants.ts#L6)
+
+***
+
+### CONNECTING
+
+> **CONNECTING**: `0`
+
+#### Defined in
+
+[src/Constants.ts:5](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Constants.ts#L5)
+
+***
+
+### DISCONNECTED
+
+> **DISCONNECTED**: `3`
+
+#### Defined in
+
+[src/Constants.ts:8](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Constants.ts#L8)
+
+***
+
+### DISCONNECTING
+
+> **DISCONNECTING**: `2`
+
+#### Defined in
+
+[src/Constants.ts:7](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Constants.ts#L7)
diff --git a/src/content/docs/3.4.2/api/namespaces/Constants/enumerations/VoiceState.md b/src/content/docs/3.4.2/api/namespaces/Constants/enumerations/VoiceState.md
new file mode 100644
index 0000000..a730b41
--- /dev/null
+++ b/src/content/docs/3.4.2/api/namespaces/Constants/enumerations/VoiceState.md
@@ -0,0 +1,37 @@
+---
+editUrl: false
+next: false
+prev: false
+title: VoiceState
+slug: 3.4.2/apinamespacesconstantsenumerations/voicestate
+---
+
+## Enumeration Members
+
+### SESSION\_ENDPOINT\_MISSING
+
+> **SESSION\_ENDPOINT\_MISSING**: `2`
+
+#### Defined in
+
+[src/Constants.ts:14](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Constants.ts#L14)
+
+***
+
+### SESSION\_ID\_MISSING
+
+> **SESSION\_ID\_MISSING**: `1`
+
+#### Defined in
+
+[src/Constants.ts:13](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Constants.ts#L13)
+
+***
+
+### SESSION\_READY
+
+> **SESSION\_READY**: `0`
+
+#### Defined in
+
+[src/Constants.ts:12](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Constants.ts#L12)
diff --git a/src/content/docs/3.4.2/api/namespaces/Constants/variables/NodeDefaults.md b/src/content/docs/3.4.2/api/namespaces/Constants/variables/NodeDefaults.md
new file mode 100644
index 0000000..d3ce435
--- /dev/null
+++ b/src/content/docs/3.4.2/api/namespaces/Constants/variables/NodeDefaults.md
@@ -0,0 +1,13 @@
+---
+editUrl: false
+next: false
+prev: false
+title: NodeDefaults
+slug: 3.4.2/apinamespacesconstantsvariables/nodedefaults
+---
+
+> `const` **NodeDefaults**: [`NodeOption`](/3.4.2/api/interfaces/nodeoption/)
+
+## Defined in
+
+[src/Constants.ts:48](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Constants.ts#L48)
diff --git a/src/content/docs/3.4.2/api/namespaces/Constants/variables/ShoukakuDefaults.md b/src/content/docs/3.4.2/api/namespaces/Constants/variables/ShoukakuDefaults.md
new file mode 100644
index 0000000..793df30
--- /dev/null
+++ b/src/content/docs/3.4.2/api/namespaces/Constants/variables/ShoukakuDefaults.md
@@ -0,0 +1,13 @@
+---
+editUrl: false
+next: false
+prev: false
+title: ShoukakuDefaults
+slug: 3.4.2/apinamespacesconstantsvariables/shoukakudefaults
+---
+
+> `const` **ShoukakuDefaults**: [`ShoukakuOptions`](/3.4.2/api/interfaces/shoukakuoptions/)
+
+## Defined in
+
+[src/Constants.ts:34](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Constants.ts#L34)
diff --git a/src/content/docs/3.4.2/api/namespaces/Utils/functions/mergeDefault.md b/src/content/docs/3.4.2/api/namespaces/Utils/functions/mergeDefault.md
new file mode 100644
index 0000000..6c101e3
--- /dev/null
+++ b/src/content/docs/3.4.2/api/namespaces/Utils/functions/mergeDefault.md
@@ -0,0 +1,35 @@
+---
+editUrl: false
+next: false
+prev: false
+title: mergeDefault
+slug: 3.4.2/apinamespacesutilsfunctions/mergedefault
+---
+
+> **mergeDefault**\<`T`>(`def`, `given`): `Required`\<`T`>
+
+Merge the default options to user input
+
+## Type Parameters
+
+β’ **T** *extends* `object`
+
+## Parameters
+
+β’ **def**: `T`
+
+Default options
+
+β’ **given**: `T`
+
+User input
+
+## Returns
+
+`Required`\<`T`>
+
+Merged options
+
+## Defined in
+
+[src/Utils.ts:8](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Utils.ts#L8)
diff --git a/src/content/docs/3.4.2/api/namespaces/Utils/functions/wait.md b/src/content/docs/3.4.2/api/namespaces/Utils/functions/wait.md
new file mode 100644
index 0000000..599e617
--- /dev/null
+++ b/src/content/docs/3.4.2/api/namespaces/Utils/functions/wait.md
@@ -0,0 +1,27 @@
+---
+editUrl: false
+next: false
+prev: false
+title: wait
+slug: 3.4.2/apinamespacesutilsfunctions/wait
+---
+
+> **wait**(`ms`): `Promise`\<`void`>
+
+Wait for a specific amount of time (timeout)
+
+## Parameters
+
+β’ **ms**: `number`
+
+Time to wait in milliseconds
+
+## Returns
+
+`Promise`\<`void`>
+
+A promise that resolves in x seconds
+
+## Defined in
+
+[src/Utils.ts:29](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Utils.ts#L29)
diff --git a/src/content/docs/3.4.2/api/namespaces/Utils/type-aliases/Constructor.md b/src/content/docs/3.4.2/api/namespaces/Utils/type-aliases/Constructor.md
new file mode 100644
index 0000000..a3d0ec8
--- /dev/null
+++ b/src/content/docs/3.4.2/api/namespaces/Utils/type-aliases/Constructor.md
@@ -0,0 +1,25 @@
+---
+editUrl: false
+next: false
+prev: false
+title: Constructor
+slug: 3.4.2/apinamespacesutilstype-aliases/constructor
+---
+
+> **Constructor**\<`T`>: (...`args`) => `T`
+
+## Type Parameters
+
+β’ **T**
+
+## Parameters
+
+β’ ...**args**: `any`\[]
+
+## Returns
+
+`T`
+
+## Defined in
+
+[src/Utils.ts:1](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/Utils.ts#L1)
diff --git a/src/content/docs/3.4.2/api/type-aliases/LoadType.md b/src/content/docs/3.4.2/api/type-aliases/LoadType.md
new file mode 100644
index 0000000..527f02e
--- /dev/null
+++ b/src/content/docs/3.4.2/api/type-aliases/LoadType.md
@@ -0,0 +1,13 @@
+---
+editUrl: false
+next: false
+prev: false
+title: LoadType
+slug: 3.4.2/apitype-aliases/loadtype
+---
+
+> **LoadType**: `"TRACK_LOADED"` | `"PLAYLIST_LOADED"` | `"SEARCH_RESULT"` | `"NO_MATCHES"` | `"LOAD_FAILED"`
+
+## Defined in
+
+[src/node/Rest.ts:5](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/node/Rest.ts#L5)
diff --git a/src/content/docs/3.4.2/api/type-aliases/PlayerEventType.md b/src/content/docs/3.4.2/api/type-aliases/PlayerEventType.md
new file mode 100644
index 0000000..d04065a
--- /dev/null
+++ b/src/content/docs/3.4.2/api/type-aliases/PlayerEventType.md
@@ -0,0 +1,13 @@
+---
+editUrl: false
+next: false
+prev: false
+title: PlayerEventType
+slug: 3.4.2/apitype-aliases/playereventtype
+---
+
+> **PlayerEventType**: `"TrackStartEvent"` | `"TrackEndEvent"` | `"TrackExceptionEvent"` | `"TrackStuckEvent"` | `"WebSocketClosedEvent"`
+
+## Defined in
+
+[src/guild/Player.ts:9](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L9)
diff --git a/src/content/docs/3.4.2/api/type-aliases/Severity.md b/src/content/docs/3.4.2/api/type-aliases/Severity.md
new file mode 100644
index 0000000..7939161
--- /dev/null
+++ b/src/content/docs/3.4.2/api/type-aliases/Severity.md
@@ -0,0 +1,13 @@
+---
+editUrl: false
+next: false
+prev: false
+title: Severity
+slug: 3.4.2/apitype-aliases/severity
+---
+
+> **Severity**: `"COMMON"` | `"SUSPICIOUS"` | `"FAULT"`
+
+## Defined in
+
+[src/guild/Player.ts:8](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L8)
diff --git a/src/content/docs/3.4.2/api/type-aliases/TrackEndReason.md b/src/content/docs/3.4.2/api/type-aliases/TrackEndReason.md
new file mode 100644
index 0000000..cbe191d
--- /dev/null
+++ b/src/content/docs/3.4.2/api/type-aliases/TrackEndReason.md
@@ -0,0 +1,13 @@
+---
+editUrl: false
+next: false
+prev: false
+title: TrackEndReason
+slug: 3.4.2/apitype-aliases/trackendreason
+---
+
+> **TrackEndReason**: `"FINISHED"` | `"LOAD_FAILED"` | `"STOPPED"` | `"REPLACED"` | `"CLEANUP"`
+
+## Defined in
+
+[src/guild/Player.ts:7](https://github.com/shipgirlproject/shoukaku/blob/e7d94081cabbda7327dc04e467a45fcda49c24f2/src/guild/Player.ts#L7)
diff --git a/src/content/docs/3.4.2/guides/1-getting-started.mdx b/src/content/docs/3.4.2/guides/1-getting-started.mdx
new file mode 100644
index 0000000..81200d7
--- /dev/null
+++ b/src/content/docs/3.4.2/guides/1-getting-started.mdx
@@ -0,0 +1,93 @@
+---
+title: Getting Started
+description: Get started with Shoukaku.
+slug: 3.4.2/guides/1-getting-started
+---
+
+import { PackageManagers } from "starlight-package-managers";
+import { Tabs, TabItem, Steps, Aside } from '@astrojs/starlight/components';
+
+Shoukaku is a stable, powerful and updated wrapper around [Lavalink](https://lavalink.dev/). It is Discord library agnostic, and can add support for new Discord libraries using connectors.
+
+## Set up Shoukaku
+
+
+ 1. Install Shoukaku using your favorite package manager.
+
+
+
+ 2. Initialize the library using one of the connectors.
+
+
+
+ ```js
+ const { Client } = require('discord.js');
+ const { Shoukaku, Connectors } = require('shoukaku');
+ const Nodes = [{
+ name: 'Localhost',
+ url: 'localhost:6969',
+ auth: 'marin_kitagawa'
+ }];
+ const client = new Client();
+ const shoukaku = new Shoukaku(new Connectors.DiscordJS(client), Nodes);
+ // ALWAYS handle error, logging it will do
+ shoukaku.on('error', (_, error) => console.error(error));
+ client.login('token');
+ // If you want shoukaku to be available on client, then bind it to it, here is one example of it
+ client.shoukaku = shoukaku;
+ ```
+
+
+
+ ```js
+ const { Client } = require('discord.js');
+ const { Shoukaku, Connectors } = require('shoukaku');
+ const Nodes = [{
+ name: 'Localhost',
+ url: 'localhost:6969',
+ auth: 'marin_kitagawa'
+ }];
+ const client = new Client();
+ const shoukaku = new Shoukaku(new Connectors.Eris(client), Nodes);
+ // ALWAYS handle error, logging it will do
+ shoukaku.on('error', (_, error) => console.error(error));
+ client.login('token');
+ // If you want shoukaku to be available on client, then bind it to it, here is one example of it
+ client.shoukaku = shoukaku;
+ ```
+
+
+
+ ```js
+ const { Client } = require('discord.js');
+ const { Shoukaku, Connectors } = require('shoukaku');
+ const Nodes = [{
+ name: 'Localhost',
+ url: 'localhost:6969',
+ auth: 'marin_kitagawa'
+ }];
+ const client = new Client();
+ const shoukaku = new Shoukaku(new Connectors.OceanicJS(client), Nodes);
+ // ALWAYS handle error, logging it will do
+ shoukaku.on('error', (_, error) => console.error(error));
+ client.login('token');
+ // If you want shoukaku to be available on client, then bind it to it, here is one example of it
+ client.shoukaku = shoukaku;
+ ```
+
+
+
+
+
+
+## Further reading
+
+* [Lavalink Docs](https://lavalink.dev)
diff --git a/src/content/docs/3.4.2/guides/2-options.mdx b/src/content/docs/3.4.2/guides/2-options.mdx
new file mode 100644
index 0000000..9162a28
--- /dev/null
+++ b/src/content/docs/3.4.2/guides/2-options.mdx
@@ -0,0 +1,19 @@
+---
+title: Configuration Options
+description: Options for configuring behavior.
+slug: 3.4.2/guides/2-options
+---
+
+Option | Type | Description
+\--------|------|------------
+resume | boolean | Whether to resume a connection on disconnect to Lavalink (Server Side) (Note: DOES NOT RESUME WHEN THE LAVALINK SERVER DIES) |
+resumeKey | string | Resume key for Lavalink |
+resumeTimeout | number | Timeout before resuming a connection **in seconds** |
+resumeByLibrary | boolean | Whether to resume the players by doing it in the library side (Client Side) (Note: TRIES TO RESUME REGARDLESS OF WHAT HAPPENED ON A LAVALINK SERVER) |
+alwaysSendResumeKey | boolean | Disables the first time initialization tracking of nodes, and just sends the resume key always (Note: Useful for people who save their players to redis and wants to resume sessions even at first boot) |
+reconnectTries | number | Number of times to try and reconnect to Lavalink before giving up |
+reconnectInterval | number | Timeout before trying to reconnect **in milliseconds** |
+restTimeout | number | Time to wait for a response from the Lavalink REST API before giving up **in milliseconds** |
+moveOnDisconnect | boolean | Whether to move players to a different Lavalink node when a node disconnects |
+userAgent | string | User Agent to use when making requests to Lavalink |
+structures | Object\{rest?, player?} | Custom structures for shoukaku to use |
diff --git a/src/content/docs/3.4.2/guides/3-common.mdx b/src/content/docs/3.4.2/guides/3-common.mdx
new file mode 100644
index 0000000..118081a
--- /dev/null
+++ b/src/content/docs/3.4.2/guides/3-common.mdx
@@ -0,0 +1,43 @@
+---
+title: Common Usage
+description: Commonly used pieces of code.
+slug: 3.4.2/guides/3-common
+---
+
+## Search and Join a Channel
+
+Get a Lavalink [node](/3.4.2/api/classes/node/) that you are connected to, which was [specified](/3.4.2/api/classes/shoukaku#parameters) when creating the [Shoukaku](/3.4.2/api/classes/shoukaku) instance.
+
+```js
+const node = shoukaku.getNode();
+if (!node) return;
+```
+
+Search for a track, here we are searching via [SoundCloud](https://soundcloud.com), using the `scsearch:` prefix. The string after the prefix is the search query.
+
+```js
+const result = await node.rest.resolve('scsearch:snowhalation');
+if (!result?.tracks.length) return; // no tracks
+const metadata = result.tracks.shift(); // get the first trackl
+```
+
+Tell the Lavalink node to join a Discord voice channel.
+
+```js
+const player = await node.joinChannel({
+ guildId: 'your_guild_id',
+ channelId: 'your_channel_id',
+ shardId: 0 // if unsharded it will always be zero (depending on your library implementation)
+});
+// player is created and ready, do your thing
+```
+
+## Play Track and change Playback Option
+
+Here we are changing the volume, you can do [other stuff](/3.4.2/api/classes/player#methods) as well.
+
+```js
+player
+ .playTrack({ track: metadata.track })
+ .setVolume(0.5);
+```
diff --git a/src/content/docs/3.4.2/guides/4-plugins.mdx b/src/content/docs/3.4.2/guides/4-plugins.mdx
new file mode 100644
index 0000000..b8cd3c0
--- /dev/null
+++ b/src/content/docs/3.4.2/guides/4-plugins.mdx
@@ -0,0 +1,36 @@
+---
+title: Plugins
+description: Plugins to extend Shoukaku.
+slug: 3.4.2/guides/4-plugins
+---
+
+## Plugins List
+
+Open a pull request to add your plugin here
+
+Name | Link | Description
+\-------|----------|------------
+Kazagumo | [Github](https://github.com/Takiyo0/Kazagumo) | A Shoukaku wrapper that have built-in queue system
+stone-deezer | [NPM](https://www.npmjs.com/package/stone-deezer) | A plugin to simplify deezer links and then play it from available sources (**REQUIRES [KAZAGUMO](https://github.com/Takiyo0/Kazagumo)**)
+
+## Creating Plugins
+
+Shoukaku has now official supports for plugins. However, implementing this is up to the developers that is interested on doing it
+
+Shoukaku support modification on Rest.ts and Player.ts
+
+To apply your plugin, put the extended classes on **ShoukakuOptions.structures**.
+
+```js
+const { Client } = require('discord.js');
+const { Shoukaku, Rest, Connectors } = require('shoukaku');
+class CustomRest extends Rest { }; // extended structure of your choice
+const Nodes = [{
+ name: 'Localhost',
+ url: 'localhost:6969',
+ auth: 'marin_kitagawa'
+}];
+const ShoukakuOptions = { structures: { rest: CustomRest } } // pass the custom structure to Shoukaku
+const client = new Client();
+const shoukaku = new Shoukaku(new Connectors.DiscordJS(client), Nodes, ShoukakuOptions);
+```
diff --git a/src/content/docs/3.4.2/index.mdx b/src/content/docs/3.4.2/index.mdx
new file mode 100644
index 0000000..07c2bb1
--- /dev/null
+++ b/src/content/docs/3.4.2/index.mdx
@@ -0,0 +1,17 @@
+---
+title: Shoukaku Docs
+description: A stable, powerful and updated wrapper around Lavalink.
+hero:
+ tagline: A stable, powerful and updated wrapper around Lavalink.
+ image:
+ file: ../../../assets/3.4.2/shoukaku.png
+ actions:
+ - text: Getting Started
+ link: /3.4.2/guides/1-getting-started/
+ icon: right-arrow
+ variant: primary
+ - text: API Reference
+ link: /3.4.2/api/classes/shoukaku/
+ icon: external
+slug: 3.4.2
+---
diff --git a/src/content/docs/4.0.1/api/README.md b/src/content/docs/4.0.1/api/README.md
new file mode 100644
index 0000000..248c292
--- /dev/null
+++ b/src/content/docs/4.0.1/api/README.md
@@ -0,0 +1,85 @@
+---
+editUrl: false
+next: false
+prev: false
+title: shoukaku
+slug: 4.0.1/api/readme
+---
+
+## Namespaces
+
+* [Connectors](/4.0.1/api/namespaces/connectors/readme/)
+* [Constants](/4.0.1/api/namespaces/constants/readme/)
+* [Utils](/4.0.1/api/namespaces/utils/readme/)
+
+## Enumerations
+
+* [LoadType](/4.0.1/api/enumerations/loadtype/)
+
+## Classes
+
+* [Connection](/4.0.1/api/classes/connection/)
+* [Connector](/4.0.1/api/classes/connector/)
+* [Node](/4.0.1/api/classes/node/)
+* [Player](/4.0.1/api/classes/player/)
+* [Rest](/4.0.1/api/classes/rest/)
+* [Shoukaku](/4.0.1/api/classes/shoukaku/)
+
+## Interfaces
+
+* [Address](/4.0.1/api/interfaces/address/)
+* [Band](/4.0.1/api/interfaces/band/)
+* [ChannelMixSettings](/4.0.1/api/interfaces/channelmixsettings/)
+* [ConnectorMethods](/4.0.1/api/interfaces/connectormethods/)
+* [DistortionSettings](/4.0.1/api/interfaces/distortionsettings/)
+* [EmptyResult](/4.0.1/api/interfaces/emptyresult/)
+* [ErrorResult](/4.0.1/api/interfaces/errorresult/)
+* [Exception](/4.0.1/api/interfaces/exception/)
+* [FilterOptions](/4.0.1/api/interfaces/filteroptions/)
+* [FreqSettings](/4.0.1/api/interfaces/freqsettings/)
+* [KaraokeSettings](/4.0.1/api/interfaces/karaokesettings/)
+* [LavalinkPlayer](/4.0.1/api/interfaces/lavalinkplayer/)
+* [LavalinkPlayerVoice](/4.0.1/api/interfaces/lavalinkplayervoice/)
+* [LavalinkPlayerVoiceOptions](/4.0.1/api/interfaces/lavalinkplayervoiceoptions/)
+* [LowPassSettings](/4.0.1/api/interfaces/lowpasssettings/)
+* [NodeOption](/4.0.1/api/interfaces/nodeoption/)
+* [NodeStats](/4.0.1/api/interfaces/nodestats/)
+* [NonResumableHeaders](/4.0.1/api/interfaces/nonresumableheaders/)
+* [PlayOptions](/4.0.1/api/interfaces/playoptions/)
+* [PlayerEvent](/4.0.1/api/interfaces/playerevent/)
+* [PlayerUpdate](/4.0.1/api/interfaces/playerupdate/)
+* [Playlist](/4.0.1/api/interfaces/playlist/)
+* [PlaylistResult](/4.0.1/api/interfaces/playlistresult/)
+* [ResumableHeaders](/4.0.1/api/interfaces/resumableheaders/)
+* [ResumeOptions](/4.0.1/api/interfaces/resumeoptions/)
+* [RotationSettings](/4.0.1/api/interfaces/rotationsettings/)
+* [RoutePlanner](/4.0.1/api/interfaces/routeplanner/)
+* [SearchResult](/4.0.1/api/interfaces/searchresult/)
+* [ServerUpdate](/4.0.1/api/interfaces/serverupdate/)
+* [SessionInfo](/4.0.1/api/interfaces/sessioninfo/)
+* [ShoukakuOptions](/4.0.1/api/interfaces/shoukakuoptions/)
+* [StateUpdatePartial](/4.0.1/api/interfaces/stateupdatepartial/)
+* [Structures](/4.0.1/api/interfaces/structures/)
+* [TimescaleSettings](/4.0.1/api/interfaces/timescalesettings/)
+* [Track](/4.0.1/api/interfaces/track/)
+* [TrackEndEvent](/4.0.1/api/interfaces/trackendevent/)
+* [TrackExceptionEvent](/4.0.1/api/interfaces/trackexceptionevent/)
+* [TrackResult](/4.0.1/api/interfaces/trackresult/)
+* [TrackStartEvent](/4.0.1/api/interfaces/trackstartevent/)
+* [TrackStuckEvent](/4.0.1/api/interfaces/trackstuckevent/)
+* [UpdatePlayerInfo](/4.0.1/api/interfaces/updateplayerinfo/)
+* [UpdatePlayerOptions](/4.0.1/api/interfaces/updateplayeroptions/)
+* [VoiceChannelOptions](/4.0.1/api/interfaces/voicechanneloptions/)
+* [WebSocketClosedEvent](/4.0.1/api/interfaces/websocketclosedevent/)
+
+## Type Aliases
+
+* [LavalinkResponse](/4.0.1/api/type-aliases/lavalinkresponse/)
+* [NodeInfo](/4.0.1/api/type-aliases/nodeinfo/)
+* [PlayerEventType](/4.0.1/api/type-aliases/playereventtype/)
+* [Severity](/4.0.1/api/type-aliases/severity/)
+* [TrackEndReason](/4.0.1/api/type-aliases/trackendreason/)
+
+## Variables
+
+* [AllowedPackets](/4.0.1/api/variables/allowedpackets/)
diff --git a/src/content/docs/4.0.1/api/classes/Connection.md b/src/content/docs/4.0.1/api/classes/Connection.md
new file mode 100644
index 0000000..716c963
--- /dev/null
+++ b/src/content/docs/4.0.1/api/classes/Connection.md
@@ -0,0 +1,1655 @@
+---
+editUrl: false
+next: false
+prev: false
+title: Connection
+slug: 4.0.1/apiclasses/connection
+---
+
+Represents a connection to a Discord voice channel
+
+## Extends
+
+* `EventEmitter`
+
+## Constructors
+
+### new Connection()
+
+> **new Connection**(`manager`, `options`): [`Connection`](/4.0.1/api/classes/connection/)
+
+#### Parameters
+
+β’ **manager**: [`Shoukaku`](/4.0.1/api/classes/shoukaku/)
+
+The manager of this connection
+
+β’ **options**: [`VoiceChannelOptions`](/4.0.1/api/interfaces/voicechanneloptions/)
+
+The options to pass in connection creation
+
+#### Returns
+
+[`Connection`](/4.0.1/api/classes/connection/)
+
+#### Overrides
+
+`EventEmitter.constructor`
+
+#### Defined in
+
+[src/guild/Connection.ts:87](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Connection.ts#L87)
+
+## Properties
+
+### channelId
+
+> **channelId**: `null` | `string`
+
+ID of the connected voice channel
+
+#### Defined in
+
+[src/guild/Connection.ts:39](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Connection.ts#L39)
+
+***
+
+### deafened
+
+> **deafened**: `boolean`
+
+Deafen status in connected voice channel
+
+#### Defined in
+
+[src/guild/Connection.ts:52](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Connection.ts#L52)
+
+***
+
+### guildId
+
+> **guildId**: `string`
+
+ID of Guild that contains the connected voice channel
+
+#### Defined in
+
+[src/guild/Connection.ts:35](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Connection.ts#L35)
+
+***
+
+### lastChannelId
+
+> **lastChannelId**: `null` | `string`
+
+ID of the last channelId connected to
+
+#### Defined in
+
+[src/guild/Connection.ts:56](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Connection.ts#L56)
+
+***
+
+### lastRegion
+
+> **lastRegion**: `null` | `string`
+
+Last region of the connected voice channel
+
+#### Defined in
+
+[src/guild/Connection.ts:68](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Connection.ts#L68)
+
+***
+
+### manager
+
+> **manager**: [`Shoukaku`](/4.0.1/api/classes/shoukaku/)
+
+The manager where this connection is on
+
+#### Defined in
+
+[src/guild/Connection.ts:31](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Connection.ts#L31)
+
+***
+
+### muted
+
+> **muted**: `boolean`
+
+Mute status in connected voice channel
+
+#### Defined in
+
+[src/guild/Connection.ts:48](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Connection.ts#L48)
+
+***
+
+### region
+
+> **region**: `null` | `string`
+
+Region of connected voice channel
+
+#### Defined in
+
+[src/guild/Connection.ts:64](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Connection.ts#L64)
+
+***
+
+### serverUpdate
+
+> **serverUpdate**: `null` | [`ServerUpdate`](/4.0.1/api/interfaces/serverupdate/)
+
+Cached serverUpdate event from Lavalink
+
+#### Defined in
+
+[src/guild/Connection.ts:72](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Connection.ts#L72)
+
+***
+
+### sessionId
+
+> **sessionId**: `null` | `string`
+
+ID of current session
+
+#### Defined in
+
+[src/guild/Connection.ts:60](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Connection.ts#L60)
+
+***
+
+### shardId
+
+> **shardId**: `number`
+
+ID of the Shard that contains the guild that contains the connected voice channel
+
+#### Defined in
+
+[src/guild/Connection.ts:44](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Connection.ts#L44)
+
+***
+
+### state
+
+> **state**: [`State`](/4.0.1/api/namespaces/constants/enumerations/state/)
+
+Connection state
+
+#### Defined in
+
+[src/guild/Connection.ts:76](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Connection.ts#L76)
+
+***
+
+### captureRejectionSymbol
+
+> `readonly` `static` **captureRejectionSymbol**: *typeof* [`captureRejectionSymbol`](/4.0.1/api/classes/connection/#capturerejectionsymbol)
+
+Value: `Symbol.for('nodejs.rejection')`
+
+See how to write a custom `rejection handler`.
+
+#### Since
+
+v13.4.0, v12.16.0
+
+#### Inherited from
+
+`EventEmitter.captureRejectionSymbol`
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:452
+
+***
+
+### captureRejections
+
+> `static` **captureRejections**: `boolean`
+
+Value: [boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type)
+
+Change the default `captureRejections` option on all new `EventEmitter` objects.
+
+#### Since
+
+v13.4.0, v12.16.0
+
+#### Inherited from
+
+`EventEmitter.captureRejections`
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:459
+
+***
+
+### defaultMaxListeners
+
+> `static` **defaultMaxListeners**: `number`
+
+By default, a maximum of `10` listeners can be registered for any single
+event. This limit can be changed for individual `EventEmitter` instances
+using the `emitter.setMaxListeners(n)` method. To change the default
+for *all*`EventEmitter` instances, the `events.defaultMaxListeners` property
+can be used. If this value is not a positive number, a `RangeError` is thrown.
+
+Take caution when setting the `events.defaultMaxListeners` because the
+change affects *all* `EventEmitter` instances, including those created before
+the change is made. However, calling `emitter.setMaxListeners(n)` still has
+precedence over `events.defaultMaxListeners`.
+
+This is not a hard limit. The `EventEmitter` instance will allow
+more listeners to be added but will output a trace warning to stderr indicating
+that a "possible EventEmitter memory leak" has been detected. For any single
+`EventEmitter`, the `emitter.getMaxListeners()` and `emitter.setMaxListeners()` methods can be used to
+temporarily avoid this warning:
+
+```js
+import { EventEmitter } from 'node:events';
+const emitter = new EventEmitter();
+emitter.setMaxListeners(emitter.getMaxListeners() + 1);
+emitter.once('event', () => {
+ // do stuff
+ emitter.setMaxListeners(Math.max(emitter.getMaxListeners() - 1, 0));
+});
+```
+
+The `--trace-warnings` command-line flag can be used to display the
+stack trace for such warnings.
+
+The emitted warning can be inspected with `process.on('warning')` and will
+have the additional `emitter`, `type`, and `count` properties, referring to
+the event emitter instance, the event's name and the number of attached
+listeners, respectively.
+Its `name` property is set to `'MaxListenersExceededWarning'`.
+
+#### Since
+
+v0.11.2
+
+#### Inherited from
+
+`EventEmitter.defaultMaxListeners`
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:498
+
+***
+
+### errorMonitor
+
+> `readonly` `static` **errorMonitor**: *typeof* [`errorMonitor`](/4.0.1/api/classes/connection/#errormonitor)
+
+This symbol shall be used to install a listener for only monitoring `'error'` events. Listeners installed using this symbol are called before the regular `'error'` listeners are called.
+
+Installing a listener using this symbol does not change the behavior once an `'error'` event is emitted. Therefore, the process will still crash if no
+regular `'error'` listener is installed.
+
+#### Since
+
+v13.6.0, v12.17.0
+
+#### Inherited from
+
+`EventEmitter.errorMonitor`
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:445
+
+## Methods
+
+### \[captureRejectionSymbol]\()?
+
+> `optional` **\[captureRejectionSymbol]**\<`K`>(`error`, `event`, ...`args`): `void`
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **error**: `Error`
+
+β’ **event**: `string` | `symbol`
+
+β’ ...**args**: `AnyRest`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+`EventEmitter.[captureRejectionSymbol]`
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:136
+
+***
+
+### addListener()
+
+> **addListener**\<`K`>(`eventName`, `listener`): `this`
+
+Alias for `emitter.on(eventName, listener)`.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+β’ **listener**
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+`EventEmitter.addListener`
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:597
+
+***
+
+### emit()
+
+> **emit**\<`K`>(`eventName`, ...`args`): `boolean`
+
+Synchronously calls each of the listeners registered for the event named `eventName`, in the order they were registered, passing the supplied arguments
+to each.
+
+Returns `true` if the event had listeners, `false` otherwise.
+
+```js
+import { EventEmitter } from 'node:events';
+const myEmitter = new EventEmitter();
+
+// First listener
+myEmitter.on('event', function firstListener() {
+ console.log('Helloooo! first listener');
+});
+// Second listener
+myEmitter.on('event', function secondListener(arg1, arg2) {
+ console.log(`event with parameters ${arg1}, ${arg2} in second listener`);
+});
+// Third listener
+myEmitter.on('event', function thirdListener(...args) {
+ const parameters = args.join(', ');
+ console.log(`event with parameters ${parameters} in third listener`);
+});
+
+console.log(myEmitter.listeners('event'));
+
+myEmitter.emit('event', 1, 2, 3, 4, 5);
+
+// Prints:
+// [
+// [Function: firstListener],
+// [Function: secondListener],
+// [Function: thirdListener]
+// ]
+// Helloooo! first listener
+// event with parameters 1, 2 in second listener
+// event with parameters 1, 2, 3, 4, 5 in third listener
+```
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+β’ ...**args**: `AnyRest`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+`EventEmitter.emit`
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:859
+
+***
+
+### eventNames()
+
+> **eventNames**(): (`string` | `symbol`)\[]
+
+Returns an array listing the events for which the emitter has registered
+listeners. The values in the array are strings or `Symbol`s.
+
+```js
+import { EventEmitter } from 'node:events';
+
+const myEE = new EventEmitter();
+myEE.on('foo', () => {});
+myEE.on('bar', () => {});
+
+const sym = Symbol('symbol');
+myEE.on(sym, () => {});
+
+console.log(myEE.eventNames());
+// Prints: [ 'foo', 'bar', Symbol(symbol) ]
+```
+
+#### Returns
+
+(`string` | `symbol`)\[]
+
+#### Inherited from
+
+`EventEmitter.eventNames`
+
+#### Since
+
+v6.0.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:922
+
+***
+
+### getMaxListeners()
+
+> **getMaxListeners**(): `number`
+
+Returns the current max listener value for the `EventEmitter` which is either
+set by `emitter.setMaxListeners(n)` or defaults to [defaultMaxListeners](../../../../../../api/classes/connection/#defaultmaxlisteners).
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+`EventEmitter.getMaxListeners`
+
+#### Since
+
+v1.0.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:774
+
+***
+
+### listenerCount()
+
+> **listenerCount**\<`K`>(`eventName`, `listener`?): `number`
+
+Returns the number of listeners listening for the event named `eventName`.
+If `listener` is provided, it will return how many times the listener is found
+in the list of the listeners of the event.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+The name of the event being listened for
+
+β’ **listener?**: `Function`
+
+The event handler function
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+`EventEmitter.listenerCount`
+
+#### Since
+
+v3.2.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:868
+
+***
+
+### listeners()
+
+> **listeners**\<`K`>(`eventName`): `Function`\[]
+
+Returns a copy of the array of listeners for the event named `eventName`.
+
+```js
+server.on('connection', (stream) => {
+ console.log('someone connected!');
+});
+console.log(util.inspect(server.listeners('connection')));
+// Prints: [ [Function] ]
+```
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+#### Returns
+
+`Function`\[]
+
+#### Inherited from
+
+`EventEmitter.listeners`
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:787
+
+***
+
+### off()
+
+> **off**\<`K`>(`eventName`, `listener`): `this`
+
+Alias for `emitter.removeListener()`.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+β’ **listener**
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+`EventEmitter.off`
+
+#### Since
+
+v10.0.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:747
+
+***
+
+### on()
+
+> **on**\<`K`>(`eventName`, `listener`): `this`
+
+Adds the `listener` function to the end of the listeners array for the event
+named `eventName`. No checks are made to see if the `listener` has already
+been added. Multiple calls passing the same combination of `eventName` and
+`listener` will result in the `listener` being added, and called, multiple times.
+
+```js
+server.on('connection', (stream) => {
+ console.log('someone connected!');
+});
+```
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+By default, event listeners are invoked in the order they are added. The `emitter.prependListener()` method can be used as an alternative to add the
+event listener to the beginning of the listeners array.
+
+```js
+import { EventEmitter } from 'node:events';
+const myEE = new EventEmitter();
+myEE.on('foo', () => console.log('a'));
+myEE.prependListener('foo', () => console.log('b'));
+myEE.emit('foo');
+// Prints:
+// b
+// a
+```
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+The name of the event.
+
+β’ **listener**
+
+The callback function
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+`EventEmitter.on`
+
+#### Since
+
+v0.1.101
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:629
+
+***
+
+### once()
+
+> **once**\<`K`>(`eventName`, `listener`): `this`
+
+Adds a **one-time** `listener` function for the event named `eventName`. The
+next time `eventName` is triggered, this listener is removed and then invoked.
+
+```js
+server.once('connection', (stream) => {
+ console.log('Ah, we have our first user!');
+});
+```
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+By default, event listeners are invoked in the order they are added. The `emitter.prependOnceListener()` method can be used as an alternative to add the
+event listener to the beginning of the listeners array.
+
+```js
+import { EventEmitter } from 'node:events';
+const myEE = new EventEmitter();
+myEE.once('foo', () => console.log('a'));
+myEE.prependOnceListener('foo', () => console.log('b'));
+myEE.emit('foo');
+// Prints:
+// b
+// a
+```
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+The name of the event.
+
+β’ **listener**
+
+The callback function
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+`EventEmitter.once`
+
+#### Since
+
+v0.3.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:659
+
+***
+
+### prependListener()
+
+> **prependListener**\<`K`>(`eventName`, `listener`): `this`
+
+Adds the `listener` function to the *beginning* of the listeners array for the
+event named `eventName`. No checks are made to see if the `listener` has
+already been added. Multiple calls passing the same combination of `eventName`
+and `listener` will result in the `listener` being added, and called, multiple times.
+
+```js
+server.prependListener('connection', (stream) => {
+ console.log('someone connected!');
+});
+```
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+The name of the event.
+
+β’ **listener**
+
+The callback function
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+`EventEmitter.prependListener`
+
+#### Since
+
+v6.0.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:886
+
+***
+
+### prependOnceListener()
+
+> **prependOnceListener**\<`K`>(`eventName`, `listener`): `this`
+
+Adds a **one-time**`listener` function for the event named `eventName` to the *beginning* of the listeners array. The next time `eventName` is triggered, this
+listener is removed, and then invoked.
+
+```js
+server.prependOnceListener('connection', (stream) => {
+ console.log('Ah, we have our first user!');
+});
+```
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+The name of the event.
+
+β’ **listener**
+
+The callback function
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+`EventEmitter.prependOnceListener`
+
+#### Since
+
+v6.0.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:902
+
+***
+
+### rawListeners()
+
+> **rawListeners**\<`K`>(`eventName`): `Function`\[]
+
+Returns a copy of the array of listeners for the event named `eventName`,
+including any wrappers (such as those created by `.once()`).
+
+```js
+import { EventEmitter } from 'node:events';
+const emitter = new EventEmitter();
+emitter.once('log', () => console.log('log once'));
+
+// Returns a new Array with a function `onceWrapper` which has a property
+// `listener` which contains the original listener bound above
+const listeners = emitter.rawListeners('log');
+const logFnWrapper = listeners[0];
+
+// Logs "log once" to the console and does not unbind the `once` event
+logFnWrapper.listener();
+
+// Logs "log once" to the console and removes the listener
+logFnWrapper();
+
+emitter.on('log', () => console.log('log persistently'));
+// Will return a new Array with a single function bound by `.on()` above
+const newListeners = emitter.rawListeners('log');
+
+// Logs "log persistently" twice
+newListeners[0]();
+emitter.emit('log');
+```
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+#### Returns
+
+`Function`\[]
+
+#### Inherited from
+
+`EventEmitter.rawListeners`
+
+#### Since
+
+v9.4.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:818
+
+***
+
+### removeAllListeners()
+
+> **removeAllListeners**(`eventName`?): `this`
+
+Removes all listeners, or those of the specified `eventName`.
+
+It is bad practice to remove listeners added elsewhere in the code,
+particularly when the `EventEmitter` instance was created by some other
+component or module (e.g. sockets or file streams).
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Parameters
+
+β’ **eventName?**: `string` | `symbol`
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+`EventEmitter.removeAllListeners`
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:758
+
+***
+
+### removeListener()
+
+> **removeListener**\<`K`>(`eventName`, `listener`): `this`
+
+Removes the specified `listener` from the listener array for the event named `eventName`.
+
+```js
+const callback = (stream) => {
+ console.log('someone connected!');
+};
+server.on('connection', callback);
+// ...
+server.removeListener('connection', callback);
+```
+
+`removeListener()` will remove, at most, one instance of a listener from the
+listener array. If any single listener has been added multiple times to the
+listener array for the specified `eventName`, then `removeListener()` must be
+called multiple times to remove each instance.
+
+Once an event is emitted, all listeners attached to it at the
+time of emitting are called in order. This implies that any `removeListener()` or `removeAllListeners()` calls *after* emitting and *before* the last listener finishes execution
+will not remove them from`emit()` in progress. Subsequent events behave as expected.
+
+```js
+import { EventEmitter } from 'node:events';
+class MyEmitter extends EventEmitter {}
+const myEmitter = new MyEmitter();
+
+const callbackA = () => {
+ console.log('A');
+ myEmitter.removeListener('event', callbackB);
+};
+
+const callbackB = () => {
+ console.log('B');
+};
+
+myEmitter.on('event', callbackA);
+
+myEmitter.on('event', callbackB);
+
+// callbackA removes listener callbackB but it will still be called.
+// Internal listener array at time of emit [callbackA, callbackB]
+myEmitter.emit('event');
+// Prints:
+// A
+// B
+
+// callbackB is now removed.
+// Internal listener array [callbackA]
+myEmitter.emit('event');
+// Prints:
+// A
+```
+
+Because listeners are managed using an internal array, calling this will
+change the position indices of any listener registered *after* the listener
+being removed. This will not impact the order in which listeners are called,
+but it means that any copies of the listener array as returned by
+the `emitter.listeners()` method will need to be recreated.
+
+When a single function has been added as a handler multiple times for a single
+event (as in the example below), `removeListener()` will remove the most
+recently added instance. In the example the `once('ping')` listener is removed:
+
+```js
+import { EventEmitter } from 'node:events';
+const ee = new EventEmitter();
+
+function pong() {
+ console.log('pong');
+}
+
+ee.on('ping', pong);
+ee.once('ping', pong);
+ee.removeListener('ping', pong);
+
+ee.emit('ping');
+ee.emit('ping');
+```
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+β’ **listener**
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+`EventEmitter.removeListener`
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:742
+
+***
+
+### setDeaf()
+
+> **setDeaf**(`deaf`): `void`
+
+Set the deafen status for the current bot user
+
+#### Parameters
+
+β’ **deaf**: `boolean` = `false`
+
+Boolean value to indicate whether to deafen or undeafen
+
+#### Returns
+
+`void`
+
+#### Default Value
+
+```ts
+false
+```
+
+#### Defined in
+
+[src/guild/Connection.ts:108](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Connection.ts#L108)
+
+***
+
+### setMaxListeners()
+
+> **setMaxListeners**(`n`): `this`
+
+By default `EventEmitter`s will print a warning if more than `10` listeners are
+added for a particular event. This is a useful default that helps finding
+memory leaks. The `emitter.setMaxListeners()` method allows the limit to be
+modified for this specific `EventEmitter` instance. The value can be set to `Infinity` (or `0`) to indicate an unlimited number of listeners.
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Parameters
+
+β’ **n**: `number`
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+`EventEmitter.setMaxListeners`
+
+#### Since
+
+v0.3.5
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:768
+
+***
+
+### setMute()
+
+> **setMute**(`mute`): `void`
+
+Set the mute status for the current bot user
+
+#### Parameters
+
+β’ **mute**: `boolean` = `false`
+
+Boolean value to indicate whether to mute or unmute
+
+#### Returns
+
+`void`
+
+#### Default Value
+
+```ts
+false
+```
+
+#### Defined in
+
+[src/guild/Connection.ts:118](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Connection.ts#L118)
+
+***
+
+### addAbortListener()
+
+> `static` **addAbortListener**(`signal`, `resource`): `Disposable`
+
+Listens once to the `abort` event on the provided `signal`.
+
+Listening to the `abort` event on abort signals is unsafe and may
+lead to resource leaks since another third party with the signal can
+call `e.stopImmediatePropagation()`. Unfortunately Node.js cannot change
+this since it would violate the web standard. Additionally, the original
+API makes it easy to forget to remove listeners.
+
+This API allows safely using `AbortSignal`s in Node.js APIs by solving these
+two issues by listening to the event such that `stopImmediatePropagation` does
+not prevent the listener from running.
+
+Returns a disposable so that it may be unsubscribed from more easily.
+
+```js
+import { addAbortListener } from 'node:events';
+
+function example(signal) {
+ let disposable;
+ try {
+ signal.addEventListener('abort', (e) => e.stopImmediatePropagation());
+ disposable = addAbortListener(signal, (e) => {
+ // Do something when signal is aborted.
+ });
+ } finally {
+ disposable?.[Symbol.dispose]();
+ }
+}
+```
+
+:::caution\[Experimental]
+This API should not be used in production and may be trimmed from a public release.
+:::
+
+#### Parameters
+
+β’ **signal**: `AbortSignal`
+
+β’ **resource**
+
+#### Returns
+
+`Disposable`
+
+Disposable that removes the `abort` listener.
+
+#### Inherited from
+
+`EventEmitter.addAbortListener`
+
+#### Since
+
+v20.5.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:437
+
+***
+
+### getEventListeners()
+
+> `static` **getEventListeners**(`emitter`, `name`): `Function`\[]
+
+Returns a copy of the array of listeners for the event named `eventName`.
+
+For `EventEmitter`s this behaves exactly the same as calling `.listeners` on
+the emitter.
+
+For `EventTarget`s this is the only way to get the event listeners for the
+event target. This is useful for debugging and diagnostic purposes.
+
+```js
+import { getEventListeners, EventEmitter } from 'node:events';
+
+{
+ const ee = new EventEmitter();
+ const listener = () => console.log('Events are fun');
+ ee.on('foo', listener);
+ console.log(getEventListeners(ee, 'foo')); // [ [Function: listener] ]
+}
+{
+ const et = new EventTarget();
+ const listener = () => console.log('Events are fun');
+ et.addEventListener('foo', listener);
+ console.log(getEventListeners(et, 'foo')); // [ [Function: listener] ]
+}
+```
+
+#### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`> | `EventTarget`
+
+β’ **name**: `string` | `symbol`
+
+#### Returns
+
+`Function`\[]
+
+#### Inherited from
+
+`EventEmitter.getEventListeners`
+
+#### Since
+
+v15.2.0, v14.17.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:358
+
+***
+
+### getMaxListeners()
+
+> `static` **getMaxListeners**(`emitter`): `number`
+
+Returns the currently set max amount of listeners.
+
+For `EventEmitter`s this behaves exactly the same as calling `.getMaxListeners` on
+the emitter.
+
+For `EventTarget`s this is the only way to get the max event listeners for the
+event target. If the number of event handlers on a single EventTarget exceeds
+the max set, the EventTarget will print a warning.
+
+```js
+import { getMaxListeners, setMaxListeners, EventEmitter } from 'node:events';
+
+{
+ const ee = new EventEmitter();
+ console.log(getMaxListeners(ee)); // 10
+ setMaxListeners(11, ee);
+ console.log(getMaxListeners(ee)); // 11
+}
+{
+ const et = new EventTarget();
+ console.log(getMaxListeners(et)); // 10
+ setMaxListeners(11, et);
+ console.log(getMaxListeners(et)); // 11
+}
+```
+
+#### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`> | `EventTarget`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+`EventEmitter.getMaxListeners`
+
+#### Since
+
+v19.9.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:387
+
+***
+
+### ~~listenerCount()~~
+
+> `static` **listenerCount**(`emitter`, `eventName`): `number`
+
+A class method that returns the number of listeners for the given `eventName` registered on the given `emitter`.
+
+```js
+import { EventEmitter, listenerCount } from 'node:events';
+
+const myEmitter = new EventEmitter();
+myEmitter.on('event', () => {});
+myEmitter.on('event', () => {});
+console.log(listenerCount(myEmitter, 'event'));
+// Prints: 2
+```
+
+:::caution\[Deprecated]
+Since v3.2.0 - Use `listenerCount` instead.
+:::
+
+#### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`>
+
+The emitter to query
+
+β’ **eventName**: `string` | `symbol`
+
+The event name
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+`EventEmitter.listenerCount`
+
+#### Since
+
+v0.9.12
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:330
+
+***
+
+### on()
+
+#### on(emitter, eventName, options)
+
+> `static` **on**(`emitter`, `eventName`, `options`?): `AsyncIterableIterator`\<`any`\[]>
+
+```js
+import { on, EventEmitter } from 'node:events';
+import process from 'node:process';
+
+const ee = new EventEmitter();
+
+// Emit later on
+process.nextTick(() => {
+ ee.emit('foo', 'bar');
+ ee.emit('foo', 42);
+});
+
+for await (const event of on(ee, 'foo')) {
+ // The execution of this inner block is synchronous and it
+ // processes one event at a time (even with await). Do not use
+ // if concurrent execution is required.
+ console.log(event); // prints ['bar'] [42]
+}
+// Unreachable here
+```
+
+Returns an `AsyncIterator` that iterates `eventName` events. It will throw
+if the `EventEmitter` emits `'error'`. It removes all listeners when
+exiting the loop. The `value` returned by each iteration is an array
+composed of the emitted event arguments.
+
+An `AbortSignal` can be used to cancel waiting on events:
+
+```js
+import { on, EventEmitter } from 'node:events';
+import process from 'node:process';
+
+const ac = new AbortController();
+
+(async () => {
+ const ee = new EventEmitter();
+
+ // Emit later on
+ process.nextTick(() => {
+ ee.emit('foo', 'bar');
+ ee.emit('foo', 42);
+ });
+
+ for await (const event of on(ee, 'foo', { signal: ac.signal })) {
+ // The execution of this inner block is synchronous and it
+ // processes one event at a time (even with await). Do not use
+ // if concurrent execution is required.
+ console.log(event); // prints ['bar'] [42]
+ }
+ // Unreachable here
+})();
+
+process.nextTick(() => ac.abort());
+```
+
+Use the `close` option to specify an array of event names that will end the iteration:
+
+```js
+import { on, EventEmitter } from 'node:events';
+import process from 'node:process';
+
+const ee = new EventEmitter();
+
+// Emit later on
+process.nextTick(() => {
+ ee.emit('foo', 'bar');
+ ee.emit('foo', 42);
+ ee.emit('close');
+});
+
+for await (const event of on(ee, 'foo', { close: ['close'] })) {
+ console.log(event); // prints ['bar'] [42]
+}
+// the loop will exit after 'close' is emitted
+console.log('done'); // prints 'done'
+```
+
+##### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`>
+
+β’ **eventName**: `string` | `symbol`
+
+β’ **options?**: `StaticEventEmitterIteratorOptions`
+
+##### Returns
+
+`AsyncIterableIterator`\<`any`\[]>
+
+An `AsyncIterator` that iterates `eventName` events emitted by the `emitter`
+
+##### Inherited from
+
+`EventEmitter.on`
+
+##### Since
+
+v13.6.0, v12.16.0
+
+##### Defined in
+
+node\_modules/@types/node/events.d.ts:303
+
+#### on(emitter, eventName, options)
+
+> `static` **on**(`emitter`, `eventName`, `options`?): `AsyncIterableIterator`\<`any`\[]>
+
+##### Parameters
+
+β’ **emitter**: `EventTarget`
+
+β’ **eventName**: `string`
+
+β’ **options?**: `StaticEventEmitterIteratorOptions`
+
+##### Returns
+
+`AsyncIterableIterator`\<`any`\[]>
+
+##### Inherited from
+
+`EventEmitter.on`
+
+##### Defined in
+
+node\_modules/@types/node/events.d.ts:308
+
+***
+
+### once()
+
+#### once(emitter, eventName, options)
+
+> `static` **once**(`emitter`, `eventName`, `options`?): `Promise`\<`any`\[]>
+
+Creates a `Promise` that is fulfilled when the `EventEmitter` emits the given
+event or that is rejected if the `EventEmitter` emits `'error'` while waiting.
+The `Promise` will resolve with an array of all the arguments emitted to the
+given event.
+
+This method is intentionally generic and works with the web platform [EventTarget](https://dom.spec.whatwg.org/#interface-eventtarget) interface, which has no special`'error'` event
+semantics and does not listen to the `'error'` event.
+
+```js
+import { once, EventEmitter } from 'node:events';
+import process from 'node:process';
+
+const ee = new EventEmitter();
+
+process.nextTick(() => {
+ ee.emit('myevent', 42);
+});
+
+const [value] = await once(ee, 'myevent');
+console.log(value);
+
+const err = new Error('kaboom');
+process.nextTick(() => {
+ ee.emit('error', err);
+});
+
+try {
+ await once(ee, 'myevent');
+} catch (err) {
+ console.error('error happened', err);
+}
+```
+
+The special handling of the `'error'` event is only used when `events.once()` is used to wait for another event. If `events.once()` is used to wait for the
+'`error'` event itself, then it is treated as any other kind of event without
+special handling:
+
+```js
+import { EventEmitter, once } from 'node:events';
+
+const ee = new EventEmitter();
+
+once(ee, 'error')
+ .then(([err]) => console.log('ok', err.message))
+ .catch((err) => console.error('error', err.message));
+
+ee.emit('error', new Error('boom'));
+
+// Prints: ok boom
+```
+
+An `AbortSignal` can be used to cancel waiting for the event:
+
+```js
+import { EventEmitter, once } from 'node:events';
+
+const ee = new EventEmitter();
+const ac = new AbortController();
+
+async function foo(emitter, event, signal) {
+ try {
+ await once(emitter, event, { signal });
+ console.log('event emitted!');
+ } catch (error) {
+ if (error.name === 'AbortError') {
+ console.error('Waiting for the event was canceled!');
+ } else {
+ console.error('There was an error', error.message);
+ }
+ }
+}
+
+foo(ee, 'foo', ac.signal);
+ac.abort(); // Abort waiting for the event
+ee.emit('foo'); // Prints: Waiting for the event was canceled!
+```
+
+##### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`>
+
+β’ **eventName**: `string` | `symbol`
+
+β’ **options?**: `StaticEventEmitterOptions`
+
+##### Returns
+
+`Promise`\<`any`\[]>
+
+##### Inherited from
+
+`EventEmitter.once`
+
+##### Since
+
+v11.13.0, v10.16.0
+
+##### Defined in
+
+node\_modules/@types/node/events.d.ts:217
+
+#### once(emitter, eventName, options)
+
+> `static` **once**(`emitter`, `eventName`, `options`?): `Promise`\<`any`\[]>
+
+##### Parameters
+
+β’ **emitter**: `EventTarget`
+
+β’ **eventName**: `string`
+
+β’ **options?**: `StaticEventEmitterOptions`
+
+##### Returns
+
+`Promise`\<`any`\[]>
+
+##### Inherited from
+
+`EventEmitter.once`
+
+##### Defined in
+
+node\_modules/@types/node/events.d.ts:222
+
+***
+
+### setMaxListeners()
+
+> `static` **setMaxListeners**(`n`?, ...`eventTargets`?): `void`
+
+```js
+import { setMaxListeners, EventEmitter } from 'node:events';
+
+const target = new EventTarget();
+const emitter = new EventEmitter();
+
+setMaxListeners(5, target, emitter);
+```
+
+#### Parameters
+
+β’ **n?**: `number`
+
+A non-negative number. The maximum number of listeners per `EventTarget` event.
+
+β’ ...**eventTargets?**: (`EventEmitter`\<`DefaultEventMap`> | `EventTarget`)\[]
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+`EventEmitter.setMaxListeners`
+
+#### Since
+
+v15.4.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:402
diff --git a/src/content/docs/4.0.1/api/classes/Connector.md b/src/content/docs/4.0.1/api/classes/Connector.md
new file mode 100644
index 0000000..e78f304
--- /dev/null
+++ b/src/content/docs/4.0.1/api/classes/Connector.md
@@ -0,0 +1,103 @@
+---
+editUrl: false
+next: false
+prev: false
+title: Connector
+slug: 4.0.1/apiclasses/connector
+---
+
+## Extended by
+
+* [`DiscordJS`](/4.0.1/api/namespaces/connectors/classes/discordjs/)
+* [`Eris`](/4.0.1/api/namespaces/connectors/classes/eris/)
+* [`OceanicJS`](/4.0.1/api/namespaces/connectors/classes/oceanicjs/)
+
+## Constructors
+
+### new Connector()
+
+> **new Connector**(`client`): [`Connector`](/4.0.1/api/classes/connector/)
+
+#### Parameters
+
+β’ **client**: `any`
+
+#### Returns
+
+[`Connector`](/4.0.1/api/classes/connector/)
+
+#### Defined in
+
+[src/connectors/Connector.ts:15](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/connectors/Connector.ts#L15)
+
+## Methods
+
+### getId()
+
+> `abstract` **getId**(): `string`
+
+#### Returns
+
+`string`
+
+#### Defined in
+
+[src/connectors/Connector.ts:41](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/connectors/Connector.ts#L41)
+
+***
+
+### listen()
+
+> `abstract` **listen**(`nodes`): `void`
+
+#### Parameters
+
+β’ **nodes**: [`NodeOption`](/4.0.1/api/interfaces/nodeoption/)\[]
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/connectors/Connector.ts:45](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/connectors/Connector.ts#L45)
+
+***
+
+### sendPacket()
+
+> `abstract` **sendPacket**(`shardId`, `payload`, `important`): `void`
+
+#### Parameters
+
+β’ **shardId**: `number`
+
+β’ **payload**: `any`
+
+β’ **important**: `boolean`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/connectors/Connector.ts:43](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/connectors/Connector.ts#L43)
+
+***
+
+### set()
+
+> **set**(`manager`): [`Connector`](/4.0.1/api/classes/connector/)
+
+#### Parameters
+
+β’ **manager**: [`Shoukaku`](/4.0.1/api/classes/shoukaku/)
+
+#### Returns
+
+[`Connector`](/4.0.1/api/classes/connector/)
+
+#### Defined in
+
+[src/connectors/Connector.ts:20](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/connectors/Connector.ts#L20)
diff --git a/src/content/docs/4.0.1/api/classes/Node.md b/src/content/docs/4.0.1/api/classes/Node.md
new file mode 100644
index 0000000..13b809b
--- /dev/null
+++ b/src/content/docs/4.0.1/api/classes/Node.md
@@ -0,0 +1,1651 @@
+---
+editUrl: false
+next: false
+prev: false
+title: Node
+slug: 4.0.1/apiclasses/node
+---
+
+Represents a Lavalink node
+
+## Extends
+
+* `EventEmitter`
+
+## Constructors
+
+### new Node()
+
+> **new Node**(`manager`, `options`): [`Node`](/4.0.1/api/classes/node/)
+
+#### Parameters
+
+β’ **manager**: [`Shoukaku`](/4.0.1/api/classes/shoukaku/)
+
+Shoukaku instance
+
+β’ **options**: [`NodeOption`](/4.0.1/api/interfaces/nodeoption/)
+
+Options on creating this node
+
+#### Returns
+
+[`Node`](/4.0.1/api/classes/node/)
+
+#### Overrides
+
+`EventEmitter.constructor`
+
+#### Defined in
+
+[src/node/Node.ts:146](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Node.ts#L146)
+
+## Properties
+
+### group?
+
+> `readonly` `optional` **group**: `string`
+
+Group in which this node is contained
+
+#### Defined in
+
+[src/node/Node.ts:92](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Node.ts#L92)
+
+***
+
+### info
+
+> **info**: `null` | [`NodeInfo`](/4.0.1/api/type-aliases/nodeinfo/)
+
+Information about lavalink node
+
+#### Defined in
+
+[src/node/Node.ts:120](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Node.ts#L120)
+
+***
+
+### manager
+
+> `readonly` **manager**: [`Shoukaku`](/4.0.1/api/classes/shoukaku/)
+
+Shoukaku class
+
+#### Defined in
+
+[src/node/Node.ts:80](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Node.ts#L80)
+
+***
+
+### name
+
+> `readonly` **name**: `string`
+
+Name of this node
+
+#### Defined in
+
+[src/node/Node.ts:88](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Node.ts#L88)
+
+***
+
+### reconnects
+
+> **reconnects**: `number`
+
+The number of reconnects to Lavalink
+
+#### Defined in
+
+[src/node/Node.ts:108](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Node.ts#L108)
+
+***
+
+### rest
+
+> `readonly` **rest**: [`Rest`](/4.0.1/api/classes/rest/)
+
+Lavalink rest API
+
+#### Defined in
+
+[src/node/Node.ts:84](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Node.ts#L84)
+
+***
+
+### sessionId
+
+> **sessionId**: `null` | `string`
+
+SessionId of this Lavalink connection (not to be confused with Discord SessionId)
+
+#### Defined in
+
+[src/node/Node.ts:128](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Node.ts#L128)
+
+***
+
+### state
+
+> **state**: [`State`](/4.0.1/api/namespaces/constants/enumerations/state/)
+
+The state of this connection
+
+#### Defined in
+
+[src/node/Node.ts:112](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Node.ts#L112)
+
+***
+
+### stats
+
+> **stats**: `null` | [`NodeStats`](/4.0.1/api/interfaces/nodestats/)
+
+Statistics from Lavalink
+
+#### Defined in
+
+[src/node/Node.ts:116](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Node.ts#L116)
+
+***
+
+### version
+
+> `readonly` **version**: `string`
+
+Websocket version this node will use
+
+#### Defined in
+
+[src/node/Node.ts:96](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Node.ts#L96)
+
+***
+
+### ws
+
+> **ws**: `null` | `WebSocket`
+
+Websocket instance
+
+#### Defined in
+
+[src/node/Node.ts:124](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Node.ts#L124)
+
+***
+
+### captureRejectionSymbol
+
+> `readonly` `static` **captureRejectionSymbol**: *typeof* [`captureRejectionSymbol`](/4.0.1/api/classes/connection/#capturerejectionsymbol)
+
+Value: `Symbol.for('nodejs.rejection')`
+
+See how to write a custom `rejection handler`.
+
+#### Since
+
+v13.4.0, v12.16.0
+
+#### Inherited from
+
+`EventEmitter.captureRejectionSymbol`
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:452
+
+***
+
+### captureRejections
+
+> `static` **captureRejections**: `boolean`
+
+Value: [boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type)
+
+Change the default `captureRejections` option on all new `EventEmitter` objects.
+
+#### Since
+
+v13.4.0, v12.16.0
+
+#### Inherited from
+
+`EventEmitter.captureRejections`
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:459
+
+***
+
+### defaultMaxListeners
+
+> `static` **defaultMaxListeners**: `number`
+
+By default, a maximum of `10` listeners can be registered for any single
+event. This limit can be changed for individual `EventEmitter` instances
+using the `emitter.setMaxListeners(n)` method. To change the default
+for *all*`EventEmitter` instances, the `events.defaultMaxListeners` property
+can be used. If this value is not a positive number, a `RangeError` is thrown.
+
+Take caution when setting the `events.defaultMaxListeners` because the
+change affects *all* `EventEmitter` instances, including those created before
+the change is made. However, calling `emitter.setMaxListeners(n)` still has
+precedence over `events.defaultMaxListeners`.
+
+This is not a hard limit. The `EventEmitter` instance will allow
+more listeners to be added but will output a trace warning to stderr indicating
+that a "possible EventEmitter memory leak" has been detected. For any single
+`EventEmitter`, the `emitter.getMaxListeners()` and `emitter.setMaxListeners()` methods can be used to
+temporarily avoid this warning:
+
+```js
+import { EventEmitter } from 'node:events';
+const emitter = new EventEmitter();
+emitter.setMaxListeners(emitter.getMaxListeners() + 1);
+emitter.once('event', () => {
+ // do stuff
+ emitter.setMaxListeners(Math.max(emitter.getMaxListeners() - 1, 0));
+});
+```
+
+The `--trace-warnings` command-line flag can be used to display the
+stack trace for such warnings.
+
+The emitted warning can be inspected with `process.on('warning')` and will
+have the additional `emitter`, `type`, and `count` properties, referring to
+the event emitter instance, the event's name and the number of attached
+listeners, respectively.
+Its `name` property is set to `'MaxListenersExceededWarning'`.
+
+#### Since
+
+v0.11.2
+
+#### Inherited from
+
+`EventEmitter.defaultMaxListeners`
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:498
+
+***
+
+### errorMonitor
+
+> `readonly` `static` **errorMonitor**: *typeof* [`errorMonitor`](/4.0.1/api/classes/connection/#errormonitor)
+
+This symbol shall be used to install a listener for only monitoring `'error'` events. Listeners installed using this symbol are called before the regular `'error'` listeners are called.
+
+Installing a listener using this symbol does not change the behavior once an `'error'` event is emitted. Therefore, the process will still crash if no
+regular `'error'` listener is installed.
+
+#### Since
+
+v13.6.0, v12.17.0
+
+#### Inherited from
+
+`EventEmitter.errorMonitor`
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:445
+
+## Methods
+
+### \[captureRejectionSymbol]\()?
+
+> `optional` **\[captureRejectionSymbol]**\<`K`>(`error`, `event`, ...`args`): `void`
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **error**: `Error`
+
+β’ **event**: `string` | `symbol`
+
+β’ ...**args**: `AnyRest`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+`EventEmitter.[captureRejectionSymbol]`
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:136
+
+***
+
+### addListener()
+
+> **addListener**\<`K`>(`eventName`, `listener`): `this`
+
+Alias for `emitter.on(eventName, listener)`.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+β’ **listener**
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+`EventEmitter.addListener`
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:597
+
+***
+
+### connect()
+
+> **connect**(): `void`
+
+Connect to Lavalink
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/node/Node.ts:196](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Node.ts#L196)
+
+***
+
+### disconnect()
+
+> **disconnect**(`code`, `reason`?): `void`
+
+Disconnect from lavalink
+
+#### Parameters
+
+β’ **code**: `number`
+
+Status code
+
+β’ **reason?**: `string`
+
+Reason for disconnect
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/node/Node.ts:226](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Node.ts#L226)
+
+***
+
+### emit()
+
+> **emit**\<`K`>(`eventName`, ...`args`): `boolean`
+
+Synchronously calls each of the listeners registered for the event named `eventName`, in the order they were registered, passing the supplied arguments
+to each.
+
+Returns `true` if the event had listeners, `false` otherwise.
+
+```js
+import { EventEmitter } from 'node:events';
+const myEmitter = new EventEmitter();
+
+// First listener
+myEmitter.on('event', function firstListener() {
+ console.log('Helloooo! first listener');
+});
+// Second listener
+myEmitter.on('event', function secondListener(arg1, arg2) {
+ console.log(`event with parameters ${arg1}, ${arg2} in second listener`);
+});
+// Third listener
+myEmitter.on('event', function thirdListener(...args) {
+ const parameters = args.join(', ');
+ console.log(`event with parameters ${parameters} in third listener`);
+});
+
+console.log(myEmitter.listeners('event'));
+
+myEmitter.emit('event', 1, 2, 3, 4, 5);
+
+// Prints:
+// [
+// [Function: firstListener],
+// [Function: secondListener],
+// [Function: thirdListener]
+// ]
+// Helloooo! first listener
+// event with parameters 1, 2 in second listener
+// event with parameters 1, 2, 3, 4, 5 in third listener
+```
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+β’ ...**args**: `AnyRest`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+`EventEmitter.emit`
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:859
+
+***
+
+### error()
+
+> **error**(`error`): `void`
+
+To emit error events easily
+
+#### Parameters
+
+β’ **error**: `unknown`
+
+error message
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/node/Node.ts:318](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Node.ts#L318)
+
+***
+
+### eventNames()
+
+> **eventNames**(): (`string` | `symbol`)\[]
+
+Returns an array listing the events for which the emitter has registered
+listeners. The values in the array are strings or `Symbol`s.
+
+```js
+import { EventEmitter } from 'node:events';
+
+const myEE = new EventEmitter();
+myEE.on('foo', () => {});
+myEE.on('bar', () => {});
+
+const sym = Symbol('symbol');
+myEE.on(sym, () => {});
+
+console.log(myEE.eventNames());
+// Prints: [ 'foo', 'bar', Symbol(symbol) ]
+```
+
+#### Returns
+
+(`string` | `symbol`)\[]
+
+#### Inherited from
+
+`EventEmitter.eventNames`
+
+#### Since
+
+v6.0.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:922
+
+***
+
+### getMaxListeners()
+
+> **getMaxListeners**(): `number`
+
+Returns the current max listener value for the `EventEmitter` which is either
+set by `emitter.setMaxListeners(n)` or defaults to [defaultMaxListeners](../../../../../../api/classes/node/#defaultmaxlisteners).
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+`EventEmitter.getMaxListeners`
+
+#### Since
+
+v1.0.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:774
+
+***
+
+### listenerCount()
+
+> **listenerCount**\<`K`>(`eventName`, `listener`?): `number`
+
+Returns the number of listeners listening for the event named `eventName`.
+If `listener` is provided, it will return how many times the listener is found
+in the list of the listeners of the event.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+The name of the event being listened for
+
+β’ **listener?**: `Function`
+
+The event handler function
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+`EventEmitter.listenerCount`
+
+#### Since
+
+v3.2.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:868
+
+***
+
+### listeners()
+
+> **listeners**\<`K`>(`eventName`): `Function`\[]
+
+Returns a copy of the array of listeners for the event named `eventName`.
+
+```js
+server.on('connection', (stream) => {
+ console.log('someone connected!');
+});
+console.log(util.inspect(server.listeners('connection')));
+// Prints: [ [Function] ]
+```
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+#### Returns
+
+`Function`\[]
+
+#### Inherited from
+
+`EventEmitter.listeners`
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:787
+
+***
+
+### off()
+
+> **off**\<`K`>(`eventName`, `listener`): `this`
+
+Alias for `emitter.removeListener()`.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+β’ **listener**
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+`EventEmitter.off`
+
+#### Since
+
+v10.0.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:747
+
+***
+
+### on()
+
+> **on**\<`K`>(`eventName`, `listener`): `this`
+
+Adds the `listener` function to the end of the listeners array for the event
+named `eventName`. No checks are made to see if the `listener` has already
+been added. Multiple calls passing the same combination of `eventName` and
+`listener` will result in the `listener` being added, and called, multiple times.
+
+```js
+server.on('connection', (stream) => {
+ console.log('someone connected!');
+});
+```
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+By default, event listeners are invoked in the order they are added. The `emitter.prependListener()` method can be used as an alternative to add the
+event listener to the beginning of the listeners array.
+
+```js
+import { EventEmitter } from 'node:events';
+const myEE = new EventEmitter();
+myEE.on('foo', () => console.log('a'));
+myEE.prependListener('foo', () => console.log('b'));
+myEE.emit('foo');
+// Prints:
+// b
+// a
+```
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+The name of the event.
+
+β’ **listener**
+
+The callback function
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+`EventEmitter.on`
+
+#### Since
+
+v0.1.101
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:629
+
+***
+
+### once()
+
+> **once**\<`K`>(`eventName`, `listener`): `this`
+
+Adds a **one-time** `listener` function for the event named `eventName`. The
+next time `eventName` is triggered, this listener is removed and then invoked.
+
+```js
+server.once('connection', (stream) => {
+ console.log('Ah, we have our first user!');
+});
+```
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+By default, event listeners are invoked in the order they are added. The `emitter.prependOnceListener()` method can be used as an alternative to add the
+event listener to the beginning of the listeners array.
+
+```js
+import { EventEmitter } from 'node:events';
+const myEE = new EventEmitter();
+myEE.once('foo', () => console.log('a'));
+myEE.prependOnceListener('foo', () => console.log('b'));
+myEE.emit('foo');
+// Prints:
+// b
+// a
+```
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+The name of the event.
+
+β’ **listener**
+
+The callback function
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+`EventEmitter.once`
+
+#### Since
+
+v0.3.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:659
+
+***
+
+### prependListener()
+
+> **prependListener**\<`K`>(`eventName`, `listener`): `this`
+
+Adds the `listener` function to the *beginning* of the listeners array for the
+event named `eventName`. No checks are made to see if the `listener` has
+already been added. Multiple calls passing the same combination of `eventName`
+and `listener` will result in the `listener` being added, and called, multiple times.
+
+```js
+server.prependListener('connection', (stream) => {
+ console.log('someone connected!');
+});
+```
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+The name of the event.
+
+β’ **listener**
+
+The callback function
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+`EventEmitter.prependListener`
+
+#### Since
+
+v6.0.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:886
+
+***
+
+### prependOnceListener()
+
+> **prependOnceListener**\<`K`>(`eventName`, `listener`): `this`
+
+Adds a **one-time**`listener` function for the event named `eventName` to the *beginning* of the listeners array. The next time `eventName` is triggered, this
+listener is removed, and then invoked.
+
+```js
+server.prependOnceListener('connection', (stream) => {
+ console.log('Ah, we have our first user!');
+});
+```
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+The name of the event.
+
+β’ **listener**
+
+The callback function
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+`EventEmitter.prependOnceListener`
+
+#### Since
+
+v6.0.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:902
+
+***
+
+### rawListeners()
+
+> **rawListeners**\<`K`>(`eventName`): `Function`\[]
+
+Returns a copy of the array of listeners for the event named `eventName`,
+including any wrappers (such as those created by `.once()`).
+
+```js
+import { EventEmitter } from 'node:events';
+const emitter = new EventEmitter();
+emitter.once('log', () => console.log('log once'));
+
+// Returns a new Array with a function `onceWrapper` which has a property
+// `listener` which contains the original listener bound above
+const listeners = emitter.rawListeners('log');
+const logFnWrapper = listeners[0];
+
+// Logs "log once" to the console and does not unbind the `once` event
+logFnWrapper.listener();
+
+// Logs "log once" to the console and removes the listener
+logFnWrapper();
+
+emitter.on('log', () => console.log('log persistently'));
+// Will return a new Array with a single function bound by `.on()` above
+const newListeners = emitter.rawListeners('log');
+
+// Logs "log persistently" twice
+newListeners[0]();
+emitter.emit('log');
+```
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+#### Returns
+
+`Function`\[]
+
+#### Inherited from
+
+`EventEmitter.rawListeners`
+
+#### Since
+
+v9.4.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:818
+
+***
+
+### removeAllListeners()
+
+> **removeAllListeners**(`eventName`?): `this`
+
+Removes all listeners, or those of the specified `eventName`.
+
+It is bad practice to remove listeners added elsewhere in the code,
+particularly when the `EventEmitter` instance was created by some other
+component or module (e.g. sockets or file streams).
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Parameters
+
+β’ **eventName?**: `string` | `symbol`
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+`EventEmitter.removeAllListeners`
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:758
+
+***
+
+### removeListener()
+
+> **removeListener**\<`K`>(`eventName`, `listener`): `this`
+
+Removes the specified `listener` from the listener array for the event named `eventName`.
+
+```js
+const callback = (stream) => {
+ console.log('someone connected!');
+};
+server.on('connection', callback);
+// ...
+server.removeListener('connection', callback);
+```
+
+`removeListener()` will remove, at most, one instance of a listener from the
+listener array. If any single listener has been added multiple times to the
+listener array for the specified `eventName`, then `removeListener()` must be
+called multiple times to remove each instance.
+
+Once an event is emitted, all listeners attached to it at the
+time of emitting are called in order. This implies that any `removeListener()` or `removeAllListeners()` calls *after* emitting and *before* the last listener finishes execution
+will not remove them from`emit()` in progress. Subsequent events behave as expected.
+
+```js
+import { EventEmitter } from 'node:events';
+class MyEmitter extends EventEmitter {}
+const myEmitter = new MyEmitter();
+
+const callbackA = () => {
+ console.log('A');
+ myEmitter.removeListener('event', callbackB);
+};
+
+const callbackB = () => {
+ console.log('B');
+};
+
+myEmitter.on('event', callbackA);
+
+myEmitter.on('event', callbackB);
+
+// callbackA removes listener callbackB but it will still be called.
+// Internal listener array at time of emit [callbackA, callbackB]
+myEmitter.emit('event');
+// Prints:
+// A
+// B
+
+// callbackB is now removed.
+// Internal listener array [callbackA]
+myEmitter.emit('event');
+// Prints:
+// A
+```
+
+Because listeners are managed using an internal array, calling this will
+change the position indices of any listener registered *after* the listener
+being removed. This will not impact the order in which listeners are called,
+but it means that any copies of the listener array as returned by
+the `emitter.listeners()` method will need to be recreated.
+
+When a single function has been added as a handler multiple times for a single
+event (as in the example below), `removeListener()` will remove the most
+recently added instance. In the example the `once('ping')` listener is removed:
+
+```js
+import { EventEmitter } from 'node:events';
+const ee = new EventEmitter();
+
+function pong() {
+ console.log('pong');
+}
+
+ee.on('ping', pong);
+ee.once('ping', pong);
+ee.removeListener('ping', pong);
+
+ee.emit('ping');
+ee.emit('ping');
+```
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+β’ **listener**
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+`EventEmitter.removeListener`
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:742
+
+***
+
+### setMaxListeners()
+
+> **setMaxListeners**(`n`): `this`
+
+By default `EventEmitter`s will print a warning if more than `10` listeners are
+added for a particular event. This is a useful default that helps finding
+memory leaks. The `emitter.setMaxListeners()` method allows the limit to be
+modified for this specific `EventEmitter` instance. The value can be set to `Infinity` (or `0`) to indicate an unlimited number of listeners.
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Parameters
+
+β’ **n**: `number`
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+`EventEmitter.setMaxListeners`
+
+#### Since
+
+v0.3.5
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:768
+
+***
+
+### addAbortListener()
+
+> `static` **addAbortListener**(`signal`, `resource`): `Disposable`
+
+Listens once to the `abort` event on the provided `signal`.
+
+Listening to the `abort` event on abort signals is unsafe and may
+lead to resource leaks since another third party with the signal can
+call `e.stopImmediatePropagation()`. Unfortunately Node.js cannot change
+this since it would violate the web standard. Additionally, the original
+API makes it easy to forget to remove listeners.
+
+This API allows safely using `AbortSignal`s in Node.js APIs by solving these
+two issues by listening to the event such that `stopImmediatePropagation` does
+not prevent the listener from running.
+
+Returns a disposable so that it may be unsubscribed from more easily.
+
+```js
+import { addAbortListener } from 'node:events';
+
+function example(signal) {
+ let disposable;
+ try {
+ signal.addEventListener('abort', (e) => e.stopImmediatePropagation());
+ disposable = addAbortListener(signal, (e) => {
+ // Do something when signal is aborted.
+ });
+ } finally {
+ disposable?.[Symbol.dispose]();
+ }
+}
+```
+
+:::caution\[Experimental]
+This API should not be used in production and may be trimmed from a public release.
+:::
+
+#### Parameters
+
+β’ **signal**: `AbortSignal`
+
+β’ **resource**
+
+#### Returns
+
+`Disposable`
+
+Disposable that removes the `abort` listener.
+
+#### Inherited from
+
+`EventEmitter.addAbortListener`
+
+#### Since
+
+v20.5.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:437
+
+***
+
+### getEventListeners()
+
+> `static` **getEventListeners**(`emitter`, `name`): `Function`\[]
+
+Returns a copy of the array of listeners for the event named `eventName`.
+
+For `EventEmitter`s this behaves exactly the same as calling `.listeners` on
+the emitter.
+
+For `EventTarget`s this is the only way to get the event listeners for the
+event target. This is useful for debugging and diagnostic purposes.
+
+```js
+import { getEventListeners, EventEmitter } from 'node:events';
+
+{
+ const ee = new EventEmitter();
+ const listener = () => console.log('Events are fun');
+ ee.on('foo', listener);
+ console.log(getEventListeners(ee, 'foo')); // [ [Function: listener] ]
+}
+{
+ const et = new EventTarget();
+ const listener = () => console.log('Events are fun');
+ et.addEventListener('foo', listener);
+ console.log(getEventListeners(et, 'foo')); // [ [Function: listener] ]
+}
+```
+
+#### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`> | `EventTarget`
+
+β’ **name**: `string` | `symbol`
+
+#### Returns
+
+`Function`\[]
+
+#### Inherited from
+
+`EventEmitter.getEventListeners`
+
+#### Since
+
+v15.2.0, v14.17.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:358
+
+***
+
+### getMaxListeners()
+
+> `static` **getMaxListeners**(`emitter`): `number`
+
+Returns the currently set max amount of listeners.
+
+For `EventEmitter`s this behaves exactly the same as calling `.getMaxListeners` on
+the emitter.
+
+For `EventTarget`s this is the only way to get the max event listeners for the
+event target. If the number of event handlers on a single EventTarget exceeds
+the max set, the EventTarget will print a warning.
+
+```js
+import { getMaxListeners, setMaxListeners, EventEmitter } from 'node:events';
+
+{
+ const ee = new EventEmitter();
+ console.log(getMaxListeners(ee)); // 10
+ setMaxListeners(11, ee);
+ console.log(getMaxListeners(ee)); // 11
+}
+{
+ const et = new EventTarget();
+ console.log(getMaxListeners(et)); // 10
+ setMaxListeners(11, et);
+ console.log(getMaxListeners(et)); // 11
+}
+```
+
+#### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`> | `EventTarget`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+`EventEmitter.getMaxListeners`
+
+#### Since
+
+v19.9.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:387
+
+***
+
+### ~~listenerCount()~~
+
+> `static` **listenerCount**(`emitter`, `eventName`): `number`
+
+A class method that returns the number of listeners for the given `eventName` registered on the given `emitter`.
+
+```js
+import { EventEmitter, listenerCount } from 'node:events';
+
+const myEmitter = new EventEmitter();
+myEmitter.on('event', () => {});
+myEmitter.on('event', () => {});
+console.log(listenerCount(myEmitter, 'event'));
+// Prints: 2
+```
+
+:::caution\[Deprecated]
+Since v3.2.0 - Use `listenerCount` instead.
+:::
+
+#### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`>
+
+The emitter to query
+
+β’ **eventName**: `string` | `symbol`
+
+The event name
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+`EventEmitter.listenerCount`
+
+#### Since
+
+v0.9.12
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:330
+
+***
+
+### on()
+
+#### on(emitter, eventName, options)
+
+> `static` **on**(`emitter`, `eventName`, `options`?): `AsyncIterableIterator`\<`any`\[]>
+
+```js
+import { on, EventEmitter } from 'node:events';
+import process from 'node:process';
+
+const ee = new EventEmitter();
+
+// Emit later on
+process.nextTick(() => {
+ ee.emit('foo', 'bar');
+ ee.emit('foo', 42);
+});
+
+for await (const event of on(ee, 'foo')) {
+ // The execution of this inner block is synchronous and it
+ // processes one event at a time (even with await). Do not use
+ // if concurrent execution is required.
+ console.log(event); // prints ['bar'] [42]
+}
+// Unreachable here
+```
+
+Returns an `AsyncIterator` that iterates `eventName` events. It will throw
+if the `EventEmitter` emits `'error'`. It removes all listeners when
+exiting the loop. The `value` returned by each iteration is an array
+composed of the emitted event arguments.
+
+An `AbortSignal` can be used to cancel waiting on events:
+
+```js
+import { on, EventEmitter } from 'node:events';
+import process from 'node:process';
+
+const ac = new AbortController();
+
+(async () => {
+ const ee = new EventEmitter();
+
+ // Emit later on
+ process.nextTick(() => {
+ ee.emit('foo', 'bar');
+ ee.emit('foo', 42);
+ });
+
+ for await (const event of on(ee, 'foo', { signal: ac.signal })) {
+ // The execution of this inner block is synchronous and it
+ // processes one event at a time (even with await). Do not use
+ // if concurrent execution is required.
+ console.log(event); // prints ['bar'] [42]
+ }
+ // Unreachable here
+})();
+
+process.nextTick(() => ac.abort());
+```
+
+Use the `close` option to specify an array of event names that will end the iteration:
+
+```js
+import { on, EventEmitter } from 'node:events';
+import process from 'node:process';
+
+const ee = new EventEmitter();
+
+// Emit later on
+process.nextTick(() => {
+ ee.emit('foo', 'bar');
+ ee.emit('foo', 42);
+ ee.emit('close');
+});
+
+for await (const event of on(ee, 'foo', { close: ['close'] })) {
+ console.log(event); // prints ['bar'] [42]
+}
+// the loop will exit after 'close' is emitted
+console.log('done'); // prints 'done'
+```
+
+##### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`>
+
+β’ **eventName**: `string` | `symbol`
+
+β’ **options?**: `StaticEventEmitterIteratorOptions`
+
+##### Returns
+
+`AsyncIterableIterator`\<`any`\[]>
+
+An `AsyncIterator` that iterates `eventName` events emitted by the `emitter`
+
+##### Inherited from
+
+`EventEmitter.on`
+
+##### Since
+
+v13.6.0, v12.16.0
+
+##### Defined in
+
+node\_modules/@types/node/events.d.ts:303
+
+#### on(emitter, eventName, options)
+
+> `static` **on**(`emitter`, `eventName`, `options`?): `AsyncIterableIterator`\<`any`\[]>
+
+##### Parameters
+
+β’ **emitter**: `EventTarget`
+
+β’ **eventName**: `string`
+
+β’ **options?**: `StaticEventEmitterIteratorOptions`
+
+##### Returns
+
+`AsyncIterableIterator`\<`any`\[]>
+
+##### Inherited from
+
+`EventEmitter.on`
+
+##### Defined in
+
+node\_modules/@types/node/events.d.ts:308
+
+***
+
+### once()
+
+#### once(emitter, eventName, options)
+
+> `static` **once**(`emitter`, `eventName`, `options`?): `Promise`\<`any`\[]>
+
+Creates a `Promise` that is fulfilled when the `EventEmitter` emits the given
+event or that is rejected if the `EventEmitter` emits `'error'` while waiting.
+The `Promise` will resolve with an array of all the arguments emitted to the
+given event.
+
+This method is intentionally generic and works with the web platform [EventTarget](https://dom.spec.whatwg.org/#interface-eventtarget) interface, which has no special`'error'` event
+semantics and does not listen to the `'error'` event.
+
+```js
+import { once, EventEmitter } from 'node:events';
+import process from 'node:process';
+
+const ee = new EventEmitter();
+
+process.nextTick(() => {
+ ee.emit('myevent', 42);
+});
+
+const [value] = await once(ee, 'myevent');
+console.log(value);
+
+const err = new Error('kaboom');
+process.nextTick(() => {
+ ee.emit('error', err);
+});
+
+try {
+ await once(ee, 'myevent');
+} catch (err) {
+ console.error('error happened', err);
+}
+```
+
+The special handling of the `'error'` event is only used when `events.once()` is used to wait for another event. If `events.once()` is used to wait for the
+'`error'` event itself, then it is treated as any other kind of event without
+special handling:
+
+```js
+import { EventEmitter, once } from 'node:events';
+
+const ee = new EventEmitter();
+
+once(ee, 'error')
+ .then(([err]) => console.log('ok', err.message))
+ .catch((err) => console.error('error', err.message));
+
+ee.emit('error', new Error('boom'));
+
+// Prints: ok boom
+```
+
+An `AbortSignal` can be used to cancel waiting for the event:
+
+```js
+import { EventEmitter, once } from 'node:events';
+
+const ee = new EventEmitter();
+const ac = new AbortController();
+
+async function foo(emitter, event, signal) {
+ try {
+ await once(emitter, event, { signal });
+ console.log('event emitted!');
+ } catch (error) {
+ if (error.name === 'AbortError') {
+ console.error('Waiting for the event was canceled!');
+ } else {
+ console.error('There was an error', error.message);
+ }
+ }
+}
+
+foo(ee, 'foo', ac.signal);
+ac.abort(); // Abort waiting for the event
+ee.emit('foo'); // Prints: Waiting for the event was canceled!
+```
+
+##### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`>
+
+β’ **eventName**: `string` | `symbol`
+
+β’ **options?**: `StaticEventEmitterOptions`
+
+##### Returns
+
+`Promise`\<`any`\[]>
+
+##### Inherited from
+
+`EventEmitter.once`
+
+##### Since
+
+v11.13.0, v10.16.0
+
+##### Defined in
+
+node\_modules/@types/node/events.d.ts:217
+
+#### once(emitter, eventName, options)
+
+> `static` **once**(`emitter`, `eventName`, `options`?): `Promise`\<`any`\[]>
+
+##### Parameters
+
+β’ **emitter**: `EventTarget`
+
+β’ **eventName**: `string`
+
+β’ **options?**: `StaticEventEmitterOptions`
+
+##### Returns
+
+`Promise`\<`any`\[]>
+
+##### Inherited from
+
+`EventEmitter.once`
+
+##### Defined in
+
+node\_modules/@types/node/events.d.ts:222
+
+***
+
+### setMaxListeners()
+
+> `static` **setMaxListeners**(`n`?, ...`eventTargets`?): `void`
+
+```js
+import { setMaxListeners, EventEmitter } from 'node:events';
+
+const target = new EventTarget();
+const emitter = new EventEmitter();
+
+setMaxListeners(5, target, emitter);
+```
+
+#### Parameters
+
+β’ **n?**: `number`
+
+A non-negative number. The maximum number of listeners per `EventTarget` event.
+
+β’ ...**eventTargets?**: (`EventEmitter`\<`DefaultEventMap`> | `EventTarget`)\[]
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+`EventEmitter.setMaxListeners`
+
+#### Since
+
+v15.4.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:402
diff --git a/src/content/docs/4.0.1/api/classes/Player.md b/src/content/docs/4.0.1/api/classes/Player.md
new file mode 100644
index 0000000..fba97c7
--- /dev/null
+++ b/src/content/docs/4.0.1/api/classes/Player.md
@@ -0,0 +1,2171 @@
+---
+editUrl: false
+next: false
+prev: false
+title: Player
+slug: 4.0.1/apiclasses/player
+---
+
+Wrapper object around Lavalink
+
+## Extends
+
+* `EventEmitter`
+
+## Constructors
+
+### new Player()
+
+> **new Player**(`guildId`, `node`): [`Player`](/4.0.1/api/classes/player/)
+
+#### Parameters
+
+β’ **guildId**: `string`
+
+β’ **node**: [`Node`](/4.0.1/api/classes/node/)
+
+An instance of Node (Lavalink API wrapper)
+
+#### Returns
+
+[`Player`](/4.0.1/api/classes/player/)
+
+#### Defined in
+
+[src/guild/Player.ts:235](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L235)
+
+## Properties
+
+### filters
+
+> **filters**: [`FilterOptions`](/4.0.1/api/interfaces/filteroptions/)
+
+Filters on current track
+
+#### Defined in
+
+[src/guild/Player.ts:230](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L230)
+
+***
+
+### guildId
+
+> `readonly` **guildId**: `string`
+
+GuildId of this player
+
+#### Defined in
+
+[src/guild/Player.ts:202](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L202)
+
+***
+
+### node
+
+> **node**: [`Node`](/4.0.1/api/classes/node/)
+
+Lavalink node this player is connected to
+
+#### Defined in
+
+[src/guild/Player.ts:206](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L206)
+
+***
+
+### paused
+
+> **paused**: `boolean`
+
+Pause status in current player
+
+#### Defined in
+
+[src/guild/Player.ts:218](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L218)
+
+***
+
+### ping
+
+> **ping**: `number`
+
+Ping represents the number of milliseconds between heartbeat and ack. Could be `-1` if not connected
+
+#### Defined in
+
+[src/guild/Player.ts:222](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L222)
+
+***
+
+### position
+
+> **position**: `number`
+
+Position in ms of current track
+
+#### Defined in
+
+[src/guild/Player.ts:226](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L226)
+
+***
+
+### track
+
+> **track**: `null` | `string`
+
+ID of current track
+
+#### Defined in
+
+[src/guild/Player.ts:210](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L210)
+
+***
+
+### volume
+
+> **volume**: `number`
+
+Global volume of the player
+
+#### Defined in
+
+[src/guild/Player.ts:214](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L214)
+
+***
+
+### captureRejectionSymbol
+
+> `readonly` `static` **captureRejectionSymbol**: *typeof* [`captureRejectionSymbol`](/4.0.1/api/classes/connection/#capturerejectionsymbol)
+
+Value: `Symbol.for('nodejs.rejection')`
+
+See how to write a custom `rejection handler`.
+
+#### Since
+
+v13.4.0, v12.16.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:452
+
+***
+
+### captureRejections
+
+> `static` **captureRejections**: `boolean`
+
+Value: [boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type)
+
+Change the default `captureRejections` option on all new `EventEmitter` objects.
+
+#### Since
+
+v13.4.0, v12.16.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:459
+
+***
+
+### defaultMaxListeners
+
+> `static` **defaultMaxListeners**: `number`
+
+By default, a maximum of `10` listeners can be registered for any single
+event. This limit can be changed for individual `EventEmitter` instances
+using the `emitter.setMaxListeners(n)` method. To change the default
+for *all*`EventEmitter` instances, the `events.defaultMaxListeners` property
+can be used. If this value is not a positive number, a `RangeError` is thrown.
+
+Take caution when setting the `events.defaultMaxListeners` because the
+change affects *all* `EventEmitter` instances, including those created before
+the change is made. However, calling `emitter.setMaxListeners(n)` still has
+precedence over `events.defaultMaxListeners`.
+
+This is not a hard limit. The `EventEmitter` instance will allow
+more listeners to be added but will output a trace warning to stderr indicating
+that a "possible EventEmitter memory leak" has been detected. For any single
+`EventEmitter`, the `emitter.getMaxListeners()` and `emitter.setMaxListeners()` methods can be used to
+temporarily avoid this warning:
+
+```js
+import { EventEmitter } from 'node:events';
+const emitter = new EventEmitter();
+emitter.setMaxListeners(emitter.getMaxListeners() + 1);
+emitter.once('event', () => {
+ // do stuff
+ emitter.setMaxListeners(Math.max(emitter.getMaxListeners() - 1, 0));
+});
+```
+
+The `--trace-warnings` command-line flag can be used to display the
+stack trace for such warnings.
+
+The emitted warning can be inspected with `process.on('warning')` and will
+have the additional `emitter`, `type`, and `count` properties, referring to
+the event emitter instance, the event's name and the number of attached
+listeners, respectively.
+Its `name` property is set to `'MaxListenersExceededWarning'`.
+
+#### Since
+
+v0.11.2
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:498
+
+***
+
+### errorMonitor
+
+> `readonly` `static` **errorMonitor**: *typeof* [`errorMonitor`](/4.0.1/api/classes/connection/#errormonitor)
+
+This symbol shall be used to install a listener for only monitoring `'error'` events. Listeners installed using this symbol are called before the regular `'error'` listeners are called.
+
+Installing a listener using this symbol does not change the behavior once an `'error'` event is emitted. Therefore, the process will still crash if no
+regular `'error'` listener is installed.
+
+#### Since
+
+v13.6.0, v12.17.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:445
+
+## Accessors
+
+### data
+
+> `get` **data**(): [`UpdatePlayerInfo`](/4.0.1/api/interfaces/updateplayerinfo/)
+
+#### Returns
+
+[`UpdatePlayerInfo`](/4.0.1/api/interfaces/updateplayerinfo/)
+
+#### Defined in
+
+[src/guild/Player.ts:247](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L247)
+
+## Methods
+
+### \[captureRejectionSymbol]\()?
+
+> `optional` **\[captureRejectionSymbol]**\<`K`>(`error`, `event`, ...`args`): `void`
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **error**: `Error`
+
+β’ **event**: `string` | `symbol`
+
+β’ ...**args**: `AnyRest`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:136
+
+***
+
+### addListener()
+
+> **addListener**\<`K`>(`eventName`, `listener`): `this`
+
+Alias for `emitter.on(eventName, listener)`.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+β’ **listener**
+
+#### Returns
+
+`this`
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:597
+
+***
+
+### clearFilters()
+
+> **clearFilters**(): `Promise`\<`void`>
+
+Clear all filters applied to the currently playing track
+
+#### Returns
+
+`Promise`\<`void`>
+
+#### Defined in
+
+[src/guild/Player.ts:479](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L479)
+
+***
+
+### destroy()
+
+> **destroy**(): `Promise`\<`void`>
+
+Destroys the player in remote lavalink side
+
+#### Returns
+
+`Promise`\<`void`>
+
+#### Defined in
+
+[src/guild/Player.ts:295](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L295)
+
+***
+
+### emit()
+
+> **emit**\<`K`>(`eventName`, ...`args`): `boolean`
+
+Synchronously calls each of the listeners registered for the event named `eventName`, in the order they were registered, passing the supplied arguments
+to each.
+
+Returns `true` if the event had listeners, `false` otherwise.
+
+```js
+import { EventEmitter } from 'node:events';
+const myEmitter = new EventEmitter();
+
+// First listener
+myEmitter.on('event', function firstListener() {
+ console.log('Helloooo! first listener');
+});
+// Second listener
+myEmitter.on('event', function secondListener(arg1, arg2) {
+ console.log(`event with parameters ${arg1}, ${arg2} in second listener`);
+});
+// Third listener
+myEmitter.on('event', function thirdListener(...args) {
+ const parameters = args.join(', ');
+ console.log(`event with parameters ${parameters} in third listener`);
+});
+
+console.log(myEmitter.listeners('event'));
+
+myEmitter.emit('event', 1, 2, 3, 4, 5);
+
+// Prints:
+// [
+// [Function: firstListener],
+// [Function: secondListener],
+// [Function: thirdListener]
+// ]
+// Helloooo! first listener
+// event with parameters 1, 2 in second listener
+// event with parameters 1, 2, 3, 4, 5 in third listener
+```
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+β’ ...**args**: `AnyRest`
+
+#### Returns
+
+`boolean`
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:859
+
+***
+
+### eventNames()
+
+> **eventNames**(): (`string` | `symbol`)\[]
+
+Returns an array listing the events for which the emitter has registered
+listeners. The values in the array are strings or `Symbol`s.
+
+```js
+import { EventEmitter } from 'node:events';
+
+const myEE = new EventEmitter();
+myEE.on('foo', () => {});
+myEE.on('bar', () => {});
+
+const sym = Symbol('symbol');
+myEE.on(sym, () => {});
+
+console.log(myEE.eventNames());
+// Prints: [ 'foo', 'bar', Symbol(symbol) ]
+```
+
+#### Returns
+
+(`string` | `symbol`)\[]
+
+#### Since
+
+v6.0.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:922
+
+***
+
+### getMaxListeners()
+
+> **getMaxListeners**(): `number`
+
+Returns the current max listener value for the `EventEmitter` which is either
+set by `emitter.setMaxListeners(n)` or defaults to [defaultMaxListeners](../../../../../../api/classes/player/#defaultmaxlisteners).
+
+#### Returns
+
+`number`
+
+#### Since
+
+v1.0.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:774
+
+***
+
+### listenerCount()
+
+> **listenerCount**\<`K`>(`eventName`, `listener`?): `number`
+
+Returns the number of listeners listening for the event named `eventName`.
+If `listener` is provided, it will return how many times the listener is found
+in the list of the listeners of the event.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+The name of the event being listened for
+
+β’ **listener?**: `Function`
+
+The event handler function
+
+#### Returns
+
+`number`
+
+#### Since
+
+v3.2.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:868
+
+***
+
+### listeners()
+
+> **listeners**\<`K`>(`eventName`): `Function`\[]
+
+Returns a copy of the array of listeners for the event named `eventName`.
+
+```js
+server.on('connection', (stream) => {
+ console.log('someone connected!');
+});
+console.log(util.inspect(server.listeners('connection')));
+// Prints: [ [Function] ]
+```
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+#### Returns
+
+`Function`\[]
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:787
+
+***
+
+### move()
+
+> **move**(`name`?): `Promise`\<`boolean`>
+
+Move player to another node
+
+#### Parameters
+
+β’ **name?**: `string`
+
+#### Returns
+
+`Promise`\<`boolean`>
+
+true if the player was moved, false if not
+
+#### Defined in
+
+[src/guild/Player.ts:271](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L271)
+
+***
+
+### off()
+
+#### off(event, listener)
+
+> **off**(`event`, `listener`): `this`
+
+##### Parameters
+
+β’ **event**: `"end"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/guild/Player.ts:186](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L186)
+
+#### off(event, listener)
+
+> **off**(`event`, `listener`): `this`
+
+##### Parameters
+
+β’ **event**: `"stuck"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/guild/Player.ts:187](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L187)
+
+#### off(event, listener)
+
+> **off**(`event`, `listener`): `this`
+
+##### Parameters
+
+β’ **event**: `"closed"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/guild/Player.ts:188](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L188)
+
+#### off(event, listener)
+
+> **off**(`event`, `listener`): `this`
+
+##### Parameters
+
+β’ **event**: `"start"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/guild/Player.ts:189](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L189)
+
+#### off(event, listener)
+
+> **off**(`event`, `listener`): `this`
+
+##### Parameters
+
+β’ **event**: `"exception"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/guild/Player.ts:190](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L190)
+
+#### off(event, listener)
+
+> **off**(`event`, `listener`): `this`
+
+##### Parameters
+
+β’ **event**: `"resumed"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/guild/Player.ts:191](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L191)
+
+#### off(event, listener)
+
+> **off**(`event`, `listener`): `this`
+
+##### Parameters
+
+β’ **event**: `"update"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/guild/Player.ts:192](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L192)
+
+***
+
+### onPlayerUpdate()
+
+> **onPlayerUpdate**(`json`): `void`
+
+Handle player update data
+
+#### Parameters
+
+β’ **json**
+
+β’ **json.state**
+
+β’ **json.state.ping**: `number`
+
+β’ **json.state.position**: `number`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/guild/Player.ts:557](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L557)
+
+***
+
+### once()
+
+#### once(event, listener)
+
+> **once**(`event`, `listener`): `this`
+
+##### Parameters
+
+β’ **event**: `"end"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/guild/Player.ts:179](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L179)
+
+#### once(event, listener)
+
+> **once**(`event`, `listener`): `this`
+
+##### Parameters
+
+β’ **event**: `"stuck"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/guild/Player.ts:180](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L180)
+
+#### once(event, listener)
+
+> **once**(`event`, `listener`): `this`
+
+##### Parameters
+
+β’ **event**: `"closed"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/guild/Player.ts:181](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L181)
+
+#### once(event, listener)
+
+> **once**(`event`, `listener`): `this`
+
+##### Parameters
+
+β’ **event**: `"start"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/guild/Player.ts:182](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L182)
+
+#### once(event, listener)
+
+> **once**(`event`, `listener`): `this`
+
+##### Parameters
+
+β’ **event**: `"exception"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/guild/Player.ts:183](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L183)
+
+#### once(event, listener)
+
+> **once**(`event`, `listener`): `this`
+
+##### Parameters
+
+β’ **event**: `"resumed"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/guild/Player.ts:184](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L184)
+
+#### once(event, listener)
+
+> **once**(`event`, `listener`): `this`
+
+##### Parameters
+
+β’ **event**: `"update"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/guild/Player.ts:185](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L185)
+
+***
+
+### playTrack()
+
+> **playTrack**(`playable`): `Promise`\<`void`>
+
+Play a new track
+
+#### Parameters
+
+β’ **playable**: [`PlayOptions`](/4.0.1/api/interfaces/playoptions/)
+
+Options for playing this track
+
+#### Returns
+
+`Promise`\<`void`>
+
+#### Defined in
+
+[src/guild/Player.ts:303](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L303)
+
+***
+
+### prependListener()
+
+> **prependListener**\<`K`>(`eventName`, `listener`): `this`
+
+Adds the `listener` function to the *beginning* of the listeners array for the
+event named `eventName`. No checks are made to see if the `listener` has
+already been added. Multiple calls passing the same combination of `eventName`
+and `listener` will result in the `listener` being added, and called, multiple times.
+
+```js
+server.prependListener('connection', (stream) => {
+ console.log('someone connected!');
+});
+```
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+The name of the event.
+
+β’ **listener**
+
+The callback function
+
+#### Returns
+
+`this`
+
+#### Since
+
+v6.0.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:886
+
+***
+
+### prependOnceListener()
+
+> **prependOnceListener**\<`K`>(`eventName`, `listener`): `this`
+
+Adds a **one-time**`listener` function for the event named `eventName` to the *beginning* of the listeners array. The next time `eventName` is triggered, this
+listener is removed, and then invoked.
+
+```js
+server.prependOnceListener('connection', (stream) => {
+ console.log('Ah, we have our first user!');
+});
+```
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+The name of the event.
+
+β’ **listener**
+
+The callback function
+
+#### Returns
+
+`this`
+
+#### Since
+
+v6.0.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:902
+
+***
+
+### rawListeners()
+
+> **rawListeners**\<`K`>(`eventName`): `Function`\[]
+
+Returns a copy of the array of listeners for the event named `eventName`,
+including any wrappers (such as those created by `.once()`).
+
+```js
+import { EventEmitter } from 'node:events';
+const emitter = new EventEmitter();
+emitter.once('log', () => console.log('log once'));
+
+// Returns a new Array with a function `onceWrapper` which has a property
+// `listener` which contains the original listener bound above
+const listeners = emitter.rawListeners('log');
+const logFnWrapper = listeners[0];
+
+// Logs "log once" to the console and does not unbind the `once` event
+logFnWrapper.listener();
+
+// Logs "log once" to the console and removes the listener
+logFnWrapper();
+
+emitter.on('log', () => console.log('log persistently'));
+// Will return a new Array with a single function bound by `.on()` above
+const newListeners = emitter.rawListeners('log');
+
+// Logs "log persistently" twice
+newListeners[0]();
+emitter.emit('log');
+```
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+#### Returns
+
+`Function`\[]
+
+#### Since
+
+v9.4.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:818
+
+***
+
+### removeAllListeners()
+
+> **removeAllListeners**(`eventName`?): `this`
+
+Removes all listeners, or those of the specified `eventName`.
+
+It is bad practice to remove listeners added elsewhere in the code,
+particularly when the `EventEmitter` instance was created by some other
+component or module (e.g. sockets or file streams).
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Parameters
+
+β’ **eventName?**: `string` | `symbol`
+
+#### Returns
+
+`this`
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:758
+
+***
+
+### removeListener()
+
+> **removeListener**\<`K`>(`eventName`, `listener`): `this`
+
+Removes the specified `listener` from the listener array for the event named `eventName`.
+
+```js
+const callback = (stream) => {
+ console.log('someone connected!');
+};
+server.on('connection', callback);
+// ...
+server.removeListener('connection', callback);
+```
+
+`removeListener()` will remove, at most, one instance of a listener from the
+listener array. If any single listener has been added multiple times to the
+listener array for the specified `eventName`, then `removeListener()` must be
+called multiple times to remove each instance.
+
+Once an event is emitted, all listeners attached to it at the
+time of emitting are called in order. This implies that any `removeListener()` or `removeAllListeners()` calls *after* emitting and *before* the last listener finishes execution
+will not remove them from`emit()` in progress. Subsequent events behave as expected.
+
+```js
+import { EventEmitter } from 'node:events';
+class MyEmitter extends EventEmitter {}
+const myEmitter = new MyEmitter();
+
+const callbackA = () => {
+ console.log('A');
+ myEmitter.removeListener('event', callbackB);
+};
+
+const callbackB = () => {
+ console.log('B');
+};
+
+myEmitter.on('event', callbackA);
+
+myEmitter.on('event', callbackB);
+
+// callbackA removes listener callbackB but it will still be called.
+// Internal listener array at time of emit [callbackA, callbackB]
+myEmitter.emit('event');
+// Prints:
+// A
+// B
+
+// callbackB is now removed.
+// Internal listener array [callbackA]
+myEmitter.emit('event');
+// Prints:
+// A
+```
+
+Because listeners are managed using an internal array, calling this will
+change the position indices of any listener registered *after* the listener
+being removed. This will not impact the order in which listeners are called,
+but it means that any copies of the listener array as returned by
+the `emitter.listeners()` method will need to be recreated.
+
+When a single function has been added as a handler multiple times for a single
+event (as in the example below), `removeListener()` will remove the most
+recently added instance. In the example the `once('ping')` listener is removed:
+
+```js
+import { EventEmitter } from 'node:events';
+const ee = new EventEmitter();
+
+function pong() {
+ console.log('pong');
+}
+
+ee.on('ping', pong);
+ee.once('ping', pong);
+ee.removeListener('ping', pong);
+
+ee.emit('ping');
+ee.emit('ping');
+```
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+β’ **listener**
+
+#### Returns
+
+`this`
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:742
+
+***
+
+### resume()
+
+> **resume**(`options`): `Promise`\<`void`>
+
+Resumes the current track
+
+#### Parameters
+
+β’ **options**: [`ResumeOptions`](/4.0.1/api/interfaces/resumeoptions/) = `{}`
+
+An object that conforms to ResumeOptions that specify behavior on resuming
+
+#### Returns
+
+`Promise`\<`void`>
+
+#### Defined in
+
+[src/guild/Player.ts:498](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L498)
+
+***
+
+### seekTo()
+
+> **seekTo**(`position`): `Promise`\<`void`>
+
+Seek to a specific time in the currently playing track
+
+#### Parameters
+
+β’ **position**: `number`
+
+Position to seek to in milliseconds
+
+#### Returns
+
+`Promise`\<`void`>
+
+#### Defined in
+
+[src/guild/Player.ts:353](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L353)
+
+***
+
+### setChannelMix()
+
+> **setChannelMix**(`channelMix`): `Promise`\<`void`>
+
+Change the channel mix settings applied to the currently playing track
+
+#### Parameters
+
+β’ **channelMix**: [`ChannelMixSettings`](/4.0.1/api/interfaces/channelmixsettings/)
+
+An object that conforms to ChannelMixSettings that defines how much the left and right channels affect each other (setting all factors to 0.5 causes both channels to get the same audio)
+
+#### Returns
+
+`Promise`\<`void`>
+
+#### Defined in
+
+[src/guild/Player.ts:450](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L450)
+
+***
+
+### setDistortion()
+
+> **setDistortion**(`distortion`): `Promise`\<`void`>
+
+Change the distortion settings applied to the currently playing track
+
+#### Parameters
+
+β’ **distortion**: [`DistortionSettings`](/4.0.1/api/interfaces/distortionsettings/)
+
+An object that conforms to DistortionSettings that defines distortions in the audio
+
+#### Returns
+
+`Promise`\<`void`>
+
+The current player instance
+
+#### Defined in
+
+[src/guild/Player.ts:441](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L441)
+
+***
+
+### setEqualizer()
+
+> **setEqualizer**(`equalizer`): `Promise`\<`void`>
+
+Change the equalizer settings applied to the currently playing track
+
+#### Parameters
+
+β’ **equalizer**: [`Band`](/4.0.1/api/interfaces/band/)\[]
+
+An array of objects that conforms to the Bands type that define volumes at different frequencies
+
+#### Returns
+
+`Promise`\<`void`>
+
+#### Defined in
+
+[src/guild/Player.ts:385](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L385)
+
+***
+
+### setFilterVolume()
+
+> **setFilterVolume**(`volume`): `Promise`\<`void`>
+
+Sets the filter volume of the player
+
+#### Parameters
+
+β’ **volume**: `number`
+
+Target volume 0.0-5.0
+
+#### Returns
+
+`Promise`\<`void`>
+
+#### Defined in
+
+[src/guild/Player.ts:377](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L377)
+
+***
+
+### setFilters()
+
+> **setFilters**(`filters`): `Promise`\<`void`>
+
+Change the all filter settings applied to the currently playing track
+
+#### Parameters
+
+β’ **filters**: [`FilterOptions`](/4.0.1/api/interfaces/filteroptions/)
+
+An object that conforms to FilterOptions that defines all filters to apply/modify
+
+#### Returns
+
+`Promise`\<`void`>
+
+#### Defined in
+
+[src/guild/Player.ts:468](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L468)
+
+***
+
+### setGlobalVolume()
+
+> **setGlobalVolume**(`volume`): `Promise`\<`void`>
+
+Sets the global volume of the player
+
+#### Parameters
+
+β’ **volume**: `number`
+
+Target volume 0-1000
+
+#### Returns
+
+`Promise`\<`void`>
+
+#### Defined in
+
+[src/guild/Player.ts:365](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L365)
+
+***
+
+### setKaraoke()
+
+> **setKaraoke**(`karaoke`?): `Promise`\<`void`>
+
+Change the karaoke settings applied to the currently playing track
+
+#### Parameters
+
+β’ **karaoke?**: [`KaraokeSettings`](/4.0.1/api/interfaces/karaokesettings/)
+
+An object that conforms to the KaraokeSettings type that defines a range of frequencies to mute
+
+#### Returns
+
+`Promise`\<`void`>
+
+#### Defined in
+
+[src/guild/Player.ts:395](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L395)
+
+***
+
+### setLowPass()
+
+> **setLowPass**(`lowPass`): `Promise`\<`void`>
+
+Change the low pass settings applied to the currently playing track
+
+#### Parameters
+
+β’ **lowPass**: [`LowPassSettings`](/4.0.1/api/interfaces/lowpasssettings/)
+
+An object that conforms to LowPassSettings that defines the amount of suppression on higher frequencies
+
+#### Returns
+
+`Promise`\<`void`>
+
+#### Defined in
+
+[src/guild/Player.ts:459](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L459)
+
+***
+
+### setMaxListeners()
+
+> **setMaxListeners**(`n`): `this`
+
+By default `EventEmitter`s will print a warning if more than `10` listeners are
+added for a particular event. This is a useful default that helps finding
+memory leaks. The `emitter.setMaxListeners()` method allows the limit to be
+modified for this specific `EventEmitter` instance. The value can be set to `Infinity` (or `0`) to indicate an unlimited number of listeners.
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Parameters
+
+β’ **n**: `number`
+
+#### Returns
+
+`this`
+
+#### Since
+
+v0.3.5
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:768
+
+***
+
+### setPaused()
+
+> **setPaused**(`paused`): `Promise`\<`void`>
+
+Pause or unpause the currently playing track
+
+#### Parameters
+
+β’ **paused**: `boolean` = `true`
+
+Boolean value to specify whether to pause or unpause the current bot user
+
+#### Returns
+
+`Promise`\<`void`>
+
+#### Defined in
+
+[src/guild/Player.ts:341](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L341)
+
+***
+
+### setRotation()
+
+> **setRotation**(`rotation`?): `Promise`\<`void`>
+
+Change the rotation settings applied to the currently playing track
+
+#### Parameters
+
+β’ **rotation?**: [`RotationSettings`](/4.0.1/api/interfaces/rotationsettings/)
+
+An object that conforms to the RotationSettings type that defines the frequency of audio rotating round the listener
+
+#### Returns
+
+`Promise`\<`void`>
+
+#### Defined in
+
+[src/guild/Player.ts:431](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L431)
+
+***
+
+### setTimescale()
+
+> **setTimescale**(`timescale`?): `Promise`\<`void`>
+
+Change the timescale settings applied to the currently playing track
+
+#### Parameters
+
+β’ **timescale?**: [`TimescaleSettings`](/4.0.1/api/interfaces/timescalesettings/)
+
+An object that conforms to the TimescaleSettings type that defines the time signature to play the audio at
+
+#### Returns
+
+`Promise`\<`void`>
+
+#### Defined in
+
+[src/guild/Player.ts:404](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L404)
+
+***
+
+### setTremolo()
+
+> **setTremolo**(`tremolo`?): `Promise`\<`void`>
+
+Change the tremolo settings applied to the currently playing track
+
+#### Parameters
+
+β’ **tremolo?**: [`FreqSettings`](/4.0.1/api/interfaces/freqsettings/)
+
+An object that conforms to the FreqSettings type that defines an oscillation in volume
+
+#### Returns
+
+`Promise`\<`void`>
+
+#### Defined in
+
+[src/guild/Player.ts:413](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L413)
+
+***
+
+### setVibrato()
+
+> **setVibrato**(`vibrato`?): `Promise`\<`void`>
+
+Change the vibrato settings applied to the currently playing track
+
+#### Parameters
+
+β’ **vibrato?**: [`FreqSettings`](/4.0.1/api/interfaces/freqsettings/)
+
+An object that conforms to the FreqSettings type that defines an oscillation in pitch
+
+#### Returns
+
+`Promise`\<`void`>
+
+#### Defined in
+
+[src/guild/Player.ts:422](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L422)
+
+***
+
+### stopTrack()
+
+> **stopTrack**(): `Promise`\<`void`>
+
+Stop the currently playing track
+
+#### Returns
+
+`Promise`\<`void`>
+
+#### Defined in
+
+[src/guild/Player.ts:328](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L328)
+
+***
+
+### update()
+
+> **update**(`updatePlayer`): `Promise`\<`void`>
+
+If you want to update the whole player yourself, sends raw update player info to lavalink
+
+#### Parameters
+
+β’ **updatePlayer**: [`UpdatePlayerInfo`](/4.0.1/api/interfaces/updateplayerinfo/)
+
+#### Returns
+
+`Promise`\<`void`>
+
+#### Defined in
+
+[src/guild/Player.ts:511](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L511)
+
+***
+
+### addAbortListener()
+
+> `static` **addAbortListener**(`signal`, `resource`): `Disposable`
+
+Listens once to the `abort` event on the provided `signal`.
+
+Listening to the `abort` event on abort signals is unsafe and may
+lead to resource leaks since another third party with the signal can
+call `e.stopImmediatePropagation()`. Unfortunately Node.js cannot change
+this since it would violate the web standard. Additionally, the original
+API makes it easy to forget to remove listeners.
+
+This API allows safely using `AbortSignal`s in Node.js APIs by solving these
+two issues by listening to the event such that `stopImmediatePropagation` does
+not prevent the listener from running.
+
+Returns a disposable so that it may be unsubscribed from more easily.
+
+```js
+import { addAbortListener } from 'node:events';
+
+function example(signal) {
+ let disposable;
+ try {
+ signal.addEventListener('abort', (e) => e.stopImmediatePropagation());
+ disposable = addAbortListener(signal, (e) => {
+ // Do something when signal is aborted.
+ });
+ } finally {
+ disposable?.[Symbol.dispose]();
+ }
+}
+```
+
+:::caution\[Experimental]
+This API should not be used in production and may be trimmed from a public release.
+:::
+
+#### Parameters
+
+β’ **signal**: `AbortSignal`
+
+β’ **resource**
+
+#### Returns
+
+`Disposable`
+
+Disposable that removes the `abort` listener.
+
+#### Since
+
+v20.5.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:437
+
+***
+
+### getEventListeners()
+
+> `static` **getEventListeners**(`emitter`, `name`): `Function`\[]
+
+Returns a copy of the array of listeners for the event named `eventName`.
+
+For `EventEmitter`s this behaves exactly the same as calling `.listeners` on
+the emitter.
+
+For `EventTarget`s this is the only way to get the event listeners for the
+event target. This is useful for debugging and diagnostic purposes.
+
+```js
+import { getEventListeners, EventEmitter } from 'node:events';
+
+{
+ const ee = new EventEmitter();
+ const listener = () => console.log('Events are fun');
+ ee.on('foo', listener);
+ console.log(getEventListeners(ee, 'foo')); // [ [Function: listener] ]
+}
+{
+ const et = new EventTarget();
+ const listener = () => console.log('Events are fun');
+ et.addEventListener('foo', listener);
+ console.log(getEventListeners(et, 'foo')); // [ [Function: listener] ]
+}
+```
+
+#### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`> | `EventTarget`
+
+β’ **name**: `string` | `symbol`
+
+#### Returns
+
+`Function`\[]
+
+#### Since
+
+v15.2.0, v14.17.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:358
+
+***
+
+### getMaxListeners()
+
+> `static` **getMaxListeners**(`emitter`): `number`
+
+Returns the currently set max amount of listeners.
+
+For `EventEmitter`s this behaves exactly the same as calling `.getMaxListeners` on
+the emitter.
+
+For `EventTarget`s this is the only way to get the max event listeners for the
+event target. If the number of event handlers on a single EventTarget exceeds
+the max set, the EventTarget will print a warning.
+
+```js
+import { getMaxListeners, setMaxListeners, EventEmitter } from 'node:events';
+
+{
+ const ee = new EventEmitter();
+ console.log(getMaxListeners(ee)); // 10
+ setMaxListeners(11, ee);
+ console.log(getMaxListeners(ee)); // 11
+}
+{
+ const et = new EventTarget();
+ console.log(getMaxListeners(et)); // 10
+ setMaxListeners(11, et);
+ console.log(getMaxListeners(et)); // 11
+}
+```
+
+#### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`> | `EventTarget`
+
+#### Returns
+
+`number`
+
+#### Since
+
+v19.9.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:387
+
+***
+
+### ~~listenerCount()~~
+
+> `static` **listenerCount**(`emitter`, `eventName`): `number`
+
+A class method that returns the number of listeners for the given `eventName` registered on the given `emitter`.
+
+```js
+import { EventEmitter, listenerCount } from 'node:events';
+
+const myEmitter = new EventEmitter();
+myEmitter.on('event', () => {});
+myEmitter.on('event', () => {});
+console.log(listenerCount(myEmitter, 'event'));
+// Prints: 2
+```
+
+:::caution\[Deprecated]
+Since v3.2.0 - Use `listenerCount` instead.
+:::
+
+#### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`>
+
+The emitter to query
+
+β’ **eventName**: `string` | `symbol`
+
+The event name
+
+#### Returns
+
+`number`
+
+#### Since
+
+v0.9.12
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:330
+
+***
+
+### on()
+
+#### on(emitter, eventName, options)
+
+> `static` **on**(`emitter`, `eventName`, `options`?): `AsyncIterableIterator`\<`any`\[]>
+
+```js
+import { on, EventEmitter } from 'node:events';
+import process from 'node:process';
+
+const ee = new EventEmitter();
+
+// Emit later on
+process.nextTick(() => {
+ ee.emit('foo', 'bar');
+ ee.emit('foo', 42);
+});
+
+for await (const event of on(ee, 'foo')) {
+ // The execution of this inner block is synchronous and it
+ // processes one event at a time (even with await). Do not use
+ // if concurrent execution is required.
+ console.log(event); // prints ['bar'] [42]
+}
+// Unreachable here
+```
+
+Returns an `AsyncIterator` that iterates `eventName` events. It will throw
+if the `EventEmitter` emits `'error'`. It removes all listeners when
+exiting the loop. The `value` returned by each iteration is an array
+composed of the emitted event arguments.
+
+An `AbortSignal` can be used to cancel waiting on events:
+
+```js
+import { on, EventEmitter } from 'node:events';
+import process from 'node:process';
+
+const ac = new AbortController();
+
+(async () => {
+ const ee = new EventEmitter();
+
+ // Emit later on
+ process.nextTick(() => {
+ ee.emit('foo', 'bar');
+ ee.emit('foo', 42);
+ });
+
+ for await (const event of on(ee, 'foo', { signal: ac.signal })) {
+ // The execution of this inner block is synchronous and it
+ // processes one event at a time (even with await). Do not use
+ // if concurrent execution is required.
+ console.log(event); // prints ['bar'] [42]
+ }
+ // Unreachable here
+})();
+
+process.nextTick(() => ac.abort());
+```
+
+Use the `close` option to specify an array of event names that will end the iteration:
+
+```js
+import { on, EventEmitter } from 'node:events';
+import process from 'node:process';
+
+const ee = new EventEmitter();
+
+// Emit later on
+process.nextTick(() => {
+ ee.emit('foo', 'bar');
+ ee.emit('foo', 42);
+ ee.emit('close');
+});
+
+for await (const event of on(ee, 'foo', { close: ['close'] })) {
+ console.log(event); // prints ['bar'] [42]
+}
+// the loop will exit after 'close' is emitted
+console.log('done'); // prints 'done'
+```
+
+##### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`>
+
+β’ **eventName**: `string` | `symbol`
+
+β’ **options?**: `StaticEventEmitterIteratorOptions`
+
+##### Returns
+
+`AsyncIterableIterator`\<`any`\[]>
+
+An `AsyncIterator` that iterates `eventName` events emitted by the `emitter`
+
+##### Since
+
+v13.6.0, v12.16.0
+
+##### Defined in
+
+node\_modules/@types/node/events.d.ts:303
+
+#### on(emitter, eventName, options)
+
+> `static` **on**(`emitter`, `eventName`, `options`?): `AsyncIterableIterator`\<`any`\[]>
+
+##### Parameters
+
+β’ **emitter**: `EventTarget`
+
+β’ **eventName**: `string`
+
+β’ **options?**: `StaticEventEmitterIteratorOptions`
+
+##### Returns
+
+`AsyncIterableIterator`\<`any`\[]>
+
+##### Defined in
+
+node\_modules/@types/node/events.d.ts:308
+
+***
+
+### once()
+
+#### once(emitter, eventName, options)
+
+> `static` **once**(`emitter`, `eventName`, `options`?): `Promise`\<`any`\[]>
+
+Creates a `Promise` that is fulfilled when the `EventEmitter` emits the given
+event or that is rejected if the `EventEmitter` emits `'error'` while waiting.
+The `Promise` will resolve with an array of all the arguments emitted to the
+given event.
+
+This method is intentionally generic and works with the web platform [EventTarget](https://dom.spec.whatwg.org/#interface-eventtarget) interface, which has no special`'error'` event
+semantics and does not listen to the `'error'` event.
+
+```js
+import { once, EventEmitter } from 'node:events';
+import process from 'node:process';
+
+const ee = new EventEmitter();
+
+process.nextTick(() => {
+ ee.emit('myevent', 42);
+});
+
+const [value] = await once(ee, 'myevent');
+console.log(value);
+
+const err = new Error('kaboom');
+process.nextTick(() => {
+ ee.emit('error', err);
+});
+
+try {
+ await once(ee, 'myevent');
+} catch (err) {
+ console.error('error happened', err);
+}
+```
+
+The special handling of the `'error'` event is only used when `events.once()` is used to wait for another event. If `events.once()` is used to wait for the
+'`error'` event itself, then it is treated as any other kind of event without
+special handling:
+
+```js
+import { EventEmitter, once } from 'node:events';
+
+const ee = new EventEmitter();
+
+once(ee, 'error')
+ .then(([err]) => console.log('ok', err.message))
+ .catch((err) => console.error('error', err.message));
+
+ee.emit('error', new Error('boom'));
+
+// Prints: ok boom
+```
+
+An `AbortSignal` can be used to cancel waiting for the event:
+
+```js
+import { EventEmitter, once } from 'node:events';
+
+const ee = new EventEmitter();
+const ac = new AbortController();
+
+async function foo(emitter, event, signal) {
+ try {
+ await once(emitter, event, { signal });
+ console.log('event emitted!');
+ } catch (error) {
+ if (error.name === 'AbortError') {
+ console.error('Waiting for the event was canceled!');
+ } else {
+ console.error('There was an error', error.message);
+ }
+ }
+}
+
+foo(ee, 'foo', ac.signal);
+ac.abort(); // Abort waiting for the event
+ee.emit('foo'); // Prints: Waiting for the event was canceled!
+```
+
+##### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`>
+
+β’ **eventName**: `string` | `symbol`
+
+β’ **options?**: `StaticEventEmitterOptions`
+
+##### Returns
+
+`Promise`\<`any`\[]>
+
+##### Since
+
+v11.13.0, v10.16.0
+
+##### Defined in
+
+node\_modules/@types/node/events.d.ts:217
+
+#### once(emitter, eventName, options)
+
+> `static` **once**(`emitter`, `eventName`, `options`?): `Promise`\<`any`\[]>
+
+##### Parameters
+
+β’ **emitter**: `EventTarget`
+
+β’ **eventName**: `string`
+
+β’ **options?**: `StaticEventEmitterOptions`
+
+##### Returns
+
+`Promise`\<`any`\[]>
+
+##### Defined in
+
+node\_modules/@types/node/events.d.ts:222
+
+***
+
+### setMaxListeners()
+
+> `static` **setMaxListeners**(`n`?, ...`eventTargets`?): `void`
+
+```js
+import { setMaxListeners, EventEmitter } from 'node:events';
+
+const target = new EventTarget();
+const emitter = new EventEmitter();
+
+setMaxListeners(5, target, emitter);
+```
+
+#### Parameters
+
+β’ **n?**: `number`
+
+A non-negative number. The maximum number of listeners per `EventTarget` event.
+
+β’ ...**eventTargets?**: (`EventEmitter`\<`DefaultEventMap`> | `EventTarget`)\[]
+
+#### Returns
+
+`void`
+
+#### Since
+
+v15.4.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:402
+
+## Events
+
+### on()
+
+#### on(event, listener)
+
+> **on**(`event`, `listener`): `this`
+
+Emitted when the current playing track ends
+
+##### Parameters
+
+β’ **event**: `"end"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/guild/Player.ts:148](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L148)
+
+#### on(event, listener)
+
+> **on**(`event`, `listener`): `this`
+
+Emitted when the current playing track gets stuck due to an error
+
+##### Parameters
+
+β’ **event**: `"stuck"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/guild/Player.ts:153](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L153)
+
+#### on(event, listener)
+
+> **on**(`event`, `listener`): `this`
+
+Emitted when the current websocket connection is closed
+
+##### Parameters
+
+β’ **event**: `"closed"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/guild/Player.ts:158](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L158)
+
+#### on(event, listener)
+
+> **on**(`event`, `listener`): `this`
+
+Emitted when a new track starts
+
+##### Parameters
+
+β’ **event**: `"start"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/guild/Player.ts:163](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L163)
+
+#### on(event, listener)
+
+> **on**(`event`, `listener`): `this`
+
+Emitted when there is an error caused by the current playing track
+
+##### Parameters
+
+β’ **event**: `"exception"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/guild/Player.ts:168](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L168)
+
+#### on(event, listener)
+
+> **on**(`event`, `listener`): `this`
+
+Emitted when the library manages to resume the player
+
+##### Parameters
+
+β’ **event**: `"resumed"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/guild/Player.ts:173](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L173)
+
+#### on(event, listener)
+
+> **on**(`event`, `listener`): `this`
+
+Emitted when a playerUpdate even is received from Lavalink
+
+##### Parameters
+
+β’ **event**: `"update"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/guild/Player.ts:178](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L178)
diff --git a/src/content/docs/4.0.1/api/classes/Rest.md b/src/content/docs/4.0.1/api/classes/Rest.md
new file mode 100644
index 0000000..ee0010b
--- /dev/null
+++ b/src/content/docs/4.0.1/api/classes/Rest.md
@@ -0,0 +1,269 @@
+---
+editUrl: false
+next: false
+prev: false
+title: Rest
+slug: 4.0.1/apiclasses/rest
+---
+
+Wrapper around Lavalink REST API
+
+## Constructors
+
+### new Rest()
+
+> **new Rest**(`node`, `options`): [`Rest`](/4.0.1/api/classes/rest/)
+
+#### Parameters
+
+β’ **node**: [`Node`](/4.0.1/api/classes/node/)
+
+An instance of Node
+
+β’ **options**: [`NodeOption`](/4.0.1/api/interfaces/nodeoption/)
+
+The options to initialize this rest class
+
+#### Returns
+
+[`Rest`](/4.0.1/api/classes/rest/)
+
+#### Defined in
+
+[src/node/Rest.ts:187](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L187)
+
+## Methods
+
+### decode()
+
+> **decode**(`track`): `Promise`\<`undefined` | [`Track`](/4.0.1/api/interfaces/track/)>
+
+Decode a track
+
+#### Parameters
+
+β’ **track**: `string`
+
+Encoded track
+
+#### Returns
+
+`Promise`\<`undefined` | [`Track`](/4.0.1/api/interfaces/track/)>
+
+Promise that resolves to a track
+
+#### Defined in
+
+[src/node/Rest.ts:216](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L216)
+
+***
+
+### destroyPlayer()
+
+> **destroyPlayer**(`guildId`): `Promise`\<`void`>
+
+Deletes a Lavalink player
+
+#### Parameters
+
+β’ **guildId**: `string`
+
+guildId where this player is
+
+#### Returns
+
+`Promise`\<`void`>
+
+#### Defined in
+
+[src/node/Rest.ts:270](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L270)
+
+***
+
+### getLavalinkInfo()
+
+> **getLavalinkInfo**(): `Promise`\<`undefined` | [`NodeInfo`](/4.0.1/api/type-aliases/nodeinfo/)>
+
+Get Lavalink info
+
+#### Returns
+
+`Promise`\<`undefined` | [`NodeInfo`](/4.0.1/api/type-aliases/nodeinfo/)>
+
+#### Defined in
+
+[src/node/Rest.ts:339](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L339)
+
+***
+
+### getPlayer()
+
+> **getPlayer**(`guildId`): `Promise`\<`undefined` | [`LavalinkPlayer`](/4.0.1/api/interfaces/lavalinkplayer/)>
+
+Gets all the player with the specified sessionId
+
+#### Parameters
+
+β’ **guildId**: `string`
+
+#### Returns
+
+`Promise`\<`undefined` | [`LavalinkPlayer`](/4.0.1/api/interfaces/lavalinkplayer/)>
+
+Promise that resolves to an array of Lavalink players
+
+#### Defined in
+
+[src/node/Rest.ts:240](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L240)
+
+***
+
+### getPlayers()
+
+> **getPlayers**(): `Promise`\<[`LavalinkPlayer`](/4.0.1/api/interfaces/lavalinkplayer/)\[]>
+
+Gets all the player with the specified sessionId
+
+#### Returns
+
+`Promise`\<[`LavalinkPlayer`](/4.0.1/api/interfaces/lavalinkplayer/)\[]>
+
+Promise that resolves to an array of Lavalink players
+
+#### Defined in
+
+[src/node/Rest.ts:228](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L228)
+
+***
+
+### getRoutePlannerStatus()
+
+> **getRoutePlannerStatus**(): `Promise`\<`undefined` | [`RoutePlanner`](/4.0.1/api/interfaces/routeplanner/)>
+
+Get routeplanner status from Lavalink
+
+#### Returns
+
+`Promise`\<`undefined` | [`RoutePlanner`](/4.0.1/api/interfaces/routeplanner/)>
+
+Promise that resolves to a routeplanner response
+
+#### Defined in
+
+[src/node/Rest.ts:312](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L312)
+
+***
+
+### resolve()
+
+> **resolve**(`identifier`): `Promise`\<`undefined` | [`LavalinkResponse`](/4.0.1/api/type-aliases/lavalinkresponse/)>
+
+Resolve a track
+
+#### Parameters
+
+β’ **identifier**: `string`
+
+Track ID
+
+#### Returns
+
+`Promise`\<`undefined` | [`LavalinkResponse`](/4.0.1/api/type-aliases/lavalinkresponse/)>
+
+A promise that resolves to a Lavalink response
+
+#### Defined in
+
+[src/node/Rest.ts:203](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L203)
+
+***
+
+### stats()
+
+> **stats**(): `Promise`\<`undefined` | [`NodeStats`](/4.0.1/api/interfaces/nodestats/)>
+
+Gets the status of this node
+
+#### Returns
+
+`Promise`\<`undefined` | [`NodeStats`](/4.0.1/api/interfaces/nodestats/)>
+
+Promise that resolves to a node stats response
+
+#### Defined in
+
+[src/node/Rest.ts:300](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L300)
+
+***
+
+### unmarkFailedAddress()
+
+> **unmarkFailedAddress**(`address`): `Promise`\<`void`>
+
+Release blacklisted IP address into pool of IPs
+
+#### Parameters
+
+β’ **address**: `string`
+
+IP address
+
+#### Returns
+
+`Promise`\<`void`>
+
+#### Defined in
+
+[src/node/Rest.ts:324](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L324)
+
+***
+
+### updatePlayer()
+
+> **updatePlayer**(`data`): `Promise`\<`undefined` | [`LavalinkPlayer`](/4.0.1/api/interfaces/lavalinkplayer/)>
+
+Updates a Lavalink player
+
+#### Parameters
+
+β’ **data**: [`UpdatePlayerInfo`](/4.0.1/api/interfaces/updateplayerinfo/)
+
+SessionId from Discord
+
+#### Returns
+
+`Promise`\<`undefined` | [`LavalinkPlayer`](/4.0.1/api/interfaces/lavalinkplayer/)>
+
+Promise that resolves to a Lavalink player
+
+#### Defined in
+
+[src/node/Rest.ts:253](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L253)
+
+***
+
+### updateSession()
+
+> **updateSession**(`resuming`?, `timeout`?): `Promise`\<`undefined` | [`SessionInfo`](/4.0.1/api/interfaces/sessioninfo/)>
+
+Updates the session with a resume boolean and timeout
+
+#### Parameters
+
+β’ **resuming?**: `boolean`
+
+Whether resuming is enabled for this session or not
+
+β’ **timeout?**: `number`
+
+Timeout to wait for resuming
+
+#### Returns
+
+`Promise`\<`undefined` | [`SessionInfo`](/4.0.1/api/interfaces/sessioninfo/)>
+
+Promise that resolves to a Lavalink player
+
+#### Defined in
+
+[src/node/Rest.ts:284](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L284)
diff --git a/src/content/docs/4.0.1/api/classes/Shoukaku.md b/src/content/docs/4.0.1/api/classes/Shoukaku.md
new file mode 100644
index 0000000..327317a
--- /dev/null
+++ b/src/content/docs/4.0.1/api/classes/Shoukaku.md
@@ -0,0 +1,1715 @@
+---
+editUrl: false
+next: false
+prev: false
+title: Shoukaku
+slug: 4.0.1/apiclasses/shoukaku
+---
+
+Main Shoukaku class
+
+## Extends
+
+* `EventEmitter`
+
+## Constructors
+
+### new Shoukaku()
+
+> **new Shoukaku**(`connector`, `nodes`, `options`): [`Shoukaku`](/4.0.1/api/classes/shoukaku/)
+
+#### Parameters
+
+β’ **connector**: [`Connector`](/4.0.1/api/classes/connector/)
+
+A Discord library connector
+
+β’ **nodes**: [`NodeOption`](/4.0.1/api/interfaces/nodeoption/)\[]
+
+An array that conforms to the NodeOption type that specifies nodes to connect to
+
+β’ **options**: [`ShoukakuOptions`](/4.0.1/api/interfaces/shoukakuoptions/) = `{}`
+
+Options to pass to create this Shoukaku instance
+
+#### Returns
+
+[`Shoukaku`](/4.0.1/api/classes/shoukaku/)
+
+#### Defined in
+
+[src/Shoukaku.ts:194](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Shoukaku.ts#L194)
+
+## Properties
+
+### connections
+
+> `readonly` **connections**: `Map`\<`string`, [`Connection`](/4.0.1/api/classes/connection/)>
+
+Voice connections being handled
+
+#### Defined in
+
+[src/Shoukaku.ts:170](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Shoukaku.ts#L170)
+
+***
+
+### connector
+
+> `readonly` **connector**: [`Connector`](/4.0.1/api/classes/connector/)
+
+Discord library connector
+
+#### Defined in
+
+[src/Shoukaku.ts:158](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Shoukaku.ts#L158)
+
+***
+
+### id
+
+> **id**: `null` | `string`
+
+Shoukaku instance identifier
+
+#### Defined in
+
+[src/Shoukaku.ts:178](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Shoukaku.ts#L178)
+
+***
+
+### nodes
+
+> `readonly` **nodes**: `Map`\<`string`, [`Node`](/4.0.1/api/classes/node/)>
+
+Connected Lavalink nodes
+
+#### Defined in
+
+[src/Shoukaku.ts:166](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Shoukaku.ts#L166)
+
+***
+
+### options
+
+> `readonly` **options**: `Required`\<[`ShoukakuOptions`](/4.0.1/api/interfaces/shoukakuoptions/)>
+
+Shoukaku options
+
+#### Defined in
+
+[src/Shoukaku.ts:162](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Shoukaku.ts#L162)
+
+***
+
+### players
+
+> `readonly` **players**: `Map`\<`string`, [`Player`](/4.0.1/api/classes/player/)>
+
+Players being handled
+
+#### Defined in
+
+[src/Shoukaku.ts:174](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Shoukaku.ts#L174)
+
+***
+
+### captureRejectionSymbol
+
+> `readonly` `static` **captureRejectionSymbol**: *typeof* [`captureRejectionSymbol`](/4.0.1/api/classes/connection/#capturerejectionsymbol)
+
+Value: `Symbol.for('nodejs.rejection')`
+
+See how to write a custom `rejection handler`.
+
+#### Since
+
+v13.4.0, v12.16.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:452
+
+***
+
+### captureRejections
+
+> `static` **captureRejections**: `boolean`
+
+Value: [boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type)
+
+Change the default `captureRejections` option on all new `EventEmitter` objects.
+
+#### Since
+
+v13.4.0, v12.16.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:459
+
+***
+
+### defaultMaxListeners
+
+> `static` **defaultMaxListeners**: `number`
+
+By default, a maximum of `10` listeners can be registered for any single
+event. This limit can be changed for individual `EventEmitter` instances
+using the `emitter.setMaxListeners(n)` method. To change the default
+for *all*`EventEmitter` instances, the `events.defaultMaxListeners` property
+can be used. If this value is not a positive number, a `RangeError` is thrown.
+
+Take caution when setting the `events.defaultMaxListeners` because the
+change affects *all* `EventEmitter` instances, including those created before
+the change is made. However, calling `emitter.setMaxListeners(n)` still has
+precedence over `events.defaultMaxListeners`.
+
+This is not a hard limit. The `EventEmitter` instance will allow
+more listeners to be added but will output a trace warning to stderr indicating
+that a "possible EventEmitter memory leak" has been detected. For any single
+`EventEmitter`, the `emitter.getMaxListeners()` and `emitter.setMaxListeners()` methods can be used to
+temporarily avoid this warning:
+
+```js
+import { EventEmitter } from 'node:events';
+const emitter = new EventEmitter();
+emitter.setMaxListeners(emitter.getMaxListeners() + 1);
+emitter.once('event', () => {
+ // do stuff
+ emitter.setMaxListeners(Math.max(emitter.getMaxListeners() - 1, 0));
+});
+```
+
+The `--trace-warnings` command-line flag can be used to display the
+stack trace for such warnings.
+
+The emitted warning can be inspected with `process.on('warning')` and will
+have the additional `emitter`, `type`, and `count` properties, referring to
+the event emitter instance, the event's name and the number of attached
+listeners, respectively.
+Its `name` property is set to `'MaxListenersExceededWarning'`.
+
+#### Since
+
+v0.11.2
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:498
+
+***
+
+### errorMonitor
+
+> `readonly` `static` **errorMonitor**: *typeof* [`errorMonitor`](/4.0.1/api/classes/connection/#errormonitor)
+
+This symbol shall be used to install a listener for only monitoring `'error'` events. Listeners installed using this symbol are called before the regular `'error'` listeners are called.
+
+Installing a listener using this symbol does not change the behavior once an `'error'` event is emitted. Therefore, the process will still crash if no
+regular `'error'` listener is installed.
+
+#### Since
+
+v13.6.0, v12.17.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:445
+
+## Methods
+
+### \[captureRejectionSymbol]\()?
+
+> `optional` **\[captureRejectionSymbol]**\<`K`>(`error`, `event`, ...`args`): `void`
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **error**: `Error`
+
+β’ **event**: `string` | `symbol`
+
+β’ ...**args**: `AnyRest`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:136
+
+***
+
+### addListener()
+
+> **addListener**\<`K`>(`eventName`, `listener`): `this`
+
+Alias for `emitter.on(eventName, listener)`.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+β’ **listener**
+
+#### Returns
+
+`this`
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:597
+
+***
+
+### addNode()
+
+> **addNode**(`options`): `void`
+
+Add a Lavalink node to the pool of available nodes
+
+#### Parameters
+
+β’ **options**: [`NodeOption`](/4.0.1/api/interfaces/nodeoption/)
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/Shoukaku.ts:213](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Shoukaku.ts#L213)
+
+***
+
+### emit()
+
+> **emit**\<`K`>(`eventName`, ...`args`): `boolean`
+
+Synchronously calls each of the listeners registered for the event named `eventName`, in the order they were registered, passing the supplied arguments
+to each.
+
+Returns `true` if the event had listeners, `false` otherwise.
+
+```js
+import { EventEmitter } from 'node:events';
+const myEmitter = new EventEmitter();
+
+// First listener
+myEmitter.on('event', function firstListener() {
+ console.log('Helloooo! first listener');
+});
+// Second listener
+myEmitter.on('event', function secondListener(arg1, arg2) {
+ console.log(`event with parameters ${arg1}, ${arg2} in second listener`);
+});
+// Third listener
+myEmitter.on('event', function thirdListener(...args) {
+ const parameters = args.join(', ');
+ console.log(`event with parameters ${parameters} in third listener`);
+});
+
+console.log(myEmitter.listeners('event'));
+
+myEmitter.emit('event', 1, 2, 3, 4, 5);
+
+// Prints:
+// [
+// [Function: firstListener],
+// [Function: secondListener],
+// [Function: thirdListener]
+// ]
+// Helloooo! first listener
+// event with parameters 1, 2 in second listener
+// event with parameters 1, 2, 3, 4, 5 in third listener
+```
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+β’ ...**args**: `AnyRest`
+
+#### Returns
+
+`boolean`
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:859
+
+***
+
+### eventNames()
+
+> **eventNames**(): (`string` | `symbol`)\[]
+
+Returns an array listing the events for which the emitter has registered
+listeners. The values in the array are strings or `Symbol`s.
+
+```js
+import { EventEmitter } from 'node:events';
+
+const myEE = new EventEmitter();
+myEE.on('foo', () => {});
+myEE.on('bar', () => {});
+
+const sym = Symbol('symbol');
+myEE.on(sym, () => {});
+
+console.log(myEE.eventNames());
+// Prints: [ 'foo', 'bar', Symbol(symbol) ]
+```
+
+#### Returns
+
+(`string` | `symbol`)\[]
+
+#### Since
+
+v6.0.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:922
+
+***
+
+### getMaxListeners()
+
+> **getMaxListeners**(): `number`
+
+Returns the current max listener value for the `EventEmitter` which is either
+set by `emitter.setMaxListeners(n)` or defaults to [defaultMaxListeners](../../../../../../api/classes/shoukaku/#defaultmaxlisteners).
+
+#### Returns
+
+`number`
+
+#### Since
+
+v1.0.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:774
+
+***
+
+### listenerCount()
+
+> **listenerCount**\<`K`>(`eventName`, `listener`?): `number`
+
+Returns the number of listeners listening for the event named `eventName`.
+If `listener` is provided, it will return how many times the listener is found
+in the list of the listeners of the event.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+The name of the event being listened for
+
+β’ **listener?**: `Function`
+
+The event handler function
+
+#### Returns
+
+`number`
+
+#### Since
+
+v3.2.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:868
+
+***
+
+### listeners()
+
+> **listeners**\<`K`>(`eventName`): `Function`\[]
+
+Returns a copy of the array of listeners for the event named `eventName`.
+
+```js
+server.on('connection', (stream) => {
+ console.log('someone connected!');
+});
+console.log(util.inspect(server.listeners('connection')));
+// Prints: [ [Function] ]
+```
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+#### Returns
+
+`Function`\[]
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:787
+
+***
+
+### off()
+
+#### off(event, listener)
+
+> **off**(`event`, `listener`): `this`
+
+##### Parameters
+
+β’ **event**: `"reconnecting"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/Shoukaku.ts:142](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Shoukaku.ts#L142)
+
+#### off(event, listener)
+
+> **off**(`event`, `listener`): `this`
+
+##### Parameters
+
+β’ **event**: `"debug"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/Shoukaku.ts:143](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Shoukaku.ts#L143)
+
+#### off(event, listener)
+
+> **off**(`event`, `listener`): `this`
+
+##### Parameters
+
+β’ **event**: `"error"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/Shoukaku.ts:144](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Shoukaku.ts#L144)
+
+#### off(event, listener)
+
+> **off**(`event`, `listener`): `this`
+
+##### Parameters
+
+β’ **event**: `"ready"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/Shoukaku.ts:145](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Shoukaku.ts#L145)
+
+#### off(event, listener)
+
+> **off**(`event`, `listener`): `this`
+
+##### Parameters
+
+β’ **event**: `"close"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/Shoukaku.ts:146](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Shoukaku.ts#L146)
+
+#### off(event, listener)
+
+> **off**(`event`, `listener`): `this`
+
+##### Parameters
+
+β’ **event**: `"disconnect"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/Shoukaku.ts:147](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Shoukaku.ts#L147)
+
+#### off(event, listener)
+
+> **off**(`event`, `listener`): `this`
+
+##### Parameters
+
+β’ **event**: `"raw"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/Shoukaku.ts:148](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Shoukaku.ts#L148)
+
+***
+
+### once()
+
+#### once(event, listener)
+
+> **once**(`event`, `listener`): `this`
+
+##### Parameters
+
+β’ **event**: `"reconnecting"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/Shoukaku.ts:135](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Shoukaku.ts#L135)
+
+#### once(event, listener)
+
+> **once**(`event`, `listener`): `this`
+
+##### Parameters
+
+β’ **event**: `"debug"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/Shoukaku.ts:136](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Shoukaku.ts#L136)
+
+#### once(event, listener)
+
+> **once**(`event`, `listener`): `this`
+
+##### Parameters
+
+β’ **event**: `"error"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/Shoukaku.ts:137](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Shoukaku.ts#L137)
+
+#### once(event, listener)
+
+> **once**(`event`, `listener`): `this`
+
+##### Parameters
+
+β’ **event**: `"ready"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/Shoukaku.ts:138](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Shoukaku.ts#L138)
+
+#### once(event, listener)
+
+> **once**(`event`, `listener`): `this`
+
+##### Parameters
+
+β’ **event**: `"close"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/Shoukaku.ts:139](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Shoukaku.ts#L139)
+
+#### once(event, listener)
+
+> **once**(`event`, `listener`): `this`
+
+##### Parameters
+
+β’ **event**: `"disconnect"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/Shoukaku.ts:140](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Shoukaku.ts#L140)
+
+#### once(event, listener)
+
+> **once**(`event`, `listener`): `this`
+
+##### Parameters
+
+β’ **event**: `"raw"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/Shoukaku.ts:141](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Shoukaku.ts#L141)
+
+***
+
+### prependListener()
+
+> **prependListener**\<`K`>(`eventName`, `listener`): `this`
+
+Adds the `listener` function to the *beginning* of the listeners array for the
+event named `eventName`. No checks are made to see if the `listener` has
+already been added. Multiple calls passing the same combination of `eventName`
+and `listener` will result in the `listener` being added, and called, multiple times.
+
+```js
+server.prependListener('connection', (stream) => {
+ console.log('someone connected!');
+});
+```
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+The name of the event.
+
+β’ **listener**
+
+The callback function
+
+#### Returns
+
+`this`
+
+#### Since
+
+v6.0.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:886
+
+***
+
+### prependOnceListener()
+
+> **prependOnceListener**\<`K`>(`eventName`, `listener`): `this`
+
+Adds a **one-time**`listener` function for the event named `eventName` to the *beginning* of the listeners array. The next time `eventName` is triggered, this
+listener is removed, and then invoked.
+
+```js
+server.prependOnceListener('connection', (stream) => {
+ console.log('Ah, we have our first user!');
+});
+```
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+The name of the event.
+
+β’ **listener**
+
+The callback function
+
+#### Returns
+
+`this`
+
+#### Since
+
+v6.0.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:902
+
+***
+
+### rawListeners()
+
+> **rawListeners**\<`K`>(`eventName`): `Function`\[]
+
+Returns a copy of the array of listeners for the event named `eventName`,
+including any wrappers (such as those created by `.once()`).
+
+```js
+import { EventEmitter } from 'node:events';
+const emitter = new EventEmitter();
+emitter.once('log', () => console.log('log once'));
+
+// Returns a new Array with a function `onceWrapper` which has a property
+// `listener` which contains the original listener bound above
+const listeners = emitter.rawListeners('log');
+const logFnWrapper = listeners[0];
+
+// Logs "log once" to the console and does not unbind the `once` event
+logFnWrapper.listener();
+
+// Logs "log once" to the console and removes the listener
+logFnWrapper();
+
+emitter.on('log', () => console.log('log persistently'));
+// Will return a new Array with a single function bound by `.on()` above
+const newListeners = emitter.rawListeners('log');
+
+// Logs "log persistently" twice
+newListeners[0]();
+emitter.emit('log');
+```
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+#### Returns
+
+`Function`\[]
+
+#### Since
+
+v9.4.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:818
+
+***
+
+### removeAllListeners()
+
+> **removeAllListeners**(`eventName`?): `this`
+
+Removes all listeners, or those of the specified `eventName`.
+
+It is bad practice to remove listeners added elsewhere in the code,
+particularly when the `EventEmitter` instance was created by some other
+component or module (e.g. sockets or file streams).
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Parameters
+
+β’ **eventName?**: `string` | `symbol`
+
+#### Returns
+
+`this`
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:758
+
+***
+
+### removeListener()
+
+> **removeListener**\<`K`>(`eventName`, `listener`): `this`
+
+Removes the specified `listener` from the listener array for the event named `eventName`.
+
+```js
+const callback = (stream) => {
+ console.log('someone connected!');
+};
+server.on('connection', callback);
+// ...
+server.removeListener('connection', callback);
+```
+
+`removeListener()` will remove, at most, one instance of a listener from the
+listener array. If any single listener has been added multiple times to the
+listener array for the specified `eventName`, then `removeListener()` must be
+called multiple times to remove each instance.
+
+Once an event is emitted, all listeners attached to it at the
+time of emitting are called in order. This implies that any `removeListener()` or `removeAllListeners()` calls *after* emitting and *before* the last listener finishes execution
+will not remove them from`emit()` in progress. Subsequent events behave as expected.
+
+```js
+import { EventEmitter } from 'node:events';
+class MyEmitter extends EventEmitter {}
+const myEmitter = new MyEmitter();
+
+const callbackA = () => {
+ console.log('A');
+ myEmitter.removeListener('event', callbackB);
+};
+
+const callbackB = () => {
+ console.log('B');
+};
+
+myEmitter.on('event', callbackA);
+
+myEmitter.on('event', callbackB);
+
+// callbackA removes listener callbackB but it will still be called.
+// Internal listener array at time of emit [callbackA, callbackB]
+myEmitter.emit('event');
+// Prints:
+// A
+// B
+
+// callbackB is now removed.
+// Internal listener array [callbackA]
+myEmitter.emit('event');
+// Prints:
+// A
+```
+
+Because listeners are managed using an internal array, calling this will
+change the position indices of any listener registered *after* the listener
+being removed. This will not impact the order in which listeners are called,
+but it means that any copies of the listener array as returned by
+the `emitter.listeners()` method will need to be recreated.
+
+When a single function has been added as a handler multiple times for a single
+event (as in the example below), `removeListener()` will remove the most
+recently added instance. In the example the `once('ping')` listener is removed:
+
+```js
+import { EventEmitter } from 'node:events';
+const ee = new EventEmitter();
+
+function pong() {
+ console.log('pong');
+}
+
+ee.on('ping', pong);
+ee.once('ping', pong);
+ee.removeListener('ping', pong);
+
+ee.emit('ping');
+ee.emit('ping');
+```
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` | `symbol`
+
+β’ **listener**
+
+#### Returns
+
+`this`
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:742
+
+***
+
+### removeNode()
+
+> **removeNode**(`name`, `reason`): `void`
+
+Remove a Lavalink node from the pool of available nodes
+
+#### Parameters
+
+β’ **name**: `string`
+
+Name of the node
+
+β’ **reason**: `string` = `'Remove node executed'`
+
+Reason of removing the node
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/Shoukaku.ts:231](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Shoukaku.ts#L231)
+
+***
+
+### setMaxListeners()
+
+> **setMaxListeners**(`n`): `this`
+
+By default `EventEmitter`s will print a warning if more than `10` listeners are
+added for a particular event. This is a useful default that helps finding
+memory leaks. The `emitter.setMaxListeners()` method allows the limit to be
+modified for this specific `EventEmitter` instance. The value can be set to `Infinity` (or `0`) to indicate an unlimited number of listeners.
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Parameters
+
+β’ **n**: `number`
+
+#### Returns
+
+`this`
+
+#### Since
+
+v0.3.5
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:768
+
+***
+
+### addAbortListener()
+
+> `static` **addAbortListener**(`signal`, `resource`): `Disposable`
+
+Listens once to the `abort` event on the provided `signal`.
+
+Listening to the `abort` event on abort signals is unsafe and may
+lead to resource leaks since another third party with the signal can
+call `e.stopImmediatePropagation()`. Unfortunately Node.js cannot change
+this since it would violate the web standard. Additionally, the original
+API makes it easy to forget to remove listeners.
+
+This API allows safely using `AbortSignal`s in Node.js APIs by solving these
+two issues by listening to the event such that `stopImmediatePropagation` does
+not prevent the listener from running.
+
+Returns a disposable so that it may be unsubscribed from more easily.
+
+```js
+import { addAbortListener } from 'node:events';
+
+function example(signal) {
+ let disposable;
+ try {
+ signal.addEventListener('abort', (e) => e.stopImmediatePropagation());
+ disposable = addAbortListener(signal, (e) => {
+ // Do something when signal is aborted.
+ });
+ } finally {
+ disposable?.[Symbol.dispose]();
+ }
+}
+```
+
+:::caution\[Experimental]
+This API should not be used in production and may be trimmed from a public release.
+:::
+
+#### Parameters
+
+β’ **signal**: `AbortSignal`
+
+β’ **resource**
+
+#### Returns
+
+`Disposable`
+
+Disposable that removes the `abort` listener.
+
+#### Since
+
+v20.5.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:437
+
+***
+
+### getEventListeners()
+
+> `static` **getEventListeners**(`emitter`, `name`): `Function`\[]
+
+Returns a copy of the array of listeners for the event named `eventName`.
+
+For `EventEmitter`s this behaves exactly the same as calling `.listeners` on
+the emitter.
+
+For `EventTarget`s this is the only way to get the event listeners for the
+event target. This is useful for debugging and diagnostic purposes.
+
+```js
+import { getEventListeners, EventEmitter } from 'node:events';
+
+{
+ const ee = new EventEmitter();
+ const listener = () => console.log('Events are fun');
+ ee.on('foo', listener);
+ console.log(getEventListeners(ee, 'foo')); // [ [Function: listener] ]
+}
+{
+ const et = new EventTarget();
+ const listener = () => console.log('Events are fun');
+ et.addEventListener('foo', listener);
+ console.log(getEventListeners(et, 'foo')); // [ [Function: listener] ]
+}
+```
+
+#### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`> | `EventTarget`
+
+β’ **name**: `string` | `symbol`
+
+#### Returns
+
+`Function`\[]
+
+#### Since
+
+v15.2.0, v14.17.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:358
+
+***
+
+### getMaxListeners()
+
+> `static` **getMaxListeners**(`emitter`): `number`
+
+Returns the currently set max amount of listeners.
+
+For `EventEmitter`s this behaves exactly the same as calling `.getMaxListeners` on
+the emitter.
+
+For `EventTarget`s this is the only way to get the max event listeners for the
+event target. If the number of event handlers on a single EventTarget exceeds
+the max set, the EventTarget will print a warning.
+
+```js
+import { getMaxListeners, setMaxListeners, EventEmitter } from 'node:events';
+
+{
+ const ee = new EventEmitter();
+ console.log(getMaxListeners(ee)); // 10
+ setMaxListeners(11, ee);
+ console.log(getMaxListeners(ee)); // 11
+}
+{
+ const et = new EventTarget();
+ console.log(getMaxListeners(et)); // 10
+ setMaxListeners(11, et);
+ console.log(getMaxListeners(et)); // 11
+}
+```
+
+#### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`> | `EventTarget`
+
+#### Returns
+
+`number`
+
+#### Since
+
+v19.9.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:387
+
+***
+
+### ~~listenerCount()~~
+
+> `static` **listenerCount**(`emitter`, `eventName`): `number`
+
+A class method that returns the number of listeners for the given `eventName` registered on the given `emitter`.
+
+```js
+import { EventEmitter, listenerCount } from 'node:events';
+
+const myEmitter = new EventEmitter();
+myEmitter.on('event', () => {});
+myEmitter.on('event', () => {});
+console.log(listenerCount(myEmitter, 'event'));
+// Prints: 2
+```
+
+:::caution\[Deprecated]
+Since v3.2.0 - Use `listenerCount` instead.
+:::
+
+#### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`>
+
+The emitter to query
+
+β’ **eventName**: `string` | `symbol`
+
+The event name
+
+#### Returns
+
+`number`
+
+#### Since
+
+v0.9.12
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:330
+
+***
+
+### on()
+
+#### on(emitter, eventName, options)
+
+> `static` **on**(`emitter`, `eventName`, `options`?): `AsyncIterableIterator`\<`any`\[]>
+
+```js
+import { on, EventEmitter } from 'node:events';
+import process from 'node:process';
+
+const ee = new EventEmitter();
+
+// Emit later on
+process.nextTick(() => {
+ ee.emit('foo', 'bar');
+ ee.emit('foo', 42);
+});
+
+for await (const event of on(ee, 'foo')) {
+ // The execution of this inner block is synchronous and it
+ // processes one event at a time (even with await). Do not use
+ // if concurrent execution is required.
+ console.log(event); // prints ['bar'] [42]
+}
+// Unreachable here
+```
+
+Returns an `AsyncIterator` that iterates `eventName` events. It will throw
+if the `EventEmitter` emits `'error'`. It removes all listeners when
+exiting the loop. The `value` returned by each iteration is an array
+composed of the emitted event arguments.
+
+An `AbortSignal` can be used to cancel waiting on events:
+
+```js
+import { on, EventEmitter } from 'node:events';
+import process from 'node:process';
+
+const ac = new AbortController();
+
+(async () => {
+ const ee = new EventEmitter();
+
+ // Emit later on
+ process.nextTick(() => {
+ ee.emit('foo', 'bar');
+ ee.emit('foo', 42);
+ });
+
+ for await (const event of on(ee, 'foo', { signal: ac.signal })) {
+ // The execution of this inner block is synchronous and it
+ // processes one event at a time (even with await). Do not use
+ // if concurrent execution is required.
+ console.log(event); // prints ['bar'] [42]
+ }
+ // Unreachable here
+})();
+
+process.nextTick(() => ac.abort());
+```
+
+Use the `close` option to specify an array of event names that will end the iteration:
+
+```js
+import { on, EventEmitter } from 'node:events';
+import process from 'node:process';
+
+const ee = new EventEmitter();
+
+// Emit later on
+process.nextTick(() => {
+ ee.emit('foo', 'bar');
+ ee.emit('foo', 42);
+ ee.emit('close');
+});
+
+for await (const event of on(ee, 'foo', { close: ['close'] })) {
+ console.log(event); // prints ['bar'] [42]
+}
+// the loop will exit after 'close' is emitted
+console.log('done'); // prints 'done'
+```
+
+##### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`>
+
+β’ **eventName**: `string` | `symbol`
+
+β’ **options?**: `StaticEventEmitterIteratorOptions`
+
+##### Returns
+
+`AsyncIterableIterator`\<`any`\[]>
+
+An `AsyncIterator` that iterates `eventName` events emitted by the `emitter`
+
+##### Since
+
+v13.6.0, v12.16.0
+
+##### Defined in
+
+node\_modules/@types/node/events.d.ts:303
+
+#### on(emitter, eventName, options)
+
+> `static` **on**(`emitter`, `eventName`, `options`?): `AsyncIterableIterator`\<`any`\[]>
+
+##### Parameters
+
+β’ **emitter**: `EventTarget`
+
+β’ **eventName**: `string`
+
+β’ **options?**: `StaticEventEmitterIteratorOptions`
+
+##### Returns
+
+`AsyncIterableIterator`\<`any`\[]>
+
+##### Defined in
+
+node\_modules/@types/node/events.d.ts:308
+
+***
+
+### once()
+
+#### once(emitter, eventName, options)
+
+> `static` **once**(`emitter`, `eventName`, `options`?): `Promise`\<`any`\[]>
+
+Creates a `Promise` that is fulfilled when the `EventEmitter` emits the given
+event or that is rejected if the `EventEmitter` emits `'error'` while waiting.
+The `Promise` will resolve with an array of all the arguments emitted to the
+given event.
+
+This method is intentionally generic and works with the web platform [EventTarget](https://dom.spec.whatwg.org/#interface-eventtarget) interface, which has no special`'error'` event
+semantics and does not listen to the `'error'` event.
+
+```js
+import { once, EventEmitter } from 'node:events';
+import process from 'node:process';
+
+const ee = new EventEmitter();
+
+process.nextTick(() => {
+ ee.emit('myevent', 42);
+});
+
+const [value] = await once(ee, 'myevent');
+console.log(value);
+
+const err = new Error('kaboom');
+process.nextTick(() => {
+ ee.emit('error', err);
+});
+
+try {
+ await once(ee, 'myevent');
+} catch (err) {
+ console.error('error happened', err);
+}
+```
+
+The special handling of the `'error'` event is only used when `events.once()` is used to wait for another event. If `events.once()` is used to wait for the
+'`error'` event itself, then it is treated as any other kind of event without
+special handling:
+
+```js
+import { EventEmitter, once } from 'node:events';
+
+const ee = new EventEmitter();
+
+once(ee, 'error')
+ .then(([err]) => console.log('ok', err.message))
+ .catch((err) => console.error('error', err.message));
+
+ee.emit('error', new Error('boom'));
+
+// Prints: ok boom
+```
+
+An `AbortSignal` can be used to cancel waiting for the event:
+
+```js
+import { EventEmitter, once } from 'node:events';
+
+const ee = new EventEmitter();
+const ac = new AbortController();
+
+async function foo(emitter, event, signal) {
+ try {
+ await once(emitter, event, { signal });
+ console.log('event emitted!');
+ } catch (error) {
+ if (error.name === 'AbortError') {
+ console.error('Waiting for the event was canceled!');
+ } else {
+ console.error('There was an error', error.message);
+ }
+ }
+}
+
+foo(ee, 'foo', ac.signal);
+ac.abort(); // Abort waiting for the event
+ee.emit('foo'); // Prints: Waiting for the event was canceled!
+```
+
+##### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`>
+
+β’ **eventName**: `string` | `symbol`
+
+β’ **options?**: `StaticEventEmitterOptions`
+
+##### Returns
+
+`Promise`\<`any`\[]>
+
+##### Since
+
+v11.13.0, v10.16.0
+
+##### Defined in
+
+node\_modules/@types/node/events.d.ts:217
+
+#### once(emitter, eventName, options)
+
+> `static` **once**(`emitter`, `eventName`, `options`?): `Promise`\<`any`\[]>
+
+##### Parameters
+
+β’ **emitter**: `EventTarget`
+
+β’ **eventName**: `string`
+
+β’ **options?**: `StaticEventEmitterOptions`
+
+##### Returns
+
+`Promise`\<`any`\[]>
+
+##### Defined in
+
+node\_modules/@types/node/events.d.ts:222
+
+***
+
+### setMaxListeners()
+
+> `static` **setMaxListeners**(`n`?, ...`eventTargets`?): `void`
+
+```js
+import { setMaxListeners, EventEmitter } from 'node:events';
+
+const target = new EventTarget();
+const emitter = new EventEmitter();
+
+setMaxListeners(5, target, emitter);
+```
+
+#### Parameters
+
+β’ **n?**: `number`
+
+A non-negative number. The maximum number of listeners per `EventTarget` event.
+
+β’ ...**eventTargets?**: (`EventEmitter`\<`DefaultEventMap`> | `EventTarget`)\[]
+
+#### Returns
+
+`void`
+
+#### Since
+
+v15.4.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:402
+
+## Events
+
+### on()
+
+#### on(event, listener)
+
+> **on**(`event`, `listener`): `this`
+
+Emitted when reconnect tries are occurring and how many tries are left
+
+##### Parameters
+
+β’ **event**: `"reconnecting"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/Shoukaku.ts:104](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Shoukaku.ts#L104)
+
+#### on(event, listener)
+
+> **on**(`event`, `listener`): `this`
+
+Emitted when data useful for debugging is produced
+
+##### Parameters
+
+β’ **event**: `"debug"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/Shoukaku.ts:109](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Shoukaku.ts#L109)
+
+#### on(event, listener)
+
+> **on**(`event`, `listener`): `this`
+
+Emitted when an error occurs
+
+##### Parameters
+
+β’ **event**: `"error"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/Shoukaku.ts:114](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Shoukaku.ts#L114)
+
+#### on(event, listener)
+
+> **on**(`event`, `listener`): `this`
+
+Emitted when Shoukaku is ready to receive operations
+
+##### Parameters
+
+β’ **event**: `"ready"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/Shoukaku.ts:119](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Shoukaku.ts#L119)
+
+#### on(event, listener)
+
+> **on**(`event`, `listener`): `this`
+
+Emitted when a websocket connection to Lavalink closes
+
+##### Parameters
+
+β’ **event**: `"close"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/Shoukaku.ts:124](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Shoukaku.ts#L124)
+
+#### on(event, listener)
+
+> **on**(`event`, `listener`): `this`
+
+Emitted when a websocket connection to Lavalink disconnects
+
+##### Parameters
+
+β’ **event**: `"disconnect"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/Shoukaku.ts:129](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Shoukaku.ts#L129)
+
+#### on(event, listener)
+
+> **on**(`event`, `listener`): `this`
+
+Emitted when a raw message is received from Lavalink
+
+##### Parameters
+
+β’ **event**: `"raw"`
+
+β’ **listener**
+
+##### Returns
+
+`this`
+
+##### Defined in
+
+[src/Shoukaku.ts:134](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Shoukaku.ts#L134)
diff --git a/src/content/docs/4.0.1/api/enumerations/LoadType.md b/src/content/docs/4.0.1/api/enumerations/LoadType.md
new file mode 100644
index 0000000..8337ce5
--- /dev/null
+++ b/src/content/docs/4.0.1/api/enumerations/LoadType.md
@@ -0,0 +1,57 @@
+---
+editUrl: false
+next: false
+prev: false
+title: LoadType
+slug: 4.0.1/apienumerations/loadtype
+---
+
+## Enumeration Members
+
+### EMPTY
+
+> **EMPTY**: `"empty"`
+
+#### Defined in
+
+[src/node/Rest.ts:12](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L12)
+
+***
+
+### ERROR
+
+> **ERROR**: `"error"`
+
+#### Defined in
+
+[src/node/Rest.ts:13](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L13)
+
+***
+
+### PLAYLIST
+
+> **PLAYLIST**: `"playlist"`
+
+#### Defined in
+
+[src/node/Rest.ts:10](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L10)
+
+***
+
+### SEARCH
+
+> **SEARCH**: `"search"`
+
+#### Defined in
+
+[src/node/Rest.ts:11](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L11)
+
+***
+
+### TRACK
+
+> **TRACK**: `"track"`
+
+#### Defined in
+
+[src/node/Rest.ts:9](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L9)
diff --git a/src/content/docs/4.0.1/api/interfaces/Address.md b/src/content/docs/4.0.1/api/interfaces/Address.md
new file mode 100644
index 0000000..06b0914
--- /dev/null
+++ b/src/content/docs/4.0.1/api/interfaces/Address.md
@@ -0,0 +1,37 @@
+---
+editUrl: false
+next: false
+prev: false
+title: Address
+slug: 4.0.1/apiinterfaces/address
+---
+
+## Properties
+
+### address
+
+> **address**: `string`
+
+#### Defined in
+
+[src/node/Rest.ts:78](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L78)
+
+***
+
+### failingTime
+
+> **failingTime**: `string`
+
+#### Defined in
+
+[src/node/Rest.ts:80](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L80)
+
+***
+
+### failingTimestamp
+
+> **failingTimestamp**: `number`
+
+#### Defined in
+
+[src/node/Rest.ts:79](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L79)
diff --git a/src/content/docs/4.0.1/api/interfaces/Band.md b/src/content/docs/4.0.1/api/interfaces/Band.md
new file mode 100644
index 0000000..54c7afc
--- /dev/null
+++ b/src/content/docs/4.0.1/api/interfaces/Band.md
@@ -0,0 +1,27 @@
+---
+editUrl: false
+next: false
+prev: false
+title: Band
+slug: 4.0.1/apiinterfaces/band
+---
+
+## Properties
+
+### band
+
+> **band**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:32](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L32)
+
+***
+
+### gain
+
+> **gain**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:33](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L33)
diff --git a/src/content/docs/4.0.1/api/interfaces/ChannelMixSettings.md b/src/content/docs/4.0.1/api/interfaces/ChannelMixSettings.md
new file mode 100644
index 0000000..1242b34
--- /dev/null
+++ b/src/content/docs/4.0.1/api/interfaces/ChannelMixSettings.md
@@ -0,0 +1,47 @@
+---
+editUrl: false
+next: false
+prev: false
+title: ChannelMixSettings
+slug: 4.0.1/apiinterfaces/channelmixsettings
+---
+
+## Properties
+
+### leftToLeft?
+
+> `optional` **leftToLeft**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:70](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L70)
+
+***
+
+### leftToRight?
+
+> `optional` **leftToRight**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:71](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L71)
+
+***
+
+### rightToLeft?
+
+> `optional` **rightToLeft**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:72](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L72)
+
+***
+
+### rightToRight?
+
+> `optional` **rightToRight**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:73](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L73)
diff --git a/src/content/docs/4.0.1/api/interfaces/ConnectorMethods.md b/src/content/docs/4.0.1/api/interfaces/ConnectorMethods.md
new file mode 100644
index 0000000..268a99d
--- /dev/null
+++ b/src/content/docs/4.0.1/api/interfaces/ConnectorMethods.md
@@ -0,0 +1,27 @@
+---
+editUrl: false
+next: false
+prev: false
+title: ConnectorMethods
+slug: 4.0.1/apiinterfaces/connectormethods
+---
+
+## Properties
+
+### getId
+
+> **getId**: `any`
+
+#### Defined in
+
+[src/connectors/Connector.ts:7](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/connectors/Connector.ts#L7)
+
+***
+
+### sendPacket
+
+> **sendPacket**: `any`
+
+#### Defined in
+
+[src/connectors/Connector.ts:6](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/connectors/Connector.ts#L6)
diff --git a/src/content/docs/4.0.1/api/interfaces/DistortionSettings.md b/src/content/docs/4.0.1/api/interfaces/DistortionSettings.md
new file mode 100644
index 0000000..a7f1be2
--- /dev/null
+++ b/src/content/docs/4.0.1/api/interfaces/DistortionSettings.md
@@ -0,0 +1,87 @@
+---
+editUrl: false
+next: false
+prev: false
+title: DistortionSettings
+slug: 4.0.1/apiinterfaces/distortionsettings
+---
+
+## Properties
+
+### cosOffset?
+
+> `optional` **cosOffset**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:61](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L61)
+
+***
+
+### cosScale?
+
+> `optional` **cosScale**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:62](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L62)
+
+***
+
+### offset?
+
+> `optional` **offset**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:65](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L65)
+
+***
+
+### scale?
+
+> `optional` **scale**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:66](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L66)
+
+***
+
+### sinOffset?
+
+> `optional` **sinOffset**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:59](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L59)
+
+***
+
+### sinScale?
+
+> `optional` **sinScale**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:60](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L60)
+
+***
+
+### tanOffset?
+
+> `optional` **tanOffset**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:63](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L63)
+
+***
+
+### tanScale?
+
+> `optional` **tanScale**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:64](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L64)
diff --git a/src/content/docs/4.0.1/api/interfaces/EmptyResult.md b/src/content/docs/4.0.1/api/interfaces/EmptyResult.md
new file mode 100644
index 0000000..bf59124
--- /dev/null
+++ b/src/content/docs/4.0.1/api/interfaces/EmptyResult.md
@@ -0,0 +1,27 @@
+---
+editUrl: false
+next: false
+prev: false
+title: EmptyResult
+slug: 4.0.1/apiinterfaces/emptyresult
+---
+
+## Properties
+
+### data
+
+> **data**: `object`
+
+#### Defined in
+
+[src/node/Rest.ts:67](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L67)
+
+***
+
+### loadType
+
+> **loadType**: [`EMPTY`](/4.0.1/api/enumerations/loadtype/#empty)
+
+#### Defined in
+
+[src/node/Rest.ts:66](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L66)
diff --git a/src/content/docs/4.0.1/api/interfaces/ErrorResult.md b/src/content/docs/4.0.1/api/interfaces/ErrorResult.md
new file mode 100644
index 0000000..6a2f52e
--- /dev/null
+++ b/src/content/docs/4.0.1/api/interfaces/ErrorResult.md
@@ -0,0 +1,27 @@
+---
+editUrl: false
+next: false
+prev: false
+title: ErrorResult
+slug: 4.0.1/apiinterfaces/errorresult
+---
+
+## Properties
+
+### data
+
+> **data**: [`Exception`](/4.0.1/api/interfaces/exception/)
+
+#### Defined in
+
+[src/node/Rest.ts:72](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L72)
+
+***
+
+### loadType
+
+> **loadType**: [`ERROR`](/4.0.1/api/enumerations/loadtype/#error)
+
+#### Defined in
+
+[src/node/Rest.ts:71](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L71)
diff --git a/src/content/docs/4.0.1/api/interfaces/Exception.md b/src/content/docs/4.0.1/api/interfaces/Exception.md
new file mode 100644
index 0000000..189aac3
--- /dev/null
+++ b/src/content/docs/4.0.1/api/interfaces/Exception.md
@@ -0,0 +1,37 @@
+---
+editUrl: false
+next: false
+prev: false
+title: Exception
+slug: 4.0.1/apiinterfaces/exception
+---
+
+## Properties
+
+### cause
+
+> **cause**: `string`
+
+#### Defined in
+
+[src/node/Rest.ts:47](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L47)
+
+***
+
+### message
+
+> **message**: `string`
+
+#### Defined in
+
+[src/node/Rest.ts:45](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L45)
+
+***
+
+### severity
+
+> **severity**: [`Severity`](/4.0.1/api/type-aliases/severity/)
+
+#### Defined in
+
+[src/node/Rest.ts:46](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L46)
diff --git a/src/content/docs/4.0.1/api/interfaces/FilterOptions.md b/src/content/docs/4.0.1/api/interfaces/FilterOptions.md
new file mode 100644
index 0000000..e5a9023
--- /dev/null
+++ b/src/content/docs/4.0.1/api/interfaces/FilterOptions.md
@@ -0,0 +1,107 @@
+---
+editUrl: false
+next: false
+prev: false
+title: FilterOptions
+slug: 4.0.1/apiinterfaces/filteroptions
+---
+
+## Properties
+
+### channelMix?
+
+> `optional` **channelMix**: `null` | [`ChannelMixSettings`](/4.0.1/api/interfaces/channelmixsettings/)
+
+#### Defined in
+
+[src/guild/Player.ts:139](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L139)
+
+***
+
+### distortion?
+
+> `optional` **distortion**: `null` | [`DistortionSettings`](/4.0.1/api/interfaces/distortionsettings/)
+
+#### Defined in
+
+[src/guild/Player.ts:138](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L138)
+
+***
+
+### equalizer?
+
+> `optional` **equalizer**: [`Band`](/4.0.1/api/interfaces/band/)\[]
+
+#### Defined in
+
+[src/guild/Player.ts:132](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L132)
+
+***
+
+### karaoke?
+
+> `optional` **karaoke**: `null` | [`KaraokeSettings`](/4.0.1/api/interfaces/karaokesettings/)
+
+#### Defined in
+
+[src/guild/Player.ts:133](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L133)
+
+***
+
+### lowPass?
+
+> `optional` **lowPass**: `null` | [`LowPassSettings`](/4.0.1/api/interfaces/lowpasssettings/)
+
+#### Defined in
+
+[src/guild/Player.ts:140](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L140)
+
+***
+
+### rotation?
+
+> `optional` **rotation**: `null` | [`RotationSettings`](/4.0.1/api/interfaces/rotationsettings/)
+
+#### Defined in
+
+[src/guild/Player.ts:137](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L137)
+
+***
+
+### timescale?
+
+> `optional` **timescale**: `null` | [`TimescaleSettings`](/4.0.1/api/interfaces/timescalesettings/)
+
+#### Defined in
+
+[src/guild/Player.ts:134](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L134)
+
+***
+
+### tremolo?
+
+> `optional` **tremolo**: `null` | [`FreqSettings`](/4.0.1/api/interfaces/freqsettings/)
+
+#### Defined in
+
+[src/guild/Player.ts:135](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L135)
+
+***
+
+### vibrato?
+
+> `optional` **vibrato**: `null` | [`FreqSettings`](/4.0.1/api/interfaces/freqsettings/)
+
+#### Defined in
+
+[src/guild/Player.ts:136](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L136)
+
+***
+
+### volume?
+
+> `optional` **volume**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:131](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L131)
diff --git a/src/content/docs/4.0.1/api/interfaces/FreqSettings.md b/src/content/docs/4.0.1/api/interfaces/FreqSettings.md
new file mode 100644
index 0000000..2d5d10d
--- /dev/null
+++ b/src/content/docs/4.0.1/api/interfaces/FreqSettings.md
@@ -0,0 +1,27 @@
+---
+editUrl: false
+next: false
+prev: false
+title: FreqSettings
+slug: 4.0.1/apiinterfaces/freqsettings
+---
+
+## Properties
+
+### depth?
+
+> `optional` **depth**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:51](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L51)
+
+***
+
+### frequency?
+
+> `optional` **frequency**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:50](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L50)
diff --git a/src/content/docs/4.0.1/api/interfaces/KaraokeSettings.md b/src/content/docs/4.0.1/api/interfaces/KaraokeSettings.md
new file mode 100644
index 0000000..bdc75c0
--- /dev/null
+++ b/src/content/docs/4.0.1/api/interfaces/KaraokeSettings.md
@@ -0,0 +1,47 @@
+---
+editUrl: false
+next: false
+prev: false
+title: KaraokeSettings
+slug: 4.0.1/apiinterfaces/karaokesettings
+---
+
+## Properties
+
+### filterBand?
+
+> `optional` **filterBand**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:39](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L39)
+
+***
+
+### filterWidth?
+
+> `optional` **filterWidth**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:40](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L40)
+
+***
+
+### level?
+
+> `optional` **level**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:37](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L37)
+
+***
+
+### monoLevel?
+
+> `optional` **monoLevel**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:38](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L38)
diff --git a/src/content/docs/4.0.1/api/interfaces/LavalinkPlayer.md b/src/content/docs/4.0.1/api/interfaces/LavalinkPlayer.md
new file mode 100644
index 0000000..334b95f
--- /dev/null
+++ b/src/content/docs/4.0.1/api/interfaces/LavalinkPlayer.md
@@ -0,0 +1,67 @@
+---
+editUrl: false
+next: false
+prev: false
+title: LavalinkPlayer
+slug: 4.0.1/apiinterfaces/lavalinkplayer
+---
+
+## Properties
+
+### filters
+
+> **filters**: [`FilterOptions`](/4.0.1/api/interfaces/filteroptions/)
+
+#### Defined in
+
+[src/node/Rest.ts:115](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L115)
+
+***
+
+### guildId
+
+> **guildId**: `string`
+
+#### Defined in
+
+[src/node/Rest.ts:110](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L110)
+
+***
+
+### paused
+
+> **paused**: `boolean`
+
+#### Defined in
+
+[src/node/Rest.ts:113](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L113)
+
+***
+
+### track?
+
+> `optional` **track**: [`Track`](/4.0.1/api/interfaces/track/)
+
+#### Defined in
+
+[src/node/Rest.ts:111](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L111)
+
+***
+
+### voice
+
+> **voice**: [`LavalinkPlayerVoice`](/4.0.1/api/interfaces/lavalinkplayervoice/)
+
+#### Defined in
+
+[src/node/Rest.ts:114](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L114)
+
+***
+
+### volume
+
+> **volume**: `number`
+
+#### Defined in
+
+[src/node/Rest.ts:112](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L112)
diff --git a/src/content/docs/4.0.1/api/interfaces/LavalinkPlayerVoice.md b/src/content/docs/4.0.1/api/interfaces/LavalinkPlayerVoice.md
new file mode 100644
index 0000000..63b18c8
--- /dev/null
+++ b/src/content/docs/4.0.1/api/interfaces/LavalinkPlayerVoice.md
@@ -0,0 +1,57 @@
+---
+editUrl: false
+next: false
+prev: false
+title: LavalinkPlayerVoice
+slug: 4.0.1/apiinterfaces/lavalinkplayervoice
+---
+
+## Properties
+
+### connected?
+
+> `optional` **connected**: `boolean`
+
+#### Defined in
+
+[src/node/Rest.ts:103](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L103)
+
+***
+
+### endpoint
+
+> **endpoint**: `string`
+
+#### Defined in
+
+[src/node/Rest.ts:101](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L101)
+
+***
+
+### ping?
+
+> `optional` **ping**: `number`
+
+#### Defined in
+
+[src/node/Rest.ts:104](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L104)
+
+***
+
+### sessionId
+
+> **sessionId**: `string`
+
+#### Defined in
+
+[src/node/Rest.ts:102](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L102)
+
+***
+
+### token
+
+> **token**: `string`
+
+#### Defined in
+
+[src/node/Rest.ts:100](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L100)
diff --git a/src/content/docs/4.0.1/api/interfaces/LavalinkPlayerVoiceOptions.md b/src/content/docs/4.0.1/api/interfaces/LavalinkPlayerVoiceOptions.md
new file mode 100644
index 0000000..0cc3393
--- /dev/null
+++ b/src/content/docs/4.0.1/api/interfaces/LavalinkPlayerVoiceOptions.md
@@ -0,0 +1,53 @@
+---
+editUrl: false
+next: false
+prev: false
+title: LavalinkPlayerVoiceOptions
+slug: 4.0.1/apiinterfaces/lavalinkplayervoiceoptions
+---
+
+## Extends
+
+* `Omit`\<[`LavalinkPlayerVoice`](/4.0.1/api/interfaces/lavalinkplayervoice/), `"connected"` | `"ping"`>
+
+## Properties
+
+### endpoint
+
+> **endpoint**: `string`
+
+#### Inherited from
+
+`Omit.endpoint`
+
+#### Defined in
+
+[src/node/Rest.ts:101](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L101)
+
+***
+
+### sessionId
+
+> **sessionId**: `string`
+
+#### Inherited from
+
+`Omit.sessionId`
+
+#### Defined in
+
+[src/node/Rest.ts:102](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L102)
+
+***
+
+### token
+
+> **token**: `string`
+
+#### Inherited from
+
+`Omit.token`
+
+#### Defined in
+
+[src/node/Rest.ts:100](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L100)
diff --git a/src/content/docs/4.0.1/api/interfaces/LowPassSettings.md b/src/content/docs/4.0.1/api/interfaces/LowPassSettings.md
new file mode 100644
index 0000000..203371a
--- /dev/null
+++ b/src/content/docs/4.0.1/api/interfaces/LowPassSettings.md
@@ -0,0 +1,17 @@
+---
+editUrl: false
+next: false
+prev: false
+title: LowPassSettings
+slug: 4.0.1/apiinterfaces/lowpasssettings
+---
+
+## Properties
+
+### smoothing?
+
+> `optional` **smoothing**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:77](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L77)
diff --git a/src/content/docs/4.0.1/api/interfaces/NodeOption.md b/src/content/docs/4.0.1/api/interfaces/NodeOption.md
new file mode 100644
index 0000000..aa2b04e
--- /dev/null
+++ b/src/content/docs/4.0.1/api/interfaces/NodeOption.md
@@ -0,0 +1,67 @@
+---
+editUrl: false
+next: false
+prev: false
+title: NodeOption
+slug: 4.0.1/apiinterfaces/nodeoption
+---
+
+## Properties
+
+### auth
+
+> **auth**: `string`
+
+Credentials to access Lavalink
+
+#### Defined in
+
+[src/Shoukaku.ts:33](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Shoukaku.ts#L33)
+
+***
+
+### group?
+
+> `optional` **group**: `string`
+
+Group of this node
+
+#### Defined in
+
+[src/Shoukaku.ts:41](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Shoukaku.ts#L41)
+
+***
+
+### name
+
+> **name**: `string`
+
+Name of this node
+
+#### Defined in
+
+[src/Shoukaku.ts:25](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Shoukaku.ts#L25)
+
+***
+
+### secure?
+
+> `optional` **secure**: `boolean`
+
+Whether to use secure protocols or not
+
+#### Defined in
+
+[src/Shoukaku.ts:37](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Shoukaku.ts#L37)
+
+***
+
+### url
+
+> **url**: `string`
+
+URL of Lavalink
+
+#### Defined in
+
+[src/Shoukaku.ts:29](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Shoukaku.ts#L29)
diff --git a/src/content/docs/4.0.1/api/interfaces/NodeStats.md b/src/content/docs/4.0.1/api/interfaces/NodeStats.md
new file mode 100644
index 0000000..4d31ff7
--- /dev/null
+++ b/src/content/docs/4.0.1/api/interfaces/NodeStats.md
@@ -0,0 +1,107 @@
+---
+editUrl: false
+next: false
+prev: false
+title: NodeStats
+slug: 4.0.1/apiinterfaces/nodestats
+---
+
+## Properties
+
+### cpu
+
+> **cpu**: `object`
+
+#### cores
+
+> **cores**: `number`
+
+#### lavalinkLoad
+
+> **lavalinkLoad**: `number`
+
+#### systemLoad
+
+> **systemLoad**: `number`
+
+#### Defined in
+
+[src/node/Node.ts:23](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Node.ts#L23)
+
+***
+
+### frameStats
+
+> **frameStats**: `object`
+
+#### deficit
+
+> **deficit**: `number`
+
+#### nulled
+
+> **nulled**: `number`
+
+#### sent
+
+> **sent**: `number`
+
+#### Defined in
+
+[src/node/Node.ts:18](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Node.ts#L18)
+
+***
+
+### memory
+
+> **memory**: `object`
+
+#### allocated
+
+> **allocated**: `number`
+
+#### free
+
+> **free**: `number`
+
+#### reservable
+
+> **reservable**: `number`
+
+#### used
+
+> **used**: `number`
+
+#### Defined in
+
+[src/node/Node.ts:12](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Node.ts#L12)
+
+***
+
+### players
+
+> **players**: `number`
+
+#### Defined in
+
+[src/node/Node.ts:10](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Node.ts#L10)
+
+***
+
+### playingPlayers
+
+> **playingPlayers**: `number`
+
+#### Defined in
+
+[src/node/Node.ts:11](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Node.ts#L11)
+
+***
+
+### uptime
+
+> **uptime**: `number`
+
+#### Defined in
+
+[src/node/Node.ts:28](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Node.ts#L28)
diff --git a/src/content/docs/4.0.1/api/interfaces/NonResumableHeaders.md b/src/content/docs/4.0.1/api/interfaces/NonResumableHeaders.md
new file mode 100644
index 0000000..40c0002
--- /dev/null
+++ b/src/content/docs/4.0.1/api/interfaces/NonResumableHeaders.md
@@ -0,0 +1,11 @@
+---
+editUrl: false
+next: false
+prev: false
+title: NonResumableHeaders
+slug: 4.0.1/apiinterfaces/nonresumableheaders
+---
+
+## Extends
+
+* `Omit`\<[`ResumableHeaders`](/4.0.1/api/interfaces/resumableheaders/), `"Session-Id"`>
diff --git a/src/content/docs/4.0.1/api/interfaces/PlayOptions.md b/src/content/docs/4.0.1/api/interfaces/PlayOptions.md
new file mode 100644
index 0000000..ae0e523
--- /dev/null
+++ b/src/content/docs/4.0.1/api/interfaces/PlayOptions.md
@@ -0,0 +1,49 @@
+---
+editUrl: false
+next: false
+prev: false
+title: PlayOptions
+slug: 4.0.1/apiinterfaces/playoptions
+---
+
+Options when playing a new track
+
+## Properties
+
+### options?
+
+> `optional` **options**: `object`
+
+#### endTime?
+
+> `optional` **endTime**: `number`
+
+#### noReplace?
+
+> `optional` **noReplace**: `boolean`
+
+#### pause?
+
+> `optional` **pause**: `boolean`
+
+#### startTime?
+
+> `optional` **startTime**: `number`
+
+#### volume?
+
+> `optional` **volume**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:15](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L15)
+
+***
+
+### track
+
+> **track**: `string`
+
+#### Defined in
+
+[src/guild/Player.ts:14](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L14)
diff --git a/src/content/docs/4.0.1/api/interfaces/PlayerEvent.md b/src/content/docs/4.0.1/api/interfaces/PlayerEvent.md
new file mode 100644
index 0000000..492218e
--- /dev/null
+++ b/src/content/docs/4.0.1/api/interfaces/PlayerEvent.md
@@ -0,0 +1,45 @@
+---
+editUrl: false
+next: false
+prev: false
+title: PlayerEvent
+slug: 4.0.1/apiinterfaces/playerevent
+---
+
+## Extended by
+
+* [`TrackStartEvent`](/4.0.1/api/interfaces/trackstartevent/)
+* [`TrackEndEvent`](/4.0.1/api/interfaces/trackendevent/)
+* [`TrackStuckEvent`](/4.0.1/api/interfaces/trackstuckevent/)
+* [`TrackExceptionEvent`](/4.0.1/api/interfaces/trackexceptionevent/)
+* [`WebSocketClosedEvent`](/4.0.1/api/interfaces/websocketclosedevent/)
+
+## Properties
+
+### guildId
+
+> **guildId**: `string`
+
+#### Defined in
+
+[src/guild/Player.ts:83](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L83)
+
+***
+
+### op
+
+> **op**: [`EVENT`](/4.0.1/api/namespaces/constants/enumerations/opcodes/#event)
+
+#### Defined in
+
+[src/guild/Player.ts:81](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L81)
+
+***
+
+### type
+
+> **type**: [`PlayerEventType`](/4.0.1/api/type-aliases/playereventtype/)
+
+#### Defined in
+
+[src/guild/Player.ts:82](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L82)
diff --git a/src/content/docs/4.0.1/api/interfaces/PlayerUpdate.md b/src/content/docs/4.0.1/api/interfaces/PlayerUpdate.md
new file mode 100644
index 0000000..4c5ad92
--- /dev/null
+++ b/src/content/docs/4.0.1/api/interfaces/PlayerUpdate.md
@@ -0,0 +1,49 @@
+---
+editUrl: false
+next: false
+prev: false
+title: PlayerUpdate
+slug: 4.0.1/apiinterfaces/playerupdate
+---
+
+## Properties
+
+### guildId
+
+> **guildId**: `string`
+
+#### Defined in
+
+[src/guild/Player.ts:127](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L127)
+
+***
+
+### op
+
+> **op**: [`PLAYER_UPDATE`](/4.0.1/api/namespaces/constants/enumerations/opcodes/#player_update)
+
+#### Defined in
+
+[src/guild/Player.ts:121](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L121)
+
+***
+
+### state
+
+> **state**: `object`
+
+#### connected
+
+> **connected**: `boolean`
+
+#### position?
+
+> `optional` **position**: `number`
+
+#### time
+
+> **time**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:122](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L122)
diff --git a/src/content/docs/4.0.1/api/interfaces/Playlist.md b/src/content/docs/4.0.1/api/interfaces/Playlist.md
new file mode 100644
index 0000000..89a9b5e
--- /dev/null
+++ b/src/content/docs/4.0.1/api/interfaces/Playlist.md
@@ -0,0 +1,55 @@
+---
+editUrl: false
+next: false
+prev: false
+title: Playlist
+slug: 4.0.1/apiinterfaces/playlist
+---
+
+## Properties
+
+### encoded
+
+> **encoded**: `string`
+
+#### Defined in
+
+[src/node/Rest.ts:35](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L35)
+
+***
+
+### info
+
+> **info**: `object`
+
+#### name
+
+> **name**: `string`
+
+#### selectedTrack
+
+> **selectedTrack**: `number`
+
+#### Defined in
+
+[src/node/Rest.ts:36](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L36)
+
+***
+
+### pluginInfo
+
+> **pluginInfo**: `unknown`
+
+#### Defined in
+
+[src/node/Rest.ts:40](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L40)
+
+***
+
+### tracks
+
+> **tracks**: [`Track`](/4.0.1/api/interfaces/track/)\[]
+
+#### Defined in
+
+[src/node/Rest.ts:41](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L41)
diff --git a/src/content/docs/4.0.1/api/interfaces/PlaylistResult.md b/src/content/docs/4.0.1/api/interfaces/PlaylistResult.md
new file mode 100644
index 0000000..d1d77bf
--- /dev/null
+++ b/src/content/docs/4.0.1/api/interfaces/PlaylistResult.md
@@ -0,0 +1,27 @@
+---
+editUrl: false
+next: false
+prev: false
+title: PlaylistResult
+slug: 4.0.1/apiinterfaces/playlistresult
+---
+
+## Properties
+
+### data
+
+> **data**: [`Playlist`](/4.0.1/api/interfaces/playlist/)
+
+#### Defined in
+
+[src/node/Rest.ts:57](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L57)
+
+***
+
+### loadType
+
+> **loadType**: [`PLAYLIST`](/4.0.1/api/enumerations/loadtype/#playlist)
+
+#### Defined in
+
+[src/node/Rest.ts:56](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L56)
diff --git a/src/content/docs/4.0.1/api/interfaces/ResumableHeaders.md b/src/content/docs/4.0.1/api/interfaces/ResumableHeaders.md
new file mode 100644
index 0000000..70cbcf0
--- /dev/null
+++ b/src/content/docs/4.0.1/api/interfaces/ResumableHeaders.md
@@ -0,0 +1,61 @@
+---
+editUrl: false
+next: false
+prev: false
+title: ResumableHeaders
+slug: 4.0.1/apiinterfaces/resumableheaders
+---
+
+## Indexable
+
+\[`key`: `string`]: `string`
+
+## Properties
+
+### Authorization
+
+> **Authorization**: `string`
+
+#### Defined in
+
+[src/node/Node.ts:66](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Node.ts#L66)
+
+***
+
+### Client-Name
+
+> **Client-Name**: `string`
+
+#### Defined in
+
+[src/node/Node.ts:64](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Node.ts#L64)
+
+***
+
+### Session-Id
+
+> **Session-Id**: `string`
+
+#### Defined in
+
+[src/node/Node.ts:68](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Node.ts#L68)
+
+***
+
+### User-Agent
+
+> **User-Agent**: `string`
+
+#### Defined in
+
+[src/node/Node.ts:65](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Node.ts#L65)
+
+***
+
+### User-Id
+
+> **User-Id**: `string`
+
+#### Defined in
+
+[src/node/Node.ts:67](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Node.ts#L67)
diff --git a/src/content/docs/4.0.1/api/interfaces/ResumeOptions.md b/src/content/docs/4.0.1/api/interfaces/ResumeOptions.md
new file mode 100644
index 0000000..aed5b65
--- /dev/null
+++ b/src/content/docs/4.0.1/api/interfaces/ResumeOptions.md
@@ -0,0 +1,47 @@
+---
+editUrl: false
+next: false
+prev: false
+title: ResumeOptions
+slug: 4.0.1/apiinterfaces/resumeoptions
+---
+
+## Properties
+
+### endTime?
+
+> `optional` **endTime**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:28](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L28)
+
+***
+
+### noReplace?
+
+> `optional` **noReplace**: `boolean`
+
+#### Defined in
+
+[src/guild/Player.ts:25](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L25)
+
+***
+
+### pause?
+
+> `optional` **pause**: `boolean`
+
+#### Defined in
+
+[src/guild/Player.ts:26](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L26)
+
+***
+
+### startTime?
+
+> `optional` **startTime**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:27](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L27)
diff --git a/src/content/docs/4.0.1/api/interfaces/RotationSettings.md b/src/content/docs/4.0.1/api/interfaces/RotationSettings.md
new file mode 100644
index 0000000..ae48921
--- /dev/null
+++ b/src/content/docs/4.0.1/api/interfaces/RotationSettings.md
@@ -0,0 +1,17 @@
+---
+editUrl: false
+next: false
+prev: false
+title: RotationSettings
+slug: 4.0.1/apiinterfaces/rotationsettings
+---
+
+## Properties
+
+### rotationHz?
+
+> `optional` **rotationHz**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:55](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L55)
diff --git a/src/content/docs/4.0.1/api/interfaces/RoutePlanner.md b/src/content/docs/4.0.1/api/interfaces/RoutePlanner.md
new file mode 100644
index 0000000..d2e779c
--- /dev/null
+++ b/src/content/docs/4.0.1/api/interfaces/RoutePlanner.md
@@ -0,0 +1,27 @@
+---
+editUrl: false
+next: false
+prev: false
+title: RoutePlanner
+slug: 4.0.1/apiinterfaces/routeplanner
+---
+
+## Properties
+
+### class
+
+> **class**: `null` | `"RotatingIpRoutePlanner"` | `"NanoIpRoutePlanner"` | `"RotatingNanoIpRoutePlanner"` | `"BalancingIpRoutePlanner"`
+
+#### Defined in
+
+[src/node/Rest.ts:84](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L84)
+
+***
+
+### details
+
+> **details**: `null` | `object`
+
+#### Defined in
+
+[src/node/Rest.ts:85](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L85)
diff --git a/src/content/docs/4.0.1/api/interfaces/SearchResult.md b/src/content/docs/4.0.1/api/interfaces/SearchResult.md
new file mode 100644
index 0000000..6408b1e
--- /dev/null
+++ b/src/content/docs/4.0.1/api/interfaces/SearchResult.md
@@ -0,0 +1,27 @@
+---
+editUrl: false
+next: false
+prev: false
+title: SearchResult
+slug: 4.0.1/apiinterfaces/searchresult
+---
+
+## Properties
+
+### data
+
+> **data**: [`Track`](/4.0.1/api/interfaces/track/)\[]
+
+#### Defined in
+
+[src/node/Rest.ts:62](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L62)
+
+***
+
+### loadType
+
+> **loadType**: [`SEARCH`](/4.0.1/api/enumerations/loadtype/#search)
+
+#### Defined in
+
+[src/node/Rest.ts:61](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L61)
diff --git a/src/content/docs/4.0.1/api/interfaces/ServerUpdate.md b/src/content/docs/4.0.1/api/interfaces/ServerUpdate.md
new file mode 100644
index 0000000..42a0c26
--- /dev/null
+++ b/src/content/docs/4.0.1/api/interfaces/ServerUpdate.md
@@ -0,0 +1,39 @@
+---
+editUrl: false
+next: false
+prev: false
+title: ServerUpdate
+slug: 4.0.1/apiinterfaces/serverupdate
+---
+
+Represents the payload from a serverUpdate event
+
+## Properties
+
+### endpoint
+
+> **endpoint**: `string`
+
+#### Defined in
+
+[src/guild/Connection.ts:21](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Connection.ts#L21)
+
+***
+
+### guild\_id
+
+> **guild\_id**: `string`
+
+#### Defined in
+
+[src/guild/Connection.ts:20](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Connection.ts#L20)
+
+***
+
+### token
+
+> **token**: `string`
+
+#### Defined in
+
+[src/guild/Connection.ts:19](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Connection.ts#L19)
diff --git a/src/content/docs/4.0.1/api/interfaces/SessionInfo.md b/src/content/docs/4.0.1/api/interfaces/SessionInfo.md
new file mode 100644
index 0000000..5c1ce38
--- /dev/null
+++ b/src/content/docs/4.0.1/api/interfaces/SessionInfo.md
@@ -0,0 +1,27 @@
+---
+editUrl: false
+next: false
+prev: false
+title: SessionInfo
+slug: 4.0.1/apiinterfaces/sessioninfo
+---
+
+## Properties
+
+### resumingKey?
+
+> `optional` **resumingKey**: `string`
+
+#### Defined in
+
+[src/node/Rest.ts:136](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L136)
+
+***
+
+### timeout
+
+> **timeout**: `number`
+
+#### Defined in
+
+[src/node/Rest.ts:137](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L137)
diff --git a/src/content/docs/4.0.1/api/interfaces/ShoukakuOptions.md b/src/content/docs/4.0.1/api/interfaces/ShoukakuOptions.md
new file mode 100644
index 0000000..3a96db9
--- /dev/null
+++ b/src/content/docs/4.0.1/api/interfaces/ShoukakuOptions.md
@@ -0,0 +1,149 @@
+---
+editUrl: false
+next: false
+prev: false
+title: ShoukakuOptions
+slug: 4.0.1/apiinterfaces/shoukakuoptions
+---
+
+## Properties
+
+### moveOnDisconnect?
+
+> `optional` **moveOnDisconnect**: `boolean`
+
+Whether to move players to a different Lavalink node when a node disconnects
+
+#### Defined in
+
+[src/Shoukaku.ts:72](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Shoukaku.ts#L72)
+
+***
+
+### nodeResolver()?
+
+> `optional` **nodeResolver**: (`nodes`, `connection`?) => `undefined` | [`Node`](/4.0.1/api/classes/node/)
+
+Node Resolver to use if you want to customize it
+
+#### Parameters
+
+β’ **nodes**: `Map`\<`string`, [`Node`](/4.0.1/api/classes/node/)>
+
+β’ **connection?**: [`Connection`](/4.0.1/api/classes/connection/)
+
+#### Returns
+
+`undefined` | [`Node`](/4.0.1/api/classes/node/)
+
+#### Defined in
+
+[src/Shoukaku.ts:88](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Shoukaku.ts#L88)
+
+***
+
+### reconnectInterval?
+
+> `optional` **reconnectInterval**: `number`
+
+Timeout before trying to reconnect
+
+#### Defined in
+
+[src/Shoukaku.ts:64](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Shoukaku.ts#L64)
+
+***
+
+### reconnectTries?
+
+> `optional` **reconnectTries**: `number`
+
+Number of times to try and reconnect to Lavalink before giving up
+
+#### Defined in
+
+[src/Shoukaku.ts:60](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Shoukaku.ts#L60)
+
+***
+
+### restTimeout?
+
+> `optional` **restTimeout**: `number`
+
+Time to wait for a response from the Lavalink REST API before giving up
+
+#### Defined in
+
+[src/Shoukaku.ts:68](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Shoukaku.ts#L68)
+
+***
+
+### resume?
+
+> `optional` **resume**: `boolean`
+
+Whether to resume a connection on disconnect to Lavalink (Server Side) (Note: DOES NOT RESUME WHEN THE LAVALINK SERVER DIES)
+
+#### Defined in
+
+[src/Shoukaku.ts:48](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Shoukaku.ts#L48)
+
+***
+
+### resumeByLibrary?
+
+> `optional` **resumeByLibrary**: `boolean`
+
+Whether to resume the players by doing it in the library side (Client Side) (Note: TRIES TO RESUME REGARDLESS OF WHAT HAPPENED ON A LAVALINK SERVER)
+
+#### Defined in
+
+[src/Shoukaku.ts:56](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Shoukaku.ts#L56)
+
+***
+
+### resumeTimeout?
+
+> `optional` **resumeTimeout**: `number`
+
+Time to wait before lavalink starts to destroy the players of the disconnected client
+
+#### Defined in
+
+[src/Shoukaku.ts:52](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Shoukaku.ts#L52)
+
+***
+
+### structures?
+
+> `optional` **structures**: [`Structures`](/4.0.1/api/interfaces/structures/)
+
+Custom structures for shoukaku to use
+
+#### Defined in
+
+[src/Shoukaku.ts:80](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Shoukaku.ts#L80)
+
+***
+
+### userAgent?
+
+> `optional` **userAgent**: `string`
+
+User Agent to use when making requests to Lavalink
+
+#### Defined in
+
+[src/Shoukaku.ts:76](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Shoukaku.ts#L76)
+
+***
+
+### voiceConnectionTimeout?
+
+> `optional` **voiceConnectionTimeout**: `number`
+
+Timeout before abort connection
+
+#### Defined in
+
+[src/Shoukaku.ts:84](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Shoukaku.ts#L84)
diff --git a/src/content/docs/4.0.1/api/interfaces/StateUpdatePartial.md b/src/content/docs/4.0.1/api/interfaces/StateUpdatePartial.md
new file mode 100644
index 0000000..c2d2b86
--- /dev/null
+++ b/src/content/docs/4.0.1/api/interfaces/StateUpdatePartial.md
@@ -0,0 +1,49 @@
+---
+editUrl: false
+next: false
+prev: false
+title: StateUpdatePartial
+slug: 4.0.1/apiinterfaces/stateupdatepartial
+---
+
+Represents the partial payload from a stateUpdate event
+
+## Properties
+
+### channel\_id?
+
+> `optional` **channel\_id**: `string`
+
+#### Defined in
+
+[src/guild/Connection.ts:9](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Connection.ts#L9)
+
+***
+
+### self\_deaf
+
+> **self\_deaf**: `boolean`
+
+#### Defined in
+
+[src/guild/Connection.ts:11](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Connection.ts#L11)
+
+***
+
+### self\_mute
+
+> **self\_mute**: `boolean`
+
+#### Defined in
+
+[src/guild/Connection.ts:12](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Connection.ts#L12)
+
+***
+
+### session\_id?
+
+> `optional` **session\_id**: `string`
+
+#### Defined in
+
+[src/guild/Connection.ts:10](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Connection.ts#L10)
diff --git a/src/content/docs/4.0.1/api/interfaces/Structures.md b/src/content/docs/4.0.1/api/interfaces/Structures.md
new file mode 100644
index 0000000..873767d
--- /dev/null
+++ b/src/content/docs/4.0.1/api/interfaces/Structures.md
@@ -0,0 +1,31 @@
+---
+editUrl: false
+next: false
+prev: false
+title: Structures
+slug: 4.0.1/apiinterfaces/structures
+---
+
+## Properties
+
+### player?
+
+> `optional` **player**: [`Constructor`](/4.0.1/api/namespaces/utils/type-aliases/constructor/)\<[`Player`](/4.0.1/api/classes/player/)>
+
+A custom structure that extends the Player class
+
+#### Defined in
+
+[src/Shoukaku.ts:18](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Shoukaku.ts#L18)
+
+***
+
+### rest?
+
+> `optional` **rest**: [`Constructor`](/4.0.1/api/namespaces/utils/type-aliases/constructor/)\<[`Rest`](/4.0.1/api/classes/rest/)>
+
+A custom structure that extends the Rest class
+
+#### Defined in
+
+[src/Shoukaku.ts:14](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Shoukaku.ts#L14)
diff --git a/src/content/docs/4.0.1/api/interfaces/TimescaleSettings.md b/src/content/docs/4.0.1/api/interfaces/TimescaleSettings.md
new file mode 100644
index 0000000..b0ea2c9
--- /dev/null
+++ b/src/content/docs/4.0.1/api/interfaces/TimescaleSettings.md
@@ -0,0 +1,37 @@
+---
+editUrl: false
+next: false
+prev: false
+title: TimescaleSettings
+slug: 4.0.1/apiinterfaces/timescalesettings
+---
+
+## Properties
+
+### pitch?
+
+> `optional` **pitch**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:45](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L45)
+
+***
+
+### rate?
+
+> `optional` **rate**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:46](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L46)
+
+***
+
+### speed?
+
+> `optional` **speed**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:44](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L44)
diff --git a/src/content/docs/4.0.1/api/interfaces/Track.md b/src/content/docs/4.0.1/api/interfaces/Track.md
new file mode 100644
index 0000000..fcc6bfa
--- /dev/null
+++ b/src/content/docs/4.0.1/api/interfaces/Track.md
@@ -0,0 +1,81 @@
+---
+editUrl: false
+next: false
+prev: false
+title: Track
+slug: 4.0.1/apiinterfaces/track
+---
+
+## Properties
+
+### encoded
+
+> **encoded**: `string`
+
+#### Defined in
+
+[src/node/Rest.ts:17](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L17)
+
+***
+
+### info
+
+> **info**: `object`
+
+#### artworkUrl?
+
+> `optional` **artworkUrl**: `string`
+
+#### author
+
+> **author**: `string`
+
+#### identifier
+
+> **identifier**: `string`
+
+#### isSeekable
+
+> **isSeekable**: `boolean`
+
+#### isStream
+
+> **isStream**: `boolean`
+
+#### isrc?
+
+> `optional` **isrc**: `string`
+
+#### length
+
+> **length**: `number`
+
+#### position
+
+> **position**: `number`
+
+#### sourceName
+
+> **sourceName**: `string`
+
+#### title
+
+> **title**: `string`
+
+#### uri?
+
+> `optional` **uri**: `string`
+
+#### Defined in
+
+[src/node/Rest.ts:18](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L18)
+
+***
+
+### pluginInfo
+
+> **pluginInfo**: `unknown`
+
+#### Defined in
+
+[src/node/Rest.ts:31](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L31)
diff --git a/src/content/docs/4.0.1/api/interfaces/TrackEndEvent.md b/src/content/docs/4.0.1/api/interfaces/TrackEndEvent.md
new file mode 100644
index 0000000..45e7412
--- /dev/null
+++ b/src/content/docs/4.0.1/api/interfaces/TrackEndEvent.md
@@ -0,0 +1,73 @@
+---
+editUrl: false
+next: false
+prev: false
+title: TrackEndEvent
+slug: 4.0.1/apiinterfaces/trackendevent
+---
+
+## Extends
+
+* [`PlayerEvent`](/4.0.1/api/interfaces/playerevent/)
+
+## Properties
+
+### guildId
+
+> **guildId**: `string`
+
+#### Inherited from
+
+[`PlayerEvent`](/4.0.1/api/interfaces/playerevent/).[`guildId`](/4.0.1/api/interfaces/playerevent/#guildid)
+
+#### Defined in
+
+[src/guild/Player.ts:83](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L83)
+
+***
+
+### op
+
+> **op**: [`EVENT`](/4.0.1/api/namespaces/constants/enumerations/opcodes/#event)
+
+#### Inherited from
+
+[`PlayerEvent`](/4.0.1/api/interfaces/playerevent/).[`op`](/4.0.1/api/interfaces/playerevent/#op)
+
+#### Defined in
+
+[src/guild/Player.ts:81](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L81)
+
+***
+
+### reason
+
+> **reason**: [`TrackEndReason`](/4.0.1/api/type-aliases/trackendreason/)
+
+#### Defined in
+
+[src/guild/Player.ts:94](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L94)
+
+***
+
+### track
+
+> **track**: [`Track`](/4.0.1/api/interfaces/track/)
+
+#### Defined in
+
+[src/guild/Player.ts:93](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L93)
+
+***
+
+### type
+
+> **type**: `"TrackEndEvent"`
+
+#### Overrides
+
+[`PlayerEvent`](/4.0.1/api/interfaces/playerevent/).[`type`](/4.0.1/api/interfaces/playerevent/#type)
+
+#### Defined in
+
+[src/guild/Player.ts:92](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L92)
diff --git a/src/content/docs/4.0.1/api/interfaces/TrackExceptionEvent.md b/src/content/docs/4.0.1/api/interfaces/TrackExceptionEvent.md
new file mode 100644
index 0000000..99e258f
--- /dev/null
+++ b/src/content/docs/4.0.1/api/interfaces/TrackExceptionEvent.md
@@ -0,0 +1,63 @@
+---
+editUrl: false
+next: false
+prev: false
+title: TrackExceptionEvent
+slug: 4.0.1/apiinterfaces/trackexceptionevent
+---
+
+## Extends
+
+* [`PlayerEvent`](/4.0.1/api/interfaces/playerevent/)
+
+## Properties
+
+### exception
+
+> **exception**: [`Exception`](/4.0.1/api/interfaces/exception/)
+
+#### Defined in
+
+[src/guild/Player.ts:105](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L105)
+
+***
+
+### guildId
+
+> **guildId**: `string`
+
+#### Inherited from
+
+[`PlayerEvent`](/4.0.1/api/interfaces/playerevent/).[`guildId`](/4.0.1/api/interfaces/playerevent/#guildid)
+
+#### Defined in
+
+[src/guild/Player.ts:83](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L83)
+
+***
+
+### op
+
+> **op**: [`EVENT`](/4.0.1/api/namespaces/constants/enumerations/opcodes/#event)
+
+#### Inherited from
+
+[`PlayerEvent`](/4.0.1/api/interfaces/playerevent/).[`op`](/4.0.1/api/interfaces/playerevent/#op)
+
+#### Defined in
+
+[src/guild/Player.ts:81](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L81)
+
+***
+
+### type
+
+> **type**: `"TrackExceptionEvent"`
+
+#### Overrides
+
+[`PlayerEvent`](/4.0.1/api/interfaces/playerevent/).[`type`](/4.0.1/api/interfaces/playerevent/#type)
+
+#### Defined in
+
+[src/guild/Player.ts:104](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L104)
diff --git a/src/content/docs/4.0.1/api/interfaces/TrackResult.md b/src/content/docs/4.0.1/api/interfaces/TrackResult.md
new file mode 100644
index 0000000..191a209
--- /dev/null
+++ b/src/content/docs/4.0.1/api/interfaces/TrackResult.md
@@ -0,0 +1,27 @@
+---
+editUrl: false
+next: false
+prev: false
+title: TrackResult
+slug: 4.0.1/apiinterfaces/trackresult
+---
+
+## Properties
+
+### data
+
+> **data**: [`Track`](/4.0.1/api/interfaces/track/)
+
+#### Defined in
+
+[src/node/Rest.ts:52](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L52)
+
+***
+
+### loadType
+
+> **loadType**: [`TRACK`](/4.0.1/api/enumerations/loadtype/#track)
+
+#### Defined in
+
+[src/node/Rest.ts:51](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L51)
diff --git a/src/content/docs/4.0.1/api/interfaces/TrackStartEvent.md b/src/content/docs/4.0.1/api/interfaces/TrackStartEvent.md
new file mode 100644
index 0000000..6137cc0
--- /dev/null
+++ b/src/content/docs/4.0.1/api/interfaces/TrackStartEvent.md
@@ -0,0 +1,63 @@
+---
+editUrl: false
+next: false
+prev: false
+title: TrackStartEvent
+slug: 4.0.1/apiinterfaces/trackstartevent
+---
+
+## Extends
+
+* [`PlayerEvent`](/4.0.1/api/interfaces/playerevent/)
+
+## Properties
+
+### guildId
+
+> **guildId**: `string`
+
+#### Inherited from
+
+[`PlayerEvent`](/4.0.1/api/interfaces/playerevent/).[`guildId`](/4.0.1/api/interfaces/playerevent/#guildid)
+
+#### Defined in
+
+[src/guild/Player.ts:83](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L83)
+
+***
+
+### op
+
+> **op**: [`EVENT`](/4.0.1/api/namespaces/constants/enumerations/opcodes/#event)
+
+#### Inherited from
+
+[`PlayerEvent`](/4.0.1/api/interfaces/playerevent/).[`op`](/4.0.1/api/interfaces/playerevent/#op)
+
+#### Defined in
+
+[src/guild/Player.ts:81](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L81)
+
+***
+
+### track
+
+> **track**: [`Track`](/4.0.1/api/interfaces/track/)
+
+#### Defined in
+
+[src/guild/Player.ts:88](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L88)
+
+***
+
+### type
+
+> **type**: `"TrackStartEvent"`
+
+#### Overrides
+
+[`PlayerEvent`](/4.0.1/api/interfaces/playerevent/).[`type`](/4.0.1/api/interfaces/playerevent/#type)
+
+#### Defined in
+
+[src/guild/Player.ts:87](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L87)
diff --git a/src/content/docs/4.0.1/api/interfaces/TrackStuckEvent.md b/src/content/docs/4.0.1/api/interfaces/TrackStuckEvent.md
new file mode 100644
index 0000000..67dcef5
--- /dev/null
+++ b/src/content/docs/4.0.1/api/interfaces/TrackStuckEvent.md
@@ -0,0 +1,73 @@
+---
+editUrl: false
+next: false
+prev: false
+title: TrackStuckEvent
+slug: 4.0.1/apiinterfaces/trackstuckevent
+---
+
+## Extends
+
+* [`PlayerEvent`](/4.0.1/api/interfaces/playerevent/)
+
+## Properties
+
+### guildId
+
+> **guildId**: `string`
+
+#### Inherited from
+
+[`PlayerEvent`](/4.0.1/api/interfaces/playerevent/).[`guildId`](/4.0.1/api/interfaces/playerevent/#guildid)
+
+#### Defined in
+
+[src/guild/Player.ts:83](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L83)
+
+***
+
+### op
+
+> **op**: [`EVENT`](/4.0.1/api/namespaces/constants/enumerations/opcodes/#event)
+
+#### Inherited from
+
+[`PlayerEvent`](/4.0.1/api/interfaces/playerevent/).[`op`](/4.0.1/api/interfaces/playerevent/#op)
+
+#### Defined in
+
+[src/guild/Player.ts:81](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L81)
+
+***
+
+### thresholdMs
+
+> **thresholdMs**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:100](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L100)
+
+***
+
+### track
+
+> **track**: [`Track`](/4.0.1/api/interfaces/track/)
+
+#### Defined in
+
+[src/guild/Player.ts:99](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L99)
+
+***
+
+### type
+
+> **type**: `"TrackStuckEvent"`
+
+#### Inherited from
+
+[`PlayerEvent`](/4.0.1/api/interfaces/playerevent/).[`type`](/4.0.1/api/interfaces/playerevent/#type)
+
+#### Defined in
+
+[src/guild/Player.ts:98](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L98)
diff --git a/src/content/docs/4.0.1/api/interfaces/UpdatePlayerInfo.md b/src/content/docs/4.0.1/api/interfaces/UpdatePlayerInfo.md
new file mode 100644
index 0000000..4862c23
--- /dev/null
+++ b/src/content/docs/4.0.1/api/interfaces/UpdatePlayerInfo.md
@@ -0,0 +1,37 @@
+---
+editUrl: false
+next: false
+prev: false
+title: UpdatePlayerInfo
+slug: 4.0.1/apiinterfaces/updateplayerinfo
+---
+
+## Properties
+
+### guildId
+
+> **guildId**: `string`
+
+#### Defined in
+
+[src/node/Rest.ts:130](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L130)
+
+***
+
+### noReplace?
+
+> `optional` **noReplace**: `boolean`
+
+#### Defined in
+
+[src/node/Rest.ts:132](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L132)
+
+***
+
+### playerOptions
+
+> **playerOptions**: [`UpdatePlayerOptions`](/4.0.1/api/interfaces/updateplayeroptions/)
+
+#### Defined in
+
+[src/node/Rest.ts:131](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L131)
diff --git a/src/content/docs/4.0.1/api/interfaces/UpdatePlayerOptions.md b/src/content/docs/4.0.1/api/interfaces/UpdatePlayerOptions.md
new file mode 100644
index 0000000..28cfbd2
--- /dev/null
+++ b/src/content/docs/4.0.1/api/interfaces/UpdatePlayerOptions.md
@@ -0,0 +1,87 @@
+---
+editUrl: false
+next: false
+prev: false
+title: UpdatePlayerOptions
+slug: 4.0.1/apiinterfaces/updateplayeroptions
+---
+
+## Properties
+
+### encodedTrack?
+
+> `optional` **encodedTrack**: `null` | `string`
+
+#### Defined in
+
+[src/node/Rest.ts:119](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L119)
+
+***
+
+### endTime?
+
+> `optional` **endTime**: `number`
+
+#### Defined in
+
+[src/node/Rest.ts:122](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L122)
+
+***
+
+### filters?
+
+> `optional` **filters**: [`FilterOptions`](/4.0.1/api/interfaces/filteroptions/)
+
+#### Defined in
+
+[src/node/Rest.ts:125](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L125)
+
+***
+
+### identifier?
+
+> `optional` **identifier**: `string`
+
+#### Defined in
+
+[src/node/Rest.ts:120](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L120)
+
+***
+
+### paused?
+
+> `optional` **paused**: `boolean`
+
+#### Defined in
+
+[src/node/Rest.ts:124](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L124)
+
+***
+
+### position?
+
+> `optional` **position**: `number`
+
+#### Defined in
+
+[src/node/Rest.ts:121](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L121)
+
+***
+
+### voice?
+
+> `optional` **voice**: [`LavalinkPlayerVoiceOptions`](/4.0.1/api/interfaces/lavalinkplayervoiceoptions/)
+
+#### Defined in
+
+[src/node/Rest.ts:126](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L126)
+
+***
+
+### volume?
+
+> `optional` **volume**: `number`
+
+#### Defined in
+
+[src/node/Rest.ts:123](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L123)
diff --git a/src/content/docs/4.0.1/api/interfaces/VoiceChannelOptions.md b/src/content/docs/4.0.1/api/interfaces/VoiceChannelOptions.md
new file mode 100644
index 0000000..a735521
--- /dev/null
+++ b/src/content/docs/4.0.1/api/interfaces/VoiceChannelOptions.md
@@ -0,0 +1,57 @@
+---
+editUrl: false
+next: false
+prev: false
+title: VoiceChannelOptions
+slug: 4.0.1/apiinterfaces/voicechanneloptions
+---
+
+## Properties
+
+### channelId
+
+> **channelId**: `string`
+
+#### Defined in
+
+[src/Shoukaku.ts:94](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Shoukaku.ts#L94)
+
+***
+
+### deaf?
+
+> `optional` **deaf**: `boolean`
+
+#### Defined in
+
+[src/Shoukaku.ts:95](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Shoukaku.ts#L95)
+
+***
+
+### guildId
+
+> **guildId**: `string`
+
+#### Defined in
+
+[src/Shoukaku.ts:92](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Shoukaku.ts#L92)
+
+***
+
+### mute?
+
+> `optional` **mute**: `boolean`
+
+#### Defined in
+
+[src/Shoukaku.ts:96](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Shoukaku.ts#L96)
+
+***
+
+### shardId
+
+> **shardId**: `number`
+
+#### Defined in
+
+[src/Shoukaku.ts:93](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Shoukaku.ts#L93)
diff --git a/src/content/docs/4.0.1/api/interfaces/WebSocketClosedEvent.md b/src/content/docs/4.0.1/api/interfaces/WebSocketClosedEvent.md
new file mode 100644
index 0000000..37b1ee6
--- /dev/null
+++ b/src/content/docs/4.0.1/api/interfaces/WebSocketClosedEvent.md
@@ -0,0 +1,83 @@
+---
+editUrl: false
+next: false
+prev: false
+title: WebSocketClosedEvent
+slug: 4.0.1/apiinterfaces/websocketclosedevent
+---
+
+## Extends
+
+* [`PlayerEvent`](/4.0.1/api/interfaces/playerevent/)
+
+## Properties
+
+### byRemote
+
+> **byRemote**: `boolean`
+
+#### Defined in
+
+[src/guild/Player.ts:116](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L116)
+
+***
+
+### code
+
+> **code**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:115](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L115)
+
+***
+
+### guildId
+
+> **guildId**: `string`
+
+#### Inherited from
+
+[`PlayerEvent`](/4.0.1/api/interfaces/playerevent/).[`guildId`](/4.0.1/api/interfaces/playerevent/#guildid)
+
+#### Defined in
+
+[src/guild/Player.ts:83](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L83)
+
+***
+
+### op
+
+> **op**: [`EVENT`](/4.0.1/api/namespaces/constants/enumerations/opcodes/#event)
+
+#### Inherited from
+
+[`PlayerEvent`](/4.0.1/api/interfaces/playerevent/).[`op`](/4.0.1/api/interfaces/playerevent/#op)
+
+#### Defined in
+
+[src/guild/Player.ts:81](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L81)
+
+***
+
+### reason
+
+> **reason**: `string`
+
+#### Defined in
+
+[src/guild/Player.ts:117](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L117)
+
+***
+
+### type
+
+> **type**: `"WebSocketClosedEvent"`
+
+#### Overrides
+
+[`PlayerEvent`](/4.0.1/api/interfaces/playerevent/).[`type`](/4.0.1/api/interfaces/playerevent/#type)
+
+#### Defined in
+
+[src/guild/Player.ts:114](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L114)
diff --git a/src/content/docs/4.0.1/api/namespaces/Connectors/classes/DiscordJS.md b/src/content/docs/4.0.1/api/namespaces/Connectors/classes/DiscordJS.md
new file mode 100644
index 0000000..3e84ce2
--- /dev/null
+++ b/src/content/docs/4.0.1/api/namespaces/Connectors/classes/DiscordJS.md
@@ -0,0 +1,121 @@
+---
+editUrl: false
+next: false
+prev: false
+title: DiscordJS
+slug: 4.0.1/apinamespacesconnectorsclasses/discordjs
+---
+
+## Extends
+
+* [`Connector`](/4.0.1/api/classes/connector/)
+
+## Constructors
+
+### new DiscordJS()
+
+> **new DiscordJS**(`client`): [`DiscordJS`](/4.0.1/api/namespaces/connectors/classes/discordjs/)
+
+#### Parameters
+
+β’ **client**: `any`
+
+#### Returns
+
+[`DiscordJS`](/4.0.1/api/namespaces/connectors/classes/discordjs/)
+
+#### Inherited from
+
+[`Connector`](/4.0.1/api/classes/connector/).[`constructor`](/4.0.1/api/classes/connector/#constructors)
+
+#### Defined in
+
+[src/connectors/Connector.ts:15](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/connectors/Connector.ts#L15)
+
+## Methods
+
+### getId()
+
+> **getId**(): `string`
+
+#### Returns
+
+`string`
+
+#### Overrides
+
+[`Connector`](/4.0.1/api/classes/connector/).[`getId`](/4.0.1/api/classes/connector/#getid)
+
+#### Defined in
+
+[src/connectors/libs/DiscordJS.ts:10](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/connectors/libs/DiscordJS.ts#L10)
+
+***
+
+### listen()
+
+> **listen**(`nodes`): `void`
+
+#### Parameters
+
+β’ **nodes**: [`NodeOption`](/4.0.1/api/interfaces/nodeoption/)\[]
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[`Connector`](/4.0.1/api/classes/connector/).[`listen`](/4.0.1/api/classes/connector/#listen)
+
+#### Defined in
+
+[src/connectors/libs/DiscordJS.ts:14](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/connectors/libs/DiscordJS.ts#L14)
+
+***
+
+### sendPacket()
+
+> **sendPacket**(`shardId`, `payload`, `important`): `void`
+
+#### Parameters
+
+β’ **shardId**: `number`
+
+β’ **payload**: `any`
+
+β’ **important**: `boolean`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[`Connector`](/4.0.1/api/classes/connector/).[`sendPacket`](/4.0.1/api/classes/connector/#sendpacket)
+
+#### Defined in
+
+[src/connectors/libs/DiscordJS.ts:6](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/connectors/libs/DiscordJS.ts#L6)
+
+***
+
+### set()
+
+> **set**(`manager`): [`Connector`](/4.0.1/api/classes/connector/)
+
+#### Parameters
+
+β’ **manager**: [`Shoukaku`](/4.0.1/api/classes/shoukaku/)
+
+#### Returns
+
+[`Connector`](/4.0.1/api/classes/connector/)
+
+#### Inherited from
+
+[`Connector`](/4.0.1/api/classes/connector/).[`set`](/4.0.1/api/classes/connector/#set)
+
+#### Defined in
+
+[src/connectors/Connector.ts:20](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/connectors/Connector.ts#L20)
diff --git a/src/content/docs/4.0.1/api/namespaces/Connectors/classes/Eris.md b/src/content/docs/4.0.1/api/namespaces/Connectors/classes/Eris.md
new file mode 100644
index 0000000..1f8189d
--- /dev/null
+++ b/src/content/docs/4.0.1/api/namespaces/Connectors/classes/Eris.md
@@ -0,0 +1,121 @@
+---
+editUrl: false
+next: false
+prev: false
+title: Eris
+slug: 4.0.1/apinamespacesconnectorsclasses/eris
+---
+
+## Extends
+
+* [`Connector`](/4.0.1/api/classes/connector/)
+
+## Constructors
+
+### new Eris()
+
+> **new Eris**(`client`): [`Eris`](/4.0.1/api/namespaces/connectors/classes/eris/)
+
+#### Parameters
+
+β’ **client**: `any`
+
+#### Returns
+
+[`Eris`](/4.0.1/api/namespaces/connectors/classes/eris/)
+
+#### Inherited from
+
+[`Connector`](/4.0.1/api/classes/connector/).[`constructor`](/4.0.1/api/classes/connector/#constructors)
+
+#### Defined in
+
+[src/connectors/Connector.ts:15](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/connectors/Connector.ts#L15)
+
+## Methods
+
+### getId()
+
+> **getId**(): `string`
+
+#### Returns
+
+`string`
+
+#### Overrides
+
+[`Connector`](/4.0.1/api/classes/connector/).[`getId`](/4.0.1/api/classes/connector/#getid)
+
+#### Defined in
+
+[src/connectors/libs/Eris.ts:10](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/connectors/libs/Eris.ts#L10)
+
+***
+
+### listen()
+
+> **listen**(`nodes`): `void`
+
+#### Parameters
+
+β’ **nodes**: [`NodeOption`](/4.0.1/api/interfaces/nodeoption/)\[]
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[`Connector`](/4.0.1/api/classes/connector/).[`listen`](/4.0.1/api/classes/connector/#listen)
+
+#### Defined in
+
+[src/connectors/libs/Eris.ts:14](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/connectors/libs/Eris.ts#L14)
+
+***
+
+### sendPacket()
+
+> **sendPacket**(`shardId`, `payload`, `important`): `void`
+
+#### Parameters
+
+β’ **shardId**: `number`
+
+β’ **payload**: `any`
+
+β’ **important**: `boolean`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[`Connector`](/4.0.1/api/classes/connector/).[`sendPacket`](/4.0.1/api/classes/connector/#sendpacket)
+
+#### Defined in
+
+[src/connectors/libs/Eris.ts:6](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/connectors/libs/Eris.ts#L6)
+
+***
+
+### set()
+
+> **set**(`manager`): [`Connector`](/4.0.1/api/classes/connector/)
+
+#### Parameters
+
+β’ **manager**: [`Shoukaku`](/4.0.1/api/classes/shoukaku/)
+
+#### Returns
+
+[`Connector`](/4.0.1/api/classes/connector/)
+
+#### Inherited from
+
+[`Connector`](/4.0.1/api/classes/connector/).[`set`](/4.0.1/api/classes/connector/#set)
+
+#### Defined in
+
+[src/connectors/Connector.ts:20](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/connectors/Connector.ts#L20)
diff --git a/src/content/docs/4.0.1/api/namespaces/Connectors/classes/OceanicJS.md b/src/content/docs/4.0.1/api/namespaces/Connectors/classes/OceanicJS.md
new file mode 100644
index 0000000..3a86829
--- /dev/null
+++ b/src/content/docs/4.0.1/api/namespaces/Connectors/classes/OceanicJS.md
@@ -0,0 +1,121 @@
+---
+editUrl: false
+next: false
+prev: false
+title: OceanicJS
+slug: 4.0.1/apinamespacesconnectorsclasses/oceanicjs
+---
+
+## Extends
+
+* [`Connector`](/4.0.1/api/classes/connector/)
+
+## Constructors
+
+### new OceanicJS()
+
+> **new OceanicJS**(`client`): [`OceanicJS`](/4.0.1/api/namespaces/connectors/classes/oceanicjs/)
+
+#### Parameters
+
+β’ **client**: `any`
+
+#### Returns
+
+[`OceanicJS`](/4.0.1/api/namespaces/connectors/classes/oceanicjs/)
+
+#### Inherited from
+
+[`Connector`](/4.0.1/api/classes/connector/).[`constructor`](/4.0.1/api/classes/connector/#constructors)
+
+#### Defined in
+
+[src/connectors/Connector.ts:15](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/connectors/Connector.ts#L15)
+
+## Methods
+
+### getId()
+
+> **getId**(): `string`
+
+#### Returns
+
+`string`
+
+#### Overrides
+
+[`Connector`](/4.0.1/api/classes/connector/).[`getId`](/4.0.1/api/classes/connector/#getid)
+
+#### Defined in
+
+[src/connectors/libs/OceanicJS.ts:10](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/connectors/libs/OceanicJS.ts#L10)
+
+***
+
+### listen()
+
+> **listen**(`nodes`): `void`
+
+#### Parameters
+
+β’ **nodes**: [`NodeOption`](/4.0.1/api/interfaces/nodeoption/)\[]
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[`Connector`](/4.0.1/api/classes/connector/).[`listen`](/4.0.1/api/classes/connector/#listen)
+
+#### Defined in
+
+[src/connectors/libs/OceanicJS.ts:14](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/connectors/libs/OceanicJS.ts#L14)
+
+***
+
+### sendPacket()
+
+> **sendPacket**(`shardId`, `payload`, `important`): `void`
+
+#### Parameters
+
+β’ **shardId**: `number`
+
+β’ **payload**: `any`
+
+β’ **important**: `boolean`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[`Connector`](/4.0.1/api/classes/connector/).[`sendPacket`](/4.0.1/api/classes/connector/#sendpacket)
+
+#### Defined in
+
+[src/connectors/libs/OceanicJS.ts:6](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/connectors/libs/OceanicJS.ts#L6)
+
+***
+
+### set()
+
+> **set**(`manager`): [`Connector`](/4.0.1/api/classes/connector/)
+
+#### Parameters
+
+β’ **manager**: [`Shoukaku`](/4.0.1/api/classes/shoukaku/)
+
+#### Returns
+
+[`Connector`](/4.0.1/api/classes/connector/)
+
+#### Inherited from
+
+[`Connector`](/4.0.1/api/classes/connector/).[`set`](/4.0.1/api/classes/connector/#set)
+
+#### Defined in
+
+[src/connectors/Connector.ts:20](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/connectors/Connector.ts#L20)
diff --git a/src/content/docs/4.0.1/api/namespaces/Constants/enumerations/OpCodes.md b/src/content/docs/4.0.1/api/namespaces/Constants/enumerations/OpCodes.md
new file mode 100644
index 0000000..4f5eacc
--- /dev/null
+++ b/src/content/docs/4.0.1/api/namespaces/Constants/enumerations/OpCodes.md
@@ -0,0 +1,47 @@
+---
+editUrl: false
+next: false
+prev: false
+title: OpCodes
+slug: 4.0.1/apinamespacesconstantsenumerations/opcodes
+---
+
+## Enumeration Members
+
+### EVENT
+
+> **EVENT**: `"event"`
+
+#### Defined in
+
+[src/Constants.ts:23](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Constants.ts#L23)
+
+***
+
+### PLAYER\_UPDATE
+
+> **PLAYER\_UPDATE**: `"playerUpdate"`
+
+#### Defined in
+
+[src/Constants.ts:21](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Constants.ts#L21)
+
+***
+
+### READY
+
+> **READY**: `"ready"`
+
+#### Defined in
+
+[src/Constants.ts:24](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Constants.ts#L24)
+
+***
+
+### STATS
+
+> **STATS**: `"stats"`
+
+#### Defined in
+
+[src/Constants.ts:22](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Constants.ts#L22)
diff --git a/src/content/docs/4.0.1/api/namespaces/Constants/enumerations/State.md b/src/content/docs/4.0.1/api/namespaces/Constants/enumerations/State.md
new file mode 100644
index 0000000..d317bb7
--- /dev/null
+++ b/src/content/docs/4.0.1/api/namespaces/Constants/enumerations/State.md
@@ -0,0 +1,67 @@
+---
+editUrl: false
+next: false
+prev: false
+title: State
+slug: 4.0.1/apinamespacesconstantsenumerations/state
+---
+
+## Enumeration Members
+
+### CONNECTED
+
+> **CONNECTED**: `2`
+
+#### Defined in
+
+[src/Constants.ts:7](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Constants.ts#L7)
+
+***
+
+### CONNECTING
+
+> **CONNECTING**: `0`
+
+#### Defined in
+
+[src/Constants.ts:5](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Constants.ts#L5)
+
+***
+
+### DISCONNECTED
+
+> **DISCONNECTED**: `5`
+
+#### Defined in
+
+[src/Constants.ts:10](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Constants.ts#L10)
+
+***
+
+### DISCONNECTING
+
+> **DISCONNECTING**: `4`
+
+#### Defined in
+
+[src/Constants.ts:9](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Constants.ts#L9)
+
+***
+
+### NEARLY
+
+> **NEARLY**: `1`
+
+#### Defined in
+
+[src/Constants.ts:6](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Constants.ts#L6)
+
+***
+
+### RECONNECTING
+
+> **RECONNECTING**: `3`
+
+#### Defined in
+
+[src/Constants.ts:8](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Constants.ts#L8)
diff --git a/src/content/docs/4.0.1/api/namespaces/Constants/enumerations/Versions.md b/src/content/docs/4.0.1/api/namespaces/Constants/enumerations/Versions.md
new file mode 100644
index 0000000..dec4eb0
--- /dev/null
+++ b/src/content/docs/4.0.1/api/namespaces/Constants/enumerations/Versions.md
@@ -0,0 +1,27 @@
+---
+editUrl: false
+next: false
+prev: false
+title: Versions
+slug: 4.0.1/apinamespacesconstantsenumerations/versions
+---
+
+## Enumeration Members
+
+### REST\_VERSION
+
+> **REST\_VERSION**: `4`
+
+#### Defined in
+
+[src/Constants.ts:28](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Constants.ts#L28)
+
+***
+
+### WEBSOCKET\_VERSION
+
+> **WEBSOCKET\_VERSION**: `4`
+
+#### Defined in
+
+[src/Constants.ts:29](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Constants.ts#L29)
diff --git a/src/content/docs/4.0.1/api/namespaces/Constants/enumerations/VoiceState.md b/src/content/docs/4.0.1/api/namespaces/Constants/enumerations/VoiceState.md
new file mode 100644
index 0000000..a4a3359
--- /dev/null
+++ b/src/content/docs/4.0.1/api/namespaces/Constants/enumerations/VoiceState.md
@@ -0,0 +1,47 @@
+---
+editUrl: false
+next: false
+prev: false
+title: VoiceState
+slug: 4.0.1/apinamespacesconstantsenumerations/voicestate
+---
+
+## Enumeration Members
+
+### SESSION\_ENDPOINT\_MISSING
+
+> **SESSION\_ENDPOINT\_MISSING**: `2`
+
+#### Defined in
+
+[src/Constants.ts:16](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Constants.ts#L16)
+
+***
+
+### SESSION\_FAILED\_UPDATE
+
+> **SESSION\_FAILED\_UPDATE**: `3`
+
+#### Defined in
+
+[src/Constants.ts:17](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Constants.ts#L17)
+
+***
+
+### SESSION\_ID\_MISSING
+
+> **SESSION\_ID\_MISSING**: `1`
+
+#### Defined in
+
+[src/Constants.ts:15](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Constants.ts#L15)
+
+***
+
+### SESSION\_READY
+
+> **SESSION\_READY**: `0`
+
+#### Defined in
+
+[src/Constants.ts:14](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Constants.ts#L14)
diff --git a/src/content/docs/4.0.1/api/namespaces/Constants/variables/NodeDefaults.md b/src/content/docs/4.0.1/api/namespaces/Constants/variables/NodeDefaults.md
new file mode 100644
index 0000000..43789d8
--- /dev/null
+++ b/src/content/docs/4.0.1/api/namespaces/Constants/variables/NodeDefaults.md
@@ -0,0 +1,13 @@
+---
+editUrl: false
+next: false
+prev: false
+title: NodeDefaults
+slug: 4.0.1/apinamespacesconstantsvariables/nodedefaults
+---
+
+> `const` **NodeDefaults**: [`NodeOption`](/4.0.1/api/interfaces/nodeoption/)
+
+## Defined in
+
+[src/Constants.ts:49](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Constants.ts#L49)
diff --git a/src/content/docs/4.0.1/api/namespaces/Constants/variables/ShoukakuDefaults.md b/src/content/docs/4.0.1/api/namespaces/Constants/variables/ShoukakuDefaults.md
new file mode 100644
index 0000000..0b13dfd
--- /dev/null
+++ b/src/content/docs/4.0.1/api/namespaces/Constants/variables/ShoukakuDefaults.md
@@ -0,0 +1,13 @@
+---
+editUrl: false
+next: false
+prev: false
+title: ShoukakuDefaults
+slug: 4.0.1/apinamespacesconstantsvariables/shoukakudefaults
+---
+
+> `const` **ShoukakuDefaults**: `Required`\<[`ShoukakuOptions`](/4.0.1/api/interfaces/shoukakuoptions/)>
+
+## Defined in
+
+[src/Constants.ts:32](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Constants.ts#L32)
diff --git a/src/content/docs/4.0.1/api/namespaces/Utils/functions/mergeDefault.md b/src/content/docs/4.0.1/api/namespaces/Utils/functions/mergeDefault.md
new file mode 100644
index 0000000..3d4f7af
--- /dev/null
+++ b/src/content/docs/4.0.1/api/namespaces/Utils/functions/mergeDefault.md
@@ -0,0 +1,35 @@
+---
+editUrl: false
+next: false
+prev: false
+title: mergeDefault
+slug: 4.0.1/apinamespacesutilsfunctions/mergedefault
+---
+
+> **mergeDefault**\<`T`>(`def`, `given`): `Required`\<`T`>
+
+Merge the default options to user input
+
+## Type Parameters
+
+β’ **T** *extends* `object`
+
+## Parameters
+
+β’ **def**: `T`
+
+Default options
+
+β’ **given**: `T`
+
+User input
+
+## Returns
+
+`Required`\<`T`>
+
+Merged options
+
+## Defined in
+
+[src/Utils.ts:9](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Utils.ts#L9)
diff --git a/src/content/docs/4.0.1/api/namespaces/Utils/functions/wait.md b/src/content/docs/4.0.1/api/namespaces/Utils/functions/wait.md
new file mode 100644
index 0000000..ebdb41f
--- /dev/null
+++ b/src/content/docs/4.0.1/api/namespaces/Utils/functions/wait.md
@@ -0,0 +1,27 @@
+---
+editUrl: false
+next: false
+prev: false
+title: wait
+slug: 4.0.1/apinamespacesutilsfunctions/wait
+---
+
+> **wait**(`ms`): `Promise`\<`void`>
+
+Wait for a specific amount of time (timeout)
+
+## Parameters
+
+β’ **ms**: `number`
+
+Time to wait in milliseconds
+
+## Returns
+
+`Promise`\<`void`>
+
+A promise that resolves in x seconds
+
+## Defined in
+
+[src/Utils.ts:30](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Utils.ts#L30)
diff --git a/src/content/docs/4.0.1/api/namespaces/Utils/type-aliases/Constructor.md b/src/content/docs/4.0.1/api/namespaces/Utils/type-aliases/Constructor.md
new file mode 100644
index 0000000..e84ca8a
--- /dev/null
+++ b/src/content/docs/4.0.1/api/namespaces/Utils/type-aliases/Constructor.md
@@ -0,0 +1,25 @@
+---
+editUrl: false
+next: false
+prev: false
+title: Constructor
+slug: 4.0.1/apinamespacesutilstype-aliases/constructor
+---
+
+> **Constructor**\<`T`>: (...`args`) => `T`
+
+## Type Parameters
+
+β’ **T**
+
+## Parameters
+
+β’ ...**args**: `any`\[]
+
+## Returns
+
+`T`
+
+## Defined in
+
+[src/Utils.ts:1](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/Utils.ts#L1)
diff --git a/src/content/docs/4.0.1/api/type-aliases/LavalinkResponse.md b/src/content/docs/4.0.1/api/type-aliases/LavalinkResponse.md
new file mode 100644
index 0000000..5e29604
--- /dev/null
+++ b/src/content/docs/4.0.1/api/type-aliases/LavalinkResponse.md
@@ -0,0 +1,13 @@
+---
+editUrl: false
+next: false
+prev: false
+title: LavalinkResponse
+slug: 4.0.1/apitype-aliases/lavalinkresponse
+---
+
+> **LavalinkResponse**: [`TrackResult`](/4.0.1/api/interfaces/trackresult/) | [`PlaylistResult`](/4.0.1/api/interfaces/playlistresult/) | [`SearchResult`](/4.0.1/api/interfaces/searchresult/) | [`EmptyResult`](/4.0.1/api/interfaces/emptyresult/) | [`ErrorResult`](/4.0.1/api/interfaces/errorresult/)
+
+## Defined in
+
+[src/node/Rest.ts:75](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L75)
diff --git a/src/content/docs/4.0.1/api/type-aliases/NodeInfo.md b/src/content/docs/4.0.1/api/type-aliases/NodeInfo.md
new file mode 100644
index 0000000..7e74ee5
--- /dev/null
+++ b/src/content/docs/4.0.1/api/type-aliases/NodeInfo.md
@@ -0,0 +1,47 @@
+---
+editUrl: false
+next: false
+prev: false
+title: NodeInfo
+slug: 4.0.1/apitype-aliases/nodeinfo
+---
+
+> **NodeInfo**: `object`
+
+## Type declaration
+
+### buildTime
+
+> **buildTime**: `number`
+
+### filters
+
+> **filters**: `string`\[]
+
+### git
+
+> **git**: `NodeInfoGit`
+
+### jvm
+
+> **jvm**: `string`
+
+### lavaplayer
+
+> **lavaplayer**: `string`
+
+### plugins
+
+> **plugins**: `NodeInfoPlugin`\[]
+
+### sourceManagers
+
+> **sourceManagers**: `string`\[]
+
+### version
+
+> **version**: `NodeInfoVersion`
+
+## Defined in
+
+[src/node/Node.ts:51](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Node.ts#L51)
diff --git a/src/content/docs/4.0.1/api/type-aliases/PlayerEventType.md b/src/content/docs/4.0.1/api/type-aliases/PlayerEventType.md
new file mode 100644
index 0000000..901b4ac
--- /dev/null
+++ b/src/content/docs/4.0.1/api/type-aliases/PlayerEventType.md
@@ -0,0 +1,13 @@
+---
+editUrl: false
+next: false
+prev: false
+title: PlayerEventType
+slug: 4.0.1/apitype-aliases/playereventtype
+---
+
+> **PlayerEventType**: `"TrackStartEvent"` | `"TrackEndEvent"` | `"TrackExceptionEvent"` | `"TrackStuckEvent"` | `"WebSocketClosedEvent"`
+
+## Defined in
+
+[src/guild/Player.ts:8](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L8)
diff --git a/src/content/docs/4.0.1/api/type-aliases/Severity.md b/src/content/docs/4.0.1/api/type-aliases/Severity.md
new file mode 100644
index 0000000..c5826d0
--- /dev/null
+++ b/src/content/docs/4.0.1/api/type-aliases/Severity.md
@@ -0,0 +1,13 @@
+---
+editUrl: false
+next: false
+prev: false
+title: Severity
+slug: 4.0.1/apitype-aliases/severity
+---
+
+> **Severity**: `"common"` | `"suspicious"` | `"fault"`
+
+## Defined in
+
+[src/node/Rest.ts:6](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/node/Rest.ts#L6)
diff --git a/src/content/docs/4.0.1/api/type-aliases/TrackEndReason.md b/src/content/docs/4.0.1/api/type-aliases/TrackEndReason.md
new file mode 100644
index 0000000..54eab17
--- /dev/null
+++ b/src/content/docs/4.0.1/api/type-aliases/TrackEndReason.md
@@ -0,0 +1,13 @@
+---
+editUrl: false
+next: false
+prev: false
+title: TrackEndReason
+slug: 4.0.1/apitype-aliases/trackendreason
+---
+
+> **TrackEndReason**: `"finished"` | `"loadFailed"` | `"stopped"` | `"replaced"` | `"cleanup"`
+
+## Defined in
+
+[src/guild/Player.ts:7](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/guild/Player.ts#L7)
diff --git a/src/content/docs/4.0.1/api/variables/AllowedPackets.md b/src/content/docs/4.0.1/api/variables/AllowedPackets.md
new file mode 100644
index 0000000..6076ac2
--- /dev/null
+++ b/src/content/docs/4.0.1/api/variables/AllowedPackets.md
@@ -0,0 +1,13 @@
+---
+editUrl: false
+next: false
+prev: false
+title: AllowedPackets
+slug: 4.0.1/apivariables/allowedpackets
+---
+
+> `const` **AllowedPackets**: `string`\[]
+
+## Defined in
+
+[src/connectors/Connector.ts:10](https://github.com/shipgirlproject/shoukaku/blob/396aa531096eda327ade0f473f9807576e9ae9df/src/connectors/Connector.ts#L10)
diff --git a/src/content/docs/4.0.1/guides/1-getting-started.mdx b/src/content/docs/4.0.1/guides/1-getting-started.mdx
new file mode 100644
index 0000000..e8850b6
--- /dev/null
+++ b/src/content/docs/4.0.1/guides/1-getting-started.mdx
@@ -0,0 +1,95 @@
+---
+title: Getting Started
+description: Get started with Shoukaku.
+slug: 4.0.1/guides/1-getting-started
+---
+
+import { PackageManagers } from "starlight-package-managers";
+import { Tabs, TabItem, Steps, Aside } from '@astrojs/starlight/components';
+
+Shoukaku is a stable, powerful and updated wrapper around [Lavalink](https://lavalink.dev/). It is Discord library agnostic, and can add support for new Discord libraries using connectors.
+
+## Set up Shoukaku
+
+
+ 1. Install Shoukaku using your favorite package manager.
+
+
+
+ 2. Initialize the library using one of the connectors.
+
+
+
+ ```js
+ const { Client } = require('discord.js');
+ const { Shoukaku, Connectors } = require('shoukaku');
+ const Nodes = [{
+ name: 'Localhost',
+ url: 'localhost:6969',
+ auth: 'marin_kitagawa'
+ }];
+ const client = new Client();
+ const shoukaku = new Shoukaku(new Connectors.DiscordJS(client), Nodes);
+ // ALWAYS handle error, logging it will do
+ shoukaku.on('error', (_, error) => console.error(error));
+ client.login('token');
+ // If you want shoukaku to be available on client, then bind it to it, here is one example of it
+ client.shoukaku = shoukaku;
+ ```
+
+
+
+ ```js
+ const { Client } = require('discord.js');
+ const { Shoukaku, Connectors } = require('shoukaku');
+ const Nodes = [{
+ name: 'Localhost',
+ url: 'localhost:6969',
+ auth: 'marin_kitagawa'
+ }];
+ const client = new Client();
+ const shoukaku = new Shoukaku(new Connectors.Eris(client), Nodes);
+ // ALWAYS handle error, logging it will do
+ shoukaku.on('error', (_, error) => console.error(error));
+ client.login('token');
+ // If you want shoukaku to be available on client, then bind it to it, here is one example of it
+ client.shoukaku = shoukaku;
+ ```
+
+
+
+ ```js
+ const { Client } = require('discord.js');
+ const { Shoukaku, Connectors } = require('shoukaku');
+ const Nodes = [{
+ name: 'Localhost',
+ url: 'localhost:6969',
+ auth: 'marin_kitagawa'
+ }];
+ const client = new Client();
+ const shoukaku = new Shoukaku(new Connectors.OceanicJS(client), Nodes);
+ // ALWAYS handle error, logging it will do
+ shoukaku.on('error', (_, error) => console.error(error));
+ client.login('token');
+ // If you want shoukaku to be available on client, then bind it to it, here is one example of it
+ client.shoukaku = shoukaku;
+ ```
+
+
+
+
+
+
+## Other Resources
+
+* [Lavalink Docs](https://lavalink.dev)
+* Example implementation using Discord.JS: [Kongou](https://github.com/Deivu/Kongou)
+* Get support on the [Discord server](https://discord.gg/FVqbtGu)
diff --git a/src/content/docs/4.0.1/guides/2-options.mdx b/src/content/docs/4.0.1/guides/2-options.mdx
new file mode 100644
index 0000000..4ed57f4
--- /dev/null
+++ b/src/content/docs/4.0.1/guides/2-options.mdx
@@ -0,0 +1,19 @@
+---
+title: Configuration Options
+description: Options for configuring behavior.
+slug: 4.0.1/guides/2-options
+---
+
+| Option | Type | Default | Description |
+| ---------------------- | ----------------------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
+| resume | boolean | false | Whether to resume a connection on disconnect to Lavalink (Server Side) (Note: DOES NOT RESUME WHEN THE LAVALINK SERVER DIES) |
+| resumeTimeout | number | 30 | Timeout before resuming a connection **in seconds** |
+| resumeByLibrary | boolean | false | Whether to resume the players by doing it in the library side (Client Side) (Note: TRIES TO RESUME REGARDLESS OF WHAT HAPPENED ON A LAVALINK SERVER) |
+| reconnectTries | number | 3 | Number of times to try and reconnect to Lavalink before giving up |
+| reconnectInterval | number | 5 | Timeout before trying to reconnect **in seconds** |
+| restTimeout | number | 60 | Time to wait for a response from the Lavalink REST API before giving up **in seconds** |
+| moveOnDisconnect | boolean | false | Whether to move players to a different Lavalink node when a node disconnects |
+| userAgent | string | (auto) | User Agent to use when making requests to Lavalink |
+| structures | Object\{rest?, player?} | \{} | Custom structures for shoukaku to use |
+| voiceConnectionTimeout | number | 15 | Timeout before abort connection **in seconds** |
+| nodeResolver | function | function | Custom node resolver if you want to have your own method of getting the ideal node |
diff --git a/src/content/docs/4.0.1/guides/3-common.mdx b/src/content/docs/4.0.1/guides/3-common.mdx
new file mode 100644
index 0000000..6479905
--- /dev/null
+++ b/src/content/docs/4.0.1/guides/3-common.mdx
@@ -0,0 +1,74 @@
+---
+title: Common Usage
+description: Commonly used pieces of code.
+slug: 4.0.1/guides/3-common
+---
+
+import { Steps } from '@astrojs/starlight/components';
+
+## Join a voice channel, search for a track, play the track, then disconnect after 30 seconds
+
+
+ 1. Tell Lavalink to join a Discord voice channel.
+
+ ```js
+ const player = await shoukaku.joinVoiceChannel({
+ guildId: "your_guild_id",
+ channelId: "your_channel_id",
+ shardId: 0, // if unsharded it will always be zero (depending on your library implementation)
+ });
+ ```
+ 2. Search for a track, here we are searching via [SoundCloud](https://soundcloud.com), using the `scsearch:` prefix. The string after the prefix is the search query.
+
+ ```js
+ const result = await player.node.rest.resolve("scsearch:snowhalation");
+ if (!result?.tracks.length) return;
+ const metadata = result.tracks.shift();
+ ```
+ 3. Tell Lavalink to play the searched track.
+
+ ```js
+ await player.playTrack({ track: metadata.encoded });
+ ```
+ 4. After 30 seconds, tell Lavalink to leave the voice channel.
+
+ ```js
+ setTimeout(() => shoukaku.leaveVoiceChannel(player.guildId), 30000).unref();
+ ```
+
+
+## Playing a track and changing a playback option
+
+Here we are changing the volume, you can do [other stuff](/4.0.1/api/classes/player#methods) as well.
+
+```js
+await player.playTrack({ track: metadata.encoded });
+await player.setGlobalVolume(50);
+```
+
+You can also update the player without using helper functions
+
+```js
+await player.update({ ...playerOptions });
+```
+
+## Custom function to get the ideal node
+
+When executing any action, an API endpoint is called on a Lavalink node. When there are many nodes passed in the configuration, some logic is used to select the node to perform actions on.
+
+```js
+const shoukaku = new Shoukaku(
+ new Connectors.DiscordJS(client),
+ [{ ...yourNodeOptions }],
+ {
+ ...yourShoukakuOptions,
+ nodeResolver: (nodes, connection) => getYourIdealNode(nodes, connection),
+ }
+);
+
+const player = await shoukaku.joinVoiceChannel({
+ guildId: "your_guild_id",
+ channelId: "your_channel_id",
+ shardId: 0,
+});
+```
diff --git a/src/content/docs/4.0.1/guides/4-plugins.mdx b/src/content/docs/4.0.1/guides/4-plugins.mdx
new file mode 100644
index 0000000..8c096e5
--- /dev/null
+++ b/src/content/docs/4.0.1/guides/4-plugins.mdx
@@ -0,0 +1,22 @@
+---
+title: Plugins
+description: Plugins to extend Shoukaku.
+slug: 4.0.1/guides/4-plugins
+---
+
+import { Aside } from '@astrojs/starlight/components';
+
+## Plugins List
+
+Open a pull request to add your plugin here
+
+| Name | Link | Description |
+| ------------ | ------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
+| Kazagumo | [Github](https://github.com/Takiyo0/Kazagumo) | A Shoukaku wrapper that have built-in queue system |
+| stone-deezer | [NPM](https://www.npmjs.com/package/stone-deezer) | A plugin to simplify deezer links and then play it from available sources (**REQUIRES [KAZAGUMO](https://github.com/Takiyo0/Kazagumo)**) |
+
+## Creating Plugins
+
+
diff --git a/src/content/docs/4.0.1/guides/5-updating-from-v3.mdx b/src/content/docs/4.0.1/guides/5-updating-from-v3.mdx
new file mode 100644
index 0000000..f338593
--- /dev/null
+++ b/src/content/docs/4.0.1/guides/5-updating-from-v3.mdx
@@ -0,0 +1,120 @@
+---
+title: Updating from v3 to v4
+description: Changes in your code when updating from v3.
+slug: 4.0.1/guides/5-updating-from-v3
+---
+
+There are some major changes in Shoukaku v4. Here is some major changes that need to be made to your code.
+
+## Common usage
+
+### Getting a node
+
+As node resolving is configurable in v4, the method to do so has changed.
+
+```diff
+- const node = shoukaku.getNode();
++ const node = shoukaku.options.nodeResolver(shoukaku.nodes);
+```
+
+### Joining voice channels
+
+You now join voice channels using the main Shoukaku class, and not on the Node class
+
+```diff
+-const player = await node.joinChannel({
++const player = await shoukaku.joinVoiceChannel({
+ guildId: "your_guild_id",
+ channelId: "your_channel_id",
+ shardId: 0, // if unsharded it will always be zero (depending on your library implementation)
+});
+```
+
+### Resolving tracks
+
+You can also use the player.node property after connecting to a voice channel to resolve tracks, but the old method would still work.
+
+```diff
+-const result = await node.rest.resolve("scsearch:snowhalation");
++const result = await player.node.rest.resolve("scsearch:snowhalation");
+```
+
+### Playing tracks
+
+Play the track using the encoded metadata.
+
+```diff
+-player.playTrack({ track: metadata.track })
++await player.playTrack({ track: metadata.encoded });
+```
+
+### Leaving voice channels
+
+Similar to joining voice channels, it is also on the main Shoukaku class.
+
+```diff
+-player.connection.disconnect();
++await shoukaku.leaveVoiceChannel(player.guildId);
+```
+
+## Other changes
+
+### Player methods
+
+Player methods now return promises.
+
+```js
+await player.playTrack(...data);
+await player.stopTrack();
+```
+
+### Volume
+
+There are 2 kinds of volumes you can set, global and filter.
+
+The global volume accepts 0-1000 as it's values
+
+```js
+await player.setGlobalVolume(100);
+```
+
+To check the current global volume
+
+```js
+console.log(player.volume);
+```
+
+The filter volume accepts 0.0-5.0 as it's values
+
+```js
+await player.setFilterVolume(1.0);
+```
+
+To check the current filter volume (filters.volume can be undefined)
+
+```js
+console.log(player.filters.volume);
+```
+
+### Internal changes
+
+New variable in shoukaku class, which handles the "connection data" of discord only
+
+```js
+console.log(shoukaku.connections);
+```
+
+Players are moved from `node.players` to `shoukaku.players`
+
+```js
+console.log(shoukaku.players);
+```
+
+You can supply a custom node resolver for your own way of getting an ideal node by supplying the nodeResolver option in Shoukaku options
+
+```js
+const ShoukakuOptions = {
+ ...yourShoukakuOptions,
+ nodeResolver: (nodes, connection) => getYourIdealNode(nodes, connection),
+};
+```
diff --git a/src/content/docs/4.0.1/index.mdx b/src/content/docs/4.0.1/index.mdx
new file mode 100644
index 0000000..7b97a2b
--- /dev/null
+++ b/src/content/docs/4.0.1/index.mdx
@@ -0,0 +1,17 @@
+---
+title: Shoukaku Docs
+description: A stable, powerful and updated wrapper around Lavalink.
+hero:
+ tagline: A stable, powerful and updated wrapper around Lavalink.
+ image:
+ file: ../../../assets/4.0.1/shoukaku.webp
+ actions:
+ - text: Getting Started
+ link: /4.0.1/guides/1-getting-started/
+ icon: right-arrow
+ variant: primary
+ - text: API Reference
+ link: /4.0.1/api/classes/shoukaku/
+ icon: external
+slug: 4.0.1
+---
diff --git a/src/content/docs/api/README.md b/src/content/docs/api/README.md
new file mode 100644
index 0000000..a08aa22
--- /dev/null
+++ b/src/content/docs/api/README.md
@@ -0,0 +1,87 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "shoukaku"
+---
+
+## Namespaces
+
+- [Connectors](/api/namespaces/connectors/readme/)
+- [Constants](/api/namespaces/constants/readme/)
+- [Utils](/api/namespaces/utils/readme/)
+
+## Enumerations
+
+- [LoadType](/api/enumerations/loadtype/)
+
+## Classes
+
+- [Connection](/api/classes/connection/)
+- [Connector](/api/classes/connector/)
+- [Node](/api/classes/node/)
+- [Player](/api/classes/player/)
+- [Rest](/api/classes/rest/)
+- [Shoukaku](/api/classes/shoukaku/)
+
+## Interfaces
+
+- [Address](/api/interfaces/address/)
+- [Band](/api/interfaces/band/)
+- [ChannelMixSettings](/api/interfaces/channelmixsettings/)
+- [ConnectorMethods](/api/interfaces/connectormethods/)
+- [DistortionSettings](/api/interfaces/distortionsettings/)
+- [EmptyResult](/api/interfaces/emptyresult/)
+- [ErrorResult](/api/interfaces/errorresult/)
+- [Exception](/api/interfaces/exception/)
+- [FilterOptions](/api/interfaces/filteroptions/)
+- [FreqSettings](/api/interfaces/freqsettings/)
+- [KaraokeSettings](/api/interfaces/karaokesettings/)
+- [LavalinkPlayer](/api/interfaces/lavalinkplayer/)
+- [LavalinkPlayerVoice](/api/interfaces/lavalinkplayervoice/)
+- [LavalinkPlayerVoiceOptions](/api/interfaces/lavalinkplayervoiceoptions/)
+- [LowPassSettings](/api/interfaces/lowpasssettings/)
+- [NodeOption](/api/interfaces/nodeoption/)
+- [NodeStats](/api/interfaces/nodestats/)
+- [NonResumableHeaders](/api/interfaces/nonresumableheaders/)
+- [PlayerEvent](/api/interfaces/playerevent/)
+- [PlayerEvents](/api/interfaces/playerevents/)
+- [PlayerUpdate](/api/interfaces/playerupdate/)
+- [Playlist](/api/interfaces/playlist/)
+- [PlaylistResult](/api/interfaces/playlistresult/)
+- [ResumableHeaders](/api/interfaces/resumableheaders/)
+- [RotationSettings](/api/interfaces/rotationsettings/)
+- [RoutePlanner](/api/interfaces/routeplanner/)
+- [SearchResult](/api/interfaces/searchresult/)
+- [ServerUpdate](/api/interfaces/serverupdate/)
+- [SessionInfo](/api/interfaces/sessioninfo/)
+- [ShoukakuEvents](/api/interfaces/shoukakuevents/)
+- [ShoukakuOptions](/api/interfaces/shoukakuoptions/)
+- [StateUpdatePartial](/api/interfaces/stateupdatepartial/)
+- [Structures](/api/interfaces/structures/)
+- [TimescaleSettings](/api/interfaces/timescalesettings/)
+- [Track](/api/interfaces/track/)
+- [TrackEndEvent](/api/interfaces/trackendevent/)
+- [TrackExceptionEvent](/api/interfaces/trackexceptionevent/)
+- [TrackResult](/api/interfaces/trackresult/)
+- [TrackStartEvent](/api/interfaces/trackstartevent/)
+- [TrackStuckEvent](/api/interfaces/trackstuckevent/)
+- [UpdatePlayerInfo](/api/interfaces/updateplayerinfo/)
+- [UpdatePlayerOptions](/api/interfaces/updateplayeroptions/)
+- [UpdatePlayerTrackOptions](/api/interfaces/updateplayertrackoptions/)
+- [VoiceChannelOptions](/api/interfaces/voicechanneloptions/)
+- [WebSocketClosedEvent](/api/interfaces/websocketclosedevent/)
+
+## Type Aliases
+
+- [LavalinkResponse](/api/type-aliases/lavalinkresponse/)
+- [NodeInfo](/api/type-aliases/nodeinfo/)
+- [PlayOptions](/api/type-aliases/playoptions/)
+- [PlayerEventType](/api/type-aliases/playereventtype/)
+- [ResumeOptions](/api/type-aliases/resumeoptions/)
+- [Severity](/api/type-aliases/severity/)
+- [TrackEndReason](/api/type-aliases/trackendreason/)
+
+## Variables
+
+- [AllowedPackets](/api/variables/allowedpackets/)
diff --git a/src/content/docs/api/classes/Connection.md b/src/content/docs/api/classes/Connection.md
new file mode 100644
index 0000000..a9d8e51
--- /dev/null
+++ b/src/content/docs/api/classes/Connection.md
@@ -0,0 +1,1654 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "Connection"
+---
+
+Represents a connection to a Discord voice channel
+
+## Extends
+
+- `EventEmitter`
+
+## Constructors
+
+### new Connection()
+
+> **new Connection**(`manager`, `options`): [`Connection`](/api/classes/connection/)
+
+#### Parameters
+
+β’ **manager**: [`Shoukaku`](/api/classes/shoukaku/)
+
+The manager of this connection
+
+β’ **options**: [`VoiceChannelOptions`](/api/interfaces/voicechanneloptions/)
+
+The options to pass in connection creation
+
+#### Returns
+
+[`Connection`](/api/classes/connection/)
+
+#### Overrides
+
+`EventEmitter.constructor`
+
+#### Defined in
+
+[src/guild/Connection.ts:86](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Connection.ts#L86)
+
+## Properties
+
+### channelId
+
+> **channelId**: `null` \| `string`
+
+VoiceChannelId of the connection that is being managed by this instance
+
+#### Defined in
+
+[src/guild/Connection.ts:39](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Connection.ts#L39)
+
+***
+
+### deafened
+
+> **deafened**: `boolean`
+
+Deafen status in connected voice channel
+
+#### Defined in
+
+[src/guild/Connection.ts:52](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Connection.ts#L52)
+
+***
+
+### guildId
+
+> **guildId**: `string`
+
+GuildId of the connection that is being managed by this instance
+
+#### Defined in
+
+[src/guild/Connection.ts:35](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Connection.ts#L35)
+
+***
+
+### lastChannelId
+
+> **lastChannelId**: `null` \| `string`
+
+Id of the voice channel where this instance was connected before the current channelId
+
+#### Defined in
+
+[src/guild/Connection.ts:56](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Connection.ts#L56)
+
+***
+
+### lastRegion
+
+> **lastRegion**: `null` \| `string`
+
+Last region of the connected voice channel
+
+#### Defined in
+
+[src/guild/Connection.ts:68](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Connection.ts#L68)
+
+***
+
+### manager
+
+> **manager**: [`Shoukaku`](/api/classes/shoukaku/)
+
+The manager where this connection is on
+
+#### Defined in
+
+[src/guild/Connection.ts:31](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Connection.ts#L31)
+
+***
+
+### muted
+
+> **muted**: `boolean`
+
+Mute status in connected voice channel
+
+#### Defined in
+
+[src/guild/Connection.ts:48](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Connection.ts#L48)
+
+***
+
+### region
+
+> **region**: `null` \| `string`
+
+Region of connected voice channel
+
+#### Defined in
+
+[src/guild/Connection.ts:64](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Connection.ts#L64)
+
+***
+
+### serverUpdate
+
+> **serverUpdate**: `null` \| [`ServerUpdate`](/api/interfaces/serverupdate/)
+
+Cached serverUpdate event from Lavalink
+
+#### Defined in
+
+[src/guild/Connection.ts:72](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Connection.ts#L72)
+
+***
+
+### sessionId
+
+> **sessionId**: `null` \| `string`
+
+Id of the currently active voice channel connection
+
+#### Defined in
+
+[src/guild/Connection.ts:60](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Connection.ts#L60)
+
+***
+
+### shardId
+
+> **shardId**: `number`
+
+ShardId where this connection sends data on
+
+#### Defined in
+
+[src/guild/Connection.ts:44](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Connection.ts#L44)
+
+***
+
+### state
+
+> **state**: [`State`](/api/namespaces/constants/enumerations/state/)
+
+Connection state
+
+#### Defined in
+
+[src/guild/Connection.ts:76](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Connection.ts#L76)
+
+***
+
+### captureRejectionSymbol
+
+> `readonly` `static` **captureRejectionSymbol**: *typeof* [`captureRejectionSymbol`](/api/classes/connection/#capturerejectionsymbol)
+
+Value: `Symbol.for('nodejs.rejection')`
+
+See how to write a custom `rejection handler`.
+
+#### Since
+
+v13.4.0, v12.16.0
+
+#### Inherited from
+
+`EventEmitter.captureRejectionSymbol`
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:452
+
+***
+
+### captureRejections
+
+> `static` **captureRejections**: `boolean`
+
+Value: [boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type)
+
+Change the default `captureRejections` option on all new `EventEmitter` objects.
+
+#### Since
+
+v13.4.0, v12.16.0
+
+#### Inherited from
+
+`EventEmitter.captureRejections`
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:459
+
+***
+
+### defaultMaxListeners
+
+> `static` **defaultMaxListeners**: `number`
+
+By default, a maximum of `10` listeners can be registered for any single
+event. This limit can be changed for individual `EventEmitter` instances
+using the `emitter.setMaxListeners(n)` method. To change the default
+for _all_`EventEmitter` instances, the `events.defaultMaxListeners` property
+can be used. If this value is not a positive number, a `RangeError` is thrown.
+
+Take caution when setting the `events.defaultMaxListeners` because the
+change affects _all_ `EventEmitter` instances, including those created before
+the change is made. However, calling `emitter.setMaxListeners(n)` still has
+precedence over `events.defaultMaxListeners`.
+
+This is not a hard limit. The `EventEmitter` instance will allow
+more listeners to be added but will output a trace warning to stderr indicating
+that a "possible EventEmitter memory leak" has been detected. For any single
+`EventEmitter`, the `emitter.getMaxListeners()` and `emitter.setMaxListeners()` methods can be used to
+temporarily avoid this warning:
+
+```js
+import { EventEmitter } from 'node:events';
+const emitter = new EventEmitter();
+emitter.setMaxListeners(emitter.getMaxListeners() + 1);
+emitter.once('event', () => {
+ // do stuff
+ emitter.setMaxListeners(Math.max(emitter.getMaxListeners() - 1, 0));
+});
+```
+
+The `--trace-warnings` command-line flag can be used to display the
+stack trace for such warnings.
+
+The emitted warning can be inspected with `process.on('warning')` and will
+have the additional `emitter`, `type`, and `count` properties, referring to
+the event emitter instance, the event's name and the number of attached
+listeners, respectively.
+Its `name` property is set to `'MaxListenersExceededWarning'`.
+
+#### Since
+
+v0.11.2
+
+#### Inherited from
+
+`EventEmitter.defaultMaxListeners`
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:498
+
+***
+
+### errorMonitor
+
+> `readonly` `static` **errorMonitor**: *typeof* [`errorMonitor`](/api/classes/connection/#errormonitor)
+
+This symbol shall be used to install a listener for only monitoring `'error'` events. Listeners installed using this symbol are called before the regular `'error'` listeners are called.
+
+Installing a listener using this symbol does not change the behavior once an `'error'` event is emitted. Therefore, the process will still crash if no
+regular `'error'` listener is installed.
+
+#### Since
+
+v13.6.0, v12.17.0
+
+#### Inherited from
+
+`EventEmitter.errorMonitor`
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:445
+
+## Methods
+
+### \[captureRejectionSymbol\]()?
+
+> `optional` **\[captureRejectionSymbol\]**\<`K`\>(`error`, `event`, ...`args`): `void`
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **error**: `Error`
+
+β’ **event**: `string` \| `symbol`
+
+β’ ...**args**: `AnyRest`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+`EventEmitter.[captureRejectionSymbol]`
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:136
+
+***
+
+### addListener()
+
+> **addListener**\<`K`\>(`eventName`, `listener`): `this`
+
+Alias for `emitter.on(eventName, listener)`.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` \| `symbol`
+
+β’ **listener**
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+`EventEmitter.addListener`
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:597
+
+***
+
+### emit()
+
+> **emit**\<`K`\>(`eventName`, ...`args`): `boolean`
+
+Synchronously calls each of the listeners registered for the event named `eventName`, in the order they were registered, passing the supplied arguments
+to each.
+
+Returns `true` if the event had listeners, `false` otherwise.
+
+```js
+import { EventEmitter } from 'node:events';
+const myEmitter = new EventEmitter();
+
+// First listener
+myEmitter.on('event', function firstListener() {
+ console.log('Helloooo! first listener');
+});
+// Second listener
+myEmitter.on('event', function secondListener(arg1, arg2) {
+ console.log(`event with parameters ${arg1}, ${arg2} in second listener`);
+});
+// Third listener
+myEmitter.on('event', function thirdListener(...args) {
+ const parameters = args.join(', ');
+ console.log(`event with parameters ${parameters} in third listener`);
+});
+
+console.log(myEmitter.listeners('event'));
+
+myEmitter.emit('event', 1, 2, 3, 4, 5);
+
+// Prints:
+// [
+// [Function: firstListener],
+// [Function: secondListener],
+// [Function: thirdListener]
+// ]
+// Helloooo! first listener
+// event with parameters 1, 2 in second listener
+// event with parameters 1, 2, 3, 4, 5 in third listener
+```
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` \| `symbol`
+
+β’ ...**args**: `AnyRest`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+`EventEmitter.emit`
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:859
+
+***
+
+### eventNames()
+
+> **eventNames**(): (`string` \| `symbol`)[]
+
+Returns an array listing the events for which the emitter has registered
+listeners. The values in the array are strings or `Symbol`s.
+
+```js
+import { EventEmitter } from 'node:events';
+
+const myEE = new EventEmitter();
+myEE.on('foo', () => {});
+myEE.on('bar', () => {});
+
+const sym = Symbol('symbol');
+myEE.on(sym, () => {});
+
+console.log(myEE.eventNames());
+// Prints: [ 'foo', 'bar', Symbol(symbol) ]
+```
+
+#### Returns
+
+(`string` \| `symbol`)[]
+
+#### Inherited from
+
+`EventEmitter.eventNames`
+
+#### Since
+
+v6.0.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:922
+
+***
+
+### getMaxListeners()
+
+> **getMaxListeners**(): `number`
+
+Returns the current max listener value for the `EventEmitter` which is either
+set by `emitter.setMaxListeners(n)` or defaults to [defaultMaxListeners](../../../../../../api/classes/connection/#defaultmaxlisteners).
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+`EventEmitter.getMaxListeners`
+
+#### Since
+
+v1.0.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:774
+
+***
+
+### listenerCount()
+
+> **listenerCount**\<`K`\>(`eventName`, `listener`?): `number`
+
+Returns the number of listeners listening for the event named `eventName`.
+If `listener` is provided, it will return how many times the listener is found
+in the list of the listeners of the event.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` \| `symbol`
+
+The name of the event being listened for
+
+β’ **listener?**: `Function`
+
+The event handler function
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+`EventEmitter.listenerCount`
+
+#### Since
+
+v3.2.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:868
+
+***
+
+### listeners()
+
+> **listeners**\<`K`\>(`eventName`): `Function`[]
+
+Returns a copy of the array of listeners for the event named `eventName`.
+
+```js
+server.on('connection', (stream) => {
+ console.log('someone connected!');
+});
+console.log(util.inspect(server.listeners('connection')));
+// Prints: [ [Function] ]
+```
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` \| `symbol`
+
+#### Returns
+
+`Function`[]
+
+#### Inherited from
+
+`EventEmitter.listeners`
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:787
+
+***
+
+### off()
+
+> **off**\<`K`\>(`eventName`, `listener`): `this`
+
+Alias for `emitter.removeListener()`.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` \| `symbol`
+
+β’ **listener**
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+`EventEmitter.off`
+
+#### Since
+
+v10.0.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:747
+
+***
+
+### on()
+
+> **on**\<`K`\>(`eventName`, `listener`): `this`
+
+Adds the `listener` function to the end of the listeners array for the event
+named `eventName`. No checks are made to see if the `listener` has already
+been added. Multiple calls passing the same combination of `eventName` and
+`listener` will result in the `listener` being added, and called, multiple times.
+
+```js
+server.on('connection', (stream) => {
+ console.log('someone connected!');
+});
+```
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+By default, event listeners are invoked in the order they are added. The `emitter.prependListener()` method can be used as an alternative to add the
+event listener to the beginning of the listeners array.
+
+```js
+import { EventEmitter } from 'node:events';
+const myEE = new EventEmitter();
+myEE.on('foo', () => console.log('a'));
+myEE.prependListener('foo', () => console.log('b'));
+myEE.emit('foo');
+// Prints:
+// b
+// a
+```
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` \| `symbol`
+
+The name of the event.
+
+β’ **listener**
+
+The callback function
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+`EventEmitter.on`
+
+#### Since
+
+v0.1.101
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:629
+
+***
+
+### once()
+
+> **once**\<`K`\>(`eventName`, `listener`): `this`
+
+Adds a **one-time** `listener` function for the event named `eventName`. The
+next time `eventName` is triggered, this listener is removed and then invoked.
+
+```js
+server.once('connection', (stream) => {
+ console.log('Ah, we have our first user!');
+});
+```
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+By default, event listeners are invoked in the order they are added. The `emitter.prependOnceListener()` method can be used as an alternative to add the
+event listener to the beginning of the listeners array.
+
+```js
+import { EventEmitter } from 'node:events';
+const myEE = new EventEmitter();
+myEE.once('foo', () => console.log('a'));
+myEE.prependOnceListener('foo', () => console.log('b'));
+myEE.emit('foo');
+// Prints:
+// b
+// a
+```
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` \| `symbol`
+
+The name of the event.
+
+β’ **listener**
+
+The callback function
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+`EventEmitter.once`
+
+#### Since
+
+v0.3.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:659
+
+***
+
+### prependListener()
+
+> **prependListener**\<`K`\>(`eventName`, `listener`): `this`
+
+Adds the `listener` function to the _beginning_ of the listeners array for the
+event named `eventName`. No checks are made to see if the `listener` has
+already been added. Multiple calls passing the same combination of `eventName`
+and `listener` will result in the `listener` being added, and called, multiple times.
+
+```js
+server.prependListener('connection', (stream) => {
+ console.log('someone connected!');
+});
+```
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` \| `symbol`
+
+The name of the event.
+
+β’ **listener**
+
+The callback function
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+`EventEmitter.prependListener`
+
+#### Since
+
+v6.0.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:886
+
+***
+
+### prependOnceListener()
+
+> **prependOnceListener**\<`K`\>(`eventName`, `listener`): `this`
+
+Adds a **one-time**`listener` function for the event named `eventName` to the _beginning_ of the listeners array. The next time `eventName` is triggered, this
+listener is removed, and then invoked.
+
+```js
+server.prependOnceListener('connection', (stream) => {
+ console.log('Ah, we have our first user!');
+});
+```
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` \| `symbol`
+
+The name of the event.
+
+β’ **listener**
+
+The callback function
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+`EventEmitter.prependOnceListener`
+
+#### Since
+
+v6.0.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:902
+
+***
+
+### rawListeners()
+
+> **rawListeners**\<`K`\>(`eventName`): `Function`[]
+
+Returns a copy of the array of listeners for the event named `eventName`,
+including any wrappers (such as those created by `.once()`).
+
+```js
+import { EventEmitter } from 'node:events';
+const emitter = new EventEmitter();
+emitter.once('log', () => console.log('log once'));
+
+// Returns a new Array with a function `onceWrapper` which has a property
+// `listener` which contains the original listener bound above
+const listeners = emitter.rawListeners('log');
+const logFnWrapper = listeners[0];
+
+// Logs "log once" to the console and does not unbind the `once` event
+logFnWrapper.listener();
+
+// Logs "log once" to the console and removes the listener
+logFnWrapper();
+
+emitter.on('log', () => console.log('log persistently'));
+// Will return a new Array with a single function bound by `.on()` above
+const newListeners = emitter.rawListeners('log');
+
+// Logs "log persistently" twice
+newListeners[0]();
+emitter.emit('log');
+```
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` \| `symbol`
+
+#### Returns
+
+`Function`[]
+
+#### Inherited from
+
+`EventEmitter.rawListeners`
+
+#### Since
+
+v9.4.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:818
+
+***
+
+### removeAllListeners()
+
+> **removeAllListeners**(`eventName`?): `this`
+
+Removes all listeners, or those of the specified `eventName`.
+
+It is bad practice to remove listeners added elsewhere in the code,
+particularly when the `EventEmitter` instance was created by some other
+component or module (e.g. sockets or file streams).
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Parameters
+
+β’ **eventName?**: `string` \| `symbol`
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+`EventEmitter.removeAllListeners`
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:758
+
+***
+
+### removeListener()
+
+> **removeListener**\<`K`\>(`eventName`, `listener`): `this`
+
+Removes the specified `listener` from the listener array for the event named `eventName`.
+
+```js
+const callback = (stream) => {
+ console.log('someone connected!');
+};
+server.on('connection', callback);
+// ...
+server.removeListener('connection', callback);
+```
+
+`removeListener()` will remove, at most, one instance of a listener from the
+listener array. If any single listener has been added multiple times to the
+listener array for the specified `eventName`, then `removeListener()` must be
+called multiple times to remove each instance.
+
+Once an event is emitted, all listeners attached to it at the
+time of emitting are called in order. This implies that any `removeListener()` or `removeAllListeners()` calls _after_ emitting and _before_ the last listener finishes execution
+will not remove them from`emit()` in progress. Subsequent events behave as expected.
+
+```js
+import { EventEmitter } from 'node:events';
+class MyEmitter extends EventEmitter {}
+const myEmitter = new MyEmitter();
+
+const callbackA = () => {
+ console.log('A');
+ myEmitter.removeListener('event', callbackB);
+};
+
+const callbackB = () => {
+ console.log('B');
+};
+
+myEmitter.on('event', callbackA);
+
+myEmitter.on('event', callbackB);
+
+// callbackA removes listener callbackB but it will still be called.
+// Internal listener array at time of emit [callbackA, callbackB]
+myEmitter.emit('event');
+// Prints:
+// A
+// B
+
+// callbackB is now removed.
+// Internal listener array [callbackA]
+myEmitter.emit('event');
+// Prints:
+// A
+```
+
+Because listeners are managed using an internal array, calling this will
+change the position indices of any listener registered _after_ the listener
+being removed. This will not impact the order in which listeners are called,
+but it means that any copies of the listener array as returned by
+the `emitter.listeners()` method will need to be recreated.
+
+When a single function has been added as a handler multiple times for a single
+event (as in the example below), `removeListener()` will remove the most
+recently added instance. In the example the `once('ping')` listener is removed:
+
+```js
+import { EventEmitter } from 'node:events';
+const ee = new EventEmitter();
+
+function pong() {
+ console.log('pong');
+}
+
+ee.on('ping', pong);
+ee.once('ping', pong);
+ee.removeListener('ping', pong);
+
+ee.emit('ping');
+ee.emit('ping');
+```
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` \| `symbol`
+
+β’ **listener**
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+`EventEmitter.removeListener`
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:742
+
+***
+
+### setDeaf()
+
+> **setDeaf**(`deaf`): `void`
+
+Set the deafen status for the current bot user
+
+#### Parameters
+
+β’ **deaf**: `boolean` = `false`
+
+Boolean value to indicate whether to deafen or undeafen
+
+#### Returns
+
+`void`
+
+#### Default Value
+
+```ts
+false
+```
+
+#### Defined in
+
+[src/guild/Connection.ts:107](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Connection.ts#L107)
+
+***
+
+### setMaxListeners()
+
+> **setMaxListeners**(`n`): `this`
+
+By default `EventEmitter`s will print a warning if more than `10` listeners are
+added for a particular event. This is a useful default that helps finding
+memory leaks. The `emitter.setMaxListeners()` method allows the limit to be
+modified for this specific `EventEmitter` instance. The value can be set to `Infinity` (or `0`) to indicate an unlimited number of listeners.
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Parameters
+
+β’ **n**: `number`
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+`EventEmitter.setMaxListeners`
+
+#### Since
+
+v0.3.5
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:768
+
+***
+
+### setMute()
+
+> **setMute**(`mute`): `void`
+
+Set the mute status for the current bot user
+
+#### Parameters
+
+β’ **mute**: `boolean` = `false`
+
+Boolean value to indicate whether to mute or unmute
+
+#### Returns
+
+`void`
+
+#### Default Value
+
+```ts
+false
+```
+
+#### Defined in
+
+[src/guild/Connection.ts:117](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Connection.ts#L117)
+
+***
+
+### addAbortListener()
+
+> `static` **addAbortListener**(`signal`, `resource`): `Disposable`
+
+Listens once to the `abort` event on the provided `signal`.
+
+Listening to the `abort` event on abort signals is unsafe and may
+lead to resource leaks since another third party with the signal can
+call `e.stopImmediatePropagation()`. Unfortunately Node.js cannot change
+this since it would violate the web standard. Additionally, the original
+API makes it easy to forget to remove listeners.
+
+This API allows safely using `AbortSignal`s in Node.js APIs by solving these
+two issues by listening to the event such that `stopImmediatePropagation` does
+not prevent the listener from running.
+
+Returns a disposable so that it may be unsubscribed from more easily.
+
+```js
+import { addAbortListener } from 'node:events';
+
+function example(signal) {
+ let disposable;
+ try {
+ signal.addEventListener('abort', (e) => e.stopImmediatePropagation());
+ disposable = addAbortListener(signal, (e) => {
+ // Do something when signal is aborted.
+ });
+ } finally {
+ disposable?.[Symbol.dispose]();
+ }
+}
+```
+
+:::caution[Experimental]
+This API should not be used in production and may be trimmed from a public release.
+:::
+
+#### Parameters
+
+β’ **signal**: `AbortSignal`
+
+β’ **resource**
+
+#### Returns
+
+`Disposable`
+
+Disposable that removes the `abort` listener.
+
+#### Inherited from
+
+`EventEmitter.addAbortListener`
+
+#### Since
+
+v20.5.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:437
+
+***
+
+### getEventListeners()
+
+> `static` **getEventListeners**(`emitter`, `name`): `Function`[]
+
+Returns a copy of the array of listeners for the event named `eventName`.
+
+For `EventEmitter`s this behaves exactly the same as calling `.listeners` on
+the emitter.
+
+For `EventTarget`s this is the only way to get the event listeners for the
+event target. This is useful for debugging and diagnostic purposes.
+
+```js
+import { getEventListeners, EventEmitter } from 'node:events';
+
+{
+ const ee = new EventEmitter();
+ const listener = () => console.log('Events are fun');
+ ee.on('foo', listener);
+ console.log(getEventListeners(ee, 'foo')); // [ [Function: listener] ]
+}
+{
+ const et = new EventTarget();
+ const listener = () => console.log('Events are fun');
+ et.addEventListener('foo', listener);
+ console.log(getEventListeners(et, 'foo')); // [ [Function: listener] ]
+}
+```
+
+#### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`\> \| `EventTarget`
+
+β’ **name**: `string` \| `symbol`
+
+#### Returns
+
+`Function`[]
+
+#### Inherited from
+
+`EventEmitter.getEventListeners`
+
+#### Since
+
+v15.2.0, v14.17.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:358
+
+***
+
+### getMaxListeners()
+
+> `static` **getMaxListeners**(`emitter`): `number`
+
+Returns the currently set max amount of listeners.
+
+For `EventEmitter`s this behaves exactly the same as calling `.getMaxListeners` on
+the emitter.
+
+For `EventTarget`s this is the only way to get the max event listeners for the
+event target. If the number of event handlers on a single EventTarget exceeds
+the max set, the EventTarget will print a warning.
+
+```js
+import { getMaxListeners, setMaxListeners, EventEmitter } from 'node:events';
+
+{
+ const ee = new EventEmitter();
+ console.log(getMaxListeners(ee)); // 10
+ setMaxListeners(11, ee);
+ console.log(getMaxListeners(ee)); // 11
+}
+{
+ const et = new EventTarget();
+ console.log(getMaxListeners(et)); // 10
+ setMaxListeners(11, et);
+ console.log(getMaxListeners(et)); // 11
+}
+```
+
+#### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`\> \| `EventTarget`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+`EventEmitter.getMaxListeners`
+
+#### Since
+
+v19.9.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:387
+
+***
+
+### ~~listenerCount()~~
+
+> `static` **listenerCount**(`emitter`, `eventName`): `number`
+
+A class method that returns the number of listeners for the given `eventName` registered on the given `emitter`.
+
+```js
+import { EventEmitter, listenerCount } from 'node:events';
+
+const myEmitter = new EventEmitter();
+myEmitter.on('event', () => {});
+myEmitter.on('event', () => {});
+console.log(listenerCount(myEmitter, 'event'));
+// Prints: 2
+```
+
+:::caution[Deprecated]
+Since v3.2.0 - Use `listenerCount` instead.
+:::
+
+#### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`\>
+
+The emitter to query
+
+β’ **eventName**: `string` \| `symbol`
+
+The event name
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+`EventEmitter.listenerCount`
+
+#### Since
+
+v0.9.12
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:330
+
+***
+
+### on()
+
+#### on(emitter, eventName, options)
+
+> `static` **on**(`emitter`, `eventName`, `options`?): `AsyncIterableIterator`\<`any`[]\>
+
+```js
+import { on, EventEmitter } from 'node:events';
+import process from 'node:process';
+
+const ee = new EventEmitter();
+
+// Emit later on
+process.nextTick(() => {
+ ee.emit('foo', 'bar');
+ ee.emit('foo', 42);
+});
+
+for await (const event of on(ee, 'foo')) {
+ // The execution of this inner block is synchronous and it
+ // processes one event at a time (even with await). Do not use
+ // if concurrent execution is required.
+ console.log(event); // prints ['bar'] [42]
+}
+// Unreachable here
+```
+
+Returns an `AsyncIterator` that iterates `eventName` events. It will throw
+if the `EventEmitter` emits `'error'`. It removes all listeners when
+exiting the loop. The `value` returned by each iteration is an array
+composed of the emitted event arguments.
+
+An `AbortSignal` can be used to cancel waiting on events:
+
+```js
+import { on, EventEmitter } from 'node:events';
+import process from 'node:process';
+
+const ac = new AbortController();
+
+(async () => {
+ const ee = new EventEmitter();
+
+ // Emit later on
+ process.nextTick(() => {
+ ee.emit('foo', 'bar');
+ ee.emit('foo', 42);
+ });
+
+ for await (const event of on(ee, 'foo', { signal: ac.signal })) {
+ // The execution of this inner block is synchronous and it
+ // processes one event at a time (even with await). Do not use
+ // if concurrent execution is required.
+ console.log(event); // prints ['bar'] [42]
+ }
+ // Unreachable here
+})();
+
+process.nextTick(() => ac.abort());
+```
+
+Use the `close` option to specify an array of event names that will end the iteration:
+
+```js
+import { on, EventEmitter } from 'node:events';
+import process from 'node:process';
+
+const ee = new EventEmitter();
+
+// Emit later on
+process.nextTick(() => {
+ ee.emit('foo', 'bar');
+ ee.emit('foo', 42);
+ ee.emit('close');
+});
+
+for await (const event of on(ee, 'foo', { close: ['close'] })) {
+ console.log(event); // prints ['bar'] [42]
+}
+// the loop will exit after 'close' is emitted
+console.log('done'); // prints 'done'
+```
+
+##### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`\>
+
+β’ **eventName**: `string` \| `symbol`
+
+β’ **options?**: `StaticEventEmitterIteratorOptions`
+
+##### Returns
+
+`AsyncIterableIterator`\<`any`[]\>
+
+An `AsyncIterator` that iterates `eventName` events emitted by the `emitter`
+
+##### Inherited from
+
+`EventEmitter.on`
+
+##### Since
+
+v13.6.0, v12.16.0
+
+##### Defined in
+
+node\_modules/@types/node/events.d.ts:303
+
+#### on(emitter, eventName, options)
+
+> `static` **on**(`emitter`, `eventName`, `options`?): `AsyncIterableIterator`\<`any`[]\>
+
+##### Parameters
+
+β’ **emitter**: `EventTarget`
+
+β’ **eventName**: `string`
+
+β’ **options?**: `StaticEventEmitterIteratorOptions`
+
+##### Returns
+
+`AsyncIterableIterator`\<`any`[]\>
+
+##### Inherited from
+
+`EventEmitter.on`
+
+##### Defined in
+
+node\_modules/@types/node/events.d.ts:308
+
+***
+
+### once()
+
+#### once(emitter, eventName, options)
+
+> `static` **once**(`emitter`, `eventName`, `options`?): `Promise`\<`any`[]\>
+
+Creates a `Promise` that is fulfilled when the `EventEmitter` emits the given
+event or that is rejected if the `EventEmitter` emits `'error'` while waiting.
+The `Promise` will resolve with an array of all the arguments emitted to the
+given event.
+
+This method is intentionally generic and works with the web platform [EventTarget](https://dom.spec.whatwg.org/#interface-eventtarget) interface, which has no special`'error'` event
+semantics and does not listen to the `'error'` event.
+
+```js
+import { once, EventEmitter } from 'node:events';
+import process from 'node:process';
+
+const ee = new EventEmitter();
+
+process.nextTick(() => {
+ ee.emit('myevent', 42);
+});
+
+const [value] = await once(ee, 'myevent');
+console.log(value);
+
+const err = new Error('kaboom');
+process.nextTick(() => {
+ ee.emit('error', err);
+});
+
+try {
+ await once(ee, 'myevent');
+} catch (err) {
+ console.error('error happened', err);
+}
+```
+
+The special handling of the `'error'` event is only used when `events.once()` is used to wait for another event. If `events.once()` is used to wait for the
+'`error'` event itself, then it is treated as any other kind of event without
+special handling:
+
+```js
+import { EventEmitter, once } from 'node:events';
+
+const ee = new EventEmitter();
+
+once(ee, 'error')
+ .then(([err]) => console.log('ok', err.message))
+ .catch((err) => console.error('error', err.message));
+
+ee.emit('error', new Error('boom'));
+
+// Prints: ok boom
+```
+
+An `AbortSignal` can be used to cancel waiting for the event:
+
+```js
+import { EventEmitter, once } from 'node:events';
+
+const ee = new EventEmitter();
+const ac = new AbortController();
+
+async function foo(emitter, event, signal) {
+ try {
+ await once(emitter, event, { signal });
+ console.log('event emitted!');
+ } catch (error) {
+ if (error.name === 'AbortError') {
+ console.error('Waiting for the event was canceled!');
+ } else {
+ console.error('There was an error', error.message);
+ }
+ }
+}
+
+foo(ee, 'foo', ac.signal);
+ac.abort(); // Abort waiting for the event
+ee.emit('foo'); // Prints: Waiting for the event was canceled!
+```
+
+##### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`\>
+
+β’ **eventName**: `string` \| `symbol`
+
+β’ **options?**: `StaticEventEmitterOptions`
+
+##### Returns
+
+`Promise`\<`any`[]\>
+
+##### Inherited from
+
+`EventEmitter.once`
+
+##### Since
+
+v11.13.0, v10.16.0
+
+##### Defined in
+
+node\_modules/@types/node/events.d.ts:217
+
+#### once(emitter, eventName, options)
+
+> `static` **once**(`emitter`, `eventName`, `options`?): `Promise`\<`any`[]\>
+
+##### Parameters
+
+β’ **emitter**: `EventTarget`
+
+β’ **eventName**: `string`
+
+β’ **options?**: `StaticEventEmitterOptions`
+
+##### Returns
+
+`Promise`\<`any`[]\>
+
+##### Inherited from
+
+`EventEmitter.once`
+
+##### Defined in
+
+node\_modules/@types/node/events.d.ts:222
+
+***
+
+### setMaxListeners()
+
+> `static` **setMaxListeners**(`n`?, ...`eventTargets`?): `void`
+
+```js
+import { setMaxListeners, EventEmitter } from 'node:events';
+
+const target = new EventTarget();
+const emitter = new EventEmitter();
+
+setMaxListeners(5, target, emitter);
+```
+
+#### Parameters
+
+β’ **n?**: `number`
+
+A non-negative number. The maximum number of listeners per `EventTarget` event.
+
+β’ ...**eventTargets?**: (`EventEmitter`\<`DefaultEventMap`\> \| `EventTarget`)[]
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+`EventEmitter.setMaxListeners`
+
+#### Since
+
+v15.4.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:402
diff --git a/src/content/docs/api/classes/Connector.md b/src/content/docs/api/classes/Connector.md
new file mode 100644
index 0000000..b436d74
--- /dev/null
+++ b/src/content/docs/api/classes/Connector.md
@@ -0,0 +1,103 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "Connector"
+---
+
+## Extended by
+
+- [`DiscordJS`](/api/namespaces/connectors/classes/discordjs/)
+- [`Eris`](/api/namespaces/connectors/classes/eris/)
+- [`OceanicJS`](/api/namespaces/connectors/classes/oceanicjs/)
+- [`Seyfert`](/api/namespaces/connectors/classes/seyfert/)
+
+## Constructors
+
+### new Connector()
+
+> **new Connector**(`client`): [`Connector`](/api/classes/connector/)
+
+#### Parameters
+
+β’ **client**: `any`
+
+#### Returns
+
+[`Connector`](/api/classes/connector/)
+
+#### Defined in
+
+[src/connectors/Connector.ts:15](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/connectors/Connector.ts#L15)
+
+## Methods
+
+### getId()
+
+> `abstract` **getId**(): `string`
+
+#### Returns
+
+`string`
+
+#### Defined in
+
+[src/connectors/Connector.ts:41](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/connectors/Connector.ts#L41)
+
+***
+
+### listen()
+
+> `abstract` **listen**(`nodes`): `void`
+
+#### Parameters
+
+β’ **nodes**: [`NodeOption`](/api/interfaces/nodeoption/)[]
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/connectors/Connector.ts:45](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/connectors/Connector.ts#L45)
+
+***
+
+### sendPacket()
+
+> `abstract` **sendPacket**(`shardId`, `payload`, `important`): `void`
+
+#### Parameters
+
+β’ **shardId**: `number`
+
+β’ **payload**: `any`
+
+β’ **important**: `boolean`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/connectors/Connector.ts:43](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/connectors/Connector.ts#L43)
+
+***
+
+### set()
+
+> **set**(`manager`): [`Connector`](/api/classes/connector/)
+
+#### Parameters
+
+β’ **manager**: [`Shoukaku`](/api/classes/shoukaku/)
+
+#### Returns
+
+[`Connector`](/api/classes/connector/)
+
+#### Defined in
+
+[src/connectors/Connector.ts:20](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/connectors/Connector.ts#L20)
diff --git a/src/content/docs/api/classes/Node.md b/src/content/docs/api/classes/Node.md
new file mode 100644
index 0000000..dbbbbee
--- /dev/null
+++ b/src/content/docs/api/classes/Node.md
@@ -0,0 +1,1650 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "Node"
+---
+
+Represents a Lavalink node
+
+## Extends
+
+- `EventEmitter`
+
+## Constructors
+
+### new Node()
+
+> **new Node**(`manager`, `options`): [`Node`](/api/classes/node/)
+
+#### Parameters
+
+β’ **manager**: [`Shoukaku`](/api/classes/shoukaku/)
+
+Shoukaku instance
+
+β’ **options**: [`NodeOption`](/api/interfaces/nodeoption/)
+
+Options on creating this node
+
+#### Returns
+
+[`Node`](/api/classes/node/)
+
+#### Overrides
+
+`EventEmitter.constructor`
+
+#### Defined in
+
+[src/node/Node.ts:146](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Node.ts#L146)
+
+## Properties
+
+### group?
+
+> `readonly` `optional` **group**: `string`
+
+Group in which this node is contained
+
+#### Defined in
+
+[src/node/Node.ts:92](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Node.ts#L92)
+
+***
+
+### info
+
+> **info**: `null` \| [`NodeInfo`](/api/type-aliases/nodeinfo/)
+
+Information about lavalink node
+
+#### Defined in
+
+[src/node/Node.ts:120](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Node.ts#L120)
+
+***
+
+### manager
+
+> `readonly` **manager**: [`Shoukaku`](/api/classes/shoukaku/)
+
+Shoukaku class
+
+#### Defined in
+
+[src/node/Node.ts:80](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Node.ts#L80)
+
+***
+
+### name
+
+> `readonly` **name**: `string`
+
+Name of this node
+
+#### Defined in
+
+[src/node/Node.ts:88](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Node.ts#L88)
+
+***
+
+### reconnects
+
+> **reconnects**: `number`
+
+The number of reconnects to Lavalink
+
+#### Defined in
+
+[src/node/Node.ts:108](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Node.ts#L108)
+
+***
+
+### rest
+
+> `readonly` **rest**: [`Rest`](/api/classes/rest/)
+
+Lavalink rest API
+
+#### Defined in
+
+[src/node/Node.ts:84](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Node.ts#L84)
+
+***
+
+### sessionId
+
+> **sessionId**: `null` \| `string`
+
+SessionId of this Lavalink connection (not to be confused with Discord SessionId)
+
+#### Defined in
+
+[src/node/Node.ts:128](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Node.ts#L128)
+
+***
+
+### state
+
+> **state**: [`State`](/api/namespaces/constants/enumerations/state/)
+
+The state of this connection
+
+#### Defined in
+
+[src/node/Node.ts:112](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Node.ts#L112)
+
+***
+
+### stats
+
+> **stats**: `null` \| [`NodeStats`](/api/interfaces/nodestats/)
+
+Statistics from Lavalink
+
+#### Defined in
+
+[src/node/Node.ts:116](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Node.ts#L116)
+
+***
+
+### version
+
+> `readonly` **version**: `string`
+
+Websocket version this node will use
+
+#### Defined in
+
+[src/node/Node.ts:96](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Node.ts#L96)
+
+***
+
+### ws
+
+> **ws**: `null` \| `WebSocket`
+
+Websocket instance
+
+#### Defined in
+
+[src/node/Node.ts:124](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Node.ts#L124)
+
+***
+
+### captureRejectionSymbol
+
+> `readonly` `static` **captureRejectionSymbol**: *typeof* [`captureRejectionSymbol`](/api/classes/connection/#capturerejectionsymbol)
+
+Value: `Symbol.for('nodejs.rejection')`
+
+See how to write a custom `rejection handler`.
+
+#### Since
+
+v13.4.0, v12.16.0
+
+#### Inherited from
+
+`EventEmitter.captureRejectionSymbol`
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:452
+
+***
+
+### captureRejections
+
+> `static` **captureRejections**: `boolean`
+
+Value: [boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type)
+
+Change the default `captureRejections` option on all new `EventEmitter` objects.
+
+#### Since
+
+v13.4.0, v12.16.0
+
+#### Inherited from
+
+`EventEmitter.captureRejections`
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:459
+
+***
+
+### defaultMaxListeners
+
+> `static` **defaultMaxListeners**: `number`
+
+By default, a maximum of `10` listeners can be registered for any single
+event. This limit can be changed for individual `EventEmitter` instances
+using the `emitter.setMaxListeners(n)` method. To change the default
+for _all_`EventEmitter` instances, the `events.defaultMaxListeners` property
+can be used. If this value is not a positive number, a `RangeError` is thrown.
+
+Take caution when setting the `events.defaultMaxListeners` because the
+change affects _all_ `EventEmitter` instances, including those created before
+the change is made. However, calling `emitter.setMaxListeners(n)` still has
+precedence over `events.defaultMaxListeners`.
+
+This is not a hard limit. The `EventEmitter` instance will allow
+more listeners to be added but will output a trace warning to stderr indicating
+that a "possible EventEmitter memory leak" has been detected. For any single
+`EventEmitter`, the `emitter.getMaxListeners()` and `emitter.setMaxListeners()` methods can be used to
+temporarily avoid this warning:
+
+```js
+import { EventEmitter } from 'node:events';
+const emitter = new EventEmitter();
+emitter.setMaxListeners(emitter.getMaxListeners() + 1);
+emitter.once('event', () => {
+ // do stuff
+ emitter.setMaxListeners(Math.max(emitter.getMaxListeners() - 1, 0));
+});
+```
+
+The `--trace-warnings` command-line flag can be used to display the
+stack trace for such warnings.
+
+The emitted warning can be inspected with `process.on('warning')` and will
+have the additional `emitter`, `type`, and `count` properties, referring to
+the event emitter instance, the event's name and the number of attached
+listeners, respectively.
+Its `name` property is set to `'MaxListenersExceededWarning'`.
+
+#### Since
+
+v0.11.2
+
+#### Inherited from
+
+`EventEmitter.defaultMaxListeners`
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:498
+
+***
+
+### errorMonitor
+
+> `readonly` `static` **errorMonitor**: *typeof* [`errorMonitor`](/api/classes/connection/#errormonitor)
+
+This symbol shall be used to install a listener for only monitoring `'error'` events. Listeners installed using this symbol are called before the regular `'error'` listeners are called.
+
+Installing a listener using this symbol does not change the behavior once an `'error'` event is emitted. Therefore, the process will still crash if no
+regular `'error'` listener is installed.
+
+#### Since
+
+v13.6.0, v12.17.0
+
+#### Inherited from
+
+`EventEmitter.errorMonitor`
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:445
+
+## Methods
+
+### \[captureRejectionSymbol\]()?
+
+> `optional` **\[captureRejectionSymbol\]**\<`K`\>(`error`, `event`, ...`args`): `void`
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **error**: `Error`
+
+β’ **event**: `string` \| `symbol`
+
+β’ ...**args**: `AnyRest`
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+`EventEmitter.[captureRejectionSymbol]`
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:136
+
+***
+
+### addListener()
+
+> **addListener**\<`K`\>(`eventName`, `listener`): `this`
+
+Alias for `emitter.on(eventName, listener)`.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` \| `symbol`
+
+β’ **listener**
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+`EventEmitter.addListener`
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:597
+
+***
+
+### connect()
+
+> **connect**(): `void`
+
+Connect to Lavalink
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/node/Node.ts:196](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Node.ts#L196)
+
+***
+
+### disconnect()
+
+> **disconnect**(`code`, `reason`?): `void`
+
+Disconnect from lavalink
+
+#### Parameters
+
+β’ **code**: `number`
+
+Status code
+
+β’ **reason?**: `string`
+
+Reason for disconnect
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/node/Node.ts:226](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Node.ts#L226)
+
+***
+
+### emit()
+
+> **emit**\<`K`\>(`eventName`, ...`args`): `boolean`
+
+Synchronously calls each of the listeners registered for the event named `eventName`, in the order they were registered, passing the supplied arguments
+to each.
+
+Returns `true` if the event had listeners, `false` otherwise.
+
+```js
+import { EventEmitter } from 'node:events';
+const myEmitter = new EventEmitter();
+
+// First listener
+myEmitter.on('event', function firstListener() {
+ console.log('Helloooo! first listener');
+});
+// Second listener
+myEmitter.on('event', function secondListener(arg1, arg2) {
+ console.log(`event with parameters ${arg1}, ${arg2} in second listener`);
+});
+// Third listener
+myEmitter.on('event', function thirdListener(...args) {
+ const parameters = args.join(', ');
+ console.log(`event with parameters ${parameters} in third listener`);
+});
+
+console.log(myEmitter.listeners('event'));
+
+myEmitter.emit('event', 1, 2, 3, 4, 5);
+
+// Prints:
+// [
+// [Function: firstListener],
+// [Function: secondListener],
+// [Function: thirdListener]
+// ]
+// Helloooo! first listener
+// event with parameters 1, 2 in second listener
+// event with parameters 1, 2, 3, 4, 5 in third listener
+```
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` \| `symbol`
+
+β’ ...**args**: `AnyRest`
+
+#### Returns
+
+`boolean`
+
+#### Inherited from
+
+`EventEmitter.emit`
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:859
+
+***
+
+### error()
+
+> **error**(`error`): `void`
+
+To emit error events easily
+
+#### Parameters
+
+β’ **error**: `unknown`
+
+error message
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/node/Node.ts:318](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Node.ts#L318)
+
+***
+
+### eventNames()
+
+> **eventNames**(): (`string` \| `symbol`)[]
+
+Returns an array listing the events for which the emitter has registered
+listeners. The values in the array are strings or `Symbol`s.
+
+```js
+import { EventEmitter } from 'node:events';
+
+const myEE = new EventEmitter();
+myEE.on('foo', () => {});
+myEE.on('bar', () => {});
+
+const sym = Symbol('symbol');
+myEE.on(sym, () => {});
+
+console.log(myEE.eventNames());
+// Prints: [ 'foo', 'bar', Symbol(symbol) ]
+```
+
+#### Returns
+
+(`string` \| `symbol`)[]
+
+#### Inherited from
+
+`EventEmitter.eventNames`
+
+#### Since
+
+v6.0.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:922
+
+***
+
+### getMaxListeners()
+
+> **getMaxListeners**(): `number`
+
+Returns the current max listener value for the `EventEmitter` which is either
+set by `emitter.setMaxListeners(n)` or defaults to [defaultMaxListeners](../../../../../../api/classes/node/#defaultmaxlisteners).
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+`EventEmitter.getMaxListeners`
+
+#### Since
+
+v1.0.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:774
+
+***
+
+### listenerCount()
+
+> **listenerCount**\<`K`\>(`eventName`, `listener`?): `number`
+
+Returns the number of listeners listening for the event named `eventName`.
+If `listener` is provided, it will return how many times the listener is found
+in the list of the listeners of the event.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` \| `symbol`
+
+The name of the event being listened for
+
+β’ **listener?**: `Function`
+
+The event handler function
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+`EventEmitter.listenerCount`
+
+#### Since
+
+v3.2.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:868
+
+***
+
+### listeners()
+
+> **listeners**\<`K`\>(`eventName`): `Function`[]
+
+Returns a copy of the array of listeners for the event named `eventName`.
+
+```js
+server.on('connection', (stream) => {
+ console.log('someone connected!');
+});
+console.log(util.inspect(server.listeners('connection')));
+// Prints: [ [Function] ]
+```
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` \| `symbol`
+
+#### Returns
+
+`Function`[]
+
+#### Inherited from
+
+`EventEmitter.listeners`
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:787
+
+***
+
+### off()
+
+> **off**\<`K`\>(`eventName`, `listener`): `this`
+
+Alias for `emitter.removeListener()`.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` \| `symbol`
+
+β’ **listener**
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+`EventEmitter.off`
+
+#### Since
+
+v10.0.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:747
+
+***
+
+### on()
+
+> **on**\<`K`\>(`eventName`, `listener`): `this`
+
+Adds the `listener` function to the end of the listeners array for the event
+named `eventName`. No checks are made to see if the `listener` has already
+been added. Multiple calls passing the same combination of `eventName` and
+`listener` will result in the `listener` being added, and called, multiple times.
+
+```js
+server.on('connection', (stream) => {
+ console.log('someone connected!');
+});
+```
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+By default, event listeners are invoked in the order they are added. The `emitter.prependListener()` method can be used as an alternative to add the
+event listener to the beginning of the listeners array.
+
+```js
+import { EventEmitter } from 'node:events';
+const myEE = new EventEmitter();
+myEE.on('foo', () => console.log('a'));
+myEE.prependListener('foo', () => console.log('b'));
+myEE.emit('foo');
+// Prints:
+// b
+// a
+```
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` \| `symbol`
+
+The name of the event.
+
+β’ **listener**
+
+The callback function
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+`EventEmitter.on`
+
+#### Since
+
+v0.1.101
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:629
+
+***
+
+### once()
+
+> **once**\<`K`\>(`eventName`, `listener`): `this`
+
+Adds a **one-time** `listener` function for the event named `eventName`. The
+next time `eventName` is triggered, this listener is removed and then invoked.
+
+```js
+server.once('connection', (stream) => {
+ console.log('Ah, we have our first user!');
+});
+```
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+By default, event listeners are invoked in the order they are added. The `emitter.prependOnceListener()` method can be used as an alternative to add the
+event listener to the beginning of the listeners array.
+
+```js
+import { EventEmitter } from 'node:events';
+const myEE = new EventEmitter();
+myEE.once('foo', () => console.log('a'));
+myEE.prependOnceListener('foo', () => console.log('b'));
+myEE.emit('foo');
+// Prints:
+// b
+// a
+```
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` \| `symbol`
+
+The name of the event.
+
+β’ **listener**
+
+The callback function
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+`EventEmitter.once`
+
+#### Since
+
+v0.3.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:659
+
+***
+
+### prependListener()
+
+> **prependListener**\<`K`\>(`eventName`, `listener`): `this`
+
+Adds the `listener` function to the _beginning_ of the listeners array for the
+event named `eventName`. No checks are made to see if the `listener` has
+already been added. Multiple calls passing the same combination of `eventName`
+and `listener` will result in the `listener` being added, and called, multiple times.
+
+```js
+server.prependListener('connection', (stream) => {
+ console.log('someone connected!');
+});
+```
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` \| `symbol`
+
+The name of the event.
+
+β’ **listener**
+
+The callback function
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+`EventEmitter.prependListener`
+
+#### Since
+
+v6.0.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:886
+
+***
+
+### prependOnceListener()
+
+> **prependOnceListener**\<`K`\>(`eventName`, `listener`): `this`
+
+Adds a **one-time**`listener` function for the event named `eventName` to the _beginning_ of the listeners array. The next time `eventName` is triggered, this
+listener is removed, and then invoked.
+
+```js
+server.prependOnceListener('connection', (stream) => {
+ console.log('Ah, we have our first user!');
+});
+```
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` \| `symbol`
+
+The name of the event.
+
+β’ **listener**
+
+The callback function
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+`EventEmitter.prependOnceListener`
+
+#### Since
+
+v6.0.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:902
+
+***
+
+### rawListeners()
+
+> **rawListeners**\<`K`\>(`eventName`): `Function`[]
+
+Returns a copy of the array of listeners for the event named `eventName`,
+including any wrappers (such as those created by `.once()`).
+
+```js
+import { EventEmitter } from 'node:events';
+const emitter = new EventEmitter();
+emitter.once('log', () => console.log('log once'));
+
+// Returns a new Array with a function `onceWrapper` which has a property
+// `listener` which contains the original listener bound above
+const listeners = emitter.rawListeners('log');
+const logFnWrapper = listeners[0];
+
+// Logs "log once" to the console and does not unbind the `once` event
+logFnWrapper.listener();
+
+// Logs "log once" to the console and removes the listener
+logFnWrapper();
+
+emitter.on('log', () => console.log('log persistently'));
+// Will return a new Array with a single function bound by `.on()` above
+const newListeners = emitter.rawListeners('log');
+
+// Logs "log persistently" twice
+newListeners[0]();
+emitter.emit('log');
+```
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` \| `symbol`
+
+#### Returns
+
+`Function`[]
+
+#### Inherited from
+
+`EventEmitter.rawListeners`
+
+#### Since
+
+v9.4.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:818
+
+***
+
+### removeAllListeners()
+
+> **removeAllListeners**(`eventName`?): `this`
+
+Removes all listeners, or those of the specified `eventName`.
+
+It is bad practice to remove listeners added elsewhere in the code,
+particularly when the `EventEmitter` instance was created by some other
+component or module (e.g. sockets or file streams).
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Parameters
+
+β’ **eventName?**: `string` \| `symbol`
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+`EventEmitter.removeAllListeners`
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:758
+
+***
+
+### removeListener()
+
+> **removeListener**\<`K`\>(`eventName`, `listener`): `this`
+
+Removes the specified `listener` from the listener array for the event named `eventName`.
+
+```js
+const callback = (stream) => {
+ console.log('someone connected!');
+};
+server.on('connection', callback);
+// ...
+server.removeListener('connection', callback);
+```
+
+`removeListener()` will remove, at most, one instance of a listener from the
+listener array. If any single listener has been added multiple times to the
+listener array for the specified `eventName`, then `removeListener()` must be
+called multiple times to remove each instance.
+
+Once an event is emitted, all listeners attached to it at the
+time of emitting are called in order. This implies that any `removeListener()` or `removeAllListeners()` calls _after_ emitting and _before_ the last listener finishes execution
+will not remove them from`emit()` in progress. Subsequent events behave as expected.
+
+```js
+import { EventEmitter } from 'node:events';
+class MyEmitter extends EventEmitter {}
+const myEmitter = new MyEmitter();
+
+const callbackA = () => {
+ console.log('A');
+ myEmitter.removeListener('event', callbackB);
+};
+
+const callbackB = () => {
+ console.log('B');
+};
+
+myEmitter.on('event', callbackA);
+
+myEmitter.on('event', callbackB);
+
+// callbackA removes listener callbackB but it will still be called.
+// Internal listener array at time of emit [callbackA, callbackB]
+myEmitter.emit('event');
+// Prints:
+// A
+// B
+
+// callbackB is now removed.
+// Internal listener array [callbackA]
+myEmitter.emit('event');
+// Prints:
+// A
+```
+
+Because listeners are managed using an internal array, calling this will
+change the position indices of any listener registered _after_ the listener
+being removed. This will not impact the order in which listeners are called,
+but it means that any copies of the listener array as returned by
+the `emitter.listeners()` method will need to be recreated.
+
+When a single function has been added as a handler multiple times for a single
+event (as in the example below), `removeListener()` will remove the most
+recently added instance. In the example the `once('ping')` listener is removed:
+
+```js
+import { EventEmitter } from 'node:events';
+const ee = new EventEmitter();
+
+function pong() {
+ console.log('pong');
+}
+
+ee.on('ping', pong);
+ee.once('ping', pong);
+ee.removeListener('ping', pong);
+
+ee.emit('ping');
+ee.emit('ping');
+```
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` \| `symbol`
+
+β’ **listener**
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+`EventEmitter.removeListener`
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:742
+
+***
+
+### setMaxListeners()
+
+> **setMaxListeners**(`n`): `this`
+
+By default `EventEmitter`s will print a warning if more than `10` listeners are
+added for a particular event. This is a useful default that helps finding
+memory leaks. The `emitter.setMaxListeners()` method allows the limit to be
+modified for this specific `EventEmitter` instance. The value can be set to `Infinity` (or `0`) to indicate an unlimited number of listeners.
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Parameters
+
+β’ **n**: `number`
+
+#### Returns
+
+`this`
+
+#### Inherited from
+
+`EventEmitter.setMaxListeners`
+
+#### Since
+
+v0.3.5
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:768
+
+***
+
+### addAbortListener()
+
+> `static` **addAbortListener**(`signal`, `resource`): `Disposable`
+
+Listens once to the `abort` event on the provided `signal`.
+
+Listening to the `abort` event on abort signals is unsafe and may
+lead to resource leaks since another third party with the signal can
+call `e.stopImmediatePropagation()`. Unfortunately Node.js cannot change
+this since it would violate the web standard. Additionally, the original
+API makes it easy to forget to remove listeners.
+
+This API allows safely using `AbortSignal`s in Node.js APIs by solving these
+two issues by listening to the event such that `stopImmediatePropagation` does
+not prevent the listener from running.
+
+Returns a disposable so that it may be unsubscribed from more easily.
+
+```js
+import { addAbortListener } from 'node:events';
+
+function example(signal) {
+ let disposable;
+ try {
+ signal.addEventListener('abort', (e) => e.stopImmediatePropagation());
+ disposable = addAbortListener(signal, (e) => {
+ // Do something when signal is aborted.
+ });
+ } finally {
+ disposable?.[Symbol.dispose]();
+ }
+}
+```
+
+:::caution[Experimental]
+This API should not be used in production and may be trimmed from a public release.
+:::
+
+#### Parameters
+
+β’ **signal**: `AbortSignal`
+
+β’ **resource**
+
+#### Returns
+
+`Disposable`
+
+Disposable that removes the `abort` listener.
+
+#### Inherited from
+
+`EventEmitter.addAbortListener`
+
+#### Since
+
+v20.5.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:437
+
+***
+
+### getEventListeners()
+
+> `static` **getEventListeners**(`emitter`, `name`): `Function`[]
+
+Returns a copy of the array of listeners for the event named `eventName`.
+
+For `EventEmitter`s this behaves exactly the same as calling `.listeners` on
+the emitter.
+
+For `EventTarget`s this is the only way to get the event listeners for the
+event target. This is useful for debugging and diagnostic purposes.
+
+```js
+import { getEventListeners, EventEmitter } from 'node:events';
+
+{
+ const ee = new EventEmitter();
+ const listener = () => console.log('Events are fun');
+ ee.on('foo', listener);
+ console.log(getEventListeners(ee, 'foo')); // [ [Function: listener] ]
+}
+{
+ const et = new EventTarget();
+ const listener = () => console.log('Events are fun');
+ et.addEventListener('foo', listener);
+ console.log(getEventListeners(et, 'foo')); // [ [Function: listener] ]
+}
+```
+
+#### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`\> \| `EventTarget`
+
+β’ **name**: `string` \| `symbol`
+
+#### Returns
+
+`Function`[]
+
+#### Inherited from
+
+`EventEmitter.getEventListeners`
+
+#### Since
+
+v15.2.0, v14.17.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:358
+
+***
+
+### getMaxListeners()
+
+> `static` **getMaxListeners**(`emitter`): `number`
+
+Returns the currently set max amount of listeners.
+
+For `EventEmitter`s this behaves exactly the same as calling `.getMaxListeners` on
+the emitter.
+
+For `EventTarget`s this is the only way to get the max event listeners for the
+event target. If the number of event handlers on a single EventTarget exceeds
+the max set, the EventTarget will print a warning.
+
+```js
+import { getMaxListeners, setMaxListeners, EventEmitter } from 'node:events';
+
+{
+ const ee = new EventEmitter();
+ console.log(getMaxListeners(ee)); // 10
+ setMaxListeners(11, ee);
+ console.log(getMaxListeners(ee)); // 11
+}
+{
+ const et = new EventTarget();
+ console.log(getMaxListeners(et)); // 10
+ setMaxListeners(11, et);
+ console.log(getMaxListeners(et)); // 11
+}
+```
+
+#### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`\> \| `EventTarget`
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+`EventEmitter.getMaxListeners`
+
+#### Since
+
+v19.9.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:387
+
+***
+
+### ~~listenerCount()~~
+
+> `static` **listenerCount**(`emitter`, `eventName`): `number`
+
+A class method that returns the number of listeners for the given `eventName` registered on the given `emitter`.
+
+```js
+import { EventEmitter, listenerCount } from 'node:events';
+
+const myEmitter = new EventEmitter();
+myEmitter.on('event', () => {});
+myEmitter.on('event', () => {});
+console.log(listenerCount(myEmitter, 'event'));
+// Prints: 2
+```
+
+:::caution[Deprecated]
+Since v3.2.0 - Use `listenerCount` instead.
+:::
+
+#### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`\>
+
+The emitter to query
+
+β’ **eventName**: `string` \| `symbol`
+
+The event name
+
+#### Returns
+
+`number`
+
+#### Inherited from
+
+`EventEmitter.listenerCount`
+
+#### Since
+
+v0.9.12
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:330
+
+***
+
+### on()
+
+#### on(emitter, eventName, options)
+
+> `static` **on**(`emitter`, `eventName`, `options`?): `AsyncIterableIterator`\<`any`[]\>
+
+```js
+import { on, EventEmitter } from 'node:events';
+import process from 'node:process';
+
+const ee = new EventEmitter();
+
+// Emit later on
+process.nextTick(() => {
+ ee.emit('foo', 'bar');
+ ee.emit('foo', 42);
+});
+
+for await (const event of on(ee, 'foo')) {
+ // The execution of this inner block is synchronous and it
+ // processes one event at a time (even with await). Do not use
+ // if concurrent execution is required.
+ console.log(event); // prints ['bar'] [42]
+}
+// Unreachable here
+```
+
+Returns an `AsyncIterator` that iterates `eventName` events. It will throw
+if the `EventEmitter` emits `'error'`. It removes all listeners when
+exiting the loop. The `value` returned by each iteration is an array
+composed of the emitted event arguments.
+
+An `AbortSignal` can be used to cancel waiting on events:
+
+```js
+import { on, EventEmitter } from 'node:events';
+import process from 'node:process';
+
+const ac = new AbortController();
+
+(async () => {
+ const ee = new EventEmitter();
+
+ // Emit later on
+ process.nextTick(() => {
+ ee.emit('foo', 'bar');
+ ee.emit('foo', 42);
+ });
+
+ for await (const event of on(ee, 'foo', { signal: ac.signal })) {
+ // The execution of this inner block is synchronous and it
+ // processes one event at a time (even with await). Do not use
+ // if concurrent execution is required.
+ console.log(event); // prints ['bar'] [42]
+ }
+ // Unreachable here
+})();
+
+process.nextTick(() => ac.abort());
+```
+
+Use the `close` option to specify an array of event names that will end the iteration:
+
+```js
+import { on, EventEmitter } from 'node:events';
+import process from 'node:process';
+
+const ee = new EventEmitter();
+
+// Emit later on
+process.nextTick(() => {
+ ee.emit('foo', 'bar');
+ ee.emit('foo', 42);
+ ee.emit('close');
+});
+
+for await (const event of on(ee, 'foo', { close: ['close'] })) {
+ console.log(event); // prints ['bar'] [42]
+}
+// the loop will exit after 'close' is emitted
+console.log('done'); // prints 'done'
+```
+
+##### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`\>
+
+β’ **eventName**: `string` \| `symbol`
+
+β’ **options?**: `StaticEventEmitterIteratorOptions`
+
+##### Returns
+
+`AsyncIterableIterator`\<`any`[]\>
+
+An `AsyncIterator` that iterates `eventName` events emitted by the `emitter`
+
+##### Inherited from
+
+`EventEmitter.on`
+
+##### Since
+
+v13.6.0, v12.16.0
+
+##### Defined in
+
+node\_modules/@types/node/events.d.ts:303
+
+#### on(emitter, eventName, options)
+
+> `static` **on**(`emitter`, `eventName`, `options`?): `AsyncIterableIterator`\<`any`[]\>
+
+##### Parameters
+
+β’ **emitter**: `EventTarget`
+
+β’ **eventName**: `string`
+
+β’ **options?**: `StaticEventEmitterIteratorOptions`
+
+##### Returns
+
+`AsyncIterableIterator`\<`any`[]\>
+
+##### Inherited from
+
+`EventEmitter.on`
+
+##### Defined in
+
+node\_modules/@types/node/events.d.ts:308
+
+***
+
+### once()
+
+#### once(emitter, eventName, options)
+
+> `static` **once**(`emitter`, `eventName`, `options`?): `Promise`\<`any`[]\>
+
+Creates a `Promise` that is fulfilled when the `EventEmitter` emits the given
+event or that is rejected if the `EventEmitter` emits `'error'` while waiting.
+The `Promise` will resolve with an array of all the arguments emitted to the
+given event.
+
+This method is intentionally generic and works with the web platform [EventTarget](https://dom.spec.whatwg.org/#interface-eventtarget) interface, which has no special`'error'` event
+semantics and does not listen to the `'error'` event.
+
+```js
+import { once, EventEmitter } from 'node:events';
+import process from 'node:process';
+
+const ee = new EventEmitter();
+
+process.nextTick(() => {
+ ee.emit('myevent', 42);
+});
+
+const [value] = await once(ee, 'myevent');
+console.log(value);
+
+const err = new Error('kaboom');
+process.nextTick(() => {
+ ee.emit('error', err);
+});
+
+try {
+ await once(ee, 'myevent');
+} catch (err) {
+ console.error('error happened', err);
+}
+```
+
+The special handling of the `'error'` event is only used when `events.once()` is used to wait for another event. If `events.once()` is used to wait for the
+'`error'` event itself, then it is treated as any other kind of event without
+special handling:
+
+```js
+import { EventEmitter, once } from 'node:events';
+
+const ee = new EventEmitter();
+
+once(ee, 'error')
+ .then(([err]) => console.log('ok', err.message))
+ .catch((err) => console.error('error', err.message));
+
+ee.emit('error', new Error('boom'));
+
+// Prints: ok boom
+```
+
+An `AbortSignal` can be used to cancel waiting for the event:
+
+```js
+import { EventEmitter, once } from 'node:events';
+
+const ee = new EventEmitter();
+const ac = new AbortController();
+
+async function foo(emitter, event, signal) {
+ try {
+ await once(emitter, event, { signal });
+ console.log('event emitted!');
+ } catch (error) {
+ if (error.name === 'AbortError') {
+ console.error('Waiting for the event was canceled!');
+ } else {
+ console.error('There was an error', error.message);
+ }
+ }
+}
+
+foo(ee, 'foo', ac.signal);
+ac.abort(); // Abort waiting for the event
+ee.emit('foo'); // Prints: Waiting for the event was canceled!
+```
+
+##### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`\>
+
+β’ **eventName**: `string` \| `symbol`
+
+β’ **options?**: `StaticEventEmitterOptions`
+
+##### Returns
+
+`Promise`\<`any`[]\>
+
+##### Inherited from
+
+`EventEmitter.once`
+
+##### Since
+
+v11.13.0, v10.16.0
+
+##### Defined in
+
+node\_modules/@types/node/events.d.ts:217
+
+#### once(emitter, eventName, options)
+
+> `static` **once**(`emitter`, `eventName`, `options`?): `Promise`\<`any`[]\>
+
+##### Parameters
+
+β’ **emitter**: `EventTarget`
+
+β’ **eventName**: `string`
+
+β’ **options?**: `StaticEventEmitterOptions`
+
+##### Returns
+
+`Promise`\<`any`[]\>
+
+##### Inherited from
+
+`EventEmitter.once`
+
+##### Defined in
+
+node\_modules/@types/node/events.d.ts:222
+
+***
+
+### setMaxListeners()
+
+> `static` **setMaxListeners**(`n`?, ...`eventTargets`?): `void`
+
+```js
+import { setMaxListeners, EventEmitter } from 'node:events';
+
+const target = new EventTarget();
+const emitter = new EventEmitter();
+
+setMaxListeners(5, target, emitter);
+```
+
+#### Parameters
+
+β’ **n?**: `number`
+
+A non-negative number. The maximum number of listeners per `EventTarget` event.
+
+β’ ...**eventTargets?**: (`EventEmitter`\<`DefaultEventMap`\> \| `EventTarget`)[]
+
+#### Returns
+
+`void`
+
+#### Inherited from
+
+`EventEmitter.setMaxListeners`
+
+#### Since
+
+v15.4.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:402
diff --git a/src/content/docs/api/classes/Player.md b/src/content/docs/api/classes/Player.md
new file mode 100644
index 0000000..01ce298
--- /dev/null
+++ b/src/content/docs/api/classes/Player.md
@@ -0,0 +1,1806 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "Player"
+---
+
+Wrapper object around Lavalink
+
+## Extends
+
+- `EventEmitter`
+
+## Constructors
+
+### new Player()
+
+> **new Player**(`guildId`, `node`): [`Player`](/api/classes/player/)
+
+#### Parameters
+
+β’ **guildId**: `string`
+
+β’ **node**: [`Node`](/api/classes/node/)
+
+An instance of Node (Lavalink API wrapper)
+
+#### Returns
+
+[`Player`](/api/classes/player/)
+
+#### Defined in
+
+[src/guild/Player.ts:211](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L211)
+
+## Properties
+
+### filters
+
+> **filters**: [`FilterOptions`](/api/interfaces/filteroptions/)
+
+Filters on current track
+
+#### Defined in
+
+[src/guild/Player.ts:206](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L206)
+
+***
+
+### guildId
+
+> `readonly` **guildId**: `string`
+
+GuildId of this player
+
+#### Defined in
+
+[src/guild/Player.ts:178](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L178)
+
+***
+
+### node
+
+> **node**: [`Node`](/api/classes/node/)
+
+Lavalink node this player is connected to
+
+#### Defined in
+
+[src/guild/Player.ts:182](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L182)
+
+***
+
+### paused
+
+> **paused**: `boolean`
+
+Pause status in current player
+
+#### Defined in
+
+[src/guild/Player.ts:194](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L194)
+
+***
+
+### ping
+
+> **ping**: `number`
+
+Ping represents the number of milliseconds between heartbeat and ack. Could be `-1` if not connected
+
+#### Defined in
+
+[src/guild/Player.ts:198](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L198)
+
+***
+
+### position
+
+> **position**: `number`
+
+Position in ms of current track
+
+#### Defined in
+
+[src/guild/Player.ts:202](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L202)
+
+***
+
+### track
+
+> **track**: `null` \| `string`
+
+Base64 encoded data of the current track
+
+#### Defined in
+
+[src/guild/Player.ts:186](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L186)
+
+***
+
+### volume
+
+> **volume**: `number`
+
+Global volume of the player
+
+#### Defined in
+
+[src/guild/Player.ts:190](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L190)
+
+***
+
+### captureRejectionSymbol
+
+> `readonly` `static` **captureRejectionSymbol**: *typeof* [`captureRejectionSymbol`](/api/classes/connection/#capturerejectionsymbol)
+
+Value: `Symbol.for('nodejs.rejection')`
+
+See how to write a custom `rejection handler`.
+
+#### Since
+
+v13.4.0, v12.16.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:452
+
+***
+
+### captureRejections
+
+> `static` **captureRejections**: `boolean`
+
+Value: [boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type)
+
+Change the default `captureRejections` option on all new `EventEmitter` objects.
+
+#### Since
+
+v13.4.0, v12.16.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:459
+
+***
+
+### defaultMaxListeners
+
+> `static` **defaultMaxListeners**: `number`
+
+By default, a maximum of `10` listeners can be registered for any single
+event. This limit can be changed for individual `EventEmitter` instances
+using the `emitter.setMaxListeners(n)` method. To change the default
+for _all_`EventEmitter` instances, the `events.defaultMaxListeners` property
+can be used. If this value is not a positive number, a `RangeError` is thrown.
+
+Take caution when setting the `events.defaultMaxListeners` because the
+change affects _all_ `EventEmitter` instances, including those created before
+the change is made. However, calling `emitter.setMaxListeners(n)` still has
+precedence over `events.defaultMaxListeners`.
+
+This is not a hard limit. The `EventEmitter` instance will allow
+more listeners to be added but will output a trace warning to stderr indicating
+that a "possible EventEmitter memory leak" has been detected. For any single
+`EventEmitter`, the `emitter.getMaxListeners()` and `emitter.setMaxListeners()` methods can be used to
+temporarily avoid this warning:
+
+```js
+import { EventEmitter } from 'node:events';
+const emitter = new EventEmitter();
+emitter.setMaxListeners(emitter.getMaxListeners() + 1);
+emitter.once('event', () => {
+ // do stuff
+ emitter.setMaxListeners(Math.max(emitter.getMaxListeners() - 1, 0));
+});
+```
+
+The `--trace-warnings` command-line flag can be used to display the
+stack trace for such warnings.
+
+The emitted warning can be inspected with `process.on('warning')` and will
+have the additional `emitter`, `type`, and `count` properties, referring to
+the event emitter instance, the event's name and the number of attached
+listeners, respectively.
+Its `name` property is set to `'MaxListenersExceededWarning'`.
+
+#### Since
+
+v0.11.2
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:498
+
+***
+
+### errorMonitor
+
+> `readonly` `static` **errorMonitor**: *typeof* [`errorMonitor`](/api/classes/connection/#errormonitor)
+
+This symbol shall be used to install a listener for only monitoring `'error'` events. Listeners installed using this symbol are called before the regular `'error'` listeners are called.
+
+Installing a listener using this symbol does not change the behavior once an `'error'` event is emitted. Therefore, the process will still crash if no
+regular `'error'` listener is installed.
+
+#### Since
+
+v13.6.0, v12.17.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:445
+
+## Accessors
+
+### data
+
+> `get` **data**(): [`UpdatePlayerInfo`](/api/interfaces/updateplayerinfo/)
+
+#### Returns
+
+[`UpdatePlayerInfo`](/api/interfaces/updateplayerinfo/)
+
+#### Defined in
+
+[src/guild/Player.ts:223](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L223)
+
+## Methods
+
+### \[captureRejectionSymbol\]()?
+
+> `optional` **\[captureRejectionSymbol\]**\<`K`\>(`error`, `event`, ...`args`): `void`
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **error**: `Error`
+
+β’ **event**: `string` \| `symbol`
+
+β’ ...**args**: `AnyRest`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:136
+
+***
+
+### addListener()
+
+> **addListener**\<`K`\>(`eventName`, `listener`): `this`
+
+Alias for `emitter.on(eventName, listener)`.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` \| `symbol`
+
+β’ **listener**
+
+#### Returns
+
+`this`
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:597
+
+***
+
+### clearFilters()
+
+> **clearFilters**(): `Promise`\<`void`\>
+
+Clear all filters applied to the currently playing track
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[src/guild/Player.ts:414](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L414)
+
+***
+
+### destroy()
+
+> **destroy**(): `Promise`\<`void`\>
+
+Destroys the player in remote lavalink side
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[src/guild/Player.ts:278](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L278)
+
+***
+
+### emit()
+
+> **emit**(`event`, ...`args`): `boolean`
+
+#### Parameters
+
+β’ **event**: `string` \| `symbol`
+
+β’ ...**args**: `unknown`[]
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/guild/Player.ts:167](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L167)
+
+***
+
+### eventNames()
+
+> **eventNames**(): (`string` \| `symbol`)[]
+
+Returns an array listing the events for which the emitter has registered
+listeners. The values in the array are strings or `Symbol`s.
+
+```js
+import { EventEmitter } from 'node:events';
+
+const myEE = new EventEmitter();
+myEE.on('foo', () => {});
+myEE.on('bar', () => {});
+
+const sym = Symbol('symbol');
+myEE.on(sym, () => {});
+
+console.log(myEE.eventNames());
+// Prints: [ 'foo', 'bar', Symbol(symbol) ]
+```
+
+#### Returns
+
+(`string` \| `symbol`)[]
+
+#### Since
+
+v6.0.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:922
+
+***
+
+### getMaxListeners()
+
+> **getMaxListeners**(): `number`
+
+Returns the current max listener value for the `EventEmitter` which is either
+set by `emitter.setMaxListeners(n)` or defaults to [defaultMaxListeners](../../../../../../api/classes/player/#defaultmaxlisteners).
+
+#### Returns
+
+`number`
+
+#### Since
+
+v1.0.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:774
+
+***
+
+### listenerCount()
+
+> **listenerCount**\<`K`\>(`eventName`, `listener`?): `number`
+
+Returns the number of listeners listening for the event named `eventName`.
+If `listener` is provided, it will return how many times the listener is found
+in the list of the listeners of the event.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` \| `symbol`
+
+The name of the event being listened for
+
+β’ **listener?**: `Function`
+
+The event handler function
+
+#### Returns
+
+`number`
+
+#### Since
+
+v3.2.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:868
+
+***
+
+### listeners()
+
+> **listeners**\<`K`\>(`eventName`): `Function`[]
+
+Returns a copy of the array of listeners for the event named `eventName`.
+
+```js
+server.on('connection', (stream) => {
+ console.log('someone connected!');
+});
+console.log(util.inspect(server.listeners('connection')));
+// Prints: [ [Function] ]
+```
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` \| `symbol`
+
+#### Returns
+
+`Function`[]
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:787
+
+***
+
+### move()
+
+> **move**(`name`?): `Promise`\<`boolean`\>
+
+Move player to another node
+
+#### Parameters
+
+β’ **name?**: `string`
+
+Name of node to move to, or the default ideal node
+
+#### Returns
+
+`Promise`\<`boolean`\>
+
+true if the player was moved, false if not
+
+#### Defined in
+
+[src/guild/Player.ts:249](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L249)
+
+***
+
+### off()
+
+> **off**\<`K`\>(`event`, `listener`): `this`
+
+#### Type Parameters
+
+β’ **K** *extends* keyof [`PlayerEvents`](/api/interfaces/playerevents/)
+
+#### Parameters
+
+β’ **event**: `K`
+
+β’ **listener**
+
+#### Returns
+
+`this`
+
+#### Defined in
+
+[src/guild/Player.ts:166](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L166)
+
+***
+
+### on()
+
+> **on**\<`K`\>(`event`, `listener`): `this`
+
+#### Type Parameters
+
+β’ **K** *extends* keyof [`PlayerEvents`](/api/interfaces/playerevents/)
+
+#### Parameters
+
+β’ **event**: `K`
+
+β’ **listener**
+
+#### Returns
+
+`this`
+
+#### Defined in
+
+[src/guild/Player.ts:164](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L164)
+
+***
+
+### onPlayerUpdate()
+
+> **onPlayerUpdate**(`json`): `void`
+
+Handle player update data
+
+#### Parameters
+
+β’ **json**
+
+β’ **json.state**
+
+β’ **json.state.ping**: `number`
+
+β’ **json.state.position**: `number`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/guild/Player.ts:513](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L513)
+
+***
+
+### once()
+
+> **once**\<`K`\>(`event`, `listener`): `this`
+
+#### Type Parameters
+
+β’ **K** *extends* keyof [`PlayerEvents`](/api/interfaces/playerevents/)
+
+#### Parameters
+
+β’ **event**: `K`
+
+β’ **listener**
+
+#### Returns
+
+`this`
+
+#### Defined in
+
+[src/guild/Player.ts:165](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L165)
+
+***
+
+### playTrack()
+
+> **playTrack**(`playerOptions`, `noReplace`): `Promise`\<`void`\>
+
+Play a new track
+
+#### Parameters
+
+β’ **playerOptions**: [`PlayOptions`](/api/type-aliases/playoptions/)
+
+β’ **noReplace**: `boolean` = `false`
+
+Set it to true if you don't want to replace the currently playing track
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[src/guild/Player.ts:287](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L287)
+
+***
+
+### prependListener()
+
+> **prependListener**\<`K`\>(`eventName`, `listener`): `this`
+
+Adds the `listener` function to the _beginning_ of the listeners array for the
+event named `eventName`. No checks are made to see if the `listener` has
+already been added. Multiple calls passing the same combination of `eventName`
+and `listener` will result in the `listener` being added, and called, multiple times.
+
+```js
+server.prependListener('connection', (stream) => {
+ console.log('someone connected!');
+});
+```
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` \| `symbol`
+
+The name of the event.
+
+β’ **listener**
+
+The callback function
+
+#### Returns
+
+`this`
+
+#### Since
+
+v6.0.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:886
+
+***
+
+### prependOnceListener()
+
+> **prependOnceListener**\<`K`\>(`eventName`, `listener`): `this`
+
+Adds a **one-time**`listener` function for the event named `eventName` to the _beginning_ of the listeners array. The next time `eventName` is triggered, this
+listener is removed, and then invoked.
+
+```js
+server.prependOnceListener('connection', (stream) => {
+ console.log('Ah, we have our first user!');
+});
+```
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` \| `symbol`
+
+The name of the event.
+
+β’ **listener**
+
+The callback function
+
+#### Returns
+
+`this`
+
+#### Since
+
+v6.0.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:902
+
+***
+
+### rawListeners()
+
+> **rawListeners**\<`K`\>(`eventName`): `Function`[]
+
+Returns a copy of the array of listeners for the event named `eventName`,
+including any wrappers (such as those created by `.once()`).
+
+```js
+import { EventEmitter } from 'node:events';
+const emitter = new EventEmitter();
+emitter.once('log', () => console.log('log once'));
+
+// Returns a new Array with a function `onceWrapper` which has a property
+// `listener` which contains the original listener bound above
+const listeners = emitter.rawListeners('log');
+const logFnWrapper = listeners[0];
+
+// Logs "log once" to the console and does not unbind the `once` event
+logFnWrapper.listener();
+
+// Logs "log once" to the console and removes the listener
+logFnWrapper();
+
+emitter.on('log', () => console.log('log persistently'));
+// Will return a new Array with a single function bound by `.on()` above
+const newListeners = emitter.rawListeners('log');
+
+// Logs "log persistently" twice
+newListeners[0]();
+emitter.emit('log');
+```
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` \| `symbol`
+
+#### Returns
+
+`Function`[]
+
+#### Since
+
+v9.4.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:818
+
+***
+
+### removeAllListeners()
+
+> **removeAllListeners**(`eventName`?): `this`
+
+Removes all listeners, or those of the specified `eventName`.
+
+It is bad practice to remove listeners added elsewhere in the code,
+particularly when the `EventEmitter` instance was created by some other
+component or module (e.g. sockets or file streams).
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Parameters
+
+β’ **eventName?**: `string` \| `symbol`
+
+#### Returns
+
+`this`
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:758
+
+***
+
+### removeListener()
+
+> **removeListener**\<`K`\>(`eventName`, `listener`): `this`
+
+Removes the specified `listener` from the listener array for the event named `eventName`.
+
+```js
+const callback = (stream) => {
+ console.log('someone connected!');
+};
+server.on('connection', callback);
+// ...
+server.removeListener('connection', callback);
+```
+
+`removeListener()` will remove, at most, one instance of a listener from the
+listener array. If any single listener has been added multiple times to the
+listener array for the specified `eventName`, then `removeListener()` must be
+called multiple times to remove each instance.
+
+Once an event is emitted, all listeners attached to it at the
+time of emitting are called in order. This implies that any `removeListener()` or `removeAllListeners()` calls _after_ emitting and _before_ the last listener finishes execution
+will not remove them from`emit()` in progress. Subsequent events behave as expected.
+
+```js
+import { EventEmitter } from 'node:events';
+class MyEmitter extends EventEmitter {}
+const myEmitter = new MyEmitter();
+
+const callbackA = () => {
+ console.log('A');
+ myEmitter.removeListener('event', callbackB);
+};
+
+const callbackB = () => {
+ console.log('B');
+};
+
+myEmitter.on('event', callbackA);
+
+myEmitter.on('event', callbackB);
+
+// callbackA removes listener callbackB but it will still be called.
+// Internal listener array at time of emit [callbackA, callbackB]
+myEmitter.emit('event');
+// Prints:
+// A
+// B
+
+// callbackB is now removed.
+// Internal listener array [callbackA]
+myEmitter.emit('event');
+// Prints:
+// A
+```
+
+Because listeners are managed using an internal array, calling this will
+change the position indices of any listener registered _after_ the listener
+being removed. This will not impact the order in which listeners are called,
+but it means that any copies of the listener array as returned by
+the `emitter.listeners()` method will need to be recreated.
+
+When a single function has been added as a handler multiple times for a single
+event (as in the example below), `removeListener()` will remove the most
+recently added instance. In the example the `once('ping')` listener is removed:
+
+```js
+import { EventEmitter } from 'node:events';
+const ee = new EventEmitter();
+
+function pong() {
+ console.log('pong');
+}
+
+ee.on('ping', pong);
+ee.once('ping', pong);
+ee.removeListener('ping', pong);
+
+ee.emit('ping');
+ee.emit('ping');
+```
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` \| `symbol`
+
+β’ **listener**
+
+#### Returns
+
+`this`
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:742
+
+***
+
+### resume()
+
+> **resume**(`options`, `noReplace`): `Promise`\<`void`\>
+
+Resumes the current track
+
+#### Parameters
+
+β’ **options**: [`ResumeOptions`](/api/type-aliases/resumeoptions/) = `{}`
+
+An object that conforms to ResumeOptions that specify behavior on resuming
+
+β’ **noReplace**: `boolean` = `false`
+
+Set it to true if you don't want to replace the currently playing track
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[src/guild/Player.ts:434](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L434)
+
+***
+
+### seekTo()
+
+> **seekTo**(`position`): `Promise`\<`void`\>
+
+Seek to a specific time in the currently playing track
+
+#### Parameters
+
+β’ **position**: `number`
+
+Position to seek to in milliseconds
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[src/guild/Player.ts:310](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L310)
+
+***
+
+### setChannelMix()
+
+> **setChannelMix**(`channelMix`?): `Promise`\<`void`\>
+
+Change the channel mix settings applied to the currently playing track
+
+#### Parameters
+
+β’ **channelMix?**: [`ChannelMixSettings`](/api/interfaces/channelmixsettings/)
+
+An object that conforms to ChannelMixSettings that defines how much the left and right channels affect each other (setting all factors to 0.5 causes both channels to get the same audio)
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[src/guild/Player.ts:391](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L391)
+
+***
+
+### setDistortion()
+
+> **setDistortion**(`distortion`?): `Promise`\<`void`\>
+
+Change the distortion settings applied to the currently playing track
+
+#### Parameters
+
+β’ **distortion?**: [`DistortionSettings`](/api/interfaces/distortionsettings/)
+
+An object that conforms to DistortionSettings that defines distortions in the audio
+
+#### Returns
+
+`Promise`\<`void`\>
+
+The current player instance
+
+#### Defined in
+
+[src/guild/Player.ts:383](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L383)
+
+***
+
+### setEqualizer()
+
+> **setEqualizer**(`equalizer`): `Promise`\<`void`\>
+
+Change the equalizer settings applied to the currently playing track
+
+#### Parameters
+
+β’ **equalizer**: [`Band`](/api/interfaces/band/)[]
+
+An array of objects that conforms to the Bands type that define volumes at different frequencies
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[src/guild/Player.ts:334](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L334)
+
+***
+
+### setFilterVolume()
+
+> **setFilterVolume**(`volume`): `Promise`\<`void`\>
+
+Sets the filter volume of the player
+
+#### Parameters
+
+β’ **volume**: `number`
+
+Target volume 0.0-5.0
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[src/guild/Player.ts:326](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L326)
+
+***
+
+### setFilters()
+
+> **setFilters**(`filters`): `Promise`\<`void`\>
+
+Change the all filter settings applied to the currently playing track
+
+#### Parameters
+
+β’ **filters**: [`FilterOptions`](/api/interfaces/filteroptions/)
+
+An object that conforms to FilterOptions that defines all filters to apply/modify
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[src/guild/Player.ts:407](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L407)
+
+***
+
+### setGlobalVolume()
+
+> **setGlobalVolume**(`volume`): `Promise`\<`void`\>
+
+Sets the global volume of the player
+
+#### Parameters
+
+β’ **volume**: `number`
+
+Target volume 0-1000
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[src/guild/Player.ts:318](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L318)
+
+***
+
+### setKaraoke()
+
+> **setKaraoke**(`karaoke`?): `Promise`\<`void`\>
+
+Change the karaoke settings applied to the currently playing track
+
+#### Parameters
+
+β’ **karaoke?**: [`KaraokeSettings`](/api/interfaces/karaokesettings/)
+
+An object that conforms to the KaraokeSettings type that defines a range of frequencies to mute
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[src/guild/Player.ts:342](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L342)
+
+***
+
+### setLowPass()
+
+> **setLowPass**(`lowPass`?): `Promise`\<`void`\>
+
+Change the low pass settings applied to the currently playing track
+
+#### Parameters
+
+β’ **lowPass?**: [`LowPassSettings`](/api/interfaces/lowpasssettings/)
+
+An object that conforms to LowPassSettings that defines the amount of suppression on higher frequencies
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[src/guild/Player.ts:399](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L399)
+
+***
+
+### setMaxListeners()
+
+> **setMaxListeners**(`n`): `this`
+
+By default `EventEmitter`s will print a warning if more than `10` listeners are
+added for a particular event. This is a useful default that helps finding
+memory leaks. The `emitter.setMaxListeners()` method allows the limit to be
+modified for this specific `EventEmitter` instance. The value can be set to `Infinity` (or `0`) to indicate an unlimited number of listeners.
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Parameters
+
+β’ **n**: `number`
+
+#### Returns
+
+`this`
+
+#### Since
+
+v0.3.5
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:768
+
+***
+
+### setPaused()
+
+> **setPaused**(`paused`): `Promise`\<`void`\>
+
+Pause or unpause the currently playing track
+
+#### Parameters
+
+β’ **paused**: `boolean` = `true`
+
+Boolean value to specify whether to pause or unpause the current bot user
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[src/guild/Player.ts:302](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L302)
+
+***
+
+### setRotation()
+
+> **setRotation**(`rotation`?): `Promise`\<`void`\>
+
+Change the rotation settings applied to the currently playing track
+
+#### Parameters
+
+β’ **rotation?**: [`RotationSettings`](/api/interfaces/rotationsettings/)
+
+An object that conforms to the RotationSettings type that defines the frequency of audio rotating round the listener
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[src/guild/Player.ts:374](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L374)
+
+***
+
+### setTimescale()
+
+> **setTimescale**(`timescale`?): `Promise`\<`void`\>
+
+Change the timescale settings applied to the currently playing track
+
+#### Parameters
+
+β’ **timescale?**: [`TimescaleSettings`](/api/interfaces/timescalesettings/)
+
+An object that conforms to the TimescaleSettings type that defines the time signature to play the audio at
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[src/guild/Player.ts:350](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L350)
+
+***
+
+### setTremolo()
+
+> **setTremolo**(`tremolo`?): `Promise`\<`void`\>
+
+Change the tremolo settings applied to the currently playing track
+
+#### Parameters
+
+β’ **tremolo?**: [`FreqSettings`](/api/interfaces/freqsettings/)
+
+An object that conforms to the FreqSettings type that defines an oscillation in volume
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[src/guild/Player.ts:358](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L358)
+
+***
+
+### setVibrato()
+
+> **setVibrato**(`vibrato`?): `Promise`\<`void`\>
+
+Change the vibrato settings applied to the currently playing track
+
+#### Parameters
+
+β’ **vibrato?**: [`FreqSettings`](/api/interfaces/freqsettings/)
+
+An object that conforms to the FreqSettings type that defines an oscillation in pitch
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[src/guild/Player.ts:366](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L366)
+
+***
+
+### stopTrack()
+
+> **stopTrack**(): `Promise`\<`void`\>
+
+Stop the currently playing track
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[src/guild/Player.ts:294](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L294)
+
+***
+
+### update()
+
+> **update**(`playerOptions`, `noReplace`): `Promise`\<`void`\>
+
+If you want to update the whole player yourself, sends raw update player info to lavalink
+
+#### Parameters
+
+β’ **playerOptions**: [`UpdatePlayerOptions`](/api/interfaces/updateplayeroptions/)
+
+Options to update the player data
+
+β’ **noReplace**: `boolean` = `false`
+
+Set it to true if you don't want to replace the currently playing track
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[src/guild/Player.ts:456](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L456)
+
+***
+
+### addAbortListener()
+
+> `static` **addAbortListener**(`signal`, `resource`): `Disposable`
+
+Listens once to the `abort` event on the provided `signal`.
+
+Listening to the `abort` event on abort signals is unsafe and may
+lead to resource leaks since another third party with the signal can
+call `e.stopImmediatePropagation()`. Unfortunately Node.js cannot change
+this since it would violate the web standard. Additionally, the original
+API makes it easy to forget to remove listeners.
+
+This API allows safely using `AbortSignal`s in Node.js APIs by solving these
+two issues by listening to the event such that `stopImmediatePropagation` does
+not prevent the listener from running.
+
+Returns a disposable so that it may be unsubscribed from more easily.
+
+```js
+import { addAbortListener } from 'node:events';
+
+function example(signal) {
+ let disposable;
+ try {
+ signal.addEventListener('abort', (e) => e.stopImmediatePropagation());
+ disposable = addAbortListener(signal, (e) => {
+ // Do something when signal is aborted.
+ });
+ } finally {
+ disposable?.[Symbol.dispose]();
+ }
+}
+```
+
+:::caution[Experimental]
+This API should not be used in production and may be trimmed from a public release.
+:::
+
+#### Parameters
+
+β’ **signal**: `AbortSignal`
+
+β’ **resource**
+
+#### Returns
+
+`Disposable`
+
+Disposable that removes the `abort` listener.
+
+#### Since
+
+v20.5.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:437
+
+***
+
+### getEventListeners()
+
+> `static` **getEventListeners**(`emitter`, `name`): `Function`[]
+
+Returns a copy of the array of listeners for the event named `eventName`.
+
+For `EventEmitter`s this behaves exactly the same as calling `.listeners` on
+the emitter.
+
+For `EventTarget`s this is the only way to get the event listeners for the
+event target. This is useful for debugging and diagnostic purposes.
+
+```js
+import { getEventListeners, EventEmitter } from 'node:events';
+
+{
+ const ee = new EventEmitter();
+ const listener = () => console.log('Events are fun');
+ ee.on('foo', listener);
+ console.log(getEventListeners(ee, 'foo')); // [ [Function: listener] ]
+}
+{
+ const et = new EventTarget();
+ const listener = () => console.log('Events are fun');
+ et.addEventListener('foo', listener);
+ console.log(getEventListeners(et, 'foo')); // [ [Function: listener] ]
+}
+```
+
+#### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`\> \| `EventTarget`
+
+β’ **name**: `string` \| `symbol`
+
+#### Returns
+
+`Function`[]
+
+#### Since
+
+v15.2.0, v14.17.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:358
+
+***
+
+### getMaxListeners()
+
+> `static` **getMaxListeners**(`emitter`): `number`
+
+Returns the currently set max amount of listeners.
+
+For `EventEmitter`s this behaves exactly the same as calling `.getMaxListeners` on
+the emitter.
+
+For `EventTarget`s this is the only way to get the max event listeners for the
+event target. If the number of event handlers on a single EventTarget exceeds
+the max set, the EventTarget will print a warning.
+
+```js
+import { getMaxListeners, setMaxListeners, EventEmitter } from 'node:events';
+
+{
+ const ee = new EventEmitter();
+ console.log(getMaxListeners(ee)); // 10
+ setMaxListeners(11, ee);
+ console.log(getMaxListeners(ee)); // 11
+}
+{
+ const et = new EventTarget();
+ console.log(getMaxListeners(et)); // 10
+ setMaxListeners(11, et);
+ console.log(getMaxListeners(et)); // 11
+}
+```
+
+#### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`\> \| `EventTarget`
+
+#### Returns
+
+`number`
+
+#### Since
+
+v19.9.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:387
+
+***
+
+### ~~listenerCount()~~
+
+> `static` **listenerCount**(`emitter`, `eventName`): `number`
+
+A class method that returns the number of listeners for the given `eventName` registered on the given `emitter`.
+
+```js
+import { EventEmitter, listenerCount } from 'node:events';
+
+const myEmitter = new EventEmitter();
+myEmitter.on('event', () => {});
+myEmitter.on('event', () => {});
+console.log(listenerCount(myEmitter, 'event'));
+// Prints: 2
+```
+
+:::caution[Deprecated]
+Since v3.2.0 - Use `listenerCount` instead.
+:::
+
+#### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`\>
+
+The emitter to query
+
+β’ **eventName**: `string` \| `symbol`
+
+The event name
+
+#### Returns
+
+`number`
+
+#### Since
+
+v0.9.12
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:330
+
+***
+
+### on()
+
+#### on(emitter, eventName, options)
+
+> `static` **on**(`emitter`, `eventName`, `options`?): `AsyncIterableIterator`\<`any`[]\>
+
+```js
+import { on, EventEmitter } from 'node:events';
+import process from 'node:process';
+
+const ee = new EventEmitter();
+
+// Emit later on
+process.nextTick(() => {
+ ee.emit('foo', 'bar');
+ ee.emit('foo', 42);
+});
+
+for await (const event of on(ee, 'foo')) {
+ // The execution of this inner block is synchronous and it
+ // processes one event at a time (even with await). Do not use
+ // if concurrent execution is required.
+ console.log(event); // prints ['bar'] [42]
+}
+// Unreachable here
+```
+
+Returns an `AsyncIterator` that iterates `eventName` events. It will throw
+if the `EventEmitter` emits `'error'`. It removes all listeners when
+exiting the loop. The `value` returned by each iteration is an array
+composed of the emitted event arguments.
+
+An `AbortSignal` can be used to cancel waiting on events:
+
+```js
+import { on, EventEmitter } from 'node:events';
+import process from 'node:process';
+
+const ac = new AbortController();
+
+(async () => {
+ const ee = new EventEmitter();
+
+ // Emit later on
+ process.nextTick(() => {
+ ee.emit('foo', 'bar');
+ ee.emit('foo', 42);
+ });
+
+ for await (const event of on(ee, 'foo', { signal: ac.signal })) {
+ // The execution of this inner block is synchronous and it
+ // processes one event at a time (even with await). Do not use
+ // if concurrent execution is required.
+ console.log(event); // prints ['bar'] [42]
+ }
+ // Unreachable here
+})();
+
+process.nextTick(() => ac.abort());
+```
+
+Use the `close` option to specify an array of event names that will end the iteration:
+
+```js
+import { on, EventEmitter } from 'node:events';
+import process from 'node:process';
+
+const ee = new EventEmitter();
+
+// Emit later on
+process.nextTick(() => {
+ ee.emit('foo', 'bar');
+ ee.emit('foo', 42);
+ ee.emit('close');
+});
+
+for await (const event of on(ee, 'foo', { close: ['close'] })) {
+ console.log(event); // prints ['bar'] [42]
+}
+// the loop will exit after 'close' is emitted
+console.log('done'); // prints 'done'
+```
+
+##### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`\>
+
+β’ **eventName**: `string` \| `symbol`
+
+β’ **options?**: `StaticEventEmitterIteratorOptions`
+
+##### Returns
+
+`AsyncIterableIterator`\<`any`[]\>
+
+An `AsyncIterator` that iterates `eventName` events emitted by the `emitter`
+
+##### Since
+
+v13.6.0, v12.16.0
+
+##### Defined in
+
+node\_modules/@types/node/events.d.ts:303
+
+#### on(emitter, eventName, options)
+
+> `static` **on**(`emitter`, `eventName`, `options`?): `AsyncIterableIterator`\<`any`[]\>
+
+##### Parameters
+
+β’ **emitter**: `EventTarget`
+
+β’ **eventName**: `string`
+
+β’ **options?**: `StaticEventEmitterIteratorOptions`
+
+##### Returns
+
+`AsyncIterableIterator`\<`any`[]\>
+
+##### Defined in
+
+node\_modules/@types/node/events.d.ts:308
+
+***
+
+### once()
+
+#### once(emitter, eventName, options)
+
+> `static` **once**(`emitter`, `eventName`, `options`?): `Promise`\<`any`[]\>
+
+Creates a `Promise` that is fulfilled when the `EventEmitter` emits the given
+event or that is rejected if the `EventEmitter` emits `'error'` while waiting.
+The `Promise` will resolve with an array of all the arguments emitted to the
+given event.
+
+This method is intentionally generic and works with the web platform [EventTarget](https://dom.spec.whatwg.org/#interface-eventtarget) interface, which has no special`'error'` event
+semantics and does not listen to the `'error'` event.
+
+```js
+import { once, EventEmitter } from 'node:events';
+import process from 'node:process';
+
+const ee = new EventEmitter();
+
+process.nextTick(() => {
+ ee.emit('myevent', 42);
+});
+
+const [value] = await once(ee, 'myevent');
+console.log(value);
+
+const err = new Error('kaboom');
+process.nextTick(() => {
+ ee.emit('error', err);
+});
+
+try {
+ await once(ee, 'myevent');
+} catch (err) {
+ console.error('error happened', err);
+}
+```
+
+The special handling of the `'error'` event is only used when `events.once()` is used to wait for another event. If `events.once()` is used to wait for the
+'`error'` event itself, then it is treated as any other kind of event without
+special handling:
+
+```js
+import { EventEmitter, once } from 'node:events';
+
+const ee = new EventEmitter();
+
+once(ee, 'error')
+ .then(([err]) => console.log('ok', err.message))
+ .catch((err) => console.error('error', err.message));
+
+ee.emit('error', new Error('boom'));
+
+// Prints: ok boom
+```
+
+An `AbortSignal` can be used to cancel waiting for the event:
+
+```js
+import { EventEmitter, once } from 'node:events';
+
+const ee = new EventEmitter();
+const ac = new AbortController();
+
+async function foo(emitter, event, signal) {
+ try {
+ await once(emitter, event, { signal });
+ console.log('event emitted!');
+ } catch (error) {
+ if (error.name === 'AbortError') {
+ console.error('Waiting for the event was canceled!');
+ } else {
+ console.error('There was an error', error.message);
+ }
+ }
+}
+
+foo(ee, 'foo', ac.signal);
+ac.abort(); // Abort waiting for the event
+ee.emit('foo'); // Prints: Waiting for the event was canceled!
+```
+
+##### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`\>
+
+β’ **eventName**: `string` \| `symbol`
+
+β’ **options?**: `StaticEventEmitterOptions`
+
+##### Returns
+
+`Promise`\<`any`[]\>
+
+##### Since
+
+v11.13.0, v10.16.0
+
+##### Defined in
+
+node\_modules/@types/node/events.d.ts:217
+
+#### once(emitter, eventName, options)
+
+> `static` **once**(`emitter`, `eventName`, `options`?): `Promise`\<`any`[]\>
+
+##### Parameters
+
+β’ **emitter**: `EventTarget`
+
+β’ **eventName**: `string`
+
+β’ **options?**: `StaticEventEmitterOptions`
+
+##### Returns
+
+`Promise`\<`any`[]\>
+
+##### Defined in
+
+node\_modules/@types/node/events.d.ts:222
+
+***
+
+### setMaxListeners()
+
+> `static` **setMaxListeners**(`n`?, ...`eventTargets`?): `void`
+
+```js
+import { setMaxListeners, EventEmitter } from 'node:events';
+
+const target = new EventTarget();
+const emitter = new EventEmitter();
+
+setMaxListeners(5, target, emitter);
+```
+
+#### Parameters
+
+β’ **n?**: `number`
+
+A non-negative number. The maximum number of listeners per `EventTarget` event.
+
+β’ ...**eventTargets?**: (`EventEmitter`\<`DefaultEventMap`\> \| `EventTarget`)[]
+
+#### Returns
+
+`void`
+
+#### Since
+
+v15.4.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:402
diff --git a/src/content/docs/api/classes/Rest.md b/src/content/docs/api/classes/Rest.md
new file mode 100644
index 0000000..5e53e3e
--- /dev/null
+++ b/src/content/docs/api/classes/Rest.md
@@ -0,0 +1,268 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "Rest"
+---
+
+Wrapper around Lavalink REST API
+
+## Constructors
+
+### new Rest()
+
+> **new Rest**(`node`, `options`): [`Rest`](/api/classes/rest/)
+
+#### Parameters
+
+β’ **node**: [`Node`](/api/classes/node/)
+
+An instance of Node
+
+β’ **options**: [`NodeOption`](/api/interfaces/nodeoption/)
+
+The options to initialize this rest class
+
+#### Returns
+
+[`Rest`](/api/classes/rest/)
+
+#### Defined in
+
+[src/node/Rest.ts:192](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L192)
+
+## Methods
+
+### decode()
+
+> **decode**(`track`): `Promise`\<`undefined` \| [`Track`](/api/interfaces/track/)\>
+
+Decode a track
+
+#### Parameters
+
+β’ **track**: `string`
+
+Encoded track
+
+#### Returns
+
+`Promise`\<`undefined` \| [`Track`](/api/interfaces/track/)\>
+
+Promise that resolves to a track
+
+#### Defined in
+
+[src/node/Rest.ts:221](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L221)
+
+***
+
+### destroyPlayer()
+
+> **destroyPlayer**(`guildId`): `Promise`\<`void`\>
+
+Deletes a Lavalink player
+
+#### Parameters
+
+β’ **guildId**: `string`
+
+guildId where this player is
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[src/node/Rest.ts:275](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L275)
+
+***
+
+### getLavalinkInfo()
+
+> **getLavalinkInfo**(): `Promise`\<`undefined` \| [`NodeInfo`](/api/type-aliases/nodeinfo/)\>
+
+Get Lavalink info
+
+#### Returns
+
+`Promise`\<`undefined` \| [`NodeInfo`](/api/type-aliases/nodeinfo/)\>
+
+#### Defined in
+
+[src/node/Rest.ts:344](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L344)
+
+***
+
+### getPlayer()
+
+> **getPlayer**(`guildId`): `Promise`\<`undefined` \| [`LavalinkPlayer`](/api/interfaces/lavalinkplayer/)\>
+
+Gets all the player with the specified sessionId
+
+#### Parameters
+
+β’ **guildId**: `string`
+
+#### Returns
+
+`Promise`\<`undefined` \| [`LavalinkPlayer`](/api/interfaces/lavalinkplayer/)\>
+
+Promise that resolves to an array of Lavalink players
+
+#### Defined in
+
+[src/node/Rest.ts:245](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L245)
+
+***
+
+### getPlayers()
+
+> **getPlayers**(): `Promise`\<[`LavalinkPlayer`](/api/interfaces/lavalinkplayer/)[]\>
+
+Gets all the player with the specified sessionId
+
+#### Returns
+
+`Promise`\<[`LavalinkPlayer`](/api/interfaces/lavalinkplayer/)[]\>
+
+Promise that resolves to an array of Lavalink players
+
+#### Defined in
+
+[src/node/Rest.ts:233](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L233)
+
+***
+
+### getRoutePlannerStatus()
+
+> **getRoutePlannerStatus**(): `Promise`\<`undefined` \| [`RoutePlanner`](/api/interfaces/routeplanner/)\>
+
+Get routeplanner status from Lavalink
+
+#### Returns
+
+`Promise`\<`undefined` \| [`RoutePlanner`](/api/interfaces/routeplanner/)\>
+
+Promise that resolves to a routeplanner response
+
+#### Defined in
+
+[src/node/Rest.ts:317](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L317)
+
+***
+
+### resolve()
+
+> **resolve**(`identifier`): `Promise`\<`undefined` \| [`LavalinkResponse`](/api/type-aliases/lavalinkresponse/)\>
+
+Resolve a track
+
+#### Parameters
+
+β’ **identifier**: `string`
+
+Track ID
+
+#### Returns
+
+`Promise`\<`undefined` \| [`LavalinkResponse`](/api/type-aliases/lavalinkresponse/)\>
+
+A promise that resolves to a Lavalink response
+
+#### Defined in
+
+[src/node/Rest.ts:208](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L208)
+
+***
+
+### stats()
+
+> **stats**(): `Promise`\<`undefined` \| [`NodeStats`](/api/interfaces/nodestats/)\>
+
+Gets the status of this node
+
+#### Returns
+
+`Promise`\<`undefined` \| [`NodeStats`](/api/interfaces/nodestats/)\>
+
+Promise that resolves to a node stats response
+
+#### Defined in
+
+[src/node/Rest.ts:305](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L305)
+
+***
+
+### unmarkFailedAddress()
+
+> **unmarkFailedAddress**(`address`): `Promise`\<`void`\>
+
+Release blacklisted IP address into pool of IPs
+
+#### Parameters
+
+β’ **address**: `string`
+
+IP address
+
+#### Returns
+
+`Promise`\<`void`\>
+
+#### Defined in
+
+[src/node/Rest.ts:329](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L329)
+
+***
+
+### updatePlayer()
+
+> **updatePlayer**(`data`): `Promise`\<`undefined` \| [`LavalinkPlayer`](/api/interfaces/lavalinkplayer/)\>
+
+Updates a Lavalink player
+
+#### Parameters
+
+β’ **data**: [`UpdatePlayerInfo`](/api/interfaces/updateplayerinfo/)
+
+SessionId from Discord
+
+#### Returns
+
+`Promise`\<`undefined` \| [`LavalinkPlayer`](/api/interfaces/lavalinkplayer/)\>
+
+Promise that resolves to a Lavalink player
+
+#### Defined in
+
+[src/node/Rest.ts:258](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L258)
+
+***
+
+### updateSession()
+
+> **updateSession**(`resuming`?, `timeout`?): `Promise`\<`undefined` \| [`SessionInfo`](/api/interfaces/sessioninfo/)\>
+
+Updates the session with a resume boolean and timeout
+
+#### Parameters
+
+β’ **resuming?**: `boolean`
+
+Whether resuming is enabled for this session or not
+
+β’ **timeout?**: `number`
+
+Timeout to wait for resuming
+
+#### Returns
+
+`Promise`\<`undefined` \| [`SessionInfo`](/api/interfaces/sessioninfo/)\>
+
+Promise that resolves to a Lavalink player
+
+#### Defined in
+
+[src/node/Rest.ts:289](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L289)
diff --git a/src/content/docs/api/classes/Shoukaku.md b/src/content/docs/api/classes/Shoukaku.md
new file mode 100644
index 0000000..255751f
--- /dev/null
+++ b/src/content/docs/api/classes/Shoukaku.md
@@ -0,0 +1,1406 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "Shoukaku"
+---
+
+Main Shoukaku class
+
+## Extends
+
+- `EventEmitter`
+
+## Constructors
+
+### new Shoukaku()
+
+> **new Shoukaku**(`connector`, `nodes`, `options`): [`Shoukaku`](/api/classes/shoukaku/)
+
+#### Parameters
+
+β’ **connector**: [`Connector`](/api/classes/connector/)
+
+A Discord library connector
+
+β’ **nodes**: [`NodeOption`](/api/interfaces/nodeoption/)[]
+
+An array that conforms to the NodeOption type that specifies nodes to connect to
+
+β’ **options**: [`ShoukakuOptions`](/api/interfaces/shoukakuoptions/) = `{}`
+
+Options to pass to create this Shoukaku instance
+
+#### Returns
+
+[`Shoukaku`](/api/classes/shoukaku/)
+
+#### Defined in
+
+[src/Shoukaku.ts:187](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Shoukaku.ts#L187)
+
+## Properties
+
+### connections
+
+> `readonly` **connections**: `Map`\<`string`, [`Connection`](/api/classes/connection/)\>
+
+Voice connections being handled
+
+#### Defined in
+
+[src/Shoukaku.ts:163](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Shoukaku.ts#L163)
+
+***
+
+### connector
+
+> `readonly` **connector**: [`Connector`](/api/classes/connector/)
+
+Discord library connector
+
+#### Defined in
+
+[src/Shoukaku.ts:151](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Shoukaku.ts#L151)
+
+***
+
+### id
+
+> **id**: `null` \| `string`
+
+Shoukaku instance identifier
+
+#### Defined in
+
+[src/Shoukaku.ts:171](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Shoukaku.ts#L171)
+
+***
+
+### nodes
+
+> `readonly` **nodes**: `Map`\<`string`, [`Node`](/api/classes/node/)\>
+
+Connected Lavalink nodes
+
+#### Defined in
+
+[src/Shoukaku.ts:159](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Shoukaku.ts#L159)
+
+***
+
+### options
+
+> `readonly` **options**: `Required`\<[`ShoukakuOptions`](/api/interfaces/shoukakuoptions/)\>
+
+Shoukaku options
+
+#### Defined in
+
+[src/Shoukaku.ts:155](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Shoukaku.ts#L155)
+
+***
+
+### players
+
+> `readonly` **players**: `Map`\<`string`, [`Player`](/api/classes/player/)\>
+
+Players being handled
+
+#### Defined in
+
+[src/Shoukaku.ts:167](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Shoukaku.ts#L167)
+
+***
+
+### captureRejectionSymbol
+
+> `readonly` `static` **captureRejectionSymbol**: *typeof* [`captureRejectionSymbol`](/api/classes/connection/#capturerejectionsymbol)
+
+Value: `Symbol.for('nodejs.rejection')`
+
+See how to write a custom `rejection handler`.
+
+#### Since
+
+v13.4.0, v12.16.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:452
+
+***
+
+### captureRejections
+
+> `static` **captureRejections**: `boolean`
+
+Value: [boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type)
+
+Change the default `captureRejections` option on all new `EventEmitter` objects.
+
+#### Since
+
+v13.4.0, v12.16.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:459
+
+***
+
+### defaultMaxListeners
+
+> `static` **defaultMaxListeners**: `number`
+
+By default, a maximum of `10` listeners can be registered for any single
+event. This limit can be changed for individual `EventEmitter` instances
+using the `emitter.setMaxListeners(n)` method. To change the default
+for _all_`EventEmitter` instances, the `events.defaultMaxListeners` property
+can be used. If this value is not a positive number, a `RangeError` is thrown.
+
+Take caution when setting the `events.defaultMaxListeners` because the
+change affects _all_ `EventEmitter` instances, including those created before
+the change is made. However, calling `emitter.setMaxListeners(n)` still has
+precedence over `events.defaultMaxListeners`.
+
+This is not a hard limit. The `EventEmitter` instance will allow
+more listeners to be added but will output a trace warning to stderr indicating
+that a "possible EventEmitter memory leak" has been detected. For any single
+`EventEmitter`, the `emitter.getMaxListeners()` and `emitter.setMaxListeners()` methods can be used to
+temporarily avoid this warning:
+
+```js
+import { EventEmitter } from 'node:events';
+const emitter = new EventEmitter();
+emitter.setMaxListeners(emitter.getMaxListeners() + 1);
+emitter.once('event', () => {
+ // do stuff
+ emitter.setMaxListeners(Math.max(emitter.getMaxListeners() - 1, 0));
+});
+```
+
+The `--trace-warnings` command-line flag can be used to display the
+stack trace for such warnings.
+
+The emitted warning can be inspected with `process.on('warning')` and will
+have the additional `emitter`, `type`, and `count` properties, referring to
+the event emitter instance, the event's name and the number of attached
+listeners, respectively.
+Its `name` property is set to `'MaxListenersExceededWarning'`.
+
+#### Since
+
+v0.11.2
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:498
+
+***
+
+### errorMonitor
+
+> `readonly` `static` **errorMonitor**: *typeof* [`errorMonitor`](/api/classes/connection/#errormonitor)
+
+This symbol shall be used to install a listener for only monitoring `'error'` events. Listeners installed using this symbol are called before the regular `'error'` listeners are called.
+
+Installing a listener using this symbol does not change the behavior once an `'error'` event is emitted. Therefore, the process will still crash if no
+regular `'error'` listener is installed.
+
+#### Since
+
+v13.6.0, v12.17.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:445
+
+## Methods
+
+### \[captureRejectionSymbol\]()?
+
+> `optional` **\[captureRejectionSymbol\]**\<`K`\>(`error`, `event`, ...`args`): `void`
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **error**: `Error`
+
+β’ **event**: `string` \| `symbol`
+
+β’ ...**args**: `AnyRest`
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:136
+
+***
+
+### addListener()
+
+> **addListener**\<`K`\>(`eventName`, `listener`): `this`
+
+Alias for `emitter.on(eventName, listener)`.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` \| `symbol`
+
+β’ **listener**
+
+#### Returns
+
+`this`
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:597
+
+***
+
+### addNode()
+
+> **addNode**(`options`): `void`
+
+Add a Lavalink node to the pool of available nodes
+
+#### Parameters
+
+β’ **options**: [`NodeOption`](/api/interfaces/nodeoption/)
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/Shoukaku.ts:215](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Shoukaku.ts#L215)
+
+***
+
+### emit()
+
+> **emit**(`event`, ...`args`): `boolean`
+
+#### Parameters
+
+β’ **event**: `string` \| `symbol`
+
+β’ ...**args**: `any`[]
+
+#### Returns
+
+`boolean`
+
+#### Defined in
+
+[src/Shoukaku.ts:141](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Shoukaku.ts#L141)
+
+***
+
+### eventNames()
+
+> **eventNames**(): (`string` \| `symbol`)[]
+
+Returns an array listing the events for which the emitter has registered
+listeners. The values in the array are strings or `Symbol`s.
+
+```js
+import { EventEmitter } from 'node:events';
+
+const myEE = new EventEmitter();
+myEE.on('foo', () => {});
+myEE.on('bar', () => {});
+
+const sym = Symbol('symbol');
+myEE.on(sym, () => {});
+
+console.log(myEE.eventNames());
+// Prints: [ 'foo', 'bar', Symbol(symbol) ]
+```
+
+#### Returns
+
+(`string` \| `symbol`)[]
+
+#### Since
+
+v6.0.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:922
+
+***
+
+### getIdealNode()
+
+> **getIdealNode**(`connection`?): `undefined` \| [`Node`](/api/classes/node/)
+
+Gets an ideal node based on the nodeResolver you provided
+
+#### Parameters
+
+β’ **connection?**: [`Connection`](/api/classes/connection/)
+
+Optional connection class for ideal node selection, if you use it
+
+#### Returns
+
+`undefined` \| [`Node`](/api/classes/node/)
+
+An ideal node for you to do things with
+
+#### Defined in
+
+[src/Shoukaku.ts:203](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Shoukaku.ts#L203)
+
+***
+
+### getMaxListeners()
+
+> **getMaxListeners**(): `number`
+
+Returns the current max listener value for the `EventEmitter` which is either
+set by `emitter.setMaxListeners(n)` or defaults to [defaultMaxListeners](../../../../../../api/classes/shoukaku/#defaultmaxlisteners).
+
+#### Returns
+
+`number`
+
+#### Since
+
+v1.0.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:774
+
+***
+
+### joinVoiceChannel()
+
+> **joinVoiceChannel**(`options`): `Promise`\<[`Player`](/api/classes/player/)\>
+
+Joins a voice channel
+
+#### Parameters
+
+β’ **options**: [`VoiceChannelOptions`](/api/interfaces/voicechanneloptions/)
+
+#### Returns
+
+`Promise`\<[`Player`](/api/classes/player/)\>
+
+The created player
+
+#### Defined in
+
+[src/Shoukaku.ts:248](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Shoukaku.ts#L248)
+
+***
+
+### leaveVoiceChannel()
+
+> **leaveVoiceChannel**(`guildId`): `Promise`\<`void`\>
+
+Leaves a voice channel
+
+#### Parameters
+
+β’ **guildId**: `string`
+
+The id of the guild you want to delete
+
+#### Returns
+
+`Promise`\<`void`\>
+
+The destroyed / disconnected player or undefined if none
+
+#### Defined in
+
+[src/Shoukaku.ts:284](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Shoukaku.ts#L284)
+
+***
+
+### listenerCount()
+
+> **listenerCount**\<`K`\>(`eventName`, `listener`?): `number`
+
+Returns the number of listeners listening for the event named `eventName`.
+If `listener` is provided, it will return how many times the listener is found
+in the list of the listeners of the event.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` \| `symbol`
+
+The name of the event being listened for
+
+β’ **listener?**: `Function`
+
+The event handler function
+
+#### Returns
+
+`number`
+
+#### Since
+
+v3.2.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:868
+
+***
+
+### listeners()
+
+> **listeners**\<`K`\>(`eventName`): `Function`[]
+
+Returns a copy of the array of listeners for the event named `eventName`.
+
+```js
+server.on('connection', (stream) => {
+ console.log('someone connected!');
+});
+console.log(util.inspect(server.listeners('connection')));
+// Prints: [ [Function] ]
+```
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` \| `symbol`
+
+#### Returns
+
+`Function`[]
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:787
+
+***
+
+### off()
+
+> **off**\<`K`\>(`event`, `listener`): `this`
+
+#### Type Parameters
+
+β’ **K** *extends* keyof [`ShoukakuEvents`](/api/interfaces/shoukakuevents/)
+
+#### Parameters
+
+β’ **event**: `K`
+
+β’ **listener**
+
+#### Returns
+
+`this`
+
+#### Defined in
+
+[src/Shoukaku.ts:140](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Shoukaku.ts#L140)
+
+***
+
+### on()
+
+> **on**\<`K`\>(`event`, `listener`): `this`
+
+#### Type Parameters
+
+β’ **K** *extends* keyof [`ShoukakuEvents`](/api/interfaces/shoukakuevents/)
+
+#### Parameters
+
+β’ **event**: `K`
+
+β’ **listener**
+
+#### Returns
+
+`this`
+
+#### Defined in
+
+[src/Shoukaku.ts:138](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Shoukaku.ts#L138)
+
+***
+
+### once()
+
+> **once**\<`K`\>(`event`, `listener`): `this`
+
+#### Type Parameters
+
+β’ **K** *extends* keyof [`ShoukakuEvents`](/api/interfaces/shoukakuevents/)
+
+#### Parameters
+
+β’ **event**: `K`
+
+β’ **listener**
+
+#### Returns
+
+`this`
+
+#### Defined in
+
+[src/Shoukaku.ts:139](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Shoukaku.ts#L139)
+
+***
+
+### prependListener()
+
+> **prependListener**\<`K`\>(`eventName`, `listener`): `this`
+
+Adds the `listener` function to the _beginning_ of the listeners array for the
+event named `eventName`. No checks are made to see if the `listener` has
+already been added. Multiple calls passing the same combination of `eventName`
+and `listener` will result in the `listener` being added, and called, multiple times.
+
+```js
+server.prependListener('connection', (stream) => {
+ console.log('someone connected!');
+});
+```
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` \| `symbol`
+
+The name of the event.
+
+β’ **listener**
+
+The callback function
+
+#### Returns
+
+`this`
+
+#### Since
+
+v6.0.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:886
+
+***
+
+### prependOnceListener()
+
+> **prependOnceListener**\<`K`\>(`eventName`, `listener`): `this`
+
+Adds a **one-time**`listener` function for the event named `eventName` to the _beginning_ of the listeners array. The next time `eventName` is triggered, this
+listener is removed, and then invoked.
+
+```js
+server.prependOnceListener('connection', (stream) => {
+ console.log('Ah, we have our first user!');
+});
+```
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` \| `symbol`
+
+The name of the event.
+
+β’ **listener**
+
+The callback function
+
+#### Returns
+
+`this`
+
+#### Since
+
+v6.0.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:902
+
+***
+
+### rawListeners()
+
+> **rawListeners**\<`K`\>(`eventName`): `Function`[]
+
+Returns a copy of the array of listeners for the event named `eventName`,
+including any wrappers (such as those created by `.once()`).
+
+```js
+import { EventEmitter } from 'node:events';
+const emitter = new EventEmitter();
+emitter.once('log', () => console.log('log once'));
+
+// Returns a new Array with a function `onceWrapper` which has a property
+// `listener` which contains the original listener bound above
+const listeners = emitter.rawListeners('log');
+const logFnWrapper = listeners[0];
+
+// Logs "log once" to the console and does not unbind the `once` event
+logFnWrapper.listener();
+
+// Logs "log once" to the console and removes the listener
+logFnWrapper();
+
+emitter.on('log', () => console.log('log persistently'));
+// Will return a new Array with a single function bound by `.on()` above
+const newListeners = emitter.rawListeners('log');
+
+// Logs "log persistently" twice
+newListeners[0]();
+emitter.emit('log');
+```
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` \| `symbol`
+
+#### Returns
+
+`Function`[]
+
+#### Since
+
+v9.4.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:818
+
+***
+
+### removeAllListeners()
+
+> **removeAllListeners**(`eventName`?): `this`
+
+Removes all listeners, or those of the specified `eventName`.
+
+It is bad practice to remove listeners added elsewhere in the code,
+particularly when the `EventEmitter` instance was created by some other
+component or module (e.g. sockets or file streams).
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Parameters
+
+β’ **eventName?**: `string` \| `symbol`
+
+#### Returns
+
+`this`
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:758
+
+***
+
+### removeListener()
+
+> **removeListener**\<`K`\>(`eventName`, `listener`): `this`
+
+Removes the specified `listener` from the listener array for the event named `eventName`.
+
+```js
+const callback = (stream) => {
+ console.log('someone connected!');
+};
+server.on('connection', callback);
+// ...
+server.removeListener('connection', callback);
+```
+
+`removeListener()` will remove, at most, one instance of a listener from the
+listener array. If any single listener has been added multiple times to the
+listener array for the specified `eventName`, then `removeListener()` must be
+called multiple times to remove each instance.
+
+Once an event is emitted, all listeners attached to it at the
+time of emitting are called in order. This implies that any `removeListener()` or `removeAllListeners()` calls _after_ emitting and _before_ the last listener finishes execution
+will not remove them from`emit()` in progress. Subsequent events behave as expected.
+
+```js
+import { EventEmitter } from 'node:events';
+class MyEmitter extends EventEmitter {}
+const myEmitter = new MyEmitter();
+
+const callbackA = () => {
+ console.log('A');
+ myEmitter.removeListener('event', callbackB);
+};
+
+const callbackB = () => {
+ console.log('B');
+};
+
+myEmitter.on('event', callbackA);
+
+myEmitter.on('event', callbackB);
+
+// callbackA removes listener callbackB but it will still be called.
+// Internal listener array at time of emit [callbackA, callbackB]
+myEmitter.emit('event');
+// Prints:
+// A
+// B
+
+// callbackB is now removed.
+// Internal listener array [callbackA]
+myEmitter.emit('event');
+// Prints:
+// A
+```
+
+Because listeners are managed using an internal array, calling this will
+change the position indices of any listener registered _after_ the listener
+being removed. This will not impact the order in which listeners are called,
+but it means that any copies of the listener array as returned by
+the `emitter.listeners()` method will need to be recreated.
+
+When a single function has been added as a handler multiple times for a single
+event (as in the example below), `removeListener()` will remove the most
+recently added instance. In the example the `once('ping')` listener is removed:
+
+```js
+import { EventEmitter } from 'node:events';
+const ee = new EventEmitter();
+
+function pong() {
+ console.log('pong');
+}
+
+ee.on('ping', pong);
+ee.once('ping', pong);
+ee.removeListener('ping', pong);
+
+ee.emit('ping');
+ee.emit('ping');
+```
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Type Parameters
+
+β’ **K**
+
+#### Parameters
+
+β’ **eventName**: `string` \| `symbol`
+
+β’ **listener**
+
+#### Returns
+
+`this`
+
+#### Since
+
+v0.1.26
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:742
+
+***
+
+### removeNode()
+
+> **removeNode**(`name`, `reason`): `void`
+
+Remove a Lavalink node from the pool of available nodes
+
+#### Parameters
+
+β’ **name**: `string`
+
+Name of the node
+
+β’ **reason**: `string` = `'Remove node executed'`
+
+Reason of removing the node
+
+#### Returns
+
+`void`
+
+#### Defined in
+
+[src/Shoukaku.ts:233](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Shoukaku.ts#L233)
+
+***
+
+### setMaxListeners()
+
+> **setMaxListeners**(`n`): `this`
+
+By default `EventEmitter`s will print a warning if more than `10` listeners are
+added for a particular event. This is a useful default that helps finding
+memory leaks. The `emitter.setMaxListeners()` method allows the limit to be
+modified for this specific `EventEmitter` instance. The value can be set to `Infinity` (or `0`) to indicate an unlimited number of listeners.
+
+Returns a reference to the `EventEmitter`, so that calls can be chained.
+
+#### Parameters
+
+β’ **n**: `number`
+
+#### Returns
+
+`this`
+
+#### Since
+
+v0.3.5
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:768
+
+***
+
+### addAbortListener()
+
+> `static` **addAbortListener**(`signal`, `resource`): `Disposable`
+
+Listens once to the `abort` event on the provided `signal`.
+
+Listening to the `abort` event on abort signals is unsafe and may
+lead to resource leaks since another third party with the signal can
+call `e.stopImmediatePropagation()`. Unfortunately Node.js cannot change
+this since it would violate the web standard. Additionally, the original
+API makes it easy to forget to remove listeners.
+
+This API allows safely using `AbortSignal`s in Node.js APIs by solving these
+two issues by listening to the event such that `stopImmediatePropagation` does
+not prevent the listener from running.
+
+Returns a disposable so that it may be unsubscribed from more easily.
+
+```js
+import { addAbortListener } from 'node:events';
+
+function example(signal) {
+ let disposable;
+ try {
+ signal.addEventListener('abort', (e) => e.stopImmediatePropagation());
+ disposable = addAbortListener(signal, (e) => {
+ // Do something when signal is aborted.
+ });
+ } finally {
+ disposable?.[Symbol.dispose]();
+ }
+}
+```
+
+:::caution[Experimental]
+This API should not be used in production and may be trimmed from a public release.
+:::
+
+#### Parameters
+
+β’ **signal**: `AbortSignal`
+
+β’ **resource**
+
+#### Returns
+
+`Disposable`
+
+Disposable that removes the `abort` listener.
+
+#### Since
+
+v20.5.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:437
+
+***
+
+### getEventListeners()
+
+> `static` **getEventListeners**(`emitter`, `name`): `Function`[]
+
+Returns a copy of the array of listeners for the event named `eventName`.
+
+For `EventEmitter`s this behaves exactly the same as calling `.listeners` on
+the emitter.
+
+For `EventTarget`s this is the only way to get the event listeners for the
+event target. This is useful for debugging and diagnostic purposes.
+
+```js
+import { getEventListeners, EventEmitter } from 'node:events';
+
+{
+ const ee = new EventEmitter();
+ const listener = () => console.log('Events are fun');
+ ee.on('foo', listener);
+ console.log(getEventListeners(ee, 'foo')); // [ [Function: listener] ]
+}
+{
+ const et = new EventTarget();
+ const listener = () => console.log('Events are fun');
+ et.addEventListener('foo', listener);
+ console.log(getEventListeners(et, 'foo')); // [ [Function: listener] ]
+}
+```
+
+#### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`\> \| `EventTarget`
+
+β’ **name**: `string` \| `symbol`
+
+#### Returns
+
+`Function`[]
+
+#### Since
+
+v15.2.0, v14.17.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:358
+
+***
+
+### getMaxListeners()
+
+> `static` **getMaxListeners**(`emitter`): `number`
+
+Returns the currently set max amount of listeners.
+
+For `EventEmitter`s this behaves exactly the same as calling `.getMaxListeners` on
+the emitter.
+
+For `EventTarget`s this is the only way to get the max event listeners for the
+event target. If the number of event handlers on a single EventTarget exceeds
+the max set, the EventTarget will print a warning.
+
+```js
+import { getMaxListeners, setMaxListeners, EventEmitter } from 'node:events';
+
+{
+ const ee = new EventEmitter();
+ console.log(getMaxListeners(ee)); // 10
+ setMaxListeners(11, ee);
+ console.log(getMaxListeners(ee)); // 11
+}
+{
+ const et = new EventTarget();
+ console.log(getMaxListeners(et)); // 10
+ setMaxListeners(11, et);
+ console.log(getMaxListeners(et)); // 11
+}
+```
+
+#### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`\> \| `EventTarget`
+
+#### Returns
+
+`number`
+
+#### Since
+
+v19.9.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:387
+
+***
+
+### ~~listenerCount()~~
+
+> `static` **listenerCount**(`emitter`, `eventName`): `number`
+
+A class method that returns the number of listeners for the given `eventName` registered on the given `emitter`.
+
+```js
+import { EventEmitter, listenerCount } from 'node:events';
+
+const myEmitter = new EventEmitter();
+myEmitter.on('event', () => {});
+myEmitter.on('event', () => {});
+console.log(listenerCount(myEmitter, 'event'));
+// Prints: 2
+```
+
+:::caution[Deprecated]
+Since v3.2.0 - Use `listenerCount` instead.
+:::
+
+#### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`\>
+
+The emitter to query
+
+β’ **eventName**: `string` \| `symbol`
+
+The event name
+
+#### Returns
+
+`number`
+
+#### Since
+
+v0.9.12
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:330
+
+***
+
+### on()
+
+#### on(emitter, eventName, options)
+
+> `static` **on**(`emitter`, `eventName`, `options`?): `AsyncIterableIterator`\<`any`[]\>
+
+```js
+import { on, EventEmitter } from 'node:events';
+import process from 'node:process';
+
+const ee = new EventEmitter();
+
+// Emit later on
+process.nextTick(() => {
+ ee.emit('foo', 'bar');
+ ee.emit('foo', 42);
+});
+
+for await (const event of on(ee, 'foo')) {
+ // The execution of this inner block is synchronous and it
+ // processes one event at a time (even with await). Do not use
+ // if concurrent execution is required.
+ console.log(event); // prints ['bar'] [42]
+}
+// Unreachable here
+```
+
+Returns an `AsyncIterator` that iterates `eventName` events. It will throw
+if the `EventEmitter` emits `'error'`. It removes all listeners when
+exiting the loop. The `value` returned by each iteration is an array
+composed of the emitted event arguments.
+
+An `AbortSignal` can be used to cancel waiting on events:
+
+```js
+import { on, EventEmitter } from 'node:events';
+import process from 'node:process';
+
+const ac = new AbortController();
+
+(async () => {
+ const ee = new EventEmitter();
+
+ // Emit later on
+ process.nextTick(() => {
+ ee.emit('foo', 'bar');
+ ee.emit('foo', 42);
+ });
+
+ for await (const event of on(ee, 'foo', { signal: ac.signal })) {
+ // The execution of this inner block is synchronous and it
+ // processes one event at a time (even with await). Do not use
+ // if concurrent execution is required.
+ console.log(event); // prints ['bar'] [42]
+ }
+ // Unreachable here
+})();
+
+process.nextTick(() => ac.abort());
+```
+
+Use the `close` option to specify an array of event names that will end the iteration:
+
+```js
+import { on, EventEmitter } from 'node:events';
+import process from 'node:process';
+
+const ee = new EventEmitter();
+
+// Emit later on
+process.nextTick(() => {
+ ee.emit('foo', 'bar');
+ ee.emit('foo', 42);
+ ee.emit('close');
+});
+
+for await (const event of on(ee, 'foo', { close: ['close'] })) {
+ console.log(event); // prints ['bar'] [42]
+}
+// the loop will exit after 'close' is emitted
+console.log('done'); // prints 'done'
+```
+
+##### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`\>
+
+β’ **eventName**: `string` \| `symbol`
+
+β’ **options?**: `StaticEventEmitterIteratorOptions`
+
+##### Returns
+
+`AsyncIterableIterator`\<`any`[]\>
+
+An `AsyncIterator` that iterates `eventName` events emitted by the `emitter`
+
+##### Since
+
+v13.6.0, v12.16.0
+
+##### Defined in
+
+node\_modules/@types/node/events.d.ts:303
+
+#### on(emitter, eventName, options)
+
+> `static` **on**(`emitter`, `eventName`, `options`?): `AsyncIterableIterator`\<`any`[]\>
+
+##### Parameters
+
+β’ **emitter**: `EventTarget`
+
+β’ **eventName**: `string`
+
+β’ **options?**: `StaticEventEmitterIteratorOptions`
+
+##### Returns
+
+`AsyncIterableIterator`\<`any`[]\>
+
+##### Defined in
+
+node\_modules/@types/node/events.d.ts:308
+
+***
+
+### once()
+
+#### once(emitter, eventName, options)
+
+> `static` **once**(`emitter`, `eventName`, `options`?): `Promise`\<`any`[]\>
+
+Creates a `Promise` that is fulfilled when the `EventEmitter` emits the given
+event or that is rejected if the `EventEmitter` emits `'error'` while waiting.
+The `Promise` will resolve with an array of all the arguments emitted to the
+given event.
+
+This method is intentionally generic and works with the web platform [EventTarget](https://dom.spec.whatwg.org/#interface-eventtarget) interface, which has no special`'error'` event
+semantics and does not listen to the `'error'` event.
+
+```js
+import { once, EventEmitter } from 'node:events';
+import process from 'node:process';
+
+const ee = new EventEmitter();
+
+process.nextTick(() => {
+ ee.emit('myevent', 42);
+});
+
+const [value] = await once(ee, 'myevent');
+console.log(value);
+
+const err = new Error('kaboom');
+process.nextTick(() => {
+ ee.emit('error', err);
+});
+
+try {
+ await once(ee, 'myevent');
+} catch (err) {
+ console.error('error happened', err);
+}
+```
+
+The special handling of the `'error'` event is only used when `events.once()` is used to wait for another event. If `events.once()` is used to wait for the
+'`error'` event itself, then it is treated as any other kind of event without
+special handling:
+
+```js
+import { EventEmitter, once } from 'node:events';
+
+const ee = new EventEmitter();
+
+once(ee, 'error')
+ .then(([err]) => console.log('ok', err.message))
+ .catch((err) => console.error('error', err.message));
+
+ee.emit('error', new Error('boom'));
+
+// Prints: ok boom
+```
+
+An `AbortSignal` can be used to cancel waiting for the event:
+
+```js
+import { EventEmitter, once } from 'node:events';
+
+const ee = new EventEmitter();
+const ac = new AbortController();
+
+async function foo(emitter, event, signal) {
+ try {
+ await once(emitter, event, { signal });
+ console.log('event emitted!');
+ } catch (error) {
+ if (error.name === 'AbortError') {
+ console.error('Waiting for the event was canceled!');
+ } else {
+ console.error('There was an error', error.message);
+ }
+ }
+}
+
+foo(ee, 'foo', ac.signal);
+ac.abort(); // Abort waiting for the event
+ee.emit('foo'); // Prints: Waiting for the event was canceled!
+```
+
+##### Parameters
+
+β’ **emitter**: `EventEmitter`\<`DefaultEventMap`\>
+
+β’ **eventName**: `string` \| `symbol`
+
+β’ **options?**: `StaticEventEmitterOptions`
+
+##### Returns
+
+`Promise`\<`any`[]\>
+
+##### Since
+
+v11.13.0, v10.16.0
+
+##### Defined in
+
+node\_modules/@types/node/events.d.ts:217
+
+#### once(emitter, eventName, options)
+
+> `static` **once**(`emitter`, `eventName`, `options`?): `Promise`\<`any`[]\>
+
+##### Parameters
+
+β’ **emitter**: `EventTarget`
+
+β’ **eventName**: `string`
+
+β’ **options?**: `StaticEventEmitterOptions`
+
+##### Returns
+
+`Promise`\<`any`[]\>
+
+##### Defined in
+
+node\_modules/@types/node/events.d.ts:222
+
+***
+
+### setMaxListeners()
+
+> `static` **setMaxListeners**(`n`?, ...`eventTargets`?): `void`
+
+```js
+import { setMaxListeners, EventEmitter } from 'node:events';
+
+const target = new EventTarget();
+const emitter = new EventEmitter();
+
+setMaxListeners(5, target, emitter);
+```
+
+#### Parameters
+
+β’ **n?**: `number`
+
+A non-negative number. The maximum number of listeners per `EventTarget` event.
+
+β’ ...**eventTargets?**: (`EventEmitter`\<`DefaultEventMap`\> \| `EventTarget`)[]
+
+#### Returns
+
+`void`
+
+#### Since
+
+v15.4.0
+
+#### Defined in
+
+node\_modules/@types/node/events.d.ts:402
diff --git a/src/content/docs/api/enumerations/LoadType.md b/src/content/docs/api/enumerations/LoadType.md
new file mode 100644
index 0000000..70b1e79
--- /dev/null
+++ b/src/content/docs/api/enumerations/LoadType.md
@@ -0,0 +1,56 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "LoadType"
+---
+
+## Enumeration Members
+
+### EMPTY
+
+> **EMPTY**: `"empty"`
+
+#### Defined in
+
+[src/node/Rest.ts:12](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L12)
+
+***
+
+### ERROR
+
+> **ERROR**: `"error"`
+
+#### Defined in
+
+[src/node/Rest.ts:13](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L13)
+
+***
+
+### PLAYLIST
+
+> **PLAYLIST**: `"playlist"`
+
+#### Defined in
+
+[src/node/Rest.ts:10](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L10)
+
+***
+
+### SEARCH
+
+> **SEARCH**: `"search"`
+
+#### Defined in
+
+[src/node/Rest.ts:11](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L11)
+
+***
+
+### TRACK
+
+> **TRACK**: `"track"`
+
+#### Defined in
+
+[src/node/Rest.ts:9](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L9)
diff --git a/src/content/docs/api/interfaces/Address.md b/src/content/docs/api/interfaces/Address.md
new file mode 100644
index 0000000..10fa4ac
--- /dev/null
+++ b/src/content/docs/api/interfaces/Address.md
@@ -0,0 +1,36 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "Address"
+---
+
+## Properties
+
+### address
+
+> **address**: `string`
+
+#### Defined in
+
+[src/node/Rest.ts:78](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L78)
+
+***
+
+### failingTime
+
+> **failingTime**: `string`
+
+#### Defined in
+
+[src/node/Rest.ts:80](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L80)
+
+***
+
+### failingTimestamp
+
+> **failingTimestamp**: `number`
+
+#### Defined in
+
+[src/node/Rest.ts:79](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L79)
diff --git a/src/content/docs/api/interfaces/Band.md b/src/content/docs/api/interfaces/Band.md
new file mode 100644
index 0000000..2dfc5e8
--- /dev/null
+++ b/src/content/docs/api/interfaces/Band.md
@@ -0,0 +1,26 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "Band"
+---
+
+## Properties
+
+### band
+
+> **band**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:14](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L14)
+
+***
+
+### gain
+
+> **gain**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:15](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L15)
diff --git a/src/content/docs/api/interfaces/ChannelMixSettings.md b/src/content/docs/api/interfaces/ChannelMixSettings.md
new file mode 100644
index 0000000..07c2f3f
--- /dev/null
+++ b/src/content/docs/api/interfaces/ChannelMixSettings.md
@@ -0,0 +1,46 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "ChannelMixSettings"
+---
+
+## Properties
+
+### leftToLeft?
+
+> `optional` **leftToLeft**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:52](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L52)
+
+***
+
+### leftToRight?
+
+> `optional` **leftToRight**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:53](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L53)
+
+***
+
+### rightToLeft?
+
+> `optional` **rightToLeft**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:54](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L54)
+
+***
+
+### rightToRight?
+
+> `optional` **rightToRight**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:55](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L55)
diff --git a/src/content/docs/api/interfaces/ConnectorMethods.md b/src/content/docs/api/interfaces/ConnectorMethods.md
new file mode 100644
index 0000000..43c210c
--- /dev/null
+++ b/src/content/docs/api/interfaces/ConnectorMethods.md
@@ -0,0 +1,26 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "ConnectorMethods"
+---
+
+## Properties
+
+### getId
+
+> **getId**: `any`
+
+#### Defined in
+
+[src/connectors/Connector.ts:7](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/connectors/Connector.ts#L7)
+
+***
+
+### sendPacket
+
+> **sendPacket**: `any`
+
+#### Defined in
+
+[src/connectors/Connector.ts:6](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/connectors/Connector.ts#L6)
diff --git a/src/content/docs/api/interfaces/DistortionSettings.md b/src/content/docs/api/interfaces/DistortionSettings.md
new file mode 100644
index 0000000..958fad5
--- /dev/null
+++ b/src/content/docs/api/interfaces/DistortionSettings.md
@@ -0,0 +1,86 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "DistortionSettings"
+---
+
+## Properties
+
+### cosOffset?
+
+> `optional` **cosOffset**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:43](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L43)
+
+***
+
+### cosScale?
+
+> `optional` **cosScale**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:44](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L44)
+
+***
+
+### offset?
+
+> `optional` **offset**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:47](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L47)
+
+***
+
+### scale?
+
+> `optional` **scale**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:48](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L48)
+
+***
+
+### sinOffset?
+
+> `optional` **sinOffset**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:41](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L41)
+
+***
+
+### sinScale?
+
+> `optional` **sinScale**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:42](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L42)
+
+***
+
+### tanOffset?
+
+> `optional` **tanOffset**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:45](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L45)
+
+***
+
+### tanScale?
+
+> `optional` **tanScale**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:46](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L46)
diff --git a/src/content/docs/api/interfaces/EmptyResult.md b/src/content/docs/api/interfaces/EmptyResult.md
new file mode 100644
index 0000000..8396a64
--- /dev/null
+++ b/src/content/docs/api/interfaces/EmptyResult.md
@@ -0,0 +1,26 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "EmptyResult"
+---
+
+## Properties
+
+### data
+
+> **data**: `object`
+
+#### Defined in
+
+[src/node/Rest.ts:67](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L67)
+
+***
+
+### loadType
+
+> **loadType**: [`EMPTY`](/api/enumerations/loadtype/#empty)
+
+#### Defined in
+
+[src/node/Rest.ts:66](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L66)
diff --git a/src/content/docs/api/interfaces/ErrorResult.md b/src/content/docs/api/interfaces/ErrorResult.md
new file mode 100644
index 0000000..8b59cbe
--- /dev/null
+++ b/src/content/docs/api/interfaces/ErrorResult.md
@@ -0,0 +1,26 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "ErrorResult"
+---
+
+## Properties
+
+### data
+
+> **data**: [`Exception`](/api/interfaces/exception/)
+
+#### Defined in
+
+[src/node/Rest.ts:72](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L72)
+
+***
+
+### loadType
+
+> **loadType**: [`ERROR`](/api/enumerations/loadtype/#error)
+
+#### Defined in
+
+[src/node/Rest.ts:71](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L71)
diff --git a/src/content/docs/api/interfaces/Exception.md b/src/content/docs/api/interfaces/Exception.md
new file mode 100644
index 0000000..6e7e3ad
--- /dev/null
+++ b/src/content/docs/api/interfaces/Exception.md
@@ -0,0 +1,36 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "Exception"
+---
+
+## Properties
+
+### cause
+
+> **cause**: `string`
+
+#### Defined in
+
+[src/node/Rest.ts:47](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L47)
+
+***
+
+### message
+
+> **message**: `string`
+
+#### Defined in
+
+[src/node/Rest.ts:45](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L45)
+
+***
+
+### severity
+
+> **severity**: [`Severity`](/api/type-aliases/severity/)
+
+#### Defined in
+
+[src/node/Rest.ts:46](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L46)
diff --git a/src/content/docs/api/interfaces/FilterOptions.md b/src/content/docs/api/interfaces/FilterOptions.md
new file mode 100644
index 0000000..72d04f7
--- /dev/null
+++ b/src/content/docs/api/interfaces/FilterOptions.md
@@ -0,0 +1,106 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "FilterOptions"
+---
+
+## Properties
+
+### channelMix?
+
+> `optional` **channelMix**: `null` \| [`ChannelMixSettings`](/api/interfaces/channelmixsettings/)
+
+#### Defined in
+
+[src/guild/Player.ts:121](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L121)
+
+***
+
+### distortion?
+
+> `optional` **distortion**: `null` \| [`DistortionSettings`](/api/interfaces/distortionsettings/)
+
+#### Defined in
+
+[src/guild/Player.ts:120](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L120)
+
+***
+
+### equalizer?
+
+> `optional` **equalizer**: [`Band`](/api/interfaces/band/)[]
+
+#### Defined in
+
+[src/guild/Player.ts:114](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L114)
+
+***
+
+### karaoke?
+
+> `optional` **karaoke**: `null` \| [`KaraokeSettings`](/api/interfaces/karaokesettings/)
+
+#### Defined in
+
+[src/guild/Player.ts:115](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L115)
+
+***
+
+### lowPass?
+
+> `optional` **lowPass**: `null` \| [`LowPassSettings`](/api/interfaces/lowpasssettings/)
+
+#### Defined in
+
+[src/guild/Player.ts:122](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L122)
+
+***
+
+### rotation?
+
+> `optional` **rotation**: `null` \| [`RotationSettings`](/api/interfaces/rotationsettings/)
+
+#### Defined in
+
+[src/guild/Player.ts:119](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L119)
+
+***
+
+### timescale?
+
+> `optional` **timescale**: `null` \| [`TimescaleSettings`](/api/interfaces/timescalesettings/)
+
+#### Defined in
+
+[src/guild/Player.ts:116](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L116)
+
+***
+
+### tremolo?
+
+> `optional` **tremolo**: `null` \| [`FreqSettings`](/api/interfaces/freqsettings/)
+
+#### Defined in
+
+[src/guild/Player.ts:117](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L117)
+
+***
+
+### vibrato?
+
+> `optional` **vibrato**: `null` \| [`FreqSettings`](/api/interfaces/freqsettings/)
+
+#### Defined in
+
+[src/guild/Player.ts:118](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L118)
+
+***
+
+### volume?
+
+> `optional` **volume**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:113](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L113)
diff --git a/src/content/docs/api/interfaces/FreqSettings.md b/src/content/docs/api/interfaces/FreqSettings.md
new file mode 100644
index 0000000..40edef0
--- /dev/null
+++ b/src/content/docs/api/interfaces/FreqSettings.md
@@ -0,0 +1,26 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "FreqSettings"
+---
+
+## Properties
+
+### depth?
+
+> `optional` **depth**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:33](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L33)
+
+***
+
+### frequency?
+
+> `optional` **frequency**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:32](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L32)
diff --git a/src/content/docs/api/interfaces/KaraokeSettings.md b/src/content/docs/api/interfaces/KaraokeSettings.md
new file mode 100644
index 0000000..b4498a6
--- /dev/null
+++ b/src/content/docs/api/interfaces/KaraokeSettings.md
@@ -0,0 +1,46 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "KaraokeSettings"
+---
+
+## Properties
+
+### filterBand?
+
+> `optional` **filterBand**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:21](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L21)
+
+***
+
+### filterWidth?
+
+> `optional` **filterWidth**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:22](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L22)
+
+***
+
+### level?
+
+> `optional` **level**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:19](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L19)
+
+***
+
+### monoLevel?
+
+> `optional` **monoLevel**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:20](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L20)
diff --git a/src/content/docs/api/interfaces/LavalinkPlayer.md b/src/content/docs/api/interfaces/LavalinkPlayer.md
new file mode 100644
index 0000000..54bc9f7
--- /dev/null
+++ b/src/content/docs/api/interfaces/LavalinkPlayer.md
@@ -0,0 +1,66 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "LavalinkPlayer"
+---
+
+## Properties
+
+### filters
+
+> **filters**: [`FilterOptions`](/api/interfaces/filteroptions/)
+
+#### Defined in
+
+[src/node/Rest.ts:115](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L115)
+
+***
+
+### guildId
+
+> **guildId**: `string`
+
+#### Defined in
+
+[src/node/Rest.ts:110](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L110)
+
+***
+
+### paused
+
+> **paused**: `boolean`
+
+#### Defined in
+
+[src/node/Rest.ts:113](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L113)
+
+***
+
+### track?
+
+> `optional` **track**: [`Track`](/api/interfaces/track/)
+
+#### Defined in
+
+[src/node/Rest.ts:111](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L111)
+
+***
+
+### voice
+
+> **voice**: [`LavalinkPlayerVoice`](/api/interfaces/lavalinkplayervoice/)
+
+#### Defined in
+
+[src/node/Rest.ts:114](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L114)
+
+***
+
+### volume
+
+> **volume**: `number`
+
+#### Defined in
+
+[src/node/Rest.ts:112](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L112)
diff --git a/src/content/docs/api/interfaces/LavalinkPlayerVoice.md b/src/content/docs/api/interfaces/LavalinkPlayerVoice.md
new file mode 100644
index 0000000..be8c3e3
--- /dev/null
+++ b/src/content/docs/api/interfaces/LavalinkPlayerVoice.md
@@ -0,0 +1,56 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "LavalinkPlayerVoice"
+---
+
+## Properties
+
+### connected?
+
+> `optional` **connected**: `boolean`
+
+#### Defined in
+
+[src/node/Rest.ts:103](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L103)
+
+***
+
+### endpoint
+
+> **endpoint**: `string`
+
+#### Defined in
+
+[src/node/Rest.ts:101](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L101)
+
+***
+
+### ping?
+
+> `optional` **ping**: `number`
+
+#### Defined in
+
+[src/node/Rest.ts:104](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L104)
+
+***
+
+### sessionId
+
+> **sessionId**: `string`
+
+#### Defined in
+
+[src/node/Rest.ts:102](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L102)
+
+***
+
+### token
+
+> **token**: `string`
+
+#### Defined in
+
+[src/node/Rest.ts:100](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L100)
diff --git a/src/content/docs/api/interfaces/LavalinkPlayerVoiceOptions.md b/src/content/docs/api/interfaces/LavalinkPlayerVoiceOptions.md
new file mode 100644
index 0000000..18b05fa
--- /dev/null
+++ b/src/content/docs/api/interfaces/LavalinkPlayerVoiceOptions.md
@@ -0,0 +1,52 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "LavalinkPlayerVoiceOptions"
+---
+
+## Extends
+
+- `Omit`\<[`LavalinkPlayerVoice`](/api/interfaces/lavalinkplayervoice/), `"connected"` \| `"ping"`\>
+
+## Properties
+
+### endpoint
+
+> **endpoint**: `string`
+
+#### Inherited from
+
+`Omit.endpoint`
+
+#### Defined in
+
+[src/node/Rest.ts:101](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L101)
+
+***
+
+### sessionId
+
+> **sessionId**: `string`
+
+#### Inherited from
+
+`Omit.sessionId`
+
+#### Defined in
+
+[src/node/Rest.ts:102](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L102)
+
+***
+
+### token
+
+> **token**: `string`
+
+#### Inherited from
+
+`Omit.token`
+
+#### Defined in
+
+[src/node/Rest.ts:100](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L100)
diff --git a/src/content/docs/api/interfaces/LowPassSettings.md b/src/content/docs/api/interfaces/LowPassSettings.md
new file mode 100644
index 0000000..7f7025b
--- /dev/null
+++ b/src/content/docs/api/interfaces/LowPassSettings.md
@@ -0,0 +1,16 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "LowPassSettings"
+---
+
+## Properties
+
+### smoothing?
+
+> `optional` **smoothing**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:59](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L59)
diff --git a/src/content/docs/api/interfaces/NodeOption.md b/src/content/docs/api/interfaces/NodeOption.md
new file mode 100644
index 0000000..208525d
--- /dev/null
+++ b/src/content/docs/api/interfaces/NodeOption.md
@@ -0,0 +1,66 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "NodeOption"
+---
+
+## Properties
+
+### auth
+
+> **auth**: `string`
+
+Credentials to access Lavalink
+
+#### Defined in
+
+[src/Shoukaku.ts:33](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Shoukaku.ts#L33)
+
+***
+
+### group?
+
+> `optional` **group**: `string`
+
+Name of the Lavalink node group
+
+#### Defined in
+
+[src/Shoukaku.ts:41](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Shoukaku.ts#L41)
+
+***
+
+### name
+
+> **name**: `string`
+
+Name of the Lavalink node
+
+#### Defined in
+
+[src/Shoukaku.ts:25](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Shoukaku.ts#L25)
+
+***
+
+### secure?
+
+> `optional` **secure**: `boolean`
+
+Whether to use secure protocols or not
+
+#### Defined in
+
+[src/Shoukaku.ts:37](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Shoukaku.ts#L37)
+
+***
+
+### url
+
+> **url**: `string`
+
+Lavalink node host and port without any prefix
+
+#### Defined in
+
+[src/Shoukaku.ts:29](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Shoukaku.ts#L29)
diff --git a/src/content/docs/api/interfaces/NodeStats.md b/src/content/docs/api/interfaces/NodeStats.md
new file mode 100644
index 0000000..2f8422b
--- /dev/null
+++ b/src/content/docs/api/interfaces/NodeStats.md
@@ -0,0 +1,106 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "NodeStats"
+---
+
+## Properties
+
+### cpu
+
+> **cpu**: `object`
+
+#### cores
+
+> **cores**: `number`
+
+#### lavalinkLoad
+
+> **lavalinkLoad**: `number`
+
+#### systemLoad
+
+> **systemLoad**: `number`
+
+#### Defined in
+
+[src/node/Node.ts:23](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Node.ts#L23)
+
+***
+
+### frameStats
+
+> **frameStats**: `object`
+
+#### deficit
+
+> **deficit**: `number`
+
+#### nulled
+
+> **nulled**: `number`
+
+#### sent
+
+> **sent**: `number`
+
+#### Defined in
+
+[src/node/Node.ts:18](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Node.ts#L18)
+
+***
+
+### memory
+
+> **memory**: `object`
+
+#### allocated
+
+> **allocated**: `number`
+
+#### free
+
+> **free**: `number`
+
+#### reservable
+
+> **reservable**: `number`
+
+#### used
+
+> **used**: `number`
+
+#### Defined in
+
+[src/node/Node.ts:12](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Node.ts#L12)
+
+***
+
+### players
+
+> **players**: `number`
+
+#### Defined in
+
+[src/node/Node.ts:10](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Node.ts#L10)
+
+***
+
+### playingPlayers
+
+> **playingPlayers**: `number`
+
+#### Defined in
+
+[src/node/Node.ts:11](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Node.ts#L11)
+
+***
+
+### uptime
+
+> **uptime**: `number`
+
+#### Defined in
+
+[src/node/Node.ts:28](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Node.ts#L28)
diff --git a/src/content/docs/api/interfaces/NonResumableHeaders.md b/src/content/docs/api/interfaces/NonResumableHeaders.md
new file mode 100644
index 0000000..38b12c3
--- /dev/null
+++ b/src/content/docs/api/interfaces/NonResumableHeaders.md
@@ -0,0 +1,10 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "NonResumableHeaders"
+---
+
+## Extends
+
+- `Omit`\<[`ResumableHeaders`](/api/interfaces/resumableheaders/), `"Session-Id"`\>
diff --git a/src/content/docs/api/interfaces/PlayerEvent.md b/src/content/docs/api/interfaces/PlayerEvent.md
new file mode 100644
index 0000000..12834d8
--- /dev/null
+++ b/src/content/docs/api/interfaces/PlayerEvent.md
@@ -0,0 +1,44 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "PlayerEvent"
+---
+
+## Extended by
+
+- [`TrackStartEvent`](/api/interfaces/trackstartevent/)
+- [`TrackEndEvent`](/api/interfaces/trackendevent/)
+- [`TrackStuckEvent`](/api/interfaces/trackstuckevent/)
+- [`TrackExceptionEvent`](/api/interfaces/trackexceptionevent/)
+- [`WebSocketClosedEvent`](/api/interfaces/websocketclosedevent/)
+
+## Properties
+
+### guildId
+
+> **guildId**: `string`
+
+#### Defined in
+
+[src/guild/Player.ts:65](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L65)
+
+***
+
+### op
+
+> **op**: [`EVENT`](/api/namespaces/constants/enumerations/opcodes/#event)
+
+#### Defined in
+
+[src/guild/Player.ts:63](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L63)
+
+***
+
+### type
+
+> **type**: [`PlayerEventType`](/api/type-aliases/playereventtype/)
+
+#### Defined in
+
+[src/guild/Player.ts:64](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L64)
diff --git a/src/content/docs/api/interfaces/PlayerEvents.md b/src/content/docs/api/interfaces/PlayerEvents.md
new file mode 100644
index 0000000..fd8cc17
--- /dev/null
+++ b/src/content/docs/api/interfaces/PlayerEvents.md
@@ -0,0 +1,90 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "PlayerEvents"
+---
+
+## Events
+
+### closed
+
+> **closed**: [[`WebSocketClosedEvent`](/api/interfaces/websocketclosedevent/)]
+
+Emitted when the current websocket connection is closed
+
+#### Defined in
+
+[src/guild/Player.ts:140](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L140)
+
+***
+
+### end
+
+> **end**: [[`TrackEndEvent`](/api/interfaces/trackendevent/)]
+
+Emitted when the current playing track ends
+
+#### Defined in
+
+[src/guild/Player.ts:130](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L130)
+
+***
+
+### exception
+
+> **exception**: [[`TrackExceptionEvent`](/api/interfaces/trackexceptionevent/)]
+
+Emitted when there is an error caused by the current playing track
+
+#### Defined in
+
+[src/guild/Player.ts:150](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L150)
+
+***
+
+### resumed
+
+> **resumed**: [[`Player`](/api/classes/player/)]
+
+Emitted when the library manages to resume the player
+
+#### Defined in
+
+[src/guild/Player.ts:155](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L155)
+
+***
+
+### start
+
+> **start**: [[`TrackStartEvent`](/api/interfaces/trackstartevent/)]
+
+Emitted when a new track starts
+
+#### Defined in
+
+[src/guild/Player.ts:145](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L145)
+
+***
+
+### stuck
+
+> **stuck**: [[`TrackStuckEvent`](/api/interfaces/trackstuckevent/)]
+
+Emitted when the current playing track gets stuck due to an error
+
+#### Defined in
+
+[src/guild/Player.ts:135](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L135)
+
+***
+
+### update
+
+> **update**: [[`PlayerUpdate`](/api/interfaces/playerupdate/)]
+
+Emitted when a playerUpdate even is received from Lavalink
+
+#### Defined in
+
+[src/guild/Player.ts:160](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L160)
diff --git a/src/content/docs/api/interfaces/PlayerUpdate.md b/src/content/docs/api/interfaces/PlayerUpdate.md
new file mode 100644
index 0000000..348a53f
--- /dev/null
+++ b/src/content/docs/api/interfaces/PlayerUpdate.md
@@ -0,0 +1,48 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "PlayerUpdate"
+---
+
+## Properties
+
+### guildId
+
+> **guildId**: `string`
+
+#### Defined in
+
+[src/guild/Player.ts:109](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L109)
+
+***
+
+### op
+
+> **op**: [`PLAYER_UPDATE`](/api/namespaces/constants/enumerations/opcodes/#player_update)
+
+#### Defined in
+
+[src/guild/Player.ts:103](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L103)
+
+***
+
+### state
+
+> **state**: `object`
+
+#### connected
+
+> **connected**: `boolean`
+
+#### position?
+
+> `optional` **position**: `number`
+
+#### time
+
+> **time**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:104](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L104)
diff --git a/src/content/docs/api/interfaces/Playlist.md b/src/content/docs/api/interfaces/Playlist.md
new file mode 100644
index 0000000..f559f0c
--- /dev/null
+++ b/src/content/docs/api/interfaces/Playlist.md
@@ -0,0 +1,54 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "Playlist"
+---
+
+## Properties
+
+### encoded
+
+> **encoded**: `string`
+
+#### Defined in
+
+[src/node/Rest.ts:35](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L35)
+
+***
+
+### info
+
+> **info**: `object`
+
+#### name
+
+> **name**: `string`
+
+#### selectedTrack
+
+> **selectedTrack**: `number`
+
+#### Defined in
+
+[src/node/Rest.ts:36](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L36)
+
+***
+
+### pluginInfo
+
+> **pluginInfo**: `unknown`
+
+#### Defined in
+
+[src/node/Rest.ts:40](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L40)
+
+***
+
+### tracks
+
+> **tracks**: [`Track`](/api/interfaces/track/)[]
+
+#### Defined in
+
+[src/node/Rest.ts:41](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L41)
diff --git a/src/content/docs/api/interfaces/PlaylistResult.md b/src/content/docs/api/interfaces/PlaylistResult.md
new file mode 100644
index 0000000..7967a5e
--- /dev/null
+++ b/src/content/docs/api/interfaces/PlaylistResult.md
@@ -0,0 +1,26 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "PlaylistResult"
+---
+
+## Properties
+
+### data
+
+> **data**: [`Playlist`](/api/interfaces/playlist/)
+
+#### Defined in
+
+[src/node/Rest.ts:57](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L57)
+
+***
+
+### loadType
+
+> **loadType**: [`PLAYLIST`](/api/enumerations/loadtype/#playlist)
+
+#### Defined in
+
+[src/node/Rest.ts:56](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L56)
diff --git a/src/content/docs/api/interfaces/ResumableHeaders.md b/src/content/docs/api/interfaces/ResumableHeaders.md
new file mode 100644
index 0000000..c24d68f
--- /dev/null
+++ b/src/content/docs/api/interfaces/ResumableHeaders.md
@@ -0,0 +1,60 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "ResumableHeaders"
+---
+
+## Indexable
+
+ \[`key`: `string`\]: `string`
+
+## Properties
+
+### Authorization
+
+> **Authorization**: `string`
+
+#### Defined in
+
+[src/node/Node.ts:66](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Node.ts#L66)
+
+***
+
+### Client-Name
+
+> **Client-Name**: `string`
+
+#### Defined in
+
+[src/node/Node.ts:64](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Node.ts#L64)
+
+***
+
+### Session-Id
+
+> **Session-Id**: `string`
+
+#### Defined in
+
+[src/node/Node.ts:68](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Node.ts#L68)
+
+***
+
+### User-Agent
+
+> **User-Agent**: `string`
+
+#### Defined in
+
+[src/node/Node.ts:65](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Node.ts#L65)
+
+***
+
+### User-Id
+
+> **User-Id**: `string`
+
+#### Defined in
+
+[src/node/Node.ts:67](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Node.ts#L67)
diff --git a/src/content/docs/api/interfaces/RotationSettings.md b/src/content/docs/api/interfaces/RotationSettings.md
new file mode 100644
index 0000000..15676ca
--- /dev/null
+++ b/src/content/docs/api/interfaces/RotationSettings.md
@@ -0,0 +1,16 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "RotationSettings"
+---
+
+## Properties
+
+### rotationHz?
+
+> `optional` **rotationHz**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:37](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L37)
diff --git a/src/content/docs/api/interfaces/RoutePlanner.md b/src/content/docs/api/interfaces/RoutePlanner.md
new file mode 100644
index 0000000..73b766f
--- /dev/null
+++ b/src/content/docs/api/interfaces/RoutePlanner.md
@@ -0,0 +1,26 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "RoutePlanner"
+---
+
+## Properties
+
+### class
+
+> **class**: `null` \| `"RotatingIpRoutePlanner"` \| `"NanoIpRoutePlanner"` \| `"RotatingNanoIpRoutePlanner"` \| `"BalancingIpRoutePlanner"`
+
+#### Defined in
+
+[src/node/Rest.ts:84](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L84)
+
+***
+
+### details
+
+> **details**: `null` \| `object`
+
+#### Defined in
+
+[src/node/Rest.ts:85](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L85)
diff --git a/src/content/docs/api/interfaces/SearchResult.md b/src/content/docs/api/interfaces/SearchResult.md
new file mode 100644
index 0000000..33f10fb
--- /dev/null
+++ b/src/content/docs/api/interfaces/SearchResult.md
@@ -0,0 +1,26 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "SearchResult"
+---
+
+## Properties
+
+### data
+
+> **data**: [`Track`](/api/interfaces/track/)[]
+
+#### Defined in
+
+[src/node/Rest.ts:62](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L62)
+
+***
+
+### loadType
+
+> **loadType**: [`SEARCH`](/api/enumerations/loadtype/#search)
+
+#### Defined in
+
+[src/node/Rest.ts:61](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L61)
diff --git a/src/content/docs/api/interfaces/ServerUpdate.md b/src/content/docs/api/interfaces/ServerUpdate.md
new file mode 100644
index 0000000..13d449d
--- /dev/null
+++ b/src/content/docs/api/interfaces/ServerUpdate.md
@@ -0,0 +1,38 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "ServerUpdate"
+---
+
+Represents the payload from a serverUpdate event
+
+## Properties
+
+### endpoint
+
+> **endpoint**: `string`
+
+#### Defined in
+
+[src/guild/Connection.ts:21](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Connection.ts#L21)
+
+***
+
+### guild\_id
+
+> **guild\_id**: `string`
+
+#### Defined in
+
+[src/guild/Connection.ts:20](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Connection.ts#L20)
+
+***
+
+### token
+
+> **token**: `string`
+
+#### Defined in
+
+[src/guild/Connection.ts:19](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Connection.ts#L19)
diff --git a/src/content/docs/api/interfaces/SessionInfo.md b/src/content/docs/api/interfaces/SessionInfo.md
new file mode 100644
index 0000000..cce09be
--- /dev/null
+++ b/src/content/docs/api/interfaces/SessionInfo.md
@@ -0,0 +1,26 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "SessionInfo"
+---
+
+## Properties
+
+### resumingKey?
+
+> `optional` **resumingKey**: `string`
+
+#### Defined in
+
+[src/node/Rest.ts:141](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L141)
+
+***
+
+### timeout
+
+> **timeout**: `number`
+
+#### Defined in
+
+[src/node/Rest.ts:142](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L142)
diff --git a/src/content/docs/api/interfaces/ShoukakuEvents.md b/src/content/docs/api/interfaces/ShoukakuEvents.md
new file mode 100644
index 0000000..523260b
--- /dev/null
+++ b/src/content/docs/api/interfaces/ShoukakuEvents.md
@@ -0,0 +1,90 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "ShoukakuEvents"
+---
+
+## Events
+
+### close
+
+> **close**: [`string`, `number`, `string`]
+
+Emitted when a websocket connection to Lavalink closes
+
+#### Defined in
+
+[src/Shoukaku.ts:124](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Shoukaku.ts#L124)
+
+***
+
+### debug
+
+> **debug**: [`string`, `string`]
+
+Emitted when data useful for debugging is produced
+
+#### Defined in
+
+[src/Shoukaku.ts:109](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Shoukaku.ts#L109)
+
+***
+
+### disconnect
+
+> **disconnect**: [`string`, `number`]
+
+Emitted when a websocket connection to Lavalink disconnects
+
+#### Defined in
+
+[src/Shoukaku.ts:129](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Shoukaku.ts#L129)
+
+***
+
+### error
+
+> **error**: [`string`, `Error`]
+
+Emitted when an error occurs
+
+#### Defined in
+
+[src/Shoukaku.ts:114](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Shoukaku.ts#L114)
+
+***
+
+### raw
+
+> **raw**: [`string`, `unknown`]
+
+Emitted when a raw message is received from Lavalink
+
+#### Defined in
+
+[src/Shoukaku.ts:134](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Shoukaku.ts#L134)
+
+***
+
+### ready
+
+> **ready**: [`string`, `boolean`]
+
+Emitted when Shoukaku is ready to receive operations
+
+#### Defined in
+
+[src/Shoukaku.ts:119](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Shoukaku.ts#L119)
+
+***
+
+### reconnecting
+
+> **reconnecting**: [`string`, `number`, `number`]
+
+Emitted when reconnect tries are occurring and how many tries are left
+
+#### Defined in
+
+[src/Shoukaku.ts:104](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Shoukaku.ts#L104)
diff --git a/src/content/docs/api/interfaces/ShoukakuOptions.md b/src/content/docs/api/interfaces/ShoukakuOptions.md
new file mode 100644
index 0000000..8427b97
--- /dev/null
+++ b/src/content/docs/api/interfaces/ShoukakuOptions.md
@@ -0,0 +1,148 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "ShoukakuOptions"
+---
+
+## Properties
+
+### moveOnDisconnect?
+
+> `optional` **moveOnDisconnect**: `boolean`
+
+Whether to move players to a different Lavalink node when a node disconnects
+
+#### Defined in
+
+[src/Shoukaku.ts:72](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Shoukaku.ts#L72)
+
+***
+
+### nodeResolver()?
+
+> `optional` **nodeResolver**: (`nodes`, `connection`?) => `undefined` \| [`Node`](/api/classes/node/)
+
+Node Resolver to use if you want to customize it
+
+#### Parameters
+
+β’ **nodes**: `Map`\<`string`, [`Node`](/api/classes/node/)\>
+
+β’ **connection?**: [`Connection`](/api/classes/connection/)
+
+#### Returns
+
+`undefined` \| [`Node`](/api/classes/node/)
+
+#### Defined in
+
+[src/Shoukaku.ts:88](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Shoukaku.ts#L88)
+
+***
+
+### reconnectInterval?
+
+> `optional` **reconnectInterval**: `number`
+
+Timeout before trying to reconnect
+
+#### Defined in
+
+[src/Shoukaku.ts:64](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Shoukaku.ts#L64)
+
+***
+
+### reconnectTries?
+
+> `optional` **reconnectTries**: `number`
+
+Number of times to try and reconnect to Lavalink before giving up
+
+#### Defined in
+
+[src/Shoukaku.ts:60](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Shoukaku.ts#L60)
+
+***
+
+### restTimeout?
+
+> `optional` **restTimeout**: `number`
+
+Time to wait for a response from the Lavalink REST API before giving up
+
+#### Defined in
+
+[src/Shoukaku.ts:68](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Shoukaku.ts#L68)
+
+***
+
+### resume?
+
+> `optional` **resume**: `boolean`
+
+Whether to resume a connection on disconnect to Lavalink (Server Side) (Note: DOES NOT RESUME WHEN THE LAVALINK SERVER DIES)
+
+#### Defined in
+
+[src/Shoukaku.ts:48](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Shoukaku.ts#L48)
+
+***
+
+### resumeByLibrary?
+
+> `optional` **resumeByLibrary**: `boolean`
+
+Whether to resume the players by doing it in the library side (Client Side) (Note: TRIES TO RESUME REGARDLESS OF WHAT HAPPENED ON A LAVALINK SERVER)
+
+#### Defined in
+
+[src/Shoukaku.ts:56](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Shoukaku.ts#L56)
+
+***
+
+### resumeTimeout?
+
+> `optional` **resumeTimeout**: `number`
+
+Time to wait before lavalink starts to destroy the players of the disconnected client
+
+#### Defined in
+
+[src/Shoukaku.ts:52](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Shoukaku.ts#L52)
+
+***
+
+### structures?
+
+> `optional` **structures**: [`Structures`](/api/interfaces/structures/)
+
+Custom structures for shoukaku to use
+
+#### Defined in
+
+[src/Shoukaku.ts:80](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Shoukaku.ts#L80)
+
+***
+
+### userAgent?
+
+> `optional` **userAgent**: `string`
+
+User Agent to use when making requests to Lavalink
+
+#### Defined in
+
+[src/Shoukaku.ts:76](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Shoukaku.ts#L76)
+
+***
+
+### voiceConnectionTimeout?
+
+> `optional` **voiceConnectionTimeout**: `number`
+
+Timeout before abort connection
+
+#### Defined in
+
+[src/Shoukaku.ts:84](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Shoukaku.ts#L84)
diff --git a/src/content/docs/api/interfaces/StateUpdatePartial.md b/src/content/docs/api/interfaces/StateUpdatePartial.md
new file mode 100644
index 0000000..5260aff
--- /dev/null
+++ b/src/content/docs/api/interfaces/StateUpdatePartial.md
@@ -0,0 +1,48 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "StateUpdatePartial"
+---
+
+Represents the partial payload from a stateUpdate event
+
+## Properties
+
+### channel\_id?
+
+> `optional` **channel\_id**: `string`
+
+#### Defined in
+
+[src/guild/Connection.ts:9](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Connection.ts#L9)
+
+***
+
+### self\_deaf
+
+> **self\_deaf**: `boolean`
+
+#### Defined in
+
+[src/guild/Connection.ts:11](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Connection.ts#L11)
+
+***
+
+### self\_mute
+
+> **self\_mute**: `boolean`
+
+#### Defined in
+
+[src/guild/Connection.ts:12](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Connection.ts#L12)
+
+***
+
+### session\_id?
+
+> `optional` **session\_id**: `string`
+
+#### Defined in
+
+[src/guild/Connection.ts:10](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Connection.ts#L10)
diff --git a/src/content/docs/api/interfaces/Structures.md b/src/content/docs/api/interfaces/Structures.md
new file mode 100644
index 0000000..dcc7876
--- /dev/null
+++ b/src/content/docs/api/interfaces/Structures.md
@@ -0,0 +1,30 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "Structures"
+---
+
+## Properties
+
+### player?
+
+> `optional` **player**: [`Constructor`](/api/namespaces/utils/type-aliases/constructor/)\<[`Player`](/api/classes/player/)\>
+
+A custom structure that extends the Player class
+
+#### Defined in
+
+[src/Shoukaku.ts:18](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Shoukaku.ts#L18)
+
+***
+
+### rest?
+
+> `optional` **rest**: [`Constructor`](/api/namespaces/utils/type-aliases/constructor/)\<[`Rest`](/api/classes/rest/)\>
+
+A custom structure that extends the Rest class
+
+#### Defined in
+
+[src/Shoukaku.ts:14](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Shoukaku.ts#L14)
diff --git a/src/content/docs/api/interfaces/TimescaleSettings.md b/src/content/docs/api/interfaces/TimescaleSettings.md
new file mode 100644
index 0000000..63e486c
--- /dev/null
+++ b/src/content/docs/api/interfaces/TimescaleSettings.md
@@ -0,0 +1,36 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "TimescaleSettings"
+---
+
+## Properties
+
+### pitch?
+
+> `optional` **pitch**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:27](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L27)
+
+***
+
+### rate?
+
+> `optional` **rate**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:28](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L28)
+
+***
+
+### speed?
+
+> `optional` **speed**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:26](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L26)
diff --git a/src/content/docs/api/interfaces/Track.md b/src/content/docs/api/interfaces/Track.md
new file mode 100644
index 0000000..12859b1
--- /dev/null
+++ b/src/content/docs/api/interfaces/Track.md
@@ -0,0 +1,80 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "Track"
+---
+
+## Properties
+
+### encoded
+
+> **encoded**: `string`
+
+#### Defined in
+
+[src/node/Rest.ts:17](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L17)
+
+***
+
+### info
+
+> **info**: `object`
+
+#### artworkUrl?
+
+> `optional` **artworkUrl**: `string`
+
+#### author
+
+> **author**: `string`
+
+#### identifier
+
+> **identifier**: `string`
+
+#### isSeekable
+
+> **isSeekable**: `boolean`
+
+#### isStream
+
+> **isStream**: `boolean`
+
+#### isrc?
+
+> `optional` **isrc**: `string`
+
+#### length
+
+> **length**: `number`
+
+#### position
+
+> **position**: `number`
+
+#### sourceName
+
+> **sourceName**: `string`
+
+#### title
+
+> **title**: `string`
+
+#### uri?
+
+> `optional` **uri**: `string`
+
+#### Defined in
+
+[src/node/Rest.ts:18](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L18)
+
+***
+
+### pluginInfo
+
+> **pluginInfo**: `unknown`
+
+#### Defined in
+
+[src/node/Rest.ts:31](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L31)
diff --git a/src/content/docs/api/interfaces/TrackEndEvent.md b/src/content/docs/api/interfaces/TrackEndEvent.md
new file mode 100644
index 0000000..c13a50f
--- /dev/null
+++ b/src/content/docs/api/interfaces/TrackEndEvent.md
@@ -0,0 +1,72 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "TrackEndEvent"
+---
+
+## Extends
+
+- [`PlayerEvent`](/api/interfaces/playerevent/)
+
+## Properties
+
+### guildId
+
+> **guildId**: `string`
+
+#### Inherited from
+
+[`PlayerEvent`](/api/interfaces/playerevent/).[`guildId`](/api/interfaces/playerevent/#guildid)
+
+#### Defined in
+
+[src/guild/Player.ts:65](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L65)
+
+***
+
+### op
+
+> **op**: [`EVENT`](/api/namespaces/constants/enumerations/opcodes/#event)
+
+#### Inherited from
+
+[`PlayerEvent`](/api/interfaces/playerevent/).[`op`](/api/interfaces/playerevent/#op)
+
+#### Defined in
+
+[src/guild/Player.ts:63](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L63)
+
+***
+
+### reason
+
+> **reason**: [`TrackEndReason`](/api/type-aliases/trackendreason/)
+
+#### Defined in
+
+[src/guild/Player.ts:76](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L76)
+
+***
+
+### track
+
+> **track**: [`Track`](/api/interfaces/track/)
+
+#### Defined in
+
+[src/guild/Player.ts:75](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L75)
+
+***
+
+### type
+
+> **type**: `"TrackEndEvent"`
+
+#### Overrides
+
+[`PlayerEvent`](/api/interfaces/playerevent/).[`type`](/api/interfaces/playerevent/#type)
+
+#### Defined in
+
+[src/guild/Player.ts:74](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L74)
diff --git a/src/content/docs/api/interfaces/TrackExceptionEvent.md b/src/content/docs/api/interfaces/TrackExceptionEvent.md
new file mode 100644
index 0000000..ceaa51f
--- /dev/null
+++ b/src/content/docs/api/interfaces/TrackExceptionEvent.md
@@ -0,0 +1,62 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "TrackExceptionEvent"
+---
+
+## Extends
+
+- [`PlayerEvent`](/api/interfaces/playerevent/)
+
+## Properties
+
+### exception
+
+> **exception**: [`Exception`](/api/interfaces/exception/)
+
+#### Defined in
+
+[src/guild/Player.ts:87](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L87)
+
+***
+
+### guildId
+
+> **guildId**: `string`
+
+#### Inherited from
+
+[`PlayerEvent`](/api/interfaces/playerevent/).[`guildId`](/api/interfaces/playerevent/#guildid)
+
+#### Defined in
+
+[src/guild/Player.ts:65](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L65)
+
+***
+
+### op
+
+> **op**: [`EVENT`](/api/namespaces/constants/enumerations/opcodes/#event)
+
+#### Inherited from
+
+[`PlayerEvent`](/api/interfaces/playerevent/).[`op`](/api/interfaces/playerevent/#op)
+
+#### Defined in
+
+[src/guild/Player.ts:63](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L63)
+
+***
+
+### type
+
+> **type**: `"TrackExceptionEvent"`
+
+#### Overrides
+
+[`PlayerEvent`](/api/interfaces/playerevent/).[`type`](/api/interfaces/playerevent/#type)
+
+#### Defined in
+
+[src/guild/Player.ts:86](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L86)
diff --git a/src/content/docs/api/interfaces/TrackResult.md b/src/content/docs/api/interfaces/TrackResult.md
new file mode 100644
index 0000000..27dbced
--- /dev/null
+++ b/src/content/docs/api/interfaces/TrackResult.md
@@ -0,0 +1,26 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "TrackResult"
+---
+
+## Properties
+
+### data
+
+> **data**: [`Track`](/api/interfaces/track/)
+
+#### Defined in
+
+[src/node/Rest.ts:52](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L52)
+
+***
+
+### loadType
+
+> **loadType**: [`TRACK`](/api/enumerations/loadtype/#track)
+
+#### Defined in
+
+[src/node/Rest.ts:51](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L51)
diff --git a/src/content/docs/api/interfaces/TrackStartEvent.md b/src/content/docs/api/interfaces/TrackStartEvent.md
new file mode 100644
index 0000000..96ab4ca
--- /dev/null
+++ b/src/content/docs/api/interfaces/TrackStartEvent.md
@@ -0,0 +1,62 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "TrackStartEvent"
+---
+
+## Extends
+
+- [`PlayerEvent`](/api/interfaces/playerevent/)
+
+## Properties
+
+### guildId
+
+> **guildId**: `string`
+
+#### Inherited from
+
+[`PlayerEvent`](/api/interfaces/playerevent/).[`guildId`](/api/interfaces/playerevent/#guildid)
+
+#### Defined in
+
+[src/guild/Player.ts:65](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L65)
+
+***
+
+### op
+
+> **op**: [`EVENT`](/api/namespaces/constants/enumerations/opcodes/#event)
+
+#### Inherited from
+
+[`PlayerEvent`](/api/interfaces/playerevent/).[`op`](/api/interfaces/playerevent/#op)
+
+#### Defined in
+
+[src/guild/Player.ts:63](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L63)
+
+***
+
+### track
+
+> **track**: [`Track`](/api/interfaces/track/)
+
+#### Defined in
+
+[src/guild/Player.ts:70](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L70)
+
+***
+
+### type
+
+> **type**: `"TrackStartEvent"`
+
+#### Overrides
+
+[`PlayerEvent`](/api/interfaces/playerevent/).[`type`](/api/interfaces/playerevent/#type)
+
+#### Defined in
+
+[src/guild/Player.ts:69](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L69)
diff --git a/src/content/docs/api/interfaces/TrackStuckEvent.md b/src/content/docs/api/interfaces/TrackStuckEvent.md
new file mode 100644
index 0000000..7bbee8b
--- /dev/null
+++ b/src/content/docs/api/interfaces/TrackStuckEvent.md
@@ -0,0 +1,72 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "TrackStuckEvent"
+---
+
+## Extends
+
+- [`PlayerEvent`](/api/interfaces/playerevent/)
+
+## Properties
+
+### guildId
+
+> **guildId**: `string`
+
+#### Inherited from
+
+[`PlayerEvent`](/api/interfaces/playerevent/).[`guildId`](/api/interfaces/playerevent/#guildid)
+
+#### Defined in
+
+[src/guild/Player.ts:65](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L65)
+
+***
+
+### op
+
+> **op**: [`EVENT`](/api/namespaces/constants/enumerations/opcodes/#event)
+
+#### Inherited from
+
+[`PlayerEvent`](/api/interfaces/playerevent/).[`op`](/api/interfaces/playerevent/#op)
+
+#### Defined in
+
+[src/guild/Player.ts:63](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L63)
+
+***
+
+### thresholdMs
+
+> **thresholdMs**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:82](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L82)
+
+***
+
+### track
+
+> **track**: [`Track`](/api/interfaces/track/)
+
+#### Defined in
+
+[src/guild/Player.ts:81](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L81)
+
+***
+
+### type
+
+> **type**: `"TrackStuckEvent"`
+
+#### Inherited from
+
+[`PlayerEvent`](/api/interfaces/playerevent/).[`type`](/api/interfaces/playerevent/#type)
+
+#### Defined in
+
+[src/guild/Player.ts:80](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L80)
diff --git a/src/content/docs/api/interfaces/UpdatePlayerInfo.md b/src/content/docs/api/interfaces/UpdatePlayerInfo.md
new file mode 100644
index 0000000..e70f851
--- /dev/null
+++ b/src/content/docs/api/interfaces/UpdatePlayerInfo.md
@@ -0,0 +1,36 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "UpdatePlayerInfo"
+---
+
+## Properties
+
+### guildId
+
+> **guildId**: `string`
+
+#### Defined in
+
+[src/node/Rest.ts:135](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L135)
+
+***
+
+### noReplace?
+
+> `optional` **noReplace**: `boolean`
+
+#### Defined in
+
+[src/node/Rest.ts:137](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L137)
+
+***
+
+### playerOptions
+
+> **playerOptions**: [`UpdatePlayerOptions`](/api/interfaces/updateplayeroptions/)
+
+#### Defined in
+
+[src/node/Rest.ts:136](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L136)
diff --git a/src/content/docs/api/interfaces/UpdatePlayerOptions.md b/src/content/docs/api/interfaces/UpdatePlayerOptions.md
new file mode 100644
index 0000000..f068a63
--- /dev/null
+++ b/src/content/docs/api/interfaces/UpdatePlayerOptions.md
@@ -0,0 +1,76 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "UpdatePlayerOptions"
+---
+
+## Properties
+
+### endTime?
+
+> `optional` **endTime**: `number`
+
+#### Defined in
+
+[src/node/Rest.ts:127](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L127)
+
+***
+
+### filters?
+
+> `optional` **filters**: [`FilterOptions`](/api/interfaces/filteroptions/)
+
+#### Defined in
+
+[src/node/Rest.ts:130](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L130)
+
+***
+
+### paused?
+
+> `optional` **paused**: `boolean`
+
+#### Defined in
+
+[src/node/Rest.ts:129](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L129)
+
+***
+
+### position?
+
+> `optional` **position**: `number`
+
+#### Defined in
+
+[src/node/Rest.ts:126](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L126)
+
+***
+
+### track?
+
+> `optional` **track**: [`UpdatePlayerTrackOptions`](/api/interfaces/updateplayertrackoptions/)
+
+#### Defined in
+
+[src/node/Rest.ts:125](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L125)
+
+***
+
+### voice?
+
+> `optional` **voice**: [`LavalinkPlayerVoiceOptions`](/api/interfaces/lavalinkplayervoiceoptions/)
+
+#### Defined in
+
+[src/node/Rest.ts:131](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L131)
+
+***
+
+### volume?
+
+> `optional` **volume**: `number`
+
+#### Defined in
+
+[src/node/Rest.ts:128](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L128)
diff --git a/src/content/docs/api/interfaces/UpdatePlayerTrackOptions.md b/src/content/docs/api/interfaces/UpdatePlayerTrackOptions.md
new file mode 100644
index 0000000..e8029e6
--- /dev/null
+++ b/src/content/docs/api/interfaces/UpdatePlayerTrackOptions.md
@@ -0,0 +1,36 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "UpdatePlayerTrackOptions"
+---
+
+## Properties
+
+### encoded?
+
+> `optional` **encoded**: `null` \| `string`
+
+#### Defined in
+
+[src/node/Rest.ts:119](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L119)
+
+***
+
+### identifier?
+
+> `optional` **identifier**: `string`
+
+#### Defined in
+
+[src/node/Rest.ts:120](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L120)
+
+***
+
+### userData?
+
+> `optional` **userData**: `unknown`
+
+#### Defined in
+
+[src/node/Rest.ts:121](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L121)
diff --git a/src/content/docs/api/interfaces/VoiceChannelOptions.md b/src/content/docs/api/interfaces/VoiceChannelOptions.md
new file mode 100644
index 0000000..9ef3a17
--- /dev/null
+++ b/src/content/docs/api/interfaces/VoiceChannelOptions.md
@@ -0,0 +1,56 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "VoiceChannelOptions"
+---
+
+## Properties
+
+### channelId
+
+> **channelId**: `string`
+
+#### Defined in
+
+[src/Shoukaku.ts:94](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Shoukaku.ts#L94)
+
+***
+
+### deaf?
+
+> `optional` **deaf**: `boolean`
+
+#### Defined in
+
+[src/Shoukaku.ts:95](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Shoukaku.ts#L95)
+
+***
+
+### guildId
+
+> **guildId**: `string`
+
+#### Defined in
+
+[src/Shoukaku.ts:92](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Shoukaku.ts#L92)
+
+***
+
+### mute?
+
+> `optional` **mute**: `boolean`
+
+#### Defined in
+
+[src/Shoukaku.ts:96](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Shoukaku.ts#L96)
+
+***
+
+### shardId
+
+> **shardId**: `number`
+
+#### Defined in
+
+[src/Shoukaku.ts:93](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Shoukaku.ts#L93)
diff --git a/src/content/docs/api/interfaces/WebSocketClosedEvent.md b/src/content/docs/api/interfaces/WebSocketClosedEvent.md
new file mode 100644
index 0000000..d7eaf7e
--- /dev/null
+++ b/src/content/docs/api/interfaces/WebSocketClosedEvent.md
@@ -0,0 +1,82 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "WebSocketClosedEvent"
+---
+
+## Extends
+
+- [`PlayerEvent`](/api/interfaces/playerevent/)
+
+## Properties
+
+### byRemote
+
+> **byRemote**: `boolean`
+
+#### Defined in
+
+[src/guild/Player.ts:98](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L98)
+
+***
+
+### code
+
+> **code**: `number`
+
+#### Defined in
+
+[src/guild/Player.ts:97](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L97)
+
+***
+
+### guildId
+
+> **guildId**: `string`
+
+#### Inherited from
+
+[`PlayerEvent`](/api/interfaces/playerevent/).[`guildId`](/api/interfaces/playerevent/#guildid)
+
+#### Defined in
+
+[src/guild/Player.ts:65](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L65)
+
+***
+
+### op
+
+> **op**: [`EVENT`](/api/namespaces/constants/enumerations/opcodes/#event)
+
+#### Inherited from
+
+[`PlayerEvent`](/api/interfaces/playerevent/).[`op`](/api/interfaces/playerevent/#op)
+
+#### Defined in
+
+[src/guild/Player.ts:63](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L63)
+
+***
+
+### reason
+
+> **reason**: `string`
+
+#### Defined in
+
+[src/guild/Player.ts:99](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L99)
+
+***
+
+### type
+
+> **type**: `"WebSocketClosedEvent"`
+
+#### Overrides
+
+[`PlayerEvent`](/api/interfaces/playerevent/).[`type`](/api/interfaces/playerevent/#type)
+
+#### Defined in
+
+[src/guild/Player.ts:96](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L96)
diff --git a/src/content/docs/api/namespaces/Connectors/classes/DiscordJS.md b/src/content/docs/api/namespaces/Connectors/classes/DiscordJS.md
new file mode 100644
index 0000000..7efddcd
--- /dev/null
+++ b/src/content/docs/api/namespaces/Connectors/classes/DiscordJS.md
@@ -0,0 +1,120 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "DiscordJS"
+---
+
+## Extends
+
+- [`Connector`](/api/classes/connector/)
+
+## Constructors
+
+### new DiscordJS()
+
+> **new DiscordJS**(`client`): [`DiscordJS`](/api/namespaces/connectors/classes/discordjs/)
+
+#### Parameters
+
+β’ **client**: `any`
+
+#### Returns
+
+[`DiscordJS`](/api/namespaces/connectors/classes/discordjs/)
+
+#### Inherited from
+
+[`Connector`](/api/classes/connector/).[`constructor`](/api/classes/connector/#constructors)
+
+#### Defined in
+
+[src/connectors/Connector.ts:15](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/connectors/Connector.ts#L15)
+
+## Methods
+
+### getId()
+
+> **getId**(): `string`
+
+#### Returns
+
+`string`
+
+#### Overrides
+
+[`Connector`](/api/classes/connector/).[`getId`](/api/classes/connector/#getid)
+
+#### Defined in
+
+[src/connectors/libs/DiscordJS.ts:10](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/connectors/libs/DiscordJS.ts#L10)
+
+***
+
+### listen()
+
+> **listen**(`nodes`): `void`
+
+#### Parameters
+
+β’ **nodes**: [`NodeOption`](/api/interfaces/nodeoption/)[]
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[`Connector`](/api/classes/connector/).[`listen`](/api/classes/connector/#listen)
+
+#### Defined in
+
+[src/connectors/libs/DiscordJS.ts:14](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/connectors/libs/DiscordJS.ts#L14)
+
+***
+
+### sendPacket()
+
+> **sendPacket**(`shardId`, `payload`, `important`): `void`
+
+#### Parameters
+
+β’ **shardId**: `number`
+
+β’ **payload**: `any`
+
+β’ **important**: `boolean`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[`Connector`](/api/classes/connector/).[`sendPacket`](/api/classes/connector/#sendpacket)
+
+#### Defined in
+
+[src/connectors/libs/DiscordJS.ts:6](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/connectors/libs/DiscordJS.ts#L6)
+
+***
+
+### set()
+
+> **set**(`manager`): [`Connector`](/api/classes/connector/)
+
+#### Parameters
+
+β’ **manager**: [`Shoukaku`](/api/classes/shoukaku/)
+
+#### Returns
+
+[`Connector`](/api/classes/connector/)
+
+#### Inherited from
+
+[`Connector`](/api/classes/connector/).[`set`](/api/classes/connector/#set)
+
+#### Defined in
+
+[src/connectors/Connector.ts:20](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/connectors/Connector.ts#L20)
diff --git a/src/content/docs/api/namespaces/Connectors/classes/Eris.md b/src/content/docs/api/namespaces/Connectors/classes/Eris.md
new file mode 100644
index 0000000..a303aae
--- /dev/null
+++ b/src/content/docs/api/namespaces/Connectors/classes/Eris.md
@@ -0,0 +1,120 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "Eris"
+---
+
+## Extends
+
+- [`Connector`](/api/classes/connector/)
+
+## Constructors
+
+### new Eris()
+
+> **new Eris**(`client`): [`Eris`](/api/namespaces/connectors/classes/eris/)
+
+#### Parameters
+
+β’ **client**: `any`
+
+#### Returns
+
+[`Eris`](/api/namespaces/connectors/classes/eris/)
+
+#### Inherited from
+
+[`Connector`](/api/classes/connector/).[`constructor`](/api/classes/connector/#constructors)
+
+#### Defined in
+
+[src/connectors/Connector.ts:15](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/connectors/Connector.ts#L15)
+
+## Methods
+
+### getId()
+
+> **getId**(): `string`
+
+#### Returns
+
+`string`
+
+#### Overrides
+
+[`Connector`](/api/classes/connector/).[`getId`](/api/classes/connector/#getid)
+
+#### Defined in
+
+[src/connectors/libs/Eris.ts:10](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/connectors/libs/Eris.ts#L10)
+
+***
+
+### listen()
+
+> **listen**(`nodes`): `void`
+
+#### Parameters
+
+β’ **nodes**: [`NodeOption`](/api/interfaces/nodeoption/)[]
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[`Connector`](/api/classes/connector/).[`listen`](/api/classes/connector/#listen)
+
+#### Defined in
+
+[src/connectors/libs/Eris.ts:14](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/connectors/libs/Eris.ts#L14)
+
+***
+
+### sendPacket()
+
+> **sendPacket**(`shardId`, `payload`, `important`): `void`
+
+#### Parameters
+
+β’ **shardId**: `number`
+
+β’ **payload**: `any`
+
+β’ **important**: `boolean`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[`Connector`](/api/classes/connector/).[`sendPacket`](/api/classes/connector/#sendpacket)
+
+#### Defined in
+
+[src/connectors/libs/Eris.ts:6](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/connectors/libs/Eris.ts#L6)
+
+***
+
+### set()
+
+> **set**(`manager`): [`Connector`](/api/classes/connector/)
+
+#### Parameters
+
+β’ **manager**: [`Shoukaku`](/api/classes/shoukaku/)
+
+#### Returns
+
+[`Connector`](/api/classes/connector/)
+
+#### Inherited from
+
+[`Connector`](/api/classes/connector/).[`set`](/api/classes/connector/#set)
+
+#### Defined in
+
+[src/connectors/Connector.ts:20](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/connectors/Connector.ts#L20)
diff --git a/src/content/docs/api/namespaces/Connectors/classes/OceanicJS.md b/src/content/docs/api/namespaces/Connectors/classes/OceanicJS.md
new file mode 100644
index 0000000..a45226b
--- /dev/null
+++ b/src/content/docs/api/namespaces/Connectors/classes/OceanicJS.md
@@ -0,0 +1,120 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "OceanicJS"
+---
+
+## Extends
+
+- [`Connector`](/api/classes/connector/)
+
+## Constructors
+
+### new OceanicJS()
+
+> **new OceanicJS**(`client`): [`OceanicJS`](/api/namespaces/connectors/classes/oceanicjs/)
+
+#### Parameters
+
+β’ **client**: `any`
+
+#### Returns
+
+[`OceanicJS`](/api/namespaces/connectors/classes/oceanicjs/)
+
+#### Inherited from
+
+[`Connector`](/api/classes/connector/).[`constructor`](/api/classes/connector/#constructors)
+
+#### Defined in
+
+[src/connectors/Connector.ts:15](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/connectors/Connector.ts#L15)
+
+## Methods
+
+### getId()
+
+> **getId**(): `string`
+
+#### Returns
+
+`string`
+
+#### Overrides
+
+[`Connector`](/api/classes/connector/).[`getId`](/api/classes/connector/#getid)
+
+#### Defined in
+
+[src/connectors/libs/OceanicJS.ts:10](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/connectors/libs/OceanicJS.ts#L10)
+
+***
+
+### listen()
+
+> **listen**(`nodes`): `void`
+
+#### Parameters
+
+β’ **nodes**: [`NodeOption`](/api/interfaces/nodeoption/)[]
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[`Connector`](/api/classes/connector/).[`listen`](/api/classes/connector/#listen)
+
+#### Defined in
+
+[src/connectors/libs/OceanicJS.ts:14](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/connectors/libs/OceanicJS.ts#L14)
+
+***
+
+### sendPacket()
+
+> **sendPacket**(`shardId`, `payload`, `important`): `void`
+
+#### Parameters
+
+β’ **shardId**: `number`
+
+β’ **payload**: `any`
+
+β’ **important**: `boolean`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[`Connector`](/api/classes/connector/).[`sendPacket`](/api/classes/connector/#sendpacket)
+
+#### Defined in
+
+[src/connectors/libs/OceanicJS.ts:6](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/connectors/libs/OceanicJS.ts#L6)
+
+***
+
+### set()
+
+> **set**(`manager`): [`Connector`](/api/classes/connector/)
+
+#### Parameters
+
+β’ **manager**: [`Shoukaku`](/api/classes/shoukaku/)
+
+#### Returns
+
+[`Connector`](/api/classes/connector/)
+
+#### Inherited from
+
+[`Connector`](/api/classes/connector/).[`set`](/api/classes/connector/#set)
+
+#### Defined in
+
+[src/connectors/Connector.ts:20](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/connectors/Connector.ts#L20)
diff --git a/src/content/docs/api/namespaces/Connectors/classes/Seyfert.md b/src/content/docs/api/namespaces/Connectors/classes/Seyfert.md
new file mode 100644
index 0000000..f17d78b
--- /dev/null
+++ b/src/content/docs/api/namespaces/Connectors/classes/Seyfert.md
@@ -0,0 +1,120 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "Seyfert"
+---
+
+## Extends
+
+- [`Connector`](/api/classes/connector/)
+
+## Constructors
+
+### new Seyfert()
+
+> **new Seyfert**(`client`): [`Seyfert`](/api/namespaces/connectors/classes/seyfert/)
+
+#### Parameters
+
+β’ **client**: `any`
+
+#### Returns
+
+[`Seyfert`](/api/namespaces/connectors/classes/seyfert/)
+
+#### Inherited from
+
+[`Connector`](/api/classes/connector/).[`constructor`](/api/classes/connector/#constructors)
+
+#### Defined in
+
+[src/connectors/Connector.ts:15](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/connectors/Connector.ts#L15)
+
+## Methods
+
+### getId()
+
+> **getId**(): `string`
+
+#### Returns
+
+`string`
+
+#### Overrides
+
+[`Connector`](/api/classes/connector/).[`getId`](/api/classes/connector/#getid)
+
+#### Defined in
+
+[src/connectors/libs/Seyfert.ts:10](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/connectors/libs/Seyfert.ts#L10)
+
+***
+
+### listen()
+
+> **listen**(`nodes`): `void`
+
+#### Parameters
+
+β’ **nodes**: [`NodeOption`](/api/interfaces/nodeoption/)[]
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[`Connector`](/api/classes/connector/).[`listen`](/api/classes/connector/#listen)
+
+#### Defined in
+
+[src/connectors/libs/Seyfert.ts:14](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/connectors/libs/Seyfert.ts#L14)
+
+***
+
+### sendPacket()
+
+> **sendPacket**(`shardId`, `payload`, `important`): `void`
+
+#### Parameters
+
+β’ **shardId**: `number`
+
+β’ **payload**: `any`
+
+β’ **important**: `boolean`
+
+#### Returns
+
+`void`
+
+#### Overrides
+
+[`Connector`](/api/classes/connector/).[`sendPacket`](/api/classes/connector/#sendpacket)
+
+#### Defined in
+
+[src/connectors/libs/Seyfert.ts:6](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/connectors/libs/Seyfert.ts#L6)
+
+***
+
+### set()
+
+> **set**(`manager`): [`Connector`](/api/classes/connector/)
+
+#### Parameters
+
+β’ **manager**: [`Shoukaku`](/api/classes/shoukaku/)
+
+#### Returns
+
+[`Connector`](/api/classes/connector/)
+
+#### Inherited from
+
+[`Connector`](/api/classes/connector/).[`set`](/api/classes/connector/#set)
+
+#### Defined in
+
+[src/connectors/Connector.ts:20](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/connectors/Connector.ts#L20)
diff --git a/src/content/docs/api/namespaces/Constants/enumerations/OpCodes.md b/src/content/docs/api/namespaces/Constants/enumerations/OpCodes.md
new file mode 100644
index 0000000..c0accce
--- /dev/null
+++ b/src/content/docs/api/namespaces/Constants/enumerations/OpCodes.md
@@ -0,0 +1,46 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "OpCodes"
+---
+
+## Enumeration Members
+
+### EVENT
+
+> **EVENT**: `"event"`
+
+#### Defined in
+
+[src/Constants.ts:23](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Constants.ts#L23)
+
+***
+
+### PLAYER\_UPDATE
+
+> **PLAYER\_UPDATE**: `"playerUpdate"`
+
+#### Defined in
+
+[src/Constants.ts:21](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Constants.ts#L21)
+
+***
+
+### READY
+
+> **READY**: `"ready"`
+
+#### Defined in
+
+[src/Constants.ts:24](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Constants.ts#L24)
+
+***
+
+### STATS
+
+> **STATS**: `"stats"`
+
+#### Defined in
+
+[src/Constants.ts:22](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Constants.ts#L22)
diff --git a/src/content/docs/api/namespaces/Constants/enumerations/State.md b/src/content/docs/api/namespaces/Constants/enumerations/State.md
new file mode 100644
index 0000000..4d74b09
--- /dev/null
+++ b/src/content/docs/api/namespaces/Constants/enumerations/State.md
@@ -0,0 +1,66 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "State"
+---
+
+## Enumeration Members
+
+### CONNECTED
+
+> **CONNECTED**: `2`
+
+#### Defined in
+
+[src/Constants.ts:7](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Constants.ts#L7)
+
+***
+
+### CONNECTING
+
+> **CONNECTING**: `0`
+
+#### Defined in
+
+[src/Constants.ts:5](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Constants.ts#L5)
+
+***
+
+### DISCONNECTED
+
+> **DISCONNECTED**: `5`
+
+#### Defined in
+
+[src/Constants.ts:10](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Constants.ts#L10)
+
+***
+
+### DISCONNECTING
+
+> **DISCONNECTING**: `4`
+
+#### Defined in
+
+[src/Constants.ts:9](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Constants.ts#L9)
+
+***
+
+### NEARLY
+
+> **NEARLY**: `1`
+
+#### Defined in
+
+[src/Constants.ts:6](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Constants.ts#L6)
+
+***
+
+### RECONNECTING
+
+> **RECONNECTING**: `3`
+
+#### Defined in
+
+[src/Constants.ts:8](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Constants.ts#L8)
diff --git a/src/content/docs/api/namespaces/Constants/enumerations/Versions.md b/src/content/docs/api/namespaces/Constants/enumerations/Versions.md
new file mode 100644
index 0000000..8890959
--- /dev/null
+++ b/src/content/docs/api/namespaces/Constants/enumerations/Versions.md
@@ -0,0 +1,26 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "Versions"
+---
+
+## Enumeration Members
+
+### REST\_VERSION
+
+> **REST\_VERSION**: `4`
+
+#### Defined in
+
+[src/Constants.ts:28](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Constants.ts#L28)
+
+***
+
+### WEBSOCKET\_VERSION
+
+> **WEBSOCKET\_VERSION**: `4`
+
+#### Defined in
+
+[src/Constants.ts:29](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Constants.ts#L29)
diff --git a/src/content/docs/api/namespaces/Constants/enumerations/VoiceState.md b/src/content/docs/api/namespaces/Constants/enumerations/VoiceState.md
new file mode 100644
index 0000000..9a46e30
--- /dev/null
+++ b/src/content/docs/api/namespaces/Constants/enumerations/VoiceState.md
@@ -0,0 +1,46 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "VoiceState"
+---
+
+## Enumeration Members
+
+### SESSION\_ENDPOINT\_MISSING
+
+> **SESSION\_ENDPOINT\_MISSING**: `2`
+
+#### Defined in
+
+[src/Constants.ts:16](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Constants.ts#L16)
+
+***
+
+### SESSION\_FAILED\_UPDATE
+
+> **SESSION\_FAILED\_UPDATE**: `3`
+
+#### Defined in
+
+[src/Constants.ts:17](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Constants.ts#L17)
+
+***
+
+### SESSION\_ID\_MISSING
+
+> **SESSION\_ID\_MISSING**: `1`
+
+#### Defined in
+
+[src/Constants.ts:15](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Constants.ts#L15)
+
+***
+
+### SESSION\_READY
+
+> **SESSION\_READY**: `0`
+
+#### Defined in
+
+[src/Constants.ts:14](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Constants.ts#L14)
diff --git a/src/content/docs/api/namespaces/Constants/variables/NodeDefaults.md b/src/content/docs/api/namespaces/Constants/variables/NodeDefaults.md
new file mode 100644
index 0000000..2d9b059
--- /dev/null
+++ b/src/content/docs/api/namespaces/Constants/variables/NodeDefaults.md
@@ -0,0 +1,12 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "NodeDefaults"
+---
+
+> `const` **NodeDefaults**: [`NodeOption`](/api/interfaces/nodeoption/)
+
+## Defined in
+
+[src/Constants.ts:49](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Constants.ts#L49)
diff --git a/src/content/docs/api/namespaces/Constants/variables/ShoukakuDefaults.md b/src/content/docs/api/namespaces/Constants/variables/ShoukakuDefaults.md
new file mode 100644
index 0000000..b238e0d
--- /dev/null
+++ b/src/content/docs/api/namespaces/Constants/variables/ShoukakuDefaults.md
@@ -0,0 +1,12 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "ShoukakuDefaults"
+---
+
+> `const` **ShoukakuDefaults**: `Required`\<[`ShoukakuOptions`](/api/interfaces/shoukakuoptions/)\>
+
+## Defined in
+
+[src/Constants.ts:32](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Constants.ts#L32)
diff --git a/src/content/docs/api/namespaces/Utils/functions/mergeDefault.md b/src/content/docs/api/namespaces/Utils/functions/mergeDefault.md
new file mode 100644
index 0000000..3be450d
--- /dev/null
+++ b/src/content/docs/api/namespaces/Utils/functions/mergeDefault.md
@@ -0,0 +1,34 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "mergeDefault"
+---
+
+> **mergeDefault**\<`T`\>(`def`, `given`): `Required`\<`T`\>
+
+Merge the default options to user input
+
+## Type Parameters
+
+β’ **T** *extends* `object`
+
+## Parameters
+
+β’ **def**: `T`
+
+Default options
+
+β’ **given**: `T`
+
+User input
+
+## Returns
+
+`Required`\<`T`\>
+
+Merged options
+
+## Defined in
+
+[src/Utils.ts:9](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Utils.ts#L9)
diff --git a/src/content/docs/api/namespaces/Utils/functions/wait.md b/src/content/docs/api/namespaces/Utils/functions/wait.md
new file mode 100644
index 0000000..335fdaa
--- /dev/null
+++ b/src/content/docs/api/namespaces/Utils/functions/wait.md
@@ -0,0 +1,26 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "wait"
+---
+
+> **wait**(`ms`): `Promise`\<`void`\>
+
+Wait for a specific amount of time (timeout)
+
+## Parameters
+
+β’ **ms**: `number`
+
+Time to wait in milliseconds
+
+## Returns
+
+`Promise`\<`void`\>
+
+A promise that resolves in x seconds
+
+## Defined in
+
+[src/Utils.ts:30](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Utils.ts#L30)
diff --git a/src/content/docs/api/namespaces/Utils/type-aliases/Constructor.md b/src/content/docs/api/namespaces/Utils/type-aliases/Constructor.md
new file mode 100644
index 0000000..c63f670
--- /dev/null
+++ b/src/content/docs/api/namespaces/Utils/type-aliases/Constructor.md
@@ -0,0 +1,24 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "Constructor"
+---
+
+> **Constructor**\<`T`\>: (...`args`) => `T`
+
+## Type Parameters
+
+β’ **T**
+
+## Parameters
+
+β’ ...**args**: `any`[]
+
+## Returns
+
+`T`
+
+## Defined in
+
+[src/Utils.ts:1](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/Utils.ts#L1)
diff --git a/src/content/docs/api/type-aliases/LavalinkResponse.md b/src/content/docs/api/type-aliases/LavalinkResponse.md
new file mode 100644
index 0000000..b80ebf3
--- /dev/null
+++ b/src/content/docs/api/type-aliases/LavalinkResponse.md
@@ -0,0 +1,12 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "LavalinkResponse"
+---
+
+> **LavalinkResponse**: [`TrackResult`](/api/interfaces/trackresult/) \| [`PlaylistResult`](/api/interfaces/playlistresult/) \| [`SearchResult`](/api/interfaces/searchresult/) \| [`EmptyResult`](/api/interfaces/emptyresult/) \| [`ErrorResult`](/api/interfaces/errorresult/)
+
+## Defined in
+
+[src/node/Rest.ts:75](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L75)
diff --git a/src/content/docs/api/type-aliases/NodeInfo.md b/src/content/docs/api/type-aliases/NodeInfo.md
new file mode 100644
index 0000000..156956a
--- /dev/null
+++ b/src/content/docs/api/type-aliases/NodeInfo.md
@@ -0,0 +1,46 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "NodeInfo"
+---
+
+> **NodeInfo**: `object`
+
+## Type declaration
+
+### buildTime
+
+> **buildTime**: `number`
+
+### filters
+
+> **filters**: `string`[]
+
+### git
+
+> **git**: `NodeInfoGit`
+
+### jvm
+
+> **jvm**: `string`
+
+### lavaplayer
+
+> **lavaplayer**: `string`
+
+### plugins
+
+> **plugins**: `NodeInfoPlugin`[]
+
+### sourceManagers
+
+> **sourceManagers**: `string`[]
+
+### version
+
+> **version**: `NodeInfoVersion`
+
+## Defined in
+
+[src/node/Node.ts:51](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Node.ts#L51)
diff --git a/src/content/docs/api/type-aliases/PlayOptions.md b/src/content/docs/api/type-aliases/PlayOptions.md
new file mode 100644
index 0000000..5ed9d02
--- /dev/null
+++ b/src/content/docs/api/type-aliases/PlayOptions.md
@@ -0,0 +1,12 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "PlayOptions"
+---
+
+> **PlayOptions**: `Omit`\<[`UpdatePlayerOptions`](/api/interfaces/updateplayeroptions/), `"filters"` \| `"voice"`\>
+
+## Defined in
+
+[src/guild/Player.ts:10](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L10)
diff --git a/src/content/docs/api/type-aliases/PlayerEventType.md b/src/content/docs/api/type-aliases/PlayerEventType.md
new file mode 100644
index 0000000..902e289
--- /dev/null
+++ b/src/content/docs/api/type-aliases/PlayerEventType.md
@@ -0,0 +1,12 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "PlayerEventType"
+---
+
+> **PlayerEventType**: `"TrackStartEvent"` \| `"TrackEndEvent"` \| `"TrackExceptionEvent"` \| `"TrackStuckEvent"` \| `"WebSocketClosedEvent"`
+
+## Defined in
+
+[src/guild/Player.ts:9](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L9)
diff --git a/src/content/docs/api/type-aliases/ResumeOptions.md b/src/content/docs/api/type-aliases/ResumeOptions.md
new file mode 100644
index 0000000..79301b8
--- /dev/null
+++ b/src/content/docs/api/type-aliases/ResumeOptions.md
@@ -0,0 +1,12 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "ResumeOptions"
+---
+
+> **ResumeOptions**: `Omit`\<[`UpdatePlayerOptions`](/api/interfaces/updateplayeroptions/), `"track"` \| `"filters"` \| `"voice"`\>
+
+## Defined in
+
+[src/guild/Player.ts:11](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L11)
diff --git a/src/content/docs/api/type-aliases/Severity.md b/src/content/docs/api/type-aliases/Severity.md
new file mode 100644
index 0000000..7dd4b9d
--- /dev/null
+++ b/src/content/docs/api/type-aliases/Severity.md
@@ -0,0 +1,12 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "Severity"
+---
+
+> **Severity**: `"common"` \| `"suspicious"` \| `"fault"`
+
+## Defined in
+
+[src/node/Rest.ts:6](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/node/Rest.ts#L6)
diff --git a/src/content/docs/api/type-aliases/TrackEndReason.md b/src/content/docs/api/type-aliases/TrackEndReason.md
new file mode 100644
index 0000000..9613ce9
--- /dev/null
+++ b/src/content/docs/api/type-aliases/TrackEndReason.md
@@ -0,0 +1,12 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "TrackEndReason"
+---
+
+> **TrackEndReason**: `"finished"` \| `"loadFailed"` \| `"stopped"` \| `"replaced"` \| `"cleanup"`
+
+## Defined in
+
+[src/guild/Player.ts:8](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/guild/Player.ts#L8)
diff --git a/src/content/docs/api/variables/AllowedPackets.md b/src/content/docs/api/variables/AllowedPackets.md
new file mode 100644
index 0000000..b5e1b96
--- /dev/null
+++ b/src/content/docs/api/variables/AllowedPackets.md
@@ -0,0 +1,12 @@
+---
+editUrl: false
+next: false
+prev: false
+title: "AllowedPackets"
+---
+
+> `const` **AllowedPackets**: `string`[]
+
+## Defined in
+
+[src/connectors/Connector.ts:10](https://github.com/shipgirlproject/shoukaku/blob/f3e4f8953c070c0cdfec493d072e6a22e3555895/src/connectors/Connector.ts#L10)
diff --git a/src/content/docs/guides/1-getting-started.mdx b/src/content/docs/guides/1-getting-started.mdx
new file mode 100644
index 0000000..02a5379
--- /dev/null
+++ b/src/content/docs/guides/1-getting-started.mdx
@@ -0,0 +1,90 @@
+---
+title: Getting Started
+description: Get started with Shoukaku.
+---
+
+import { PackageManagers } from "starlight-package-managers";
+import { Tabs, TabItem, Steps, Aside } from '@astrojs/starlight/components';
+
+Shoukaku is a stable, powerful and updated wrapper around [Lavalink](https://lavalink.dev/). It is Discord library agnostic, and can add support for new Discord libraries using connectors.
+
+## Set up Shoukaku
+
+1. Install Shoukaku using your favorite package manager.
+
+
+
+2. Initialize the library using one of the connectors.
+
+
+
+ ```js
+ const { Client } = require('discord.js');
+ const { Shoukaku, Connectors } = require('shoukaku');
+ const Nodes = [{
+ name: 'Localhost',
+ url: 'localhost:6969',
+ auth: 'marin_kitagawa'
+ }];
+ const client = new Client();
+ const shoukaku = new Shoukaku(new Connectors.DiscordJS(client), Nodes);
+ // ALWAYS handle error, logging it will do
+ shoukaku.on('error', (_, error) => console.error(error));
+ client.login('token');
+ // If you want shoukaku to be available on client, then bind it to it, here is one example of it
+ client.shoukaku = shoukaku;
+ ```
+
+
+ ```js
+ const { Client } = require('discord.js');
+ const { Shoukaku, Connectors } = require('shoukaku');
+ const Nodes = [{
+ name: 'Localhost',
+ url: 'localhost:6969',
+ auth: 'marin_kitagawa'
+ }];
+ const client = new Client();
+ const shoukaku = new Shoukaku(new Connectors.Eris(client), Nodes);
+ // ALWAYS handle error, logging it will do
+ shoukaku.on('error', (_, error) => console.error(error));
+ client.login('token');
+ // If you want shoukaku to be available on client, then bind it to it, here is one example of it
+ client.shoukaku = shoukaku;
+ ```
+
+
+ ```js
+ const { Client } = require('discord.js');
+ const { Shoukaku, Connectors } = require('shoukaku');
+ const Nodes = [{
+ name: 'Localhost',
+ url: 'localhost:6969',
+ auth: 'marin_kitagawa'
+ }];
+ const client = new Client();
+ const shoukaku = new Shoukaku(new Connectors.OceanicJS(client), Nodes);
+ // ALWAYS handle error, logging it will do
+ shoukaku.on('error', (_, error) => console.error(error));
+ client.login('token');
+ // If you want shoukaku to be available on client, then bind it to it, here is one example of it
+ client.shoukaku = shoukaku;
+ ```
+
+
+
+
+
+
+## Other Resources
+
+- [Lavalink Docs](https://lavalink.dev)
+- Example implementation using Discord.JS: [Kongou](https://github.com/Deivu/Kongou)
+- Get support on the [Discord server](https://discord.gg/FVqbtGu)
diff --git a/src/content/docs/guides/2-options.mdx b/src/content/docs/guides/2-options.mdx
new file mode 100644
index 0000000..a8191d5
--- /dev/null
+++ b/src/content/docs/guides/2-options.mdx
@@ -0,0 +1,18 @@
+---
+title: Configuration Options
+description: Options for configuring behavior.
+---
+
+| Option | Type | Default | Description |
+| ---------------------- | ----------------------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
+| resume | boolean | false | Whether to resume a connection on disconnect to Lavalink (Server Side) (Note: DOES NOT RESUME WHEN THE LAVALINK SERVER DIES) |
+| resumeTimeout | number | 30 | Timeout before resuming a connection **in seconds** |
+| resumeByLibrary | boolean | false | Whether to resume the players by doing it in the library side (Client Side) (Note: TRIES TO RESUME REGARDLESS OF WHAT HAPPENED ON A LAVALINK SERVER) |
+| reconnectTries | number | 3 | Number of times to try and reconnect to Lavalink before giving up |
+| reconnectInterval | number | 5 | Timeout before trying to reconnect **in seconds** |
+| restTimeout | number | 60 | Time to wait for a response from the Lavalink REST API before giving up **in seconds** |
+| moveOnDisconnect | boolean | false | Whether to move players to a different Lavalink node when a node disconnects |
+| userAgent | string | (auto) | User Agent to use when making requests to Lavalink |
+| structures | Object\{rest?, player?} | \{} | Custom structures for shoukaku to use |
+| voiceConnectionTimeout | number | 15 | Timeout before abort connection **in seconds** |
+| nodeResolver | function | function | Custom node resolver if you want to have your own method of getting the ideal node |
\ No newline at end of file
diff --git a/src/content/docs/guides/3-common.mdx b/src/content/docs/guides/3-common.mdx
new file mode 100644
index 0000000..9f1bb47
--- /dev/null
+++ b/src/content/docs/guides/3-common.mdx
@@ -0,0 +1,68 @@
+---
+title: Common Usage
+description: Commonly used pieces of code.
+---
+
+import { Steps } from '@astrojs/starlight/components';
+
+## Join a voice channel, search for a track, play the track, then disconnect after 30 seconds
+
+
+1. Tell Lavalink to join a Discord voice channel.
+
+ ```js
+ const player = await shoukaku.joinVoiceChannel({
+ guildId: "your_guild_id",
+ channelId: "your_channel_id",
+ shardId: 0, // if unsharded it will always be zero (depending on your library implementation)
+ });
+ ```
+2. Search for a track, here we are searching via [SoundCloud](https://soundcloud.com), using the `scsearch:` prefix. The string after the prefix is the search query.
+
+ ```js
+ const result = await player.node.rest.resolve("scsearch:snowhalation");
+ if (!result?.tracks.length) return;
+ const metadata = result.tracks.shift();
+ ```
+3. Tell Lavalink to play the searched track.
+
+ ```js
+ await player.playTrack({ track: metadata.encoded });
+ ```
+4. After 30 seconds, tell Lavalink to leave the voice channel.
+
+ ```js
+ setTimeout(() => shoukaku.leaveVoiceChannel(player.guildId), 30000).unref();
+ ```
+
+
+## Playing a track and changing a playback option
+Here we are changing the volume, you can do [other stuff](/api/classes/player#methods) as well.
+```js
+await player.playTrack({ track: metadata.encoded });
+await player.setGlobalVolume(50);
+```
+
+You can also update the player without using helper functions
+```js
+await player.update({ ...playerOptions });
+```
+
+## Custom function to get the ideal node
+When executing any action, an API endpoint is called on a Lavalink node. When there are many nodes passed in the configuration, some logic is used to select the node to perform actions on.
+```js
+const shoukaku = new Shoukaku(
+ new Connectors.DiscordJS(client),
+ [{ ...yourNodeOptions }],
+ {
+ ...yourShoukakuOptions,
+ nodeResolver: (nodes, connection) => getYourIdealNode(nodes, connection),
+ }
+);
+
+const player = await shoukaku.joinVoiceChannel({
+ guildId: "your_guild_id",
+ channelId: "your_channel_id",
+ shardId: 0,
+});
+```
diff --git a/src/content/docs/guides/4-plugins.mdx b/src/content/docs/guides/4-plugins.mdx
new file mode 100644
index 0000000..d097256
--- /dev/null
+++ b/src/content/docs/guides/4-plugins.mdx
@@ -0,0 +1,19 @@
+---
+title: Plugins
+description: Plugins to extend Shoukaku.
+---
+
+import { Aside } from '@astrojs/starlight/components';
+
+## Plugins List
+Open a pull request to add your plugin here
+
+| Name | Link | Description |
+| ------------ | ------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
+| Kazagumo | [Github](https://github.com/Takiyo0/Kazagumo) | A Shoukaku wrapper that have built-in queue system |
+| stone-deezer | [NPM](https://www.npmjs.com/package/stone-deezer) | A plugin to simplify deezer links and then play it from available sources (**REQUIRES [KAZAGUMO](https://github.com/Takiyo0/Kazagumo)**) |
+
+## Creating Plugins
+
diff --git a/src/content/docs/guides/5-updating-from-v3.mdx b/src/content/docs/guides/5-updating-from-v3.mdx
new file mode 100644
index 0000000..856fe81
--- /dev/null
+++ b/src/content/docs/guides/5-updating-from-v3.mdx
@@ -0,0 +1,95 @@
+---
+title: Updating from v3 to v4
+description: Changes in your code when updating from v3.
+---
+There are some major changes in Shoukaku v4. Here is some major changes that need to be made to your code.
+
+## Common usage
+
+### Getting a node
+As node resolving is configurable in v4, the method to do so has changed.
+```diff
+- const node = shoukaku.getNode();
++ const node = shoukaku.options.nodeResolver(shoukaku.nodes);
+```
+
+### Joining voice channels
+You now join voice channels using the main Shoukaku class, and not on the Node class
+```diff
+-const player = await node.joinChannel({
++const player = await shoukaku.joinVoiceChannel({
+ guildId: "your_guild_id",
+ channelId: "your_channel_id",
+ shardId: 0, // if unsharded it will always be zero (depending on your library implementation)
+});
+```
+
+### Resolving tracks
+You can also use the player.node property after connecting to a voice channel to resolve tracks, but the old method would still work.
+```diff
+-const result = await node.rest.resolve("scsearch:snowhalation");
++const result = await player.node.rest.resolve("scsearch:snowhalation");
+```
+
+### Playing tracks
+Play the track using the encoded metadata.
+```diff
+-player.playTrack({ track: metadata.track })
++await player.playTrack({ track: metadata.encoded });
+```
+
+### Leaving voice channels
+Similar to joining voice channels, it is also on the main Shoukaku class.
+```diff
+-player.connection.disconnect();
++await shoukaku.leaveVoiceChannel(player.guildId);
+```
+
+## Other changes
+
+### Player methods
+Player methods now return promises.
+```js
+await player.playTrack(...data);
+await player.stopTrack();
+```
+
+### Volume
+There are 2 kinds of volumes you can set, global and filter.
+
+The global volume accepts 0-1000 as it's values
+```js
+await player.setGlobalVolume(100);
+```
+To check the current global volume
+```js
+console.log(player.volume);
+```
+The filter volume accepts 0.0-5.0 as it's values
+```js
+await player.setFilterVolume(1.0);
+```
+To check the current filter volume (filters.volume can be undefined)
+```js
+console.log(player.filters.volume);
+```
+
+### Internal changes
+
+New variable in shoukaku class, which handles the "connection data" of discord only
+```js
+console.log(shoukaku.connections);
+```
+
+Players are moved from `node.players` to `shoukaku.players`
+```js
+console.log(shoukaku.players);
+```
+
+You can supply a custom node resolver for your own way of getting an ideal node by supplying the nodeResolver option in Shoukaku options
+```js
+const ShoukakuOptions = {
+ ...yourShoukakuOptions,
+ nodeResolver: (nodes, connection) => getYourIdealNode(nodes, connection),
+};
+```
diff --git a/src/content/docs/index.mdx b/src/content/docs/index.mdx
new file mode 100644
index 0000000..58d745b
--- /dev/null
+++ b/src/content/docs/index.mdx
@@ -0,0 +1,16 @@
+---
+title: Shoukaku Docs
+description: A stable, powerful and updated wrapper around Lavalink.
+hero:
+ tagline: A stable, powerful and updated wrapper around Lavalink.
+ image:
+ file: ../../assets/shoukaku.webp
+ actions:
+ - text: Getting Started
+ link: /guides/1-getting-started/
+ icon: right-arrow
+ variant: primary
+ - text: API Reference
+ link: /api/classes/shoukaku/
+ icon: external
+---
diff --git a/src/content/versions/3.4.2.json b/src/content/versions/3.4.2.json
new file mode 100644
index 0000000..c0e3c8e
--- /dev/null
+++ b/src/content/versions/3.4.2.json
@@ -0,0 +1,48 @@
+{
+ "sidebar": [
+ {
+ "label": "Guides",
+ "autogenerate": {
+ "directory": "guides"
+ }
+ },
+ {
+ "label": "API Reference",
+ "collapsed": false,
+ "items": [
+ {
+ "collapsed": true,
+ "label": "Namespaces",
+ "autogenerate": {
+ "collapsed": true,
+ "directory": "api/namespaces"
+ }
+ },
+ {
+ "collapsed": true,
+ "label": "Classes",
+ "autogenerate": {
+ "collapsed": true,
+ "directory": "api/classes"
+ }
+ },
+ {
+ "collapsed": true,
+ "label": "Interfaces",
+ "autogenerate": {
+ "collapsed": true,
+ "directory": "api/interfaces"
+ }
+ },
+ {
+ "collapsed": true,
+ "label": "Type Aliases",
+ "autogenerate": {
+ "collapsed": true,
+ "directory": "api/type-aliases"
+ }
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/content/versions/4.0.1.json b/src/content/versions/4.0.1.json
new file mode 100644
index 0000000..7228580
--- /dev/null
+++ b/src/content/versions/4.0.1.json
@@ -0,0 +1,64 @@
+{
+ "sidebar": [
+ {
+ "label": "Guides",
+ "autogenerate": {
+ "directory": "guides"
+ }
+ },
+ {
+ "label": "API Reference",
+ "collapsed": false,
+ "items": [
+ {
+ "collapsed": true,
+ "label": "Namespaces",
+ "autogenerate": {
+ "collapsed": true,
+ "directory": "api/namespaces"
+ }
+ },
+ {
+ "collapsed": true,
+ "label": "Enumerations",
+ "autogenerate": {
+ "collapsed": true,
+ "directory": "api/enumerations"
+ }
+ },
+ {
+ "collapsed": true,
+ "label": "Classes",
+ "autogenerate": {
+ "collapsed": true,
+ "directory": "api/classes"
+ }
+ },
+ {
+ "collapsed": true,
+ "label": "Interfaces",
+ "autogenerate": {
+ "collapsed": true,
+ "directory": "api/interfaces"
+ }
+ },
+ {
+ "collapsed": true,
+ "label": "Type Aliases",
+ "autogenerate": {
+ "collapsed": true,
+ "directory": "api/type-aliases"
+ }
+ },
+ {
+ "collapsed": true,
+ "label": "Variables",
+ "autogenerate": {
+ "collapsed": true,
+ "directory": "api/variables"
+ }
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/env.d.ts b/src/env.d.ts
new file mode 100644
index 0000000..acef35f
--- /dev/null
+++ b/src/env.d.ts
@@ -0,0 +1,2 @@
+///
+///
diff --git a/tsconfig.json b/tsconfig.json
new file mode 100644
index 0000000..1e65c13
--- /dev/null
+++ b/tsconfig.json
@@ -0,0 +1,8 @@
+{
+ "include": ["./src/*", ".eslintrc.cjs", "./shoukaku/*", "./.astro/*"],
+ "extends": "astro/tsconfigs/strict",
+ "compilerOptions": {
+ "verbatimModuleSyntax": false,
+ "skipLibCheck": true
+ }
+}
\ No newline at end of file