@smthrs/flow 0.0.0-stage → 1.0.0-rc.4

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 (654) hide show
  1. package/CHANGELOG.md +160 -0
  2. package/LICENSE +21 -0
  3. package/README.md +210 -2
  4. package/THIRD_PARTY_NOTICES.md +52 -0
  5. package/dist/cjs/Action/Action.d.ts +250 -0
  6. package/dist/cjs/Action/Action.d.ts.map +1 -0
  7. package/dist/cjs/Action/Action.js +42 -0
  8. package/dist/cjs/Action/Action.js.map +7 -0
  9. package/dist/cjs/Action/AttemptTimedOut.d.ts +33 -0
  10. package/dist/cjs/Action/AttemptTimedOut.d.ts.map +1 -0
  11. package/dist/cjs/Action/AttemptTimedOut.js +51 -0
  12. package/dist/cjs/Action/AttemptTimedOut.js.map +7 -0
  13. package/dist/cjs/Action/BoundaryMode.d.ts +29 -0
  14. package/dist/cjs/Action/BoundaryMode.d.ts.map +1 -0
  15. package/dist/cjs/Action/BoundaryMode.js +36 -0
  16. package/dist/cjs/Action/BoundaryMode.js.map +7 -0
  17. package/dist/cjs/Action/CacheEnvironment.d.ts +158 -0
  18. package/dist/cjs/Action/CacheEnvironment.d.ts.map +1 -0
  19. package/dist/cjs/Action/CacheEnvironment.js +57 -0
  20. package/dist/cjs/Action/CacheEnvironment.js.map +7 -0
  21. package/dist/cjs/Action/ConcurrentKeylessDispatch.d.ts +34 -0
  22. package/dist/cjs/Action/ConcurrentKeylessDispatch.d.ts.map +1 -0
  23. package/dist/cjs/Action/ConcurrentKeylessDispatch.js +46 -0
  24. package/dist/cjs/Action/ConcurrentKeylessDispatch.js.map +7 -0
  25. package/dist/cjs/Action/Context.d.ts +131 -0
  26. package/dist/cjs/Action/Context.d.ts.map +1 -0
  27. package/dist/cjs/Action/Context.js +68 -0
  28. package/dist/cjs/Action/Context.js.map +7 -0
  29. package/dist/cjs/Action/DuplicateImplementation.d.ts +20 -0
  30. package/dist/cjs/Action/DuplicateImplementation.d.ts.map +1 -0
  31. package/dist/cjs/Action/DuplicateImplementation.js +46 -0
  32. package/dist/cjs/Action/DuplicateImplementation.js.map +7 -0
  33. package/dist/cjs/Action/FileBoundary.d.ts +59 -0
  34. package/dist/cjs/Action/FileBoundary.d.ts.map +1 -0
  35. package/dist/cjs/Action/FileBoundary.js +81 -0
  36. package/dist/cjs/Action/FileBoundary.js.map +7 -0
  37. package/dist/cjs/Action/FileInput.d.ts +28 -0
  38. package/dist/cjs/Action/FileInput.d.ts.map +1 -0
  39. package/dist/cjs/Action/FileInput.js +42 -0
  40. package/dist/cjs/Action/FileInput.js.map +7 -0
  41. package/dist/cjs/Action/Filegroup.d.ts +16 -0
  42. package/dist/cjs/Action/Filegroup.d.ts.map +1 -0
  43. package/dist/cjs/Action/Filegroup.js +27 -0
  44. package/dist/cjs/Action/Filegroup.js.map +7 -0
  45. package/dist/cjs/Action/Glob.d.ts +8 -0
  46. package/dist/cjs/Action/Glob.d.ts.map +1 -0
  47. package/dist/cjs/Action/Glob.js +28 -0
  48. package/dist/cjs/Action/Glob.js.map +7 -0
  49. package/dist/cjs/Action/ImplementationVersionMismatch.d.ts +26 -0
  50. package/dist/cjs/Action/ImplementationVersionMismatch.d.ts.map +1 -0
  51. package/dist/cjs/Action/ImplementationVersionMismatch.js +45 -0
  52. package/dist/cjs/Action/ImplementationVersionMismatch.js.map +7 -0
  53. package/dist/cjs/Action/Implementations.d.ts +114 -0
  54. package/dist/cjs/Action/Implementations.d.ts.map +1 -0
  55. package/dist/cjs/Action/Implementations.js +65 -0
  56. package/dist/cjs/Action/Implementations.js.map +7 -0
  57. package/dist/cjs/Action/InfraInterrupt.d.ts +26 -0
  58. package/dist/cjs/Action/InfraInterrupt.d.ts.map +1 -0
  59. package/dist/cjs/Action/InfraInterrupt.js +46 -0
  60. package/dist/cjs/Action/InfraInterrupt.js.map +7 -0
  61. package/dist/cjs/Action/InfraInterruptRetriesExhausted.d.ts +33 -0
  62. package/dist/cjs/Action/InfraInterruptRetriesExhausted.d.ts.map +1 -0
  63. package/dist/cjs/Action/InfraInterruptRetriesExhausted.js +54 -0
  64. package/dist/cjs/Action/InfraInterruptRetriesExhausted.js.map +7 -0
  65. package/dist/cjs/Action/IrreversibleRetryRequiresIdempotencyKey.d.ts +26 -0
  66. package/dist/cjs/Action/IrreversibleRetryRequiresIdempotencyKey.d.ts.map +1 -0
  67. package/dist/cjs/Action/IrreversibleRetryRequiresIdempotencyKey.js +47 -0
  68. package/dist/cjs/Action/IrreversibleRetryRequiresIdempotencyKey.js.map +7 -0
  69. package/dist/cjs/Action/StepIdentity.d.ts +153 -0
  70. package/dist/cjs/Action/StepIdentity.d.ts.map +1 -0
  71. package/dist/cjs/Action/StepIdentity.js +75 -0
  72. package/dist/cjs/Action/StepIdentity.js.map +7 -0
  73. package/dist/cjs/Action/TreeArtifact.d.ts +8 -0
  74. package/dist/cjs/Action/TreeArtifact.d.ts.map +1 -0
  75. package/dist/cjs/Action/TreeArtifact.js +25 -0
  76. package/dist/cjs/Action/TreeArtifact.js.map +7 -0
  77. package/dist/cjs/Action/TypeId.d.ts +8 -0
  78. package/dist/cjs/Action/TypeId.d.ts.map +1 -0
  79. package/dist/cjs/Action/TypeId.js +25 -0
  80. package/dist/cjs/Action/TypeId.js.map +7 -0
  81. package/dist/cjs/Action/UncanonicalIdempotencyKey.d.ts +32 -0
  82. package/dist/cjs/Action/UncanonicalIdempotencyKey.d.ts.map +1 -0
  83. package/dist/cjs/Action/UncanonicalIdempotencyKey.js +51 -0
  84. package/dist/cjs/Action/UncanonicalIdempotencyKey.js.map +7 -0
  85. package/dist/cjs/Action/idempotencyKey.d.ts +21 -0
  86. package/dist/cjs/Action/idempotencyKey.d.ts.map +1 -0
  87. package/dist/cjs/Action/idempotencyKey.js +59 -0
  88. package/dist/cjs/Action/idempotencyKey.js.map +7 -0
  89. package/dist/cjs/Action/index.d.ts +29 -0
  90. package/dist/cjs/Action/index.d.ts.map +1 -0
  91. package/dist/cjs/Action/index.js +60 -0
  92. package/dist/cjs/Action/index.js.map +7 -0
  93. package/dist/cjs/Action/make.d.ts +128 -0
  94. package/dist/cjs/Action/make.d.ts.map +1 -0
  95. package/dist/cjs/Action/make.js +373 -0
  96. package/dist/cjs/Action/make.js.map +7 -0
  97. package/dist/cjs/Action/raceAll.d.ts +21 -0
  98. package/dist/cjs/Action/raceAll.d.ts.map +1 -0
  99. package/dist/cjs/Action/raceAll.js +46 -0
  100. package/dist/cjs/Action/raceAll.js.map +7 -0
  101. package/dist/cjs/Action/retry.d.ts +19 -0
  102. package/dist/cjs/Action/retry.d.ts.map +1 -0
  103. package/dist/cjs/Action/retry.js +75 -0
  104. package/dist/cjs/Action/retry.js.map +7 -0
  105. package/dist/cjs/Deadline.d.ts +105 -0
  106. package/dist/cjs/Deadline.d.ts.map +1 -0
  107. package/dist/cjs/Deadline.js +104 -0
  108. package/dist/cjs/Deadline.js.map +7 -0
  109. package/dist/cjs/DurableClock.d.ts +61 -0
  110. package/dist/cjs/DurableClock.d.ts.map +1 -0
  111. package/dist/cjs/DurableClock.js +90 -0
  112. package/dist/cjs/DurableClock.js.map +7 -0
  113. package/dist/cjs/DurableDeferred.d.ts +311 -0
  114. package/dist/cjs/DurableDeferred.d.ts.map +1 -0
  115. package/dist/cjs/DurableDeferred.js +322 -0
  116. package/dist/cjs/DurableDeferred.js.map +7 -0
  117. package/dist/cjs/DurableQueue.d.ts +160 -0
  118. package/dist/cjs/DurableQueue.d.ts.map +1 -0
  119. package/dist/cjs/DurableQueue.js +229 -0
  120. package/dist/cjs/DurableQueue.js.map +7 -0
  121. package/dist/cjs/ExternalJob.d.ts +179 -0
  122. package/dist/cjs/ExternalJob.d.ts.map +1 -0
  123. package/dist/cjs/ExternalJob.js +338 -0
  124. package/dist/cjs/ExternalJob.js.map +7 -0
  125. package/dist/cjs/Fault.d.ts +131 -0
  126. package/dist/cjs/Fault.d.ts.map +1 -0
  127. package/dist/cjs/Fault.js +157 -0
  128. package/dist/cjs/Fault.js.map +7 -0
  129. package/dist/cjs/Flow/Annotations.d.ts +245 -0
  130. package/dist/cjs/Flow/Annotations.d.ts.map +1 -0
  131. package/dist/cjs/Flow/Annotations.js +72 -0
  132. package/dist/cjs/Flow/Annotations.js.map +7 -0
  133. package/dist/cjs/Flow/CapabilityCeiling.d.ts +21 -0
  134. package/dist/cjs/Flow/CapabilityCeiling.d.ts.map +1 -0
  135. package/dist/cjs/Flow/CapabilityCeiling.js +49 -0
  136. package/dist/cjs/Flow/CapabilityCeiling.js.map +7 -0
  137. package/dist/cjs/Flow/DeadlineExceeded.d.ts +33 -0
  138. package/dist/cjs/Flow/DeadlineExceeded.d.ts.map +1 -0
  139. package/dist/cjs/Flow/DeadlineExceeded.js +52 -0
  140. package/dist/cjs/Flow/DeadlineExceeded.js.map +7 -0
  141. package/dist/cjs/Flow/ExecutionIdRequired.d.ts +25 -0
  142. package/dist/cjs/Flow/ExecutionIdRequired.d.ts.map +1 -0
  143. package/dist/cjs/Flow/ExecutionIdRequired.js +46 -0
  144. package/dist/cjs/Flow/ExecutionIdRequired.js.map +7 -0
  145. package/dist/cjs/Flow/ExecutionIds.d.ts +80 -0
  146. package/dist/cjs/Flow/ExecutionIds.d.ts.map +1 -0
  147. package/dist/cjs/Flow/ExecutionIds.js +66 -0
  148. package/dist/cjs/Flow/ExecutionIds.js.map +7 -0
  149. package/dist/cjs/Flow/Flow.d.ts +422 -0
  150. package/dist/cjs/Flow/Flow.d.ts.map +1 -0
  151. package/dist/cjs/Flow/Flow.js +17 -0
  152. package/dist/cjs/Flow/Flow.js.map +7 -0
  153. package/dist/cjs/Flow/MaxRoundsExceeded.d.ts +35 -0
  154. package/dist/cjs/Flow/MaxRoundsExceeded.d.ts.map +1 -0
  155. package/dist/cjs/Flow/MaxRoundsExceeded.js +50 -0
  156. package/dist/cjs/Flow/MaxRoundsExceeded.js.map +7 -0
  157. package/dist/cjs/Flow/Outcome.d.ts +162 -0
  158. package/dist/cjs/Flow/Outcome.d.ts.map +1 -0
  159. package/dist/cjs/Flow/Outcome.js +80 -0
  160. package/dist/cjs/Flow/Outcome.js.map +7 -0
  161. package/dist/cjs/Flow/Result.d.ts +186 -0
  162. package/dist/cjs/Flow/Result.d.ts.map +1 -0
  163. package/dist/cjs/Flow/Result.js +159 -0
  164. package/dist/cjs/Flow/Result.js.map +7 -0
  165. package/dist/cjs/Flow/Runtime.d.ts +98 -0
  166. package/dist/cjs/Flow/Runtime.d.ts.map +1 -0
  167. package/dist/cjs/Flow/Runtime.js +160 -0
  168. package/dist/cjs/Flow/Runtime.js.map +7 -0
  169. package/dist/cjs/Flow/TypeId.d.ts +8 -0
  170. package/dist/cjs/Flow/TypeId.d.ts.map +1 -0
  171. package/dist/cjs/Flow/TypeId.js +25 -0
  172. package/dist/cjs/Flow/TypeId.js.map +7 -0
  173. package/dist/cjs/Flow/index.d.ts +17 -0
  174. package/dist/cjs/Flow/index.d.ts.map +1 -0
  175. package/dist/cjs/Flow/index.js +29 -0
  176. package/dist/cjs/Flow/index.js.map +7 -0
  177. package/dist/cjs/Flow/internal.d.ts +34 -0
  178. package/dist/cjs/Flow/internal.d.ts.map +1 -0
  179. package/dist/cjs/Flow/internal.js +187 -0
  180. package/dist/cjs/Flow/internal.js.map +7 -0
  181. package/dist/cjs/Flow/make.d.ts +134 -0
  182. package/dist/cjs/Flow/make.d.ts.map +1 -0
  183. package/dist/cjs/Flow/make.js +104 -0
  184. package/dist/cjs/Flow/make.js.map +7 -0
  185. package/dist/cjs/FlowRuntime/CancelRequestFailed.d.ts +55 -0
  186. package/dist/cjs/FlowRuntime/CancelRequestFailed.d.ts.map +1 -0
  187. package/dist/cjs/FlowRuntime/CancelRequestFailed.js +51 -0
  188. package/dist/cjs/FlowRuntime/CancelRequestFailed.js.map +7 -0
  189. package/dist/cjs/FlowRuntime/ExecutionIdentityConflict.d.ts +23 -0
  190. package/dist/cjs/FlowRuntime/ExecutionIdentityConflict.d.ts.map +1 -0
  191. package/dist/cjs/FlowRuntime/ExecutionIdentityConflict.js +55 -0
  192. package/dist/cjs/FlowRuntime/ExecutionIdentityConflict.js.map +7 -0
  193. package/dist/cjs/FlowRuntime/FlowCycleDetected.d.ts +28 -0
  194. package/dist/cjs/FlowRuntime/FlowCycleDetected.d.ts.map +1 -0
  195. package/dist/cjs/FlowRuntime/FlowCycleDetected.js +49 -0
  196. package/dist/cjs/FlowRuntime/FlowCycleDetected.js.map +7 -0
  197. package/dist/cjs/FlowRuntime/FlowExecutionNotFound.d.ts +38 -0
  198. package/dist/cjs/FlowRuntime/FlowExecutionNotFound.d.ts.map +1 -0
  199. package/dist/cjs/FlowRuntime/FlowExecutionNotFound.js +53 -0
  200. package/dist/cjs/FlowRuntime/FlowExecutionNotFound.js.map +7 -0
  201. package/dist/cjs/FlowRuntime/FlowInstance.d.ts +115 -0
  202. package/dist/cjs/FlowRuntime/FlowInstance.d.ts.map +1 -0
  203. package/dist/cjs/FlowRuntime/FlowInstance.js +37 -0
  204. package/dist/cjs/FlowRuntime/FlowInstance.js.map +7 -0
  205. package/dist/cjs/FlowRuntime/FlowRuntime.d.ts +198 -0
  206. package/dist/cjs/FlowRuntime/FlowRuntime.d.ts.map +1 -0
  207. package/dist/cjs/FlowRuntime/FlowRuntime.js +37 -0
  208. package/dist/cjs/FlowRuntime/FlowRuntime.js.map +7 -0
  209. package/dist/cjs/FlowRuntime/NodeRecord.d.ts +175 -0
  210. package/dist/cjs/FlowRuntime/NodeRecord.d.ts.map +1 -0
  211. package/dist/cjs/FlowRuntime/NodeRecord.js +17 -0
  212. package/dist/cjs/FlowRuntime/NodeRecord.js.map +7 -0
  213. package/dist/cjs/FlowRuntime/WaitingAnnotation.d.ts +69 -0
  214. package/dist/cjs/FlowRuntime/WaitingAnnotation.d.ts.map +1 -0
  215. package/dist/cjs/FlowRuntime/WaitingAnnotation.js +53 -0
  216. package/dist/cjs/FlowRuntime/WaitingAnnotation.js.map +7 -0
  217. package/dist/cjs/FlowRuntime/index.d.ts +14 -0
  218. package/dist/cjs/FlowRuntime/index.d.ts.map +1 -0
  219. package/dist/cjs/FlowRuntime/index.js +26 -0
  220. package/dist/cjs/FlowRuntime/index.js.map +7 -0
  221. package/dist/cjs/Graph.d.ts +325 -0
  222. package/dist/cjs/Graph.d.ts.map +1 -0
  223. package/dist/cjs/Graph.js +1021 -0
  224. package/dist/cjs/Graph.js.map +7 -0
  225. package/dist/cjs/HumanTask.d.ts +440 -0
  226. package/dist/cjs/HumanTask.d.ts.map +1 -0
  227. package/dist/cjs/HumanTask.js +413 -0
  228. package/dist/cjs/HumanTask.js.map +7 -0
  229. package/dist/cjs/Interpreter.d.ts +222 -0
  230. package/dist/cjs/Interpreter.d.ts.map +1 -0
  231. package/dist/cjs/Interpreter.js +888 -0
  232. package/dist/cjs/Interpreter.js.map +7 -0
  233. package/dist/cjs/Poll.d.ts +238 -0
  234. package/dist/cjs/Poll.d.ts.map +1 -0
  235. package/dist/cjs/Poll.js +150 -0
  236. package/dist/cjs/Poll.js.map +7 -0
  237. package/dist/cjs/RetryPolicy.d.ts +273 -0
  238. package/dist/cjs/RetryPolicy.d.ts.map +1 -0
  239. package/dist/cjs/RetryPolicy.js +251 -0
  240. package/dist/cjs/RetryPolicy.js.map +7 -0
  241. package/dist/cjs/Sleep.d.ts +98 -0
  242. package/dist/cjs/Sleep.d.ts.map +1 -0
  243. package/dist/cjs/Sleep.js +133 -0
  244. package/dist/cjs/Sleep.js.map +7 -0
  245. package/dist/cjs/Stall.d.ts +173 -0
  246. package/dist/cjs/Stall.d.ts.map +1 -0
  247. package/dist/cjs/Stall.js +92 -0
  248. package/dist/cjs/Stall.js.map +7 -0
  249. package/dist/cjs/WaitFor.d.ts +109 -0
  250. package/dist/cjs/WaitFor.d.ts.map +1 -0
  251. package/dist/cjs/WaitFor.js +117 -0
  252. package/dist/cjs/WaitFor.js.map +7 -0
  253. package/dist/cjs/index.d.ts +107 -0
  254. package/dist/cjs/index.d.ts.map +1 -0
  255. package/dist/cjs/index.js +69 -0
  256. package/dist/cjs/index.js.map +7 -0
  257. package/dist/cjs/internal/BoundedJson.d.ts +48 -0
  258. package/dist/cjs/internal/BoundedJson.d.ts.map +1 -0
  259. package/dist/cjs/internal/BoundedJson.js +96 -0
  260. package/dist/cjs/internal/BoundedJson.js.map +7 -0
  261. package/dist/cjs/internal/DeclarationSite.d.ts +135 -0
  262. package/dist/cjs/internal/DeclarationSite.d.ts.map +1 -0
  263. package/dist/cjs/internal/DeclarationSite.js +89 -0
  264. package/dist/cjs/internal/DeclarationSite.js.map +7 -0
  265. package/dist/cjs/internal/Declarations.d.ts +35 -0
  266. package/dist/cjs/internal/Declarations.d.ts.map +1 -0
  267. package/dist/cjs/internal/Declarations.js +50 -0
  268. package/dist/cjs/internal/Declarations.js.map +7 -0
  269. package/dist/cjs/internal/ExecutionMiddleware.d.ts +21 -0
  270. package/dist/cjs/internal/ExecutionMiddleware.d.ts.map +1 -0
  271. package/dist/cjs/internal/ExecutionMiddleware.js +39 -0
  272. package/dist/cjs/internal/ExecutionMiddleware.js.map +7 -0
  273. package/dist/cjs/internal/JsonSchemaSubset.d.ts +133 -0
  274. package/dist/cjs/internal/JsonSchemaSubset.d.ts.map +1 -0
  275. package/dist/cjs/internal/JsonSchemaSubset.js +229 -0
  276. package/dist/cjs/internal/JsonSchemaSubset.js.map +7 -0
  277. package/dist/cjs/internal/OutcomeMarker.d.ts +18 -0
  278. package/dist/cjs/internal/OutcomeMarker.d.ts.map +1 -0
  279. package/dist/cjs/internal/OutcomeMarker.js +27 -0
  280. package/dist/cjs/internal/OutcomeMarker.js.map +7 -0
  281. package/dist/cjs/package.json +1 -0
  282. package/dist/esm/Action/Action.d.ts +250 -0
  283. package/dist/esm/Action/Action.d.ts.map +1 -0
  284. package/dist/esm/Action/Action.js +30 -0
  285. package/dist/esm/Action/Action.js.map +1 -0
  286. package/dist/esm/Action/AttemptTimedOut.d.ts +33 -0
  287. package/dist/esm/Action/AttemptTimedOut.d.ts.map +1 -0
  288. package/dist/esm/Action/AttemptTimedOut.js +32 -0
  289. package/dist/esm/Action/AttemptTimedOut.js.map +1 -0
  290. package/dist/esm/Action/BoundaryMode.d.ts +29 -0
  291. package/dist/esm/Action/BoundaryMode.d.ts.map +1 -0
  292. package/dist/esm/Action/BoundaryMode.js +23 -0
  293. package/dist/esm/Action/BoundaryMode.js.map +1 -0
  294. package/dist/esm/Action/CacheEnvironment.d.ts +158 -0
  295. package/dist/esm/Action/CacheEnvironment.d.ts.map +1 -0
  296. package/dist/esm/Action/CacheEnvironment.js +130 -0
  297. package/dist/esm/Action/CacheEnvironment.js.map +1 -0
  298. package/dist/esm/Action/ConcurrentKeylessDispatch.d.ts +34 -0
  299. package/dist/esm/Action/ConcurrentKeylessDispatch.d.ts.map +1 -0
  300. package/dist/esm/Action/ConcurrentKeylessDispatch.js +33 -0
  301. package/dist/esm/Action/ConcurrentKeylessDispatch.js.map +1 -0
  302. package/dist/esm/Action/Context.d.ts +131 -0
  303. package/dist/esm/Action/Context.d.ts.map +1 -0
  304. package/dist/esm/Action/Context.js +99 -0
  305. package/dist/esm/Action/Context.js.map +1 -0
  306. package/dist/esm/Action/DuplicateImplementation.d.ts +20 -0
  307. package/dist/esm/Action/DuplicateImplementation.d.ts.map +1 -0
  308. package/dist/esm/Action/DuplicateImplementation.js +20 -0
  309. package/dist/esm/Action/DuplicateImplementation.js.map +1 -0
  310. package/dist/esm/Action/FileBoundary.d.ts +59 -0
  311. package/dist/esm/Action/FileBoundary.d.ts.map +1 -0
  312. package/dist/esm/Action/FileBoundary.js +60 -0
  313. package/dist/esm/Action/FileBoundary.js.map +1 -0
  314. package/dist/esm/Action/FileInput.d.ts +28 -0
  315. package/dist/esm/Action/FileInput.d.ts.map +1 -0
  316. package/dist/esm/Action/FileInput.js +32 -0
  317. package/dist/esm/Action/FileInput.js.map +1 -0
  318. package/dist/esm/Action/Filegroup.d.ts +16 -0
  319. package/dist/esm/Action/Filegroup.d.ts.map +1 -0
  320. package/dist/esm/Action/Filegroup.js +15 -0
  321. package/dist/esm/Action/Filegroup.js.map +1 -0
  322. package/dist/esm/Action/Glob.d.ts +8 -0
  323. package/dist/esm/Action/Glob.d.ts.map +1 -0
  324. package/dist/esm/Action/Glob.js +7 -0
  325. package/dist/esm/Action/Glob.js.map +1 -0
  326. package/dist/esm/Action/ImplementationVersionMismatch.d.ts +26 -0
  327. package/dist/esm/Action/ImplementationVersionMismatch.d.ts.map +1 -0
  328. package/dist/esm/Action/ImplementationVersionMismatch.js +24 -0
  329. package/dist/esm/Action/ImplementationVersionMismatch.js.map +1 -0
  330. package/dist/esm/Action/Implementations.d.ts +114 -0
  331. package/dist/esm/Action/Implementations.d.ts.map +1 -0
  332. package/dist/esm/Action/Implementations.js +94 -0
  333. package/dist/esm/Action/Implementations.js.map +1 -0
  334. package/dist/esm/Action/InfraInterrupt.d.ts +26 -0
  335. package/dist/esm/Action/InfraInterrupt.d.ts.map +1 -0
  336. package/dist/esm/Action/InfraInterrupt.js +25 -0
  337. package/dist/esm/Action/InfraInterrupt.js.map +1 -0
  338. package/dist/esm/Action/InfraInterruptRetriesExhausted.d.ts +33 -0
  339. package/dist/esm/Action/InfraInterruptRetriesExhausted.d.ts.map +1 -0
  340. package/dist/esm/Action/InfraInterruptRetriesExhausted.js +32 -0
  341. package/dist/esm/Action/InfraInterruptRetriesExhausted.js.map +1 -0
  342. package/dist/esm/Action/IrreversibleRetryRequiresIdempotencyKey.d.ts +26 -0
  343. package/dist/esm/Action/IrreversibleRetryRequiresIdempotencyKey.d.ts.map +1 -0
  344. package/dist/esm/Action/IrreversibleRetryRequiresIdempotencyKey.js +25 -0
  345. package/dist/esm/Action/IrreversibleRetryRequiresIdempotencyKey.js.map +1 -0
  346. package/dist/esm/Action/StepIdentity.d.ts +153 -0
  347. package/dist/esm/Action/StepIdentity.d.ts.map +1 -0
  348. package/dist/esm/Action/StepIdentity.js +139 -0
  349. package/dist/esm/Action/StepIdentity.js.map +1 -0
  350. package/dist/esm/Action/TreeArtifact.d.ts +8 -0
  351. package/dist/esm/Action/TreeArtifact.d.ts.map +1 -0
  352. package/dist/esm/Action/TreeArtifact.js +7 -0
  353. package/dist/esm/Action/TreeArtifact.js.map +1 -0
  354. package/dist/esm/Action/TypeId.d.ts +8 -0
  355. package/dist/esm/Action/TypeId.d.ts.map +1 -0
  356. package/dist/esm/Action/TypeId.js +9 -0
  357. package/dist/esm/Action/TypeId.js.map +1 -0
  358. package/dist/esm/Action/UncanonicalIdempotencyKey.d.ts +32 -0
  359. package/dist/esm/Action/UncanonicalIdempotencyKey.d.ts.map +1 -0
  360. package/dist/esm/Action/UncanonicalIdempotencyKey.js +31 -0
  361. package/dist/esm/Action/UncanonicalIdempotencyKey.js.map +1 -0
  362. package/dist/esm/Action/idempotencyKey.d.ts +21 -0
  363. package/dist/esm/Action/idempotencyKey.d.ts.map +1 -0
  364. package/dist/esm/Action/idempotencyKey.js +50 -0
  365. package/dist/esm/Action/idempotencyKey.js.map +1 -0
  366. package/dist/esm/Action/index.d.ts +29 -0
  367. package/dist/esm/Action/index.d.ts.map +1 -0
  368. package/dist/esm/Action/index.js +30 -0
  369. package/dist/esm/Action/index.js.map +1 -0
  370. package/dist/esm/Action/make.d.ts +128 -0
  371. package/dist/esm/Action/make.d.ts.map +1 -0
  372. package/dist/esm/Action/make.js +405 -0
  373. package/dist/esm/Action/make.js.map +1 -0
  374. package/dist/esm/Action/raceAll.d.ts +21 -0
  375. package/dist/esm/Action/raceAll.d.ts.map +1 -0
  376. package/dist/esm/Action/raceAll.js +20 -0
  377. package/dist/esm/Action/raceAll.js.map +1 -0
  378. package/dist/esm/Action/retry.d.ts +19 -0
  379. package/dist/esm/Action/retry.d.ts.map +1 -0
  380. package/dist/esm/Action/retry.js +72 -0
  381. package/dist/esm/Action/retry.js.map +1 -0
  382. package/dist/esm/Deadline.d.ts +105 -0
  383. package/dist/esm/Deadline.d.ts.map +1 -0
  384. package/dist/esm/Deadline.js +152 -0
  385. package/dist/esm/Deadline.js.map +1 -0
  386. package/dist/esm/DurableClock.d.ts +61 -0
  387. package/dist/esm/DurableClock.d.ts.map +1 -0
  388. package/dist/esm/DurableClock.js +75 -0
  389. package/dist/esm/DurableClock.js.map +1 -0
  390. package/dist/esm/DurableDeferred.d.ts +311 -0
  391. package/dist/esm/DurableDeferred.d.ts.map +1 -0
  392. package/dist/esm/DurableDeferred.js +357 -0
  393. package/dist/esm/DurableDeferred.js.map +1 -0
  394. package/dist/esm/DurableQueue.d.ts +160 -0
  395. package/dist/esm/DurableQueue.d.ts.map +1 -0
  396. package/dist/esm/DurableQueue.js +303 -0
  397. package/dist/esm/DurableQueue.js.map +1 -0
  398. package/dist/esm/ExternalJob.d.ts +179 -0
  399. package/dist/esm/ExternalJob.d.ts.map +1 -0
  400. package/dist/esm/ExternalJob.js +296 -0
  401. package/dist/esm/ExternalJob.js.map +1 -0
  402. package/dist/esm/Fault.d.ts +131 -0
  403. package/dist/esm/Fault.d.ts.map +1 -0
  404. package/dist/esm/Fault.js +198 -0
  405. package/dist/esm/Fault.js.map +1 -0
  406. package/dist/esm/Flow/Annotations.d.ts +245 -0
  407. package/dist/esm/Flow/Annotations.d.ts.map +1 -0
  408. package/dist/esm/Flow/Annotations.js +110 -0
  409. package/dist/esm/Flow/Annotations.js.map +1 -0
  410. package/dist/esm/Flow/CapabilityCeiling.d.ts +21 -0
  411. package/dist/esm/Flow/CapabilityCeiling.d.ts.map +1 -0
  412. package/dist/esm/Flow/CapabilityCeiling.js +27 -0
  413. package/dist/esm/Flow/CapabilityCeiling.js.map +1 -0
  414. package/dist/esm/Flow/DeadlineExceeded.d.ts +33 -0
  415. package/dist/esm/Flow/DeadlineExceeded.d.ts.map +1 -0
  416. package/dist/esm/Flow/DeadlineExceeded.js +34 -0
  417. package/dist/esm/Flow/DeadlineExceeded.js.map +1 -0
  418. package/dist/esm/Flow/ExecutionIdRequired.d.ts +25 -0
  419. package/dist/esm/Flow/ExecutionIdRequired.d.ts.map +1 -0
  420. package/dist/esm/Flow/ExecutionIdRequired.js +30 -0
  421. package/dist/esm/Flow/ExecutionIdRequired.js.map +1 -0
  422. package/dist/esm/Flow/ExecutionIds.d.ts +80 -0
  423. package/dist/esm/Flow/ExecutionIds.d.ts.map +1 -0
  424. package/dist/esm/Flow/ExecutionIds.js +91 -0
  425. package/dist/esm/Flow/ExecutionIds.js.map +1 -0
  426. package/dist/esm/Flow/Flow.d.ts +422 -0
  427. package/dist/esm/Flow/Flow.d.ts.map +1 -0
  428. package/dist/esm/Flow/Flow.js +3 -0
  429. package/dist/esm/Flow/Flow.js.map +1 -0
  430. package/dist/esm/Flow/MaxRoundsExceeded.d.ts +35 -0
  431. package/dist/esm/Flow/MaxRoundsExceeded.d.ts.map +1 -0
  432. package/dist/esm/Flow/MaxRoundsExceeded.js +34 -0
  433. package/dist/esm/Flow/MaxRoundsExceeded.js.map +1 -0
  434. package/dist/esm/Flow/Outcome.d.ts +162 -0
  435. package/dist/esm/Flow/Outcome.d.ts.map +1 -0
  436. package/dist/esm/Flow/Outcome.js +115 -0
  437. package/dist/esm/Flow/Outcome.js.map +1 -0
  438. package/dist/esm/Flow/Result.d.ts +186 -0
  439. package/dist/esm/Flow/Result.d.ts.map +1 -0
  440. package/dist/esm/Flow/Result.js +171 -0
  441. package/dist/esm/Flow/Result.js.map +1 -0
  442. package/dist/esm/Flow/Runtime.d.ts +98 -0
  443. package/dist/esm/Flow/Runtime.d.ts.map +1 -0
  444. package/dist/esm/Flow/Runtime.js +231 -0
  445. package/dist/esm/Flow/Runtime.js.map +1 -0
  446. package/dist/esm/Flow/TypeId.d.ts +8 -0
  447. package/dist/esm/Flow/TypeId.d.ts.map +1 -0
  448. package/dist/esm/Flow/TypeId.js +9 -0
  449. package/dist/esm/Flow/TypeId.js.map +1 -0
  450. package/dist/esm/Flow/index.d.ts +17 -0
  451. package/dist/esm/Flow/index.d.ts.map +1 -0
  452. package/dist/esm/Flow/index.js +18 -0
  453. package/dist/esm/Flow/index.js.map +1 -0
  454. package/dist/esm/Flow/internal.d.ts +34 -0
  455. package/dist/esm/Flow/internal.d.ts.map +1 -0
  456. package/dist/esm/Flow/internal.js +149 -0
  457. package/dist/esm/Flow/internal.js.map +1 -0
  458. package/dist/esm/Flow/make.d.ts +134 -0
  459. package/dist/esm/Flow/make.d.ts.map +1 -0
  460. package/dist/esm/Flow/make.js +106 -0
  461. package/dist/esm/Flow/make.js.map +1 -0
  462. package/dist/esm/FlowRuntime/CancelRequestFailed.d.ts +55 -0
  463. package/dist/esm/FlowRuntime/CancelRequestFailed.d.ts.map +1 -0
  464. package/dist/esm/FlowRuntime/CancelRequestFailed.js +53 -0
  465. package/dist/esm/FlowRuntime/CancelRequestFailed.js.map +1 -0
  466. package/dist/esm/FlowRuntime/ExecutionIdentityConflict.d.ts +23 -0
  467. package/dist/esm/FlowRuntime/ExecutionIdentityConflict.d.ts.map +1 -0
  468. package/dist/esm/FlowRuntime/ExecutionIdentityConflict.js +24 -0
  469. package/dist/esm/FlowRuntime/ExecutionIdentityConflict.js.map +1 -0
  470. package/dist/esm/FlowRuntime/FlowCycleDetected.d.ts +28 -0
  471. package/dist/esm/FlowRuntime/FlowCycleDetected.d.ts.map +1 -0
  472. package/dist/esm/FlowRuntime/FlowCycleDetected.js +35 -0
  473. package/dist/esm/FlowRuntime/FlowCycleDetected.js.map +1 -0
  474. package/dist/esm/FlowRuntime/FlowExecutionNotFound.d.ts +38 -0
  475. package/dist/esm/FlowRuntime/FlowExecutionNotFound.d.ts.map +1 -0
  476. package/dist/esm/FlowRuntime/FlowExecutionNotFound.js +40 -0
  477. package/dist/esm/FlowRuntime/FlowExecutionNotFound.js.map +1 -0
  478. package/dist/esm/FlowRuntime/FlowInstance.d.ts +115 -0
  479. package/dist/esm/FlowRuntime/FlowInstance.d.ts.map +1 -0
  480. package/dist/esm/FlowRuntime/FlowInstance.js +24 -0
  481. package/dist/esm/FlowRuntime/FlowInstance.js.map +1 -0
  482. package/dist/esm/FlowRuntime/FlowRuntime.d.ts +198 -0
  483. package/dist/esm/FlowRuntime/FlowRuntime.d.ts.map +1 -0
  484. package/dist/esm/FlowRuntime/FlowRuntime.js +34 -0
  485. package/dist/esm/FlowRuntime/FlowRuntime.js.map +1 -0
  486. package/dist/esm/FlowRuntime/NodeRecord.d.ts +175 -0
  487. package/dist/esm/FlowRuntime/NodeRecord.d.ts.map +1 -0
  488. package/dist/esm/FlowRuntime/NodeRecord.js +21 -0
  489. package/dist/esm/FlowRuntime/NodeRecord.js.map +1 -0
  490. package/dist/esm/FlowRuntime/WaitingAnnotation.d.ts +69 -0
  491. package/dist/esm/FlowRuntime/WaitingAnnotation.d.ts.map +1 -0
  492. package/dist/esm/FlowRuntime/WaitingAnnotation.js +53 -0
  493. package/dist/esm/FlowRuntime/WaitingAnnotation.js.map +1 -0
  494. package/dist/esm/FlowRuntime/index.d.ts +14 -0
  495. package/dist/esm/FlowRuntime/index.d.ts.map +1 -0
  496. package/dist/esm/FlowRuntime/index.js +15 -0
  497. package/dist/esm/FlowRuntime/index.js.map +1 -0
  498. package/dist/esm/Graph.d.ts +325 -0
  499. package/dist/esm/Graph.d.ts.map +1 -0
  500. package/dist/esm/Graph.js +1483 -0
  501. package/dist/esm/Graph.js.map +1 -0
  502. package/dist/esm/HumanTask.d.ts +440 -0
  503. package/dist/esm/HumanTask.d.ts.map +1 -0
  504. package/dist/esm/HumanTask.js +794 -0
  505. package/dist/esm/HumanTask.js.map +1 -0
  506. package/dist/esm/Interpreter.d.ts +222 -0
  507. package/dist/esm/Interpreter.d.ts.map +1 -0
  508. package/dist/esm/Interpreter.js +1269 -0
  509. package/dist/esm/Interpreter.js.map +1 -0
  510. package/dist/esm/Poll.d.ts +238 -0
  511. package/dist/esm/Poll.d.ts.map +1 -0
  512. package/dist/esm/Poll.js +282 -0
  513. package/dist/esm/Poll.js.map +1 -0
  514. package/dist/esm/RetryPolicy.d.ts +273 -0
  515. package/dist/esm/RetryPolicy.d.ts.map +1 -0
  516. package/dist/esm/RetryPolicy.js +429 -0
  517. package/dist/esm/RetryPolicy.js.map +1 -0
  518. package/dist/esm/Sleep.d.ts +98 -0
  519. package/dist/esm/Sleep.d.ts.map +1 -0
  520. package/dist/esm/Sleep.js +230 -0
  521. package/dist/esm/Sleep.js.map +1 -0
  522. package/dist/esm/Stall.d.ts +173 -0
  523. package/dist/esm/Stall.d.ts.map +1 -0
  524. package/dist/esm/Stall.js +138 -0
  525. package/dist/esm/Stall.js.map +1 -0
  526. package/dist/esm/WaitFor.d.ts +109 -0
  527. package/dist/esm/WaitFor.d.ts.map +1 -0
  528. package/dist/esm/WaitFor.js +184 -0
  529. package/dist/esm/WaitFor.js.map +1 -0
  530. package/dist/esm/index.d.ts +107 -0
  531. package/dist/esm/index.d.ts.map +1 -0
  532. package/dist/esm/index.js +108 -0
  533. package/dist/esm/index.js.map +1 -0
  534. package/dist/esm/internal/BoundedJson.d.ts +48 -0
  535. package/dist/esm/internal/BoundedJson.d.ts.map +1 -0
  536. package/dist/esm/internal/BoundedJson.js +107 -0
  537. package/dist/esm/internal/BoundedJson.js.map +1 -0
  538. package/dist/esm/internal/DeclarationSite.d.ts +135 -0
  539. package/dist/esm/internal/DeclarationSite.d.ts.map +1 -0
  540. package/dist/esm/internal/DeclarationSite.js +196 -0
  541. package/dist/esm/internal/DeclarationSite.js.map +1 -0
  542. package/dist/esm/internal/Declarations.d.ts +35 -0
  543. package/dist/esm/internal/Declarations.d.ts.map +1 -0
  544. package/dist/esm/internal/Declarations.js +43 -0
  545. package/dist/esm/internal/Declarations.js.map +1 -0
  546. package/dist/esm/internal/ExecutionMiddleware.d.ts +21 -0
  547. package/dist/esm/internal/ExecutionMiddleware.d.ts.map +1 -0
  548. package/dist/esm/internal/ExecutionMiddleware.js +13 -0
  549. package/dist/esm/internal/ExecutionMiddleware.js.map +1 -0
  550. package/dist/esm/internal/JsonSchemaSubset.d.ts +133 -0
  551. package/dist/esm/internal/JsonSchemaSubset.d.ts.map +1 -0
  552. package/dist/esm/internal/JsonSchemaSubset.js +363 -0
  553. package/dist/esm/internal/JsonSchemaSubset.js.map +1 -0
  554. package/dist/esm/internal/OutcomeMarker.d.ts +18 -0
  555. package/dist/esm/internal/OutcomeMarker.d.ts.map +1 -0
  556. package/dist/esm/internal/OutcomeMarker.js +18 -0
  557. package/dist/esm/internal/OutcomeMarker.js.map +1 -0
  558. package/docs/README.md +150 -0
  559. package/docs/api.md +436 -0
  560. package/docs/concepts/bodies-and-plans.md +157 -0
  561. package/docs/concepts/execution-identity.md +142 -0
  562. package/docs/concepts/flows-and-actions.md +129 -0
  563. package/docs/concepts/suspension-and-replay.md +130 -0
  564. package/docs/concepts/the-runtime-port.md +110 -0
  565. package/docs/concepts/trampoline-rounds.md +151 -0
  566. package/docs/guides/ask-a-person.md +184 -0
  567. package/docs/guides/build-a-body.md +161 -0
  568. package/docs/guides/cancel-and-roll-back.md +112 -0
  569. package/docs/guides/implement-an-action.md +147 -0
  570. package/docs/guides/inspect-the-plan.md +154 -0
  571. package/docs/guides/poll-until-ready.md +167 -0
  572. package/docs/guides/queue-work-to-a-worker.md +122 -0
  573. package/docs/guides/retry-a-failing-action.md +243 -0
  574. package/docs/guides/reuse-a-recorded-result.md +122 -0
  575. package/docs/guides/run-a-child-flow.md +108 -0
  576. package/docs/guides/run-an-external-job.md +86 -0
  577. package/docs/guides/use-a-prompt.md +38 -0
  578. package/docs/guides/wait-for-a-deadline.md +141 -0
  579. package/docs/guides/wait-for-an-external-signal.md +151 -0
  580. package/docs/installation.md +82 -0
  581. package/docs/quickstart.md +155 -0
  582. package/docs/reference/flow.md +1831 -0
  583. package/docs/testing.md +157 -0
  584. package/docs/troubleshooting.md +286 -0
  585. package/package.json +327 -3
  586. package/src/Action/Action.ts +333 -0
  587. package/src/Action/AttemptTimedOut.ts +37 -0
  588. package/src/Action/BoundaryMode.ts +33 -0
  589. package/src/Action/CacheEnvironment.ts +170 -0
  590. package/src/Action/ConcurrentKeylessDispatch.ts +38 -0
  591. package/src/Action/Context.ts +156 -0
  592. package/src/Action/DuplicateImplementation.ts +24 -0
  593. package/src/Action/FileBoundary.ts +77 -0
  594. package/src/Action/FileInput.ts +42 -0
  595. package/src/Action/Filegroup.ts +16 -0
  596. package/src/Action/Glob.ts +8 -0
  597. package/src/Action/ImplementationVersionMismatch.ts +27 -0
  598. package/src/Action/Implementations.ts +149 -0
  599. package/src/Action/InfraInterrupt.ts +30 -0
  600. package/src/Action/InfraInterruptRetriesExhausted.ts +37 -0
  601. package/src/Action/IrreversibleRetryRequiresIdempotencyKey.ts +32 -0
  602. package/src/Action/StepIdentity.ts +219 -0
  603. package/src/Action/TreeArtifact.ts +8 -0
  604. package/src/Action/TypeId.ts +9 -0
  605. package/src/Action/UncanonicalIdempotencyKey.ts +36 -0
  606. package/src/Action/idempotencyKey.ts +67 -0
  607. package/src/Action/index.ts +31 -0
  608. package/src/Action/make.ts +657 -0
  609. package/src/Action/raceAll.ts +48 -0
  610. package/src/Action/retry.ts +92 -0
  611. package/src/Deadline.ts +185 -0
  612. package/src/DurableClock.ts +133 -0
  613. package/src/DurableDeferred.ts +753 -0
  614. package/src/DurableQueue.ts +519 -0
  615. package/src/ExternalJob.ts +432 -0
  616. package/src/Fault.ts +279 -0
  617. package/src/Flow/Annotations.ts +151 -0
  618. package/src/Flow/CapabilityCeiling.ts +37 -0
  619. package/src/Flow/DeadlineExceeded.ts +40 -0
  620. package/src/Flow/ExecutionIdRequired.ts +36 -0
  621. package/src/Flow/ExecutionIds.ts +133 -0
  622. package/src/Flow/Flow.ts +576 -0
  623. package/src/Flow/MaxRoundsExceeded.ts +39 -0
  624. package/src/Flow/Outcome.ts +179 -0
  625. package/src/Flow/Result.ts +284 -0
  626. package/src/Flow/Runtime.ts +309 -0
  627. package/src/Flow/TypeId.ts +9 -0
  628. package/src/Flow/index.ts +19 -0
  629. package/src/Flow/internal.ts +237 -0
  630. package/src/Flow/make.ts +279 -0
  631. package/src/FlowRuntime/CancelRequestFailed.ts +56 -0
  632. package/src/FlowRuntime/ExecutionIdentityConflict.ts +32 -0
  633. package/src/FlowRuntime/FlowCycleDetected.ts +41 -0
  634. package/src/FlowRuntime/FlowExecutionNotFound.ts +46 -0
  635. package/src/FlowRuntime/FlowInstance.ts +128 -0
  636. package/src/FlowRuntime/FlowRuntime.ts +333 -0
  637. package/src/FlowRuntime/NodeRecord.ts +183 -0
  638. package/src/FlowRuntime/WaitingAnnotation.ts +85 -0
  639. package/src/FlowRuntime/index.ts +17 -0
  640. package/src/Graph.ts +1862 -0
  641. package/src/HumanTask.ts +1003 -0
  642. package/src/Interpreter.ts +1593 -0
  643. package/src/Poll.ts +414 -0
  644. package/src/RetryPolicy.ts +550 -0
  645. package/src/Sleep.ts +267 -0
  646. package/src/Stall.ts +217 -0
  647. package/src/WaitFor.ts +228 -0
  648. package/src/index.ts +125 -0
  649. package/src/internal/BoundedJson.ts +109 -0
  650. package/src/internal/DeclarationSite.ts +214 -0
  651. package/src/internal/Declarations.ts +49 -0
  652. package/src/internal/ExecutionMiddleware.ts +29 -0
  653. package/src/internal/JsonSchemaSubset.ts +392 -0
  654. package/src/internal/OutcomeMarker.ts +19 -0
