const crypto = require("crypto");
const express = require("express");
const app = express();
// IMPORTANT: capture the raw body BEFORE JSON parsing.
app.use(express.json({
verify: (req, _res, buf) => { req.rawBody = buf; },
}));
app.post("/webhooks/klikit", (req, res) => {
const expected = crypto
.createHmac("sha256", process.env.KLIKIT_WEBHOOK_SECRET)
.update(req.rawBody)
.digest("hex");
const given = req.get("x-klikit-signature") || "";
const ok = given.length === expected.length &&
crypto.timingSafeEqual(Buffer.from(given), Buffer.from(expected));
if (!ok) return res.status(401).json({ error: "invalid signature" });
res.status(200).json({ status: "received" });
});