target-supabase-sdk 0.1.8 → 0.1.9
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 +8 -6
- package/dist/auth/auth.api.d.ts.map +1 -1
- package/dist/auth/auth.api.js +2 -1
- package/dist/auth/auth.api.js.map +1 -1
- package/dist/command/command.api.d.ts +43 -0
- package/dist/command/command.api.d.ts.map +1 -0
- package/dist/command/command.api.js +58 -0
- package/dist/command/command.api.js.map +1 -0
- package/dist/command/command.interface.d.ts +14 -0
- package/dist/command/command.interface.d.ts.map +1 -0
- package/dist/command/command.interface.js +9 -0
- package/dist/command/command.interface.js.map +1 -0
- package/dist/core.api.d.ts +70 -6
- package/dist/core.api.d.ts.map +1 -1
- package/dist/core.api.js +191 -13
- package/dist/core.api.js.map +1 -1
- package/dist/file/file-manager.d.ts +1 -1
- package/dist/file/file-manager.d.ts.map +1 -1
- package/dist/file/file-manager.js +1 -1
- package/dist/file/file-manager.js.map +1 -1
- package/dist/index.d.ts +9 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -1
- package/dist/index.js.map +1 -1
- package/dist/node/node-manager.d.ts +48 -0
- package/dist/node/node-manager.d.ts.map +1 -0
- package/dist/node/node-manager.js +619 -0
- package/dist/node/node-manager.js.map +1 -0
- package/dist/node/node-task.preset.d.ts +1 -0
- package/dist/node/node-task.preset.d.ts.map +1 -0
- package/dist/node/node-task.preset.js +14 -0
- package/dist/node/node-task.preset.js.map +1 -0
- package/dist/node/node.api.d.ts +67 -31
- package/dist/node/node.api.d.ts.map +1 -1
- package/dist/node/node.api.js +65 -102
- package/dist/node/node.api.js.map +1 -1
- package/dist/node/node.interface.d.ts +7 -0
- package/dist/node/node.interface.d.ts.map +1 -1
- package/dist/node/node.interface.js +2 -0
- package/dist/node/node.interface.js.map +1 -1
- package/dist/node/node.utils.d.ts +5 -0
- package/dist/node/node.utils.d.ts.map +1 -0
- package/dist/node/node.utils.js +36 -0
- package/dist/node/node.utils.js.map +1 -0
- package/dist/parcel/parcel-manager.d.ts +1 -1
- package/dist/parcel/parcel-manager.d.ts.map +1 -1
- package/dist/parcel/parcel-manager.js +1 -1
- package/dist/parcel/parcel-manager.js.map +1 -1
- package/dist/repo/repo-context.utils.d.ts +24 -0
- package/dist/repo/repo-context.utils.d.ts.map +1 -0
- package/dist/repo/repo-context.utils.js +81 -0
- package/dist/repo/repo-context.utils.js.map +1 -0
- package/dist/repo/repo-manager.d.ts +31 -0
- package/dist/repo/repo-manager.d.ts.map +1 -0
- package/dist/repo/repo-manager.js +156 -0
- package/dist/repo/repo-manager.js.map +1 -0
- package/dist/repo/repo.api.d.ts +16 -0
- package/dist/repo/repo.api.d.ts.map +1 -0
- package/dist/repo/repo.api.js +40 -0
- package/dist/repo/repo.api.js.map +1 -0
- package/dist/repo/repo.interface.d.ts +12 -5
- package/dist/repo/repo.interface.d.ts.map +1 -1
- package/dist/repo/repo.interface.js +2 -2
- package/dist/repo/repo.interface.js.map +1 -1
- package/dist/repo/repo.script-loader.d.ts +19 -0
- package/dist/repo/repo.script-loader.d.ts.map +1 -0
- package/dist/repo/repo.script-loader.js +108 -0
- package/dist/repo/repo.script-loader.js.map +1 -0
- package/dist/shared/log/create-api-logger.d.ts +17 -0
- package/dist/shared/log/create-api-logger.d.ts.map +1 -0
- package/dist/shared/log/create-api-logger.js +15 -0
- package/dist/shared/log/create-api-logger.js.map +1 -0
- package/dist/shared/log/log-manager.d.ts +114 -0
- package/dist/shared/log/log-manager.d.ts.map +1 -0
- package/dist/shared/log/log-manager.js +218 -0
- package/dist/shared/log/log-manager.js.map +1 -0
- package/dist/shared/utils/config-path.utils.d.ts +38 -0
- package/dist/shared/utils/config-path.utils.d.ts.map +1 -0
- package/dist/shared/utils/config-path.utils.js +85 -0
- package/dist/shared/utils/config-path.utils.js.map +1 -0
- package/dist/shared/utils/error.utils.d.ts +11 -0
- package/dist/shared/utils/error.utils.d.ts.map +1 -0
- package/dist/shared/utils/error.utils.js +15 -0
- package/dist/shared/utils/error.utils.js.map +1 -0
- package/dist/shared/utils/id.utils.d.ts +3 -0
- package/dist/shared/utils/id.utils.d.ts.map +1 -0
- package/dist/shared/utils/id.utils.js +5 -0
- package/dist/shared/utils/id.utils.js.map +1 -0
- package/dist/supabase.js +1 -1
- package/dist/supabase.js.map +1 -1
- package/dist/task/local-task-registry.d.ts +27 -0
- package/dist/task/local-task-registry.d.ts.map +1 -0
- package/dist/task/local-task-registry.js +153 -0
- package/dist/task/local-task-registry.js.map +1 -0
- package/dist/task/task-manager.d.ts +52 -0
- package/dist/task/task-manager.d.ts.map +1 -0
- package/dist/task/task-manager.js +217 -0
- package/dist/task/task-manager.js.map +1 -0
- package/dist/task/task-repo-context.d.ts +95 -0
- package/dist/task/task-repo-context.d.ts.map +1 -0
- package/dist/task/task-repo-context.js +12 -0
- package/dist/task/task-repo-context.js.map +1 -0
- package/dist/task/task.api.d.ts +240 -0
- package/dist/task/task.api.d.ts.map +1 -1
- package/dist/task/task.api.js +350 -1
- package/dist/task/task.api.js.map +1 -1
- package/dist/task/task.interface.d.ts +9 -2
- package/dist/task/task.interface.d.ts.map +1 -1
- package/dist/task/task.interface.js +10 -0
- package/dist/task/task.interface.js.map +1 -1
- package/package.json +10 -3
- package/src/auth/auth.api.ts +3 -1
- package/src/command/command.api.ts +88 -0
- package/src/command/command.interface.ts +17 -0
- package/src/core.api.ts +305 -26
- package/src/file/file-manager.ts +1 -1
- package/src/index.ts +18 -3
- package/src/node/node-manager.ts +673 -0
- package/src/node/node-task.preset.ts +13 -0
- package/src/node/node.api.ts +95 -117
- package/src/node/node.interface.ts +8 -0
- package/src/node/node.utils.ts +36 -0
- package/src/parcel/parcel-manager.ts +1 -1
- package/src/repo/repo-context.utils.ts +111 -0
- package/src/repo/repo-manager.ts +217 -0
- package/src/repo/repo.api.ts +50 -0
- package/src/repo/repo.interface.ts +13 -5
- package/src/repo/repo.script-loader.ts +140 -0
- package/src/shared/log/create-api-logger.ts +25 -0
- package/src/shared/log/log-manager.ts +340 -0
- package/src/shared/utils/config-path.utils.ts +104 -0
- package/src/shared/utils/error.utils.ts +15 -0
- package/src/shared/utils/id.utils.ts +4 -0
- package/src/supabase.ts +1 -1
- package/src/task/local-task-registry.ts +195 -0
- package/src/task/task-manager.ts +312 -0
- package/src/task/task-repo-context.ts +103 -0
- package/src/task/task.api.ts +429 -0
- package/src/task/task.interface.ts +10 -2
- package/dist/task/task-node-manager.d.ts +0 -1
- package/dist/task/task-node-manager.d.ts.map +0 -1
- package/dist/task/task-node-manager.js +0 -2
- package/dist/task/task-node-manager.js.map +0 -1
- package/src/task/task-node-manager.ts +0 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { LoggerWithContext } from "../shared/log/log-manager";
|
|
2
|
+
import { ResultCode, Task } from "./task.interface";
|
|
3
|
+
import { ExecutableTaskFn } from "./task-repo-context";
|
|
4
|
+
export type { TaskFn, TaskRepoContext, TaskRunResult, ExecutableTaskFn, TaskRepoScriptDetails, TaskRepoScriptRecord, TaskRunnerRootConfig, TaskLocalPackageConfig, BootstrapLocalTasksResult, BootstrapLocalTasksStatus, } from "./task-repo-context";
|
|
5
|
+
export { TASK_REPO_SCRIPT_CATEGORY, TASK_RUNNER_CONFIG_DIR, TASK_RUNNER_ROOT_CONFIG_FILENAME, TASK_RUNNER_ROOT_CONFIG_RELATIVE_PATH, TASK_RUNNER_ROOT_CONFIG_LEGACY_RELATIVE_PATH, TASK_LOCAL_PACKAGE_CONFIG_FILENAME, } from "./task-repo-context";
|
|
6
|
+
import { bootstrapLocalTasks, BootstrapLocalTasksOptions, getRegisteredLocalTaskTypeKeys } from "./local-task-registry";
|
|
7
|
+
import type { BootstrapLocalTasksResult } from "./task-repo-context";
|
|
8
|
+
export type PrepareTaskFailureReason = "MISSING_PARAMS" | "REPO_LOAD_FAILED" | "PARAMS_VALIDATION_FAILED" | "TASK_TYPE_KEY_MISMATCH";
|
|
9
|
+
export interface PrepareTaskResponse {
|
|
10
|
+
isSuccess: boolean;
|
|
11
|
+
taskFn: ExecutableTaskFn | null;
|
|
12
|
+
code?: ResultCode;
|
|
13
|
+
message?: string;
|
|
14
|
+
reason?: PrepareTaskFailureReason;
|
|
15
|
+
/** Pipeline step for log aggregation */
|
|
16
|
+
step?: string;
|
|
17
|
+
}
|
|
18
|
+
export interface PrepareTaskParams {
|
|
19
|
+
logger: LoggerWithContext;
|
|
20
|
+
task: Task;
|
|
21
|
+
}
|
|
22
|
+
export interface RegisterTasksOptions {
|
|
23
|
+
logger: LoggerWithContext;
|
|
24
|
+
local?: BootstrapLocalTasksOptions;
|
|
25
|
+
/** When `true` (default), union local keys with remote `Repo.value` from Supabase. */
|
|
26
|
+
includeRemote?: boolean;
|
|
27
|
+
}
|
|
28
|
+
export interface RegisterTasksResult {
|
|
29
|
+
availableTaskList: string[];
|
|
30
|
+
local: BootstrapLocalTasksResult;
|
|
31
|
+
remote: {
|
|
32
|
+
values: string[];
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Worker startup: discover local task packages + remote Repo rows, merge into `availableTaskList`.
|
|
37
|
+
*
|
|
38
|
+
* - Local: {@link bootstrapLocalTasks} → registers modules in {@link RepoManager}
|
|
39
|
+
* - Remote: {@link getScanRemoteRepoValues} with {@link TASK_REPO_USAGE}
|
|
40
|
+
* - Merge: union of both; execution still prefers local registry in {@link RepoManager.getRepoContext}
|
|
41
|
+
*
|
|
42
|
+
* @throws When merged list is empty (no task types to claim).
|
|
43
|
+
*/
|
|
44
|
+
declare function registerTasks({ logger, local: localOptions, includeRemote, }: RegisterTasksOptions): Promise<RegisterTasksResult>;
|
|
45
|
+
declare const TaskManager: {
|
|
46
|
+
registerTasks: typeof registerTasks;
|
|
47
|
+
prepareTask: ({ logger, task }: PrepareTaskParams) => Promise<PrepareTaskResponse>;
|
|
48
|
+
bootstrapLocalTasks: typeof bootstrapLocalTasks;
|
|
49
|
+
getRegisteredLocalTaskTypeKeys: typeof getRegisteredLocalTaskTypeKeys;
|
|
50
|
+
};
|
|
51
|
+
export { TaskManager };
|
|
52
|
+
//# sourceMappingURL=task-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-manager.d.ts","sourceRoot":"","sources":["../../src/task/task-manager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAA0C,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE/F,YAAY,EACR,MAAM,EACN,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,EACtB,yBAAyB,EACzB,yBAAyB,GAC5B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACH,yBAAyB,EACzB,sBAAsB,EACtB,gCAAgC,EAChC,qCAAqC,EACrC,4CAA4C,EAC5C,kCAAkC,GACrC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACH,mBAAmB,EACnB,0BAA0B,EAC1B,8BAA8B,EACjC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAErE,MAAM,MAAM,wBAAwB,GAC9B,gBAAgB,GAChB,kBAAkB,GAClB,0BAA0B,GAC1B,wBAAwB,CAAC;AAE/B,MAAM,WAAW,mBAAmB;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAChC,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,wBAAwB,CAAC;IAClC,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAC9B,MAAM,EAAE,iBAAiB,CAAC;IAC1B,IAAI,EAAE,IAAI,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACjC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,KAAK,CAAC,EAAE,0BAA0B,CAAC;IACnC,sFAAsF;IACtF,aAAa,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAChC,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,KAAK,EAAE,yBAAyB,CAAC;IACjC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CAChC;AAmCD;;;;;;;;GAQG;AACH,iBAAe,aAAa,CAAC,EACzB,MAAM,EACN,KAAK,EAAE,YAAY,EACnB,aAAoB,GACvB,EAAE,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA0CrD;AAoJD,QAAA,MAAM,WAAW;;oCA5G4B,iBAAiB,KAAG,OAAO,CAAC,mBAAmB,CAAC;;;CAiH5F,CAAC;AAEF,OAAO,EAAE,WAAW,EAAE,CAAC"}
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import { RepoManager } from "../repo/repo-manager";
|
|
2
|
+
import { getScanRemoteRepoValues } from "../repo/repo.api";
|
|
3
|
+
import { TASK_REPO_USAGE } from "../repo/repo.interface";
|
|
4
|
+
import { ResultCode } from "./task.interface";
|
|
5
|
+
export { TASK_REPO_SCRIPT_CATEGORY, TASK_RUNNER_CONFIG_DIR, TASK_RUNNER_ROOT_CONFIG_FILENAME, TASK_RUNNER_ROOT_CONFIG_RELATIVE_PATH, TASK_RUNNER_ROOT_CONFIG_LEGACY_RELATIVE_PATH, TASK_LOCAL_PACKAGE_CONFIG_FILENAME, } from "./task-repo-context";
|
|
6
|
+
import { bootstrapLocalTasks, getRegisteredLocalTaskTypeKeys, } from "./local-task-registry";
|
|
7
|
+
function logLocalBootstrap(logger, bootstrap) {
|
|
8
|
+
switch (bootstrap.status) {
|
|
9
|
+
case "not_configured":
|
|
10
|
+
logger.info("未找到本地任務配置,跳過本地註冊", {
|
|
11
|
+
topic: "task",
|
|
12
|
+
context: { message: bootstrap.message },
|
|
13
|
+
});
|
|
14
|
+
break;
|
|
15
|
+
case "failed":
|
|
16
|
+
logger.warn("本地任務註冊失敗", {
|
|
17
|
+
topic: "task",
|
|
18
|
+
context: { message: bootstrap.message, errors: bootstrap.errors },
|
|
19
|
+
});
|
|
20
|
+
break;
|
|
21
|
+
case "empty":
|
|
22
|
+
logger.info("本地任務掃描完成,無已註冊任務", {
|
|
23
|
+
topic: "task",
|
|
24
|
+
context: { message: bootstrap.message, skipped: bootstrap.skipped },
|
|
25
|
+
});
|
|
26
|
+
break;
|
|
27
|
+
case "loaded":
|
|
28
|
+
logger.info("本地任務註冊完成", {
|
|
29
|
+
topic: "task",
|
|
30
|
+
context: {
|
|
31
|
+
registered: bootstrap.registered,
|
|
32
|
+
skipped: bootstrap.skipped,
|
|
33
|
+
errors: bootstrap.errors,
|
|
34
|
+
},
|
|
35
|
+
});
|
|
36
|
+
break;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Worker startup: discover local task packages + remote Repo rows, merge into `availableTaskList`.
|
|
41
|
+
*
|
|
42
|
+
* - Local: {@link bootstrapLocalTasks} → registers modules in {@link RepoManager}
|
|
43
|
+
* - Remote: {@link getScanRemoteRepoValues} with {@link TASK_REPO_USAGE}
|
|
44
|
+
* - Merge: union of both; execution still prefers local registry in {@link RepoManager.getRepoContext}
|
|
45
|
+
*
|
|
46
|
+
* @throws When merged list is empty (no task types to claim).
|
|
47
|
+
*/
|
|
48
|
+
async function registerTasks({ logger, local: localOptions, includeRemote = true, }) {
|
|
49
|
+
logger.info("開始註冊任務(本地 + 遠程)", { topic: "task" });
|
|
50
|
+
const local = await bootstrapLocalTasks(localOptions ?? {});
|
|
51
|
+
logLocalBootstrap(logger, local);
|
|
52
|
+
let remoteValues = [];
|
|
53
|
+
if (includeRemote) {
|
|
54
|
+
logger.info("查詢遠程 Repo 列表", {
|
|
55
|
+
topic: "task",
|
|
56
|
+
context: { usage: TASK_REPO_USAGE },
|
|
57
|
+
});
|
|
58
|
+
const { data, error: remoteError } = await getScanRemoteRepoValues({ usage: TASK_REPO_USAGE });
|
|
59
|
+
if (remoteError) {
|
|
60
|
+
throw new Error(remoteError.message);
|
|
61
|
+
}
|
|
62
|
+
remoteValues = data ?? [];
|
|
63
|
+
logger.info("遠程 Repo 查詢完成", {
|
|
64
|
+
topic: "task",
|
|
65
|
+
context: { count: remoteValues.length, values: remoteValues },
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
const availableTaskList = [...new Set([...local.registered, ...remoteValues])];
|
|
69
|
+
if (availableTaskList.length === 0) {
|
|
70
|
+
throw new Error("[registerTasks] 任務註冊失敗:本地與遠程均無可用任務類型");
|
|
71
|
+
}
|
|
72
|
+
logger.success("任務註冊完成", {
|
|
73
|
+
topic: "task",
|
|
74
|
+
context: {
|
|
75
|
+
availableTaskList,
|
|
76
|
+
localRegistered: local.registered,
|
|
77
|
+
remoteValues,
|
|
78
|
+
},
|
|
79
|
+
});
|
|
80
|
+
return {
|
|
81
|
+
availableTaskList,
|
|
82
|
+
local,
|
|
83
|
+
remote: { values: remoteValues },
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
/** 将 taskFn 与 params 闭包绑定,供 NodeManager 无参调用 `await taskFn()` */
|
|
87
|
+
function bindTaskFn(taskFn, taskParams) {
|
|
88
|
+
const run = async () => taskFn(taskParams);
|
|
89
|
+
return Object.assign(run, {
|
|
90
|
+
displayName: taskFn.displayName,
|
|
91
|
+
taskTypeKey: taskFn.taskTypeKey,
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
/** 调用 Repo 模块导出的 taskParamsValidator;抛错视为校验失败 */
|
|
95
|
+
function validateTaskParams(validator, taskParams, logger) {
|
|
96
|
+
try {
|
|
97
|
+
return validator(taskParams) === true;
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
logger.warn("taskParamsValidator 拋出異常", {
|
|
101
|
+
topic: "task",
|
|
102
|
+
context: { error: error instanceof Error ? error.message : error },
|
|
103
|
+
});
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* 將 Supabase 認領到的 Task 解析為可執行的 `ExecutableTaskFn`。
|
|
109
|
+
*
|
|
110
|
+
* 流程:
|
|
111
|
+
* 1. 從 task.details 取出 `params`;`task.value` 作為 taskTypeKey(同 {@link Repo.value})
|
|
112
|
+
* 2. {@link RepoManager.getRepoContext} — 本地註冊優先,否則按 task.value 拉取 Repo
|
|
113
|
+
* 3. 校驗 taskFn.taskTypeKey 與 task.value 一致
|
|
114
|
+
* 4. 用 Repo 導出的 taskParamsValidator 校驗 params
|
|
115
|
+
* 5. bindTaskFn,返回閉包後的無參執行函數
|
|
116
|
+
*
|
|
117
|
+
* 失敗時返回 `{ isSuccess: false, code, message, reason, step }`(不 throw)。
|
|
118
|
+
*/
|
|
119
|
+
const prepareTask = async ({ logger, task }) => {
|
|
120
|
+
const fail = (params) => {
|
|
121
|
+
logger.warn(params.message, {
|
|
122
|
+
topic: "task",
|
|
123
|
+
context: {
|
|
124
|
+
taskId: task.id,
|
|
125
|
+
taskTypeKey: task.value,
|
|
126
|
+
reason: params.reason,
|
|
127
|
+
step: params.step,
|
|
128
|
+
},
|
|
129
|
+
});
|
|
130
|
+
return {
|
|
131
|
+
isSuccess: false,
|
|
132
|
+
taskFn: null,
|
|
133
|
+
code: params.code,
|
|
134
|
+
message: params.message,
|
|
135
|
+
reason: params.reason,
|
|
136
|
+
step: params.step,
|
|
137
|
+
};
|
|
138
|
+
};
|
|
139
|
+
const { id: taskId, name: taskName, value: taskTypeKey, details } = task;
|
|
140
|
+
logger.info(`開始準備任務 ${taskName}-${taskTypeKey}`, {
|
|
141
|
+
topic: "task",
|
|
142
|
+
context: { taskId, taskName, taskTypeKey },
|
|
143
|
+
});
|
|
144
|
+
const { params: taskParams } = details;
|
|
145
|
+
if (taskParams == null) {
|
|
146
|
+
return fail({
|
|
147
|
+
reason: "MISSING_PARAMS",
|
|
148
|
+
code: ResultCode.PARAMS_NOT_VALID,
|
|
149
|
+
message: "任務缺少 params",
|
|
150
|
+
step: "params",
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
logger.debug("任務詳情校驗通過,開始解析 Repo 上下文", {
|
|
154
|
+
topic: "task",
|
|
155
|
+
context: { taskTypeKey, step: "repo_load" },
|
|
156
|
+
});
|
|
157
|
+
const { context: repoContext, error: repoError } = await RepoManager.getRepoContext({
|
|
158
|
+
logger,
|
|
159
|
+
taskTypeKey,
|
|
160
|
+
});
|
|
161
|
+
if (repoContext == null) {
|
|
162
|
+
return fail({
|
|
163
|
+
reason: "REPO_LOAD_FAILED",
|
|
164
|
+
code: ResultCode.REPO_NOT_VALID,
|
|
165
|
+
message: repoError ?? "無法加載 Repo 上下文",
|
|
166
|
+
step: "repo_load",
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
logger.info("Repo 上下文加載成功", {
|
|
170
|
+
topic: "task",
|
|
171
|
+
context: {
|
|
172
|
+
taskTypeKey,
|
|
173
|
+
taskFnDisplayName: repoContext.taskFn.displayName,
|
|
174
|
+
step: "repo_load",
|
|
175
|
+
},
|
|
176
|
+
});
|
|
177
|
+
if (repoContext.taskFn.taskTypeKey !== taskTypeKey) {
|
|
178
|
+
return fail({
|
|
179
|
+
reason: "TASK_TYPE_KEY_MISMATCH",
|
|
180
|
+
code: ResultCode.REPO_NOT_VALID,
|
|
181
|
+
message: `taskFn.taskTypeKey (${repoContext.taskFn.taskTypeKey}) 與 task.value (${taskTypeKey}) 不一致`,
|
|
182
|
+
step: "task_type_key",
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
logger.debug("開始校驗任務參數", { topic: "task", context: { taskTypeKey, step: "params_validation" } });
|
|
186
|
+
if (!validateTaskParams(repoContext.taskParamsValidator, taskParams, logger)) {
|
|
187
|
+
return fail({
|
|
188
|
+
reason: "PARAMS_VALIDATION_FAILED",
|
|
189
|
+
code: ResultCode.PARAMS_NOT_VALID,
|
|
190
|
+
message: "任務參數校驗失敗",
|
|
191
|
+
step: "params_validation",
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
logger.debug("任務參數校驗通過", { topic: "task", context: { taskTypeKey, step: "params_validation" } });
|
|
195
|
+
const boundTaskFn = bindTaskFn(repoContext.taskFn, taskParams);
|
|
196
|
+
logger.success("任務準備完成", {
|
|
197
|
+
topic: "task",
|
|
198
|
+
context: {
|
|
199
|
+
taskId,
|
|
200
|
+
taskTypeKey,
|
|
201
|
+
displayName: boundTaskFn.displayName,
|
|
202
|
+
step: "bind",
|
|
203
|
+
},
|
|
204
|
+
});
|
|
205
|
+
return {
|
|
206
|
+
isSuccess: true,
|
|
207
|
+
taskFn: boundTaskFn,
|
|
208
|
+
};
|
|
209
|
+
};
|
|
210
|
+
const TaskManager = {
|
|
211
|
+
registerTasks,
|
|
212
|
+
prepareTask,
|
|
213
|
+
bootstrapLocalTasks,
|
|
214
|
+
getRegisteredLocalTaskTypeKeys,
|
|
215
|
+
};
|
|
216
|
+
export { TaskManager };
|
|
217
|
+
//# sourceMappingURL=task-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-manager.js","sourceRoot":"","sources":["../../src/task/task-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
export interface TaskRunResult {
|
|
2
|
+
isSuccess: boolean;
|
|
3
|
+
cost: number;
|
|
4
|
+
extra: unknown;
|
|
5
|
+
}
|
|
6
|
+
export interface TaskFn {
|
|
7
|
+
displayName: string;
|
|
8
|
+
taskTypeKey: string;
|
|
9
|
+
(taskParams: unknown): Promise<TaskRunResult>;
|
|
10
|
+
}
|
|
11
|
+
/** Params already bound — used by node executor after prepareTask */
|
|
12
|
+
export type ExecutableTaskFn = (() => Promise<TaskRunResult>) & {
|
|
13
|
+
displayName: string;
|
|
14
|
+
taskTypeKey: string;
|
|
15
|
+
};
|
|
16
|
+
/** Repo script module must expose this shape (see repo-context.utils). */
|
|
17
|
+
export interface TaskRepoContext {
|
|
18
|
+
taskParamsValidator: (taskParams: unknown) => boolean;
|
|
19
|
+
taskFn: TaskFn;
|
|
20
|
+
}
|
|
21
|
+
/** Supabase `target.category` for rows that store task script payloads */
|
|
22
|
+
export declare const TASK_REPO_SCRIPT_CATEGORY: "script";
|
|
23
|
+
/**
|
|
24
|
+
* `target.details` for task script rows — not a separate Target subtype in repo.interface.
|
|
25
|
+
* Loaded dynamically to produce {@link TaskRepoContext}.
|
|
26
|
+
*/
|
|
27
|
+
export interface TaskRepoScriptDetails {
|
|
28
|
+
manifestVersion: number;
|
|
29
|
+
/** Inline ESM source — written to temp file then dynamically imported (Node) */
|
|
30
|
+
source?: string;
|
|
31
|
+
/** Absolute path to an ESM module on the worker machine */
|
|
32
|
+
modulePath?: string;
|
|
33
|
+
/** Named export to read TaskRepoContext from; default export if omitted */
|
|
34
|
+
exportName?: string;
|
|
35
|
+
/** Content hash for cache invalidation */
|
|
36
|
+
hash?: string;
|
|
37
|
+
/** Prefer this script as entry when multiple scripts exist for one repo */
|
|
38
|
+
isEntry?: boolean;
|
|
39
|
+
}
|
|
40
|
+
/** Minimal target row shape used by script loader (avoids a dedicated Script Target type). */
|
|
41
|
+
export interface TaskRepoScriptRecord {
|
|
42
|
+
id: string;
|
|
43
|
+
value: string;
|
|
44
|
+
details: TaskRepoScriptDetails;
|
|
45
|
+
}
|
|
46
|
+
/** Host app root config at `config/task.config.js` — where to discover local task packages */
|
|
47
|
+
export interface TaskRunnerRootConfig {
|
|
48
|
+
/** Directory containing one folder per task (relative to root config file), e.g. `"./tasks"` */
|
|
49
|
+
taskDir: string;
|
|
50
|
+
}
|
|
51
|
+
/** Per-task `task.config.js` inside `<taskDir>/<name>/` */
|
|
52
|
+
export interface TaskLocalPackageConfig {
|
|
53
|
+
/** Must match `task.value` when claiming from Supabase */
|
|
54
|
+
taskTypeKey: string;
|
|
55
|
+
/** Entry module relative to this task folder, e.g. `"./index.mjs"` */
|
|
56
|
+
entry: string;
|
|
57
|
+
/** Named export on entry module; default export if omitted */
|
|
58
|
+
exportName?: string;
|
|
59
|
+
displayName?: string;
|
|
60
|
+
/** Skip registration when `false` (default `true`) */
|
|
61
|
+
enabled?: boolean;
|
|
62
|
+
}
|
|
63
|
+
export type BootstrapLocalTasksStatus =
|
|
64
|
+
/** Root config found and scan finished (individual tasks may still have errors) */
|
|
65
|
+
"loaded"
|
|
66
|
+
/** Root config found but zero tasks registered */
|
|
67
|
+
| "empty"
|
|
68
|
+
/** No root config at default/explicit paths — not an error; use remote scripts or manual register */
|
|
69
|
+
| "not_configured"
|
|
70
|
+
/** Root config or taskDir invalid */
|
|
71
|
+
| "failed";
|
|
72
|
+
export interface BootstrapLocalTasksResult {
|
|
73
|
+
status: BootstrapLocalTasksStatus;
|
|
74
|
+
/** Human-readable summary for logs */
|
|
75
|
+
message?: string;
|
|
76
|
+
registered: string[];
|
|
77
|
+
skipped: {
|
|
78
|
+
taskDir: string;
|
|
79
|
+
reason: string;
|
|
80
|
+
}[];
|
|
81
|
+
errors: {
|
|
82
|
+
taskDir: string;
|
|
83
|
+
error: string;
|
|
84
|
+
}[];
|
|
85
|
+
}
|
|
86
|
+
/** Host app config directory (relative to `cwd`) — recommended for library consumers */
|
|
87
|
+
export declare const TASK_RUNNER_CONFIG_DIR: "config";
|
|
88
|
+
export declare const TASK_RUNNER_ROOT_CONFIG_FILENAME: "task.config.js";
|
|
89
|
+
/** Default root config path: `config/task.config.js` */
|
|
90
|
+
export declare const TASK_RUNNER_ROOT_CONFIG_RELATIVE_PATH: "config/task.config.js";
|
|
91
|
+
/** Legacy fallback at project root */
|
|
92
|
+
export declare const TASK_RUNNER_ROOT_CONFIG_LEGACY_RELATIVE_PATH: "task.config.js";
|
|
93
|
+
/** Per-task config filename inside each folder under `taskDir` */
|
|
94
|
+
export declare const TASK_LOCAL_PACKAGE_CONFIG_FILENAME: "task.config.js";
|
|
95
|
+
//# sourceMappingURL=task-repo-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-repo-context.d.ts","sourceRoot":"","sources":["../../src/task/task-repo-context.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,MAAM;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,CAAC,UAAU,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;CACjD;AAED,qEAAqE;AACrE,MAAM,MAAM,gBAAgB,GAAG,CAAC,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC,GAAG;IAC5D,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,0EAA0E;AAC1E,MAAM,WAAW,eAAe;IAC5B,mBAAmB,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,OAAO,CAAC;IACtD,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,0EAA0E;AAC1E,eAAO,MAAM,yBAAyB,EAAG,QAAiB,CAAC;AAE3D;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IAClC,eAAe,EAAE,MAAM,CAAC;IACxB,gFAAgF;IAChF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0CAA0C;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,8FAA8F;AAC9F,MAAM,WAAW,oBAAoB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,qBAAqB,CAAC;CAClC;AAED,8FAA8F;AAC9F,MAAM,WAAW,oBAAoB;IACjC,gGAAgG;IAChG,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,2DAA2D;AAC3D,MAAM,WAAW,sBAAsB;IACnC,0DAA0D;IAC1D,WAAW,EAAE,MAAM,CAAC;IACpB,sEAAsE;IACtE,KAAK,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sDAAsD;IACtD,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,MAAM,yBAAyB;AACjC,mFAAmF;AACjF,QAAQ;AACV,kDAAkD;GAChD,OAAO;AACT,qGAAqG;GACnG,gBAAgB;AAClB,qCAAqC;GACnC,QAAQ,CAAC;AAEf,MAAM,WAAW,yBAAyB;IACtC,MAAM,EAAE,yBAAyB,CAAC;IAClC,sCAAsC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC/C,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAChD;AAED,wFAAwF;AACxF,eAAO,MAAM,sBAAsB,EAAG,QAAiB,CAAC;AAExD,eAAO,MAAM,gCAAgC,EAAG,gBAAyB,CAAC;AAE1E,wDAAwD;AACxD,eAAO,MAAM,qCAAqC,yBAA2E,CAAC;AAE9H,sCAAsC;AACtC,eAAO,MAAM,4CAA4C,kBAAmC,CAAC;AAE7F,kEAAkE;AAClE,eAAO,MAAM,kCAAkC,EAAG,gBAAyB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** Supabase `target.category` for rows that store task script payloads */
|
|
2
|
+
export const TASK_REPO_SCRIPT_CATEGORY = "script";
|
|
3
|
+
/** Host app config directory (relative to `cwd`) — recommended for library consumers */
|
|
4
|
+
export const TASK_RUNNER_CONFIG_DIR = "config";
|
|
5
|
+
export const TASK_RUNNER_ROOT_CONFIG_FILENAME = "task.config.js";
|
|
6
|
+
/** Default root config path: `config/task.config.js` */
|
|
7
|
+
export const TASK_RUNNER_ROOT_CONFIG_RELATIVE_PATH = `${TASK_RUNNER_CONFIG_DIR}/${TASK_RUNNER_ROOT_CONFIG_FILENAME}`;
|
|
8
|
+
/** Legacy fallback at project root */
|
|
9
|
+
export const TASK_RUNNER_ROOT_CONFIG_LEGACY_RELATIVE_PATH = TASK_RUNNER_ROOT_CONFIG_FILENAME;
|
|
10
|
+
/** Per-task config filename inside each folder under `taskDir` */
|
|
11
|
+
export const TASK_LOCAL_PACKAGE_CONFIG_FILENAME = "task.config.js";
|
|
12
|
+
//# sourceMappingURL=task-repo-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-repo-context.js","sourceRoot":"","sources":["../../src/task/task-repo-context.ts"],"names":[],"mappings":"AAwBA,0EAA0E;AAC1E,MAAM,CAAC,MAAM,yBAAyB,GAAG,QAAiB,CAAC;AAiE3D,wFAAwF;AACxF,MAAM,CAAC,MAAM,sBAAsB,GAAG,QAAiB,CAAC;AAExD,MAAM,CAAC,MAAM,gCAAgC,GAAG,gBAAyB,CAAC;AAE1E,wDAAwD;AACxD,MAAM,CAAC,MAAM,qCAAqC,GAAG,GAAG,sBAAsB,IAAI,gCAAgC,EAAW,CAAC;AAE9H,sCAAsC;AACtC,MAAM,CAAC,MAAM,4CAA4C,GAAG,gCAAgC,CAAC;AAE7F,kEAAkE;AAClE,MAAM,CAAC,MAAM,kCAAkC,GAAG,gBAAyB,CAAC"}
|
package/dist/task/task.api.d.ts
CHANGED
|
@@ -1 +1,241 @@
|
|
|
1
|
+
import { type SupabaseResponse } from "../core.interface";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { Task, TaskStatus, TaskStatusAction } from "./task.interface";
|
|
4
|
+
export declare const patchChangeTaskStatusSchema: z.ZodDiscriminatedUnion<"action", [z.ZodObject<{
|
|
5
|
+
action: z.ZodLiteral<TaskStatusAction.PUBLISH>;
|
|
6
|
+
id: z.ZodString;
|
|
7
|
+
extra: z.ZodOptional<z.ZodString>;
|
|
8
|
+
traceId: z.ZodOptional<z.ZodString>;
|
|
9
|
+
}, "strip", z.ZodTypeAny, {
|
|
10
|
+
id: string;
|
|
11
|
+
action: TaskStatusAction.PUBLISH;
|
|
12
|
+
extra?: string | undefined;
|
|
13
|
+
traceId?: string | undefined;
|
|
14
|
+
}, {
|
|
15
|
+
id: string;
|
|
16
|
+
action: TaskStatusAction.PUBLISH;
|
|
17
|
+
extra?: string | undefined;
|
|
18
|
+
traceId?: string | undefined;
|
|
19
|
+
}>, z.ZodObject<{
|
|
20
|
+
action: z.ZodLiteral<TaskStatusAction.CLOSE>;
|
|
21
|
+
id: z.ZodString;
|
|
22
|
+
extra: z.ZodOptional<z.ZodString>;
|
|
23
|
+
traceId: z.ZodOptional<z.ZodString>;
|
|
24
|
+
}, "strip", z.ZodTypeAny, {
|
|
25
|
+
id: string;
|
|
26
|
+
action: TaskStatusAction.CLOSE;
|
|
27
|
+
extra?: string | undefined;
|
|
28
|
+
traceId?: string | undefined;
|
|
29
|
+
}, {
|
|
30
|
+
id: string;
|
|
31
|
+
action: TaskStatusAction.CLOSE;
|
|
32
|
+
extra?: string | undefined;
|
|
33
|
+
traceId?: string | undefined;
|
|
34
|
+
}>, z.ZodObject<{
|
|
35
|
+
action: z.ZodLiteral<TaskStatusAction.CLAIM>;
|
|
36
|
+
nodeId: z.ZodString;
|
|
37
|
+
id: z.ZodString;
|
|
38
|
+
extra: z.ZodOptional<z.ZodString>;
|
|
39
|
+
traceId: z.ZodOptional<z.ZodString>;
|
|
40
|
+
}, "strip", z.ZodTypeAny, {
|
|
41
|
+
id: string;
|
|
42
|
+
nodeId: string;
|
|
43
|
+
action: TaskStatusAction.CLAIM;
|
|
44
|
+
extra?: string | undefined;
|
|
45
|
+
traceId?: string | undefined;
|
|
46
|
+
}, {
|
|
47
|
+
id: string;
|
|
48
|
+
nodeId: string;
|
|
49
|
+
action: TaskStatusAction.CLAIM;
|
|
50
|
+
extra?: string | undefined;
|
|
51
|
+
traceId?: string | undefined;
|
|
52
|
+
}>, z.ZodObject<{
|
|
53
|
+
action: z.ZodLiteral<TaskStatusAction.RESET>;
|
|
54
|
+
nodeId: z.ZodOptional<z.ZodString>;
|
|
55
|
+
id: z.ZodString;
|
|
56
|
+
extra: z.ZodOptional<z.ZodString>;
|
|
57
|
+
traceId: z.ZodOptional<z.ZodString>;
|
|
58
|
+
}, "strip", z.ZodTypeAny, {
|
|
59
|
+
id: string;
|
|
60
|
+
action: TaskStatusAction.RESET;
|
|
61
|
+
extra?: string | undefined;
|
|
62
|
+
traceId?: string | undefined;
|
|
63
|
+
nodeId?: string | undefined;
|
|
64
|
+
}, {
|
|
65
|
+
id: string;
|
|
66
|
+
action: TaskStatusAction.RESET;
|
|
67
|
+
extra?: string | undefined;
|
|
68
|
+
traceId?: string | undefined;
|
|
69
|
+
nodeId?: string | undefined;
|
|
70
|
+
}>, z.ZodObject<{
|
|
71
|
+
action: z.ZodLiteral<TaskStatusAction.CANCEL>;
|
|
72
|
+
nodeId: z.ZodString;
|
|
73
|
+
id: z.ZodString;
|
|
74
|
+
extra: z.ZodOptional<z.ZodString>;
|
|
75
|
+
traceId: z.ZodOptional<z.ZodString>;
|
|
76
|
+
}, "strip", z.ZodTypeAny, {
|
|
77
|
+
id: string;
|
|
78
|
+
nodeId: string;
|
|
79
|
+
action: TaskStatusAction.CANCEL;
|
|
80
|
+
extra?: string | undefined;
|
|
81
|
+
traceId?: string | undefined;
|
|
82
|
+
}, {
|
|
83
|
+
id: string;
|
|
84
|
+
nodeId: string;
|
|
85
|
+
action: TaskStatusAction.CANCEL;
|
|
86
|
+
extra?: string | undefined;
|
|
87
|
+
traceId?: string | undefined;
|
|
88
|
+
}>, z.ZodObject<{
|
|
89
|
+
action: z.ZodLiteral<TaskStatusAction.FINISH>;
|
|
90
|
+
cost: z.ZodNumber;
|
|
91
|
+
nodeId: z.ZodString;
|
|
92
|
+
id: z.ZodString;
|
|
93
|
+
extra: z.ZodOptional<z.ZodString>;
|
|
94
|
+
traceId: z.ZodOptional<z.ZodString>;
|
|
95
|
+
}, "strip", z.ZodTypeAny, {
|
|
96
|
+
id: string;
|
|
97
|
+
nodeId: string;
|
|
98
|
+
action: TaskStatusAction.FINISH;
|
|
99
|
+
cost: number;
|
|
100
|
+
extra?: string | undefined;
|
|
101
|
+
traceId?: string | undefined;
|
|
102
|
+
}, {
|
|
103
|
+
id: string;
|
|
104
|
+
nodeId: string;
|
|
105
|
+
action: TaskStatusAction.FINISH;
|
|
106
|
+
cost: number;
|
|
107
|
+
extra?: string | undefined;
|
|
108
|
+
traceId?: string | undefined;
|
|
109
|
+
}>]>;
|
|
110
|
+
export type PatchChangeTaskStatusPayload = z.infer<typeof patchChangeTaskStatusSchema>;
|
|
111
|
+
export declare const patchTaskProgressSchema: z.ZodObject<{
|
|
112
|
+
id: z.ZodString;
|
|
113
|
+
progress: z.ZodNumber;
|
|
114
|
+
nodeId: z.ZodString;
|
|
115
|
+
traceId: z.ZodOptional<z.ZodString>;
|
|
116
|
+
}, "strip", z.ZodTypeAny, {
|
|
117
|
+
id: string;
|
|
118
|
+
nodeId: string;
|
|
119
|
+
progress: number;
|
|
120
|
+
traceId?: string | undefined;
|
|
121
|
+
}, {
|
|
122
|
+
id: string;
|
|
123
|
+
nodeId: string;
|
|
124
|
+
progress: number;
|
|
125
|
+
traceId?: string | undefined;
|
|
126
|
+
}>;
|
|
127
|
+
export type PatchTaskProgressPayload = z.infer<typeof patchTaskProgressSchema>;
|
|
128
|
+
export declare const patchClaimTaskSchema: z.ZodObject<{
|
|
129
|
+
nodeId: z.ZodString;
|
|
130
|
+
availableTaskList: z.ZodArray<z.ZodString, "many">;
|
|
131
|
+
traceId: z.ZodOptional<z.ZodString>;
|
|
132
|
+
}, "strip", z.ZodTypeAny, {
|
|
133
|
+
nodeId: string;
|
|
134
|
+
availableTaskList: string[];
|
|
135
|
+
traceId?: string | undefined;
|
|
136
|
+
}, {
|
|
137
|
+
nodeId: string;
|
|
138
|
+
availableTaskList: string[];
|
|
139
|
+
traceId?: string | undefined;
|
|
140
|
+
}>;
|
|
141
|
+
export type PatchClaimTaskPayload = z.infer<typeof patchClaimTaskSchema>;
|
|
142
|
+
export declare const postTaskSchema: z.ZodObject<{
|
|
143
|
+
name: z.ZodString;
|
|
144
|
+
/** Task type key — matches `task.value`, {@link patchClaimTask}, {@link Repo.value}, and local Repo registry. */
|
|
145
|
+
value: z.ZodString;
|
|
146
|
+
params: z.ZodUnknown;
|
|
147
|
+
taskStatus: z.ZodDefault<z.ZodOptional<z.ZodUnion<[z.ZodLiteral<TaskStatus.OPEN>, z.ZodLiteral<TaskStatus.TODO>]>>>;
|
|
148
|
+
tagList: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodString, "many">>>;
|
|
149
|
+
extra: z.ZodOptional<z.ZodString>;
|
|
150
|
+
traceId: z.ZodOptional<z.ZodString>;
|
|
151
|
+
}, "strip", z.ZodTypeAny, {
|
|
152
|
+
name: string;
|
|
153
|
+
value: string;
|
|
154
|
+
tagList: string[];
|
|
155
|
+
taskStatus: TaskStatus.OPEN | TaskStatus.TODO;
|
|
156
|
+
extra?: string | undefined;
|
|
157
|
+
traceId?: string | undefined;
|
|
158
|
+
params?: unknown;
|
|
159
|
+
}, {
|
|
160
|
+
name: string;
|
|
161
|
+
value: string;
|
|
162
|
+
tagList?: string[] | undefined;
|
|
163
|
+
extra?: string | undefined;
|
|
164
|
+
traceId?: string | undefined;
|
|
165
|
+
params?: unknown;
|
|
166
|
+
taskStatus?: TaskStatus.OPEN | TaskStatus.TODO | undefined;
|
|
167
|
+
}>;
|
|
168
|
+
export type PostTaskPayload = z.infer<typeof postTaskSchema>;
|
|
169
|
+
export declare const patchChangeTaskStatus: (payload: {
|
|
170
|
+
id: string;
|
|
171
|
+
action: TaskStatusAction.PUBLISH;
|
|
172
|
+
extra?: string | undefined;
|
|
173
|
+
traceId?: string | undefined;
|
|
174
|
+
} | {
|
|
175
|
+
id: string;
|
|
176
|
+
action: TaskStatusAction.CLOSE;
|
|
177
|
+
extra?: string | undefined;
|
|
178
|
+
traceId?: string | undefined;
|
|
179
|
+
} | {
|
|
180
|
+
id: string;
|
|
181
|
+
nodeId: string;
|
|
182
|
+
action: TaskStatusAction.CLAIM;
|
|
183
|
+
extra?: string | undefined;
|
|
184
|
+
traceId?: string | undefined;
|
|
185
|
+
} | {
|
|
186
|
+
id: string;
|
|
187
|
+
action: TaskStatusAction.RESET;
|
|
188
|
+
extra?: string | undefined;
|
|
189
|
+
traceId?: string | undefined;
|
|
190
|
+
nodeId?: string | undefined;
|
|
191
|
+
} | {
|
|
192
|
+
id: string;
|
|
193
|
+
nodeId: string;
|
|
194
|
+
action: TaskStatusAction.CANCEL;
|
|
195
|
+
extra?: string | undefined;
|
|
196
|
+
traceId?: string | undefined;
|
|
197
|
+
} | {
|
|
198
|
+
id: string;
|
|
199
|
+
nodeId: string;
|
|
200
|
+
action: TaskStatusAction.FINISH;
|
|
201
|
+
cost: number;
|
|
202
|
+
extra?: string | undefined;
|
|
203
|
+
traceId?: string | undefined;
|
|
204
|
+
}) => SupabaseResponse<Task> | Promise<SupabaseResponse<Task>>;
|
|
205
|
+
/** Update progress on a DOING task; only the owning node may write (see `lockOnDoingOwner`). */
|
|
206
|
+
export declare const patchTaskProgress: (payload: {
|
|
207
|
+
id: string;
|
|
208
|
+
nodeId: string;
|
|
209
|
+
progress: number;
|
|
210
|
+
traceId?: string | undefined;
|
|
211
|
+
}) => SupabaseResponse<Task> | Promise<SupabaseResponse<Task>>;
|
|
212
|
+
/**
|
|
213
|
+
* Discover and claim one TODO task for this node.
|
|
214
|
+
*
|
|
215
|
+
* Flow: filter by `availableTaskList` → {@link claimTaskById} (same as `action: CLAIM`).
|
|
216
|
+
* Equivalent to `patchChangeTaskStatus({ id, action: CLAIM, nodeId })` when `id` is already known.
|
|
217
|
+
*
|
|
218
|
+
* Returns `data: null` when no TODO task matches.
|
|
219
|
+
* Optimistic lock conflicts return `{ error }` with `code: "OPTIMISTIC_LOCK"` (not thrown).
|
|
220
|
+
*/
|
|
221
|
+
export declare const patchClaimTask: (payload: {
|
|
222
|
+
nodeId: string;
|
|
223
|
+
availableTaskList: string[];
|
|
224
|
+
traceId?: string | undefined;
|
|
225
|
+
}) => SupabaseResponse<Task | null> | Promise<SupabaseResponse<Task | null>>;
|
|
226
|
+
/**
|
|
227
|
+
* Create a task row (scheduler / admin).
|
|
228
|
+
*
|
|
229
|
+
* `taskStatus` defaults to **TODO** (worker-claimable). Pass **OPEN** for draft tasks
|
|
230
|
+
* that require {@link patchChangeTaskStatus} `publish` before workers can claim.
|
|
231
|
+
*/
|
|
232
|
+
export declare const postTask: (payload: {
|
|
233
|
+
name: string;
|
|
234
|
+
value: string;
|
|
235
|
+
tagList: string[];
|
|
236
|
+
taskStatus: TaskStatus.OPEN | TaskStatus.TODO;
|
|
237
|
+
extra?: string | undefined;
|
|
238
|
+
traceId?: string | undefined;
|
|
239
|
+
params?: unknown;
|
|
240
|
+
}) => SupabaseResponse<Task> | Promise<SupabaseResponse<Task>>;
|
|
1
241
|
//# sourceMappingURL=task.api.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task.api.d.ts","sourceRoot":"","sources":["../../src/task/task.api.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"task.api.d.ts","sourceRoot":"","sources":["../../src/task/task.api.ts"],"names":[],"mappings":"AACA,OAAO,EAAoB,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE5E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAA4B,IAAI,EAAe,UAAU,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAyD7G,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA2BtC,CAAC;AAEH,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAEvF,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;EAKlC,CAAC;AAEH,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAE/E,eAAO,MAAM,oBAAoB;;;;;;;;;;;;EAI/B,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAQzE,eAAO,MAAM,cAAc;;IAEvB,iHAAiH;;;;;;;;;;;;;;;;;;;;;;;EAOnH,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAgG7D,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8DAiGhC,CAAC;AAIH,gGAAgG;AAChG,eAAO,MAAM,iBAAiB;;;;;8DAe5B,CAAC;AAIH;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc;;;;4EAgCzB,CAAC;AAIH;;;;;GAKG;AACH,eAAO,MAAM,QAAQ;;;;;;;;8DAkCnB,CAAC"}
|