Bluesky запустила Bluesky Protocol Services — новый бренд и новый сайт для публичной инфраструктуры, которую компания эксплуатирует в сети AT Protocol.
Bluesky всегда управляла не только приложением Bluesky. Компания эксплуатирует инстансы Jetstream, релеи и API-эндпоинты Bluesky, построенные поверх atproto. Но разработчикам, пытавшимся строить поверх этой инфраструктуры, документация не всегда давала чёткое понимание, что именно предоставляется как сервис и с чего начинать. Bluesky Protocol Services собирает всю документацию, нужную разработчикам в экосистеме, проясняет контракты вокруг инфраструктуры Bluesky, заменяет собой старый сайт docs.bsky.app и даёт удобную площадку для будущих релизов вроде тех, что описаны ниже.
Jetstream v2: Network Replay
Главный релиз, выходящий вместе с новым сайтом — Jetstream v2. Jetstream остаётся лучшим способом для большинства разработчиков работать с сетью в масштабе: достаточно описать нужный срез данных, и он приходит в виде обычного JSON поверх WebSocket. Чего не хватало раньше — истории. Если требовались записи, уже существующие в сети, приходилось самостоятельно делать backfill репозиториев и затем переключаться на живой поток.
Jetstream v2 добавляет эту возможность прямо на сервер. Теперь он хранит сжатый архив всей сети и предлагает новый способ его чтения — наряду с живым потоком:
Network Replay позволяет догнать историю с любой точки в прошлом и без разрыва переключиться на живые данные. Клиент отправляет POST-запрос с фильтрами на planSnapshot, скачивает возвращённые запечатанные сегменты по обычному HTTP, а затем один раз подключается к живому WebSocket в актуальной точке. Replay не хранит состояние на сервере — нет курсора для каждого потребителя, нет регистрации подписки, нечего хранить и на стороне клиента. Буфером выступает сам Jetstream.
Можно и просто снять снапшот сети — точечную копию архива только по HTTP (listSegments + getSegment), без живого потока. Тот же архив, те же фильтры, без WebSocket.
Это открывает гораздо более гибкую фильтрацию на стороне сервера без локального backfill: можно поднять приложение, прогнать анализ по постам за месяц или восстановиться после простоя — и всё это через тот же формат JSON, что и живой поток.
Раздача таких архивов требует значительного трафика. Чтобы сервис оставался надёжным и дешёвым в эксплуатации, для таких запросов теперь требуется отдельный API-токен. Живой поток остаётся открытым и не требует авторизации — токен нужен только при запросе архива. Планов вводить авторизацию для живого потока нет.
Инстансы v2 уже работают по адресам wss://jetstream.us-west.bsky.network и wss://jetstream.us-east.bsky.network. Существующие инстансы v1 некоторое время будут работать без изменений, а живой поток ведёт себя одинаково на обеих версиях — так что переходить срочно не обязательно. Подробное описание процесса — в документации по Network Replay.
И, как всегда, эта инфраструктура остаётся открытым исходным кодом и доступна для самостоятельного хостинга. Подробности — в разделе «Запуск собственного Jetstream».
Jetstream SDK
Jetstream — это обычный JSON, так что SDK никогда не требуется по необходимости. Но есть типовая обвязка: переподключение, дедупликация, управление курсором, декодирование событий в типизированные записи. Отсюда — новые Jetstream SDK: клиенты для TypeScript и Go, где создаётся объект Jetstream, передаётся фильтр, а затем через for await перебираются декодированные типизированные события:
import { Jetstream } from '@bsky/jetstream'
import { app } from '@bsky/sdk/lexicons'
const js = new Jetstream('https://jetstream.us-east.bsky.network')
for await (const evt of js.live({ collections: [app.bsky.feed.post] })) {
if (evt.kind === 'commit' && evt.commit.operation === 'create') {
console.log(evt.commit.collection, evt.commit.record.text)
}
}
TypeScript SDK доступен через npm, в том числе через npmx.
Go SDK доступен как часть проекта Jetstream.
Подробности — в документации Jetstream SDK.
Bluesky TypeScript SDK на новой базе lex
Ещё в мае Bluesky перевела SDK lex в статус стабильного превью и пообещала, что отдельная документация Bluesky последует за этим. Это сделано: Bluesky TypeScript SDK теперь построен поверх @atproto/lex, а значит, поддержка устаревших путей кода для Bluesky-специфичных хелперов больше не ведётся. Речь о полноценном тулчейне лексиконов, типизированном сквозным образом — от уровня протокола вплоть до записей app.bsky.
Каждый пример на TypeScript на новом сайте написан именно под этот SDK — это большой шаг в сторону от устаревшего технического долга: хорошая гигиена кода для команды и заодно способ избавиться от рекомендаций устаревших SDK со стороны LLM. Код на @atproto/api продолжает работать как прежде, а руководства по Bluesky API служат справочником для миграции.
Обновления endpoints.bsky.app
Обновился и HTTP-справочник. Вынос этой документации из https://docs.bsky.app был первым шагом всей этой реорганизации, и теперь реализована оставшаяся часть.
Новые методы network.bsky.jetstream.*, на которых работает Replay — planBackfill, listSegments, getSegment и getBlock — теперь доступны для просмотра с полными схемами запросов и ответов, а справочник также документирует WebSocket-эндпоинты Jetstream, так что вся поверхность Jetstream v2 теперь собрана в одном месте.
Что дальше
Всё перечисленное уже доступно: новый сайт, инстансы Jetstream v2, превью SDK и обновлённый HTTP-справочник. Новичкам в сети стоит начать с раздела «Как это работает» — визуального объяснения того, как связаны записи, лексиконы и firehose. Для тех, кто строит решения поверх модели данных приложения Bluesky, по-прежнему доступны руководства по Bluesky API, полностью переписанные заново.
Если в ближайшие недели кто-то соберёт что-то на основе Replay, команда будет рада узнать об этом — самый быстрый способ повлиять на дальнейшее развитие оркестрации SDK — показать, во что этот поток превращается на практике.