86dff94a02
Реализован Gateway по AGENT.md §8.3:
- оп-коды 0/1/2/3/4/7/10/11, единый конверт {op,t,d,s};
- HELLO с интервалом сердцебиения (45 с) и идентификатором сессии;
- IDENTIFY/RESUME с проверкой токена через auth.ResolveSession;
- READY: пользователь, серверы, видимые комнаты, роли, участники и права,
собранные через движок прав (VIEW_CHANNEL-фильтрация);
- HEARTBEAT → HEARTBEAT_ACK, лимит частоты IDENTIFY (5 с);
- RESUME: буфер на 1000 событий с TTL 5 минут, догон пропущенных событий и
подтверждение RESUMED, полный READY при расхождении состояния;
- рассылка Dispatch/SendToUser с буферизацией для отключённых сессий;
- проверка Origin по allowlist доменов инстанса (AGENT.md §9.7);
- httpx.statusRecorder пробрасывает Hijack, иначе апгрейд ломается.
Тесты: 6 сценариев Gateway (READY, скрытые комнаты, неверный токен,
heartbeat, dispatch, RESUME) и 2 теста маршрута /gateway через полный стек
middleware, включая отклонение чужого Origin.
23 lines
597 B
Modula-2
23 lines
597 B
Modula-2
module glchat
|
|
|
|
go 1.26.0
|
|
|
|
require (
|
|
github.com/coder/websocket v1.8.15
|
|
github.com/danielgtaylor/huma/v2 v2.39.1
|
|
github.com/go-chi/chi/v5 v5.3.2
|
|
github.com/mattn/go-sqlite3 v1.14.52
|
|
github.com/pquerna/otp v1.5.0
|
|
github.com/pressly/goose/v3 v3.28.0
|
|
golang.org/x/crypto v0.55.0
|
|
)
|
|
|
|
require (
|
|
github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc // indirect
|
|
github.com/mfridman/interpolate v0.0.2 // indirect
|
|
github.com/sethvargo/go-retry v0.4.0 // indirect
|
|
go.uber.org/multierr v1.11.0 // indirect
|
|
golang.org/x/sync v0.22.0 // indirect
|
|
golang.org/x/sys v0.48.0 // indirect
|
|
)
|