@uploadista/core 0.0.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 (359) hide show
  1. package/.turbo/turbo-build.log +5 -0
  2. package/.turbo/turbo-check.log +231 -0
  3. package/.turbo/turbo-format.log +5 -0
  4. package/LICENSE +21 -0
  5. package/README.md +1120 -0
  6. package/dist/chunk-CUT6urMc.cjs +1 -0
  7. package/dist/debounce-C2SeqcxD.js +2 -0
  8. package/dist/debounce-C2SeqcxD.js.map +1 -0
  9. package/dist/debounce-LZK7yS7Z.cjs +1 -0
  10. package/dist/errors/index.cjs +1 -0
  11. package/dist/errors/index.d.cts +3 -0
  12. package/dist/errors/index.d.ts +3 -0
  13. package/dist/errors/index.d.ts.map +1 -0
  14. package/dist/errors/index.js +2 -0
  15. package/dist/errors/uploadista-error.d.ts +209 -0
  16. package/dist/errors/uploadista-error.d.ts.map +1 -0
  17. package/dist/errors/uploadista-error.js +322 -0
  18. package/dist/errors-8i_aMxOE.js +1 -0
  19. package/dist/errors-CRm1FHHT.cjs +0 -0
  20. package/dist/flow/edge.d.ts +47 -0
  21. package/dist/flow/edge.d.ts.map +1 -0
  22. package/dist/flow/edge.js +40 -0
  23. package/dist/flow/event.d.ts +206 -0
  24. package/dist/flow/event.d.ts.map +1 -0
  25. package/dist/flow/event.js +53 -0
  26. package/dist/flow/flow-server.d.ts +223 -0
  27. package/dist/flow/flow-server.d.ts.map +1 -0
  28. package/dist/flow/flow-server.js +614 -0
  29. package/dist/flow/flow.d.ts +238 -0
  30. package/dist/flow/flow.d.ts.map +1 -0
  31. package/dist/flow/flow.js +629 -0
  32. package/dist/flow/index.cjs +1 -0
  33. package/dist/flow/index.d.cts +6 -0
  34. package/dist/flow/index.d.ts +24 -0
  35. package/dist/flow/index.d.ts.map +1 -0
  36. package/dist/flow/index.js +24 -0
  37. package/dist/flow/node.d.ts +136 -0
  38. package/dist/flow/node.d.ts.map +1 -0
  39. package/dist/flow/node.js +153 -0
  40. package/dist/flow/nodes/index.d.ts +8 -0
  41. package/dist/flow/nodes/index.d.ts.map +1 -0
  42. package/dist/flow/nodes/index.js +7 -0
  43. package/dist/flow/nodes/input-node.d.ts +78 -0
  44. package/dist/flow/nodes/input-node.d.ts.map +1 -0
  45. package/dist/flow/nodes/input-node.js +233 -0
  46. package/dist/flow/nodes/storage-node.d.ts +67 -0
  47. package/dist/flow/nodes/storage-node.d.ts.map +1 -0
  48. package/dist/flow/nodes/storage-node.js +94 -0
  49. package/dist/flow/nodes/streaming-input-node.d.ts +69 -0
  50. package/dist/flow/nodes/streaming-input-node.d.ts.map +1 -0
  51. package/dist/flow/nodes/streaming-input-node.js +156 -0
  52. package/dist/flow/nodes/transform-node.d.ts +85 -0
  53. package/dist/flow/nodes/transform-node.d.ts.map +1 -0
  54. package/dist/flow/nodes/transform-node.js +107 -0
  55. package/dist/flow/parallel-scheduler.d.ts +175 -0
  56. package/dist/flow/parallel-scheduler.d.ts.map +1 -0
  57. package/dist/flow/parallel-scheduler.js +193 -0
  58. package/dist/flow/plugins/credential-provider.d.ts +47 -0
  59. package/dist/flow/plugins/credential-provider.d.ts.map +1 -0
  60. package/dist/flow/plugins/credential-provider.js +24 -0
  61. package/dist/flow/plugins/image-ai-plugin.d.ts +61 -0
  62. package/dist/flow/plugins/image-ai-plugin.d.ts.map +1 -0
  63. package/dist/flow/plugins/image-ai-plugin.js +21 -0
  64. package/dist/flow/plugins/image-plugin.d.ts +52 -0
  65. package/dist/flow/plugins/image-plugin.d.ts.map +1 -0
  66. package/dist/flow/plugins/image-plugin.js +22 -0
  67. package/dist/flow/plugins/types/describe-image-node.d.ts +16 -0
  68. package/dist/flow/plugins/types/describe-image-node.d.ts.map +1 -0
  69. package/dist/flow/plugins/types/describe-image-node.js +9 -0
  70. package/dist/flow/plugins/types/index.d.ts +9 -0
  71. package/dist/flow/plugins/types/index.d.ts.map +1 -0
  72. package/dist/flow/plugins/types/index.js +8 -0
  73. package/dist/flow/plugins/types/optimize-node.d.ts +20 -0
  74. package/dist/flow/plugins/types/optimize-node.d.ts.map +1 -0
  75. package/dist/flow/plugins/types/optimize-node.js +11 -0
  76. package/dist/flow/plugins/types/remove-background-node.d.ts +16 -0
  77. package/dist/flow/plugins/types/remove-background-node.d.ts.map +1 -0
  78. package/dist/flow/plugins/types/remove-background-node.js +9 -0
  79. package/dist/flow/plugins/types/resize-node.d.ts +21 -0
  80. package/dist/flow/plugins/types/resize-node.d.ts.map +1 -0
  81. package/dist/flow/plugins/types/resize-node.js +16 -0
  82. package/dist/flow/plugins/zip-plugin.d.ts +62 -0
  83. package/dist/flow/plugins/zip-plugin.d.ts.map +1 -0
  84. package/dist/flow/plugins/zip-plugin.js +21 -0
  85. package/dist/flow/typed-flow.d.ts +90 -0
  86. package/dist/flow/typed-flow.d.ts.map +1 -0
  87. package/dist/flow/typed-flow.js +59 -0
  88. package/dist/flow/types/flow-file.d.ts +45 -0
  89. package/dist/flow/types/flow-file.d.ts.map +1 -0
  90. package/dist/flow/types/flow-file.js +27 -0
  91. package/dist/flow/types/flow-job.d.ts +118 -0
  92. package/dist/flow/types/flow-job.d.ts.map +1 -0
  93. package/dist/flow/types/flow-job.js +11 -0
  94. package/dist/flow/types/flow-types.d.ts +321 -0
  95. package/dist/flow/types/flow-types.d.ts.map +1 -0
  96. package/dist/flow/types/flow-types.js +52 -0
  97. package/dist/flow/types/index.d.ts +4 -0
  98. package/dist/flow/types/index.d.ts.map +1 -0
  99. package/dist/flow/types/index.js +3 -0
  100. package/dist/flow/types/run-args.d.ts +38 -0
  101. package/dist/flow/types/run-args.d.ts.map +1 -0
  102. package/dist/flow/types/run-args.js +30 -0
  103. package/dist/flow/types/type-validator.d.ts +26 -0
  104. package/dist/flow/types/type-validator.d.ts.map +1 -0
  105. package/dist/flow/types/type-validator.js +134 -0
  106. package/dist/flow/utils/resolve-upload-metadata.d.ts +11 -0
  107. package/dist/flow/utils/resolve-upload-metadata.d.ts.map +1 -0
  108. package/dist/flow/utils/resolve-upload-metadata.js +28 -0
  109. package/dist/flow-2zXnEiWL.cjs +1 -0
  110. package/dist/flow-CRaKy7Vj.js +2 -0
  111. package/dist/flow-CRaKy7Vj.js.map +1 -0
  112. package/dist/generate-id-Dm-Vboxq.d.ts +34 -0
  113. package/dist/generate-id-Dm-Vboxq.d.ts.map +1 -0
  114. package/dist/generate-id-LjJRLD6N.d.cts +34 -0
  115. package/dist/generate-id-LjJRLD6N.d.cts.map +1 -0
  116. package/dist/generate-id-xHp_Z7Cl.cjs +1 -0
  117. package/dist/generate-id-yohS1ZDk.js +2 -0
  118. package/dist/generate-id-yohS1ZDk.js.map +1 -0
  119. package/dist/index-BO8GZlbD.d.cts +1040 -0
  120. package/dist/index-BO8GZlbD.d.cts.map +1 -0
  121. package/dist/index-BoGG5KAY.d.ts +1 -0
  122. package/dist/index-BtBZHVmz.d.cts +1 -0
  123. package/dist/index-D-CoVpkZ.d.ts +1004 -0
  124. package/dist/index-D-CoVpkZ.d.ts.map +1 -0
  125. package/dist/index.cjs +1 -0
  126. package/dist/index.d.cts +6 -0
  127. package/dist/index.d.ts +5 -0
  128. package/dist/index.d.ts.map +1 -0
  129. package/dist/index.js +5 -0
  130. package/dist/logger/logger.cjs +1 -0
  131. package/dist/logger/logger.d.cts +8 -0
  132. package/dist/logger/logger.d.cts.map +1 -0
  133. package/dist/logger/logger.d.ts +5 -0
  134. package/dist/logger/logger.d.ts.map +1 -0
  135. package/dist/logger/logger.js +10 -0
  136. package/dist/logger/logger.js.map +1 -0
  137. package/dist/semaphore-0ZwjVpyF.js +2 -0
  138. package/dist/semaphore-0ZwjVpyF.js.map +1 -0
  139. package/dist/semaphore-BHprIjFI.d.cts +37 -0
  140. package/dist/semaphore-BHprIjFI.d.cts.map +1 -0
  141. package/dist/semaphore-DThupBkc.d.ts +37 -0
  142. package/dist/semaphore-DThupBkc.d.ts.map +1 -0
  143. package/dist/semaphore-DVrONiAV.cjs +1 -0
  144. package/dist/stream-limiter-CoWKv39w.js +2 -0
  145. package/dist/stream-limiter-CoWKv39w.js.map +1 -0
  146. package/dist/stream-limiter-JgOwmkMa.cjs +1 -0
  147. package/dist/streams/multi-stream.cjs +1 -0
  148. package/dist/streams/multi-stream.d.cts +91 -0
  149. package/dist/streams/multi-stream.d.cts.map +1 -0
  150. package/dist/streams/multi-stream.d.ts +86 -0
  151. package/dist/streams/multi-stream.d.ts.map +1 -0
  152. package/dist/streams/multi-stream.js +149 -0
  153. package/dist/streams/multi-stream.js.map +1 -0
  154. package/dist/streams/stream-limiter.cjs +1 -0
  155. package/dist/streams/stream-limiter.d.cts +36 -0
  156. package/dist/streams/stream-limiter.d.cts.map +1 -0
  157. package/dist/streams/stream-limiter.d.ts +27 -0
  158. package/dist/streams/stream-limiter.d.ts.map +1 -0
  159. package/dist/streams/stream-limiter.js +49 -0
  160. package/dist/streams/stream-splitter.cjs +1 -0
  161. package/dist/streams/stream-splitter.d.cts +68 -0
  162. package/dist/streams/stream-splitter.d.cts.map +1 -0
  163. package/dist/streams/stream-splitter.d.ts +51 -0
  164. package/dist/streams/stream-splitter.d.ts.map +1 -0
  165. package/dist/streams/stream-splitter.js +175 -0
  166. package/dist/streams/stream-splitter.js.map +1 -0
  167. package/dist/types/data-store-registry.d.ts +13 -0
  168. package/dist/types/data-store-registry.d.ts.map +1 -0
  169. package/dist/types/data-store-registry.js +4 -0
  170. package/dist/types/data-store.d.ts +316 -0
  171. package/dist/types/data-store.d.ts.map +1 -0
  172. package/dist/types/data-store.js +157 -0
  173. package/dist/types/event-broadcaster.d.ts +28 -0
  174. package/dist/types/event-broadcaster.d.ts.map +1 -0
  175. package/dist/types/event-broadcaster.js +6 -0
  176. package/dist/types/event-emitter.d.ts +378 -0
  177. package/dist/types/event-emitter.d.ts.map +1 -0
  178. package/dist/types/event-emitter.js +223 -0
  179. package/dist/types/index.cjs +1 -0
  180. package/dist/types/index.d.cts +6 -0
  181. package/dist/types/index.d.ts +10 -0
  182. package/dist/types/index.d.ts.map +1 -0
  183. package/dist/types/index.js +9 -0
  184. package/dist/types/input-file.d.ts +104 -0
  185. package/dist/types/input-file.d.ts.map +1 -0
  186. package/dist/types/input-file.js +27 -0
  187. package/dist/types/kv-store.d.ts +281 -0
  188. package/dist/types/kv-store.d.ts.map +1 -0
  189. package/dist/types/kv-store.js +234 -0
  190. package/dist/types/middleware.d.ts +17 -0
  191. package/dist/types/middleware.d.ts.map +1 -0
  192. package/dist/types/middleware.js +21 -0
  193. package/dist/types/upload-event.d.ts +105 -0
  194. package/dist/types/upload-event.d.ts.map +1 -0
  195. package/dist/types/upload-event.js +71 -0
  196. package/dist/types/upload-file.d.ts +136 -0
  197. package/dist/types/upload-file.d.ts.map +1 -0
  198. package/dist/types/upload-file.js +34 -0
  199. package/dist/types/websocket.d.ts +144 -0
  200. package/dist/types/websocket.d.ts.map +1 -0
  201. package/dist/types/websocket.js +40 -0
  202. package/dist/types-BT-cvi7T.cjs +1 -0
  203. package/dist/types-DhU2j-XF.js +2 -0
  204. package/dist/types-DhU2j-XF.js.map +1 -0
  205. package/dist/upload/convert-to-stream.d.ts +38 -0
  206. package/dist/upload/convert-to-stream.d.ts.map +1 -0
  207. package/dist/upload/convert-to-stream.js +43 -0
  208. package/dist/upload/convert-upload-to-flow-file.d.ts +14 -0
  209. package/dist/upload/convert-upload-to-flow-file.d.ts.map +1 -0
  210. package/dist/upload/convert-upload-to-flow-file.js +21 -0
  211. package/dist/upload/create-upload.d.ts +68 -0
  212. package/dist/upload/create-upload.d.ts.map +1 -0
  213. package/dist/upload/create-upload.js +157 -0
  214. package/dist/upload/index.cjs +1 -0
  215. package/dist/upload/index.d.cts +6 -0
  216. package/dist/upload/index.d.ts +4 -0
  217. package/dist/upload/index.d.ts.map +1 -0
  218. package/dist/upload/index.js +3 -0
  219. package/dist/upload/mime.d.ts +24 -0
  220. package/dist/upload/mime.d.ts.map +1 -0
  221. package/dist/upload/mime.js +351 -0
  222. package/dist/upload/upload-chunk.d.ts +58 -0
  223. package/dist/upload/upload-chunk.d.ts.map +1 -0
  224. package/dist/upload/upload-chunk.js +277 -0
  225. package/dist/upload/upload-server.d.ts +221 -0
  226. package/dist/upload/upload-server.d.ts.map +1 -0
  227. package/dist/upload/upload-server.js +181 -0
  228. package/dist/upload/upload-strategy-negotiator.d.ts +148 -0
  229. package/dist/upload/upload-strategy-negotiator.d.ts.map +1 -0
  230. package/dist/upload/upload-strategy-negotiator.js +217 -0
  231. package/dist/upload/upload-url.d.ts +68 -0
  232. package/dist/upload/upload-url.d.ts.map +1 -0
  233. package/dist/upload/upload-url.js +142 -0
  234. package/dist/upload/write-to-store.d.ts +77 -0
  235. package/dist/upload/write-to-store.d.ts.map +1 -0
  236. package/dist/upload/write-to-store.js +147 -0
  237. package/dist/upload-DLuICjpP.cjs +1 -0
  238. package/dist/upload-DaXO34dE.js +2 -0
  239. package/dist/upload-DaXO34dE.js.map +1 -0
  240. package/dist/uploadista-error-BB-Wdiz9.cjs +22 -0
  241. package/dist/uploadista-error-BVsVxqvz.js +23 -0
  242. package/dist/uploadista-error-BVsVxqvz.js.map +1 -0
  243. package/dist/uploadista-error-CwxYs4EB.d.ts +52 -0
  244. package/dist/uploadista-error-CwxYs4EB.d.ts.map +1 -0
  245. package/dist/uploadista-error-kKlhLRhY.d.cts +52 -0
  246. package/dist/uploadista-error-kKlhLRhY.d.cts.map +1 -0
  247. package/dist/utils/checksum.d.ts +22 -0
  248. package/dist/utils/checksum.d.ts.map +1 -0
  249. package/dist/utils/checksum.js +49 -0
  250. package/dist/utils/debounce.cjs +1 -0
  251. package/dist/utils/debounce.d.cts +38 -0
  252. package/dist/utils/debounce.d.cts.map +1 -0
  253. package/dist/utils/debounce.d.ts +36 -0
  254. package/dist/utils/debounce.d.ts.map +1 -0
  255. package/dist/utils/debounce.js +73 -0
  256. package/dist/utils/generate-id.cjs +1 -0
  257. package/dist/utils/generate-id.d.cts +2 -0
  258. package/dist/utils/generate-id.d.ts +32 -0
  259. package/dist/utils/generate-id.d.ts.map +1 -0
  260. package/dist/utils/generate-id.js +23 -0
  261. package/dist/utils/md5.cjs +1 -0
  262. package/dist/utils/md5.d.cts +73 -0
  263. package/dist/utils/md5.d.cts.map +1 -0
  264. package/dist/utils/md5.d.ts +71 -0
  265. package/dist/utils/md5.d.ts.map +1 -0
  266. package/dist/utils/md5.js +417 -0
  267. package/dist/utils/md5.js.map +1 -0
  268. package/dist/utils/once.cjs +1 -0
  269. package/dist/utils/once.d.cts +25 -0
  270. package/dist/utils/once.d.cts.map +1 -0
  271. package/dist/utils/once.d.ts +21 -0
  272. package/dist/utils/once.d.ts.map +1 -0
  273. package/dist/utils/once.js +54 -0
  274. package/dist/utils/once.js.map +1 -0
  275. package/dist/utils/semaphore.cjs +1 -0
  276. package/dist/utils/semaphore.d.cts +3 -0
  277. package/dist/utils/semaphore.d.ts +78 -0
  278. package/dist/utils/semaphore.d.ts.map +1 -0
  279. package/dist/utils/semaphore.js +134 -0
  280. package/dist/utils/throttle.cjs +1 -0
  281. package/dist/utils/throttle.d.cts +24 -0
  282. package/dist/utils/throttle.d.cts.map +1 -0
  283. package/dist/utils/throttle.d.ts +18 -0
  284. package/dist/utils/throttle.d.ts.map +1 -0
  285. package/dist/utils/throttle.js +20 -0
  286. package/dist/utils/throttle.js.map +1 -0
  287. package/docs/PARALLEL_EXECUTION.md +206 -0
  288. package/docs/PARALLEL_EXECUTION_QUICKSTART.md +142 -0
  289. package/docs/PARALLEL_EXECUTION_REFACTOR.md +184 -0
  290. package/package.json +80 -0
  291. package/src/errors/__tests__/uploadista-error.test.ts +251 -0
  292. package/src/errors/index.ts +2 -0
  293. package/src/errors/uploadista-error.ts +394 -0
  294. package/src/flow/README.md +352 -0
  295. package/src/flow/edge.test.ts +146 -0
  296. package/src/flow/edge.ts +60 -0
  297. package/src/flow/event.ts +229 -0
  298. package/src/flow/flow-server.ts +1089 -0
  299. package/src/flow/flow.ts +1050 -0
  300. package/src/flow/index.ts +28 -0
  301. package/src/flow/node.ts +249 -0
  302. package/src/flow/nodes/index.ts +8 -0
  303. package/src/flow/nodes/input-node.ts +296 -0
  304. package/src/flow/nodes/storage-node.ts +128 -0
  305. package/src/flow/nodes/transform-node.ts +154 -0
  306. package/src/flow/parallel-scheduler.ts +259 -0
  307. package/src/flow/plugins/credential-provider.ts +48 -0
  308. package/src/flow/plugins/image-ai-plugin.ts +66 -0
  309. package/src/flow/plugins/image-plugin.ts +60 -0
  310. package/src/flow/plugins/types/describe-image-node.ts +16 -0
  311. package/src/flow/plugins/types/index.ts +9 -0
  312. package/src/flow/plugins/types/optimize-node.ts +18 -0
  313. package/src/flow/plugins/types/remove-background-node.ts +18 -0
  314. package/src/flow/plugins/types/resize-node.ts +26 -0
  315. package/src/flow/plugins/zip-plugin.ts +69 -0
  316. package/src/flow/typed-flow.ts +279 -0
  317. package/src/flow/types/flow-file.ts +51 -0
  318. package/src/flow/types/flow-job.ts +138 -0
  319. package/src/flow/types/flow-types.ts +353 -0
  320. package/src/flow/types/index.ts +6 -0
  321. package/src/flow/types/run-args.ts +40 -0
  322. package/src/flow/types/type-validator.ts +204 -0
  323. package/src/flow/utils/resolve-upload-metadata.ts +48 -0
  324. package/src/index.ts +5 -0
  325. package/src/logger/logger.ts +14 -0
  326. package/src/streams/stream-limiter.test.ts +150 -0
  327. package/src/streams/stream-limiter.ts +75 -0
  328. package/src/types/data-store.ts +427 -0
  329. package/src/types/event-broadcaster.ts +39 -0
  330. package/src/types/event-emitter.ts +349 -0
  331. package/src/types/index.ts +9 -0
  332. package/src/types/input-file.ts +107 -0
  333. package/src/types/kv-store.ts +375 -0
  334. package/src/types/middleware.ts +54 -0
  335. package/src/types/upload-event.ts +75 -0
  336. package/src/types/upload-file.ts +139 -0
  337. package/src/types/websocket.ts +65 -0
  338. package/src/upload/convert-to-stream.ts +48 -0
  339. package/src/upload/create-upload.ts +214 -0
  340. package/src/upload/index.ts +3 -0
  341. package/src/upload/mime.ts +436 -0
  342. package/src/upload/upload-chunk.ts +364 -0
  343. package/src/upload/upload-server.ts +390 -0
  344. package/src/upload/upload-strategy-negotiator.ts +316 -0
  345. package/src/upload/upload-url.ts +173 -0
  346. package/src/upload/write-to-store.ts +211 -0
  347. package/src/utils/checksum.ts +61 -0
  348. package/src/utils/debounce.test.ts +126 -0
  349. package/src/utils/debounce.ts +89 -0
  350. package/src/utils/generate-id.ts +35 -0
  351. package/src/utils/md5.ts +475 -0
  352. package/src/utils/once.test.ts +83 -0
  353. package/src/utils/once.ts +63 -0
  354. package/src/utils/throttle.test.ts +101 -0
  355. package/src/utils/throttle.ts +29 -0
  356. package/tsconfig.json +20 -0
  357. package/tsconfig.tsbuildinfo +1 -0
  358. package/tsdown.config.ts +25 -0
  359. package/vitest.config.ts +15 -0
