import { NextRequest, NextResponse } from "next/server"; import { getPocketBaseConfig } from "@/config/services.config"; import { COOKIE_NAME, getCookieOptions, getHostFromRequest } from "@/app/lib/auth-cookie"; export async function GET(request: NextRequest) { const cookie = request.cookies.get(COOKIE_NAME)?.value; if (!cookie) { return NextResponse.json({ ok: true, user: null }); } try { const payload = JSON.parse(Buffer.from(cookie, "base64url").toString("utf-8")); const { token, userId, email } = payload; if (!token || !userId) return NextResponse.json({ ok: true, user: null }); const pb = getPocketBaseConfig(); const res = await fetch(`${pb.url}/api/collections/${pb.usersCollection}/auth-refresh`, { method: "POST", headers: { Authorization: `Bearer ${token}` }, }); if (!res.ok) { const r = NextResponse.json({ ok: true, user: null }); r.cookies.set(COOKIE_NAME, "", getCookieOptions(true, getHostFromRequest(request)) as Record); return r; } const data = await res.json(); const newToken = data.token; const newRecord = data.record; if (newToken && newRecord?.id) { const newPayload = JSON.stringify({ token: newToken, userId: newRecord.id, email: newRecord.email ?? email, }); const encoded = Buffer.from(newPayload, "utf-8").toString("base64url"); const r = NextResponse.json({ ok: true, user: { id: newRecord.id, email: newRecord.email ?? email }, token: newToken, }); r.cookies.set(COOKIE_NAME, encoded, getCookieOptions(false, getHostFromRequest(request)) as Record); return r; } return NextResponse.json({ ok: true, user: { id: data.record?.id ?? userId, email: data.record?.email ?? email }, token: data.token, }); } catch { return NextResponse.json({ ok: true, user: null }); } }