const express = require('express');
const crypto = require('crypto');
const app = express();
// IMPORTANTE: Usa cuerpo crudo para verificación de firma
app.use('/webhooks/killb', express.raw({type: 'application/json'}));
app.post('/webhooks/killb', async (req, res) => {
try {
// 1. Verificar firma
const signature = req.headers['x-signature-sha256'];
const payload = req.body.toString();
const expectedSignature = crypto
.createHmac('sha256', process.env.WEBHOOK_SECRET)
.update(payload)
.digest('hex');
if (signature !== expectedSignature) {
console.error('Firma inválida');
return res.status(401).json({ error: 'Firma inválida' });
}
// 2. Reconocer inmediatamente
res.status(200).json({ received: true });
// 3. Procesar asincrónicamente
const event = JSON.parse(payload);
processWebhookAsync(event).catch(console.error);
} catch (error) {
console.error('Error de webhook:', error);
res.status(500).json({ error: 'Procesamiento falló' });
}
});
app.listen(3000);