@lostgradient/weft 0.3.0 → 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 (508) hide show
  1. package/README.md +79 -24
  2. package/dist/cli/conformance.js +7 -1
  3. package/dist/cli/generated/operation-client.generated.d.ts +28 -13
  4. package/dist/cli/generated/operation-client.generated.js +1 -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 +79 -78
  13. package/dist/client/handle-delegation.d.ts +3 -2
  14. package/dist/client/handle-delegation.js +3 -1
  15. package/dist/client/http-client-requests.d.ts +2 -1
  16. package/dist/client/http-client-requests.js +7 -0
  17. package/dist/client/http-client.d.ts +9 -6
  18. package/dist/client/http-client.js +10 -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 +46 -5
  23. package/dist/client/local.d.ts +4 -1
  24. package/dist/client/local.js +12 -4
  25. package/dist/client/start-body.d.ts +4 -3
  26. package/dist/core/byte-arrays.d.ts +5 -0
  27. package/dist/core/byte-arrays.js +5 -0
  28. package/dist/core/checkpoint/lifecycle.d.ts +3 -0
  29. package/dist/core/checkpoint/lifecycle.js +9 -4
  30. package/dist/core/checkpoint/serialization.js +12 -5
  31. package/dist/core/codec/extension-codec.d.ts +16 -0
  32. package/dist/core/codec/extension-codec.js +100 -6
  33. package/dist/core/context/activity-retry-state.d.ts +38 -0
  34. package/dist/core/context/activity-retry-state.js +89 -0
  35. package/dist/core/context/activity-schedule-to-close.d.ts +159 -0
  36. package/dist/core/context/activity-schedule-to-close.js +69 -0
  37. package/dist/core/context/child-workflow-pipe.d.ts +5 -5
  38. package/dist/core/context/child-workflow-pipe.js +15 -2
  39. package/dist/core/context/context-presence.d.ts +19 -0
  40. package/dist/core/context/context-presence.js +13 -0
  41. package/dist/core/context/durable-operations.d.ts +25 -0
  42. package/dist/core/context/durable-operations.js +64 -0
  43. package/dist/core/context/index.d.ts +9 -5
  44. package/dist/core/context/index.js +17 -12
  45. package/dist/core/context/internals.d.ts +20 -0
  46. package/dist/core/context/internals.js +3 -1
  47. package/dist/core/context/operation-request.d.ts +35 -0
  48. package/dist/core/context/parallel-cache-entry.d.ts +14 -5
  49. package/dist/core/context/run-operation.d.ts +6 -1
  50. package/dist/core/context/run-operation.js +41 -87
  51. package/dist/core/context/session-state.js +7 -8
  52. package/dist/core/context/speculative-child.js +2 -0
  53. package/dist/core/context/types.d.ts +15 -0
  54. package/dist/core/context/version-patching.d.ts +8 -0
  55. package/dist/core/context/version-patching.js +40 -0
  56. package/dist/core/context/workflow-logger.d.ts +98 -0
  57. package/dist/core/context/workflow-logger.js +68 -0
  58. package/dist/core/engine/activity-heartbeat-tracking.d.ts +64 -0
  59. package/dist/core/engine/activity-heartbeat-tracking.js +42 -0
  60. package/dist/core/engine/activity-per-attempt-timeout.d.ts +41 -0
  61. package/dist/core/engine/activity-per-attempt-timeout.js +36 -0
  62. package/dist/core/engine/activity-reconciliation.d.ts +1 -0
  63. package/dist/core/engine/activity-reconciliation.js +12 -1
  64. package/dist/core/engine/activity-resolution.d.ts +23 -0
  65. package/dist/core/engine/activity-resolution.js +37 -0
  66. package/dist/core/engine/aggregate.js +66 -30
  67. package/dist/core/engine/async-activity-completion.d.ts +23 -6
  68. package/dist/core/engine/async-activity-completion.js +53 -12
  69. package/dist/core/engine/attributes-tags.js +9 -4
  70. package/dist/core/engine/bulk-operations-purge.d.ts +26 -0
  71. package/dist/core/engine/bulk-operations-purge.js +38 -3
  72. package/dist/core/engine/bulk-operations-shared.d.ts +2 -0
  73. package/dist/core/engine/bulk-operations-shared.js +8 -2
  74. package/dist/core/engine/bulk-operations.d.ts +4 -1
  75. package/dist/core/engine/bulk-operations.js +235 -24
  76. package/dist/core/engine/callback-creators-bundles.d.ts +9 -0
  77. package/dist/core/engine/callback-creators-bundles.js +30 -2
  78. package/dist/core/engine/callback-creators-core.js +6 -4
  79. package/dist/core/engine/callback-creators-router.js +10 -0
  80. package/dist/core/engine/callback-creators-schedule.d.ts +2 -2
  81. package/dist/core/engine/callback-creators-schedule.js +12 -8
  82. package/dist/core/engine/candidate-read-batching.d.ts +6 -0
  83. package/dist/core/engine/candidate-read-batching.js +1 -0
  84. package/dist/core/engine/checkpoint-io.js +61 -25
  85. package/dist/core/engine/checkpoint-reads.js +3 -2
  86. package/dist/core/engine/checkpoint-replay.d.ts +20 -0
  87. package/dist/core/engine/checkpoint-replay.js +242 -0
  88. package/dist/core/engine/checkpoint-side-effects.d.ts +23 -0
  89. package/dist/core/engine/checkpoint-side-effects.js +35 -0
  90. package/dist/core/engine/child-workflow-cancellation.d.ts +10 -0
  91. package/dist/core/engine/child-workflow-cancellation.js +40 -0
  92. package/dist/core/engine/child-workflow.js +27 -4
  93. package/dist/core/engine/condition-waiters.d.ts +14 -0
  94. package/dist/core/engine/condition-waiters.js +5 -0
  95. package/dist/core/engine/construction.d.ts +3 -0
  96. package/dist/core/engine/construction.js +21 -8
  97. package/dist/core/engine/coordination-branch-executors.d.ts +70 -0
  98. package/dist/core/engine/coordination-branch-executors.js +107 -0
  99. package/dist/core/engine/deferred-consume-envelope.d.ts +59 -0
  100. package/dist/core/engine/deferred-consume-envelope.js +14 -0
  101. package/dist/core/engine/disposal.js +13 -0
  102. package/dist/core/engine/engine-create-types.d.ts +14 -4
  103. package/dist/core/engine/engine-internal-types.d.ts +26 -3
  104. package/dist/core/engine/errors.d.ts +47 -0
  105. package/dist/core/engine/errors.js +20 -0
  106. package/dist/core/engine/event-log-compaction.d.ts +8 -0
  107. package/dist/core/engine/event-log-compaction.js +20 -2
  108. package/dist/core/engine/fenced-write.d.ts +65 -0
  109. package/dist/core/engine/fenced-write.js +71 -0
  110. package/dist/core/engine/finalizer-state.d.ts +28 -0
  111. package/dist/core/engine/finalizer-state.js +16 -0
  112. package/dist/core/engine/handles.d.ts +8 -0
  113. package/dist/core/engine/index.d.ts +34 -16
  114. package/dist/core/engine/index.js +133 -8
  115. package/dist/core/engine/inline-parking.js +3 -2
  116. package/dist/core/engine/internals.d.ts +107 -3
  117. package/dist/core/engine/lease-codec.d.ts +35 -0
  118. package/dist/core/engine/lease-codec.js +32 -0
  119. package/dist/core/engine/lease-deposition.d.ts +66 -0
  120. package/dist/core/engine/lease-deposition.js +10 -0
  121. package/dist/core/engine/lease-errors.d.ts +99 -0
  122. package/dist/core/engine/lease-errors.js +30 -0
  123. package/dist/core/engine/lease-manager.d.ts +114 -0
  124. package/dist/core/engine/lease-manager.js +135 -0
  125. package/dist/core/engine/lifecycle/persist.js +10 -32
  126. package/dist/core/engine/lifecycle/recovered-services.d.ts +8 -6
  127. package/dist/core/engine/lifecycle/recovered-services.js +18 -3
  128. package/dist/core/engine/lifecycle/resume.js +16 -9
  129. package/dist/core/engine/lifecycle/shared.d.ts +8 -1
  130. package/dist/core/engine/lifecycle/start-batch.d.ts +1 -1
  131. package/dist/core/engine/lifecycle/start-batch.js +2 -1
  132. package/dist/core/engine/lifecycle/start-commit.d.ts +9 -0
  133. package/dist/core/engine/lifecycle/start-commit.js +50 -8
  134. package/dist/core/engine/lifecycle/start-or-signal-create.d.ts +58 -0
  135. package/dist/core/engine/lifecycle/start-or-signal-create.js +95 -0
  136. package/dist/core/engine/lifecycle/start-or-signal.d.ts +3 -2
  137. package/dist/core/engine/lifecycle/start-or-signal.js +11 -81
  138. package/dist/core/engine/lifecycle/start-terminal-conflict-purge.d.ts +39 -0
  139. package/dist/core/engine/lifecycle/start-terminal-conflict-purge.js +28 -0
  140. package/dist/core/engine/lifecycle/start.d.ts +4 -4
  141. package/dist/core/engine/lifecycle/start.js +17 -9
  142. package/dist/core/engine/lifecycle/transition.js +17 -5
  143. package/dist/core/engine/lifecycle.d.ts +1 -1
  144. package/dist/core/engine/list-candidate-resolution.js +2 -2
  145. package/dist/core/engine/listing.js +9 -5
  146. package/dist/core/engine/operations-activity.d.ts +4 -11
  147. package/dist/core/engine/operations-activity.js +22 -49
  148. package/dist/core/engine/operations-coordination.d.ts +10 -0
  149. package/dist/core/engine/operations-coordination.js +43 -8
  150. package/dist/core/engine/operations-router.d.ts +6 -0
  151. package/dist/core/engine/operations-router.js +2 -0
  152. package/dist/core/engine/operations-speculate.js +6 -2
  153. package/dist/core/engine/operations-stream.js +12 -2
  154. package/dist/core/engine/operations-time.d.ts +4 -2
  155. package/dist/core/engine/operations-time.js +14 -2
  156. package/dist/core/engine/operations-wait-condition.d.ts +23 -0
  157. package/dist/core/engine/operations-wait-condition.js +62 -0
  158. package/dist/core/engine/ownership-options.d.ts +23 -0
  159. package/dist/core/engine/ownership-options.js +26 -0
  160. package/dist/core/engine/payload-size-policy.d.ts +3 -0
  161. package/dist/core/engine/payload-size-policy.js +4 -0
  162. package/dist/core/engine/pending-updates.d.ts +17 -0
  163. package/dist/core/engine/pending-updates.js +33 -11
  164. package/dist/core/engine/queries.js +1 -1
  165. package/dist/core/engine/registration.d.ts +1 -0
  166. package/dist/core/engine/registration.js +18 -3
  167. package/dist/core/engine/schedule-jitter.d.ts +5 -0
  168. package/dist/core/engine/schedule-jitter.js +10 -0
  169. package/dist/core/engine/schedule-run.d.ts +17 -0
  170. package/dist/core/engine/schedule-run.js +38 -0
  171. package/dist/core/engine/schedule-timer.js +81 -17
  172. package/dist/core/engine/schedules.d.ts +7 -4
  173. package/dist/core/engine/schedules.js +37 -16
  174. package/dist/core/engine/search-attribute-records.d.ts +4 -0
  175. package/dist/core/engine/search-attribute-records.js +17 -0
  176. package/dist/core/engine/signals.d.ts +18 -2
  177. package/dist/core/engine/signals.js +42 -21
  178. package/dist/core/engine/state-utilities.d.ts +49 -2
  179. package/dist/core/engine/state-utilities.js +114 -3
  180. package/dist/core/engine/storage-io.d.ts +16 -2
  181. package/dist/core/engine/storage-io.js +26 -5
  182. package/dist/core/engine/stream-chunk-loading.d.ts +2 -0
  183. package/dist/core/engine/stream-chunk-loading.js +24 -1
  184. package/dist/core/engine/sub-operation.js +22 -3
  185. package/dist/core/engine/termination/cleanup.d.ts +3 -1
  186. package/dist/core/engine/termination/cleanup.js +25 -1
  187. package/dist/core/engine/termination/complete.js +44 -6
  188. package/dist/core/engine/termination/finalizer-activity.d.ts +53 -0
  189. package/dist/core/engine/termination/finalizer-activity.js +30 -0
  190. package/dist/core/engine/termination/finalizer-claim.d.ts +110 -0
  191. package/dist/core/engine/termination/finalizer-claim.js +80 -0
  192. package/dist/core/engine/termination/finalizer.d.ts +48 -0
  193. package/dist/core/engine/termination/finalizer.js +159 -0
  194. package/dist/core/engine/termination/suspend.d.ts +3 -1
  195. package/dist/core/engine/termination.d.ts +1 -0
  196. package/dist/core/engine/termination.js +4 -0
  197. package/dist/core/engine/updates.js +5 -25
  198. package/dist/core/engine/validation/schedule.d.ts +2 -1
  199. package/dist/core/engine/validation/schedule.js +51 -2
  200. package/dist/core/engine/validation.js +32 -5
  201. package/dist/core/engine/waiting-update-response.d.ts +8 -0
  202. package/dist/core/engine/waiting-update-response.js +22 -0
  203. package/dist/core/engine/workflow-concurrency.d.ts +10 -0
  204. package/dist/core/engine/workflow-concurrency.js +136 -0
  205. package/dist/core/engine/workflow-feed.d.ts +4 -5
  206. package/dist/core/engine/workflow-feed.js +4 -1
  207. package/dist/core/engine/workflow-indexes.d.ts +9 -0
  208. package/dist/core/engine/workflow-indexes.js +10 -0
  209. package/dist/core/engine/workflow-state-stream.js +33 -13
  210. package/dist/core/engine/workflow-visibility-queries.d.ts +2 -2
  211. package/dist/core/engine-helpers.js +1 -0
  212. package/dist/core/events/activity-events.d.ts +43 -12
  213. package/dist/core/events/activity-events.js +28 -0
  214. package/dist/core/events/attribute-events.d.ts +2 -3
  215. package/dist/core/events/event-map.d.ts +18 -12
  216. package/dist/core/events/index.d.ts +1 -0
  217. package/dist/core/events/index.js +1 -0
  218. package/dist/core/events/schedule-events.d.ts +71 -0
  219. package/dist/core/events/schedule-events.js +29 -0
  220. package/dist/core/events/signal-events.d.ts +4 -6
  221. package/dist/core/events/system-events.d.ts +29 -19
  222. package/dist/core/events/system-events.js +26 -0
  223. package/dist/core/events/update-events.d.ts +6 -8
  224. package/dist/core/events/workflow-events.d.ts +88 -23
  225. package/dist/core/events/workflow-events.js +26 -0
  226. package/dist/core/failure-categories.js +5 -17
  227. package/dist/core/fault-code.d.ts +9 -3
  228. package/dist/core/fault-code.js +1 -0
  229. package/dist/core/inline-execution-strategy.context-options.d.ts +69 -0
  230. package/dist/core/inline-execution-strategy.context-options.js +56 -0
  231. package/dist/core/inline-execution-strategy.d.ts +31 -36
  232. package/dist/core/inline-execution-strategy.js +16 -27
  233. package/dist/core/list-filter-validation.d.ts +1 -1
  234. package/dist/core/payload-size.d.ts +1 -1
  235. package/dist/core/persisted-data-incompatible-error.d.ts +9 -7
  236. package/dist/core/review/events.d.ts +6 -8
  237. package/dist/core/scheduler/scheduler-class.d.ts +10 -1
  238. package/dist/core/scheduler/scheduler-class.js +38 -11
  239. package/dist/core/scheduler/timer-batch.js +9 -1
  240. package/dist/core/scheduler/timer-sources.d.ts +1 -0
  241. package/dist/core/scheduler/timer-sources.js +11 -5
  242. package/dist/core/session-state.d.ts +0 -1
  243. package/dist/core/session-state.js +2 -2
  244. package/dist/core/start-workflow-validation.d.ts +34 -0
  245. package/dist/core/start-workflow-validation.js +19 -0
  246. package/dist/core/types/activity-verification.d.ts +67 -0
  247. package/dist/core/types/activity-verification.js +0 -0
  248. package/dist/core/types/activity.d.ts +80 -61
  249. package/dist/core/types/bulk.d.ts +50 -9
  250. package/dist/core/types/checkpoint.d.ts +44 -8
  251. package/dist/core/types/list-options.d.ts +146 -0
  252. package/dist/core/types/list-options.js +0 -0
  253. package/dist/core/types/options.d.ts +121 -165
  254. package/dist/core/types/schedules.d.ts +39 -3
  255. package/dist/core/types/services-resolution.d.ts +2 -2
  256. package/dist/core/types/workflow-builder-runtime.d.ts +12 -3
  257. package/dist/core/types/workflow-builder-runtime.js +11 -2
  258. package/dist/core/types/workflow-builder.d.ts +42 -11
  259. package/dist/core/types/workflow-concurrency.d.ts +39 -0
  260. package/dist/core/types/workflow-concurrency.js +0 -0
  261. package/dist/core/types/workflow-context.d.ts +157 -14
  262. package/dist/core/types/workflow-definition.d.ts +53 -10
  263. package/dist/core/types/workflow-function.d.ts +84 -9
  264. package/dist/core/types/workflow-log.d.ts +98 -0
  265. package/dist/core/types/workflow-log.js +0 -0
  266. package/dist/core/types/workflow-registries.d.ts +14 -3
  267. package/dist/core/types/workflow-registry.d.ts +3 -0
  268. package/dist/core/types.d.ts +4 -0
  269. package/dist/core/types.js +4 -0
  270. package/dist/core/versioning.d.ts +9 -39
  271. package/dist/core/versioning.js +2 -12
  272. package/dist/core/weft-error.d.ts +44 -1
  273. package/dist/core/weft-error.js +16 -0
  274. package/dist/core/worker-execution-strategy-options.d.ts +26 -0
  275. package/dist/core/worker-execution-strategy.js +40 -36
  276. package/dist/core/worker-inbound-message.d.ts +38 -0
  277. package/dist/core/worker-inbound-message.js +37 -0
  278. package/dist/core/worker-log-abuse-counter.d.ts +175 -0
  279. package/dist/core/worker-log-abuse-counter.js +107 -0
  280. package/dist/core/worker-message-helpers.d.ts +47 -0
  281. package/dist/core/worker-message-helpers.js +26 -0
  282. package/dist/core/worker-protocol-guard.js +1 -1
  283. package/dist/core/worker-protocol-log.d.ts +56 -0
  284. package/dist/core/worker-protocol-log.js +18 -0
  285. package/dist/core/worker-protocol.d.ts +23 -0
  286. package/dist/core/worker-protocol.js +12 -2
  287. package/dist/core/workflow-version-tuple.d.ts +3 -9
  288. package/dist/core/workflow-version-tuple.js +2 -3
  289. package/dist/diagnostics/format.js +1 -6
  290. package/dist/diagnostics/types.d.ts +4 -5
  291. package/dist/diagnostics/validate.d.ts +0 -1
  292. package/dist/diagnostics/version-check.d.ts +1 -1
  293. package/dist/diagnostics/version-check.js +4 -9
  294. package/dist/index.d.ts +12 -10
  295. package/dist/index.js +29 -3
  296. package/dist/json-schema.js +3 -3
  297. package/dist/mcp/cli.js +27 -27
  298. package/dist/mcp/dispatcher.js +1 -1
  299. package/dist/mcp/http.js +16 -6
  300. package/dist/mcp/protocol.d.ts +2 -0
  301. package/dist/mcp/protocol.js +1 -1
  302. package/dist/mcp/session.d.ts +16 -0
  303. package/dist/mcp/session.js +59 -6
  304. package/dist/mcp/tools.js +73 -6
  305. package/dist/observability/index.js +2 -2
  306. package/dist/server/asyncapi-channels.js +5 -2
  307. package/dist/server/attribute-filters.d.ts +8 -3
  308. package/dist/server/attribute-filters.js +6 -1
  309. package/dist/server/authentication/api-key.d.ts +2 -1
  310. package/dist/server/authentication/api-key.js +5 -2
  311. package/dist/server/authentication/constant-time-api-key.d.ts +15 -0
  312. package/dist/server/authentication/constant-time-api-key.js +24 -0
  313. package/dist/server/authentication/index.d.ts +1 -1
  314. package/dist/server/authentication/index.js +7 -4
  315. package/dist/server/authentication/rotating-api-key-store.d.ts +5 -3
  316. package/dist/server/authentication/rotating-api-key-store.js +19 -11
  317. package/dist/server/engine-event-feed-backend.d.ts +4 -5
  318. package/dist/server/fault-to-http.js +8 -1
  319. package/dist/server/fault-to-json-rpc.js +1 -0
  320. package/dist/server/fleet-event-feed.d.ts +31 -0
  321. package/dist/server/fleet-event-feed.js +157 -0
  322. package/dist/server/handler/index.js +1 -1
  323. package/dist/server/handler/response-helpers.js +2 -1
  324. package/dist/server/handler/route-dispatch.d.ts +6 -3
  325. package/dist/server/handler/route-dispatch.js +2 -2
  326. package/dist/server/handler.js +23 -23
  327. package/dist/server/index.d.ts +32 -2
  328. package/dist/server/index.js +26 -26
  329. package/dist/server/json-rpc-transport-helpers.d.ts +1 -0
  330. package/dist/server/json-rpc-transport-helpers.js +2 -1
  331. package/dist/server/json-rpc-websocket-runtime.d.ts +11 -2
  332. package/dist/server/json-rpc-websocket-runtime.js +1 -0
  333. package/dist/server/json-rpc-websocket-subscriptions.d.ts +10 -0
  334. package/dist/server/json-rpc-websocket-subscriptions.js +29 -0
  335. package/dist/server/json-rpc-websocket-types.d.ts +22 -0
  336. package/dist/server/json-rpc-websocket-types.js +0 -0
  337. package/dist/server/json-rpc-websocket-validation.js +20 -4
  338. package/dist/server/json-rpc-websocket.d.ts +2 -43
  339. package/dist/server/json-rpc-websocket.js +57 -74
  340. package/dist/server/openapi.d.ts +2 -1
  341. package/dist/server/openapi.js +1 -3
  342. package/dist/server/openrpc-document-schema.d.ts +78 -0
  343. package/dist/server/openrpc-document-schema.js +27 -1
  344. package/dist/server/openrpc-errors.d.ts +3 -0
  345. package/dist/server/openrpc-errors.js +2 -1
  346. package/dist/server/openrpc.js +32 -0
  347. package/dist/server/operation-catalog/index.d.ts +1 -1
  348. package/dist/server/operation-catalog/pipeline-helpers.js +1 -0
  349. package/dist/server/operation-catalog/pipeline-stages.js +26 -12
  350. package/dist/server/operation-catalog/pipeline.js +8 -1
  351. package/dist/server/operation-catalog/registry.js +13 -0
  352. package/dist/server/operation-catalog/types.d.ts +20 -9
  353. package/dist/server/operation-fault.d.ts +10 -0
  354. package/dist/server/operation-fault.js +2 -0
  355. package/dist/server/operation-registry.d.ts +12 -11
  356. package/dist/server/operation-registry.js +12 -3
  357. package/dist/server/operations/aggregate-workflows.d.ts +15 -15
  358. package/dist/server/operations/async-activity.d.ts +2 -2
  359. package/dist/server/operations/async-activity.js +12 -7
  360. package/dist/server/operations/bulk-cancel-workflows.d.ts +1 -1
  361. package/dist/server/operations/bulk-cancel-workflows.js +2 -2
  362. package/dist/server/operations/bulk-delete-workflows.d.ts +1 -1
  363. package/dist/server/operations/bulk-delete-workflows.js +2 -2
  364. package/dist/server/operations/bulk-filter-helpers.d.ts +8 -6
  365. package/dist/server/operations/bulk-filter-helpers.js +54 -24
  366. package/dist/server/operations/bulk-mutate-workflow-tags.d.ts +11 -9
  367. package/dist/server/operations/bulk-mutate-workflow-tags.js +2 -2
  368. package/dist/server/operations/bulk-operation-helpers.d.ts +2 -2
  369. package/dist/server/operations/bulk-retry-failed-workflows.d.ts +7 -0
  370. package/dist/server/operations/bulk-retry-failed-workflows.js +64 -0
  371. package/dist/server/operations/bulk-signal-workflows.d.ts +11 -9
  372. package/dist/server/operations/bulk-signal-workflows.js +2 -2
  373. package/dist/server/operations/cancel-schedule.d.ts +1 -1
  374. package/dist/server/operations/create-schedule.d.ts +3 -1
  375. package/dist/server/operations/create-schedule.js +29 -11
  376. package/dist/server/operations/fleet-events-subscription.d.ts +54 -0
  377. package/dist/server/operations/fleet-events-subscription.js +99 -0
  378. package/dist/server/operations/fork-workflow.d.ts +1 -1
  379. package/dist/server/operations/fork-workflow.js +3 -2
  380. package/dist/server/operations/get-checkpoint-at.d.ts +1 -1
  381. package/dist/server/operations/get-registry.d.ts +1 -1
  382. package/dist/server/operations/get-retention-overview.d.ts +1 -1
  383. package/dist/server/operations/get-review.d.ts +1 -1
  384. package/dist/server/operations/get-schedule.d.ts +1 -1
  385. package/dist/server/operations/get-stream-chunks.d.ts +1 -1
  386. package/dist/server/operations/get-system-metrics.d.ts +2 -2
  387. package/dist/server/operations/get-task-diagnostics.d.ts +45 -6
  388. package/dist/server/operations/get-task-diagnostics.js +101 -7
  389. package/dist/server/operations/get-update-result.d.ts +1 -1
  390. package/dist/server/operations/get-workflow-attributes.d.ts +1 -1
  391. package/dist/server/operations/get-workflow-events.d.ts +1 -1
  392. package/dist/server/operations/get-workflow-result.d.ts +1 -1
  393. package/dist/server/operations/get-workflow-timeline.d.ts +1 -1
  394. package/dist/server/operations/get-workflow.d.ts +1 -1
  395. package/dist/server/operations/list-checkpoints.d.ts +1 -1
  396. package/dist/server/operations/list-reviews.d.ts +1 -1
  397. package/dist/server/operations/list-schedules.d.ts +1 -1
  398. package/dist/server/operations/list-task-queues.d.ts +2 -2
  399. package/dist/server/operations/list-workers.d.ts +2 -2
  400. package/dist/server/operations/list-workflows.d.ts +1 -1
  401. package/dist/server/operations/operation-helpers.d.ts +16 -1
  402. package/dist/server/operations/operation-helpers.js +15 -3
  403. package/dist/server/operations/pause-schedule.d.ts +1 -1
  404. package/dist/server/operations/purge-workflows.d.ts +5 -5
  405. package/dist/server/operations/purge-workflows.js +2 -2
  406. package/dist/server/operations/query-workflow.d.ts +1 -1
  407. package/dist/server/operations/query-workflow.js +3 -2
  408. package/dist/server/operations/recover-all.d.ts +1 -1
  409. package/dist/server/operations/replay-workflow.d.ts +1 -1
  410. package/dist/server/operations/resume-schedule.d.ts +1 -1
  411. package/dist/server/operations/set-workflow-attributes.d.ts +1 -1
  412. package/dist/server/operations/set-workflow-attributes.js +6 -3
  413. package/dist/server/operations/signal-workflow.js +8 -3
  414. package/dist/server/operations/single-workflow-tag-mutation.js +13 -3
  415. package/dist/server/operations/start-or-signal-workflow.d.ts +6 -1
  416. package/dist/server/operations/start-or-signal-workflow.js +14 -24
  417. package/dist/server/operations/start-workflow-options.d.ts +6 -0
  418. package/dist/server/operations/start-workflow-rest-input.d.ts +14 -0
  419. package/dist/server/operations/start-workflow-rest-input.js +31 -0
  420. package/dist/server/operations/start-workflow.d.ts +1 -1
  421. package/dist/server/operations/start-workflow.js +8 -23
  422. package/dist/server/operations/storage.d.ts +6 -6
  423. package/dist/server/operations/storage.js +24 -14
  424. package/dist/server/operations/stream-workflow-sse.d.ts +1 -1
  425. package/dist/server/operations/submit-review-decision.d.ts +1 -1
  426. package/dist/server/operations/submit-review-decision.js +6 -3
  427. package/dist/server/operations/update-schedule.d.ts +1 -1
  428. package/dist/server/operations/update-schedule.js +7 -4
  429. package/dist/server/operations/update-workflow.d.ts +1 -1
  430. package/dist/server/operations/update-workflow.js +7 -3
  431. package/dist/server/operations/worker-drain.d.ts +8 -8
  432. package/dist/server/operations/worker-drain.js +11 -8
  433. package/dist/server/operations/workflow-events-subscription.d.ts +7 -8
  434. package/dist/server/operations/workflow-events-subscription.js +43 -8
  435. package/dist/server/rest-binding.d.ts +3 -1
  436. package/dist/server/rest-bindings.js +12 -0
  437. package/dist/server/rest-body.d.ts +10 -0
  438. package/dist/server/rest-body.js +80 -0
  439. package/dist/server/runtime/authentication-bridge.d.ts +1 -0
  440. package/dist/server/runtime/authentication-bridge.js +33 -6
  441. package/dist/server/runtime/client-visible-events.d.ts +3 -0
  442. package/dist/server/runtime/client-visible-events.js +65 -0
  443. package/dist/server/runtime/context.d.ts +7 -0
  444. package/dist/server/runtime/event-broadcasting.d.ts +6 -0
  445. package/dist/server/runtime/event-broadcasting.js +72 -38
  446. package/dist/server/runtime/retry.d.ts +1 -0
  447. package/dist/server/runtime/retry.js +14 -0
  448. package/dist/server/runtime/shutdown.d.ts +7 -6
  449. package/dist/server/runtime/shutdown.js +6 -1
  450. package/dist/server/runtime/task-polling.js +61 -20
  451. package/dist/server/runtime/task-reconciliation.js +9 -1
  452. package/dist/server/runtime/task-result-resolution.d.ts +15 -0
  453. package/dist/server/runtime/task-result-resolution.js +81 -0
  454. package/dist/server/runtime/websocket-stream.d.ts +20 -1
  455. package/dist/server/runtime/websocket-stream.js +173 -7
  456. package/dist/server/runtime/websocket-upgrade.js +22 -3
  457. package/dist/server/runtime/websocket-worker.d.ts +1 -1
  458. package/dist/server/runtime/websocket-worker.js +38 -30
  459. package/dist/server/serve-internals.d.ts +3 -1
  460. package/dist/server/serve-internals.js +18 -2
  461. package/dist/server/task-state.d.ts +30 -0
  462. package/dist/server/task-state.js +28 -0
  463. package/dist/server/workflow-event-feed.d.ts +36 -115
  464. package/dist/server/workflow-event-feed.js +92 -27
  465. package/dist/service-worker/index.js +30 -30
  466. package/dist/storage/auto.js +1 -1
  467. package/dist/storage/bun-sql.js +24 -0
  468. package/dist/storage/compressed-storage.js +1 -1
  469. package/dist/storage/default-scope.d.ts +7 -4
  470. package/dist/storage/http.js +2 -2
  471. package/dist/storage/index.d.ts +76 -4
  472. package/dist/storage/indexeddb.js +1 -1
  473. package/dist/storage/interface.d.ts +163 -0
  474. package/dist/storage/interface.js +1 -1
  475. package/dist/storage/key-prefixes.d.ts +1 -1
  476. package/dist/storage/key-prefixes.js +10 -0
  477. package/dist/storage/lmdb.d.ts +4 -3
  478. package/dist/storage/lmdb.js +1 -1
  479. package/dist/storage/memory.js +1 -1
  480. package/dist/storage/neon-batch.d.ts +30 -0
  481. package/dist/storage/neon-batch.js +30 -0
  482. package/dist/storage/neon-value-mapping.d.ts +30 -3
  483. package/dist/storage/neon-value-mapping.js +12 -0
  484. package/dist/storage/neon.d.ts +16 -0
  485. package/dist/storage/neon.js +9 -4
  486. package/dist/storage/node-sqlite.js +23 -0
  487. package/dist/storage/postgres-key-value-queries.d.ts +69 -44
  488. package/dist/storage/postgres-key-value-queries.js +62 -24
  489. package/dist/storage/resolve.js +1 -1
  490. package/dist/storage/scoped-storage.js +1 -1
  491. package/dist/storage/testing.d.ts +168 -0
  492. package/dist/storage/testing.js +2 -0
  493. package/dist/storage/turso.d.ts +8 -0
  494. package/dist/storage/turso.js +2 -2
  495. package/dist/storage/typed-storage.js +1 -1
  496. package/dist/storage/web-extension.js +1 -1
  497. package/dist/testing/index.js +28 -28
  498. package/dist/version.d.ts +1 -1
  499. package/dist/version.js +1 -1
  500. package/dist/worker/protocol.js +1 -1
  501. package/dist/workers/worker-replay-state.d.ts +32 -0
  502. package/dist/workers/worker-replay-state.js +35 -0
  503. package/dist/workers/worker-state-namespace.d.ts +21 -0
  504. package/dist/workers/worker-state-namespace.js +13 -0
  505. package/dist/workers/workflow-runner.d.ts +19 -15
  506. package/dist/workers/workflow-runner.js +72 -60
  507. package/dist/workers/workflow-worker-entry.js +5 -2
  508. package/package.json +5 -1
