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.
Files changed (144) hide show
  1. package/README.md +8 -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/command/command.api.d.ts +43 -0
  6. package/dist/command/command.api.d.ts.map +1 -0
  7. package/dist/command/command.api.js +58 -0
  8. package/dist/command/command.api.js.map +1 -0
  9. package/dist/command/command.interface.d.ts +14 -0
  10. package/dist/command/command.interface.d.ts.map +1 -0
  11. package/dist/command/command.interface.js +9 -0
  12. package/dist/command/command.interface.js.map +1 -0
  13. package/dist/core.api.d.ts +70 -6
  14. package/dist/core.api.d.ts.map +1 -1
  15. package/dist/core.api.js +191 -13
  16. package/dist/core.api.js.map +1 -1
  17. package/dist/file/file-manager.d.ts +1 -1
  18. package/dist/file/file-manager.d.ts.map +1 -1
  19. package/dist/file/file-manager.js +1 -1
  20. package/dist/file/file-manager.js.map +1 -1
  21. package/dist/index.d.ts +9 -1
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +8 -1
  24. package/dist/index.js.map +1 -1
  25. package/dist/node/node-manager.d.ts +48 -0
  26. package/dist/node/node-manager.d.ts.map +1 -0
  27. package/dist/node/node-manager.js +619 -0
  28. package/dist/node/node-manager.js.map +1 -0
  29. package/dist/node/node-task.preset.d.ts +1 -0
  30. package/dist/node/node-task.preset.d.ts.map +1 -0
  31. package/dist/node/node-task.preset.js +14 -0
  32. package/dist/node/node-task.preset.js.map +1 -0
  33. package/dist/node/node.api.d.ts +67 -31
  34. package/dist/node/node.api.d.ts.map +1 -1
  35. package/dist/node/node.api.js +65 -102
  36. package/dist/node/node.api.js.map +1 -1
  37. package/dist/node/node.interface.d.ts +7 -0
  38. package/dist/node/node.interface.d.ts.map +1 -1
  39. package/dist/node/node.interface.js +2 -0
  40. package/dist/node/node.interface.js.map +1 -1
  41. package/dist/node/node.utils.d.ts +5 -0
  42. package/dist/node/node.utils.d.ts.map +1 -0
  43. package/dist/node/node.utils.js +36 -0
  44. package/dist/node/node.utils.js.map +1 -0
  45. package/dist/parcel/parcel-manager.d.ts +1 -1
  46. package/dist/parcel/parcel-manager.d.ts.map +1 -1
  47. package/dist/parcel/parcel-manager.js +1 -1
  48. package/dist/parcel/parcel-manager.js.map +1 -1
  49. package/dist/repo/repo-context.utils.d.ts +24 -0
  50. package/dist/repo/repo-context.utils.d.ts.map +1 -0
  51. package/dist/repo/repo-context.utils.js +81 -0
  52. package/dist/repo/repo-context.utils.js.map +1 -0
  53. package/dist/repo/repo-manager.d.ts +31 -0
  54. package/dist/repo/repo-manager.d.ts.map +1 -0
  55. package/dist/repo/repo-manager.js +156 -0
  56. package/dist/repo/repo-manager.js.map +1 -0
  57. package/dist/repo/repo.api.d.ts +16 -0
  58. package/dist/repo/repo.api.d.ts.map +1 -0
  59. package/dist/repo/repo.api.js +40 -0
  60. package/dist/repo/repo.api.js.map +1 -0
  61. package/dist/repo/repo.interface.d.ts +12 -5
  62. package/dist/repo/repo.interface.d.ts.map +1 -1
  63. package/dist/repo/repo.interface.js +2 -2
  64. package/dist/repo/repo.interface.js.map +1 -1
  65. package/dist/repo/repo.script-loader.d.ts +19 -0
  66. package/dist/repo/repo.script-loader.d.ts.map +1 -0
  67. package/dist/repo/repo.script-loader.js +108 -0
  68. package/dist/repo/repo.script-loader.js.map +1 -0
  69. package/dist/shared/log/create-api-logger.d.ts +17 -0
  70. package/dist/shared/log/create-api-logger.d.ts.map +1 -0
  71. package/dist/shared/log/create-api-logger.js +15 -0
  72. package/dist/shared/log/create-api-logger.js.map +1 -0
  73. package/dist/shared/log/log-manager.d.ts +114 -0
  74. package/dist/shared/log/log-manager.d.ts.map +1 -0
  75. package/dist/shared/log/log-manager.js +218 -0
  76. package/dist/shared/log/log-manager.js.map +1 -0
  77. package/dist/shared/utils/config-path.utils.d.ts +38 -0
  78. package/dist/shared/utils/config-path.utils.d.ts.map +1 -0
  79. package/dist/shared/utils/config-path.utils.js +85 -0
  80. package/dist/shared/utils/config-path.utils.js.map +1 -0
  81. package/dist/shared/utils/error.utils.d.ts +11 -0
  82. package/dist/shared/utils/error.utils.d.ts.map +1 -0
  83. package/dist/shared/utils/error.utils.js +15 -0
  84. package/dist/shared/utils/error.utils.js.map +1 -0
  85. package/dist/shared/utils/id.utils.d.ts +3 -0
  86. package/dist/shared/utils/id.utils.d.ts.map +1 -0
  87. package/dist/shared/utils/id.utils.js +5 -0
  88. package/dist/shared/utils/id.utils.js.map +1 -0
  89. package/dist/supabase.js +1 -1
  90. package/dist/supabase.js.map +1 -1
  91. package/dist/task/local-task-registry.d.ts +27 -0
  92. package/dist/task/local-task-registry.d.ts.map +1 -0
  93. package/dist/task/local-task-registry.js +153 -0
  94. package/dist/task/local-task-registry.js.map +1 -0
  95. package/dist/task/task-manager.d.ts +52 -0
  96. package/dist/task/task-manager.d.ts.map +1 -0
  97. package/dist/task/task-manager.js +217 -0
  98. package/dist/task/task-manager.js.map +1 -0
  99. package/dist/task/task-repo-context.d.ts +95 -0
  100. package/dist/task/task-repo-context.d.ts.map +1 -0
  101. package/dist/task/task-repo-context.js +12 -0
  102. package/dist/task/task-repo-context.js.map +1 -0
  103. package/dist/task/task.api.d.ts +240 -0
  104. package/dist/task/task.api.d.ts.map +1 -1
  105. package/dist/task/task.api.js +350 -1
  106. package/dist/task/task.api.js.map +1 -1
  107. package/dist/task/task.interface.d.ts +9 -2
  108. package/dist/task/task.interface.d.ts.map +1 -1
  109. package/dist/task/task.interface.js +10 -0
  110. package/dist/task/task.interface.js.map +1 -1
  111. package/package.json +10 -3
  112. package/src/auth/auth.api.ts +3 -1
  113. package/src/command/command.api.ts +88 -0
  114. package/src/command/command.interface.ts +17 -0
  115. package/src/core.api.ts +305 -26
  116. package/src/file/file-manager.ts +1 -1
  117. package/src/index.ts +18 -3
  118. package/src/node/node-manager.ts +673 -0
  119. package/src/node/node-task.preset.ts +13 -0
  120. package/src/node/node.api.ts +95 -117
  121. package/src/node/node.interface.ts +8 -0
  122. package/src/node/node.utils.ts +36 -0
  123. package/src/parcel/parcel-manager.ts +1 -1
  124. package/src/repo/repo-context.utils.ts +111 -0
  125. package/src/repo/repo-manager.ts +217 -0
  126. package/src/repo/repo.api.ts +50 -0
  127. package/src/repo/repo.interface.ts +13 -5
  128. package/src/repo/repo.script-loader.ts +140 -0
  129. package/src/shared/log/create-api-logger.ts +25 -0
  130. package/src/shared/log/log-manager.ts +340 -0
  131. package/src/shared/utils/config-path.utils.ts +104 -0
  132. package/src/shared/utils/error.utils.ts +15 -0
  133. package/src/shared/utils/id.utils.ts +4 -0
  134. package/src/supabase.ts +1 -1
  135. package/src/task/local-task-registry.ts +195 -0
  136. package/src/task/task-manager.ts +312 -0
  137. package/src/task/task-repo-context.ts +103 -0
  138. package/src/task/task.api.ts +429 -0
  139. package/src/task/task.interface.ts +10 -2
  140. package/dist/task/task-node-manager.d.ts +0 -1
  141. package/dist/task/task-node-manager.d.ts.map +0 -1
  142. package/dist/task/task-node-manager.js +0 -2
  143. package/dist/task/task-node-manager.js.map +0 -1
  144. package/src/task/task-node-manager.ts +0 -0
