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 });
}