@@ -1,62 +1,9 @@
1
- /**
2
- * `WorkflowEventFeed` — transport-neutral event replay + live-tail
3
- * contract shared by REST SSE, WebSocket watch/stream, and JSON-RPC
4
- * subscribe. Track 8 design decision 5 and 6.
5
- *
6
- * **Atomic handoff ordering** (the only sequence that avoids both
7
- * duplicates and gaps when a subscriber joins mid-stream):
8
- *
9
- * 1. Register a live listener into a bounded in-memory buffer.
10
- * From this moment, every newly-emitted event is captured.
11
- * 2. Snapshot the current live-tail sequence `S` (read once).
12
- * 3. Stream storage replay from `fromCursor` up to and including `S`.
13
- * 4. Drain the buffer, dropping any envelope with `sequence <= S`
14
- * (already replayed) and emitting the rest.
15
- * 5. Continue emitting live envelopes directly as the listener fires.
16
- *
17
- * Buffer bound is configurable (default 1000 envelopes per subscription).
18
- * Overflow closes the subscription with a `SubscriptionOverflow` signal
19
- * (the iterable terminates; the caller reopens with its last delivered
20
- * cursor). Unbounded-memory-growth is not an option here.
21
- *
22
- * **Cursor is opaque.** `encodeCursor(sequence)` and
23
- * `decodeCursor(cursor)` are the only code that knows the representation
24
- * — REST `Last-Event-ID`, WS `?resumeFrom=`, and JSON-RPC `fromCursor`
25
- * all round-trip through this module.
26
- */
27
1
  import type { WeftEventMap } from '../core/events.ts';
