import { ApiConfig, RenderOptions, resolveRoute, } from "@alpaca-headless/alpaca-headless"; import { NextRequest } from "next/server"; import { getApiHeaders } from ".."; export async function handleRequest({ request, mapHost, renderOptions, apiConfig, }: { request: NextRequest; mapHost: (host: string) => string; renderOptions: RenderOptions; apiConfig?: ApiConfig; }) { const urlSearchParams = new URLSearchParams(request.nextUrl.search); const nextSearchParams: any = {}; for (const [key, value] of urlSearchParams.entries()) { nextSearchParams[key] = value; } const config = apiConfig || {}; if (!config.headers) { config.headers = await getApiHeaders(); } const routeData = await resolveRoute({ path: request.nextUrl.pathname, searchParams: nextSearchParams, host: mapHost(request.headers.get("host") || ""), renderOptions, renderings: {}, apiConfig: config, }); if (routeData.result.type === "redirect") { return new Response(null, { status: routeData.result.redirectType === "permanent" ? 301 : 302, headers: { Location: routeData.result.location, }, }); } if (routeData.result.type === "unauthorized") { if (routeData.result.auth) return new Response(null, { status: 401, headers: { "WWW-Authenticate": routeData.result.auth.replace(", Bearer", ""), }, }); else return new Response(null, { status: 401, }); } }