import { type NextRequest, NextResponse } from "next/server"; import { backendUrl } from "@/lib/backend-url"; export const dynamic = "force-dynamic"; export const runtime = "nodejs"; const BACKEND_RETRY_ATTEMPTS = 20; const BACKEND_RETRY_DELAY_MS = 500; function delay(ms: number) { return new Promise((resolve) => setTimeout(resolve, ms)); } export async function POST(request: NextRequest) { const backend = backendUrl(); const body = await request.text(); let response: Response | undefined; for (let attempt = 1; ; attempt += 1) { try { response = await fetch(`${backend}/chat`, { method: "POST", body, headers: { "content-type": request.headers.get("content-type") ?? "application/json", }, }); break; } catch { if (attempt >= BACKEND_RETRY_ATTEMPTS) { return NextResponse.json( { detail: `Could not reach the backend chat service at ${backend}.` }, { status: 502 } ); } await delay(BACKEND_RETRY_DELAY_MS); } } if (!response) { return NextResponse.json( { detail: `Could not reach the backend chat service at ${backend}.` }, { status: 502 } ); } const headers = new Headers(); headers.set( "content-type", response.headers.get("content-type") ?? "application/x-ndjson" ); headers.set("cache-control", "no-cache, no-transform"); return new Response(response.body, { status: response.status, statusText: response.statusText, headers, }); }