diff --git a/supabase/functions/payments-webhook/index.ts b/supabase/functions/payments-webhook/index.ts new file mode 100644 index 0000000..98d8670 --- /dev/null +++ b/supabase/functions/payments-webhook/index.ts @@ -0,0 +1,27 @@ +import { verifyWebhook, type StripeEnv } from "../_shared/stripe.ts"; + +Deno.serve(async (req) => { + if (req.method !== "POST") return new Response("Method not allowed", { status: 405 }); + + const rawEnv = new URL(req.url).searchParams.get("env"); + if (rawEnv !== "sandbox" && rawEnv !== "live") { + return new Response(JSON.stringify({ received: true, ignored: "invalid env" }), { + status: 200, + headers: { "Content-Type": "application/json" }, + }); + } + const env: StripeEnv = rawEnv; + + try { + const event = await verifyWebhook(req, env); + console.log(`[payments-webhook:${env}] ${event.type}`); + // Minimal handler — Stripe dashboard is source of truth for subscriptions. + return new Response(JSON.stringify({ received: true }), { + status: 200, + headers: { "Content-Type": "application/json" }, + }); + } catch (e) { + console.error("Webhook error:", e); + return new Response("Webhook error", { status: 400 }); + } +});