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