@@ -0,0 +1,753 @@
1
+ // Deep reviewed and polished by a human on 2026-08-10.
2
+
3
+ /**
4
+ * Defines named wait points for durable flow executions.
5
+ *
6
+ * A `DurableDeferred` has a stable name and schemas for the value that will be
7
+ * recorded later. Flows can await it, suspend when no result exists yet, and
8
+ * resume after its result is recorded. Tokens identify the flow name,
9
+ * execution id, and deferred name so external code can complete the correct
10
+ * wait point later.
11
+ *
12
+ * @since 0.1.0
13
+ */
14
+
15
+ import * as Arr from "effect/Array"
16
+ import type { NonEmptyReadonlyArray } from "effect/Array"
17
+ import type * as Brand from "effect/Brand"
18
+ import * as Cause from "effect/Cause"
19
+ import * as Context from "effect/Context"
20
+ import type * as Crypto from "effect/Crypto"
21
+ import * as Effect from "effect/Effect"
22
+ import * as Encoding from "effect/Encoding"
23
+ import * as Exit from "effect/Exit"
24
+ import * as Filter from "effect/Filter"
25
+ import { dual } from "effect/Function"
26
+ import * as Option from "effect/Option"
27
+ import * as Schema from "effect/Schema"
28
+ import * as SchemaGetter from "effect/SchemaGetter"
29
+ import { CurrentAttempt } from "./Action/Context.ts"
30
+ import * as Flow from "./Flow/index.ts"
31
+ import { FlowInstance } from "./FlowRuntime/FlowInstance.ts"
32
+ import { FlowRuntime } from "./FlowRuntime/FlowRuntime.ts"
33
+
34
+ const TypeId = "@smthrs/flow/DurableDeferred"
35
+
36
+ /**
37
+ * Named durable deferred value whose completion is persisted by the flow
38
+ * engine and encoded with success and error schemas.
39
+ *
40
+ * @category models
41
+ * @since 0.1.0
42
+ */
43
+ export interface DurableDeferred<
44
+ Success extends Schema.Constraint,
45
+ Error extends Schema.Constraint = Schema.Never
46
+ > {
47
+ readonly [TypeId]: typeof TypeId
48
+ readonly name: string
49
+ readonly successSchema: Success
50
+ readonly errorSchema: Error
51
+ readonly exitSchema: Schema.Exit<Schema.Top, Schema.Top, Schema.Top>
52
+ readonly withActionAttempt: Effect.Effect<DurableDeferred<Success, Error>>
53
+ }
54
+
55
+ /**
56
+ * Type-erased durable deferred shape for APIs that only need the deferred
57
+ * identity and name.
58
+ *
59
+ * @category models
60
+ * @since 0.1.0
61
+ */
62
+ export interface Any {
63
+ readonly [TypeId]: typeof TypeId
64
+ readonly name: string
65
+ }
66
+
67
+ /**
68
+ * Type-erased durable deferred shape that also exposes success, error, and
69
+ * exit schemas.
70
+ *
71
+ * @category models
72
+ * @since 0.1.0
73
+ */
74
+ export interface AnyWithProps {
75
+ readonly [TypeId]: typeof TypeId
76
+ readonly name: string
77
+ readonly successSchema: Schema.Top
78
+ readonly errorSchema: Schema.Top
79
+ readonly exitSchema: Schema.Exit<any, any, any>
80
+ }
81
+
82
+ // Queues, human tasks and clocks mint a deferred per item, attempt or sleep.
83
+ // Effect caches compiled parsers by AST identity, so the exit schema is shared
84
+ // per (success, error) pair rather than rebuilt for every deferred.
85
+ const exitSchemaCache = new WeakMap<object, WeakMap<object, Schema.Exit<any, any, any>>>()
86
+
87
+ const exitSchemaFor = (success: Schema.Constraint, error: Schema.Constraint): Schema.Exit<any, any, any> => {
88
+ let byError = exitSchemaCache.get(success)
89
+ if (byError === undefined) {
90
+ byError = new WeakMap()
91
+ exitSchemaCache.set(success, byError)
92
+ }
93
+ let cached = byError.get(error)
94
+ if (cached === undefined) {
95
+ cached = Schema.Exit(
96
+ Schema.toCodecJson(success),
97
+ Schema.toCodecJson(error),
98
+ Schema.toCodecJson(Schema.Defect())
99
+ )
100
+ byError.set(error, cached)
101
+ }
102
+ return cached
103
+ }
104
+
105
+ /**
106
+ * Creates a named durable deferred with optional success and error schemas for
107
+ * persisted completion.
108
+ *
109
+ * @category constructors
110
+ * @since 0.1.0
111
+ */
112
+ export const make = <
113
+ Success extends Schema.Constraint = Schema.Void,
114
+ Error extends Schema.Constraint = Schema.Never
115
+ >(
116
+ name: string,
117
+ options?: {
118
+ readonly success?: Success | undefined
119
+ readonly error?: Error | undefined
120
+ }
121
+ ): DurableDeferred<Success, Error> => {
122
+ const successSchema = options?.success ?? (Schema.Void as any as Success)
123
+ const errorSchema = options?.error ?? (Schema.Never as any as Error)
124
+ return {
125
+ [TypeId]: TypeId as typeof TypeId,
126
+ name,
127
+ successSchema,
128
+ errorSchema,
129
+ exitSchema: exitSchemaFor(successSchema, errorSchema) as any,
130
+ withActionAttempt: Effect.gen(function*() {
131
+ const attempt = yield* CurrentAttempt
132
+ return make(`${name}/${attempt}`, {
133
+ success: successSchema,
134
+ error: errorSchema
135
+ })
136
+ })
137
+ }
138
+ }
139
+
140
+ const await_: <Success extends Schema.Constraint, Error extends Schema.Constraint>(
141
+ self: DurableDeferred<Success, Error>
142
+ ) => Effect.Effect<
143
+ Success["Type"],
144
+ Error["Type"],
145
+ | FlowRuntime
146
+ | FlowInstance
147
+ | Success["DecodingServices"]
148
+ | Error["DecodingServices"]
149
+ > =
150
+ // Untraced because deferred polling participates in the flow scheduler hot path.
151
+ Effect.fnUntraced(function*<
152
+ Success extends Schema.Constraint,
153
+ Error extends Schema.Constraint
154
+ >(self: DurableDeferred<Success, Error>) {
155
+ const engine = yield* FlowRuntime
156
+ const instance = yield* FlowInstance
157
+ const exit = yield* Flow.wrapActionResult(
158
+ engine.deferredResult(self),
159
+ Option.isNone
160
+ )
161
+ if (Option.isNone(exit)) {
162
+ return yield* Flow.suspend(instance)
163
+ }
164
+ const value = exit.value as Exit.Exit<any, any>
165
+ // A recorded interruption is a durable *outcome*, not a request to
166
+ // suspend: mark the instance interrupted before re-raising so
167
+ // `Flow.intoResult` classifies the interrupt-only cause as a `Complete`
168
+ // failure. Without this the driver mistakes the cause for an external
169
+ // suspension interrupt, aborts without a terminal transition, and the
170
+ // run spins in the suspended-retry loop forever.
171
+ if (Exit.isFailure(value) && Cause.hasInterruptsOnly(value.cause)) {
172
+ instance.interrupted = true
173
+ }
174
+ return yield* value
175
+ })
176
+
177
+ export {
178
+ /**
179
+ * Waits for the durable deferred, suspending the current flow when no
180
+ * persisted completion is available.
181
+ *
182
+ * @category combinators
183
+ * @since 0.1.0
184
+ */
185
+ await_ as await
186
+ }
187
+
188
+ /**
189
+ * Runs an effect and records its exit into the durable deferred, resuming
190
+ * flows that are waiting on that deferred.
191
+ *
192
+ * @category combinators
193
+ * @since 0.1.0
194
+ */
195
+ export const into: {
196
+ <Success extends Schema.Constraint, Error extends Schema.Constraint>(
197
+ self: DurableDeferred<Success, Error>
198
+ ): <R>(
199
+ effect: Effect.Effect<Success["Type"], Error["Type"], R>
200
+ ) => Effect.Effect<
201
+ Success["Type"],
202
+ Error["Type"],
203
+ | R
204
+ | FlowRuntime
205
+ | FlowInstance
206
+ | Success["DecodingServices"]
207
+ | Success["EncodingServices"]
208
+ | Error["DecodingServices"]
209
+ | Error["EncodingServices"]
210
+ >
211
+ <Success extends Schema.Constraint, Error extends Schema.Constraint, R>(
212
+ effect: Effect.Effect<Success["Type"], Error["Type"], R>,
213
+ self: DurableDeferred<Success, Error>
214
+ ): Effect.Effect<
215
+ Success["Type"],
216
+ Error["Type"],
217
+ | R
218
+ | FlowRuntime
219
+ | FlowInstance
220
+ | Success["DecodingServices"]
221
+ | Success["EncodingServices"]
222
+ | Error["DecodingServices"]
223
+ | Error["EncodingServices"]
224
+ >
225
+ } = dual(
226
+ 2,
227
+ <Success extends Schema.Constraint, Error extends Schema.Constraint, R>(
228
+ effect: Effect.Effect<Success["Type"], Error["Type"], R>,
229
+ self: DurableDeferred<Success, Error>
230
+ ): Effect.Effect<
231
+ Success["Type"],
232
+ Error["Type"],
233
+ | R
234
+ | FlowRuntime
235
+ | FlowInstance
236
+ | Success["DecodingServices"]
237
+ | Success["EncodingServices"]
238
+ | Error["DecodingServices"]
239
+ | Error["EncodingServices"]
240
+ > =>
241
+ Effect.contextWith(
242
+ (context: Context.Context<FlowRuntime | FlowInstance>) => {
243
+ const engine = Context.get(context, FlowRuntime)
244
+ const instance = Context.get(context, FlowInstance)
245
+ // Keep the original instance: action regions identify their ancestors
246
+ // by reference, and suspension metadata belongs to the enclosing flow.
247
+ return Effect.onExit(
248
+ effect,
249
+ // Untraced because completion encoding is called for each deferred result.
250
+ Effect.fnUntraced(function*(exit) {
251
+ if (Exit.isFailure(exit)) {
252
+ const [reasons, interrupts] = Arr.partition(
253
+ exit.cause.reasons,
254
+ Filter.fromPredicate(Cause.isInterruptReason)
255
+ )
256
+ const hasInterruptsOnly = interrupts.length === exit.cause.reasons.length
257
+ if (hasInterruptsOnly) {
258
+ // An interrupt-only exit is never a result: the effect was
259
+ // suspended, preempted, or interrupted, so record nothing.
260
+ // Recording here would durably persist the empty non-interrupt
261
+ // partition, and first-writer-wins would replay that empty
262
+ // cause forever instead of the real completion.
263
+ return
264
+ } else if (interrupts.length > 0) {
265
+ exit = Exit.failCause(Cause.fromReasons(reasons))
266
+ }
267
+ }
268
+ yield* engine.deferredDone(self, {
269
+ flowName: instance.flow._tag,
270
+ executionId: instance.executionId,
271
+ deferredName: self.name,
272
+ exit
273
+ })
274
+ })
275
+ )
276
+ }
277
+ )
278
+ )
279
+
280
+ /**
281
+ * Runs effects as a durable race, returning a previously persisted result when
282
+ * present or completing a named deferred with the first success. The race
283
+ * fails only when every effect fails.
284
+ *
285
+ * @category racing
286
+ * @since 0.1.0
287
+ */
288
+ export const raceAll = <
289
+ const Effects extends NonEmptyReadonlyArray<Effect.Effect<any, any, any>>,
290
+ Success extends Schema.Schema<Effect.Success<Effects[number]>>,
291
+ Error extends Schema.Schema<Effect.Error<Effects[number]>>
292
+ >(options: {
293
+ name: string
294
+ success: Success
295
+ error: Error
296
+ effects: Effects
297
+ }): Effect.Effect<
298
+ Effect.Success<Effects[number]>,
299
+ Effect.Error<Effects[number]>,
300
+ | Effect.Services<Effects[number]>
301
+ | Success["DecodingServices"]
302
+ | Success["EncodingServices"]
303
+ | Error["DecodingServices"]
304
+ | Error["EncodingServices"]
305
+ | FlowRuntime
306
+ | FlowInstance
307
+ > => {
308
+ const deferred = make<any, any>(`raceAll/${options.name}`, {
309
+ success: options.success,
310
+ error: options.error
311
+ })
312
+ return Effect.gen(function*() {
313
+ const engine = yield* FlowRuntime
314
+ const exit = yield* engine.deferredResult(deferred)
315
+ if (Option.isSome(exit)) {
316
+ return yield* exit.value
317
+ }
318
+ return yield* into(
319
+ Effect.raceAll(options.effects),
320
+ deferred
321
+ )
322
+ })
323
+ }
324
+
325
+ /**
326
+ * Runtime brand identifier for durable deferred tokens.
327
+ *
328
+ * @category type IDs
329
+ * @since 0.1.0
330
+ */
331
+ export const TokenTypeId = "@smthrs/flow/DurableDeferred/Token"
332
+
333
+ /**
334
+ * Type-level brand identifier for `Token` values.
335
+ *
336
+ * @category type IDs
337
+ * @since 0.1.0
338
+ */
339
+ export type TokenTypeId = typeof TokenTypeId
340
+
341
+ /**
342
+ * Branded string token identifying a durable deferred for a flow
343
+ * execution.
344
+ *
345
+ * A token is an address, not a credential. It is unsigned base64url JSON of
346
+ * the flow name, execution id, and deferred name, and `tokenFromExecutionId`
347
+ * and `tokenFromPayload` rebuild it from those values alone. Anyone who can
348
+ * call `done`, `succeed`, `fail`, `failCause`, or `HumanTask.answer` against
349
+ * the run's `FlowRuntime` can complete an open wait whose address they know or
350
+ * derive. A host that exposes completion to other parties must authorize the
351
+ * caller before it calls one of them.
352
+ *
353
+ * @category token
354
+ * @since 0.1.0
355
+ */
356
+ export type Token = Brand.Branded<string, TokenTypeId>
357
+
358
+ /**
359
+ * Schema for branded durable deferred tokens.
360
+ *
361
+ * @category token
362
+ * @since 0.1.0
363
+ */
364
+ export const Token: Schema.brand<Schema.String, TokenTypeId> = Schema.String.pipe(Schema.brand(TokenTypeId))
365
+
366
+ /**
367
+ * A completion token could not be decoded into its durable address.
368
+ *
369
+ * @category errors
370
+ * @since 0.1.0
371
+ */
372
+ export class TokenInvalid extends Schema.TaggedError<TokenInvalid>()("@smthrs/flow/DurableDeferred/TokenInvalid", {
373
+ code: Schema.Literals(["malformed_token", "deferred_mismatch"]).pipe(
374
+ Schema.withConstructorDefault(Effect.succeed("malformed_token"))
375
+ ),
376
+ message: Schema.String
377
+ }) {}
378
+
379
+ /**
380
+ * Schema for a decoded durable deferred token containing the flow
381
+ * name, execution ID, and deferred name.
382
+ *
383
+ * @category token
384
+ * @since 0.1.0
385
+ */
386
+ export class TokenParsed extends Schema.Class<TokenParsed>(
387
+ "@smthrs/flow/DurableDeferred/TokenParsed"
388
+ )({
389
+ flowName: Schema.String,
390
+ executionId: Schema.String,
391
+ deferredName: Schema.String
392
+ }) {
393
+ /**
394
+ * Encodes the parsed flow, execution, and deferred names back into a token.
395
+ *
396
+ * @since 0.1.0
397
+ */
398
+ get asToken(): Token {
399
+ return Encoding.encodeBase64Url(
400
+ JSON.stringify([this.flowName, this.executionId, this.deferredName])
401
+ ) as Token
402
+ }
403
+
404
+ /**
405
+ * Schema for decoding and encoding durable deferred tokens as strings.
406
+ *
407
+ * @since 0.1.0
408
+ */
409
+ static readonly FromString = Schema.String.pipe(
410
+ Schema.decodeTo(
411
+ Schema.fromJsonString(
412
+ Schema.Tuple([Schema.String, Schema.String, Schema.String])
413
+ ),
414
+ {
415
+ decode: SchemaGetter.decodeBase64UrlString(),
416
+ encode: SchemaGetter.encodeBase64Url()
417
+ }
418
+ ),
419
+ Schema.decodeTo(TokenParsed, {
420
+ decode: SchemaGetter.transform(
421
+ ([flowName, executionId, deferredName]) =>
422
+ new TokenParsed({
423
+ flowName,
424
+ executionId,
425
+ deferredName
426
+ })
427
+ ),
428
+ encode: SchemaGetter.transform(
429
+ (parsed) =>
430
+ [
431
+ parsed.flowName,
432
+ parsed.executionId,
433
+ parsed.deferredName
434
+ ] as const
435
+ )
436
+ })
437
+ )
438
+
439
+ /**
440
+ * Decodes a durable deferred token string into its parsed components.
441
+ *
442
+ * @since 0.1.0
443
+ */
444
+ static readonly fromString = Schema.decodeSync(TokenParsed.FromString)
445
+
446
+ /**
447
+ * Encodes parsed durable deferred token components into a token string.
448
+ *
449
+ * @since 0.1.0
450
+ */
451
+ static readonly encode = Schema.encodeSync(TokenParsed.FromString)
452
+
453
+ /**
454
+ * Parses an untrusted token into its durable address with a typed,
455
+ * bounded diagnostic on failure.
456
+ *
457
+ * @category token
458
+ * @since 1.0.0
459
+ */
460
+ static readonly parse = (token: string): Effect.Effect<TokenParsed, TokenInvalid> =>
461
+ Effect.mapError(
462
+ Schema.decodeEffect(TokenParsed.FromString)(token),
463
+ (issue) =>
464
+ new TokenInvalid({
465
+ message: `The supplied token "${tokenExcerpt(token)}" is not a durable deferred token: ${issue.message}`
466
+ })
467
+ )
468
+ }
469
+
470
+ const maxTokenExcerptChars = 64
471
+
472
+ /** Renders a bounded excerpt of untrusted token content for a diagnostic. */
473
+ const tokenExcerpt = (token: string): string =>
474
+ token.length <= maxTokenExcerptChars
475
+ ? token
476
+ : `${token.slice(0, maxTokenExcerptChars)} [${token.length - maxTokenExcerptChars} characters dropped]`
477
+
478
+ /**
479
+ * Creates a token for a durable deferred using the current flow instance's
480
+ * flow name and execution ID.
481
+ *
482
+ * @category token
483
+ * @since 0.1.0
484
+ */
485
+ export const token: <Success extends Schema.Constraint, Error extends Schema.Constraint>(
486
+ self: DurableDeferred<Success, Error>
487
+ ) => Effect.Effect<Token, never, FlowInstance> =
488
+ // Untraced because token allocation is on the durable-deferred hot path.
489
+ Effect.fnUntraced(
490
+ function*<Success extends Schema.Constraint, Error extends Schema.Constraint>(
491
+ self: DurableDeferred<Success, Error>
492
+ ) {
493
+ const instance = yield* FlowInstance
494
+ return tokenFromExecutionId(self, instance)
495
+ }
496
+ )
497
+
498
+ /**
499
+ * Creates a durable deferred token from an explicit flow, execution ID,
500
+ * and deferred name.
501
+ *
502
+ * @category token
503
+ * @since 0.1.0
504
+ */
505
+ export const tokenFromExecutionId: {
506
+ (options: {
507
+ readonly flow: Flow.Any
508
+ readonly executionId: string
509
+ }): <Success extends Schema.Constraint, Error extends Schema.Constraint>(
510
+ self: DurableDeferred<Success, Error>
511
+ ) => Token
512
+ <Success extends Schema.Constraint, Error extends Schema.Constraint>(
513
+ self: DurableDeferred<Success, Error>,
514
+ options: { readonly flow: Flow.Any; readonly executionId: string }
515
+ ): Token
516
+ } = dual(
517
+ 2,
518
+ <Success extends Schema.Constraint, Error extends Schema.Constraint>(
519
+ self: DurableDeferred<Success, Error>,
520
+ options: {
521
+ readonly flow: Flow.Any
522
+ readonly executionId: string
523
+ }
524
+ ): Token =>
525
+ new TokenParsed({
526
+ flowName: options.flow._tag,
527
+ executionId: options.executionId,
528
+ deferredName: self.name
529
+ }).asToken
530
+ )
531
+
532
+ /**
533
+ * Creates a durable deferred token by deriving the flow execution ID from
534
+ * the supplied flow payload.
535
+ *
536
+ * The payload identifies a previously started execution only when the flow
537
+ * declares `idempotencyKey` or the host installs the opt-in `derived`
538
+ * execution-id source. Otherwise the default `fresh` source mints a new
539
+ * execution ID on every call, so the token addresses no earlier run. To
540
+ * complete an existing execution without stable identity, keep its execution
541
+ * ID and use {@link tokenFromExecutionId}.
542
+ *
543
+ * @category token
544
+ * @since 0.1.0
545
+ */
546
+ export const tokenFromPayload: {
547
+ <W extends Flow.Any>(options: {
548
+ readonly flow: W
549
+ readonly payload: Flow.PayloadSchema<W>["~type.make.in"]
550
+ }): <Success extends Schema.Constraint, Error extends Schema.Constraint>(
551
+ self: DurableDeferred<Success, Error>
552
+ ) => Effect.Effect<Token, never, Crypto.Crypto | Flow.PayloadSchema<W>["EncodingServices"]>
553
+ <
554
+ Success extends Schema.Constraint,
555
+ Error extends Schema.Constraint,
556
+ W extends Flow.Any
557
+ >(
558
+ self: DurableDeferred<Success, Error>,
559
+ options: {
560
+ readonly flow: W
561
+ readonly payload: Flow.PayloadSchema<W>["~type.make.in"]
562
+ }
563
+ ): Effect.Effect<Token, never, Crypto.Crypto | Flow.PayloadSchema<W>["EncodingServices"]>
564
+ } = dual(
565
+ 2,
566
+ <
567
+ Success extends Schema.Constraint,
568
+ Error extends Schema.Constraint,
569
+ W extends Flow.Any
570
+ >(
571
+ self: DurableDeferred<Success, Error>,
572
+ options: {
573
+ readonly flow: W
574
+ readonly payload: Flow.PayloadSchema<W>["~type.make.in"]
575
+ }
576
+ ): Effect.Effect<Token, never, Crypto.Crypto | Flow.PayloadSchema<W>["EncodingServices"]> =>
577
+ Effect.map(options.flow.executionId(options.payload), (executionId) =>
578
+ tokenFromExecutionId(self, {
579
+ flow: options.flow,
580
+ executionId
581
+ }))
582
+ )
583
+
584
+ /**
585
+ * Completes the durable deferred identified by a token with the supplied exit,
586
+ * encoding the result through the deferred schemas.
587
+ *
588
+ * The token is not a credential (see {@link Token}): authorize the caller
589
+ * before completing a wait on its behalf.
590
+ *
591
+ * @category combinators
592
+ * @since 0.1.0
593
+ */
594
+ export const done: {
595
+ <Success extends Schema.Constraint, Error extends Schema.Constraint>(options: {
596
+ readonly token: Token
597
+ readonly exit: Exit.Exit<Success["Type"], Error["Type"]>
598
+ }): (
599
+ self: DurableDeferred<Success, Error>
600
+ ) => Effect.Effect<
601
+ void,
602
+ TokenInvalid,
603
+ FlowRuntime | Success["EncodingServices"] | Error["EncodingServices"]
604
+ >
605
+ <Success extends Schema.Constraint, Error extends Schema.Constraint>(
606
+ self: DurableDeferred<Success, Error>,
607
+ options: {
608
+ readonly token: Token
609
+ readonly exit: Exit.Exit<Success["Type"], Error["Type"]>
610
+ }
611
+ ): Effect.Effect<
612
+ void,
613
+ TokenInvalid,
614
+ FlowRuntime | Success["EncodingServices"] | Error["EncodingServices"]
615
+ >
616
+ } = dual(
617
+ 2,
618
+ // Untraced because awaiting a deferred re-enters the scheduler recursively.
619
+ Effect.fnUntraced(function*<
620
+ Success extends Schema.Constraint,
621
+ Error extends Schema.Constraint
622
+ >(
623
+ self: DurableDeferred<Success, Error>,
624
+ options: {
625
+ readonly token: Token
626
+ readonly exit: Exit.Exit<Success["Type"], Error["Type"]>
627
+ }
628
+ ) {
629
+ const token = yield* TokenParsed.parse(options.token)
630
+ if (token.deferredName !== self.name) {
631
+ return yield* Effect.fail(
632
+ new TokenInvalid({
633
+ code: "deferred_mismatch",
634
+ message: `The token addresses deferred "${tokenExcerpt(token.deferredName)}", but it was submitted through ` +
635
+ `deferred "${self.name}".`
636
+ })
637
+ )
638
+ }
639
+ const engine = yield* FlowRuntime
640
+ yield* engine.deferredDone(self, {
641
+ flowName: token.flowName,
642
+ executionId: token.executionId,
643
+ deferredName: token.deferredName,
644
+ exit: options.exit
645
+ })
646
+ })
647
+ )
648
+
649
+ /**
650
+ * Completes the durable deferred identified by a token with a successful
651
+ * value.
652
+ *
653
+ * @category combinators
654
+ * @since 0.1.0
655
+ */
656
+ export const succeed: {
657
+ <Success extends Schema.Constraint, Error extends Schema.Constraint>(options: {
658
+ readonly token: Token
659
+ readonly value: Success["Type"]
660
+ }): (
661
+ self: DurableDeferred<Success, Error>
662
+ ) => Effect.Effect<void, TokenInvalid, FlowRuntime | Success["EncodingServices"]>
663
+ <Success extends Schema.Constraint, Error extends Schema.Constraint>(
664
+ self: DurableDeferred<Success, Error>,
665
+ options: {
666
+ readonly token: Token
667
+ readonly value: Success["Type"]
668
+ }
669
+ ): Effect.Effect<void, TokenInvalid, FlowRuntime | Success["EncodingServices"]>
670
+ } = dual(
671
+ 2,
672
+ <Success extends Schema.Constraint, Error extends Schema.Constraint>(
673
+ self: DurableDeferred<Success, Error>,
674
+ options: {
675
+ readonly token: Token
676
+ readonly value: Success["Type"]
677
+ }
678
+ ): Effect.Effect<void, TokenInvalid, FlowRuntime | Success["EncodingServices"]> =>
679
+ done(self, {
680
+ token: options.token,
681
+ exit: Exit.succeed(options.value)
682
+ })
683
+ )
684
+
685
+ /**
686
+ * Completes the durable deferred identified by a token with a typed failure.
687
+ *
688
+ * @category combinators
689
+ * @since 0.1.0
690
+ */
691
+ export const fail: {
692
+ <Success extends Schema.Constraint, Error extends Schema.Constraint>(options: {
693
+ readonly token: Token
694
+ readonly error: Error["Type"]
695
+ }): (
696
+ self: DurableDeferred<Success, Error>
697
+ ) => Effect.Effect<void, TokenInvalid, FlowRuntime | Error["EncodingServices"]>
698
+ <Success extends Schema.Constraint, Error extends Schema.Constraint>(
699
+ self: DurableDeferred<Success, Error>,
700
+ options: {
701
+ readonly token: Token
702
+ readonly error: Error["Type"]
703
+ }
704
+ ): Effect.Effect<void, TokenInvalid, FlowRuntime | Error["EncodingServices"]>
705
+ } = dual(
706
+ 2,
707
+ <Success extends Schema.Constraint, Error extends Schema.Constraint>(
708
+ self: DurableDeferred<Success, Error>,
709
+ options: {
710
+ readonly token: Token
711
+ readonly error: Error["Type"]
712
+ }
713
+ ): Effect.Effect<void, TokenInvalid, FlowRuntime | Error["EncodingServices"]> =>
714
+ done(self, {
715
+ token: options.token,
716
+ exit: Exit.fail(options.error)
717
+ })
718
+ )
719
+
720
+ /**
721
+ * Completes the durable deferred identified by a token with a failure cause.
722
+ *
723
+ * @category combinators
724
+ * @since 0.1.0
725
+ */
726
+ export const failCause: {
727
+ <Success extends Schema.Constraint, Error extends Schema.Constraint>(options: {
728
+ readonly token: Token
729
+ readonly cause: Cause.Cause<Error["Type"]>
730
+ }): (
731
+ self: DurableDeferred<Success, Error>
732
+ ) => Effect.Effect<void, TokenInvalid, FlowRuntime | Error["EncodingServices"]>
733
+ <Success extends Schema.Constraint, Error extends Schema.Constraint>(
734
+ self: DurableDeferred<Success, Error>,
735
+ options: {
736
+ readonly token: Token
737
+ readonly cause: Cause.Cause<Error["Type"]>
738
+ }
739
+ ): Effect.Effect<void, TokenInvalid, FlowRuntime | Error["EncodingServices"]>
740
+ } = dual(
741
+ 2,
742
+ <Success extends Schema.Constraint, Error extends Schema.Constraint>(
743
+ self: DurableDeferred<Success, Error>,
744
+ options: {
745
+ readonly token: Token
746
+ readonly cause: Cause.Cause<Error["Type"]>
747
+ }
748
+ ): Effect.Effect<void, TokenInvalid, FlowRuntime | Error["EncodingServices"]> =>
749
+ done(self, {
750
+ token: options.token,
751
+ exit: Exit.failCause(options.cause)
752
+ })
753
+ )