Commit Graph

69 Commits

Author SHA1 Message Date
VPS 4 Deploy Agent 1fc139043f fix(whatsapp): mensagens do celular perdidas para contatos @lid + crash P2002
Três correções independentes para mensagens enviadas/recebidas via celular:

1. WhatsAppConnectionManager: o listener CB:message agora captura também
   recipient_pn (InfiniteAPI v7+) além de peer_recipient_pn (Baileys oficial),
   garantindo que o PN correto do destinatário seja gravado no peerRecipientHints
   antes do messages.upsert ser emitido.

2. MessageHandler.processMessage: adicionado fast path fromMe=false via
   remoteJidAlt para contatos @lid (InfiniteAPI já resolve o PN do remetente).
   Para fromMe=true onde InfiniteAPI resolveu @lid→nosso próprio JID incorretamente,
   recupera o JID correto via peerRecipientHints antes de descartar como self-chat.

3. MessageHandler.processHistoryBatch: corrigido guard senderPn que não testava
   !msg.key.fromMe; para mensagens enviadas, senderPn é o nosso próprio JID,
   não o destinatário — o que criava self-chats corrompidos no DB.

4. whatsapp.send.routes: adicionado .catch P2002 no upsert da rota POST /send;
   race condition com eco Baileys causava unhandled rejection → exit(1) no Node 20.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 03:10:50 +02:00
VPS 4 Deploy Agent c06043b6ac chore(deploy): bump version 2026-05-11 22:52:53 +02:00
VPS 4 Deploy Agent f570a2f208 chore(deploy): bump version 2026-05-11 21:58:27 +02:00
VPS 4 Deploy Agent cdacfcd3a6 feat(preloader): replace WhatsApp icon with smooth circle SVG 2026-05-11 21:55:20 +02:00
VPS 4 Deploy Agent 6f415cac9f chore(deploy): bump version 2026-05-11 21:44:26 +02:00
VPS 4 Deploy Agent 2233060ffb fix(plugins): adiciona backend/src ao include do tsconfig para resolver erros de editor
Resolve erros "Cannot find module" no language server do VS Code ao abrir
arquivos de plugins que importam tipos via caminho relativo do backend.
O build de produção não era afetado (tsc seguia os imports normalmente),
mas o extHost2 do editor não resolvia os arquivos fora do include.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 21:41:16 +02:00
VPS 4 Deploy Agent 5fb3a687da chore(deploy): bump version 2026-05-11 19:02:22 +02:00
VPS 4 Deploy Agent 539b922ce3 feat(media): re-download de mídia não baixada ao clicar
- Armazena payload WAMessage (serializado com _b64 para Uint8Array) em
  messages.mediaPayload no momento da recepção da mensagem
- Nova rota POST /instances/:id/redownload-media/:msgId que usa
  sock.updateMediaMessage para renovar URL expirada + re-upload Wasabi
