"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.WhatsAppWarmer = void 0; /** * WhatsApp Warmer — aquecimento gradual de número novo. * * Envia mensagens em intervalos aleatórios crescentes para simular * uso humano e reduzir risco de ban em números recém-criados. */ const logger_1 = require("../../../config/logger"); const MESSAGES = [ 'Olá! Tudo bem?', 'Oi, como vai?', 'Boa tarde!', 'Só passando para dizer oi 😊', 'Tudo certo por aí?', 'Bom dia! 🌤', 'E aí, tudo bem?', 'Boa noite!', ]; function randomBetween(min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; } function randomMessage() { return MESSAGES[Math.floor(Math.random() * MESSAGES.length)]; } class WhatsAppWarmer { manager; sessions = new Map(); constructor(manager) { this.manager = manager; } start(config) { if (this.sessions.has(config.instanceId)) { logger_1.logger.warn({ instanceId: config.instanceId }, 'Warmer já em execução para esta instância'); return; } const session = { config, dayCount: 0, sentToday: 0, timer: null, }; this.sessions.set(config.instanceId, session); logger_1.logger.info({ instanceId: config.instanceId, totalDays: config.totalDays }, '🔥 Warmer iniciado'); this.scheduleNext(config.instanceId); } stop(instanceId) { const session = this.sessions.get(instanceId); if (!session) return; if (session.timer) clearTimeout(session.timer); this.sessions.delete(instanceId); logger_1.logger.info({ instanceId }, 'Warmer encerrado'); } scheduleNext(instanceId) { const session = this.sessions.get(instanceId); if (!session) return; const { config, dayCount, sentToday } = session; // Limite diário cresce linearmente: day 1 = 10%, day N = 100% const progressRatio = Math.min(1, (dayCount + 1) / config.totalDays); const limitHoje = Math.ceil(config.dailyMessageLimit * progressRatio); if (sentToday >= limitHoje) { // Dia completo — aguarda até o próximo dia (24h + jitter) const nextDayMs = 24 * 60 * 60 * 1000 + randomBetween(0, 30 * 60 * 1000); logger_1.logger.debug({ instanceId, dayCount, sentToday }, 'Limite diário atingido — aguardando próximo dia'); if (dayCount + 1 >= config.totalDays) { logger_1.logger.info({ instanceId }, '✅ Aquecimento concluído!'); this.sessions.delete(instanceId); return; } session.dayCount += 1; session.sentToday = 0; session.timer = setTimeout(() => this.scheduleNext(instanceId), nextDayMs); return; } // Intervalo aleatório entre mensagens (1–5 minutos com jitter) const delayMs = randomBetween(60_000, 5 * 60_000); session.timer = setTimeout(() => this.sendWarmerMessage(instanceId), delayMs); } async sendWarmerMessage(instanceId) { const session = this.sessions.get(instanceId); if (!session) return; const sock = this.manager.getSocket(instanceId); if (!sock) { logger_1.logger.warn({ instanceId }, 'Warmer: socket não encontrado — pausando'); session.timer = setTimeout(() => this.sendWarmerMessage(instanceId), 60_000); return; } const targets = session.config.targets; const target = targets[Math.floor(Math.random() * targets.length)]; const text = randomMessage(); try { await sock.sendMessage(target, { text }); session.sentToday += 1; logger_1.logger.debug({ instanceId, target, sentToday: session.sentToday }, 'Warmer: mensagem enviada'); } catch (err) { logger_1.logger.error({ err, instanceId, target }, 'Warmer: falha ao enviar mensagem'); } this.scheduleNext(instanceId); } } exports.WhatsAppWarmer = WhatsAppWarmer;