Here is my route.js code in api/webhook/clerk/route.js :
import { Webhook } from "svix";
import { headers } from "next/headers";
import { NextResponse } from "next/server";
import { createCommunity } from "@/lib/actions/community.action";
export const POST = async (request) => {
const payload = await request.json();
const header = headers();
const heads = {
"svix-id": header.get("svix-id"),
"svix-timestamp": header.get("svix-timestamp"),
"svix-signature": header.get("svix-signature"),
};
const wh = new Webhook(process.env.NEXT_CLERK_WEBHOOK_SECRET || "");
let evnt = null;
try {
evnt = wh.verify(
JSON.stringify(payload),
heads
)
} catch (err) {
return NextResponse.json({ message: err }, { status: 400 });
}
const eventType = evnt?.type;
// Listen organization creation event
if (eventType === "organization.created") {
const { id, name, slug, logo_url, image_url, created_by } =
evnt?.data ?? {};
try {
await createCommunity(id, name, slug, logo_url || image_url, "org bio", created_by);
return NextResponse.json({ message: "User created" }, { status: 201 });
} catch (err) {
console.log(err);
return NextResponse.json(
{ message: "Internal Server Error" },
{ status: 500 }
);
}
}
};