import { Webhook } from "svix"; import { headers } from "next/headers"; import { userFacadeService } from "@/server/user/application/facade"; import { User } from "@/server/user/domain/models"; import { WebhookEvent } from "@clerk/nextjs/server"; export async function POST(req: Request) { const SIGNING_SECRET = process.env.SIGNING_SECRET; if (!SIGNING_SECRET) { throw new Error("Missing SIGNING_SECRET in environment variables"); } const wh = new Webhook(SIGNING_SECRET); const headerPayload = headers(); const svix_id = headerPayload.get("svix-id"); const svix_timestamp = headerPayload.get("svix-timestamp"); const svix_signature = headerPayload.get("svix-signature"); if (!svix_id || !svix_timestamp || !svix_signature) { return new Response("Missing Svix headers", { status: 400 }); } const payload = await req.json(); const body: any = JSON.stringify(payload); let evt: WebhookEvent; try { evt = wh.verify(body, { "svix-id": svix_id, "svix-timestamp": svix_timestamp, "svix-signature": svix_signature, }) as WebhookEvent; } catch (err) { return new Response("Verification error", { status: 400 }); } console.log('meta data',payload?.data?.meta_data) const newUser: User = { id: payload?.data?.id, firstName: payload?.data?.first_name, lastName: payload?.data?.last_name, email: payload?.data?.email_addresses?.[0]?.email_address, isActive: true, rol:payload?.data?.meta_data?.role }; if (evt.type === "user.updated") { await userFacadeService.updateUserDb(newUser); } if (evt.type === "user.deleted") { await userFacadeService.deleteUserDb({ value: payload?.data?.id }); } return new Response("Webhook received", { status: 200 }); }