diff --git a/.github/workflows/migrate-tenants.yml b/.github/workflows/migrate-tenants.yml index 81d09d5..a4c298f 100644 --- a/.github/workflows/migrate-tenants.yml +++ b/.github/workflows/migrate-tenants.yml @@ -70,3 +70,4 @@ jobs: DATABASE_URL: ${{ secrets.DATABASE_URL }} DATABASE_SSL: ${{ secrets.DATABASE_SSL }} run: bun run migrate:tenants + diff --git a/app/(api)/api/webhook/email/inbound/route.ts b/app/(api)/api/webhook/email/inbound/route.ts new file mode 100644 index 0000000..b39243a --- /dev/null +++ b/app/(api)/api/webhook/email/inbound/route.ts @@ -0,0 +1,31 @@ +import type { NextRequest } from "next/server"; +import { NextResponse } from "next/server"; +import { Resend } from "resend"; + +export const POST = async (request: NextRequest) => { + try { + const resend = new Resend(process.env.RESEND_API_KEY); + const payload = await request.text(); + + resend.webhooks.verify({ + payload, + headers: { + id: request.headers.get("svix-id")!, + timestamp: request.headers.get("svix-timestamp")!, + signature: request.headers.get("svix-signature")!, + }, + webhookSecret: process.env.RESEND_WEBHOOK_SECRET!, + }); + + const event = await request.json(); + + if (event.type === "email.received") { + console.log("Inbound email received:", event.data); + return NextResponse.json({ received: true }); + } + + return NextResponse.json({}); + } catch { + return new NextResponse("Invalid webhook", { status: 400 }); + } +};