···
-
const { validateEvent } = await import("@polar-sh/sdk/webhooks");
-
// Get raw body as string
-
const rawBody = await req.text();
-
const headers = Object.fromEntries(req.headers.entries());
-
// Validate webhook signature (validated at startup)
-
const webhookSecret = process.env.POLAR_WEBHOOK_SECRET as string;
-
const event = validateEvent(rawBody, headers, webhookSecret);
-
console.log(`[Webhook] Received event: ${event.type}`);
-
// Handle different event types
case "subscription.updated": {
const { id, status, customerId, metadata } = event.data;
···
return Response.json({ received: true });
-
console.error("[Webhook] Error processing webhook:", error);
-
{ error: "Webhook processing failed" },
···
+
const { validateEvent } = await import("@polar-sh/sdk/webhooks");
+
// Get raw body as string
+
const rawBody = await req.text();
+
const headers = Object.fromEntries(req.headers.entries());
+
// Validate webhook signature (validated at startup)
+
const webhookSecret = process.env.POLAR_WEBHOOK_SECRET as string;
+
let event: ReturnType<typeof validateEvent>;
+
event = validateEvent(rawBody, headers, webhookSecret);
+
// Validation failed - log but return generic response
+
console.error("[Webhook] Signature validation failed:", error);
+
return Response.json({ error: "Invalid webhook" }, { status: 400 });
+
console.log(`[Webhook] Received event: ${event.type}`);
+
// Handle different event types
case "subscription.updated": {
const { id, status, customerId, metadata } = event.data;
···
return Response.json({ received: true });
+
// Processing failed - log with detail but return generic response
+
console.error("[Webhook] Event processing failed:", error);
+
return Response.json({ error: "Invalid webhook" }, { status: 400 });