diff --git a/package.json b/package.json index d66281c..f774e23 100644 --- a/package.json +++ b/package.json @@ -63,7 +63,6 @@ "qwen-ai-provider-v5": "^2.1.0", "serialize-error": "^13.0.1", "sharp": "^0.34.5", - "socket.io": "^4.8.3", "sqlite3": "^5.1.7", "sucrase": "^3.35.1", "uuid": "^13.0.0", diff --git a/src/agents/productionAgent/tools.ts b/src/agents/productionAgent/tools.ts new file mode 100644 index 0000000..daa7e6a --- /dev/null +++ b/src/agents/productionAgent/tools.ts @@ -0,0 +1,9 @@ +class ProductionAgentTools { + state: Record = {}; + constructor(isolationKey: string) { + + } + + + +} \ No newline at end of file diff --git a/src/app.ts b/src/app.ts index 170b444..d3713ad 100644 --- a/src/app.ts +++ b/src/app.ts @@ -2,8 +2,6 @@ import "./logger"; import "./err"; import "./env"; import express, { Request, Response, NextFunction } from "express"; -import { Server } from "socket.io"; -import http from "node:http"; import expressWs from "express-ws"; import logger from "morgan"; import cors from "cors"; @@ -11,15 +9,11 @@ import buildRoute from "@/core"; import fs from "fs"; import u from "@/utils"; import jwt from "jsonwebtoken"; -import socketInit from "@/socket/index"; const app = express(); -const server = http.createServer(app); +let server: ReturnType | null = null; export default async function startServe(randomPort: Boolean = false) { - const io = new Server(server, { cors: { origin: "*" } }); - socketInit(io); - if (process.env.NODE_ENV == "dev") await buildRoute(); expressWs(app); @@ -77,8 +71,8 @@ export default async function startServe(randomPort: Boolean = false) { const port = randomPort ? 0 : parseInt(process.env.PORT || "60000"); return await new Promise((resolve) => { - server.listen(port, async () => { - const address = server.address(); + server = app.listen(port, async (v) => { + const address = server?.address(); const realPort = typeof address === "string" ? address : address?.port; console.log(`[服务启动成功]: http://localhost:${realPort}`); resolve(realPort); diff --git a/src/router.ts b/src/router.ts index 7e13e7c..685a3a3 100644 --- a/src/router.ts +++ b/src/router.ts @@ -1,4 +1,4 @@ -// @routes-hash 4149c7e96379bfdba20853678db5c921 +// @routes-hash 13d20fd71e6cad1db42d944ca8d96ebe import { Express } from "express"; import route1 from "./routes/agents/clearMemory"; @@ -14,52 +14,54 @@ import route10 from "./routes/assets/getImage"; import route11 from "./routes/assets/saveAssets"; import route12 from "./routes/assets/updateAssets"; import route13 from "./routes/assets/uploadClip"; -import route14 from "./routes/assetsGenerate/generateAssets"; -import route15 from "./routes/assetsGenerate/polishAssetsPrompt"; -import route16 from "./routes/general/generalStatistics"; -import route17 from "./routes/general/getSingleProject"; -import route18 from "./routes/general/updateProject"; -import route19 from "./routes/login/login"; -import route20 from "./routes/migrate/migrateData"; -import route21 from "./routes/modelSelect/getModelList"; -import route22 from "./routes/novel/addNovel"; -import route23 from "./routes/novel/batchDeleteNovel"; -import route24 from "./routes/novel/delNovel"; -import route25 from "./routes/novel/event/batchDeleteEvent"; -import route26 from "./routes/novel/event/deletEvent"; -import route27 from "./routes/novel/event/generateEvents"; -import route28 from "./routes/novel/event/getEvent"; -import route29 from "./routes/novel/getNovel"; -import route30 from "./routes/novel/updateNovel"; -import route31 from "./routes/other/deleteAllData"; -import route32 from "./routes/other/getCaptcha"; -import route33 from "./routes/production/getProductionData"; -import route34 from "./routes/project/addProject"; -import route35 from "./routes/project/delProject"; -import route36 from "./routes/project/editProject"; -import route37 from "./routes/project/getProject"; -import route38 from "./routes/script/addScript"; -import route39 from "./routes/script/delScript"; -import route40 from "./routes/script/getScrptApi"; -import route41 from "./routes/script/updateScript"; -import route42 from "./routes/setting/agentDeploy/deployAgentModel"; -import route43 from "./routes/setting/agentDeploy/getAgentDeploy"; -import route44 from "./routes/setting/agentDeploy/updateKey"; -import route45 from "./routes/setting/dbConfig/clearData"; -import route46 from "./routes/setting/getTextModel"; -import route47 from "./routes/setting/loginConfig/getUser"; -import route48 from "./routes/setting/loginConfig/updateUserPwd"; -import route49 from "./routes/setting/memoryConfig/getMemory"; -import route50 from "./routes/setting/memoryConfig/sureMemory"; -import route51 from "./routes/setting/vendorConfig/addVendor"; -import route52 from "./routes/setting/vendorConfig/deleteVendor"; -import route53 from "./routes/setting/vendorConfig/getVendorList"; -import route54 from "./routes/setting/vendorConfig/modelTest"; -import route55 from "./routes/setting/vendorConfig/updateVendor"; -import route56 from "./routes/task/getMyTaskApi"; -import route57 from "./routes/task/getTaskCategories"; -import route58 from "./routes/task/taskDetails"; -import route59 from "./routes/test/test"; +import route14 from "./routes/assetsGenerate/batchGenerationAssets"; +import route15 from "./routes/assetsGenerate/generateAssets"; +import route16 from "./routes/assetsGenerate/polishAssetsPrompt"; +import route17 from "./routes/cornerScape/getAllAssets"; +import route18 from "./routes/general/generalStatistics"; +import route19 from "./routes/general/getSingleProject"; +import route20 from "./routes/general/updateProject"; +import route21 from "./routes/login/login"; +import route22 from "./routes/migrate/migrateData"; +import route23 from "./routes/modelSelect/getModelList"; +import route24 from "./routes/novel/addNovel"; +import route25 from "./routes/novel/batchDeleteNovel"; +import route26 from "./routes/novel/delNovel"; +import route27 from "./routes/novel/event/batchDeleteEvent"; +import route28 from "./routes/novel/event/deletEvent"; +import route29 from "./routes/novel/event/generateEvents"; +import route30 from "./routes/novel/event/getEvent"; +import route31 from "./routes/novel/getNovel"; +import route32 from "./routes/novel/updateNovel"; +import route33 from "./routes/other/deleteAllData"; +import route34 from "./routes/other/getCaptcha"; +import route35 from "./routes/production/getProductionData"; +import route36 from "./routes/project/addProject"; +import route37 from "./routes/project/delProject"; +import route38 from "./routes/project/editProject"; +import route39 from "./routes/project/getProject"; +import route40 from "./routes/script/addScript"; +import route41 from "./routes/script/delScript"; +import route42 from "./routes/script/getScrptApi"; +import route43 from "./routes/script/updateScript"; +import route44 from "./routes/setting/agentDeploy/deployAgentModel"; +import route45 from "./routes/setting/agentDeploy/getAgentDeploy"; +import route46 from "./routes/setting/agentDeploy/updateKey"; +import route47 from "./routes/setting/dbConfig/clearData"; +import route48 from "./routes/setting/getTextModel"; +import route49 from "./routes/setting/loginConfig/getUser"; +import route50 from "./routes/setting/loginConfig/updateUserPwd"; +import route51 from "./routes/setting/memoryConfig/getMemory"; +import route52 from "./routes/setting/memoryConfig/sureMemory"; +import route53 from "./routes/setting/vendorConfig/addVendor"; +import route54 from "./routes/setting/vendorConfig/deleteVendor"; +import route55 from "./routes/setting/vendorConfig/getVendorList"; +import route56 from "./routes/setting/vendorConfig/modelTest"; +import route57 from "./routes/setting/vendorConfig/updateVendor"; +import route58 from "./routes/task/getMyTaskApi"; +import route59 from "./routes/task/getTaskCategories"; +import route60 from "./routes/task/taskDetails"; +import route61 from "./routes/test/test"; export default async (app: Express) => { app.use("/api/agents/clearMemory", route1); @@ -75,50 +77,52 @@ export default async (app: Express) => { app.use("/api/assets/saveAssets", route11); app.use("/api/assets/updateAssets", route12); app.use("/api/assets/uploadClip", route13); - app.use("/api/assetsGenerate/generateAssets", route14); - app.use("/api/assetsGenerate/polishAssetsPrompt", route15); - app.use("/api/general/generalStatistics", route16); - app.use("/api/general/getSingleProject", route17); - app.use("/api/general/updateProject", route18); - app.use("/api/login/login", route19); - app.use("/api/migrate/migrateData", route20); - app.use("/api/modelSelect/getModelList", route21); - app.use("/api/novel/addNovel", route22); - app.use("/api/novel/batchDeleteNovel", route23); - app.use("/api/novel/delNovel", route24); - app.use("/api/novel/event/batchDeleteEvent", route25); - app.use("/api/novel/event/deletEvent", route26); - app.use("/api/novel/event/generateEvents", route27); - app.use("/api/novel/event/getEvent", route28); - app.use("/api/novel/getNovel", route29); - app.use("/api/novel/updateNovel", route30); - app.use("/api/other/deleteAllData", route31); - app.use("/api/other/getCaptcha", route32); - app.use("/api/production/getProductionData", route33); - app.use("/api/project/addProject", route34); - app.use("/api/project/delProject", route35); - app.use("/api/project/editProject", route36); - app.use("/api/project/getProject", route37); - app.use("/api/script/addScript", route38); - app.use("/api/script/delScript", route39); - app.use("/api/script/getScrptApi", route40); - app.use("/api/script/updateScript", route41); - app.use("/api/setting/agentDeploy/deployAgentModel", route42); - app.use("/api/setting/agentDeploy/getAgentDeploy", route43); - app.use("/api/setting/agentDeploy/updateKey", route44); - app.use("/api/setting/dbConfig/clearData", route45); - app.use("/api/setting/getTextModel", route46); - app.use("/api/setting/loginConfig/getUser", route47); - app.use("/api/setting/loginConfig/updateUserPwd", route48); - app.use("/api/setting/memoryConfig/getMemory", route49); - app.use("/api/setting/memoryConfig/sureMemory", route50); - app.use("/api/setting/vendorConfig/addVendor", route51); - app.use("/api/setting/vendorConfig/deleteVendor", route52); - app.use("/api/setting/vendorConfig/getVendorList", route53); - app.use("/api/setting/vendorConfig/modelTest", route54); - app.use("/api/setting/vendorConfig/updateVendor", route55); - app.use("/api/task/getMyTaskApi", route56); - app.use("/api/task/getTaskCategories", route57); - app.use("/api/task/taskDetails", route58); - app.use("/api/test/test", route59); + app.use("/api/assetsGenerate/batchGenerationAssets", route14); + app.use("/api/assetsGenerate/generateAssets", route15); + app.use("/api/assetsGenerate/polishAssetsPrompt", route16); + app.use("/api/cornerScape/getAllAssets", route17); + app.use("/api/general/generalStatistics", route18); + app.use("/api/general/getSingleProject", route19); + app.use("/api/general/updateProject", route20); + app.use("/api/login/login", route21); + app.use("/api/migrate/migrateData", route22); + app.use("/api/modelSelect/getModelList", route23); + app.use("/api/novel/addNovel", route24); + app.use("/api/novel/batchDeleteNovel", route25); + app.use("/api/novel/delNovel", route26); + app.use("/api/novel/event/batchDeleteEvent", route27); + app.use("/api/novel/event/deletEvent", route28); + app.use("/api/novel/event/generateEvents", route29); + app.use("/api/novel/event/getEvent", route30); + app.use("/api/novel/getNovel", route31); + app.use("/api/novel/updateNovel", route32); + app.use("/api/other/deleteAllData", route33); + app.use("/api/other/getCaptcha", route34); + app.use("/api/production/getProductionData", route35); + app.use("/api/project/addProject", route36); + app.use("/api/project/delProject", route37); + app.use("/api/project/editProject", route38); + app.use("/api/project/getProject", route39); + app.use("/api/script/addScript", route40); + app.use("/api/script/delScript", route41); + app.use("/api/script/getScrptApi", route42); + app.use("/api/script/updateScript", route43); + app.use("/api/setting/agentDeploy/deployAgentModel", route44); + app.use("/api/setting/agentDeploy/getAgentDeploy", route45); + app.use("/api/setting/agentDeploy/updateKey", route46); + app.use("/api/setting/dbConfig/clearData", route47); + app.use("/api/setting/getTextModel", route48); + app.use("/api/setting/loginConfig/getUser", route49); + app.use("/api/setting/loginConfig/updateUserPwd", route50); + app.use("/api/setting/memoryConfig/getMemory", route51); + app.use("/api/setting/memoryConfig/sureMemory", route52); + app.use("/api/setting/vendorConfig/addVendor", route53); + app.use("/api/setting/vendorConfig/deleteVendor", route54); + app.use("/api/setting/vendorConfig/getVendorList", route55); + app.use("/api/setting/vendorConfig/modelTest", route56); + app.use("/api/setting/vendorConfig/updateVendor", route57); + app.use("/api/task/getMyTaskApi", route58); + app.use("/api/task/getTaskCategories", route59); + app.use("/api/task/taskDetails", route60); + app.use("/api/test/test", route61); } diff --git a/src/routes/assetsGenerate/batchGenerationAssets.ts b/src/routes/assetsGenerate/batchGenerationAssets.ts new file mode 100644 index 0000000..4c30cab --- /dev/null +++ b/src/routes/assetsGenerate/batchGenerationAssets.ts @@ -0,0 +1,173 @@ +import express from "express"; +import u from "@/utils"; +import { z } from "zod"; +import { v4 as uuidv4 } from "uuid"; +import { error, success } from "@/lib/responseFormat"; +const router = express.Router(); + +const assetItemSchema = z.object({ + id: z.number(), + type: z.enum(["role", "scene", "tool", "storyboard"]), + projectId: z.number(), + name: z.string(), + base64: z.string().optional().nullable(), + prompt: z.string(), + model: z.custom<`${number}:${string}`>( + (val) => typeof val === "string" && /^\d+:.+$/.test(val), + { message: "model 格式应为 {vendorId}:{modelName},例如 1:modelName" }, + ), + resolution: z.enum(["1K", "2K", "4K"]), +}); + +type AssetItem = z.infer; + +// 处理单个资产图片生成 +async function generateSingleAsset(item: AssetItem) { + const { id, type, projectId, base64, prompt, name, model, resolution } = item; + + const project = await u.db("o_project").where("id", projectId).select("artStyle", "type", "intro").first(); + if (!project) throw new Error(`项目 ${projectId} 不存在`); + + const role = (await u.getPrompts("role-generateImage")) ?? ""; + const scene = (await u.getPrompts("scene-generateImage")) ?? ""; + const tool = (await u.getPrompts("tool-generateImage")) ?? ""; + + let systemPrompt = ""; + let userPrompt = ""; + + if (type === "role") { + systemPrompt = role; + userPrompt = ` + 请根据以下参数生成角色标准四视图: + + **基础参数:** + - 画风风格: ${project?.artStyle || "未指定"} + + **角色设定:** + - 名称:${name}, + - 提示词:${prompt}, + + 请严格按照系统规范生成人物角色四视图。 + `; + } else if (type === "scene") { + systemPrompt = scene; + userPrompt = ` + 请根据以下参数生成标准场景图: + + **基础参数:** + - 画风风格: ${project?.artStyle || "未指定"} + + **场景设定:** + - 名称:${name}, + - 提示词:${prompt}, + + 请严格按照系统规范生成标准场景图。 + `; + } else if (type === "tool") { + systemPrompt = tool; + userPrompt = ` + 请根据以下参数生成标准道具图: + + **基础参数:** + - 画风风格: ${project?.artStyle || "未指定"} + + **道具设定:** + - 名称:${name}, + - 提示词:${prompt}, + + 请严格按照系统规范生成标准道具图。 + `; + } + + const [imageId] = await u.db("o_image").insert({ + type, + state: "生成中", + assetsId: id, + }); + + try { + let imagePath: string; + let insertType: string; + + if (type === "role") { + insertType = "role"; + imagePath = `/${projectId}/role/${uuidv4()}.jpg`; + } else if (type === "scene") { + insertType = "scene"; + imagePath = `/${projectId}/scene/${uuidv4()}.jpg`; + } else { + insertType = "tool"; + imagePath = `/${projectId}/props/${uuidv4()}.jpg`; + } + + const aiImage = u.Ai.Image(model); + await aiImage.run({ + systemPrompt, + prompt: userPrompt, + imageBase64: base64 ? [base64] : [], + size: resolution, + aspectRatio: "16:9", + }); + aiImage.save(imagePath); + + const imageData = await u.db("o_image").where("id", imageId).select("*").first(); + const modelData = model.split(":")[1]; + + if (!imageData) { + throw new Error("资产已被删除"); + } + + await u.db("o_image").where("id", imageId).update({ + state: "生成成功", + filePath: imagePath, + type: insertType, + model: modelData, + resolution, + }); + + const path = await u.oss.getFileUrl(imagePath); + await u.db("o_assets").where("id", id).update({ imageId }); + + return { success: true, path, assetsId: id }; + } catch (e) { + await u.db("o_image").where("id", imageId).update({ state: "生成失败" }); + throw e; + } +} + +// 批量生成资产图片 +export default router.post("/", async (req, res) => { + // 校验请求体 + const bodySchema = z.object({ + concurrentCount: z.number().int().min(1).default(3), + items: z.array(assetItemSchema).min(1), + }); + + const parseResult = bodySchema.safeParse(req.body); + if (!parseResult.success) { + const errors = parseResult.error.issues.map((issue) => `字段 ${issue.path.join(".")} ${issue.message}`); + return res.status(400).json({ message: "参数错误", errors }); + } + + const { concurrentCount, items } = parseResult.data; + const results: { assetsId: number; success: boolean; path?: string; message?: string }[] = []; + + // 按并发数分批执行 + for (let i = 0; i < items.length; i += concurrentCount) { + const batch = items.slice(i, i + concurrentCount); + const batchResults = await Promise.allSettled(batch.map((item) => generateSingleAsset(item))); + + for (let j = 0; j < batchResults.length; j++) { + const result = batchResults[j]; + const item = batch[j]; + if (result.status === "fulfilled") { + results.push({ assetsId: item.id, success: true, path: result.value.path }); + } else { + const msg = u.error(result.reason).message || "图片生成失败"; + results.push({ assetsId: item.id, success: false, message: msg }); + } + } + } + + return res.status(200).send(success(results)); +}); diff --git a/src/routes/assetsGenerate/generateAssets.ts b/src/routes/assetsGenerate/generateAssets.ts index 6256880..594de6e 100644 --- a/src/routes/assetsGenerate/generateAssets.ts +++ b/src/routes/assetsGenerate/generateAssets.ts @@ -111,11 +111,14 @@ export default router.post( }); aiImage.save(imagePath!); const imageData = await u.db("o_image").where("id", imageId).select("*").first(); + const modelData = model.split(":")[1]; if (imageData) { await u.db("o_image").where("id", imageId).update({ state: "生成成功", filePath: imagePath, type: insertType, + model: modelData, + resolution: resolution, }); const path = await u.oss.getFileUrl(imagePath!); await u.db("o_assets").where("id", id).update({ diff --git a/src/routes/cornerScape/getAllAssets.ts b/src/routes/cornerScape/getAllAssets.ts new file mode 100644 index 0000000..8db8713 --- /dev/null +++ b/src/routes/cornerScape/getAllAssets.ts @@ -0,0 +1,33 @@ +import express from "express"; +import u from "@/utils"; +import { z } from "zod"; +import { success } from "@/lib/responseFormat"; +import { validateFields } from "@/middleware/middleware"; +const router = express.Router(); + +export default router.post( + "/", + validateFields({ + projectId: z.number(), + type: z.array(z.string()).optional(), + }), + async (req, res) => { + const { projectId, type, } = req.body; + const data = await u + .db("o_assets") + .leftJoin("o_image", "o_assets.imageId", "o_image.id") + .select("o_assets.*", "o_image.filePath", "o_image.state", "o_image.model", "o_image.resolution") + .where("o_assets.projectId", projectId) + .andWhere("o_assets.type", "<>", "clip") + .modify((qb) => { + if (type && type.length > 0) qb.whereIn("o_assets.type", type); + }); + const result = await Promise.all( + data.map(async (parent: any) => ({ + ...parent, + filePath: parent.filePath && (await u.oss.getFileUrl(parent.filePath!)), + })), + ); + res.status(200).send(success(result)); + }, +); diff --git a/src/socket/index.ts b/src/socket/index.ts deleted file mode 100644 index ea9e372..0000000 --- a/src/socket/index.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Server } from "socket.io"; -import scriptAgentChat from "./routes/scriptAgentChat"; -import chat from "./routes/chat"; - -export default (io: Server) => { - const routes: Record) => void> = { - scriptAgentChat, - chat, - }; - - for (const [name, handler] of Object.entries(routes)) { - const nsp = io.of(`/socket/${name}`); - handler(nsp); - console.log(`[Socket] 注册命名空间: /socket/${name}`); - } -}; diff --git a/src/socket/routes/chat.ts b/src/socket/routes/chat.ts deleted file mode 100644 index bedd1ac..0000000 --- a/src/socket/routes/chat.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { Namespace, Socket } from "socket.io"; - -const users = new Map(); // socketId -> username - -export default (nsp: Namespace) => { - nsp.on("connection", (socket: Socket) => { - console.log("[chat] 用户已连接:", socket.id); - - socket.on("userLogin", (username: string) => { - users.set(socket.id, username); - socket.broadcast.emit("notification", `${username} 加入了聊天室`); - }); - - socket.on("sendMessage", (data: { message: string }) => { - const username = users.get(socket.id) || "匿名"; - const msg = { - type: "user" as const, - username, - message: data.message, - time: new Date().toLocaleTimeString(), - }; - nsp.emit("newMessage", msg); - }); - - socket.on("typing", () => { - const username = users.get(socket.id); - if (username) socket.broadcast.emit("userTyping", username); - }); - - socket.on("stopTyping", () => { - socket.broadcast.emit("userStopTyping"); - }); - - socket.on("disconnect", () => { - const username = users.get(socket.id); - if (username) { - users.delete(socket.id); - socket.broadcast.emit("notification", `${username} 离开了聊天室`); - } - console.log("[chat] 用户已断开:", socket.id); - }); - }); -}; diff --git a/src/socket/routes/scriptAgentChat.ts b/src/socket/routes/scriptAgentChat.ts deleted file mode 100644 index bedd1ac..0000000 --- a/src/socket/routes/scriptAgentChat.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { Namespace, Socket } from "socket.io"; - -const users = new Map(); // socketId -> username - -export default (nsp: Namespace) => { - nsp.on("connection", (socket: Socket) => { - console.log("[chat] 用户已连接:", socket.id); - - socket.on("userLogin", (username: string) => { - users.set(socket.id, username); - socket.broadcast.emit("notification", `${username} 加入了聊天室`); - }); - - socket.on("sendMessage", (data: { message: string }) => { - const username = users.get(socket.id) || "匿名"; - const msg = { - type: "user" as const, - username, - message: data.message, - time: new Date().toLocaleTimeString(), - }; - nsp.emit("newMessage", msg); - }); - - socket.on("typing", () => { - const username = users.get(socket.id); - if (username) socket.broadcast.emit("userTyping", username); - }); - - socket.on("stopTyping", () => { - socket.broadcast.emit("userStopTyping"); - }); - - socket.on("disconnect", () => { - const username = users.get(socket.id); - if (username) { - users.delete(socket.id); - socket.broadcast.emit("notification", `${username} 离开了聊天室`); - } - console.log("[chat] 用户已断开:", socket.id); - }); - }); -}; diff --git a/src/types/database.d.ts b/src/types/database.d.ts index ffaa589..4c3b490 100644 --- a/src/types/database.d.ts +++ b/src/types/database.d.ts @@ -1,9 +1,9 @@ -// @db-hash 2f9e6a9e9145cead00652858cafb9159 +// @db-hash feca77a2c2ec5b6a2989347f982558d5 //该文件由脚本自动生成,请勿手动修改 export interface memories { 'content': string; - 'createdAt': number; + 'createTime': number; 'embedding'?: string | null; 'id'?: string; 'isolationKey': string; diff --git a/yarn.lock b/yarn.lock index 9c6f5a4..31f5e73 100644 --- a/yarn.lock +++ b/yarn.lock @@ -742,11 +742,6 @@ resolved "https://registry.npmmirror.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== -"@socket.io/component-emitter@~3.1.0": - version "3.1.2" - resolved "https://registry.npmmirror.com/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz#821f8442f4175d8f0467b9daf26e3a18e2d02af2" - integrity sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA== - "@standard-schema/spec@^1.0.0", "@standard-schema/spec@^1.1.0": version "1.1.0" resolved "https://registry.npmmirror.com/@standard-schema/spec/-/spec-1.1.0.tgz#a79b55dbaf8604812f52d140b2c9ab41bc150bb8" @@ -789,7 +784,7 @@ dependencies: "@types/node" "*" -"@types/cors@^2.8.12", "@types/cors@^2.8.19": +"@types/cors@^2.8.19": version "2.8.19" resolved "https://registry.npmmirror.com/@types/cors/-/cors-2.8.19.tgz#d93ea2673fd8c9f697367f5eeefc2bbfa94f0342" integrity sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg== @@ -887,7 +882,7 @@ dependencies: undici-types "~7.18.0" -"@types/node@>=10.0.0", "@types/node@>=13.7.0": +"@types/node@>=13.7.0": version "25.5.0" resolved "https://registry.npmmirror.com/@types/node/-/node-25.5.0.tgz#5c99f37c443d9ccc4985866913f1ed364217da31" integrity sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw== @@ -951,7 +946,7 @@ resolved "https://registry.npmmirror.com/@types/verror/-/verror-1.10.11.tgz#d3d6b418978c8aa202d41e5bb3483227b6ecc1bb" integrity sha512-RlDm9K7+o5stv0Co8i8ZRGxDbrTxhJtgjqjFyVh/tXQyl/rYtTKlnTvZ88oSTeYREWurwx20Js4kTuKCsFkUtg== -"@types/ws@*", "@types/ws@^8.5.12": +"@types/ws@*": version "8.18.1" resolved "https://registry.npmmirror.com/@types/ws/-/ws-8.18.1.tgz#48464e4bf2ddfd17db13d845467f6070ffea4aa9" integrity sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg== @@ -993,14 +988,6 @@ accepts@^2.0.0: mime-types "^3.0.0" negotiator "^1.0.0" -accepts@~1.3.4: - version "1.3.8" - resolved "https://registry.npmmirror.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" - integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== - dependencies: - mime-types "~2.1.34" - negotiator "0.6.3" - acorn-walk@^8.3.4: version "8.3.5" resolved "https://registry.npmmirror.com/acorn-walk/-/acorn-walk-8.3.5.tgz#8a6b8ca8fc5b34685af15dabb44118663c296496" @@ -1243,11 +1230,6 @@ base64-js@^1.3.1, base64-js@^1.5.1: resolved "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -base64id@2.0.0, base64id@~2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" - integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== - basic-auth@~2.0.1: version "2.0.1" resolved "https://registry.npmmirror.com/basic-auth/-/basic-auth-2.0.1.tgz#b998279bf47ce38344b4f3cf916d4679bbf51e3a" @@ -1679,7 +1661,7 @@ cookie-signature@^1.2.1: resolved "https://registry.npmmirror.com/cookie-signature/-/cookie-signature-1.2.2.tgz#57c7fc3cc293acab9fec54d73e15690ebe4a1793" integrity sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg== -cookie@^0.7.1, cookie@~0.7.2: +cookie@^0.7.1: version "0.7.2" resolved "https://registry.npmmirror.com/cookie/-/cookie-0.7.2.tgz#556369c472a2ba910f2979891b526b3436237ed7" integrity sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w== @@ -1689,7 +1671,7 @@ core-util-is@1.0.2: resolved "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== -cors@^2.8.5, cors@~2.8.5: +cors@^2.8.5: version "2.8.6" resolved "https://registry.npmmirror.com/cors/-/cors-2.8.6.tgz#ff5dd69bd95e547503820d29aba4f8faf8dfec96" integrity sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw== @@ -1728,7 +1710,7 @@ debug@2.6.9: dependencies: ms "2.0.0" -debug@4, debug@^4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.3, debug@^4.3.4, debug@^4.4.0, debug@^4.4.3, debug@~4.4.1: +debug@4, debug@^4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.3, debug@^4.3.4, debug@^4.4.0, debug@^4.4.3: version "4.4.3" resolved "https://registry.npmmirror.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== @@ -1992,27 +1974,6 @@ end-of-stream@^1.1.0, end-of-stream@^1.4.1: dependencies: once "^1.4.0" -engine.io-parser@~5.2.1: - version "5.2.3" - resolved "https://registry.npmmirror.com/engine.io-parser/-/engine.io-parser-5.2.3.tgz#00dc5b97b1f233a23c9398d0209504cf5f94d92f" - integrity sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q== - -engine.io@~6.6.0: - version "6.6.6" - resolved "https://registry.npmmirror.com/engine.io/-/engine.io-6.6.6.tgz#9942111e7a4dc31f057e73470d7b7fcc7f74c390" - integrity sha512-U2SN0w3OpjFRVlrc17E6TMDmH58Xl9rai1MblNjAdwWp07Kk+llmzX0hjDpQdrDGzwmvOtgM5yI+meYX6iZ2xA== - dependencies: - "@types/cors" "^2.8.12" - "@types/node" ">=10.0.0" - "@types/ws" "^8.5.12" - accepts "~1.3.4" - base64id "2.0.0" - cookie "~0.7.2" - cors "~2.8.5" - debug "~4.4.1" - engine.io-parser "~5.2.1" - ws "~8.18.3" - env-paths@^2.2.0: version "2.2.1" resolved "https://registry.npmmirror.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" @@ -3163,7 +3124,7 @@ mime-db@^1.54.0: resolved "https://registry.npmmirror.com/mime-db/-/mime-db-1.54.0.tgz#cddb3ee4f9c64530dff640236661d42cb6a314f5" integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ== -mime-types@^2.1.12, mime-types@~2.1.34: +mime-types@^2.1.12: version "2.1.35" resolved "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== @@ -3376,11 +3337,6 @@ napi-build-utils@^2.0.0: resolved "https://registry.npmmirror.com/napi-build-utils/-/napi-build-utils-2.0.0.tgz#13c22c0187fcfccce1461844136372a47ddc027e" integrity sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA== -negotiator@0.6.3: - version "0.6.3" - resolved "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - negotiator@^0.6.2: version "0.6.4" resolved "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.4.tgz#777948e2452651c570b712dd01c23e262713fff7" @@ -4340,35 +4296,6 @@ smart-buffer@^4.0.2, smart-buffer@^4.2.0: resolved "https://registry.npmmirror.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== -socket.io-adapter@~2.5.2: - version "2.5.6" - resolved "https://registry.npmmirror.com/socket.io-adapter/-/socket.io-adapter-2.5.6.tgz#c697f609d36a676a46749782274607d8df52c1d8" - integrity sha512-DkkO/dz7MGln0dHn5bmN3pPy+JmywNICWrJqVWiVOyvXjWQFIv9c2h24JrQLLFJ2aQVQf/Cvl1vblnd4r2apLQ== - dependencies: - debug "~4.4.1" - ws "~8.18.3" - -socket.io-parser@~4.2.4: - version "4.2.6" - resolved "https://registry.npmmirror.com/socket.io-parser/-/socket.io-parser-4.2.6.tgz#19156bf179af3931abd05260cfb1491822578a6f" - integrity sha512-asJqbVBDsBCJx0pTqw3WfesSY0iRX+2xzWEWzrpcH7L6fLzrhyF8WPI8UaeM4YCuDfpwA/cgsdugMsmtz8EJeg== - dependencies: - "@socket.io/component-emitter" "~3.1.0" - debug "~4.4.1" - -socket.io@^4.8.3: - version "4.8.3" - resolved "https://registry.npmmirror.com/socket.io/-/socket.io-4.8.3.tgz#ca6ba1431c69532e1e0a6f496deebeb601dbc4df" - integrity sha512-2Dd78bqzzjE6KPkD5fHZmDAKRNe3J15q+YHDrIsy9WEkqttc7GY+kT9OBLSMaPbQaEd0x1BjcmtMtXkfpc+T5A== - dependencies: - accepts "~1.3.4" - base64id "~2.0.0" - cors "~2.8.5" - debug "~4.4.1" - engine.io "~6.6.0" - socket.io-adapter "~2.5.2" - socket.io-parser "~4.2.4" - socks-proxy-agent@^6.0.0: version "6.2.1" resolved "https://registry.npmmirror.com/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz#2687a31f9d7185e38d530bef1944fe1f1496d6ce" @@ -5005,11 +4932,6 @@ ws@^7.4.6: resolved "https://registry.npmmirror.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== -ws@~8.18.3: - version "8.18.3" - resolved "https://registry.npmmirror.com/ws/-/ws-8.18.3.tgz#b56b88abffde62791c639170400c93dcb0c95472" - integrity sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg== - xmlbuilder@>=11.0.1, xmlbuilder@^15.1.1: version "15.1.1" resolved "https://registry.npmmirror.com/xmlbuilder/-/xmlbuilder-15.1.1.tgz#9dcdce49eea66d8d10b42cae94a79c3c8d0c2ec5"