@@ -0,0 +1,20 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Zod schema for validating image optimization parameters.
4
+ * Defines the structure and validation rules for image optimization requests.
5
+ */
6
+ export declare const optimizeParamsSchema: z.ZodObject<{
7
+ quality: z.ZodNumber;
8
+ format: z.ZodEnum<{
9
+ avif: "avif";
10
+ jpeg: "jpeg";
11
+ png: "png";
12
+ webp: "webp";
13
+ }>;
14
+ }, z.core.$strip>;
15
+ /**
16
+ * Parameters for the image optimization node.
17
+ * Controls quality and format settings for image optimization.
18
+ */
19
+ export type OptimizeParams = z.infer<typeof optimizeParamsSchema>;
20
+ //# sourceMappingURL=optimize-node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optimize-node.d.ts","sourceRoot":"","sources":["../../../../src/flow/plugins/types/optimize-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;GAGG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;iBAK/B,CAAC;AAEH;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Zod schema for validating image optimization parameters.
4
+ * Defines the structure and validation rules for image optimization requests.
5
+ */
6
+ export const optimizeParamsSchema = z.object({
7
+ /** Image quality as a percentage (0-100) */
8
+ quality: z.number().min(0).max(100),
9
+ /** Output image format */
10
+ format: z.enum(["jpeg", "webp", "png", "avif"]),
11
+ });
@@ -0,0 +1,16 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Zod schema for validating remove background node parameters.
4
+ * Defines the structure and validation rules for background removal requests.
5
+ */
6
+ export declare const removeBackgroundParamsSchema: z.ZodObject<{
7
+ serviceType: z.ZodOptional<z.ZodEnum<{
8
+ replicate: "replicate";
9
+ }>>;
10
+ }, z.core.$strip>;
11
+ /**
12
+ * Parameters for the remove background node.
13
+ * Controls which AI service to use for background removal processing.
14
+ */
15
+ export type RemoveBackgroundParams = z.infer<typeof removeBackgroundParamsSchema>;
16
+ //# sourceMappingURL=remove-background-node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove-background-node.d.ts","sourceRoot":"","sources":["../../../../src/flow/plugins/types/remove-background-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;GAGG;AACH,eAAO,MAAM,4BAA4B;;;;iBAGvC,CAAC;AAEH;;;GAGG;AACH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAC1C,OAAO,4BAA4B,CACpC,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Zod schema for validating remove background node parameters.
4
+ * Defines the structure and validation rules for background removal requests.
5
+ */
6
+ export const removeBackgroundParamsSchema = z.object({
7
+ /** Optional service type to use for background removal (currently supports "replicate") */
8
+ serviceType: z.enum(["replicate"]).optional(),
9
+ });
@@ -0,0 +1,21 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Zod schema for validating image resize parameters.
4
+ * Defines the structure and validation rules for image resizing requests.
5
+ * Requires at least one dimension (width or height) to be specified.
6
+ */
7
+ export declare const resizeParamsSchema: z.ZodObject<{
8
+ width: z.ZodOptional<z.ZodNumber>;
9
+ height: z.ZodOptional<z.ZodNumber>;
10
+ fit: z.ZodEnum<{
11
+ fill: "fill";
12
+ contain: "contain";
13
+ cover: "cover";
14
+ }>;
15
+ }, z.core.$strip>;
16
+ /**
17
+ * Parameters for the image resize node.
18
+ * Controls the target dimensions and fitting behavior for image resizing.
19
+ */
20
+ export type ResizeParams = z.infer<typeof resizeParamsSchema>;
21
+ //# sourceMappingURL=resize-node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resize-node.d.ts","sourceRoot":"","sources":["../../../../src/flow/plugins/types/resize-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;GAIG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;iBAY5B,CAAC;AAEJ;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Zod schema for validating image resize parameters.
4
+ * Defines the structure and validation rules for image resizing requests.
5
+ * Requires at least one dimension (width or height) to be specified.
6
+ */
7
+ export const resizeParamsSchema = z
8
+ .object({
9
+ /** Target width in pixels (optional) */
10
+ width: z.number().positive().optional(),
11
+ /** Target height in pixels (optional) */
12
+ height: z.number().positive().optional(),
13
+ /** How the image should fit within the specified dimensions */
14
+ fit: z.enum(["contain", "cover", "fill"]),
15
+ })
16
+ .refine((data) => data.width || data.height, "Either width or height must be specified for resize");
@@ -0,0 +1,62 @@
1
+ import type { UploadistaError } from "@uploadista/core/errors";
2
+ import { Context, type Effect } from "effect";
3
+ import type { UploadFile } from "@/types";
4
+ /**
5
+ * Parameters for creating a ZIP archive.
6
+ */
7
+ export type ZipParams = {
8
+ /** Name of the ZIP file to create */
9
+ zipName: string;
10
+ /** Whether to include file metadata in the ZIP archive */
11
+ includeMetadata: boolean;
12
+ };
13
+ /**
14
+ * Input data structure for ZIP operations.
15
+ * Represents a single file to be included in the ZIP archive.
16
+ */
17
+ export type ZipInput = {
18
+ /** Unique identifier for the file */
19
+ id: string;
20
+ /** Binary data of the file */
21
+ data: Uint8Array;
22
+ /** File metadata including name, size, type, etc. */
23
+ metadata: UploadFile["metadata"];
24
+ };
25
+ /**
26
+ * Shape definition for the ZIP Plugin interface.
27
+ * Defines the contract that all ZIP implementations must follow.
28
+ */
29
+ export type ZipPluginShape = {
30
+ /**
31
+ * Creates a ZIP archive from multiple input files.
32
+ *
33
+ * @param inputs - Array of files to include in the ZIP archive
34
+ * @param options - Configuration options for the ZIP creation
35
+ * @returns An Effect that resolves to the ZIP file as a Uint8Array
36
+ * @throws {UploadistaError} When ZIP creation fails
37
+ */
38
+ zip: (inputs: ZipInput[], options: ZipParams) => Effect.Effect<Uint8Array, UploadistaError>;
39
+ };
40
+ declare const ZipPlugin_base: Context.TagClass<ZipPlugin, "ZipPlugin", ZipPluginShape>;
41
+ /**
42
+ * Context tag for the ZIP Plugin.
43
+ *
44
+ * This tag provides a type-safe way to access ZIP functionality
45
+ * throughout the application using Effect's dependency injection system.
46
+ *
47
+ * @example
48
+ * ```typescript
49
+ * import { ZipPlugin } from "@uploadista/core/flow/plugins";
50
+ *
51
+ * // In your flow node
52
+ * const program = Effect.gen(function* () {
53
+ * const zipPlugin = yield* ZipPlugin;
54
+ * const zipData = yield* zipPlugin.zip(files, { zipName: "archive.zip", includeMetadata: true });
55
+ * return zipData;
56
+ * });
57
+ * ```
58
+ */
59
+ export declare class ZipPlugin extends ZipPlugin_base {
60
+ }
61
+ export {};
62
+ //# sourceMappingURL=zip-plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zip-plugin.d.ts","sourceRoot":"","sources":["../../../src/flow/plugins/zip-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,0DAA0D;IAC1D,eAAe,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,QAAQ,GAAG;IACrB,qCAAqC;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,8BAA8B;IAC9B,IAAI,EAAE,UAAU,CAAC;IACjB,qDAAqD;IACrD,QAAQ,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC;CAClC,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B;;;;;;;OAOG;IACH,GAAG,EAAE,CACH,MAAM,EAAE,QAAQ,EAAE,EAClB,OAAO,EAAE,SAAS,KACf,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;CAEjD,CAAC;;AAEF;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,SAAU,SAAQ,cAG5B;CAAG"}
@@ -0,0 +1,21 @@
1
+ import { Context } from "effect";
2
+ /**
3
+ * Context tag for the ZIP Plugin.
4
+ *
5
+ * This tag provides a type-safe way to access ZIP functionality
6
+ * throughout the application using Effect's dependency injection system.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * import { ZipPlugin } from "@uploadista/core/flow/plugins";
11
+ *
12
+ * // In your flow node
13
+ * const program = Effect.gen(function* () {
14
+ * const zipPlugin = yield* ZipPlugin;
15
+ * const zipData = yield* zipPlugin.zip(files, { zipName: "archive.zip", includeMetadata: true });
16
+ * return zipData;
17
+ * });
18
+ * ```
19
+ */
20
+ export class ZipPlugin extends Context.Tag("ZipPlugin")() {
21
+ }
@@ -0,0 +1,90 @@
1
+ /**
2
+ * biome-ignore-all lint/suspicious/noExplicitAny: broadly-typed generics require runtime schema placeholders
3
+ */
4
+ import { Effect } from "effect";
5
+ import { z } from "zod";
6
+ import type { UploadistaError as CoreUploadistaError } from "../errors";
7
+ import { UploadistaError } from "../errors";
8
+ import type { UploadServer } from "../upload";
9
+ import type { FlowEvent } from "./event";
10
+ import type { Flow, FlowExecutionResult } from "./flow";
11
+ import { NodeType } from "./node";
12
+ import type { FlowNode, TypeCompatibilityChecker } from "./types/flow-types";
13
+ export type NodeDefinition<TNodeError = never, TNodeRequirements = never> = FlowNode<any, any, CoreUploadistaError> | Effect.Effect<FlowNode<any, any, CoreUploadistaError>, TNodeError, TNodeRequirements>;
14
+ export type NodeDefinitionsRecord = Record<string, NodeDefinition<any, any>>;
15
+ type NodeDefinitionError<T> = T extends Effect.Effect<FlowNode<any, any, CoreUploadistaError>, infer TError, any> ? TError : never;
16
+ type NodeDefinitionRequirements<T> = T extends Effect.Effect<FlowNode<any, any, CoreUploadistaError>, any, infer TRequirements> ? TRequirements : never;
17
+ type NodesErrorUnion<TNodes extends NodeDefinitionsRecord> = {
18
+ [K in keyof TNodes]: NodeDefinitionError<TNodes[K]>;
19
+ }[keyof TNodes];
20
+ type NodesRequirementsUnion<TNodes extends NodeDefinitionsRecord> = {
21
+ [K in keyof TNodes]: NodeDefinitionRequirements<TNodes[K]>;
22
+ }[keyof TNodes];
23
+ export type FlowRequirements<TNodes extends NodeDefinitionsRecord> = NodesRequirementsUnion<TNodes>;
24
+ export type FlowPluginRequirements<TNodes extends NodeDefinitionsRecord> = Exclude<FlowRequirements<TNodes>, UploadServer>;
25
+ type InferNode<T> = T extends FlowNode<any, any, CoreUploadistaError> ? T : T extends Effect.Effect<infer R, any, any> ? R extends FlowNode<any, any, CoreUploadistaError> ? R : never : never;
26
+ type ExtractKeysByNodeType<TNodes extends NodeDefinitionsRecord, TType extends NodeType> = {
27
+ [K in keyof TNodes]: InferNode<TNodes[K]>["type"] extends TType ? K : never;
28
+ }[keyof TNodes];
29
+ type SchemaInfer<T> = T extends z.ZodTypeAny ? z.infer<T> : never;
30
+ export type FlowInputMap<TNodes extends NodeDefinitionsRecord> = {
31
+ [K in Extract<ExtractKeysByNodeType<TNodes, NodeType.input>, string>]: SchemaInfer<InferNode<TNodes[K]>["inputSchema"]>;
32
+ };
33
+ export type FlowOutputMap<TNodes extends NodeDefinitionsRecord> = {
34
+ [K in Extract<ExtractKeysByNodeType<TNodes, NodeType.output>, string>]: SchemaInfer<InferNode<TNodes[K]>["outputSchema"]>;
35
+ };
36
+ type FlowInputUnion<TNodes extends NodeDefinitionsRecord> = {
37
+ [K in Extract<ExtractKeysByNodeType<TNodes, NodeType.input>, string>]: SchemaInfer<InferNode<TNodes[K]>["inputSchema"]>;
38
+ }[Extract<ExtractKeysByNodeType<TNodes, NodeType.input>, string>];
39
+ type FlowOutputUnion<TNodes extends NodeDefinitionsRecord> = {
40
+ [K in Extract<ExtractKeysByNodeType<TNodes, NodeType.output>, string>]: SchemaInfer<InferNode<TNodes[K]>["outputSchema"]>;
41
+ }[Extract<ExtractKeysByNodeType<TNodes, NodeType.output>, string>];
42
+ type NodeKey<TNodes extends NodeDefinitionsRecord> = Extract<keyof TNodes, string>;
43
+ export type TypedFlowEdge<TNodes extends NodeDefinitionsRecord> = {
44
+ source: NodeKey<TNodes>;
45
+ target: NodeKey<TNodes>;
46
+ sourcePort?: string;
47
+ targetPort?: string;
48
+ };
49
+ export type TypedFlowConfig<TNodes extends NodeDefinitionsRecord> = {
50
+ flowId: string;
51
+ name: string;
52
+ nodes: TNodes;
53
+ edges: Array<TypedFlowEdge<TNodes>>;
54
+ typeChecker?: TypeCompatibilityChecker;
55
+ onEvent?: (event: FlowEvent) => Effect.Effect<{
56
+ eventId: string | null;
57
+ }, CoreUploadistaError>;
58
+ parallelExecution?: {
59
+ enabled?: boolean;
60
+ maxConcurrency?: number;
61
+ };
62
+ inputSchema?: z.ZodTypeAny;
63
+ outputSchema?: z.ZodTypeAny;
64
+ };
65
+ declare const typedFlowInputsSymbol: unique symbol;
66
+ declare const typedFlowOutputsSymbol: unique symbol;
67
+ declare const typedFlowPluginsSymbol: unique symbol;
68
+ export type TypedFlow<TNodes extends NodeDefinitionsRecord, TInputSchema extends z.ZodTypeAny, TOutputSchema extends z.ZodTypeAny> = Flow<TInputSchema, TOutputSchema, FlowRequirements<TNodes>> & {
69
+ run: (args: {
70
+ inputs?: Partial<FlowInputMap<TNodes>>;
71
+ storageId: string;
72
+ jobId: string;
73
+ }) => Effect.Effect<FlowExecutionResult<FlowOutputMap<TNodes>>, CoreUploadistaError, FlowRequirements<TNodes>>;
74
+ resume: (args: {
75
+ jobId: string;
76
+ storageId: string;
77
+ nodeResults: Record<string, unknown>;
78
+ executionState: {
79
+ executionOrder: string[];
80
+ currentIndex: number;
81
+ inputs: Partial<FlowInputMap<TNodes>>;
82
+ };
83
+ }) => Effect.Effect<FlowExecutionResult<FlowOutputMap<TNodes>>, CoreUploadistaError, FlowRequirements<TNodes>>;
84
+ readonly [typedFlowInputsSymbol]?: FlowInputMap<TNodes>;
85
+ readonly [typedFlowOutputsSymbol]?: FlowOutputMap<TNodes>;
86
+ readonly [typedFlowPluginsSymbol]?: FlowPluginRequirements<TNodes>;
87
+ };
88
+ export declare function createFlow<TNodes extends NodeDefinitionsRecord>(config: TypedFlowConfig<TNodes>): Effect.Effect<TypedFlow<TNodes, z.ZodType<FlowInputUnion<TNodes>>, z.ZodType<FlowOutputUnion<TNodes>>>, NodesErrorUnion<TNodes> | UploadistaError, FlowRequirements<TNodes>>;
89
+ export {};
90
+ //# sourceMappingURL=typed-flow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typed-flow.d.ts","sourceRoot":"","sources":["../../src/flow/typed-flow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * biome-ignore-all lint/suspicious/noExplicitAny: broadly-typed generics require runtime schema placeholders
3
+ */
4
+ import { Effect } from "effect";
5
+ import { z } from "zod";
6
+ import { UploadistaError } from "../errors";
7
+ import { createFlowWithSchema } from "./flow";
8
+ import { NodeType } from "./node";
9
+ const buildUnionSchema = (schemas, fallback) => {
10
+ if (schemas.length === 0) {
11
+ return fallback;
12
+ }
13
+ const [first, ...rest] = schemas;
14
+ return rest.reduce((acc, schema) => z.union([acc, schema]), first);
15
+ };
16
+ export function createFlow(config) {
17
+ return Effect.gen(function* () {
18
+ const nodeEntries = Object.entries(config.nodes);
19
+ const resolveNode = (node) => Effect.isEffect(node)
20
+ ? node
21
+ : Effect.succeed(node);
22
+ const resolvedEntries = yield* Effect.forEach(nodeEntries, ([key, node]) => Effect.flatMap(resolveNode(node), (resolvedNode) => {
23
+ if (resolvedNode.id !== key) {
24
+ return Effect.fail(UploadistaError.fromCode("FLOW_NODE_ERROR", {
25
+ cause: new Error(`Node key ${key} does not match node id ${resolvedNode.id}`),
26
+ }));
27
+ }
28
+ return Effect.succeed([key, resolvedNode]);
29
+ }));
30
+ const resolvedRecord = Object.fromEntries(resolvedEntries);
31
+ const resolvedNodes = resolvedEntries.map(([, node]) => node);
32
+ const inputSchemas = resolvedEntries
33
+ .filter(([, node]) => node.type === NodeType.input)
34
+ .map(([, node]) => node.inputSchema);
35
+ const outputSchemas = resolvedEntries
36
+ .filter(([, node]) => node.type === NodeType.output)
37
+ .map(([, node]) => node.outputSchema);
38
+ const inputSchema = config.inputSchema ?? buildUnionSchema(inputSchemas, z.unknown());
39
+ const outputSchema = config.outputSchema ?? buildUnionSchema(outputSchemas, z.unknown());
40
+ const flowEdges = config.edges.map((edge) => ({
41
+ source: resolvedRecord[edge.source]?.id ?? edge.source,
42
+ target: resolvedRecord[edge.target]?.id ?? edge.target,
43
+ sourcePort: edge.sourcePort,
44
+ targetPort: edge.targetPort,
45
+ }));
46
+ const flow = yield* createFlowWithSchema({
47
+ flowId: config.flowId,
48
+ name: config.name,
49
+ nodes: resolvedNodes,
50
+ edges: flowEdges,
51
+ inputSchema,
52
+ outputSchema,
53
+ typeChecker: config.typeChecker,
54
+ onEvent: config.onEvent,
55
+ parallelExecution: config.parallelExecution,
56
+ });
57
+ return flow;
58
+ });
59
+ }
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Conditional execution rules for flow nodes.
3
+ *
4
+ * Conditions allow nodes to execute conditionally based on file properties or metadata.
5
+ * They are evaluated before node execution and can skip nodes that don't match.
6
+ *
7
+ * @module flow/types/flow-file
8
+ * @see {@link FlowNode} for how conditions are used in nodes
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * // Only process images larger than 1MB
13
+ * const condition: FlowCondition = {
14
+ * field: "size",
15
+ * operator: "greaterThan",
16
+ * value: 1024 * 1024
17
+ * };
18
+ *
19
+ * // Only process JPEG images
20
+ * const jpegCondition: FlowCondition = {
21
+ * field: "mimeType",
22
+ * operator: "startsWith",
23
+ * value: "image/jpeg"
24
+ * };
25
+ * ```
26
+ */
27
+ /**
28
+ * Represents a conditional rule for node execution.
29
+ *
30
+ * @property field - The file property to check
31
+ * @property operator - The comparison operator to apply
32
+ * @property value - The value to compare against
33
+ *
34
+ * @remarks
35
+ * - Fields can check file metadata (mimeType, size) or image properties (width, height)
36
+ * - String operators (contains, startsWith) work with string values
37
+ * - Numeric operators (greaterThan, lessThan) work with numeric values
38
+ * - The extension field checks the file extension without the dot
39
+ */
40
+ export type FlowCondition = {
41
+ field: "mimeType" | "size" | "width" | "height" | "extension";
42
+ operator: "equals" | "notEquals" | "greaterThan" | "lessThan" | "contains" | "startsWith";
43
+ value: string | number;
44
+ };
45
+ //# sourceMappingURL=flow-file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flow-file.d.ts","sourceRoot":"","sources":["../../../src/flow/types/flow-file.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,UAAU,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,WAAW,CAAC;IAC9D,QAAQ,EACJ,QAAQ,GACR,WAAW,GACX,aAAa,GACb,UAAU,GACV,UAAU,GACV,YAAY,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;CACxB,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Conditional execution rules for flow nodes.
3
+ *
4
+ * Conditions allow nodes to execute conditionally based on file properties or metadata.
5
+ * They are evaluated before node execution and can skip nodes that don't match.
6
+ *
7
+ * @module flow/types/flow-file
8
+ * @see {@link FlowNode} for how conditions are used in nodes
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * // Only process images larger than 1MB
13
+ * const condition: FlowCondition = {
14
+ * field: "size",
15
+ * operator: "greaterThan",
16
+ * value: 1024 * 1024
17
+ * };
18
+ *
19
+ * // Only process JPEG images
20
+ * const jpegCondition: FlowCondition = {
21
+ * field: "mimeType",
22
+ * operator: "startsWith",
23
+ * value: "image/jpeg"
24
+ * };
25
+ * ```
26
+ */
27
+ export {};
@@ -0,0 +1,118 @@
1
+ /**
2
+ * Flow job tracking and state management types.
3
+ *
4
+ * A FlowJob represents a single execution instance of a flow, tracking its progress,
5
+ * node results, and execution state. Jobs can be paused and resumed, making them
6
+ * suitable for long-running or interactive flows.
7
+ *
8
+ * @module flow/types/flow-job
9
+ * @see {@link FlowServer} for job management operations
10
+ */
11
+ /**
12
+ * Status of an individual node within a flow job.
13
+ *
14
+ * Node tasks follow this lifecycle:
15
+ * started → pending → running → (completed | paused | failed)
16
+ */
17
+ export type FlowJobTaskStatus = "started" | "pending" | "running" | "completed" | "paused" | "failed";
18
+ /**
19
+ * Represents a single node's execution within a flow job.
20
+ *
21
+ * Tasks track individual node execution, storing results, errors, and retry information.
22
+ * They allow monitoring of which nodes have completed and accessing intermediate results.
23
+ *
24
+ * @property nodeId - Unique identifier of the node this task represents
25
+ * @property status - Current execution status of the node
26
+ * @property result - Output data from the node (if completed successfully)
27
+ * @property error - Error message if the node failed
28
+ * @property retryCount - Number of retry attempts made before success or final failure
29
+ * @property createdAt - When the task was created
30
+ * @property updatedAt - When the task was last updated
31
+ */
32
+ export type FlowJobTask = {
33
+ nodeId: string;
34
+ status: FlowJobTaskStatus;
35
+ result?: unknown;
36
+ error?: string;
37
+ retryCount?: number;
38
+ createdAt: Date;
39
+ updatedAt: Date;
40
+ };
41
+ /**
42
+ * Represents a flow execution job with full state tracking.
43
+ *
44
+ * Jobs are created when a flow is executed and track the entire execution lifecycle.
45
+ * They store node results, handle paused states, and manage cleanup of intermediate files.
46
+ *
47
+ * @property id - Unique job identifier (UUID)
48
+ * @property flowId - The flow being executed
49
+ * @property storageId - Storage location for file outputs
50
+ * @property clientId - Client that initiated the job (for authorization)
51
+ * @property status - Overall job status
52
+ * @property createdAt - When the job was created
53
+ * @property updatedAt - When the job was last updated
54
+ * @property tasks - Array of node execution tasks
55
+ * @property error - Error message if the job failed
56
+ * @property endedAt - When the job completed or failed
57
+ * @property result - Final output from the flow (only set when completed)
58
+ * @property pausedAt - Node ID where execution is paused (if applicable)
59
+ * @property executionState - State needed to resume a paused flow
60
+ * @property intermediateFiles - File IDs to cleanup after completion
61
+ *
62
+ * @remarks
63
+ * - Jobs can be paused at nodes that return `{ type: "waiting" }`
64
+ * - Paused jobs store execution state and can be resumed with new data
65
+ * - Intermediate files from non-output nodes are automatically cleaned up
66
+ * - Tasks are updated as nodes progress through their lifecycle
67
+ *
68
+ * @example
69
+ * ```typescript
70
+ * // Create and monitor a job
71
+ * const job = yield* flowServer.runFlow({
72
+ * flowId: "image-pipeline",
73
+ * storageId: "storage-1",
74
+ * inputs: { input: myFile }
75
+ * });
76
+ *
77
+ * // Poll for status
78
+ * const status = yield* flowServer.getJobStatus(job.id);
79
+ * if (status.status === "completed") {
80
+ * console.log("Final result:", status.result);
81
+ * } else if (status.status === "paused") {
82
+ * // Resume with additional data
83
+ * yield* flowServer.continueFlow({
84
+ * jobId: job.id,
85
+ * nodeId: status.pausedAt,
86
+ * newData: additionalChunk
87
+ * });
88
+ * }
89
+ * ```
90
+ */
91
+ export type FlowJob = {
92
+ id: string;
93
+ flowId: string;
94
+ storageId: string;
95
+ clientId: string | null;
96
+ status: FlowJobStatus;
97
+ createdAt: Date;
98
+ updatedAt: Date;
99
+ tasks: FlowJobTask[];
100
+ error?: string;
101
+ endedAt?: Date;
102
+ result?: unknown;
103
+ pausedAt?: string;
104
+ executionState?: {
105
+ executionOrder: string[];
106
+ currentIndex: number;
107
+ inputs: Record<string, unknown>;
108
+ };
109
+ intermediateFiles?: string[];
110
+ };
111
+ /**
112
+ * Overall status of a flow job.
113
+ *
114
+ * Job lifecycle: started → running → (completed | failed)
115
+ * Or with pauses: started → running → paused → running → (completed | failed)
116
+ */
117
+ export type FlowJobStatus = "pending" | "running" | "completed" | "failed" | "started" | "paused";
118
+ //# sourceMappingURL=flow-job.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flow-job.d.ts","sourceRoot":"","sources":["../../../src/flow/types/flow-job.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GACzB,SAAS,GACT,SAAS,GACT,SAAS,GACT,WAAW,GACX,QAAQ,GACR,QAAQ,CAAC;AAEb;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,iBAAiB,CAAC;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,MAAM,MAAM,OAAO,GAAG;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,IAAI,CAAC;IAEf,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE;QACf,cAAc,EAAE,MAAM,EAAE,CAAC;QACzB,YAAY,EAAE,MAAM,CAAC;QACrB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACjC,CAAC;IAEF,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GACrB,SAAS,GACT,SAAS,GACT,WAAW,GACX,QAAQ,GACR,SAAS,GACT,QAAQ,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Flow job tracking and state management types.
3
+ *
4
+ * A FlowJob represents a single execution instance of a flow, tracking its progress,
5
+ * node results, and execution state. Jobs can be paused and resumed, making them
6
+ * suitable for long-running or interactive flows.
7
+ *
8
+ * @module flow/types/flow-job
9
+ * @see {@link FlowServer} for job management operations
10
+ */
11
+ export {};