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,287 @@
1
+ import type { NodeLoopContext } from "../node/node-runtime.base";
2
+ import { createLogger, createScope, withModule } from "../shared/log";
3
+ import { getErrorMessage } from "../shared/utils/error.utils";
4
+ import {
5
+ LOG_TOPIC_TRIGGER,
6
+ TRIGGER_LOOP_INTERVAL_MS,
7
+ TRIGGER_RUNNER_DEFAULT_RETRY_COUNT,
8
+ TRIGGER_RUNNER_DEFAULT_RETRY_DELAY_MS,
9
+ } from "./trigger.constant";
10
+ import type { RegisterTriggerRunnerOptions, TriggerRunnerContext, TriggerRunnerFn } from "./trigger.interface";
11
+
12
+ export type { RegisterTriggerRunnerOptions, TriggerRunnerContext, TriggerRunnerFn } from "./trigger.interface";
13
+
14
+ interface TriggerRunnerState {
15
+ key: string;
16
+ intervalMs: number;
17
+ fn: TriggerRunnerFn;
18
+ retryCount: number;
19
+ retryDelayMs: number;
20
+ timeoutMs: number | undefined;
21
+ nextRunAt: number;
22
+ running: boolean;
23
+ }
24
+
25
+ const runnerRegistry = new Map<string, TriggerRunnerState>();
26
+ let registrationClosed = false;
27
+
28
+ function normalizeRunnerKey(key: string): string {
29
+ const normalized = key.trim();
30
+ if (normalized.length === 0) {
31
+ throw new Error("[TriggerManager] key must be a non-empty string");
32
+ }
33
+ return normalized;
34
+ }
35
+
36
+ function tryNormalizeRunnerKey(key: string): string | null {
37
+ const normalized = key.trim();
38
+ return normalized.length > 0 ? normalized : null;
39
+ }
40
+
41
+ function validateRunnerOptions(options: RegisterTriggerRunnerOptions): void {
42
+ if (!Number.isFinite(options.intervalMs) || options.intervalMs < 1) {
43
+ throw new Error(`[TriggerManager] intervalMs must be a positive number, got ${options.intervalMs}`);
44
+ }
45
+ const retryCount = options.retryCount ?? TRIGGER_RUNNER_DEFAULT_RETRY_COUNT;
46
+ if (!Number.isInteger(retryCount) || retryCount < 0) {
47
+ throw new Error(`[TriggerManager] retryCount must be a non-negative integer, got ${retryCount}`);
48
+ }
49
+ const initialDelayMs = options.initialDelayMs ?? 0;
50
+ if (!Number.isFinite(initialDelayMs) || initialDelayMs < 0) {
51
+ throw new Error(`[TriggerManager] initialDelayMs must be a non-negative number, got ${initialDelayMs}`);
52
+ }
53
+ const retryDelayMs = options.retryDelayMs ?? TRIGGER_RUNNER_DEFAULT_RETRY_DELAY_MS;
54
+ if (!Number.isFinite(retryDelayMs) || retryDelayMs < 0) {
55
+ throw new Error(`[TriggerManager] retryDelayMs must be a non-negative number, got ${retryDelayMs}`);
56
+ }
57
+ if (options.timeoutMs != null) {
58
+ if (!Number.isFinite(options.timeoutMs) || options.timeoutMs < 1) {
59
+ throw new Error(`[TriggerManager] timeoutMs must be a positive number when set, got ${options.timeoutMs}`);
60
+ }
61
+ }
62
+ }
63
+
64
+ function delay(ms: number): Promise<void> {
65
+ return new Promise((resolve) => setTimeout(resolve, ms));
66
+ }
67
+
68
+ async function invokeRunnerFn(
69
+ fn: TriggerRunnerFn,
70
+ ctx: TriggerRunnerContext,
71
+ timeoutMs: number | undefined,
72
+ ): Promise<void> {
73
+ if (timeoutMs == null) {
74
+ await fn(ctx);
75
+ return;
76
+ }
77
+
78
+ let timeoutHandle: ReturnType<typeof setTimeout> | undefined;
79
+ const timeoutPromise = new Promise<never>((_, reject) => {
80
+ timeoutHandle = setTimeout(() => {
81
+ reject(new Error(`Runner timed out after ${timeoutMs}ms`));
82
+ }, timeoutMs);
83
+ });
84
+
85
+ try {
86
+ await Promise.race([Promise.resolve(fn(ctx)), timeoutPromise]);
87
+ } finally {
88
+ if (timeoutHandle != null) {
89
+ clearTimeout(timeoutHandle);
90
+ }
91
+ }
92
+ }
93
+
94
+ /** In-process registry and tick loop for {@link TriggerNode}. */
95
+ export const TriggerManager = {
96
+ registerRunner(options: RegisterTriggerRunnerOptions): void {
97
+ if (registrationClosed) {
98
+ throw new Error("[TriggerManager] Registration closed — call registerRunner before TriggerNode.start()");
99
+ }
100
+
101
+ const key = normalizeRunnerKey(options.key);
102
+ validateRunnerOptions(options);
103
+ if (typeof options.fn !== "function") {
104
+ throw new Error(`[TriggerManager] fn must be a function (runner key: ${key})`);
105
+ }
106
+ if (runnerRegistry.has(key)) {
107
+ throw new Error(`[TriggerManager] Duplicate runner key: ${key}`);
108
+ }
109
+
110
+ const now = Date.now();
111
+ runnerRegistry.set(key, {
112
+ key,
113
+ intervalMs: options.intervalMs,
114
+ fn: options.fn,
115
+ retryCount: options.retryCount ?? TRIGGER_RUNNER_DEFAULT_RETRY_COUNT,
116
+ retryDelayMs: options.retryDelayMs ?? TRIGGER_RUNNER_DEFAULT_RETRY_DELAY_MS,
117
+ timeoutMs: options.timeoutMs,
118
+ nextRunAt: now + (options.initialDelayMs ?? 0),
119
+ running: false,
120
+ });
121
+ },
122
+
123
+ hasRunner(key: string): boolean {
124
+ const normalized = tryNormalizeRunnerKey(key);
125
+ return normalized != null && runnerRegistry.has(normalized);
126
+ },
127
+
128
+ unregisterRunner(key: string): boolean {
129
+ const normalized = tryNormalizeRunnerKey(key);
130
+ if (normalized == null) {
131
+ return false;
132
+ }
133
+ const runner = runnerRegistry.get(normalized);
134
+ if (runner == null) {
135
+ return false;
136
+ }
137
+ if (runner.running) {
138
+ throw new Error(`[TriggerManager] Cannot unregister running runner: ${normalized}`);
139
+ }
140
+ return runnerRegistry.delete(normalized);
141
+ },
142
+
143
+ getRunnerKeys(): string[] {
144
+ return [...runnerRegistry.keys()];
145
+ },
146
+
147
+ getRunnersBelowLoopInterval(): Array<{ key: string; intervalMs: number }> {
148
+ return [...runnerRegistry.values()]
149
+ .filter((runner) => runner.intervalMs < TRIGGER_LOOP_INTERVAL_MS)
150
+ .map((runner) => ({ key: runner.key, intervalMs: runner.intervalMs }));
151
+ },
152
+
153
+ /** Called by TriggerNode during bootstrap — blocks further registerRunner calls. */
154
+ closeRegistration(): void {
155
+ registrationClosed = true;
156
+ },
157
+
158
+ /** Re-open registration (tests only). */
159
+ _resetRegistrationForTests(): void {
160
+ registrationClosed = false;
161
+ },
162
+
163
+ /**
164
+ * Remove all runners. Throws if any runner is still executing.
165
+ * Wait for in-flight ticks to finish before calling in tests.
166
+ */
167
+ clearRunners(): void {
168
+ for (const runner of runnerRegistry.values()) {
169
+ if (runner.running) {
170
+ throw new Error(`[TriggerManager] Cannot clearRunners while runner is running: ${runner.key}`);
171
+ }
172
+ }
173
+ runnerRegistry.clear();
174
+ registrationClosed = false;
175
+ },
176
+
177
+ async tick(ctx: NodeLoopContext): Promise<void> {
178
+ const { loopTraceId, nodeId } = ctx;
179
+ const loopScope = createScope({ module: "tickRunners", traceId: loopTraceId, labels: { nodeId } });
180
+ const logger = createLogger({ scope: loopScope });
181
+
182
+ const now = Date.now();
183
+ const runners = [...runnerRegistry.values()];
184
+ if (runners.length === 0) {
185
+ logger.debug("無 runner 可調度", { topic: LOG_TOPIC_TRIGGER });
186
+ return;
187
+ }
188
+
189
+ // Overlap: if fn is still running when due, skip that tick (no catch-up / backlog).
190
+ // Safe while intervals are large; missed ticks increase if fn duration exceeds intervalMs.
191
+ const dueRunners = runners.filter((runner) => !runner.running && now >= runner.nextRunAt);
192
+ if (dueRunners.length === 0) {
193
+ logger.debug("本輪無到期 runner", { topic: LOG_TOPIC_TRIGGER });
194
+ return;
195
+ }
196
+
197
+ logger.debug("調度到期 runner", {
198
+ topic: LOG_TOPIC_TRIGGER,
199
+ data: { due: dueRunners.map((r) => r.key) },
200
+ });
201
+
202
+ const results = await Promise.all(dueRunners.map((runner) => runRunner(ctx, runner)));
203
+ const executed = results.filter(Boolean).length;
204
+ if (executed > 0) {
205
+ logger.info("Runner 調度完成", {
206
+ topic: LOG_TOPIC_TRIGGER,
207
+ data: { due: dueRunners.length, executed },
208
+ });
209
+ } else {
210
+ logger.warn("本輪到期 runner 均未成功", {
211
+ topic: LOG_TOPIC_TRIGGER,
212
+ data: {
213
+ due: dueRunners.length,
214
+ runnerKeys: dueRunners.map((r) => r.key),
215
+ },
216
+ });
217
+ }
218
+ },
219
+ };
220
+
221
+ async function runRunner(ctx: NodeLoopContext, runner: TriggerRunnerState): Promise<boolean> {
222
+ const { loopTraceId, nodeId } = ctx;
223
+ if (runner.running) {
224
+ return false;
225
+ }
226
+
227
+ runner.running = true;
228
+ const runnerLogger = createLogger({
229
+ scope: withModule(
230
+ createScope({ module: "runRunner", traceId: loopTraceId, labels: { nodeId, runnerKey: runner.key } }),
231
+ runner.key,
232
+ ),
233
+ });
234
+
235
+ const maxAttempts = 1 + runner.retryCount;
236
+ let succeeded = false;
237
+
238
+ try {
239
+ for (let attempt = 1; attempt <= maxAttempts; attempt++) {
240
+ try {
241
+ runnerLogger.info("Runner 觸發", {
242
+ topic: LOG_TOPIC_TRIGGER,
243
+ data: { attempt, maxAttempts },
244
+ });
245
+ await invokeRunnerFn(
246
+ runner.fn,
247
+ {
248
+ loopTraceId,
249
+ nodeId,
250
+ runnerKey: runner.key,
251
+ logger: runnerLogger,
252
+ attempt,
253
+ maxAttempts,
254
+ },
255
+ runner.timeoutMs,
256
+ );
257
+ runnerLogger.success("Runner 完成", {
258
+ topic: LOG_TOPIC_TRIGGER,
259
+ data: { attempt, maxAttempts },
260
+ });
261
+ succeeded = true;
262
+ break;
263
+ } catch (error) {
264
+ const message = getErrorMessage(error);
265
+ if (attempt < maxAttempts) {
266
+ runnerLogger.warn("Runner 失敗,準備重試", {
267
+ topic: LOG_TOPIC_TRIGGER,
268
+ data: { attempt, maxAttempts, error: message },
269
+ });
270
+ if (runner.retryDelayMs > 0) {
271
+ await delay(runner.retryDelayMs);
272
+ }
273
+ } else {
274
+ runnerLogger.error("Runner 重試用盡仍失敗", {
275
+ topic: LOG_TOPIC_TRIGGER,
276
+ data: { attempt, maxAttempts, error: message },
277
+ });
278
+ }
279
+ }
280
+ }
281
+ } finally {
282
+ runner.running = false;
283
+ runner.nextRunAt = Date.now() + runner.intervalMs;
284
+ }
285
+
286
+ return succeeded;
287
+ }
@@ -0,0 +1,80 @@
1
+ import { BaseNodeRuntime, LOG_TOPIC_NODE, type NodeLoopContext } from "../node/node-runtime.base";
2
+ import { createLogger, createScope, type LoggerWithScope, LogLevel } from "../shared/log";
3
+ import { LOG_TOPIC_TRIGGER, TRIGGER_LOOP_INTERVAL_MS } from "./trigger.constant";
4
+ import type { TriggerNodeOptions } from "./trigger.interface";
5
+ import { TriggerManager } from "./trigger-manager";
6
+
7
+ /**
8
+ * Local interval scheduler node.
9
+ * Main loop: commands → heartbeat → {@link TriggerManager.tick}.
10
+ *
11
+ * Register runners via {@link TriggerManager.registerRunner} before {@link start}.
12
+ * Does not scan Supabase trigger rows — see `trigger.api.ts` for remote admin APIs.
13
+ *
14
+ * Deploy **one** TriggerNode per logical scheduler — multiple processes duplicate runner work.
15
+ */
16
+ class TriggerNode extends BaseNodeRuntime {
17
+ private readonly requireRunners: boolean;
18
+
19
+ constructor(options?: TriggerNodeOptions) {
20
+ super("triggerNode");
21
+ this.requireRunners = options?.requireRunners ?? false;
22
+ }
23
+
24
+ protected getLoopIntervalMs(): number {
25
+ return TRIGGER_LOOP_INTERVAL_MS;
26
+ }
27
+
28
+ protected loopLoggerMinLevel(): LogLevel {
29
+ return LogLevel.WARN;
30
+ }
31
+
32
+ protected async onBeforeRegisterNode(logger: LoggerWithScope): Promise<void> {
33
+ TriggerManager.closeRegistration();
34
+
35
+ const runnerKeys = TriggerManager.getRunnerKeys();
36
+ if (runnerKeys.length === 0) {
37
+ if (this.requireRunners) {
38
+ throw new Error("[TriggerNode] requireRunners is true but no runners are registered");
39
+ }
40
+ logger.warn("未注册任何 Trigger runner,主循環將空轉", {
41
+ topic: LOG_TOPIC_TRIGGER,
42
+ });
43
+ return;
44
+ }
45
+
46
+ for (const { key, intervalMs } of TriggerManager.getRunnersBelowLoopInterval()) {
47
+ logger.warn("Runner interval 小於主循環 tick 間隔,實際觸發精度受限", {
48
+ topic: LOG_TOPIC_TRIGGER,
49
+ data: {
50
+ runnerKey: key,
51
+ intervalMs,
52
+ loopIntervalMs: TRIGGER_LOOP_INTERVAL_MS,
53
+ },
54
+ });
55
+ }
56
+
57
+ logger.success("Trigger 節點啟動", {
58
+ topic: LOG_TOPIC_TRIGGER,
59
+ data: { runnerKeys },
60
+ });
61
+ }
62
+
63
+ protected async runLoopSteps(ctx: NodeLoopContext, heartbeatOk: boolean): Promise<void> {
64
+ if (!heartbeatOk) {
65
+ const logger = createLogger({
66
+ scope: createScope({
67
+ module: `${this.runtimeModule}-runLoopSteps`,
68
+ traceId: ctx.loopTraceId,
69
+ labels: { nodeId: ctx.nodeId },
70
+ }),
71
+ });
72
+ logger.warn("心跳失敗,本輪跳過 runner", { topic: LOG_TOPIC_NODE });
73
+ return;
74
+ }
75
+ await TriggerManager.tick(ctx);
76
+ }
77
+ }
78
+
79
+ export type { TriggerNodeOptions } from "./trigger.interface";
80
+ export { TriggerNode };
@@ -1,14 +1,14 @@
1
+ import { z } from "zod";
1
2
  import { createTarget, scanTargetList, updateTargetDetails, validateWithSchema } from "../core.api";
