Phase 1 of docs/website/API_V2_PLAN.md. The tightened policy ships on
Content-Security-Policy-Report-Only alongside the unchanged enforced one for a
release; a follow-up PR flips it after the soak comes back clean.
The plan expected a two-directive delta. It is one. `form-action 'self'` was
described as absent because it is not in the directives object in app.js — but
the middleware runs with `useDefaults: true` and helmet's defaults already
supply it, so the header served in production has carried it all along. Caught
by capturing the live header from the running app instead of reading the config.
It is now written out explicitly in config/csp.js regardless: a security
directive should not depend on a third-party library's default surviving its
next major version. The enforced header's contents do not change at all, and a
test pins it verbatim.
So the whole behavioural delta is `frame-ancestors 'self'` -> `'none'`. That is
still the directive most worth soaking: a frame-ancestors report is generated by
the browser of whoever framed the site, which is the only way to find out that
something legitimately embeds us before an enforcing policy breaks it.
The policies move to config/csp.js, with the report-only one derived by spread
from the enforced one so the two cannot drift and the object reads as a diff.
`report-to` needs somewhere to point, so this adds POST /api/csp-report --
same-origin on purpose, since reports describe attacks against this site and
should not go to a third-party collector. It is mounted outside /api/v1 next to
/api/health: the browser learns the path from the policy header, never from a
client build, so it is not versioned client contract.
It is necessarily unauthenticated -- browsers send reports with no session, and
gating it would silence exactly the anonymous visitors worth hearing about -- so
it is bounded on every axis:
* both wire formats, since report-uri (Firefox/Safari) sends hyphenated keys
in application/csp-report and report-to (Chrome) sends camelCase envelopes
in application/reports+json; handling one silently drops half the browsers,
* report-to also needs the Reporting-Endpoints response header or it is inert,
* 16 KB body cap, per-IP rate limit, fixed field allowlist, every logged field
truncated (script-sample is attacker-influenced and can carry a whole inline
script),
* always 204, even for malformed input: a 4xx would reach the global error
handler, which logs the offending body -- turning an open endpoint into a
log-flood primitive.
Nothing is persisted; reports go to the `csp` log tag.
routes.manifest.json moves 199 -> 200, which is the freeze from PR 0 working as
designed: the one new URL is visible as a reviewed +1 rather than slipping
through. Swagger regenerated to match.
Co-Authored-By: Claude <noreply@anthropic.com>
1952 lines
37 KiB
JSON
1952 lines
37 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": "POST",
|
|
"path": "/api/v1/admin/shard/account",
|
|
"handlers": 4,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/shard/accounts",
|
|
"handlers": 1,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/shard/audit",
|
|
"handlers": 2,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/admin/shard/ban",
|
|
"handlers": 7,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/admin/shard/broadcast",
|
|
"handlers": 5,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/shard/char/:serial",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/shard/houses",
|
|
"handlers": 2,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/admin/shard/kick",
|
|
"handlers": 5,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/admin/shard/link",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/shard/pages",
|
|
"handlers": 2,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/admin/shard/pages/:id/close",
|
|
"handlers": 4,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/admin/shard/pages/:id/respond",
|
|
"handlers": 6,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/shard/roster/:account",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/shard/sales",
|
|
"handlers": 1,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/admin/shard/unban",
|
|
"handlers": 4,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/shard/vendors/:account",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "PUT",
|
|
"path": "/api/v1/admin/site-mode",
|
|
"handlers": 4,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/uo-link/config",
|
|
"handlers": 2,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "PUT",
|
|
"path": "/api/v1/admin/uo-link/config",
|
|
"handlers": 8,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/uo-link/stream",
|
|
"handlers": 2,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/admin/uo-link/towncrier",
|
|
"handlers": 7,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "DELETE",
|
|
"path": "/api/v1/admin/uo-link/towncrier/:id",
|
|
"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": "GET",
|
|
"path": "/api/v1/admin/users/:id/shard/accounts",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/users/:id/shard/houses",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "DELETE",
|
|
"path": "/api/v1/admin/users/:id/shard/link/:account",
|
|
"handlers": 5,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/users/:id/shard/online",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/users/:id/shard/sales",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/users/:id/shard/standing",
|
|
"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": 6,
|
|
"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/player/shard/account",
|
|
"handlers": 5,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/player/shard/accounts",
|
|
"handlers": 1,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/player/shard/char/:serial",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/player/shard/houses",
|
|
"handlers": 1,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/player/shard/link",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/player/shard/roster/:account",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/player/shard/sales",
|
|
"handlers": 1,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/player/shard/vendors/:account",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"noindex",
|
|
"requireAuth",
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/public/contact",
|
|
"handlers": 6,
|
|
"gates": [
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"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/shard/champs",
|
|
"handlers": 1,
|
|
"gates": []
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/public/shard/economy",
|
|
"handlers": 3,
|
|
"gates": [
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/public/shard/feed",
|
|
"handlers": 4,
|
|
"gates": [
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/public/shard/governors",
|
|
"handlers": 1,
|
|
"gates": []
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/public/shard/governors/:city/history",
|
|
"handlers": 4,
|
|
"gates": [
|
|
"middleware",
|
|
"validate"
|
|
]
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/public/shard/guilds",
|
|
"handlers": 1,
|
|
"gates": []
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/public/shard/houses",
|
|
"handlers": 1,
|
|
"gates": []
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/public/shard/idoc",
|
|
"handlers": 1,
|
|
"gates": []
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/public/shard/online",
|
|
"handlers": 1,
|
|
"gates": []
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/public/shard/presence",
|
|
"handlers": 1,
|
|
"gates": []
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/public/shard/status",
|
|
"handlers": 1,
|
|
"gates": []
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/public/shard/stream",
|
|
"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"
|
|
]
|
|
}
|
|
],
|
|
"internal": [
|
|
{
|
|
"method": "GET",
|
|
"path": "/health",
|
|
"handlers": 1,
|
|
"gates": []
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/internal/bot-config",
|
|
"handlers": 1,
|
|
"gates": [
|
|
"requireInternalKey"
|
|
]
|
|
}
|
|
]
|
|
}
|