Endpoints Inbox vs Outbox no Mastodon: Como Ler os Internos do ActivityPub
🔍 WiseChecker

Endpoints Inbox vs Outbox no Mastodon: Como Ler os Internos do ActivityPub

Quando você usa o Mastodon, cada ação — publicar, impulsionar, seguir — é enviada como uma mensagem ActivityPub. Essas mensagens trafegam entre endpoints de inbox e outbox em cada servidor. Entender como esses endpoints funcionam ajuda a depurar problemas de federação, inspecionar fluxos de atividade brutos e construir ferramentas que interagem com o Mastodon programaticamente. Este artigo explica o que são endpoints de inbox e outbox, como ler seus conteúdos e quais erros comuns evitar ao trabalhar com os internos do ActivityPub.

Principais Conclusões: Endpoints Inbox vs Outbox no Mastodon Explicados

  • Endpoint outbox (https://instancia.exemplo/usuarios/nome/outbox): Lista atividades públicas criadas por um usuário, como publicações, impulsionamentos e seguidores, em ordem cronológica reversa.
  • Endpoint inbox (https://instancia.exemplo/usuarios/nome/inbox): Recebe atividades recebidas de outros servidores; seu conteúdo não é publicamente legível por questões de privacidade.
  • Endpoint sharedInbox (https://instancia.exemplo/inbox): Um inbox de todo o servidor que recebe atividades não direcionadas a um usuário específico, normalmente usado para mensagens de transmissão como delete e update.

ADVERTISEMENT

Endpoints ActivityPub: O Que Inbox e Outbox Realmente Fazem

ActivityPub é um protocolo de rede social descentralizado. Cada ator do Mastodon — um usuário, um grupo ou um bot — tem dois endpoints principais: um inbox e um outbox. Esses endpoints são URLs expostas no perfil JSON-LD do ator, que você pode recuperar buscando a URI do ator com um cabeçalho Accept: application/activity+json.

O outbox é uma coleção de atividades que o ator publicou. Para um usuário do Mastodon, isso inclui atividades Create para novas publicações, Announce para impulsionamentos e Follow. O outbox é paginado e publicamente legível, embora publicações privadas ou diretas não sejam incluídas.

O inbox é onde as atividades recebidas de outros atores chegam. Quando outro servidor envia uma atividade Follow para um usuário, essa atividade vai para o inbox do usuário. O inbox não é publicamente legível; o Mastodon retorna um erro 401 Unauthorized se você tentar acessá-lo sem autenticação. Isso é uma medida de privacidade deliberada.

SharedInbox: O Inbox no Nível do Servidor

O Mastodon também implementa um endpoint SharedInbox. Esta é uma única URL que recebe atividades para todos os usuários no mesmo domínio. Por exemplo, quando um servidor remoto envia uma atividade Delete para uma publicação, geralmente vai para o SharedInbox em vez do inbox pessoal de cada usuário. O SharedInbox também não é publicamente legível.

Como os Endpoints São Descobertos

O perfil de cada ator do Mastodon contém um documento JSON-LD com os seguintes campos quando buscado com o cabeçalho Accept adequado:

  • inbox: URL do inbox pessoal do usuário
  • outbox: URL do outbox do usuário
  • sharedInbox: URL do inbox compartilhado do servidor

Você pode descobrir esses endpoints para qualquer perfil público do Mastodon. Por exemplo, buscar https://mastodon.social/users/Gargron com o cabeçalho correto retorna o objeto ator contendo essas URLs.

Lendo o Endpoint Outbox: Passo a Passo

Para ler o outbox de um usuário do Mastodon, envie uma requisição HTTP GET para a URL do outbox com o cabeçalho Accept apropriado. O outbox retorna uma OrderedCollectionPage de atividades. Cada atividade contém um id, type, actor, object e timestamp published.

  1. Obtenha a URL do perfil do ator
    Abra o perfil do usuário do Mastodon em um navegador. Copie a URL da barra de endereços. Por exemplo, https://mastodon.social/@Gargron.
  2. Busque o JSON do ator com uma ferramenta como curl
    Execute este comando no terminal:
    curl -H "Accept: application/activity+json" https://mastodon.social/users/Gargron
    Substitua a URL pela URI real do ator (o caminho @username resolve para /users/username).
  3. Localize a URL do outbox na resposta
    No JSON retornado, encontre o campo outbox. Ele será algo como "outbox": "https://mastodon.social/users/Gargron/outbox".
  4. Busque a coleção outbox
    Execute: curl -H "Accept: application/activity+json" https://mastodon.social/users/Gargron/outbox
    A resposta é uma OrderedCollection com um link first para a primeira página.
  5. Siga o link da primeira página
    Use a URL no campo first para obter a página inicial de atividades. Cada item no array orderedItems é uma atividade ActivityPub.
  6. Inspecione atividades individuais
    Cada atividade inclui um campo type. Tipos comuns são Create (nova publicação), Announce (impulsionamento), Like (favorito) e Follow. O campo object contém a publicação ou o ator alvo.

Lendo o Outbox com Python

Se preferir scripts, use a biblioteca requests do Python. Aqui está um exemplo mínimo:

import requests

headers = {"Accept": "application/activity+json"}
profile_url = "https://mastodon.social/users/Gargron"
profile = requests.get(profile_url, headers=headers).json()
outbox_url = profile["outbox"]
outbox = requests.get(outbox_url, headers=headers).json()
first_page = requests.get(outbox["first"], headers=headers).json()
for activity in first_page["orderedItems"]:
    print(activity["type"], activity["object"].get("id", ""))

ADVERTISEMENT

Equívocos e Limitações Comuns ao Ler Endpoints

O Endpoint Inbox Retorna 401 Unauthorized

Esse é um comportamento esperado. O Mastodon não expõe o conteúdo do inbox para requisições não autenticadas. Mesmo com autenticação, a API do Mastodon não fornece uma maneira direta de ler o inbox de um usuário. O inbox é usado apenas internamente pelo servidor para processar atividades recebidas. Se você precisar ver atividades enviadas a um usuário, use o endpoint de notificações da API do Mastodon.

A Paginação do Outbox é Limitada a Atividades Recentes

O outbox do Mastodon retorna apenas atividades dos últimos 30 dias por padrão. Atividades mais antigas não são acessíveis pelo outbox do ActivityPub. Isso é um limite do lado do servidor. Se você precisar de dados históricos, use o endpoint de status da API do Mastodon, que pode ir mais longe dependendo da configuração do servidor.

Nem Todas as Atividades Aparecem no Outbox

O outbox contém apenas atividades que são publicamente visíveis. Menções privadas, publicações apenas para seguidores e mensagens diretas são excluídas. Além disso, algumas atividades do lado do servidor, como exclusão automática de conta, podem não aparecer no outbox.

Confusão entre SharedInbox e Inbox Pessoal

Ao ler o perfil de um ator do Mastodon, você verá os campos inbox e sharedInbox. O inbox compartilhado é usado para mensagens de transmissão. Se você estiver construindo uma aplicação federada, sempre envie atividades para o shared inbox primeiro, porque a documentação do Mastodon recomenda isso para eficiência. O inbox pessoal é reservado para atividades explicitamente direcionadas àquele usuário específico.

Mastodon Inbox vs Outbox vs SharedInbox: Principais Diferenças

Item Inbox Outbox SharedInbox
Propósito Recebe atividades recebidas para um único usuário Lista atividades enviadas publicadas por um usuário Recebe atividades de transmissão para todos os usuários do servidor
Legível publicamente Não (retorna 401) Sim (paginado, últimos 30 dias) Não (retorna 401)
Autenticação necessária para ler Sim (apenas interno) Não Sim (apenas interno)
Atividades típicas recebidas Follow, Like, Announce, Create Create, Announce, Like, Follow Delete, Update, Undo
Escopo Por usuário Por usuário Por servidor

ADVERTISEMENT

Conclusão

Agora você consegue distinguir entre inbox, outbox e shared inbox de um usuário do Mastodon. O outbox é o único endpoint que você pode ler sem autenticação, e ele mostra atividades públicas dos últimos 30 dias. Se precisar depurar problemas de federação, comece lendo o outbox do usuário afetado. Para inspeção de atividades recebidas, use o endpoint de notificações da API do Mastodon ou ative o log de depuração no seu servidor. Como dica avançada, defina o cabeçalho Accept como application/activity+json ao buscar qualquer URI de ator para obter o perfil JSON-LD completo com todas as URLs de endpoint.

ADVERTISEMENT