40 files, ~9,674 lines, 27 of 68 tables. Core no longer contains anything that knows what a shard is. BREAKING for a deployment only in the sense that the module must be installed for these URLs to answer -- no URL moved. routes.manifest.json goes 228 -> 158 public routes here, and the 70 that left reappear byte-identical when the module is loaded: verified by generating the manifest against core+module and diffing it against the pre-extraction file. Zero missing, zero added, and routes.guards identical across all 228, so no auth gate moved either. The five tier mounts are gone from public/admin/player index.js and are still served: the loader mounts them onto the same routers after every core mount. That ordering is also what keeps the prefixes unclaimable -- the collision check asks the live router what core owns, so a second module claiming /shard is rejected against the mounts actually present rather than against a list. server.js loses its eight UO call sites to the module's onBoot/onShutdown. schema.sql loses its 27 shard_*/uo_link_* statements; the two that FK into users are why the fragment replays AFTER core's schema, and no core table ever referenced a module table, which is what makes core still able to boot alone. Verified against a running server with the module installed: it loads, mounts five prefixes, replays 35 statements, warms up and reaches `started`; public shard and atlas routes answer 200 with real data (800 creatures, 6,455 spawners), admin and player answer 401 from core's tier gates, and the extension slot answers at /admin/users/:id/shard/*. Core's own SPA renders the shard and atlas pages unchanged against the module-served API, with no console errors and no CSP reports. Co-Authored-By: Claude <noreply@anthropic.com>
1549 lines
29 KiB
JSON
1549 lines
29 KiB
JSON
{
|
|
"$comment": "Generated review aid, NOT a gated contract - per route, the middleware handler count and the *named* middleware collected along the mount chain. Anonymous handlers (e.g. the arrow returned by requireRole(...)) cannot be named, so this is a hint for reviewers, never a security check. Regenerate with `npm run routes:manifest`.",
|
|
"public": [
|
|
{
|
|
"method": "GET",
|
|
"path": "/.well-known/assetlinks.json",
|
|
"handlers": 1,
|
|
"gates": []
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/csp-report",
|
|
"handlers": 6,
|
|
"gates": [
|
|
"jsonParser"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/docs.json",
|
|
"handlers": 1,
|
|
"gates": []
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/health",
|
|
"handlers": 1,
|
|
"gates": []
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/account",
|
|
"handlers": 1,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/account/identities",
|
|
"handlers": 1,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "DELETE",
|
|
"path": "/api/v1/admin/account/identities/:provider",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/admin/account/totp/disable",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/admin/account/totp/enable",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/admin/account/totp/setup",
|
|
"handlers": 1,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/activity",
|
|
"handlers": 1,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/auth/providers",
|
|
"handlers": 2,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/admin/auth/providers",
|
|
"handlers": 14,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "DELETE",
|
|
"path": "/api/v1/admin/auth/providers/:id",
|
|
"handlers": 4,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "PUT",
|
|
"path": "/api/v1/admin/auth/providers/:id",
|
|
"handlers": 13,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/bot-activity",
|
|
"handlers": 2,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/admin/bot-activity/unban",
|
|
"handlers": 4,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/dashboard",
|
|
"handlers": 1,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/discord-bot/config",
|
|
"handlers": 2,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "PUT",
|
|
"path": "/api/v1/admin/discord-bot/config",
|
|
"handlers": 6,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/email/config",
|
|
"handlers": 2,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "PUT",
|
|
"path": "/api/v1/admin/email/config",
|
|
"handlers": 5,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/email/connect/callback",
|
|
"handlers": 2,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/email/connect/start",
|
|
"handlers": 2,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/admin/email/disconnect",
|
|
"handlers": 2,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/admin/email/test",
|
|
"handlers": 4,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/invites",
|
|
"handlers": 2,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/admin/invites",
|
|
"handlers": 5,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "DELETE",
|
|
"path": "/api/v1/admin/invites/:id",
|
|
"handlers": 4,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/moderation/appeals",
|
|
"handlers": 1,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/moderation/appeals/:id",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/admin/moderation/appeals/:id/claim",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/admin/moderation/appeals/:id/resolve",
|
|
"handlers": 5,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/moderation/filter-hits",
|
|
"handlers": 1,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/moderation/members",
|
|
"handlers": 1,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/moderation/recent",
|
|
"handlers": 1,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/moderation/search",
|
|
"handlers": 1,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/moderation/spam-hits",
|
|
"handlers": 1,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/moderation/stats/summary",
|
|
"handlers": 1,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/moderation/user/:discordId",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/moderation/user/:discordId/actions",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/moderation/user/:discordId/appeals",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/moderation/user/:discordId/notes",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/admin/moderation/user/:discordId/notes",
|
|
"handlers": 5,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/pages",
|
|
"handlers": 1,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/admin/pages",
|
|
"handlers": 4,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "DELETE",
|
|
"path": "/api/v1/admin/pages/:id",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/pages/:id",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "PATCH",
|
|
"path": "/api/v1/admin/pages/:id",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/admin/pages/:id/preview",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/admin/pages/:id/unprotect",
|
|
"handlers": 4,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/posts",
|
|
"handlers": 1,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/admin/posts",
|
|
"handlers": 4,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "DELETE",
|
|
"path": "/api/v1/admin/posts/:id",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/posts/:id",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "PUT",
|
|
"path": "/api/v1/admin/posts/:id",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/posts/:id/announce",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/admin/posts/:id/announce/retry",
|
|
"handlers": 4,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "PATCH",
|
|
"path": "/api/v1/admin/posts/:id/publish",
|
|
"handlers": 4,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/admin/posts/upload",
|
|
"handlers": 2,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"multerMiddleware"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/settings",
|
|
"handlers": 2,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "PUT",
|
|
"path": "/api/v1/admin/settings",
|
|
"handlers": 2,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "DELETE",
|
|
"path": "/api/v1/admin/settings/:key",
|
|
"handlers": 2,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/admin/settings/brand-asset/:slot",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"multerMiddleware"
|
|
]
|
|
},
|
|
{
|
|
"method": "PUT",
|
|
"path": "/api/v1/admin/site-mode",
|
|
"handlers": 4,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/admin/uploads",
|
|
"handlers": 2,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"multerMiddleware"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/users",
|
|
"handlers": 1,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/admin/users",
|
|
"handlers": 7,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "DELETE",
|
|
"path": "/api/v1/admin/users/:id",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/users/:id",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "PUT",
|
|
"path": "/api/v1/admin/users/:id",
|
|
"handlers": 8,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/admin/users/:id/mfa/reset",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "DELETE",
|
|
"path": "/api/v1/admin/users/:id/trusted-devices",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/users/:id/trusted-devices",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "DELETE",
|
|
"path": "/api/v1/admin/users/:id/trusted-devices/:deviceId",
|
|
"handlers": 4,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/wiki",
|
|
"handlers": 1,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/admin/wiki",
|
|
"handlers": 8,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "DELETE",
|
|
"path": "/api/v1/admin/wiki/:slug",
|
|
"handlers": 1,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/wiki/:slug",
|
|
"handlers": 1,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "PUT",
|
|
"path": "/api/v1/admin/wiki/:slug",
|
|
"handlers": 8,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "PATCH",
|
|
"path": "/api/v1/admin/wiki/:slug/publish",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/wiki/:slug/revisions",
|
|
"handlers": 1,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/wiki/:slug/revisions/:id",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/admin/wiki/:slug/revisions/:id/restore",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/wiki/categories",
|
|
"handlers": 1,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/admin/wiki/categories",
|
|
"handlers": 6,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "DELETE",
|
|
"path": "/api/v1/admin/wiki/categories/:id",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "PUT",
|
|
"path": "/api/v1/admin/wiki/categories/:id",
|
|
"handlers": 7,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/wiki/tags",
|
|
"handlers": 1,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/auth/invite/:token",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/auth/invite/:token/accept",
|
|
"handlers": 10,
|
|
"gates": [
|
|
"backoffGuard",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/auth/login",
|
|
"handlers": 8,
|
|
"gates": [
|
|
"backoffGuard",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/auth/login/totp",
|
|
"handlers": 10,
|
|
"gates": [
|
|
"backoffGuard",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/auth/logout",
|
|
"handlers": 2,
|
|
"gates": [
|
|
"attachSession"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/auth/me",
|
|
"handlers": 2,
|
|
"gates": [
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/auth/me/account",
|
|
"handlers": 1,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/auth/me/account/identities",
|
|
"handlers": 1,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "DELETE",
|
|
"path": "/api/v1/auth/me/account/identities/:provider",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "PATCH",
|
|
"path": "/api/v1/auth/me/account/password",
|
|
"handlers": 5,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/auth/me/account/recovery-codes/generate",
|
|
"handlers": 6,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"backoffGuard",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/auth/me/account/recovery-codes/status",
|
|
"handlers": 1,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/auth/me/account/totp/disable",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/auth/me/account/totp/enable",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/auth/me/account/totp/setup",
|
|
"handlers": 1,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "PATCH",
|
|
"path": "/api/v1/auth/me/account/username",
|
|
"handlers": 4,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/auth/me/devices",
|
|
"handlers": 1,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/auth/me/devices",
|
|
"handlers": 5,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "DELETE",
|
|
"path": "/api/v1/auth/me/devices/:id",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/auth/me/notifications/streams",
|
|
"handlers": 1,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/auth/me/notifications/subscriptions",
|
|
"handlers": 1,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "PUT",
|
|
"path": "/api/v1/auth/me/notifications/subscriptions",
|
|
"handlers": 4,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/auth/me/sessions",
|
|
"handlers": 1,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "DELETE",
|
|
"path": "/api/v1/auth/me/sessions/:id",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "DELETE",
|
|
"path": "/api/v1/auth/me/trusted-devices",
|
|
"handlers": 1,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/auth/me/trusted-devices",
|
|
"handlers": 1,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/auth/me/trusted-devices",
|
|
"handlers": 4,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "DELETE",
|
|
"path": "/api/v1/auth/me/trusted-devices/:id",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/auth/mobile/login",
|
|
"handlers": 11,
|
|
"gates": [
|
|
"backoffGuard",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/auth/mobile/logout",
|
|
"handlers": 5,
|
|
"gates": [
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/auth/mobile/refresh",
|
|
"handlers": 4,
|
|
"gates": [
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/auth/mobile/sso/exchange",
|
|
"handlers": 6,
|
|
"gates": [
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/auth/mobile/sso/start",
|
|
"handlers": 7,
|
|
"gates": [
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/auth/password/forgot",
|
|
"handlers": 4,
|
|
"gates": [
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/auth/password/reset/:token",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/auth/password/reset/:token",
|
|
"handlers": 5,
|
|
"gates": [
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/auth/providers",
|
|
"handlers": 1,
|
|
"gates": []
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/auth/register",
|
|
"handlers": 10,
|
|
"gates": [
|
|
"backoffGuard",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/auth/sso/:provider/callback",
|
|
"handlers": 1,
|
|
"gates": []
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/auth/sso/:provider/link",
|
|
"handlers": 2,
|
|
"gates": [
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/auth/sso/:provider/start",
|
|
"handlers": 2,
|
|
"gates": []
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/auth/sso/totp",
|
|
"handlers": 8,
|
|
"gates": [
|
|
"backoffGuard",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/player/account",
|
|
"handlers": 1,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/player/account/identities",
|
|
"handlers": 1,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "DELETE",
|
|
"path": "/api/v1/player/account/identities/:provider",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "PATCH",
|
|
"path": "/api/v1/player/account/password",
|
|
"handlers": 5,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/player/account/totp/disable",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/player/account/totp/enable",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/player/account/totp/setup",
|
|
"handlers": 1,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "PATCH",
|
|
"path": "/api/v1/player/account/username",
|
|
"handlers": 4,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/player/appeals",
|
|
"handlers": 1,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/player/appeals",
|
|
"handlers": 5,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/player/appeals/:id/withdraw",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/player/appeals/eligible",
|
|
"handlers": 1,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/public/contact",
|
|
"handlers": 6,
|
|
"gates": [
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/public/modules",
|
|
"handlers": 1,
|
|
"gates": []
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/public/pages/:id/preview/:token",
|
|
"handlers": 1,
|
|
"gates": []
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/public/pages/:slug",
|
|
"handlers": 2,
|
|
"gates": [
|
|
"siteMode"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/public/posts/:category",
|
|
"handlers": 2,
|
|
"gates": [
|
|
"siteMode"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/public/posts/:category/:idOrSlug",
|
|
"handlers": 2,
|
|
"gates": [
|
|
"siteMode"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/public/settings",
|
|
"handlers": 1,
|
|
"gates": []
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/public/status",
|
|
"handlers": 1,
|
|
"gates": []
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/public/version",
|
|
"handlers": 1,
|
|
"gates": []
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/public/wiki",
|
|
"handlers": 2,
|
|
"gates": [
|
|
"siteMode"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/public/wiki/:slug",
|
|
"handlers": 2,
|
|
"gates": [
|
|
"siteMode"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/public/wiki/categories",
|
|
"handlers": 2,
|
|
"gates": [
|
|
"siteMode"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/public/wiki/tags",
|
|
"handlers": 2,
|
|
"gates": [
|
|
"siteMode"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/settings/nav",
|
|
"handlers": 1,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/settings/theme/options",
|
|
"handlers": 1,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
}
|
|
],
|
|
"internal": [
|
|
{
|
|
"method": "GET",
|
|
"path": "/health",
|
|
"handlers": 1,
|
|
"gates": []
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/internal/bot-config",
|
|
"handlers": 1,
|
|
"gates": [
|
|
"requireInternalKey"
|
|
]
|
|
}
|
|
]
|
|
}
|