target-supabase-sdk 0.2.0 → 0.2.2

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 (484) hide show
  1. package/README.md +130 -11
  2. package/dist/browser.d.ts +44 -36
  3. package/dist/browser.d.ts.map +1 -1
  4. package/dist/browser.js +6 -45
  5. package/dist/browser.js.map +1 -1
  6. package/dist/chunks/create-logger-DyH3mZ8p.js +1028 -0
  7. package/dist/chunks/create-logger-DyH3mZ8p.js.map +1 -0
  8. package/dist/chunks/enable-log-persist-BH-tbKEj.js +1481 -0
  9. package/dist/chunks/enable-log-persist-BH-tbKEj.js.map +1 -0
  10. package/dist/chunks/word.interface-DLgRobKV.js +1973 -0
  11. package/dist/chunks/word.interface-DLgRobKV.js.map +1 -0
  12. package/dist/command/command.api.d.ts +1 -1
  13. package/dist/command/command.api.d.ts.map +1 -1
  14. package/dist/command/command.interface.d.ts +1 -1
  15. package/dist/command/command.interface.d.ts.map +1 -1
  16. package/dist/core.api.d.ts +10 -6
  17. package/dist/core.api.d.ts.map +1 -1
  18. package/dist/core.interface.d.ts +3 -2
  19. package/dist/core.interface.d.ts.map +1 -1
  20. package/dist/core.utils.d.ts +1 -1
  21. package/dist/core.utils.d.ts.map +1 -1
  22. package/dist/idea/idea.interface.d.ts +1 -1
  23. package/dist/idea/idea.interface.d.ts.map +1 -1
  24. package/dist/link/link.api.d.ts +1 -1
  25. package/dist/link/link.api.d.ts.map +1 -1
  26. package/dist/link/link.interface.d.ts +2 -2
  27. package/dist/link/link.interface.d.ts.map +1 -1
  28. package/dist/list/list.api.d.ts +3 -1
  29. package/dist/list/list.api.d.ts.map +1 -1
  30. package/dist/list/list.interface.d.ts +2 -2
  31. package/dist/list/list.interface.d.ts.map +1 -1
  32. package/dist/node/env/env-parsers.d.ts +19 -0
  33. package/dist/node/env/env-parsers.d.ts.map +1 -0
  34. package/dist/node/env/index.d.ts +11 -0
  35. package/dist/node/env/index.d.ts.map +1 -0
  36. package/dist/node/env/init-supabase-from-env.d.ts +17 -0
  37. package/dist/node/env/init-supabase-from-env.d.ts.map +1 -0
  38. package/dist/node/env/load-env.d.ts +20 -0
  39. package/dist/node/env/load-env.d.ts.map +1 -0
  40. package/dist/node/env/project-root.d.ts +11 -0
  41. package/dist/node/env/project-root.d.ts.map +1 -0
  42. package/dist/node/env/public-base-url.d.ts +10 -0
  43. package/dist/node/env/public-base-url.d.ts.map +1 -0
  44. package/dist/node/env/require-env.d.ts +3 -0
  45. package/dist/node/env/require-env.d.ts.map +1 -0
  46. package/dist/node/fs/json-state-store.d.ts +19 -0
  47. package/dist/node/fs/json-state-store.d.ts.map +1 -0
  48. package/dist/node/fs/read-source-file.d.ts +19 -0
  49. package/dist/node/fs/read-source-file.d.ts.map +1 -0
  50. package/dist/node/node-liveness.d.ts +30 -0
  51. package/dist/node/node-liveness.d.ts.map +1 -0
  52. package/dist/node/node-runtime.base.d.ts +21 -3
  53. package/dist/node/node-runtime.base.d.ts.map +1 -1
  54. package/dist/node/node.api.d.ts +1 -1
  55. package/dist/node/node.api.d.ts.map +1 -1
  56. package/dist/node/node.interface.d.ts +1 -6
  57. package/dist/node/node.interface.d.ts.map +1 -1
  58. package/dist/node/preload/run-service-preload.d.ts +14 -0
  59. package/dist/node/preload/run-service-preload.d.ts.map +1 -0
  60. package/dist/node/preload/service-preload.interface.d.ts +15 -0
  61. package/dist/node/preload/service-preload.interface.d.ts.map +1 -0
  62. package/dist/node/process/index.d.ts +5 -0
  63. package/dist/node/process/index.d.ts.map +1 -0
  64. package/dist/node/process/managed-child-processes.d.ts +37 -0
  65. package/dist/node/process/managed-child-processes.d.ts.map +1 -0
  66. package/dist/node/process/process-spawn.d.ts +27 -0
  67. package/dist/node/process/process-spawn.d.ts.map +1 -0
  68. package/dist/node/readiness/index.d.ts +9 -0
  69. package/dist/node/readiness/index.d.ts.map +1 -0
  70. package/dist/node/readiness/poll-until.d.ts +11 -0
  71. package/dist/node/readiness/poll-until.d.ts.map +1 -0
  72. package/dist/node/readiness/readiness-checks.d.ts +22 -0
  73. package/dist/node/readiness/readiness-checks.d.ts.map +1 -0
  74. package/dist/node/readiness/readiness.types.d.ts +12 -0
  75. package/dist/node/readiness/readiness.types.d.ts.map +1 -0
  76. package/dist/node/readiness/run-readiness-checks.d.ts +4 -0
  77. package/dist/node/readiness/run-readiness-checks.d.ts.map +1 -0
  78. package/dist/node/readiness/service-ready-gate.d.ts +26 -0
  79. package/dist/node/readiness/service-ready-gate.d.ts.map +1 -0
  80. package/dist/node.d.ts +26 -12
  81. package/dist/node.d.ts.map +1 -1
  82. package/dist/node.js +2482 -18
  83. package/dist/node.js.map +1 -1
  84. package/dist/parcel/chunk-fetch-registry.d.ts +14 -0
  85. package/dist/parcel/chunk-fetch-registry.d.ts.map +1 -0
  86. package/dist/parcel/chunk-url.utils.d.ts +9 -0
  87. package/dist/parcel/chunk-url.utils.d.ts.map +1 -0
  88. package/dist/parcel/parcel-manager.d.ts +44 -20
  89. package/dist/parcel/parcel-manager.d.ts.map +1 -1
  90. package/dist/parcel/parcel.api.d.ts +306 -0
  91. package/dist/parcel/parcel.api.d.ts.map +1 -0
  92. package/dist/parcel/parcel.interface.d.ts +26 -5
  93. package/dist/parcel/parcel.interface.d.ts.map +1 -1
  94. package/dist/parcel/parcel.service.d.ts +38 -0
  95. package/dist/parcel/parcel.service.d.ts.map +1 -0
  96. package/dist/parcel/storage-provider-registry.d.ts +17 -0
  97. package/dist/parcel/storage-provider-registry.d.ts.map +1 -0
  98. package/dist/parcel/storage-provider.types.d.ts +31 -0
  99. package/dist/parcel/storage-provider.types.d.ts.map +1 -0
  100. package/dist/preload.d.ts +7 -0
  101. package/dist/preload.d.ts.map +1 -0
  102. package/dist/preload.js +47 -0
  103. package/dist/preload.js.map +1 -0
  104. package/dist/repo/repo-context.utils.d.ts.map +1 -1
  105. package/dist/repo/repo-manager.d.ts +1 -1
  106. package/dist/repo/repo-manager.d.ts.map +1 -1
  107. package/dist/repo/repo.api.d.ts +1 -1
  108. package/dist/repo/repo.api.d.ts.map +1 -1
  109. package/dist/repo/repo.interface.d.ts +1 -1
  110. package/dist/repo/repo.interface.d.ts.map +1 -1
  111. package/dist/repo/repo.script-loader.d.ts +3 -3
  112. package/dist/repo/repo.script-loader.d.ts.map +1 -1
  113. package/dist/service/base.interface.d.ts +54 -57
  114. package/dist/service/base.interface.d.ts.map +1 -1
  115. package/dist/service/index.d.ts +21 -0
  116. package/dist/service/index.d.ts.map +1 -0
  117. package/dist/service/service.api.d.ts +503 -0
  118. package/dist/service/service.api.d.ts.map +1 -0
  119. package/dist/service/service.interface.d.ts +36 -9
  120. package/dist/service/service.interface.d.ts.map +1 -1
  121. package/dist/shared/http/fetch-retry.d.ts +21 -0
  122. package/dist/shared/http/fetch-retry.d.ts.map +1 -0
  123. package/dist/shared/log/create-logger.d.ts +27 -0
  124. package/dist/shared/log/create-logger.d.ts.map +1 -0
  125. package/dist/shared/log/enable-log-persist.d.ts +28 -0
  126. package/dist/shared/log/enable-log-persist.d.ts.map +1 -0
  127. package/dist/shared/log/index.d.ts +6 -6
  128. package/dist/shared/log/index.d.ts.map +1 -1
  129. package/dist/shared/log/log-manager.d.ts +25 -27
  130. package/dist/shared/log/log-manager.d.ts.map +1 -1
  131. package/dist/shared/log/log-persist-batch-id.d.ts +13 -0
  132. package/dist/shared/log/log-persist-batch-id.d.ts.map +1 -0
  133. package/dist/shared/log/log-persist-flush.d.ts +8 -0
  134. package/dist/shared/log/log-persist-flush.d.ts.map +1 -0
  135. package/dist/shared/log/log-persist-hook.d.ts +6 -0
  136. package/dist/shared/log/log-persist-hook.d.ts.map +1 -0
  137. package/dist/shared/log/log-persist-logger.d.ts +15 -0
  138. package/dist/shared/log/log-persist-logger.d.ts.map +1 -0
  139. package/dist/shared/log/log-persist-registry.d.ts +18 -0
  140. package/dist/shared/log/log-persist-registry.d.ts.map +1 -0
  141. package/dist/shared/log/log-persist.config.d.ts +10 -0
  142. package/dist/shared/log/log-persist.config.d.ts.map +1 -0
  143. package/dist/shared/log/log-persist.d.ts +55 -0
  144. package/dist/shared/log/log-persist.d.ts.map +1 -0
  145. package/dist/shared/log/log-persist.interface.d.ts +116 -0
  146. package/dist/shared/log/log-persist.interface.d.ts.map +1 -0
  147. package/dist/shared/log/log-scope.d.ts +25 -18
  148. package/dist/shared/log/log-scope.d.ts.map +1 -1
  149. package/dist/shared/utils/fetch-url.d.ts +3 -0
  150. package/dist/shared/utils/fetch-url.d.ts.map +1 -0
  151. package/dist/shared/utils/network-error.d.ts +14 -0
  152. package/dist/shared/utils/network-error.d.ts.map +1 -0
  153. package/dist/shared/utils/safe-file-name.d.ts +14 -0
  154. package/dist/shared/utils/safe-file-name.d.ts.map +1 -0
  155. package/dist/shared/utils/sha256.d.ts +3 -0
  156. package/dist/shared/utils/sha256.d.ts.map +1 -0
  157. package/dist/supabase.d.ts +7 -2
  158. package/dist/supabase.d.ts.map +1 -1
  159. package/dist/task/index.d.ts +8 -7
  160. package/dist/task/index.d.ts.map +1 -1
  161. package/dist/task/local-task-registry.d.ts +1 -1
  162. package/dist/task/local-task-registry.d.ts.map +1 -1
  163. package/dist/task/task-manager.d.ts +7 -9
  164. package/dist/task/task-manager.d.ts.map +1 -1
  165. package/dist/{node → task}/task-node.d.ts +2 -3
  166. package/dist/task/task-node.d.ts.map +1 -0
  167. package/dist/task/task-post-validated.api.d.ts +19 -0
  168. package/dist/task/task-post-validated.api.d.ts.map +1 -0
  169. package/dist/task/task-post.api.d.ts +10 -5
  170. package/dist/task/task-post.api.d.ts.map +1 -1
  171. package/dist/task/task-queue.d.ts +7 -0
  172. package/dist/task/task-queue.d.ts.map +1 -0
  173. package/dist/task/task-repo-context.d.ts.map +1 -1
  174. package/dist/task/task-repo-validation.d.ts +2 -2
  175. package/dist/task/task-repo-validation.d.ts.map +1 -1
  176. package/dist/task/task.api.d.ts +13 -13
  177. package/dist/task/task.api.d.ts.map +1 -1
  178. package/dist/task/task.constant.d.ts +4 -0
  179. package/dist/task/task.constant.d.ts.map +1 -0
  180. package/dist/task/task.interface.d.ts +1 -1
  181. package/dist/task/task.interface.d.ts.map +1 -1
  182. package/dist/trigger/trigger-manager.d.ts +25 -0
  183. package/dist/trigger/trigger-manager.d.ts.map +1 -0
  184. package/dist/trigger/trigger-node.d.ts +23 -0
  185. package/dist/trigger/trigger-node.d.ts.map +1 -0
  186. package/dist/trigger/trigger.api.d.ts +4 -4
  187. package/dist/trigger/trigger.api.d.ts.map +1 -1
  188. package/dist/trigger/trigger.constant.d.ts +8 -0
  189. package/dist/trigger/trigger.constant.d.ts.map +1 -0
  190. package/dist/trigger/trigger.interface.d.ts +46 -2
  191. package/dist/trigger/trigger.interface.d.ts.map +1 -1
  192. package/dist/word/word.api.d.ts +1 -1
  193. package/dist/word/word.api.d.ts.map +1 -1
  194. package/dist/word/word.interface.d.ts +2 -2
  195. package/dist/word/word.interface.d.ts.map +1 -1
  196. package/package.json +84 -74
  197. package/src/browser.ts +144 -79
  198. package/src/command/command.api.ts +19 -17
  199. package/src/command/command.interface.ts +2 -3
  200. package/src/core.api.ts +466 -477
  201. package/src/core.interface.ts +63 -62
  202. package/src/core.utils.ts +64 -64
  203. package/src/idea/idea.interface.ts +3 -3
  204. package/src/link/link.api.ts +28 -30
  205. package/src/link/link.interface.ts +3 -4
  206. package/src/list/list.api.ts +50 -29
  207. package/src/list/list.interface.ts +3 -4
  208. package/src/node/env/env-parsers.ts +77 -0
  209. package/src/node/env/index.ts +10 -0
  210. package/src/node/env/init-supabase-from-env.ts +38 -0
  211. package/src/node/env/load-env.ts +67 -0
  212. package/src/node/env/project-root.ts +34 -0
  213. package/src/node/env/public-base-url.ts +18 -0
  214. package/src/node/env/require-env.ts +15 -0
  215. package/src/node/fs/json-state-store.ts +97 -0
  216. package/src/node/fs/read-source-file.ts +75 -0
  217. package/src/node/node-liveness.ts +80 -0
  218. package/src/node/node-runtime.base.ts +135 -104
  219. package/src/node/node.api.ts +11 -10
  220. package/src/node/node.interface.ts +1 -8
  221. package/src/node/node.utils.ts +1 -1
  222. package/src/node/preload/run-service-preload.ts +48 -0
  223. package/src/node/preload/service-preload.interface.ts +14 -0
  224. package/src/node/process/index.ts +8 -0
  225. package/src/node/process/managed-child-processes.ts +121 -0
  226. package/src/node/process/process-spawn.ts +61 -0
  227. package/src/node/readiness/index.ts +20 -0
  228. package/src/node/readiness/poll-until.ts +27 -0
  229. package/src/node/readiness/readiness-checks.ts +79 -0
  230. package/src/node/readiness/readiness.types.ts +13 -0
  231. package/src/node/readiness/run-readiness-checks.ts +20 -0
  232. package/src/node/readiness/service-ready-gate.ts +65 -0
  233. package/src/node.ts +138 -47
  234. package/src/parcel/chunk-fetch-registry.ts +96 -0
  235. package/src/parcel/chunk-url.utils.ts +30 -0
  236. package/src/parcel/parcel-manager.ts +431 -173
  237. package/src/parcel/parcel.api.ts +103 -0
  238. package/src/parcel/parcel.interface.ts +44 -23
  239. package/src/parcel/parcel.service.ts +79 -0
  240. package/src/parcel/storage-provider-registry.ts +49 -0
  241. package/src/parcel/storage-provider.types.ts +45 -0
  242. package/src/preload.ts +7 -0
  243. package/src/repo/repo-context.utils.ts +3 -4
  244. package/src/repo/repo-manager.ts +7 -20
  245. package/src/repo/repo.api.ts +5 -5
  246. package/src/repo/repo.interface.ts +1 -2
  247. package/src/repo/repo.script-loader.ts +4 -8
  248. package/src/service/base.interface.ts +81 -90
  249. package/src/service/index.ts +173 -0
  250. package/src/service/service.api.ts +294 -0
  251. package/src/service/service.interface.ts +49 -17
  252. package/src/shared/http/fetch-retry.ts +145 -0
  253. package/src/shared/log/create-logger.ts +51 -0
  254. package/src/shared/log/enable-log-persist.ts +225 -0
  255. package/src/shared/log/index.ts +19 -11
  256. package/src/shared/log/log-manager.ts +65 -69
  257. package/src/shared/log/log-persist-batch-id.ts +43 -0
  258. package/src/shared/log/log-persist-flush.ts +128 -0
  259. package/src/shared/log/log-persist-hook.ts +13 -0
  260. package/src/shared/log/log-persist-logger.ts +33 -0
  261. package/src/shared/log/log-persist-registry.ts +252 -0
  262. package/src/shared/log/log-persist.config.ts +97 -0
  263. package/src/shared/log/log-persist.interface.ts +132 -0
  264. package/src/shared/log/log-persist.ts +704 -0
  265. package/src/shared/log/log-scope.ts +46 -46
  266. package/src/shared/utils/config-path.utils.ts +1 -1
  267. package/src/shared/utils/fetch-url.ts +13 -0
  268. package/src/shared/utils/network-error.ts +152 -0
  269. package/src/shared/utils/safe-file-name.ts +37 -0
  270. package/src/shared/utils/sha256.ts +15 -0
  271. package/src/supabase.ts +125 -119
  272. package/src/task/index.ts +31 -34
  273. package/src/task/local-task-registry.ts +9 -17
  274. package/src/task/task-manager.ts +34 -35
  275. package/src/{node → task}/task-node.ts +91 -73
  276. package/src/task/task-post-validated.api.ts +47 -0
  277. package/src/task/task-post.api.ts +81 -98
  278. package/src/task/task-queue.ts +18 -0
  279. package/src/task/task-repo-context.ts +2 -1
  280. package/src/task/task-repo-validation.ts +6 -8
  281. package/src/task/task.api.ts +61 -25
  282. package/src/task/task.constant.ts +4 -0
  283. package/src/task/task.interface.ts +4 -7
  284. package/src/trigger/trigger-manager.ts +287 -0
  285. package/src/trigger/trigger-node.ts +80 -0
  286. package/src/trigger/trigger.api.ts +11 -11
  287. package/src/trigger/trigger.constant.ts +10 -0
  288. package/src/trigger/trigger.interface.ts +52 -2
  289. package/src/trigger/trigger.utils.ts +1 -1
  290. package/src/word/word.api.ts +28 -30
  291. package/src/word/word.interface.ts +3 -4
  292. package/dist/auth/auth.api.d.ts +0 -28
  293. package/dist/auth/auth.api.d.ts.map +0 -1
  294. package/dist/auth/auth.api.js +0 -51
  295. package/dist/auth/auth.api.js.map +0 -1
  296. package/dist/command/command.api.js +0 -58
  297. package/dist/command/command.api.js.map +0 -1
  298. package/dist/command/command.interface.js +0 -9
  299. package/dist/command/command.interface.js.map +0 -1
  300. package/dist/core.api.js +0 -412
  301. package/dist/core.api.js.map +0 -1
  302. package/dist/core.interface.js +0 -46
  303. package/dist/core.interface.js.map +0 -1
  304. package/dist/core.utils.js +0 -81
  305. package/dist/core.utils.js.map +0 -1
  306. package/dist/feed/feed.interface.d.ts +0 -27
  307. package/dist/feed/feed.interface.d.ts.map +0 -1
  308. package/dist/feed/feed.interface.js +0 -17
  309. package/dist/feed/feed.interface.js.map +0 -1
  310. package/dist/file/file-manager.d.ts +0 -24
  311. package/dist/file/file-manager.d.ts.map +0 -1
  312. package/dist/file/file-manager.js +0 -109
  313. package/dist/file/file-manager.js.map +0 -1
  314. package/dist/file/file.api.d.ts +0 -15
  315. package/dist/file/file.api.d.ts.map +0 -1
  316. package/dist/file/file.api.js +0 -30
  317. package/dist/file/file.api.js.map +0 -1
  318. package/dist/file/file.interface.d.ts +0 -25
  319. package/dist/file/file.interface.d.ts.map +0 -1
  320. package/dist/file/file.interface.js +0 -9
  321. package/dist/file/file.interface.js.map +0 -1
  322. package/dist/file-list/file-list.api.d.ts +0 -15
  323. package/dist/file-list/file-list.api.d.ts.map +0 -1
  324. package/dist/file-list/file-list.api.js +0 -54
  325. package/dist/file-list/file-list.api.js.map +0 -1
  326. package/dist/file-list/file-list.interface.d.ts +0 -22
  327. package/dist/file-list/file-list.interface.d.ts.map +0 -1
  328. package/dist/file-list/file-list.interface.js +0 -5
  329. package/dist/file-list/file-list.interface.js.map +0 -1
  330. package/dist/idea/idea.interface.js +0 -15
  331. package/dist/idea/idea.interface.js.map +0 -1
  332. package/dist/index.js +0 -3
  333. package/dist/index.js.map +0 -1
  334. package/dist/link/link.api.js +0 -30
  335. package/dist/link/link.api.js.map +0 -1
  336. package/dist/link/link.interface.js +0 -7
  337. package/dist/link/link.interface.js.map +0 -1
  338. package/dist/list/list.api.js +0 -30
  339. package/dist/list/list.api.js.map +0 -1
  340. package/dist/list/list.interface.js +0 -6
  341. package/dist/list/list.interface.js.map +0 -1
  342. package/dist/node/node-log-scope.d.ts +0 -11
  343. package/dist/node/node-log-scope.d.ts.map +0 -1
  344. package/dist/node/node-log-scope.js +0 -7
  345. package/dist/node/node-log-scope.js.map +0 -1
  346. package/dist/node/node-runtime.base.js +0 -397
  347. package/dist/node/node-runtime.base.js.map +0 -1
  348. package/dist/node/node-task.preset.d.ts +0 -1
  349. package/dist/node/node-task.preset.d.ts.map +0 -1
  350. package/dist/node/node-task.preset.js +0 -14
  351. package/dist/node/node-task.preset.js.map +0 -1
  352. package/dist/node/node.api.js +0 -100
  353. package/dist/node/node.api.js.map +0 -1
  354. package/dist/node/node.interface.js +0 -19
  355. package/dist/node/node.interface.js.map +0 -1
  356. package/dist/node/node.utils.js +0 -36
  357. package/dist/node/node.utils.js.map +0 -1
  358. package/dist/node/task-node.d.ts.map +0 -1
  359. package/dist/node/task-node.js +0 -245
  360. package/dist/node/task-node.js.map +0 -1
  361. package/dist/node/trigger-node.d.ts +0 -18
  362. package/dist/node/trigger-node.d.ts.map +0 -1
  363. package/dist/node/trigger-node.js +0 -150
  364. package/dist/node/trigger-node.js.map +0 -1
  365. package/dist/parcel/parcel-manager.js +0 -156
  366. package/dist/parcel/parcel-manager.js.map +0 -1
  367. package/dist/parcel/parcel.interface.js +0 -11
  368. package/dist/parcel/parcel.interface.js.map +0 -1
  369. package/dist/question-list/question-list.api.d.ts +0 -13
  370. package/dist/question-list/question-list.api.d.ts.map +0 -1
  371. package/dist/question-list/question-list.api.js +0 -35
  372. package/dist/question-list/question-list.api.js.map +0 -1
  373. package/dist/question-list/question-list.interface.d.ts +0 -18
  374. package/dist/question-list/question-list.interface.d.ts.map +0 -1
  375. package/dist/question-list/question-list.interface.js +0 -5
  376. package/dist/question-list/question-list.interface.js.map +0 -1
  377. package/dist/repo/repo-context.utils.js +0 -81
  378. package/dist/repo/repo-context.utils.js.map +0 -1
  379. package/dist/repo/repo-manager.js +0 -166
  380. package/dist/repo/repo-manager.js.map +0 -1
  381. package/dist/repo/repo.api.js +0 -40
  382. package/dist/repo/repo.api.js.map +0 -1
  383. package/dist/repo/repo.interface.js +0 -8
  384. package/dist/repo/repo.interface.js.map +0 -1
  385. package/dist/repo/repo.script-loader.js +0 -108
  386. package/dist/repo/repo.script-loader.js.map +0 -1
  387. package/dist/review/review.api.d.ts +0 -14
  388. package/dist/review/review.api.d.ts.map +0 -1
  389. package/dist/review/review.api.js +0 -133
  390. package/dist/review/review.api.js.map +0 -1
  391. package/dist/review/review.interface.d.ts +0 -24
  392. package/dist/review/review.interface.d.ts.map +0 -1
  393. package/dist/review/review.interface.js +0 -10
  394. package/dist/review/review.interface.js.map +0 -1
  395. package/dist/review-v2/apis/post-review-setting.api.d.ts +0 -12
  396. package/dist/review-v2/apis/post-review-setting.api.d.ts.map +0 -1
  397. package/dist/review-v2/apis/post-review-setting.api.js +0 -27
  398. package/dist/review-v2/apis/post-review-setting.api.js.map +0 -1
  399. package/dist/review-v2/apis/post-review.api.d.ts +0 -13
  400. package/dist/review-v2/apis/post-review.api.d.ts.map +0 -1
  401. package/dist/review-v2/apis/post-review.api.js +0 -46
  402. package/dist/review-v2/apis/post-review.api.js.map +0 -1
  403. package/dist/review-v2/review-setting.interface.d.ts +0 -23
  404. package/dist/review-v2/review-setting.interface.d.ts.map +0 -1
  405. package/dist/review-v2/review-setting.interface.js +0 -5
  406. package/dist/review-v2/review-setting.interface.js.map +0 -1
  407. package/dist/review-v2/review.interface.d.ts +0 -20
  408. package/dist/review-v2/review.interface.d.ts.map +0 -1
  409. package/dist/review-v2/review.interface.js +0 -5
  410. package/dist/review-v2/review.interface.js.map +0 -1
  411. package/dist/service/api.interface.d.ts +0 -35
  412. package/dist/service/api.interface.d.ts.map +0 -1
  413. package/dist/service/api.interface.js +0 -12
  414. package/dist/service/api.interface.js.map +0 -1
  415. package/dist/service/base.interface.js +0 -7
  416. package/dist/service/base.interface.js.map +0 -1
  417. package/dist/service/service.interface.js +0 -11
  418. package/dist/service/service.interface.js.map +0 -1
  419. package/dist/shared/log/create-api-logger.d.ts +0 -21
  420. package/dist/shared/log/create-api-logger.d.ts.map +0 -1
  421. package/dist/shared/log/create-api-logger.js +0 -19
  422. package/dist/shared/log/create-api-logger.js.map +0 -1
  423. package/dist/shared/log/index.js +0 -10
  424. package/dist/shared/log/index.js.map +0 -1
  425. package/dist/shared/log/log-manager.js +0 -237
  426. package/dist/shared/log/log-manager.js.map +0 -1
  427. package/dist/shared/log/log-scope.js +0 -70
  428. package/dist/shared/log/log-scope.js.map +0 -1
  429. package/dist/shared/utils/config-path.utils.js +0 -85
  430. package/dist/shared/utils/config-path.utils.js.map +0 -1
  431. package/dist/shared/utils/error.utils.js +0 -15
  432. package/dist/shared/utils/error.utils.js.map +0 -1
  433. package/dist/shared/utils/id.utils.js +0 -5
  434. package/dist/shared/utils/id.utils.js.map +0 -1
  435. package/dist/supabase.js +0 -100
  436. package/dist/supabase.js.map +0 -1
  437. package/dist/task/index.js +0 -14
  438. package/dist/task/index.js.map +0 -1
  439. package/dist/task/local-task-registry.js +0 -214
  440. package/dist/task/local-task-registry.js.map +0 -1
  441. package/dist/task/task-manager.js +0 -196
  442. package/dist/task/task-manager.js.map +0 -1
  443. package/dist/task/task-post.api.js +0 -91
  444. package/dist/task/task-post.api.js.map +0 -1
  445. package/dist/task/task-repo-context.js +0 -12
  446. package/dist/task/task-repo-context.js.map +0 -1
  447. package/dist/task/task-repo-validation.js +0 -96
  448. package/dist/task/task-repo-validation.js.map +0 -1
  449. package/dist/task/task.api.js +0 -303
  450. package/dist/task/task.api.js.map +0 -1
  451. package/dist/task/task.interface.js +0 -36
  452. package/dist/task/task.interface.js.map +0 -1
  453. package/dist/task/task.utils.js +0 -2
  454. package/dist/task/task.utils.js.map +0 -1
  455. package/dist/trigger/trigger.api.js +0 -125
  456. package/dist/trigger/trigger.api.js.map +0 -1
  457. package/dist/trigger/trigger.interface.js +0 -11
  458. package/dist/trigger/trigger.interface.js.map +0 -1
  459. package/dist/trigger/trigger.utils.js +0 -39
  460. package/dist/trigger/trigger.utils.js.map +0 -1
  461. package/dist/word/word.api.js +0 -30
  462. package/dist/word/word.api.js.map +0 -1
  463. package/dist/word/word.interface.js +0 -6
  464. package/dist/word/word.interface.js.map +0 -1
  465. package/src/auth/auth.api.ts +0 -87
  466. package/src/feed/feed.interface.ts +0 -33
  467. package/src/file/file-manager.ts +0 -145
  468. package/src/file/file.api.ts +0 -43
  469. package/src/file/file.interface.ts +0 -30
  470. package/src/file-list/file-list.api.ts +0 -64
  471. package/src/file-list/file-list.interface.ts +0 -24
  472. package/src/node/node-log-scope.ts +0 -15
  473. package/src/node/node-task.preset.ts +0 -13
  474. package/src/node/trigger-node.ts +0 -180
  475. package/src/question-list/question-list.api.ts +0 -42
  476. package/src/question-list/question-list.interface.ts +0 -21
  477. package/src/review/review.api.ts +0 -145
  478. package/src/review/review.interface.ts +0 -26
  479. package/src/review-v2/apis/post-review-setting.api.ts +0 -35
  480. package/src/review-v2/apis/post-review.api.ts +0 -59
  481. package/src/review-v2/review-setting.interface.ts +0 -26
  482. package/src/review-v2/review.interface.ts +0 -23
  483. package/src/service/api.interface.ts +0 -47
  484. package/src/shared/log/create-api-logger.ts +0 -36
