import { NextResponse } from "next/server"; import { cookies } from "next/headers"; import { SESSION_COOKIE_NAME, type BillingCheckoutResult, popiartFetchEnvelope, } from "@/lib/popiart-api"; export async function POST(request: Request) { const cookieStore = await cookies(); const token = cookieStore.get(SESSION_COOKIE_NAME)?.value; if (!token) { return NextResponse.json( { ok: false, error: { code: "UNAUTHENTICATED", message: "missing local popiart session", }, }, { status: 401 }, ); } let body: { kind?: "subscription" | "points"; provider?: string; plan_id?: number; package_id?: number; return_url?: string; } = {}; try { body = (await request.json()) as typeof body; } catch { body = {}; } const pathname = body.kind === "subscription" ? "/billing/checkout/subscription" : body.kind === "points" ? "/billing/checkout/points" : ""; if (!pathname) { return NextResponse.json( { ok: false, error: { code: "VALIDATION_ERROR", message: "kind must be subscription or points", }, }, { status: 400 }, ); } try { const { response, payload } = await popiartFetchEnvelope(pathname, { method: "POST", headers: { "Content-Type": "application/json", Authorization: `Bearer ${token}`, }, body: JSON.stringify(body), }); return NextResponse.json( payload ?? { ok: false, error: { code: "SERVER_ERROR", message: "invalid response from popiartServer", }, }, { status: response.status }, ); } catch (error) { return NextResponse.json( { ok: false, error: { code: "SERVER_ERROR", message: "failed to reach popiartServer", details: error instanceof Error ? error.message : String(error), }, }, { status: 502 }, ); } } export async function GET(request: Request) { const cookieStore = await cookies(); const token = cookieStore.get(SESSION_COOKIE_NAME)?.value; if (!token) { return NextResponse.json( { ok: false, error: { code: "UNAUTHENTICATED", message: "missing local popiart session", }, }, { status: 401 }, ); } const url = new URL(request.url); const query = new URLSearchParams(url.searchParams); try { const { response, payload } = await popiartFetchEnvelope<{ message?: string; status?: string; data?: Record; }>(`/billing/checkout/status?${query.toString()}`, { method: "GET", headers: { Authorization: `Bearer ${token}`, }, }); return NextResponse.json( payload ?? { ok: false, error: { code: "SERVER_ERROR", message: "invalid response from popiartServer", }, }, { status: response.status }, ); } catch (error) { return NextResponse.json( { ok: false, error: { code: "SERVER_ERROR", message: "failed to reach popiartServer", details: error instanceof Error ? error.message : String(error), }, }, { status: 502 }, ); } }