zapo é uma implementação independente do protocolo do WhatsApp Web — não é um fork do Baileys. Os conceitos se sobrepõem (pareamento companion, sessões Signal, um stream de eventos), mas a API é diferente e não é um substituto drop-in. Esta página mapeia os padrões que você já conhece.
O estado de auth, os formatos de mensagem e os nomes de método diferem. Planeje reescrever a configuração do socket e os handlers — mas o modelo mental (parear → escutar → enviar) se transfere diretamente.
Migre sessões existentes (sem reparear)
Trocar de biblioteca não precisa significar reparear cada sessão. Owa-store-migrate converte o auth state do Baileys direto para o layout de store do zapo — mesma identidade de device, mesmas sessões Signal com cada peer, sem ler QR.
BaileysAuthSnapshot (o mesmo formato { creds, keys } que o useMultiFileAuthState mantém em memória), ela devolve um ZapoStoreSnapshot, e você escreve isso numa store nova do zapo.
WaClient({ store, sessionId: 'default' }) para a store resultante e chame connect() — ele sobe como o device existente, com toda sessão Signal com cada peer intacta.
Auth state em banco, não em arquivos? A forma
BaileysAuthSnapshot é só { creds, keys: { 'pre-key': {...}, 'session': {...}, 'sender-key': {...}, ... } }. Se sua storage do Baileys é custom (uma tabela MySQL por sessão, linhas no Postgres, hashes no Redis, …), aponte seu reader para essa fonte e produza o mesmo objeto — a chamada migrate() e o lado de escrita do zapo continuam idênticos. Para várias sessões, rode o pipeline uma vez por sessionId.Expectativas de perda. Migrar para o zapo não tem drops — todo domínio Signal é transferido. Espere algumas entradas com severidade
warn em losses: chaves de mensagem HKDF puladas são descartadas (as sessões se autocorrigem na próxima mensagem), apenas o último estado de sender-key é mantido (o libsignal guarda até 5), e timestamps de privacy-token perdem precisão sub-segundo. Tabela completa em wa-store-migrate.Criando o socket
O Baileys te dá um socket a partir de uma factory; o zapo te dá umWaClient mais uma store explícita.
creds.update para salvar na mão — a store persiste as credenciais automaticamente. Escolha qualquer backend (SQLite, Postgres, MySQL, Redis, Mongo) na Instalação.
Eventos
O Baileys multiplexa tudo porsock.ev; o zapo expõe um evento tipado por área em client.
O mapa completo está em Eventos. Cada evento é fortemente tipado via
WaClientEventMap.
Enviando mensagens
{ type: 'image' | 'video' | 'audio' | 'document' | 'poll' | 'reaction' | … }) em vez do objeto por-chave do Baileys. Citação/menções saem do objeto de conteúdo e vão para o argumento options ({ quote, mentions }).
Mapeamento de API
Diferenças-chave a ter em mente
- LID-first. O zapo prefere a identidade LID, que preserva privacidade, ao JID de número de telefone. Responda para
event.key.remoteJide prefira LIDs quando os tiver. - API de coordinators. As funcionalidades são agrupadas em getters (
client.message,client.group,client.privacy, …) em vez de métodos planos no socket — veja Arquitetura. - Stores plugáveis e tipadas. Persistência é uma camada de primeira classe com backends oficiais, não uma pasta de JSON. Veja Stores.
- Sem reconexão automática. Como no Baileys, você conduz a reconexão — mas leia Erros & desconexões para os códigos de razão.
- Sem registro de número. O zapo conecta com credenciais já pareadas/registradas; ele não registra números novos.