@@ -0,0 +1,47 @@
1
+ import { validateWithSchema } from "../core.api";
2
+ import { generateResponse, type SupabaseResponse } from "../core.interface";
3
+ import { createLogger, logManager } from "../shared/log";
4
+ import type { Task } from "./task.interface";
5
+ import { createTaskRow, postTaskSchema } from "./task-post.api";
6
+ import { TaskRepoValidation } from "./task-repo-validation";
7
+
8
+ /**
9
+ * Create a task row with publish-time Repo + params validation.
10
+ * **Node entry only** — requires local Repo bootstrap and {@link TaskRepoValidation}.
11
+ *
12
+ * @see target-supabase-sdk/node
13
+ */
14
+ export const postTaskWithValidation = validateWithSchema(
15
+ postTaskSchema,
16
+ "postTaskSchema",
17
+ )(async ({ name, value, params, taskStatus, tagList, extra, traceId, traceParentId }) => {
18
+ const taskTraceId = traceId?.trim() || logManager.generateTraceId();
19
+ const logger = createLogger({
20
+ module: "postTaskWithValidation",
21
+ traceId: taskTraceId,
22
+ traceParentId: traceParentId ?? null,
23
+ });
24
+
25
+ const validation = await TaskRepoValidation.validate({
26
+ logger,
27
+ taskTypeKey: value,
28
+ params,
29
+ bootstrapLocal: true,
30
+ });
31
+ if (!validation.isValid) {
32
+ logger.warn(validation.message, {
33
+ topic: "task",
34
+ data: {
35
+ taskTypeKey: value,
36
+ reason: validation.reason,
37
+ step: validation.step,
38
+ },
39
+ });
40
+ return generateResponse.error(validation.message, undefined, String(validation.code)) as SupabaseResponse<Task>;
41
+ }
42
+
43
+ return createTaskRow(
44
+ { name, value, params, taskStatus, tagList, extra, traceId, traceParentId, taskTraceId },
45
+ logger,
46
+ );
47
+ });
@@ -1,116 +1,99 @@
1
- import { createTarget, validateWithSchema } from "../core.api";
2
- import { generateResponse, type SupabaseResponse } from "../core.interface";
3
- import { createApiLogger, logManager } from "../shared/log";
4
1
  import { z } from "zod";
