import { NextResponse } from "next/server"; import { auth } from "@/app/(auth)/auth"; import { TripoApiError, pickTaskModelUrl, pickTaskPreviewImageUrl, tripoRequest, } from "@/lib/tripo/client"; import { getTripoProviderConfig } from "@/lib/tripo/server"; import type { TripoTaskData } from "@/lib/tripo/types"; export const runtime = "nodejs"; export const maxDuration = 30; interface RouteParams { params: Promise<{ taskId: string }>; } export async function GET(_request: Request, { params }: RouteParams) { try { const session = await auth(); if (!session?.user?.id) { return NextResponse.json({ success: false, error: "未登录" }, { status: 401 }); } const { taskId } = await params; const normalizedTaskId = String(taskId || "").trim(); if (!normalizedTaskId) { return NextResponse.json({ success: false, error: "缺少 taskId" }, { status: 400 }); } const config = await getTripoProviderConfig(); const result = await tripoRequest(config, { method: "GET", path: `/task/${encodeURIComponent(normalizedTaskId)}`, }); const output = result.data?.output && typeof result.data.output === "object" ? result.data.output : {}; const modelUrl = pickTaskModelUrl(output as Record); const previewImageUrl = pickTaskPreviewImageUrl(output as Record); return NextResponse.json({ success: true, data: { taskId: result.data.task_id, type: result.data.type, status: result.data.status, progress: result.data.progress ?? null, output, modelUrl, previewImageUrl, errorCode: result.data.error_code ?? null, errorMessage: result.data.error_msg ?? null, }, traceId: result.traceId, }); } catch (error) { if (error instanceof TripoApiError) { return NextResponse.json( { success: false, error: error.message, code: error.code, suggestion: error.suggestion, traceId: error.traceId, }, { status: error.httpStatus || 502 } ); } return NextResponse.json( { success: false, error: error instanceof Error ? error.message : "查询任务失败", }, { status: 500 } ); } }