Bluesky запустила Jetstream v2 с доступом к истории сети

Bluesky запустила Jetstream v2 с доступом к истории сети

Bluesky запустила новый бренд и сайт, Bluesky Protocol Services, где собрала документацию по всей публичной инфраструктуре, которую компания держит поверх сети AT Protocol: инстансы Jetstream, реле и API-эндпоинты Bluesky. Раньше было неочевидно, что именно Bluesky отдаёт как отдельный сервис и с чего разработчику начинать; новый сайт заменяет старую документацию на docs.bsky.app и служит площадкой для будущих релизов вроде описанных ниже.

Главный релиз, вышедший вместе с сайтом, Jetstream v2. Jetstream, это способ читать сеть AT Protocol массово: разработчик описывает нужный срез данных и получает его в виде обычного JSON поверх WebSocket. Раньше у Jetstream не было истории: чтобы получить уже существующие в сети записи, приходилось самостоятельно устраивать бэкафилл, докачивать всю историю репозиториев, а затем переключаться на живой поток. Jetstream v2 добавляет эту возможность на стороне сервера: он хранит сжатый архив всей сети и открывает к нему новый доступ, Network Replay (воспроизведение истории сети). Разработчик отправляет свои фильтры POST-запросом на метод planSnapshot, скачивает возвращённые «запечатанные» сегменты архива по обычному HTTP, а затем один раз подключается к живому потоку по WebSocket, и дальше получает события без разрыва. Replay не хранит состояние на сервере: нет курсора для каждого потребителя, нет подписки, которую нужно регистрировать, и нечего хранить на стороне клиента.

Есть и более простой режим, просто снимок сети: точечная копия архива по HTTP (методы listSegments и getSegment), без живого потока, но по тем же фильтрам и из того же архива. Это позволяет гораздо тоньше нарезать данные на сервере, вообще не занимаясь локальным бэкафиллом: можно поднять приложение, прогнать анализ по постам за месяц или восстановиться после простоя, и всё это через тот же формат JSON, что и живой поток.

Отдача архивов нагружает канал компании, поэтому для таких запросов теперь нужен API-токен. Живой поток при этом остаётся открытым и не требует авторизации, токен нужен только для запроса архива, и Bluesky заявляет, что не планирует вводить обязательную авторизацию для живого потока.

Инстансы v2 уже работают по адресам wss://jetstream.us-west.bsky.network и wss://jetstream.us-east.bsky.network. Старые инстансы v1 при этом продолжат работать без изменений ещё некоторое время, а поведение живого потока у v1 и v2 одинаковое, поэтому срочно переезжать не нужно. Инфраструктура, как и раньше, с открытым кодом, и её можно развернуть самостоятельно.

Вместе с v2 вышли превью-версии SDK для Jetstream, на TypeScript и на Go. Сам по себе Jetstream, это обычный JSON, и SDK для него не обязателен, но избавляет от рутины: переподключений, дедупликации, управления курсором и декодирования событий в типизированные записи. TypeScript-пакет доступен через npm (включая npmx), Go-пакет, в составе проекта Jetstream.

Обновился и сам TypeScript SDK Bluesky: его пересобрали поверх @atproto/lex, набора инструментов для работы с лексиконами AT Protocol, типизированного от уровня протокола до записей app.bsky. Ещё в мае Bluesky анонсировала стабильный превью lex SDK и обещала, что следом появится отдельная документация для Bluesky; теперь это обещание выполнено, и компания больше не поддерживает старый код для вспомогательных функций, специфичных именно для Bluesky. Все примеры на TypeScript на новом сайте уже написаны поверх lex, по словам Bluesky, это должно исключить случаи, когда языковые модели (LLM) рекомендуют разработчикам устаревшие SDK. Код, использующий старый пакет @atproto/api, продолжает работать как раньше, а гайды по Bluesky API теперь служат справочником для миграции.

Обновился и HTTP-справочник на endpoints.bsky.app, вынести его из-под docs.bsky.app было первым шагом всей этой перестройки, и теперь Bluesky доводит оставшуюся часть. Новые методы network.bsky.jetstream.*, на которых построен Replay, planBackfill, listSegments, getSegment и getBlock, теперь описаны там с полными схемами запроса и ответа; там же впервые задокументированы и WebSocket-эндпоинты Jetstream.

Всё перечисленное, новый сайт, инстансы Jetstream v2, превью-SDK и обновлённый HTTP-справочник, уже доступно. Разработчиков, которые в ближайшие недели построят что-то на Network Replay, Bluesky просит поделиться результатом: по словам компании, это самый быстрый способ понять, куда развивать оркестрацию SDK дальше.

