docs(spec): sessions API, device fields, profile sessions UI. Refs EventHub/EventHubBack#74

This commit is contained in:
2026-08-16 18:30:33 +03:00
parent 4dd741ba48
commit 9b4499e884
2 changed files with 37 additions and 17 deletions
+12 -6
View File
@@ -21,15 +21,19 @@ Deep-link на календарь, владельцем которого явл
Эндпоинты:
- `POST /v1/register` — регистрация (`email`, `password`); статус пользователя `pending` до верификации.
- `POST /v1/verify` — подтверждение email `{ token }`; после успеха у пользователя есть дефолтный personal-календарь.
- `POST /v1/login` — вход; ответ `{ token, refresh_token, user }`. Сессия `auth_session` с `client_type=web`.
- `POST /v1/refresh` — ротация пары токенов по `{ refresh_token }`.
- `POST /v1/login` — вход; тело: `email`, `password`, `client_type=web`, `device_name`
(метка браузера/ОС). Ответ `{ token, refresh_token, session_id, user }`.
- `POST /v1/refresh` — ротация по `{ refresh_token }`; ответ включает `session_id`.
- `POST /v1/logout``{ refresh_token }` до очистки storage.
- `GET /v1/sessions`, `DELETE /v1/sessions/:id`, `POST /v1/sessions/revoke-others`
активные сессии в профиле (устройство, «текущая», отзыв / выйти на других).
- `GET /v1/user/me` — профиль текущего пользователя.
Реализация:
- JWT в `localStorage` под ключами, отличными от Admin UI (избежать коллизии при общем origin).
- JWT + `session_id` в `localStorage` (ключи, отличные от Admin UI).
- Axios: `Authorization: Bearer <access>`; при 401 — single-flight refresh; при неудаче — редирект на `/login`.
- При старте приложения — `GET /v1/user/me` при наличии токена.
- Logout — только клиентский (очистка storage); серверного revoke нет.
- Logout — `POST /v1/logout`, затем clear storage.
- WebSocket: `ws://…:8081/ws?token=<access_jwt>`; subscribe/unsubscribe по `calendar_id`.
## 3. Технологический стек
@@ -376,7 +380,9 @@ E2E: `e2e/TESTIDS.md`. Моки (`npm run test:e2e`, `project=mock`) — тол
legal stubs; позиция по подписке **владельца**; DNS/SPF без покупки домена без явного ок.
**Продукт (фаза 2):**
- серверный logout / revoke session (`POST /v1/logout` + `{ refresh_token }`; клиент зовёт до clear storage)
- серверный logout / revoke session (`POST /v1/logout` + `{ refresh_token }`; клиент зовёт до clear storage) — сделано
- список/отзыв сессий в профиле (Back#74 / Front#72): устройство (`device_name`/UA),
revoke одной и revoke-others
- загрузка файлов: avatar `POST /v1/user/me/avatar`, cover
`POST /v1/calendars/:id/cover` (Back#71); UI — Front#69; вложения — позже
- полноценный push / reminders (email-reminder: Back#70; Web Push + prefs:
@@ -386,7 +392,7 @@ legal stubs; позиция по подписке **владельца**; DNS/SP
карточке события при полном слоте — Front#70
- шаринг календаря с правами (`calendar_share`) — Back#73 API + Front list/invites/mirror;
не путать со specialist_invite / Following
- явный `client_type=mobile` — хвост (фаза 3 бэка / нативный клиент)
- нативный `client_type=mobile` клиент — хвост (API уже принимает `mobile`)
**Вне горизонта (не фаза 2):** оплата услуги клиентом (B2C).