5
- import { CategoryTask, ResultCode, Task, TaskStatus } from "./task.interface";
6
- import { TaskRepoValidation } from "./task-repo-validation";
2
+ import { createTarget, validateWithSchema } from "../core.api";
3
+ import type { SupabaseResponse } from "../core.interface";
4
+ import { createLogger, type LoggerWithScope, logManager } from "../shared/log";
5
+ import { CategoryTask, type Task, TaskStatus } from "./task.interface";
7
6
 
8
7
  const traceIdSchema = z.string().trim().min(1).optional();
9
8
  const traceParentIdSchema = z.string().trim().min(1).nullable().optional();
10
9
 
11
10
  /** Initial status for a new task — OPEN (draft) or TODO (claimable by workers). */
12
11
  const postTaskInitialStatusSchema = z
13
- .union([z.literal(TaskStatus.OPEN), z.literal(TaskStatus.TODO)])
14
- .optional()
15
- .default(TaskStatus.TODO);
12
+ .union([z.literal(TaskStatus.OPEN), z.literal(TaskStatus.TODO)])
13
+ .optional()
14
+ .default(TaskStatus.TODO);
16
15
 
17
16
  export const postTaskSchema = z.object({
18
- name: z.string().trim().min(1),
19
- /** Task type key — matches `task.value`, {@link patchClaimTask}, {@link Repo.value}, and local Repo registry. */
20
- value: z.string().trim().min(1),
21
- params: z.unknown(),
22
- taskStatus: postTaskInitialStatusSchema,
23
- tagList: z.array(z.string()).optional().default([]),
24
- extra: z.string().optional(),
25
- traceId: traceIdSchema,
26
- traceParentId: traceParentIdSchema,
17
+ name: z.string().trim().min(1),
18
+ /** Task type key — matches `task.value`, {@link patchClaimTask}, {@link Repo.value}, and local Repo registry. */
19
+ value: z.string().trim().min(1),
20
+ params: z.unknown(),
21
+ taskStatus: postTaskInitialStatusSchema,
22
+ tagList: z.array(z.string()).optional().default([]),
23
+ extra: z.string().optional(),
24
+ traceId: traceIdSchema,
25
+ traceParentId: traceParentIdSchema,
27
26
  });
