Pular para o conteúdo principal
O WaClient não reconecta automaticamente. Esta é uma escolha de design deliberada: a política de reconexão (backoff, máximo de tentativas, alertas) pertence à sua aplicação. Você escuta o connection: close e decide o que fazer.

Camadas internas de recuperação

A regra “sem auto-reconnect” vale para o ciclo de vida da sessão: assim que um connection: close é emitido, o client não reabre sozinho. Mas dois retries de baixo nível existem dentro da stack – você os verá em log e não precisa tratá-los.
  • Transport WebSocket. Se o socket cair antes de um handshake noise bem-sucedido, o WaComms faz retry interno a cada reconnectIntervalMs (default 2000) até maxReconnectAttempts. Quando o handshake completa, o contador zera e qualquer queda posterior vira um evento connection pra sua app tratar.
  • Transição de pairing. Logo após um pair via QR/código, o client reinicia o socket como sessão já registrada. Nenhum connection: close é emitido – é invisível de fora.
A recuperação client_too_old (HTTP 405) coberta abaixo é uma terceira camada, opt-in.

Ciclo de vida da conexão

O evento connection

connection é uma union discriminada por status:
Em close:
  • isLogout: true — o dispositivo foi desvinculado (logout no servidor). Não reconecte; as credenciais se foram e você precisa parear novamente.
  • isLogout: false — uma queda transitória. É seguro reconectar com as credenciais armazenadas.

Um loop de reconexão com backoff

Recuperando de client_too_old (HTTP 405)

Se o servidor começar a rejeitar o handshake noise com failure_client_too_old, a versão embarcada do WA Web está desatualizada. Duas opções: Ambos são paliativos — atualize o zapo quando uma release trouxer um default mais novo.

Depois de reconectar

Parte do estado é escopado à conexão e precisa ser reestabelecido após uma reconexão bem-sucedida:
  • Assinaturas de presença — faça subscribe() novamente em qualquer contato que você estava observando (Presença).
  • Atualizações ao vivo de newsletter — faça subscribeLiveUpdates() novamente se você depende delas.
O estado persistido (credenciais, sessões do Signal, app-state) é restaurado da store automaticamente — você não pareia novamente em uma reconexão normal.

Encerramento gracioso

Chame disconnect() para um encerramento limpo que mantém as credenciais, para que você possa retomar mais tarde:
Isso descarrega os dados pendentes de write-behind e fecha o socket sem desvincular o dispositivo.
Última modificação em 29 de maio de 2026