zapo é organizado em torno de um client enxuto que delega cada funcionalidade a um coordinator focado. O client é dono da conexão, da autenticação e do emissor de eventos; os coordinators são donos da lógica de domínio.
O client
OWaClient é o único ponto de entrada. Você o constrói com opções e um logger opcional, e então chama connect():
connect, disconnect, logout), consultas de estado (getState, getCredentials) e o emissor de eventos tipado (on, once, off). Todo o resto fica atrás de um getter de coordinator.
Coordinators
Cada coordinator é acessado por um getter no client. Eles são conectados de forma lazy na construção e é seguro manter referências a eles.
Como os tipos dos coordinators são exportados a partir da raiz do pacote, você pode anotá-los em TypeScript:
Fluxo de dados
- Entrada: os frames são decodificados em binary nodes, parseados e normalizados em payloads de eventos tipados, e então emitidos (
message,receipt,group, …). - Saída: sua chamada a um coordinator (por exemplo,
client.message.send) é construída em um node de protocolo, criptografada e escrita no socket; o coordinator resolve assim que o servidor envia o ack.
Convenções de engenharia
Se você ler o código-fonte, estas convenções são onipresentes e explicam boa parte do formato da API:Uint8Arrayem todo lugar para dados binários (Bufferé evitado), com views zero-copy nos caminhos quentes.- Apenas named exports — não há default exports.
- Sem enums — as constantes usam
Object.freeze({ ... } as const), expostas como os objetosWA_*. - Estruturas em memória limitadas para evitar crescimento ilimitado em processos de longa duração.
A seguir
Autenticação
Pareamento com QR ou um código de 8 caracteres, e o ciclo de vida das credenciais.
Eventos
O mapa completo de eventos e como escutá-los.
Stores
Providers, domínios e backends.
Configuração
Cada campo de
WaClientOptions explicado.