/** * Verify Video Provider API * * Lightweight endpoint that validates provider credentials without generating video. * * POST /api/verify-video-provider * * Headers: * x-video-provider: VideoProviderId * x-video-model: string (optional) * x-api-key: string (optional, server fallback) * x-base-url: string (optional, server fallback) * * Response: { success: boolean, message: string } */ import { NextRequest } from 'next/server'; import { testVideoConnectivity } from '@/lib/media/video-providers'; import { resolveVideoApiKey, resolveVideoBaseUrl } from '@/lib/server/provider-config'; import type { VideoProviderId } from '@/lib/media/types'; import { apiError, apiSuccess } from '@/lib/server/api-response'; import { createLogger } from '@/lib/logger'; import { validateUrlForSSRF } from '@/lib/server/ssrf-guard'; const log = createLogger('VerifyVideoProvider'); export async function POST(request: NextRequest) { try { const providerId = (request.headers.get('x-video-provider') || 'seedance') as VideoProviderId; const model = request.headers.get('x-video-model') || undefined; const clientApiKey = request.headers.get('x-api-key') || undefined; const clientBaseUrl = request.headers.get('x-base-url') || undefined; if (clientBaseUrl && process.env.NODE_ENV === 'production') { const ssrfError = await validateUrlForSSRF(clientBaseUrl); if (ssrfError) { return apiError('INVALID_URL', 403, ssrfError); } } const apiKey = clientBaseUrl ? clientApiKey || '' : resolveVideoApiKey(providerId, clientApiKey); const baseUrl = clientBaseUrl ? clientBaseUrl : resolveVideoBaseUrl(providerId, clientBaseUrl); if (!apiKey) { return apiError('MISSING_API_KEY', 400, 'No API key configured'); } const result = await testVideoConnectivity({ providerId, apiKey, baseUrl, model, }); if (!result.success) { return apiError('UPSTREAM_ERROR', 500, result.message); } return apiSuccess({ message: result.message }); } catch (err) { log.error( `Video provider verification failed [provider=${request.headers.get('x-video-provider') ?? 'seedance'}]:`, err, ); return apiError('INTERNAL_ERROR', 500, `Connectivity test error: ${err}`); } }