28
- /**
29
- * Discriminator string carried on every envelope. The union covers:
30
- *
31
- * - Dispatched `WeftEventMap` event names (`workflow:started`,
32
- * `activity:completed`, `stream:token`, …) — emitted when a
33
- * future log entry type corresponds to a runtime `Event`.
34
- * - Durable log entry types not in `WeftEventMap`
35
- * (`workflow:checkpoint` — the only one today; add others here
36
- * as new log kinds land).
37
- * - Selector-scoped synthetic kinds (`stream:chunk`) for records
38
- * that are not dispatched `Event` objects at all.
39
- * - An open `(string & {})` tail so third-party event kinds don't
40
- * fail typechecking at the envelope construction site while
41
- * IntelliSense still suggests the known literals.
42
- *
43
- * Cross-transport consumers match on `selector` first, then on
44
- * `kind` within that selector. This union is extensible and preserves
45
- * completion for known kinds, but the open-string tail means it does
46
- * not by itself reject arbitrary or misspelled string literals.
47
- */
2
+ /** Discriminator string carried on every feed envelope. */
48
3
  export type FeedEventKind = keyof WeftEventMap | 'workflow:checkpoint' | 'stream:chunk' | (string & {});
49
4
  /** Opaque cursor. Only `encodeCursor` / `decodeCursor` know the format. */
