import { NextRequest, NextResponse } from "next/server"; /** * Same-origin BFF proxy → beauty business service. * Browser calls /api/beauty-business/* so TLS/CORS/DNS issues * do not block CRUD from the SuperApp origin. */ const UPSTREAM = process.env.BEAUTY_BUSINESS_SERVICE_URL || process.env.NEXT_PUBLIC_BEAUTY_BUSINESS_API_URL || "http://localhost:8011"; async function proxy(req: NextRequest, pathSegments: string[]) { const path = pathSegments.join("/"); const url = new URL(req.url); const target = `${UPSTREAM.replace(/\/$/, "")}/${path}${url.search}`; const headers = new Headers(); const pass = ["authorization", "content-type", "x-tenant-id", "accept"]; for (const h of pass) { const v = req.headers.get(h); if (v) headers.set(h, v); } let body: ArrayBuffer | undefined; if (req.method !== "GET" && req.method !== "HEAD") { body = await req.arrayBuffer(); } try { const res = await fetch(target, { method: req.method, headers, body, cache: "no-store", }); const outHeaders = new Headers(); const ct = res.headers.get("content-type"); if (ct) outHeaders.set("content-type", ct); return new NextResponse(await res.arrayBuffer(), { status: res.status, headers: outHeaders, }); } catch (err) { const detail = err instanceof Error ? err.message : "upstream_unreachable"; return NextResponse.json( { error: { code: "beauty_business_proxy_error", message: `پروکسی زیبایی به ${UPSTREAM} وصل نشد — ${detail}`, }, }, { status: 502 } ); } } export async function GET( req: NextRequest, ctx: { params: Promise<{ path: string[] }> } ) { const { path } = await ctx.params; return proxy(req, path); } export async function POST( req: NextRequest, ctx: { params: Promise<{ path: string[] }> } ) { const { path } = await ctx.params; return proxy(req, path); } export async function PATCH( req: NextRequest, ctx: { params: Promise<{ path: string[] }> } ) { const { path } = await ctx.params; return proxy(req, path); } export async function PUT( req: NextRequest, ctx: { params: Promise<{ path: string[] }> } ) { const { path } = await ctx.params; return proxy(req, path); } export async function DELETE( req: NextRequest, ctx: { params: Promise<{ path: string[] }> } ) { const { path } = await ctx.params; return proxy(req, path); }