mirror of
https://github.com/melgarafael/DeskcommCRM.git
synced 2026-10-02 01:28:34 +08:00
A 0445 regravava fn_lgpd_cascade_redact_contact a partir do corpo de antes da 0477 e tinha carimbo anterior ao dela: aplicada num banco que ja tem a 0477, tirava as propostas (PDF no bucket `propostas` e colunas redigidas) da anonimizacao; na cadeia em ordem, a 0477 vinha por ultimo e apagava o passo dos grupos. As duas coisas saem de uma vez: - migration renumerada para 20260928150000_0478 (depois da 0477), com a cascata = corpo da 0477 inteiro + so o passo de channel_session_groups; - apendice do baseline = o texto da migration (menos a chamada das travas do suporte, que o ultimo bloco do arquivo ja cobre), antes da varredura de anon; baseline.sql partiu do lado da main (conflito resolvido pelo lado autoritativo, nao hunk a hunk); - linha do MANIFEST movida para depois da 0477; prosa e comentarios 0445 -> 0478. tests/invariants/lgpd-redact-unificado-alcanca-pelo-catalogo.test.ts entra com o resultado do 3-way do git (git merge-file HEAD base main, exit 0, sem edicao propria): os dois lados tocaram o arquivo, e o freeze-invariants so dispensa quando a branch nao o tocou. Por isso a valvula DESKCOMM_GOV_INVARIANTS_EDIT=1 neste commit. A troca 0445 -> 0478 na razao dele vai num commit proprio, a seguir. Contribuicao de @bossprt (#1647). Co-authored-by: Josicleuton da Silva Braga <josicleuton.braga@gmail.com> Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
lib/waha/
Placeholder. Cliente real virá da Spec 03 — WhatsApp via WAHA Plus.
Escopo previsto:
client.ts— wrapper HTTP do WAHA (auth viaX-Api-Keyplaintext; nunca query string)signature.ts— verificação HMAC SHA512 dos webhooks comcrypto.timingSafeEqualthrottle.ts— anti-banimento (1 msg/1.2s + jitter ≤800ms; campanha 1 msg/5s)stop-detection.ts— regex/STOP|PARAR|SAIR|UNSUBSCRIBE/imedia.ts— upload pro Supabase Storage primeiro, URL ao WAHAtypes.ts— tipos canônicos de payloads WAHA (Zod-validados)
Regras críticas (Spec 03 — adiantadas aqui)
- Auth: env do WAHA recebe hash SHA512 hex; client envia plaintext em
X-Api-Key - Engine NOWEB default; subscrever
message.any(não sómessage); tratarfromMe=truesem duplicar - Grupos (
chatId.endsWith("@g.us")): nunca viram contato/lead nem passam pelo 1:1. Grupo ligado emchannel_session_groupsentra na inbox porlib/grupos/ingest.ts(sender ép.author, a IA nunca responde); grupo desligado é descartado. O filtroignore.groupsda sessão é decidido pordefinirRecebimentoDeGrupos(lê antes, só escreve quando difere) e ressincronizado na conexão/reconexão (lib/grupos/sincronizar-filtro.ts) - Idempotência:
unique (organization_id, external_id)+ capturacode === "23505" - Cron
recover-stuck-messages:status='sending'há >5min →failed
Sessões e reserva local
lib/channels/connect-waha.ts reserva a identidade por organização e Idempotency-Key antes de criar/iniciar remoto. Erro desconhecido 409/422 não é sucesso; o cliente exige envelope conhecido, identidade exata e pós-condição. Falha preserva FAILED e a identidade; nova tentativa reutiliza a mesma sessão via reserva. Não há compensação destrutiva automática. tier=CORE não implica limite de uma sessão; a prova 2026.7.2/NOWEB chega somente a duas SCAN_QR_CODE, sem pairing ou envio.