2
3
  import { generateResponse, type SupabaseResponse } from "../core.interface";
4
+ import { createLogger } from "../shared/log";
3
5
  import { TaskStatus } from "../task/task.interface";
4
- import { createApiLogger } from "../shared/log";
5
- import { z } from "zod";
6
6
  import {
7
7
  CategoryTrigger,
8
- Trigger,
9
- TriggerStatus,
8
+ type Trigger,
10
9
  type TriggerAction,
11
10
  type TriggerSchedule,
11
+ TriggerStatus,
12
12
  } from "./trigger.interface";
13
13
 
14
14
  const TRIGGER_STATUS_FIELD = "details->>status" as const;
@@ -63,9 +63,9 @@ function enabledTriggerFilter() {
63
63
  /** List all ENABLED triggers (Phase 1: in-memory due check). */
64
64
  export const scanEnabledTriggers = validateWithSchema(
65
65
  scanEnabledTriggersSchema,
66
- "scanEnabledTriggersSchema"
66
+ "scanEnabledTriggersSchema",
67
67
  )(async ({ traceId }) => {
68
- const logger = createApiLogger("scanEnabledTriggers", { traceId });
68
+ const logger = createLogger({ module: "scanEnabledTriggers", traceId });
69
69
 
70
70
  try {
71
71
  const { data: triggerList } = await scanTargetList<Trigger>({
@@ -75,7 +75,7 @@ export const scanEnabledTriggers = validateWithSchema(
75
75
  });
76
76
 
77
77
  const rows = triggerList ?? [];
78
- logger.info("已掃描 ENABLED Trigger", {
78
+ logger.debug("已掃描 ENABLED Trigger", {
79
79
  topic: "trigger",
80
80
  data: { count: rows.length },
81
81
  });
@@ -90,9 +90,9 @@ export const scanEnabledTriggers = validateWithSchema(
90
90
  /** Create a trigger row (scheduler / admin). */
91
91
  export const postTrigger = validateWithSchema(
92
92
  postTriggerSchema,
93
- "postTriggerSchema"
93
+ "postTriggerSchema",
94
94
  )(async ({ name, value, status, schedule, action, tagList, traceId }) => {
95
- const logger = createApiLogger("postTrigger", { traceId });
95
+ const logger = createLogger({ module: "postTrigger", traceId });
96
96
 
97
97
  const details = {
98
98
  manifestVersion: 0,
@@ -128,9 +128,9 @@ export const postTrigger = validateWithSchema(
128
128
  */
129
129
  export const patchTriggerFired = validateWithSchema(
130
130
  patchTriggerFiredSchema,
131
- "patchTriggerFiredSchema"
131
+ "patchTriggerFiredSchema",
132
132
  )(async ({ triggerId, fireKey, expectedLastFireKey, traceId }) => {
133
- const logger = createApiLogger("patchTriggerFired", { traceId });
133
+ const logger = createLogger({ module: "patchTriggerFired", traceId });
134
134
  const now = Date.now();
135
135
 
136
136
  try {
@@ -0,0 +1,10 @@
1
+ export const LOG_TOPIC_TRIGGER = "trigger";
2
+
3
+ /** Fixed main-loop interval for {@link TriggerNode} (ms). */
4
+ export const TRIGGER_LOOP_INTERVAL_MS = 60_000;
5
+
6
+ /** Default extra retries after first failure within one runner tick. */
7
+ export const TRIGGER_RUNNER_DEFAULT_RETRY_COUNT = 3;
8
+
9
+ /** Default delay between retry attempts within the same tick (ms). */
10
+ export const TRIGGER_RUNNER_DEFAULT_RETRY_DELAY_MS = 0;
@@ -1,5 +1,6 @@
1
- import { Target } from "../core.interface";
2
- import { TaskStatus } from "../task/task.interface";
1
+ import type { Target } from "../core.interface";
2
+ import type { LoggerWithScope } from "../shared/log";
3
+ import type { TaskStatus } from "../task/task.interface";
3
4
 
4
5
  export enum CategoryTrigger {
5
6
  TRIGGER = "trigger",
@@ -48,3 +49,52 @@ export interface TriggerDetails {
48
49
  /** Idempotency key for the last successful fire, e.g. `daily:2026-06-18` (UTC date). */
49
50
  lastFireKey?: string | null;
50
51
  }
52
+
53
+ // ─── TriggerNode local runners ───────────────────────────────────────────────
54
+
55
+ /** Context passed to each runner invocation. */
56
+ export interface TriggerRunnerContext {
57
+ loopTraceId: string;
58
+ nodeId: string;
59
+ runnerKey: string;
60
+ logger: LoggerWithScope;
61
+ /** 1-based attempt index within this tick (includes retries). */
62
+ attempt: number;
63
+ maxAttempts: number;
64
+ }
65
+
66
+ export type TriggerRunnerFn = (ctx: TriggerRunnerContext) => void | Promise<void>;
67
+
68
+ export interface RegisterTriggerRunnerOptions {
69
+ /** Unique runner key within this process (trimmed; must be non-empty). */
70
+ key: string;
71
+ /** Minimum ms between tick starts for this runner. */
72
+ intervalMs: number;
73
+ fn: TriggerRunnerFn;
74
+ /** Delay first run after registration. Default `0`. */
75
+ initialDelayMs?: number;
76
+ /**
77
+ * Extra attempts after the first failure within the same tick.
78
+ * Default {@link TRIGGER_RUNNER_DEFAULT_RETRY_COUNT} from `./trigger.constant`.
79
+ */
80
+ retryCount?: number;
81
+ /**
82
+ * Delay between retry attempts within the same tick (ms).
83
+ * Default {@link TRIGGER_RUNNER_DEFAULT_RETRY_DELAY_MS} (`0` = immediate).
84
+ */
85
+ retryDelayMs?: number;
86
+ /**
87
+ * Max ms per fn invocation; rejects when exceeded.
88
+ * Does not cancel in-flight work — fn may still run after timeout. Omit for no limit.
89
+ */
90
+ timeoutMs?: number;
91
+ }
92
+
93
+ /** Options for {@link TriggerNode}. */
94
+ export interface TriggerNodeOptions {
95
+ /**
96
+ * When true, bootstrap aborts if no runners were registered before `start()`.
97
+ * Default `false` (warn and idle loop).
98
+ */
99
+ requireRunners?: boolean;
100
+ }
@@ -29,7 +29,7 @@ export function buildDailyFireKey(_schedule: TriggerDailySchedule, now: Date): s
29
29
  export function isDailyScheduleDue(
30
30
  schedule: TriggerDailySchedule,
31
31
  now: Date,
32
- lastFireKey: string | null | undefined
32
+ lastFireKey: string | null | undefined,
33
33
  ): boolean {
34
34
  const parts = parseUtcDateParts(now);
35
35
  if (parts.hour !== schedule.hour || parts.minute !== schedule.minute) {
@@ -1,43 +1,41 @@
1
1
  import { createTarget } from "../core.api";
2
2
  import { BaseValidator } from "../core.utils";
3
- import { Word, WordDetails } from "./word.interface";
3
+ import type { Word, WordDetails } from "./word.interface";
4
4
 
5
5
  export interface PostWordPayload {
6
- name: Word["name"];
7
- value: Word["value"];
8
- category: Word["category"];
9
- details: WordDetails;
6
+ name: Word["name"];
7
+ value: Word["value"];
8
+ category: Word["category"];
9
+ details: WordDetails;
10
10
  }
11
11
 
12
12
  export class PostWordValidator extends BaseValidator<PostWordPayload> {
13
- protected requiredFields: (keyof PostWordPayload)[] = ["name", "value", "category", "details"];
14
- protected optionalFields: (keyof PostWordPayload)[] = [];
13
+ protected requiredFields: (keyof PostWordPayload)[] = ["name", "value", "category", "details"];
14
+ protected optionalFields: (keyof PostWordPayload)[] = [];
15
15
 
16
- constructor() {
17
- super();
18
- // Add custom
19
- this.addCustomValidator((val) => {
20
- return true;
21
- });
22
- }
16
+ constructor() {
17
+ super();
18
+ // Add custom
19
+ this.addCustomValidator((_val) => {
20
+ return true;
21
+ });
22
+ }
23
23
  }
24
24
 
25
-
26
-
27
25
  export const postWord = async (payload: PostWordPayload) => {
28
- return createTarget<Word, PostWordPayload>({
29
- payload: payload,
30
- validator: PostWordValidator,
31
- createFn: (validPayload) => {
32
- const { name, value, category, details } = validPayload;
26
+ return createTarget<Word, PostWordPayload>({
27
+ payload: payload,
28
+ validator: PostWordValidator,
29
+ createFn: (validPayload) => {
30
+ const { name, value, category, details } = validPayload;
33
31
 
34
- return {
35
- name,
36
- category,
37
- value,
38
- tagList: [],
39
- details,
40
- };
41
- },
42
- });
32
+ return {
33
+ name,
34
+ category,
35
+ value,
36
+ tagList: [],
37
+ details,
38
+ };
39
+ },
40
+ });
43
41
  };
@@ -1,5 +1,5 @@
1
- import { Target } from "../core.interface";
2
- import { Link } from "../link/link.interface";
1
+ import type { Target } from "../core.interface";
2
+ import type { Link } from "../link/link.interface";
3
3
 
4
4
  export enum CategoryWord {
5
5
  WORD = "word",
@@ -19,5 +19,4 @@ export interface WordDetails {
19
19
  extensions: string[];
20
20
  scope: string;
21
21
  reviewList: Array<string | Link>;
22
- };
23
-
22
+ }
@@ -1,28 +0,0 @@
1
- export interface LoginPayload {
2
- email: string;
3
- password: string;
4
- }
5
- export interface RegisterPayload {
6
- email: string;
7
- password: string;
8
- confirmPassword?: string;
9
- }
10
- export interface User {
11
- id: string;
12
- email: string;
13
- created_at: string;
14
- last_sign_in_at?: string;
15
- }
16
- export declare const registerUser: ({ email, password }: RegisterPayload) => Promise<import("..").SupabaseResponse<{
17
- user: import("@supabase/supabase-js").AuthUser | null;
18
- session: import("@supabase/supabase-js").AuthSession | null;
19
- }>>;
20
- export declare const loginUser: ({ email, password }: LoginPayload) => Promise<import("..").SupabaseResponse<{
21
- user: import("@supabase/supabase-js").AuthUser;
22
- session: import("@supabase/supabase-js").AuthSession;
23
- weakPassword?: import("@supabase/supabase-js").WeakPassword;
24
- }>>;
25
- export declare const logoutUser: () => Promise<import("..").SupabaseResponse<unknown>>;
26
- export declare const getCurrentUser: () => Promise<import("..").SupabaseResponse<User | null>>;
27
- export declare const resetPassword: (email: string) => Promise<import("..").SupabaseResponse<unknown>>;
28
- //# sourceMappingURL=auth.api.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth.api.d.ts","sourceRoot":"","sources":["../../src/auth/auth.api.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAGD,eAAO,MAAM,YAAY,wBAA+B,eAAe;;;GAWtE,CAAC;AAGF,eAAO,MAAM,SAAS,wBAA+B,YAAY;;;;GAWhE,CAAC;AAGF,eAAO,MAAM,UAAU,uDAQtB,CAAC;AAGF,eAAO,MAAM,cAAc,2DAW1B,CAAC;AAGF,eAAO,MAAM,aAAa,UAAiB,MAAM,oDAQhD,CAAC"}
@@ -1,51 +0,0 @@
1
- import { SupabaseInitializer } from "../supabase";
2
- import { generateResponse } from "../core.interface";
3
- import { handleSupabaseError } from "../core.utils";
4
- const supabase = SupabaseInitializer.getInstance();
5
- // 用户注册
6
- export const registerUser = async ({ email, password }) => {
7
- const { data, error } = await supabase.authClient.auth.signUp({
8
- email,
9
- password,
10
- });
11
- if (error) {
12
- handleSupabaseError("registerUser", error, "Registration failed. Please try again.");
13
- }
14
- return generateResponse.success(data);
15
- };
16
- // 用户登录
17
- export const loginUser = async ({ email, password }) => {
18
- const { data, error } = await supabase.authClient.auth.signInWithPassword({
19
- email,
20
- password,
21
- });
22
- if (error) {
23
- handleSupabaseError("loginUser", error, "Login failed. Please check your credentials.");
24
- }
25
- return generateResponse.success(data);
26
- };
27
- // 用户登出
28
- export const logoutUser = async () => {
29
- const { error } = await supabase.authClient.auth.signOut();
30
- if (error) {
31
- handleSupabaseError("logoutUser", error, "Logout failed.");
32
- }
33
- return generateResponse.success();
34
- };
35
- // 获取当前用户
36
- export const getCurrentUser = async () => {
37
- const { data: { user }, error, } = await supabase.authClient.auth.getUser();
38
- if (error) {
39
- handleSupabaseError("getCurrentUser", error, "Failed to get current user.");
40
- }
41
- return generateResponse.success(user);
42
- };
43
- // 重置密码
44
- export const resetPassword = async (email) => {
45
- const { error } = await supabase.authClient.auth.resetPasswordForEmail(email);
46
- if (error) {
47
- handleSupabaseError("resetPassword", error, "Password reset request failed.");
48
- }
49
- return generateResponse.success();
50
- };
51
- //# sourceMappingURL=auth.api.js.map