import { createHmac, timingSafeEqual } from "crypto";
function verifyWebhook(
payload: string,
signature: string,
secret: string
): boolean {
const expected = createHmac("sha256", secret)
.update(payload)
.digest("hex");
return timingSafeEqual(
Buffer.from(signature, "hex"),
Buffer.from(expected, "hex")
);
}
// In your Express handler:
app.post("/webhooks/lucid", (req, res) => {
const sig = req.headers["x-lucid-signature"];
if (!verifyWebhook(JSON.stringify(req.body), sig, WEBHOOK_SECRET)) {
return res.status(401).send("Invalid signature");
}
const { type, data } = req.body;
console.log(`Received ${type}:`, data);
res.status(200).send("OK");
});