@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,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/Poll.ts"],
4
+ "sourcesContent": ["/**\n * Polling as a durable lineage: one attempt per round, a durable wait between\n * attempts, and a bound the lineage settles on.\n *\n * Smithers 0.x had a `Poller` component \u2014 a check, an interval, a backoff, an\n * attempt bound, and what to do at that bound. The pieces it was built from\n * already exist here: {@link module:Sleep.action} is the durable wait, and\n * `Flow.to` opens the next round. What was missing is the shape that puts them\n * together, and that is this module.\n *\n * A poll is a flow whose body is ONE attempt. It runs the check, and branches:\n * a satisfied check settles the lineage with the check's own output, an\n * unsatisfied one sleeps for this attempt's delay and hands off to the next\n * round with the attempt counter raised. The last attempt has no sleep and no\n * handoff \u2014 it either answers with the output it just read (`return-last`) or\n * fails {@link PollExhausted} (`fail`).\n *\n * Everything durable about it is durable for the ordinary reason. Each attempt\n * is a round with its own keyed plan nodes, so a check that already ran replays\n * from its recorded outcome instead of running again; the wait between attempts\n * is a durable timer, so a process that dies during it resumes on the round it\n * left rather than starting the poll over; and the attempt counter travels in\n * the payload, so nothing about \"which attempt is this\" lives in memory.\n *\n * The bound is stated twice on purpose. The body ends the lineage on the last\n * attempt, and `maxAttempts` is also the flow's `maxRounds` budget, so a\n * lineage that somehow opened another round is refused by the engine rather\n * than polling forever.\n *\n * @since 0.1.0\n */\n\nimport * as Node from \"@smthrs/plan/Node\"\nimport type * as Repetition from \"@smthrs/plan/Repetition\"\nimport type * as Crypto from \"effect/Crypto\"\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 Flow from \"./Flow/index.ts\"\nimport type { FlowRuntime } from \"./FlowRuntime/FlowRuntime.ts\"\nimport * as Sleep from \"./Sleep.ts\"\n\n/**\n * How the wait between attempts grows.\n *\n * `fixed` waits the interval every time, `linear` waits the interval times the\n * attempt, and `exponential` doubles the interval on every attempt.\n *\n * @category models\n * @since 0.1.0\n */\nexport type Backoff = \"fixed\" | \"linear\" | \"exponential\"\n\n/**\n * What a check reports: whether the poll is over, and the value this attempt\n * read.\n *\n * The output travels on every attempt, satisfied or not, because it is also\n * the answer a `return-last` poll settles with when it runs out of attempts.\n *\n * @category models\n * @since 0.1.0\n */\nexport interface Check<out Result> {\n readonly satisfied: boolean\n readonly output: Result\n}\n\n/**\n * The success schema a check action declares.\n *\n * @category schemas\n * @since 0.1.0\n */\nexport const CheckResult = <Result extends Schema.Top>(\n result: Result\n): Schema.Struct<{\n readonly satisfied: typeof Schema.Boolean\n readonly output: Result\n}> => Schema.Struct({ satisfied: Schema.Boolean, output: result })\n\n/**\n * A poll that used its last attempt without a satisfied check.\n *\n * It is a typed failure rather than a defect: running out of attempts is an\n * expected outcome of polling something that may never become ready, so a\n * caller recovers from it through `Node.catch` like any other declared failure.\n *\n * @category errors\n * @since 0.1.0\n */\nexport class PollExhausted extends Schema.TaggedError<PollExhausted>()(\n \"@smthrs/flow/PollExhausted\",\n {\n // This wire shape freezes at 1.0.0-rc.0.\n code: Schema.Literal(\"poll_exhausted\").pipe(\n Schema.withConstructorDefault(Effect.succeed(\"poll_exhausted\"))\n ),\n poll: Schema.String,\n attempts: Schema.Number,\n message: Schema.String\n }\n) {}\n\n/**\n * The tag the exhaustion step is catalogued and resolved under.\n *\n * @category constructors\n * @since 0.1.0\n */\nexport const exhaustedTag = \"system/poll-exhausted\"\n\n/**\n * The declared step a poll takes when its last attempt was not satisfied.\n *\n * Running out of attempts is a step rather than a bare `Effect.fail` so the\n * exhaustion is in the plan and in the journal: the round that gave up shows\n * which poll gave up and after how many attempts, exactly like every other node\n * a body drove.\n *\n * @category constructors\n * @since 0.1.0\n */\nexport const exhausted: Action.Declared<\n typeof exhaustedTag,\n Schema.Struct<{\n readonly poll: typeof Schema.String\n readonly attempts: typeof Schema.Number\n }>,\n typeof Schema.Never,\n typeof PollExhausted,\n never\n> = Action.makeSystem(exhaustedTag, {\n payload: { poll: Schema.String, attempts: Schema.Number },\n success: Schema.Never,\n error: PollExhausted,\n tier: \"sealed\"\n})\n\n/**\n * The wait before the attempt after this one, in milliseconds.\n *\n * @category combinators\n * @since 0.1.0\n */\nexport const delayMillis = (options: {\n readonly intervalMs: number\n readonly backoff: Backoff\n readonly attempt: number\n}): number =>\n options.intervalMs *\n (options.backoff === \"fixed\" ? 1 : options.backoff === \"linear\" ? options.attempt : 2 ** (options.attempt - 1))\n\n/**\n * What a poll round can fail with.\n *\n * {@link PollExhausted} is the poll's own failure. `SleepRequestInvalid` is the\n * wait node's, declared because the wait between attempts is an ordinary\n * {@link module:Sleep.action} node and its typed refusal is part of the\n * topology a poll carries. Its codes cover a payload that names no deadline,\n * names two deadlines, or names a value that is not a deadline. {@link make}\n * refuses invalid author schedules at construction. A caller-visible round\n * payload can still carry an invalid attempt that produces an invalid derived\n * wait, so `Sleep` refuses that wait before the round parks.\n *\n * @category schemas\n * @since 0.1.0\n */\nexport const Failure: Schema.Union<\n readonly [typeof PollExhausted, typeof Sleep.SleepRequestInvalid]\n> = Schema.Union([PollExhausted, Sleep.SleepRequestInvalid])\n\n/**\n * The payload schema {@link make} derives from an author's input fields: the\n * author's own fields, plus the attempt this round is.\n *\n * `attempt` is optional so a caller starts a poll with its own fields alone;\n * the first round reads it as one.\n *\n * @category models\n * @since 0.1.0\n */\nexport type PayloadSchema<Input extends Schema.Struct.Fields> = Schema.Struct<\n Input & { readonly attempt: Schema.optional<typeof Schema.Number> }\n>\n\n/**\n * The payload schema one round is opened with: the author's fields, plus the\n * attempt counter the lineage carries between them.\n *\n * @private\n */\nconst payloadSchema = <Input extends Schema.Struct.Fields>(\n input: Input,\n maxAttempts: number\n): PayloadSchema<Input> =>\n Schema.Struct({\n ...input,\n attempt: Schema.optional(\n Schema.Int.check(\n Schema.isGreaterThanOrEqualTo(1),\n Schema.isLessThanOrEqualTo(maxAttempts)\n )\n )\n })\n\n/**\n * The attempt a round payload carries, defaulting to the first.\n *\n * @private\n */\nconst attemptOf = (payload: object): number => {\n const attempt = (payload as { readonly attempt?: unknown }).attempt\n return typeof attempt === \"number\" ? attempt : 1\n}\n\n/**\n * Rebuilds a round payload with an explicit attempt.\n *\n * The two views of one round payload \u2014 what the check reads, and what the next\n * round is opened with \u2014 are the same fields with `attempt` resolved. TypeScript\n * cannot reduce a mapped type over an unresolved generic field set, so the\n * shape is stated once here instead of at each use.\n *\n * @private\n */\nconst withAttempt = <Payload>(payload: object, attempt: number): Payload =>\n ({ ...payload, attempt }) as unknown as Payload\n\n/**\n * Declares a durable poller.\n *\n * **When to use**\n *\n * Use it wherever a run has to keep asking until something is ready \u2014 a build\n * that finishes, a deployment that goes live, a review that lands \u2014 and the\n * waiting has to survive a restart. `check` is the one thing an author writes:\n * a body fragment that reads whatever it polls and reports a {@link Check}.\n * Everything else is schedule. Under stable callback admission (the default of\n * `Interpreter.layerWithImplementations`), wrap `check` in `Node.capture` with\n * every semantic capture, including a version for imported behavior. An\n * uncaptured check keeps the poll process-local. The helper captures its own\n * callbacks using the schedule and the check's identity.\n *\n * ```ts\n * const Deployment = Poll.make(\"deploy/wait\", {\n * input: { id: Schema.String },\n * result: Schema.String,\n * intervalMs: 5_000,\n * backoff: \"exponential\",\n * maxAttempts: 8,\n * onTimeout: \"fail\",\n * check: Node.capture(\n * { action: Status.name, implementationVersion: \"deploy/status-check/v1\" },\n * ({ attempt, id }) => Status.call({ attempt, id })\n * )\n * })\n * ```\n *\n * The check may not fail. A check that can fail states what a failure means for\n * the poll \u2014 give up, or treat it as \"not ready yet\" \u2014 with `Node.catch` inside\n * the fragment, rather than leaving the poll to guess.\n *\n * A per-attempt time limit on the check itself is NOT a poll option. A plan\n * node's duration is not something the body around it can bound; that bound\n * belongs in the check's own implementation, where `DurableDeferred.raceAll`\n * races the work against a durable clock and stays replayable.\n *\n * A schedule no clock can be armed with is refused here, with a `RangeError`\n * naming the option that is wrong. `intervalMs` becomes the `millis` of a\n * {@link module:Sleep.action} node, and a wait of `Infinity`, `NaN`, or a\n * negative length arms a timer that never fires \u2014 a poll that hangs forever\n * with a plan that looks correct. The check is on the schedule, not only on the\n * interval: `{ intervalMs: 1000, maxAttempts: 2000, backoff: \"exponential\" }`\n * states three finite options and asks for an infinite wait, so the LAST wait\n * the poll can arm has to be a length too. `maxAttempts` is the lineage's round\n * budget, and a budget below one attempt reaches `Flow.make` as a `maxRounds`\n * complaint about an option the author never wrote.\n *\n * @throws A `RangeError` when `intervalMs` is not a duration a clock accepts,\n * when `maxAttempts` is not a whole number of attempts of at least one, or when\n * the interval under the declared backoff reaches a wait no clock can be armed\n * with before the budget is spent.\n * @category constructors\n * @since 0.1.0\n */\nexport const make = <\n const Tag extends string,\n Input extends Schema.Struct.Fields,\n Result extends Schema.Top,\n R = never\n>(\n tag: Tag,\n options: {\n readonly input: Input\n readonly result: Result\n readonly check: (\n payload: Schema.Struct.Type<Input> & { readonly attempt: number }\n ) => Node.Node<Check<Result[\"Type\"]>, never, R>\n readonly intervalMs: number\n readonly maxAttempts: number\n readonly backoff?: Backoff | undefined\n readonly onTimeout?: Repetition.AtCeiling | undefined\n }\n): Flow.Flow<Tag, PayloadSchema<Input>, Result, typeof Failure, R> => {\n type Round = Flow.Flow<Tag, PayloadSchema<Input>, Result, typeof Failure, R>\n type RoundPayload = PayloadSchema<Input>[\"Type\"]\n if (Object.prototype.hasOwnProperty.call(options.input, \"attempt\")) {\n throw new TypeError(\n `Poll.make: \"${tag}\" input cannot declare the reserved \"attempt\" field. ` +\n \"Poll owns that counter across durable rounds.\"\n )\n }\n const input = Object.freeze({ ...options.input }) as Input\n const result = options.result\n const check = options.check\n const intervalMs = options.intervalMs\n const maxAttempts = options.maxAttempts\n if (!Number.isFinite(intervalMs) || intervalMs < 0) {\n throw new RangeError(\n `Poll.make: \"${tag}\" intervalMs must be a finite number of milliseconds that is not negative, ` +\n `and was ${intervalMs}. The interval is the length of a durable wait, and a wait of ` +\n \"that length never ends.\"\n )\n }\n if (!Number.isSafeInteger(maxAttempts) || maxAttempts < 1) {\n throw new RangeError(\n `Poll.make: \"${tag}\" maxAttempts must be a whole number of attempts of at least one, and was ` +\n `${maxAttempts}. A poll checks at least once.`\n )\n }\n const backoff = options.backoff ?? \"fixed\"\n // The wait a poll arms is not `intervalMs`. {@link delayMillis} multiplies it\n // by the backoff, so a schedule whose options are each finite can still ask\n // for a wait that is not a length \u2014 and that wait arms the same timer that\n // never fires the interval guard above exists to refuse. The last wait is the\n // one before the final attempt, because the attempt at the budget gives up\n // rather than sleeps, and the schedule never shrinks, so the last wait is\n // also the longest: checking it checks all of them.\n const longestWaitMs = maxAttempts > 1\n ? delayMillis({ intervalMs, backoff, attempt: maxAttempts - 1 })\n : 0\n if (!Number.isFinite(longestWaitMs)) {\n throw new RangeError(\n `Poll.make: \"${tag}\" asks for a wait of ${longestWaitMs} ms before its last attempt. An ` +\n `intervalMs of ${intervalMs} under the \"${backoff}\" backoff reaches a length no clock ` +\n `can be armed with by attempt ${maxAttempts - 1} of ${maxAttempts}. Lower ` +\n \"maxAttempts, shorten the interval, or slow the backoff.\"\n )\n }\n const onTimeout = options.onTimeout ?? \"fail\"\n const captures = { tag, intervalMs, backoff, maxAttempts, onTimeout, check: Node.functionIdentity(check) }\n const body = (\n payload: RoundPayload\n ): Node.Node<Flow.BodySuccess<Result[\"Type\"]>, typeof Failure.Type, R> => {\n const attempt = attemptOf(payload)\n const last = attempt >= maxAttempts\n return check(withAttempt(payload, attempt)).pipe(\n Node.branch({\n if: Node.capture(captures, (checked) => checked.satisfied),\n then: (checked) => Flow.done(checked.output),\n else: (checked): Node.Node<Flow.BodySuccess<Result[\"Type\"]>, typeof Failure.Type> =>\n last\n ? onTimeout === \"return-last\"\n ? Flow.done(checked.output)\n : exhausted.call({ poll: tag, attempts: attempt })\n : Sleep.action.call({\n millis: delayMillis({ intervalMs, backoff, attempt })\n }).pipe(\n Node.andThen(\n self.to(withAttempt<Parameters<Round[\"to\"]>[0]>(payload, attempt + 1))\n )\n )\n })\n )\n }\n // The body names the flow it is the body of, which is what makes one round\n // open the next. It is read when a round is planned, long after `Flow.make`\n // has returned, so the binding is initialized by then.\n const self: Round = Flow.make(tag, {\n payload: payloadSchema(input, maxAttempts),\n success: result,\n error: Failure,\n maxRounds: maxAttempts,\n // A captured wrapper must not admit a process-local check as stable.\n body: captures.check.algorithm === \"sha256-source-ephemeral/v4\" ? body : Node.capture(captures, body)\n })\n return self\n}\n\n/**\n * The exhaustion implementation, provided beside the other action layers a\n * poll's rounds call.\n *\n * ```ts\n * Layer.mergeAll(Poll.layer, Sleep.layer, Interpreter.layer(Deployment)).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> = exhausted.toLayer(\n ({ attempts, poll }) =>\n Effect.fail(\n new PollExhausted({\n poll,\n attempts,\n message: `Poll \"${poll}\" used all ${attempts} attempts without a satisfied check.`\n })\n )\n)\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,273 @@
1
+ /**
2
+ * Defines data-shaped retry policies for durable action retries.
3
+ *
4
+ * A `RetryPolicy` is a plain value — initial interval, backoff factor, cap,
5
+ * optional maximum attempts, optional jitter, and optional non-retryable
6
+ * error tags — so the next retry delay can be derived from a persisted
7
+ * attempt count instead of fiber-local `Schedule` state. `nextDelay` mirrors
8
+ * Temporal's `ExponentialRetryPolicy.ComputeNextDelay` formula, and `decide`
9
+ * is the engine's single retry decision point: the core default a pluggable
10
+ * `resolveRetry` resolution can later dispatch in front of.
11
+ *
12
+ * The historical terminal-failure schemas below use the `@smthrs/flow/` tags settled for
13
+ * 1.0.0-rc.0. The release candidate makes no compatibility promise to 0.x
14
+ * journals, and these tags freeze at the RC. Current action dispatch preserves
15
+ * the final declared failure when a retry policy is spent.
16
+ *
17
+ * See `docs/guides/retry-a-failing-action.md`; its "Infrastructure
18
+ * interrupts" section covers the interrupt retry schedule.
19
+ *
20
+ * @since 0.1.0
21
+ */
22
+ import * as Effect from "effect/Effect";
23
+ import * as Option from "effect/Option";
24
+ import * as Schema from "effect/Schema";
25
+ /**
26
+ * Data-shaped retry policy schema. Decoding enforces the same relational
27
+ * contract as {@link make}; persisted data cannot bypass constructor checks.
28
+ *
29
+ * @category models
30
+ * @since 0.1.0
31
+ */
32
+ export declare const RetryPolicy: Schema.Struct<{
33
+ readonly initialMs: Schema.Number;
34
+ readonly factor: Schema.Number;
35
+ readonly maxMs: Schema.Number;
36
+ readonly maxAttempts: Schema.optional<Schema.Number>;
37
+ readonly expirationMs: Schema.optional<Schema.Number>;
38
+ readonly jitterRatio: Schema.optional<Schema.Number>;
39
+ readonly nonRetryable: Schema.optional<Schema.$Array<Schema.String>>;
40
+ }>;
41
+ /**
42
+ * The value form of a {@link RetryPolicy}.
43
+ *
44
+ * @category models
45
+ * @since 0.1.0
46
+ */
47
+ export type RetryPolicy = typeof RetryPolicy.Type;
48
+ /**
49
+ * Creates a `RetryPolicy` value after checking every numeric bound.
50
+ * `initialMs` must be greater than zero: a zero initial interval would
51
+ * compute a zero delay for every attempt, which {@link nextDelay} reads as
52
+ * exhausted, so the policy would never retry. `jitterRatio` must be between
53
+ * zero and one, inclusive, and `jitterRatio: 0` disables jitter.
54
+ *
55
+ * @category constructors
56
+ * @since 0.1.0
57
+ */
58
+ export declare const make: (options: {
59
+ readonly initialMs: number;
60
+ readonly factor: number;
61
+ readonly maxMs: number;
62
+ readonly maxAttempts?: number | undefined;
63
+ readonly expirationMs?: number | undefined;
64
+ readonly jitterRatio?: number | undefined;
65
+ readonly nonRetryable?: ReadonlyArray<string> | undefined;
66
+ }) => RetryPolicy;
67
+ /**
68
+ * The default engine retry policy.
69
+ *
70
+ * Uses a 200ms initial delay growing by 1.5x, capped at 30s, and never gives
71
+ * up: it declares neither `maxAttempts` nor `expirationMs`. Bound long-lived
72
+ * retries with `make({ ..., expirationMs })` when a wall-clock give-up is
73
+ * required.
74
+ *
75
+ * @category constructors
76
+ * @since 0.1.0
77
+ */
78
+ export declare const defaultRetryPolicy: RetryPolicy;
79
+ /**
80
+ * Bounded infrastructure retry: 5 seconds doubling to 5 minutes, for 2 hours.
81
+ *
82
+ * @category constructors
83
+ * @since 1.0.0
84
+ */
85
+ export declare const transient: RetryPolicy;
86
+ /**
87
+ * A retry decision: wait `delayMs` before the next attempt.
88
+ *
89
+ * @category models
90
+ * @since 0.1.0
91
+ */
92
+ export interface RetryAfter {
93
+ readonly _tag: "RetryAfter";
94
+ readonly delayMs: number;
95
+ }
96
+ /**
97
+ * A retry decision: stop retrying.
98
+ *
99
+ * @category models
100
+ * @since 0.1.0
101
+ */
102
+ export interface GiveUp {
103
+ readonly _tag: "GiveUp";
104
+ readonly reason: "nonRetryable" | "exhausted" | "expired";
105
+ }
106
+ /**
107
+ * The outcome of the engine's retry decision point.
108
+ *
109
+ * @category models
110
+ * @since 0.1.0
111
+ */
112
+ export type RetryDecision = RetryAfter | GiveUp;
113
+ /**
114
+ * Creates a `RetryAfter` decision.
115
+ *
116
+ * @category constructors
117
+ * @since 0.1.0
118
+ */
119
+ export declare const retryAfter: (delayMs: number) => RetryDecision;
120
+ /**
121
+ * Creates a `GiveUp` decision.
122
+ *
123
+ * @category constructors
124
+ * @since 0.1.0
125
+ */
126
+ export declare const giveUp: (reason: GiveUp["reason"]) => RetryDecision;
127
+ declare const RetryPolicyExpired_base: Schema.Class<RetryPolicyExpired, Schema.TaggedStruct<"@smthrs/flow/RetryPolicyExpired", {
128
+ readonly code: Schema.withConstructorDefault<Schema.Literal<"retry_policy_expired">>;
129
+ readonly actionName: Schema.String;
130
+ readonly attempt: Schema.Number;
131
+ readonly expirationMs: Schema.Number;
132
+ readonly lastError: Schema.optional<Schema.Unknown>;
133
+ }>, import("effect/Cause").YieldableError>;
134
+ /**
135
+ * A historical retry sequence crossed its `expirationMs` wall-clock bound.
136
+ * Current dispatch preserves the final declared failure instead of emitting this defect.
137
+ *
138
+ * @category errors
139
+ * @since 0.1.0
140
+ */
141
+ export declare class RetryPolicyExpired extends RetryPolicyExpired_base {
142
+ }
143
+ declare const RetryAttemptsExhausted_base: Schema.Class<RetryAttemptsExhausted, Schema.TaggedStruct<"@smthrs/flow/RetryAttemptsExhausted", {
144
+ readonly code: Schema.withConstructorDefault<Schema.Literal<"retry_attempts_exhausted">>;
145
+ readonly actionName: Schema.String;
146
+ readonly attempt: Schema.Number;
147
+ readonly maxAttempts: Schema.Number;
148
+ readonly lastError: Schema.optional<Schema.Unknown>;
149
+ }>, import("effect/Cause").YieldableError>;
150
+ /**
151
+ * A historical retry sequence exhausted its `maxAttempts` bound.
152
+ * Current dispatch preserves the final declared failure instead of emitting this defect.
153
+ *
154
+ * @category errors
155
+ * @since 0.1.0
156
+ */
157
+ export declare class RetryAttemptsExhausted extends RetryAttemptsExhausted_base {
158
+ }
159
+ /**
160
+ * Computes the delay before attempt `attempt + 1` from the persisted attempt
161
+ * count, mirroring Temporal's `ComputeNextDelay`
162
+ * (`common/backoff/retrypolicy.go`).
163
+ *
164
+ * `attempt` is the 1-based attempt that just failed. Returns `None` when the
165
+ * policy gives up: `maxAttempts` reached, a non-positive computed interval,
166
+ * a cap below the initial interval, or — when the policy declares
167
+ * `expirationMs` and the caller supplies `elapsedMs` — an elapsed duration
168
+ * past the expiration bound. Otherwise the delay is capped to the remaining
169
+ * expiration window, expiring only when that window cannot fit one more
170
+ * full-value (`initialMs`) attempt.
171
+ *
172
+ * Jitter is deterministic-friendly: `options.random` is a `[0, 1]` sample
173
+ * supplied by the caller and defaults to `1`, which leaves the delay at its
174
+ * un-jittered value. Use {@link nextDelayEffect} to sample the `Random`
175
+ * service instead. A sample outside `[0, 1]`, or a persisted `jitterRatio`
176
+ * above one, gives up rather than returning a delay the policy never
177
+ * declared. A sample of zero under `jitterRatio: 1` is a delay of zero, which
178
+ * retries immediately.
179
+ *
180
+ * @category attempts
181
+ * @since 0.1.0
182
+ */
183
+ export declare const nextDelay: (policy: RetryPolicy, attempt: number, options?: {
184
+ readonly random?: number | undefined;
185
+ readonly elapsedMs?: number | undefined;
186
+ }) => Option.Option<number>;
187
+ /**
188
+ * Computes the next retry delay, sampling the `Random` service for jitter.
189
+ *
190
+ * Deterministic under `Random.withSeed`. Policies without a `jitterRatio`
191
+ * never touch the service.
192
+ *
193
+ * @category attempts
194
+ * @since 0.1.0
195
+ */
196
+ export declare const nextDelayEffect: (policy: RetryPolicy, attempt: number, options?: {
197
+ readonly elapsedMs?: number | undefined;
198
+ }) => Effect.Effect<Option.Option<number>>;
199
+ /**
200
+ * Extracts the stable identity tag of an error for non-retryable matching:
201
+ * an own string `_tag` when present, otherwise the first own `name` descriptor
202
+ * found while walking a bounded prototype chain. That first descriptor decides
203
+ * the result: only a string data value is a tag.
204
+ *
205
+ * Descriptors keep accessors inert instead of running author code through a
206
+ * property read. A bounded walk also terminates when a hostile proxy reports a
207
+ * cyclic prototype chain; any proxy trap that throws leaves the error untagged.
208
+ *
209
+ * @category attempts
210
+ * @since 0.1.0
211
+ */
212
+ export declare const errorTag: (error: unknown) => string | undefined;
213
+ /**
214
+ * Error tags that are non-retryable by type, under every policy (issue #156).
215
+ *
216
+ * These failures are integrity verdicts that must reach the driver without an
217
+ * action-level retry hiding the first detection. Their persistence seams
218
+ * take a quarantine state action before raising them, so a later dispatch can
219
+ * heal, but the detecting dispatch remains a non-retryable failure. No
220
+ * per-callsite or per-policy opt-out exists; the tags are matched by string so
221
+ * the classification does not invert the package dependency direction.
222
+ *
223
+ * `AttemptEvidenceQuarantined` (issue #171) is the succeeded-attempt-row
224
+ * counterpart: the corrupt boundary evidence is removed while the completed
225
+ * outcome stays durable. It reaches the driver unretried, which parks the
226
+ * first detection in the `quarantine` waiting state; the next explicit resume
227
+ * returns the recorded outcome without re-executing the action.
228
+ *
229
+ * @category attempts
230
+ * @since 0.1.0
231
+ */
232
+ export declare const defaultNonRetryable: ReadonlyArray<string>;
233
+ /**
234
+ * Whether an error is classified non-retryable, either by type (see
235
+ * {@link defaultNonRetryable}) or by the policy's declared tag list.
236
+ *
237
+ * @category attempts
238
+ * @since 0.1.0
239
+ */
240
+ export declare const isNonRetryable: (policy: RetryPolicy, error: unknown) => boolean;
241
+ /**
242
+ * The pure core of the engine's single retry decision point.
243
+ *
244
+ * Non-retryable classification is evaluated here and nowhere else. This is
245
+ * the default a pluggable `resolveRetry` resolution falls back to when no
246
+ * plugin claims the decision.
247
+ *
248
+ * @category attempts
249
+ * @since 0.1.0
250
+ */
251
+ export declare const decide: (policy: RetryPolicy, options: {
252
+ readonly attempt: number;
253
+ readonly error: unknown;
254
+ readonly random?: number | undefined;
255
+ readonly elapsedMs?: number | undefined;
256
+ }) => RetryDecision;
257
+ /**
258
+ * Effect form of {@link decide}, sampling the `Random` service for jitter.
259
+ *
260
+ * This is the engine-facing decision function: keep calls to it behind a
261
+ * single decision point so a plugin hook dispatch can later be inserted in
262
+ * front of it without touching call sites.
263
+ *
264
+ * @category attempts
265
+ * @since 0.1.0
266
+ */
267
+ export declare const decideEffect: (policy: RetryPolicy, options: {
268
+ readonly attempt: number;
269
+ readonly error: unknown;
270
+ readonly elapsedMs?: number | undefined;
271
+ }) => Effect.Effect<RetryDecision>;
272
+ export {};
273
+ //# sourceMappingURL=RetryPolicy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RetryPolicy.d.ts","sourceRoot":"","sources":["../../src/RetryPolicy.ts"],"names":[],"mappings":"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"}
@@ -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": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwBA,aAAwB;AACxB,aAAwB;AACxB,aAAwB;AACxB,aAAwB;AAwBxB,MAAM,oBAAoB,OAAO,OAAO;AAAA,EACtC,WAAW,OAAO;AAAA,EAClB,QAAQ,OAAO;AAAA,EACf,OAAO,OAAO;AAAA,EACd,aAAa,OAAO,SAAS,OAAO,MAAM;AAAA,EAC1C,cAAc,OAAO,SAAS,OAAO,MAAM;AAAA,EAC3C,aAAa,OAAO,SAAS,OAAO,MAAM;AAAA,EAC1C,cAAc,OAAO,SAAS,OAAO,MAAM,OAAO,MAAM,CAAC;AAC3D,CAAC;AAKD,MAAM,kBAAkB,CAAC,WAAkD;AAKzE,MAAI,CAAC,OAAO,SAAS,OAAO,SAAS,KAAK,OAAO,aAAa,GAAG;AAC/D,WAAO,kFAAkF,OAAO,SAAS;AAAA,EAC3G;AACA,MAAI,CAAC,OAAO,SAAS,OAAO,MAAM,KAAK,OAAO,UAAU,GAAG;AACzD,WAAO,+DAA+D,OAAO,MAAM;AAAA,EACrF;AACA,MAAI,CAAC,OAAO,SAAS,OAAO,KAAK,KAAK,OAAO,QAAQ,OAAO,WAAW;AACrE,WAAO,2FAA2F,OAAO,KAAK;AAAA,EAChH;AACA,MACE,OAAO,gBAAgB,WACtB,CAAC,OAAO,cAAc,OAAO,WAAW,KAAK,OAAO,cAAc,IACnE;AACA,WAAO,iEAAiE,OAAO,WAAW;AAAA,EAC5F;AACA,MACE,OAAO,iBAAiB,WACvB,CAAC,OAAO,SAAS,OAAO,YAAY,KAAK,OAAO,gBAAgB,IACjE;AACA,WAAO,qFAAqF,OAAO,YAAY;AAAA,EACjH;AACA,MACE,OAAO,gBAAgB,WACtB,CAAC,OAAO,SAAS,OAAO,WAAW,KAAK,OAAO,cAAc,KAAK,OAAO,cAAc,IACxF;AACA,WAAO,kFAAkF,OAAO,WAAW;AAAA,EAC7G;AACA,SAAO;AACT;AASO,MAAM,cAAc,kBAAkB;AAAA,EAC3C,OAAO;AAAA,IACL,CAAC,WAAW,gBAAgB,MAAM,KAAK;AAAA,IACvC,EAAE,OAAO,mBAAmB;AAAA,EAC9B;AACF;AAoBO,MAAM,OAAO,CAAC,YAQF;AACjB,QAAM,QAAQ,gBAAgB,OAAO;AACrC,MAAI,UAAU,OAAW,OAAM,IAAI,WAAW,qBAAqB,KAAK,EAAE;AAC1E,SAAO,OAAO,OAAO;AAAA,IACnB,WAAW,QAAQ;AAAA,IACnB,QAAQ,QAAQ;AAAA,IAChB,OAAO,QAAQ;AAAA,IACf,GAAI,QAAQ,gBAAgB,SAAY,EAAE,aAAa,QAAQ,YAAY,IAAI,CAAC;AAAA,IAChF,GAAI,QAAQ,iBAAiB,SAAY,EAAE,cAAc,QAAQ,aAAa,IAAI,CAAC;AAAA,IACnF,GAAI,QAAQ,gBAAgB,SAAY,EAAE,aAAa,QAAQ,YAAY,IAAI,CAAC;AAAA,IAChF,GAAI,QAAQ,iBAAiB,SACzB,EAAE,cAAc,OAAO,OAAO,CAAC,GAAG,QAAQ,YAAY,CAAC,EAAE,IACzD,CAAC;AAAA,EACP,CAAC;AACH;AAaO,MAAM,qBAAkC,OAAO;AAAA,EACpD,KAAK;AAAA,IACH,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,OAAO;AAAA,EACT,CAAC;AACH;AAQO,MAAM,YAAyB,KAAK;AAAA,EACzC,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,cAAc;AAChB,CAAC;AAsCM,MAAM,aAAa,CAAC,aAAoC;AAAA,EAC7D,MAAM;AAAA,EACN;AACF;AAQO,MAAM,SAAS,CAAC,YAA6C;AAAA,EAClE,MAAM;AAAA,EACN;AACF;AASO,MAAM,2BAA2B,OAAO,YAAgC;AAAA,EAC7E;AAAA,EACA;AAAA,IACE,MAAM,OAAO,QAAQ,sBAAsB,EAAE;AAAA,MAC3C,OAAO,uBAAuB,OAAO,QAAQ,sBAAsB,CAAC;AAAA,IACtE;AAAA,IACA,YAAY,OAAO;AAAA,IACnB,SAAS,OAAO;AAAA,IAChB,cAAc,OAAO;AAAA,IACrB,WAAW,OAAO,SAAS,OAAO,OAAO;AAAA,EAC3C;AACF,EAAE;AAAC;AASI,MAAM,+BAA+B,OAAO,YAAoC;AAAA,EACrF;AAAA,EACA;AAAA,IACE,MAAM,OAAO,QAAQ,0BAA0B,EAAE;AAAA,MAC/C,OAAO,uBAAuB,OAAO,QAAQ,0BAA0B,CAAC;AAAA,IAC1E;AAAA,IACA,YAAY,OAAO;AAAA,IACnB,SAAS,OAAO;AAAA,IAChB,aAAa,OAAO;AAAA,IACpB,WAAW,OAAO,SAAS,OAAO,OAAO;AAAA,EAC3C;AACF,EAAE;AAAC;AA0BI,MAAM,YAAY,CACvB,QACA,SACA,YAI0B;AAG1B,MAAI,gBAAgB,MAAM,MAAM,UAAa,CAAC,OAAO,cAAc,OAAO,KAAK,UAAU,GAAG;AAC1F,WAAO,OAAO,KAAK;AAAA,EACrB;AACA,MACE,SAAS,cAAc,WACtB,CAAC,OAAO,SAAS,QAAQ,SAAS,KAAK,QAAQ,YAAY,IAC5D;AACA,WAAO,OAAO,KAAK;AAAA,EACrB;AACA,MAAI,OAAO,gBAAgB,UAAa,WAAW,OAAO,aAAa;AACrE,WAAO,OAAO,KAAK;AAAA,EACrB;AACA,MACE,OAAO,iBAAiB,UACxB,SAAS,cAAc,UACvB,QAAQ,YAAY,OAAO,cAC3B;AACA,WAAO,OAAO,KAAK;AAAA,EACrB;AACA,QAAM,MAAM,OAAO,YAAY,KAAK,IAAI,OAAO,QAAQ,UAAU,CAAC;AAClE,MAAI,EAAE,MAAM,IAAI;AACd,WAAO,OAAO,KAAK;AAAA,EACrB;AACA,MAAI,QAAQ,KAAK,IAAI,KAAK,OAAO,KAAK;AAItC,MAAI,OAAO,iBAAiB,UAAa,SAAS,cAAc,QAAW;AACzE,YAAQ,KAAK,IAAI,OAAO,KAAK,IAAI,GAAG,OAAO,eAAe,QAAQ,SAAS,CAAC;AAAA,EAC9E;AACA,MAAI,QAAQ,OAAO,WAAW;AAC5B,WAAO,OAAO,KAAK;AAAA,EACrB;AAKA,MAAI,OAAO,gBAAgB,UAAa,OAAO,cAAc,GAAG;AAI9D,UAAM,SAAS,SAAS,UAAU;AAClC,QAAI,EAAE,UAAU,KAAK,UAAU,IAAI;AACjC,aAAO,OAAO,KAAK;AAAA,IACrB;AAUA,UAAM,WAAW,SAAS,IAAI,OAAO,eAAe,SAAS,QAAQ,OAAO;AAC5E,YAAQ,KAAK,IAAI,OAAO,QAAQ;AAAA,EAClC;AACA,SAAO,OAAO,KAAK,KAAK;AAC1B;AAWO,MAAM,kBAAkB,CAC7B,QACA,SACA,YAEA,OAAO,gBAAgB,UAAa,OAAO,eAAe,IACtD,OAAO,KAAK,MAAM,UAAU,QAAQ,SAAS,EAAE,WAAW,SAAS,UAAU,CAAC,CAAC,IAC/E,OAAO,IAAI,OAAO,MAAM,CAAC,WAAW,UAAU,QAAQ,SAAS,EAAE,QAAQ,WAAW,SAAS,UAAU,CAAC,CAAC;AAexG,MAAM,WAAW,CAAC,UAAuC;AAC9D,MAAI,OAAO,UAAU,YAAY,UAAU,KAAM,QAAO;AACxD,MAAI;AACF,UAAM,MAAM,OAAO,yBAAyB,OAAO,MAAM;AACzD,QAAI,QAAQ,UAAa,WAAW,OAAO,OAAO,IAAI,UAAU,SAAU,QAAO,IAAI;AAErF,QAAI,UAAyB;AAC7B,aAAS,QAAQ,GAAG,YAAY,QAAQ,QAAQ,IAAI,SAAS;AAC3D,YAAM,OAAO,OAAO,yBAAyB,SAAS,MAAM;AAC5D,UAAI,SAAS,QAAW;AACtB,eAAO,WAAW,QAAQ,OAAO,KAAK,UAAU,WAAW,KAAK,QAAQ;AAAA,MAC1E;AACA,gBAAU,OAAO,eAAe,OAAO;AAAA,IACzC;AAAA,EACF,QAAQ;AAAA,EAGR;AACA,SAAO;AACT;AAqBO,MAAM,sBAA6C;AAAA,EACxD;AAAA,EACA;AACF;AASO,MAAM,iBAAiB,CAAC,QAAqB,UAA4B;AAC9E,QAAM,MAAM,SAAS,KAAK;AAC1B,MAAI,QAAQ,QAAW;AACrB,WAAO;AAAA,EACT;AACA,MAAI,oBAAoB,SAAS,GAAG,GAAG;AACrC,WAAO;AAAA,EACT;AACA,SAAO,OAAO,iBAAiB,UAAa,OAAO,aAAa,SAAS,GAAG;AAC9E;AAYO,MAAM,SAAS,CACpB,QACA,YAMkB;AAClB,MAAI,eAAe,QAAQ,QAAQ,KAAK,GAAG;AACzC,WAAO,OAAO,cAAc;AAAA,EAC9B;AACA,SAAO,OAAO;AAAA,IACZ,UAAU,QAAQ,QAAQ,SAAS,EAAE,QAAQ,QAAQ,QAAQ,WAAW,QAAQ,UAAU,CAAC;AAAA,IAC3F;AAAA,MACE,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAMN,OAAO,iBAAiB,UACtB,OAAO,OAAO,UAAU,QAAQ,QAAQ,SAAS,EAAE,QAAQ,QAAQ,OAAO,CAAC,CAAC,IAC1E,OAAO,SAAS,IAChB,OAAO,WAAW;AAAA;AAAA,MACxB,QAAQ,CAAC,UAAU;AAGjB,YAAI;AACJ,YAAI,OAAO,QAAQ,UAAU,YAAY,QAAQ,UAAU,MAAM;AAC/D,cAAI;AACF,kBAAM,aAAa,OAAO,yBAAyB,QAAQ,OAAO,cAAc;AAChF,gBAAI,eAAe,UAAa,WAAW,WAAY,QAAO,WAAW;AAAA,UAC3E,QAAQ;AAAA,UAER;AAAA,QACF;AACA,YAAI,OAAO,SAAS,YAAY,CAAC,OAAO,SAAS,IAAI,KAAK,OAAO,GAAG;AAClE,iBAAO,WAAW,KAAK;AAAA,QACzB;AACA,eAAO,WAAW,KAAK;AAAA,UACrB;AAAA,UACA,OAAO;AAAA,UACP,OAAO,iBAAiB,UAAa,QAAQ,cAAc,SACvD,KAAK,IAAI,GAAG,OAAO,eAAe,QAAQ,SAAS,IACnD,OAAO;AAAA,QACb,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AACF;AAYO,MAAM,eAAe,CAC1B,QACA,YAMA,OAAO,gBAAgB,UAAa,OAAO,eAAe,IACtD,OAAO,KAAK,MAAM,OAAO,QAAQ,OAAO,CAAC,IACzC,OAAO,IAAI,OAAO,MAAM,CAAC,WAAW,OAAO,QAAQ,EAAE,GAAG,SAAS,OAAO,CAAC,CAAC;",
6
+ "names": []
7
+ }