50
5
  export type Cursor = string;
51
- /**
52
- * Encode a non-negative integer sequence as an opaque cursor. The
53
- * current encoding is the decimal string form of the sequence, matching
54
- * the existing `sequence-cursor.ts` public representation so REST
55
- * `Last-Event-ID` / `?after=` clients continue to work unchanged. The
56
- * encoding is intentionally not part of the public API — a future
57
- * migration to base64 / hex / compact binary can happen without
58
- * breaking anything that goes through this module.
59
- */
6
+ /** Encode a non-negative integer sequence as an opaque cursor. */
60
7
  export declare function encodeCursor(sequence: number): Cursor;
61
8
  /**
62
9
  * Decode an opaque cursor back to its sequence. `-1` is the initial
@@ -64,12 +11,6 @@ export declare function encodeCursor(sequence: number): Cursor;
64
11
  */
65
12
  export declare function decodeCursor(cursor: Cursor): number | null;
66
13
  export type EventSelector = 'events' | 'tokens';
67
- /**
68
- * Unified event envelope delivered by the feed. Transports serialize
69
- * this directly (REST SSE `data:` line, WS JSON frame, JSON-RPC
70
- * `weft.events.deliver` params). `kind` narrows `payload` shape in
71
- * caller code via discriminated-union typing.
72
- */
73
14
  export type EventEnvelope = {
74
15
  readonly kind: FeedEventKind;
75
16
  readonly workflowId: string;
@@ -79,88 +20,68 @@ export type EventEnvelope = {
79
20
  readonly emittedAtMs: number;
80
21
  readonly payload: unknown;
81
22
  };
82
- /**
83
- * Pluggable storage + live-event source. The in-memory implementation
84
- * is used by unit tests; the production implementation wraps
85
- * `engine.storage` event scans + `EngineEventTarget` subscription.
86
- */
87
23
  export type WorkflowEventFeedBackend = {
88
- /**
89
- * Yield persisted envelopes with `sequence > afterSequence` in
90
- * sequence order. `afterSequence: -1` means "from the beginning."
91
- */
92
24
  replay(options: {
93
25
  workflowId: string;
94
26
  selector: EventSelector;
95
27
  afterSequence: number;
96
28
  }): AsyncIterable<EventEnvelope>;
97
- /**
98
- * Snapshot the current tail sequence for a workflow. Used in the
99
- * atomic-handoff sequence to bound the replay scan. Returns -1 if
100
- * no events have been emitted yet.
101
- */
102
29
  snapshotTailSequence(workflowId: string, selector: EventSelector): Promise<number>;
103
- /**
104
- * Register a live listener. Returns an unsubscribe function.
105
- *
106
- * Contract:
107
- * - Envelopes MUST be delivered in monotonically increasing
108
- * sequence order. The feed's live-buffer drain relies on this
109
- * for its dedupe logic — an out-of-order emission would cause
110
- * the feed to advance `lastDelivered` past a later-arriving
111
- * lower-sequence event and silently drop it.
112
- * - The listener SHOULD be invoked synchronously from the
113
- * event-emitter context. Backends that defer to a microtask
114
- * (or later) still work correctly because the feed's listener
115
- * buffers envelopes off the fast path, but synchronous delivery
116
- * minimizes handoff latency.
117
- * - Listener exceptions MUST NOT propagate to the backend's
118
- * event-emitter; the in-memory implementation wraps each
119
- * invocation in try/catch. Production backends should match.
120
- */
121
30
  subscribeLive(workflowId: string, selector: EventSelector, listener: (envelope: EventEnvelope) => void): () => void;
122
31
  };
123
32
  export type WorkflowEventFeed = {
124
- /**
125
- * Replay stored events only. No live subscription. Yields every
126
- * envelope with `sequence > decodeCursor(fromCursor)` up to an
127
- * optional `limit`, in sequence order, then completes.
128
- */
129
33
  replay(options: {
130
34
  workflowId: string;
131
35
  selector: EventSelector;
132
36
  fromCursor?: Cursor;
133
37
  limit?: number;
134
38
  }): AsyncIterable<EventEnvelope>;
135
- /**
136
- * Replay + live-tail. Implements the atomic-handoff sequence so a
137
- * subscriber joining mid-stream sees every event exactly once.
138
- * Caller controls termination via `signal.abort()` or by exiting
139
- * the `for await` loop (the feed cleans up the live listener).
140
- */
141
39
  subscribe(options: {
142
40
  workflowId: string;
143
41
  selector: EventSelector;
144
- fromCursor?: Cursor;
145
- signal?: AbortSignal;
146
- }): AsyncIterable<EventEnvelope>;
147
- /** Tear down any feed-level resources (no-op for the in-memory path). */
42
+ } & ReplayLiveSubscribeOptions<EventEnvelope>): AsyncIterable<EventEnvelope>;
148
43
  dispose(): void;
