32 Commits

Author SHA1 Message Date
Kyrch 4f8df05b75 docs(graphql): max complexity value (#135) 2026-04-28 17:44:10 -03:00
Kyrch 8a5b9d5e4c docs(graphql): add validation section (#134) 2026-04-22 15:05:58 -03:00
Kyrch b9cd7b09a4 docs(graphql): update sort docs (#133) 2026-04-19 11:19:42 -03:00
Kyrch 05118aaa8a docs: update deprecations (#132) 2026-04-17 12:18:01 -03:00
Kyrch 8f834784fe docs(graphql): fix text (#131) 2026-04-10 01:20:40 -03:00
Kyrch 70512007ab docs(graphql): add query complexity limit (#130) 2026-04-10 01:11:15 -03:00
Kyrch 28e734f661 docs: remove artistsong endpoints (#129) 2026-04-09 07:46:27 -03:00
Kyrch 71e0ef106c docs: update the new schema for performances (#128) 2026-04-03 04:09:52 -03:00
Kyrch af9afe32cc docs: update rate limiting to 90 queries per request (#127) 2026-02-16 07:23:48 -03:00
Kyrch 4f34707907 chore: bun & bump dependencies & DEPLOYMENT guide (#126) 2026-02-16 00:43:03 -03:00
Kyrch 20cd405f75 docs: advanced filtering & pivot sorting (#125) 2026-01-27 14:09:51 -03:00
Kyrch 9827cacadb refactor: move wiki to content (#124) 2025-12-17 22:53:18 -03:00
Kyrch 1176516aa2 docs: add sandbox (#123) 2025-12-17 22:43:13 -03:00
Kyrch 4152aeb664 docs: query depth & performances & bump dependencies (#122) 2025-11-10 09:06:24 -03:00
Kyrch 9a8db5d4cc clean: resource & image pivot endpoints (#121) 2025-11-02 21:30:36 -03:00
Kyrch f862b53a00 docs: new pagination strategy (#120) 2025-09-01 11:40:41 -03:00
Kyrch 2fb4723fe4 docs(graphql): paginator suffix & singular queries (#119) 2025-08-08 00:38:53 -03:00
Maniload 53cf705824 docs: Moved JSON:API docs 2025-07-29 00:56:10 +02:00
Kyrch ad0d7a80eb docs(graphql): removed authentication & validation sections (#118)
(cherry picked from commit 124bf266cf0ce93374e2c7c16deb3a1b82f095a7)
2025-07-29 00:53:17 +02:00
Maniload 0fbb8326e7 docs: Added reference index page and adjusted home page 2025-07-29 00:53:16 +02:00
Kyrch c2b90daf0d feat: added graphql warning at the top (#117)
(cherry picked from commit fe9a3017e5)
2025-07-29 00:52:48 +02:00
Kyrch f129648c3e refactor: fix namespaces (#116)
(cherry picked from commit 578f00cdaf)
2025-07-29 00:52:47 +02:00
Maniload bdd016a886 chore: Update Vitepress 2025-07-29 00:51:20 +02:00
Kyrch b636e061db docs(graphql): sorting documentation (#115)
(cherry picked from commit bd0eab5e6d)
2025-07-29 00:50:42 +02:00
Kyrch 1c0fbd5233 docs(graphql): added nodes field explanation (#114)
(cherry picked from commit 316aabdb2a)
2025-07-29 00:50:41 +02:00
Kyrch 522cfec744 docs(graphql): added every relationship available (#113)
(cherry picked from commit a7b9f326e4)
2025-07-29 00:50:41 +02:00
Kyrch cb58190584 docs(graphql): many-to-many relationship (#112)
(cherry picked from commit 39ce2fe844)
2025-07-29 00:50:40 +02:00
Kyrch f12b15c440 docs(graphql): pagination arguments (#111)
(cherry picked from commit bf69d27a98)
2025-07-29 00:50:40 +02:00
Kyrch d70bd55ace docs(graphql): added filtering section (#110)
(cherry picked from commit b07c916d68)
2025-07-29 00:50:40 +02:00
Kyrch 6380af9a47 feat: initial commit for graphql api (#107) 2025-07-29 00:49:37 +02:00
Kyrch 47de7a5378 docs: removed routes from left bar (#109) 2025-07-11 17:17:31 -03:00
Kyrch 5f1f7672e6 refactor: removed soft deletes from announcement, dump, featured theme, playlist, track & profile (#108) 2025-07-11 17:11:43 -03:00
297 changed files with 2780 additions and 5060 deletions
+1
View File
@@ -0,0 +1 @@
**/*.md
+4
View File
@@ -0,0 +1,4 @@
{
"tabWidth": 4,
"printWidth": 120
}
+4 -4
View File
@@ -38,10 +38,10 @@ behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.
reject comments, commits, code, wiki edits, content edits, issues, and
other contributions that are not aligned to this Code of Conduct, or
to ban temporarily or permanently any contributor for other behaviors
that they deem inappropriate, threatening, offensive, or harmful.
## Scope
+78
View File
@@ -0,0 +1,78 @@
## Requirements
* Nginx
* Certbot
* Bun
## Nginx
Create a new Nginx site configuration:
```sh
sudo nano /etc/nginx/sites-available/api-docs.animethemes.moe
```
Paste the following configuration there:
```nginx
server {
listen 80;
listen [::]:80;
server_name api-docs.animethemes.moe;
return 301 https://$server_name$request_uri;
}
server {
root /var/www/html/animethemes-api-docs/docs/.vitepress/dist;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
server_name api-docs.animethemes.moe;
# Nginx Bad Bot Blocker Includes
include /etc/nginx/bots.d/ddos.conf;
include /etc/nginx/bots.d/blockbots.conf;
location / {
try_files $uri $uri/ /index.html;
index index.html;
}
location ~ /\.ht {
deny all;
}
location ~ /.well-known {
allow all;
}
}
```
```sh
# Save the file, then enable the site
sudo ln -s /etc/nginx/sites-available/api-docs.animethemes.moe /etc/nginx/sites-enabled/
# Validate and reload Nginx configuration
sudo nginx -t
sudo systemctl reload nginx
sudo systemctl restart nginx
```
## Install Certificates
To install HTTPS certificates using Let's Encrypt, follow the official [guide from DigitalOcean](https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-20-04).
## Application Setup
```sh
# Go to the web directory and clone repository from Github
cd /var/www/html
sudo git clone git@github.com:AnimeThemes/animethemes-api-docs.git
cd animethemes-api-docs
# Install the dependencies using Bun
bun install
# Build the static files
bun run docs:build
```
+7 -3
View File
@@ -19,17 +19,21 @@ This project is powered by [**VitePress**](https://vitepress.vuejs.org/), a Vite
In the project root directory, install dependencies.
`npm install`
`bun install`
In the project root directory, start the local development server.
`npm run docs:dev`
`bun run docs:dev`
That's it! The local development server should be running at `localhost:5173`.
## Contributing
Please review the [**Contributing Guide**](https://github.com/AnimeThemes/animethemes-api-docs/blob/main/.github/CONTRIBUTING.md) for detailed instructions.
Please review the [**Contributing Guide**](https://github.com/AnimeThemes/animethemes-api-docs/blob/main/CONTRIBUTING.md) for detailed instructions.
## Deployment
Please review the [**Deployment Guide**](https://github.com/AnimeThemes/animethemes-api-docs/blob/main/DEPLOYMENT.md) for detailed instructions.
## Resources
+339
View File
@@ -0,0 +1,339 @@
{
"lockfileVersion": 1,
"configVersion": 1,
"workspaces": {
"": {
"name": "animethemes-api-docs",
"dependencies": {
"dotenv": "^17.3.1",
"vitepress": "^2.0.0-alpha.12",
},
"devDependencies": {
"prettier": "^3.8.1",
},
},
},
"packages": {
"@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="],
"@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="],
"@babel/parser": ["@babel/parser@7.29.0", "", { "dependencies": { "@babel/types": "^7.29.0" }, "bin": "./bin/babel-parser.js" }, "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww=="],
"@babel/types": ["@babel/types@7.29.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A=="],
"@docsearch/css": ["@docsearch/css@4.5.4", "", {}, "sha512-gzO4DJwyM9c4YEPHwaLV1nUCDC2N6yoh0QJj44dce2rcfN71mB+jpu3+F+Y/KMDF1EKV0C3m54leSWsraE94xg=="],
"@docsearch/js": ["@docsearch/js@4.5.4", "", {}, "sha512-jEBsIklNTevznLZouB0y6SZcaT897gRHnGTzCcH32ibPZRVj/9FyuAM2LUTk61sFdOY79LH4V9rYsIdOe6Wq2g=="],
"@docsearch/sidepanel-js": ["@docsearch/sidepanel-js@4.5.4", "", {}, "sha512-f4KE4cG+P09gJHQNfttfMNy+3gAGj8U0YEgiOOso0YCFI5nGoVvJQpxNMSPgXs4sG34A/oCfKhYwHJiqgHhxPw=="],
"@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.27.3", "", { "os": "aix", "cpu": "ppc64" }, "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg=="],
"@esbuild/android-arm": ["@esbuild/android-arm@0.27.3", "", { "os": "android", "cpu": "arm" }, "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA=="],
"@esbuild/android-arm64": ["@esbuild/android-arm64@0.27.3", "", { "os": "android", "cpu": "arm64" }, "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg=="],
"@esbuild/android-x64": ["@esbuild/android-x64@0.27.3", "", { "os": "android", "cpu": "x64" }, "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ=="],
"@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.27.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg=="],
"@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.27.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg=="],
"@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.27.3", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w=="],
"@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.27.3", "", { "os": "freebsd", "cpu": "x64" }, "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA=="],
"@esbuild/linux-arm": ["@esbuild/linux-arm@0.27.3", "", { "os": "linux", "cpu": "arm" }, "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw=="],
"@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.27.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg=="],
"@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.27.3", "", { "os": "linux", "cpu": "ia32" }, "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg=="],
"@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA=="],
"@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw=="],
"@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.27.3", "", { "os": "linux", "cpu": "ppc64" }, "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA=="],
"@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.27.3", "", { "os": "linux", "cpu": "none" }, "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ=="],
"@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.27.3", "", { "os": "linux", "cpu": "s390x" }, "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw=="],
"@esbuild/linux-x64": ["@esbuild/linux-x64@0.27.3", "", { "os": "linux", "cpu": "x64" }, "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA=="],
"@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.27.3", "", { "os": "none", "cpu": "arm64" }, "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA=="],
"@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.27.3", "", { "os": "none", "cpu": "x64" }, "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA=="],
"@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.27.3", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw=="],
"@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.27.3", "", { "os": "openbsd", "cpu": "x64" }, "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ=="],
"@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.27.3", "", { "os": "none", "cpu": "arm64" }, "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g=="],
"@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.27.3", "", { "os": "sunos", "cpu": "x64" }, "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA=="],
"@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.27.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA=="],
"@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.27.3", "", { "os": "win32", "cpu": "ia32" }, "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q=="],
"@esbuild/win32-x64": ["@esbuild/win32-x64@0.27.3", "", { "os": "win32", "cpu": "x64" }, "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA=="],
"@iconify-json/simple-icons": ["@iconify-json/simple-icons@1.2.70", "", { "dependencies": { "@iconify/types": "*" } }, "sha512-CYNRCgN6nBTjN4dNkrBCjHXNR2e4hQihdsZUs/afUNFOWLSYjfihca4EFN05rRvDk4Xoy2n8tym6IxBZmcn+Qg=="],
"@iconify/types": ["@iconify/types@2.0.0", "", {}, "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg=="],
"@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.5", "", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="],
"@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-rc.2", "", {}, "sha512-izyXV/v+cHiRfozX62W9htOAvwMo4/bXKDrQ+vom1L1qRuexPock/7VZDAhnpHCLNejd3NJ6hiab+tO0D44Rgw=="],
"@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.57.1", "", { "os": "android", "cpu": "arm" }, "sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg=="],
"@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.57.1", "", { "os": "android", "cpu": "arm64" }, "sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w=="],
"@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.57.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg=="],
"@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.57.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w=="],
"@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.57.1", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug=="],
"@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.57.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q=="],
"@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.57.1", "", { "os": "linux", "cpu": "arm" }, "sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw=="],
"@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.57.1", "", { "os": "linux", "cpu": "arm" }, "sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw=="],
"@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.57.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g=="],
"@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.57.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q=="],
"@rollup/rollup-linux-loong64-gnu": ["@rollup/rollup-linux-loong64-gnu@4.57.1", "", { "os": "linux", "cpu": "none" }, "sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA=="],
"@rollup/rollup-linux-loong64-musl": ["@rollup/rollup-linux-loong64-musl@4.57.1", "", { "os": "linux", "cpu": "none" }, "sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw=="],
"@rollup/rollup-linux-ppc64-gnu": ["@rollup/rollup-linux-ppc64-gnu@4.57.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w=="],
"@rollup/rollup-linux-ppc64-musl": ["@rollup/rollup-linux-ppc64-musl@4.57.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw=="],
"@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.57.1", "", { "os": "linux", "cpu": "none" }, "sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A=="],
"@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.57.1", "", { "os": "linux", "cpu": "none" }, "sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw=="],
"@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.57.1", "", { "os": "linux", "cpu": "s390x" }, "sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg=="],
"@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.57.1", "", { "os": "linux", "cpu": "x64" }, "sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg=="],
"@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.57.1", "", { "os": "linux", "cpu": "x64" }, "sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw=="],
"@rollup/rollup-openbsd-x64": ["@rollup/rollup-openbsd-x64@4.57.1", "", { "os": "openbsd", "cpu": "x64" }, "sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw=="],
"@rollup/rollup-openharmony-arm64": ["@rollup/rollup-openharmony-arm64@4.57.1", "", { "os": "none", "cpu": "arm64" }, "sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ=="],
"@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.57.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ=="],
"@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.57.1", "", { "os": "win32", "cpu": "ia32" }, "sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew=="],
"@rollup/rollup-win32-x64-gnu": ["@rollup/rollup-win32-x64-gnu@4.57.1", "", { "os": "win32", "cpu": "x64" }, "sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ=="],
"@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.57.1", "", { "os": "win32", "cpu": "x64" }, "sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA=="],
"@shikijs/core": ["@shikijs/core@3.22.0", "", { "dependencies": { "@shikijs/types": "3.22.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.5" } }, "sha512-iAlTtSDDbJiRpvgL5ugKEATDtHdUVkqgHDm/gbD2ZS9c88mx7G1zSYjjOxp5Qa0eaW0MAQosFRmJSk354PRoQA=="],
"@shikijs/engine-javascript": ["@shikijs/engine-javascript@3.22.0", "", { "dependencies": { "@shikijs/types": "3.22.0", "@shikijs/vscode-textmate": "^10.0.2", "oniguruma-to-es": "^4.3.4" } }, "sha512-jdKhfgW9CRtj3Tor0L7+yPwdG3CgP7W+ZEqSsojrMzCjD1e0IxIbwUMDDpYlVBlC08TACg4puwFGkZfLS+56Tw=="],
"@shikijs/engine-oniguruma": ["@shikijs/engine-oniguruma@3.22.0", "", { "dependencies": { "@shikijs/types": "3.22.0", "@shikijs/vscode-textmate": "^10.0.2" } }, "sha512-DyXsOG0vGtNtl7ygvabHd7Mt5EY8gCNqR9Y7Lpbbd/PbJvgWrqaKzH1JW6H6qFkuUa8aCxoiYVv8/YfFljiQxA=="],
"@shikijs/langs": ["@shikijs/langs@3.22.0", "", { "dependencies": { "@shikijs/types": "3.22.0" } }, "sha512-x/42TfhWmp6H00T6uwVrdTJGKgNdFbrEdhaDwSR5fd5zhQ1Q46bHq9EO61SCEWJR0HY7z2HNDMaBZp8JRmKiIA=="],
"@shikijs/themes": ["@shikijs/themes@3.22.0", "", { "dependencies": { "@shikijs/types": "3.22.0" } }, "sha512-o+tlOKqsr6FE4+mYJG08tfCFDS+3CG20HbldXeVoyP+cYSUxDhrFf3GPjE60U55iOkkjbpY2uC3It/eeja35/g=="],
"@shikijs/transformers": ["@shikijs/transformers@3.22.0", "", { "dependencies": { "@shikijs/core": "3.22.0", "@shikijs/types": "3.22.0" } }, "sha512-E7eRV7mwDBjueLF6852n2oYeJYxBq3NSsDk+uyruYAXONv4U8holGmIrT+mPRJQ1J1SNOH6L8G19KRzmBawrFw=="],
"@shikijs/types": ["@shikijs/types@3.22.0", "", { "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-491iAekgKDBFE67z70Ok5a8KBMsQ2IJwOWw3us/7ffQkIBCyOQfm/aNwVMBUriP02QshIfgHCBSIYAl3u2eWjg=="],
"@shikijs/vscode-textmate": ["@shikijs/vscode-textmate@10.0.2", "", {}, "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg=="],
"@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="],
"@types/hast": ["@types/hast@3.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ=="],
"@types/linkify-it": ["@types/linkify-it@5.0.0", "", {}, "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q=="],
"@types/markdown-it": ["@types/markdown-it@14.1.2", "", { "dependencies": { "@types/linkify-it": "^5", "@types/mdurl": "^2" } }, "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog=="],
"@types/mdast": ["@types/mdast@4.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA=="],
"@types/mdurl": ["@types/mdurl@2.0.0", "", {}, "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg=="],
"@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="],
"@types/web-bluetooth": ["@types/web-bluetooth@0.0.21", "", {}, "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA=="],
"@ungap/structured-clone": ["@ungap/structured-clone@1.3.0", "", {}, "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g=="],
"@vitejs/plugin-vue": ["@vitejs/plugin-vue@6.0.4", "", { "dependencies": { "@rolldown/pluginutils": "1.0.0-rc.2" }, "peerDependencies": { "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0", "vue": "^3.2.25" } }, "sha512-uM5iXipgYIn13UUQCZNdWkYk+sysBeA97d5mHsAoAt1u/wpN3+zxOmsVJWosuzX+IMGRzeYUNytztrYznboIkQ=="],
"@vue/compiler-core": ["@vue/compiler-core@3.5.28", "", { "dependencies": { "@babel/parser": "^7.29.0", "@vue/shared": "3.5.28", "entities": "^7.0.1", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } }, "sha512-kviccYxTgoE8n6OCw96BNdYlBg2GOWfBuOW4Vqwrt7mSKWKwFVvI8egdTltqRgITGPsTFYtKYfxIG8ptX2PJHQ=="],
"@vue/compiler-dom": ["@vue/compiler-dom@3.5.28", "", { "dependencies": { "@vue/compiler-core": "3.5.28", "@vue/shared": "3.5.28" } }, "sha512-/1ZepxAb159jKR1btkefDP+J2xuWL5V3WtleRmxaT+K2Aqiek/Ab/+Ebrw2pPj0sdHO8ViAyyJWfhXXOP/+LQA=="],
"@vue/compiler-sfc": ["@vue/compiler-sfc@3.5.28", "", { "dependencies": { "@babel/parser": "^7.29.0", "@vue/compiler-core": "3.5.28", "@vue/compiler-dom": "3.5.28", "@vue/compiler-ssr": "3.5.28", "@vue/shared": "3.5.28", "estree-walker": "^2.0.2", "magic-string": "^0.30.21", "postcss": "^8.5.6", "source-map-js": "^1.2.1" } }, "sha512-6TnKMiNkd6u6VeVDhZn/07KhEZuBSn43Wd2No5zaP5s3xm8IqFTHBj84HJah4UepSUJTro5SoqqlOY22FKY96g=="],
"@vue/compiler-ssr": ["@vue/compiler-ssr@3.5.28", "", { "dependencies": { "@vue/compiler-dom": "3.5.28", "@vue/shared": "3.5.28" } }, "sha512-JCq//9w1qmC6UGLWJX7RXzrGpKkroubey/ZFqTpvEIDJEKGgntuDMqkuWiZvzTzTA5h2qZvFBFHY7fAAa9475g=="],
"@vue/devtools-api": ["@vue/devtools-api@8.0.6", "", { "dependencies": { "@vue/devtools-kit": "^8.0.6" } }, "sha512-+lGBI+WTvJmnU2FZqHhEB8J1DXcvNlDeEalz77iYgOdY1jTj1ipSBaKj3sRhYcy+kqA8v/BSuvOz1XJucfQmUA=="],
"@vue/devtools-kit": ["@vue/devtools-kit@8.0.6", "", { "dependencies": { "@vue/devtools-shared": "^8.0.6", "birpc": "^2.6.1", "hookable": "^5.5.3", "mitt": "^3.0.1", "perfect-debounce": "^2.0.0", "speakingurl": "^14.0.1", "superjson": "^2.2.2" } }, "sha512-9zXZPTJW72OteDXeSa5RVML3zWDCRcO5t77aJqSs228mdopYj5AiTpihozbsfFJ0IodfNs7pSgOGO3qfCuxDtw=="],
"@vue/devtools-shared": ["@vue/devtools-shared@8.0.6", "", { "dependencies": { "rfdc": "^1.4.1" } }, "sha512-Pp1JylTqlgMJvxW6MGyfTF8vGvlBSCAvMFaDCYa82Mgw7TT5eE5kkHgDvmOGHWeJE4zIDfCpCxHapsK2LtIAJg=="],
"@vue/reactivity": ["@vue/reactivity@3.5.28", "", { "dependencies": { "@vue/shared": "3.5.28" } }, "sha512-gr5hEsxvn+RNyu9/9o1WtdYdwDjg5FgjUSBEkZWqgTKlo/fvwZ2+8W6AfKsc9YN2k/+iHYdS9vZYAhpi10kNaw=="],
"@vue/runtime-core": ["@vue/runtime-core@3.5.28", "", { "dependencies": { "@vue/reactivity": "3.5.28", "@vue/shared": "3.5.28" } }, "sha512-POVHTdbgnrBBIpnbYU4y7pOMNlPn2QVxVzkvEA2pEgvzbelQq4ZOUxbp2oiyo+BOtiYlm8Q44wShHJoBvDPAjQ=="],
"@vue/runtime-dom": ["@vue/runtime-dom@3.5.28", "", { "dependencies": { "@vue/reactivity": "3.5.28", "@vue/runtime-core": "3.5.28", "@vue/shared": "3.5.28", "csstype": "^3.2.3" } }, "sha512-4SXxSF8SXYMuhAIkT+eBRqOkWEfPu6nhccrzrkioA6l0boiq7sp18HCOov9qWJA5HML61kW8p/cB4MmBiG9dSA=="],
"@vue/server-renderer": ["@vue/server-renderer@3.5.28", "", { "dependencies": { "@vue/compiler-ssr": "3.5.28", "@vue/shared": "3.5.28" }, "peerDependencies": { "vue": "3.5.28" } }, "sha512-pf+5ECKGj8fX95bNincbzJ6yp6nyzuLDhYZCeFxUNp8EBrQpPpQaLX3nNCp49+UbgbPun3CeVE+5CXVV1Xydfg=="],
"@vue/shared": ["@vue/shared@3.5.28", "", {}, "sha512-cfWa1fCGBxrvaHRhvV3Is0MgmrbSCxYTXCSCau2I0a1Xw1N1pHAvkWCiXPRAqjvToILvguNyEwjevUqAuBQWvQ=="],
"@vueuse/core": ["@vueuse/core@14.2.1", "", { "dependencies": { "@types/web-bluetooth": "^0.0.21", "@vueuse/metadata": "14.2.1", "@vueuse/shared": "14.2.1" }, "peerDependencies": { "vue": "^3.5.0" } }, "sha512-3vwDzV+GDUNpdegRY6kzpLm4Igptq+GA0QkJ3W61Iv27YWwW/ufSlOfgQIpN6FZRMG0mkaz4gglJRtq5SeJyIQ=="],
"@vueuse/integrations": ["@vueuse/integrations@14.2.1", "", { "dependencies": { "@vueuse/core": "14.2.1", "@vueuse/shared": "14.2.1" }, "peerDependencies": { "async-validator": "^4", "axios": "^1", "change-case": "^5", "drauu": "^0.4", "focus-trap": "^7 || ^8", "fuse.js": "^7", "idb-keyval": "^6", "jwt-decode": "^4", "nprogress": "^0.2", "qrcode": "^1.5", "sortablejs": "^1", "universal-cookie": "^7 || ^8", "vue": "^3.5.0" }, "optionalPeers": ["async-validator", "axios", "change-case", "drauu", "focus-trap", "fuse.js", "idb-keyval", "jwt-decode", "nprogress", "qrcode", "sortablejs", "universal-cookie"] }, "sha512-2LIUpBi/67PoXJGqSDQUF0pgQWpNHh7beiA+KG2AbybcNm+pTGWT6oPGlBgUoDWmYwfeQqM/uzOHqcILpKL7nA=="],
"@vueuse/metadata": ["@vueuse/metadata@14.2.1", "", {}, "sha512-1ButlVtj5Sb/HDtIy1HFr1VqCP4G6Ypqt5MAo0lCgjokrk2mvQKsK2uuy0vqu/Ks+sHfuHo0B9Y9jn9xKdjZsw=="],
"@vueuse/shared": ["@vueuse/shared@14.2.1", "", { "peerDependencies": { "vue": "^3.5.0" } }, "sha512-shTJncjV9JTI4oVNyF1FQonetYAiTBd+Qj7cY89SWbXSkx7gyhrgtEdF2ZAVWS1S3SHlaROO6F2IesJxQEkZBw=="],
"birpc": ["birpc@2.9.0", "", {}, "sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw=="],
"ccount": ["ccount@2.0.1", "", {}, "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg=="],
"character-entities-html4": ["character-entities-html4@2.1.0", "", {}, "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA=="],
"character-entities-legacy": ["character-entities-legacy@3.0.0", "", {}, "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ=="],
"comma-separated-tokens": ["comma-separated-tokens@2.0.3", "", {}, "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg=="],
"copy-anything": ["copy-anything@4.0.5", "", { "dependencies": { "is-what": "^5.2.0" } }, "sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA=="],
"csstype": ["csstype@3.2.3", "", {}, "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="],
"dequal": ["dequal@2.0.3", "", {}, "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA=="],
"devlop": ["devlop@1.1.0", "", { "dependencies": { "dequal": "^2.0.0" } }, "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA=="],
"dotenv": ["dotenv@17.3.1", "", {}, "sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA=="],
"entities": ["entities@7.0.1", "", {}, "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA=="],
"esbuild": ["esbuild@0.27.3", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.27.3", "@esbuild/android-arm": "0.27.3", "@esbuild/android-arm64": "0.27.3", "@esbuild/android-x64": "0.27.3", "@esbuild/darwin-arm64": "0.27.3", "@esbuild/darwin-x64": "0.27.3", "@esbuild/freebsd-arm64": "0.27.3", "@esbuild/freebsd-x64": "0.27.3", "@esbuild/linux-arm": "0.27.3", "@esbuild/linux-arm64": "0.27.3", "@esbuild/linux-ia32": "0.27.3", "@esbuild/linux-loong64": "0.27.3", "@esbuild/linux-mips64el": "0.27.3", "@esbuild/linux-ppc64": "0.27.3", "@esbuild/linux-riscv64": "0.27.3", "@esbuild/linux-s390x": "0.27.3", "@esbuild/linux-x64": "0.27.3", "@esbuild/netbsd-arm64": "0.27.3", "@esbuild/netbsd-x64": "0.27.3", "@esbuild/openbsd-arm64": "0.27.3", "@esbuild/openbsd-x64": "0.27.3", "@esbuild/openharmony-arm64": "0.27.3", "@esbuild/sunos-x64": "0.27.3", "@esbuild/win32-arm64": "0.27.3", "@esbuild/win32-ia32": "0.27.3", "@esbuild/win32-x64": "0.27.3" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg=="],
"estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="],
"fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="],
"focus-trap": ["focus-trap@7.8.0", "", { "dependencies": { "tabbable": "^6.4.0" } }, "sha512-/yNdlIkpWbM0ptxno3ONTuf+2g318kh2ez3KSeZN5dZ8YC6AAmgeWz+GasYYiBJPFaYcSAPeu4GfhUaChzIJXA=="],
"fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="],
"hast-util-to-html": ["hast-util-to-html@9.0.5", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "ccount": "^2.0.0", "comma-separated-tokens": "^2.0.0", "hast-util-whitespace": "^3.0.0", "html-void-elements": "^3.0.0", "mdast-util-to-hast": "^13.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "stringify-entities": "^4.0.0", "zwitch": "^2.0.4" } }, "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw=="],
"hast-util-whitespace": ["hast-util-whitespace@3.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw=="],
"hookable": ["hookable@5.5.3", "", {}, "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ=="],
"html-void-elements": ["html-void-elements@3.0.0", "", {}, "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg=="],
"is-what": ["is-what@5.5.0", "", {}, "sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw=="],
"magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="],
"mark.js": ["mark.js@8.11.1", "", {}, "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ=="],
"mdast-util-to-hast": ["mdast-util-to-hast@13.2.1", "", { "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" } }, "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA=="],
"micromark-util-character": ["micromark-util-character@2.1.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q=="],
"micromark-util-encode": ["micromark-util-encode@2.0.1", "", {}, "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw=="],
"micromark-util-sanitize-uri": ["micromark-util-sanitize-uri@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-encode": "^2.0.0", "micromark-util-symbol": "^2.0.0" } }, "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ=="],
"micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="],
"micromark-util-types": ["micromark-util-types@2.0.2", "", {}, "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA=="],
"minisearch": ["minisearch@7.2.0", "", {}, "sha512-dqT2XBYUOZOiC5t2HRnwADjhNS2cecp9u+TJRiJ1Qp/f5qjkeT5APcGPjHw+bz89Ms8Jp+cG4AlE+QZ/QnDglg=="],
"mitt": ["mitt@3.0.1", "", {}, "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw=="],
"nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="],
"oniguruma-parser": ["oniguruma-parser@0.12.1", "", {}, "sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w=="],
"oniguruma-to-es": ["oniguruma-to-es@4.3.4", "", { "dependencies": { "oniguruma-parser": "^0.12.1", "regex": "^6.0.1", "regex-recursion": "^6.0.2" } }, "sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA=="],
"perfect-debounce": ["perfect-debounce@2.1.0", "", {}, "sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g=="],
"picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="],
"picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="],
"postcss": ["postcss@8.5.6", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg=="],
"prettier": ["prettier@3.8.1", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg=="],
"property-information": ["property-information@7.1.0", "", {}, "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ=="],
"regex": ["regex@6.1.0", "", { "dependencies": { "regex-utilities": "^2.3.0" } }, "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg=="],
"regex-recursion": ["regex-recursion@6.0.2", "", { "dependencies": { "regex-utilities": "^2.3.0" } }, "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg=="],
"regex-utilities": ["regex-utilities@2.3.0", "", {}, "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng=="],
"rfdc": ["rfdc@1.4.1", "", {}, "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA=="],
"rollup": ["rollup@4.57.1", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.57.1", "@rollup/rollup-android-arm64": "4.57.1", "@rollup/rollup-darwin-arm64": "4.57.1", "@rollup/rollup-darwin-x64": "4.57.1", "@rollup/rollup-freebsd-arm64": "4.57.1", "@rollup/rollup-freebsd-x64": "4.57.1", "@rollup/rollup-linux-arm-gnueabihf": "4.57.1", "@rollup/rollup-linux-arm-musleabihf": "4.57.1", "@rollup/rollup-linux-arm64-gnu": "4.57.1", "@rollup/rollup-linux-arm64-musl": "4.57.1", "@rollup/rollup-linux-loong64-gnu": "4.57.1", "@rollup/rollup-linux-loong64-musl": "4.57.1", "@rollup/rollup-linux-ppc64-gnu": "4.57.1", "@rollup/rollup-linux-ppc64-musl": "4.57.1", "@rollup/rollup-linux-riscv64-gnu": "4.57.1", "@rollup/rollup-linux-riscv64-musl": "4.57.1", "@rollup/rollup-linux-s390x-gnu": "4.57.1", "@rollup/rollup-linux-x64-gnu": "4.57.1", "@rollup/rollup-linux-x64-musl": "4.57.1", "@rollup/rollup-openbsd-x64": "4.57.1", "@rollup/rollup-openharmony-arm64": "4.57.1", "@rollup/rollup-win32-arm64-msvc": "4.57.1", "@rollup/rollup-win32-ia32-msvc": "4.57.1", "@rollup/rollup-win32-x64-gnu": "4.57.1", "@rollup/rollup-win32-x64-msvc": "4.57.1", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A=="],
"shiki": ["shiki@3.22.0", "", { "dependencies": { "@shikijs/core": "3.22.0", "@shikijs/engine-javascript": "3.22.0", "@shikijs/engine-oniguruma": "3.22.0", "@shikijs/langs": "3.22.0", "@shikijs/themes": "3.22.0", "@shikijs/types": "3.22.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-LBnhsoYEe0Eou4e1VgJACes+O6S6QC0w71fCSp5Oya79inkwkm15gQ1UF6VtQ8j/taMDh79hAB49WUk8ALQW3g=="],
"source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="],
"space-separated-tokens": ["space-separated-tokens@2.0.2", "", {}, "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q=="],
"speakingurl": ["speakingurl@14.0.1", "", {}, "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ=="],
"stringify-entities": ["stringify-entities@4.0.4", "", { "dependencies": { "character-entities-html4": "^2.0.0", "character-entities-legacy": "^3.0.0" } }, "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg=="],
"superjson": ["superjson@2.2.6", "", { "dependencies": { "copy-anything": "^4" } }, "sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA=="],
"tabbable": ["tabbable@6.4.0", "", {}, "sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg=="],
"tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="],
"trim-lines": ["trim-lines@3.0.1", "", {}, "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg=="],
"unist-util-is": ["unist-util-is@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g=="],
"unist-util-position": ["unist-util-position@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA=="],
"unist-util-stringify-position": ["unist-util-stringify-position@4.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ=="],
"unist-util-visit": ["unist-util-visit@5.1.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg=="],
"unist-util-visit-parents": ["unist-util-visit-parents@6.0.2", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ=="],
"vfile": ["vfile@6.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "vfile-message": "^4.0.0" } }, "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q=="],
"vfile-message": ["vfile-message@4.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw=="],
"vite": ["vite@7.3.1", "", { "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA=="],
"vitepress": ["vitepress@2.0.0-alpha.16", "", { "dependencies": { "@docsearch/css": "^4.5.3", "@docsearch/js": "^4.5.3", "@docsearch/sidepanel-js": "^4.5.3", "@iconify-json/simple-icons": "^1.2.68", "@shikijs/core": "^3.21.0", "@shikijs/transformers": "^3.21.0", "@shikijs/types": "^3.21.0", "@types/markdown-it": "^14.1.2", "@vitejs/plugin-vue": "^6.0.3", "@vue/devtools-api": "^8.0.5", "@vue/shared": "^3.5.27", "@vueuse/core": "^14.1.0", "@vueuse/integrations": "^14.1.0", "focus-trap": "^7.8.0", "mark.js": "8.11.1", "minisearch": "^7.2.0", "shiki": "^3.21.0", "vite": "^7.3.1", "vue": "^3.5.27" }, "peerDependencies": { "markdown-it-mathjax3": "^4", "oxc-minify": "*", "postcss": "^8" }, "optionalPeers": ["markdown-it-mathjax3", "oxc-minify", "postcss"], "bin": { "vitepress": "bin/vitepress.js" } }, "sha512-w1nwsefDVIsje7BZr2tsKxkZutDGjG0YoQ2yxO7+a9tvYVqfljYbwj5LMYkPy8Tb7YbPwa22HtIhk62jbrvuEQ=="],
"vue": ["vue@3.5.28", "", { "dependencies": { "@vue/compiler-dom": "3.5.28", "@vue/compiler-sfc": "3.5.28", "@vue/runtime-dom": "3.5.28", "@vue/server-renderer": "3.5.28", "@vue/shared": "3.5.28" }, "peerDependencies": { "typescript": "*" }, "optionalPeers": ["typescript"] }, "sha512-BRdrNfeoccSoIZeIhyPBfvWSLFP4q8J3u8Ju8Ug5vu3LdD+yTM13Sg4sKtljxozbnuMu1NB1X5HBHRYUzFocKg=="],
"zwitch": ["zwitch@2.0.4", "", {}, "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A=="],
}
}
+540 -551
View File
File diff suppressed because it is too large Load Diff
+4 -5
View File
@@ -1,7 +1,6 @@
:root {
--vp-c-brand: #40b8a6;
--vp-c-brand-light: #75ead4;
--vp-c-brand-lighter: #d1fbf1;
--vp-c-brand-dark: #28766e;
--vp-c-brand-darker: #1e4e4a;
--vp-c-brand-1: #40b8a6;
--vp-c-brand-2: #28766e;
--vp-c-brand-3: #1e4e4a;
--vp-c-brand-soft: rgba(64, 184, 166, 0.16);
}
@@ -0,0 +1,38 @@
import path from "path";
export default function graphqlWarnPlugin() {
return {
name: "graphql-warn-plugin",
enforce: "pre",
transform(code, id) {
if (!id.endsWith(".md")) return;
const relativePath = path.relative(process.cwd(), id);
if (!relativePath.includes("graphql")) return;
const warningBlock = [
"::: warning",
"⚠️ The GraphQL API is experimental and subject to change without notice.",
":::",
"",
].join("\n");
if (code.startsWith("---")) {
const endOfFrontmatter = code.indexOf("---", 3);
if (endOfFrontmatter !== -1) {
const before = code.slice(0, endOfFrontmatter + 3);
const after = code.slice(endOfFrontmatter + 3);
return {
code: `${before}\n\n${warningBlock}${after}`,
map: null,
};
}
}
return {
code: warningBlock + code,
map: null,
};
},
};
}
@@ -1,39 +0,0 @@
---
title: Announcement Force Delete
---
# Announcement Force Delete Endpoint
The announcement force delete endpoint hard deletes an announcement and returns a confirmation message.
For example, the `/forceDelete/announcement/1` endpoint will hard delete the announcement of id '1' and return a confirmation message.
## URL
```sh
DELETE /forceDelete/announcement/{id}
```
## Authentication
**Required Permission**: force delete announcement
**Roles with Permission**: Admin
## Parameters
None
## Response
```json
{
message: "The Announcement '1' was deleted.",
}
```
## Example
```bash
curl -X DELETE -H "Authorization: Bearer {token}" https://api.animethemes.moe/forceDelete/announcement/1
```
-47
View File
@@ -1,47 +0,0 @@
---
title: Announcement Restore
---
# Announcement Restore Endpoint
The announcement restore endpoint restores a soft deleted announcement and returns the restored announcement resource.
For example, the `/restore/announcement/1` endpoint will restore the soft deleted announcement of id '1' and return the restored announcement resource.
## URL
```sh
PATCH /restore/announcement/{id}
```
## Authentication
**Required Permission**: restore announcement
**Roles with Permission**: Admin
**Other Requirements**: Announcement must be soft deleted
## Parameters
None
## Response
```json
{
announcement: {
id: id,
content: "content",
created_at: "created_at",
updated_at: "updated_at",
deleted_at: "deleted_at"
}
}
```
## Example
```bash
curl -X PATCH -H "Authorization: Bearer {token}" https://api.animethemes.moe/restore/announcement/1
```
-39
View File
@@ -1,39 +0,0 @@
---
title: Dump Force Delete
---
# Dump Force Delete Endpoint
The dump force delete endpoint hard deletes a dump and returns a confirmation message.
For example, the `/forceDelete/dump/1` endpoint will hard delete the dump of id '1' and return a confirmation message.
## URL
```sh
DELETE /forceDelete/dump/{id}
```
## Authentication
**Required Permission**: force delete dump
**Roles with Permission**: Admin
## Parameters
None
## Response
```json
{
message: "The Dump '1' was deleted.",
}
```
## Example
```bash
curl -X DELETE -H "Authorization: Bearer {token}" https://api.animethemes.moe/forceDelete/dump/1
```
-48
View File
@@ -1,48 +0,0 @@
---
title: Dump Restore
---
# Dump Restore Endpoint
The dump restore endpoint restores a soft deleted dump and returns the restored dump resource.
For example, the `/restore/dump/1` endpoint will restore the soft deleted dump of id '1' and return the restored dump resource.
## URL
```sh
PATCH /restore/dump/{id}
```
## Authentication
**Required Permission**: restore dump
**Roles with Permission**: Admin
**Other Requirements**: Dump must be soft deleted
## Parameters
None
## Response
```json
{
dump: {
id: id,
path: "path",
created_at: "created_at",
updated_at: "updated_at",
deleted_at: "deleted_at",
link: "link
}
}
```
## Example
```bash
curl -X PATCH -H "Authorization: Bearer {token}" https://api.animethemes.moe/restore/dump/1
```
@@ -1,39 +0,0 @@
---
title: Featured Theme Force Delete
---
# Featured Theme Force Delete Endpoint
The featured theme force delete endpoint hard deletes a featured theme and returns a confirmation message.
For example, the `/forceDelete/featuredtheme/1` endpoint will hard delete the featured theme of id '1' and return a confirmation message.
## URL
```sh
DELETE /forceDelete/featuredtheme/{id}
```
## Authentication
**Required Permission**: force delete featured theme
**Roles with Permission**: Admin
## Parameters
None
## Response
```json
{
message: "The Featured Theme '1' was deleted.",
}
```
## Example
```bash
curl -X DELETE -H "Authorization: Bearer {token}" https://api.animethemes.moe/forceDelete/featuredtheme/1
```
-48
View File
@@ -1,48 +0,0 @@
---
title: Featured Theme Restore
---
# Featured Theme Restore Endpoint
The featured theme restore endpoint restores a soft deleted featured theme and returns the restored featured theme resource.
For example, the `/restore/featuredtheme/1` endpoint will restore the soft deleted featured theme of id '1' and return the restored featured theme resource.
## URL
```sh
PATCH /restore/featuredtheme/{id}
```
## Authentication
**Required Permission**: restore featured theme
**Roles with Permission**: Admin
**Other Requirements**: Featured Theme must be soft deleted
## Parameters
None
## Response
```json
{
featuredtheme: {
id: id,
start_at: "start_at",
end_at: "end_at",
created_at: "created_at",
updated_at: "updated_at",
deleted_at: "deleted_at"
}
}
```
## Example
```bash
curl -X PATCH -H "Authorization: Bearer {token}" https://api.animethemes.moe/restore/featuredtheme/1
```
@@ -0,0 +1,53 @@
---
title: Filter by External Site
---
# Filter by External Site
---
The AnimeThemes API provides an exclusive query for one of its most common use cases.
The `findAnimeByExternalSite` query accepts three arguments to filter anime by external resources.
An external resource may be linked to multiple anime.
## Query Example
```graphql
query ($id: [Int!]) {
findAnimeByExternalSite(site: ANILIST, id: $id) {
name
format
season
year
}
}
```
## Authentication
None
## Parameters
| Name | Type | Description |
| :---: | :-----------: | :------------------------------------------------------------------------- |
| site | ResourceSite! | The site enum used to filter. |
| id | [Int!] | The ids of the anime on the external site. Required if no `link` provided. |
| link | String | The URL of the external resource. Required if no `id` provided. |
## Response
```json
{
"data": {
"findAnimeByExternalSite": [
{
"name": "Hibike! Euphonium 3",
"format": "TV",
"season": "SPRING",
"year": 2024
}
]
}
}
```
+98
View File
@@ -0,0 +1,98 @@
---
title: Global Search
---
# Global Search Query
---
The global search query returns a listing of resources that match a given search term.
## Query Example
```graphql
query ($search: String!) {
search(search: $search) {
anime {
name
}
artists {
name
}
animethemes {
type
}
playlists {
name
}
series {
name
}
songs {
title
}
studios {
name
}
videos {
basename
}
}
}
```
## Authentication
None
## Parameters
| Name | Type | Description |
| :----------: | :------: | :----------------------------- |
| page | Int | Index of the current page |
| first | Int! | Number of items per page |
| search | String! | The term used for the search |
## Response
```json
{
search: {
anime: [
{
name: "name"
}
],
animethemes: [
{
type: "type"
}
],
artists: [
{
name: "name"
}
],
playlists: [
{
name: "name"
}
],
series: [
{
name: "name"
}
],
songs: [
{
title: "title"
}
],
videos: [
{
basename: "basename"
}
]
}
}
```
+109
View File
@@ -0,0 +1,109 @@
---
title: Filtering
---
# Filtering
---
Most queries provide some filtering arguments using the AND operator. Filtering arguments are built using the `{field}_{filter}` case pattern.
Query example:
```graphql
query {
animePagination(name_like: "%monogatari%") {
data {
name
}
}
}
```
## Relationship Filtering
Filtering in relationships is applied **ONLY** to the relationship and does not affect the previous root.
```graphql
query {
anime(slug: "hibike_euphonium") {
name
animethemes(type: OP) {
type
sequence
}
}
}
```
## Advanced Filtering
The where argument allows you to apply flexible and composable filters to pagination queries.
It supports single conditions, logical operators, and nested filters.
```graphql
query {
animePagination(
where: {
column: SEASON,
operator: NEQ,
value: FALL
}
) {
data {
name
season
}
}
}
```
### Logical Operators
Logical operators (AND, OR) can be nested to build complex filter trees, allowing advanced query expressions with precise control over result sets.
Query example:
```graphql
query {
# Returns all anime where the season is either WINTER or FALL.
animePagination(
where: {
OR: [
{
column: SEASON,
operator: EQ,
value: WINTER,
},
{
column: SEASON,
operator: EQ,
value: FALL,
}
]
}
) {
data {
name
season
}
}
}
```
### Comparison Operators
| Value | Description |
| :---------: | :----------------------------------------------------------------------------- |
| EQ | Matches values that are exactly equal to the given value. |
| NEQ | Matches values that are not equal to the given value. |
| LT | Matches values less than the given value. |
| GT | Matches values greater than the given value. |
| LTE | Matches values less than or equal to the given value. |
| GTE | Matches values greater than or equal to the given value. |
| LIKE | Matches values that partially match the given pattern (using wildcard search). |
| NOT_LIKE | Matches values that do not match the given pattern. |
| IN | Matches values that are within the given values. |
| NOT_IN | Matches values that are not within the given values. |
| BETWEEN | Matches values that are within a range of the given values. |
| NOT_BETWEEN | Matches values that are not within a range of the given values. |
| IS_NULL | Matches values that are null. |
| IS_NOT_NULL | Matches values that are not null. |
@@ -0,0 +1,57 @@
---
title: Getting Started
---
# Getting Started
---
The AnimeThemes API selectively implements the [**GraphQL Tool**](https://graphql.org).
Here we will provide an overview of where the AnimeThemes API adheres to or deviates from the specification.
It is recommended that you learn how to wrap a [GraphQL API](https://graphql.org/learn/).
## Content Negotiation
The AnimeThemes API needs a `Content-Type` header.
```powershell
# A simple curl request works like this.
curl -X POST
-H "Content-Type: application/json"
-d "{\"query\": \"{ animePagination { data { name } } }\"}"
https://graphql.animethemes.moe/
```
## Document Structure
### Top Level
The AnimeThemes API specifies a custom `data` wrap for top-level members that use pagination.
The following query
```graphql
query {
animePagination {
data {
name
}
}
}
```
will return the JSON:
```json
{
"data": {
"animePagination": {
"data": [
{
"name": ".hack//Liminality"
},
...
]
}
}
}
```
+70
View File
@@ -0,0 +1,70 @@
---
title: Pagination
---
# Pagination
---
The AnimeThemes API query that uses pagination shall contain a `paginationInfo` object for pagination strategies and a `data` collection with the resources.
The top-level fields that use pagination are singular and have the `Pagination` suffix.
## Arguments
There are two arguments available for every query that uses pagination.
| Name | Type | Default | Max | Description |
| :-------: | :------: | :------: | :------: | ----------------------------------------- |
| first | Int! | 15 | 100 | Limits number of fetched items |
| page | Int | 1 | lastPage | The offset from which items are returned |
## Query
The following query
```graphql
query {
animePagination(first: 2, page: 1) {
paginatorInfo {
count
currentPage
firstItem
hasMorePages
lastItem
lastPage
perPage
total
}
data {
name
}
}
}
```
will return the JSON:
```json
{
"data": {
"animePagination": {
"paginationInfo": {
"count": 2,
"currentPage": 1,
"firstItem": 1,
"hasMorePages": true,
"lastItem": 2,
"lastPage": 2317,
"perPage": 2,
"total": 4633
},
"data": [
{
"name": ".hack//Liminality"
},
{
"name": ".hack//roots"
}
]
}
}
}
+191
View File
@@ -0,0 +1,191 @@
---
title: Relationships
---
# Relationships
---
The AnimeThemes API implements relationships for most types, previously known as "allowed includes" in the JSON:API.
The many-to-many relationships apply connections. The one-to-many relationships apply simple pagination.
## One-to-Many
A one-to-many relationship has a list of objects that reference the related type.
And an inverse one-to-many relationship has a unique object that references the related type.
```graphql
query($slug: String!) {
anime(slug: $slug) {
animethemes {
sequence
animethemeentries(first: 1, version: 1) { # Inverse One-to-Many
version
}
anime { # One-to-Many
name
}
}
}
}
```
## Many-to-Many
Every many-to-many relationship applies connection pagination and has three top fields.
Read about it in the [graphql.org](https://graphql.org/learn/pagination/#pagination-and-edges)
and [relay.dev](https://relay.dev/graphql/connections.htm) documentations if you don't know what it is.
The `pageInfo` field provides pagination information.
The `nodes` field returns a list of objects that reference the related type.
Use this field if you don't care about the pivot fields of the relationship.
The `edges` field returns a list of `edge` objects.
The `edge` object always contains a `node` field that returns a singular object of the related type,
and the pivot fields of the relationship.
Both fields `createdAt` and `updatedAt` are available for every many-to-many relationship.
The following query
```graphql
query {
anime(slug: "hibike_euphonium") {
name
series {
pageInfo { # Pagination
hasNextPage
hasPreviousPage
startCursor
endCursor
total
count
currentPage
lastPage
}
nodes { # Without pivot fields
name
}
edges { # With pivot fields
node {
name
}
createdAt
updatedAt
}
}
}
}
```
will return the JSON:
```json
{
"data": {
"anime": {
"name": "Hibike! Euphonium",
"series": {
"pageInfo": {
"hasNextPage": false,
"hasPreviousPage": false,
"startCursor": "MQ==",
"endCursor": "MQ==",
"total": 1,
"count": 1,
"currentPage": 1,
"lastPage": 1
},
"nodes": [
{
"name": "Hibike! Euphonium"
}
],
"edges": [
{
"node": {
"name": "Hibike! Euphonium"
},
"createdAt": "2021-03-27 01:58:45",
"updatedAt": "2021-03-27 01:58:45"
}
]
}
}
}
}
```
## Polymorphic Many-to-Many
The polymorphic many-to-many relationship uses the same strategy as the usual [many-to-many](#many-to-many-belongstomany).
The following query
```graphql
query {
anime(slug: "hibike_euphonium") {
name
resources {
pageInfo { # Pagination
hasNextPage
hasPreviousPage
startCursor
endCursor
total
count
currentPage
lastPage
}
nodes { # Without pivot fields
link
}
edges { # With pivot fields
node {
link
}
as
createdAt
updatedAt
}
}
}
}
```
will return the JSON:
```json
{
"data": {
"anime": {
"name": "Hibike! Euphonium",
"resources": {
"pageInfo": {
"hasNextPage": false,
"hasPreviousPage": false,
"startCursor": "MQ==",
"endCursor": "OQ==",
"total": 9,
"count": 9,
"currentPage": 1,
"lastPage": 1
},
"nodes": [
{
"link": "https://myanimelist.net/anime/27989"
},
...
],
"edges": [
{
"node": {
"link": "https://myanimelist.net/anime/27989"
},
"as": null,
"createdAt": "2021-03-26T21:49:16+00:00",
"updatedAt": "2021-03-26T21:49:16+00:00"
}
...
]
}
}
}
}
```
+102
View File
@@ -0,0 +1,102 @@
---
title: Sorting
---
# Sorting
---
Most queries provide a unique `sort` argument to manage resource sorting.
This argument accepts a list of `{type}Sort` enum cases.
To sort in ascending order, the field name is enough.
To sort in descending order, append `_DESC` to the field name.
## Query
```graphql
query {
animePagination(sort: NAME) { # Sorting in ascending direction.
data {
name
}
}
animePagination(sort: NAME_DESC) { # Sorting in descending direction.
data {
name
}
}
}
```
## Nested Sorting
In one-to-many relationships, it is possible to sort the through a relation.
For example, sort animethemes by their song title.
```graphql
query {
anime(slug: "hibike_euphonium") {
animethemes(sort: SONG_TITLE) {
song {
title
}
}
}
}
```
## Relationship Sorting
It is possible to sort the relationships of the parent type.
```graphql
query {
anime(slug: "hibike_euphonium") {
resources(sort: EXTERNAL_ID) {
nodes {
externalId
}
}
}
}
```
## Pivot Sorting
Sometimes, it is possible to sort results using pivot fields.
```graphql
query {
artistPagination {
data {
name
members(sort: MEMBER_RELEVANCE) {
edges {
node {
name
}
relevance
}
}
}
}
}
```
## Multiple Sorting
By providing a list of enum cases, the sort will be applied in the order of the values provided by the client.
```graphql
{
animePagination(sort: [YEAR_DESC, SEASON]) {
data {
year
season
}
}
}
```
+53
View File
@@ -0,0 +1,53 @@
---
title: Validation
---
# Validation
---
The AnimeThemes GraphQL API follows the [GraphQL official error handling specification](https://graphql.org/learn/response/#errors).
Whenever a validation error occurs, the API will still return an HTTP 200 status code. Instead of relying on status codes to indicate failure, errors are reported in the `errors` array within the response body.
Validation can fail for several reasons, including:
* An invalid query structure
* Missing required arguments
* Incorrect argument types or values
### Example
Consider the `findAnimeByExternalSite` query. This query requires at least one of the following arguments to function properly: `id` or `link`.
If neither argument is provided, the API will return an HTTP 200 response with an errors array describing the validation issue, similar to the following JSON:
```json
{
"errors": [
{
"message": "The id field is required when link is not present. (and 1 more error)",
"locations": [
{
"line": 2,
"column": 2
}
],
"path": [
"findAnimeByExternalSite"
],
"extensions": {
"validation": {
"id": [
"The id field is required when link is not present."
],
"link": [
"The link field is required when id is not present."
]
}
}
}
]
}
```
+35
View File
@@ -0,0 +1,35 @@
---
title: Introduction
---
# Introduction
---
AnimeThemes is a simple and consistent repository of anime opening and ending themes. We provide direct links to high quality WebMs of your favorite OPs and EDs for your listening and discussion needs.
The AnimeThemes API provides access to our repository resources for your development needs.
## [GraphQL](/graphql/guide/getting-started/)
The AnimeThemes API selectively implements the [**GraphQL Tool**](https://graphql.org).
We provide an overview of where the AnimeThemes API adheres to or deviates from the specification.
## [Rate Limiting](/graphql/intro/ratelimiting/)
The AnimeThemes API applies the standard named rate limiter of the Laravel Framework.
We provide an overview of managing request quotas.
## Terms of Use
The AnimeThemes API applies the [**AnimeThemes Terms of Service**](https://animethemes.moe/about/terms-of-service).
## Resources
For API support, please make use of the **#api** channel in the [**Discord Server**](https://discordapp.com/invite/m9zbVyQ).
To report an issue with or request a new feature for the API, please make use of the [**animethemes-server**](https://github.com/AnimeThemes/animethemes-server) Github.
To report an issue with or request a new feature for this documentation, please make use of the [**animethemes-api-docs**](https://github.com/AnimeThemes/animethemes-api-docs) Github.
+85
View File
@@ -0,0 +1,85 @@
---
title: Rate Limiting
---
# Rate Limiting
---
The AnimeThemes GraphQL API applies the standard named rate limiter of the Laravel Framework.
Here we will provide an overview of managing request quotas.
## Response Headers
The AnimeThemes GraphQL API limits 90 requests per minute.
The AnimeThemes API will return `X-RateLimit-Limit` and `X-RateLimit-Remaining` headers in the response.
```sh
...
X-RateLimit-Limit: 90
X-RateLimit-Remaining: 89
...
```
## Exceeding the Rate Limit
If the rate limit is exceeded, the AnimeThemes API will return `Retry-After` and `X-RateLimit-Reset` headers in the response with a 429 status code.
```sh
...
X-RateLimit-Limit: 90
X-RateLimit-Remaining: 0
Retry-After: 60
X-RateLimit-Reset: 1625073463180
...
```
Additionally, the AnimeThemes API will return an error message in the response body.
```json
{
message: "Too Many Attempts."
}
```
## Query Depth Limit
Clients can nest fields within other fields, which can quickly result in deeply nested queries.
The AnimeThemes GraphQL API enforces a maximum query depth of 13.
If your query exceeds this limit, the API will return a 200 status code with the following error response:
```json
{
"errors": [
{
"message": "Max query depth should be 13 but got 16."
}
]
}
```
## Query Complexity Limit
Clients can request a lot of fields, which can quickly result in a lot of heavy logic.
The AnimeThemes GraphQL API enforces a maximum of 10000 of complexity value.
If your query exceeds this limit, the API will return a 200 status code with the following error response:
```json
{
"errors": [
{
"message": "Max query complexity should be 10000 but got 15000."
}
]
}
```
::: warning
The current complexity value is experimental and debatable. It may change.
:::
+48
View File
@@ -0,0 +1,48 @@
---
title: Migrating from JSON:API
---
# Migrating from JSON:PI
---
While writing the GraphQL API, it was decided to make some changes to follow the [best practices recommended by GraphQL](https://graphql.org/learn/best-practices/).
## Field names
Fields in the JSON:API are snake_case, but now it is camelCase instead.
Affected Fields:
* start_at -> startAt
* end_at -> endAt
* email_verified_at -> emailVerifiedAt
* two_factor_confirmed_at -> twoFactorConfirmedAt
* guard_name -> guardName (removed)
* media_format -> format
* external_id -> externalId
* created_at -> createdAt
* updated_at -> updatedAt
* deleted_at -> deletedAt (removed)
## Artists to Performances
The AnimeThemes API now introduces a new way to credit artists for songs. Each artist associated with a song is represented as a performance.
With this updated schema, individual group members can now be credited directly on a song, rather than only the entire group being credited.
While you can retrieve all performances for a song through the `performances` relationship, the structure differs when viewed from the artists side.
Usual performances are typically available through the `performances` relationship. You may want to deduplicate the performances by the song's id, because it returns the information for each group-member relation.
If an artist is performing a song as part of a group, use the `memberPerformances` relationship.
Ideally you should use both and connect them on your code.
For more information, see the [wiki section on performances](https://animethemes.moe/wiki/guidelines/contribution#performances).
## From Group to ThemeGroup
It is easy to confuse what a group is. They can be a group of animethemes (e.g. "English Version") or a group of artists (e.g. "Aqours").
The `group` query/type does not exist. For a group of animethemes, the query is `themegroupPagination`. For a group of artists, they are included globally in the `artistPagination` query.
+19 -15
View File
@@ -11,27 +11,31 @@ hero:
alt: Logo
actions:
- theme: brand
text: Get Started
link: /intro/
text: Get Started with GraphQL
link: /graphql/intro/
- theme: alt
text: GraphiQL
link: https://graphql.animethemes.moe/graphiql
- theme: alt
text: Sandbox
link: https://graphql.animethemes.moe/sandbox
- theme: alt
text: Get Started with JSON:API
link: /intro
features:
- icon: 🔍
title: Advanced Querying
details: Support for randomization, searching and filtering by direct fields and relation fields out of the box
link: /graphql/guide/filtering/
linkText: GraphQL Example
- icon: 📻
title: Media Links
details: Embed or download audio and video using links provided by resources
link: /wiki/video/show/#response
linkText: Example
link: /content/video/show/#response
linkText: JSON:API Example
- icon: 🕸️
title: External Mappings
details: Find resources based on their mappings to sites like MyAnimeList or AniList
link: /intro/jsonapi/#has-filter
linkText: Example
- icon: 🔍
title: Advanced Querying
details: Support for randomization, searching and filtering by direct fields and relation fields out of the box
link: /intro/jsonapi/#filtering
linkText: Example
- icon: ✍️
title: Resource Management
details: Apply edits to our database (for users with requisite permissions)
link: /wiki/anime/store/
linkText: Example
linkText: JSON:API Example
---
@@ -4,9 +4,9 @@ title: Announcement Destroy
# Announcement Destroy Endpoint
The announcement destroy endpoint soft deletes an announcement and returns the deleted announcement resource.
The announcement destroy endpoint deletes an announcement and returns a confirmation message.
For example, the `/announcement/1` endpoint will soft delete the announcement of id '1' and return the deleted announcement resource.
For example, the `/announcement/1` endpoint will delete the announcement of id '1' and return a confirmation message.
## URL
@@ -20,8 +20,6 @@ DELETE /announcement/{id}
**Roles with Permission**: Admin
**Other Requirements**: Announcement must not be soft deleted
## Parameters
None
@@ -34,8 +32,7 @@ None
id: id,
content: "content",
created_at: "created_at",
updated_at: "updated_at",
deleted_at: "deleted_at"
updated_at: "updated_at"
}
}
```
@@ -6,7 +6,7 @@ title: Announcement
---
An announcement API resource represents a site-wide message to be broadcasted on the homepage.
An announcement API resource represents a site-wide message to be broadcasted on the homepage.
For example, if video streaming is disabled, the site staff may issue a "Video streaming has been disabled!" announcement.
@@ -18,7 +18,6 @@ For example, if video streaming is disabled, the site staff may issue a "Video s
| content | String | No | Yes | The announcement text |
| created_at | Date | No | No | The date that the resource was created |
| updated_at | Date | No | No | The date that the resource was last modified |
| deleted_at | Date | Yes | No | The date that the resource was deleted |
## Allowed Include Paths
@@ -28,20 +27,12 @@ None
**[Announcement Destroy](/admin/announcement/destroy/)**
The announcement destroy endpoint soft deletes an announcement and returns the deleted announcement resource.
**[Announcement Force Delete](/admin/announcement/forceDelete/)**
The announcement force delete endpoint hard deletes an announcement and returns a confirmation message.
The announcement destroy endpoint deletes an announcement and returns a confirmation message.
**[Announcement Index](/admin/announcement/index/)**
The announcement index endpoint displays a listing of announcement resources.
**[Announcement Restore](/admin/announcement/restore/)**
The announcement restore endpoint restores a soft deleted announcement and returns the restored announcement resource.
**[Announcement Show](/admin/announcement/show/)**
The announcement show endpoint returns an announcement resource.
@@ -34,7 +34,6 @@ None
| content | Sort resources on the announcement text |
| created_at | Sort resources on the resource creation date |
| updated_at | Sort resources on the resource last modified date |
| deleted_at | Sort resources on the resource deletion date |
| random | Sort resources randomly. Ignored if other sort fields are provided. |
## Filters
@@ -45,8 +44,6 @@ None
| content | Filter resources on the announcement text |
| created_at | Filter resources on the resource creation date |
| updated_at | Filter resources on the resource last modified date |
| deleted_at | Filter resources on the resource deletion date |
| trashed | Filter resources on trashed (deleted) status [With, Without, Only] |
## Response
@@ -57,8 +54,7 @@ None
id: id,
content: "content",
created_at: "created_at",
updated_at: "updated_at",
deleted_at: "deleted_at"
updated_at: "updated_at"
},
...
],
@@ -30,8 +30,7 @@ None
id: id,
content: "content",
created_at: "created_at",
updated_at: "updated_at",
deleted_at: "deleted_at"
updated_at: "updated_at"
}
}
```
@@ -34,8 +34,7 @@ POST /announcement
id: id,
content: "content",
created_at: "created_at",
updated_at: "updated_at",
deleted_at: "deleted_at"
updated_at: "updated_at"
}
}
```
@@ -20,8 +20,6 @@ PUT|PATCH /announcement/{id}
**Roles with Permission**: Admin
**Other Requirements**: Announcement must not be soft deleted
## Parameters
| Name | Required | Rules |
@@ -36,8 +34,7 @@ PUT|PATCH /announcement/{id}
id: id,
content: "content",
created_at: "created_at",
updated_at: "updated_at",
deleted_at: "deleted_at"
updated_at: "updated_at"
}
}
```
@@ -4,9 +4,9 @@ title: Dump Destroy
# Dump Destroy Endpoint
The dump destroy endpoint soft deletes a dump and returns the deleted dump resource.
The dump destroy endpoint deletes a dump and returns a confirmation message.
For example, the `/dump/1` endpoint will soft delete the dump of id '1' and return the deleted dump resource.
For example, the `/dump/1` endpoint will delete the dump of id '1' and return a confirmation message.
## URL
@@ -20,8 +20,6 @@ DELETE /dump/{id}
**Roles with Permission**: Admin
**Other Requirements**: Dump must not be soft deleted
## Parameters
None
@@ -35,7 +33,6 @@ None
path: "path",
created_at: "created_at",
updated_at: "updated_at",
deleted_at: "deleted_at",
link: "link
}
}
@@ -6,9 +6,9 @@ title: Dump
---
A dump API resource represents a database dump of selected tables at a given point in time.
A dump API resource represents a database dump of selected tables at a given point in time.
For example, the animethemes-db-dump-wiki-1663559663946.sql dump represents the database dump of wiki tables performed at 2022-09-19.
For example, the animethemes-db-dump-content-1663559663946.sql dump represents the database dump of content tables performed at 2022-09-19.
## Fields
@@ -18,7 +18,6 @@ For example, the animethemes-db-dump-wiki-1663559663946.sql dump represents the
| path | String | No | Yes | The path of the file in storage |
| created_at | Date | No | No | The date that the resource was created |
| updated_at | Date | No | No | The date that the resource was last modified |
| deleted_at | Date | Yes | No | The date that the resource was deleted |
| link | String | No | Yes | The URL to download the file from storage |
## Allowed Include Paths
@@ -29,20 +28,12 @@ None
**[Dump Destroy](/admin/dump/destroy/)**
The dump destroy endpoint soft deletes a dump and returns the deleted dump resource.
**[Dump Force Delete](/admin/dump/forceDelete/)**
The dump force delete endpoint hard deletes a dump and returns a confirmation message.
The dump destroy endpoint deletes a dump and returns a confirmation message.
**[Dump Index](/admin/dump/index/)**
The dump index endpoint displays a listing of dump resources.
**[Dump Restore](/admin/dump/restore/)**
The dump restore endpoint restores a soft deleted dump and returns the restored dump resource.
**[Dump Show](/admin/dump/show/)**
The dump show endpoint returns a dump resource.
@@ -34,7 +34,6 @@ None
| path | Sort resources on the path of the file in storage |
| created_at | Sort resources on the resource creation date |
| updated_at | Sort resources on the resource last modified date |
| deleted_at | Sort resources on the resource deletion date |
| random | Sort resources randomly. Ignored if other sort fields are provided. |
## Filters
@@ -45,8 +44,6 @@ None
| path | Filter resources on the path of the file in storage |
| created_at | Filter resources on the resource creation date |
| updated_at | Filter resources on the resource last modified date |
| deleted_at | Filter resources on the resource deletion date |
| trashed | Filter resources on trashed (deleted) status [With, Without, Only] |
## Response
@@ -58,7 +55,6 @@ None
path: "path",
created_at: "created_at",
updated_at: "updated_at",
deleted_at: "deleted_at",
link: "link"
},
...
@@ -31,7 +31,6 @@ None
path: "path",
created_at: "created_at",
updated_at: "updated_at",
deleted_at: "deleted_at",
link: "link"
}
}
@@ -6,7 +6,7 @@ title: Dump Store
The dump store endpoint creates a new dump and returns the new dump resource.
For example, the `/dump?path=animethemes-db-dump-wiki-1663559663946.sql` endpoint will create a new dump and return the new dump resource.
For example, the `/dump?path=animethemes-db-dump-content-1663559663946.sql` endpoint will create a new dump and return the new dump resource.
## URL
@@ -35,7 +35,6 @@ POST /dump
path: "path",
created_at: "created_at",
updated_at: "updated_at",
deleted_at: "deleted_at",
link: "link"
}
}
@@ -6,7 +6,7 @@ title: Dump Update
The dump update endpoint updates a dump and returns the updated dump resource.
For example, the `/dump/1?path=animethemes-db-dump-wiki-1663559663946.sql` endpoint will update the dump path attribute and return the updated dump resource.
For example, the `/dump/1?path=animethemes-db-dump-content-1663559663946.sql` endpoint will update the dump path attribute and return the updated dump resource.
## URL
@@ -20,8 +20,6 @@ PUT|PATCH /dump/{id}
**Roles with Permission**: Admin
**Other Requirements**: Dump must not be soft deleted
## Parameters
| Name | Required | Rules |
@@ -37,7 +35,6 @@ PUT|PATCH /dump/{id}
path: "path",
created_at: "created_at",
updated_at: "updated_at",
deleted_at: "deleted_at",
link: "link"
}
}
@@ -34,8 +34,7 @@ None
start_at: "start_at",
end_at: "end_at",
created_at: "created_at",
updated_at: "updated_at",
deleted_at: "deleted_at"
updated_at: "updated_at"
}
}
```
@@ -4,9 +4,9 @@ title: Featured Theme Destroy
# Featured Theme Destroy Endpoint
The featured theme destroy endpoint soft deletes a featured theme and returns the deleted featured theme resource.
The featured theme destroy endpoint deletes a featured theme and returns a confirmation message.
For example, the `/featuredtheme/1` endpoint will soft delete the featured theme of id '1' and return the deleted featured theme resource.
For example, the `/featuredtheme/1` endpoint will delete the featured theme of id '1' and return a confirmation message.
## URL
@@ -20,8 +20,6 @@ DELETE /featuredtheme/{id}
**Roles with Permission**: Admin
**Other Requirements**: Featured Theme must not be soft deleted
## Parameters
None
@@ -35,8 +33,7 @@ None
start_at: "start_at",
end_at: "end_at",
created_at: "created_at",
updated_at: "updated_at",
deleted_at: "deleted_at"
updated_at: "updated_at"
}
}
```
@@ -17,7 +17,6 @@ A featured theme API resource represents a video to be featured on the homepage
| end_at | Date | No | Yes | The end date of the resource |
| created_at | Date | No | No | The date that the resource was created |
| updated_at | Date | No | No | The date that the resource was last modified |
| deleted_at | Date | Yes | No | The date that the resource was deleted |
## Allowed Include Paths
@@ -39,20 +38,12 @@ The current featured theme show endpoint returns the first featured theme where
**[Featured Theme Destroy](/admin/featuredtheme/destroy/)**
The featured theme destroy endpoint soft deletes a featured theme and returns the deleted featured theme resource.
**[Featured Theme Force Delete](/admin/featuredtheme/forceDelete/)**
The featured theme force delete endpoint hard deletes a featured theme and returns a confirmation message.
The featured theme destroy endpoint deletes a featured theme and returns a confirmation message.
**[Featured Theme Index](/admin/featuredtheme/index/)**
The featured theme index endpoint displays a listing of featured theme resources.
**[Featured Theme Restore](/admin/featuredtheme/restore/)**
The featured theme restore endpoint restores a soft deleted featured theme and returns the restored featured theme resource.
**[Featured Theme Show](/admin/featuredtheme/show/)**
The featured theme show endpoint returns a featured theme resource.
@@ -35,7 +35,6 @@ None
| end_at | Sort resources on the resource end date |
| created_at | Sort resources on the resource creation date |
| updated_at | Sort resources on the resource last modified date |
| deleted_at | Sort resources on the resource deletion date |
| random | Sort resources randomly. Ignored if other sort fields are provided. |
## Filters
@@ -47,8 +46,6 @@ None
| end_at | Filter resources on the resource end date |
| created_at | Filter resources on the resource creation date |
| updated_at | Filter resources on the resource last modified date |
| deleted_at | Filter resources on the resource deletion date |
| trashed | Filter resources on trashed (deleted) status [With, Without, Only] |
## Response
@@ -60,8 +57,7 @@ None
start_at: "start_at",
end_at: "end_at",
created_at: "created_at",
updated_at: "updated_at",
deleted_at: "deleted_at"
updated_at: "updated_at"
},
...
],
@@ -34,8 +34,7 @@ GET /featuredtheme/{id}
start_at: "start_at",
end_at: "end_at",
created_at: "created_at",
updated_at: "updated_at",
deleted_at: "deleted_at"
updated_at: "updated_at"
}
}
```
@@ -39,8 +39,7 @@ POST /featuredtheme
start_at: "start_at",
end_at: "end_at",
created_at: "created_at",
updated_at: "updated_at",
deleted_at: "deleted_at"
updated_at: "updated_at"
}
}
```
@@ -20,8 +20,6 @@ PUT|PATCH /featuredtheme/{id}
**Roles with Permission**: Admin
**Other Requirements**: Featured Theme must not be soft deleted
## Parameters
| Name | Required | Rules |
@@ -41,8 +39,7 @@ PUT|PATCH /featuredtheme/{id}
start_at: "start_at",
end_at: "end_at",
created_at: "created_at",
updated_at: "updated_at",
deleted_at: "deleted_at"
updated_at: "updated_at"
}
}
```
@@ -14,6 +14,5 @@ A permission API resource represents an assignable label for users and roles tha
| :--------: | :-----: | :------: | :-----: | :------------------------------------------- |
| id | Integer | No | Yes | The primary key of the resource |
| name | String | No | Yes | The label of the resource |
| guard_name | String | No | Yes | The authentication guard of the resource |
| created_at | Date | No | No | The date that the resource was created |
| updated_at | Date | No | No | The date that the resource was last modified |
@@ -14,7 +14,6 @@ A role API resource represents an assignable label for users that provides a con
| :--------: | :-----: | :------: | :-----: | :------------------------------------------------------------------------------------- |
| id | Integer | No | Yes | The primary key of the resource |
| name | String | No | Yes | The label of the resource |
| guard_name | String | No | Yes | The authentication guard of the resource |
| default | Boolean | No | Yes | Is the role assigned on account verification? |
| color | String | Yes | Yes | The hex representation of the color used to distinguish the resource |
| priority | Integer | Yes | Yes | The weight assigned to the resource, where higher values correspond to higher priority |
@@ -18,7 +18,7 @@ DELETE /anime/{slug}
**Required Permission**: delete anime
**Roles with Permission**: Wiki Editor, Encoder, Admin
**Roles with Permission**: Content Moderator, Encoder, Admin
**Other Requirements**: Anime must not be soft deleted
@@ -36,6 +36,9 @@ For example, Bakemonogatari is an anime production with five opening sequences a
* animethemes.group
* animethemes.song
* animethemes.song.artists
* animethemes.song.performances
* animethemes.song.performances.artist
* animethemes.song.performances.member
* images
* resources
* series
@@ -47,38 +50,38 @@ For example, Bakemonogatari is an anime production with five opening sequences a
## Endpoints
**[Anime Destroy](/wiki/anime/destroy/)**
**[Anime Destroy](/content/anime/destroy/)**
The anime destroy endpoint soft deletes an anime and returns the deleted anime resource.
**[Anime Force Delete](/wiki/anime/forceDelete/)**
**[Anime Force Delete](/content/anime/forceDelete/)**
The anime force delete endpoint hard deletes an anime and returns a confirmation message.
**[Anime Index](/wiki/anime/index/)**
**[Anime Index](/content/anime/index/)**
The anime index endpoint displays a listing of anime resources.
**[Anime Restore](/wiki/anime/restore/)**
**[Anime Restore](/content/anime/restore/)**
The anime restore endpoint restores a soft deleted anime and returns the restored anime resource.
**[Anime Show](/wiki/anime/show/)**
**[Anime Show](/content/anime/show/)**
The anime show endpoint returns an anime resource.
**[Anime Store](/wiki/anime/store/)**
**[Anime Store](/content/anime/store/)**
The anime store endpoint creates a new anime and returns the new anime resource.
**[Anime Update](/wiki/anime/update/)**
**[Anime Update](/content/anime/update/)**
The anime update endpoint updates an anime and returns the updated anime resource.
**[Year Show](/wiki/animeyear/show/)**
**[Year Show](/content/animeyear/show/)**
The year show endpoint return a listing of anime resources for a given year grouped by season and ordered by name.
**[Year Index](/wiki/animeyear/index/)**
**[Year Index](/content/animeyear/index/)**
The year index endpoint returns a list of unique years from all anime resources.
@@ -18,7 +18,7 @@ PATCH /restore/anime/{slug}
**Required Permission**: restore anime
**Roles with Permission**: Wiki Editor, Encoder, Admin
**Roles with Permission**: Content Moderator, Encoder, Admin
**Other Requirements**: Anime must be soft deleted
@@ -18,7 +18,7 @@ POST /anime
**Required Permission**: create anime
**Roles with Permission**: Wiki Editor, Encoder, Admin
**Roles with Permission**: Content Moderator, Encoder, Admin
## Parameters
@@ -18,7 +18,7 @@ PUT|PATCH /anime/{slug}
**Required Permission**: update anime
**Roles with Permission**: Wiki Editor, Encoder, Admin
**Roles with Permission**: Content Moderator, Encoder, Admin
**Other Requirements**: Anime must not be soft deleted
@@ -0,0 +1,16 @@
---
title: Anime Image
---
# Anime Image
---
An anime image API resource represents the association between an anime and an image.
## Fields
| Name | Type | Nullable | Default | Description |
| :--------: | :-----: | :------: | :-----: | :------------------------------------------- |
| created_at | Date | No | No | The date that the resource was created |
| updated_at | Date | No | No | The date that the resource was last modified |
@@ -0,0 +1,17 @@
---
title: Anime Resource
---
# Anime Resource
---
An anime resource API resource represents the association between an anime and an external resource.
## Fields
| Name | Type | Nullable | Default | Description |
| :--------: | :-----: | :------: | :-----: | :------------------------------------------------------- |
| created_at | Date | No | No | The date that the resource was created |
| updated_at | Date | No | No | The date that the resource was last modified |
| as | String | No | Yes | Used to distinguish resources that map to the same anime |
@@ -18,7 +18,7 @@ DELETE /animeseries/{anime:slug}/{series:slug}
**Required Permission**: delete anime, delete series
**Roles with Permission**: Wiki Editor, Encoder, Admin
**Roles with Permission**: Content Moderator, Encoder, Admin
## Parameters
@@ -22,18 +22,18 @@ An anime series API resource represents the association between an anime and a s
## Endpoints
**[Anime Series Destroy](/wiki/animeseries/destroy/)**
**[Anime Series Destroy](/content/animeseries/destroy/)**
The anime series destroy endpoint deletes an anime series and returns the deleted anime series resource.
**[Anime Series Index](/wiki/animeseries/index/)**
**[Anime Series Index](/content/animeseries/index/)**
The anime series index endpoint displays a listing of anime series resources.
**[Anime Series Show](/wiki/animeseries/show/)**
**[Anime Series Show](/content/animeseries/show/)**
The anime series show endpoint returns an anime series resource.
**[Anime Series Store](/wiki/animeseries/store/)**
**[Anime Series Store](/content/animeseries/store/)**
The anime series store endpoint creates a new anime series and returns the new anime series resource.
@@ -18,7 +18,7 @@ POST /animeseries/{anime:slug}/{series:slug}
**Required Permission**: create anime, create series
**Roles with Permission**: Wiki Editor, Encoder, Admin
**Roles with Permission**: Content Moderator, Encoder, Admin
## Parameters
@@ -18,7 +18,7 @@ DELETE /animestudio/{anime:slug}/{studio:slug}
**Required Permission**: delete anime, delete studio
**Roles with Permission**: Wiki Editor, Encoder, Admin
**Roles with Permission**: Content Moderator, Encoder, Admin
## Parameters
@@ -22,18 +22,18 @@ An anime studio API resource represents the association between an anime and a s
## Endpoints
**[Anime Studio Destroy](/wiki/animestudio/destroy/)**
**[Anime Studio Destroy](/content/animestudio/destroy/)**
The anime studio destroy endpoint deletes an anime studio and returns the deleted anime studio resource.
**[Anime Studio Index](/wiki/animestudio/index/)**
**[Anime Studio Index](/content/animestudio/index/)**
The anime studio index endpoint displays a listing of anime studio resources.
**[Anime Studio Show](/wiki/animestudio/show/)**
**[Anime Studio Show](/content/animestudio/show/)**
The anime studio show endpoint returns an anime studio resource.
**[Anime Studio Store](/wiki/animestudio/store/)**
**[Anime Studio Store](/content/animestudio/store/)**
The anime studio store endpoint creates a new anime studio and returns the new anime studio resource.
@@ -18,7 +18,7 @@ POST /animestudio/{anime:slug}/{studio:slug}
**Required Permission**: create anime, create studio
**Roles with Permission**: Wiki Editor, Encoder, Admin
**Roles with Permission**: Content Moderator, Encoder, Admin
## Parameters
@@ -18,7 +18,7 @@ DELETE /animesynonym/{id}
**Required Permission**: delete anime synonym
**Roles with Permission**: Wiki Editor, Encoder, Admin
**Roles with Permission**: Content Moderator, Encoder, Admin
**Other Requirements**: Anime synonym must not be soft deleted
@@ -27,30 +27,30 @@ For example, the anime Bakemonogatari has the anime synonym "Monstory".
## Endpoints
**[Anime Synonym Destroy](/wiki/animesynonym/destroy/)**
**[Anime Synonym Destroy](/content/animesynonym/destroy/)**
The anime synonym destroy endpoint soft deletes an anime synonym and returns the deleted anime synonym resource.
**[Anime Synonym Force Delete](/wiki/animesynonym/forceDelete/)**
**[Anime Synonym Force Delete](/content/animesynonym/forceDelete/)**
The anime synonym force delete endpoint hard deletes an anime synonym and returns a confirmation message.
**[Anime Synonym Index](/wiki/animesynonym/index/)**
**[Anime Synonym Index](/content/animesynonym/index/)**
The anime synonym index endpoint displays a listing of anime synonym resources.
**[Anime Synonym Restore](/wiki/animesynonym/restore/)**
**[Anime Synonym Restore](/content/animesynonym/restore/)**
The anime synonym restore endpoint restores a soft deleted anime synonym and returns the restored anime synonym resource.
**[Anime Synonym Show](/wiki/animesynonym/show/)**
**[Anime Synonym Show](/content/animesynonym/show/)**
The anime synonym show endpoint returns an anime synonym resource.
**[Anime Synonym Store](/wiki/animesynonym/store/)**
**[Anime Synonym Store](/content/animesynonym/store/)**
The anime synonym store endpoint creates a new anime synonym and returns the new anime synonym resource.
**[Anime Synonym Update](/wiki/animesynonym/update/)**
**[Anime Synonym Update](/content/animesynonym/update/)**
The anime synonym update endpoint updates an anime synonym and returns the updated anime synonym resource.
@@ -18,7 +18,7 @@ PATCH /restore/animesynonym/{id}
**Required Permission**: restore anime synonym
**Roles with Permission**: Wiki Editor, Encoder, Admin
**Roles with Permission**: Content Moderator, Encoder, Admin
**Other Requirements**: Synonym must be soft deleted
@@ -18,7 +18,7 @@ POST /animesynonym
**Required Permission**: create anime synonym
**Roles with Permission**: Wiki Editor, Encoder, Admin
**Roles with Permission**: Content Moderator, Encoder, Admin
## Parameters
@@ -18,7 +18,7 @@ PUT|PATCH /animesynonym/{id}
**Required Permission**: update anime synonym
**Roles with Permission**: Wiki Editor, Encoder, Admin
**Roles with Permission**: Content Moderator, Encoder, Admin
**Other Requirements**: Anime synonym must not be soft deleted
@@ -18,7 +18,7 @@ DELETE /animetheme/{id}
**Required Permission**: delete anime theme
**Roles with Permission**: Wiki Editor, Encoder, Admin
**Roles with Permission**: Content Moderator, Encoder, Admin
**Other Requirements**: Anime theme must not be soft deleted
@@ -34,30 +34,30 @@ For example, the anime Bakemonogatari has five OP anime themes and one ED anime
## Endpoints
**[Anime Theme Destroy](/wiki/animetheme/destroy/)**
**[Anime Theme Destroy](/content/animetheme/destroy/)**
The anime theme destroy endpoint soft deletes an anime theme and returns the deleted anime theme resource.
**[Anime Theme Force Delete](/wiki/animetheme/forceDelete/)**
**[Anime Theme Force Delete](/content/animetheme/forceDelete/)**
The anime theme force delete endpoint hard deletes an anime theme and returns a confirmation message.
**[Anime Theme Index](/wiki/animetheme/index/)**
**[Anime Theme Index](/content/animetheme/index/)**
The anime theme index endpoint displays a listing of anime theme resources.
**[Anime Theme Restore](/wiki/animetheme/restore/)**
**[Anime Theme Restore](/content/animetheme/restore/)**
The anime theme restore endpoint restores a soft deleted anime theme and returns the restored anime theme resource.
**[Anime Theme Show](/wiki/animetheme/show/)**
**[Anime Theme Show](/content/animetheme/show/)**
The anime theme show endpoint returns an anime theme resource.
**[Anime Theme Store](/wiki/animetheme/store/)**
**[Anime Theme Store](/content/animetheme/store/)**
The anime theme store endpoint creates a new anime theme and returns the new anime theme resource.
**[Anime Theme Update](/wiki/animetheme/update/)**
**[Anime Theme Update](/content/animetheme/update/)**
The anime theme update endpoint updates an anime theme and returns the updated anime theme resource.
@@ -18,7 +18,7 @@ PATCH /restore/animetheme/{id}
**Required Permission**: restore anime theme
**Roles with Permission**: Wiki Editor, Encoder, Admin
**Roles with Permission**: Content Moderator, Encoder, Admin
**Other Requirements**: Theme must be soft deleted
@@ -18,7 +18,7 @@ POST /animetheme
**Required Permission**: create anime theme
**Roles with Permission**: Wiki Editor, Encoder, Admin
**Roles with Permission**: Content Moderator, Encoder, Admin
## Parameters
@@ -18,7 +18,7 @@ PUT|PATCH /animetheme/{id}
**Required Permission**: update anime theme
**Roles with Permission**: Wiki Editor, Encoder, Admin
**Roles with Permission**: Content Moderator, Encoder, Admin
**Other Requirements**: Anime theme must not be soft deleted

Some files were not shown because too many files have changed in this diff Show More