@@ -0,0 +1,619 @@
1
+ import { MAX_POLL_TARGET_LIST_SIZE } from "../core.api";
2
+ import { getPollCommandList } from "../command/command.api";
3
+ import { CommandType } from "../command/command.interface";
4
+ import { logManager } from "../shared/log/log-manager";
5
+ import { getErrorMessage, toError } from "../shared/utils/error.utils";
6
+ import { TaskManager } from "../task/task-manager";
7
+ import { patchChangeTaskStatus, patchClaimTask } from "../task/task.api";
8
+ import { TaskStatusAction } from "../task/task.interface";
9
+ import { patchChangeNodeStatus, patchNodeHeartBeat, patchStopNode, postRegisterNode } from "./node.api";
10
+ import { NodeStatus } from "./node.interface";
11
+ import { formatHeartbeat, getRandomInterval } from "./node.utils";
12
+ class NodeManager {
13
+ static HEARTBEAT_FAILURE_THRESHOLD = 3;
14
+ _localNodeId = null;
15
+ _isNodeIdLocked = false;
16
+ _availableTaskList = [];
17
+ isRunning;
18
+ loopCount;
19
+ consecutiveHeartbeatFailures = 0;
20
+ /** 進程生命週期 traceId — bootstrap / register / shutdown 共用 */
21
+ startupTraceId;
22
+ /** 進行中的 shutdown;並發/重複調用復用同一 Promise。 */
23
+ shutdownPromise = null;
24
+ /** start() 冪等:重複調用復用同一 Promise。 */
25
+ startPromise = null;
26
+ get availableTaskList() {
27
+ return [...this._availableTaskList];
28
+ }
29
+ get localNodeId() {
30
+ return this._localNodeId;
31
+ }
32
+ set localNodeId(value) {
33
+ if (this._isNodeIdLocked) {
34
+ throw new Error("Node ID cannot be modified after initial assignment");
35
+ }
36
+ if (typeof value !== "string" || value.trim() === "") {
37
+ throw new Error("Invalid node ID");
38
+ }
39
+ this._localNodeId = value;
40
+ this._isNodeIdLocked = true;
41
+ }
42
+ constructor() {
43
+ this.isRunning = true;
44
+ this.loopCount = 0;
45
+ this.startupTraceId = logManager.generateTraceId();
46
+ }
47
+ getLogNodeId() {
48
+ return this.localNodeId ?? "bootstrap";
49
+ }
50
+ isShuttingDown() {
51
+ return this.shutdownPromise != null;
52
+ }
53
+ /** Fire-and-forget:供信號/致命路徑調用;shutdown Promise 內部吞掉 rejection,避免 unhandledRejection 遞迴。 */
54
+ requestShutdown(trigger) {
55
+ void this.shutdown({ trigger });
56
+ }
57
+ /** 啟動日誌 + SIGTERM/SIGINT/uncaughtException/unhandledRejection → shutdown */
58
+ registerProcessLifecycle(logger) {
59
+ process.on("SIGTERM", () => {
60
+ logger.warn("收到 SIGTERM 信號,準備關閉節點", { topic: "process" });
61
+ this.requestShutdown("SIGTERM");
62
+ });
63
+ process.on("SIGINT", () => {
64
+ logger.warn("收到 SIGINT 信號,準備關閉節點", { topic: "process" });
65
+ this.requestShutdown("SIGINT");
66
+ });
67
+ process.on("uncaughtException", (error) => {
68
+ if (this.shutdownPromise != null) {
69
+ logger.critical("shutdown 進行中發生未捕獲異常", {
70
+ topic: "process",
71
+ context: {
72
+ name: error.name,
73
+ message: error.message,
74
+ stack: error.stack,
75
+ },
76
+ });
77
+ process.exit(1);
78
+ return;
79
+ }
80
+ logger.error("未捕獲的異常,準備關閉節點", {
81
+ topic: "process",
82
+ context: {
83
+ name: error.name,
84
+ message: error.message,
85
+ stack: error.stack,
86
+ },
87
+ });
88
+ this.requestShutdown("uncaughtException");
89
+ });
90
+ process.on("unhandledRejection", (reason) => {
91
+ if (this.shutdownPromise != null) {
92
+ logger.error("shutdown 進行中發生未處理的 Promise 拒絕", {
93
+ topic: "process",
94
+ context: {
95
+ reason: getErrorMessage(reason),
96
+ stack: reason instanceof Error ? reason.stack : undefined,
97
+ },
98
+ });
99
+ return;
100
+ }
101
+ logger.error("未處理的 Promise 拒絕,準備關閉節點", {
102
+ topic: "process",
103
+ context: {
104
+ reason: getErrorMessage(reason),
105
+ stack: reason instanceof Error ? reason.stack : undefined,
106
+ },
107
+ });
108
+ this.requestShutdown("unhandledRejection");
109
+ });
110
+ }
111
+ async start() {
112
+ if (this.startPromise != null) {
113
+ return this.startPromise;
114
+ }
115
+ this.startPromise = this.runStart();
116
+ return this.startPromise;
117
+ }
118
+ async runStart() {
119
+ const { logger } = logManager.withContext({
120
+ module: "nodeManager",
121
+ traceId: this.startupTraceId,
122
+ nodeId: this.getLogNodeId(),
123
+ });
124
+ logger.info("節點進程啟動中", {
125
+ topic: "node",
126
+ context: {
127
+ pid: process.pid,
128
+ env: process.env.NODE_ENV ?? "development",
129
+ },
130
+ });
131
+ this.registerProcessLifecycle(logger);
132
+ logger.info("開始註冊任務", { topic: "node" });
133
+ try {
134
+ const { availableTaskList } = await TaskManager.registerTasks({ logger });
135
+ this._availableTaskList = availableTaskList;
136
+ }
137
+ catch (error) {
138
+ logger.error("任務註冊失敗", {
139
+ topic: "node",
140
+ context: { error: getErrorMessage(error) },
141
+ });
142
+ this.requestShutdown("bootstrap:register-tasks");
143
+ return;
144
+ }
145
+ logger.info("開始向 Supabase 註冊節點", { topic: "node" });
146
+ try {
147
+ const { data, error } = await postRegisterNode({ traceId: this.startupTraceId });
148
+ if (data == null || error) {
149
+ throw error ?? new Error("postRegisterNode 失敗");
150
+ }
151
+ this.localNodeId = data.id;
152
+ logger.resetContext({ nodeId: data.id });
153
+ logger.success("節點註冊成功", {
154
+ topic: "node",
155
+ context: {
156
+ nodeId: data.id,
157
+ details: data.details,
158
+ },
159
+ });
160
+ }
161
+ catch (error) {
162
+ logger.error("節點註冊失敗", {
163
+ topic: "node",
164
+ context: { error: getErrorMessage(error) },
165
+ });
166
+ this.requestShutdown("bootstrap:register-node");
167
+ return;
168
+ }
169
+ const nodeId = this.localNodeId;
170
+ logger.info("節點準備進入主循環", { topic: "node" });
171
+ const { error: enterBusyError } = await patchChangeNodeStatus({
172
+ nodeId,
173
+ status: NodeStatus.BUSY,
174
+ fromStatus: NodeStatus.READY,
175
+ traceId: this.startupTraceId,
176
+ });
177
+ if (enterBusyError) {
178
+ logger.error("節點進入主循環失敗,無法更新節點狀態為 BUSY", {
179
+ topic: "node",
180
+ context: { error: enterBusyError.message },
181
+ });
182
+ this.requestShutdown("bootstrap:enter-busy");
183
+ return;
184
+ }
185
+ logger.info("節點狀態已設為 BUSY,進入主循環", { topic: "node", context: { nodeId } });
186
+ while (this.isRunning) {
187
+ this.loopCount++;
188
+ const loopTraceId = logManager.generateTraceId();
189
+ const loopCtx = { loopTraceId, nodeId };
190
+ const { logger: iterLogger } = logManager.withContext({
191
+ module: "nodeManager-loop-iteration",
192
+ traceId: loopTraceId,
193
+ nodeId,
194
+ });
195
+ iterLogger.info(`主循環第 ${this.loopCount} 輪開始`, {
196
+ topic: "node",
197
+ context: { nodeId, loopCount: this.loopCount, },
198
+ });
199
+ try {
200
+ // 每輪三步:1. 控制指令 2. 心跳 3. 認領並執行任務
201
+ await this.batchCommand(loopCtx);
202
+ if (this.isShuttingDown()) {
203
+ iterLogger.info("節點關閉中,跳過本輪剩餘步驟", { topic: "node" });
204
+ break;
205
+ }
206
+ const heartbeatOk = await this.heartbeat(loopCtx);
207
+ if (this.isShuttingDown()) {
208
+ iterLogger.info("節點關閉中,跳過本輪剩餘步驟", { topic: "node" });
209
+ break;
210
+ }
211
+ if (!heartbeatOk) {
212
+ iterLogger.warn("心跳失敗,本輪跳過任務認領", { topic: "node" });
213
+ }
214
+ else {
215
+ await this.runAsWorker(loopCtx);
216
+ }
217
+ }
218
+ catch (error) {
219
+ iterLogger.critical(`主循環第 ${this.loopCount} 輪遇到未知錯誤`, {
220
+ topic: "node",
221
+ context: { error: getErrorMessage(error) },
222
+ });
223
+ }
224
+ if (this.isShuttingDown()) {
225
+ iterLogger.debug("節點關閉中,跳過等待間隔", { topic: "node" });
226
+ break;
227
+ }
228
+ const interval = getRandomInterval();
229
+ iterLogger.debug(`主循環第 ${this.loopCount} 輪完成,等待下一輪`, {
230
+ topic: "node",
231
+ context: { intervalMs: interval },
232
+ });
233
+ await new Promise((resolve) => setTimeout(resolve, interval));
234
+ }
235
+ }
236
+ async runAsWorker(ctx) {
237
+ const { loopTraceId, nodeId } = ctx;
238
+ const { logger } = logManager.withContext({
239
+ module: "runAsWorker",
240
+ traceId: loopTraceId,
241
+ nodeId,
242
+ });
243
+ const availableTaskList = this.availableTaskList;
244
+ if (availableTaskList.length === 0) {
245
+ logger.warn("未配置可認領任務類型,跳過本輪", { topic: "task" });
246
+ return;
247
+ }
248
+ logger.info("向 Supabase 認領任務", {
249
+ topic: "task",
250
+ context: { availableTaskList },
251
+ });
252
+ const { data: task, error: claimError } = await patchClaimTask({
253
+ nodeId,
254
+ availableTaskList: [...availableTaskList],
255
+ traceId: loopTraceId,
256
+ });
257
+ if (claimError) {
258
+ logger.error("認領任務 API 失敗", {
259
+ topic: "task",
260
+ context: {
261
+ availableTaskList,
262
+ error: claimError.message,
263
+ },
264
+ });
265
+ return;
266
+ }
267
+ if (task == null) {
268
+ logger.info("本輪無匹配的 TODO 任務", {
269
+ topic: "task",
270
+ context: { availableTaskList },
271
+ });
272
+ return;
273
+ }
274
+ logger.info("認領任務成功,準備執行", {
275
+ topic: "task",
276
+ context: {
277
+ taskId: task.id,
278
+ taskName: task.name,
279
+ taskTypeKey: task.value,
280
+ taskStatus: task.details.status,
281
+ },
282
+ });
283
+ const { logger: prepareLogger } = logManager.withContext({
284
+ module: "prepareTask",
285
+ traceId: loopTraceId,
286
+ nodeId,
287
+ });
288
+ const prepareResult = await TaskManager.prepareTask({ logger: prepareLogger, task });
289
+ const { isSuccess: isPrepareSuccess, taskFn, code, message, reason, step } = prepareResult;
290
+ if (!isPrepareSuccess || taskFn == null) {
291
+ prepareLogger.critical("任務準備失敗,無法繼續執行,中止任務並 RESET 為 OPEN", {
292
+ topic: "task",
293
+ context: {
294
+ taskId: task.id,
295
+ taskTypeKey: task.value,
296
+ code,
297
+ message,
298
+ reason,
299
+ step,
300
+ },
301
+ });
302
+ await this.abortTaskRun({
303
+ logger: prepareLogger,
304
+ taskId: task.id,
305
+ nodeId,
306
+ traceId: loopTraceId,
307
+ });
308
+ return;
309
+ }
310
+ const { logger: executeLogger } = logManager.withContext({
311
+ module: "executeTask",
312
+ traceId: loopTraceId,
313
+ nodeId,
314
+ });
315
+ const onExecuteAbort = async (error) => {
316
+ logger.critical("任務執行遇到未知錯誤,中止任務並 RESET 為 OPEN", {
317
+ topic: "task",
318
+ context: {
319
+ taskId: task.id,
320
+ taskName: task.name,
321
+ taskTypeKey: task.value,
322
+ error: getErrorMessage(error),
323
+ },
324
+ });
325
+ await this.abortTaskRun({
326
+ logger: executeLogger,
327
+ taskId: task.id,
328
+ nodeId,
329
+ traceId: loopTraceId,
330
+ });
331
+ };
332
+ executeLogger.info("開始執行業務邏輯", {
333
+ topic: "task",
334
+ context: { taskId: task.id, displayName: taskFn.displayName },
335
+ });
336
+ const startTime = Date.now();
337
+ let result = null;
338
+ try {
339
+ result = await taskFn();
340
+ }
341
+ catch (error) {
342
+ await onExecuteAbort(toError(error));
343
+ return;
344
+ }
345
+ if (result == null) {
346
+ await onExecuteAbort(new Error("任務執行結果為空"));
347
+ return;
348
+ }
349
+ executeLogger.info("任務執行完成", {
350
+ topic: "task",
351
+ context: { taskId: task.id, displayName: taskFn.displayName },
352
+ });
353
+ const { isSuccess: isTaskSuccess, cost, extra } = result ?? { isSuccess: false, cost: 0, extra: null };
354
+ if (isTaskSuccess) {
355
+ await this.finalizeTaskRun("success", { logger: executeLogger, taskId: task.id, taskTypeKey: task.value, nodeId, cost, extra, traceId: loopTraceId });
356
+ }
357
+ else {
358
+ await this.finalizeTaskRun("failure", { logger: executeLogger, taskId: task.id, taskTypeKey: task.value, nodeId, cost, extra, traceId: loopTraceId });
359
+ }
360
+ const duration = Date.now() - startTime;
361
+ executeLogger.info("業務邏輯執行完成", {
362
+ topic: "task",
363
+ context: { taskId: task.id, durationMs: duration, },
364
+ });
365
+ }
366
+ /** 執行過程遇到未知錯誤以至於無法繼續執行時:DOING → OPEN(RESET),釋放已認領的任務。 */
367
+ async abortTaskRun(params) {
368
+ const { logger, taskId, nodeId, traceId, extra } = params;
369
+ const logContext = { taskId, nodeId };
370
+ const extraValue = typeof extra === "string" ? extra : undefined;
371
+ const { error } = await patchChangeTaskStatus({
372
+ id: taskId,
373
+ action: TaskStatusAction.RESET,
374
+ nodeId,
375
+ extra: extraValue,
376
+ traceId,
377
+ });
378
+ if (error) {
379
+ logger.error(error.message, {
380
+ topic: "task",
381
+ context: logContext,
382
+ });
383
+ return false;
384
+ }
385
+ logger.info("任務已中止並 RESET 為 OPEN", { topic: "task", context: logContext });
386
+ return true;
387
+ }
388
+ /** Task 執行結束後更新 TaskStatus */
389
+ async finalizeTaskRun(outcome, params) {
390
+ const { logger, taskId, nodeId, taskTypeKey, cost, extra, traceId } = params;
391
+ const outcomePrefix = outcome === "success" ? "任務成功" : "任務失敗";
392
+ const logContext = { taskTypeKey, taskId, nodeId, };
393
+ const extraValue = typeof extra === "string" ? extra : undefined;
394
+ const { error: changeTaskStatusError } = outcome === "success"
395
+ ? await patchChangeTaskStatus({
396
+ id: taskId,
397
+ action: TaskStatusAction.FINISH,
398
+ nodeId,
399
+ cost,
400
+ extra: extraValue,
401
+ traceId,
402
+ })
403
+ : await patchChangeTaskStatus({
404
+ id: taskId,
405
+ action: TaskStatusAction.RESET,
406
+ nodeId,
407
+ extra: extraValue,
408
+ traceId,
409
+ });
410
+ // TODO retry
411
+ if (changeTaskStatusError) {
412
+ // This should NOT happen
413
+ const upperMessage = `${outcomePrefix}但是更新 TaskStatus 失敗,產生孤兒 Task,請儘快排查問題`;
414
+ logger.critical(upperMessage, {
415
+ topic: "task",
416
+ context: logContext,
417
+ });
418
+ throw new Error(upperMessage);
419
+ }
420
+ logger.info("更新 TaskStatus 成功", { topic: "task", context: logContext });
421
+ if (outcome === "success") {
422
+ logger.success("任務執行結束,業務邏輯成功", { topic: "task", context: logContext });
423
+ }
424
+ else {
425
+ logger.warn("任務執行結束,業務邏輯失敗", { topic: "task", context: logContext });
426
+ }
427
+ }
428
+ /**
429
+ * 關閉節點並退出進程。冪等:並發或重複調用復用同一進行中的 Promise,
430
+ * 避免重複 patchStopNode / process.exit。
431
+ */
432
+ async shutdown(options) {
433
+ if (this.shutdownPromise != null) {
434
+ const { logger } = logManager.withContext({
435
+ module: "nodeManager",
436
+ traceId: this.startupTraceId,
437
+ nodeId: this.getLogNodeId(),
438
+ });
439
+ logger.debug("shutdown 已在進行,跳過重複調用", {
440
+ topic: "node",
441
+ context: { trigger: options?.trigger ?? "unknown" },
442
+ });
443
+ return this.shutdownPromise;
444
+ }
445
+ this.isRunning = false;
446
+ this.shutdownPromise = this.runShutdown(options?.trigger).catch((error) => {
447
+ const { logger } = logManager.withContext({
448
+ module: "nodeManager",
449
+ traceId: this.startupTraceId,
450
+ nodeId: this.getLogNodeId(),
451
+ });
452
+ logger.error("shutdown 流程異常", {
453
+ topic: "node",
454
+ context: {
455
+ trigger: options?.trigger ?? "explicit",
456
+ error: getErrorMessage(error),
457
+ },
458
+ });
459
+ process.exit(1);
460
+ });
461
+ return this.shutdownPromise;
462
+ }
463
+ async runShutdown(trigger) {
464
+ const { logger } = logManager.withContext({
465
+ module: "nodeManager",
466
+ traceId: this.startupTraceId,
467
+ nodeId: this.getLogNodeId(),
468
+ });
469
+ logger.info("正在關閉節點進程", {
470
+ topic: "node",
471
+ context: { trigger: trigger ?? "explicit" },
472
+ });
473
+ if (this.localNodeId == null) {
474
+ logger.info("本地節點未註冊,直接退出", { topic: "node" });
475
+ process.exit(0);
476
+ return;
477
+ }
478
+ logger.info("正在登出節點", { topic: "node", context: { nodeId: this.localNodeId } });
479
+ try {
480
+ const { error } = await patchStopNode({
481
+ nodeId: this.localNodeId,
482
+ traceId: this.startupTraceId,
483
+ });
484
+ if (error) {
485
+ throw new Error(`patchStopNode 失敗: ${error.message}`);
486
+ }
487
+ logger.success("節點已登出", { topic: "node" });
488
+ }
489
+ catch (error) {
490
+ logger.critical("登出節點失敗", {
491
+ topic: "node",
492
+ context: { error: getErrorMessage(error) },
493
+ });
494
+ }
495
+ finally {
496
+ logger.info("節點進程退出", { topic: "node" });
497
+ process.exit(0);
498
+ }
499
+ }
500
+ /** @returns 心跳是否成功 */
501
+ async heartbeat(ctx) {
502
+ const { loopTraceId, nodeId } = ctx;
503
+ const { logger } = logManager.withContext({
504
+ module: "heartbeat",
505
+ traceId: loopTraceId,
506
+ nodeId,
507
+ });
508
+ logger.info("開始發送心跳", { topic: "node" });
509
+ let error;
510
+ let lastHeartBeat;
511
+ try {
512
+ const response = await patchNodeHeartBeat({ nodeId, traceId: loopTraceId });
513
+ error = response.error;
514
+ lastHeartBeat = response.data;
515
+ }
516
+ catch (caught) {
517
+ error = { message: getErrorMessage(caught) };
518
+ lastHeartBeat = null;
519
+ }
520
+ if (error || lastHeartBeat == null) {
521
+ this.consecutiveHeartbeatFailures++;
522
+ const failureCount = this.consecutiveHeartbeatFailures;
523
+ const logContext = {
524
+ error: getErrorMessage(error),
525
+ consecutiveFailures: failureCount,
526
+ threshold: NodeManager.HEARTBEAT_FAILURE_THRESHOLD,
527
+ };
528
+ if (failureCount >= NodeManager.HEARTBEAT_FAILURE_THRESHOLD) {
529
+ logger.critical("連續心跳失敗達上限,準備關閉節點", {
530
+ topic: "node",
531
+ context: logContext,
532
+ });
533
+ this.requestShutdown("heartbeat:consecutive-failures");
534
+ }
535
+ else {
536
+ logger.warn("心跳更新失敗", { topic: "node", context: logContext });
537
+ }
538
+ return false;
539
+ }
540
+ this.consecutiveHeartbeatFailures = 0;
541
+ logger.success("心跳更新成功", {
542
+ topic: "node",
543
+ context: { lastHeartBeat: formatHeartbeat(lastHeartBeat) },
544
+ });
545
+ return true;
546
+ }
547
+ async batchCommand(ctx) {
548
+ const { loopTraceId, nodeId } = ctx;
549
+ const { logger } = logManager.withContext({
550
+ module: "batchCommand",
551
+ traceId: loopTraceId,
552
+ nodeId,
553
+ });
554
+ logger.debug("開始檢查控制指令", { topic: "node" });
555
+ const { data: commandList = [], error: pollError } = await getPollCommandList({
556
+ nodeId,
557
+ traceId: loopTraceId,
558
+ size: MAX_POLL_TARGET_LIST_SIZE,
559
+ });
560
+ if (pollError) {
561
+ logger.warn("獲取指令失敗", {
562
+ topic: "node",
563
+ context: { error: pollError.message }
564
+ });
565
+ return;
566
+ }
567
+ if (commandList.length === 0) {
568
+ logger.info("獲取指令數量為 0", {
569
+ topic: "node",
570
+ });
571
+ return;
572
+ }
573
+ logger.info("獲取到控制指令", {
574
+ topic: "node",
575
+ context: { count: commandList.length },
576
+ });
577
+ for (const command of commandList) {
578
+ const cmd = command.name;
579
+ logger.info("執行控制指令", {
580
+ topic: "node",
581
+ context: { commandId: command.id, cmd },
582
+ });
583
+ try {
584
+ await this.executeCommand(cmd);
585
+ logger.success("控制指令執行成功", {
586
+ topic: "node",
587
+ context: { commandId: command.id, cmd },
588
+ });
589
+ }
590
+ catch (error) {
591
+ logger.warn("控制指令執行失敗", {
592
+ topic: "node",
593
+ context: {
594
+ commandId: command.id,
595
+ cmd,
596
+ error: getErrorMessage(error),
597
+ },
598
+ });
599
+ }
600
+ }
601
+ logger.info("控制指令批次處理完成", {
602
+ topic: "node",
603
+ context: { totalDequeued: commandList.length },
604
+ });
605
+ }
606
+ async executeCommand(cmd) {
607
+ switch (cmd) {
608
+ case CommandType.STOP_NODE:
609
+ this.requestShutdown("cmd:STOP_NODE");
610
+ return;
611
+ default: {
612
+ const unknownCmd = cmd;
613
+ throw new Error(`無法解析的cmd: ${unknownCmd}`);
614
+ }
615
+ }
616
+ }
617
+ }
618
+ export { NodeManager };
619
+ //# sourceMappingURL=node-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-manager.js","sourceRoot":"","sources":["../../src/node/node-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=node-task.preset.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-task.preset.d.ts","sourceRoot":"","sources":["../../src/node/node-task.preset.ts"],"names":[],"mappings":""}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ // export const generateControllerTaskPreset = () => {
3
+ // return {
4
+ // category: CategoryTask.TASK_CONTROLLER,
5
+ // taskTypeFilterList: CONTROLLER_TASK_TYPE_ALLOW_LIST,
6
+ // };
7
+ // };
8
+ // export const getWorkerTaskPreset = () => {
9
+ // return {
10
+ // category: CategoryTask.TASK,
11
+ // taskTypeFilterList: WORKER_TASK_TYPE_ALLOW_LIST,
12
+ // };
13
+ // };
14
+ //# sourceMappingURL=node-task.preset.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-task.preset.js","sourceRoot":"","sources":["../../src/node/node-task.preset.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,eAAe;AACf,kDAAkD;AAClD,+DAA+D;AAC/D,SAAS;AACT,KAAK;AAEL,6CAA6C;AAC7C,eAAe;AACf,uCAAuC;AACvC,2DAA2D;AAC3D,SAAS;AACT,KAAK"}