fix: use dedicated legacy asset token API
This commit is contained in:
43
server.mjs
43
server.mjs
@@ -182,24 +182,24 @@ async function handleApi(request, response, url) {
|
||||
const labels = { front: "正面", side: "侧面", back: "背面" };
|
||||
const uploaded = await Promise.all(imageInputs.map(async (input, index) => {
|
||||
const viewLabel = labels[input.view] || `参考图${index + 1}`;
|
||||
const upstream = await callJson("https://ai-api.kkidc.com/v1/assets/upload", {
|
||||
const upstream = await callJson("https://ai.kkidc.com/api/assets/upload", {
|
||||
method: "POST",
|
||||
headers: bearerHeaders(assetToken),
|
||||
headers: assetHeaders(),
|
||||
body: JSON.stringify({
|
||||
url: input.url,
|
||||
type: "image",
|
||||
purpose: `${body.name || "数字人形象"} · ${viewLabel}`,
|
||||
asset_type: "Image",
|
||||
name: `${body.name || "数字人形象"} · ${viewLabel}`,
|
||||
}),
|
||||
});
|
||||
if (upstream.status >= 400 || upstream.body?.success === false || !upstream.body?.data?.asset_id) {
|
||||
if (upstream.status >= 400 || Number(upstream.body?.code) !== 0 || !upstream.body?.data?.Id) {
|
||||
throw new ClientError(extractUpstreamMessage(upstream.body) || `${viewLabel}图提交失败`, upstream.status || 400);
|
||||
}
|
||||
return {
|
||||
sourceUrl: input.url,
|
||||
view: input.view || "reference",
|
||||
assetId: upstream.body.data.asset_id,
|
||||
groupId: upstream.body.data.group_id || "",
|
||||
status: String(upstream.body.data.status || "pending").toLowerCase(),
|
||||
assetId: upstream.body.data.Id,
|
||||
groupId: "",
|
||||
status: "processing",
|
||||
errorMessage: "",
|
||||
};
|
||||
}));
|
||||
@@ -232,11 +232,11 @@ async function handleApi(request, response, url) {
|
||||
return;
|
||||
}
|
||||
requireToken(assetToken, "KK_ASSET_TOKEN");
|
||||
const upstreamUrl = new URL("https://ai-api.kkidc.com/v1/assets");
|
||||
for (const key of ["page", "page_size", "purpose", "sort_order", "group_id"]) {
|
||||
const upstreamUrl = new URL("https://ai.kkidc.com/api/assets");
|
||||
for (const key of ["page", "page_size", "name", "statuses", "sort_by", "sort_order"]) {
|
||||
for (const value of url.searchParams.getAll(key)) upstreamUrl.searchParams.append(key, value);
|
||||
}
|
||||
const upstream = await callJson(upstreamUrl, { headers: bearerHeaders(assetToken, false) });
|
||||
const upstream = await callJson(upstreamUrl, { headers: assetHeaders(false) });
|
||||
sendJson(response, upstream.status, upstream.body, upstream.trackId);
|
||||
return;
|
||||
}
|
||||
@@ -555,7 +555,7 @@ function buildVideoPayload(body) {
|
||||
const videoReferences = Array.isArray(body.videoReferences) ? body.videoReferences : [];
|
||||
const imageReferences = [...assetReferences, ...extraImageReferences];
|
||||
if (assetReferences.length < 1 || assetReferences.some((item) => !/^asset:\/\/(?:mat_|asset-)/i.test(item))) {
|
||||
throw new ClientError("请先选择审核通过的人物素材(asset://mat_...)");
|
||||
throw new ClientError("请先选择审核通过的人物素材(asset://...)");
|
||||
}
|
||||
if (imageReferences.length > 9) {
|
||||
throw new ClientError(`人物图片与其他参考图片合计最多 9 张,当前为 ${imageReferences.length} 张`);
|
||||
@@ -619,6 +619,13 @@ function bearerHeaders(token, includeContentType = true) {
|
||||
};
|
||||
}
|
||||
|
||||
function assetHeaders(includeContentType = true) {
|
||||
return {
|
||||
Authorization: assetToken,
|
||||
...(includeContentType ? { "Content-Type": "application/json" } : {}),
|
||||
};
|
||||
}
|
||||
|
||||
function extractUpstreamMessage(body) {
|
||||
if (!body) return "";
|
||||
if (typeof body === "string") return body;
|
||||
@@ -628,16 +635,16 @@ function extractUpstreamMessage(body) {
|
||||
async function refreshAssetReviewTask(task) {
|
||||
await Promise.all(task.items.map(async (item) => {
|
||||
if (["ready", "failed"].includes(item.status)) return;
|
||||
const upstreamUrl = new URL(`https://ai-api.kkidc.com/v1/assets/${encodeURIComponent(item.assetId)}`);
|
||||
if (item.groupId) upstreamUrl.searchParams.set("group_id", item.groupId);
|
||||
const upstream = await callJson(upstreamUrl, { headers: bearerHeaders(assetToken, false) });
|
||||
if (upstream.status >= 400 || upstream.body?.success === false) {
|
||||
const upstreamUrl = new URL(`https://ai.kkidc.com/api/assets/${encodeURIComponent(item.assetId)}`);
|
||||
const upstream = await callJson(upstreamUrl, { headers: assetHeaders(false) });
|
||||
if (upstream.status >= 400 || Number(upstream.body?.code) !== 0) {
|
||||
item.status = "failed";
|
||||
item.errorMessage = extractUpstreamMessage(upstream.body) || "素材状态查询失败";
|
||||
return;
|
||||
}
|
||||
item.status = String(upstream.body?.data?.status || item.status || "pending").toLowerCase();
|
||||
item.errorMessage = upstream.body?.data?.error_message || upstream.body?.message || "";
|
||||
const remoteStatus = String(upstream.body?.data?.Status || "Processing").toLowerCase();
|
||||
item.status = remoteStatus === "active" ? "ready" : remoteStatus === "failed" ? "failed" : "processing";
|
||||
item.errorMessage = item.status === "failed" ? upstream.body?.message || "素材审核失败" : "";
|
||||
}));
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user