import { NextRequest, NextResponse } from "next/server"; import { getBackendUrl } from "@/lib/backend"; import { REFRESH_COOKIE, clearAuthCookies, setAuthCookies } from "@/lib/auth-cookies"; export async function POST(req: NextRequest) { const refreshToken = req.cookies.get(REFRESH_COOKIE)?.value; if (!refreshToken) { const res = NextResponse.json( { data: null, meta: { timestamp: new Date().toISOString(), version: "v1" }, error: { message: "Missing refresh token." }, }, { status: 401 }, ); clearAuthCookies(res); return res; } const backendRes = await fetch(getBackendUrl("auth/refresh"), { method: "POST", headers: { "Content-Type": "application/json", "User-Agent": req.headers.get("user-agent") ?? "", "X-Forwarded-For": req.headers.get("x-forwarded-for") ?? "", }, body: JSON.stringify({ refreshToken }), }); const payload = await backendRes.text(); const parsed = JSON.parse(payload) as { data?: { accessToken?: string; refreshToken?: string; [key: string]: unknown } }; const responsePayload = backendRes.ok && parsed.data?.accessToken && parsed.data.refreshToken ? JSON.stringify({ ...parsed, data: {} }) : payload; const res = new NextResponse(responsePayload, { status: backendRes.status, headers: { "Content-Type": backendRes.headers.get("content-type") ?? "application/json" }, }); if (backendRes.ok && parsed.data?.accessToken && parsed.data.refreshToken) { setAuthCookies(res, parsed.data.accessToken, parsed.data.refreshToken); } else { clearAuthCookies(res); } return res; }