@lostgradient/weft 0.2.1 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (579) hide show
  1. package/README.md +123 -43
  2. package/dist/cli/conformance.js +7 -1
  3. package/dist/cli/generated/operation-client.generated.d.ts +55 -13
  4. package/dist/cli/generated/operation-client.generated.js +3 -0
  5. package/dist/cli/help-text.d.ts +1 -1
  6. package/dist/cli/help-text.js +1 -0
  7. package/dist/cli/operation-catalog-snapshot.d.ts +8 -0
  8. package/dist/cli/operation-catalog-snapshot.js +11 -0
  9. package/dist/cli/parse-schedule-arguments.js +3 -1
  10. package/dist/cli/schedule.js +2 -1
  11. package/dist/cli/types.d.ts +1 -0
  12. package/dist/cli-main.js +80 -79
  13. package/dist/client/handle-delegation.d.ts +7 -2
  14. package/dist/client/handle-delegation.js +9 -1
  15. package/dist/client/http-client-requests.d.ts +4 -1
  16. package/dist/client/http-client-requests.js +10 -0
  17. package/dist/client/http-client.d.ts +10 -4
  18. package/dist/client/http-client.js +18 -1
  19. package/dist/client/http-request.d.ts +11 -1
  20. package/dist/client/http-request.js +17 -7
  21. package/dist/client/index.d.ts +1 -1
  22. package/dist/client/interface.d.ts +100 -4
  23. package/dist/client/local.d.ts +7 -1
  24. package/dist/client/local.js +17 -2
  25. package/dist/client/start-body.d.ts +9 -2
  26. package/dist/client/start-body.js +13 -4
  27. package/dist/core/byte-arrays.d.ts +5 -0
  28. package/dist/core/byte-arrays.js +5 -0
  29. package/dist/core/checkpoint/lifecycle.d.ts +3 -0
  30. package/dist/core/checkpoint/lifecycle.js +9 -4
  31. package/dist/core/checkpoint/serialization.js +12 -5
  32. package/dist/core/codec/extension-codec.d.ts +16 -0
  33. package/dist/core/codec/extension-codec.js +104 -8
  34. package/dist/core/codec/index.d.ts +1 -0
  35. package/dist/core/codec/index.js +1 -0
  36. package/dist/core/codec/serializer-registry.d.ts +122 -0
  37. package/dist/core/codec/serializer-registry.js +51 -0
  38. package/dist/core/context/activity-retry-state.d.ts +38 -0
  39. package/dist/core/context/activity-retry-state.js +89 -0
  40. package/dist/core/context/activity-schedule-to-close.d.ts +159 -0
  41. package/dist/core/context/activity-schedule-to-close.js +69 -0
  42. package/dist/core/context/child-workflow-pipe.d.ts +5 -5
  43. package/dist/core/context/child-workflow-pipe.js +15 -2
  44. package/dist/core/context/context-presence.d.ts +19 -0
  45. package/dist/core/context/context-presence.js +13 -0
  46. package/dist/core/context/durable-operations.d.ts +25 -0
  47. package/dist/core/context/durable-operations.js +64 -0
  48. package/dist/core/context/index.d.ts +18 -5
  49. package/dist/core/context/index.js +17 -12
  50. package/dist/core/context/internals.d.ts +29 -0
  51. package/dist/core/context/internals.js +6 -1
  52. package/dist/core/context/operation-request.d.ts +35 -0
  53. package/dist/core/context/parallel-cache-entry.d.ts +14 -5
  54. package/dist/core/context/run-operation.d.ts +21 -3
  55. package/dist/core/context/run-operation.js +56 -93
  56. package/dist/core/context/session-state.js +7 -8
  57. package/dist/core/context/speculative-child.js +2 -0
  58. package/dist/core/context/types.d.ts +15 -0
  59. package/dist/core/context/version-patching.d.ts +8 -0
  60. package/dist/core/context/version-patching.js +40 -0
  61. package/dist/core/context/workflow-logger.d.ts +98 -0
  62. package/dist/core/context/workflow-logger.js +68 -0
  63. package/dist/core/engine/activity-heartbeat-tracking.d.ts +64 -0
  64. package/dist/core/engine/activity-heartbeat-tracking.js +42 -0
  65. package/dist/core/engine/activity-per-attempt-timeout.d.ts +41 -0
  66. package/dist/core/engine/activity-per-attempt-timeout.js +36 -0
  67. package/dist/core/engine/activity-reconciliation.d.ts +1 -0
  68. package/dist/core/engine/activity-reconciliation.js +12 -1
  69. package/dist/core/engine/activity-resolution.d.ts +23 -0
  70. package/dist/core/engine/activity-resolution.js +37 -0
  71. package/dist/core/engine/aggregate.js +66 -30
  72. package/dist/core/engine/async-activity-completion.d.ts +23 -6
  73. package/dist/core/engine/async-activity-completion.js +53 -12
  74. package/dist/core/engine/attributes-tags.js +9 -4
  75. package/dist/core/engine/bulk-operations-purge.d.ts +26 -0
  76. package/dist/core/engine/bulk-operations-purge.js +38 -3
  77. package/dist/core/engine/bulk-operations-shared.d.ts +2 -0
  78. package/dist/core/engine/bulk-operations-shared.js +8 -2
  79. package/dist/core/engine/bulk-operations.d.ts +4 -1
  80. package/dist/core/engine/bulk-operations.js +235 -24
  81. package/dist/core/engine/callback-creators-bundles.d.ts +9 -0
  82. package/dist/core/engine/callback-creators-bundles.js +30 -2
  83. package/dist/core/engine/callback-creators-core.js +6 -4
  84. package/dist/core/engine/callback-creators-router.js +10 -0
  85. package/dist/core/engine/callback-creators-schedule.d.ts +2 -2
  86. package/dist/core/engine/callback-creators-schedule.js +12 -8
  87. package/dist/core/engine/candidate-read-batching.d.ts +6 -0
  88. package/dist/core/engine/candidate-read-batching.js +1 -0
  89. package/dist/core/engine/checkpoint-io.js +61 -25
  90. package/dist/core/engine/checkpoint-reads.js +3 -2
  91. package/dist/core/engine/checkpoint-replay.d.ts +20 -0
  92. package/dist/core/engine/checkpoint-replay.js +242 -0
  93. package/dist/core/engine/checkpoint-side-effects.d.ts +23 -0
  94. package/dist/core/engine/checkpoint-side-effects.js +35 -0
  95. package/dist/core/engine/child-workflow-cancellation.d.ts +10 -0
  96. package/dist/core/engine/child-workflow-cancellation.js +40 -0
  97. package/dist/core/engine/child-workflow.js +27 -4
  98. package/dist/core/engine/condition-waiters.d.ts +14 -0
  99. package/dist/core/engine/condition-waiters.js +5 -0
  100. package/dist/core/engine/construction.d.ts +3 -1
  101. package/dist/core/engine/construction.js +30 -8
  102. package/dist/core/engine/coordination-branch-executors.d.ts +70 -0
  103. package/dist/core/engine/coordination-branch-executors.js +107 -0
  104. package/dist/core/engine/deferred-consume-envelope.d.ts +59 -0
  105. package/dist/core/engine/deferred-consume-envelope.js +14 -0
  106. package/dist/core/engine/disposal.js +25 -0
  107. package/dist/core/engine/engine-create-types.d.ts +14 -18
  108. package/dist/core/engine/engine-internal-types.d.ts +38 -3
  109. package/dist/core/engine/engine-leak-warnings.d.ts +6 -0
  110. package/dist/core/engine/engine-leak-warnings.js +4 -0
  111. package/dist/core/engine/engine-runtime-helpers.d.ts +17 -0
  112. package/dist/core/engine/engine-runtime-helpers.js +26 -5
  113. package/dist/core/engine/errors.d.ts +121 -0
  114. package/dist/core/engine/errors.js +45 -1
  115. package/dist/core/engine/event-log-compaction.d.ts +8 -0
  116. package/dist/core/engine/event-log-compaction.js +20 -2
  117. package/dist/core/engine/fenced-write.d.ts +65 -0
  118. package/dist/core/engine/fenced-write.js +71 -0
  119. package/dist/core/engine/finalizer-state.d.ts +28 -0
  120. package/dist/core/engine/finalizer-state.js +16 -0
  121. package/dist/core/engine/handle-result.js +1 -1
  122. package/dist/core/engine/handles.d.ts +97 -40
  123. package/dist/core/engine/handles.js +25 -27
  124. package/dist/core/engine/index.d.ts +125 -15
  125. package/dist/core/engine/index.js +207 -11
  126. package/dist/core/engine/inline-launch-queue.d.ts +14 -0
  127. package/dist/core/engine/inline-launch-queue.js +32 -7
  128. package/dist/core/engine/inline-parking.js +3 -2
  129. package/dist/core/engine/internals.d.ts +125 -13
  130. package/dist/core/engine/lease-codec.d.ts +35 -0
  131. package/dist/core/engine/lease-codec.js +32 -0
  132. package/dist/core/engine/lease-deposition.d.ts +66 -0
  133. package/dist/core/engine/lease-deposition.js +10 -0
  134. package/dist/core/engine/lease-errors.d.ts +99 -0
  135. package/dist/core/engine/lease-errors.js +30 -0
  136. package/dist/core/engine/lease-manager.d.ts +114 -0
  137. package/dist/core/engine/lease-manager.js +135 -0
  138. package/dist/core/engine/lifecycle/fork-helpers.js +1 -7
  139. package/dist/core/engine/lifecycle/persist.js +15 -52
  140. package/dist/core/engine/lifecycle/recovered-services.d.ts +8 -6
  141. package/dist/core/engine/lifecycle/recovered-services.js +18 -3
  142. package/dist/core/engine/lifecycle/resume.js +39 -11
  143. package/dist/core/engine/lifecycle/shared.d.ts +8 -1
  144. package/dist/core/engine/lifecycle/start-batch.d.ts +1 -1
  145. package/dist/core/engine/lifecycle/start-batch.js +2 -1
  146. package/dist/core/engine/lifecycle/start-commit.d.ts +56 -0
  147. package/dist/core/engine/lifecycle/start-commit.js +69 -0
  148. package/dist/core/engine/lifecycle/start-exec.d.ts +30 -2
  149. package/dist/core/engine/lifecycle/start-exec.js +38 -0
  150. package/dist/core/engine/lifecycle/start-or-signal-create.d.ts +58 -0
  151. package/dist/core/engine/lifecycle/start-or-signal-create.js +95 -0
  152. package/dist/core/engine/lifecycle/start-or-signal-resolution.d.ts +79 -0
  153. package/dist/core/engine/lifecycle/start-or-signal-resolution.js +60 -0
  154. package/dist/core/engine/lifecycle/start-or-signal.d.ts +46 -0
  155. package/dist/core/engine/lifecycle/start-or-signal.js +71 -0
  156. package/dist/core/engine/lifecycle/start-terminal-conflict-purge.d.ts +39 -0
  157. package/dist/core/engine/lifecycle/start-terminal-conflict-purge.js +28 -0
  158. package/dist/core/engine/lifecycle/start.d.ts +6 -6
  159. package/dist/core/engine/lifecycle/start.js +47 -45
  160. package/dist/core/engine/lifecycle/transition.js +17 -5
  161. package/dist/core/engine/lifecycle.d.ts +3 -2
  162. package/dist/core/engine/lifecycle.js +9 -2
  163. package/dist/core/engine/list-candidate-resolution.js +2 -2
  164. package/dist/core/engine/listing.js +10 -6
  165. package/dist/core/engine/operations-activity.d.ts +4 -11
  166. package/dist/core/engine/operations-activity.js +22 -49
  167. package/dist/core/engine/operations-coordination.d.ts +10 -0
  168. package/dist/core/engine/operations-coordination.js +43 -8
  169. package/dist/core/engine/operations-router.d.ts +6 -0
  170. package/dist/core/engine/operations-router.js +2 -0
  171. package/dist/core/engine/operations-speculate.js +6 -2
  172. package/dist/core/engine/operations-stream.js +12 -2
  173. package/dist/core/engine/operations-time.d.ts +4 -2
  174. package/dist/core/engine/operations-time.js +14 -2
  175. package/dist/core/engine/operations-wait-condition.d.ts +23 -0
  176. package/dist/core/engine/operations-wait-condition.js +62 -0
  177. package/dist/core/engine/ownership-options.d.ts +23 -0
  178. package/dist/core/engine/ownership-options.js +26 -0
  179. package/dist/core/engine/payload-size-policy.d.ts +3 -0
  180. package/dist/core/engine/payload-size-policy.js +4 -0
  181. package/dist/core/engine/pending-updates.d.ts +17 -0
  182. package/dist/core/engine/pending-updates.js +33 -11
  183. package/dist/core/engine/persisted-data-version.d.ts +5 -9
  184. package/dist/core/engine/persisted-data-version.js +4 -5
  185. package/dist/core/engine/queries.js +1 -1
  186. package/dist/core/engine/registration.d.ts +1 -0
  187. package/dist/core/engine/registration.js +18 -3
  188. package/dist/core/engine/schedule-handle.d.ts +45 -0
  189. package/dist/core/engine/schedule-handle.js +26 -0
  190. package/dist/core/engine/schedule-jitter.d.ts +5 -0
  191. package/dist/core/engine/schedule-jitter.js +10 -0
  192. package/dist/core/engine/schedule-run.d.ts +17 -0
  193. package/dist/core/engine/schedule-run.js +38 -0
  194. package/dist/core/engine/schedule-timer.js +81 -17
  195. package/dist/core/engine/schedules.d.ts +8 -5
  196. package/dist/core/engine/schedules.js +44 -19
  197. package/dist/core/engine/search-attribute-records.d.ts +4 -0
  198. package/dist/core/engine/search-attribute-records.js +17 -0
  199. package/dist/core/engine/second-instance-detector.d.ts +96 -0
  200. package/dist/core/engine/second-instance-detector.js +108 -0
  201. package/dist/core/engine/signals.d.ts +38 -0
  202. package/dist/core/engine/signals.js +55 -19
  203. package/dist/core/engine/state-utilities.d.ts +49 -2
  204. package/dist/core/engine/state-utilities.js +114 -3
  205. package/dist/core/engine/storage-io.d.ts +16 -2
  206. package/dist/core/engine/storage-io.js +26 -5
  207. package/dist/core/engine/stream-chunk-loading.d.ts +2 -0
  208. package/dist/core/engine/stream-chunk-loading.js +24 -1
  209. package/dist/core/engine/sub-operation.js +22 -3
  210. package/dist/core/engine/termination/cleanup.d.ts +28 -1
  211. package/dist/core/engine/termination/cleanup.js +44 -2
  212. package/dist/core/engine/termination/complete.js +48 -9
  213. package/dist/core/engine/termination/finalizer-activity.d.ts +53 -0
  214. package/dist/core/engine/termination/finalizer-activity.js +30 -0
  215. package/dist/core/engine/termination/finalizer-claim.d.ts +110 -0
  216. package/dist/core/engine/termination/finalizer-claim.js +80 -0
  217. package/dist/core/engine/termination/finalizer.d.ts +48 -0
  218. package/dist/core/engine/termination/finalizer.js +159 -0
  219. package/dist/core/engine/termination/suspend.d.ts +70 -0
  220. package/dist/core/engine/termination/suspend.js +41 -0
  221. package/dist/core/engine/termination.d.ts +5 -2
  222. package/dist/core/engine/termination.js +6 -0
  223. package/dist/core/engine/updates.js +5 -25
  224. package/dist/core/engine/validation/schedule.d.ts +2 -1
  225. package/dist/core/engine/validation/schedule.js +51 -2
  226. package/dist/core/engine/validation.js +54 -3
  227. package/dist/core/engine/waiting-update-response.d.ts +8 -0
  228. package/dist/core/engine/waiting-update-response.js +22 -0
  229. package/dist/core/engine/workflow-concurrency.d.ts +10 -0
  230. package/dist/core/engine/workflow-concurrency.js +136 -0
  231. package/dist/core/engine/workflow-feed.d.ts +9 -8
  232. package/dist/core/engine/workflow-feed.js +4 -1
  233. package/dist/core/engine/workflow-indexes.d.ts +9 -0
  234. package/dist/core/engine/workflow-indexes.js +10 -0
  235. package/dist/core/engine/workflow-state-stream.js +33 -13
  236. package/dist/core/engine/workflow-visibility-queries.d.ts +2 -2
  237. package/dist/core/engine-helpers.js +1 -0
  238. package/dist/core/events/activity-events.d.ts +43 -12
  239. package/dist/core/events/activity-events.js +28 -0
  240. package/dist/core/events/attribute-events.d.ts +2 -3
  241. package/dist/core/events/event-map.d.ts +19 -12
  242. package/dist/core/events/index.d.ts +1 -0
  243. package/dist/core/events/index.js +1 -0
  244. package/dist/core/events/schedule-events.d.ts +71 -0
  245. package/dist/core/events/schedule-events.js +29 -0
  246. package/dist/core/events/signal-events.d.ts +4 -6
  247. package/dist/core/events/system-events.d.ts +29 -19
  248. package/dist/core/events/system-events.js +26 -0
  249. package/dist/core/events/update-events.d.ts +6 -8
  250. package/dist/core/events/workflow-events.d.ts +108 -20
  251. package/dist/core/events/workflow-events.js +35 -0
  252. package/dist/core/failure-categories.js +5 -17
  253. package/dist/core/fault-code.d.ts +9 -3
  254. package/dist/core/fault-code.js +1 -0
  255. package/dist/core/inline-execution-strategy.context-options.d.ts +69 -0
  256. package/dist/core/inline-execution-strategy.context-options.js +56 -0
  257. package/dist/core/inline-execution-strategy.d.ts +31 -36
  258. package/dist/core/inline-execution-strategy.js +16 -27
  259. package/dist/core/list-filter-validation.d.ts +1 -1
  260. package/dist/core/list-filter-validation.js +2 -1
  261. package/dist/core/payload-size.d.ts +1 -1
  262. package/dist/core/persisted-data-incompatible-error.d.ts +9 -7
  263. package/dist/core/review/events.d.ts +6 -8
  264. package/dist/core/scheduler/scheduler-class.d.ts +10 -1
  265. package/dist/core/scheduler/scheduler-class.js +38 -11
  266. package/dist/core/scheduler/timer-batch.js +9 -1
  267. package/dist/core/scheduler/timer-sources.d.ts +1 -0
  268. package/dist/core/scheduler/timer-sources.js +11 -5
  269. package/dist/core/session-state.d.ts +0 -1
  270. package/dist/core/session-state.js +2 -2
  271. package/dist/core/start-workflow-validation.d.ts +56 -0
  272. package/dist/core/start-workflow-validation.js +30 -1
  273. package/dist/core/step-context.d.ts +10 -6
  274. package/dist/core/step-context.js +7 -15
  275. package/dist/core/types/activity-verification.d.ts +67 -0
  276. package/dist/core/types/activity-verification.js +0 -0
  277. package/dist/core/types/activity.d.ts +86 -64
  278. package/dist/core/types/bulk.d.ts +50 -9
  279. package/dist/core/types/checkpoint.d.ts +44 -8
  280. package/dist/core/types/identity.d.ts +8 -1
  281. package/dist/core/types/launch-metadata.d.ts +33 -0
  282. package/dist/core/types/launch-metadata.js +0 -0
  283. package/dist/core/types/list-options.d.ts +146 -0
  284. package/dist/core/types/list-options.js +0 -0
  285. package/dist/core/types/message-handles.d.ts +25 -0
  286. package/dist/core/types/options.d.ts +165 -215
  287. package/dist/core/types/reviews.d.ts +2 -1
  288. package/dist/core/types/schedules.d.ts +39 -3
  289. package/dist/core/types/services-resolution.d.ts +47 -0
  290. package/dist/core/types/services-resolution.js +0 -0
  291. package/dist/core/types/state.d.ts +11 -11
  292. package/dist/core/types/workflow-builder-runtime.d.ts +12 -3
  293. package/dist/core/types/workflow-builder-runtime.js +11 -2
  294. package/dist/core/types/workflow-builder.d.ts +47 -15
  295. package/dist/core/types/workflow-concurrency.d.ts +39 -0
  296. package/dist/core/types/workflow-concurrency.js +0 -0
  297. package/dist/core/types/workflow-context.d.ts +157 -14
  298. package/dist/core/types/workflow-definition.d.ts +53 -10
  299. package/dist/core/types/workflow-function.d.ts +101 -9
  300. package/dist/core/types/workflow-log.d.ts +98 -0
  301. package/dist/core/types/workflow-log.js +0 -0
  302. package/dist/core/types/workflow-registries.d.ts +14 -3
  303. package/dist/core/types/workflow-registry.d.ts +3 -0
  304. package/dist/core/types/workflow-snapshot.d.ts +29 -0
  305. package/dist/core/types/workflow-snapshot.js +0 -0
  306. package/dist/core/types.d.ts +7 -0
  307. package/dist/core/types.js +7 -0
  308. package/dist/core/versioning.d.ts +9 -39
  309. package/dist/core/versioning.js +2 -12
  310. package/dist/core/weft-error.d.ts +44 -1
  311. package/dist/core/weft-error.js +19 -1
  312. package/dist/core/worker-execution-strategy-options.d.ts +26 -0
  313. package/dist/core/worker-execution-strategy.js +40 -36
  314. package/dist/core/worker-inbound-message.d.ts +38 -0
  315. package/dist/core/worker-inbound-message.js +37 -0
  316. package/dist/core/worker-log-abuse-counter.d.ts +175 -0
  317. package/dist/core/worker-log-abuse-counter.js +107 -0
  318. package/dist/core/worker-message-helpers.d.ts +47 -0
  319. package/dist/core/worker-message-helpers.js +26 -0
  320. package/dist/core/worker-protocol-guard.js +1 -1
  321. package/dist/core/worker-protocol-log.d.ts +56 -0
  322. package/dist/core/worker-protocol-log.js +18 -0
  323. package/dist/core/worker-protocol.d.ts +23 -0
  324. package/dist/core/worker-protocol.js +12 -2
  325. package/dist/core/workflow-version-tuple.d.ts +3 -9
  326. package/dist/core/workflow-version-tuple.js +2 -3
  327. package/dist/diagnostics/doctor.js +6 -3
  328. package/dist/diagnostics/format.js +3 -8
  329. package/dist/diagnostics/types.d.ts +5 -5
  330. package/dist/diagnostics/validate.d.ts +0 -1
  331. package/dist/diagnostics/version-check.d.ts +1 -1
  332. package/dist/diagnostics/version-check.js +10 -13
  333. package/dist/index.d.ts +13 -11
  334. package/dist/index.js +39 -4
  335. package/dist/json-schema.js +3 -3
  336. package/dist/mcp/cli.js +35 -35
  337. package/dist/mcp/dispatcher.js +1 -1
  338. package/dist/mcp/http.js +16 -6
  339. package/dist/mcp/list-filter.js +2 -1
  340. package/dist/mcp/protocol.d.ts +2 -0
  341. package/dist/mcp/protocol.js +1 -1
  342. package/dist/mcp/session.d.ts +16 -0
  343. package/dist/mcp/session.js +60 -6
  344. package/dist/mcp/tools.js +73 -6
  345. package/dist/observability/index.js +2 -2
  346. package/dist/server/asyncapi-channels.js +5 -2
  347. package/dist/server/attribute-filters.d.ts +8 -3
  348. package/dist/server/attribute-filters.js +6 -1
  349. package/dist/server/authentication/api-key.d.ts +2 -1
  350. package/dist/server/authentication/api-key.js +5 -2
  351. package/dist/server/authentication/constant-time-api-key.d.ts +15 -0
  352. package/dist/server/authentication/constant-time-api-key.js +24 -0
  353. package/dist/server/authentication/index.d.ts +1 -1
  354. package/dist/server/authentication/index.js +7 -4
  355. package/dist/server/authentication/rotating-api-key-store.d.ts +5 -3
  356. package/dist/server/authentication/rotating-api-key-store.js +19 -11
  357. package/dist/server/engine-event-feed-backend.d.ts +4 -5
  358. package/dist/server/fault-to-http.js +8 -1
  359. package/dist/server/fault-to-json-rpc.js +1 -0
  360. package/dist/server/fleet-event-feed.d.ts +31 -0
  361. package/dist/server/fleet-event-feed.js +157 -0
  362. package/dist/server/handler/index.js +1 -1
  363. package/dist/server/handler/response-helpers.js +2 -1
  364. package/dist/server/handler/route-dispatch.d.ts +6 -3
  365. package/dist/server/handler/route-dispatch.js +2 -2
  366. package/dist/server/handler.js +31 -31
  367. package/dist/server/index.d.ts +32 -2
  368. package/dist/server/index.js +35 -35
  369. package/dist/server/interactive-operations.js +1 -0
  370. package/dist/server/json-rpc-transport-helpers.d.ts +1 -0
  371. package/dist/server/json-rpc-transport-helpers.js +2 -1
  372. package/dist/server/json-rpc-websocket-runtime.d.ts +11 -2
  373. package/dist/server/json-rpc-websocket-runtime.js +1 -0
  374. package/dist/server/json-rpc-websocket-subscriptions.d.ts +10 -0
  375. package/dist/server/json-rpc-websocket-subscriptions.js +29 -0
  376. package/dist/server/json-rpc-websocket-types.d.ts +22 -0
  377. package/dist/server/json-rpc-websocket-types.js +0 -0
  378. package/dist/server/json-rpc-websocket-validation.js +20 -4
  379. package/dist/server/json-rpc-websocket.d.ts +2 -43
  380. package/dist/server/json-rpc-websocket.js +57 -74
  381. package/dist/server/openapi.d.ts +2 -1
  382. package/dist/server/openapi.js +1 -3
  383. package/dist/server/openrpc-document-schema.d.ts +78 -0
  384. package/dist/server/openrpc-document-schema.js +27 -1
  385. package/dist/server/openrpc-errors.d.ts +3 -0
  386. package/dist/server/openrpc-errors.js +2 -1
  387. package/dist/server/openrpc.js +32 -0
  388. package/dist/server/operation-catalog/index.d.ts +1 -1
  389. package/dist/server/operation-catalog/pipeline-helpers.js +1 -0
  390. package/dist/server/operation-catalog/pipeline-stages.js +26 -12
  391. package/dist/server/operation-catalog/pipeline.js +8 -1
  392. package/dist/server/operation-catalog/registry.js +13 -0
  393. package/dist/server/operation-catalog/types.d.ts +20 -9
  394. package/dist/server/operation-fault.d.ts +10 -0
  395. package/dist/server/operation-fault.js +2 -0
  396. package/dist/server/operation-registry.d.ts +12 -11
  397. package/dist/server/operation-registry.js +12 -3
  398. package/dist/server/operations/aggregate-workflows.d.ts +15 -15
  399. package/dist/server/operations/async-activity.d.ts +2 -2
  400. package/dist/server/operations/async-activity.js +12 -7
  401. package/dist/server/operations/bulk-cancel-workflows.d.ts +1 -1
  402. package/dist/server/operations/bulk-cancel-workflows.js +2 -2
  403. package/dist/server/operations/bulk-delete-workflows.d.ts +1 -1
  404. package/dist/server/operations/bulk-delete-workflows.js +2 -2
  405. package/dist/server/operations/bulk-filter-helpers.d.ts +8 -6
  406. package/dist/server/operations/bulk-filter-helpers.js +54 -24
  407. package/dist/server/operations/bulk-mutate-workflow-tags.d.ts +11 -9
  408. package/dist/server/operations/bulk-mutate-workflow-tags.js +2 -2
  409. package/dist/server/operations/bulk-operation-helpers.d.ts +2 -2
  410. package/dist/server/operations/bulk-retry-failed-workflows.d.ts +7 -0
  411. package/dist/server/operations/bulk-retry-failed-workflows.js +64 -0
  412. package/dist/server/operations/bulk-signal-workflows.d.ts +11 -9
  413. package/dist/server/operations/bulk-signal-workflows.js +2 -2
  414. package/dist/server/operations/cancel-schedule.d.ts +1 -1
  415. package/dist/server/operations/create-schedule.d.ts +3 -1
  416. package/dist/server/operations/create-schedule.js +29 -11
  417. package/dist/server/operations/fleet-events-subscription.d.ts +54 -0
  418. package/dist/server/operations/fleet-events-subscription.js +99 -0
  419. package/dist/server/operations/fork-workflow.d.ts +1 -1
  420. package/dist/server/operations/fork-workflow.js +3 -2
  421. package/dist/server/operations/get-checkpoint-at.d.ts +1 -1
  422. package/dist/server/operations/get-registry.d.ts +1 -1
  423. package/dist/server/operations/get-retention-overview.d.ts +1 -1
  424. package/dist/server/operations/get-review.d.ts +1 -1
  425. package/dist/server/operations/get-schedule.d.ts +1 -1
  426. package/dist/server/operations/get-stream-chunks.d.ts +1 -1
  427. package/dist/server/operations/get-system-metrics.d.ts +2 -2
  428. package/dist/server/operations/get-task-diagnostics.d.ts +45 -6
  429. package/dist/server/operations/get-task-diagnostics.js +101 -7
  430. package/dist/server/operations/get-update-result.d.ts +1 -1
  431. package/dist/server/operations/get-workflow-attributes.d.ts +1 -1
  432. package/dist/server/operations/get-workflow-events.d.ts +1 -1
  433. package/dist/server/operations/get-workflow-result.d.ts +1 -1
  434. package/dist/server/operations/get-workflow-timeline.d.ts +1 -1
  435. package/dist/server/operations/get-workflow.d.ts +1 -1
  436. package/dist/server/operations/list-checkpoints.d.ts +1 -1
  437. package/dist/server/operations/list-reviews.d.ts +1 -1
  438. package/dist/server/operations/list-schedules.d.ts +1 -1
  439. package/dist/server/operations/list-task-queues.d.ts +2 -2
  440. package/dist/server/operations/list-workers.d.ts +2 -2
  441. package/dist/server/operations/list-workflows.d.ts +1 -1
  442. package/dist/server/operations/operation-helpers.d.ts +16 -1
  443. package/dist/server/operations/operation-helpers.js +15 -3
  444. package/dist/server/operations/pause-schedule.d.ts +1 -1
  445. package/dist/server/operations/purge-workflows.d.ts +5 -5
  446. package/dist/server/operations/purge-workflows.js +2 -2
  447. package/dist/server/operations/query-workflow.d.ts +1 -1
  448. package/dist/server/operations/query-workflow.js +3 -2
  449. package/dist/server/operations/recover-all.d.ts +1 -1
  450. package/dist/server/operations/replay-workflow.d.ts +1 -1
  451. package/dist/server/operations/resume-schedule.d.ts +1 -1
  452. package/dist/server/operations/resume-workflow.js +2 -2
  453. package/dist/server/operations/set-workflow-attributes.d.ts +1 -1
  454. package/dist/server/operations/set-workflow-attributes.js +6 -3
  455. package/dist/server/operations/signal-workflow.js +8 -3
  456. package/dist/server/operations/single-workflow-tag-mutation.js +13 -3
  457. package/dist/server/operations/start-or-signal-workflow.d.ts +44 -0
  458. package/dist/server/operations/start-or-signal-workflow.js +130 -0
  459. package/dist/server/operations/start-workflow-options.d.ts +38 -0
  460. package/dist/server/operations/start-workflow-options.js +63 -0
  461. package/dist/server/operations/start-workflow-rest-input.d.ts +14 -0
  462. package/dist/server/operations/start-workflow-rest-input.js +31 -0
  463. package/dist/server/operations/start-workflow.d.ts +1 -1
  464. package/dist/server/operations/start-workflow.js +15 -92
  465. package/dist/server/operations/storage.d.ts +6 -6
  466. package/dist/server/operations/storage.js +24 -14
  467. package/dist/server/operations/stream-workflow-sse.d.ts +1 -1
  468. package/dist/server/operations/submit-review-decision.d.ts +1 -1
  469. package/dist/server/operations/submit-review-decision.js +6 -3
  470. package/dist/server/operations/suspend-workflow.d.ts +13 -0
  471. package/dist/server/operations/suspend-workflow.js +36 -0
  472. package/dist/server/operations/update-schedule.d.ts +1 -1
  473. package/dist/server/operations/update-schedule.js +7 -4
  474. package/dist/server/operations/update-workflow.d.ts +1 -1
  475. package/dist/server/operations/update-workflow.js +7 -3
  476. package/dist/server/operations/worker-drain.d.ts +8 -8
  477. package/dist/server/operations/worker-drain.js +11 -8
  478. package/dist/server/operations/workflow-events-subscription.d.ts +7 -8
  479. package/dist/server/operations/workflow-events-subscription.js +43 -8
  480. package/dist/server/rest-binding.d.ts +21 -8
  481. package/dist/server/rest-bindings.js +24 -0
  482. package/dist/server/rest-body.d.ts +10 -0
  483. package/dist/server/rest-body.js +80 -0
  484. package/dist/server/runtime/authentication-bridge.d.ts +1 -0
  485. package/dist/server/runtime/authentication-bridge.js +33 -6
  486. package/dist/server/runtime/client-visible-events.d.ts +3 -0
  487. package/dist/server/runtime/client-visible-events.js +65 -0
  488. package/dist/server/runtime/context.d.ts +7 -0
  489. package/dist/server/runtime/event-broadcasting.d.ts +6 -0
  490. package/dist/server/runtime/event-broadcasting.js +72 -38
  491. package/dist/server/runtime/retry.d.ts +1 -0
  492. package/dist/server/runtime/retry.js +14 -0
  493. package/dist/server/runtime/shutdown.d.ts +7 -6
  494. package/dist/server/runtime/shutdown.js +6 -1
  495. package/dist/server/runtime/task-dispatch.js +5 -3
  496. package/dist/server/runtime/task-polling.d.ts +16 -2
  497. package/dist/server/runtime/task-polling.js +80 -24
  498. package/dist/server/runtime/task-reconciliation.js +9 -1
  499. package/dist/server/runtime/task-result-resolution.d.ts +15 -0
  500. package/dist/server/runtime/task-result-resolution.js +81 -0
  501. package/dist/server/runtime/websocket-stream.d.ts +20 -1
  502. package/dist/server/runtime/websocket-stream.js +173 -7
  503. package/dist/server/runtime/websocket-upgrade.js +22 -3
  504. package/dist/server/runtime/websocket-worker.d.ts +1 -1
  505. package/dist/server/runtime/websocket-worker.js +46 -30
  506. package/dist/server/serve-internals.d.ts +11 -1
  507. package/dist/server/serve-internals.js +20 -2
  508. package/dist/server/task-state.d.ts +38 -0
  509. package/dist/server/task-state.js +28 -0
  510. package/dist/server/workflow-event-feed.d.ts +36 -115
  511. package/dist/server/workflow-event-feed.js +92 -27
  512. package/dist/service-worker/index.js +31 -31
  513. package/dist/storage/auto.js +1 -1
  514. package/dist/storage/bun-sql.js +24 -0
  515. package/dist/storage/capabilities.d.ts +10 -2
  516. package/dist/storage/capabilities.js +2 -2
  517. package/dist/storage/compressed-storage.js +1 -1
  518. package/dist/storage/default-scope.d.ts +7 -4
  519. package/dist/storage/http.js +2 -2
  520. package/dist/storage/index.d.ts +81 -4
  521. package/dist/storage/indexeddb.js +1 -1
  522. package/dist/storage/interface.d.ts +189 -0
  523. package/dist/storage/interface.js +1 -1
  524. package/dist/storage/key-prefixes.d.ts +1 -1
  525. package/dist/storage/key-prefixes.js +12 -0
  526. package/dist/storage/lmdb.d.ts +4 -3
  527. package/dist/storage/lmdb.js +1 -1
  528. package/dist/storage/memory.js +1 -1
  529. package/dist/storage/neon-batch.d.ts +30 -0
  530. package/dist/storage/neon-batch.js +30 -0
  531. package/dist/storage/neon-value-mapping.d.ts +74 -0
  532. package/dist/storage/neon-value-mapping.js +23 -0
  533. package/dist/storage/neon.d.ts +124 -0
  534. package/dist/storage/neon.js +15 -0
  535. package/dist/storage/node-sqlite-loader.d.ts +71 -0
  536. package/dist/storage/node-sqlite-loader.js +41 -0
  537. package/dist/storage/node-sqlite.d.ts +1 -19
  538. package/dist/storage/node-sqlite.js +61 -32
  539. package/dist/storage/postgres-key-value-queries.d.ts +104 -0
  540. package/dist/storage/postgres-key-value-queries.js +101 -0
  541. package/dist/storage/resolve.d.ts +2 -165
  542. package/dist/storage/resolve.js +1 -1
  543. package/dist/storage/scoped-storage.js +1 -1
  544. package/dist/storage/storage-configuration.d.ts +209 -0
  545. package/dist/storage/storage-configuration.js +0 -0
  546. package/dist/storage/testing.d.ts +168 -0
  547. package/dist/storage/testing.js +2 -0
  548. package/dist/storage/text-value-store.d.ts +9 -9
  549. package/dist/storage/turso.d.ts +8 -0
  550. package/dist/storage/turso.js +2 -2
  551. package/dist/storage/typed-storage.js +1 -1
  552. package/dist/storage/web-extension.js +1 -1
  553. package/dist/testing/index.js +35 -35
  554. package/dist/version.d.ts +1 -1
  555. package/dist/version.js +1 -1
  556. package/dist/worker/index.js +9 -5
  557. package/dist/worker/long-poll.js +4 -0
  558. package/dist/worker/protocol-messages.d.ts +20 -0
  559. package/dist/worker/protocol-schemas.d.ts +32 -0
  560. package/dist/worker/protocol-schemas.js +8 -4
  561. package/dist/worker/protocol-task-result.d.ts +28 -0
  562. package/dist/worker/protocol-task-result.js +76 -0
  563. package/dist/worker/protocol.d.ts +4 -15
  564. package/dist/worker/protocol.js +1 -1
  565. package/dist/worker/registry/fair-share.d.ts +29 -0
  566. package/dist/worker/registry/fair-share.js +30 -0
  567. package/dist/worker/registry/routing.d.ts +18 -0
  568. package/dist/worker/registry/routing.js +14 -0
  569. package/dist/worker/registry/types.d.ts +7 -0
  570. package/dist/worker/registry.d.ts +16 -1
  571. package/dist/worker/registry.js +24 -36
  572. package/dist/workers/worker-replay-state.d.ts +32 -0
  573. package/dist/workers/worker-replay-state.js +35 -0
  574. package/dist/workers/worker-state-namespace.d.ts +21 -0
  575. package/dist/workers/worker-state-namespace.js +13 -0
  576. package/dist/workers/workflow-runner.d.ts +19 -15
  577. package/dist/workers/workflow-runner.js +72 -60
  578. package/dist/workers/workflow-worker-entry.js +5 -2
  579. package/package.json +21 -4
