target-supabase-sdk 0.1.8 → 0.2.0

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.
Files changed (212) hide show
  1. package/README.md +74 -6
  2. package/dist/auth/auth.api.d.ts.map +1 -1
  3. package/dist/auth/auth.api.js +2 -1
  4. package/dist/auth/auth.api.js.map +1 -1
  5. package/dist/browser.d.ts +52 -0
  6. package/dist/browser.d.ts.map +1 -0
  7. package/dist/browser.js +45 -0
  8. package/dist/browser.js.map +1 -0
  9. package/dist/command/command.api.d.ts +43 -0
  10. package/dist/command/command.api.d.ts.map +1 -0
  11. package/dist/command/command.api.js +58 -0
  12. package/dist/command/command.api.js.map +1 -0
  13. package/dist/command/command.interface.d.ts +14 -0
  14. package/dist/command/command.interface.d.ts.map +1 -0
  15. package/dist/command/command.interface.js +9 -0
  16. package/dist/command/command.interface.js.map +1 -0
  17. package/dist/core.api.d.ts +70 -6
  18. package/dist/core.api.d.ts.map +1 -1
  19. package/dist/core.api.js +191 -13
  20. package/dist/core.api.js.map +1 -1
  21. package/dist/file/file-manager.d.ts +1 -1
  22. package/dist/file/file-manager.d.ts.map +1 -1
  23. package/dist/file/file-manager.js +1 -1
  24. package/dist/file/file-manager.js.map +1 -1
  25. package/dist/index.d.ts +2 -40
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +2 -34
  28. package/dist/index.js.map +1 -1
  29. package/dist/link/link.interface.d.ts +1 -1
  30. package/dist/link/link.interface.d.ts.map +1 -1
  31. package/dist/node/node-log-scope.d.ts +11 -0
  32. package/dist/node/node-log-scope.d.ts.map +1 -0
  33. package/dist/node/node-log-scope.js +7 -0
  34. package/dist/node/node-log-scope.js.map +1 -0
  35. package/dist/node/node-runtime.base.d.ts +42 -0
  36. package/dist/node/node-runtime.base.d.ts.map +1 -0
  37. package/dist/node/node-runtime.base.js +397 -0
  38. package/dist/node/node-runtime.base.js.map +1 -0
  39. package/dist/node/node-task.preset.d.ts +1 -0
  40. package/dist/node/node-task.preset.d.ts.map +1 -0
  41. package/dist/node/node-task.preset.js +14 -0
  42. package/dist/node/node-task.preset.js.map +1 -0
  43. package/dist/node/node.api.d.ts +67 -31
  44. package/dist/node/node.api.d.ts.map +1 -1
  45. package/dist/node/node.api.js +65 -102
  46. package/dist/node/node.api.js.map +1 -1
  47. package/dist/node/node.interface.d.ts +7 -0
  48. package/dist/node/node.interface.d.ts.map +1 -1
  49. package/dist/node/node.interface.js +2 -0
  50. package/dist/node/node.interface.js.map +1 -1
  51. package/dist/node/node.utils.d.ts +5 -0
  52. package/dist/node/node.utils.d.ts.map +1 -0
  53. package/dist/node/node.utils.js +36 -0
  54. package/dist/node/node.utils.js.map +1 -0
  55. package/dist/node/task-node.d.ts +20 -0
  56. package/dist/node/task-node.d.ts.map +1 -0
  57. package/dist/node/task-node.js +245 -0
  58. package/dist/node/task-node.js.map +1 -0
  59. package/dist/node/trigger-node.d.ts +18 -0
  60. package/dist/node/trigger-node.d.ts.map +1 -0
  61. package/dist/node/trigger-node.js +150 -0
  62. package/dist/node/trigger-node.js.map +1 -0
  63. package/dist/node.d.ts +22 -0
  64. package/dist/node.d.ts.map +1 -0
  65. package/dist/node.js +19 -0
  66. package/dist/node.js.map +1 -0
  67. package/dist/parcel/parcel-manager.d.ts +1 -1
  68. package/dist/parcel/parcel-manager.d.ts.map +1 -1
  69. package/dist/parcel/parcel-manager.js +1 -1
  70. package/dist/parcel/parcel-manager.js.map +1 -1
  71. package/dist/repo/repo-context.utils.d.ts +24 -0
  72. package/dist/repo/repo-context.utils.d.ts.map +1 -0
  73. package/dist/repo/repo-context.utils.js +81 -0
  74. package/dist/repo/repo-context.utils.js.map +1 -0
  75. package/dist/repo/repo-manager.d.ts +42 -0
  76. package/dist/repo/repo-manager.d.ts.map +1 -0
  77. package/dist/repo/repo-manager.js +166 -0
  78. package/dist/repo/repo-manager.js.map +1 -0
  79. package/dist/repo/repo.api.d.ts +16 -0
  80. package/dist/repo/repo.api.d.ts.map +1 -0
  81. package/dist/repo/repo.api.js +40 -0
  82. package/dist/repo/repo.api.js.map +1 -0
  83. package/dist/repo/repo.interface.d.ts +12 -5
  84. package/dist/repo/repo.interface.d.ts.map +1 -1
  85. package/dist/repo/repo.interface.js +2 -2
  86. package/dist/repo/repo.interface.js.map +1 -1
  87. package/dist/repo/repo.script-loader.d.ts +19 -0
  88. package/dist/repo/repo.script-loader.d.ts.map +1 -0
  89. package/dist/repo/repo.script-loader.js +108 -0
  90. package/dist/repo/repo.script-loader.js.map +1 -0
  91. package/dist/shared/log/create-api-logger.d.ts +21 -0
  92. package/dist/shared/log/create-api-logger.d.ts.map +1 -0
  93. package/dist/shared/log/create-api-logger.js +19 -0
  94. package/dist/shared/log/create-api-logger.js.map +1 -0
  95. package/dist/shared/log/index.d.ts +10 -0
  96. package/dist/shared/log/index.d.ts.map +1 -0
  97. package/dist/shared/log/index.js +10 -0
  98. package/dist/shared/log/index.js.map +1 -0
  99. package/dist/shared/log/log-manager.d.ts +93 -0
  100. package/dist/shared/log/log-manager.d.ts.map +1 -0
  101. package/dist/shared/log/log-manager.js +237 -0
  102. package/dist/shared/log/log-manager.js.map +1 -0
  103. package/dist/shared/log/log-scope.d.ts +49 -0
  104. package/dist/shared/log/log-scope.d.ts.map +1 -0
  105. package/dist/shared/log/log-scope.js +70 -0
  106. package/dist/shared/log/log-scope.js.map +1 -0
  107. package/dist/shared/utils/config-path.utils.d.ts +38 -0
  108. package/dist/shared/utils/config-path.utils.d.ts.map +1 -0
  109. package/dist/shared/utils/config-path.utils.js +85 -0
  110. package/dist/shared/utils/config-path.utils.js.map +1 -0
  111. package/dist/shared/utils/error.utils.d.ts +11 -0
  112. package/dist/shared/utils/error.utils.d.ts.map +1 -0
  113. package/dist/shared/utils/error.utils.js +15 -0
  114. package/dist/shared/utils/error.utils.js.map +1 -0
  115. package/dist/shared/utils/id.utils.d.ts +3 -0
  116. package/dist/shared/utils/id.utils.d.ts.map +1 -0
  117. package/dist/shared/utils/id.utils.js +5 -0
  118. package/dist/shared/utils/id.utils.js.map +1 -0
  119. package/dist/supabase.js +1 -1
  120. package/dist/supabase.js.map +1 -1
  121. package/dist/task/index.d.ts +15 -0
  122. package/dist/task/index.d.ts.map +1 -0
  123. package/dist/task/index.js +14 -0
  124. package/dist/task/index.js.map +1 -0
  125. package/dist/task/local-task-registry.d.ts +37 -0
  126. package/dist/task/local-task-registry.d.ts.map +1 -0
  127. package/dist/task/local-task-registry.js +214 -0
  128. package/dist/task/local-task-registry.js.map +1 -0
  129. package/dist/task/task-manager.d.ts +64 -0
  130. package/dist/task/task-manager.d.ts.map +1 -0
  131. package/dist/task/task-manager.js +196 -0
  132. package/dist/task/task-manager.js.map +1 -0
  133. package/dist/task/task-post.api.d.ts +49 -0
  134. package/dist/task/task-post.api.d.ts.map +1 -0
  135. package/dist/task/task-post.api.js +91 -0
  136. package/dist/task/task-post.api.js.map +1 -0
  137. package/dist/task/task-repo-context.d.ts +97 -0
  138. package/dist/task/task-repo-context.d.ts.map +1 -0
  139. package/dist/task/task-repo-context.js +12 -0
  140. package/dist/task/task-repo-context.js.map +1 -0
  141. package/dist/task/task-repo-validation.d.ts +46 -0
  142. package/dist/task/task-repo-validation.d.ts.map +1 -0
  143. package/dist/task/task-repo-validation.js +96 -0
  144. package/dist/task/task-repo-validation.js.map +1 -0
  145. package/dist/task/task.api.d.ts +198 -0
  146. package/dist/task/task.api.d.ts.map +1 -1
  147. package/dist/task/task.api.js +302 -1
  148. package/dist/task/task.api.js.map +1 -1
  149. package/dist/task/task.interface.d.ts +11 -2
  150. package/dist/task/task.interface.d.ts.map +1 -1
  151. package/dist/task/task.interface.js +10 -0
  152. package/dist/task/task.interface.js.map +1 -1
  153. package/dist/trigger/trigger.api.d.ts +140 -0
  154. package/dist/trigger/trigger.api.d.ts.map +1 -0
  155. package/dist/trigger/trigger.api.js +125 -0
  156. package/dist/trigger/trigger.api.js.map +1 -0
  157. package/dist/trigger/trigger.interface.d.ts +43 -0
  158. package/dist/trigger/trigger.interface.d.ts.map +1 -0
  159. package/dist/trigger/trigger.interface.js +11 -0
  160. package/dist/trigger/trigger.interface.js.map +1 -0
  161. package/dist/trigger/trigger.utils.d.ts +6 -0
  162. package/dist/trigger/trigger.utils.d.ts.map +1 -0
  163. package/dist/trigger/trigger.utils.js +39 -0
  164. package/dist/trigger/trigger.utils.js.map +1 -0
  165. package/package.json +30 -8
  166. package/src/auth/auth.api.ts +3 -1
  167. package/src/browser.ts +100 -0
  168. package/src/command/command.api.ts +88 -0
  169. package/src/command/command.interface.ts +17 -0
  170. package/src/core.api.ts +305 -26
  171. package/src/file/file-manager.ts +1 -1
  172. package/src/index.ts +2 -64
  173. package/src/link/link.interface.ts +1 -1
  174. package/src/node/node-log-scope.ts +15 -0
  175. package/src/node/node-runtime.base.ts +450 -0
  176. package/src/node/node-task.preset.ts +13 -0
  177. package/src/node/node.api.ts +95 -117
  178. package/src/node/node.interface.ts +8 -0
  179. package/src/node/node.utils.ts +36 -0
  180. package/src/node/task-node.ts +284 -0
  181. package/src/node/trigger-node.ts +180 -0
  182. package/src/node.ts +62 -0
  183. package/src/parcel/parcel-manager.ts +1 -1
  184. package/src/repo/repo-context.utils.ts +111 -0
  185. package/src/repo/repo-manager.ts +245 -0
  186. package/src/repo/repo.api.ts +50 -0
  187. package/src/repo/repo.interface.ts +13 -5
  188. package/src/repo/repo.script-loader.ts +140 -0
  189. package/src/shared/log/create-api-logger.ts +36 -0
  190. package/src/shared/log/index.ts +23 -0
  191. package/src/shared/log/log-manager.ts +335 -0
  192. package/src/shared/log/log-scope.ts +123 -0
  193. package/src/shared/utils/config-path.utils.ts +104 -0
  194. package/src/shared/utils/error.utils.ts +15 -0
  195. package/src/shared/utils/id.utils.ts +4 -0
  196. package/src/supabase.ts +1 -1
  197. package/src/task/index.ts +48 -0
  198. package/src/task/local-task-registry.ts +282 -0
  199. package/src/task/task-manager.ts +301 -0
  200. package/src/task/task-post.api.ts +116 -0
  201. package/src/task/task-repo-context.ts +105 -0
  202. package/src/task/task-repo-validation.ts +171 -0
  203. package/src/task/task.api.ts +369 -0
  204. package/src/task/task.interface.ts +12 -2
  205. package/src/trigger/trigger.api.ts +166 -0
  206. package/src/trigger/trigger.interface.ts +50 -0
  207. package/src/trigger/trigger.utils.ts +56 -0
  208. package/dist/task/task-node-manager.d.ts +0 -1
  209. package/dist/task/task-node-manager.d.ts.map +0 -1
  210. package/dist/task/task-node-manager.js +0 -2
  211. package/dist/task/task-node-manager.js.map +0 -1
  212. package/src/task/task-node-manager.ts +0 -0
