Commit Graph

79 Commits

Author SHA1 Message Date
VPS 4 Deploy Agent 2f8c04a0a7 chore(ops): restore all source files in newwhats.clube67.com
continuous-integration/webhook Falha no deploy de clube67_newwhats.local (VPS 4)
2026-05-18 03:28:29 +02:00
VPS 4 Deploy Agent 52f73753e7 chore(ops): cleanly purge old clube67 folder references
continuous-integration/webhook Falha no deploy de clube67_newwhats.local (VPS 4)
2026-05-18 03:27:37 +02:00
VPS 4 Deploy Agent 0dc5eefa06 chore(ops): restore missing root files in newwhats.clube67.com
continuous-integration/webhook Falha no deploy de clube67_newwhats.local (VPS 4)
2026-05-18 03:27:25 +02:00
VPS 4 Deploy Agent 5ec6bd6354 chore(ops): migrate clube67 to newwhats.clube67.com directory
continuous-integration/webhook Falha no deploy de clube67_newwhats.local (VPS 4)
2026-05-18 03:26:41 +02:00
VPS 4 Deploy Agent 298b1c64b0 chore(deploy): bump version
continuous-integration/webhook Ignorado: bump version
2026-05-15 06:14:24 +02:00
VPS 4 Deploy Agent 84f132d4ca chore(deploy): bump version
continuous-integration/webhook Ignorado: bump version
2026-05-13 07:58:09 +02:00
VPS 4 Deploy Agent 4a9ebb5992 chore(deploy): bump version
continuous-integration/webhook Ignorado: bump version
2026-05-12 06:30:41 +02:00
VPS 4 Deploy Agent bc51697218 chore(deploy): bump version
continuous-integration/webhook Ignorado: bump version
2026-05-12 06:24:50 +02:00
VPS 4 Deploy Agent b9b094fb62 chore(deploy): bump version
continuous-integration/webhook Ignorado: bump version
2026-05-12 06:17:37 +02:00
VPS 4 Deploy Agent c0af1bc9b8 chore(deploy): bump version
continuous-integration/webhook Ignorado: bump version
2026-05-12 05:37:25 +02:00
VPS 4 Deploy Agent f8c0a0ea52 chore(deploy): bump version
continuous-integration/webhook Ignorado: bump version
2026-05-12 05:31:26 +02:00
VPS 4 Deploy Agent fc37a54376 fix(secretaria): corrige 7 inconsistências do issue #14
SEC-01+SEC-11: /secretaria/ask agora envia reply via WhatsApp (sock.sendMessage)
  e persiste a mensagem no banco Prisma após brain.chat(), com notify Socket.IO.

SEC-02+SEC-03: MessageHandler emite hookBus 'ext:message.new' para todo msg
  recebido. Listener no ext-api auto-dispara a Secretária apenas se NÃO
  houver AIBot ativo na instância (exclusão mútua — chatbot tem prioridade).

SEC-04: ChatListItem exibe ícone BotOff (âmbar) quando chat.bot_paused = true,
  com tooltip "Bot pausado — aguardando atendente".

SEC-05: chatToLegacy() mapeia c.botPaused → bot_paused na bridge legada.
  NewWhatsChat recebe campo bot_paused opcional.

SEC-08: POST /secretaria/ask valida que existe instância CONNECTED antes
  de criar conversa. Retorna 503 se nenhuma instância disponível.

SEC-10: POST /api/chatbot/bots/:instanceId valida que credentialId pertence
  ao mesmo tenantId antes de criar o bot. Retorna 403 se não pertencer.

SEC-12: chatBotState.resumeBot() limpa botSummary (= null) ao retomar,
  evitando contexto defasado após escalação humana.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 05:29:29 +02:00
VPS 4 Deploy Agent 5f23c51e17 chore(deploy): bump version
continuous-integration/webhook Ignorado: bump version
2026-05-12 05:19:08 +02:00
VPS 4 Deploy Agent 7e1591303a chore(deploy): bump version
continuous-integration/webhook Ignorado: bump version
2026-05-12 05:04:18 +02:00
VPS 4 Deploy Agent 2f906b1d40 chore(deploy): bump version
continuous-integration/webhook Ignorado: bump version
2026-05-12 03:59:59 +02:00
VPS 4 Deploy Agent 1efc0ab1d1 chore(deploy): bump version
continuous-integration/webhook Ignorado: bump version
2026-05-12 03:33:56 +02:00
VPS 4 Deploy Agent 4efa6fb2f2 fix(media): aplica estado 'não disponível' a imagem, vídeo, documento e sticker
continuous-integration/webhook Deploy concluido com sucesso (VPS 4)
Estende o tratamento de erro 400/404 do redownload para todos os tipos
de mídia. Quando mediaUnavailable=true (payload ausente no backend),
cada tipo exibe sua mensagem específica e desabilita o clique:
- Imagem: 'Imagem não disponível'
- Vídeo: 'Vídeo não disponível'
- Documento: 'Arquivo não disponível' + cursor-default
- Sticker: 'Figurinha não disponível'
DocumentBubble recebe nova prop mediaUnavailable para controle interno.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 03:32:02 +02:00
VPS 4 Deploy Agent a3c78aed8c chore(deploy): bump version
continuous-integration/webhook Ignorado: bump version
2026-05-12 03:28:29 +02:00
VPS 4 Deploy Agent 5fb9a8f34a fix(audio): trata erro 400/404 no redownload com estado 'Áudio não disponível'
continuous-integration/webhook Deploy concluido com sucesso (VPS 4)
Mensagens antigas sem mediaPayload retornam 400 do backend (sem como
re-solicitar ao WhatsApp). O erro agora é capturado em handleRedownload,
que seta mediaUnavailable=true — o botão fica desabilitado e exibe
'Áudio não disponível' em vez de explodir com Uncaught (in promise).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 03:26:29 +02:00
VPS 4 Deploy Agent 0af0eba663 chore(deploy): bump version
continuous-integration/webhook Ignorado: bump version
2026-05-12 03:22:07 +02:00
VPS 4 Deploy Agent 634426ed15 fix(audio): corrige redownload de áudio + move botão de velocidade antes do waveform
continuous-integration/webhook Deploy concluido com sucesso (VPS 4)
1. MessageArea: handleRedownloadMedia usava selectedChat?.instanceId (undefined
   no formato legado) — substituído por instance_name ?? instanceId. O clique
   em 'Toque para baixar áudio' agora chama o backend corretamente.

2. MessageBubble/AudioBubble: botão de velocidade (1×/1.5×/2×) movido para
   entre o botão play e as barras do waveform, conforme layout do WhatsApp.
   A linha inferior agora exibe apenas o tempo decorrido.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-12 03:19:48 +02:00
VPS 4 Deploy Agent 5b3259d705 chore(deploy): bump version
continuous-integration/webhook Ignorado: bump version
2026-05-12 03:13:00 +02:00
VPS 4 Deploy Agent ab688b7ef8 chore(deploy): bump version
continuous-integration/webhook Ignorado: bump version
2026-05-11 23:31:54 +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 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 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 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