TEAMS.md §5.6. **Core has had no user-facing report flow of any kind** — the `moderation`, `mod_notes` and `appeals` tables are all either staff-initiated or Discord-sanction-shaped, and nothing anywhere let a member say "this is a problem". That was survivable while every piece of content on the site came from staff; phase 5 lets players write to each other, so it stops being. The gap has a specific shape: leaders moderate their own Team's forum, and a Team's leaders are exactly the people who will not report their own Team. So the whole point of this queue is a path that routes AROUND a Team's own leadership. Org lead settled it on 2026-08-18: **reports are site administration only** — there is no leader-facing view of this queue, not even a read-only one scoped to their own Team. §5.6's "a leader may also see and act on reports for their own Team" is not implemented and is not deferred. `content_reports` is deliberately generic — `target_type` is a VARCHAR so a wiki page or a news comment becomes a value rather than a table — and the queue is mounted beside appeals under /admin/moderation rather than under Teams, because a staffer working a queue should have one place to work. **§5.6's literal unique key has a defect and this does not copy it.** Written as (target_type, target_id, reporter_user_id, status) it makes CLOSED rows collide with each other too: reporter reports a post, staff dismiss it, the behaviour recurs, they report again — and the second dismissal is an UPDATE into a tuple that already exists, so working the queue starts throwing duplicate-key errors on the first repeat reporter. The key is on a generated `open_marker` instead, the same trick `team_forum_grants.active_marker` uses: 1 while open, NULL once closed, and NULLs are distinct — which is what §5.6's prose asks for, "one open report per (target, reporter)". Two other departures from the doc, both small and both flagged in the docs PR: `handled_note`, because a queue whose resolution reason lives only in an activity_log line is one where the next staffer to see a repeat report cannot find out why the last was dismissed; and a CASCADE on `team_id`, so a deleted Team does not leave a queue full of reports about content that no longer exists. Also here: a report is filed against a target the model verifies really belongs to the Team the request came through, or the queue's per-Team filter would quietly be lying; the queue resolves every row's target in three batched reads rather than N+1, which is §5.6's fourth rule (uploader, size and sniffed type without hunting) actually paying for §5.5.4's attribution table; a target that has since been hard-deleted comes back null and the report still lists, because "somebody reported this and by the time we looked it was gone" is a fact a moderator needs; and every transition writes activity_log, `dismissed` included — a queue where acting is audited and declining to act is not is one where the cheapest way to make a report vanish leaves no trace. `teams_forum_edit_window_minutes` gains its range validation on the admin settings PUT and is seeded at 15, so the value on the settings screen is the value in force. Route manifest and OpenAPI regenerated: 6 operations added, 0 lost. Co-Authored-By: Claude <noreply@anthropic.com>
2021 lines
38 KiB
JSON
2021 lines
38 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/reports",
|
|
"handlers": 1,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/admin/moderation/reports/:id/handle",
|
|
"handlers": 5,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"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/modules",
|
|
"handlers": 2,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/admin/modules",
|
|
"handlers": 4,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "DELETE",
|
|
"path": "/api/v1/admin/modules/:id",
|
|
"handlers": 5,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/admin/modules/:id/disable",
|
|
"handlers": 4,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/admin/modules/:id/enable",
|
|
"handlers": 4,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/admin/modules/:id/purge",
|
|
"handlers": 4,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/admin/modules/restart",
|
|
"handlers": 2,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "PUT",
|
|
"path": "/api/v1/admin/modules/sources",
|
|
"handlers": 4,
|
|
"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": "GET",
|
|
"path": "/api/v1/admin/teams",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/teams/:id",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/admin/teams/:id/archive",
|
|
"handlers": 4,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/admin/teams/:id/display-name",
|
|
"handlers": 5,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/teams/:id/forum/moderation",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/teams/:id/grants",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/admin/teams/:id/hide",
|
|
"handlers": 4,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/admin/teams/:id/leader-override",
|
|
"handlers": 6,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "DELETE",
|
|
"path": "/api/v1/admin/teams/:id/leader-override/:memberKey",
|
|
"handlers": 4,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/admin/teams/:id/unhide",
|
|
"handlers": 4,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/teams/forum/settings",
|
|
"handlers": 1,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/teams/forum/uploads",
|
|
"handlers": 5,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/teams/requests",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/admin/teams/requests/:id/decide",
|
|
"handlers": 5,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/admin/teams/resync",
|
|
"handlers": 1,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/teams/review",
|
|
"handlers": 1,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"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": "GET",
|
|
"path": "/api/v1/player/teams",
|
|
"handlers": 1,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/player/teams/:slug/access",
|
|
"handlers": 1,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "PATCH",
|
|
"path": "/api/v1/player/teams/:slug/forum/posts/:id",
|
|
"handlers": 5,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/player/teams/:slug/forum/posts/:id/moderate",
|
|
"handlers": 5,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/player/teams/:slug/forum/report",
|
|
"handlers": 7,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/player/teams/:slug/forum/threads",
|
|
"handlers": 1,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/player/teams/:slug/forum/threads",
|
|
"handlers": 7,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/player/teams/:slug/forum/threads/:id",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/player/teams/:slug/forum/threads/:id/moderate",
|
|
"handlers": 5,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/player/teams/:slug/forum/threads/:id/posts",
|
|
"handlers": 5,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/player/teams/:slug/forum/uploads",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"multerMiddleware"
|
|
]
|
|
},
|
|
{
|
|
"method": "DELETE",
|
|
"path": "/api/v1/player/teams/:slug/forum/uploads/:id",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/player/teams/:slug/grants",
|
|
"handlers": 1,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/player/teams/:slug/grants",
|
|
"handlers": 6,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "DELETE",
|
|
"path": "/api/v1/player/teams/:slug/grants/:userId",
|
|
"handlers": 5,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"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/teams",
|
|
"handlers": 2,
|
|
"gates": [
|
|
"siteMode"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/public/teams/:slug",
|
|
"handlers": 2,
|
|
"gates": [
|
|
"siteMode"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/public/teams/:slug/activity",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"siteMode",
|
|
"optionalAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/public/teams/:slug/members",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"siteMode",
|
|
"optionalAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/public/teams/by-external/:moduleId/:externalId",
|
|
"handlers": 2,
|
|
"gates": [
|
|
"siteMode"
|
|
]
|
|
},
|
|
{
|
|
"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"
|
|
]
|
|
}
|
|
]
|
|
}
|