import QRCode from "qrcode"; import { createMobileSlipLink, mobileSlipStatus } from "@/lib/commission/mobile-slip"; import { requireCommissionUser } from "@/lib/commission/server"; import { errorResponse, requireSameOrigin } from "@/lib/security/http"; import { limitRequest } from "@/lib/security/rate-limit"; export async function POST(request: Request, context: RouteContext<"/api/commission/checkouts/[id]/upload-link">) { try { requireSameOrigin(request); const user = await requireCommissionUser(); await limitRequest("commission-upload-link", user.id, 10); const { id } = await context.params; const { token, digest, expiresAt } = await createMobileSlipLink(id, user.id); const url = new URL(`/commission/upload-slip#${token}`, process.env.BETTER_AUTH_URL).toString(); const qr = await QRCode.toDataURL(url, { margin: 2, width: 240 }); return Response.json({ url, qr, digest, expiresAt }, { headers: { "Cache-Control": "no-store" } }); } catch (cause) { return errorResponse(cause); } } export async function GET(request: Request, context: RouteContext<"/api/commission/checkouts/[id]/upload-link">) { try { const user = await requireCommissionUser(); const { id } = await context.params; const digest = new URL(request.url).searchParams.get("digest") ?? ""; return Response.json(await mobileSlipStatus(id, user.id, digest), { headers: { "Cache-Control": "no-store" } }); } catch (cause) { return errorResponse(cause); } }