28
27
 
29
28
  export type PostTaskPayload = z.infer<typeof postTaskSchema>;
30
29
 
31
- /**
32
- * Create a task row (scheduler / admin). **Node entry only** — requires local Repo bootstrap.
33
- *
34
- * @see target-supabase-sdk/node
35
- */
36
- export const postTask = validateWithSchema(
37
- postTaskSchema,
38
- "postTaskSchema",
39
- )(async ({
40
- name,
41
- value,
42
- params,
43
- taskStatus,
44
- tagList,
45
- extra,
46
- traceId,
47
- traceParentId,
48
- }) => {
49
- const taskTraceId = traceId?.trim() || logManager.generateTraceId();
50
- const logger = createApiLogger("postTask", {
51
- traceId: taskTraceId,
52
- traceParentId: traceParentId ?? null,
53
- });
30
+ export type CreateTaskRowInput = PostTaskPayload & {
31
+ taskTraceId: string;
32
+ };
54
33
 
55
- const validation = await TaskRepoValidation.validate({
56
- logger,
57
- taskTypeKey: value,
58
- params,
59
- bootstrapLocal: true,
60
- });
61
- if (!validation.isValid) {
62
- logger.warn(validation.message, {
63
- topic: "task",
64
- data: {
65
- taskTypeKey: value,
66
- reason: validation.reason,
67
- step: validation.step,
68
- },
69
- });
70
- return generateResponse.error(
71
- validation.message,
72
- undefined,
73
- String(validation.code),
74
- ) as SupabaseResponse<Task>;
75
- }
34
+ /** Shared DB insert for {@link postTask} and {@link postTaskWithValidation}. */
35
+ export async function createTaskRow(
36
+ { name, value, params, taskStatus, tagList, extra, taskTraceId, traceParentId }: CreateTaskRowInput,
37
+ logger: LoggerWithScope,
38
+ ): Promise<SupabaseResponse<Task>> {
39
+ const result = await createTarget<Task, PostTaskPayload>({
40
+ payload: {
41
+ name,
42
+ value,
43
+ params,
44
+ taskStatus,
45
+ tagList,
46
+ extra,
47
+ traceId: taskTraceId,
48
+ traceParentId,
49
+ },
50
+ createFn: () => ({
51
+ name,
52
+ value,
53
+ category: CategoryTask.TASK,
54
+ tagList,
55
+ extra,
56
+ details: {
57
+ manifestVersion: 0,
58
+ status: taskStatus,
59
+ params,
60
+ progress: 0,
61
+ nodeId: null,
62
+ traceId: taskTraceId,
63
+ },
64
+ }),
65
+ });
76
66
 
77
- const result = await createTarget<Task, PostTaskPayload>({
78
- payload: {
79
- name,
80
- value,
81
- params,
82
- taskStatus,
83
- tagList,
84
- extra,
85
- traceId: taskTraceId,
86
- traceParentId,
87
- },
88
- createFn: () => ({
89
- name,
90
- value,
91
- category: CategoryTask.TASK,
92
- tagList,
93
- extra,
94
- details: {
95
- manifestVersion: 0,
96
- status: taskStatus,
97
- params,
98
- progress: 0,
99
- nodeId: null,
100
- traceId: taskTraceId,
101
- },
102
- }),
103
- });
67
+ logger.info("任務已創建", {
68
+ topic: "task",
69
+ data: {
70
+ taskId: result.data?.id,
71
+ taskTypeKey: value,
72
+ status: taskStatus,
73
+ traceId: taskTraceId,
74
+ },
75
+ });
104
76
 
105
- logger.info("任務已創建", {
106
- topic: "task",
107
- data: {
108
- taskId: result.data?.id,
109
- taskTypeKey: value,
110
- status: taskStatus,
111
- traceId: taskTraceId,
112
- },
113
- });
77
+ return result;
78
+ }
79
+
80
+ /**
81
+ * Create a task row (scheduler / admin). **Browser and Node** — no Repo or params validation.
82
+ * Execution-time checks live in {@link TaskManager.prepareTask}.
83
+ */
84
+ export const postTask = validateWithSchema(
85
+ postTaskSchema,
86
+ "postTaskSchema",
87
+ )(async ({ name, value, params, taskStatus, tagList, extra, traceId, traceParentId }) => {
88
+ const taskTraceId = traceId?.trim() || logManager.generateTraceId();
89
+ const logger = createLogger({
90
+ module: "postTask",
91
+ traceId: taskTraceId,
92
+ traceParentId: traceParentId ?? null,
93
+ });
114
94
 
115
- return result;
95
+ return createTaskRow(
96
+ { name, value, params, taskStatus, tagList, extra, traceId, traceParentId, taskTraceId },
97
+ logger,
98
+ );
116
99
  });
@@ -0,0 +1,18 @@
1
+ import type { Task, TaskStatus } from "./task.interface";
2
+
3
+ export type TaskStatusCount = Partial<Record<TaskStatus, number>>;
4
+
5
+ /** Count tasks of `taskType` grouped by each requested status. */
6
+ export function countTasksByType(tasks: Task[], taskType: string, statuses: TaskStatus[]): TaskStatusCount {
7
+ const filtered = tasks.filter((task) => task.value === taskType);
8
+ const counts: TaskStatusCount = {};
9
+ for (const status of statuses) {
10
+ counts[status] = filtered.filter((task) => task.details.status === status).length;
11
+ }
12
+ return counts;
13
+ }
14
+
15
+ /** Total tasks of `taskType` whose status is in `statuses`. */
16
+ export function summarizeTaskQueue(tasks: Task[], taskType: string, statuses: TaskStatus[]): number {
17
+ return tasks.filter((task) => task.value === taskType && statuses.includes(task.details.status)).length;
18
+ }
@@ -96,7 +96,8 @@ export const TASK_RUNNER_CONFIG_DIR = "config" as const;
96
96
  export const TASK_RUNNER_ROOT_CONFIG_FILENAME = "task.config.js" as const;
97
97
 
98
98
  /** Default root config path: `config/task.config.js` */
99
- export const TASK_RUNNER_ROOT_CONFIG_RELATIVE_PATH = `${TASK_RUNNER_CONFIG_DIR}/${TASK_RUNNER_ROOT_CONFIG_FILENAME}` as const;
99
+ export const TASK_RUNNER_ROOT_CONFIG_RELATIVE_PATH =
100
+ `${TASK_RUNNER_CONFIG_DIR}/${TASK_RUNNER_ROOT_CONFIG_FILENAME}` as const;
100
101
 
101
102
  /** Legacy fallback at project root */
102
103
  export const TASK_RUNNER_ROOT_CONFIG_LEGACY_RELATIVE_PATH = TASK_RUNNER_ROOT_CONFIG_FILENAME;
@@ -1,6 +1,6 @@
1
- import { RepoManager, type RepoContextFailureReason } from "../repo/repo-manager";
2
- import { LoggerWithScope } from "../shared/log";
3
- import { bootstrapLocalTasks, type BootstrapLocalTasksOptions } from "./local-task-registry";
1
+ import { type RepoContextFailureReason, RepoManager } from "../repo/repo-manager";
2
+ import type { LoggerWithScope } from "../shared/log";
3
+ import { type BootstrapLocalTasksOptions, bootstrapLocalTasks } from "./local-task-registry";
4
4
  import { ResultCode } from "./task.interface";
5
5
  import type { TaskRepoContext } from "./task-repo-context";
6
6
 
@@ -15,7 +15,7 @@ export type ValidateTaskRepoAndParamsInput = {
15
15
  taskTypeKey: string;
16
16
  params: unknown;
17
17
  /**
18
- * When true, run {@link bootstrapLocalTasks} before resolve (CLI / Trigger / postTask).
18
+ * When true, run {@link bootstrapLocalTasks} before resolve (CLI / Trigger / postTaskWithValidation).
19
19
  * Worker paths should omit — {@link TaskManager.registerTasks} already bootstrapped.
20
20
  */
21
21
  bootstrapLocal?: boolean;
@@ -40,14 +40,12 @@ export type ValidateTaskRepoAndParamsSuccess = {
40
40
  repoContext: TaskRepoContext;
41
41
  };
42
42
 
43
- export type ValidateTaskRepoAndParamsResult =
44
- | ValidateTaskRepoAndParamsFailure
45
- | ValidateTaskRepoAndParamsSuccess;
43
+ export type ValidateTaskRepoAndParamsResult = ValidateTaskRepoAndParamsFailure | ValidateTaskRepoAndParamsSuccess;
46
44
 
47
45
  function validateTaskParams(
48
46
  validator: TaskRepoContext["taskParamsValidator"],
49
47
  taskParams: unknown,
50
- logger: LoggerWithScope
48
+ logger: LoggerWithScope,
51
49
  ): boolean {
52
50
  try {
53
51
  return validator(taskParams) === true;
@@ -1,8 +1,18 @@
1
- import { createTarget, getPossibleTarget, QueryFilter, updateTargetDetails, validateWithSchema, isOptimisticLockError, OPTIMISTIC_LOCK_FAILED_MESSAGE } from "../core.api";
2
- import { generateResponse, type SupabaseResponse } from "../core.interface";
3
- import { createApiLogger, logManager, type LoggerWithScope } from "../shared/log";
4
1
  import { z } from "zod";
5
- import { CategoryTask, ResultCode, Task, TaskDetails, TaskStatus, TaskStatusAction } from "./task.interface";
2
+ import {
3
+ getTargetList,
4
+ isOptimisticLockError,
5
+ OPTIMISTIC_LOCK_ERROR_CODE,
6
+ OPTIMISTIC_LOCK_FAILED_MESSAGE,
7
+ type QueryFilter,
8
+ updateTargetDetails,
9
+ validateWithSchema,
10
+ } from "../core.api";
11
+ import { generateResponse, type SupabaseResponse } from "../core.interface";
12
+ import { createLogger, type LoggerWithScope } from "../shared/log";
13
+ import { getErrorMessage } from "../shared/utils/error.utils";
14
+ import { LOG_TOPIC_TASK } from "./task.constant";
15
+ import { CategoryTask, ResultCode, type Task, type TaskDetails, TaskStatus, TaskStatusAction } from "./task.interface";
6
16
 
7
17
  const TASK_STATUS_FIELD = "details->>status" as const;
8
18
  const TASK_NODE_ID_FIELD = "details->>nodeId" as const;
@@ -46,7 +56,7 @@ const taskIdSchema = z.string().trim().min(1);
46
56
  const nodeIdSchema = z.string().trim().min(1);
47
57
  /** Optional — orchestrator (e.g. TaskNode loop) passes its trace to correlate logs. */
48
58
  const traceIdSchema = z.string().trim().min(1).optional();
49
- const traceParentIdSchema = z.string().trim().min(1).nullable().optional();
59
+ const _traceParentIdSchema = z.string().trim().min(1).nullable().optional();
50
60
 
51
61
  const patchChangeTaskStatusBaseSchema = {
52
62
  id: taskIdSchema,
@@ -163,10 +173,10 @@ function logTaskTransition(
163
173
  logger: LoggerWithScope,
164
174
  action: TaskStatusAction | "patchTaskProgress" | "patchClaimTask",
165
175
  task: Task,
166
- data?: Record<string, unknown>
176
+ data?: Record<string, unknown>,
167
177
  ): void {
168
- logger.info("任务状态迁移成功", {
169
- topic: "task",
178
+ logger.debug("任務狀態遷移成功", {
179
+ topic: LOG_TOPIC_TASK,
170
180
  data: {
171
181
  action,
172
182
  taskId: task.id,
@@ -204,9 +214,9 @@ async function claimTaskById({
204
214
 
205
215
  export const patchChangeTaskStatus = validateWithSchema(
206
216
  patchChangeTaskStatusSchema,
207
- "patchChangeTaskStatusSchema"
217
+ "patchChangeTaskStatusSchema",
208
218
  )(async (params) => {
209
- const logger = createApiLogger("patchChangeTaskStatus", { traceId: params.traceId });
219
+ const logger = createLogger({ module: "patchChangeTaskStatus", traceId: params.traceId });
210
220
  const { id, action, extra } = params;
211
221
  const updateExtraFn = extra == null ? undefined : () => extra;
212
222
 
@@ -308,9 +318,9 @@ export const patchChangeTaskStatus = validateWithSchema(
308
318
  /** Update progress on a DOING task; only the owning node may write (see `lockOnDoingOwner`). */
309
319
  export const patchTaskProgress = validateWithSchema(
310
320
  patchTaskProgressSchema,
311
- "patchTaskProgressSchema"
321
+ "patchTaskProgressSchema",
312
322
  )(async ({ id, progress, nodeId, traceId }) => {
313
- const logger = createApiLogger("patchTaskProgress", { traceId, labels: { nodeId } });
323
+ const logger = createLogger({ module: "patchTaskProgress", traceId, labels: { nodeId } });
314
324
  const data = await transitionTask({
315
325
  id,
316
326
  optimisticLockFilterList: lockOnDoingOwner(nodeId),
@@ -328,42 +338,68 @@ export const patchTaskProgress = validateWithSchema(
328
338
  /**
329
339
  * Discover and claim one TODO task for this node.
330
340
  *
331
- * Flow: filter by `availableTaskList` → {@link claimTaskById} (same as `action: CLAIM`).
341
+ * Flow: oldest TODO in `availableTaskList` (FIFO by `created_at`) → {@link claimTaskById}.
332
342
  * Equivalent to `patchChangeTaskStatus({ id, action: CLAIM, nodeId })` when `id` is already known.
333
343
  *
334
344
  * Returns `data: null` when no TODO task matches.
335
- * Optimistic lock conflicts return `{ error }` with `code: "OPTIMISTIC_LOCK"` (not thrown).
345
+ * Optimistic lock conflicts return `{ error, code: OPTIMISTIC_LOCK_ERROR_CODE }` (not thrown).
336
346
  */
337
347
  export const patchClaimTask = validateWithSchema(
338
348
  patchClaimTaskSchema,
339
- "patchClaimTaskSchema"
349
+ "patchClaimTaskSchema",
340
350
  )(async ({ nodeId, availableTaskList, traceId }): Promise<SupabaseResponse<Task | null>> => {
341
- const logger = createApiLogger("patchClaimTask", { traceId, labels: { nodeId } });
351
+ const logger = createLogger({ module: "patchClaimTask", traceId, labels: { nodeId } });
342
352
 
353
+ let todoTask: Task;
343
354
  try {
344
- const { data: possibleTask } = await getPossibleTarget({
355
+ const { data: taskCandidates } = await getTargetList<Task>({
356
+ category: CategoryTask.TASK,
345
357
  filterList: [
346
- { field: "category", operator: "eq", value: CategoryTask.TASK },
347
358
  { field: TASK_STATUS_FIELD, operator: "eq", value: TaskStatus.TODO },
348
359
  { field: "value", operator: "in", value: availableTaskList },
349
360
  ],
361
+ limit: 1,
362
+ orderBy: { field: "created_at", ascending: true },
350
363
  });
351
-
364
+ const possibleTask = taskCandidates?.[0] ?? null;
352
365
  if (possibleTask == null) {
353
366
  return generateResponse.success(null);
354
367
  }
368
+ todoTask = possibleTask;
369
+ } catch (error) {
370
+ const message = getErrorMessage(error);
371
+ logger.error("獲取 TODO 任務失敗", { topic: LOG_TOPIC_TASK, data: { error: message, availableTaskList } });
372
+ return generateResponse.error(message) as SupabaseResponse<Task | null>;
373
+ }
355
374
 
356
- const todoTask = possibleTask as Task;
375
+ const taskLogger = createLogger({
376
+ module: "patchClaimTask",
377
+ traceId,
378
+ traceParentId: todoTask.details.traceId,
379
+ labels: { nodeId },
380
+ });
381
+
382
+ try {
357
383
  const data = await claimTaskById({ taskId: todoTask.id, nodeId });
358
- logTaskTransition(logger, "patchClaimTask", data);
384
+ logTaskTransition(taskLogger, "patchClaimTask", data);
359
385
  return generateResponse.success(data);
360
386
  } catch (error) {
361
387
  if (isOptimisticLockError(error)) {
362
- logger.debug("認領競爭失敗,本輪無可認領任務", { topic: "task" });
363
- return generateResponse.error(OPTIMISTIC_LOCK_FAILED_MESSAGE, undefined, "OPTIMISTIC_LOCK") as SupabaseResponse<Task | null>;
388
+ taskLogger.debug("認領競爭失敗,任務已被其他節點認領", {
389
+ topic: LOG_TOPIC_TASK,
390
+ data: { taskId: todoTask.id, taskTypeKey: todoTask.value },
391
+ });
392
+ return generateResponse.error(
393
+ OPTIMISTIC_LOCK_FAILED_MESSAGE,
394
+ undefined,
395
+ OPTIMISTIC_LOCK_ERROR_CODE,
396
+ ) as SupabaseResponse<Task | null>;
364
397
  }
365
- const message = error instanceof Error ? error.message : String(error);
366
- logger.error("認領任務失敗", { topic: "task", data: { error: message } });
398
+ const message = getErrorMessage(error);
399
+ taskLogger.error("認領任務失敗", {
400
+ topic: LOG_TOPIC_TASK,
401
+ data: { error: message, taskId: todoTask.id, taskTypeKey: todoTask.value },
402
+ });
367
403
  return generateResponse.error(message) as SupabaseResponse<Task | null>;
368
404
  }
369
405
  });
@@ -0,0 +1,4 @@
1
+ /** Log topic for task domain (`topic` field on structured logs). */
2
+ export const LOG_TOPIC_TASK = "task";
3
+
4
+ export const CRITICAL_UNKNOWN_TASK_TRACE_ID = "CRITICAL_UNKNOWN_TASK_TRACE_ID";
@@ -1,4 +1,4 @@
1
- import { Target } from "../core.interface";
1
+ import type { Target } from "../core.interface";
2
2
 
3
3
  export enum CategoryTask {
4
4
  TASK = "task",
@@ -60,11 +60,8 @@ export interface TaskDetails {
60
60
  code: ResultCode;
61
61
  errorMessage?: string;
62
62
  data?: unknown;
63
- }
64
- };
65
-
66
- // TODO loop condition combination
67
- export interface TaskFlow extends Target {
68
-
63
+ };
69
64
  }
70
65
 
66
+ // TODO loop condition combination
67
+ export interface TaskFlow extends Target {}