@demlik/tea 0.13.0 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (373) hide show
  1. package/README.md +11 -9
  2. package/dist/agent/index.d.ts +638 -45
  3. package/dist/agent/index.js +9 -19
  4. package/dist/{chunk-RH5EFRVJ.js → chunk-22POWGFA.js} +31 -5
  5. package/dist/chunk-22POWGFA.js.map +1 -0
  6. package/dist/{chunk-DMYGQB4O.js → chunk-3B5X7SBB.js} +23 -6
  7. package/dist/chunk-3B5X7SBB.js.map +1 -0
  8. package/dist/chunk-66PY5WYF.js +1816 -0
  9. package/dist/chunk-66PY5WYF.js.map +1 -0
  10. package/dist/{chunk-25LBDCBC.js → chunk-6IQPODUF.js} +2 -2
  11. package/dist/{chunk-25LBDCBC.js.map → chunk-6IQPODUF.js.map} +1 -1
  12. package/dist/chunk-AYS5N6WY.js +505 -0
  13. package/dist/chunk-AYS5N6WY.js.map +1 -0
  14. package/dist/{chunk-EWJP3YYP.js → chunk-HWVW4AXC.js} +3 -3
  15. package/dist/chunk-HWVW4AXC.js.map +1 -0
  16. package/dist/{chunk-O4MVQTEJ.js → chunk-L3TND7LA.js} +20 -16
  17. package/dist/chunk-L3TND7LA.js.map +1 -0
  18. package/dist/{chunk-J6527VRQ.js → chunk-LFZUK6J2.js} +3 -3
  19. package/dist/chunk-LFZUK6J2.js.map +1 -0
  20. package/dist/{chunk-D736QUGF.js → chunk-MYXFNWAJ.js} +4 -5
  21. package/dist/chunk-MYXFNWAJ.js.map +1 -0
  22. package/dist/{chunk-K575PT4S.js → chunk-PR6TB3BL.js} +15 -4
  23. package/dist/chunk-PR6TB3BL.js.map +1 -0
  24. package/dist/{chunk-YUXP55T2.js → chunk-Q5CQTBFA.js} +57 -7
  25. package/dist/chunk-Q5CQTBFA.js.map +1 -0
  26. package/dist/{batch-window/index.js → chunk-QPEVCJ5Q.js} +4 -8
  27. package/dist/chunk-QPEVCJ5Q.js.map +1 -0
  28. package/dist/chunk-TCLBCERH.js +1480 -0
  29. package/dist/chunk-TCLBCERH.js.map +1 -0
  30. package/dist/{chunk-FV3Z5MBE.js → chunk-TXN2KFHF.js} +14 -4
  31. package/dist/chunk-TXN2KFHF.js.map +1 -0
  32. package/dist/{chunk-MUUROGIH.js → chunk-V46HSVCK.js} +62 -12
  33. package/dist/chunk-V46HSVCK.js.map +1 -0
  34. package/dist/{chunk-Q2UM7BXU.js → chunk-VBDU4JL6.js} +2 -2
  35. package/dist/chunk-VBDU4JL6.js.map +1 -0
  36. package/dist/{chunk-ZVJZ72HY.js → chunk-VTQI2NHP.js} +25 -11
  37. package/dist/chunk-VTQI2NHP.js.map +1 -0
  38. package/dist/{core-Co0LWkIA.d.ts → core-DnzqWy6u.d.ts} +72 -23
  39. package/dist/devtools/index.d.ts +2 -2
  40. package/dist/devtools/index.js +207 -2
  41. package/dist/devtools/index.js.map +1 -1
  42. package/dist/do/index.d.ts +43 -29
  43. package/dist/do/index.js +36 -25
  44. package/dist/do/index.js.map +1 -1
  45. package/dist/{durable-effects-C6uwzjb5.d.ts → durable-effects-CWzA-o2B.d.ts} +2 -2
  46. package/dist/extension/index.d.ts +300 -3
  47. package/dist/extension/index.js +596 -5
  48. package/dist/extension/index.js.map +1 -1
  49. package/dist/flow/index.d.ts +1284 -0
  50. package/dist/flow/index.js +732 -0
  51. package/dist/flow/index.js.map +1 -0
  52. package/dist/idempotency/index.d.ts +90 -116
  53. package/dist/idempotency/index.js +4 -1
  54. package/dist/index-Bc40JWVl.d.ts +131 -0
  55. package/dist/{batch-window/index.d.ts → index-C2DwkjlP.d.ts} +7 -12
  56. package/dist/index-CA_7I5g9.d.ts +806 -0
  57. package/dist/index-CSyMYDAB.d.ts +69 -0
  58. package/dist/{fan-out/index.d.ts → index-CuNO9m8i.d.ts} +7 -9
  59. package/dist/{debounce/index.d.ts → index-DHSUmQTR.d.ts} +7 -7
  60. package/dist/{recorder/index.d.ts → index-DrIRb_Ch.d.ts} +4 -7
  61. package/dist/index-HSYgG2Yt.d.ts +380 -0
  62. package/dist/{monitored-run/index.d.ts → index-KXqTRJyb.d.ts} +37 -13
  63. package/dist/{snapshot/index.d.ts → index-ZCMhnVKN.d.ts} +15 -78
  64. package/dist/index.d.ts +771 -6
  65. package/dist/index.js +1 -2
  66. package/dist/jev/index.d.ts +646 -0
  67. package/dist/jev/index.js +485 -0
  68. package/dist/jev/index.js.map +1 -0
  69. package/dist/machine-DGlPWCWI.d.ts +1781 -0
  70. package/dist/machine-viz/index.d.ts +1 -1
  71. package/dist/machine-viz/index.js +12 -5
  72. package/dist/machine-viz/index.js.map +1 -1
  73. package/dist/mem/index.d.ts +18 -3
  74. package/dist/mem/index.js +22 -2
  75. package/dist/mem/index.js.map +1 -1
  76. package/dist/node/index.d.ts +104 -6
  77. package/dist/node/index.js +132 -9
  78. package/dist/node/index.js.map +1 -1
  79. package/dist/{paginator → paginate}/index.d.ts +140 -6
  80. package/dist/paginate/index.js +7 -0
  81. package/dist/parity/index.d.ts +4 -10
  82. package/dist/parity/index.js +4 -7
  83. package/dist/parity/index.js.map +1 -1
  84. package/dist/pbt/index.d.ts +247 -5
  85. package/dist/pbt/index.js +124 -5
  86. package/dist/pbt/index.js.map +1 -1
  87. package/dist/{trace-replay → persistence}/index.d.ts +7 -5
  88. package/dist/persistence/index.js +6 -0
  89. package/dist/{protocol-B5YmJr0d.d.ts → protocol-D8VbH-VH.d.ts} +10 -1
  90. package/dist/react/index.d.ts +2 -2
  91. package/dist/react/index.js +1 -2
  92. package/dist/react/index.js.map +1 -1
  93. package/dist/resilience/index.d.ts +744 -0
  94. package/dist/resilience/index.js +657 -0
  95. package/dist/resilience/index.js.map +1 -0
  96. package/dist/retry-backoff/index.d.ts +3 -2
  97. package/dist/retry-backoff/index.js +1 -1
  98. package/dist/runtime-types-CMF13BBh.d.ts +998 -0
  99. package/dist/testing/index.d.ts +147 -3
  100. package/dist/testing/index.js +95 -3
  101. package/dist/testing/index.js.map +1 -1
  102. package/dist/{throttled-input → timing}/index.d.ts +143 -12
  103. package/dist/{throttled-input → timing}/index.js +57 -12
  104. package/dist/timing/index.js.map +1 -0
  105. package/dist/{types-XS_miRnB.d.ts → types-BseNPIhr.d.ts} +1 -1
  106. package/dist/work-queue/index.d.ts +130 -54
  107. package/dist/work-queue/index.js +3 -2
  108. package/dist/work-queue/index.js.map +1 -1
  109. package/package.json +45 -218
  110. package/dist/authed-call/index.d.ts +0 -120
  111. package/dist/authed-call/index.js +0 -134
  112. package/dist/authed-call/index.js.map +0 -1
  113. package/dist/await-terminal/index.d.ts +0 -101
  114. package/dist/await-terminal/index.js +0 -76
  115. package/dist/await-terminal/index.js.map +0 -1
  116. package/dist/batch-window/index.js.map +0 -1
  117. package/dist/cache/index.d.ts +0 -152
  118. package/dist/cache/index.js +0 -8
  119. package/dist/chart/index.d.ts +0 -218
  120. package/dist/chart/index.js +0 -16
  121. package/dist/chart/index.js.map +0 -1
  122. package/dist/chart/inspect/index.d.ts +0 -86
  123. package/dist/chart/inspect/index.js +0 -5
  124. package/dist/chart/inspect/react.d.ts +0 -113
  125. package/dist/chart/inspect/react.js +0 -11
  126. package/dist/chart/inspect/react.js.map +0 -1
  127. package/dist/chart/inspect/styles.css +0 -286
  128. package/dist/chart/lane/index.d.ts +0 -362
  129. package/dist/chart/lane/index.js +0 -9
  130. package/dist/chart/lane/index.js.map +0 -1
  131. package/dist/chart/lane/react.d.ts +0 -84
  132. package/dist/chart/lane/react.js +0 -559
  133. package/dist/chart/lane/react.js.map +0 -1
  134. package/dist/chart/lane/server.d.ts +0 -148
  135. package/dist/chart/lane/server.js +0 -209
  136. package/dist/chart/lane/server.js.map +0 -1
  137. package/dist/chart/lane/styles.css +0 -498
  138. package/dist/chart/lane/viewer/assets/abnfDiagram-N423BO3Z-C729LI31.js +0 -1
  139. package/dist/chart/lane/viewer/assets/architectureDiagram-T3A2C74G-C729LI31.js +0 -1
  140. package/dist/chart/lane/viewer/assets/blockDiagram-VBNYF7ZC-C729LI31.js +0 -1
  141. package/dist/chart/lane/viewer/assets/c4Diagram-5PPSVZJV-C729LI31.js +0 -1
  142. package/dist/chart/lane/viewer/assets/chunk-2GRJ4B5K-HdDf8SI3.js +0 -1
  143. package/dist/chart/lane/viewer/assets/chunk-5RXB4S5H-CcNtpUd7.js +0 -231
  144. package/dist/chart/lane/viewer/assets/chunk-5VM5RSS4-BP4fRS_5.js +0 -15
  145. package/dist/chart/lane/viewer/assets/chunk-KBJHAD2P-DZOw7xU6.js +0 -1
  146. package/dist/chart/lane/viewer/assets/chunk-NSK5VX7P-CBCyTZMs.js +0 -128
  147. package/dist/chart/lane/viewer/assets/classDiagram-JCYQIIEL-C729LI31.js +0 -1
  148. package/dist/chart/lane/viewer/assets/classDiagram-v2-OCEON4UE-D4uAiFr8.js +0 -206
  149. package/dist/chart/lane/viewer/assets/cose-bilkent-JH36ORCC-DOwCrGXH.js +0 -1
  150. package/dist/chart/lane/viewer/assets/cynefinDiagram-MW4NZA55-C729LI31.js +0 -1
  151. package/dist/chart/lane/viewer/assets/dagre-K_PewWfS.js +0 -1
  152. package/dist/chart/lane/viewer/assets/dagre-VZM6K2ZE-831qZcA8.js +0 -4
  153. package/dist/chart/lane/viewer/assets/diagram-7IWD3JNH-C729LI31.js +0 -1
  154. package/dist/chart/lane/viewer/assets/diagram-B4RE2ZJO-C729LI31.js +0 -1
  155. package/dist/chart/lane/viewer/assets/diagram-LBJQPF4R-C729LI31.js +0 -1
  156. package/dist/chart/lane/viewer/assets/diagram-Q27KOJAE-C729LI31.js +0 -1
  157. package/dist/chart/lane/viewer/assets/diagram-UB23O5K3-C729LI31.js +0 -1
  158. package/dist/chart/lane/viewer/assets/ebnfDiagram-BXEA7PRR-C729LI31.js +0 -1
  159. package/dist/chart/lane/viewer/assets/erDiagram-JOGREHBK-C729LI31.js +0 -1
  160. package/dist/chart/lane/viewer/assets/flowDiagram-UKHOOZJN-C729LI31.js +0 -1
  161. package/dist/chart/lane/viewer/assets/ganttDiagram-PKOTCBZU-C729LI31.js +0 -1
  162. package/dist/chart/lane/viewer/assets/gitGraphDiagram-DS77QQ5N-C729LI31.js +0 -1
  163. package/dist/chart/lane/viewer/assets/index-9SkH5NA3.css +0 -1
  164. package/dist/chart/lane/viewer/assets/index-Bgt4sXpW.js +0 -195
  165. package/dist/chart/lane/viewer/assets/infoDiagram-6WML65LV-C729LI31.js +0 -1
  166. package/dist/chart/lane/viewer/assets/ishikawaDiagram-WSZJBQD7-C729LI31.js +0 -1
  167. package/dist/chart/lane/viewer/assets/journeyDiagram-NVQOT4AX-C729LI31.js +0 -1
  168. package/dist/chart/lane/viewer/assets/kanban-definition-27J2QSJJ-G7PaPzy-.js +0 -89
  169. package/dist/chart/lane/viewer/assets/katex-DOwCrGXH.js +0 -1
  170. package/dist/chart/lane/viewer/assets/mindmap-definition-FAOFIHXS-CGj9nrVk.js +0 -96
  171. package/dist/chart/lane/viewer/assets/path-fybaL0A-.js +0 -1
  172. package/dist/chart/lane/viewer/assets/pegDiagram-VL7TDLO6-C729LI31.js +0 -1
  173. package/dist/chart/lane/viewer/assets/pieDiagram-7S7Q4E2Y-C729LI31.js +0 -1
  174. package/dist/chart/lane/viewer/assets/quadrantDiagram-CIZ2JOQS-C729LI31.js +0 -1
  175. package/dist/chart/lane/viewer/assets/railroadDiagram-AXF67PYL-C729LI31.js +0 -1
  176. package/dist/chart/lane/viewer/assets/requirementDiagram-LRYGKXZP-C729LI31.js +0 -1
  177. package/dist/chart/lane/viewer/assets/sankeyDiagram-W5VNT64P-C729LI31.js +0 -1
  178. package/dist/chart/lane/viewer/assets/sequenceDiagram-SI44F4Z6-C729LI31.js +0 -1
  179. package/dist/chart/lane/viewer/assets/stateDiagram-OKZ733FA-B_88AzBS.js +0 -1
  180. package/dist/chart/lane/viewer/assets/stateDiagram-v2-UEYNNEHI-CR5gcgq6.js +0 -1
  181. package/dist/chart/lane/viewer/assets/swimlanes-SLNWSIFB-B4xK-rwg.js +0 -1
  182. package/dist/chart/lane/viewer/assets/swimlanesDiagram-ULZ7WXOC-C729LI31.js +0 -1
  183. package/dist/chart/lane/viewer/assets/timeline-definition-Z64GVDOM-CCv52MfY.js +0 -120
  184. package/dist/chart/lane/viewer/assets/vennDiagram-T6HMQDX7-C729LI31.js +0 -1
  185. package/dist/chart/lane/viewer/assets/wardleyDiagram-T6FBY63Y-C729LI31.js +0 -1
  186. package/dist/chart/lane/viewer/assets/xychartDiagram-ELKLHX3M-C729LI31.js +0 -1
  187. package/dist/chart/lane/viewer/index.html +0 -15
  188. package/dist/chart/report/index.d.ts +0 -117
  189. package/dist/chart/report/index.js +0 -32
  190. package/dist/chart/report/index.js.map +0 -1
  191. package/dist/chunk-2YFLOCWX.js +0 -15
  192. package/dist/chunk-2YFLOCWX.js.map +0 -1
  193. package/dist/chunk-3I52QZZ5.js +0 -519
  194. package/dist/chunk-3I52QZZ5.js.map +0 -1
  195. package/dist/chunk-3ZAFFRRB.js +0 -457
  196. package/dist/chunk-3ZAFFRRB.js.map +0 -1
  197. package/dist/chunk-4EQZ76JC.js +0 -33
  198. package/dist/chunk-4EQZ76JC.js.map +0 -1
  199. package/dist/chunk-4KLG43GY.js +0 -223
  200. package/dist/chunk-4KLG43GY.js.map +0 -1
  201. package/dist/chunk-7FRZ2CT2.js +0 -424
  202. package/dist/chunk-7FRZ2CT2.js.map +0 -1
  203. package/dist/chunk-AZZLE7XR.js +0 -62
  204. package/dist/chunk-AZZLE7XR.js.map +0 -1
  205. package/dist/chunk-BYQUGDD3.js +0 -16
  206. package/dist/chunk-BYQUGDD3.js.map +0 -1
  207. package/dist/chunk-CIQG5L42.js +0 -685
  208. package/dist/chunk-CIQG5L42.js.map +0 -1
  209. package/dist/chunk-CLM6ERNO.js +0 -61
  210. package/dist/chunk-CLM6ERNO.js.map +0 -1
  211. package/dist/chunk-COS5MSTO.js +0 -88
  212. package/dist/chunk-COS5MSTO.js.map +0 -1
  213. package/dist/chunk-CRPZJVD2.js +0 -71
  214. package/dist/chunk-CRPZJVD2.js.map +0 -1
  215. package/dist/chunk-D62FDQKE.js +0 -53
  216. package/dist/chunk-D62FDQKE.js.map +0 -1
  217. package/dist/chunk-D736QUGF.js.map +0 -1
  218. package/dist/chunk-DGE4PV4A.js +0 -26
  219. package/dist/chunk-DGE4PV4A.js.map +0 -1
  220. package/dist/chunk-DMYGQB4O.js.map +0 -1
  221. package/dist/chunk-EWJP3YYP.js.map +0 -1
  222. package/dist/chunk-FV3Z5MBE.js.map +0 -1
  223. package/dist/chunk-HCEVHFJ7.js +0 -54
  224. package/dist/chunk-HCEVHFJ7.js.map +0 -1
  225. package/dist/chunk-J6527VRQ.js.map +0 -1
  226. package/dist/chunk-JELSZN25.js +0 -47
  227. package/dist/chunk-JELSZN25.js.map +0 -1
  228. package/dist/chunk-K575PT4S.js.map +0 -1
  229. package/dist/chunk-L57ZOT5K.js +0 -184
  230. package/dist/chunk-L57ZOT5K.js.map +0 -1
  231. package/dist/chunk-MU6MCIAC.js +0 -15
  232. package/dist/chunk-MU6MCIAC.js.map +0 -1
  233. package/dist/chunk-MUUROGIH.js.map +0 -1
  234. package/dist/chunk-NR7BU22N.js +0 -758
  235. package/dist/chunk-NR7BU22N.js.map +0 -1
  236. package/dist/chunk-O4MVQTEJ.js.map +0 -1
  237. package/dist/chunk-OOYD44JI.js +0 -317
  238. package/dist/chunk-OOYD44JI.js.map +0 -1
  239. package/dist/chunk-Q2UM7BXU.js.map +0 -1
  240. package/dist/chunk-RH5EFRVJ.js.map +0 -1
  241. package/dist/chunk-S2EGRPCM.js +0 -47
  242. package/dist/chunk-S2EGRPCM.js.map +0 -1
  243. package/dist/chunk-SINXE47Y.js +0 -55
  244. package/dist/chunk-SINXE47Y.js.map +0 -1
  245. package/dist/chunk-UF4MZSLT.js +0 -53
  246. package/dist/chunk-UF4MZSLT.js.map +0 -1
  247. package/dist/chunk-UOC2PL46.js +0 -13
  248. package/dist/chunk-UOC2PL46.js.map +0 -1
  249. package/dist/chunk-VYFAZN3F.js +0 -372
  250. package/dist/chunk-VYFAZN3F.js.map +0 -1
  251. package/dist/chunk-WRAA7GVZ.js +0 -209
  252. package/dist/chunk-WRAA7GVZ.js.map +0 -1
  253. package/dist/chunk-XGELA764.js +0 -163
  254. package/dist/chunk-XGELA764.js.map +0 -1
  255. package/dist/chunk-YUXP55T2.js.map +0 -1
  256. package/dist/chunk-YWIKDKHY.js +0 -307
  257. package/dist/chunk-YWIKDKHY.js.map +0 -1
  258. package/dist/chunk-ZJ5AOYBH.js +0 -8
  259. package/dist/chunk-ZJ5AOYBH.js.map +0 -1
  260. package/dist/chunk-ZSUUOEPL.js +0 -731
  261. package/dist/chunk-ZSUUOEPL.js.map +0 -1
  262. package/dist/chunk-ZVJZ72HY.js.map +0 -1
  263. package/dist/circuit-breaker/index.d.ts +0 -197
  264. package/dist/circuit-breaker/index.js +0 -3
  265. package/dist/circuit-breaker/index.js.map +0 -1
  266. package/dist/deadline/index.d.ts +0 -199
  267. package/dist/deadline/index.js +0 -6
  268. package/dist/deadline/index.js.map +0 -1
  269. package/dist/debounce/index.js +0 -3
  270. package/dist/debounce/index.js.map +0 -1
  271. package/dist/extension/react.d.ts +0 -121
  272. package/dist/extension/react.js +0 -75
  273. package/dist/extension/react.js.map +0 -1
  274. package/dist/extension/subs/index.d.ts +0 -45
  275. package/dist/extension/subs/index.js +0 -80
  276. package/dist/extension/subs/index.js.map +0 -1
  277. package/dist/extension/test-utils.d.ts +0 -128
  278. package/dist/extension/test-utils.js +0 -277
  279. package/dist/extension/test-utils.js.map +0 -1
  280. package/dist/fan-out/index.js +0 -5
  281. package/dist/fan-out/index.js.map +0 -1
  282. package/dist/fold-BJPdjc9w.d.ts +0 -435
  283. package/dist/graph-B3L5e0N1.d.ts +0 -923
  284. package/dist/idempotency/adapter.d.ts +0 -62
  285. package/dist/idempotency/adapter.js +0 -4
  286. package/dist/idempotency/adapter.js.map +0 -1
  287. package/dist/idempotent-intake/index.d.ts +0 -188
  288. package/dist/idempotent-intake/index.js +0 -7
  289. package/dist/idempotent-intake/index.js.map +0 -1
  290. package/dist/journal/index.d.ts +0 -373
  291. package/dist/journal/index.js +0 -3
  292. package/dist/journal/index.js.map +0 -1
  293. package/dist/llm-call/index.d.ts +0 -311
  294. package/dist/llm-call/index.js +0 -16
  295. package/dist/llm-call/index.js.map +0 -1
  296. package/dist/machine-BtFWQmmq.d.ts +0 -804
  297. package/dist/monitored-run/index.js +0 -10
  298. package/dist/monitored-run/index.js.map +0 -1
  299. package/dist/paginated-walk/index.d.ts +0 -235
  300. package/dist/paginated-walk/index.js +0 -16
  301. package/dist/paginated-walk/index.js.map +0 -1
  302. package/dist/paginator/index.js +0 -3
  303. package/dist/paginator/index.js.map +0 -1
  304. package/dist/pbt/arbitraries/index.d.ts +0 -136
  305. package/dist/pbt/arbitraries/index.js +0 -3
  306. package/dist/pbt/arbitraries/index.js.map +0 -1
  307. package/dist/pbt/runners/index.d.ts +0 -118
  308. package/dist/pbt/runners/index.js +0 -5
  309. package/dist/pbt/runners/index.js.map +0 -1
  310. package/dist/poller/index.d.ts +0 -352
  311. package/dist/poller/index.js +0 -115
  312. package/dist/poller/index.js.map +0 -1
  313. package/dist/prediction/index.d.ts +0 -131
  314. package/dist/prediction/index.js +0 -4
  315. package/dist/prediction/index.js.map +0 -1
  316. package/dist/pure/index.d.ts +0 -3
  317. package/dist/pure/index.js +0 -4
  318. package/dist/pure/index.js.map +0 -1
  319. package/dist/rate-limit/index.d.ts +0 -115
  320. package/dist/rate-limit/index.js +0 -3
  321. package/dist/rate-limit/index.js.map +0 -1
  322. package/dist/reconciler/index.d.ts +0 -193
  323. package/dist/reconciler/index.js +0 -164
  324. package/dist/reconciler/index.js.map +0 -1
  325. package/dist/recorder/index.js +0 -3
  326. package/dist/recorder/index.js.map +0 -1
  327. package/dist/reducer-4GNR6b8B.d.ts +0 -447
  328. package/dist/resilient-call/index.d.ts +0 -320
  329. package/dist/resilient-call/index.js +0 -14
  330. package/dist/resilient-call/index.js.map +0 -1
  331. package/dist/retry-to-success/index.d.ts +0 -109
  332. package/dist/retry-to-success/index.js +0 -37
  333. package/dist/retry-to-success/index.js.map +0 -1
  334. package/dist/run-pAcmBpah.d.ts +0 -713
  335. package/dist/runtime-types-CNLmhWif.d.ts +0 -517
  336. package/dist/saga/index.d.ts +0 -241
  337. package/dist/saga/index.js +0 -150
  338. package/dist/saga/index.js.map +0 -1
  339. package/dist/samples-B3My5oh2.d.ts +0 -59
  340. package/dist/snapshot/index.js +0 -5
  341. package/dist/snapshot/index.js.map +0 -1
  342. package/dist/subs/index.d.ts +0 -472
  343. package/dist/subs/index.js +0 -7
  344. package/dist/subs/index.js.map +0 -1
  345. package/dist/throttle/index.d.ts +0 -134
  346. package/dist/throttle/index.js +0 -3
  347. package/dist/throttle/index.js.map +0 -1
  348. package/dist/throttled-input/index.js.map +0 -1
  349. package/dist/token-refresh/index.d.ts +0 -216
  350. package/dist/token-refresh/index.js +0 -6
  351. package/dist/token-refresh/index.js.map +0 -1
  352. package/dist/trace-replay/index.js +0 -6
  353. package/dist/trace-replay/index.js.map +0 -1
  354. package/dist/with-deadline/index.d.ts +0 -197
  355. package/dist/with-deadline/index.js +0 -111
  356. package/dist/with-deadline/index.js.map +0 -1
  357. package/dist/with-resilience/index.d.ts +0 -225
  358. package/dist/with-resilience/index.js +0 -240
  359. package/dist/with-resilience/index.js.map +0 -1
  360. package/dist/with-telemetry/index.d.ts +0 -150
  361. package/dist/with-telemetry/index.js +0 -70
  362. package/dist/with-telemetry/index.js.map +0 -1
  363. package/dist/work-queue/adapter.d.ts +0 -84
  364. package/dist/work-queue/adapter.js +0 -4
  365. package/dist/work-queue/adapter.js.map +0 -1
  366. package/dist/work-queue/ops.d.ts +0 -71
  367. package/dist/work-queue/ops.js +0 -3
  368. package/dist/work-queue/ops.js.map +0 -1
  369. package/dist/workflow/index.d.ts +0 -485
  370. package/dist/workflow/index.js +0 -244
  371. package/dist/workflow/index.js.map +0 -1
  372. /package/dist/{cache → paginate}/index.js.map +0 -0
  373. /package/dist/{chart/inspect → persistence}/index.js.map +0 -0
