const fs = require("node:fs"); const path = require("node:path"); function createModelHandlers({ callServer, fetchImpl = fetch }) { return { list(request) { return callServer({ type: "listModels", folder: `${request.deviceId}/model_config` }, request.credentials); }, async upload(request) { if (!request.sourcePath || !request.fileName) throw new Error("请先选择模型文件"); const sourcePath = path.resolve(request.sourcePath); const fileName = path.basename(request.fileName); const modelName = path.basename(request.modelName || fileName); await fs.promises.access(sourcePath, fs.constants.R_OK); const issued = await callServer({ type: "issueModelUpload", deviceId: request.deviceId, fileName, modelName, overwrite: request.overwrite === true }, request.credentials); const form = new FormData(); form.append("file", new Blob([await fs.promises.readFile(sourcePath)]), fileName); const response = await fetchImpl(issued.uploadMetadata.url, { method: "POST", body: form }); if (![200, 204].includes(response.status)) throw new Error(`模型上传失败: HTTP ${response.status}`); return { success: true, fileID: issued.fileID, fileName: issued.fileName, originalFileName: issued.originalFileName }; }, delete(request) { return callServer({ type: "deleteModel", fileID: request.fileID }, request.credentials); } }; } module.exports = { createModelHandlers };