Files
SHiNE-server/docs/API/15_Notifications_API.md

2.9 KiB
Raw Permalink Blame History

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 вперёд.

Запрос:

{"op":"SetNotificationState","requestId":"ntf-seen-1","payload":{"blobB64":"..."}}

Бинарный контейнер SHiNE_NTF v1.0 (big-endian):

'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 для будущей переносимой синхронизации состояния.