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}`);
});