- POST /satellites/accounts (ensureAccount): cria/reativa User por email, idempotente;
gate aceita chave MESTRA ou chave de satélite (nwk_) válida — o satélite espelha
suas próprias contas (scoreodonto)
- POST /sessions/:id/connect (reconectar/re-scan) e /sessions/:id/disconnect
(encerrar sem remover) — antes o satélite recebia 404 no botão Conectar
- inclui proxy/re-download de mídia (/media/:id/download) da integração satélite
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- brain: detecta 429/cota (quota/billing/insufficient/exceeded/limite da api/
rate limit — inclui a msg PT do Gemini) e emite ext:provider.exhausted por
provider da chain (throttle de 6h por provider), com fallback informado.
- routes: handler ext:provider.exhausted monta notificação profissional e envia
por WhatsApp ao admin (admin_notify_phone da config secretaria), resolvendo o
JID canônico via onWhatsApp (trata 9º dígito BR; pula se número não existe).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Expõe o contrato de administração esperado pelo painel da Secretária no satélite
(antes só havia /secretaria/ask|numbers + /sec/* parcial → 404 em agents/calendar):
- agents: GET/POST/PUT/DELETE
- brain nodes: GET/POST por agente (/agents/:agentId/nodes) + PUT/DELETE (/nodes/:id)
- calendar: GET/POST/PUT/DELETE
- numbers: POST/PUT/DELETE (GET já existia)
- conversations (teste): list/create/patch/delete, /messages, /chat (brain.chat),
/finalize (brain.finalizeProtocol)
Backed pelas tabelas sec_* (globais/single-tenant no motor).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Bloqueia SÓ o disparo automático da Secretária (envios manuais seguem normais).
Só desliga quando a config é explicitamente false — sem a flag, inalterado.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- GET /inbox: orderBy lastMessageAt DESC NULLS LAST (Postgres põe NULLS FIRST
em DESC → chats-stub sem mensagem tomavam o topo; parecia lista de contatos).
- GET /contacts/:jid/avatar/refresh: re-busca a foto pela conexão Baileys viva
(URLs do CDN expiram/404), com timeout de 5s e limpeza da URL obsoleta.
- GET/PUT /sec/keys: passam a ler/gravar na config do plugin 'secretaria'
(config é por-plugin: set(pluginName, obj)); antes gravava em plugin errado
e o brain nunca via as chaves. Corrige TS2345.
- auto-reply da Secretária: nunca responde em grupos (@g.us).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
prisma.chat.findFirst filtrava por remoteJid, que não existe no model Chat (é jid)
→ 500 em todo /secretaria/ask. Corrigido; endpoint retorna o reply normalmente.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
O satélite (mercado, webhook-receiver) chama /api/ext/v1/secretaria/numbers, mas
o ext-api só tinha /sec/*. Adiciona o alias que espelha a rota interna
/api/secretaria/numbers (lista sec_numbers) — retrocompatível, não altera o satélite.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>