- Frontend: placeholders clicáveis (spinner + texto) para imagem, vídeo,
  áudio, documento e figurinha sem media_url; atualização automática via
  socket message:media_ready existente

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 18:58:01 +02:00
VPS 4 Deploy Agent 3a50f73cb4 chore(deploy): bump version 2026-05-11 18:03:01 +02:00
VPS 4 Deploy Agent fc8036750d fix(storage): remove auth de /api/storage/view e try-catch nos sticker routes
- /api/storage/view/* não usa mais authMiddleware: <img>/<audio>/<video> do
  browser não enviam JWT header, causando 401 em todas as mídias do Wasabi
- sticker.routes.ts: wrap try-catch em todos os handlers — sem isso, erro
  Prisma P2021 (tabela não existe) vira unhandled rejection e derruba Node 22

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 18:00:08 +02:00
VPS 4 Deploy Agent 2e40c95874 chore(deploy): bump version 2026-05-11 17:52:37 +02:00
VPS 4 Deploy Agent b97f7f94e4 feat: sistema de figurinhas, emoji PT-BR e preloader inteligente
- Stickers: captura automática por fileSha256 (Baileys) no MessageHandler,
  tabela Prisma 'stickers' com deduplicação por [tenantId, sha256],
  API REST /api/stickers (list + favorite toggle), cache IndexedDB permanente
  (sem TTL — conteúdo imutável), StickerPanel.tsx com abas Recentes/Favoritos
- Emoji picker: migrado de emoji-picker-react para @emoji-mart/react com
  locale="pt" (tradução completa: categorias, busca, mensagem de sem resultado)
- Preloader: aparece apenas em hard reload (F5/URL direta) via
  performance.getEntriesByType('navigation').type + sessionStorage flag,
  navegação client-side Next.js pula o overlay instantaneamente
- Avatar cache: Wasabi como storage persistente + IndexedDB client-side,
  avatar_version via MD5(avatarUrl) sem coluna extra no banco,
  rota /api/storage/view/* para servir arquivos Wasabi ao frontend

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 17:48:36 +02:00
VPS 4 Deploy Agent 2b9b855fc9 perf(inbox): cache de avatares no Wasabi e IndexedDB
Solução 3 — Wasabi:
- Após download do CDN do WhatsApp, faz upload fire-and-forget para
  Wasabi com path determinístico (avatars/{tenant}/{instance}/{jid}.jpg)
- Armazena o path relativo em contact.avatarUrl no banco
- Na próxima requisição, serve bytes direto do Wasabi sem tocar no CDN do WA
- Adiciona customPath em StorageUploadPayload e getBuffer() na interface
  StorageProviderInterface/StorageProviderRegistry e plugin

Solução 4 — IndexedDB:
- Backend expõe avatarVersion (MD5 curto do avatarUrl) no response /api/chats
- Campo propagado por chatStore → chatToLegacy → NewWhatsChat
- Hook useAvatarCache (IndexedDB nativo, sem deps) armazena dataUrl do avatar
  com chave jid:version — invalida automaticamente quando o avatar muda no banco
- Avatar.tsx serve do IndexedDB antes de disparar qualquer request HTTP;
  converte via canvas e persiste no IndexedDB na primeira carga bem-sucedida

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 16:02:08 +02:00
VPS 4 Deploy Agent cdc32aa9b3 chore(deploy): bump version 2026-05-11 09:44:35 +02:00
VPS 4 Deploy Agent a54b3f2b19 chore(deploy): bump version 2026-05-11 09:41:46 +02:00
VPS 4 Deploy Agent a7f4d6bc1e feat(preview): fix button layout and add mouse-following zoom
- Move close (X) button to far right, zoom button left of X
- File info (name + size) occupies the left of the top bar
- Zoom now follows the mouse cursor: transform-origin updates in
  real-time as the mouse moves, so 2.5× scale always magnifies
  the area under the pointer
- overflow-hidden on preview area keeps the scaled image contained

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 09:39:27 +02:00
VPS 4 Deploy Agent 310ba1aff6 chore(deploy): bump version 2026-05-11 09:24:14 +02:00
VPS 4 Deploy Agent 7b55354653 fix(send-media): use upsert to prevent P2002 duplicate messageId error
MessageHandler can insert the echo of a sent message before the HTTP
handler does — replace prisma.message.create() with upsert() so both
paths converge safely instead of crashing with a unique constraint error.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 09:21:50 +02:00
VPS 4 Deploy Agent d7acd75bd5 chore(deploy): bump version 2026-05-11 09:15:45 +02:00
VPS 4 Deploy Agent 4d0b895c7e chore(deploy): bump version 2026-05-11 09:13:51 +02:00
VPS 4 Deploy Agent 949274e79b chore(deploy): bump version 2026-05-11 09:12:14 +02:00
VPS 4 Deploy Agent 7ec3d78be2 chore(deploy): bump version 2026-05-11 09:10:27 +02:00
VPS 4 Deploy Agent b0ac06e065 chore(deploy): bump version 2026-05-11 09:08:40 +02:00
VPS 4 Deploy Agent bbbc010945 chore(deploy): bump version 2026-05-11 09:06:59 +02:00
VPS 4 Deploy Agent 706fceabaf chore(deploy): bump version 2026-05-11 09:05:06 +02:00
VPS 4 Deploy Agent 875f31419e chore(deploy): bump version 2026-05-11 09:03:16 +02:00
VPS 4 Deploy Agent 918bce648c chore(deploy): bump version 2026-05-11 09:01:24 +02:00
VPS 4 Deploy Agent f83f1d9263 chore(deploy): bump version 2026-05-11 08:59:18 +02:00
VPS 4 Deploy Agent 80f8585a1f chore(deploy): bump version 2026-05-11 08:57:44 +02:00
VPS 4 Deploy Agent 16dbc40c8a chore(deploy): bump version 2026-05-11 08:56:09 +02:00
VPS 4 Deploy Agent 6f28d3da80 chore(deploy): bump version 2026-05-11 08:54:25 +02:00
VPS 4 Deploy Agent 2a9744762f chore(deploy): bump version 2026-05-11 08:52:45 +02:00
VPS 4 Deploy Agent bed15dd589 chore(deploy): bump version 2026-05-11 08:50:58 +02:00
VPS 4 Deploy Agent 4287b8c1d7 chore(deploy): bump version 2026-05-11 08:49:12 +02:00
VPS 4 Deploy Agent 811a9b9c65 chore(deploy): bump version 2026-05-11 08:47:38 +02:00
VPS 4 Deploy Agent b54c9fb066 chore(deploy): bump version 2026-05-11 08:45:58 +02:00
VPS 4 Deploy Agent 8253a038c6 chore(deploy): bump version 2026-05-11 08:44:13 +02:00
VPS 4 Deploy Agent c7d3701ea3 chore(deploy): bump version 2026-05-11 08:42:33 +02:00
VPS 4 Deploy Agent 2e8c59b3dd chore(deploy): bump version 2026-05-11 08:40:45 +02:00
VPS 4 Deploy Agent b2ad8a8e8b chore(deploy): bump version 2026-05-11 08:38:46 +02:00
VPS 4 Deploy Agent 9ab4b4068e chore(deploy): bump version 2026-05-11 08:37:01 +02:00
VPS 4 Deploy Agent 6bcfcab884 chore(deploy): bump version 2026-05-11 08:34:50 +02:00
VPS 4 Deploy Agent 45b7b91b04 fix(plugins): use conditional require for production Docker compatibility
Replace static require('backend/src/...') with NODE_ENV-conditional
requires in compiled plugin JS and TypeScript sources.
In production Docker /app/backend/src/ does not exist — only /app/dist/.
Fixes MODULE_NOT_FOUND errors on UnifiedStorageProvider, ext-api,
leads, nanobana, and uploads plugins.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 08:34:34 +02:00
VPS 4 Deploy Agent 55d0ddb698 chore(deploy): bump version 2026-05-11 08:32:47 +02:00
VPS 4 Deploy Agent 0e220d1f4a chore(deploy): bump version 2026-05-11 08:30:40 +02:00
VPS 4 Deploy Agent f3d3d1afa5 chore(deploy): bump version 2026-05-11 08:28:42 +02:00
VPS 4 Deploy Agent c437d28c6b chore(deploy): bump version 2026-05-11 08:26:53 +02:00
VPS 4 Deploy Agent 78569125f8 chore(deploy): bump version 2026-05-11 08:24:59 +02:00
VPS 4 Deploy Agent c4304eb2d6 chore(deploy): bump version 2026-05-11 08:23:04 +02:00
VPS 4 Deploy Agent 946d85f236 chore(deploy): bump version 2026-05-11 08:21:13 +02:00