route.ts 880 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. import { z } from "zod";
  2. import { NextResponse } from "next/server";
  3. import { logger } from "@/shared/lib/logger";
  4. import type { NextRequest } from "next/server";
  5. const StripeWebhookSchema = z.object({
  6. type: z.string(),
  7. created_at: z.string(),
  8. data: z.any(),
  9. });
  10. /**
  11. * Resends webhooks
  12. *
  13. * @docs How it work https://resend.com/docs/dashboard/webhooks/introduction
  14. * @docs Event type https://resend.com/docs/dashboard/webhooks/event-types
  15. */
  16. export const POST = async (req: NextRequest) => {
  17. const body = await req.json();
  18. const event = StripeWebhookSchema.parse(body);
  19. switch (event.type) {
  20. case "email.complained":
  21. logger.warn("Email complained", event.data);
  22. break;
  23. case "email.bounced":
  24. logger.warn("Email bounced", event.data);
  25. break;
  26. }
  27. NextResponse.redirect("");
  28. return NextResponse.json({
  29. ok: true,
  30. });
  31. };