SHA256
43 lines
2.9 KiB
Markdown
43 lines
2.9 KiB
Markdown
# API для разработчиков: уведомления
|
||
|
||
Уведомления являются серверной проекцией событий блокчейна. Сервер возвращает все непросмотренные записи независимо от возраста и просмотренные записи не старше 60 дней. Пагинации нет: выдача содержит все непросмотренные и всю доступную 60-дневную просмотренную историю.
|
||
|
||
## GetNotifications
|
||
|
||
Авторизация обязательна. Обычно payload пустой. Legacy-поле `limit` принимается для совместимости, но в v2 игнорируется. Для обновления badge без загрузки карточек можно передать `{"countsOnly":true}`; тогда массивы лент остаются пустыми, но watermark и `*UnseenCount` возвращаются.
|
||
|
||
Ответ содержит три ленты: `replies`, `connections`, `events`, а также `*SeenAtMs` и `*UnseenCount` для каждой категории.
|
||
|
||
- `replies`: TEXT_REPLY.
|
||
- `connections`: friend/unfriend, close_friend/unclose_friend, shine confirmed/unconfirmed, official confirmed/unconfirmed. Контакты не создают уведомлений.
|
||
- `events`: FOLLOW/UNFOLLOW каналов.
|
||
|
||
Фильтр каждой категории: `created_at_ms > seenAtMs OR created_at_ms >= now - 60 days`.
|
||
|
||
## SetNotificationState
|
||
|
||
Сохраняет подписанный watermark просмотра. Сервер принимает только монотонное движение `seenAtMs` вперёд.
|
||
|
||
Запрос:
|
||
```json
|
||
{"op":"SetNotificationState","requestId":"ntf-seen-1","payload":{"blobB64":"..."}}
|
||
```
|
||
|
||
Бинарный контейнер `SHiNE_NTF` v1.0 (big-endian):
|
||
|
||
```text
|
||
'SHiNE_NTF' 9 bytes ASCII
|
||
formatVersionMajor u8 = 1
|
||
formatVersionMinor u8 = 0
|
||
loginLen u8
|
||
login ASCII[loginLen]
|
||
timeMs u64
|
||
nonce u32
|
||
stateType u8 = 1 (SEEN_WATERMARK)
|
||
category u8 (1 replies, 2 connections, 3 events)
|
||
seenAtMs u64
|
||
signature Ed25519[64]
|
||
```
|
||
|
||
Подпись `clientKey` вычисляется над всеми байтами контейнера до `signature`, по тому же принципу, что подписанный контейнер `SHiNE_DM`. Сервер проверяет, что `login` совпадает с авторизованным пользователем, проверяет Ed25519-подпись и сохраняет также исходный signed blob для будущей переносимой синхронизации состояния.
|