Ключевые факты

  • Bluesky запустила «Bluesky Protocol Services», новый бренд и сайт с документацией по всей публичной инфраструктуре сети AT Protocol (инстансы Jetstream, реле, API-эндпоинты), заменивший старый docs.bsky.app.
  • Главный релиз, Jetstream v2 с функцией Network Replay: фильтры отправляются POST-запросом на planSnapshot, «запечатанные» сегменты архива скачиваются по HTTP, а затем один раз открывается живой поток по WebSocket, без разрыва в данных и без состояния на сервере.
  • Отдельный режим, простой снимок сети, даёт точечную копию архива только по HTTP (listSegments + getSegment), без живого потока.
  • Запросы к архиву теперь требуют API-токен из-за нагрузки на канал, а живой поток остаётся бесплатным и без авторизации, вводить её туда Bluesky не планирует.
  • Вышли превью-SDK для Jetstream на TypeScript и Go, а официальный TypeScript SDK Bluesky пересобран поверх @atproto/lex с отказом от устаревшего кода.

Почему это важно

До сих пор Jetstream отдавал только живой поток: чтобы получить историю, разработчик был вынужден сам поднимать бэкафилл записей и лишь потом подключаться к живому потоку. Jetstream v2 переносит эту работу на сторону сервера, Network Replay и режим простого снимка закрывают ровно этот пробел. Одновременно Bluesky свела разрозненную документацию по своей инфраструктуре (Jetstream, реле, API) в один продукт с собственным брендом, Bluesky Protocol Services, вместо старого docs.bsky.app. Заодно компания обновила и сам TypeScript SDK, убрав устаревший код для вспомогательных функций, специфичных именно для Bluesky; по её словам, это должно исключить случаи, когда языковые модели (LLM) рекомендуют разработчикам устаревшие SDK.

Кому это важно

Разработчикам, которые строят на AT Protocol приложения, аналитику или инструменты модерации и которым нужен не только живой поток событий, но и данные за прошлые периоды, например, анализ постов за месяц. Командам, которым нужно быстро восстановиться после простоя без повторного полного бэкафилла. Разработчикам на TypeScript и Go, которым нужна готовая типизированная обвязка вместо самостоятельной реализации переподключения и дедупликации. И тем, кто уже пользуется Jetstream или API Bluesky и ориентируется по документации: она теперь живёт в одном месте, Bluesky Protocol Services.

Как это применить

Для истории с переходом в живой поток: отправить POST с фильтрами на planSnapshot, скачать «запечатанные» сегменты по HTTP, затем один раз подключиться к живому потоку по WebSocket, и дальше получать события без разрыва. Для чистого снимка без живого потока: listSegments и getSegment по HTTP на тех же фильтрах. Для запроса к архиву нужен API-токен; для живого потока, нет, и вводить его там Bluesky не планирует. Новые инстансы Jetstream v2 уже работают по адресам wss://jetstream.us-west.bsky.network и wss://jetstream.us-east.bsky.network, а v1 продолжает работать без изменений, переходить срочно не обязательно. Инфраструктура открыта, и её можно развернуть самостоятельно. Для типизированной работы, превью-SDK: TypeScript-пакет через npm (включая npmx), Go-пакет в составе проекта Jetstream. Полный справочник методов, включая новые planBackfill, listSegments, getSegment, getBlock и WebSocket-эндпоинты, на endpoints.bsky.app.

Можно ли доверять

Источник, официальный блог Bluesky на atproto.com: это первичное заявление компании о её собственной инфраструктуре. Текст написан от первого лица компании («мы»), персональный автор нигде не назван, пользователь, опубликовавший ссылку на Hacker News, лишь поделился постом, а не является его автором. Технические детали, адреса эндпоинтов, названия методов, поведение авторизации, изложены как прямые утверждения Bluesky о собственном сервисе. При этом пост не раскрывает ни стоимость и порядок получения API-токена, ни объём архива, ни точный срок жизни инстансов v1, это не пробел пересказа, а то, что сама компания не указала.

Риски и подводные камни

Цена и процедура получения API-токена для архивных запросов не раскрыты. Срок работы v1-инстансов не определён, сказано лишь «ещё некоторое время», конкретной даты отключения нет. Новые SDK для Jetstream (TypeScript и Go), превью, а не финальный релиз, так что их интерфейс может измениться. Эффект «исключить рекомендации устаревших SDK от языковых моделей» Bluesky формулирует как ожидание, а не как гарантированный результат. Наконец, сама компания называет раздачу архивов нагрузкой на канал, именно поэтому и понадобился токен, а значит при росте спроса доступ к истории может оказаться не таким бесплатным, как живой поток.

«Живой поток остаётся открытым и не требует авторизации, токен нужен только для запроса архива. Мы не планируем вводить обязательную авторизацию для живого потока.»

— Bluesky