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

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 +161 -0
  2. package/LICENSE +21 -0
  3. package/README.md +212 -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 +387 -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 +110 -0
  106. package/dist/cjs/Deadline.d.ts.map +1 -0
  107. package/dist/cjs/Deadline.js +112 -0
  108. package/dist/cjs/Deadline.js.map +7 -0
  109. package/dist/cjs/DurableClock.d.ts +60 -0
  110. package/dist/cjs/DurableClock.d.ts.map +1 -0
  111. package/dist/cjs/DurableClock.js +107 -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 +339 -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 +186 -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 +149 -0
  182. package/dist/cjs/Flow/make.d.ts.map +1 -0
  183. package/dist/cjs/Flow/make.js +107 -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 +204 -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 +177 -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 +1020 -0
  224. package/dist/cjs/Graph.js.map +7 -0
  225. package/dist/cjs/HumanTask.d.ts +442 -0
  226. package/dist/cjs/HumanTask.d.ts.map +1 -0
  227. package/dist/cjs/HumanTask.js +422 -0
  228. package/dist/cjs/HumanTask.js.map +7 -0
  229. package/dist/cjs/Interpreter.d.ts +223 -0
  230. package/dist/cjs/Interpreter.d.ts.map +1 -0
  231. package/dist/cjs/Interpreter.js +919 -0
  232. package/dist/cjs/Interpreter.js.map +7 -0
  233. package/dist/cjs/Poll.d.ts +240 -0
  234. package/dist/cjs/Poll.d.ts.map +1 -0
  235. package/dist/cjs/Poll.js +154 -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 +141 -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 +413 -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 +110 -0
  383. package/dist/esm/Deadline.d.ts.map +1 -0
  384. package/dist/esm/Deadline.js +164 -0
  385. package/dist/esm/Deadline.js.map +1 -0
  386. package/dist/esm/DurableClock.d.ts +60 -0
  387. package/dist/esm/DurableClock.d.ts.map +1 -0
  388. package/dist/esm/DurableClock.js +122 -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 +252 -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 +149 -0
  459. package/dist/esm/Flow/make.d.ts.map +1 -0
  460. package/dist/esm/Flow/make.js +111 -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 +204 -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 +177 -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 +1485 -0
  501. package/dist/esm/Graph.js.map +1 -0
  502. package/dist/esm/HumanTask.d.ts +442 -0
  503. package/dist/esm/HumanTask.d.ts.map +1 -0
  504. package/dist/esm/HumanTask.js +810 -0
  505. package/dist/esm/HumanTask.js.map +1 -0
  506. package/dist/esm/Interpreter.d.ts +223 -0
  507. package/dist/esm/Interpreter.d.ts.map +1 -0
  508. package/dist/esm/Interpreter.js +1301 -0
  509. package/dist/esm/Interpreter.js.map +1 -0
  510. package/dist/esm/Poll.d.ts +240 -0
  511. package/dist/esm/Poll.d.ts.map +1 -0
  512. package/dist/esm/Poll.js +289 -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 +256 -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 +152 -0
  559. package/docs/api.md +440 -0
  560. package/docs/concepts/bodies-and-plans.md +167 -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 +164 -0
  568. package/docs/guides/cancel-and-roll-back.md +112 -0
  569. package/docs/guides/implement-an-action.md +155 -0
  570. package/docs/guides/inspect-the-plan.md +235 -0
  571. package/docs/guides/poll-until-ready.md +169 -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 +129 -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 +87 -0
  581. package/docs/quickstart.md +164 -0
  582. package/docs/reference/flow.md +1835 -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 +671 -0
  609. package/src/Action/raceAll.ts +48 -0
  610. package/src/Action/retry.ts +92 -0
  611. package/src/Deadline.ts +201 -0
  612. package/src/DurableClock.ts +176 -0
  613. package/src/DurableDeferred.ts +753 -0
  614. package/src/DurableQueue.ts +519 -0
  615. package/src/ExternalJob.ts +437 -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 +339 -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 +299 -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 +339 -0
  637. package/src/FlowRuntime/NodeRecord.ts +185 -0
  638. package/src/FlowRuntime/WaitingAnnotation.ts +85 -0
  639. package/src/FlowRuntime/index.ts +17 -0
  640. package/src/Graph.ts +1865 -0
  641. package/src/HumanTask.ts +1021 -0
  642. package/src/Interpreter.ts +1635 -0
  643. package/src/Poll.ts +420 -0
  644. package/src/RetryPolicy.ts +550 -0
  645. package/src/Sleep.ts +296 -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,251 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var RetryPolicy_exports = {};
