{"_id":"@areumtecnologia/unitychat","_rev":"8-419e09a0a4ff0599522f11d9255e1a33","name":"@areumtecnologia/unitychat","dist-tags":{"latest":"1.1.7"},"versions":{"1.0.0":{"name":"@areumtecnologia/unitychat","version":"1.0.0","author":{"name":"Áreum Tecnologia"},"license":"ISC","_id":"@areumtecnologia/unitychat@1.0.0","maintainers":[{"name":"areumtecnologia","email":"dev@areum.com.br"}],"dist":{"shasum":"84cd4e9001942c5cf837fbf3e1f85d02f79a508c","tarball":"https://registry.npmjs.org/@areumtecnologia/unitychat/-/unitychat-1.0.0.tgz","fileCount":855,"integrity":"sha512-AfF8m5Er1I9SYwFJSZ2E8ri1FctCz5DUyYgv9pBjk/fGmC6aXfP58m5WNRycK0k+JayRRIoazl9p+aqO8Tie8Q==","signatures":[{"sig":"MEUCIQDiIly0a9HCisMCRC9AfZd4nxD3bVo3+UkjWNLONI7/3QIgSkJV+MDlWMCuOfvMunHEHsMOj0sK43ZJjRbRzMmo8eA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":295314},"main":"index.js","type":"commonjs","gitHead":"ff68cfef2c8a278bf4b567e2648e5ca450369c5d","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"areumtecnologia","email":"dev@areum.com.br"},"_npmVersion":"11.6.0","description":"just another Baileys wrapper","directories":{},"_nodeVersion":"25.2.1","dependencies":{"qrcode":"^1.5.4","node-cache":"^5.1.2","qrcode-terminal":"^0.12.0","crypto-digest-sync":"^1.0.0","@areumtecnologia/wasockets":"^1.1.3"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/unitychat_1.0.0_1783350876531_0.3223800713745444","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@areumtecnologia/unitychat","version":"1.1.1","author":{"name":"Áreum Tecnologia"},"license":"ISC","_id":"@areumtecnologia/unitychat@1.1.1","maintainers":[{"name":"areumtecnologia","email":"dev@areum.com.br"}],"dist":{"shasum":"b82b7849b511c2e3f5cb29d4ccc2e20bc96f44a5","tarball":"https://registry.npmjs.org/@areumtecnologia/unitychat/-/unitychat-1.1.1.tgz","fileCount":1198,"integrity":"sha512-b8Zq6nKJTxBNcTV+W+oDkC1T3KUsSehJi5lc325mUecAO9y3O49Iv7geOvqIQTUUj1daV5C6d/kX0m5OWMa25A==","signatures":[{"sig":"MEUCIDkkmziET8U/9JTx6IYrJaLuWJ/UD0gveicNft7a/MlbAiEAqqZV4//pQItDxRqSpfKOcZMDMHlHigvYCrs7RU6WWhM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1606565},"main":"index.js","type":"commonjs","gitHead":"ff68cfef2c8a278bf4b567e2648e5ca450369c5d","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"areumtecnologia","email":"dev@areum.com.br"},"_npmVersion":"11.6.0","description":"just another Baileys wrapper","directories":{},"_nodeVersion":"25.2.1","dependencies":{"qrcode":"^1.5.4","node-cache":"^5.1.2","qrcode-terminal":"^0.12.0","crypto-digest-sync":"^1.0.0","@areumtecnologia/wasockets":"^1.1.3"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/unitychat_1.1.1_1783390133978_0.3225035525568576","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@areumtecnologia/unitychat","version":"1.1.2","author":{"name":"Áreum Tecnologia"},"license":"ISC","_id":"@areumtecnologia/unitychat@1.1.2","maintainers":[{"name":"areumtecnologia","email":"dev@areum.com.br"}],"dist":{"shasum":"7f74bc36c769576ee8bdd83bbbe886e606b91ea9","tarball":"https://registry.npmjs.org/@areumtecnologia/unitychat/-/unitychat-1.1.2.tgz","fileCount":1198,"integrity":"sha512-dqJQG8vQr4vv0wiiYJqVSQDSOlHcevqfW0cNxE1r1E+oDNbpK03+QtE4Z4k0WY+FnGkvMfA1rrvlQw7cWuu38A==","signatures":[{"sig":"MEUCIFQ+5xt366XCfihSQzo/LV00LhSteBbk9XeXVI+GPTzEAiEAgyKiviwADQIaUjkCKtgwuGZRsdlKi73j4QbZ0qmqKp4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIFsbuuANze2yPJJzCLvt097wH564fFjR+w0d90WyDEOlAiABhpx9oI9RqYkGR92GeYWkaA2gNk4XXWWEmsxLEKK9WQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1606636},"main":"index.js","type":"commonjs","gitHead":"979ed9de1d9120fa3ee4e3fa6706f380e1dc857c","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"areumtecnologia","email":"dev@areum.com.br"},"_npmVersion":"11.6.0","description":"just another Baileys wrapper","directories":{},"_nodeVersion":"25.2.1","dependencies":{"qrcode":"^1.5.4","node-cache":"^5.1.2","qrcode-terminal":"^0.12.0","crypto-digest-sync":"^1.0.0","@areumtecnologia/wasockets":"^1.1.3"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/unitychat_1.1.2_1789072041963_0.5953355384108598","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"@areumtecnologia/unitychat","version":"1.1.3","author":{"name":"Áreum Tecnologia"},"license":"ISC","_id":"@areumtecnologia/unitychat@1.1.3","maintainers":[{"name":"areumtecnologia","email":"dev@areum.com.br"}],"dist":{"shasum":"fd4a155524ce4197f5f4f4b37b6fc3c605a0e71f","tarball":"https://registry.npmjs.org/@areumtecnologia/unitychat/-/unitychat-1.1.3.tgz","fileCount":1198,"integrity":"sha512-nJmBa/s3BPnPBDRoNRMTCII0CHbuxpBsn7u6rbV6WTf/2zCDRtQKkw5O8nAgyqtOqhMv3rzK4m6oRbRZifh36g==","signatures":[{"sig":"MEUCID7ci/nC7CR/Xh5VMlgb7+vMEXWFs8VoPJmZlLUbWbw6AiEAxzBVzvOqI5+CQsoT6/zn9bPOtD2UafZ5Jo9yhreBDko=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCMpN6IPEkbAmW4ERT7fmpgChP17MXaNcsNlsTjW7SqHAIhAO0jGDt4y4QmRQkFK2qoUzfesu+dXrMMy9wpvpaOlDI3","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1606714},"main":"index.js","type":"commonjs","gitHead":"979ed9de1d9120fa3ee4e3fa6706f380e1dc857c","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"areumtecnologia","email":"dev@areum.com.br"},"_npmVersion":"11.6.0","description":"just another Baileys wrapper","directories":{},"_nodeVersion":"25.2.1","dependencies":{"qrcode":"^1.5.4","node-cache":"^5.1.2","qrcode-terminal":"^0.12.0","crypto-digest-sync":"^1.0.0","@areumtecnologia/wasockets":"^1.1.3"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/unitychat_1.1.3_1789075190009_0.9258282962058266","host":"s3://npm-registry-packages-npm-production"}},"1.1.4":{"name":"@areumtecnologia/unitychat","version":"1.1.4","author":{"name":"Áreum Tecnologia"},"license":"ISC","_id":"@areumtecnologia/unitychat@1.1.4","maintainers":[{"name":"areumtecnologia","email":"dev@areum.com.br"}],"dist":{"shasum":"309324ebf502745352dbc4269057e00e23b4c62d","tarball":"https://registry.npmjs.org/@areumtecnologia/unitychat/-/unitychat-1.1.4.tgz","fileCount":21,"integrity":"sha512-N5p6QTir5xnhoMNav9zKMDhCwN96X9jAYpkjoXbpqEsR4IysQ/3JtgxGmmK4tcLzurYRDCZXiysreq7OPKkjIg==","signatures":[{"sig":"MEYCIQD3cQyIMFxBu27uxfcTV8y/2o+zbMG9BgMcT4WMeg1kZAIhAI9zwH0RgkHmcZQ+4XrvyeFAbzpA7EqC7zt/UBApsuhN","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIAf34t/0mgYweFHO2g+Y/v865qIBuTwL147iy76BB1STAiEA3qkmaqm+hzIRnc6tjtR8PDBi/pmZqWHlCnKvKybupG8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":152881},"main":"index.js","type":"commonjs","gitHead":"979ed9de1d9120fa3ee4e3fa6706f380e1dc857c","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"areumtecnologia","email":"dev@areum.com.br"},"_npmVersion":"11.6.0","description":"just another Baileys wrapper","directories":{},"_nodeVersion":"25.2.1","dependencies":{"qrcode":"^1.5.4","node-cache":"^5.1.2","qrcode-terminal":"^0.12.0","crypto-digest-sync":"^1.0.0","@areumtecnologia/wasockets":"^1.1.3"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/unitychat_1.1.4_1789075412926_0.9563900814846957","host":"s3://npm-registry-packages-npm-production"}},"1.1.5":{"name":"@areumtecnologia/unitychat","version":"1.1.5","author":{"name":"Áreum Tecnologia"},"license":"ISC","_id":"@areumtecnologia/unitychat@1.1.5","maintainers":[{"name":"areumtecnologia","email":"dev@areum.com.br"}],"dist":{"shasum":"0aa8298623e2f9a524b87726c343d9b25f06efd3","tarball":"https://registry.npmjs.org/@areumtecnologia/unitychat/-/unitychat-1.1.5.tgz","fileCount":21,"integrity":"sha512-ZDD7aQrQY3RLQ2vOHWOCcnLicYTFqxG/KxHV2MBMRq79i6IP2sVzH7Y928eT9teE19DfJuoXadQEWWXu+HiRMA==","signatures":[{"sig":"MEUCIQDT8sY/e7GBzwo1tglyFBozss1MLP7wgxRClrC90M/9TAIgAJfqvS7wY6Xse9DFpl/toO5gl+2GyEKmGxzlhtn70ek=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDilLtakg0WTmyjHHaIV4WP9vmiO+Yp1TWqS5naztI8/QIhAIYJNKYa6Od85/KBmJ4Jnmo8MVWXFtMaXuU0TcGLoeTM","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":160396},"main":"index.js","type":"commonjs","gitHead":"979ed9de1d9120fa3ee4e3fa6706f380e1dc857c","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"areumtecnologia","email":"dev@areum.com.br"},"_npmVersion":"11.6.0","description":"just another Baileys wrapper","directories":{},"_nodeVersion":"25.2.1","dependencies":{"qrcode":"^1.5.4","node-cache":"^5.1.2","qrcode-terminal":"^0.12.0","crypto-digest-sync":"^1.0.0","@areumtecnologia/wasockets":"^1.1.3"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/unitychat_1.1.5_1789085789069_0.48542175412055233","host":"s3://npm-registry-packages-npm-production"}},"1.1.6":{"name":"@areumtecnologia/unitychat","version":"1.1.6","author":{"name":"Áreum Tecnologia"},"license":"ISC","_id":"@areumtecnologia/unitychat@1.1.6","maintainers":[{"name":"areumtecnologia","email":"dev@areum.com.br"}],"dist":{"shasum":"cf867b7fa7aa26fad18273009e101830a077a39b","tarball":"https://registry.npmjs.org/@areumtecnologia/unitychat/-/unitychat-1.1.6.tgz","fileCount":21,"integrity":"sha512-8Iwt2mofeA5Kmh+nOcJ9GMYHyB6kuPPvAwiOwQ8tayzU1/TNWdJJxXB9wWmTC7qXL4YjyQ1nZbgp/AcXgkoH/g==","signatures":[{"sig":"MEUCIEYLxKeOzKB9WepoW8Z/qa/9/jTJxkpHiLra9n8hjMaAAiEA6XQAUWUrFpYw/iL+5Wx7TEGDCwnEgclRdSxPjIdK0gE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIAoS30dxOhm9gwA+J8S7FQtPjZXgyD9rLOwQzktR/1/fAiAxaNGEAQTi/AgWJQ/8qcLu9Ns0vtuZr85KcErUBcCOMQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":163865},"main":"index.js","type":"commonjs","gitHead":"979ed9de1d9120fa3ee4e3fa6706f380e1dc857c","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"areumtecnologia","email":"dev@areum.com.br"},"_npmVersion":"11.6.0","description":"just another Baileys wrapper","directories":{},"_nodeVersion":"25.2.1","dependencies":{"qrcode":"^1.5.4","node-cache":"^5.1.2","qrcode-terminal":"^0.12.0","crypto-digest-sync":"^1.0.0","@areumtecnologia/wasockets":"^1.1.3"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/unitychat_1.1.6_1789090350831_0.11357475971719722","host":"s3://npm-registry-packages-npm-production"}},"1.1.7":{"_id":"@areumtecnologia/unitychat@1.1.7","dist":{"shasum":"7e7254cb7829995863af3b6f5efa634ed11b487e","tarball":"https://registry.npmjs.org/@areumtecnologia/unitychat/-/unitychat-1.1.7.tgz","fileCount":21,"integrity":"sha512-oRBEUjuwO1a1N59aslbVueR+rcte2ZcSybH+i0cTrcdk049TRyALq1iOJGIfP/LRe1da5VjtncqgVqeTy3bnNA==","signatures":[{"sig":"MEYCIQDb2VOZYInQFyd8enDQ+QlLdet7aIfjveIv+Z8tJgitOQIhAPcC/TZ//ecRE9n0Rx8K7xohOk/PZ/adc1wjCasOV5U4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCwAnhNd5jK4eIAHRMjM057b65IUWqvuadbUjpULlMQCwIhAJtXXgWlacRDdwKFsV+SAcBohntBIuykdYj4ddOzgwIk"}],"unpackedSize":169447},"main":"index.js","name":"@areumtecnologia/unitychat","type":"commonjs","author":{"name":"Áreum Tecnologia"},"gitHead":"979ed9de1d9120fa3ee4e3fa6706f380e1dc857c","license":"ISC","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"version":"1.1.7","_npmUser":{"name":"areumtecnologia","email":"dev@areum.com.br"},"_npmVersion":"11.6.0","description":"just another Baileys wrapper","directories":{},"maintainers":[{"name":"areumtecnologia","email":"dev@areum.com.br"}],"_nodeVersion":"25.2.1","dependencies":{"qrcode":"^1.5.4","node-cache":"^5.1.2","qrcode-terminal":"^0.12.0","crypto-digest-sync":"^1.0.0","@areumtecnologia/wasockets":"^1.1.3"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/unitychat_1.1.7_1789090967067_0.4596564015302429"}}},"time":{"created":"2026-07-06T15:14:36.383Z","modified":"2026-09-11T01:42:47.338Z","1.0.0":"2026-07-06T15:14:36.802Z","1.1.1":"2026-07-07T02:08:54.144Z","1.1.2":"2026-09-10T20:27:22.105Z","1.1.3":"2026-09-10T21:19:50.151Z","1.1.4":"2026-09-10T21:23:33.029Z","1.1.5":"2026-09-11T00:16:29.162Z","1.1.6":"2026-09-11T01:32:30.912Z","1.1.7":"2026-09-11T01:42:47.160Z"},"author":{"name":"Áreum Tecnologia"},"license":"ISC","description":"just another Baileys wrapper","maintainers":[{"name":"areumtecnologia","email":"dev@areum.com.br"}],"readme":"# @areumtecnologia/unitychat\n\n[![npm version](https://img.shields.io/npm/v/@areumtecnologia/unitychat.svg)](https://www.npmjs.com/package/@areumtecnologia/unitychat)\n[![License: ISC](https://img.shields.io/badge/License-ISC-blue.svg)](https://opensource.org/licenses/ISC)\n\nUma biblioteca de alto nível (wrapper) robusta e resiliente para a [Baileys](https://github.com/WhiskeySockets/Baileys). Facilita a criação e o gerenciamento de conexões com o WhatsApp, oferecendo uma arquitetura baseada em eventos unificados, normalização de mensagens para estruturas ricas e handlers especializados para simplificar a lógica de negócio do seu bot.\n\n---\n\n## ✨ Características\n\n- 🚀 **Simplificação do Ciclo de Vida**: Conexão auto-gerenciável, tratamento automático de desconexões e reconexão inteligente.\n- 📩 **Estrutura de Mensagens Ricas**: Mensagens recebidas são completamente normalizadas em objetos JavaScript amigáveis, contendo helpers para baixar mídias, verificar menções, respostas, reações e votos.\n- 🛠️ **Handlers Especializados**: Módulos desacoplados para gerenciar Mensagens, Grupos, Contatos, Usuários, Newsletters, Chamadas e Stories.\n- 🔘 **Mensagens Interativas de Última Geração**: Suporte nativo para construir e enviar botões interativos (`Quick Reply`, `URL`, `Copy Code`, `Call`, `Location`) e menus de lista de seleção única (`List Buttons`).\n- 📂 **Multi-Sessão Nativa**: Persistência de estado de autenticação simplificada e isolamento seguro por sessão.\n\n---\n\n## 📦 Instalação\n\nInstale o pacote através do npm:\n\n```bash\nnpm install @areumtecnologia/unitychat\n```\n\n---\n\n## 🚀 Início Rápido\n\nAqui está um exemplo básico de como inicializar o cliente, escutar eventos e interagir com mensagens:\n\n```javascript\nconst { UnityChat, Events } = require('@areumtecnologia/unitychat');\n\n// Inicializa o cliente com configurações personalizadas\nconst client = new UnityChat({\n    sessionName: 'sessao-suporte',\n    printQRInTerminal: true,\n    restartOnClose: true\n});\n\n// Evento disparado quando a conexão com o WhatsApp está pronta\nclient.on(Events.CONNECTED, (user) => {\n    console.log(`✅ Conectado com sucesso como: ${user.name} (${user.id})`);\n});\n\n// Escuta novas mensagens recebidas\nclient.on(Events.MESSAGE_RECEIVED, async (message) => {\n    console.log(`📩 Nova mensagem de ${message.fromPushName} (${message.from}): ${message.body}`);\n\n    // Exemplo de resposta simples\n    if (message.body === '!ping') {\n        await client.messages.sendTextMessage(message.from, 'pong! 🏓');\n    }\n\n    // Se a mensagem contiver mídia (imagem, áudio, etc)\n    if (message.hasMedia && message.media) {\n        console.log(`Mídia recebida do tipo: ${message.media.mimetype}`);\n        \n        // Baixa a mídia usando o helper integrado\n        const attachments = await message.media.getAttachments();\n        const base64Data = attachments.toBase64();\n        console.log(`Tamanho do buffer de mídia: ${attachments.buffer.length} bytes`);\n    }\n});\n\n// Trata erros ou desconexões inesperadas\nclient.on(Events.ERROR, (error) => {\n    console.error('❌ Ocorreu um erro no cliente:', error);\n});\n\n// Inicia o processo de conexão\nclient.connect();\n```\n\n---\n\n## ⚙️ Opções de Configuração\n\nAo instanciar a classe `UnityChat`, você pode customizar o comportamento da conexão passando as seguintes opções no construtor:\n\n| Opção | Tipo | Padrão | Descrição |\n| :--- | :--- | :--- | :--- |\n| `sessionName` | `string` | `'session'` | Identificador único da sessão para isolar dados de autenticação. |\n| `dataPath` | `string` | `'data/sessions'` | Caminho base onde as credenciais das sessões serão persistidas. |\n| `printQRInTerminal` | `boolean` | `false` | Se `true`, imprime o QR code para autenticação diretamente no console. |\n| `loggerLevel` | `string` | `'error'` | Nível do log interno (ex: `'debug'`, `'info'`, `'warn'`, `'error'`). |\n| `restartOnClose` | `boolean` | `false` | Tenta restabelecer a conexão automaticamente caso ocorra uma queda de rede/serviço. |\n| `markOnlineOnConnect`| `boolean` | `false` | Mantém o status do bot como \"Online\" logo após conectar. |\n| `environment` | `Array` | `['Mac OS', 'Chrome', '144.0.7559.110']` | Array customizado para simular a plataforma do navegador da sessão. |\n| `waVersion` | `Array` | `null` | Sobrescreve a versão padrão do WhatsApp Web (Array de 3 números). |\n| `syncFullHistory` | `boolean` | `true` | Habilita a sincronização de histórico de mensagens. |\n| `historySyncLastMessageOnly` | `boolean` | `false` | Se `true`, adiciona apenas uma mensagem no histórico (a última mensagem recebida). |\n| `historySyncFilterStatus` | `string` | `'all'` | Filtra mensagens do histórico por status de leitura (`'all'`, `'read'` ou `'unread'`). |\n| `store` | `object` | `MessageStore` | Instância customizada para leitura e gravação em cache/banco de mensagens. |\n\n---\n\n## 🛠️ Métodos do Cliente (`UnityChat`)\n\nA classe `UnityChat` disponibiliza diversos métodos principais para gerenciar o ciclo de vida da conexão, obter informações do bot e realizar operações auxiliares:\n\n- **`setHistorySyncOptions({ lastMessageOnly, filterStatus })`**:\n  - **Parâmetros**: `options` (object com `lastMessageOnly`: boolean, `filterStatus`: `'all' | 'read' | 'unread'`)\n  - **Retorno**: `void`\n  - **Descrição**: Configura os filtros de histórico dinamicamente antes ou durante a sincronização.\n\n- **`connect()`**:\n  - **Retorno**: `Promise<void>`\n  - **Descrição**: Inicializa as credenciais de autenticação da sessão, configura o socket e inicia a conexão aos servidores do WhatsApp. Gerencia reconexões e novas tentativas de pareamento automaticamente.\n- **`disconnect()`**:\n  - **Retorno**: `void`\n  - **Descrição**: Encerra a conexão socket ativa com o WhatsApp de forma limpa, definindo internamente a flag de desconexão manual para evitar novas conexões automáticas. Não apaga credenciais locais.\n- **`logout()`**:\n  - **Retorno**: `Promise<void>`\n  - **Descrição**: Realiza o logout da conta conectada no WhatsApp e encerra o socket de conexão, invalidando a sessão.\n- **`itsMe()`**:\n  - **Retorno**: `Promise<object>`\n  - **Descrição**: Retorna o perfil normalizado do próprio bot conectado (contendo informações de perfil, grupos e newsletters participantes).\n- **`composing(jid, ts)`**:\n  - **Parâmetros**: `jid` (string), `ts` (number)\n  - **Retorno**: `Promise<void>`\n  - **Descrição**: Aciona visualmente o estado \"digitando...\" para o destinatário especificado pelo `jid`.\n- **`getMessages(jid, limit)`**:\n  - **Parâmetros**: `jid` (string), `limit` (number, padrão `50`)\n  - **Retorno**: `Promise<Array>`\n  - **Descrição**: Recupera o histórico local ou remoto de mensagens brutas associadas a um chat.\n- **`decryptPollVote(vote, voteParams)`**:\n  - **Parâmetros**: `vote` (object), `voteParams` (object)\n  - **Retorno**: `Promise<object>`\n  - **Descrição**: Descriptografa votos recebidos em enquetes.\n- **`getAggregateVotesInPollMessage(pollParams)`**:\n  - **Parâmetros**: `pollParams` (object)\n  - **Retorno**: `Promise<object>`\n  - **Descrição**: Agrega e contabiliza os votos descriptografados de uma enquete.\n- **`getAggregateResponsesInEventMessage(eventParams)`**:\n  - **Parâmetros**: `eventParams` (object)\n  - **Retorno**: `Promise<object>`\n  - **Descrição**: Analisa e decodifica as presenças/respostas a um evento criado no chat.\n- **`jidNormalizedUser(id)`**:\n  - **Parâmetros**: `id` (string)\n  - **Retorno**: `string`\n  - **Descrição**: Normaliza e unifica IDs do WhatsApp, removendo identificadores secundários de múltiplos dispositivos.\n- **`downloadContentFromMessage(content, type)`**:\n  - **Parâmetros**: `content` (object), `type` (string)\n  - **Retorno**: `Promise<Buffer>`\n  - **Descrição**: Efetua o download binário de um anexo ou mídia de uma mensagem bruta.\n- **`getContentType(message)`**:\n  - **Parâmetros**: `message` (object)\n  - **Retorno**: `string`\n  - **Descrição**: Retorna o tipo de conteúdo de uma mensagem bruta (ex: `text`, `image`).\n\n---\n\n## 🔔 Eventos (`Events`)\n\nA classe `UnityChat` herda do `EventEmitter` do Node.js e emite eventos semânticos correspondentes ao ciclo de vida da aplicação:\n\n### Ciclo de Conexão e Autenticação\n-   `init`: Iniciando o processo de carregamento de credenciais.\n-   `connecting`: Tentando estabelecer conexão de socket com os servidores do WhatsApp.\n-   `status_change`: Disparado quando ocorre mudança no status geral do cliente.\n-   `pairing_code`: QR Code gerado. Retorna um objeto contendo `{ base64, qr, attempts }`.\n-   `pairing_success`: QR Code escaneado com sucesso e login concluído.\n-   `connected`: Conexão estabelecida e autenticação pronta. Retorna o perfil do bot normalizado.\n-   `disconnected`: Desconectado dos servidores. Retorna `{ statusCode, statusType, reason, details }`.\n\n### Mensagens\n-   `message_received`: Nova mensagem recebida do usuário (Normalizada).\n-   `message_sent`: Mensagem enviada pelo próprio bot (Normalizada).\n-   `message_update`: Mensagem editada ou atualizada no chat (Ex: recebimento de confirmações).\n-   `message_delete`: Mensagem excluída da conversa.\n-   `message_reaction`: Reação com emoji recebida/enviada.\n-   `messages_history_sync_done`: Sincronização de histórico concluída. Retorna o array aninhado `[ Contato <- chats: [ Chat <- messages: [ MensagensNormalizadas ] ] ]`.\n-   `broadcast_message`: Mensagem recebida via lista de transmissão ou Status.\n-   `notification`: Notificação interna de sistema ou protocolo.\n\n### Outros Recursos\n-   `incoming_call`: Nova chamada de voz/vídeo recebida pelo número.\n-   `presence_update`: Mudança no status de presença de contatos (digitando, gravando, online).\n-   `contacts_upsert` / `contacts_update`: Atualizações na lista ou metadados de contatos.\n-   `groups_upsert` / `groups_update`: Criação ou alteração de informações nos grupos participantes.\n-   `group_participants_update`: Mudanças nos membros de um grupo (entrada, saída, promoções).\n-   `group_member_tag_update`: Atualização de etiquetas/papéis dos membros do grupo.\n-   `blocklist_update`: Atualização na lista de contatos bloqueados.\n-   `chat_update` / `chat_delete`: Modificações em chats locais da conta.\n\n---\n\n## 📩 Estrutura de Mensagem Normalizada\n\nTodas as mensagens emitidas nos eventos `message_received` e `message_sent` são processadas através do `MessageNormalizer`, gerando um objeto padronizado com a seguinte estrutura:\n\n```javascript\n{\n    id: \"3EB0...\",             // Identificador único da mensagem\n    chat: {                    // Objeto de contato normalizado associado ao chat\n        id: \"559199999999@s.whatsapp.net\",\n        name: \"João Silva\",\n        type: \"personal\"       // 'personal' | 'business' | 'group' | 'newsletter'\n    },\n    fromMe: false,             // Define se a mensagem partiu do bot\n    from: \"559199999999@...\",  // Quem enviou a mensagem\n    fromPushName: \"João\",      // Nome de exibição configurado no perfil do emissor\n    to: \"559188888888@...\",    // Destinatário da mensagem\n    type: \"text\",              // Tipo amigável ('text', 'image', 'audio', 'document', 'sticker', 'location', 'contact', 'interactive_reply', etc)\n    body: \"Olá, mundo!\",       // Corpo de texto principal extraído da mensagem\n    hasMedia: false,           // Flag indicando a presença de mídia para download\n    media: null,               // Objeto com metadados de mídia (caso hasMedia seja true)\n    location: null,            // Objeto contendo { latitude, longitude } para mensagens de localização\n    contacts: [],              // Lista de contatos formatados se recebido um vCard\n    isReply: false,            // Indica se é uma resposta citada (quoted)\n    quotedMessage: null,       // Mensagem citada recursivamente normalizada\n    isForwarded: false,        // Indica se a mensagem foi encaminhada\n    mentions: [],              // Lista de JIDs mencionados na mensagem\n    isMentioningMe: false,     // Indica se o JID do próprio bot foi mencionado\n    isEdited: false,           // Se a mensagem foi editada posteriormente\n    interactiveReply: null,    // ID e texto do botão clicado caso seja uma resposta interativa\n    reaction: null,            // Estrutura de emoji e timestamp caso seja reação\n    poll: null,                // Dados de criação de enquete\n    pollUpdate: null,          // Votos decodificados recebidos em enquetes\n    timestamp: Date,           // Objeto Date representando quando a mensagem foi criada\n    raw: { ... }               // Objeto bruto original fornecido pela Baileys (útil para uso avançado)\n}\n```\n\n### Download de Mídias\nQuando `hasMedia` é `true`, você pode acessar `message.media.getAttachments()` para obter um conjunto de helpers utilitários para manipulação do buffer:\n\n```javascript\nconst attachments = await message.media.getAttachments();\n\nattachments.mimetype;           // Mimetype do arquivo (ex: 'image/png')\nattachments.extension;          // Extensão sugerida (ex: 'png')\nattachments.buffer;             // Buffer binário completo do arquivo\n\n// Métodos utilitários:\nattachments.toBase64();         // Converte para String Base64\nattachments.toDataUri();        // Retorna formato Data URI\nattachments.toArrayBuffer();    // Retorna ArrayBuffer\nawait attachments.save(caminho);// Grava a mídia em um caminho local e retorna o nome e arquivo.\n```\n\n---\n\n## 📚 Referência de API dos Handlers\n\nA biblioteca separa responsabilidades organizando seus recursos em handlers acessíveis diretamente pela instância do `client`.\n\n### 📩 Mensagens (`client.messages`)\n\nResponsável por todas as operações de envio, respostas, download e modificações de mensagens nos chats.\n\n-   `sendMessage(jid, content, options)`: Envia um payload bruto customizado da Baileys para o JID especificado.\n    -   *Opções especiais*: `{ composing: { timeout: MS } }` ou `{ recording: { timeout: MS } }` simula o estado \"digitando\" ou \"gravando áudio\" por `MS` milissegundos antes de enviar a mensagem.\n-   `sendTextMessage(jid, text, options)`: Envia uma mensagem de texto simples.\n-   `reply(originalMessage, content)`: Responde (marcando e citando) a uma mensagem recebida.\n-   `sendImage(jid, media, caption, options)`: Envia uma imagem (parâmetro `media` aceita URL pública ou Buffer).\n    -   *Opção*: `{ viewOnce: true }` para envio temporário.\n-   `sendVideo(jid, media, caption, options)`: Envia um vídeo (parâmetro `media` aceita URL ou Buffer).\n    -   *Opção*: `{ viewOnce: true }` para visualização única.\n-   `sendAudio(jid, media, ptt, options)`: Envia um áudio. Defina `ptt: true` para simular gravação de mensagem de voz no WhatsApp.\n-   `sendDocument(jid, media, mimetype, fileName, caption, options)`: Envia um arquivo/documento genérico.\n-   `sendLocation(jid, latitude, longitude, name, address)`: Envia uma mensagem contendo pin de mapa.\n-   `sendContacts(jid, contacts)`: Envia cartões de contatos estruturados (vCards). O parâmetro `contacts` é um array de objetos `{ fullName, waid, organization }`.\n-   `sendPoll(jid, pollName, pollValues, options)`: Cria uma enquete com opções de voto.\n-   `sendLink(jid, url, options)`: Envia um link ativando a renderização prévia de metadados da URL (preview).\n-   `forwardMessage(jid, messageToForward)`: Encaminha uma mensagem existente para outro chat.\n-   `editMessage(originalMessageKey, newText)`: Edita o texto de uma mensagem anteriormente enviada pelo bot.\n-   `react(messageKey, emoji)`: Adiciona uma reação com emoji a uma mensagem.\n-   `delete(messageKey)`: Apaga uma mensagem enviada pelo bot para todos os participantes do chat.\n-   `read(messageKey)`: Envia a confirmação de leitura da mensagem.\n-   `composing(jid, ts)`: Aciona o estado \"digitando...\" para o destinatário JID.\n-   `getMessages(jid, limit)`: Busca o histórico local ou remoto de mensagens de um chat (limite padrão de 50 mensagens).\n-   `getAttachments(message)`: Efetua o download e retorna helpers para a mídia contida em um payload de mensagem bruto.\n\n### 👥 Grupos (`client.groups`)\n\nContém as operações de criação, modificação de metadados e moderação de membros em grupos.\n\n-   `getMetadata(groupId)`: Retorna as configurações e lista de participantes ativos em um grupo. Utiliza cache integrado de 5 minutos.\n-   `getAllGroups()`: Retorna uma lista com todos os grupos que o bot faz parte.\n-   `getProfilePicture(jid)`: Obtém o link público para a foto de perfil do grupo.\n-   `create(subject, participantsJids)`: Cria um novo grupo.\n-   `leave(groupId)`: Sai de um grupo.\n-   `updateName(groupId, newName)`: Altera o título de exibição de um grupo.\n-   `updateDescription(groupId, newDescription)`: Atualiza a descrição textual do grupo.\n-   `updateParticipants(groupId, participantsJids, action)`: Gerencia membros. Valores aceitos para a ação: `'add' | 'remove' | 'promote' | 'demote'`.\n-   `addParticipants(groupId, participantsJids)`: Atalho direto para adicionar novos membros.\n-   `removeParticipants(groupId, participantsJids)`: Atalho direto para remover membros.\n-   `promoteParticipants(groupId, participantsJids)`: Concede privilégios de administrador do grupo a membros específicos.\n-   `demoteParticipants(groupId, participantsJids)`: Retira os privilégios de administrador de membros específicos.\n-   `getInviteCode(groupId)`: Retorna o sufixo alfanumérico do link de convite do grupo.\n-   `revokeInviteCode(groupId)`: Invalida o código/link de convite antigo e gera um novo.\n-   `updateMemberLabel(groupId, label)`: Define a etiqueta/papel de membro próprio do bot no grupo.\n\n### 👤 Usuários e Contatos (`client.users` e `client.contacts`)\n\nHandlers focados no gerenciamento de contatos, privacidade e metadados de contas pessoais ou comerciais.\n\n#### `client.users`\n-   `getMetadata(jid)`: Retorna dados estruturados de um contato (nome, foto, tipo).\n-   `getStatus(id)`: Retorna a frase de \"Recado\" cadastrada no perfil do contato.\n-   `getPnForLid(lid)`: Retorna o JID convencional (baseado em número de telefone) associado a um identificador interno LID do WhatsApp.\n-   `getMyStatus()`: Retorna o status de \"Recado\" da conta do bot.\n-   `getBusinessProfile(jid)`: Retorna dados comerciais adicionais se for uma conta comercial (descrição, endereço, e-mail, etc).\n-   `getProfilePicture(jid)`: Obtém a imagem de exibição do usuário.\n-   `isOnWhatsApp(number)`: Verifica se um número de telefone está cadastrado no WhatsApp (normalizando DDI e o nono dígito).\n-   `updateProfileName(newName)`: Atualiza o nome de perfil público da conta do bot.\n-   `updateProfileStatus(newStatus)`: Atualiza a frase de recado da conta do bot.\n-   `block(jid)` / `unblock(jid)`: Bloqueia ou desbloqueia um contato.\n-   `getBlocklist()`: Retorna todos os contatos bloqueados pela conta do bot.\n-   `sendPresence(jid, presenceStatus)`: Atualiza a presença visível do bot em relação a um chat (valores do `PresenceStatus`: `'available'`, `'unavailable'`, `'composing'`, `'recording'`).\n-   `updateLastSeenPrivacy(value)`: Atualiza configuração de privacidade do Visto por Último (`'all' | 'contacts' | 'contact_blacklist' | 'none'`).\n-   `updateOnlinePrivacy(value)`: Atualiza configuração de privacidade do Visto Online (`'all' | 'match_last_seen'`).\n-   `updateReadReceiptsPrivacy(value)`: Atualiza configuração de privacidade das confirmações de leitura (`'all' | 'none'`).\n\n#### `client.contacts`\n-   `get(jid)`: Recupera um contato diretamente do cache local em memória.\n-   `getAll()`: Retorna todos os contatos presentes no cache em memória.\n-   `set(jid, contact)`: Adiciona ou atualiza manualmente um contato na estrutura de cache do cliente.\n-   `normalize(message)`: Efetua varredura na mensagem para extrair, carregar metadados externos (como imagem de perfil e status) e formatar um contato estruturado.\n\n### 📰 Newsletters / Canais (`client.newsletters`)\n\nPermite a interação básica de leitura e criação de Canais do WhatsApp.\n\n-   `getMetadata(id)`: Retorna metadados de um Canal através do ID ou link de convite.\n-   `getAllNewsletters()`: Retorna a lista de canais nos quais o bot está inscrito.\n-   `follow(id)` / `unfollow(id)`: Inscreve-se ou cancela a inscrição em um canal.\n-   `mute(jid, duration)` / `unmute(jid)`: Configura silenciamento de notificações do canal.\n-   `create(name, description, picture)`: Cria um novo canal próprio do bot.\n-   `delete(jid)`: Exclui permanentemente um canal criado pelo bot.\n-   `updateName(jid, name)`: Atualiza o nome do canal.\n-   `updateDescription(jid, description)`: Altera a descrição do canal.\n-   `updatePicture(jid, picture)`: Atualiza o avatar do canal.\n-   `update(jid, { name, description, picture })`: Método utilitário para atualizar múltiplos dados ao mesmo tempo.\n-   `updateReactionMode(jid, mode)`: Configura a regra de reações em posts do canal. Valores: `'ALL' | 'BASIC' | 'NONE'`.\n\n### 📞 Chamadas (`client.calls`)\n\n-   `reject(call)`: Recusa uma chamada telefônica de voz/vídeo recebida pelo bot.\n\n### 📱 Stories (`client.stories`)\n\nResponsável por enviar, gerenciar e excluir publicações de Stories (Status) no WhatsApp.\n\n-   `send(jids, content, options)`: Envia uma publicação de stories para uma lista de contatos.\n    -   `jids`: Array de JIDs que receberão ou serão mencionados nos stories.\n    -   `content`: Conteúdo da mensagem a ser enviada (texto, imagem, vídeo, etc.).\n    -   *Opções*:\n        -   `sendMentions` (boolean): Se `true`, realiza a menção nos stories (limita o array de JIDs a no máximo 5 elementos devido a restrições do WhatsApp).\n        -   `backgroundColor` (string): Cor de fundo para os stories de texto (padrão: `'#288d7c85'`).\n        -   `font` (number): Estilo de fonte para os stories de texto (padrão: `1`).\n-   `delete(msg)`: Exclui uma publicação de stories enviada anteriormente.\n\n### 🏷️ Etiquetas (`client.labels`)\n\nGerenciamento de Etiquetas do WhatsApp Business.\n\n-   `createLabel(name, color)`: Cria uma etiqueta com nome e cor especificados (cores de 0 a 19).\n-   `updateLabel(id, name, color)`: Atualiza o nome e a cor de uma etiqueta existente.\n-   `deleteLabel(id)`: Remove permanentemente uma etiqueta da conta comercial.\n-   `addChatLabel(jid, labelId)`: Associa uma etiqueta a uma conversa.\n-   `removeChatLabel(jid, labelId)`: Remove a etiqueta de uma conversa.\n-   `addMessageLabel(jid, msgId, labelId)`: Associa uma etiqueta a uma mensagem específica.\n-   `removeMessageLabel(jid, msgId, labelId)`: Remove a etiqueta de uma mensagem específica.\n\n### 💼 WhatsApp Business (`client.business`)\n\nGerenciamento de recursos comerciais (Catálogo, Produtos, Perfil e Capa Comercial).\n\n-   `updateBusinessProfile(profile)`: Atualiza endereço, e-mail, websites, descrição e horários do perfil comercial do bot.\n-   `updateCoverPhoto(path)`: Define ou altera a foto de capa comercial (URL ou Buffer).\n-   `removeCoverPhoto(coverPhotoId)`: Remove a foto de capa comercial atual.\n-   `getCatalog(options)`: Busca a lista de produtos de um contato comercial ou do próprio bot.\n-   `getCollections(jid, count)`: Retorna as coleções de produtos do catálogo de um contato.\n-   `getOrderDetails(orderId, orderToken)`: Obtém os detalhes completos de um pedido a partir do carrinho.\n-   `productCreate(product)`: Adiciona um novo produto ao catálogo comercial.\n-   `productUpdate(productId, product)`: Atualiza os dados de um produto existente.\n-   `productDelete(productIds)`: Exclui permanentemente produtos do catálogo (aceita array de IDs).\n\n---\n\n## 🔘 Mensagens Interativas\n\nA biblioteca disponibiliza classes auxiliares estruturadas para a criação de mensagens interativas avançadas com facilidade.\n\n### 1. Botões de Resposta Rápida (Quick Reply)\nGera botões de clique rápido que enviam o texto correspondente de volta ao chat ao serem tocados.\n\n```javascript\nconst { InteractiveMessage, QuickReplyButton } = require('@areumtecnologia/unitychat');\n\nconst message = new InteractiveMessage()\n    .withText('Olá! Escolha uma das opções abaixo:')\n    .withFooter('Responda clicando em um dos botões')\n    .addButton(new QuickReplyButton('id_opcao_1', 'Falar com Atendente'))\n    .addButton(new QuickReplyButton('id_opcao_2', 'Ver Menu Principal'));\n\nawait client.messages.sendMessage(jid, message.build());\n```\n\n### 2. Links de Chamada à Ação (CTA URL / Call / Copy Code / Location)\nExibe botões especiais para direcionamento para sites externos, chamadas de voz normais da operadora, cópia de códigos PIX/Cupons e compartilhamento de localização:\n\n```javascript\nconst { InteractiveMessage, UrlButton, CopyCodeButton, CallButton, LocationButton } = require('@areumtecnologia/unitychat');\n\nconst message = new InteractiveMessage()\n    .withText('Aqui estão seus links especiais:')\n    .addButton(new UrlButton('Acessar Site', 'https://unitychat.areum.com.br'))\n    .addButton(new CopyCodeButton('Copiar Código PIX', 'pix-payload-key-12345'))\n    .addButton(new CallButton('Ligar para o Suporte', '559199999999'))\n    .addButton(new LocationButton('Compartilhar Localização'));\n\nawait client.messages.sendMessage(jid, message.build());\n```\n\n### 3. Botão de Pagamento PIX e Checkout (Review & Pay)\n\nGera botões interativos para pagamento PIX estático e faturamento integrado de checkout:\n\n```javascript\nconst { InteractiveMessage, PixButton, CheckoutButton } = require('@areumtecnologia/unitychat');\n\n// Exemplo 1: Botão PIX Estático\nconst pixMessage = new InteractiveMessage()\n    .withText('Efetue o pagamento via PIX clicando no botão abaixo:')\n    .addButton(new PixButton('Áreum Tecnologia LTDA', 'financeiro@areum.com.br', 'EMAIL'));\n\nawait client.messages.sendMessage(jid, pixMessage.build());\n\n// Exemplo 2: Checkout / Faturamento\nconst checkoutMessage = new InteractiveMessage()\n    .withText('Fatura gerada com sucesso!')\n    .addButton(new CheckoutButton({\n        currency: 'BRL',\n        totalAmount: { value: '15000', offset: '100' },\n        referenceId: 'REF_PEDIDO_12345',\n        items: [{\n            retailer_id: 'item_01',\n            name: 'Licença Anual WaSockets',\n            amount: { value: '15000', offset: '100' },\n            quantity: '1'\n        }],\n        additionalNote: 'Agradecemos a sua preferência!'\n    }));\n\nawait client.messages.sendMessage(jid, checkoutMessage.build());\n```\n\n### 3. Listas Interativas (Menus de Seleção Única)\nPermite enviar uma lista completa dividida por seções para seleções únicas:\n\n```javascript\nconst { InteractiveMessage, ListButton, ListSection, ListRow } = require('@areumtecnologia/unitychat');\n\nconst listMenu = new InteractiveMessage()\n    .withText('Selecione o produto de interesse:')\n    .withFooter('Escolha uma das linhas abaixo')\n    .addButton(\n        new ListButton('Ver Catálogo')\n            .addSection(\n                new ListSection('Aparelhos Celulares')\n                    .addRow(new ListRow('iphone_15', 'iPhone 15 Pro', 'Mais recente lançamento Apple'))\n                    .addRow(new ListRow('s24_ultra', 'Galaxy S24 Ultra', 'Processador Snapdragon e AI integrada'))\n            )\n            .addSection(\n                new ListSection('Acessórios')\n                    .addRow(new ListRow('airpods_3', 'AirPods 3', 'Áudio espacial de alta qualidade'))\n            )\n    );\n\nawait client.messages.sendMessage(jid, listMenu.build());\n```\n\n---\n\n## 📄 Licença\n\nEste projeto está licenciado sob a licença **ISC**. Consulte o arquivo [LICENSE](LICENSE) para obter detalhes.\n\n---\nDesenvolvido com carinho por **Áreum Tecnologia**.\n","readmeFilename":"README.md"}