XFEServerManager Web UI
Responsive React/TypeScript dashboard embedded in each Forge server JAR. The production build uses relative asset URLs and does not require Node.js at server runtime.
Commands
npm install
npm run dev
npm test
npm run build
During development, Vite proxies /api to http://127.0.0.1:8765. A production server may set window.__XFESM_API_BASE__ before the entry script; otherwise the client uses /api/v1.
API contract used by the UI
The client accepts either a bare JSON value or { "data": ... }. Collection routes may return a bare array or { "items": [], "nextCursor": "...", "total": 0 }.
GET /api/v1/status,/auth/session,/features,/settingsPOST /api/v1/auth/login,/auth/logout,/console/commandsGET /api/v1/players,/policies,/auditPOST /api/v1/players/{uuid}/actions,/policies/simulate,/policies/{id}/publishGET|POST /api/v1/moderation/cases,GET /api/v1/claimsGET /api/v1/world/changes,POST /api/v1/rollbacks/preview,/rollbacksGET /api/v1/eventsas SSE, with optional typed events:server-status,player-changed,policy-published,audit,operation,moderation,claim, andworld-change
Mutations send X-XFESM-Request-ID, Idempotency-Key, and the session-provided X-CSRF-Token. Requests always use same-origin credentials. Network failure is rendered as an explicit offline state; the application never substitutes demo metrics or players.