API
Základ: https://scryglass.win. Chyby jsou {"error": "..."}; 403 znamená chybějící oprávnění, 401 neplatný token.
Veřejné
| Metoda |
Cesta |
Poznámka |
| GET |
/health |
{"status":"ok"} |
| GET |
/, /app, /admin, /docs/ |
HTML stránky (admin i aplikace si data načítají s tokenem) |
| POST |
/auth/anon |
Anonymní účet pro novou instalaci (omezeno na IP) |
| POST |
/auth/login/start, /auth/login/verify |
Přihlášení kódem z e-mailu |
| POST |
/auth/passkey/login/{start,finish}, /auth/password/login |
Passkey / heslo |
| GET/POST |
/auth/magic, /authorize, /auth/token |
Odkaz z e-mailu a přihlášení aplikace (PKCE) |
Přihlášený uživatel
| Metoda |
Cesta |
Oprávnění |
| POST |
/ingest |
telemetrie (limit těla 8 MB) |
| GET |
/bundle, /artifacts, /stats, /jobs |
čtení |
| GET |
/me, /me/matches, /me/decks (+PUT) |
vlastní data |
| GET/DELETE |
/me/sessions, /me/passkeys |
správa přihlášení |
| POST |
/guide/jobs |
GuideGenerate |
| GET |
/download/{platform} |
AppDownload |
Administrace
| Metoda |
Cesta |
Oprávnění |
| GET |
/admin/users (+/{id}, /{id}/matches, /{id}/event-kinds) |
AdminRead |
| GET |
/admin/replays?after=<RFC3339>&limit=N |
AdminRead nebo CorpusRead |
| GET |
/admin/corpus-events?after=<RFC3339>&after_id=<id>&limit=N |
AdminRead nebo CorpusRead; jen kind=decision_context |
| GET |
/admin/events, /admin/flagged, /admin/kinds, /admin/audit |
AdminRead |
| GET |
/admin/roles |
RoleAdmin |
| POST |
/admin/roles/grant, /admin/roles/revoke |
RoleAdmin; tělo {email, role?} (admin výchozí, nebo corpus_reader) |
| POST |
/admin/corpus-token |
RoleAdmin; tělo {email} |
| POST |
/admin/alpha, /admin/merge-anon |
AdminWrite |
| POST |
/admin/guide/{grant,credit} |
Billing |
/admin/users – pole řádku
| Pole |
Význam |
last_app_version, last_engine_sha |
build klienta z posledních událostí |
last_replay_schema, last_replay_at |
schéma a čas nejnovějšího replay záznamu |
current_replay_schema |
schéma, kterému rozumí tento server |
last_event_at, days_since_last_event, matches |
aktivita |
/admin/corpus-events
Vrací {"events": [{id, match_id, kind, game_number, turn_number, ts, created_at, data, user_id, email?, is_anon?}]} od nejstaršího, jen druh decision_context (pozice a legální akce, které poradce viděl). Jiný kind nebo exclude_kind je 400 — trasa se nerozšiřuje potichu. Kurzor je dvojice (created_at, id) (after + after_id), limit je 1–5000, výchozí 1000. email/is_anon dostane jen AdminRead; user_id (pseudonymní UUID) zůstává, aby šlo shlukovat podle hráče. Každé čtení zapíše corpus_read s route=corpus-events. Úplný proud /admin/events zůstává pro čtenáře korpusu zavřený.
/admin/replays
Vrací {"replays": [{id, match_id, created_at, record, email?, is_anon?}]} od nejstaršího. Stránkuj hodnotou created_at posledního řádku jako after (URL-kódovanou: + v +00:00 se jinak změní na mezeru — neplatný kurzor server odmítne místo návratu na první stránku). limit je 1–100, výchozí 10. email/is_anon dostane jen AdminRead.