@@ -0,0 +1,657 @@
1
+ import { MsgType, createResilientCall } from '../chunk-AYS5N6WY.js';
2
+ export { DEFAULT_RESILIENT_NAME, canPass, createResilientCall, defaultCircuitPolicy, initBucket, initCircuit, initWindow, liftResilience, mountResilientCall, onFailure, onSuccess, record, refill, remaining, runCmdDef, tryConsume } from '../chunk-AYS5N6WY.js';
3
+ import { defaultRng, initRetry, recordFailure, shouldRetry, nextDelayMs } from '../chunk-VBDU4JL6.js';
4
+ import { subscribeDeadline } from '../chunk-22POWGFA.js';
5
+ export { cacheEvictMsg, cacheEvictionSub, cacheEvictionSubscribe, deadlineExceeded, deadlineMsgType, deadlineSub, evictExpired, get, has, initCache, remove, set, setTimeoutArmTimer, subscribeDeadline, subscribeWith } from '../chunk-22POWGFA.js';
6
+ import { Cmd, msgKeysOf, applyCell, fromTimeout, tryInterpret, cmdEdgeOf, subId, without, formOf } from '../chunk-66PY5WYF.js';
7
+ import { z } from 'zod';
8
+
9
+ function initTokenRefresh() {
10
+ return { token: null, stale: false };
11
+ }
12
+ var refreshToken = Cmd.define("refresh_token", {
13
+ input: z.object({}),
14
+ ok: z.custom(),
15
+ err: ["token_refresh_failed"]
16
+ });
17
+ function refreshTokenCmd() {
18
+ return refreshToken({});
19
+ }
20
+ function tokenRefreshedMsg(token) {
21
+ return { type: MsgType.TokenRefreshed, token };
22
+ }
23
+ function tokenRefreshFailedMsg(error) {
24
+ return { type: MsgType.TokenRefreshFailed, error };
25
+ }
26
+ function createTokenRefresh(config = {}) {
27
+ const skewMs = config.skewMs !== void 0 && config.skewMs > 0 ? config.skewMs : 0;
28
+ function needsRefresh(state, at) {
29
+ if (state.token === null) return true;
30
+ if (state.stale) return true;
31
+ if (!Number.isFinite(state.token.expiresAt)) return true;
32
+ return at >= state.token.expiresAt - skewMs;
33
+ }
34
+ function on401(state) {
35
+ if (state.stale) return state;
36
+ return { ...state, stale: true };
37
+ }
38
+ function refreshed(state, token) {
39
+ const normalized = Object.is(token.expiresAt, -0) ? { ...token, expiresAt: 0 } : token;
40
+ return { ...state, token: normalized, stale: false };
41
+ }
42
+ function ensureFresh(state, at) {
43
+ if (needsRefresh(state, at)) {
44
+ return [state, [refreshTokenCmd()]];
45
+ }
46
+ return [state, []];
47
+ }
48
+ function handlers(ports) {
49
+ return {
50
+ refresh_token: tryInterpret(
51
+ () => ports.refresh(),
52
+ (token) => tokenRefreshedMsg(token),
53
+ (error) => tokenRefreshFailedMsg(error)
54
+ )
55
+ };
56
+ }
57
+ return {
58
+ /** The slice initializer — spread into the consumer's `init`. */
59
+ init: initTokenRefresh,
60
+ needsRefresh,
61
+ on401,
62
+ refreshed,
63
+ ensureFresh,
64
+ handlers
65
+ };
66
+ }
67
+
68
+ // src/internal/resilience/authed-call/index.ts
69
+ function createAuthedCall(config, rng = Math.random) {
70
+ const rc = createResilientCall(config, rng);
71
+ const tr = createTokenRefresh({ skewMs: config.skewMs });
72
+ function init() {
73
+ return {
74
+ resilience: rc.init(),
75
+ auth: tr.init(),
76
+ authRetry: {},
77
+ pendingAuthRetry: {}
78
+ };
79
+ }
80
+ function liftResilient(s, [resilience, cmds]) {
81
+ return [{ ...s, resilience }, cmds];
82
+ }
83
+ function clearAuthKey(s, key) {
84
+ return {
85
+ ...s,
86
+ authRetry: without(s.authRetry, key),
87
+ pendingAuthRetry: without(s.pendingAuthRetry, key)
88
+ };
89
+ }
90
+ function attempt(s, key, input, at) {
91
+ const cleared = clearAuthKey(s, key);
92
+ return liftResilient(
93
+ cleared,
94
+ rc.attempt(cleared.resilience, key, input, at)
95
+ );
96
+ }
97
+ function succeed(s, key, msg) {
98
+ const settled = clearAuthKey(s, key);
99
+ return liftResilient(settled, rc.succeed(settled.resilience, key, msg));
100
+ }
101
+ function fail(s, key, msg) {
102
+ const [resilience, cmds] = rc.fail(s.resilience, key, msg);
103
+ const next = settleAuthIfDone({ ...s, resilience }, key, resilience);
104
+ return [next, cmds];
105
+ }
106
+ function on401(s, key, at) {
107
+ const spent = s.authRetry[key] ?? 0;
108
+ const call = s.resilience.calls[key];
109
+ const input = call?.phase === "running" || call?.phase === "waiting_retry" ? call.input : void 0;
110
+ if (spent >= 1 || input === void 0) {
111
+ const error = { _tag: "unauthorized", key };
112
+ const [settled] = rc.settleFailed(s.resilience, key, error);
113
+ return [{ ...clearAuthKey(s, key), resilience: settled }, []];
114
+ }
115
+ return [
116
+ {
117
+ ...s,
118
+ auth: tr.on401(s.auth),
119
+ authRetry: { ...s.authRetry, [key]: spent + 1 },
120
+ pendingAuthRetry: { ...s.pendingAuthRetry, [key]: input }
121
+ },
122
+ [refreshTokenCmd()]
123
+ ];
124
+ }
125
+ function installToken(s, token) {
126
+ return { ...s, auth: tr.refreshed(s.auth, token) };
127
+ }
128
+ function onRefreshed(s, at) {
129
+ const parked = Object.entries(s.pendingAuthRetry);
130
+ if (parked.length === 0) return [s, []];
131
+ let resilience = s.resilience;
132
+ const cmds = [];
133
+ for (const [key, input] of parked) {
134
+ const [next, runCmds] = rc.attempt(resilience, key, input, at);
135
+ resilience = next;
136
+ cmds.push(...runCmds);
137
+ }
138
+ return [{ ...s, resilience, pendingAuthRetry: {} }, cmds];
139
+ }
140
+ function onTimer(s, msg) {
141
+ const [resilience, cmds] = rc.onTimer(s.resilience, msg);
142
+ const next = settleAuthIfDone({ ...s, resilience }, void 0, resilience);
143
+ return [next, cmds];
144
+ }
145
+ function settleAuthIfDone(s, onlyKey, resilience) {
146
+ const keys = onlyKey !== void 0 ? [onlyKey] : Object.keys(s.authRetry);
147
+ let next = s;
148
+ for (const key of keys) {
149
+ const phase = resilience.calls[key]?.phase;
150
+ if (phase === "succeeded" || phase === "failed") {
151
+ next = clearAuthKey(next, key);
152
+ }
153
+ }
154
+ return next;
155
+ }
156
+ function subs(s) {
157
+ return rc.subs(s.resilience);
158
+ }
159
+ function handlers(ports) {
160
+ const trPorts = { refresh: ports.refresh };
161
+ return {
162
+ ...rc.handlers({ run: ports.run }),
163
+ ...tr.handlers(trPorts)
164
+ };
165
+ }
166
+ return {
167
+ init,
168
+ attempt,
169
+ succeed,
170
+ fail,
171
+ on401,
172
+ installToken,
173
+ onRefreshed,
174
+ onTimer,
175
+ /** token-refresh's call-boundary verb, re-exposed for proactive expiry refresh. */
176
+ needsRefresh: (s, at) => tr.needsRefresh(s.auth, at),
177
+ subs,
178
+ handlers
179
+ };
180
+ }
181
+ function liftAuthed(state, [slice, cmds]) {
182
+ return [{ ...state, authed: slice }, cmds];
183
+ }
184
+
185
+ // src/internal/resilience/retry-to-success/index.ts
186
+ var RetryExhaustedError = class extends Error {
187
+ constructor(attempts, lastError) {
188
+ super(
189
+ `@demlik/tea: retryToSuccess gave up after ${attempts} attempt(s) \u2014 the bounded retry reached maxAttempts without a success. See .lastError for the final failure.`
190
+ );
191
+ this.attempts = attempts;
192
+ this.lastError = lastError;
193
+ }
194
+ attempts;
195
+ lastError;
196
+ name = "RetryExhaustedError";
197
+ _tag = "RetryExhaustedError";
198
+ };
199
+ var defaultSleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
200
+ async function retryToSuccess(port, policy, opts = {}) {
201
+ const rng = opts.rng ?? defaultRng;
202
+ const sleep = opts.sleep ?? defaultSleep;
203
+ let retry = initRetry();
204
+ for (; ; ) {
205
+ try {
206
+ return await port();
207
+ } catch (error) {
208
+ retry = recordFailure(retry, error);
209
+ if (!shouldRetry(retry, policy)) {
210
+ throw new RetryExhaustedError(retry.attempt, error);
211
+ }
212
+ await sleep(nextDelayMs(retry, policy, rng));
213
+ }
214
+ }
215
+ }
216
+ function deadlineExceededMsg(seq) {
217
+ return { type: "$deadline:exceeded", seq };
218
+ }
219
+ var deadlineDecision = Cmd.define("$deadline:decision", {
220
+ input: z.object({
221
+ decision: z.enum(["rearm", "expire", "idle"]),
222
+ /** The slice `seq` AFTER this transition (the re-arm generation now armed). */
223
+ seq: z.number()
224
+ }),
225
+ ok: z.void(),
226
+ err: []
227
+ });
228
+ function withDeadline(base, config) {
229
+ const windowMs = config.ms;
230
+ const isProgress = config.progress;
231
+ const update = {};
232
+ const baseMsgKeys = msgKeysOf(base);
233
+ for (const key of baseMsgKeys) {
234
+ if (key.startsWith("$deadline:")) {
235
+ throw new Error(
236
+ `withDeadline: the base machine declares a reserved "${key}" update cell \u2014 the wrapper owns the "$deadline:" Msg namespace. Rename the base Msg.`
237
+ );
238
+ }
239
+ }
240
+ for (const key of baseMsgKeys) {
241
+ update[key] = (state, msg) => {
242
+ const [nextBase, baseCmds] = applyCell(
243
+ base,
244
+ state.base,
245
+ msg
246
+ );
247
+ const armed = state.$deadline.phase === "armed";
248
+ const counts = armed && (isProgress === void 0 || isProgress(msg));
249
+ const $deadline = counts ? { phase: "armed", seq: state.$deadline.seq + 1 } : state.$deadline;
250
+ const next = { base: nextBase, $deadline };
251
+ const decision = deadlineDecision({
252
+ decision: counts ? "rearm" : "idle",
253
+ seq: $deadline.seq
254
+ });
255
+ return [next, [...baseCmds, decision]];
256
+ };
257
+ }
258
+ update["$deadline:exceeded"] = (state, msg) => {
259
+ const m = msg;
260
+ const fires = state.$deadline.phase === "armed" && m.seq === state.$deadline.seq;
261
+ const $deadline = fires ? { phase: "exceeded", seq: state.$deadline.seq } : state.$deadline;
262
+ const next = { base: state.base, $deadline };
263
+ const decision = deadlineDecision({
264
+ decision: fires ? "expire" : "idle",
265
+ seq: $deadline.seq
266
+ });
267
+ return [next, [decision]];
268
+ };
269
+ const baseInterpret = base.interpret ?? {};
270
+ if (Object.hasOwn(baseInterpret, "$deadline:decision")) {
271
+ throw new Error(
272
+ 'withDeadline: the base machine declares a reserved "$deadline:decision" interpret handler \u2014 the wrapper owns the "$deadline:" Cmd namespace. Rename the base handler.'
273
+ );
274
+ }
275
+ const interpret = {
276
+ ...baseInterpret,
277
+ "$deadline:decision": async () => {
278
+ }
279
+ };
280
+ const baseSubscriptions = base.subscriptions;
281
+ const subscriptions = (state) => {
282
+ const baseSubs = baseSubscriptions ? baseSubscriptions(state.base) : [];
283
+ if (state.$deadline.phase !== "armed") return baseSubs;
284
+ const timeout = {
285
+ id: subId(`$deadline:timeout:${state.$deadline.seq}`),
286
+ type: "$deadline:timeout",
287
+ delayMs: windowMs
288
+ };
289
+ return [...baseSubs, timeout];
290
+ };
291
+ const baseSubscribe = base.subscribe ?? {};
292
+ if (Object.hasOwn(baseSubscribe, "$deadline:timeout")) {
293
+ throw new Error(
294
+ 'withDeadline: the base machine declares a reserved "$deadline:timeout" subscribe handler \u2014 the wrapper owns the "$deadline:" Sub namespace. Rename the base handler.'
295
+ );
296
+ }
297
+ const timeoutCell = fromTimeout(
298
+ (sub) => {
299
+ const seq = Number(sub.id.slice(sub.id.lastIndexOf(":") + 1));
300
+ return deadlineExceededMsg(seq);
301
+ }
302
+ );
303
+ const subscribe = {
304
+ ...baseSubscribe,
305
+ "$deadline:timeout": timeoutCell
306
+ };
307
+ return {
308
+ init: (loaded, ctx) => {
309
+ if (loaded !== null) {
310
+ return [loaded, []];
311
+ }
312
+ const [base0, cmds] = base.init(null, ctx);
313
+ const model = {
314
+ base: base0,
315
+ $deadline: { phase: "armed", seq: 0 }
316
+ };
317
+ return [model, cmds];
318
+ },
319
+ update,
320
+ subscriptions,
321
+ subscribe,
322
+ interpret,
323
+ // The base's `Cmd.define` list rides through so `run`'s interpret edge
324
+ // still parses / stamps the base's settled Msgs behind the wrap (#66).
325
+ ...base.cmds ? { cmds: base.cmds } : {}
326
+ };
327
+ }
328
+ function resilienceRunCmdDef() {
329
+ return Cmd.define("$resilience:run", {
330
+ input: z.custom(),
331
+ // The carried result is the base interpret handler's resolution (`M | void`).
332
+ // biome-ignore lint/suspicious/noConfusingVoidType: mirrors `Interpret`'s own `Promise<M | void>`
333
+ ok: z.custom(),
334
+ err: ["base_rejected", "deadline_exceeded"]
335
+ });
336
+ }
337
+ var RC_RETRY_PREFIX = "resilient:retry:";
338
+ var RC_DEADLINE_PREFIX = "resilient:deadline:";
339
+ var WX_RETRY_PREFIX = "$resilience:retry:";
340
+ var WX_DEADLINE_PREFIX = "$resilience:deadline:";
341
+ function toWrapperTimerId(rcId) {
342
+ if (rcId.startsWith(RC_RETRY_PREFIX))
343
+ return WX_RETRY_PREFIX + rcId.slice(RC_RETRY_PREFIX.length);
344
+ if (rcId.startsWith(RC_DEADLINE_PREFIX))
345
+ return WX_DEADLINE_PREFIX + rcId.slice(RC_DEADLINE_PREFIX.length);
346
+ return rcId;
347
+ }
348
+ function toRcTimerId(wxId) {
349
+ if (wxId.startsWith(WX_RETRY_PREFIX))
350
+ return RC_RETRY_PREFIX + wxId.slice(WX_RETRY_PREFIX.length);
351
+ if (wxId.startsWith(WX_DEADLINE_PREFIX))
352
+ return RC_DEADLINE_PREFIX + wxId.slice(WX_DEADLINE_PREFIX.length);
353
+ return wxId;
354
+ }
355
+ function updateDeclaresMsgKey(machine, key) {
356
+ if (formOf(machine) === "reducer") {
357
+ return Object.hasOwn(machine.update, key);
358
+ }
359
+ for (const innerTable of Object.values(machine.update)) {
360
+ if (innerTable !== null && (typeof innerTable === "object" || typeof innerTable === "function") && Object.hasOwn(innerTable, key)) {
361
+ return true;
362
+ }
363
+ }
364
+ return false;
365
+ }
366
+ function withResilience(base, config, rng = Math.random) {
367
+ const { target } = config;
368
+ const keyOf = config.keyOf ?? (() => target);
369
+ const runCmd = resilienceRunCmdDef();
370
+ const timeSensitiveBrick = config.circuit !== void 0 || config.rateLimit !== void 0 || config.cache !== void 0 || config.deadline !== void 0;
371
+ if (timeSensitiveBrick && config.at === void 0) {
372
+ throw new Error(
373
+ "withResilience: a time-sensitive brick (circuit / rateLimit / cache / deadline) is configured but `config.at` is missing. The cold-attempt gate needs the REAL wall time the triggering base Msg carries as data (time-as-data) \u2014 without it the gate would fabricate `at = 0`, so a cold attempt after a real-time breaker trip computes a negative cooldown and the breaker NEVER recovers (and a deadline brick fires immediately). Provide `at: (msg) => msg.<wallTimeField>`."
374
+ );
375
+ }
376
+ const atOf = config.at ?? (() => 0);
377
+ const rc = createResilientCall(config, rng);
378
+ const update = {};
379
+ function isBaseMsg(result) {
380
+ return typeof result === "object" && result !== null && "type" in result;
381
+ }
382
+ function foldBase(state, msg, delivering = /* @__PURE__ */ new Set()) {
383
+ const [nextBase, baseCmds] = applyCell(base, state.base, msg);
384
+ let next = { base: nextBase, $resilience: state.$resilience };
385
+ const outCmds = [];
386
+ const at = atOf(msg);
387
+ for (const cmd of baseCmds) {
388
+ if (cmd.type !== target) {
389
+ outCmds.push(cmd);
390
+ continue;
391
+ }
392
+ const callKey = keyOf(cmd);
393
+ const [nextSlice, runCmds] = rc.attempt(
394
+ next.$resilience,
395
+ callKey,
396
+ cmd,
397
+ at
398
+ );
399
+ next = { ...next, $resilience: nextSlice };
400
+ outCmds.push(...renameRunCmds(runCmds));
401
+ if (runCmds.length === 0 && !delivering.has(callKey)) {
402
+ const call = nextSlice.calls[callKey];
403
+ if (call?.phase === "succeeded" && isBaseMsg(call.result)) {
404
+ const [delivered, moreCmds] = foldBase(
405
+ next,
406
+ call.result,
407
+ /* @__PURE__ */ new Set([...delivering, callKey])
408
+ );
409
+ next = delivered;
410
+ outCmds.push(...moreCmds);
411
+ }
412
+ }
413
+ }
414
+ return [next, outCmds];
415
+ }
416
+ for (const key of msgKeysOf(base)) {
417
+ update[key] = (state, msg) => foldBase(state, msg);
418
+ }
419
+ update["$resilience:ok"] = (state, msg) => {
420
+ const m = msg;
421
+ const [slice, runCmds] = rc.succeed(state.$resilience, m.key, {
422
+ type: MsgType.ResilientOk,
423
+ key: m.key,
424
+ result: m.result,
425
+ at: m.at
426
+ });
427
+ const settled = { ...state, $resilience: slice };
428
+ const settleCmds = renameRunCmds(runCmds);
429
+ if (!isBaseMsg(m.result)) return [settled, settleCmds];
430
+ const [next, followCmds] = foldBase(settled, m.result, /* @__PURE__ */ new Set([m.key]));
431
+ return [next, [...settleCmds, ...followCmds]];
432
+ };
433
+ update["$resilience:err"] = (state, msg) => {
434
+ const m = msg;
435
+ const [slice, runCmds] = rc.fail(state.$resilience, m.key, {
436
+ type: MsgType.ResilientErr,
437
+ key: m.key,
438
+ error: m.error,
439
+ at: m.at
440
+ });
441
+ return [{ ...state, $resilience: slice }, renameRunCmds(runCmds)];
442
+ };
443
+ update["$resilience:timer"] = (state, msg) => {
444
+ const m = msg;
445
+ const [slice, runCmds] = rc.onTimer(state.$resilience, {
446
+ type: "deadline_exceeded",
447
+ id: toRcTimerId(m.id),
448
+ atMs: m.atMs
449
+ });
450
+ return [{ ...state, $resilience: slice }, renameRunCmds(runCmds)];
451
+ };
452
+ function renameRunCmds(runCmds) {
453
+ return runCmds.map((r) => runCmd({ key: r.key, input: r.input }));
454
+ }
455
+ const baseSubscriptions = base.subscriptions;
456
+ const baseSubscribe = base.subscribe;
457
+ function subscriptions(state) {
458
+ const baseSubs = baseSubscriptions ? baseSubscriptions(state.base) : [];
459
+ const rcSubs = rc.subs(state.$resilience);
460
+ const timerSubs = rcSubs.map((s) => ({
461
+ id: subId(toWrapperTimerId(s.id)),
462
+ type: "$resilience:timer",
463
+ atMs: s.atMs
464
+ }));
465
+ return [...baseSubs, ...timerSubs];
466
+ }
467
+ const baseInterpret = base.interpret ?? {};
468
+ const RESERVED = [
469
+ "$resilience:run",
470
+ "$resilience:ok",
471
+ "$resilience:err",
472
+ "$resilience:timer"
473
+ ];
474
+ const surfaces = [
475
+ {
476
+ name: "update",
477
+ declares: (reserved) => updateDeclaresMsgKey(base, reserved)
478
+ },
479
+ {
480
+ name: "interpret",
481
+ declares: (reserved) => Object.hasOwn(baseInterpret, reserved)
482
+ },
483
+ {
484
+ name: "subscribe",
485
+ declares: (reserved) => Object.hasOwn(baseSubscribe ?? {}, reserved)
486
+ }
487
+ ];
488
+ for (const reserved of RESERVED) {
489
+ for (const surface of surfaces) {
490
+ if (surface.declares(reserved)) {
491
+ throw new Error(
492
+ `withResilience: the base machine declares a reserved "${reserved}" ${surface.name} key \u2014 the wrapper owns the "$resilience:" namespace ($resilience:run / :ok / :err / :timer across update, interpret, and subscribe). Rename the base key.`
493
+ );
494
+ }
495
+ }
496
+ }
497
+ if (!Object.hasOwn(baseInterpret, target)) {
498
+ throw new Error(
499
+ `withResilience: no base interpret handler for target Cmd "${target}" \u2014 the resilient effect has nothing to perform. The base machine must declare an interpret handler for its target Cmd type.`
500
+ );
501
+ }
502
+ const runHandler = tryInterpret(
503
+ async (cmd, ctx) => {
504
+ const inner = cmd.input;
505
+ const handler = baseInterpret[inner.type];
506
+ if (handler === void 0) {
507
+ throw new Error(
508
+ `withResilience: no base interpret handler for target Cmd "${inner.type}" \u2014 the resilient effect has nothing to perform.`
509
+ );
510
+ }
511
+ return cmdEdgeOf(ctx)(
512
+ inner,
513
+ await handler(inner, ctx)
514
+ );
515
+ },
516
+ (result, cmd) => ({
517
+ type: "$resilience:ok",
518
+ key: cmd.key,
519
+ result,
520
+ at: Date.now()
521
+ }),
522
+ (error, cmd) => ({
523
+ type: "$resilience:err",
524
+ key: cmd.key,
525
+ error,
526
+ at: Date.now()
527
+ })
528
+ );
529
+ const interpret = {
530
+ ...baseInterpret,
531
+ "$resilience:run": runHandler
532
+ };
533
+ const subscribeMap = {
534
+ ...baseSubscribe ?? {},
535
+ "$resilience:timer": (sub, ctx, dispatch) => (
536
+ // Reuse the deadline subscribe cell wholesale: it arms a one-shot timer
537
+ // for `max(0, atMs - Date.now())` and fires when the wall clock crosses
538
+ // `atMs`. We hand it a `DeadlineSub` shape and translate its
539
+ // `deadline_exceeded` Msg into the wrapper's `$resilience:timer` Msg.
540
+ subscribeDeadline(
541
+ { id: sub.id, type: "deadline", atMs: sub.atMs },
542
+ ctx,
543
+ (dl) => dispatch({ type: "$resilience:timer", id: dl.id, atMs: dl.atMs })
544
+ )
545
+ )
546
+ };
547
+ return {
548
+ init: (loaded, ctx) => {
549
+ if (loaded !== null) {
550
+ return [loaded, []];
551
+ }
552
+ const [base0, baseCmds] = base.init(null, ctx);
553
+ let resilience = rc.init();
554
+ const initCmds = [];
555
+ for (const cmd of baseCmds) {
556
+ if (cmd.type !== target) {
557
+ initCmds.push(cmd);
558
+ continue;
559
+ }
560
+ if (config.deadline !== void 0) {
561
+ throw new Error(
562
+ `withResilience: base.init emits the target Cmd "${target}" while a deadline brick is configured. The boot cold attempt has no real wall time (boot is gated at at=0), so the deadline would anchor at 0 + ${config.deadline.ms}ms and its $resilience:deadline Sub would fire IMMEDIATELY (max(0, atMs - now) === 0), failing the boot call instantly. Move the boot effect out of base.init and into a boot Msg dispatched after run() (where the triggering Msg carries a real at via config.at), so the deadline anchors at a real instant. (Boot effects belong in a boot Msg, not init Cmds.)`
563
+ );
564
+ }
565
+ const callKey = keyOf(cmd);
566
+ const [nextSlice, runCmds] = rc.attempt(resilience, callKey, cmd, 0);
567
+ resilience = nextSlice;
568
+ initCmds.push(...renameRunCmds(runCmds));
569
+ }
570
+ const model = { base: base0, $resilience: resilience };
571
+ return [model, initCmds];
572
+ },
573
+ update,
574
+ subscriptions,
575
+ subscribe: subscribeMap,
576
+ interpret,
577
+ // The base's `Cmd.define` list rides through so `run`'s interpret edge
578
+ // still parses / stamps the base's NON-target settled Msgs behind the
579
+ // wrap; the target's settle through the carrier above (#66).
580
+ ...base.cmds ? { cmds: base.cmds } : {}
581
+ };
582
+ }
583
+ var telemetryEmit = Cmd.define("$telemetry:emit", {
584
+ input: z.object({ event: z.custom() }),
585
+ ok: z.void(),
586
+ err: [],
587
+ requirements: Cmd.requirements()
588
+ });
589
+ function withTelemetry(base, config = {}) {
590
+ const project = config.event;
591
+ const msgKeys = msgKeysOf(base);
592
+ const update = {};
593
+ for (const key of msgKeys) {
594
+ update[key] = (state, msg) => {
595
+ const [nextBase, baseCmds] = applyCell(base, state.base, msg);
596
+ const $telemetry = { seq: state.$telemetry.seq + 1 };
597
+ const next = { base: nextBase, $telemetry };
598
+ const event = project ? project(msg, state, next) : { seq: $telemetry.seq, msgType: msg.type };
599
+ const emit = telemetryEmit({ event });
600
+ return [next, [...baseCmds, emit]];
601
+ };
602
+ }
603
+ const baseInterpret = base.interpret ?? {};
604
+ if (Object.hasOwn(baseInterpret, "$telemetry:emit")) {
605
+ throw new Error(
606
+ 'withTelemetry: the base machine declares a reserved "$telemetry:emit" interpret handler \u2014 the wrapper owns the "$telemetry:" Cmd namespace. Rename the base handler.'
607
+ );
608
+ }
609
+ const interpret = {
610
+ ...baseInterpret,
611
+ // OBSERVE-ONLY at the boundary: the sink is fire-and-forget. The runtime
612
+ // `await`s every interpret handler in its dispatch loop, so awaiting the
613
+ // sink here would let a SLOW sink backpressure the wrapped machine (its
614
+ // next dispatch waits) and a FAILING sink crash dispatch (the throw would
615
+ // propagate out of the transition). Both violate the contract: telemetry
616
+ // must never affect base behavior OR latency. So we DO NOT await — we hand
617
+ // the event to the sink, normalize its result to a Promise, swallow any
618
+ // rejection/throw, and return immediately. The handler resolves in the same
619
+ // microtask the dispatch loop reaches it; the machine never waits on the
620
+ // sink, and a rejected sink can never become an unhandled rejection.
621
+ "$telemetry:emit": (cmd, ctx) => {
622
+ const event = cmd.event.at === void 0 && ctx.clock !== void 0 ? { ...cmd.event, at: ctx.clock() } : cmd.event;
623
+ try {
624
+ Promise.resolve(ctx.telemetrySink(event)).catch(() => {
625
+ });
626
+ } catch {
627
+ }
628
+ }
629
+ };
630
+ const baseSubscriptions = base.subscriptions;
631
+ const baseSubscribe = base.subscribe;
632
+ return {
633
+ init: (loaded, ctx) => {
634
+ if (loaded !== null) {
635
+ return [loaded, []];
636
+ }
637
+ const [base0, cmds] = base.init(null, ctx);
638
+ const model = { base: base0, $telemetry: { seq: 0 } };
639
+ return [model, cmds];
640
+ },
641
+ update,
642
+ // Subs merge to the base's, verbatim — telemetry owns no timers. The base
643
+ // subscribes against its own nested slice.
644
+ ...baseSubscriptions ? {
645
+ subscriptions: (state) => baseSubscriptions(state.base)
646
+ } : {},
647
+ ...baseSubscribe ? { subscribe: baseSubscribe } : {},
648
+ interpret,
649
+ // The base's `Cmd.define` list rides through so `run`'s interpret edge
650
+ // still parses / stamps the base's settled Msgs behind the wrap (#66).
651
+ ...base.cmds ? { cmds: base.cmds } : {}
652
+ };
653
+ }
654
+
655
+ export { RetryExhaustedError, createAuthedCall, createTokenRefresh, deadlineDecision, deadlineExceededMsg, initTokenRefresh, liftAuthed, refreshToken, refreshTokenCmd, resilienceRunCmdDef, retryToSuccess, telemetryEmit, tokenRefreshFailedMsg, tokenRefreshedMsg, withDeadline, withResilience, withTelemetry };
656
+ //# sourceMappingURL=index.js.map
657
+ //# sourceMappingURL=index.js.map