// app/api/webhooks/whistle/route.ts
import { verifyWebhookSignature } from "@kansato/whistle-sdk";
export async function POST(request: Request) {
const signature = request.headers.get("x-whistle-signature") ?? undefined;
const payload = await request.text();
try {
const event = verifyWebhookSignature({
payload,
signature,
secret: process.env.WHISTLE_WEBHOOK_SECRET!,
tolerance: 300, // seconds (default: 300)
});
switch (event.type) {
case "report.created":
// event.data contains the report payload
console.log("New report:", event.data);
break;
case "enforcement.action.created":
console.log("Enforcement action:", event.data);
break;
case "appeal.created":
console.log("New appeal:", event.data);
break;
}
return Response.json({ received: true });
} catch (err) {
console.error("Webhook verification failed:", err);
return Response.json({ error: "Invalid signature" }, { status: 400 });
}
}