30
+ __export(RetryPolicy_exports, {
31
+ RetryAttemptsExhausted: () => RetryAttemptsExhausted,
32
+ RetryPolicy: () => RetryPolicy,
33
+ RetryPolicyExpired: () => RetryPolicyExpired,
34
+ decide: () => decide,
35
+ decideEffect: () => decideEffect,
36
+ defaultNonRetryable: () => defaultNonRetryable,
37
+ defaultRetryPolicy: () => defaultRetryPolicy,
38
+ errorTag: () => errorTag,
39
+ giveUp: () => giveUp,
40
+ isNonRetryable: () => isNonRetryable,
41
+ make: () => make,
42
+ nextDelay: () => nextDelay,
43
+ nextDelayEffect: () => nextDelayEffect,
44
+ retryAfter: () => retryAfter,
45
+ transient: () => transient
46
+ });
47
+ module.exports = __toCommonJS(RetryPolicy_exports);
48
+ var Effect = __toESM(require("effect/Effect"), 1);
49
+ var Option = __toESM(require("effect/Option"), 1);
50
+ var Random = __toESM(require("effect/Random"), 1);
51
+ var Schema = __toESM(require("effect/Schema"), 1);
52
+ const RetryPolicyFields = Schema.Struct({
53
+ initialMs: Schema.Number,
54
+ factor: Schema.Number,
55
+ maxMs: Schema.Number,
56
+ maxAttempts: Schema.optional(Schema.Number),
57
+ expirationMs: Schema.optional(Schema.Number),
58
+ jitterRatio: Schema.optional(Schema.Number),
59
+ nonRetryable: Schema.optional(Schema.Array(Schema.String))
60
+ });
61
+ const validationIssue = (policy) => {
62
+ if (!Number.isFinite(policy.initialMs) || policy.initialMs <= 0) {
63
+ return `"initialMs" must be a finite number of milliseconds greater than zero, and was ${policy.initialMs}.`;
64
+ }
65
+ if (!Number.isFinite(policy.factor) || policy.factor <= 0) {
66
+ return `"factor" must be a finite number greater than zero, and was ${policy.factor}.`;
67
+ }
68
+ if (!Number.isFinite(policy.maxMs) || policy.maxMs < policy.initialMs) {
69
+ return `"maxMs" must be a finite number of milliseconds at least as large as initialMs, and was ${policy.maxMs}.`;
70
+ }
71
+ if (policy.maxAttempts !== void 0 && (!Number.isSafeInteger(policy.maxAttempts) || policy.maxAttempts < 1)) {
72
+ return `"maxAttempts" must be a safe integer of at least one, and was ${policy.maxAttempts}.`;
73
+ }
74
+ if (policy.expirationMs !== void 0 && (!Number.isFinite(policy.expirationMs) || policy.expirationMs <= 0)) {
75
+ return `"expirationMs" must be a finite number of milliseconds greater than zero, and was ${policy.expirationMs}.`;
76
+ }
77
+ if (policy.jitterRatio !== void 0 && (!Number.isFinite(policy.jitterRatio) || policy.jitterRatio < 0 || policy.jitterRatio > 1)) {
78
+ return `"jitterRatio" must be a finite number between zero and one, inclusive, and was ${policy.jitterRatio}.`;
79
+ }
80
+ return void 0;
81
+ };
82
+ const RetryPolicy = RetryPolicyFields.check(
83
+ Schema.makeFilter(
84
+ (policy) => validationIssue(policy) ?? true,
85
+ { title: "validRetryPolicy" }
86
+ )
87
+ );
88
+ const make = (options) => {
89
+ const issue = validationIssue(options);
90
+ if (issue !== void 0) throw new RangeError(`RetryPolicy.make: ${issue}`);
91
+ return Object.freeze({
92
+ initialMs: options.initialMs,
93
+ factor: options.factor,
94
+ maxMs: options.maxMs,
95
+ ...options.maxAttempts !== void 0 ? { maxAttempts: options.maxAttempts } : {},
96
+ ...options.expirationMs !== void 0 ? { expirationMs: options.expirationMs } : {},
97
+ ...options.jitterRatio !== void 0 ? { jitterRatio: options.jitterRatio } : {},
98
+ ...options.nonRetryable !== void 0 ? { nonRetryable: Object.freeze([...options.nonRetryable]) } : {}
99
+ });
100
+ };
101
+ const defaultRetryPolicy = Object.freeze(
102
+ make({
103
+ initialMs: 200,
104
+ factor: 1.5,
105
+ maxMs: 3e4
106
+ })
107
+ );
108
+ const transient = make({
109
+ initialMs: 5e3,
110
+ factor: 2,
111
+ maxMs: 3e5,
112
+ expirationMs: 72e5
113
+ });
114
+ const retryAfter = (delayMs) => ({
115
+ _tag: "RetryAfter",
116
+ delayMs
117
+ });
118
+ const giveUp = (reason) => ({
119
+ _tag: "GiveUp",
120
+ reason
121
+ });
122
+ class RetryPolicyExpired extends Schema.TaggedError()(
123
+ "@smthrs/flow/RetryPolicyExpired",
124
+ {
125
+ code: Schema.Literal("retry_policy_expired").pipe(
126
+ Schema.withConstructorDefault(Effect.succeed("retry_policy_expired"))
127
+ ),
128
+ actionName: Schema.String,
129
+ attempt: Schema.Number,
130
+ expirationMs: Schema.Number,
131
+ lastError: Schema.optional(Schema.Unknown)
132
+ }
133
+ ) {
134
+ }
135
+ class RetryAttemptsExhausted extends Schema.TaggedError()(
136
+ "@smthrs/flow/RetryAttemptsExhausted",
137
+ {
138
+ code: Schema.Literal("retry_attempts_exhausted").pipe(
139
+ Schema.withConstructorDefault(Effect.succeed("retry_attempts_exhausted"))
140
+ ),
141
+ actionName: Schema.String,
142
+ attempt: Schema.Number,
143
+ maxAttempts: Schema.Number,
144
+ lastError: Schema.optional(Schema.Unknown)
145
+ }
146
+ ) {
147
+ }
148
+ const nextDelay = (policy, attempt, options) => {
149
+ if (validationIssue(policy) !== void 0 || !Number.isSafeInteger(attempt) || attempt < 1) {
150
+ return Option.none();
151
+ }
152
+ if (options?.elapsedMs !== void 0 && (!Number.isFinite(options.elapsedMs) || options.elapsedMs < 0)) {
153
+ return Option.none();
154
+ }
155
+ if (policy.maxAttempts !== void 0 && attempt >= policy.maxAttempts) {
156
+ return Option.none();
157
+ }
158
+ if (policy.expirationMs !== void 0 && options?.elapsedMs !== void 0 && options.elapsedMs > policy.expirationMs) {
159
+ return Option.none();
160
+ }
161
+ const raw = policy.initialMs * Math.pow(policy.factor, attempt - 1);
162
+ if (!(raw > 0)) {
163
+ return Option.none();
164
+ }
165
+ let delay = Math.min(raw, policy.maxMs);
166
+ if (policy.expirationMs !== void 0 && options?.elapsedMs !== void 0) {
167
+ delay = Math.min(delay, Math.max(0, policy.expirationMs - options.elapsedMs));
168
+ }
169
+ if (delay < policy.initialMs) {
170
+ return Option.none();
171
+ }
172
+ if (policy.jitterRatio !== void 0 && policy.jitterRatio > 0) {
173
+ const random = options?.random ?? 1;
174
+ if (!(random >= 0 && random <= 1)) {
175
+ return Option.none();
176
+ }
177
+ const jittered = delay * (1 - policy.jitterRatio) + random * delay * policy.jitterRatio;
178
+ delay = Math.min(delay, jittered);
179
+ }
180
+ return Option.some(delay);
181
+ };
182
+ const nextDelayEffect = (policy, attempt, options) => policy.jitterRatio === void 0 || policy.jitterRatio <= 0 ? Effect.sync(() => nextDelay(policy, attempt, { elapsedMs: options?.elapsedMs })) : Effect.map(Random.next, (random) => nextDelay(policy, attempt, { random, elapsedMs: options?.elapsedMs }));
183
+ const errorTag = (error) => {
184
+ if (typeof error !== "object" || error === null) return void 0;
185
+ try {
186
+ const tag = Object.getOwnPropertyDescriptor(error, "_tag");
187
+ if (tag !== void 0 && "value" in tag && typeof tag.value === "string") return tag.value;
188
+ let current = error;
189
+ for (let depth = 0; current !== null && depth < 64; depth++) {
190
+ const name = Object.getOwnPropertyDescriptor(current, "name");
191
+ if (name !== void 0) {
192
+ return "value" in name && typeof name.value === "string" ? name.value : void 0;
193
+ }
194
+ current = Object.getPrototypeOf(current);
195
+ }
196
+ } catch {
197
+ }
198
+ return void 0;
199
+ };
200
+ const defaultNonRetryable = [
201
+ "@smthrs/engine-store/CacheCorruptionDetected",
202
+ "@smthrs/engine-store/AttemptEvidenceQuarantined"
203
+ ];
204
+ const isNonRetryable = (policy, error) => {
205
+ const tag = errorTag(error);
206
+ if (tag === void 0) {
207
+ return false;
208
+ }
209
+ if (defaultNonRetryable.includes(tag)) {
210
+ return true;
211
+ }
212
+ return policy.nonRetryable !== void 0 && policy.nonRetryable.includes(tag);
213
+ };
214
+ const decide = (policy, options) => {
215
+ if (isNonRetryable(policy, options.error)) {
216
+ return giveUp("nonRetryable");
217
+ }
218
+ return Option.match(
219
+ nextDelay(policy, options.attempt, { random: options.random, elapsedMs: options.elapsedMs }),
220
+ {
221
+ onNone: () => (
222
+ // A policy can report `expired` only when it declares an expiration
223
+ // bound and dropping elapsed time would have allowed another attempt.
224
+ // A malformed elapsed value still gives up because the sequence cannot
225
+ // continue without a trustworthy clock reading; without an expiration
226
+ // bound, the public terminal reason for that refusal is `exhausted`.
227
+ policy.expirationMs !== void 0 && Option.isSome(nextDelay(policy, options.attempt, { random: options.random })) ? giveUp("expired") : giveUp("exhausted")
228
+ ),
229
+ onSome: (delay) => {
230
+ let hint;
231
+ if (typeof options.error === "object" && options.error !== null) {
232
+ try {
233
+ const descriptor = Object.getOwnPropertyDescriptor(options.error, "retryAfterMs");
234
+ if (descriptor !== void 0 && "value" in descriptor) hint = descriptor.value;
235
+ } catch {
236
+ }
237
+ }
238
+ if (typeof hint !== "number" || !Number.isFinite(hint) || hint < 0) {
239
+ return retryAfter(delay);
240
+ }
241
+ return retryAfter(Math.min(
242
+ hint,
243
+ policy.maxMs,
244
+ policy.expirationMs !== void 0 && options.elapsedMs !== void 0 ? Math.max(0, policy.expirationMs - options.elapsedMs) : policy.maxMs
245
+ ));
246
+ }
247
+ }
248
+ );
249
+ };
250
+ const decideEffect = (policy, options) => policy.jitterRatio === void 0 || policy.jitterRatio <= 0 ? Effect.sync(() => decide(policy, options)) : Effect.map(Random.next, (random) => decide(policy, { ...options, random }));
251
+ //# sourceMappingURL=RetryPolicy.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/RetryPolicy.ts"],
4
+ "sourcesContent": ["// Deep reviewed and polished by a human on 2026-08-10.\n\n/**\n * Defines data-shaped retry policies for durable action retries.\n *\n * A `RetryPolicy` is a plain value \u2014 initial interval, backoff factor, cap,\n * optional maximum attempts, optional jitter, and optional non-retryable\n * error tags \u2014 so the next retry delay can be derived from a persisted\n * attempt count instead of fiber-local `Schedule` state. `nextDelay` mirrors\n * Temporal's `ExponentialRetryPolicy.ComputeNextDelay` formula, and `decide`\n * is the engine's single retry decision point: the core default a pluggable\n * `resolveRetry` resolution can later dispatch in front of.\n *\n * The historical terminal-failure schemas below use the `@smthrs/flow/` tags settled for\n * 1.0.0-rc.0. The release candidate makes no compatibility promise to 0.x\n * journals, and these tags freeze at the RC. Current action dispatch preserves\n * the final declared failure when a retry policy is spent.\n *\n * See `docs/guides/retry-a-failing-action.md`; its \"Infrastructure\n * interrupts\" section covers the interrupt retry schedule.\n *\n * @since 0.1.0\n */\n\nimport * as Effect from \"effect/Effect\"\nimport * as Option from \"effect/Option\"\nimport * as Random from \"effect/Random\"\nimport * as Schema from \"effect/Schema\"\n\n/**\n * Data-shaped retry policy schema.\n *\n * The delay before attempt `n + 1` is\n * `min(initialMs * factor^(n - 1), maxMs)`, where `n` is the attempt that\n * just failed. `maxAttempts` bounds the total number of attempts;\n * `expirationMs` bounds the total wall-clock retry duration\n * (schedule-to-close, mirroring Temporal's `expirationInterval`);\n * `jitterRatio` spreads the final portion of each delay uniformly;\n * `nonRetryable` lists error tags that must never be retried.\n *\n * The bounds are per STEP KEY, which is what makes them the provider-retry\n * budget for one agent ask rather than a budget for the exchange the ask\n * belongs to. A structured-output correction re-prompts under a NEW session,\n * so the corrected ask is a different sealed step with its own attempt\n * sequence: `maxAttempts` bounds the provider retries inside one correction\n * session and does not bound the correction ladder, which `AgentAction`\n * bounds separately with its own `corrections` budget.\n *\n * @category models\n * @since 0.1.0\n */\nconst RetryPolicyFields = Schema.Struct({\n initialMs: Schema.Number,\n factor: Schema.Number,\n maxMs: Schema.Number,\n maxAttempts: Schema.optional(Schema.Number),\n expirationMs: Schema.optional(Schema.Number),\n jitterRatio: Schema.optional(Schema.Number),\n nonRetryable: Schema.optional(Schema.Array(Schema.String))\n})\n\ntype RetryPolicyFields = typeof RetryPolicyFields.Type\n\n/** Returns the first contract violation shared by decoding and construction. */\nconst validationIssue = (policy: RetryPolicyFields): string | undefined => {\n // Zero is refused rather than read as \"retry immediately\": every computed\n // delay would be zero, so such a policy would give up on its first failure\n // no matter what `maxAttempts` promised. Use `initialMs: 1` for a\n // near-immediate retry.\n if (!Number.isFinite(policy.initialMs) || policy.initialMs <= 0) {\n return `\"initialMs\" must be a finite number of milliseconds greater than zero, and was ${policy.initialMs}.`\n }\n if (!Number.isFinite(policy.factor) || policy.factor <= 0) {\n return `\"factor\" must be a finite number greater than zero, and was ${policy.factor}.`\n }\n if (!Number.isFinite(policy.maxMs) || policy.maxMs < policy.initialMs) {\n return `\"maxMs\" must be a finite number of milliseconds at least as large as initialMs, and was ${policy.maxMs}.`\n }\n if (\n policy.maxAttempts !== undefined &&\n (!Number.isSafeInteger(policy.maxAttempts) || policy.maxAttempts < 1)\n ) {\n return `\"maxAttempts\" must be a safe integer of at least one, and was ${policy.maxAttempts}.`\n }\n if (\n policy.expirationMs !== undefined &&\n (!Number.isFinite(policy.expirationMs) || policy.expirationMs <= 0)\n ) {\n return `\"expirationMs\" must be a finite number of milliseconds greater than zero, and was ${policy.expirationMs}.`\n }\n if (\n policy.jitterRatio !== undefined &&\n (!Number.isFinite(policy.jitterRatio) || policy.jitterRatio < 0 || policy.jitterRatio > 1)\n ) {\n return `\"jitterRatio\" must be a finite number between zero and one, inclusive, and was ${policy.jitterRatio}.`\n }\n return undefined\n}\n\n/**\n * Data-shaped retry policy schema. Decoding enforces the same relational\n * contract as {@link make}; persisted data cannot bypass constructor checks.\n *\n * @category models\n * @since 0.1.0\n */\nexport const RetryPolicy = RetryPolicyFields.check(\n Schema.makeFilter(\n (policy) => validationIssue(policy) ?? true,\n { title: \"validRetryPolicy\" }\n )\n)\n\n/**\n * The value form of a {@link RetryPolicy}.\n *\n * @category models\n * @since 0.1.0\n */\nexport type RetryPolicy = typeof RetryPolicy.Type\n\n/**\n * Creates a `RetryPolicy` value after checking every numeric bound.\n * `initialMs` must be greater than zero: a zero initial interval would\n * compute a zero delay for every attempt, which {@link nextDelay} reads as\n * exhausted, so the policy would never retry. `jitterRatio` must be between\n * zero and one, inclusive, and `jitterRatio: 0` disables jitter.\n *\n * @category constructors\n * @since 0.1.0\n */\nexport const make = (options: {\n readonly initialMs: number\n readonly factor: number\n readonly maxMs: number\n readonly maxAttempts?: number | undefined\n readonly expirationMs?: number | undefined\n readonly jitterRatio?: number | undefined\n readonly nonRetryable?: ReadonlyArray<string> | undefined\n}): RetryPolicy => {\n const issue = validationIssue(options)\n if (issue !== undefined) throw new RangeError(`RetryPolicy.make: ${issue}`)\n return Object.freeze({\n initialMs: options.initialMs,\n factor: options.factor,\n maxMs: options.maxMs,\n ...(options.maxAttempts !== undefined ? { maxAttempts: options.maxAttempts } : {}),\n ...(options.expirationMs !== undefined ? { expirationMs: options.expirationMs } : {}),\n ...(options.jitterRatio !== undefined ? { jitterRatio: options.jitterRatio } : {}),\n ...(options.nonRetryable !== undefined\n ? { nonRetryable: Object.freeze([...options.nonRetryable]) }\n : {})\n })\n}\n\n/**\n * The default engine retry policy.\n *\n * Uses a 200ms initial delay growing by 1.5x, capped at 30s, and never gives\n * up: it declares neither `maxAttempts` nor `expirationMs`. Bound long-lived\n * retries with `make({ ..., expirationMs })` when a wall-clock give-up is\n * required.\n *\n * @category constructors\n * @since 0.1.0\n */\nexport const defaultRetryPolicy: RetryPolicy = Object.freeze(\n make({\n initialMs: 200,\n factor: 1.5,\n maxMs: 30000\n })\n)\n\n/**\n * Bounded infrastructure retry: 5 seconds doubling to 5 minutes, for 2 hours.\n *\n * @category constructors\n * @since 1.0.0\n */\nexport const transient: RetryPolicy = make({\n initialMs: 5000,\n factor: 2,\n maxMs: 300000,\n expirationMs: 7200000\n})\n\n/**\n * A retry decision: wait `delayMs` before the next attempt.\n *\n * @category models\n * @since 0.1.0\n */\nexport interface RetryAfter {\n readonly _tag: \"RetryAfter\"\n readonly delayMs: number\n}\n\n/**\n * A retry decision: stop retrying.\n *\n * @category models\n * @since 0.1.0\n */\nexport interface GiveUp {\n readonly _tag: \"GiveUp\"\n readonly reason: \"nonRetryable\" | \"exhausted\" | \"expired\"\n}\n\n/**\n * The outcome of the engine's retry decision point.\n *\n * @category models\n * @since 0.1.0\n */\nexport type RetryDecision = RetryAfter | GiveUp\n\n/**\n * Creates a `RetryAfter` decision.\n *\n * @category constructors\n * @since 0.1.0\n */\nexport const retryAfter = (delayMs: number): RetryDecision => ({\n _tag: \"RetryAfter\",\n delayMs\n})\n\n/**\n * Creates a `GiveUp` decision.\n *\n * @category constructors\n * @since 0.1.0\n */\nexport const giveUp = (reason: GiveUp[\"reason\"]): RetryDecision => ({\n _tag: \"GiveUp\",\n reason\n})\n\n/**\n * A historical retry sequence crossed its `expirationMs` wall-clock bound.\n * Current dispatch preserves the final declared failure instead of emitting this defect.\n *\n * @category errors\n * @since 0.1.0\n */\nexport class RetryPolicyExpired extends Schema.TaggedError<RetryPolicyExpired>()(\n \"@smthrs/flow/RetryPolicyExpired\",\n {\n code: Schema.Literal(\"retry_policy_expired\").pipe(\n Schema.withConstructorDefault(Effect.succeed(\"retry_policy_expired\"))\n ),\n actionName: Schema.String,\n attempt: Schema.Number,\n expirationMs: Schema.Number,\n lastError: Schema.optional(Schema.Unknown)\n }\n) {}\n\n/**\n * A historical retry sequence exhausted its `maxAttempts` bound.\n * Current dispatch preserves the final declared failure instead of emitting this defect.\n *\n * @category errors\n * @since 0.1.0\n */\nexport class RetryAttemptsExhausted extends Schema.TaggedError<RetryAttemptsExhausted>()(\n \"@smthrs/flow/RetryAttemptsExhausted\",\n {\n code: Schema.Literal(\"retry_attempts_exhausted\").pipe(\n Schema.withConstructorDefault(Effect.succeed(\"retry_attempts_exhausted\"))\n ),\n actionName: Schema.String,\n attempt: Schema.Number,\n maxAttempts: Schema.Number,\n lastError: Schema.optional(Schema.Unknown)\n }\n) {}\n\n/**\n * Computes the delay before attempt `attempt + 1` from the persisted attempt\n * count, mirroring Temporal's `ComputeNextDelay`\n * (`common/backoff/retrypolicy.go`).\n *\n * `attempt` is the 1-based attempt that just failed. Returns `None` when the\n * policy gives up: `maxAttempts` reached, a non-positive computed interval,\n * a cap below the initial interval, or \u2014 when the policy declares\n * `expirationMs` and the caller supplies `elapsedMs` \u2014 an elapsed duration\n * past the expiration bound. Otherwise the delay is capped to the remaining\n * expiration window, expiring only when that window cannot fit one more\n * full-value (`initialMs`) attempt.\n *\n * Jitter is deterministic-friendly: `options.random` is a `[0, 1]` sample\n * supplied by the caller and defaults to `1`, which leaves the delay at its\n * un-jittered value. Use {@link nextDelayEffect} to sample the `Random`\n * service instead. A sample outside `[0, 1]`, or a persisted `jitterRatio`\n * above one, gives up rather than returning a delay the policy never\n * declared. A sample of zero under `jitterRatio: 1` is a delay of zero, which\n * retries immediately.\n *\n * @category attempts\n * @since 0.1.0\n */\nexport const nextDelay = (\n policy: RetryPolicy,\n attempt: number,\n options?: {\n readonly random?: number | undefined\n readonly elapsedMs?: number | undefined\n }\n): Option.Option<number> => {\n // Persisted policies can be decoded without `make`, so these guards treat a\n // corrupt row as terminal instead of sending an invalid delay to the engine.\n if (validationIssue(policy) !== undefined || !Number.isSafeInteger(attempt) || attempt < 1) {\n return Option.none()\n }\n if (\n options?.elapsedMs !== undefined &&\n (!Number.isFinite(options.elapsedMs) || options.elapsedMs < 0)\n ) {\n return Option.none()\n }\n if (policy.maxAttempts !== undefined && attempt >= policy.maxAttempts) {\n return Option.none()\n }\n if (\n policy.expirationMs !== undefined &&\n options?.elapsedMs !== undefined &&\n options.elapsedMs > policy.expirationMs\n ) {\n return Option.none()\n }\n const raw = policy.initialMs * Math.pow(policy.factor, attempt - 1)\n if (!(raw > 0)) {\n return Option.none()\n }\n let delay = Math.min(raw, policy.maxMs)\n // Temporal caps the delay to the remaining expiration window rather than\n // refusing outright; the below-initial check then expires sequences whose\n // remaining window cannot fit one more full-value attempt.\n if (policy.expirationMs !== undefined && options?.elapsedMs !== undefined) {\n delay = Math.min(delay, Math.max(0, policy.expirationMs - options.elapsedMs))\n }\n if (delay < policy.initialMs) {\n return Option.none()\n }\n // `validationIssue` established finite `maxMs`, so `Math.min` made the\n // un-jittered delay finite even when the exponential itself overflowed.\n // This check belongs before jitter conceptually: a full-jitter sample of\n // zero is a legitimate immediate retry rather than a give-up.\n if (policy.jitterRatio !== undefined && policy.jitterRatio > 0) {\n // Both jitter inputs are bounded to [0, 1] where they are accepted --\n // `make` for `jitterRatio` and this function's contract for `random` --\n // while `random` is a public option that still needs checking here.\n const random = options?.random ?? 1\n if (!(random >= 0 && random <= 1)) {\n return Option.none()\n }\n // In range, the result is between `delay * (1 - jitterRatio)` and `delay`,\n // so it is finite and never negative. A jittered value of zero retries\n // immediately; it does not exhaust the sequence.\n //\n // The two terms do not sum to exactly `delay` at `random: 1`: at\n // `jitterRatio: 0.000002` a delay of 100 rounds up to 100.00000000000001,\n // above the policy's own cap and above the remaining expiration window.\n // Clamping down to the un-jittered delay is what makes the upper bound\n // stated above exact rather than approximate.\n const jittered = delay * (1 - policy.jitterRatio) + random * delay * policy.jitterRatio\n delay = Math.min(delay, jittered)\n }\n return Option.some(delay)\n}\n\n/**\n * Computes the next retry delay, sampling the `Random` service for jitter.\n *\n * Deterministic under `Random.withSeed`. Policies without a `jitterRatio`\n * never touch the service.\n *\n * @category attempts\n * @since 0.1.0\n */\nexport const nextDelayEffect = (\n policy: RetryPolicy,\n attempt: number,\n options?: { readonly elapsedMs?: number | undefined }\n): Effect.Effect<Option.Option<number>> =>\n policy.jitterRatio === undefined || policy.jitterRatio <= 0\n ? Effect.sync(() => nextDelay(policy, attempt, { elapsedMs: options?.elapsedMs }))\n : Effect.map(Random.next, (random) => nextDelay(policy, attempt, { random, elapsedMs: options?.elapsedMs }))\n\n/**\n * Extracts the stable identity tag of an error for non-retryable matching:\n * an own string `_tag` when present, otherwise the first own `name` descriptor\n * found while walking a bounded prototype chain. That first descriptor decides\n * the result: only a string data value is a tag.\n *\n * Descriptors keep accessors inert instead of running author code through a\n * property read. A bounded walk also terminates when a hostile proxy reports a\n * cyclic prototype chain; any proxy trap that throws leaves the error untagged.\n *\n * @category attempts\n * @since 0.1.0\n */\nexport const errorTag = (error: unknown): string | undefined => {\n if (typeof error !== \"object\" || error === null) return undefined\n try {\n const tag = Object.getOwnPropertyDescriptor(error, \"_tag\")\n if (tag !== undefined && \"value\" in tag && typeof tag.value === \"string\") return tag.value\n\n let current: object | null = error\n for (let depth = 0; current !== null && depth < 64; depth++) {\n const name = Object.getOwnPropertyDescriptor(current, \"name\")\n if (name !== undefined) {\n return \"value\" in name && typeof name.value === \"string\" ? name.value : undefined\n }\n current = Object.getPrototypeOf(current)\n }\n } catch {\n // Proxies and hostile accessors are untrusted failure payloads. An error\n // that cannot be inspected inertly simply has no stable retry tag.\n }\n return undefined\n}\n\n/**\n * Error tags that are non-retryable by type, under every policy (issue #156).\n *\n * These failures are integrity verdicts that must reach the driver without an\n * action-level retry hiding the first detection. Their persistence seams\n * take a quarantine state action before raising them, so a later dispatch can\n * heal, but the detecting dispatch remains a non-retryable failure. No\n * per-callsite or per-policy opt-out exists; the tags are matched by string so\n * the classification does not invert the package dependency direction.\n *\n * `AttemptEvidenceQuarantined` (issue #171) is the succeeded-attempt-row\n * counterpart: the corrupt boundary evidence is removed while the completed\n * outcome stays durable. It reaches the driver unretried, which parks the\n * first detection in the `quarantine` waiting state; the next explicit resume\n * returns the recorded outcome without re-executing the action.\n *\n * @category attempts\n * @since 0.1.0\n */\nexport const defaultNonRetryable: ReadonlyArray<string> = [\n \"@smthrs/engine-store/CacheCorruptionDetected\",\n \"@smthrs/engine-store/AttemptEvidenceQuarantined\"\n]\n\n/**\n * Whether an error is classified non-retryable, either by type (see\n * {@link defaultNonRetryable}) or by the policy's declared tag list.\n *\n * @category attempts\n * @since 0.1.0\n */\nexport const isNonRetryable = (policy: RetryPolicy, error: unknown): boolean => {\n const tag = errorTag(error)\n if (tag === undefined) {\n return false\n }\n if (defaultNonRetryable.includes(tag)) {\n return true\n }\n return policy.nonRetryable !== undefined && policy.nonRetryable.includes(tag)\n}\n\n/**\n * The pure core of the engine's single retry decision point.\n *\n * Non-retryable classification is evaluated here and nowhere else. This is\n * the default a pluggable `resolveRetry` resolution falls back to when no\n * plugin claims the decision.\n *\n * @category attempts\n * @since 0.1.0\n */\nexport const decide = (\n policy: RetryPolicy,\n options: {\n readonly attempt: number\n readonly error: unknown\n readonly random?: number | undefined\n readonly elapsedMs?: number | undefined\n }\n): RetryDecision => {\n if (isNonRetryable(policy, options.error)) {\n return giveUp(\"nonRetryable\")\n }\n return Option.match(\n nextDelay(policy, options.attempt, { random: options.random, elapsedMs: options.elapsedMs }),\n {\n onNone: () =>\n // A policy can report `expired` only when it declares an expiration\n // bound and dropping elapsed time would have allowed another attempt.\n // A malformed elapsed value still gives up because the sequence cannot\n // continue without a trustworthy clock reading; without an expiration\n // bound, the public terminal reason for that refusal is `exhausted`.\n policy.expirationMs !== undefined &&\n Option.isSome(nextDelay(policy, options.attempt, { random: options.random }))\n ? giveUp(\"expired\")\n : giveUp(\"exhausted\"),\n onSome: (delay) => {\n // Tool failures may supply a delay instead of using policy backoff.\n // Inspect only an own data property: failure payloads can be untrusted.\n let hint: unknown\n if (typeof options.error === \"object\" && options.error !== null) {\n try {\n const descriptor = Object.getOwnPropertyDescriptor(options.error, \"retryAfterMs\")\n if (descriptor !== undefined && \"value\" in descriptor) hint = descriptor.value\n } catch {\n // An uninspectable failure falls back to the policy delay.\n }\n }\n if (typeof hint !== \"number\" || !Number.isFinite(hint) || hint < 0) {\n return retryAfter(delay)\n }\n return retryAfter(Math.min(\n hint,\n policy.maxMs,\n policy.expirationMs !== undefined && options.elapsedMs !== undefined\n ? Math.max(0, policy.expirationMs - options.elapsedMs)\n : policy.maxMs\n ))\n }\n }\n )\n}\n\n/**\n * Effect form of {@link decide}, sampling the `Random` service for jitter.\n *\n * This is the engine-facing decision function: keep calls to it behind a\n * single decision point so a plugin hook dispatch can later be inserted in\n * front of it without touching call sites.\n *\n * @category attempts\n * @since 0.1.0\n */\nexport const decideEffect = (\n policy: RetryPolicy,\n options: {\n readonly attempt: number\n readonly error: unknown\n readonly elapsedMs?: number | undefined\n }\n): Effect.Effect<RetryDecision> =>\n policy.jitterRatio === undefined || policy.jitterRatio <= 0\n ? Effect.sync(() => decide(policy, options))\n : Effect.map(Random.next, (random) => decide(policy, { ...options, random }))\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,98 @@
1
+ /**
2
+ * The system timer, as an ordinary declared action.
3
+ *
4
+ * `docs/concepts/flows-and-actions.md` names the timer primitive a
5
+ * gap and says how to close it: ship it over the existing `DurableClock`, so a
6
+ * wait is a visible, keyed plan node rather than a second execution mechanism.
7
+ * That is this module. {@link action} is a plain `Action.make` declaration —
8
+ * it appears in a catalog, `.call()` records a node, and `Graph.build` puts that
9
+ * node in the plan beside every other step — and {@link layer} is the
10
+ * implementation the hosts that can run a timer provide.
11
+ *
12
+ * The wait itself is `DurableClock`'s, not a new one. The implementation arms
13
+ * the durable clock and awaits its deferred, which is what parks the execution;
14
+ * the park is declared through the ordinary waiting vocabulary
15
+ * ({@link module:WaitingAnnotation.annotateWaiting}) under `timer`, with the
16
+ * deadline as `wakeAt`, so a durable driver records the same waiting row it
17
+ * records for a hand-written `DurableClock.sleep`. Replay is the deferred's:
18
+ * once the clock has fired, its result is persisted, so a re-driven round reads
19
+ * it and runs straight through instead of parking a second time.
20
+ *
21
+ * Which clock a wait arms is the dispatch's own, read from
22
+ * {@link module:Context.CurrentInvocationKey}: a keyed node already owns an
23
+ * identity that survives replay and separates two identical calls, so the timer
24
+ * inherits it rather than being addressed by the payload it was called with.
25
+ *
26
+ * @since 0.1.0
27
+ */
28
+ import type * as Crypto from "effect/Crypto";
29
+ import type * as Layer from "effect/Layer";
30
+ import * as Schema from "effect/Schema";
31
+ import * as Action from "./Action/index.ts";
32
+ import type { FlowRuntime } from "./FlowRuntime/FlowRuntime.ts";
33
+ declare const SleepRequestInvalid_base: Schema.Class<SleepRequestInvalid, Schema.TaggedStruct<"@smthrs/flow/SleepRequestInvalid", {
34
+ readonly code: Schema.Literals<readonly ["missing_deadline", "ambiguous_deadline", "invalid_deadline"]>;
35
+ readonly message: Schema.String;
36
+ }>, import("effect/Cause").YieldableError>;
37
+ /**
38
+ * A sleep whose payload does not name exactly one deadline.
39
+ *
40
+ * A payload carries a relative `millis` or an absolute `until`, and naming
41
+ * both, or neither, leaves no deadline to arm a clock with. It is a typed
42
+ * failure rather than a defect because the payload of a driven node is
43
+ * assembled from plan values, so an author's mistake is recoverable through
44
+ * `Node.catch` like any other declared failure.
45
+ *
46
+ * @category errors
47
+ * @since 0.1.0
48
+ */
49
+ export declare class SleepRequestInvalid extends SleepRequestInvalid_base {
50
+ }
51
+ /**
52
+ * The tag the sleep declaration is catalogued and resolved under.
53
+ *
54
+ * @category constructors
55
+ * @since 0.1.0
56
+ */
57
+ export declare const tag = "system/sleep";
58
+ /**
59
+ * The declared sleep action: `millis` from now, or an absolute `until`.
60
+ *
61
+ * **When to use**
62
+ *
63
+ * Use it in a body wherever a round has to wait for time to pass —
64
+ * `Sleep.action.call({ millis: 60_000 })` — rather than reaching for
65
+ * `DurableClock.sleep`, which is only callable from a handler and leaves
66
+ * nothing in the plan. A sleep node is keyed, inspectable, and skippable by a
67
+ * branch exactly like an action that does work.
68
+ *
69
+ * Two waits of the same length are two waits: `sleep(1h)` followed by
70
+ * `sleep(1h)` sleeps for two hours, because each call is its own node with its
71
+ * own identity, exactly as two calls of any other declaration are.
72
+ *
73
+ * @category constructors
74
+ * @since 0.1.0
75
+ */
76
+ export declare const action: Action.Declared<typeof tag, Schema.Struct<{
77
+ readonly millis: Schema.optional<Schema.Number>;
78
+ readonly until: Schema.optional<Schema.Number>;
79
+ }>, typeof Schema.Void, typeof SleepRequestInvalid, never>;
80
+ /**
81
+ * The sleep implementation: arm the durable clock, park under `timer`, wake.
82
+ *
83
+ * Provide it beside the other action implementation layers a body calls, over
84
+ * the {@link module:Implementations.layerImplementations} table they file
85
+ * themselves in:
86
+ *
87
+ * ```ts
88
+ * Layer.mergeAll(Sleep.layer, Interpreter.layer(Pipeline)).pipe(
89
+ * Layer.provideMerge(Action.layerImplementations)
90
+ * )
91
+ * ```
92
+ *
93
+ * @category layers
94
+ * @since 0.1.0
95
+ */
96
+ export declare const layer: Layer.Layer<never, never, Crypto.Crypto | FlowRuntime>;
97
+ export {};
98
+ //# sourceMappingURL=Sleep.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Sleep.d.ts","sourceRoot":"","sources":["../../src/Sleep.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAGH,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAA;AAG5C,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAA;AAC1C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAE3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;;;;;AAG/D;;;;;;;;;;;GAWG;AACH,qBAAa,mBAAoB,SAAQ,wBAMxC;CAAG;AAEJ;;;;;GAKG;AACH,eAAO,MAAM,GAAG,iBAAiB,CAAA;AAEjC;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,QAAQ,CAClC,OAAO,GAAG,EACV,MAAM,CAAC,MAAM,CAAC;IACZ,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IAC/C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;CAC/C,CAAC,EACF,OAAO,MAAM,CAAC,IAAI,EAClB,OAAO,mBAAmB,EAC1B,KAAK,CASL,CAAA;AA0IF;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,GAAG,WAAW,CAuCxE,CAAA"}
@@ -0,0 +1,141 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var Sleep_exports = {};
30
+ __export(Sleep_exports, {
31
+ SleepRequestInvalid: () => SleepRequestInvalid,
32
+ action: () => action,
33
+ layer: () => layer,
34
+ tag: () => tag
35
+ });
36
+ module.exports = __toCommonJS(Sleep_exports);
37
+ var Clock = __toESM(require("effect/Clock"), 1);
38
+ var Duration = __toESM(require("effect/Duration"), 1);
39
+ var Effect = __toESM(require("effect/Effect"), 1);
40
+ var Schema = __toESM(require("effect/Schema"), 1);
41
+ var Action = __toESM(require("./Action/index.js"), 1);
42
+ var DurableClock = __toESM(require("./DurableClock.js"), 1);
43
+ var import_WaitingAnnotation = require("./FlowRuntime/WaitingAnnotation.js");
44
+ class SleepRequestInvalid extends Schema.TaggedError()(
45
+ "@smthrs/flow/SleepRequestInvalid",
46
+ {
47
+ code: Schema.Literals(["missing_deadline", "ambiguous_deadline", "invalid_deadline"]),
48
+ message: Schema.String
49
+ }
50
+ ) {
51
+ }
52
+ const tag = "system/sleep";
53
+ const action = Action.makeSystem(tag, {
54
+ payload: {
55
+ millis: Schema.optional(Schema.Number),
56
+ until: Schema.optional(Schema.Number)
57
+ },
58
+ success: Schema.Void,
59
+ error: SleepRequestInvalid,
60
+ tier: "sealed"
61
+ });
62
+ const latestDeadline = Number.MAX_SAFE_INTEGER;
63
+ const tooLate = (stated) => new SleepRequestInvalid({
64
+ code: "invalid_deadline",
65
+ message: `${tag} was called with ${stated}, which ends after ${latestDeadline}, the latest epoch millisecond a durable timer records.`
66
+ });
67
+ const deadlineOf = (payload, now) => {
68
+ if (payload.millis !== void 0 && payload.until !== void 0) {
69
+ return Effect.fail(
70
+ new SleepRequestInvalid({
71
+ code: "ambiguous_deadline",
72
+ message: `${tag} was called with both "millis" and "until". A sleep names one deadline: a relative duration, or an absolute epoch time.`
73
+ })
74
+ );
75
+ }
76
+ if (payload.millis !== void 0) {
77
+ if (!Number.isFinite(payload.millis) || payload.millis < 0) {
78
+ return Effect.fail(
79
+ new SleepRequestInvalid({
80
+ code: "invalid_deadline",
81
+ message: `${tag} was called with millis ${payload.millis}. A deadline is a finite number of milliseconds that is not negative; the sleep would be over before it started, or never over at all.`
82
+ })
83
+ );
84
+ }
85
+ const deadline = now + payload.millis;
86
+ if (!Number.isFinite(deadline)) {
87
+ return Effect.fail(
88
+ new SleepRequestInvalid({
89
+ code: "invalid_deadline",
90
+ message: `${tag} was called with millis ${payload.millis} at current time ${now}, which produces ${deadline}. A deadline is a finite epoch time in milliseconds.`
91
+ })
92
+ );
93
+ }
94
+ return Math.ceil(deadline) > latestDeadline ? Effect.fail(tooLate(`millis ${payload.millis} at current time ${now}`)) : Effect.succeed(deadline);
95
+ }
96
+ if (payload.until !== void 0) {
97
+ if (!Number.isFinite(payload.until)) {
98
+ return Effect.fail(
99
+ new SleepRequestInvalid({
100
+ code: "invalid_deadline",
101
+ message: `${tag} was called with until ${payload.until}. A deadline is a finite epoch time in milliseconds; the sleep must end at a real point in time.`
102
+ })
103
+ );
104
+ }
105
+ return Math.ceil(payload.until) > latestDeadline ? Effect.fail(tooLate(`until ${payload.until}`)) : Effect.succeed(payload.until);
106
+ }
107
+ return Effect.fail(
108
+ new SleepRequestInvalid({
109
+ code: "missing_deadline",
110
+ message: `${tag} was called with neither "millis" nor "until", so there is no deadline to wait for.`
111
+ })
112
+ );
113
+ };
114
+ const clockName = Effect.gen(function* () {
115
+ const invocation = yield* Action.CurrentInvocationKey;
116
+ if (invocation === void 0) {
117
+ return yield* Effect.die(
118
+ `${tag} ran under a runtime that supplies no Action.CurrentInvocationKey. A durable timer is named by the dispatch that armed it, so a runtime that does not identify the dispatch cannot arm one.`
119
+ );
120
+ }
121
+ return `Sleep/${invocation}`;
122
+ });
123
+ const layer = action.toLayer(
124
+ (payload) => Effect.gen(function* () {
125
+ const now = Math.floor(yield* Clock.currentTimeMillis);
126
+ const wakeAt = Math.ceil(yield* deadlineOf(payload, now));
127
+ const remaining = wakeAt - now;
128
+ if (remaining <= 0) return;
129
+ const name = yield* clockName;
130
+ yield* (0, import_WaitingAnnotation.annotateWaiting)({ reason: "timer", wakeAt });
131
+ yield* DurableClock.sleep({
132
+ name,
133
+ duration: Duration.millis(remaining),
134
+ // The wait is the point: a sleep called as a plan node parks the
135
+ // execution rather than holding a fiber open, so the in-memory shortcut
136
+ // is disabled instead of being left at its 60-second default.
137
+ inMemoryThreshold: Duration.zero
138
+ });
139
+ })
140
+ );
141
+ //# sourceMappingURL=Sleep.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/Sleep.ts"],
4
+ "sourcesContent": ["/**\n * The system timer, as an ordinary declared action.\n *\n * `docs/concepts/flows-and-actions.md` names the timer primitive a\n * gap and says how to close it: ship it over the existing `DurableClock`, so a\n * wait is a visible, keyed plan node rather than a second execution mechanism.\n * That is this module. {@link action} is a plain `Action.make` declaration \u2014\n * it appears in a catalog, `.call()` records a node, and `Graph.build` puts that\n * node in the plan beside every other step \u2014 and {@link layer} is the\n * implementation the hosts that can run a timer provide.\n *\n * The wait itself is `DurableClock`'s, not a new one. The implementation arms\n * the durable clock and awaits its deferred, which is what parks the execution;\n * the park is declared through the ordinary waiting vocabulary\n * ({@link module:WaitingAnnotation.annotateWaiting}) under `timer`, with the\n * deadline as `wakeAt`, so a durable driver records the same waiting row it\n * records for a hand-written `DurableClock.sleep`. Replay is the deferred's:\n * once the clock has fired, its result is persisted, so a re-driven round reads\n * it and runs straight through instead of parking a second time.\n *\n * Which clock a wait arms is the dispatch's own, read from\n * {@link module:Context.CurrentInvocationKey}: a keyed node already owns an\n * identity that survives replay and separates two identical calls, so the timer\n * inherits it rather than being addressed by the payload it was called with.\n *\n * @since 0.1.0\n */\n\nimport * as Clock from \"effect/Clock\"\nimport type * as Crypto from \"effect/Crypto\"\nimport * as Duration from \"effect/Duration\"\nimport * as Effect from \"effect/Effect\"\nimport type * as Layer from \"effect/Layer\"\nimport * as Schema from \"effect/Schema\"\nimport * as Action from \"./Action/index.ts\"\nimport * as DurableClock from \"./DurableClock.ts\"\nimport type { FlowRuntime } from \"./FlowRuntime/FlowRuntime.ts\"\nimport { annotateWaiting } from \"./FlowRuntime/WaitingAnnotation.ts\"\n\n/**\n * A sleep whose payload does not name exactly one deadline.\n *\n * A payload carries a relative `millis` or an absolute `until`, and naming\n * both, or neither, leaves no deadline to arm a clock with. It is a typed\n * failure rather than a defect because the payload of a driven node is\n * assembled from plan values, so an author's mistake is recoverable through\n * `Node.catch` like any other declared failure.\n *\n * @category errors\n * @since 0.1.0\n */\nexport class SleepRequestInvalid extends Schema.TaggedError<SleepRequestInvalid>()(\n \"@smthrs/flow/SleepRequestInvalid\",\n {\n code: Schema.Literals([\"missing_deadline\", \"ambiguous_deadline\", \"invalid_deadline\"]),\n message: Schema.String\n }\n) {}\n\n/**\n * The tag the sleep declaration is catalogued and resolved under.\n *\n * @category constructors\n * @since 0.1.0\n */\nexport const tag = \"system/sleep\"\n\n/**\n * The declared sleep action: `millis` from now, or an absolute `until`.\n *\n * **When to use**\n *\n * Use it in a body wherever a round has to wait for time to pass \u2014\n * `Sleep.action.call({ millis: 60_000 })` \u2014 rather than reaching for\n * `DurableClock.sleep`, which is only callable from a handler and leaves\n * nothing in the plan. A sleep node is keyed, inspectable, and skippable by a\n * branch exactly like an action that does work.\n *\n * Two waits of the same length are two waits: `sleep(1h)` followed by\n * `sleep(1h)` sleeps for two hours, because each call is its own node with its\n * own identity, exactly as two calls of any other declaration are.\n *\n * @category constructors\n * @since 0.1.0\n */\nexport const action: Action.Declared<\n typeof tag,\n Schema.Struct<{\n readonly millis: Schema.optional<Schema.Number>\n readonly until: Schema.optional<Schema.Number>\n }>,\n typeof Schema.Void,\n typeof SleepRequestInvalid,\n never\n> = Action.makeSystem(tag, {\n payload: {\n millis: Schema.optional(Schema.Number),\n until: Schema.optional(Schema.Number)\n },\n success: Schema.Void,\n error: SleepRequestInvalid,\n tier: \"sealed\"\n})\n\n/**\n * The latest deadline a sleep can arm, in epoch milliseconds.\n *\n * A durable store records `wakeAt` and a clock's due time as a non-negative\n * safe integer. A finite deadline past this one passed every other check and\n * then failed the park write, so it is refused with the payload's other\n * invalid deadlines instead.\n *\n * @private\n */\nconst latestDeadline = Number.MAX_SAFE_INTEGER\n\n/**\n * The refusal for a deadline later than {@link latestDeadline}.\n *\n * @private\n */\nconst tooLate = (stated: string): SleepRequestInvalid =>\n new SleepRequestInvalid({\n code: \"invalid_deadline\",\n message: `${tag} was called with ${stated}, which ends after ${latestDeadline}, the latest epoch ` +\n \"millisecond a durable timer records.\"\n })\n\n/**\n * The absolute deadline a payload names, in epoch milliseconds.\n *\n * DECIDED: a payload names EXACTLY one of `millis`\n * and `until`, and both other shapes are refused rather than resolved by\n * precedence. A precedence rule would silently ignore half of a payload an\n * author believed in, and the two fields are the same fact stated two ways, so\n * there is no shape where carrying both is meaningful.\n *\n * `Duration.millis` accepts every number, so an unchecked deadline changes the\n * sleep instead of refusing it. `NaN` becomes zero, a negative relative delay\n * has already passed, and `Infinity` never ends. The implementation rejects\n * those values before it annotates the instance or arms a clock. A finite\n * absolute `until` remains legal when it is in the past because that sleep can\n * settle immediately.\n *\n * @private\n */\nconst deadlineOf = (\n payload: { readonly millis?: number | undefined; readonly until?: number | undefined },\n now: number\n): Effect.Effect<number, SleepRequestInvalid> => {\n if (payload.millis !== undefined && payload.until !== undefined) {\n return Effect.fail(\n new SleepRequestInvalid({\n code: \"ambiguous_deadline\",\n message: `${tag} was called with both \"millis\" and \"until\". A sleep names one deadline: ` +\n \"a relative duration, or an absolute epoch time.\"\n })\n )\n }\n if (payload.millis !== undefined) {\n if (!Number.isFinite(payload.millis) || payload.millis < 0) {\n return Effect.fail(\n new SleepRequestInvalid({\n code: \"invalid_deadline\",\n message: `${tag} was called with millis ${payload.millis}. A deadline is a finite number of ` +\n \"milliseconds that is not negative; the sleep would be over before it started, or never over at all.\"\n })\n )\n }\n const deadline = now + payload.millis\n if (!Number.isFinite(deadline)) {\n return Effect.fail(\n new SleepRequestInvalid({\n code: \"invalid_deadline\",\n message: `${tag} was called with millis ${payload.millis} at current time ${now}, which produces ` +\n `${deadline}. A deadline is a finite epoch time in milliseconds.`\n })\n )\n }\n return Math.ceil(deadline) > latestDeadline\n ? Effect.fail(tooLate(`millis ${payload.millis} at current time ${now}`))\n : Effect.succeed(deadline)\n }\n if (payload.until !== undefined) {\n if (!Number.isFinite(payload.until)) {\n return Effect.fail(\n new SleepRequestInvalid({\n code: \"invalid_deadline\",\n message:\n `${tag} was called with until ${payload.until}. A deadline is a finite epoch time in milliseconds; ` +\n \"the sleep must end at a real point in time.\"\n })\n )\n }\n return Math.ceil(payload.until) > latestDeadline\n ? Effect.fail(tooLate(`until ${payload.until}`))\n : Effect.succeed(payload.until)\n }\n return Effect.fail(\n new SleepRequestInvalid({\n code: \"missing_deadline\",\n message: `${tag} was called with neither \"millis\" nor \"until\", so there is no deadline to wait for.`\n })\n )\n}\n\n/**\n * The durable clock the dispatch currently executing arms.\n *\n * DECIDED: the name is derived from the ENGINE's\n * per-dispatch identity \u2014 the invocation key it already allocated \u2014 rather than\n * from the payload. A durable clock's deferred is addressed by (execution,\n * name), so the name has to be stable across replays of one node and distinct\n * between two identical nodes, and the invocation key is exactly that: it is\n * allocated on every dispatch including a replayed one, because the driver\n * addresses the recorded outcome by it. A payload-derived name has only the\n * first property \u2014 `sleep(1h); work(); sleep(1h)` would address ONE wake and\n * sleep once \u2014 and closing that with a discriminator in the payload would make\n * an author carry identity that a keyed plan node already has.\n *\n * DECIDED: a runtime that supplies no dispatch\n * identity is refused as a defect rather than falling back to the payload. The\n * fallback is unobservable in the one-wait case and silently collapses two\n * waits in every other, so it would trade a wiring error a host fixes once for\n * a run that quietly sleeps for half as long as it declared.\n *\n * @private\n */\nconst clockName: Effect.Effect<string> = Effect.gen(function*() {\n const invocation = yield* Action.CurrentInvocationKey\n if (invocation === undefined) {\n return yield* Effect.die(\n `${tag} ran under a runtime that supplies no Action.CurrentInvocationKey. ` +\n \"A durable timer is named by the dispatch that armed it, so a runtime that does not \" +\n \"identify the dispatch cannot arm one.\"\n )\n }\n return `Sleep/${invocation}`\n})\n\n/**\n * The sleep implementation: arm the durable clock, park under `timer`, wake.\n *\n * Provide it beside the other action implementation layers a body calls, over\n * the {@link module:Implementations.layerImplementations} table they file\n * themselves in:\n *\n * ```ts\n * Layer.mergeAll(Sleep.layer, Interpreter.layer(Pipeline)).pipe(\n * Layer.provideMerge(Action.layerImplementations)\n * )\n * ```\n *\n * @category layers\n * @since 0.1.0\n */\nexport const layer: Layer.Layer<never, never, Crypto.Crypto | FlowRuntime> = action.toLayer((payload) =>\n Effect.gen(function*() {\n // Whole milliseconds, both of them. A durable deadline lands in an INTEGER\n // column whose CHECK constraint refuses anything else\n // (`flows_runs.waiting_wake_at_ms`, `flows_clock_deadlines.due_at_ms`), and\n // `Clock.currentTimeMillis` is not integral under every clock: a test clock\n // advanced by a fractional-millisecond sleep reports a fractional now, and\n // a fractional `millis` or `until` in the payload does the same. The\n // unrounded deadline reached the park write as a raw SQL constraint\n // failure, which killed the drive and left the run `running` with nothing\n // left to wake it. `now` floors, and the deadline ceils so a rounded sleep\n // never ends before the instant it was asked to wait for.\n const now = Math.floor(yield* Clock.currentTimeMillis)\n const wakeAt = Math.ceil(yield* deadlineOf(payload, now))\n const remaining = wakeAt - now\n // DECIDED: a deadline that has already passed\n // settles the node instead of parking it. A durable wait exists to survive\n // the gap until a deadline, and a run that resumes after its own deadline\n // has to make progress rather than park again on a timer that can only fire\n // in the past.\n if (remaining <= 0) return\n const name = yield* clockName\n // DECIDED: the park is declared rather than\n // left to a driver's derivation, so a host with no clock table still parks\n // under `timer`. A `millis` deadline is recomputed from the current clock,\n // so a round re-driven before its timer fires re-declares a `wakeAt` later\n // than the armed one; the wake itself is unaffected, because the durable\n // clock row is keyed by name and keeps the deadline it was first armed\n // with, and `wakeAt` is a sweeper hint rather than the wake.\n yield* annotateWaiting({ reason: \"timer\", wakeAt })\n yield* DurableClock.sleep({\n name,\n duration: Duration.millis(remaining),\n // The wait is the point: a sleep called as a plan node parks the\n // execution rather than holding a fiber open, so the in-memory shortcut\n // is disabled instead of being left at its 60-second default.\n inMemoryThreshold: Duration.zero\n })\n })\n)\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }