R18's two tiers: a form generated from a config file's own values, and raw JSON for what a form cannot express. Admin → Rust mod config, one live round trip per action, nothing cached between a browser and a game host's disk. `configEdit.js` is the part that could not be done naively. JavaScript cannot tell `1` from `1.0`, and both mod frameworks deserialize a config into typed C# classes — so a read-modify-write silently rewrites every whole-numbered float as an integer on fields nobody touched, and a plugin that then throws at load does not come back. It never parses, mutates and re-serialises: it records the SOURCE SPAN of every value and splices literals into them, so an untouched `1.0` is still `1.0` and a number an admin types travels as text the whole way (D35/D36). The bridge's own config is editable with `Host`, `Port` and `ServerId` locked, in the form and in the raw tier, because either would cut the link carrying the edit or strand every row this site holds (D38). Credentials render masked with a reveal; the raw tier shows them (D37) and the audit trail never does. `rust_config_writes` records every save including the refused and the rolled back — an operator asking why a setting is not what they set needs to see that somebody tried. Three defects a browser walk found that 179 green tests did not: * every save of the bridge's own config was refused while the page said the opposite — a `<select>` whose value matches no `<option>` shows the first one, so the reload guess `RunicGateway` was on the wire and "nothing" was on the screen; * `btn ghost` is not a class this platform defines (`.btn-ghost` is), so every secondary button in this module has rendered as a primary one since phase 7 — here it made the open file and the active tier indistinguishable; * a save's refusal rendered at the top of a long form, far from the button. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PMH6bw1jXMgbyF3ZWGEzSM
176 lines
4.3 KiB
JSON
176 lines
4.3 KiB
JSON
{
|
|
"$comment": "Generated inventory of the URLs module-rust serves - the module half of the freeze core keeps in server/routes.manifest.json. DERIVED as the difference between a core without this module and the same core with it, both at the pinned ref in ci/core-ref.json. Regenerate with the frozen-manifest job in .gitea/workflows/pr-checks.yml; see server/scripts/frozenManifest.js.",
|
|
"routes": [
|
|
{
|
|
"method": "DELETE",
|
|
"path": "/api/v1/admin/rust/permissions/grants/:id",
|
|
"tier": "public"
|
|
},
|
|
{
|
|
"method": "DELETE",
|
|
"path": "/api/v1/admin/rust/permissions/groups/:name",
|
|
"tier": "public"
|
|
},
|
|
{
|
|
"method": "DELETE",
|
|
"path": "/api/v1/admin/rust/permissions/groups/:name/members/:userId",
|
|
"tier": "public"
|
|
},
|
|
{
|
|
"method": "DELETE",
|
|
"path": "/api/v1/admin/rust/servers/:id",
|
|
"tier": "public"
|
|
},
|
|
{
|
|
"method": "DELETE",
|
|
"path": "/api/v1/admin/users/:id/rust/links/:steamId",
|
|
"tier": "public"
|
|
},
|
|
{
|
|
"method": "DELETE",
|
|
"path": "/api/v1/admin/users/:id/rust/permissions/grants/:grantId",
|
|
"tier": "public"
|
|
},
|
|
{
|
|
"method": "DELETE",
|
|
"path": "/api/v1/player/rust/links/:steamId",
|
|
"tier": "public"
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/rust/config/:serverId/file",
|
|
"tier": "public"
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/rust/config/:serverId/files",
|
|
"tier": "public"
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/rust/config/:serverId/writes",
|
|
"tier": "public"
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/rust/permissions",
|
|
"tier": "public"
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/rust/permissions/catalogue",
|
|
"tier": "public"
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/rust/servers",
|
|
"tier": "public"
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/users/:id/rust/links",
|
|
"tier": "public"
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/admin/users/:id/rust/permissions",
|
|
"tier": "public"
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/player/rust/links",
|
|
"tier": "public"
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/player/rust/servers",
|
|
"tier": "public"
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/public/rust/servers",
|
|
"tier": "public"
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/public/rust/servers/:id",
|
|
"tier": "public"
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/public/rust/servers/:id/events",
|
|
"tier": "public"
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/public/rust/servers/:id/leaderboard",
|
|
"tier": "public"
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/public/rust/servers/:id/online",
|
|
"tier": "public"
|
|
},
|
|
{
|
|
"method": "GET",
|
|
"path": "/api/v1/public/rust/servers/:id/wipes",
|
|
"tier": "public"
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/admin/rust/config/:serverId/file",
|
|
"tier": "public"
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/admin/rust/permissions/drift/:id/adopt",
|
|
"tier": "public"
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/admin/rust/permissions/drift/:id/revoke",
|
|
"tier": "public"
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/admin/rust/permissions/grants",
|
|
"tier": "public"
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/admin/rust/permissions/groups/:name/members",
|
|
"tier": "public"
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/admin/rust/permissions/sync",
|
|
"tier": "public"
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/admin/rust/servers/:id/test",
|
|
"tier": "public"
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/admin/users/:id/rust/permissions/grants",
|
|
"tier": "public"
|
|
},
|
|
{
|
|
"method": "POST",
|
|
"path": "/api/v1/player/rust/link",
|
|
"tier": "public"
|
|
},
|
|
{
|
|
"method": "PUT",
|
|
"path": "/api/v1/admin/rust/permissions/groups/:name",
|
|
"tier": "public"
|
|
},
|
|
{
|
|
"method": "PUT",
|
|
"path": "/api/v1/admin/rust/servers/:id",
|
|
"tier": "public"
|
|
}
|
|
]
|
|
}
|