WaWeb canonical pipeline

Fresh pairing, send and receive

Visão compacta da captura canônica desde a abertura do WebSocket até o envio de mensagem, fanout para dispositivos e recebimento da mensagem auxiliar.

Mapa visual do fluxo

Socket Noise PairCode Auth Bootstrap Envio Recebimento

Glossário dos termos do mapa

Tradução curta dos nomes mais técnicos que aparecem no fluxo. Os termos ficam no idioma do protocolo para facilitar o diff com os logs, mas a explicação mostra o papel de cada um.

WebSocket
Canal que fica aberto entre cliente e servidor, permitindo troca de dados nos dois sentidos sem abrir uma conexão nova a cada mensagem.
HTTP 101
Resposta do servidor que aceita trocar o HTTP comum por WebSocket. É o sim oficial para abrir o canal persistente.
frame
Pacote bruto que viaja pelo WebSocket. Antes de virar uma stanza legível, tudo aparece como frames binários.
Noise
Protocolo que cria o canal seguro. Depois do handshake Noise, o tráfego passa cifrado entre cliente e servidor.
client_hello
Primeira mensagem do handshake Noise. O cliente envia uma chave temporária para começar a negociação segura.
server_hello
Resposta do servidor no handshake Noise. Ela devolve dados temporários para o cliente continuar a negociação.
client_finish
Mensagem final do handshake Noise. O cliente fecha a negociação e deixa o canal pronto para tráfego cifrado.
stanza
Mensagem estruturada do protocolo, parecida com uma árvore: tem tag, atributos, conteúdo e filhos.
WAP
Formato binário usado pelo WhatsApp para transformar stanzas em bytes compactos antes de enviar pelo socket.
iq
Tipo de stanza usado para pedidos que esperam resposta, como consultar dados, configurar estado ou registrar algo.
PairCode
Código curto digitado no celular para autorizar o novo aparelho sem usar QR code.
pair-device
Pedido inicial do servidor para começar o pareamento. Ele carrega referências usadas pelo celular e pelo cliente.
companion
Nome do protocolo para o aparelho secundário, ou seja, o cliente que será vinculado ao celular principal.
ref
Identificador temporário do pareamento. Ele amarra a tentativa do companion com o celular principal.
primary hello
Mensagem do celular principal para o companion durante o pareamento. Ela confirma o pedido e envia chaves.
ack
Confirmação curta de recebimento. Diz que uma stanza chegou, sem carregar uma resposta de negócio.
pair-success
Stanza que marca o pareamento como concluído. Depois dela, o companion já pode operar como autorizado.
stream:error
Erro de stream usado aqui como fechamento controlado. O servidor encerra o canal antigo para forçar reconexão.
success
Confirmação de login depois da reconexão. A partir dela, a sessão foi aceita e pode sincronizar dados.
lid
Identificador interno da conta no modelo multi-device. Em muitos pontos ele substitui o telefone.
props
Conjunto de configurações e flags que o servidor entrega para ajustar o comportamento da sessão.
Signal
Protocolo de criptografia ponta a ponta. Ele protege o conteúdo para que só remetente e destino leiam.
usync
Consulta de sincronização de usuários. Serve para descobrir dispositivos, identidades, status e chaves.
offline
Lote de mensagens e eventos que chegaram enquanto o cliente estava fora e precisam ser entregues ao reconectar.
device-identity
Bloco assinado que prova quais dispositivos pertencem a uma conta e ajuda a validar o envio cifrado.
receipt
Recibo de estado da mensagem. Pode indicar entrega, recebimento, leitura ou outro avanço do fluxo.
fanout
Envio da mesma mensagem para vários dispositivos do destinatário, cada um com seu envelope cifrado.
enc
Filho da stanza que carrega o conteúdo cifrado pelo Signal. O texto real só aparece depois de decifrar.

Marcos exatos da captura

Faixa Marco Contrato observado
Pipeline 9-16 Handshake Noise antes da primeira stanza client_hello → server_hello → client_finish
Stanza 1 Primeiro nó WAP decodificado recv iq / pair-device
Stanza 11 Pareamento aceito recv iq / pair-success
Stanza 16 Sessão autenticada recv success / lid + props + companion_enc_static
Stanza 165 Primeiro envio de texto sent message / participants + device-identity
Stanza 188 Fanout para dispositivos sent message / device_fanout + device-identity
Stanza 200 Mensagem recebida do auxiliar recv message / enc + url_text + url_number + reporting