import { NextRequest } from "next/server"; import { clearAuthCookie, getAccessToken, getHermesUrl, hermesJsonResponse, unauthorizedResponse, upstreamConfigurationErrorResponse, upstreamUnavailableResponse, } from "@/lib/server/hermes"; import { assertSameOrigin } from "@/lib/server/request-guards"; async function proxyUsersRequest(request: NextRequest) { const token = await getAccessToken(); if (!token) { return unauthorizedResponse(); } const hermesUrl = getHermesUrl(); if (!hermesUrl) { return upstreamConfigurationErrorResponse(); } let hermesResponse: Response; try { hermesResponse = await fetch(`${hermesUrl}/users${request.nextUrl.search}`, { method: request.method, headers: { Authorization: `Bearer ${token}`, Accept: "application/json", "Content-Type": "application/json", }, body: request.method === "GET" ? undefined : await request.text(), cache: "no-store", }); } catch { return upstreamUnavailableResponse(); } if (hermesResponse.status === 401) { const response = await hermesJsonResponse(hermesResponse); clearAuthCookie(response); return response; } return hermesJsonResponse(hermesResponse); } export async function GET(request: NextRequest) { return proxyUsersRequest(request); } export async function POST(request: NextRequest) { const originError = assertSameOrigin(request); if (originError) { return originError; } return proxyUsersRequest(request); }