@@ -0,0 +1,91 @@
1
+ import { createTarget, validateWithSchema } from "../core.api";
2
+ import { generateResponse } from "../core.interface";
3
+ import { createApiLogger, logManager } from "../shared/log";
4
+ import { z } from "zod";
5
+ import { CategoryTask, TaskStatus } from "./task.interface";
6
+ import { TaskRepoValidation } from "./task-repo-validation";
7
+ const traceIdSchema = z.string().trim().min(1).optional();
8
+ const traceParentIdSchema = z.string().trim().min(1).nullable().optional();
9
+ /** Initial status for a new task — OPEN (draft) or TODO (claimable by workers). */
10
+ const postTaskInitialStatusSchema = z
11
+ .union([z.literal(TaskStatus.OPEN), z.literal(TaskStatus.TODO)])
12
+ .optional()
13
+ .default(TaskStatus.TODO);
14
+ export const postTaskSchema = z.object({
15
+ name: z.string().trim().min(1),
16
+ /** Task type key — matches `task.value`, {@link patchClaimTask}, {@link Repo.value}, and local Repo registry. */
17
+ value: z.string().trim().min(1),
18
+ params: z.unknown(),
19
+ taskStatus: postTaskInitialStatusSchema,
20
+ tagList: z.array(z.string()).optional().default([]),
21
+ extra: z.string().optional(),
22
+ traceId: traceIdSchema,
23
+ traceParentId: traceParentIdSchema,
24
+ });
25
+ /**
26
+ * Create a task row (scheduler / admin). **Node entry only** — requires local Repo bootstrap.
27
+ *
28
+ * @see target-supabase-sdk/node
29
+ */
30
+ export const postTask = validateWithSchema(postTaskSchema, "postTaskSchema")(async ({ name, value, params, taskStatus, tagList, extra, traceId, traceParentId, }) => {
31
+ const taskTraceId = traceId?.trim() || logManager.generateTraceId();
32
+ const logger = createApiLogger("postTask", {
33
+ traceId: taskTraceId,
34
+ traceParentId: traceParentId ?? null,
35
+ });
36
+ const validation = await TaskRepoValidation.validate({
37
+ logger,
38
+ taskTypeKey: value,
39
+ params,
40
+ bootstrapLocal: true,
41
+ });
42
+ if (!validation.isValid) {
43
+ logger.warn(validation.message, {
44
+ topic: "task",
45
+ data: {
46
+ taskTypeKey: value,
47
+ reason: validation.reason,
48
+ step: validation.step,
49
+ },
50
+ });
51
+ return generateResponse.error(validation.message, undefined, String(validation.code));
52
+ }
53
+ const result = await createTarget({
54
+ payload: {
55
+ name,
56
+ value,
57
+ params,
58
+ taskStatus,
59
+ tagList,
60
+ extra,
61
+ traceId: taskTraceId,
62
+ traceParentId,
63
+ },
64
+ createFn: () => ({
65
+ name,
66
+ value,
67
+ category: CategoryTask.TASK,
68
+ tagList,
69
+ extra,
70
+ details: {
71
+ manifestVersion: 0,
72
+ status: taskStatus,
73
+ params,
74
+ progress: 0,
75
+ nodeId: null,
76
+ traceId: taskTraceId,
77
+ },
78
+ }),
79
+ });
80
+ logger.info("任務已創建", {
81
+ topic: "task",
82
+ data: {
83
+ taskId: result.data?.id,
84
+ taskTypeKey: value,
85
+ status: taskStatus,
86
+ traceId: taskTraceId,
87
+ },
88
+ });
89
+ return result;
90
+ });
91
+ //# sourceMappingURL=task-post.api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-post.api.js","sourceRoot":"","sources":["../../src/task/task-post.api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,97 @@
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
+ /** True when scan was skipped due to unchanged config fingerprint */
86
+ cached?: boolean;
87
+ }
88
+ /** Host app config directory (relative to `cwd`) — recommended for library consumers */
89
+ export declare const TASK_RUNNER_CONFIG_DIR: "config";
90
+ export declare const TASK_RUNNER_ROOT_CONFIG_FILENAME: "task.config.js";
91
+ /** Default root config path: `config/task.config.js` */
92
+ export declare const TASK_RUNNER_ROOT_CONFIG_RELATIVE_PATH: "config/task.config.js";
93
+ /** Legacy fallback at project root */
94
+ export declare const TASK_RUNNER_ROOT_CONFIG_LEGACY_RELATIVE_PATH: "task.config.js";
95
+ /** Per-task config filename inside each folder under `taskDir` */
96
+ export declare const TASK_LOCAL_PACKAGE_CONFIG_FILENAME: "task.config.js";
97
+ //# 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;IAC7C,qEAAqE;IACrE,MAAM,CAAC,EAAE,OAAO,CAAC;CACpB;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;AAmE3D,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"}
@@ -0,0 +1,46 @@
1
+ import { type RepoContextFailureReason } from "../repo/repo-manager";
2
+ import { LoggerWithScope } from "../shared/log";
3
+ import { type BootstrapLocalTasksOptions } from "./local-task-registry";
4
+ import { ResultCode } from "./task.interface";
5
+ import type { TaskRepoContext } from "./task-repo-context";
6
+ export type TaskRepoValidationFailureReason = "MISSING_PARAMS" | RepoContextFailureReason | "PARAMS_VALIDATION_FAILED" | "TASK_TYPE_KEY_MISMATCH";
7
+ export type ValidateTaskRepoAndParamsInput = {
8
+ logger: LoggerWithScope;
9
+ taskTypeKey: string;
10
+ params: unknown;
11
+ /**
12
+ * When true, run {@link bootstrapLocalTasks} before resolve (CLI / Trigger / postTask).
13
+ * Worker paths should omit — {@link TaskManager.registerTasks} already bootstrapped.
14
+ */
15
+ bootstrapLocal?: boolean;
16
+ bootstrapLocalOptions?: BootstrapLocalTasksOptions;
17
+ /**
18
+ * When false, do not fetch Repo from Supabase if the task type is not locally registered.
19
+ * Default `true`. Align with {@link RegisterTasksOptions.includeRemote}.
20
+ */
21
+ includeRemote?: boolean;
22
+ };
23
+ export type ValidateTaskRepoAndParamsFailure = {
24
+ isValid: false;
25
+ code: ResultCode;
26
+ message: string;
27
+ reason: TaskRepoValidationFailureReason;
28
+ step: string;
29
+ };
30
+ export type ValidateTaskRepoAndParamsSuccess = {
31
+ isValid: true;
32
+ repoContext: TaskRepoContext;
33
+ };
34
+ export type ValidateTaskRepoAndParamsResult = ValidateTaskRepoAndParamsFailure | ValidateTaskRepoAndParamsSuccess;
35
+ /**
36
+ * Resolve task Repo context and validate `params` via `taskParamsValidator`.
37
+ *
38
+ * Repo resolution uses {@link RepoManager.getRepoContext}:
39
+ * local registry first; when no local entry and `includeRemote`, loads from Supabase.
40
+ */
41
+ declare function validateTaskRepoAndParams({ logger, taskTypeKey, params, bootstrapLocal, bootstrapLocalOptions, includeRemote, }: ValidateTaskRepoAndParamsInput): Promise<ValidateTaskRepoAndParamsResult>;
42
+ declare const TaskRepoValidation: {
43
+ validate: typeof validateTaskRepoAndParams;
44
+ };
45
+ export { TaskRepoValidation, validateTaskRepoAndParams };
46
+ //# sourceMappingURL=task-repo-validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-repo-validation.d.ts","sourceRoot":"","sources":["../../src/task/task-repo-validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAClF,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAuB,KAAK,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AAC7F,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D,MAAM,MAAM,+BAA+B,GACrC,gBAAgB,GAChB,wBAAwB,GACxB,0BAA0B,GAC1B,wBAAwB,CAAC;AAE/B,MAAM,MAAM,8BAA8B,GAAG;IACzC,MAAM,EAAE,eAAe,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,qBAAqB,CAAC,EAAE,0BAA0B,CAAC;IACnD;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG;IAC3C,OAAO,EAAE,KAAK,CAAC;IACf,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,+BAA+B,CAAC;IACxC,IAAI,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG;IAC3C,OAAO,EAAE,IAAI,CAAC;IACd,WAAW,EAAE,eAAe,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,+BAA+B,GACrC,gCAAgC,GAChC,gCAAgC,CAAC;AA2BvC;;;;;GAKG;AACH,iBAAe,yBAAyB,CAAC,EACrC,MAAM,EACN,WAAW,EACX,MAAM,EACN,cAAsB,EACtB,qBAAqB,EACrB,aAAoB,GACvB,EAAE,8BAA8B,GAAG,OAAO,CAAC,+BAA+B,CAAC,CAgF3E;AAED,QAAA,MAAM,kBAAkB;;CAEvB,CAAC;AAEF,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,CAAC"}
@@ -0,0 +1,96 @@
1
+ import { RepoManager } from "../repo/repo-manager";
2
+ import { bootstrapLocalTasks } from "./local-task-registry";
3
+ import { ResultCode } from "./task.interface";
4
+ function validateTaskParams(validator, taskParams, logger) {
5
+ try {
6
+ return validator(taskParams) === true;
7
+ }
8
+ catch (error) {
9
+ logger.warn("taskParamsValidator 拋出異常", {
10
+ topic: "task",
11
+ data: { error: error instanceof Error ? error.message : error },
12
+ });
13
+ return false;
14
+ }
15
+ }
16
+ function invalid(params) {
17
+ return { isValid: false, ...params };
18
+ }
19
+ /**
20
+ * Resolve task Repo context and validate `params` via `taskParamsValidator`.
21
+ *
22
+ * Repo resolution uses {@link RepoManager.getRepoContext}:
23
+ * local registry first; when no local entry and `includeRemote`, loads from Supabase.
24
+ */
25
+ async function validateTaskRepoAndParams({ logger, taskTypeKey, params, bootstrapLocal = false, bootstrapLocalOptions, includeRemote = true, }) {
26
+ if (params == null) {
27
+ return invalid({
28
+ reason: "MISSING_PARAMS",
29
+ code: ResultCode.PARAMS_NOT_VALID,
30
+ message: "任務缺少 params",
31
+ step: "params",
32
+ });
33
+ }
34
+ if (bootstrapLocal) {
35
+ const bootstrap = await bootstrapLocalTasks({
36
+ ...bootstrapLocalOptions,
37
+ forTaskTypeKey: taskTypeKey,
38
+ });
39
+ logger.debug("本地任務 bootstrap 完成", {
40
+ topic: "task",
41
+ data: {
42
+ taskTypeKey,
43
+ step: "local_bootstrap",
44
+ status: bootstrap.status,
45
+ registered: bootstrap.registered,
46
+ cached: bootstrap.cached ?? false,
47
+ message: bootstrap.message,
48
+ },
49
+ });
50
+ }
51
+ logger.debug("開始解析 Repo 上下文", {
52
+ topic: "task",
53
+ data: { taskTypeKey, step: "repo_load", includeRemote },
54
+ });
55
+ const { context: repoContext, error: repoError, failureReason, resolvedVia, } = await RepoManager.getRepoContext({
56
+ logger,
57
+ taskTypeKey,
58
+ includeRemote,
59
+ });
60
+ if (repoContext == null) {
61
+ return invalid({
62
+ reason: failureReason ?? "REMOTE_REPO_LOAD_FAILED",
63
+ code: ResultCode.REPO_NOT_VALID,
64
+ message: repoError ?? "無法加載 Repo 上下文",
65
+ step: "repo_load",
66
+ });
67
+ }
68
+ logger.debug("Repo 上下文解析完成", {
69
+ topic: "task",
70
+ data: { taskTypeKey, step: "repo_load", resolvedVia },
71
+ });
72
+ if (repoContext.taskFn.taskTypeKey !== taskTypeKey) {
73
+ return invalid({
74
+ reason: "TASK_TYPE_KEY_MISMATCH",
75
+ code: ResultCode.REPO_NOT_VALID,
76
+ message: `taskFn.taskTypeKey (${repoContext.taskFn.taskTypeKey}) 與 task.value (${taskTypeKey}) 不一致`,
77
+ step: "task_type_key",
78
+ });
79
+ }
80
+ logger.debug("開始校驗任務參數", { topic: "task", data: { taskTypeKey, step: "params_validation" } });
81
+ if (!validateTaskParams(repoContext.taskParamsValidator, params, logger)) {
82
+ return invalid({
83
+ reason: "PARAMS_VALIDATION_FAILED",
84
+ code: ResultCode.PARAMS_NOT_VALID,
85
+ message: "任務參數校驗失敗",
86
+ step: "params_validation",
87
+ });
88
+ }
89
+ logger.debug("任務參數校驗通過", { topic: "task", data: { taskTypeKey, step: "params_validation" } });
90
+ return { isValid: true, repoContext };
91
+ }
92
+ const TaskRepoValidation = {
93
+ validate: validateTaskRepoAndParams,
94
+ };
95
+ export { TaskRepoValidation, validateTaskRepoAndParams };
96
+ //# sourceMappingURL=task-repo-validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-repo-validation.js","sourceRoot":"","sources":["../../src/task/task-repo-validation.ts"],"names":[],"mappings":"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"}
@@ -1 +1,199 @@
1
+ import { type SupabaseResponse } from "../core.interface";
2
+ import { z } from "zod";
3
+ import { Task, 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
+ action: TaskStatusAction.CLAIM;
43
+ nodeId: string;
44
+ extra?: string | undefined;
45
+ traceId?: string | undefined;
46
+ }, {
47
+ id: string;
48
+ action: TaskStatusAction.CLAIM;
49
+ nodeId: string;
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
+ action: TaskStatusAction.CANCEL;
79
+ nodeId: string;
80
+ extra?: string | undefined;
81
+ traceId?: string | undefined;
82
+ }, {
83
+ id: string;
84
+ action: TaskStatusAction.CANCEL;
85
+ nodeId: string;
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
+ action: TaskStatusAction.FINISH;
98
+ nodeId: string;
99
+ cost: number;
100
+ extra?: string | undefined;
101
+ traceId?: string | undefined;
102
+ }, {
103
+ id: string;
104
+ action: TaskStatusAction.FINISH;
105
+ nodeId: string;
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 patchChangeTaskStatus: (payload: {
143
+ id: string;
144
+ action: TaskStatusAction.PUBLISH;
145
+ extra?: string | undefined;
146
+ traceId?: string | undefined;
147
+ } | {
148
+ id: string;
149
+ action: TaskStatusAction.CLOSE;
150
+ extra?: string | undefined;
151
+ traceId?: string | undefined;
152
+ } | {
153
+ id: string;
154
+ action: TaskStatusAction.CLAIM;
155
+ nodeId: string;
156
+ extra?: string | undefined;
157
+ traceId?: string | undefined;
158
+ } | {
159
+ id: string;
160
+ action: TaskStatusAction.RESET;
161
+ extra?: string | undefined;
162
+ traceId?: string | undefined;
163
+ nodeId?: string | undefined;
164
+ } | {
165
+ id: string;
166
+ action: TaskStatusAction.CANCEL;
167
+ nodeId: string;
168
+ extra?: string | undefined;
169
+ traceId?: string | undefined;
170
+ } | {
171
+ id: string;
172
+ action: TaskStatusAction.FINISH;
173
+ nodeId: string;
174
+ cost: number;
175
+ extra?: string | undefined;
176
+ traceId?: string | undefined;
177
+ }) => SupabaseResponse<unknown> | Promise<SupabaseResponse<unknown>>;
178
+ /** Update progress on a DOING task; only the owning node may write (see `lockOnDoingOwner`). */
179
+ export declare const patchTaskProgress: (payload: {
180
+ id: string;
181
+ nodeId: string;
182
+ progress: number;
183
+ traceId?: string | undefined;
184
+ }) => SupabaseResponse<Task> | Promise<SupabaseResponse<Task>>;
185
+ /**
186
+ * Discover and claim one TODO task for this node.
187
+ *
188
+ * Flow: filter by `availableTaskList` → {@link claimTaskById} (same as `action: CLAIM`).
189
+ * Equivalent to `patchChangeTaskStatus({ id, action: CLAIM, nodeId })` when `id` is already known.
190
+ *
191
+ * Returns `data: null` when no TODO task matches.
192
+ * Optimistic lock conflicts return `{ error }` with `code: "OPTIMISTIC_LOCK"` (not thrown).
193
+ */
194
+ export declare const patchClaimTask: (payload: {
195
+ nodeId: string;
196
+ availableTaskList: string[];
197
+ traceId?: string | undefined;
198
+ }) => SupabaseResponse<Task | null> | Promise<SupabaseResponse<Task | null>>;
1
199
  //# 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,EAA2B,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AA0D7G,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;AAgGzE,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oEAmGhC,CAAC;AAIH,gGAAgG;AAChG,eAAO,MAAM,iBAAiB;;;;;8DAe5B,CAAC;AAIH;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc;;;;4EAgCzB,CAAC"}