149
44
  };
150
45
  export type WorkflowEventFeedOptions = {
151
46
  /** Max envelopes the live buffer holds before overflow terminates the subscription. */
152
47
  liveBufferSize?: number;
153
48
  };
49
+ export type SequencedEventEnvelope = {
50
+ readonly sequence: number;
51
+ readonly cursor: Cursor;
52
+ };
53
+ export type ReplayLiveFeedBackend<TEnvelope extends SequencedEventEnvelope> = {
54
+ replay(options: {
55
+ afterSequence: number;
56
+ }): AsyncIterable<TEnvelope>;
57
+ snapshotTailSequence(): Promise<number>;
58
+ subscribeLive(listener: (envelope: TEnvelope) => void): () => void;
59
+ };
60
+ export type ReplayLiveFeed<TEnvelope extends SequencedEventEnvelope> = {
61
+ replay(options?: {
62
+ fromCursor?: Cursor;
63
+ limit?: number;
64
+ }): AsyncIterable<TEnvelope>;
65
+ subscribe(options?: ReplayLiveSubscribeOptions<TEnvelope>): AsyncIterable<TEnvelope>;
66
+ dispose(): void;
67
+ };
68
+ export type ReplayLiveSubscribeOptions<TEnvelope extends SequencedEventEnvelope> = {
69
+ fromCursor?: Cursor;
70
+ signal?: AbortSignal;
71
+ replayLimit?: number;
72
+ filterEnvelope?: (envelope: TEnvelope) => boolean;
73
+ countReplayEnvelope?: (envelope: TEnvelope) => boolean;
74
+ createReplayLimitError?: (count: number, limit: number) => unknown;
75
+ };
76
+ export declare class ReplayWindowExceededError extends Error {
77
+ readonly count: number;
78
+ readonly limit: number;
79
+ constructor(count: number, limit: number);
80
+ }
81
+ export declare function createReplayLiveFeed<TEnvelope extends SequencedEventEnvelope>(backend: ReplayLiveFeedBackend<TEnvelope>, options?: WorkflowEventFeedOptions): ReplayLiveFeed<TEnvelope>;
154
82
  export declare function createWorkflowEventFeed(backend: WorkflowEventFeedBackend, options?: WorkflowEventFeedOptions): WorkflowEventFeed;
