Error: socket hang up 2

Hi there!

I am having an error on my console. I don’t know what it is, since I have added console.log’s on every Error throw, and I don’t see any on the console.

Any help will be much appreciated.

This is the error:

/opt/debugger/node_modules/.registry.npmjs.org/http-proxy/1.16.2/node_modules/http-proxy/lib/http-proxy/index.js:119
    throw err;
    ^
Error: socket hang up
    at connResetException (internal/errors.js:639:14)
    at Socket.socketCloseListener (_http_client.js:449:25)
    at Socket.emit (events.js:412:35)
    at TCP.<anonymous> (net.js:686:12) {
  code: 'ECONNRESET'
}

And this is the server.js code:

const express = require("express");
const bodyParser = require("body-parser");
const crypto = require("crypto");
const { logger, memoryTransport } = require("./logger");
const { loginToDAC, logOutFromDAC } = require("./dac-metodos"); // Import DAC functions
const { sendEmail } = require("./mailer"); // Correct import for the function

const app = express();
const PORT = process.env.PORT || 3000;

// / End of DAC - - - - - - - - - - - - - -

// Middleware to parse JSON bodies
app.use(
  express.json({
    verify: (req, res, buf, encoding) => {
      req.rawBody = buf.toString(encoding || "utf8");
    },
  })
);

// - - - - - - - - - - - - - -
// Logger messages an methods
// - - - - - - - - - - - - - -

// logger.info("Un mensaje de información."); // Mensaje info
// logger.warn("Un mensaje de warning."); // Mensaje warning
// logger.error("Un mensaje de error."); // Mensaje error
// const logs = memoryTransport.getLogs(); // Obtener logs
// const logsString = JSON.stringify(logs); // Convertir logs a string
// memoryTransport.clearLogs(); // Limpiar logs

// Endpoint to handle the webhook
app.post("/webhook", async (req, res) => {
  const rawHeaders = JSON.stringify(req.headers);
  const hmacHeader = req.get("X-Shopify-Hmac-Sha256");
  const rawBody = req.rawBody; // Usa el cuerpo crudo capturado
  const webhookData = req.body;

  console.log("rawBody", rawBody);

  try {
    // - - - - - - - - - - -
    // Validaciones
    // - - - - - - - - - - -

    // Validar webhookData (cuerpo del contenido)
    if (!webhookData || !webhookData.id) {
      logger.error("Datos del webhook inválidos:", webhookData);
      console.log("error !webhookData");
      throw new Error("Datos del webhook son inválidos"); // Lanza un error crítico
    }

    // Validar Secret de Shopify
    const webhookSecret = process.env.SHOPIFY_WEBHOOK_SECRET;
    if (!webhookSecret) {
      logger.error("SHOPIFY_WEBHOOK_SECRET no está definido");
      console.log("error !webhookSecret");
      throw new Error("SHOPIFY_WEBHOOK_SECRET no está definido");
    }

    // Validar la firma de Shopify
    const hash = crypto
      .createHmac("sha256", webhookSecret)
      .update(rawBody, "utf8")
      .digest("base64");

    const hashBuffer = Buffer.from(hash, "base64");
    const hmacBuffer = Buffer.from(hmacHeader, "base64");

    if (
      hashBuffer.length !== hmacBuffer.length ||
      !crypto.timingSafeEqual(hashBuffer, hmacBuffer)
    ) {
      logger.error("HMAC inválido");
      console.log("error HMAC inválido");
      throw new Error("Unauthorized: Invalid HMAC");
    }

    // - - - - - - - - - - -
    // Conexión con DAC
    // - - - - - - - - - - -

    let dacSessionId;
    try {
      dacSessionId = await loginToDAC();
      if (dacSessionId) {
        logger.info("Login exitoso en DAC");

        // Cerrar sesión
        // await logOutFromDAC(dacSessionId);
        // logger.info("Cerró sesión en DAC exitosamente");
      } else {
        logger.error("No se obtuvo session ID de DAC");
        console.log("error No se obtuvo session ID de DAC");
      }
    } catch (error) {
      console.log("catch 1");
      logger.error("Error en login al DAC: " + error.message);
      throw error;
    }
  } catch (error) {
    console.log("catch 2");
    logger.error("Error procesando el webhook: " + error.message);
    res.status(500).send("Error procesando el webhook");
  } finally {
    enviarLogsPorCorreo();
  }
});

// Función para enviar los logs por correo
function enviarLogsPorCorreo() {
  const logs = memoryTransport.getLogs(); // Obtener logs
  const logsString = logs
    .map((log) => `[${log.level.toUpperCase()}] ${log.message}`)
    .join("\n");
  memoryTransport.clearLogs(); // Limpiar logs después de enviarlos

  const contieneErrores = logs.some((log) => log.level === "error");
  const contieneWarnings = logs.some((log) => log.level === "warn");

  // Determinar asunto
  let asunto = "Proceso exitoso";
  if (contieneErrores) {
    asunto = "Hubo errores en el proceso";
  } else if (contieneWarnings) {
    asunto = "Hubo advertencias en el proceso";
  }

  // Enviar correo
  sendEmail("brfignoni@gmail.com", asunto, logsString)
    .then(() => {
      console.log("Correo enviado exitosamente con los logs.");
    })
    .catch((error) => {
      console.error("Error al enviar el correo:", error.message);
    });
}

// Start the server
app.listen(PORT, () => {
  console.log(`Server running on port ${PORT}`);
});

Response:

I wasn’t responding anything to the server on success:

Responding with a 200, fixed the hang up error!

res.status(200).send(“OK”);

1 Like