import { NextResponse, NextRequest } from "next/server"; import { DEFAULT_MODEL, sunoApi } from "@/lib/SunoApi"; import { corsHeaders } from "@/lib/utils"; export const maxDuration = 60; // allow longer timeout for wait_audio == true export const dynamic = "force-dynamic"; export async function POST(req: NextRequest) { if (req.method === 'POST') { try { const body = await req.json(); const { prompt, tags, title, make_instrumental, model, wait_audio } = body; const audioInfo = await (await sunoApi).custom_generate( prompt, tags, title, Boolean(make_instrumental), model || DEFAULT_MODEL, Boolean(wait_audio) ); return new NextResponse(JSON.stringify(audioInfo), { status: 200, headers: { 'Content-Type': 'application/json', ...corsHeaders } }); } catch (error: any) { console.error('Error generating custom audio:', error.response.data); if (error.response.status === 402) { return new NextResponse(JSON.stringify({ error: error.response.data.detail }), { status: 402, headers: { 'Content-Type': 'application/json', ...corsHeaders } }); } return new NextResponse(JSON.stringify({ error: 'Internal server error' }), { status: 500, headers: { 'Content-Type': 'application/json', ...corsHeaders } }); } } else { return new NextResponse('Method Not Allowed', { headers: { Allow: 'POST', ...corsHeaders }, status: 405 }); } } export async function OPTIONS(request: Request) { return new Response(null, { status: 200, headers: corsHeaders }); }