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
S → C · refs de pareamento
O servidor envia referências usadas para iniciar o pareamento.
S → C · country_code + ref
O servidor confirma o país do número e devolve nova referência.
S → C · notification + ack
O celular principal aceita o pedido e o servidor avisa o cliente.
stream:error · xmlstreamend
O servidor fecha o stream para forçar uma reconexão autenticada.
ws-4 · login salvo
O cliente reabre a conexão usando a sessão recém-salva.
C → S · sessão registrada
O cliente apresenta as credenciais salvas ao servidor.
media_conn · props · edge_routing
O cliente busca propriedades de mídia e rotas para operar.
registration · identity · skey
O cliente sincroniza identidade e chaves usadas pelo Signal.
privacy · tos · notices
O servidor envia regras de privacidade, termos e avisos.
picture · business_profile · tokens · key
O cliente baixa perfil, foto, tokens e chaves atuais.
Android auxiliar → WhatsApp
O celular auxiliar dispara uma mensagem para a conta em teste.
200 · enc + url_text + url_number + reporting
O cliente recebe a stanza cifrada com texto e metadados.
usync · identity · final list
O cliente faz a última sincronização de identidades e contatos.
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 |