155
83
  export type InMemoryEventBackend = WorkflowEventFeedBackend & {
156
- /** Append an envelope to storage (used by tests). */
157
84
  append(envelope: EventEnvelope): Promise<void>;
158
- /**
159
- * Emit a live event to any active listener WITHOUT persisting it
160
- * to storage. Used by tests to simulate the race between storage
161
- * writes and live dispatch. Production backends emit and persist in
162
- * one step.
163
- */
164
85
  emitLive(envelope: EventEnvelope): Promise<void>;
165
86
  };
166
87
  export declare function createInMemoryEventBackend(): InMemoryEventBackend;
@@ -12,18 +12,31 @@ export function decodeCursor(cursor) {
12
12
  return null;
13
13
  return value;
14
14
  }
15
+ function decodeCursorOrThrow(cursor) {
16
+ const sequence = decodeCursor(cursor);
17
+ if (sequence === null)
18
+ throw Error("Invalid cursor");
19
+ return sequence;
20
+ }
21
+
22
+ export class ReplayWindowExceededError extends Error {
23
+ count;
24
+ limit;
25
+ constructor(count, limit) {
26
+ super(`Replay window is ${count} events; maximum is ${limit}.`);
27
+ this.count = count;
28
+ this.limit = limit;
29
+ this.name = "ReplayWindowExceededError";
30
+ }
31
+ }
15
32
  const DEFAULT_LIVE_BUFFER_SIZE = 1000;
