# API для разработчиков: HTTP debug endpoints Этот файл описывает отдельный HTTP debug API сервера. Он не использует WebSocket-конверт `op/requestId/payload` и включается только настройкой: - `debug.tempApi.enabled=true` Источник истины: - `src/main/java/server/debug/DebugApiConfigurator.java` - `src/main/java/server/debug/*Servlet.java` Если `.debug-token` отсутствует или пуст, endpoints возвращают `503 / DEBUG_DISABLED`. ## Авторизация Для большинства debug endpoints используется Bearer token из `.debug-token`: ```http Authorization: Bearer ``` Для `POST /debug/ws/ui-reload-all` поддерживается заголовок: ```http X-Debug-Token: ``` При неверном токене сервер возвращает `401 / UNAUTHORIZED`. ## Формат успешного HTTP-ответа ```json { "ok": true, "payload": { } } ``` ## Формат HTTP-ошибки ```json { "ok": false, "code": "BAD_JSON", "message": "Тело запроса должно быть JSON" } ``` ## 1. `GET /debug/ws/clients` Возвращает список активных WebSocket-клиентов. ### Успешный ответ ```json { "ok": true, "payload": { "count": 1, "clients": [ { "sessionId": "SESSION_ID", "login": "alice", "authStatus": 2, "wsOpen": true, "remoteAddress": "127.0.0.1", "ip": "127.0.0.1", "userAgent": "Mozilla/5.0 ...", "clientInfoFromClient": "...", "clientInfoFromRequest": "...", "userLanguage": "ru", "sessionCreatedAtMs": 1774700000123 } ] } } ``` ## 2. `POST /debug/ws/connect` Запускает debug-сценарий соединения двух активных WS-сессий и отправляет им события: - `DebugConnectPrepareResponder` - `DebugConnectStartInitiator` ### Запрос ```json { "initiatorSessionId": "SESSION_ID_1", "responderSessionId": "SESSION_ID_2", "clearDebugLog": true } ``` ### Успешный ответ ```json { "ok": true, "payload": { "runId": "dbg-...", "callId": "debug-call-...", "accepted": true, "initiatorSessionId": "SESSION_ID_1", "responderSessionId": "SESSION_ID_2", "initiatorLogin": "alice", "responderLogin": "bob", "mode": "cross-login" } } ``` ### Ошибки - `400 / BAD_JSON` — тело запроса не JSON. - `400 / BAD_FIELDS` — не заполнены sessionId или переданы одинаковые sessionId. - `404 / INITIATOR_NOT_FOUND` — сессия инициатора не найдена или неактивна. - `404 / RESPONDER_NOT_FOUND` — сессия получателя не найдена или неактивна. ## 3. `GET /debug/ws/logs` Возвращает tail debug-логов из `DebugRunLogBuffer`. ### Query-параметры - `limit` — количество записей. - `runId` — фильтр по runId. ### Успешный ответ ```json { "ok": true, "payload": { "count": 1, "limit": 100, "runIdFilter": "ui-run-1", "logs": [ { "ts": 1774700000123, "level": "info", "runId": "ui-run-1", "source": "debug-connect", "sessionId": "SESSION_ID", "login": "alice", "message": "opened channels tab", "details": "{}" } ] } } ``` ## 4. `POST /debug/ws/ui-reload-all` Рассылает активным UI-сессиям debug-событие на reload. ### Запрос ```json { "reason": "manual_debug_api", "reloadAfterMs": 700 } ``` Если `reason` не передан или пустой, сервер использует `manual_debug_api`. `reloadAfterMs` ограничивается диапазоном `100..15000`. ### Успешный ответ ```json { "ok": true, "payload": { "accepted": true, "reason": "manual_debug_api", "reloadAfterMs": 700, "issuedAtMs": 1774700000123, "totalConnections": 2, "sentCount": 2, "skippedCount": 0 } } ``` ### Ошибки - `400 / BAD_JSON` — тело запроса не JSON.