import { NextRequest, NextResponse } from 'next/server' import { auth } from '@/auth' export async function POST(request: NextRequest) { const session = await auth() if (!session?.user?.id || (session.user as any).role !== 'ADMIN') { return NextResponse.json({ success: false, message: 'Unauthorized' }, { status: 401 }) } const { provider, searxngUrl, braveApiKey } = await request.json() try { if (provider === 'brave' || provider === 'both') { if (!braveApiKey) { if (provider === 'brave') { return NextResponse.json({ success: false, message: 'Clé API Brave manquante.' }) } } else { const res = await fetch( 'https://api.search.brave.com/res/v1/web/search?q=test&count=1', { headers: { 'Accept': 'application/json', 'X-Subscription-Token': braveApiKey } } ) if (!res.ok) { return NextResponse.json({ success: false, message: `Brave Search — erreur ${res.status}: clé API invalide ou expirée.` }) } if (provider === 'brave') { return NextResponse.json({ success: true, message: 'Brave Search fonctionne correctement.' }) } } } // Test SearXNG const url = (searxngUrl || 'http://localhost:8080').replace(/\/+$/, '') const res = await fetch(`${url}/search?q=test&format=json`, { headers: { Accept: 'application/json' }, signal: AbortSignal.timeout(5000), }) if (!res.ok) { return NextResponse.json({ success: false, message: `SearXNG — erreur HTTP ${res.status}. Vérifiez l'URL et que le serveur est démarré.` }) } const data = await res.json() const count = data.results?.length ?? 0 return NextResponse.json({ success: true, message: `SearXNG fonctionne correctement — ${count} résultat(s) retourné(s) pour la requête de test.`, }) } catch (e: any) { const msg = e.name === 'TimeoutError' ? 'Timeout — SearXNG ne répond pas dans les 5 secondes. Vérifiez l\'URL et que le serveur est accessible.' : `Erreur de connexion : ${e.message}` return NextResponse.json({ success: false, message: msg }) } }