@@ -10,10 +10,10 @@ export declare const purgeWorkflowsOperation: import("../operation-catalog.ts").
10
10
  attributes?: {
11
11
  key: string;
12
12
  value?: import("../../index.ts").SearchAttributeValue | undefined;
13
- gt?: import("../../index.ts").SearchAttributeValue | undefined;
14
- lt?: import("../../index.ts").SearchAttributeValue | undefined;
15
- gte?: import("../../index.ts").SearchAttributeValue | undefined;
16
- lte?: import("../../index.ts").SearchAttributeValue | undefined;
13
+ gt?: import("../../core/types.ts").AttributeFilterScalarValue | undefined;
14
+ lt?: import("../../core/types.ts").AttributeFilterScalarValue | undefined;
15
+ gte?: import("../../core/types.ts").AttributeFilterScalarValue | undefined;
16
+ lte?: import("../../core/types.ts").AttributeFilterScalarValue | undefined;
17
17
  }[] | undefined;
18
18
  limit?: number | undefined;
19
19
  offset?: number | undefined;
@@ -37,5 +37,5 @@ export declare const purgeWorkflowsOperation: import("../operation-catalog.ts").
37
37
  lte?: number | undefined;
38
38
  lt?: number | undefined;
39
39
  } | undefined;
40
- }, PurgeResult>;
40
+ }, PurgeResult, unknown>;
41
41
  export declare const purgeWorkflowsRestBinding: UnknownRestBinding;
