@smthrs/gateway 0.34.0 → 1.0.0-rc.3

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 (605) hide show
  1. package/CHANGELOG.md +198 -0
  2. package/LICENSE +1 -1
  3. package/README.md +92 -0
  4. package/dist/cjs/Diagnosis.d.ts +275 -0
  5. package/dist/cjs/Diagnosis.d.ts.map +1 -0
  6. package/dist/cjs/Diagnosis.js +476 -0
  7. package/dist/cjs/Diagnosis.js.map +7 -0
  8. package/dist/cjs/EngineTrace.d.ts +76 -0
  9. package/dist/cjs/EngineTrace.d.ts.map +1 -0
  10. package/dist/cjs/EngineTrace.js +501 -0
  11. package/dist/cjs/EngineTrace.js.map +7 -0
  12. package/dist/cjs/GatewayError.d.ts +54 -0
  13. package/dist/cjs/GatewayError.d.ts.map +1 -0
  14. package/dist/cjs/GatewayError.js +51 -0
  15. package/dist/cjs/GatewayError.js.map +7 -0
  16. package/dist/cjs/GatewayProjection.d.ts +480 -0
  17. package/dist/cjs/GatewayProjection.d.ts.map +1 -0
  18. package/dist/cjs/GatewayProjection.js +462 -0
  19. package/dist/cjs/GatewayProjection.js.map +7 -0
  20. package/dist/cjs/GatewayRpcs.d.ts +1886 -0
  21. package/dist/cjs/GatewayRpcs.d.ts.map +1 -0
  22. package/dist/cjs/GatewayRpcs.js +121 -0
  23. package/dist/cjs/GatewayRpcs.js.map +7 -0
  24. package/dist/cjs/GatewaySchema.d.ts +3274 -0
  25. package/dist/cjs/GatewaySchema.d.ts.map +1 -0
  26. package/dist/cjs/GatewaySchema.js +141 -0
  27. package/dist/cjs/GatewaySchema.js.map +7 -0
  28. package/dist/cjs/GatewayServer.d.ts +427 -0
  29. package/dist/cjs/GatewayServer.d.ts.map +1 -0
  30. package/dist/cjs/GatewayServer.js +428 -0
  31. package/dist/cjs/GatewayServer.js.map +7 -0
  32. package/dist/cjs/HostBranchPresence.d.ts +12 -0
  33. package/dist/cjs/HostBranchPresence.d.ts.map +1 -0
  34. package/dist/cjs/HostBranchPresence.js +82 -0
  35. package/dist/cjs/HostBranchPresence.js.map +7 -0
  36. package/dist/cjs/Projections.d.ts +209 -0
  37. package/dist/cjs/Projections.d.ts.map +1 -0
  38. package/dist/cjs/Projections.js +906 -0
  39. package/dist/cjs/Projections.js.map +7 -0
  40. package/dist/cjs/RunDevTools.d.ts +181 -0
  41. package/dist/cjs/RunDevTools.d.ts.map +1 -0
  42. package/dist/cjs/RunDevTools.js +195 -0
  43. package/dist/cjs/RunDevTools.js.map +7 -0
  44. package/dist/cjs/RunHistory.d.ts +185 -0
  45. package/dist/cjs/RunHistory.d.ts.map +1 -0
  46. package/dist/cjs/RunHistory.js +68 -0
  47. package/dist/cjs/RunHistory.js.map +7 -0
  48. package/dist/cjs/RunTrace.d.ts +753 -0
  49. package/dist/cjs/RunTrace.d.ts.map +1 -0
  50. package/dist/cjs/RunTrace.js +1593 -0
  51. package/dist/cjs/RunTrace.js.map +7 -0
  52. package/dist/cjs/RuntimeBridge.d.ts +1386 -0
  53. package/dist/cjs/RuntimeBridge.d.ts.map +1 -0
  54. package/dist/cjs/RuntimeBridge.js +598 -0
  55. package/dist/cjs/RuntimeBridge.js.map +7 -0
  56. package/dist/cjs/bun/BunGateway.d.ts +20 -0
  57. package/dist/cjs/bun/BunGateway.d.ts.map +1 -0
  58. package/dist/cjs/bun/BunGateway.js +62 -0
  59. package/dist/cjs/bun/BunGateway.js.map +7 -0
  60. package/dist/cjs/index.d.ts +65 -0
  61. package/dist/cjs/index.d.ts.map +1 -0
  62. package/dist/cjs/index.js +59 -0
  63. package/dist/cjs/index.js.map +7 -0
  64. package/dist/cjs/internal/NativeGateway.d.ts +176 -0
  65. package/dist/cjs/internal/NativeGateway.d.ts.map +1 -0
  66. package/dist/cjs/internal/NativeGateway.js +187 -0
  67. package/dist/cjs/internal/NativeGateway.js.map +7 -0
  68. package/dist/cjs/internal/actionRenderings.d.ts +2 -0
  69. package/dist/cjs/internal/actionRenderings.d.ts.map +1 -0
  70. package/dist/cjs/internal/actionRenderings.js +224 -0
  71. package/dist/cjs/internal/actionRenderings.js.map +7 -0
  72. package/dist/cjs/internal/callEvents.d.ts +97 -0
  73. package/dist/cjs/internal/callEvents.d.ts.map +1 -0
  74. package/dist/cjs/internal/callEvents.js +169 -0
  75. package/dist/cjs/internal/callEvents.js.map +7 -0
  76. package/dist/cjs/internal/digestIndex.d.ts +31 -0
  77. package/dist/cjs/internal/digestIndex.d.ts.map +1 -0
  78. package/dist/cjs/internal/digestIndex.js +105 -0
  79. package/dist/cjs/internal/digestIndex.js.map +7 -0
  80. package/dist/cjs/internal/digestMemory.d.ts +19 -0
  81. package/dist/cjs/internal/digestMemory.d.ts.map +1 -0
  82. package/dist/cjs/internal/digestMemory.js +33 -0
  83. package/dist/cjs/internal/digestMemory.js.map +7 -0
  84. package/dist/cjs/internal/inspectLabels.d.ts +8 -0
  85. package/dist/cjs/internal/inspectLabels.d.ts.map +1 -0
  86. package/dist/cjs/internal/inspectLabels.js +29 -0
  87. package/dist/cjs/internal/inspectLabels.js.map +7 -0
  88. package/dist/cjs/internal/nativeResolution.d.ts +41 -0
  89. package/dist/cjs/internal/nativeResolution.d.ts.map +1 -0
  90. package/dist/cjs/internal/nativeResolution.js +62 -0
  91. package/dist/cjs/internal/nativeResolution.js.map +7 -0
  92. package/dist/cjs/internal/nodeEvents.d.ts +47 -0
  93. package/dist/cjs/internal/nodeEvents.d.ts.map +1 -0
  94. package/dist/cjs/internal/nodeEvents.js +60 -0
  95. package/dist/cjs/internal/nodeEvents.js.map +7 -0
  96. package/dist/cjs/node/NodeGateway.d.ts +16 -0
  97. package/dist/cjs/node/NodeGateway.d.ts.map +1 -0
  98. package/dist/cjs/node/NodeGateway.js +48 -0
  99. package/dist/cjs/node/NodeGateway.js.map +7 -0
  100. package/dist/cjs/package.json +1 -0
  101. package/dist/esm/Diagnosis.d.ts +275 -0
  102. package/dist/esm/Diagnosis.d.ts.map +1 -0
  103. package/dist/esm/Diagnosis.js +697 -0
  104. package/dist/esm/Diagnosis.js.map +1 -0
  105. package/dist/esm/EngineTrace.d.ts +76 -0
  106. package/dist/esm/EngineTrace.d.ts.map +1 -0
  107. package/dist/esm/EngineTrace.js +548 -0
  108. package/dist/esm/EngineTrace.js.map +1 -0
  109. package/dist/esm/GatewayError.d.ts +54 -0
  110. package/dist/esm/GatewayError.d.ts.map +1 -0
  111. package/dist/esm/GatewayError.js +60 -0
  112. package/dist/esm/GatewayError.js.map +1 -0
  113. package/dist/esm/GatewayProjection.d.ts +480 -0
  114. package/dist/esm/GatewayProjection.d.ts.map +1 -0
  115. package/dist/esm/GatewayProjection.js +792 -0
  116. package/dist/esm/GatewayProjection.js.map +1 -0
  117. package/dist/esm/GatewayRpcs.d.ts +1886 -0
  118. package/dist/esm/GatewayRpcs.d.ts.map +1 -0
  119. package/dist/esm/GatewayRpcs.js +145 -0
  120. package/dist/esm/GatewayRpcs.js.map +1 -0
  121. package/dist/esm/GatewaySchema.d.ts +3274 -0
  122. package/dist/esm/GatewaySchema.d.ts.map +1 -0
  123. package/dist/esm/GatewaySchema.js +244 -0
  124. package/dist/esm/GatewaySchema.js.map +1 -0
  125. package/dist/esm/GatewayServer.d.ts +427 -0
  126. package/dist/esm/GatewayServer.d.ts.map +1 -0
  127. package/dist/esm/GatewayServer.js +725 -0
  128. package/dist/esm/GatewayServer.js.map +1 -0
  129. package/dist/esm/HostBranchPresence.d.ts +12 -0
  130. package/dist/esm/HostBranchPresence.d.ts.map +1 -0
  131. package/dist/esm/HostBranchPresence.js +54 -0
  132. package/dist/esm/HostBranchPresence.js.map +1 -0
  133. package/dist/esm/Projections.d.ts +209 -0
  134. package/dist/esm/Projections.d.ts.map +1 -0
  135. package/dist/esm/Projections.js +1254 -0
  136. package/dist/esm/Projections.js.map +1 -0
  137. package/dist/esm/RunDevTools.d.ts +181 -0
  138. package/dist/esm/RunDevTools.d.ts.map +1 -0
  139. package/dist/esm/RunDevTools.js +281 -0
  140. package/dist/esm/RunDevTools.js.map +1 -0
  141. package/dist/esm/RunHistory.d.ts +185 -0
  142. package/dist/esm/RunHistory.d.ts.map +1 -0
  143. package/dist/esm/RunHistory.js +109 -0
  144. package/dist/esm/RunHistory.js.map +1 -0
  145. package/dist/esm/RunTrace.d.ts +753 -0
  146. package/dist/esm/RunTrace.d.ts.map +1 -0
  147. package/dist/esm/RunTrace.js +2105 -0
  148. package/dist/esm/RunTrace.js.map +1 -0
  149. package/dist/esm/RuntimeBridge.d.ts +1386 -0
  150. package/dist/esm/RuntimeBridge.d.ts.map +1 -0
  151. package/dist/esm/RuntimeBridge.js +659 -0
  152. package/dist/esm/RuntimeBridge.js.map +1 -0
  153. package/dist/esm/bun/BunGateway.d.ts +20 -0
  154. package/dist/esm/bun/BunGateway.d.ts.map +1 -0
  155. package/dist/esm/bun/BunGateway.js +32 -0
  156. package/dist/esm/bun/BunGateway.js.map +1 -0
  157. package/dist/esm/index.d.ts +65 -0
  158. package/dist/esm/index.d.ts.map +1 -0
  159. package/dist/esm/index.js +65 -0
  160. package/dist/esm/index.js.map +1 -0
  161. package/dist/esm/internal/NativeGateway.d.ts +176 -0
  162. package/dist/esm/internal/NativeGateway.d.ts.map +1 -0
  163. package/dist/esm/internal/NativeGateway.js +268 -0
  164. package/dist/esm/internal/NativeGateway.js.map +1 -0
  165. package/dist/esm/internal/actionRenderings.d.ts +2 -0
  166. package/dist/esm/internal/actionRenderings.d.ts.map +1 -0
  167. package/dist/esm/internal/actionRenderings.js +202 -0
  168. package/dist/esm/internal/actionRenderings.js.map +1 -0
  169. package/dist/esm/internal/callEvents.d.ts +97 -0
  170. package/dist/esm/internal/callEvents.d.ts.map +1 -0
  171. package/dist/esm/internal/callEvents.js +206 -0
  172. package/dist/esm/internal/callEvents.js.map +1 -0
  173. package/dist/esm/internal/digestIndex.d.ts +31 -0
  174. package/dist/esm/internal/digestIndex.d.ts.map +1 -0
  175. package/dist/esm/internal/digestIndex.js +87 -0
  176. package/dist/esm/internal/digestIndex.js.map +1 -0
  177. package/dist/esm/internal/digestMemory.d.ts +19 -0
  178. package/dist/esm/internal/digestMemory.d.ts.map +1 -0
  179. package/dist/esm/internal/digestMemory.js +23 -0
  180. package/dist/esm/internal/digestMemory.js.map +1 -0
  181. package/dist/esm/internal/inspectLabels.d.ts +8 -0
  182. package/dist/esm/internal/inspectLabels.d.ts.map +1 -0
  183. package/dist/esm/internal/inspectLabels.js +12 -0
  184. package/dist/esm/internal/inspectLabels.js.map +1 -0
  185. package/dist/esm/internal/nativeResolution.d.ts +41 -0
  186. package/dist/esm/internal/nativeResolution.d.ts.map +1 -0
  187. package/dist/esm/internal/nativeResolution.js +78 -0
  188. package/dist/esm/internal/nativeResolution.js.map +1 -0
  189. package/dist/esm/internal/nodeEvents.d.ts +47 -0
  190. package/dist/esm/internal/nodeEvents.d.ts.map +1 -0
  191. package/dist/esm/internal/nodeEvents.js +60 -0
  192. package/dist/esm/internal/nodeEvents.js.map +1 -0
  193. package/dist/esm/node/NodeGateway.d.ts +16 -0
  194. package/dist/esm/node/NodeGateway.d.ts.map +1 -0
  195. package/dist/esm/node/NodeGateway.js +13 -0
  196. package/dist/esm/node/NodeGateway.js.map +1 -0
  197. package/dist/vendor/adapters.json +2707 -0
  198. package/dist/vendor/bun/BunChildProcessSpawner.d.ts +7 -0
  199. package/dist/vendor/bun/BunChildProcessSpawner.js +14 -0
  200. package/dist/vendor/bun/BunClusterHttp.d.ts +83 -0
  201. package/dist/vendor/bun/BunClusterHttp.js +39 -0
  202. package/dist/vendor/bun/BunClusterSocket.d.ts +65 -0
  203. package/dist/vendor/bun/BunClusterSocket.js +22 -0
  204. package/dist/vendor/bun/BunCrypto.d.ts +10 -0
  205. package/dist/vendor/bun/BunCrypto.js +8 -0
  206. package/dist/vendor/bun/BunFileSystem.d.ts +10 -0
  207. package/dist/vendor/bun/BunFileSystem.js +9 -0
  208. package/dist/vendor/bun/BunHttpClient.d.ts +9 -0
  209. package/dist/vendor/bun/BunHttpClient.js +1 -0
  210. package/dist/vendor/bun/BunHttpPlatform.d.ts +10 -0
  211. package/dist/vendor/bun/BunHttpPlatform.js +11 -0
  212. package/dist/vendor/bun/BunHttpServer.d.ts +142 -0
  213. package/dist/vendor/bun/BunHttpServer.js +38 -0
  214. package/dist/vendor/bun/BunHttpServerRequest.d.ts +18 -0
  215. package/dist/vendor/bun/BunHttpServerRequest.js +7 -0
  216. package/dist/vendor/bun/BunMultipart.d.ts +31 -0
  217. package/dist/vendor/bun/BunMultipart.js +12 -0
  218. package/dist/vendor/bun/BunPath.d.ts +24 -0
  219. package/dist/vendor/bun/BunPath.js +12 -0
  220. package/dist/vendor/bun/BunRedis.d.ts +49 -0
  221. package/dist/vendor/bun/BunRedis.js +11 -0
  222. package/dist/vendor/bun/BunRuntime.d.ts +85 -0
  223. package/dist/vendor/bun/BunRuntime.js +8 -0
  224. package/dist/vendor/bun/BunServices.d.ts +34 -0
  225. package/dist/vendor/bun/BunServices.js +23 -0
  226. package/dist/vendor/bun/BunSink.d.ts +8 -0
  227. package/dist/vendor/bun/BunSink.js +12 -0
  228. package/dist/vendor/bun/BunSocket.d.ts +40 -0
  229. package/dist/vendor/bun/BunSocket.js +29 -0
  230. package/dist/vendor/bun/BunSocketServer.d.ts +8 -0
  231. package/dist/vendor/bun/BunSocketServer.js +21 -0
  232. package/dist/vendor/bun/BunStdio.d.ts +11 -0
  233. package/dist/vendor/bun/BunStdio.js +10 -0
  234. package/dist/vendor/bun/BunStream.d.ts +19 -0
  235. package/dist/vendor/bun/BunStream.js +30 -0
  236. package/dist/vendor/bun/BunTerminal.d.ts +21 -0
  237. package/dist/vendor/bun/BunTerminal.js +10 -0
  238. package/dist/vendor/bun/BunWorker.d.ts +20 -0
  239. package/dist/vendor/bun/BunWorker.js +9 -0
  240. package/dist/vendor/bun/BunWorkerRunner.d.ts +12 -0
  241. package/dist/vendor/bun/BunWorkerRunner.js +7 -0
  242. package/dist/vendor/bun/LICENSE +21 -0
  243. package/dist/vendor/bun/index.d.ts +92 -0
  244. package/dist/vendor/bun/index.js +107 -0
  245. package/dist/vendor/chunk-2GCOZTTW.js +48 -0
  246. package/dist/vendor/chunk-37CUR3PO.js +81 -0
  247. package/dist/vendor/chunk-3ARKKENZ.js +45 -0
  248. package/dist/vendor/chunk-3NV2UDBI.js +7 -0
  249. package/dist/vendor/chunk-3OSW7CT7.js +143 -0
  250. package/dist/vendor/chunk-62R63L74.js +62 -0
  251. package/dist/vendor/chunk-6AQLBC2I.js +118 -0
  252. package/dist/vendor/chunk-6C5H7S6B.js +18 -0
  253. package/dist/vendor/chunk-6DY5RBZD.js +85 -0
  254. package/dist/vendor/chunk-6UPBD47P.js +53 -0
  255. package/dist/vendor/chunk-AVVVN75Z.js +96 -0
  256. package/dist/vendor/chunk-B4DHEMBB.js +14 -0
  257. package/dist/vendor/chunk-BCK3NJOX.js +15 -0
  258. package/dist/vendor/chunk-BFBIHJ6X.js +0 -0
  259. package/dist/vendor/chunk-CES4OUM4.js +63 -0
  260. package/dist/vendor/chunk-D64L6YND.js +59 -0
  261. package/dist/vendor/chunk-DS2R6WOM.js +18 -0
  262. package/dist/vendor/chunk-DX4Z23DM.js +65 -0
  263. package/dist/vendor/chunk-DZ2VOUDP.js +564 -0
  264. package/dist/vendor/chunk-FOXN6JPJ.js +61 -0
  265. package/dist/vendor/chunk-FPQF7CR5.js +55 -0
  266. package/dist/vendor/chunk-FUTCTCEG.js +20 -0
  267. package/dist/vendor/chunk-GUPAV2YZ.js +18 -0
  268. package/dist/vendor/chunk-H2Z2Y4QH.js +70 -0
  269. package/dist/vendor/chunk-HAEDVSSM.js +129 -0
  270. package/dist/vendor/chunk-HY7BBL3K.js +93 -0
  271. package/dist/vendor/chunk-IFTTT6D5.js +31 -0
  272. package/dist/vendor/chunk-KQDSNB7M.js +26 -0
  273. package/dist/vendor/chunk-LIHLXXGQ.js +26 -0
  274. package/dist/vendor/chunk-LKCGQEE5.js +28 -0
  275. package/dist/vendor/chunk-MH2J3BYB.js +0 -0
  276. package/dist/vendor/chunk-ML2NAFH2.js +131 -0
  277. package/dist/vendor/chunk-MLFIZ5O2.js +0 -0
  278. package/dist/vendor/chunk-MLKGABMK.js +9 -0
  279. package/dist/vendor/chunk-MSCLEMYX.js +71 -0
  280. package/dist/vendor/chunk-OBWXQKVP.js +57 -0
  281. package/dist/vendor/chunk-QR557K66.js +20 -0
  282. package/dist/vendor/chunk-R4QUY7DH.js +18 -0
  283. package/dist/vendor/chunk-RGECXXJS.js +18 -0
  284. package/dist/vendor/chunk-TFY7W6D4.js +36 -0
  285. package/dist/vendor/chunk-TGPIVY4A.js +104 -0
  286. package/dist/vendor/chunk-TGXCX6W3.js +398 -0
  287. package/dist/vendor/chunk-TOHSFXMV.js +437 -0
  288. package/dist/vendor/chunk-UHIDPUFF.js +34 -0
  289. package/dist/vendor/chunk-ULT6CWUI.js +109 -0
  290. package/dist/vendor/chunk-UXBGYQR3.js +18 -0
  291. package/dist/vendor/chunk-V6LUGQ7O.js +21 -0
  292. package/dist/vendor/chunk-W4OASVX6.js +92 -0
  293. package/dist/vendor/chunk-WAII54GA.js +18 -0
  294. package/dist/vendor/chunk-WECQDT36.js +426 -0
  295. package/dist/vendor/chunk-WHKMOC7Z.js +28 -0
  296. package/dist/vendor/chunk-WVFOZ2UL.js +40 -0
  297. package/dist/vendor/chunk-X73E2UPI.js +18 -0
  298. package/dist/vendor/chunk-XCYARUII.js +63 -0
  299. package/dist/vendor/chunk-XFEVTDVD.js +34 -0
  300. package/dist/vendor/chunk-XFZZYSJ4.js +22 -0
  301. package/dist/vendor/chunk-XJWJXLXJ.js +18 -0
  302. package/dist/vendor/chunk-XY3Q62EO.js +18 -0
  303. package/dist/vendor/chunk-YDASSC75.js +394 -0
  304. package/dist/vendor/chunk-Z6C7SO5Z.js +507 -0
  305. package/dist/vendor/chunk-Z7QNPJEB.js +229 -0
  306. package/dist/vendor/chunk-Z7QPP4YH.js +249 -0
  307. package/dist/vendor/chunk-ZCHYLHJH.js +86 -0
  308. package/dist/vendor/chunk-ZIQVYVMA.js +22 -0
  309. package/dist/vendor/chunk-ZPIG2CUA.js +34 -0
  310. package/dist/vendor/cjs/bun/BunChildProcessSpawner.d.ts +7 -0
  311. package/dist/vendor/cjs/bun/BunChildProcessSpawner.js +1 -0
  312. package/dist/vendor/cjs/bun/BunClusterHttp.d.ts +83 -0
  313. package/dist/vendor/cjs/bun/BunClusterHttp.js +1 -0
  314. package/dist/vendor/cjs/bun/BunClusterSocket.d.ts +65 -0
  315. package/dist/vendor/cjs/bun/BunClusterSocket.js +1 -0
  316. package/dist/vendor/cjs/bun/BunCrypto.d.ts +10 -0
  317. package/dist/vendor/cjs/bun/BunCrypto.js +1 -0
  318. package/dist/vendor/cjs/bun/BunFileSystem.d.ts +10 -0
  319. package/dist/vendor/cjs/bun/BunFileSystem.js +1 -0
  320. package/dist/vendor/cjs/bun/BunHttpClient.d.ts +9 -0
  321. package/dist/vendor/cjs/bun/BunHttpClient.js +1 -0
  322. package/dist/vendor/cjs/bun/BunHttpPlatform.d.ts +10 -0
  323. package/dist/vendor/cjs/bun/BunHttpPlatform.js +1 -0
  324. package/dist/vendor/cjs/bun/BunHttpServer.d.ts +142 -0
  325. package/dist/vendor/cjs/bun/BunHttpServer.js +1 -0
  326. package/dist/vendor/cjs/bun/BunHttpServerRequest.d.ts +18 -0
  327. package/dist/vendor/cjs/bun/BunHttpServerRequest.js +1 -0
  328. package/dist/vendor/cjs/bun/BunMultipart.d.ts +31 -0
  329. package/dist/vendor/cjs/bun/BunMultipart.js +1 -0
  330. package/dist/vendor/cjs/bun/BunPath.d.ts +24 -0
  331. package/dist/vendor/cjs/bun/BunPath.js +1 -0
  332. package/dist/vendor/cjs/bun/BunRedis.d.ts +49 -0
  333. package/dist/vendor/cjs/bun/BunRedis.js +1 -0
  334. package/dist/vendor/cjs/bun/BunRuntime.d.ts +85 -0
  335. package/dist/vendor/cjs/bun/BunRuntime.js +1 -0
  336. package/dist/vendor/cjs/bun/BunServices.d.ts +34 -0
  337. package/dist/vendor/cjs/bun/BunServices.js +1 -0
  338. package/dist/vendor/cjs/bun/BunSink.d.ts +8 -0
  339. package/dist/vendor/cjs/bun/BunSink.js +1 -0
  340. package/dist/vendor/cjs/bun/BunSocket.d.ts +40 -0
  341. package/dist/vendor/cjs/bun/BunSocket.js +1 -0
  342. package/dist/vendor/cjs/bun/BunSocketServer.d.ts +8 -0
  343. package/dist/vendor/cjs/bun/BunSocketServer.js +1 -0
  344. package/dist/vendor/cjs/bun/BunStdio.d.ts +11 -0
  345. package/dist/vendor/cjs/bun/BunStdio.js +1 -0
  346. package/dist/vendor/cjs/bun/BunStream.d.ts +19 -0
  347. package/dist/vendor/cjs/bun/BunStream.js +1 -0
  348. package/dist/vendor/cjs/bun/BunTerminal.d.ts +21 -0
  349. package/dist/vendor/cjs/bun/BunTerminal.js +1 -0
  350. package/dist/vendor/cjs/bun/BunWorker.d.ts +20 -0
  351. package/dist/vendor/cjs/bun/BunWorker.js +1 -0
  352. package/dist/vendor/cjs/bun/BunWorkerRunner.d.ts +12 -0
  353. package/dist/vendor/cjs/bun/BunWorkerRunner.js +1 -0
  354. package/dist/vendor/cjs/bun/index.d.ts +92 -0
  355. package/dist/vendor/cjs/bun/index.js +1 -0
  356. package/dist/vendor/cjs/node/NodeChildProcessSpawner.d.ts +7 -0
  357. package/dist/vendor/cjs/node/NodeChildProcessSpawner.js +1 -0
  358. package/dist/vendor/cjs/node/NodeClusterHttp.d.ts +63 -0
  359. package/dist/vendor/cjs/node/NodeClusterHttp.js +1 -0
  360. package/dist/vendor/cjs/node/NodeClusterSocket.d.ts +79 -0
  361. package/dist/vendor/cjs/node/NodeClusterSocket.js +1 -0
  362. package/dist/vendor/cjs/node/NodeCrypto.d.ts +10 -0
  363. package/dist/vendor/cjs/node/NodeCrypto.js +1 -0
  364. package/dist/vendor/cjs/node/NodeFileSystem.d.ts +10 -0
  365. package/dist/vendor/cjs/node/NodeFileSystem.js +1 -0
  366. package/dist/vendor/cjs/node/NodeHttpClient.d.ts +179 -0
  367. package/dist/vendor/cjs/node/NodeHttpClient.js +1 -0
  368. package/dist/vendor/cjs/node/NodeHttpIncomingMessage.d.ts +62 -0
  369. package/dist/vendor/cjs/node/NodeHttpIncomingMessage.js +1 -0
  370. package/dist/vendor/cjs/node/NodeHttpPlatform.d.ts +36 -0
  371. package/dist/vendor/cjs/node/NodeHttpPlatform.js +1 -0
  372. package/dist/vendor/cjs/node/NodeHttpServer.d.ts +120 -0
  373. package/dist/vendor/cjs/node/NodeHttpServer.js +1 -0
  374. package/dist/vendor/cjs/node/NodeHttpServerRequest.d.ts +29 -0
  375. package/dist/vendor/cjs/node/NodeHttpServerRequest.js +1 -0
  376. package/dist/vendor/cjs/node/NodeMultipart.d.ts +46 -0
  377. package/dist/vendor/cjs/node/NodeMultipart.js +1 -0
  378. package/dist/vendor/cjs/node/NodeMultipartParser.d.ts +97 -0
  379. package/dist/vendor/cjs/node/NodeMultipartParser.js +1 -0
  380. package/dist/vendor/cjs/node/NodePath.d.ts +27 -0
  381. package/dist/vendor/cjs/node/NodePath.js +1 -0
  382. package/dist/vendor/cjs/node/NodeRedis.d.ts +74 -0
  383. package/dist/vendor/cjs/node/NodeRedis.js +1 -0
  384. package/dist/vendor/cjs/node/NodeRuntime.d.ts +85 -0
  385. package/dist/vendor/cjs/node/NodeRuntime.js +1 -0
  386. package/dist/vendor/cjs/node/NodeServices.d.ts +34 -0
  387. package/dist/vendor/cjs/node/NodeServices.js +1 -0
  388. package/dist/vendor/cjs/node/NodeSink.d.ts +8 -0
  389. package/dist/vendor/cjs/node/NodeSink.js +1 -0
  390. package/dist/vendor/cjs/node/NodeSocket.d.ts +38 -0
  391. package/dist/vendor/cjs/node/NodeSocket.js +1 -0
  392. package/dist/vendor/cjs/node/NodeSocketServer.d.ts +8 -0
  393. package/dist/vendor/cjs/node/NodeSocketServer.js +1 -0
  394. package/dist/vendor/cjs/node/NodeStdio.d.ts +11 -0
  395. package/dist/vendor/cjs/node/NodeStdio.js +1 -0
  396. package/dist/vendor/cjs/node/NodeStream.d.ts +8 -0
  397. package/dist/vendor/cjs/node/NodeStream.js +1 -0
  398. package/dist/vendor/cjs/node/NodeTerminal.d.ts +21 -0
  399. package/dist/vendor/cjs/node/NodeTerminal.js +1 -0
  400. package/dist/vendor/cjs/node/NodeWorker.d.ts +22 -0
  401. package/dist/vendor/cjs/node/NodeWorker.js +1 -0
  402. package/dist/vendor/cjs/node/NodeWorkerRunner.d.ts +12 -0
  403. package/dist/vendor/cjs/node/NodeWorkerRunner.js +1 -0
  404. package/dist/vendor/cjs/node/Undici.d.ts +28 -0
  405. package/dist/vendor/cjs/node/Undici.js +1 -0
  406. package/dist/vendor/cjs/node/index.d.ts +100 -0
  407. package/dist/vendor/cjs/node/index.js +1 -0
  408. package/dist/vendor/cjs/node-shared/NodeChildProcessSpawner.d.ts +57 -0
  409. package/dist/vendor/cjs/node-shared/NodeChildProcessSpawner.js +1 -0
  410. package/dist/vendor/cjs/node-shared/NodeClusterSocket.d.ts +22 -0
  411. package/dist/vendor/cjs/node-shared/NodeClusterSocket.js +1 -0
  412. package/dist/vendor/cjs/node-shared/NodeCrypto.d.ts +27 -0
  413. package/dist/vendor/cjs/node-shared/NodeCrypto.js +1 -0
  414. package/dist/vendor/cjs/node-shared/NodeFileSystem.d.ts +11 -0
  415. package/dist/vendor/cjs/node-shared/NodeFileSystem.js +1 -0
  416. package/dist/vendor/cjs/node-shared/NodeHttpCompression.d.ts +36 -0
  417. package/dist/vendor/cjs/node-shared/NodeHttpCompression.js +1 -0
  418. package/dist/vendor/cjs/node-shared/NodePath.d.ts +27 -0
  419. package/dist/vendor/cjs/node-shared/NodePath.js +1 -0
  420. package/dist/vendor/cjs/node-shared/NodeRuntime.d.ts +47 -0
  421. package/dist/vendor/cjs/node-shared/NodeRuntime.js +1 -0
  422. package/dist/vendor/cjs/node-shared/NodeSink.d.ts +69 -0
  423. package/dist/vendor/cjs/node-shared/NodeSink.js +1 -0
  424. package/dist/vendor/cjs/node-shared/NodeSocket.d.ts +134 -0
  425. package/dist/vendor/cjs/node-shared/NodeSocket.js +1 -0
  426. package/dist/vendor/cjs/node-shared/NodeSocketServer.d.ts +80 -0
  427. package/dist/vendor/cjs/node-shared/NodeSocketServer.js +1 -0
  428. package/dist/vendor/cjs/node-shared/NodeStdio.d.ts +12 -0
  429. package/dist/vendor/cjs/node-shared/NodeStdio.js +1 -0
  430. package/dist/vendor/cjs/node-shared/NodeStream.d.ts +179 -0
  431. package/dist/vendor/cjs/node-shared/NodeStream.js +1 -0
  432. package/dist/vendor/cjs/node-shared/NodeTerminal.d.ts +22 -0
  433. package/dist/vendor/cjs/node-shared/NodeTerminal.js +1 -0
  434. package/dist/vendor/cjs/node-shared/index.d.ts +56 -0
  435. package/dist/vendor/cjs/node-shared/index.js +1 -0
  436. package/dist/vendor/cjs/node-shared/internal/nodeChildProcessSpawner.d.ts +4 -0
  437. package/dist/vendor/cjs/node-shared/internal/nodeChildProcessSpawner.js +1 -0
  438. package/dist/vendor/cjs/node-shared/internal/utils.d.ts +2 -0
  439. package/dist/vendor/cjs/node-shared/internal/utils.js +1 -0
  440. package/dist/vendor/cjs/package.json +1 -0
  441. package/dist/vendor/cjs/platform-bun.d.ts +92 -0
  442. package/dist/vendor/cjs/platform-bun.js +1 -0
  443. package/dist/vendor/cjs/platform-node-shared.d.ts +56 -0
  444. package/dist/vendor/cjs/platform-node-shared.js +1 -0
  445. package/dist/vendor/cjs/platform-node.d.ts +100 -0
  446. package/dist/vendor/cjs/platform-node.js +1 -0
  447. package/dist/vendor/node/LICENSE +21 -0
  448. package/dist/vendor/node/NodeChildProcessSpawner.d.ts +7 -0
  449. package/dist/vendor/node/NodeChildProcessSpawner.js +14 -0
  450. package/dist/vendor/node/NodeClusterHttp.d.ts +63 -0
  451. package/dist/vendor/node/NodeClusterHttp.js +43 -0
  452. package/dist/vendor/node/NodeClusterSocket.d.ts +79 -0
  453. package/dist/vendor/node/NodeClusterSocket.js +30 -0
  454. package/dist/vendor/node/NodeCrypto.d.ts +10 -0
  455. package/dist/vendor/node/NodeCrypto.js +8 -0
  456. package/dist/vendor/node/NodeFileSystem.d.ts +10 -0
  457. package/dist/vendor/node/NodeFileSystem.js +9 -0
  458. package/dist/vendor/node/NodeHttpClient.d.ts +179 -0
  459. package/dist/vendor/node/NodeHttpClient.js +46 -0
  460. package/dist/vendor/node/NodeHttpIncomingMessage.d.ts +62 -0
  461. package/dist/vendor/node/NodeHttpIncomingMessage.js +10 -0
  462. package/dist/vendor/node/NodeHttpPlatform.d.ts +36 -0
  463. package/dist/vendor/node/NodeHttpPlatform.js +16 -0
  464. package/dist/vendor/node/NodeHttpServer.d.ts +120 -0
  465. package/dist/vendor/node/NodeHttpServer.js +46 -0
  466. package/dist/vendor/node/NodeHttpServerRequest.d.ts +29 -0
  467. package/dist/vendor/node/NodeHttpServerRequest.js +9 -0
  468. package/dist/vendor/node/NodeMultipart.d.ts +46 -0
  469. package/dist/vendor/node/NodeMultipart.js +15 -0
  470. package/dist/vendor/node/NodeMultipartParser.d.ts +97 -0
  471. package/dist/vendor/node/NodeMultipartParser.js +11 -0
  472. package/dist/vendor/node/NodePath.d.ts +27 -0
  473. package/dist/vendor/node/NodePath.js +12 -0
  474. package/dist/vendor/node/NodeRedis.d.ts +74 -0
  475. package/dist/vendor/node/NodeRedis.js +11 -0
  476. package/dist/vendor/node/NodeRuntime.d.ts +85 -0
  477. package/dist/vendor/node/NodeRuntime.js +8 -0
  478. package/dist/vendor/node/NodeServices.d.ts +34 -0
  479. package/dist/vendor/node/NodeServices.js +23 -0
  480. package/dist/vendor/node/NodeSink.d.ts +8 -0
  481. package/dist/vendor/node/NodeSink.js +12 -0
  482. package/dist/vendor/node/NodeSocket.d.ts +38 -0
  483. package/dist/vendor/node/NodeSocket.js +31 -0
  484. package/dist/vendor/node/NodeSocketServer.d.ts +8 -0
  485. package/dist/vendor/node/NodeSocketServer.js +21 -0
  486. package/dist/vendor/node/NodeStdio.d.ts +11 -0
  487. package/dist/vendor/node/NodeStdio.js +10 -0
  488. package/dist/vendor/node/NodeStream.d.ts +8 -0
  489. package/dist/vendor/node/NodeStream.js +27 -0
  490. package/dist/vendor/node/NodeTerminal.d.ts +21 -0
  491. package/dist/vendor/node/NodeTerminal.js +10 -0
  492. package/dist/vendor/node/NodeWorker.d.ts +22 -0
  493. package/dist/vendor/node/NodeWorker.js +9 -0
  494. package/dist/vendor/node/NodeWorkerRunner.d.ts +12 -0
  495. package/dist/vendor/node/NodeWorkerRunner.js +7 -0
  496. package/dist/vendor/node/Undici.d.ts +28 -0
  497. package/dist/vendor/node/Undici.js +9 -0
  498. package/dist/vendor/node/index.d.ts +100 -0
  499. package/dist/vendor/node/index.js +115 -0
  500. package/dist/vendor/node-shared/LICENSE +21 -0
  501. package/dist/vendor/node-shared/NodeChildProcessSpawner.d.ts +57 -0
  502. package/dist/vendor/node-shared/NodeChildProcessSpawner.js +13 -0
  503. package/dist/vendor/node-shared/NodeClusterSocket.d.ts +22 -0
  504. package/dist/vendor/node-shared/NodeClusterSocket.js +11 -0
  505. package/dist/vendor/node-shared/NodeCrypto.d.ts +27 -0
  506. package/dist/vendor/node-shared/NodeCrypto.js +9 -0
  507. package/dist/vendor/node-shared/NodeFileSystem.d.ts +11 -0
  508. package/dist/vendor/node-shared/NodeFileSystem.js +8 -0
  509. package/dist/vendor/node-shared/NodeHttpCompression.d.ts +36 -0
  510. package/dist/vendor/node-shared/NodeHttpCompression.js +13 -0
  511. package/dist/vendor/node-shared/NodePath.d.ts +27 -0
  512. package/dist/vendor/node-shared/NodePath.js +11 -0
  513. package/dist/vendor/node-shared/NodeRuntime.d.ts +47 -0
  514. package/dist/vendor/node-shared/NodeRuntime.js +7 -0
  515. package/dist/vendor/node-shared/NodeSink.d.ts +69 -0
  516. package/dist/vendor/node-shared/NodeSink.js +11 -0
  517. package/dist/vendor/node-shared/NodeSocket.d.ts +134 -0
  518. package/dist/vendor/node-shared/NodeSocket.js +23 -0
  519. package/dist/vendor/node-shared/NodeSocketServer.d.ts +80 -0
  520. package/dist/vendor/node-shared/NodeSocketServer.js +20 -0
  521. package/dist/vendor/node-shared/NodeStdio.d.ts +12 -0
  522. package/dist/vendor/node-shared/NodeStdio.js +9 -0
  523. package/dist/vendor/node-shared/NodeStream.d.ts +179 -0
  524. package/dist/vendor/node-shared/NodeStream.js +26 -0
  525. package/dist/vendor/node-shared/NodeTerminal.d.ts +22 -0
  526. package/dist/vendor/node-shared/NodeTerminal.js +9 -0
  527. package/dist/vendor/node-shared/index.d.ts +56 -0
  528. package/dist/vendor/node-shared/index.js +58 -0
  529. package/dist/vendor/node-shared/internal/nodeChildProcessSpawner.d.ts +4 -0
  530. package/dist/vendor/node-shared/internal/nodeChildProcessSpawner.js +7 -0
  531. package/dist/vendor/node-shared/internal/utils.d.ts +2 -0
  532. package/dist/vendor/node-shared/internal/utils.js +7 -0
  533. package/dist/vendor/platform-bun.d.ts +92 -0
  534. package/dist/vendor/platform-bun.js +107 -0
  535. package/dist/vendor/platform-node-shared.d.ts +56 -0
  536. package/dist/vendor/platform-node-shared.js +58 -0
  537. package/dist/vendor/platform-node.d.ts +100 -0
  538. package/dist/vendor/platform-node.js +115 -0
  539. package/docs/README.md +158 -0
  540. package/docs/api.md +601 -0
  541. package/docs/concepts/projections.md +250 -0
  542. package/docs/concepts/subscriptions.md +204 -0
  543. package/docs/concepts/trust-boundary.md +256 -0
  544. package/docs/guides/diagnose-a-run.md +115 -0
  545. package/docs/guides/follow-a-run.md +150 -0
  546. package/docs/guides/host-the-gateway.md +153 -0
  547. package/docs/guides/read-a-projection.md +138 -0
  548. package/docs/guides/serve-beyond-loopback.md +166 -0
  549. package/docs/guides/submit-an-approval.md +187 -0
  550. package/docs/guides/testing.md +148 -0
  551. package/docs/installation.md +89 -0
  552. package/docs/quickstart.md +200 -0
  553. package/docs/troubleshooting.md +355 -0
  554. package/package.json +264 -32
  555. package/src/Diagnosis.ts +892 -0
  556. package/src/EngineTrace.ts +605 -0
  557. package/src/GatewayError.ts +71 -0
  558. package/src/GatewayProjection.ts +948 -0
  559. package/src/GatewayRpcs.ts +179 -0
  560. package/src/GatewaySchema.ts +516 -0
  561. package/src/GatewayServer.ts +932 -0
  562. package/src/HostBranchPresence.ts +72 -0
  563. package/src/Projections.ts +1735 -0
  564. package/src/RunDevTools.ts +394 -0
  565. package/src/RunHistory.ts +174 -0
  566. package/src/RunTrace.ts +2793 -0
  567. package/src/RuntimeBridge.ts +835 -0
  568. package/src/bun/BunGateway.ts +52 -0
  569. package/src/index.ts +77 -0
  570. package/src/internal/NativeGateway.ts +360 -0
  571. package/src/internal/actionRenderings.ts +201 -0
  572. package/src/internal/callEvents.ts +257 -0
  573. package/src/internal/digestIndex.ts +134 -0
  574. package/src/internal/digestMemory.ts +27 -0
  575. package/src/internal/inspectLabels.ts +13 -0
  576. package/src/internal/nativeResolution.ts +103 -0
  577. package/src/internal/nodeEvents.ts +100 -0
  578. package/src/node/NodeGateway.ts +30 -0
  579. package/openapi.yaml +0 -29182
  580. package/src/README.md +0 -39
  581. package/src/api/README.md +0 -23
  582. package/src/api/apiCollectionNames.js +0 -10
  583. package/src/api/index.d.ts +0 -126
  584. package/src/api/index.js +0 -14
  585. package/src/api/normalizeApiRow.js +0 -36
  586. package/src/api/serializeAccountRow.js +0 -10
  587. package/src/api/serializeApprovalRow.js +0 -53
  588. package/src/api/serializeComparisonScoreRow.js +0 -18
  589. package/src/api/serializeCronRow.js +0 -30
  590. package/src/api/serializeDocRow.js +0 -20
  591. package/src/api/serializeMemoryFactRow.js +0 -21
  592. package/src/api/serializePromptRow.js +0 -10
  593. package/src/api/serializeRunEventRow.js +0 -28
  594. package/src/api/serializeRunRow.js +0 -61
  595. package/src/api/serializeScoreDetailRow.js +0 -25
  596. package/src/api/serializeScoreRow.js +0 -26
  597. package/src/api/serializeTicketRow.js +0 -20
  598. package/src/api/serializeWorkflowRow.js +0 -10
  599. package/src/auth/scopes.d.ts +0 -19
  600. package/src/auth/scopes.js +0 -164
  601. package/src/index.d.ts +0 -316
  602. package/src/index.js +0 -108
  603. package/src/rpc/gatewayRpcTypes.ts +0 -183
  604. package/src/rpc/index.d.ts +0 -221
  605. package/src/rpc/index.js +0 -2431
