Merge branch 'develop'

This commit is contained in:
ACT丶流星雨 2026-04-06 00:44:16 +08:00
commit 6a5c062a16
9 changed files with 229 additions and 169 deletions

View File

@ -1,4 +1,4 @@
// @routes-hash b30811db41d0eeddfa32d16c9b5856b9
// @routes-hash 3fe6b0875d18070c4a2ef9d9f8e97e91
import { Express } from "express";
import route1 from "./routes/agents/clearMemory";
@ -56,86 +56,87 @@ import route52 from "./routes/production/editImage/getImageDefaultModle";
import route53 from "./routes/production/editImage/getImageFlow";
import route54 from "./routes/production/editImage/saveImageFlow";
import route55 from "./routes/production/editImage/updateImageFlow";
import route56 from "./routes/production/exportImage";
import route57 from "./routes/production/getFlowData";
import route58 from "./routes/production/getProductionData";
import route59 from "./routes/production/getStoryboardData";
import route60 from "./routes/production/saveFlowData";
import route61 from "./routes/production/storyboard/addStoryboard";
import route62 from "./routes/production/storyboard/batchAddStoryboardInfo";
import route63 from "./routes/production/storyboard/batchGenerateImage";
import route64 from "./routes/production/storyboard/downPreviewImage";
import route65 from "./routes/production/storyboard/editStoryboardInfo";
import route66 from "./routes/production/storyboard/getStoryboardData";
import route67 from "./routes/production/storyboard/pollingImage";
import route68 from "./routes/production/storyboard/previewImage";
import route69 from "./routes/production/storyboard/removeFrame";
import route70 from "./routes/production/storyboard/updateStoryboardUrl";
import route71 from "./routes/production/workbench/addTrack";
import route72 from "./routes/production/workbench/deleteTrack";
import route73 from "./routes/production/workbench/delVideo";
import route74 from "./routes/production/workbench/generateVideo";
import route75 from "./routes/production/workbench/generateVideoPrompt";
import route76 from "./routes/production/workbench/getGenerateData";
import route77 from "./routes/production/workbench/getVideoList";
import route78 from "./routes/production/workbench/getVideoModelDetail";
import route79 from "./routes/production/workbench/selectVideo";
import route80 from "./routes/project/addDirectorManual";
import route81 from "./routes/project/addProject";
import route82 from "./routes/project/addVisualManual";
import route83 from "./routes/project/deleteDirectorManual";
import route84 from "./routes/project/deleteVisualManual";
import route85 from "./routes/project/delProject";
import route86 from "./routes/project/editDirectorlManual";
import route87 from "./routes/project/editProject";
import route88 from "./routes/project/editVisualManual";
import route89 from "./routes/project/getProject";
import route90 from "./routes/project/getVisualManual";
import route91 from "./routes/project/queryDirectorManual";
import route92 from "./routes/project/visualManual";
import route93 from "./routes/script/addScript";
import route94 from "./routes/script/delScript";
import route95 from "./routes/script/exportScript";
import route96 from "./routes/script/extractAssets";
import route97 from "./routes/script/getScrptApi";
import route98 from "./routes/script/pollScriptAssets";
import route99 from "./routes/script/updateScript";
import route100 from "./routes/scriptAgent/getPlanData";
import route101 from "./routes/scriptAgent/setPlanData";
import route102 from "./routes/scriptAgent/updateData";
import route103 from "./routes/setting/about/checkUpdate";
import route104 from "./routes/setting/about/downloadApp";
import route105 from "./routes/setting/agentDeploy/agentSetKey";
import route106 from "./routes/setting/agentDeploy/deployAgentModel";
import route107 from "./routes/setting/agentDeploy/getAgentDeploy";
import route108 from "./routes/setting/dbConfig/clearData";
import route109 from "./routes/setting/dev/getSwitchAiDevTool";
import route110 from "./routes/setting/dev/updateSwitchAiDevTool";
import route111 from "./routes/setting/fileManagement/openFolder";
import route112 from "./routes/setting/getTextModel";
import route113 from "./routes/setting/loginConfig/getUser";
import route114 from "./routes/setting/loginConfig/updateUserPwd";
import route115 from "./routes/setting/memoryConfig/delAllMemory";
import route116 from "./routes/setting/memoryConfig/getMemory";
import route117 from "./routes/setting/memoryConfig/sureMemory";
import route118 from "./routes/setting/promptManage/getPrompt";
import route119 from "./routes/setting/promptManage/updatePrompt";
import route120 from "./routes/setting/skillManagement/getSkillContent";
import route121 from "./routes/setting/skillManagement/getSkillList";
import route122 from "./routes/setting/skillManagement/saveSkillContent";
import route123 from "./routes/setting/vendorConfig/addVendor";
import route124 from "./routes/setting/vendorConfig/deleteVendor";
import route125 from "./routes/setting/vendorConfig/enableVendor";
import route126 from "./routes/setting/vendorConfig/getCodeByLink";
import route127 from "./routes/setting/vendorConfig/getVendorList";
import route128 from "./routes/setting/vendorConfig/modelTest";
import route129 from "./routes/setting/vendorConfig/updateCode";
import route130 from "./routes/setting/vendorConfig/updateVendor";
import route131 from "./routes/task/getProject";
import route132 from "./routes/task/getTaskApi";
import route133 from "./routes/task/getTaskCategories";
import route134 from "./routes/task/taskDetails";
import route135 from "./routes/test/test";
import route56 from "./routes/production/editImage/uploadImage";
import route57 from "./routes/production/exportImage";
import route58 from "./routes/production/getFlowData";
import route59 from "./routes/production/getProductionData";
import route60 from "./routes/production/getStoryboardData";
import route61 from "./routes/production/saveFlowData";
import route62 from "./routes/production/storyboard/addStoryboard";
import route63 from "./routes/production/storyboard/batchAddStoryboardInfo";
import route64 from "./routes/production/storyboard/batchGenerateImage";
import route65 from "./routes/production/storyboard/downPreviewImage";
import route66 from "./routes/production/storyboard/editStoryboardInfo";
import route67 from "./routes/production/storyboard/getStoryboardData";
import route68 from "./routes/production/storyboard/pollingImage";
import route69 from "./routes/production/storyboard/previewImage";
import route70 from "./routes/production/storyboard/removeFrame";
import route71 from "./routes/production/storyboard/updateStoryboardUrl";
import route72 from "./routes/production/workbench/addTrack";
import route73 from "./routes/production/workbench/deleteTrack";
import route74 from "./routes/production/workbench/delVideo";
import route75 from "./routes/production/workbench/generateVideo";
import route76 from "./routes/production/workbench/generateVideoPrompt";
import route77 from "./routes/production/workbench/getGenerateData";
import route78 from "./routes/production/workbench/getVideoList";
import route79 from "./routes/production/workbench/getVideoModelDetail";
import route80 from "./routes/production/workbench/selectVideo";
import route81 from "./routes/project/addDirectorManual";
import route82 from "./routes/project/addProject";
import route83 from "./routes/project/addVisualManual";
import route84 from "./routes/project/deleteDirectorManual";
import route85 from "./routes/project/deleteVisualManual";
import route86 from "./routes/project/delProject";
import route87 from "./routes/project/editDirectorlManual";
import route88 from "./routes/project/editProject";
import route89 from "./routes/project/editVisualManual";
import route90 from "./routes/project/getProject";
import route91 from "./routes/project/getVisualManual";
import route92 from "./routes/project/queryDirectorManual";
import route93 from "./routes/project/visualManual";
import route94 from "./routes/script/addScript";
import route95 from "./routes/script/delScript";
import route96 from "./routes/script/exportScript";
import route97 from "./routes/script/extractAssets";
import route98 from "./routes/script/getScrptApi";
import route99 from "./routes/script/pollScriptAssets";
import route100 from "./routes/script/updateScript";
import route101 from "./routes/scriptAgent/getPlanData";
import route102 from "./routes/scriptAgent/setPlanData";
import route103 from "./routes/scriptAgent/updateData";
import route104 from "./routes/setting/about/checkUpdate";
import route105 from "./routes/setting/about/downloadApp";
import route106 from "./routes/setting/agentDeploy/agentSetKey";
import route107 from "./routes/setting/agentDeploy/deployAgentModel";
import route108 from "./routes/setting/agentDeploy/getAgentDeploy";
import route109 from "./routes/setting/dbConfig/clearData";
import route110 from "./routes/setting/dev/getSwitchAiDevTool";
import route111 from "./routes/setting/dev/updateSwitchAiDevTool";
import route112 from "./routes/setting/fileManagement/openFolder";
import route113 from "./routes/setting/getTextModel";
import route114 from "./routes/setting/loginConfig/getUser";
import route115 from "./routes/setting/loginConfig/updateUserPwd";
import route116 from "./routes/setting/memoryConfig/delAllMemory";
import route117 from "./routes/setting/memoryConfig/getMemory";
import route118 from "./routes/setting/memoryConfig/sureMemory";
import route119 from "./routes/setting/promptManage/getPrompt";
import route120 from "./routes/setting/promptManage/updatePrompt";
import route121 from "./routes/setting/skillManagement/getSkillContent";
import route122 from "./routes/setting/skillManagement/getSkillList";
import route123 from "./routes/setting/skillManagement/saveSkillContent";
import route124 from "./routes/setting/vendorConfig/addVendor";
import route125 from "./routes/setting/vendorConfig/deleteVendor";
import route126 from "./routes/setting/vendorConfig/enableVendor";
import route127 from "./routes/setting/vendorConfig/getCodeByLink";
import route128 from "./routes/setting/vendorConfig/getVendorList";
import route129 from "./routes/setting/vendorConfig/modelTest";
import route130 from "./routes/setting/vendorConfig/updateCode";
import route131 from "./routes/setting/vendorConfig/updateVendor";
import route132 from "./routes/task/getProject";
import route133 from "./routes/task/getTaskApi";
import route134 from "./routes/task/getTaskCategories";
import route135 from "./routes/task/taskDetails";
import route136 from "./routes/test/test";
export default async (app: Express) => {
app.use("/api/agents/clearMemory", route1);
@ -193,84 +194,85 @@ export default async (app: Express) => {
app.use("/api/production/editImage/getImageFlow", route53);
app.use("/api/production/editImage/saveImageFlow", route54);
app.use("/api/production/editImage/updateImageFlow", route55);
app.use("/api/production/exportImage", route56);
app.use("/api/production/getFlowData", route57);
app.use("/api/production/getProductionData", route58);
app.use("/api/production/getStoryboardData", route59);
app.use("/api/production/saveFlowData", route60);
app.use("/api/production/storyboard/addStoryboard", route61);
app.use("/api/production/storyboard/batchAddStoryboardInfo", route62);
app.use("/api/production/storyboard/batchGenerateImage", route63);
app.use("/api/production/storyboard/downPreviewImage", route64);
app.use("/api/production/storyboard/editStoryboardInfo", route65);
app.use("/api/production/storyboard/getStoryboardData", route66);
app.use("/api/production/storyboard/pollingImage", route67);
app.use("/api/production/storyboard/previewImage", route68);
app.use("/api/production/storyboard/removeFrame", route69);
app.use("/api/production/storyboard/updateStoryboardUrl", route70);
app.use("/api/production/workbench/addTrack", route71);
app.use("/api/production/workbench/deleteTrack", route72);
app.use("/api/production/workbench/delVideo", route73);
app.use("/api/production/workbench/generateVideo", route74);
app.use("/api/production/workbench/generateVideoPrompt", route75);
app.use("/api/production/workbench/getGenerateData", route76);
app.use("/api/production/workbench/getVideoList", route77);
app.use("/api/production/workbench/getVideoModelDetail", route78);
app.use("/api/production/workbench/selectVideo", route79);
app.use("/api/project/addDirectorManual", route80);
app.use("/api/project/addProject", route81);
app.use("/api/project/addVisualManual", route82);
app.use("/api/project/deleteDirectorManual", route83);
app.use("/api/project/deleteVisualManual", route84);
app.use("/api/project/delProject", route85);
app.use("/api/project/editDirectorlManual", route86);
app.use("/api/project/editProject", route87);
app.use("/api/project/editVisualManual", route88);
app.use("/api/project/getProject", route89);
app.use("/api/project/getVisualManual", route90);
app.use("/api/project/queryDirectorManual", route91);
app.use("/api/project/visualManual", route92);
app.use("/api/script/addScript", route93);
app.use("/api/script/delScript", route94);
app.use("/api/script/exportScript", route95);
app.use("/api/script/extractAssets", route96);
app.use("/api/script/getScrptApi", route97);
app.use("/api/script/pollScriptAssets", route98);
app.use("/api/script/updateScript", route99);
app.use("/api/scriptAgent/getPlanData", route100);
app.use("/api/scriptAgent/setPlanData", route101);
app.use("/api/scriptAgent/updateData", route102);
app.use("/api/setting/about/checkUpdate", route103);
app.use("/api/setting/about/downloadApp", route104);
app.use("/api/setting/agentDeploy/agentSetKey", route105);
app.use("/api/setting/agentDeploy/deployAgentModel", route106);
app.use("/api/setting/agentDeploy/getAgentDeploy", route107);
app.use("/api/setting/dbConfig/clearData", route108);
app.use("/api/setting/dev/getSwitchAiDevTool", route109);
app.use("/api/setting/dev/updateSwitchAiDevTool", route110);
app.use("/api/setting/fileManagement/openFolder", route111);
app.use("/api/setting/getTextModel", route112);
app.use("/api/setting/loginConfig/getUser", route113);
app.use("/api/setting/loginConfig/updateUserPwd", route114);
app.use("/api/setting/memoryConfig/delAllMemory", route115);
app.use("/api/setting/memoryConfig/getMemory", route116);
app.use("/api/setting/memoryConfig/sureMemory", route117);
app.use("/api/setting/promptManage/getPrompt", route118);
app.use("/api/setting/promptManage/updatePrompt", route119);
app.use("/api/setting/skillManagement/getSkillContent", route120);
app.use("/api/setting/skillManagement/getSkillList", route121);
app.use("/api/setting/skillManagement/saveSkillContent", route122);
app.use("/api/setting/vendorConfig/addVendor", route123);
app.use("/api/setting/vendorConfig/deleteVendor", route124);
app.use("/api/setting/vendorConfig/enableVendor", route125);
app.use("/api/setting/vendorConfig/getCodeByLink", route126);
app.use("/api/setting/vendorConfig/getVendorList", route127);
app.use("/api/setting/vendorConfig/modelTest", route128);
app.use("/api/setting/vendorConfig/updateCode", route129);
app.use("/api/setting/vendorConfig/updateVendor", route130);
app.use("/api/task/getProject", route131);
app.use("/api/task/getTaskApi", route132);
app.use("/api/task/getTaskCategories", route133);
app.use("/api/task/taskDetails", route134);
app.use("/api/test/test", route135);
app.use("/api/production/editImage/uploadImage", route56);
app.use("/api/production/exportImage", route57);
app.use("/api/production/getFlowData", route58);
app.use("/api/production/getProductionData", route59);
app.use("/api/production/getStoryboardData", route60);
app.use("/api/production/saveFlowData", route61);
app.use("/api/production/storyboard/addStoryboard", route62);
app.use("/api/production/storyboard/batchAddStoryboardInfo", route63);
app.use("/api/production/storyboard/batchGenerateImage", route64);
app.use("/api/production/storyboard/downPreviewImage", route65);
app.use("/api/production/storyboard/editStoryboardInfo", route66);
app.use("/api/production/storyboard/getStoryboardData", route67);
app.use("/api/production/storyboard/pollingImage", route68);
app.use("/api/production/storyboard/previewImage", route69);
app.use("/api/production/storyboard/removeFrame", route70);
app.use("/api/production/storyboard/updateStoryboardUrl", route71);
app.use("/api/production/workbench/addTrack", route72);
app.use("/api/production/workbench/deleteTrack", route73);
app.use("/api/production/workbench/delVideo", route74);
app.use("/api/production/workbench/generateVideo", route75);
app.use("/api/production/workbench/generateVideoPrompt", route76);
app.use("/api/production/workbench/getGenerateData", route77);
app.use("/api/production/workbench/getVideoList", route78);
app.use("/api/production/workbench/getVideoModelDetail", route79);
app.use("/api/production/workbench/selectVideo", route80);
app.use("/api/project/addDirectorManual", route81);
app.use("/api/project/addProject", route82);
app.use("/api/project/addVisualManual", route83);
app.use("/api/project/deleteDirectorManual", route84);
app.use("/api/project/deleteVisualManual", route85);
app.use("/api/project/delProject", route86);
app.use("/api/project/editDirectorlManual", route87);
app.use("/api/project/editProject", route88);
app.use("/api/project/editVisualManual", route89);
app.use("/api/project/getProject", route90);
app.use("/api/project/getVisualManual", route91);
app.use("/api/project/queryDirectorManual", route92);
app.use("/api/project/visualManual", route93);
app.use("/api/script/addScript", route94);
app.use("/api/script/delScript", route95);
app.use("/api/script/exportScript", route96);
app.use("/api/script/extractAssets", route97);
app.use("/api/script/getScrptApi", route98);
app.use("/api/script/pollScriptAssets", route99);
app.use("/api/script/updateScript", route100);
app.use("/api/scriptAgent/getPlanData", route101);
app.use("/api/scriptAgent/setPlanData", route102);
app.use("/api/scriptAgent/updateData", route103);
app.use("/api/setting/about/checkUpdate", route104);
app.use("/api/setting/about/downloadApp", route105);
app.use("/api/setting/agentDeploy/agentSetKey", route106);
app.use("/api/setting/agentDeploy/deployAgentModel", route107);
app.use("/api/setting/agentDeploy/getAgentDeploy", route108);
app.use("/api/setting/dbConfig/clearData", route109);
app.use("/api/setting/dev/getSwitchAiDevTool", route110);
app.use("/api/setting/dev/updateSwitchAiDevTool", route111);
app.use("/api/setting/fileManagement/openFolder", route112);
app.use("/api/setting/getTextModel", route113);
app.use("/api/setting/loginConfig/getUser", route114);
app.use("/api/setting/loginConfig/updateUserPwd", route115);
app.use("/api/setting/memoryConfig/delAllMemory", route116);
app.use("/api/setting/memoryConfig/getMemory", route117);
app.use("/api/setting/memoryConfig/sureMemory", route118);
app.use("/api/setting/promptManage/getPrompt", route119);
app.use("/api/setting/promptManage/updatePrompt", route120);
app.use("/api/setting/skillManagement/getSkillContent", route121);
app.use("/api/setting/skillManagement/getSkillList", route122);
app.use("/api/setting/skillManagement/saveSkillContent", route123);
app.use("/api/setting/vendorConfig/addVendor", route124);
app.use("/api/setting/vendorConfig/deleteVendor", route125);
app.use("/api/setting/vendorConfig/enableVendor", route126);
app.use("/api/setting/vendorConfig/getCodeByLink", route127);
app.use("/api/setting/vendorConfig/getVendorList", route128);
app.use("/api/setting/vendorConfig/modelTest", route129);
app.use("/api/setting/vendorConfig/updateCode", route130);
app.use("/api/setting/vendorConfig/updateVendor", route131);
app.use("/api/task/getProject", route132);
app.use("/api/task/getTaskApi", route133);
app.use("/api/task/getTaskCategories", route134);
app.use("/api/task/taskDetails", route135);
app.use("/api/test/test", route136);
}

View File

@ -107,7 +107,6 @@ export default router.post("/", validateFields(requestSchema), async (req, res)
const userPrompt = buildPrompt(cfg, project.artStyle ?? "", item.name, item.prompt);
const describe = `生成${cfg.label}图,名称:${item.name},提示词:${item.prompt}`;
const relatedObjects = { id: item.id, projectId, type: cfg.label };
try {
const aiImage = u.Ai.Image(model);
await aiImage.run(

View File

@ -22,10 +22,15 @@ export default router.post(
async (req, res) => {
const { projectId, data } = req.body;
const totalNovelId = [];
const getLastChapterIndex = await u.db("o_novel").where("projectId", projectId).select("chapterIndex").orderBy("chapterIndex", "desc").first();
let lastChapterIndex = 0;
if (getLastChapterIndex) {
lastChapterIndex = getLastChapterIndex.chapterIndex!;
}
for (const item of data) {
const [id] = await u.db("o_novel").insert({
projectId,
chapterIndex: item.index,
chapterIndex: ++lastChapterIndex,
reel: item.reel,
chapter: item.chapter,
chapterData: item.chapterData,

View File

@ -0,0 +1,46 @@
import express from "express";
import u from "@/utils";
import { success, error } from "@/lib/responseFormat";
import { validateFields } from "@/middleware/middleware";
import { z } from "zod";
import { v4 as uuid } from "uuid";
const router = express.Router();
// 文件上传(支持图片、音频、视频)
export default router.post(
"/",
validateFields({
projectId: z.number(),
scriptId: z.number(),
base64Data: z.string(),
}),
async (req, res) => {
const { base64Data, projectId, scriptId } = req.body;
function getExtFromBase64(base64Data: string): string {
const mime = base64Data.match(/^data:([^;]+);base64,/)?.[1] ?? "";
const mimeMap: Record<string, string> = {
// 图片
"image/jpeg": "jpeg",
"image/jpg": "jpg",
"image/png": "png",
// 音频
"audio/mpeg": "mp3",
"audio/mp3": "mp3",
"audio/wav": "wav",
// 视频
"video/mp4": "mp4",
"video/webm": "webm",
};
return mimeMap[mime] ?? "bin";
}
const ext = getExtFromBase64(base64Data);
if (!["jpeg", "jpg", "png"].includes(ext)) {
return res.status(400).send(error("不支持的文件类型"));
}
const savePath = `/${projectId}/imageFlow/${scriptId}/${uuid()}.${ext}`;
await u.oss.writeFile(savePath, Buffer.from(base64Data.match(/base64,([A-Za-z0-9+/=]+)/)[1] ?? "", "base64"));
const url = await u.oss.getFileUrl(savePath);
res.status(200).send(success(url));
},
);

View File

@ -44,7 +44,7 @@ export default router.post(
.db("o_storyboard")
.whereIn("id", finalStoryboardIds)
.where("scriptId", scriptId)
.whereNot("shouldGenerateImage", 0)
.whereNot("shouldGenerateImage", 1)
.update({ state: "生成中" });
const projectSettingData = await u.db("o_project").where("id", projectId).select("imageModel", "imageQuality", "artStyle", "videoRatio").first();

View File

@ -1,7 +1,7 @@
import express from "express";
import u from "@/utils";
import { z } from "zod";
import { success } from "@/lib/responseFormat";
import { error, success } from "@/lib/responseFormat";
import { validateFields } from "@/middleware/middleware";
const router = express.Router();
@ -12,6 +12,10 @@ export default router.post(
}),
async (req, res) => {
const { id } = req.body;
const storyboardData = await u.db("o_storyboard").where("id", id).select("id", "track", "trackId").first();
if (!storyboardData) return res.status(400).send(error("未找到该分镜"));
const trackData = await u.db("o_storyboard").where("track", storyboardData.track).select("id");
if (trackData.length == 1) await u.db("o_videoTrack").where("id", storyboardData.trackId).delete();
await u.db("o_storyboard").where("id", id).delete();
await u.db("o_assets2Storyboard").where("storyboardId", id).delete();
res.status(200).send(success({ message: "视频删除成功" }));

View File

@ -1,7 +1,7 @@
import express from "express";
import u from "@/utils";
import { z } from "zod";
import { success } from "@/lib/responseFormat";
import { success, error } from "@/lib/responseFormat";
import { validateFields } from "@/middleware/middleware";
const router = express.Router();
@ -16,6 +16,7 @@ export default router.post(
}),
async (req, res) => {
const { name, content, projectId, assets } = req.body;
if (content.length >= 3000) return res.status(400).send(error("内容不能超过3000字"));
const [scriptId] = await u.db("o_script").insert({
name,
content,

View File

@ -1,7 +1,7 @@
import express from "express";
import u from "@/utils";
import { z } from "zod";
import { success } from "@/lib/responseFormat";
import { error, success } from "@/lib/responseFormat";
import { validateFields } from "@/middleware/middleware";
const router = express.Router();
@ -16,6 +16,8 @@ export default router.post(
}),
async (req, res) => {
const { id, name, content, assets } = req.body;
if (content.length >= 3000) return res.status(400).send(error("内容不能超过3000字"));
await u.db("o_script").where({ id }).update({
name,
content,

View File

@ -12,7 +12,7 @@ import { createXai } from "@ai-sdk/xai";
import { createMinimax } from "vercel-minimax-ai-provider";
import FormData from "form-data";
import jsonwebtoken from "jsonwebtoken";
import u from "@/utils";
export default function runCode(code: string, vendor?: Record<string, any>) {
// 创建一个沙盒
const exports = {};
@ -94,8 +94,9 @@ export async function pollTask(
try {
const result = await fn();
if (result.completed) return result;
if (result?.error) return result;
} catch (e: any) {
return { completed: false, error: e?.message || "poll error" };
return { completed: false, error: u.error(e).message || "poll error" };
}
await new Promise((res) => setTimeout(res, interval));
}