ODocumentation Index
Fetch the complete documentation index at: https://zapo.to/llms.txt
Use this file to discover all available pages before exploring further.
zapo traz dois pacotes opcionais voltados puramente a desenvolvimento e testes — nenhum é para produção:
- Servidor MCP (
@zapo-js/mcp-server) — expõe umWaClientao vivo a um agente de IA (Claude Code, Cursor) para conectar, parear, enviar e inspecionar o estado de forma interativa. - Fake server (
@zapo-js/fake-server) — um servidor WhatsApp Web falso in-process que dirige oWaClientreal ponta-a-ponta, para você testar de forma determinística sem tocar nos servidores do WhatsApp.
Servidor MCP
Ele expõe uma instância deWaClient ao vivo e o namespace do módulo zapo-js como ferramentas MCP. Um agente LLM pode então conduzir fluxos completos do WhatsApp — conectar, parear, enviar, consultar grupos/newsletters, inspecionar eventos, percorrer o estado SQL — sem você escrever scripts descartáveis.
Superfície de ferramentas
| Ferramenta | O que faz |
|---|---|
call / inspect | Percorre caminhos pontilhados em client (o WaClient) ou lib (o namespace zapo-js, incluindo proto.* e helpers como parsePhoneJid). call invoca funções; inspect lista membros. |
events / events_clear | Ring buffer limitado de todo evento de WaClientEventMap — filtre por types / since / limit / drain. |
logs / logs_clear | Buffer consultável espelhando cada linha de log do runtime + lib (também stderr; JSONL para MCP_LOG_FILE se definido). |
lifecycle | status / start / destroy para o client. |
restart | soft (descarta o client + limpa buffers) ou process_exit (também sai do processo para um supervisor reiniciá-lo). |
Instalar e registrar
tsx — sem build, e o zapo-js resolve direto de src/:
Detalhe do pareamento
client.connect() bloqueia até o pareamento terminar, então sempre inicie sem aguardar (await) e depois consulte o buffer de eventos:
auth_qr ao usuário, espere por auth_paired e continue.
Variáveis de ambiente principais
| Var | Padrão | Propósito |
|---|---|---|
MCP_AUTH_PATH | <cwd>/.auth/state.sqlite | Caminho da store SQLite de credenciais |
MCP_SESSION_ID | default_2 | sessionId passado ao WaClient |
MCP_LOG_LEVEL | info | trace / debug / info / warn / error |
MCP_TRANSPORT | stdio | stdio ou http |
MCP_HTTP_HOST / MCP_HTTP_PORT / MCP_HTTP_PATH | 127.0.0.1 / 3737 / /mcp | Configuração do listener HTTP |
MCP_EVENT_BUFFER_SIZE / MCP_LOG_BUFFER_SIZE | 1000 / 500 | Tamanhos dos rings em memória |
WaClient por processo (multi-sessão exige múltiplos servidores com MCP_AUTH_PATH + MCP_SESSION_ID distintos); sem reconexão automática (chame connect de novo em connection: close); o restart soft não aplica mudanças de código, enquanto process_exit + um supervisor aplica. Referência completa: packages/mcp-server/README.md.
Fake server
O@zapo-js/fake-server é um servidor WhatsApp Web falso in-process que dirige o WaClient real ponta-a-ponta — handshake Noise XX/IK completo, pareamento por QR, Signal Protocol (X3DH + Double Ratchet), SenderKey de grupo, upload/download de mídia sobre HTTPS auto-assinado e sincronização de app-state — tudo sem tocar nos servidores do WhatsApp. Ele alimenta a própria suíte de testes cross-check e os benchmarks da biblioteca, e você pode usá-lo para testar sua integração de forma determinística.
Início rápido
chatSocketUrls (aponta para o WebSocket falso), testHooks.noiseRootCa (confia no certificado do servidor falso sem burlar a verificação — a checagem completa da cadeia ainda roda) e proxy.mediaUpload / proxy.mediaDownload (roteia a mídia para o servidor HTTPS falso).
O que ele simula
FakeWaServer— o listener WebSocket, o handshake Noise, um roteador de IQ que responde a cada IQ que a lib emite na operação normal (upload/fetch de prekey, usync,media-conn, sincronização de app-state, grupos, privacidade, perfil, blocklist, …), além de registries de estado para peers e grupos.FakePeer— um contato simulado com cripto Signal real:peer.sendConversation(text)/peer.sendGroupConversation(groupJid, text)empurram mensagens para o client, epeer.expectMessage()captura e descriptografa o que o client envia.- Pareamento —
server.runPairing(pipeline, { deviceJid }, materialFn)conduz o handshake completo de pareamento por QR; depois a lib reconecta com o handshake IK (capture-o viawaitForNextAuthenticatedPipeline()).
CLI standalone
Rode como um servidor standalone para experimentos manuais:Benchmarking
O pacote inclui um profiler de mensagens (send/recv × 1:1/grupo) usado para acompanhar a performance da biblioteca:ZAPO_BENCH_* (ZAPO_BENCH_CONTACTS, ZAPO_BENCH_GROUP_MEMBERS, ZAPO_BENCH_MESSAGES, ZAPO_BENCH_SCENARIOS, …) e adicione --cpu / --heap / --separate-process para profiles. Veja packages/fake-server/README.md para a referência completa de flags.
O fake server é um harness de teste in-process, não um runtime que você faz deploy. Combine-o com a store memory para testes rápidos e isolados que resetam a cada execução.
