feat: add web search test button in admin tools, update Resend docs
Some checks failed
Deploy to Production / Build and Deploy (push) Failing after 30s
Some checks failed
Deploy to Production / Build and Deploy (push) Failing after 30s
Made-with: Cursor
This commit is contained in:
56
memento-note/app/api/admin/test-search/route.ts
Normal file
56
memento-note/app/api/admin/test-search/route.ts
Normal file
@@ -0,0 +1,56 @@
|
||||
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 })
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user