feat(safety): kill switch de saída (DISABLE_OUTBOUND) p/ ambientes de teste
Quando DISABLE_OUTBOUND=true, envolve sock.sendMessage na criação da sessão e bloqueia QUALQUER envio ao WhatsApp — backstop universal, pois todo envio (rotas, IA/secretária, chatbot, scheduler, warmer, plugins) usa este sock. Evita que automações disparem mensagens a contatos/grupos reais ao conectar uma sessão real em dev. Em produção a flag fica ausente/false (envios normais). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -44,3 +44,12 @@ BAILEYS_SESSIONS_PATH=./sessions
|
||||
# Frontend (CORS)
|
||||
# ─────────────────────────────────────────────
|
||||
FRONTEND_URL=http://localhost:3000
|
||||
|
||||
# ─────────────────────────────────────────────
|
||||
# Modo teste (kill switch de saída)
|
||||
# ─────────────────────────────────────────────
|
||||
# Quando "true", bloqueia QUALQUER envio de mensagem ao WhatsApp (sock.sendMessage)
|
||||
# para TODAS as instâncias — rotas, IA/secretária, chatbot, scheduler, warmer e
|
||||
# plugins. Use em ambientes de DESENVOLVIMENTO/teste para nunca disparar mensagens
|
||||
# a contatos/grupos reais. Em produção, deixe ausente/false.
|
||||
DISABLE_OUTBOUND=false
|
||||
|
||||
+15
@@ -253,6 +253,21 @@ export class WhatsAppConnectionManager {
|
||||
},
|
||||
})
|
||||
|
||||
// ── Kill switch de saída (modo teste) ──────────────────────────────────────
|
||||
// DISABLE_OUTBOUND=true impede QUALQUER envio ao WhatsApp nesta sessão.
|
||||
// Como todo envio (rotas, IA/secretária, chatbot, scheduler, warmer, plugins)
|
||||
// usa este sock, envolver sendMessage aqui é o backstop universal para os
|
||||
// testes: nada é disparado para contatos/grupos reais.
|
||||
if (process.env.DISABLE_OUTBOUND === 'true') {
|
||||
sock.sendMessage = (async (jid: string) => {
|
||||
logger.warn({ instanceId, jid },
|
||||
'[OUTBOUND BLOQUEADO] DISABLE_OUTBOUND ativo — mensagem NÃO enviada (modo teste)')
|
||||
return { key: { id: `BLOCKED_${Date.now()}`, remoteJid: jid, fromMe: true }, status: 1 } as any
|
||||
}) as typeof sock.sendMessage
|
||||
logger.warn({ instanceId },
|
||||
'[OUTBOUND BLOQUEADO] Modo teste ativo — envios desativados nesta sessão')
|
||||
}
|
||||
|
||||
this.sockets.set(instanceId, sock)
|
||||
this.touchActivity(instanceId)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user