import { NextResponse } from "next/server"; import { auth } from "@/auth"; import { prisma } from "@/lib/prisma"; import { getStripe } from "@/lib/stripe"; export async function POST(request: Request) { try { const session = await auth(); if (!session?.user?.id) { return NextResponse.json({ error: "Unauthorized" }, { status: 401 }); } const subscription = await prisma.subscription.findUnique({ where: { userId: session.user.id }, select: { stripeCustomerId: true }, }); if (!subscription?.stripeCustomerId) { return NextResponse.json( { error: "No active subscription to manage" }, { status: 400 } ); } const ALLOWED_ORIGINS = [ "https://agentlens.vectry.tech", "http://localhost:3000", ]; const requestOrigin = request.headers.get("origin"); const origin = ALLOWED_ORIGINS.includes(requestOrigin ?? "") ? requestOrigin! : "https://agentlens.vectry.tech"; const portalSession = await getStripe().billingPortal.sessions.create({ customer: subscription.stripeCustomerId, return_url: `${origin}/dashboard/settings`, }); return NextResponse.json({ url: portalSession.url }, { status: 200 }); } catch (error) { console.error("Error creating portal session:", error); return NextResponse.json( { error: "Internal server error" }, { status: 500 } ); } }