@@ -0,0 +1,605 @@
1
+ /**
2
+ * Recorded native evidence, decoded through the contracts that wrote it.
3
+ *
4
+ * @since 1.0.0
5
+ */
6
+
7
+ import { RunState } from "@smthrs/engine-store/RunState"
8
+ import { ResultEncoded } from "@smthrs/flow/Flow"
9
+ import * as EngineEvent from "@smthrs/journal/EngineEvent"
10
+ import * as JournalEvent from "@smthrs/journal/JournalEvent"
11
+ import { Option, Schema } from "effect"
12
+ import { inspectLabel } from "./internal/inspectLabels.ts"
13
+ import type { JournalRecord, SpanDetail, TraceBuilder } from "./RunTrace.ts"
14
+
15
+ // This is the private control bridge's envelope, not another engine contract.
16
+ const Envelope = Schema.Struct({
17
+ version: Schema.Literal(1),
18
+ executionId: JournalEvent.RunId,
19
+ generation: JournalEvent.NonNegativeQuantity,
20
+ sequence: JournalEvent.Seq,
21
+ eventId: Schema.String,
22
+ sourceId: JournalEvent.SourceId,
23
+ sourceSequence: JournalEvent.SourceSeq,
24
+ emittedAtMs: JournalEvent.TimestampMs,
25
+ eventType: Schema.NonEmptyString,
26
+ payload: Schema.Json,
27
+ meta: Schema.Json
28
+ })
29
+ type Envelope = typeof Envelope.Type
30
+
31
+ const decodeEnvelope = Schema.decodeUnknownOption(Envelope)
32
+ const decodeGraph = Schema.decodeUnknownOption(EngineEvent.NodeGraph)
33
+ const decodeScheduled = Schema.decodeUnknownOption(EngineEvent.NodeScheduledPayload)
34
+ const decodeSettled = Schema.decodeUnknownOption(EngineEvent.NodeSettledPayload)
35
+ const decodeAttempt = Schema.decodeUnknownOption(EngineEvent.AttemptPayload, { onExcessProperty: "error" })
36
+ const decodeState = Schema.decodeUnknownOption(EngineEvent.StatePayload, { onExcessProperty: "error" })
37
+ const decodeMarker = Schema.decodeUnknownOption(EngineEvent.CurrentAttempt)
38
+ const stateDecisions = [
39
+ "created",
40
+ "resumed",
41
+ "transitioned",
42
+ "handed-off",
43
+ "lineage-exhausted",
44
+ "round-invalid",
45
+ "quarantined",
46
+ "interrupt-released"
47
+ ] as const
48
+ const decodeDecision = Schema.decodeUnknownOption(Schema.Struct({
49
+ decision: Schema.Literals(stateDecisions),
50
+ status: Schema.optionalKey(Schema.Literals(["pending", "running", "suspended", "completed", "failed", "cancelled"])),
51
+ state: RunState
52
+ }))
53
+ // RunDriver's durable cancellation record has no run-decision counterpart.
54
+ const decodeCancellation = Schema.decodeUnknownOption(Schema.Struct({
55
+ outcome: Schema.Literal("cancelled"),
56
+ interruptedAtMs: JournalEvent.TimestampMs,
57
+ owner: Schema.String,
58
+ cascadedTo: Schema.optionalKey(Schema.Array(JournalEvent.RunId))
59
+ }))
60
+ const decodeResult = Schema.decodeUnknownOption(ResultEncoded, { onExcessProperty: "error" })
61
+
62
+ const json = (value: unknown): string => typeof value === "string" ? value : JSON.stringify(value)
63
+ const identity = (...parts: ReadonlyArray<string | number>) =>
64
+ parts.map((part) => encodeURIComponent(String(part))).join(":")
65
+ const span = (id: string, kind: TraceBuilder["kind"], label: string, at: number, detail: SpanDetail): TraceBuilder => ({
66
+ id,
67
+ kind,
68
+ label,
69
+ status: "recorded",
70
+ startedAt: at,
71
+ children: [],
72
+ detail
73
+ })
74
+ const detail = (row: JournalRecord, envelope: Envelope): SpanDetail => ({
75
+ sequence: row.sequence,
76
+ event: envelope.eventType,
77
+ fields: { ...envelope }
78
+ })
79
+ interface Execution {
80
+ readonly envelope: Envelope
81
+ readonly span: TraceBuilder
82
+ parentId?: string | undefined
83
+ parentExecutionId?: string | undefined
84
+ parentKnown?: boolean | undefined
85
+ flowName?: string | undefined
86
+ coherent: boolean
87
+ waits?: Map<string, { id: string; kind: "sleep" | "signal"; since: number; settledAt?: number }>
88
+ graph?: EngineEvent.NodeGraph | undefined
89
+ result?: { readonly value: unknown; readonly sequence: number } | undefined
90
+ failure?: EngineExecutionEvidence["failure"] | undefined
91
+ }
92
+
93
+ /**
94
+ * A render-only view of the same decoded execution facts; never persisted.
95
+ *
96
+ * @category models
97
+ * @since 1.0.0
98
+ */
99
+ export interface EngineExecutionEvidence {
100
+ readonly executionId: string
101
+ readonly generation: number
102
+ readonly spanId: string
103
+ readonly parentExecutionId?: string | undefined
104
+ readonly parentKnown: boolean
105
+ readonly flowName?: string | undefined
106
+ readonly input?: unknown | undefined
107
+ readonly coherent: boolean
108
+ /** Declared nodes, including work not reached at this journal cursor. */
109
+ readonly graph?: EngineEvent.NodeGraph | undefined
110
+ readonly status: string
111
+ /** Recorded clock and deferred registrations and their explicit settlements. */
112
+ readonly waits: ReadonlyArray<{ readonly id: string; readonly kind: "sleep" | "signal"; readonly since: number; readonly settledAt?: number }>
113
+ readonly result?: { readonly value: unknown; readonly sequence: number } | undefined
114
+ /** Original classified failure bytes, never parsed from rendered detail. */
115
+ readonly failure?: {
116
+ readonly kind: "cause" | "error" | "defect" | "interrupted" | "encoding"
117
+ readonly value: unknown
118
+ readonly sequence: number
119
+ } | undefined
120
+ }
121
+ const decodeProjection = Schema.decodeUnknownOption(Schema.Struct({
122
+ version: Schema.Literal(1),
123
+ executionId: JournalEvent.RunId,
124
+ generation: JournalEvent.NonNegativeQuantity
125
+ }))
126
+
127
+ /**
128
+ * Observation completion is separate from the control run's terminal verdict.
129
+ *
130
+ * @category utilities
131
+ * @since 1.0.0
132
+ */
133
+ export const engineProjectionPending = (records: ReadonlyArray<JournalRecord> = []): boolean => {
134
+ const states = new Map<string, { generation: number; pending: boolean }>()
135
+ for (const row of [...records].sort((left, right) => (left.sequence ?? 0) - (right.sequence ?? 0))) {
136
+ if (row.kind === "control.engine.projection-gap") {
137
+ // The gap is rendered as missing evidence. Stop polling rather than
138
+ // disguising an observation failure as an indefinitely running task.
139
+ for (const state of states.values()) state.pending = false
140
+ continue
141
+ }
142
+ if (row.kind !== "control.engine.projection-started" && row.kind !== "control.engine.projection-settled") continue
143
+ const decoded = decodeProjection(row.payload)
144
+ if (Option.isNone(decoded)) continue
145
+ const { executionId, generation } = decoded.value
146
+ const current = states.get(executionId)
147
+ if (row.kind === "control.engine.projection-started") {
148
+ if (current === undefined || generation > current.generation) {
149
+ states.set(executionId, { generation, pending: true })
150
+ }
151
+ } else if (current?.generation === generation) current.pending = false
152
+ }
153
+ return [...states.values()].some((state) => state.pending)
154
+ }
155
+
156
+ /**
157
+ * Generations never share attempt identity. Native timestamps describe native
158
+ * work; the outer control sequence still determines the historical UI cursor.
159
+ * Only recorded parent IDs can nest executions. Ambiguous parent generations
160
+ * remain beside the root instead of guessing which historical parent owned them.
161
+ */
162
+ const foldEngineJournal = (records: ReadonlyArray<JournalRecord>) => {
163
+ const executions = new Map<string, Execution>()
164
+ const attempts = new Map<string, TraceBuilder>()
165
+ const notices: Array<TraceBuilder> = []
166
+ const nodes = new Map<string, TraceBuilder>()
167
+ const instances = new Map<string, number>()
168
+ const seen = new Map<string, string>()
169
+ for (const row of records) {
170
+ if (row.kind === "control.engine.projection-gap") {
171
+ const notice = span(
172
+ `engine-gap:${row.sequence ?? notices.length}`,
173
+ "event",
174
+ "Engine evidence gap",
175
+ row.occurredAt ?? 0,
176
+ {
177
+ sequence: row.sequence,
178
+ event: row.kind,
179
+ fields: { evidence: row.payload }
180
+ }
181
+ )
182
+ notice.status = "unknown"
183
+ notice.endedAt = notice.startedAt
184
+ notices.push(notice)
185
+ continue
186
+ }
187
+ if (row.kind !== "control.engine.event") continue
188
+ const decoded = decodeEnvelope(row.payload)
189
+ if (Option.isNone(decoded)) {
190
+ const notice = span(
191
+ `engine-invalid:${row.sequence ?? notices.length}`,
192
+ "event",
193
+ "Unreadable engine evidence",
194
+ row.occurredAt ?? 0,
195
+ {
196
+ sequence: row.sequence,
197
+ event: row.kind,
198
+ fields: { evidence: row.payload }
199
+ }
200
+ )
201
+ notice.status = "unknown"
202
+ notice.endedAt = notice.startedAt
203
+ notices.push(notice)
204
+ continue
205
+ }
206
+ const envelope = decoded.value
207
+ const key = identity(envelope.executionId, envelope.generation)
208
+ const eventKey = identity(key, envelope.sequence)
209
+ const previous = seen.get(eventKey)
210
+ if (previous !== undefined) {
211
+ if (previous !== JSON.stringify(envelope)) {
212
+ const conflict = executions.get(key)
213
+ conflict!.coherent = false
214
+ }
215
+ continue
216
+ }
217
+ seen.set(eventKey, JSON.stringify(envelope))
218
+ let execution = executions.get(key)
219
+ if (execution === undefined) {
220
+ execution = {
221
+ envelope,
222
+ coherent: true,
223
+ span: span(`engine:${key}`, "execution", envelope.executionId, envelope.emittedAtMs, detail(row, envelope))
224
+ }
225
+ executions.set(key, execution)
226
+ }
227
+ const parent = (parentId: string | undefined) => {
228
+ if (execution.parentKnown && execution.parentExecutionId !== parentId) execution.coherent = false
229
+ execution.parentKnown = true
230
+ execution.parentExecutionId = parentId
231
+ execution.parentId = parentId
232
+ }
233
+ const result = (value: unknown) => {
234
+ if (Number.isSafeInteger(row.sequence) && row.sequence! >= 0) {
235
+ execution.result = { value, sequence: row.sequence! }
236
+ }
237
+ }
238
+ const failure = (kind: NonNullable<EngineExecutionEvidence["failure"]>["kind"], value: unknown) => {
239
+ if (Number.isSafeInteger(row.sequence) && row.sequence! >= 0) {
240
+ execution.failure = { kind, value, sequence: row.sequence! }
241
+ }
242
+ }
243
+ const generic = () => {
244
+ const event = span(
245
+ `engine-event:${eventKey}`,
246
+ "event",
247
+ envelope.eventType,
248
+ envelope.emittedAtMs,
249
+ detail(row, envelope)
250
+ )
251
+ event.endedAt = event.startedAt
252
+ execution.span.children.push(event)
253
+ }
254
+ const attempt = (step: string, number: number) => {
255
+ const attemptKey = identity(key, step, number)
256
+ let current = attempts.get(attemptKey)
257
+ if (current === undefined) {
258
+ current = span(
259
+ `engine-attempt:${attemptKey}`,
260
+ "attempt",
261
+ `attempt ${number} · ${step.slice(0, 12)}`,
262
+ envelope.emittedAtMs,
263
+ detail(row, envelope)
264
+ )
265
+ attempts.set(attemptKey, current)
266
+ execution.span.children.push(current)
267
+ }
268
+ return current
269
+ }
270
+ if (envelope.eventType === EngineEvent.nodeEventTypes.planRecorded || envelope.eventType === EngineEvent.nodeEventTypes.subgraphAppended) {
271
+ const payload = envelope.payload as { graph?: unknown }
272
+ const graph = decodeGraph(payload?.graph)
273
+ if (Option.isSome(graph)) {
274
+ const nodes = new Map(execution.graph?.nodes.map(node => [node.id, node]))
275
+ for (const node of graph.value.nodes) nodes.set(node.id, node)
276
+ execution.graph = { ...graph.value, nodes: [...nodes.values()] }
277
+ }
278
+ generic()
279
+ continue
280
+ }
281
+ if (envelope.eventType === EngineEvent.nodeEventTypes.nodeScheduled || envelope.eventType === EngineEvent.nodeEventTypes.nodeSettled) {
282
+ const scheduled = envelope.eventType === EngineEvent.nodeEventTypes.nodeScheduled
283
+ ? decodeScheduled(envelope.payload) : Option.none()
284
+ const settled = envelope.eventType === EngineEvent.nodeEventTypes.nodeSettled
285
+ ? decodeSettled(envelope.payload) : Option.none()
286
+ const recorded = Option.isSome(scheduled) ? scheduled.value : Option.isSome(settled) ? settled.value : undefined
287
+ if (recorded === undefined) {
288
+ generic()
289
+ continue
290
+ }
291
+ const nodeKey = identity(key, recorded.nodeId)
292
+ const action = recorded.action ?? execution.graph?.nodes.find(node => node.id === recorded.nodeId)?.action
293
+ let node = nodes.get(nodeKey)
294
+ if (node === undefined || Option.isSome(scheduled)) {
295
+ const instance = (instances.get(nodeKey) ?? 0) + 1
296
+ instances.set(nodeKey, instance)
297
+ node = span(`engine-node:${nodeKey}#${instance}`, "call", inspectLabel(action ?? recorded.nodeId), envelope.emittedAtMs, detail(row, envelope))
298
+ nodes.set(nodeKey, node)
299
+ execution.span.children.push(node)
300
+ }
301
+ if (action !== undefined) node.label = inspectLabel(action)
302
+ node.detail = { ...detail(row, envelope), sequence: node.detail.sequence }
303
+ if (Option.isSome(scheduled)) {
304
+ node.status = "running"
305
+ } else {
306
+ const value = Option.getOrThrow(settled)
307
+ node.status = value.outcome === "failed" ? "failed"
308
+ : value.outcome === "deferred" ? "waiting"
309
+ : value.outcome === "skipped" ? "skipped" : "completed"
310
+ if (value.outcome !== "deferred") node.endedAt = envelope.emittedAtMs
311
+ // The redacted preview is evidence, including when truncated. Never
312
+ // evaluate it, or mistake a JSON prefix for a complete return value.
313
+ if (value.result !== undefined) node.detail = { ...node.detail, output: value.result.preview }
314
+ }
315
+ continue
316
+ }
317
+ if (
318
+ envelope.eventType === "flows.engine.attempt-started" || envelope.eventType === "flows.engine.attempt-finished"
319
+ ) {
320
+ const marker = decodeMarker({ eventType: envelope.eventType, payload: envelope.payload })
321
+ if (Option.isNone(marker) || marker.value.payload.runId !== envelope.executionId) {
322
+ generic()
323
+ continue
324
+ }
325
+ const current = attempt(marker.value.payload.stepKeyDigest, marker.value.payload.attempt)
326
+ if (marker.value.eventType === "flows.engine.attempt-started") current.status = "running"
327
+ else {
328
+ current.status = marker.value.payload.state === "succeeded" ? "completed" : "failed"
329
+ current.endedAt = envelope.emittedAtMs
330
+ }
331
+ current.detail = { ...current.detail, fields: { ...envelope } }
332
+ continue
333
+ }
334
+ if (envelope.eventType === EngineEvent.attemptEventType) {
335
+ const recorded = decodeAttempt(envelope.payload)
336
+ if (Option.isNone(recorded) || recorded.value.executionId !== envelope.executionId) {
337
+ execution.coherent = false
338
+ generic()
339
+ continue
340
+ }
341
+ const { lifecycle, lineage, stepKeyDigest, attempt: number } = recorded.value
342
+ // Lineage may describe a trampoline predecessor, not a spawned parent.
343
+ // Product ancestry comes only from RunState.parentExecutionId below.
344
+ execution.parentId = lineage.parentRunId ?? undefined
345
+ const current = attempt(stepKeyDigest, number)
346
+ current.startedAt = lifecycle.startedAtMs
347
+ current.status = lifecycle.state === "succeeded"
348
+ ? "completed"
349
+ : lifecycle.state === "suspended"
350
+ ? "waiting"
351
+ : lifecycle.state
352
+ current.detail = { ...detail(row, envelope), sequence: current.detail.sequence }
353
+ if (lifecycle.state === "succeeded" || lifecycle.state === "failed") {
354
+ current.endedAt = lifecycle.finishedAtMs
355
+ current.detail = {
356
+ ...current.detail,
357
+ ...(lifecycle.result._tag === "Success"
358
+ ? { output: json(lifecycle.result.value) }
359
+ : { message: json(lifecycle.result.detail) })
360
+ }
361
+ }
362
+ continue
363
+ }
364
+ if (envelope.eventType === EngineEvent.stateEventType) {
365
+ const recorded = decodeState(envelope.payload)
366
+ if (Option.isNone(recorded) || recorded.value.executionId !== envelope.executionId) {
367
+ execution.coherent = false
368
+ generic()
369
+ continue
370
+ }
371
+ execution.parentId = recorded.value.lineage.parentRunId ?? undefined
372
+ const registerWait = (waitId: string, kind: "sleep" | "signal") => {
373
+ const waits = execution.waits ??= new Map()
374
+ const id = identity(key, waitId)
375
+ const existing = waits.get(id)
376
+ if (existing === undefined) waits.set(id, { id: `engine-wait:${id}`, kind, since: envelope.emittedAtMs })
377
+ // A later clock record refines a generic deferred identity without
378
+ // restarting the wait or dropping its recorded settlement.
379
+ else if (kind === "sleep") existing.kind = kind
380
+ }
381
+ if (recorded.value.event._tag === "Execution" && recorded.value.event.lifecycle.state !== "completed") {
382
+ for (const wait of recorded.value.event.lifecycle.waits) registerWait(wait.waitId, wait._tag === "Clock" ? "sleep" : "signal")
383
+ }
384
+ if (recorded.value.event._tag === "ClockScheduled") {
385
+ registerWait(recorded.value.event.waitId, "sleep")
386
+ } else if (recorded.value.event._tag === "DeferredCompleted") {
387
+ const wait = execution.waits?.get(identity(key, recorded.value.event.waitId))
388
+ if (wait !== undefined && wait.settledAt === undefined) wait.settledAt = envelope.emittedAtMs
389
+ }
390
+ if (recorded.value.event._tag !== "Execution") {
391
+ generic()
392
+ continue
393
+ }
394
+ const { lifecycle } = recorded.value.event
395
+ execution.result = undefined
396
+ execution.failure = undefined
397
+ execution.span.detail = {
398
+ ...detail(row, envelope),
399
+ sequence: execution.span.detail.sequence,
400
+ input: execution.span.detail.input
401
+ }
402
+ if (lifecycle.state === "completed") {
403
+ execution.span.status = lifecycle.result._tag === "Success" ? "completed" : "failed"
404
+ execution.span.endedAt = envelope.emittedAtMs
405
+ execution.span.detail = {
406
+ ...execution.span.detail,
407
+ ...(lifecycle.result._tag === "Success"
408
+ ? { output: json(lifecycle.result.value) }
409
+ : { message: json(lifecycle.result.detail) })
410
+ }
411
+ if (lifecycle.result._tag === "Success") result(lifecycle.result.value)
412
+ else failure(lifecycle.result.reason, lifecycle.result.detail)
413
+ } else execution.span.status = lifecycle.state === "suspended" ? "waiting" : "running"
414
+ continue
415
+ }
416
+ if (envelope.eventType === "flows.engine.interrupted") {
417
+ const cancelled = decodeCancellation(envelope.payload)
418
+ if (Option.isNone(cancelled)) {
419
+ generic()
420
+ continue
421
+ }
422
+ execution.result = undefined
423
+ execution.failure = undefined
424
+ execution.span.status = "cancelled"
425
+ execution.span.endedAt = cancelled.value.interruptedAtMs
426
+ execution.span.detail = {
427
+ ...detail(row, envelope),
428
+ sequence: execution.span.detail.sequence,
429
+ input: execution.span.detail.input
430
+ }
431
+ continue
432
+ }
433
+ if (envelope.eventType === "flows.engine.run-decision") {
434
+ const decision = decodeDecision(envelope.payload)
435
+ if (Option.isNone(decision)) {
436
+ const payload = envelope.payload
437
+ // Claim, owner-fence, wake and child-policy decisions deliberately do
438
+ // not carry RunState. Keep them visible without losing valid state
439
+ // evidence; malformed state-bearing decisions still refuse claims.
440
+ if (
441
+ typeof payload === "object" && payload !== null &&
442
+ ("state" in payload || ("decision" in payload && stateDecisions.some((name) => name === payload.decision)))
443
+ ) {
444
+ execution.coherent = false
445
+ }
446
+ generic()
447
+ continue
448
+ }
449
+ const { state, status } = decision.value
450
+ if (execution.flowName !== undefined && execution.flowName !== state.flowName) execution.coherent = false
451
+ execution.flowName = state.flowName
452
+ execution.span.label = inspectLabel(state.flowName)
453
+ parent(state.parentExecutionId)
454
+ execution.result = undefined
455
+ execution.failure = undefined
456
+ execution.span.detail = {
457
+ ...detail(row, envelope),
458
+ sequence: execution.span.detail.sequence,
459
+ input: state.payload
460
+ }
461
+ if (decision.value.decision === "created") execution.span.status = "pending"
462
+ // RunDriver commits this decision with suspended even when its payload
463
+ // omits status/result (a released host scope can retain no suspension).
464
+ else if (decision.value.decision === "interrupt-released") execution.span.status = "waiting"
465
+ else if (status === "running" || status === "pending" || status === "suspended") {
466
+ execution.span.status = status === "suspended" ? "waiting" : status
467
+ } else if (status !== undefined) {
468
+ const decodedResult = decodeResult(state.result)
469
+ if (
470
+ Option.isSome(decodedResult) && decodedResult.value._tag === "Handoff" && status === "completed" &&
471
+ decision.value.decision === "handed-off"
472
+ ) {
473
+ // A round handed off; its raw result describes the successor, not an output.
474
+ execution.span.status = "completed"
475
+ execution.span.endedAt = envelope.emittedAtMs
476
+ continue
477
+ }
478
+ if (
479
+ Option.isNone(decodedResult) || decodedResult.value._tag !== "Complete" ||
480
+ (status === "completed") !== (decodedResult.value.exit._tag === "Success")
481
+ ) {
482
+ execution.coherent = false
483
+ execution.span.status = "unknown"
484
+ generic()
485
+ continue
486
+ }
487
+ execution.span.status = status
488
+ execution.span.endedAt = envelope.emittedAtMs
489
+ execution.span.detail = {
490
+ ...execution.span.detail,
491
+ ...(decodedResult.value.exit._tag === "Success"
492
+ ? { output: json(decodedResult.value.exit.value) }
493
+ : { message: json(decodedResult.value.exit.cause) })
494
+ }
495
+ if (decodedResult.value.exit._tag === "Success") result(decodedResult.value.exit.value)
496
+ else failure("cause", decodedResult.value.exit.cause)
497
+ }
498
+ continue
499
+ }
500
+ generic()
501
+ }
502
+ const byExecution = new Map<string, Array<Execution>>()
503
+ for (const current of executions.values()) {
504
+ const generations = byExecution.get(current.envelope.executionId) ?? []
505
+ generations.push(current)
506
+ byExecution.set(current.envelope.executionId, generations)
507
+ }
508
+ const roots: Array<TraceBuilder> = []
509
+ for (const current of executions.values()) {
510
+ const parents = current.parentId === undefined ? [] : byExecution.get(current.parentId) ?? []
511
+ // Build only a forest. Malformed cycles remain separate evidence rows.
512
+ const ancestors = new Set<string>([current.envelope.executionId])
513
+ let parent = parents.length === 1 ? parents[0] : undefined
514
+ let cursor = parent
515
+ while (cursor !== undefined) {
516
+ if (ancestors.has(cursor.envelope.executionId)) {
517
+ parent = undefined
518
+ break
519
+ }
520
+ ancestors.add(cursor.envelope.executionId)
521
+ const next = cursor.parentId === undefined ? [] : byExecution.get(cursor.parentId) ?? []
522
+ cursor = next.length === 1 ? next[0] : undefined
523
+ }
524
+ if (parent === undefined) roots.push(current.span)
525
+ else parent.span.children.push(current.span)
526
+ }
527
+ const evidence: Array<EngineExecutionEvidence> = [...executions.values()].map((current) => ({
528
+ executionId: current.envelope.executionId,
529
+ generation: current.envelope.generation,
530
+ spanId: current.span.id,
531
+ parentExecutionId: current.parentExecutionId,
532
+ parentKnown: current.parentKnown === true,
533
+ flowName: current.flowName,
534
+ input: current.span.detail.input,
535
+ coherent: current.coherent,
536
+ graph: current.graph,
537
+ status: current.span.status,
538
+ waits: [...current.waits?.values() ?? []],
539
+ result: current.result,
540
+ failure: current.failure
541
+ }))
542
+ return { trace: [...roots, ...notices], evidence }
543
+ }
544
+
545
+ /**
546
+ * Folds native executions and attempts into trace spans with recorded ancestry.
547
+ *
548
+ * @category utilities
549
+ * @since 1.0.0
550
+ */
551
+ export const engineTraceFromJournal = (records: ReadonlyArray<JournalRecord>): Array<TraceBuilder> =>
552
+ foldEngineJournal(records).trace
553
+
554
+ /**
555
+ * Product claims use these typed facts, never text rendered into trace details.
556
+ *
557
+ * @category utilities
558
+ * @since 1.0.0
559
+ */
560
+ export const engineExecutionEvidence = (
561
+ records: ReadonlyArray<JournalRecord>
562
+ ): ReadonlyArray<EngineExecutionEvidence> => foldEngineJournal(records).evidence
563
+
564
+ /**
565
+ * Same recorded native ancestry and historical cursor for every product result projection.
566
+ *
567
+ * @category utilities
568
+ * @since 1.0.0
569
+ */
570
+ export const engineRunEvidence = (records: ReadonlyArray<JournalRecord>, rootId: string, cursorSeq?: number) => {
571
+ const visible: ReadonlyArray<JournalRecord> = records
572
+ .filter((row) =>
573
+ Number.isSafeInteger(row.sequence) && Number(row.sequence) >= 0 &&
574
+ (cursorSeq === undefined || Number(row.sequence) <= cursorSeq)
575
+ )
576
+ .sort((left, right) => Number(left.sequence) - Number(right.sequence))
577
+ const executions = engineExecutionEvidence(visible)
578
+ const generations = new Map<string, Array<EngineExecutionEvidence>>()
579
+ for (const execution of executions) {
580
+ const found = generations.get(execution.executionId) ?? []
581
+ found.push(execution)
582
+ generations.set(execution.executionId, found)
583
+ }
584
+ const current = (execution: EngineExecutionEvidence) =>
585
+ execution.coherent &&
586
+ execution.generation === Math.max(...generations.get(execution.executionId)!.map((row) => row.generation))
587
+ const belongs = (execution: EngineExecutionEvidence, ownerId = rootId): boolean => {
588
+ const visited = new Set<string>()
589
+ let candidate: EngineExecutionEvidence = execution
590
+ while (true) {
591
+ if (!candidate.coherent || !candidate.parentKnown || visited.has(candidate.executionId)) return false
592
+ visited.add(candidate.executionId)
593
+ if (candidate.executionId === ownerId) return ownerId !== rootId || candidate.parentExecutionId === undefined
594
+ if (candidate.parentExecutionId === undefined) return false
595
+ const parents: ReadonlyArray<EngineExecutionEvidence> = generations.get(candidate.parentExecutionId) ?? []
596
+ // A child names a native parent ID, not its generation. Never infer a
597
+ // parent generation from arrival time after a rewind.
598
+ if (parents.length !== 1) return false
599
+ candidate = parents[0]!
600
+ }
601
+ }
602
+ const owned = executions.filter((row) => current(row) && belongs(row))
603
+ const completed = owned.filter((row) => row.status === "completed" && row.result !== undefined)
604
+ return { executions: owned, completed, belongs }
605
+ }
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Typed failures surfaced by the workspace gateway.
3
+ *
4
+ * @since 0.1.0
5
+ */
6
+
7
+ import { Schema } from "effect"
8
+
9
+ /**
10
+ * Stable failure codes exposed by gateway operations.
11
+ *
12
+ * @since 0.1.0
13
+ * @category errors
14
+ */
15
+ export const GatewayErrorCode = Schema.Literals([
16
+ "bind_failed",
17
+ "invalid_host",
18
+ "invalid_origin",
19
+ "unauthorized",
20
+ "malformed_request",
21
+ "request_too_large",
22
+ "resource_limit",
23
+ "run_unavailable",
24
+ "run_not_found"
25
+ ])
26
+
27
+ /**
28
+ * A stable gateway failure code.
29
+ *
30
+ * @since 0.1.0
31
+ * @category errors
32
+ */
33
+ export type GatewayErrorCode = typeof GatewayErrorCode.Type
34
+
35
+ /**
36
+ * A normalized gateway operation failure.
37
+ *
38
+ * @since 0.1.0
39
+ * @category errors
40
+ */
41
+ export class GatewayError extends Schema.TaggedError<GatewayError>()("@smthrs/gateway/GatewayError", {
42
+ code: GatewayErrorCode,
43
+ message: Schema.String,
44
+ cause: Schema.optional(Schema.Struct({
45
+ _tag: Schema.String,
46
+ code: Schema.optional(Schema.String)
47
+ }))
48
+ }) {}
49
+
50
+ /**
51
+ * The refusal a numeric setting earns when it is not a positive safe integer,
52
+ * or `undefined` when the gateway can run under it.
53
+ *
54
+ * The keepalive cadence and the request body limit are the same kind of
55
+ * setting and are checked the same way. A cadence of zero turns the keepalive
56
+ * into a tight loop and a body limit of zero refuses every request, so a
57
+ * composition that asks for either is refused before it binds rather than
58
+ * after it is serving.
59
+ *
60
+ * @param name what the value configures, named as the message will read
61
+ * @param value the configured value, or undefined to accept the default
62
+ * @since 1.0.0
63
+ * @category constructors
64
+ */
65
+ export const settingRefusal = (name: string, value: number | undefined): GatewayError | undefined =>
66
+ value === undefined || (Number.isSafeInteger(value) && value > 0)
67
+ ? undefined
68
+ : new GatewayError({
69
+ code: "bind_failed",
70
+ message: `${name} must be a positive safe integer, not ${value}`
71
+ })