16
- export function createWorkflowEventFeed(backend, options) {
33
+ export function createReplayLiveFeed(backend, options) {
17
34
  const bufferSize = options?.liveBufferSize ?? DEFAULT_LIVE_BUFFER_SIZE;
18
35
  async function* replay(args) {
19
- const afterSequence = args.fromCursor !== void 0 ? decodeCursor(args.fromCursor) ?? -1 : -1;
36
+ const afterSequence = args?.fromCursor !== void 0 ? decodeCursorOrThrow(args.fromCursor) : -1;
20
37
  let yielded = 0;
21
- for await (const envelope of backend.replay({
22
- workflowId: args.workflowId,
23
- selector: args.selector,
24
- afterSequence
25
- })) {
26
- if (args.limit !== void 0 && yielded >= args.limit)
38
+ for await (const envelope of backend.replay({ afterSequence })) {
39
+ if (args?.limit !== void 0 && yielded >= args.limit)
27
40
  return;
28
41
  yield envelope;
29
42
  yielded += 1;
@@ -32,7 +45,9 @@ export function createWorkflowEventFeed(backend, options) {
32
45
  function subscribe(args) {
33
46
  const buffer = [];
34
47
  let bufferOverflowed = !1, waker = null;
35
- const unsubscribe = backend.subscribeLive(args.workflowId, args.selector, (envelope) => {
48
+ const signal = args?.signal, fromCursor = args?.fromCursor, requestedAfter = fromCursor !== void 0 ? decodeCursorOrThrow(fromCursor) : -1, unsubscribe = backend.subscribeLive((envelope) => {
49
+ if (!shouldDeliverEnvelope(envelope, args))
50
+ return;
36
51
  if (buffer.length >= bufferSize)
37
52
  bufferOverflowed = !0;
38
53
  else
@@ -49,22 +64,20 @@ export function createWorkflowEventFeed(backend, options) {
49
64
  fire();
50
65
  }
51
66
  };
52
- args.signal?.addEventListener("abort", onAbort);
67
+ signal?.addEventListener("abort", onAbort);
53
68
  async function* generator() {
54
69
  try {
55
- if (args.signal?.aborted)
70
+ if (signal?.aborted)
71
+ return;
72
+ const snapshot = await backend.snapshotTailSequence();
73
+ yield* replayUpTo(backend, requestedAfter, snapshot, signal, args);
74
+ if (signal?.aborted)
56
75
  return;
57
- const snapshot = await backend.snapshotTailSequence(args.workflowId, args.selector), requestedAfter = args.fromCursor !== void 0 ? decodeCursor(args.fromCursor) ?? -1 : -1;
58
- if (snapshot > requestedAfter) {
59
- yield* replayUpTo(backend, args, requestedAfter, snapshot);
60
- if (args.signal?.aborted)
61
- return;
62
- }
63
- yield* drainLive(buffer, snapshot, args.signal, () => bufferOverflowed, (w) => {
76
+ yield* drainLive(buffer, snapshot, signal, () => bufferOverflowed, (w) => {
64
77
  waker = w;
65
78
  });
66
79
  } finally {
67
- args.signal?.removeEventListener("abort", onAbort);
80
+ signal?.removeEventListener("abort", onAbort);
68
81
  unsubscribe();
69
82
  }
70
83
  }
@@ -76,19 +89,71 @@ export function createWorkflowEventFeed(backend, options) {
76
89
  dispose() {}
77
90
  };
78
91
  }
79
- async function* replayUpTo(backend, args, afterSequence, snapshot) {
80
- for await (const envelope of backend.replay({
81
- workflowId: args.workflowId,
82
- selector: args.selector,
83
- afterSequence
84
- })) {
92
+ export function createWorkflowEventFeed(backend, options) {
93
+ function createScopedFeed(workflowId, selector) {
94
+ return createReplayLiveFeed({
95
+ replay: ({ afterSequence }) => backend.replay({ workflowId, selector, afterSequence }),
96
+ snapshotTailSequence: () => backend.snapshotTailSequence(workflowId, selector),
97
+ subscribeLive: (listener) => backend.subscribeLive(workflowId, selector, listener)
98
+ }, options);
99
+ }
100
+ async function* replay(args) {
101
+ const replayOptions = {};
102
+ if (args.fromCursor !== void 0)
103
+ replayOptions.fromCursor = args.fromCursor;
104
+ if (args.limit !== void 0)
105
+ replayOptions.limit = args.limit;
106
+ yield* createScopedFeed(args.workflowId, args.selector).replay(replayOptions);
107
+ }
108
+ function subscribe(args) {
109
+ const subscribeOptions = {};
110
+ if (args.fromCursor !== void 0)
111
+ subscribeOptions.fromCursor = args.fromCursor;
112
+ if (args.signal !== void 0)
113
+ subscribeOptions.signal = args.signal;
114
+ if (args.replayLimit !== void 0)
115
+ subscribeOptions.replayLimit = args.replayLimit;
116
+ if (args.filterEnvelope !== void 0)
117
+ subscribeOptions.filterEnvelope = args.filterEnvelope;
118
+ if (args.countReplayEnvelope !== void 0)
119
+ subscribeOptions.countReplayEnvelope = args.countReplayEnvelope;
120
+ if (args.createReplayLimitError !== void 0)
121
+ subscribeOptions.createReplayLimitError = args.createReplayLimitError;
122
+ return createScopedFeed(args.workflowId, args.selector).subscribe(subscribeOptions);
123
+ }
124
+ return {
125
+ replay,
126
+ subscribe,
127
+ dispose() {}
128
+ };
129
+ }
130
+ async function* replayUpTo(backend, afterSequence, snapshot, signal, replayOptions) {
131
+ let replayCount = 0;
132
+ for await (const envelope of backend.replay({ afterSequence })) {
85
133
  if (envelope.sequence > snapshot)
86
134
  break;
87
- if (args.signal?.aborted)
135
+ if (signal?.aborted)
88
136
  return;
137
+ if (!shouldDeliverEnvelope(envelope, replayOptions))
138
+ continue;
139
+ if (shouldCountReplayEnvelope(envelope, replayOptions)) {
140
+ replayCount += 1;
141
+ const replayLimit = replayOptions?.replayLimit;
142
+ if (replayLimit !== void 0 && replayCount > replayLimit)
143
+ throw createReplayLimitError(replayOptions, replayCount, replayLimit);
144
+ }
89
145
  yield envelope;
90
146
  }
91
147
  }
148
+ function shouldDeliverEnvelope(envelope, replayOptions) {
149
+ return replayOptions?.filterEnvelope?.(envelope) ?? !0;
150
+ }
151
+ function shouldCountReplayEnvelope(envelope, replayOptions) {
152
+ return replayOptions?.countReplayEnvelope?.(envelope) ?? !0;
153
+ }
154
+ function createReplayLimitError(replayOptions, count, limit) {
155
+ return replayOptions?.createReplayLimitError?.(count, limit) ?? new ReplayWindowExceededError(count, limit);
156
+ }
92
157
  function flushPendingBuffer(buffer, watermark) {
93
158
  const batch = [];
94
159
  let newWatermark = watermark, head = buffer.shift();
@@ -115,7 +180,7 @@ async function* drainLive(buffer, snapshot, signal, overflowed, installWaker) {
115
180
  let watermark = snapshot;
116
181
  while (!0) {
117
182
  if (signal?.aborted || overflowed())
118
- return;
183
+ break;
119
184
  const { batch, newWatermark } = flushPendingBuffer(buffer, watermark);
120
185
  watermark = newWatermark;
121
186
  for (const envelope of batch) {