weaver-work-cli 0.1.8 → 0.1.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +25 -17
- package/dist/cmd/action.js +76 -0
- package/dist/cmd/index.js +2 -0
- package/dist/cmd/refs/index.js +103 -0
- package/dist/cmd/register.js +31 -0
- package/dist/cmd/root.js +1 -0
- package/dist/cmd/setup/index.js +25 -5
- package/dist/cmd/skills/index.js +37 -5
- package/dist/core/connector.js +54 -0
- package/dist/core/context.js +2 -1
- package/dist/core/input.js +48 -0
- package/dist/core/output.js +298 -3
- package/dist/core/refs.js +435 -0
- package/dist/core/state.js +26 -0
- package/dist/internal/e10/auth/commands.js +34 -19
- package/dist/internal/e10/auth/session.js +74 -2
- package/dist/internal/e10/auth/xiaoe.js +359 -94
- package/dist/internal/e10/context.js +18 -6
- package/dist/internal/e10/request-runtime.js +8 -1
- package/dist/internal/skills/install.js +148 -28
- package/dist/internal/skills/reader.js +12 -9
- package/dist/shortcuts/blog/continuation.js +74 -0
- package/dist/shortcuts/blog/errors.js +60 -0
- package/dist/shortcuts/blog/host.js +175 -0
- package/dist/shortcuts/blog/index.js +324 -0
- package/dist/shortcuts/blog/manifest.js +415 -0
- package/dist/shortcuts/blog/operations/comment.js +125 -0
- package/dist/shortcuts/blog/operations/comments.js +31 -0
- package/dist/shortcuts/blog/operations/edit.js +131 -0
- package/dist/shortcuts/blog/operations/export.js +46 -0
- package/dist/shortcuts/blog/operations/like.js +80 -0
- package/dist/shortcuts/blog/operations/publish.js +157 -0
- package/dist/shortcuts/blog/operations/query-user.js +58 -0
- package/dist/shortcuts/blog/operations/query.js +96 -0
- package/dist/shortcuts/blog/operations/registry.js +54 -0
- package/dist/shortcuts/blog/operations/remind.js +176 -0
- package/dist/shortcuts/blog/operations/shared.js +330 -0
- package/dist/shortcuts/blog/operations/types.js +16 -0
- package/dist/shortcuts/blog/operations.js +9 -0
- package/dist/shortcuts/caizhilian/continuation.js +70 -0
- package/dist/shortcuts/caizhilian/errors.js +53 -0
- package/dist/shortcuts/caizhilian/host.js +190 -0
- package/dist/shortcuts/caizhilian/index.js +186 -0
- package/dist/shortcuts/caizhilian/manifest.js +42 -0
- package/dist/shortcuts/caizhilian/operations/api.js +801 -0
- package/dist/shortcuts/caizhilian/operations/confirm.js +75 -0
- package/dist/shortcuts/caizhilian/operations/files.js +306 -0
- package/dist/shortcuts/caizhilian/operations/form.js +170 -0
- package/dist/shortcuts/caizhilian/operations/handlers/collab.js +611 -0
- package/dist/shortcuts/caizhilian/operations/handlers/document.js +890 -0
- package/dist/shortcuts/caizhilian/operations/handlers/file-collection.js +1227 -0
- package/dist/shortcuts/caizhilian/operations/handlers/file-upload.js +192 -0
- package/dist/shortcuts/caizhilian/operations/handlers/fileops.js +570 -0
- package/dist/shortcuts/caizhilian/operations/handlers/folder.js +1024 -0
- package/dist/shortcuts/caizhilian/operations/handlers/search.js +318 -0
- package/dist/shortcuts/caizhilian/operations/handlers/setting-attach.js +294 -0
- package/dist/shortcuts/caizhilian/operations/handlers/setting-backup.js +423 -0
- package/dist/shortcuts/caizhilian/operations/handlers/setting-encrypt.js +238 -0
- package/dist/shortcuts/caizhilian/operations/handlers/setting-storage.js +364 -0
- package/dist/shortcuts/caizhilian/operations/handlers/system.js +106 -0
- package/dist/shortcuts/caizhilian/operations/registry.js +151 -0
- package/dist/shortcuts/caizhilian/operations/shared.js +408 -0
- package/dist/shortcuts/caizhilian/operations/specs.js +698 -0
- package/dist/shortcuts/caizhilian/operations/types.js +57 -0
- package/dist/shortcuts/caizhilian/operations.js +21 -0
- package/dist/shortcuts/contract/continuation.js +70 -0
- package/dist/shortcuts/contract/errors.js +62 -0
- package/dist/shortcuts/contract/host.js +205 -0
- package/dist/shortcuts/contract/index.js +318 -0
- package/dist/shortcuts/contract/manifest.js +596 -0
- package/dist/shortcuts/contract/operations/clause-reference.js +78 -0
- package/dist/shortcuts/contract/operations/form-info.js +371 -0
- package/dist/shortcuts/contract/operations/read.js +118 -0
- package/dist/shortcuts/contract/operations/registry.js +43 -0
- package/dist/shortcuts/contract/operations/request.js +300 -0
- package/dist/shortcuts/contract/operations/shared.js +133 -0
- package/dist/shortcuts/contract/operations/subject.js +157 -0
- package/dist/shortcuts/contract/operations/template.js +81 -0
- package/dist/shortcuts/contract/operations/types.js +7 -0
- package/dist/shortcuts/contract/operations/workflow.js +52 -0
- package/dist/shortcuts/contract/operations/write.js +131 -0
- package/dist/shortcuts/contract/operations.js +8 -0
- package/dist/shortcuts/hrm/index.js +83 -2
- package/dist/shortcuts/hrm/manifest.js +16 -9
- package/dist/shortcuts/hrm/operations/employee.js +160 -30
- package/dist/shortcuts/hrm/operations/org.js +17 -3
- package/dist/shortcuts/hrm/operations/position.js +18 -2
- package/dist/shortcuts/hrm/operations/registry.js +2 -0
- package/dist/shortcuts/hrm/operations/resolve.js +449 -0
- package/dist/shortcuts/index.js +5 -1
- package/dist/shortcuts/invoice/index.js +74 -36
- package/dist/shortcuts/invoice/manifest.js +674 -4
- package/dist/shortcuts/invoice/markdown.js +172 -0
- package/dist/shortcuts/invoice/operations/add.js +3 -3
- package/dist/shortcuts/invoice/operations/delete.js +2 -2
- package/dist/shortcuts/invoice/operations/get.js +10 -2
- package/dist/shortcuts/invoice/operations/import.js +2 -2
- package/dist/shortcuts/invoice/operations/registry.js +8 -1
- package/dist/shortcuts/invoice/operations/reim-auto.js +719 -0
- package/dist/shortcuts/invoice/operations/reim.js +85 -2
- package/dist/shortcuts/invoice/operations/shared.js +75 -8
- package/dist/shortcuts/invoice/operations/update.js +2 -2
- package/dist/shortcuts/invoice/operations/upload-and-validate.js +93 -0
- package/dist/shortcuts/invoice/operations/validate-preview.js +2 -1
- package/dist/shortcuts/invoice/projection.js +328 -0
- package/dist/shortcuts/meeting/host.js +18 -1
- package/dist/shortcuts/meeting/manifest.js +30 -18
- package/dist/shortcuts/meeting/operations/eb/catalog.js +390 -0
- package/dist/shortcuts/meeting/operations/eb/conflict.js +389 -0
- package/dist/shortcuts/meeting/operations/eb/factory.js +389 -0
- package/dist/shortcuts/meeting/operations/eb/index.js +22 -0
- package/dist/shortcuts/meeting/operations/env.js +8 -1
- package/dist/shortcuts/meeting/operations/registry.js +2 -0
- package/dist/shortcuts/meeting/operations/signs.js +216 -2
- package/dist/shortcuts/workflow/endpoints.js +2 -1
- package/dist/shortcuts/workflow/errors.js +8 -2
- package/dist/shortcuts/workflow/host.js +11 -4
- package/dist/shortcuts/workflow/operations/form.js +1016 -590
- package/dist/shortcuts/workflow/operations/read.js +913 -231
- package/dist/shortcuts/workflow/operations/shared.js +21 -0
- package/dist/shortcuts/workflow/operations/write.js +750 -52
- package/dist/shortcuts/workflow/operations.js +36 -10
- package/docs/_catalog.md +6 -0
- package/docs/agent-invoice.md +5 -1
- package/docs/agent-io-channel-design.md +468 -0
- package/docs/agent-skill-install.md +9 -4
- package/docs/blog.md +123 -0
- package/docs/caizhilian.md +304 -0
- package/docs/contract.md +91 -0
- package/docs/e10-auth.md +4 -2
- package/docs/hrm.md +53 -11
- package/docs/invoice.md +5 -1
- package/docs/meeting.md +1 -1
- package/docs/operation-manual.md +15 -3
- package/docs/skill-review-2026-09-19.md +2 -2
- package/package.json +1 -1
- package/scripts/package-skill.mjs +32 -20
- package/scripts/xiaoe_env.py +118 -0
- package/skill-template/business-info.json +113 -14
- package/skill-template/domains/blog.md +24 -0
- package/skill-template/domains/caizhilian.md +22 -0
- package/skill-template/domains/hrm.md +2 -1
- package/skill-template/domains/jinchengda.md +23 -0
- package/skill-template/domains/meeting.md +1 -1
- package/skill-template/domains/workflow.md +1 -1
- package/skill-template/skill-template.md +1 -1
- package/skills/weaver-e10-blog/SKILL.md +111 -0
- package/skills/weaver-e10-blog/references/blog-comment.md +51 -0
- package/skills/weaver-e10-blog/references/blog-comments.md +39 -0
- package/skills/weaver-e10-blog/references/blog-default-permission.md +38 -0
- package/skills/weaver-e10-blog/references/blog-disabled-capabilities.md +11 -0
- package/skills/weaver-e10-blog/references/blog-edit.md +51 -0
- package/skills/weaver-e10-blog/references/blog-export.md +42 -0
- package/skills/weaver-e10-blog/references/blog-like.md +50 -0
- package/skills/weaver-e10-blog/references/blog-publish.md +52 -0
- package/skills/weaver-e10-blog/references/blog-query-user.md +45 -0
- package/skills/weaver-e10-blog/references/blog-query.md +49 -0
- package/skills/weaver-e10-blog/references/blog-remind.md +51 -0
- package/skills/weaver-e10-blog/references/blog-resolve-users.md +38 -0
- package/skills/weaver-e10-blog/references/source-manifest.json +1540 -0
- package/skills/weaver-e10-caizhilian/SKILL.md +217 -0
- package/skills/weaver-e10-caizhilian/references/agent-entry.md +106 -0
- package/skills/weaver-e10-caizhilian/references/collaboration.md +112 -0
- package/skills/weaver-e10-caizhilian/references/document.md +111 -0
- package/skills/weaver-e10-caizhilian/references/file-collection.md +173 -0
- package/skills/weaver-e10-caizhilian/references/file-upload.md +309 -0
- package/skills/weaver-e10-caizhilian/references/files.md +120 -0
- package/skills/weaver-e10-caizhilian/references/folder.md +122 -0
- package/skills/weaver-e10-caizhilian/references/org-browser.md +104 -0
- package/skills/weaver-e10-caizhilian/references/setting-attach.md +440 -0
- package/skills/weaver-e10-caizhilian/references/setting-backup.md +372 -0
- package/skills/weaver-e10-caizhilian/references/setting-encrypt.md +399 -0
- package/skills/weaver-e10-caizhilian/references/setting-storage.md +603 -0
- package/skills/weaver-e10-caizhilian/references/source-manifest.json +5694 -0
- package/skills/weaver-e10-caizhilian/references/withheld.md +93 -0
- package/skills/weaver-e10-caizhilian/references/write-protocol.md +120 -0
- package/skills/weaver-e10-calendar/SKILL.md +4 -3
- package/skills/weaver-e10-ebuilder-form/SKILL.md +4 -9
- package/skills/weaver-e10-ebuilder-form/references/context-routing.md +0 -9
- package/skills/weaver-e10-ebuilder-form/references/custom-api.md +1 -5
- package/skills/weaver-e10-ebuilder-form/references/fields-browser.md +1 -5
- package/skills/weaver-e10-ebuilder-form/references/list-nlist.md +1 -5
- package/skills/weaver-e10-ebuilder-form/references/openapi-read.md +1 -5
- package/skills/weaver-e10-ebuilder-form/references/openapi-write.md +1 -5
- package/skills/weaver-e10-esb/SKILL.md +2 -2
- package/skills/weaver-e10-esb/references/source-manifest.json +9 -9
- package/skills/weaver-e10-hrm/SKILL.md +104 -9
- package/skills/weaver-e10-hrm/references/employee.md +89 -15
- package/skills/weaver-e10-hrm/references/org.md +114 -5
- package/skills/weaver-e10-hrm/references/position.md +14 -7
- package/skills/weaver-e10-hrm/references/source-manifest.json +1 -1
- package/skills/weaver-e10-jinchengda/SKILL.md +167 -0
- package/skills/weaver-e10-jinchengda/references/contract-agent-entry.md +82 -0
- package/skills/weaver-e10-jinchengda/references/contract-clause-recommender.md +69 -0
- package/skills/weaver-e10-jinchengda/references/contract-clause-reference-save.md +78 -0
- package/skills/weaver-e10-jinchengda/references/contract-disabled-capabilities.md +27 -0
- package/skills/weaver-e10-jinchengda/references/contract-request-status.md +71 -0
- package/skills/weaver-e10-jinchengda/references/contract-request-write.md +94 -0
- package/skills/weaver-e10-jinchengda/references/contract-signing-subjects.md +89 -0
- package/skills/weaver-e10-jinchengda/references/contract-subject-create.md +77 -0
- package/skills/weaver-e10-jinchengda/references/contract-template-selector.md +66 -0
- package/skills/weaver-e10-jinchengda/references/contract-workflow-discovery.md +94 -0
- package/skills/weaver-e10-jinchengda/references/source-manifest.json +259 -0
- package/skills/weaver-e10-jiuchuanhui/SKILL.md +5 -11
- package/skills/weaver-e10-jucailin/SKILL.md +4 -3
- package/skills/weaver-e10-mail/SKILL.md +4 -11
- package/skills/weaver-e10-meeting/SKILL.md +66 -32
- package/skills/weaver-e10-meeting/references/meeting-change.md +5 -2
- package/skills/weaver-e10-meeting/references/meeting-create.md +2 -1
- package/skills/weaver-e10-meeting/references/meeting-eb.md +114 -0
- package/skills/weaver-e10-meeting/references/meeting-lifecycle.md +9 -8
- package/skills/weaver-e10-meeting/references/meeting-receipts-signs.md +35 -7
- package/skills/weaver-e10-meeting/references/meeting-update.md +1 -1
- package/skills/weaver-e10-okr/SKILL.md +6 -11
- package/skills/weaver-e10-okr/references/source-manifest.json +3 -3
- package/skills/weaver-e10-plan/SKILL.md +3 -3
- package/skills/weaver-e10-plan/references/plan-collect-and-compose.md +1 -1
- package/skills/weaver-e10-plan/references/plan-overview-and-routing.md +1 -1
- package/skills/weaver-e10-plan/references/source-manifest.json +13 -13
- package/skills/weaver-e10-qiyecheng/SKILL.md +4 -10
- package/skills/weaver-e10-qiyecheng/references/source-manifest.json +9 -9
- package/skills/weaver-e10-shared/SKILL.md +42 -34
- package/skills/weaver-e10-shared/references/e10-auth-and-session.md +16 -43
- package/skills/weaver-e10-shared/references/json-output-contract.md +20 -11
- package/skills/weaver-e10-shared/references/non-interactive-environment.md +21 -14
- package/skills/weaver-e10-shijingran/SKILL.md +2 -1
- package/skills/weaver-e10-shijingran/references/source-manifest.json +9 -9
- package/skills/weaver-e10-skill-maker/SKILL.md +4 -10
- package/skills/weaver-e10-skill-maker/references/business-skill-generation.md +5 -3
- package/skills/weaver-e10-skill-maker/references/module-cli-generation.md +12 -27
- package/skills/weaver-e10-skill-maker/references/module-gap-audit-and-repair.md +17 -5
- package/skills/weaver-e10-skill-maker/references/source-update-detection.md +4 -27
- package/skills/weaver-e10-skill-maker/references/weaver-skill-style.md +1 -1
- package/skills/weaver-e10-wenshuding/SKILL.md +5 -16
- package/skills/weaver-e10-wenshuding/references/source-manifest.json +7 -7
- package/skills/weaver-e10-workflow/SKILL.md +41 -46
- package/skills/weaver-e10-workflow/references/source-manifest.json +39 -75
- package/skills/weaver-e10-workflow/references/workflow-batch.md +90 -29
- package/skills/weaver-e10-workflow/references/workflow-create.md +83 -109
- package/skills/weaver-e10-workflow/references/workflow-memory.md +19 -9
- package/skills/weaver-e10-workflow/references/workflow-operate.md +2 -2
- package/skills/weaver-e10-workflow/references/workflow-query.md +40 -27
- package/skills/weaver-e10-workflow/references/workflow-share.md +18 -2
- package/skills/weaver-e10-workflow/references/workflow-view.md +3 -4
- package/skills/weaver-e10-yepiaotong/SKILL.md +74 -39
- package/skills/weaver-e10-yepiaotong/references/invoice-detail.md +22 -1
- package/skills/weaver-e10-yepiaotong/references/invoice-enterprise-list.md +3 -1
- package/skills/weaver-e10-yepiaotong/references/invoice-output-view.md +135 -0
- package/skills/weaver-e10-yepiaotong/references/invoice-personal-list.md +15 -3
- package/skills/weaver-e10-yepiaotong/references/invoice-reim.md +1 -1
- package/skills/weaver-e10-yepiaotong/references/invoice-summarize.py +217 -0
- package/skills/weaver-e10-yepiaotong/references/invoice-upload-and-validate.md +88 -0
- package/skills/weaver-e10-yepiaotong/references/invoice-validation-preview.md +7 -2
- package/skills/weaver-e10-yepiaotong/references/reim-api-reference.md +89 -9
- package/skills/weaver-e10-yepiaotong/references/reim-examples.md +1 -0
- package/skills/weaver-e10-yepiaotong/references/reim-expense-subject-rules.md +70 -49
- package/skills/weaver-e10-yepiaotong/references/reim-fast-path.md +119 -0
- package/skills/weaver-e10-yepiaotong/references/reim-form-fill-rules.md +55 -36
- package/skills/weaver-e10-yepiaotong/references/reim-matching-rules.md +4 -0
- package/skills/weaver-e10-yepiaotong/references/reim-phone-subsidy-rules.md +149 -0
- package/skills/weaver-e10-yepiaotong/references/reim-workflow.md +125 -5
- package/skills/weaver-e10-yepiaotong/references/source-manifest.json +430 -63
- package/skills/weaver-e10-yimiaoban/SKILL.md +4 -12
- package/skills/weaver-e10-yimiaoban/references/source-manifest.json +3 -3
- package/skills/weaver-e10-ziguanjia/SKILL.md +2 -1
- package/skills/weaver-e10-ziguanjia/references/ziguanjia-agent-entry.md +3 -3
- package/tools/weaver-skill-detector-1.0.13/SKILL.md +9 -9
- package/tools/weaver-skill-detector-1.0.13/references/checklist.md +3 -3
- package/tools/weaver-skill-detector-1.0.13/scripts/__pycache__/validate_skill.cpython-313.pyc +0 -0
- package/tools/weaver-skill-detector-1.0.13/scripts/validate_skill.py +98 -91
- package/scripts/sync-connector-skills.mjs +0 -172
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* caizhilian.file-upload — 文件上传(本地文件上传到文件服务)
|
|
3
|
+
*
|
|
4
|
+
* 覆盖本地文件上传到 E10 文件服务的完整流程:
|
|
5
|
+
* - contract: 获取上传接口合约
|
|
6
|
+
* - prepare: 本地文件校验与元数据准备
|
|
7
|
+
* - upload: 上传文件并获取 fileId
|
|
8
|
+
*
|
|
9
|
+
* 接口:
|
|
10
|
+
* - 预检查:POST /api/file/preUploadCheck?sf_request_type=ajax
|
|
11
|
+
* - 上传:POST /api/file/module/upload?sf_request_type=ajax
|
|
12
|
+
*/
|
|
13
|
+
import { CaizhilianCliError, caizhilianValidationError } from '../../errors.js';
|
|
14
|
+
import { caizhilianSuccess } from '../types.js';
|
|
15
|
+
import { requireNonEmpty } from '../shared.js';
|
|
16
|
+
import { createHash } from 'node:crypto';
|
|
17
|
+
import { readFileSync, statSync } from 'node:fs';
|
|
18
|
+
import { basename, extname } from 'node:path';
|
|
19
|
+
const ACTION = 'caizhilian.file-upload';
|
|
20
|
+
// ── 接口路径 ──────────────────────────────────────────────
|
|
21
|
+
const PRE_UPLOAD_CHECK_PATH = '/api/file/preUploadCheck?sf_request_type=ajax';
|
|
22
|
+
const UPLOAD_PATH = '/api/file/module/upload?sf_request_type=ajax';
|
|
23
|
+
// ── 辅助函数 ──────────────────────────────────────────────
|
|
24
|
+
function asRecord(value) {
|
|
25
|
+
return value && typeof value === 'object' && !Array.isArray(value) ? value : {};
|
|
26
|
+
}
|
|
27
|
+
function isPlainObject(value) {
|
|
28
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
29
|
+
}
|
|
30
|
+
function md5File(filePath) {
|
|
31
|
+
const content = readFileSync(filePath);
|
|
32
|
+
return createHash('md5').update(content).digest('hex');
|
|
33
|
+
}
|
|
34
|
+
function sha256File(filePath) {
|
|
35
|
+
const content = readFileSync(filePath);
|
|
36
|
+
return createHash('sha256').update(content).digest('hex');
|
|
37
|
+
}
|
|
38
|
+
// ── 获取上传合约 ──────────────────────────────────────────
|
|
39
|
+
async function getContract(args, env) {
|
|
40
|
+
return caizhilianSuccess(ACTION, {
|
|
41
|
+
contract: {
|
|
42
|
+
version: 'agent_callable_interface_contract.v1',
|
|
43
|
+
actions: ['contract', 'prepare', 'upload'],
|
|
44
|
+
required: {
|
|
45
|
+
prepare: ['file_path', 'module'],
|
|
46
|
+
upload: ['file_path', 'module', 'user_confirmed'],
|
|
47
|
+
},
|
|
48
|
+
optional: {
|
|
49
|
+
prepare: ['context_file'],
|
|
50
|
+
upload: ['context_file', 'login_mode'],
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
// ── 准备上传(prepare/apply)──────────────────────────────────────
|
|
56
|
+
async function prepareUpload(args, env) {
|
|
57
|
+
const filePath = requireNonEmpty(args.file_path, 'file_path');
|
|
58
|
+
const module = requireNonEmpty(args.module, 'module');
|
|
59
|
+
// 校验文件存在
|
|
60
|
+
let stat;
|
|
61
|
+
try {
|
|
62
|
+
stat = statSync(filePath);
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
throw caizhilianValidationError('file_not_found', `文件不存在: ${filePath}`);
|
|
66
|
+
}
|
|
67
|
+
if (!stat.isFile()) {
|
|
68
|
+
throw caizhilianValidationError('file_not_regular', `不是普通文件: ${filePath}`);
|
|
69
|
+
}
|
|
70
|
+
// 计算元数据
|
|
71
|
+
const fileName = basename(filePath);
|
|
72
|
+
const ext = extname(filePath).slice(1).toLowerCase();
|
|
73
|
+
const size = stat.size;
|
|
74
|
+
const md5 = md5File(filePath);
|
|
75
|
+
const sha256 = sha256File(filePath);
|
|
76
|
+
// 签发 continuation
|
|
77
|
+
const continuation = await env.continuation.issue({
|
|
78
|
+
operation: 'caizhilian.file-upload.upload.apply',
|
|
79
|
+
filePath,
|
|
80
|
+
module,
|
|
81
|
+
fileName,
|
|
82
|
+
ext,
|
|
83
|
+
size,
|
|
84
|
+
md5,
|
|
85
|
+
sha256,
|
|
86
|
+
});
|
|
87
|
+
return caizhilianSuccess('caizhilian.file-upload.prepare', {
|
|
88
|
+
file_path: filePath,
|
|
89
|
+
file_name: fileName,
|
|
90
|
+
ext,
|
|
91
|
+
size,
|
|
92
|
+
md5,
|
|
93
|
+
sha256,
|
|
94
|
+
module,
|
|
95
|
+
continuation,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
async function uploadApply(args, env, lease) {
|
|
99
|
+
const filePath = lease.payload?.filePath;
|
|
100
|
+
const module = lease.payload?.module;
|
|
101
|
+
const fileName = lease.payload?.fileName;
|
|
102
|
+
const ext = lease.payload?.ext;
|
|
103
|
+
const size = lease.payload?.size;
|
|
104
|
+
const md5 = lease.payload?.md5;
|
|
105
|
+
const sha256 = lease.payload?.sha256;
|
|
106
|
+
// 预检查
|
|
107
|
+
const preCheckResponse = await env.host.request({
|
|
108
|
+
method: 'POST',
|
|
109
|
+
path: PRE_UPLOAD_CHECK_PATH,
|
|
110
|
+
body: {
|
|
111
|
+
fileName,
|
|
112
|
+
fileSize: size,
|
|
113
|
+
module,
|
|
114
|
+
md5,
|
|
115
|
+
},
|
|
116
|
+
operation: 'caizhilian.file-upload.upload.apply',
|
|
117
|
+
});
|
|
118
|
+
const preCheckData = asRecord(preCheckResponse);
|
|
119
|
+
if (!preCheckData.status && !preCheckData.success) {
|
|
120
|
+
throw new CaizhilianCliError('api', 'business_error', String(preCheckData.msg || preCheckData.message || '预检查失败'), {
|
|
121
|
+
code: preCheckData.code ?? preCheckData.status,
|
|
122
|
+
details: { action: 'caizhilian.file-upload.upload.apply', message: String(preCheckData.msg || preCheckData.message || '预检查失败') },
|
|
123
|
+
exitCode: 1,
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
const preCheckResult = asRecord(preCheckData.data);
|
|
127
|
+
// 判断上传策略
|
|
128
|
+
const uploadType = preCheckResult.uploadType || 'common';
|
|
129
|
+
const preUploadId = preCheckResult.preUploadId;
|
|
130
|
+
// 如果是 second 策略,直接返回已有 file ID
|
|
131
|
+
if (uploadType === 'second') {
|
|
132
|
+
const fileId = preCheckResult.fileId || preCheckResult.fileid || preCheckResult.uploadModuleDto?.fileObj?.fileId;
|
|
133
|
+
if (!fileId) {
|
|
134
|
+
throw new CaizhilianCliError('api', 'business_error', 'second 策略未返回 file ID', {
|
|
135
|
+
details: { action: 'caizhilian.file-upload.upload.apply' },
|
|
136
|
+
exitCode: 1,
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
return caizhilianSuccess('caizhilian.file-upload.upload.apply', {
|
|
140
|
+
file_id: String(fileId),
|
|
141
|
+
file_name: fileName,
|
|
142
|
+
size,
|
|
143
|
+
ext,
|
|
144
|
+
upload_type: uploadType,
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
// common/chunk 策略:上传文件
|
|
148
|
+
const fileContent = readFileSync(filePath);
|
|
149
|
+
const formData = new FormData();
|
|
150
|
+
formData.append('file', new Blob([fileContent]), fileName);
|
|
151
|
+
formData.append('preUploadId', preUploadId || '');
|
|
152
|
+
formData.append('module', module);
|
|
153
|
+
const uploadResponse = await env.host.request({
|
|
154
|
+
method: 'POST',
|
|
155
|
+
path: UPLOAD_PATH,
|
|
156
|
+
body: formData,
|
|
157
|
+
operation: 'caizhilian.file-upload.upload.apply',
|
|
158
|
+
});
|
|
159
|
+
const uploadData = asRecord(uploadResponse);
|
|
160
|
+
if (!uploadData.status && !uploadData.success) {
|
|
161
|
+
throw new CaizhilianCliError('api', 'business_error', String(uploadData.msg || uploadData.message || '上传失败'), {
|
|
162
|
+
code: uploadData.code ?? uploadData.status,
|
|
163
|
+
details: { action: 'caizhilian.file-upload.upload.apply', message: String(uploadData.msg || uploadData.message || '上传失败') },
|
|
164
|
+
exitCode: 1,
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
const uploadResult = asRecord(uploadData.data);
|
|
168
|
+
const fileId = uploadResult.fileId || uploadResult.fileid || '';
|
|
169
|
+
if (!fileId) {
|
|
170
|
+
throw new CaizhilianCliError('api', 'business_error', '上传未返回 file ID', {
|
|
171
|
+
details: { action: 'caizhilian.file-upload.upload.apply' },
|
|
172
|
+
exitCode: 1,
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
return caizhilianSuccess('caizhilian.file-upload.upload.apply', {
|
|
176
|
+
file_id: String(fileId),
|
|
177
|
+
file_name: fileName,
|
|
178
|
+
size,
|
|
179
|
+
ext,
|
|
180
|
+
upload_type: uploadType,
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
// ── 处理器汇总 ────────────────────────────────────────────
|
|
184
|
+
export const caizhilianFileUploadHandlers = {
|
|
185
|
+
'caizhilian.file-upload.contract': { execute: getContract },
|
|
186
|
+
'caizhilian.file-upload.prepare': { execute: prepareUpload },
|
|
187
|
+
'caizhilian.file-upload.upload': {
|
|
188
|
+
prepare: prepareUpload,
|
|
189
|
+
apply: uploadApply,
|
|
190
|
+
targetKeys: ['file_path', 'module'],
|
|
191
|
+
},
|
|
192
|
+
};
|