File size: 7,612 Bytes
5b397d2
 
c335d2f
5b397d2
c335d2f
 
5b397d2
 
 
 
c335d2f
5b397d2
779bddd
c335d2f
779bddd
5b397d2
c335d2f
 
 
 
 
 
 
 
 
 
 
 
 
5b397d2
 
c335d2f
 
 
779bddd
 
 
5b397d2
 
779bddd
c335d2f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
779bddd
 
 
5b397d2
c335d2f
779bddd
5b397d2
779bddd
c335d2f
 
779bddd
5b397d2
 
c335d2f
779bddd
 
 
 
 
 
c335d2f
 
 
779bddd
 
c335d2f
779bddd
 
5b397d2
 
779bddd
c335d2f
779bddd
 
 
 
c335d2f
779bddd
 
c335d2f
 
779bddd
 
 
 
 
c335d2f
5b397d2
779bddd
5b397d2
 
779bddd
c335d2f
779bddd
 
 
c335d2f
 
 
 
5b397d2
 
779bddd
 
 
 
5b397d2
779bddd
c335d2f
 
 
 
 
 
 
 
779bddd
 
 
 
 
 
c335d2f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
/**
 * ═══════════════════════════════════════════════════════════════════════
 * CORREÇÕES HF SPACES - DNS E CONEXΓƒO WHATSAPP (HARD PATCH)
 * ═══════════════════════════════════════════════════════════════════════
 * Corrige erro: queryA ENODATA / ENOTFOUND web.whatsapp.com
 * SoluΓ§Γ£o: Override direto do dns.lookup para ignorar resolvedor do sistema
 * ═══════════════════════════════════════════════════════════════════════
 */

const dns = require('dns');
const https = require('https');

// ═══════════════════════════════════════════════════════════════════════
// 1. LISTA COMPLETA DE IPs WHATSAPP/GOOGLE EDGE (FALLBACK)
// ═══════════════════════════════════════════════════════════════════════
const WHATSAPP_IPS = [
  '142.250.180.14',  // Google/WA Edge
  '142.250.187.238',
  '142.250.79.0',
  '172.217.173.238',
  '172.217.28.0',
  '108.177.14.0',
  '142.250.64.110',
  '142.250.191.110',
  '142.250.190.14',
  '142.250.187.206',
  '172.217.169.78',
  '31.13.92.52',     // Meta Edge
  '157.240.226.60'   // Meta Edge
];

/**
 * Retorna um IP aleatΓ³rio da lista para balanceamento
 */
function getWhatsAppIP() {
  const index = Math.floor(Math.random() * WHATSAPP_IPS.length);
  return WHATSAPP_IPS[index];
}

// ═══════════════════════════════════════════════════════════════════════
// 2. PATCH CRÍTICO DE DNS (HARD OVERRIDE)
// ═══════════════════════════════════════════════════════════════════════

/**
 * Sobrescreve a funΓ§Γ£o dns.lookup nativa do Node.js.
 * Isso intercepta as chamadas do Baileys antes que elas toquem na rede.
 */
function patchGlobalDNS() {
  const originalLookup = dns.lookup;

  dns.lookup = (hostname, options, callback) => {
    // Normaliza argumentos (options Γ© opcional no Node.js)
    if (typeof options === 'function') {
      callback = options;
      options = {};
    }

    // Intercepta domΓ­nios do WhatsApp
    if (hostname === 'web.whatsapp.com' || hostname === 'whatsapp.com' || hostname === 'wss.whatsapp.net') {
      const directIP = getWhatsAppIP();
      // Retorna sucesso imediatamente com o IP fixo (Family 4 = IPv4)
      // console.log(`πŸ›‘οΈ [DNS-PATCH] Redirecionando ${hostname} -> ${directIP}`);
      return callback(null, directIP, 4);
    }

    // Para qualquer outro domΓ­nio (deepgram, google, etc), usa o DNS normal
    return originalLookup(hostname, options, callback);
  };

  console.log('βœ… DNS Hard-Patch aplicado: web.whatsapp.com forΓ§ado para IPs diretos');
}

// ═══════════════════════════════════════════════════════════════════════
// 3. AGENTE HTTP OTIMIZADO PARA HF SPACES
// ═══════════════════════════════════════════════════════════════════════

function createHFAgent() {
  try {
    // Verifica proxy
    const proxy = process.env.HTTPS_PROXY || process.env.HTTP_PROXY || process.env.https_proxy;
    
    if (proxy) {
      const { HttpsProxyAgent } = require('https-proxy-agent');
      console.log('πŸ”Œ Usando proxy detectado:', proxy.substring(0, 20) + '...');
      return new HttpsProxyAgent(proxy);
    }
    
    // Sem proxy: Agente otimizado
    return new https.Agent({
      keepAlive: true,
      keepAliveMsecs: 30000,
      timeout: 60000,
      maxSockets: 100,
      maxFreeSockets: 20,
      // CRÍTICO: rejectUnauthorized: false permite conexão SSL direta no IP
      // sem validar se o certificado bate com o "IP" (jΓ‘ que o cert Γ© para o domΓ­nio)
      rejectUnauthorized: false 
    });
  } catch (error) {
    console.warn('⚠️ Erro ao criar agente HTTP:', error.message);
    return undefined;
  }
}

// ═══════════════════════════════════════════════════════════════════════
// 4. OPÇÕES DE WEBSOCKET (HEADERS ESSENCIAIS)
// ═══════════════════════════════════════════════════════════════════════

function createWebSocketOptions() {
  return {
    // Headers necessΓ‘rios para enganar o servidor jΓ‘ que estamos conectando via IP
    headers: {
      'Origin': 'https://web.whatsapp.com',
      'Host': 'web.whatsapp.com', // O servidor precisa disso para rotear corretamente (SNI)
      'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36',
      'Accept': '*/*',
      'Accept-Language': 'pt-BR,pt;q=0.9,en;q=0.8',
      'Sec-WebSocket-Extensions': 'permessage-deflate; client_max_window_bits',
      'Sec-WebSocket-Version': '13',
    },
    handshakeTimeout: 60000, // Timeout aumentado
    timeout: 60000,
  };
}

// ═══════════════════════════════════════════════════════════════════════
// 5. VERIFICAÇÃO DE REDE (DUMMY/PASS-THROUGH)
// ═══════════════════════════════════════════════════════════════════════

async function verifyHFNetwork() {
  // Com o patch de DNS aplicado, a verificaΓ§Γ£o de rede tradicional Γ© irrelevante
  // e pode falhar falsamente. Retornamos true para nΓ£o bloquear o boot.
  console.log('🌐 Patch de rede ativo. Ignorando teste de DNS convencional.');
  return true;
}

// ═══════════════════════════════════════════════════════════════════════
// EXPORTAÇÕES
// ═══════════════════════════════════════════════════════════════════════

module.exports = {
  configureDNS: () => {
    // Configura o patch imediatamente ao ser chamado
    const dns = require('dns');
    // ForΓ§a ordem IPv4
    if (dns.setDefaultResultOrder) {
      dns.setDefaultResultOrder('ipv4first');
    }
    // Aplica o override
    patchGlobalDNS();
  },
  
  getWhatsAppIP,
  createHFAgent,
  createWebSocketOptions,
  verifyHFNetwork
};