import { NextRequest, NextResponse } from 'next/server'; /** * API Route proxy para Dolibarr * Protege la API key manteniéndola en el servidor */ export async function GET( request: NextRequest, { params }: { params: Promise<{ path: string[] }> } ) { try { // Await params en Next.js 16 const resolvedParams = await params; // Construir el endpoint desde los parámetros de ruta const endpoint = resolvedParams.path.join('/'); // Obtener API key y URL del servidor (sin NEXT_PUBLIC_) const apiUrl = process.env.DOLIBARR_API_URL || process.env.NEXT_PUBLIC_API_URL; const apiKey = process.env.DOLIBARR_API_KEY || process.env.NEXT_PUBLIC_DOLIBARR_API_KEY; if (!apiUrl || !apiKey) { console.error('Missing Dolibarr configuration'); return NextResponse.json( { error: 'Server configuration error' }, { status: 500 } ); } // Construir URL completa const url = `${apiUrl}/${endpoint}?DOLAPIKEY=${apiKey}`; // Realizar la petición a Dolibarr const response = await fetch(url, { method: 'GET', headers: { 'Accept': 'application/json', }, // Cache durante 60 segundos next: { revalidate: 60 } }); if (!response.ok) { const errorText = await response.text(); console.error('Dolibarr API error:', response.status, errorText); return NextResponse.json( { error: 'Error al comunicarse con Dolibarr', details: errorText }, { status: response.status } ); } const data = await response.json(); return NextResponse.json(data); } catch (error) { console.error('Error in Dolibarr API route:', error); return NextResponse.json( { error: 'Internal server error' }, { status: 500 } ); } } /** * Método POST para crear recursos en Dolibarr */ export async function POST( request: NextRequest, { params }: { params: Promise<{ path: string[] }> } ) { try { // Await params en Next.js 16 const resolvedParams = await params; const endpoint = resolvedParams.path.join('/'); const body = await request.json(); const apiUrl = process.env.DOLIBARR_API_URL || process.env.NEXT_PUBLIC_API_URL; const apiKey = process.env.DOLIBARR_API_KEY || process.env.NEXT_PUBLIC_DOLIBARR_API_KEY; if (!apiUrl || !apiKey) { return NextResponse.json( { error: 'Server configuration error' }, { status: 500 } ); } const url = `${apiUrl}/${endpoint}?DOLAPIKEY=${apiKey}`; const response = await fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json', 'Accept': 'application/json', }, body: JSON.stringify(body), }); if (!response.ok) { const errorText = await response.text(); console.error('Dolibarr API error:', response.status, errorText); return NextResponse.json( { error: 'Error al comunicarse con Dolibarr', details: errorText }, { status: response.status } ); } const data = await response.json(); return NextResponse.json(data); } catch (error) { console.error('Error in Dolibarr API route:', error); return NextResponse.json( { error: 'Internal server error' }, { status: 500 } ); } }