@@ -43,8 +43,8 @@ export const purgeWorkflowsOperation = defineOperation({
43
43
  pathParamNames: [],
44
44
  operationName: "weft.workflows.purge",
45
45
  inputSources: {},
46
- extractInput: async (request) => {
47
- const raw = await readOptionalJsonBody(request);
46
+ extractInput: async (request, _pathParams, context) => {
47
+ const raw = await readOptionalJsonBody(request, context);
48
48
  try {
49
49
  return { ...parseBulkListFilterFromBody(raw) };
50
50
  } catch (error) {
@@ -13,7 +13,7 @@ export declare const queryWorkflowOperation: import("../operation-catalog.ts").O
13
13
  workflowId: string;
14
14
  queryName: string;
15
15
  input?: unknown;
16
- }, QueryWorkflowOutput>;
16
+ }, QueryWorkflowOutput, unknown>;
17
17
  export declare const queryWorkflowRestBinding: UnknownRestBinding;
18
18
  export declare const queryWorkflowWithInputRestBinding: UnknownRestBinding;
19
19
  export {};
@@ -1,5 +1,6 @@
1
1
  import { z } from "zod";
2
2
  import { defineOperation } from "../operation-registry.js";
3
+ import { readRestTextBody } from "../rest-body.js";
3
4
  import { invalidParamsFault, shapeRestFault } from "./operation-helpers.js";
4
5
  const queryWorkflowInput = z.object({
5
6
  workflowId: z.string().min(1),
@@ -71,8 +72,8 @@ export const queryWorkflowRestBinding = {
71
72
  queryName: { kind: "path", pathParam: "name" },
72
73
  input: { kind: "body-field", bodyField: "input" }
73
74
  },
74
- extractInput: async (request, pathParams) => {
75
- const rawBody = await request.text();
75
+ extractInput: async (request, pathParams, context) => {
76
+ const rawBody = await readRestTextBody(request, context);
76
77
  if (rawBody.trim().length === 0)
77
78
  return {
78
79
  workflowId: pathParams.id ?? "",
@@ -8,6 +8,6 @@ export type RecoverAllInput = z.infer<typeof recoverAllInput>;
8
8
  export type RecoverAllOutput = z.infer<typeof recoverAllOutput>;
9
9
  export declare const recoverAllOperation: import("../operation-catalog.ts").OperationDefinition<Record<string, never>, {
10
10
  recovered: string[];
11
- }>;
11
+ }, unknown>;
12
12
  export declare const recoverAllRestBinding: UnknownRestBinding;
13
13
  export {};
@@ -23,6 +23,6 @@ export type ReplayWorkflowOutput = WorkflowReplay;
23
23
  export declare const replayWorkflowOperation: import("../operation-catalog.ts").OperationDefinition<{
24
24
  workflowId: string;
25
25
  step: string | number;
26
- }, WorkflowReplay>;
26
+ }, WorkflowReplay, unknown>;
27
27
  export declare const replayWorkflowRestBinding: UnknownRestBinding;
28
28
  export {};
@@ -8,6 +8,6 @@ export type ResumeScheduleInput = z.infer<typeof resumeScheduleInput>;
8
8
  export type ResumeScheduleOutput = z.infer<typeof resumeScheduleOutput>;
9
9
  export declare const resumeScheduleOperation: import("../operation-catalog.ts").OperationDefinition<{
10
10
  scheduleId: string;
11
- }, undefined>;
11
+ }, undefined, unknown>;
12
12
  export declare const resumeScheduleRestBinding: UnknownRestBinding;
13
13
  export {};
@@ -11,8 +11,8 @@ const resumeWorkflowInput = z.object({
11
11
  });
12
12
  export const resumeWorkflowOperation = createSingleWorkflowControlOperation({
13
13
  name: "weft.workflows.resume",
14
- summary: "Resume a suspended workflow",
15
- description: "Resume a workflow that is suspended (for example, paused awaiting a human review or an operator hold) by `workflowId`, returning the workflow `id`. Faults with NotFound when the workflow is not visible.",
14
+ summary: "Resume a suspended or recovered workflow",
15
+ description: "Re-drive a workflow from its persisted checkpoint by `workflowId`, returning the workflow `id`. Accepts a workflow that was explicitly suspended (`weft.workflows.suspend`) or one left running by a prior process; a suspended workflow is durably flipped back to running as part of resuming. Faults with NotFound when the workflow is not visible, or Conflict when it is in a status that cannot be resumed (terminal or pending).",
16
16
  destructive: !1,
17
17
  tags: ["Workflows"],
18
18
  inputSchema: resumeWorkflowInput,
@@ -14,6 +14,6 @@ export declare const setWorkflowAttributesOperation: import("../operation-catalo
14
14
  attributes?: unknown;
15
15
  }, {
16
16
  ok: true;
17
- }>;
17
+ }, unknown>;
18
18
  export declare const setWorkflowAttributesRestBinding: UnknownRestBinding;
19
19
  export {};
@@ -1,6 +1,7 @@
1
1
  import { z } from "zod";
2
2
  import { defineOperation } from "../operation-registry.js";
3
- import { shapeRestFault } from "./operation-helpers.js";
3
+ import { readRestJsonBody } from "../rest-body.js";
4
+ import { isOperationFault, shapeRestFault } from "./operation-helpers.js";
4
5
  const setWorkflowAttributesInput = z.object({
5
6
  workflowId: z.string().min(1),
6
7
  attributes: z.unknown().optional()
@@ -50,8 +51,10 @@ export const setWorkflowAttributesRestBinding = {
50
51
  workflowId: { kind: "path", pathParam: "id" },
51
52
  attributes: { kind: "body-field", bodyField: "attributes" }
52
53
  },
53
- extractInput: async (request, pathParams) => {
54
- const body = await request.json().catch(() => {
54
+ extractInput: async (request, pathParams, context) => {
55
+ const body = await readRestJsonBody(request, context).catch((error) => {
56
+ if (isOperationFault(error))
57
+ throw error;
55
58
  throw Error("Invalid JSON body");
56
59
  });
57
60
  if (body === null)
@@ -1,6 +1,7 @@
1
1
  import { z } from "zod";
2
2
  import { isSignalIdWithinByteLimit } from "../../core/signal-id.js";
3
- import { shapeRestFault } from "./operation-helpers.js";
3
+ import { readRestJsonBody } from "../rest-body.js";
4
+ import { isOperationFault, shapeRestFault } from "./operation-helpers.js";
4
5
  import {
5
6
  createSingleWorkflowControlOperation,
6
7
  extractWorkflowIdFromPath
@@ -43,8 +44,12 @@ export const signalWorkflowRestBinding = {
43
44
  signalName: { kind: "path", pathParam: "name" },
44
45
  payload: { kind: "body-field", bodyField: "payload" }
45
46
  },
46
- extractInput: async (request, pathParams) => {
47
- const body = await request.json().catch(() => null), payload = typeof body === "object" && body !== null ? body.payload : void 0, signalId = typeof body === "object" && body !== null ? body.signalId : void 0;
47
+ extractInput: async (request, pathParams, context) => {
48
+ const body = await readRestJsonBody(request, context).catch((error) => {
49
+ if (isOperationFault(error))
50
+ throw error;
51
+ return null;
52
+ }), payload = typeof body === "object" && body !== null ? body.payload : void 0, signalId = typeof body === "object" && body !== null ? body.signalId : void 0;
48
53
  return {
49
54
  ...extractWorkflowIdFromPath(pathParams),
50
55
  signalName: pathParams.name ?? "",
@@ -1,10 +1,12 @@
1
1
  import { z } from "zod";
2
+ import { WorkflowNotFoundError } from "../../core/engine/errors.js";
2
3
  import {
3
4
  coerceStartWorkflowTags,
4
5
  StartWorkflowValidationError
5
6
  } from "../../core/start-workflow-validation.js";
6
7
  import { defineOperation } from "../operation-registry.js";
7
- import { jsonErrorResponse, shapeRestFault } from "./operation-helpers.js";
8
+ import { readRestJsonBody } from "../rest-body.js";
9
+ import { isOperationFault, jsonErrorResponse, shapeRestFault } from "./operation-helpers.js";
8
10
  const singleWorkflowTagMutationInput = z.object({
9
11
  workflowId: z.string().min(1),
10
12
  tags: z.unknown().optional()
@@ -50,8 +52,10 @@ export function createSingleWorkflowTagMutationRestBinding(configuration) {
50
52
  workflowId: { kind: "path", pathParam: "id" },
51
53
  tags: { kind: "body-field", bodyField: "tags" }
52
54
  },
53
- extractInput: async (request, pathParams) => {
54
- const body = await request.json().catch(() => {
55
+ extractInput: async (request, pathParams, context) => {
56
+ const body = await readRestJsonBody(request, context).catch((error) => {
57
+ if (isOperationFault(error))
58
+ throw error;
55
59
  throw Error("Invalid JSON body");
56
60
  });
57
61
  if (!isJsonObject(body))
@@ -79,6 +83,12 @@ function shapeSingleWorkflowTagMutationFault(fault) {
79
83
  }
80
84
  function mapTagMutationErrorToFault(error, workflowId) {
81
85
  const message = faultMessage(error);
86
+ if (error instanceof WorkflowNotFoundError)
87
+ return {
88
+ code: "NotFound",
89
+ message,
90
+ data: { resource: "workflow", identifier: workflowId, weftCode: error.code }
91
+ };
82
92
  if (message.includes("not found"))
83
93
  return {
84
94
  code: "NotFound",
@@ -0,0 +1,44 @@
1
+ import { z } from 'zod';
2
+ import type { UnknownRestBinding } from '../rest-bindings.ts';
3
+ declare const startOrSignalWorkflowInput: z.ZodObject<{
4
+ type: z.ZodUnknown;
5
+ input: z.ZodOptional<z.ZodUnknown>;
6
+ signalName: z.ZodString;
7
+ signalPayload: z.ZodOptional<z.ZodUnknown>;
8
+ signalId: z.ZodOptional<z.ZodString>;
9
+ id: z.ZodOptional<z.ZodUnknown>;
10
+ executionTimeout: z.ZodOptional<z.ZodUnknown>;
11
+ startAt: z.ZodOptional<z.ZodUnknown>;
12
+ startAfter: z.ZodOptional<z.ZodUnknown>;
13
+ tags: z.ZodOptional<z.ZodUnknown>;
14
+ idempotencyKey: z.ZodOptional<z.ZodUnknown>;
15
+ searchAttributes: z.ZodOptional<z.ZodUnknown>;
16
+ }, z.core.$strip>;
17
+ declare const startOrSignalWorkflowOutput: z.ZodObject<{
18
+ id: z.ZodString;
19
+ outcome: z.ZodEnum<{
20
+ started: "started";
21
+ signalled: "signalled";
22
+ }>;
23
+ }, z.core.$strip>;
24
+ export type StartOrSignalWorkflowInput = z.infer<typeof startOrSignalWorkflowInput>;
25
+ export type StartOrSignalWorkflowOutput = z.infer<typeof startOrSignalWorkflowOutput>;
26
+ export declare const startOrSignalWorkflowOperation: import("../operation-catalog.ts").OperationDefinition<{
27
+ type: unknown;
28
+ signalName: string;
29
+ input?: unknown;
30
+ signalPayload?: unknown;
31
+ signalId?: string | undefined;
32
+ id?: unknown;
33
+ executionTimeout?: unknown;
34
+ startAt?: unknown;
35
+ startAfter?: unknown;
36
+ tags?: unknown;
37
+ idempotencyKey?: unknown;
38
+ searchAttributes?: unknown;
39
+ }, {
40
+ id: string;
41
+ outcome: "started" | "signalled";
42
+ }, unknown>;
43
+ export declare const startOrSignalWorkflowRestBinding: UnknownRestBinding;
44
+ export {};
@@ -0,0 +1,130 @@
1
+ import { z } from "zod";
2
+ import {
3
+ IdempotencyKeyPurgedError,
4
+ StartOrSignalConflictError,
5
+ WorkflowNotRegisteredError
6
+ } from "../../core/engine/errors.js";
7
+ import { runtimeWorkflowEngine } from "../../core/runtime-workflow-engine.js";
8
+ import { isSignalIdWithinByteLimit } from "../../core/signal-id.js";
9
+ import { StartWorkflowValidationError } from "../../core/start-workflow-validation.js";
10
+ import { defineOperation } from "../operation-registry.js";
11
+ import { invalidParamsFault, shapeRestFault } from "./operation-helpers.js";
12
+ import { buildSharedStartWorkflowOptions } from "./start-workflow-options.js";
13
+ import {
14
+ extractSharedStartWorkflowRestFields,
15
+ parseStartWorkflowRequestRecord
16
+ } from "./start-workflow-rest-input.js";
17
+ const startOrSignalWorkflowInput = z.object({
18
+ type: z.unknown().describe("Workflow type name. Runtime validation requires a non-empty string."),
19
+ input: z.unknown().optional(),
20
+ signalName: z.string().min(1).describe("Signal name. Must be a non-empty string."),
21
+ signalPayload: z.unknown().optional(),
22
+ signalId: z.string().min(1).refine(isSignalIdWithinByteLimit, "signalId must be at most 128 bytes").optional(),
23
+ id: z.unknown().optional(),
24
+ executionTimeout: z.unknown().optional(),
25
+ startAt: z.unknown().optional(),
26
+ startAfter: z.unknown().optional(),
27
+ tags: z.unknown().optional(),
28
+ idempotencyKey: z.unknown().optional(),
29
+ searchAttributes: z.unknown().optional()
30
+ }), startOrSignalWorkflowOutput = z.object({
31
+ id: z.string(),
32
+ outcome: z.enum(["started", "signalled"])
33
+ });
34
+ function validateStartOrSignalWorkflowInput(input, lookupSearchAttributeSchema) {
35
+ if (typeof input.type !== "string" || input.type.length === 0)
36
+ throw invalidParamsFault("Missing required field: type");
37
+ let options;
38
+ try {
39
+ options = buildSharedStartWorkflowOptions(input, lookupSearchAttributeSchema(input.type));
40
+ } catch (error) {
41
+ const message = error instanceof Error ? error.message : String(error);
42
+ throw invalidParamsFault(message);
43
+ }
44
+ assertConvergenceTokenProvided(input.signalId, options.idempotencyKey);
45
+ const signal = {
46
+ name: input.signalName,
47
+ payload: input.signalPayload,
48
+ ...input.signalId === void 0 ? {} : { signalId: input.signalId }
49
+ };
50
+ return { type: input.type, signal, options };
51
+ }
52
+ function assertConvergenceTokenProvided(signalId, idempotencyKey) {
53
+ if (signalId === void 0 && idempotencyKey === void 0)
54
+ throw invalidParamsFault("startOrSignal requires either signalId or idempotencyKey to identify the signal to deliver. (Concurrent callers converge on one workflow and one signal only with a shared idempotencyKey, or a shared id plus signalId; a bare signalId starts a fresh run per caller.)");
55
+ if (signalId !== void 0 && idempotencyKey !== void 0)
56
+ throw invalidParamsFault("startOrSignal does not accept both signalId and idempotencyKey: the signal id derives from the idempotency key for convergence. Provide exactly one.");
57
+ }
58
+ function resolveStartOrSignalWorkflowFault(error) {
59
+ const message = error instanceof Error ? error.message : String(error);
60
+ if (error instanceof WorkflowNotRegisteredError)
61
+ throw invalidParamsFault(message, error.code);
62
+ if (error instanceof StartOrSignalConflictError || error instanceof IdempotencyKeyPurgedError)
63
+ throw {
64
+ code: "Conflict",
65
+ message,
66
+ data: { reason: message, weftCode: error.code }
67
+ };
68
+ if (error instanceof StartWorkflowValidationError)
69
+ throw invalidParamsFault(message);
70
+ throw {
71
+ code: "EngineFailure",
72
+ message,
73
+ data: {}
74
+ };
75
+ }
76
+ export const startOrSignalWorkflowOperation = defineOperation({
77
+ name: "weft.workflows.startorsignal",
78
+ mcpExposable: !1,
79
+ summary: "Atomically start a workflow or signal it if it already exists",
80
+ description: 'Start a workflow or deliver a signal to it if it already exists (signal-with-start). An absent target is created and delivered the signal in one batch; a non-terminal target (running, pending, or suspended) is signalled; a terminal target faults with Conflict, as does a spent `idempotencyKey` whose run was purged or swept by retention. Requires `type`, `signalName`, and exactly one of `signalId` or `idempotencyKey` (not both). Accepts `input`, `signalPayload`, and the non-idempotency start options from weft.workflows.start (`id`, `executionTimeout`, `startAt`/`startAfter`, `tags`, `searchAttributes`); `idempotencyKey` is governed solely by the "exactly one of" rule above. Returns the workflow `id`. Concurrent callers converge on one workflow and one signal only with a shared `idempotencyKey`, or a shared `id` plus `signalId`; a bare `signalId` (no `id`/`idempotencyKey`) starts a fresh run per caller and does not converge.',
81
+ destructive: !1,
82
+ tags: ["Workflows", "Signals"],
83
+ inputSchema: startOrSignalWorkflowInput,
84
+ outputSchema: startOrSignalWorkflowOutput,
85
+ access: { kind: "public" },
86
+ producibleFaults: ["Conflict"],
87
+ transports: { http: !0, jsonRpcHttp: !0, jsonRpcWebSocket: !0, jsonRpcStdio: !0 },
88
+ unknownKeyPolicy: { http: "strip", jsonRpc: "reject" },
89
+ invoke: async ({ input, engine }) => {
90
+ const typedEngine = runtimeWorkflowEngine(engine), { type, signal, options } = validateStartOrSignalWorkflowInput(input, (validType) => {
91
+ return typedEngine.getWorkflowDefinition(validType)?.searchAttributes;
92
+ });
93
+ try {
94
+ const { handle, outcome } = await typedEngine.startOrSignal(type, input.input, signal, options);
95
+ return { id: handle.id, outcome };
96
+ } catch (error) {
97
+ resolveStartOrSignalWorkflowFault(error);
98
+ }
99
+ }
100
+ }), startOrSignalWorkflowRestBinding = {
101
+ method: "POST",
102
+ path: "/v1/workflows/start-or-signal",
103
+ pathParamNames: [],
104
+ operationName: "weft.workflows.startorsignal",
105
+ inputSources: {
106
+ type: { kind: "body-field", bodyField: "type" },
107
+ input: { kind: "body-field", bodyField: "input" },
108
+ signalName: { kind: "body-field", bodyField: "signalName" },
109
+ signalPayload: { kind: "body-field", bodyField: "signalPayload" },
110
+ signalId: { kind: "body-field", bodyField: "signalId" },
111
+ id: { kind: "body-field", bodyField: "id" },
112
+ executionTimeout: { kind: "body-field", bodyField: "executionTimeout" },
113
+ startAt: { kind: "body-field", bodyField: "startAt" },
114
+ startAfter: { kind: "body-field", bodyField: "startAfter" },
115
+ tags: { kind: "body-field", bodyField: "tags" },
116
+ idempotencyKey: { kind: "body-field", bodyField: "idempotencyKey" },
117
+ searchAttributes: { kind: "body-field", bodyField: "searchAttributes" }
118
+ },
119
+ extractInput: async (request, _pathParams, context) => {
120
+ const record = await parseStartWorkflowRequestRecord(request, context);
121
+ return {
122
+ ...extractSharedStartWorkflowRestFields(record),
123
+ signalName: record.signalName,
124
+ signalPayload: record.signalPayload,
125
+ signalId: record.signalId
126
+ };
127
+ },
128
+ success: { kind: "json", status: 201 },
129
+ shapeFault: shapeRestFault
130
+ };
@@ -0,0 +1,38 @@
1
+ import type { SearchAttributeSchema, SearchAttributeValue, StartOptions } from '../../core/types.ts';
2
+ /**
3
+ * The raw, transport-supplied start-option fields shared by `weft.workflows.start`
4
+ * and `weft.workflows.startorsignal`. Each is `unknown` because validation happens
5
+ * in {@link buildSharedStartWorkflowOptions}, not at the schema boundary, so both
6
+ * surfaces hit one cross-transport error path.
7
+ */
8
+ export type SharedStartWorkflowOptionInput = {
9
+ id?: unknown;
10
+ executionTimeout?: unknown;
11
+ startAt?: unknown;
12
+ startAfter?: unknown;
13
+ tags?: unknown;
14
+ idempotencyKey?: unknown;
15
+ searchAttributes?: unknown;
16
+ };
17
+ /**
18
+ * Coerce the shared start-option fields into a validated {@link StartOptions}.
19
+ * Both start operations call this so they cannot drift in how they validate `id`,
20
+ * `executionTimeout`, `startAt`/`startAfter`, `tags`, `idempotencyKey`, and
21
+ * `searchAttributes` (a new field added here covers both surfaces at once). Throws
22
+ * {@link StartWorkflowValidationError} on any malformed field.
23
+ *
24
+ * `onTerminalConflict` is intentionally NOT part of this shared path: it is an
25
+ * in-process `engine.start`-only policy (its purge-and-restart would make the
26
+ * transport `weft.workflows.start` operation conditionally destructive and would
27
+ * violate `startOrSignal`'s at-most-once identity), so it is not exposed over
28
+ * REST/JSON-RPC. See follow-up issue #489.
29
+ */
30
+ export declare function buildSharedStartWorkflowOptions(input: SharedStartWorkflowOptionInput, searchAttributeSchema: SearchAttributeSchema | undefined): StartOptions;
31
+ /**
32
+ * Coerce a transport-supplied `searchAttributes` object into validated
33
+ * {@link SearchAttributeValue}s. Shared by `weft.workflows.start` and
34
+ * `weft.workflows.startorsignal` so both apply the same null-prototype guard,
35
+ * date-time normalization, schema-presence check, and type validation —
36
+ * preventing the two start surfaces from drifting in how they accept attributes.
37
+ */
38
+ export declare function coerceStartWorkflowSearchAttributes(value: unknown, fieldName: string, schema: SearchAttributeSchema | undefined): Record<string, SearchAttributeValue>;
@@ -0,0 +1,63 @@
1
+ import { validateAttributeType } from "../../core/search-attributes.js";
2
+ import {
3
+ assertExclusiveStartWorkflowOptions,
4
+ coerceStartWorkflowDuration,
5
+ coerceStartWorkflowId,
6
+ coerceStartWorkflowIdempotencyKey,
7
+ coerceStartWorkflowTags,
8
+ coerceStartWorkflowTimestamp,
9
+ StartWorkflowValidationError
10
+ } from "../../core/start-workflow-validation.js";
11
+ export function buildSharedStartWorkflowOptions(input, searchAttributeSchema) {
12
+ const options = {};
13
+ if (input.id !== void 0)
14
+ options.id = coerceStartWorkflowId(input.id, 'Field "id"');
15
+ if (input.executionTimeout !== void 0)
16
+ options.executionTimeout = coerceStartWorkflowDuration(input.executionTimeout, 'Field "executionTimeout"');
17
+ if (input.startAt !== void 0)
18
+ options.startAt = coerceStartWorkflowTimestamp(input.startAt, 'Field "startAt"');
19
+ if (input.startAfter !== void 0)
20
+ options.startAfter = coerceStartWorkflowDuration(input.startAfter, 'Field "startAfter"');
21
+ if (input.tags !== void 0)
22
+ options.tags = coerceStartWorkflowTags(input.tags, 'Field "tags"');
23
+ if (input.idempotencyKey !== void 0)
24
+ options.idempotencyKey = coerceStartWorkflowIdempotencyKey(input.idempotencyKey, 'Field "idempotencyKey"');
25
+ if (input.searchAttributes !== void 0)
26
+ options.searchAttributes = coerceStartWorkflowSearchAttributes(input.searchAttributes, 'Field "searchAttributes"', searchAttributeSchema);
27
+ assertExclusiveStartWorkflowOptions(options.startAt, options.startAfter);
28
+ return options;
29
+ }
30
+ export function coerceStartWorkflowSearchAttributes(value, fieldName, schema) {
31
+ if (typeof value !== "object" || value === null || Array.isArray(value))
32
+ throw new StartWorkflowValidationError(`${fieldName} must be an object`);
33
+ const attributes = Object.create(null);
34
+ for (const [key, attributeValue] of Object.entries(value))
35
+ attributes[key] = coerceStartWorkflowSearchAttributeValue(key, attributeValue, fieldName, schema);
36
+ return attributes;
37
+ }
38
+ function coerceStartWorkflowSearchAttributeValue(key, value, fieldName, schema) {
39
+ if (!isSearchAttributeValue(value))
40
+ throw new StartWorkflowValidationError(`${fieldName}.${key} must be a string, number, boolean, Date, or string array`);
41
+ if (schema === void 0)
42
+ return value;
43
+ const definition = schema[key];
44
+ if (definition === void 0)
45
+ throw new StartWorkflowValidationError(`Unknown search attribute "${key}". Registered attributes: ${Object.keys(schema).join(", ")}`);
46
+ const normalizedValue = definition.type === "string" && definition.format === "date-time" && typeof value === "string" ? coerceDateTimeSearchAttribute(key, value, fieldName) : value;
47
+ try {
48
+ validateAttributeType(key, normalizedValue, definition);
49
+ } catch (error) {
50
+ const message = error instanceof Error ? error.message : String(error);
51
+ throw new StartWorkflowValidationError(message);
52
+ }
53
+ return normalizedValue;
54
+ }
55
+ function coerceDateTimeSearchAttribute(key, value, fieldName) {
56
+ const date = new Date(value);
57
+ if (Number.isNaN(date.getTime()))
58
+ throw new StartWorkflowValidationError(`${fieldName}.${key} must be a valid date-time string`);
59
+ return date;
60
+ }
61
+ function isSearchAttributeValue(value) {
62
+ return typeof value === "string" || typeof value === "number" || typeof value === "boolean" || value instanceof Date || Array.isArray(value) && value.every((item) => typeof item === "string");
63
+ }
@@ -0,0 +1,14 @@
1
+ import type { RestInputContext } from '../rest-binding.ts';
2
+ export type SharedStartWorkflowRestFields = {
3
+ readonly type: unknown;
4
+ readonly input: unknown;
5
+ readonly id: unknown;
6
+ readonly executionTimeout: unknown;
7
+ readonly startAt: unknown;
8
+ readonly startAfter: unknown;
9
+ readonly tags: unknown;
10
+ readonly idempotencyKey: unknown;
11
+ readonly searchAttributes: unknown;
12
+ };
13
+ export declare function parseStartWorkflowRequestRecord(request: Request, context?: RestInputContext): Promise<Record<string, unknown>>;
14
+ export declare function extractSharedStartWorkflowRestFields(record: Record<string, unknown>): SharedStartWorkflowRestFields;
@@ -0,0 +1,31 @@
1
+ import { readRestJsonBody } from "../rest-body.js";
2
+ import { invalidParamsFault, isOperationFault } from "./operation-helpers.js";
3
+ function isJsonObjectLikeRecord(value) {
4
+ return typeof value === "object" && value !== null;
5
+ }
6
+ export async function parseStartWorkflowRequestRecord(request, context) {
7
+ let body;
8
+ try {
9
+ body = await readRestJsonBody(request, context);
10
+ } catch (error) {
11
+ if (isOperationFault(error))
12
+ throw error;
13
+ throw invalidParamsFault("Invalid JSON body");
14
+ }
15
+ if (body === null || typeof body !== "object")
16
+ throw invalidParamsFault("Request body must be a JSON object");
17
+ return isJsonObjectLikeRecord(body) ? body : {};
18
+ }
19
+ export function extractSharedStartWorkflowRestFields(record) {
20
+ return {
21
+ type: record.type,
22
+ input: record.input,
23
+ id: record.id,
24
+ executionTimeout: record.executionTimeout,
25
+ startAt: record.startAt,
26
+ startAfter: record.startAfter,
27
+ tags: record.tags,
28
+ idempotencyKey: record.idempotencyKey,
29
+ searchAttributes: record.searchAttributes
30
+ };
31
+ }
@@ -28,6 +28,6 @@ export declare const startWorkflowOperation: import("../operation-catalog.ts").O
28
28
  searchAttributes?: unknown;
29
29
  }, {
30
30
  id: string;
31
- }>;
31
+ }, unknown>;
32
32
  export declare const startWorkflowRestBinding: UnknownRestBinding;
33
33
  export {};