Fork da implementação de referência do AT Protocol com AppView otimizado para desempenho, indexador de firehose baseado em Rust, cache Redis e funcionalidades comunitárias para redes sociais auto-hospedadas em escala.
Esta é uma bifurcação (fork) do AT Protocol reference implementation pela Blacksky's, mantida pela Bluesky Social PBC. Ela alimenta a AppView em api.blacksky.community.
Estamos publicando isso por transparência e para que outras comunidades possam se beneficiar do trabalho. Este repositório não aceita contribuições, issues ou PRs. Se você deseja a implementação canônica do atproto, use bluesky-social/atproto.
Todas as alterações estão em packages/bsky (lógica da AppView), services/bsky (configuração de runtime) e uma migração personalizada. Todo o resto é upstream.
O dataplane upstream inclui um consumidor de firehose em TypeScript (subscription.ts) que indexa eventos diretamente. Nós o substituímos por rsky-wintermute, um indexador em Rust, por várias razões:
O dataplane e a appview deste repositório ainda funcionam como estão. Eles leem do banco de dados PostgreSQL que o wintermute escreve. Apenas não iniciamos a assinatura de firehose embutida.
Estas são amplamente úteis para qualquer pessoa que esteja auto-hospedando uma AppView em escala.
Otimização de consulta LATERAL JOIN (packages/bsky/src/data-plane/server/routes/feeds.ts)
getTimeline e getListFeed foram reescritos com LATERAL JOINs do PostgreSQL para forçar o uso de índice por usuário em vez de varreduras completas de tabela. Melhoria significativa para usuários que seguem milhares de contas.Camada de cache Redis (packages/bsky/src/data-plane/server/cache/)
Timestamp perdem seu método .toDate() após ida e volta JSON pelo Redis, causando hidratação incompleta de perfil em acertos de cache. Atualmente executamos com o cache Redis desabilitado. A correção é serializar timestamps como strings ISO na escrita do cache e reconstruir na leitura.Aplicação no lado do servidor das preferências de notificação (packages/bsky/src/api/app/bsky/notification/listNotifications.ts)
reasons, o servidor aplica as preferências de notificação salvas do usuário. Sem isso, as preferências são aplicadas apenas no lado do cliente e não têm efeito.Correção de chave de assinatura obsoleta no verificador de autenticação (packages/bsky/src/auth-verifier.ts)
forceRefresh), ignora o cache de identidade em memória do dataplane e resolve o documento DID diretamente do diretório PLC. Corrige falhas de autenticação após migração de conta onde a chave de assinatura é rotacionada, mas o cache mantém a chave antiga.Sanitização JSON (packages/bsky/src/data-plane/server/routes/records.ts)
\u0000) e caracteres de controle dos registros armazenados antes da análise JSON. Estes são válidos de acordo com RFC 8259, mas rejeitados pelo JSON.parse() do Node.js, causando falhas silenciosas de análise rowToRecord no dataplane que se manifestam como postagens ausentes.Infraestrutura para postagens privadas de comunidade que residem na AppView em vez de PDSes individuais. Específico de como o Blacksky funciona, mas pode servir como referência para outras comunidades.
community.blacksky.feed.* com endpoints para submit, get, delete, timeline e visualizações de threadcommunity_post (migração: 20260202T120000000Z-add-community-post.ts)getPostThreadV2 para threads mistas de postagens padrão/comunitáriasBLACKSKY_MEMBERSHIP_DB_URL)Bluesky Relay (bsky.network)
|
v
rsky-wintermute -----> PostgreSQL 17 <----- Palomar
(indexador Rust) | (busca em Go)
- consumidor firehose | |
- backfiller | v
- indexador de labels | OpenSearch
- indexador direto |
v
bsky-dataplane (gRPC :2585) <--- Redis (opcional)
|
v
bsky-appview (HTTP :2584)
|
v
Proxy reverso (Caddy/nginx)
| Componente | Origem | Propósito |
|---|---|---|
| rsky-wintermute | blacksky-algorithms/rsky | Indexador de firehose em Rust: consome eventos, faz backfill de repositórios, indexa registros no PostgreSQL |
| rsky-relay | blacksky-algorithms/rsky | Relay do AT Protocol para receber labels de moderação de serviços labeler |
| rsky-video | blacksky-algorithms/rsky | Serviço de upload de vídeo: transcodifica via Bunny Stream CDN, envia referências de blob para PDSes do usuário |
| bsky-dataplane | Este repositório (services/bsky) | Camada de dados gRPC sobre PostgreSQL |
| bsky-appview | Este repositório (services/bsky) | Servidor HTTP API para endpoints XRPC de app.bsky.* |
| Palomar | blacksky-algorithms/indigo | Busca em texto completo: indexa perfis e postagens no OpenSearch com boosting por contagem de seguidores |
| palomar-sync | blacksky-algorithms/rsky | Sincroniza contagens de seguidores e pontuações PageRank do PostgreSQL para o OpenSearch |
Wintermute é um serviço monolítico em Rust com quatro caminhos de processamento paralelo:
bsky.network via WebSocket, escreve eventos em filas Fjall (armazenamento chave-valor incorporado)ON CONFLICT para idempotência