Selaa lähdekoodia

fix: corrige vazamento de mensagens entre conversas WhatsApp, erro interno exposto e race condition na conexão

leonardo 1 kuukausi sitten
vanhempi
commit
2d7049f439
2 muutettua tiedostoa jossa 18 lisäystä ja 5 poistoa
  1. 5 1
      src/middleware/errorHandler.js
  2. 13 4
      src/services/whatsappService.js

+ 5 - 1
src/middleware/errorHandler.js

@@ -15,7 +15,11 @@ export function errorHandler(err, _req, res, _next) {
   }
 
   const status = Number(err?.statusCode ?? err?.status ?? 500);
-  const message = typeof err?.message === "string" ? err.message : "internal_error";
+  const isProduction = process.env.NODE_ENV === "production";
+  const message =
+    status >= 500 && isProduction
+      ? "internal_error"
+      : typeof err?.message === "string" ? err.message : "internal_error";
 
   if (status >= 500) {
     console.error("[error]", err);

+ 13 - 4
src/services/whatsappService.js

@@ -60,6 +60,7 @@ async function baixarMidia(m, midiaInfo) {
 }
 
 let sock = null;
+let conectando = false;
 let estado = { status: "desconectado", qrDataUrl: null, telefone: null, ultimoErro: null };
 
 function normalizarTelefone(jid) {
@@ -98,13 +99,21 @@ async function obterOuCriarConversa(telefone, nomeContato, jid) {
 }
 
 export async function iniciarConexao() {
-  if (sock) return;
+  if (sock || conectando) return;
+  conectando = true;
 
-  fs.mkdirSync(SESSION_DIR, { recursive: true });
-  const { state, saveCreds } = await useMultiFileAuthState(SESSION_DIR);
-  const { version } = await fetchLatestBaileysVersion();
+  let state, saveCreds, version;
+  try {
+    fs.mkdirSync(SESSION_DIR, { recursive: true });
+    ({ state, saveCreds } = await useMultiFileAuthState(SESSION_DIR));
+    ({ version } = await fetchLatestBaileysVersion());
+  } catch (err) {
+    conectando = false;
+    throw err;
+  }
 
   sock = makeWASocket({ auth: state, version });
+  conectando = false;
   estado.status = "conectando";
 
   sock.ev.on("creds.update", saveCreds);