Это облегчённая альтернатива Orbit (Cloudflare/Deno), если нужен простой self-host стек:
- статический фронтенд на Vercel (или любом static host)
- backend на FastAPI для auth + websocket relay
- локальный Anchor на macOS/Linux/Windows
GET /healthGET /auth/sessionPOST /auth/register/basicPOST /auth/login/basicPOST /auth/register/options(режимAUTH_MODE=passkey)POST /auth/register/verify(режимAUTH_MODE=passkey)POST /auth/login/options(режимAUTH_MODE=passkey)POST /auth/login/verify(режимAUTH_MODE=passkey)POST /auth/refreshPOST /auth/logoutPOST /auth/device/codePOST /auth/device/authorisePOST /auth/device/tokenPOST /auth/device/refreshGET /ws/clientиGET /ws/anchorpreflight (426при валидной auth до апгрейда)WS /ws/clientWS /ws/anchor
Поведение realtime-части повторяет базовый Orbit-флоу:
orbit.subscribe/orbit.unsubscribeorbit.list-anchorsanchor.hello,orbit.anchor-connected,orbit.anchor-disconnected- thread-scoped маршрутизация сообщений от Anchor к подписанным клиентам
cd services/control-plane
python -m venv .venv
source .venv/bin/activate # Windows: .venv\\Scripts\\activate
pip install -r requirements.txt
uvicorn app.main:app --host 0.0.0.0 --port 8080Базовые:
AUTH_MODE=passkeyилиAUTH_MODE=basicCODEX_REMOTE_WEB_JWT_SECRET=change-meDATABASE_PATH=./data/control_plane.dbCORS_ORIGINS=https://your-frontend.vercel.app,http://localhost:5173DEVICE_VERIFICATION_URL=https://your-frontend.vercel.app/deviceACCESS_TTL_SEC=3600REFRESH_TTL_SEC=604800DEVICE_CODE_TTL_SEC=600DEVICE_CODE_POLL_INTERVAL_SEC=5ANCHOR_ACCESS_TTL_SEC=86400ANCHOR_REFRESH_TTL_SEC=2592000
Для passkey-режима:
PASSKEY_ORIGIN=https://your-frontend.vercel.appPASSKEY_RP_ID=your-frontend.vercel.app(опционально; можно вывести из origin)CHALLENGE_TTL_SEC=300
Для сборки web client задайте:
AUTH_URL=https://<your-fastapi-domain>AUTH_MODE=passkey(рекомендуется) илиAUTH_MODE=basic(быстрый dev)
Для подключения Anchor к FastAPI relay:
ANCHOR_ORBIT_URL=wss://<your-fastapi-domain>/ws/anchorAUTH_URL=https://<your-fastapi-domain>
Anchor получает device-токены через /auth/device/token и продлевает их через /auth/device/refresh.
- используйте сильные секреты
- включайте только HTTPS/WSS
- настройте строгие CORS origin’ы
- контролируйте логи (в них не должны утекать токены/секреты)
Полный endpoint reference находится в services/control-plane/README.md.