@mysten-incubation/devstack 0.0.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 (833) hide show
  1. package/LICENSE +189 -0
  2. package/README.md +94 -0
  3. package/dist/_virtual/_rolldown/runtime.mjs +13 -0
  4. package/dist/api/define-capabilities.d.mts +25 -0
  5. package/dist/api/define-capabilities.mjs +19 -0
  6. package/dist/api/define-capabilities.mjs.map +1 -0
  7. package/dist/api/define-devstack-with.d.mts +41 -0
  8. package/dist/api/define-devstack-with.mjs +24 -0
  9. package/dist/api/define-devstack-with.mjs.map +1 -0
  10. package/dist/api/define-devstack.d.mts +62 -0
  11. package/dist/api/define-devstack.mjs +108 -0
  12. package/dist/api/define-devstack.mjs.map +1 -0
  13. package/dist/api/define-plugin.d.mts +1 -0
  14. package/dist/api/inference-network.mjs +122 -0
  15. package/dist/api/inference-network.mjs.map +1 -0
  16. package/dist/api/mode-narrowed-factory.d.mts +26 -0
  17. package/dist/api/mode-narrowed-factory.mjs +8 -0
  18. package/dist/api/mode-narrowed-factory.mjs.map +1 -0
  19. package/dist/api/plugin-errors.mjs +10 -0
  20. package/dist/api/plugin-errors.mjs.map +1 -0
  21. package/dist/api/run-stack.d.mts +82 -0
  22. package/dist/api/run-stack.mjs +127 -0
  23. package/dist/api/run-stack.mjs.map +1 -0
  24. package/dist/build-integrations/playwright/config.d.mts +92 -0
  25. package/dist/build-integrations/playwright/config.mjs +71 -0
  26. package/dist/build-integrations/playwright/config.mjs.map +1 -0
  27. package/dist/build-integrations/playwright/errors.d.mts +82 -0
  28. package/dist/build-integrations/playwright/errors.mjs +43 -0
  29. package/dist/build-integrations/playwright/errors.mjs.map +1 -0
  30. package/dist/build-integrations/playwright/global-setup.d.mts +64 -0
  31. package/dist/build-integrations/playwright/global-setup.mjs +44 -0
  32. package/dist/build-integrations/playwright/global-setup.mjs.map +1 -0
  33. package/dist/build-integrations/playwright/index.d.mts +6 -0
  34. package/dist/build-integrations/playwright/index.mjs +6 -0
  35. package/dist/build-integrations/playwright/stack-context.d.mts +95 -0
  36. package/dist/build-integrations/playwright/stack-context.mjs +277 -0
  37. package/dist/build-integrations/playwright/stack-context.mjs.map +1 -0
  38. package/dist/build-integrations/playwright/wallet-context.d.mts +87 -0
  39. package/dist/build-integrations/playwright/wallet-context.mjs +148 -0
  40. package/dist/build-integrations/playwright/wallet-context.mjs.map +1 -0
  41. package/dist/build-integrations/runtime/cold-start-url.d.mts +67 -0
  42. package/dist/build-integrations/runtime/cold-start-url.mjs +56 -0
  43. package/dist/build-integrations/runtime/cold-start-url.mjs.map +1 -0
  44. package/dist/build-integrations/runtime/dapp-kit-slot.mjs +10 -0
  45. package/dist/build-integrations/runtime/dapp-kit-slot.mjs.map +1 -0
  46. package/dist/build-integrations/runtime/discover.d.mts +78 -0
  47. package/dist/build-integrations/runtime/discover.mjs +124 -0
  48. package/dist/build-integrations/runtime/discover.mjs.map +1 -0
  49. package/dist/build-integrations/runtime/endpoint-registry.d.mts +26 -0
  50. package/dist/build-integrations/runtime/endpoint-registry.mjs +41 -0
  51. package/dist/build-integrations/runtime/endpoint-registry.mjs.map +1 -0
  52. package/dist/build-integrations/runtime/errors.d.mts +64 -0
  53. package/dist/build-integrations/runtime/errors.mjs +51 -0
  54. package/dist/build-integrations/runtime/errors.mjs.map +1 -0
  55. package/dist/build-integrations/runtime/index.d.mts +7 -0
  56. package/dist/build-integrations/runtime/index.mjs +6 -0
  57. package/dist/build-integrations/runtime/read-stack-context.d.mts +38 -0
  58. package/dist/build-integrations/runtime/read-stack-context.mjs +130 -0
  59. package/dist/build-integrations/runtime/read-stack-context.mjs.map +1 -0
  60. package/dist/build-integrations/runtime/stack-context.d.mts +53 -0
  61. package/dist/build-integrations/vitest/config.d.mts +62 -0
  62. package/dist/build-integrations/vitest/config.mjs +80 -0
  63. package/dist/build-integrations/vitest/config.mjs.map +1 -0
  64. package/dist/build-integrations/vitest/env.d.mts +48 -0
  65. package/dist/build-integrations/vitest/env.mjs +50 -0
  66. package/dist/build-integrations/vitest/env.mjs.map +1 -0
  67. package/dist/build-integrations/vitest/errors.d.mts +44 -0
  68. package/dist/build-integrations/vitest/errors.mjs +18 -0
  69. package/dist/build-integrations/vitest/errors.mjs.map +1 -0
  70. package/dist/build-integrations/vitest/index.d.mts +6 -0
  71. package/dist/build-integrations/vitest/index.mjs +6 -0
  72. package/dist/build-integrations/vitest/setup.d.mts +53 -0
  73. package/dist/build-integrations/vitest/setup.mjs +56 -0
  74. package/dist/build-integrations/vitest/setup.mjs.map +1 -0
  75. package/dist/build-integrations/vitest/stack-context.d.mts +58 -0
  76. package/dist/build-integrations/vitest/stack-context.mjs +67 -0
  77. package/dist/build-integrations/vitest/stack-context.mjs.map +1 -0
  78. package/dist/cli/main.d.mts +5 -0
  79. package/dist/cli/main.mjs +586 -0
  80. package/dist/cli/main.mjs.map +1 -0
  81. package/dist/cli/prune-direct.mjs +216 -0
  82. package/dist/cli/prune-direct.mjs.map +1 -0
  83. package/dist/cli/snapshot-reader.mjs +73 -0
  84. package/dist/cli/snapshot-reader.mjs.map +1 -0
  85. package/dist/cli/up-lifecycle.mjs +28 -0
  86. package/dist/cli/up-lifecycle.mjs.map +1 -0
  87. package/dist/contracts/capability-decl.d.mts +42 -0
  88. package/dist/contracts/chain-probe.d.mts +26 -0
  89. package/dist/contracts/chain-probe.mjs +8 -0
  90. package/dist/contracts/chain-probe.mjs.map +1 -0
  91. package/dist/contracts/codegenable.d.mts +43 -0
  92. package/dist/contracts/container-runtime.d.mts +245 -0
  93. package/dist/contracts/liveness-classifier.d.mts +19 -0
  94. package/dist/contracts/network-resolver.d.mts +15 -0
  95. package/dist/contracts/network-resolver.mjs +7 -0
  96. package/dist/contracts/network-resolver.mjs.map +1 -0
  97. package/dist/contracts/projection.d.mts +15 -0
  98. package/dist/contracts/routable.d.mts +53 -0
  99. package/dist/contracts/snapshotable.d.mts +39 -0
  100. package/dist/contracts/strategy-contributor.d.mts +26 -0
  101. package/dist/index.d.mts +89 -0
  102. package/dist/index.mjs +37 -0
  103. package/dist/orchestrators/codegen/bindings.d.mts +2 -0
  104. package/dist/orchestrators/codegen/bindings.mjs +340 -0
  105. package/dist/orchestrators/codegen/bindings.mjs.map +1 -0
  106. package/dist/orchestrators/codegen/emit.mjs +56 -0
  107. package/dist/orchestrators/codegen/emit.mjs.map +1 -0
  108. package/dist/orchestrators/codegen/errors.d.mts +1 -0
  109. package/dist/orchestrators/codegen/errors.mjs +66 -0
  110. package/dist/orchestrators/codegen/errors.mjs.map +1 -0
  111. package/dist/orchestrators/codegen/extras.mjs +16 -0
  112. package/dist/orchestrators/codegen/extras.mjs.map +1 -0
  113. package/dist/orchestrators/codegen/format.mjs +109 -0
  114. package/dist/orchestrators/codegen/format.mjs.map +1 -0
  115. package/dist/orchestrators/codegen/gitignore.mjs +67 -0
  116. package/dist/orchestrators/codegen/gitignore.mjs.map +1 -0
  117. package/dist/orchestrators/codegen/paths.d.mts +1 -0
  118. package/dist/orchestrators/codegen/paths.mjs +33 -0
  119. package/dist/orchestrators/codegen/paths.mjs.map +1 -0
  120. package/dist/orchestrators/codegen/permissions.mjs +6 -0
  121. package/dist/orchestrators/codegen/permissions.mjs.map +1 -0
  122. package/dist/orchestrators/codegen/service.d.mts +1 -0
  123. package/dist/orchestrators/codegen/service.mjs +276 -0
  124. package/dist/orchestrators/codegen/service.mjs.map +1 -0
  125. package/dist/orchestrators/router/cleanup.mjs +58 -0
  126. package/dist/orchestrators/router/cleanup.mjs.map +1 -0
  127. package/dist/orchestrators/router/cors.mjs +31 -0
  128. package/dist/orchestrators/router/cors.mjs.map +1 -0
  129. package/dist/orchestrators/router/entrypoints.d.mts +1 -0
  130. package/dist/orchestrators/router/entrypoints.mjs +80 -0
  131. package/dist/orchestrators/router/entrypoints.mjs.map +1 -0
  132. package/dist/orchestrators/router/errors.d.mts +1 -0
  133. package/dist/orchestrators/router/errors.mjs +103 -0
  134. package/dist/orchestrators/router/errors.mjs.map +1 -0
  135. package/dist/orchestrators/router/file-provider.d.mts +1 -0
  136. package/dist/orchestrators/router/file-provider.mjs +320 -0
  137. package/dist/orchestrators/router/file-provider.mjs.map +1 -0
  138. package/dist/orchestrators/router/hostname.d.mts +1 -0
  139. package/dist/orchestrators/router/hostname.mjs +107 -0
  140. package/dist/orchestrators/router/hostname.mjs.map +1 -0
  141. package/dist/orchestrators/router/index.d.mts +1 -0
  142. package/dist/orchestrators/router/profile.d.mts +1 -0
  143. package/dist/orchestrators/router/profile.mjs +109 -0
  144. package/dist/orchestrators/router/profile.mjs.map +1 -0
  145. package/dist/orchestrators/router/service.d.mts +3 -0
  146. package/dist/orchestrators/router/service.mjs +421 -0
  147. package/dist/orchestrators/router/service.mjs.map +1 -0
  148. package/dist/orchestrators/router/traefik-container.d.mts +1 -0
  149. package/dist/orchestrators/router/traefik-container.mjs +229 -0
  150. package/dist/orchestrators/router/traefik-container.mjs.map +1 -0
  151. package/dist/orchestrators/runtime-composition.d.mts +10 -0
  152. package/dist/orchestrators/runtime-composition.mjs +168 -0
  153. package/dist/orchestrators/runtime-composition.mjs.map +1 -0
  154. package/dist/orchestrators/snapshot/capture.d.mts +1 -0
  155. package/dist/orchestrators/snapshot/capture.mjs +350 -0
  156. package/dist/orchestrators/snapshot/capture.mjs.map +1 -0
  157. package/dist/orchestrators/snapshot/descriptor.d.mts +1 -0
  158. package/dist/orchestrators/snapshot/descriptor.mjs +109 -0
  159. package/dist/orchestrators/snapshot/descriptor.mjs.map +1 -0
  160. package/dist/orchestrators/snapshot/identity-guard.d.mts +1 -0
  161. package/dist/orchestrators/snapshot/identity-guard.mjs +132 -0
  162. package/dist/orchestrators/snapshot/identity-guard.mjs.map +1 -0
  163. package/dist/orchestrators/snapshot/image-bundle-tags.mjs +207 -0
  164. package/dist/orchestrators/snapshot/image-bundle-tags.mjs.map +1 -0
  165. package/dist/orchestrators/snapshot/index.d.mts +1 -0
  166. package/dist/orchestrators/snapshot/integrity.d.mts +1 -0
  167. package/dist/orchestrators/snapshot/integrity.mjs +74 -0
  168. package/dist/orchestrators/snapshot/integrity.mjs.map +1 -0
  169. package/dist/orchestrators/snapshot/prune.d.mts +1 -0
  170. package/dist/orchestrators/snapshot/prune.mjs +110 -0
  171. package/dist/orchestrators/snapshot/prune.mjs.map +1 -0
  172. package/dist/orchestrators/snapshot/restore.d.mts +1 -0
  173. package/dist/orchestrators/snapshot/restore.mjs +404 -0
  174. package/dist/orchestrators/snapshot/restore.mjs.map +1 -0
  175. package/dist/orchestrators/snapshot/service.d.mts +1 -0
  176. package/dist/orchestrators/snapshot/service.mjs +296 -0
  177. package/dist/orchestrators/snapshot/service.mjs.map +1 -0
  178. package/dist/orchestrators/snapshot/state-document.mjs +18 -0
  179. package/dist/orchestrators/snapshot/state-document.mjs.map +1 -0
  180. package/dist/orchestrators/snapshot/wipe.d.mts +1 -0
  181. package/dist/orchestrators/snapshot/wipe.mjs +59 -0
  182. package/dist/orchestrators/snapshot/wipe.mjs.map +1 -0
  183. package/dist/plugins/account/codegen.d.mts +12 -0
  184. package/dist/plugins/account/codegen.mjs +22 -0
  185. package/dist/plugins/account/codegen.mjs.map +1 -0
  186. package/dist/plugins/account/errors.d.mts +44 -0
  187. package/dist/plugins/account/errors.mjs +16 -0
  188. package/dist/plugins/account/errors.mjs.map +1 -0
  189. package/dist/plugins/account/funding.d.mts +94 -0
  190. package/dist/plugins/account/funding.mjs +199 -0
  191. package/dist/plugins/account/funding.mjs.map +1 -0
  192. package/dist/plugins/account/index.d.mts +54 -0
  193. package/dist/plugins/account/index.mjs +151 -0
  194. package/dist/plugins/account/index.mjs.map +1 -0
  195. package/dist/plugins/account/keypair.d.mts +32 -0
  196. package/dist/plugins/account/keypair.mjs +99 -0
  197. package/dist/plugins/account/keypair.mjs.map +1 -0
  198. package/dist/plugins/account/lease.mjs +21 -0
  199. package/dist/plugins/account/lease.mjs.map +1 -0
  200. package/dist/plugins/account/registry.d.mts +33 -0
  201. package/dist/plugins/account/registry.mjs +36 -0
  202. package/dist/plugins/account/registry.mjs.map +1 -0
  203. package/dist/plugins/account/service.d.mts +104 -0
  204. package/dist/plugins/account/service.mjs +405 -0
  205. package/dist/plugins/account/service.mjs.map +1 -0
  206. package/dist/plugins/account/snapshot.mjs +33 -0
  207. package/dist/plugins/account/snapshot.mjs.map +1 -0
  208. package/dist/plugins/account/variants/env.mjs +24 -0
  209. package/dist/plugins/account/variants/env.mjs.map +1 -0
  210. package/dist/plugins/account/variants/ephemeral.mjs +72 -0
  211. package/dist/plugins/account/variants/ephemeral.mjs.map +1 -0
  212. package/dist/plugins/account/variants/impersonate.d.mts +16 -0
  213. package/dist/plugins/account/variants/impersonate.mjs +48 -0
  214. package/dist/plugins/account/variants/impersonate.mjs.map +1 -0
  215. package/dist/plugins/account/variants/inline.mjs +13 -0
  216. package/dist/plugins/account/variants/inline.mjs.map +1 -0
  217. package/dist/plugins/account/variants/keystore.mjs +93 -0
  218. package/dist/plugins/account/variants/keystore.mjs.map +1 -0
  219. package/dist/plugins/account/variants/signer.mjs +31 -0
  220. package/dist/plugins/account/variants/signer.mjs.map +1 -0
  221. package/dist/plugins/action/build-context.d.mts +41 -0
  222. package/dist/plugins/action/discriminator.d.mts +20 -0
  223. package/dist/plugins/action/discriminator.mjs +13 -0
  224. package/dist/plugins/action/discriminator.mjs.map +1 -0
  225. package/dist/plugins/action/errors.d.mts +31 -0
  226. package/dist/plugins/action/errors.mjs +13 -0
  227. package/dist/plugins/action/errors.mjs.map +1 -0
  228. package/dist/plugins/action/execute.d.mts +2 -0
  229. package/dist/plugins/action/execute.mjs +145 -0
  230. package/dist/plugins/action/execute.mjs.map +1 -0
  231. package/dist/plugins/action/index.d.mts +56 -0
  232. package/dist/plugins/action/index.mjs +82 -0
  233. package/dist/plugins/action/index.mjs.map +1 -0
  234. package/dist/plugins/action/service.d.mts +26 -0
  235. package/dist/plugins/action/service.mjs +84 -0
  236. package/dist/plugins/action/service.mjs.map +1 -0
  237. package/dist/plugins/coin/address-resolution.d.mts +34 -0
  238. package/dist/plugins/coin/address-resolution.mjs +80 -0
  239. package/dist/plugins/coin/address-resolution.mjs.map +1 -0
  240. package/dist/plugins/coin/codegen.d.mts +16 -0
  241. package/dist/plugins/coin/codegen.mjs +21 -0
  242. package/dist/plugins/coin/codegen.mjs.map +1 -0
  243. package/dist/plugins/coin/discovery.d.mts +26 -0
  244. package/dist/plugins/coin/discovery.mjs +112 -0
  245. package/dist/plugins/coin/discovery.mjs.map +1 -0
  246. package/dist/plugins/coin/errors.d.mts +48 -0
  247. package/dist/plugins/coin/errors.mjs +13 -0
  248. package/dist/plugins/coin/errors.mjs.map +1 -0
  249. package/dist/plugins/coin/index.d.mts +95 -0
  250. package/dist/plugins/coin/index.mjs +172 -0
  251. package/dist/plugins/coin/index.mjs.map +1 -0
  252. package/dist/plugins/coin/metadata.d.mts +15 -0
  253. package/dist/plugins/coin/metadata.mjs +99 -0
  254. package/dist/plugins/coin/metadata.mjs.map +1 -0
  255. package/dist/plugins/coin/mint.d.mts +34 -0
  256. package/dist/plugins/coin/mint.mjs +164 -0
  257. package/dist/plugins/coin/mint.mjs.map +1 -0
  258. package/dist/plugins/coin/registry.d.mts +1 -0
  259. package/dist/plugins/coin/registry.mjs +37 -0
  260. package/dist/plugins/coin/registry.mjs.map +1 -0
  261. package/dist/plugins/coin/service.d.mts +47 -0
  262. package/dist/plugins/coin/service.mjs +51 -0
  263. package/dist/plugins/coin/service.mjs.map +1 -0
  264. package/dist/plugins/coin/snapshot.mjs +19 -0
  265. package/dist/plugins/coin/snapshot.mjs.map +1 -0
  266. package/dist/plugins/coin/type-strings.mjs +49 -0
  267. package/dist/plugins/coin/type-strings.mjs.map +1 -0
  268. package/dist/plugins/deepbook/codegen.d.mts +39 -0
  269. package/dist/plugins/deepbook/codegen.mjs +15 -0
  270. package/dist/plugins/deepbook/codegen.mjs.map +1 -0
  271. package/dist/plugins/deepbook/deploy.mjs +437 -0
  272. package/dist/plugins/deepbook/deploy.mjs.map +1 -0
  273. package/dist/plugins/deepbook/errors.d.mts +29 -0
  274. package/dist/plugins/deepbook/errors.mjs +26 -0
  275. package/dist/plugins/deepbook/errors.mjs.map +1 -0
  276. package/dist/plugins/deepbook/faucet-strategy.d.mts +8 -0
  277. package/dist/plugins/deepbook/faucet-strategy.mjs +81 -0
  278. package/dist/plugins/deepbook/faucet-strategy.mjs.map +1 -0
  279. package/dist/plugins/deepbook/index.d.mts +171 -0
  280. package/dist/plugins/deepbook/index.mjs +359 -0
  281. package/dist/plugins/deepbook/index.mjs.map +1 -0
  282. package/dist/plugins/deepbook/plugin-key.mjs +7 -0
  283. package/dist/plugins/deepbook/plugin-key.mjs.map +1 -0
  284. package/dist/plugins/deepbook/pyth/index.mjs +226 -0
  285. package/dist/plugins/deepbook/pyth/index.mjs.map +1 -0
  286. package/dist/plugins/deepbook/routable.mjs +21 -0
  287. package/dist/plugins/deepbook/routable.mjs.map +1 -0
  288. package/dist/plugins/deepbook/snapshot.mjs +49 -0
  289. package/dist/plugins/deepbook/snapshot.mjs.map +1 -0
  290. package/dist/plugins/deepbook/types.d.mts +125 -0
  291. package/dist/plugins/deepbook/types.mjs +12 -0
  292. package/dist/plugins/deepbook/types.mjs.map +1 -0
  293. package/dist/plugins/faucet/dispatcher.d.mts +9 -0
  294. package/dist/plugins/faucet/dispatcher.mjs +13 -0
  295. package/dist/plugins/faucet/dispatcher.mjs.map +1 -0
  296. package/dist/plugins/faucet/errors.d.mts +86 -0
  297. package/dist/plugins/faucet/errors.mjs +19 -0
  298. package/dist/plugins/faucet/errors.mjs.map +1 -0
  299. package/dist/plugins/faucet/http.mjs +127 -0
  300. package/dist/plugins/faucet/http.mjs.map +1 -0
  301. package/dist/plugins/faucet/index.d.mts +43 -0
  302. package/dist/plugins/faucet/index.mjs +42 -0
  303. package/dist/plugins/faucet/index.mjs.map +1 -0
  304. package/dist/plugins/faucet/service.d.mts +20 -0
  305. package/dist/plugins/faucet/strategies/sui-local.d.mts +23 -0
  306. package/dist/plugins/faucet/strategies/sui-local.mjs +29 -0
  307. package/dist/plugins/faucet/strategies/sui-local.mjs.map +1 -0
  308. package/dist/plugins/host-service/errors.d.mts +27 -0
  309. package/dist/plugins/host-service/errors.mjs +14 -0
  310. package/dist/plugins/host-service/errors.mjs.map +1 -0
  311. package/dist/plugins/host-service/index.d.mts +10 -0
  312. package/dist/plugins/host-service/index.mjs +48 -0
  313. package/dist/plugins/host-service/index.mjs.map +1 -0
  314. package/dist/plugins/host-service/routable.mjs +24 -0
  315. package/dist/plugins/host-service/routable.mjs.map +1 -0
  316. package/dist/plugins/host-service/service.d.mts +49 -0
  317. package/dist/plugins/host-service/service.mjs +375 -0
  318. package/dist/plugins/host-service/service.mjs.map +1 -0
  319. package/dist/plugins/package/build.d.mts +1 -0
  320. package/dist/plugins/package/build.mjs +24 -0
  321. package/dist/plugins/package/build.mjs.map +1 -0
  322. package/dist/plugins/package/codegen.d.mts +19 -0
  323. package/dist/plugins/package/codegen.mjs +41 -0
  324. package/dist/plugins/package/codegen.mjs.map +1 -0
  325. package/dist/plugins/package/dep-resolution.mjs +10 -0
  326. package/dist/plugins/package/dep-resolution.mjs.map +1 -0
  327. package/dist/plugins/package/errors.d.mts +34 -0
  328. package/dist/plugins/package/errors.mjs +13 -0
  329. package/dist/plugins/package/errors.mjs.map +1 -0
  330. package/dist/plugins/package/index.d.mts +109 -0
  331. package/dist/plugins/package/index.mjs +207 -0
  332. package/dist/plugins/package/index.mjs.map +1 -0
  333. package/dist/plugins/package/mode-known.mjs +41 -0
  334. package/dist/plugins/package/mode-known.mjs.map +1 -0
  335. package/dist/plugins/package/mode-local.d.mts +1 -0
  336. package/dist/plugins/package/mode-local.mjs +183 -0
  337. package/dist/plugins/package/mode-local.mjs.map +1 -0
  338. package/dist/plugins/package/publish-executor.mjs +202 -0
  339. package/dist/plugins/package/publish-executor.mjs.map +1 -0
  340. package/dist/plugins/package/publish-output.d.mts +28 -0
  341. package/dist/plugins/package/publish-output.mjs +45 -0
  342. package/dist/plugins/package/publish-output.mjs.map +1 -0
  343. package/dist/plugins/package/registry.d.mts +25 -0
  344. package/dist/plugins/package/registry.mjs +30 -0
  345. package/dist/plugins/package/registry.mjs.map +1 -0
  346. package/dist/plugins/package/service.mjs +20 -0
  347. package/dist/plugins/package/service.mjs.map +1 -0
  348. package/dist/plugins/package/snapshot.mjs +25 -0
  349. package/dist/plugins/package/snapshot.mjs.map +1 -0
  350. package/dist/plugins/postgres/codegen.mjs +42 -0
  351. package/dist/plugins/postgres/codegen.mjs.map +1 -0
  352. package/dist/plugins/postgres/connection.d.mts +33 -0
  353. package/dist/plugins/postgres/connection.mjs +19 -0
  354. package/dist/plugins/postgres/connection.mjs.map +1 -0
  355. package/dist/plugins/postgres/db-ensure.mjs +100 -0
  356. package/dist/plugins/postgres/db-ensure.mjs.map +1 -0
  357. package/dist/plugins/postgres/errors.d.mts +55 -0
  358. package/dist/plugins/postgres/errors.mjs +29 -0
  359. package/dist/plugins/postgres/errors.mjs.map +1 -0
  360. package/dist/plugins/postgres/index.d.mts +37 -0
  361. package/dist/plugins/postgres/index.mjs +75 -0
  362. package/dist/plugins/postgres/index.mjs.map +1 -0
  363. package/dist/plugins/postgres/routable.mjs +33 -0
  364. package/dist/plugins/postgres/routable.mjs.map +1 -0
  365. package/dist/plugins/postgres/service.d.mts +50 -0
  366. package/dist/plugins/postgres/service.mjs +145 -0
  367. package/dist/plugins/postgres/service.mjs.map +1 -0
  368. package/dist/plugins/postgres/snapshot.d.mts +1 -0
  369. package/dist/plugins/postgres/snapshot.mjs +32 -0
  370. package/dist/plugins/postgres/snapshot.mjs.map +1 -0
  371. package/dist/plugins/router-entrypoints.mjs +21 -0
  372. package/dist/plugins/router-entrypoints.mjs.map +1 -0
  373. package/dist/plugins/seal/bootstrap-assets/cargo-image.mjs +59 -0
  374. package/dist/plugins/seal/bootstrap-assets/cargo-image.mjs.map +1 -0
  375. package/dist/plugins/seal/bootstrap-assets/source-fetch.mjs +132 -0
  376. package/dist/plugins/seal/bootstrap-assets/source-fetch.mjs.map +1 -0
  377. package/dist/plugins/seal/codegen.d.mts +19 -0
  378. package/dist/plugins/seal/codegen.mjs +16 -0
  379. package/dist/plugins/seal/codegen.mjs.map +1 -0
  380. package/dist/plugins/seal/config-render.mjs +82 -0
  381. package/dist/plugins/seal/config-render.mjs.map +1 -0
  382. package/dist/plugins/seal/deploy.mjs +198 -0
  383. package/dist/plugins/seal/deploy.mjs.map +1 -0
  384. package/dist/plugins/seal/errors.d.mts +52 -0
  385. package/dist/plugins/seal/errors.mjs +19 -0
  386. package/dist/plugins/seal/errors.mjs.map +1 -0
  387. package/dist/plugins/seal/index.d.mts +161 -0
  388. package/dist/plugins/seal/index.mjs +235 -0
  389. package/dist/plugins/seal/index.mjs.map +1 -0
  390. package/dist/plugins/seal/key-manager.d.mts +22 -0
  391. package/dist/plugins/seal/key-manager.mjs +22 -0
  392. package/dist/plugins/seal/key-manager.mjs.map +1 -0
  393. package/dist/plugins/seal/key-server.mjs +175 -0
  394. package/dist/plugins/seal/key-server.mjs.map +1 -0
  395. package/dist/plugins/seal/keygen.mjs +96 -0
  396. package/dist/plugins/seal/keygen.mjs.map +1 -0
  397. package/dist/plugins/seal/mode/fork-known.d.mts +8 -0
  398. package/dist/plugins/seal/mode/fork-known.mjs +23 -0
  399. package/dist/plugins/seal/mode/fork-known.mjs.map +1 -0
  400. package/dist/plugins/seal/mode/live.d.mts +18 -0
  401. package/dist/plugins/seal/mode/live.mjs +64 -0
  402. package/dist/plugins/seal/mode/live.mjs.map +1 -0
  403. package/dist/plugins/seal/mode/local-keygen.mjs +180 -0
  404. package/dist/plugins/seal/mode/local-keygen.mjs.map +1 -0
  405. package/dist/plugins/seal/plugin-key.mjs +7 -0
  406. package/dist/plugins/seal/plugin-key.mjs.map +1 -0
  407. package/dist/plugins/seal/registry-publish.d.mts +43 -0
  408. package/dist/plugins/seal/registry-publish.mjs +9 -0
  409. package/dist/plugins/seal/registry-publish.mjs.map +1 -0
  410. package/dist/plugins/seal/routable.mjs +57 -0
  411. package/dist/plugins/seal/routable.mjs.map +1 -0
  412. package/dist/plugins/seal/service.mjs +17 -0
  413. package/dist/plugins/seal/service.mjs.map +1 -0
  414. package/dist/plugins/seal/snapshot.mjs +51 -0
  415. package/dist/plugins/seal/snapshot.mjs.map +1 -0
  416. package/dist/plugins/sui/auto-tick.mjs +45 -0
  417. package/dist/plugins/sui/auto-tick.mjs.map +1 -0
  418. package/dist/plugins/sui/chain-build-container.d.mts +1 -0
  419. package/dist/plugins/sui/chain-probe.d.mts +85 -0
  420. package/dist/plugins/sui/chain-probe.mjs +104 -0
  421. package/dist/plugins/sui/chain-probe.mjs.map +1 -0
  422. package/dist/plugins/sui/codegen.d.mts +14 -0
  423. package/dist/plugins/sui/codegen.mjs +26 -0
  424. package/dist/plugins/sui/codegen.mjs.map +1 -0
  425. package/dist/plugins/sui/errors.d.mts +74 -0
  426. package/dist/plugins/sui/errors.mjs +28 -0
  427. package/dist/plugins/sui/errors.mjs.map +1 -0
  428. package/dist/plugins/sui/fork-orchestration.mjs +24 -0
  429. package/dist/plugins/sui/fork-orchestration.mjs.map +1 -0
  430. package/dist/plugins/sui/fork-transaction.mjs +96 -0
  431. package/dist/plugins/sui/fork-transaction.mjs.map +1 -0
  432. package/dist/plugins/sui/index.d.mts +318 -0
  433. package/dist/plugins/sui/index.mjs +182 -0
  434. package/dist/plugins/sui/index.mjs.map +1 -0
  435. package/dist/plugins/sui/mode/external.mjs +60 -0
  436. package/dist/plugins/sui/mode/external.mjs.map +1 -0
  437. package/dist/plugins/sui/mode/fork.mjs +283 -0
  438. package/dist/plugins/sui/mode/fork.mjs.map +1 -0
  439. package/dist/plugins/sui/mode/live.mjs +103 -0
  440. package/dist/plugins/sui/mode/live.mjs.map +1 -0
  441. package/dist/plugins/sui/mode/local.mjs +293 -0
  442. package/dist/plugins/sui/mode/local.mjs.map +1 -0
  443. package/dist/plugins/sui/mode/shared-boot.mjs +254 -0
  444. package/dist/plugins/sui/mode/shared-boot.mjs.map +1 -0
  445. package/dist/plugins/sui/mode/shared.d.mts +103 -0
  446. package/dist/plugins/sui/mode/shared.mjs +12 -0
  447. package/dist/plugins/sui/mode/shared.mjs.map +1 -0
  448. package/dist/plugins/sui/mode/spec.d.mts +94 -0
  449. package/dist/plugins/sui/network-resolver.d.mts +23 -0
  450. package/dist/plugins/sui/routable.mjs +88 -0
  451. package/dist/plugins/sui/routable.mjs.map +1 -0
  452. package/dist/plugins/sui/seed-objects.d.mts +18 -0
  453. package/dist/plugins/sui/seed-objects.mjs +25 -0
  454. package/dist/plugins/sui/seed-objects.mjs.map +1 -0
  455. package/dist/plugins/sui/service.mjs +38 -0
  456. package/dist/plugins/sui/service.mjs.map +1 -0
  457. package/dist/plugins/sui/snapshot.mjs +53 -0
  458. package/dist/plugins/sui/snapshot.mjs.map +1 -0
  459. package/dist/plugins/wallet/codegen.d.mts +33 -0
  460. package/dist/plugins/wallet/codegen.mjs +34 -0
  461. package/dist/plugins/wallet/codegen.mjs.map +1 -0
  462. package/dist/plugins/wallet/errors.d.mts +66 -0
  463. package/dist/plugins/wallet/errors.mjs +16 -0
  464. package/dist/plugins/wallet/errors.mjs.map +1 -0
  465. package/dist/plugins/wallet/index.d.mts +63 -0
  466. package/dist/plugins/wallet/index.mjs +126 -0
  467. package/dist/plugins/wallet/index.mjs.map +1 -0
  468. package/dist/plugins/wallet/origin-policy.d.mts +1 -0
  469. package/dist/plugins/wallet/origin-policy.mjs +65 -0
  470. package/dist/plugins/wallet/origin-policy.mjs.map +1 -0
  471. package/dist/plugins/wallet/pairing.d.mts +11 -0
  472. package/dist/plugins/wallet/pairing.mjs +125 -0
  473. package/dist/plugins/wallet/pairing.mjs.map +1 -0
  474. package/dist/plugins/wallet/protocol.d.mts +1 -0
  475. package/dist/plugins/wallet/protocol.mjs +96 -0
  476. package/dist/plugins/wallet/protocol.mjs.map +1 -0
  477. package/dist/plugins/wallet/routable.mjs +32 -0
  478. package/dist/plugins/wallet/routable.mjs.map +1 -0
  479. package/dist/plugins/wallet/server.d.mts +12 -0
  480. package/dist/plugins/wallet/server.mjs +317 -0
  481. package/dist/plugins/wallet/server.mjs.map +1 -0
  482. package/dist/plugins/wallet/service.d.mts +68 -0
  483. package/dist/plugins/wallet/service.mjs +97 -0
  484. package/dist/plugins/wallet/service.mjs.map +1 -0
  485. package/dist/plugins/wallet/snapshot.d.mts +1 -0
  486. package/dist/plugins/wallet/snapshot.mjs +14 -0
  487. package/dist/plugins/wallet/snapshot.mjs.map +1 -0
  488. package/dist/plugins/walrus/bootstrap-assets/cargo-image.mjs +42 -0
  489. package/dist/plugins/walrus/bootstrap-assets/cargo-image.mjs.map +1 -0
  490. package/dist/plugins/walrus/codegen.d.mts +38 -0
  491. package/dist/plugins/walrus/codegen.mjs +34 -0
  492. package/dist/plugins/walrus/codegen.mjs.map +1 -0
  493. package/dist/plugins/walrus/deploy-paths.mjs +14 -0
  494. package/dist/plugins/walrus/deploy-paths.mjs.map +1 -0
  495. package/dist/plugins/walrus/deploy.d.mts +1 -0
  496. package/dist/plugins/walrus/deploy.mjs +224 -0
  497. package/dist/plugins/walrus/deploy.mjs.map +1 -0
  498. package/dist/plugins/walrus/errors.d.mts +38 -0
  499. package/dist/plugins/walrus/errors.mjs +26 -0
  500. package/dist/plugins/walrus/errors.mjs.map +1 -0
  501. package/dist/plugins/walrus/faucet-strategy.d.mts +12 -0
  502. package/dist/plugins/walrus/faucet-strategy.mjs +62 -0
  503. package/dist/plugins/walrus/faucet-strategy.mjs.map +1 -0
  504. package/dist/plugins/walrus/index.d.mts +177 -0
  505. package/dist/plugins/walrus/index.mjs +284 -0
  506. package/dist/plugins/walrus/index.mjs.map +1 -0
  507. package/dist/plugins/walrus/mode/known-deploy.d.mts +25 -0
  508. package/dist/plugins/walrus/mode/known-deploy.mjs +71 -0
  509. package/dist/plugins/walrus/mode/known-deploy.mjs.map +1 -0
  510. package/dist/plugins/walrus/mode/local-cluster.d.mts +34 -0
  511. package/dist/plugins/walrus/mode/local-cluster.mjs +153 -0
  512. package/dist/plugins/walrus/mode/local-cluster.mjs.map +1 -0
  513. package/dist/plugins/walrus/plugin-key.mjs +7 -0
  514. package/dist/plugins/walrus/plugin-key.mjs.map +1 -0
  515. package/dist/plugins/walrus/registry-publish.d.mts +24 -0
  516. package/dist/plugins/walrus/registry-publish.mjs +7 -0
  517. package/dist/plugins/walrus/registry-publish.mjs.map +1 -0
  518. package/dist/plugins/walrus/routable.mjs +99 -0
  519. package/dist/plugins/walrus/routable.mjs.map +1 -0
  520. package/dist/plugins/walrus/service.mjs +20 -0
  521. package/dist/plugins/walrus/service.mjs.map +1 -0
  522. package/dist/plugins/walrus/snapshot.mjs +53 -0
  523. package/dist/plugins/walrus/snapshot.mjs.map +1 -0
  524. package/dist/plugins/walrus/storage-nodes.d.mts +15 -0
  525. package/dist/plugins/walrus/storage-nodes.mjs +154 -0
  526. package/dist/plugins/walrus/storage-nodes.mjs.map +1 -0
  527. package/dist/plugins/walrus/wal-swap.d.mts +2 -0
  528. package/dist/plugins/walrus/wal-swap.mjs +58 -0
  529. package/dist/plugins/walrus/wal-swap.mjs.map +1 -0
  530. package/dist/primitives/artifact-publisher.d.mts +12 -0
  531. package/dist/primitives/cache.d.mts +1 -0
  532. package/dist/runtime/built-in-plugin-layers.mjs +49 -0
  533. package/dist/runtime/built-in-plugin-layers.mjs.map +1 -0
  534. package/dist/runtime/docker/client.d.mts +2 -0
  535. package/dist/runtime/docker/client.mjs +54 -0
  536. package/dist/runtime/docker/client.mjs.map +1 -0
  537. package/dist/runtime/docker/container.d.mts +1 -0
  538. package/dist/runtime/docker/container.mjs +562 -0
  539. package/dist/runtime/docker/container.mjs.map +1 -0
  540. package/dist/runtime/docker/errors.d.mts +1 -0
  541. package/dist/runtime/docker/errors.mjs +187 -0
  542. package/dist/runtime/docker/errors.mjs.map +1 -0
  543. package/dist/runtime/docker/exec.d.mts +1 -0
  544. package/dist/runtime/docker/exec.mjs +63 -0
  545. package/dist/runtime/docker/exec.mjs.map +1 -0
  546. package/dist/runtime/docker/image.d.mts +1 -0
  547. package/dist/runtime/docker/image.mjs +278 -0
  548. package/dist/runtime/docker/image.mjs.map +1 -0
  549. package/dist/runtime/docker/index.d.mts +1 -0
  550. package/dist/runtime/docker/inventory.d.mts +1 -0
  551. package/dist/runtime/docker/inventory.mjs +167 -0
  552. package/dist/runtime/docker/inventory.mjs.map +1 -0
  553. package/dist/runtime/docker/labels.d.mts +1 -0
  554. package/dist/runtime/docker/labels.mjs +97 -0
  555. package/dist/runtime/docker/labels.mjs.map +1 -0
  556. package/dist/runtime/docker/logs.d.mts +1 -0
  557. package/dist/runtime/docker/logs.mjs +34 -0
  558. package/dist/runtime/docker/logs.mjs.map +1 -0
  559. package/dist/runtime/docker/network.d.mts +1 -0
  560. package/dist/runtime/docker/network.mjs +168 -0
  561. package/dist/runtime/docker/network.mjs.map +1 -0
  562. package/dist/runtime/docker/service.d.mts +9 -0
  563. package/dist/runtime/docker/service.mjs +266 -0
  564. package/dist/runtime/docker/service.mjs.map +1 -0
  565. package/dist/runtime/docker/sweep.d.mts +1 -0
  566. package/dist/runtime/docker/sweep.mjs +220 -0
  567. package/dist/runtime/docker/sweep.mjs.map +1 -0
  568. package/dist/runtime/docker/volume.d.mts +1 -0
  569. package/dist/runtime/docker/volume.mjs +24 -0
  570. package/dist/runtime/docker/volume.mjs.map +1 -0
  571. package/dist/runtime/docker/wrap.d.mts +1 -0
  572. package/dist/runtime/docker/wrap.mjs +131 -0
  573. package/dist/runtime/docker/wrap.mjs.map +1 -0
  574. package/dist/substrate/brand.d.mts +24 -0
  575. package/dist/substrate/brand.mjs +14 -0
  576. package/dist/substrate/brand.mjs.map +1 -0
  577. package/dist/substrate/cross-process.d.mts +1 -0
  578. package/dist/substrate/cross-process.mjs +28 -0
  579. package/dist/substrate/cross-process.mjs.map +1 -0
  580. package/dist/substrate/events.d.mts +117 -0
  581. package/dist/substrate/identity.d.mts +13 -0
  582. package/dist/substrate/lifecycle.d.mts +12 -0
  583. package/dist/substrate/manifest.d.mts +39 -0
  584. package/dist/substrate/manifest.mjs +33 -0
  585. package/dist/substrate/manifest.mjs.map +1 -0
  586. package/dist/substrate/network.d.mts +34 -0
  587. package/dist/substrate/options.d.mts +23 -0
  588. package/dist/substrate/plugin.d.mts +101 -0
  589. package/dist/substrate/plugin.mjs +61 -0
  590. package/dist/substrate/plugin.mjs.map +1 -0
  591. package/dist/substrate/projection.d.mts +100 -0
  592. package/dist/substrate/runtime/artifact-publisher/index.mjs +76 -0
  593. package/dist/substrate/runtime/artifact-publisher/index.mjs.map +1 -0
  594. package/dist/substrate/runtime/atomic-write.mjs +106 -0
  595. package/dist/substrate/runtime/atomic-write.mjs.map +1 -0
  596. package/dist/substrate/runtime/cache/index.d.mts +1 -0
  597. package/dist/substrate/runtime/cache/schema.d.mts +1 -0
  598. package/dist/substrate/runtime/cache/schema.mjs +22 -0
  599. package/dist/substrate/runtime/cache/schema.mjs.map +1 -0
  600. package/dist/substrate/runtime/cache/service.d.mts +1 -0
  601. package/dist/substrate/runtime/cache/service.mjs +89 -0
  602. package/dist/substrate/runtime/cache/service.mjs.map +1 -0
  603. package/dist/substrate/runtime/capability-sinks/index.d.mts +1 -0
  604. package/dist/substrate/runtime/capability-sinks/layer.d.mts +1 -0
  605. package/dist/substrate/runtime/capability-sinks/layer.mjs +31 -0
  606. package/dist/substrate/runtime/capability-sinks/layer.mjs.map +1 -0
  607. package/dist/substrate/runtime/capability-sinks/service.d.mts +36 -0
  608. package/dist/substrate/runtime/capability-sinks/service.mjs +74 -0
  609. package/dist/substrate/runtime/capability-sinks/service.mjs.map +1 -0
  610. package/dist/substrate/runtime/config-validation.d.mts +38 -0
  611. package/dist/substrate/runtime/config-validation.mjs +137 -0
  612. package/dist/substrate/runtime/config-validation.mjs.map +1 -0
  613. package/dist/substrate/runtime/context-helpers.mjs +32 -0
  614. package/dist/substrate/runtime/context-helpers.mjs.map +1 -0
  615. package/dist/substrate/runtime/cross-process/command-channel/channel.mjs +128 -0
  616. package/dist/substrate/runtime/cross-process/command-channel/channel.mjs.map +1 -0
  617. package/dist/substrate/runtime/cross-process/command-channel/file-channel.mjs +136 -0
  618. package/dist/substrate/runtime/cross-process/command-channel/file-channel.mjs.map +1 -0
  619. package/dist/substrate/runtime/cross-process/command-channel/protocol.mjs +49 -0
  620. package/dist/substrate/runtime/cross-process/command-channel/protocol.mjs.map +1 -0
  621. package/dist/substrate/runtime/cross-process/command-channel/runtime-control-lock.mjs +9 -0
  622. package/dist/substrate/runtime/cross-process/command-channel/runtime-control-lock.mjs.map +1 -0
  623. package/dist/substrate/runtime/cross-process/liveness.mjs +119 -0
  624. package/dist/substrate/runtime/cross-process/liveness.mjs.map +1 -0
  625. package/dist/substrate/runtime/cross-process/roster.mjs +275 -0
  626. package/dist/substrate/runtime/cross-process/roster.mjs.map +1 -0
  627. package/dist/substrate/runtime/cross-process/snapshot-reservation.d.mts +1 -0
  628. package/dist/substrate/runtime/cross-process/snapshot-reservation.mjs +117 -0
  629. package/dist/substrate/runtime/cross-process/snapshot-reservation.mjs.map +1 -0
  630. package/dist/substrate/runtime/cross-process/stack-lock.d.mts +1 -0
  631. package/dist/substrate/runtime/cross-process/stack-lock.mjs +142 -0
  632. package/dist/substrate/runtime/cross-process/stack-lock.mjs.map +1 -0
  633. package/dist/substrate/runtime/current-plugin.mjs +15 -0
  634. package/dist/substrate/runtime/current-plugin.mjs.map +1 -0
  635. package/dist/substrate/runtime/errors.d.mts +1 -0
  636. package/dist/substrate/runtime/errors.mjs +76 -0
  637. package/dist/substrate/runtime/errors.mjs.map +1 -0
  638. package/dist/substrate/runtime/host-tree-tar/index.mjs +364 -0
  639. package/dist/substrate/runtime/host-tree-tar/index.mjs.map +1 -0
  640. package/dist/substrate/runtime/http-probe.d.mts +35 -0
  641. package/dist/substrate/runtime/http-probe.mjs +65 -0
  642. package/dist/substrate/runtime/http-probe.mjs.map +1 -0
  643. package/dist/substrate/runtime/lease-broker/index.d.mts +1 -0
  644. package/dist/substrate/runtime/lease-broker/service.d.mts +64 -0
  645. package/dist/substrate/runtime/lease-broker/service.mjs +155 -0
  646. package/dist/substrate/runtime/lease-broker/service.mjs.map +1 -0
  647. package/dist/substrate/runtime/lifecycle/dep-graph.d.mts +1 -0
  648. package/dist/substrate/runtime/lifecycle/dep-graph.mjs +138 -0
  649. package/dist/substrate/runtime/lifecycle/dep-graph.mjs.map +1 -0
  650. package/dist/substrate/runtime/lifecycle/index.d.mts +1 -0
  651. package/dist/substrate/runtime/lifecycle/lifecycle-fact.mjs +31 -0
  652. package/dist/substrate/runtime/lifecycle/lifecycle-fact.mjs.map +1 -0
  653. package/dist/substrate/runtime/lifecycle/plugin-registry.d.mts +1 -0
  654. package/dist/substrate/runtime/lifecycle/plugin-registry.mjs +133 -0
  655. package/dist/substrate/runtime/lifecycle/plugin-registry.mjs.map +1 -0
  656. package/dist/substrate/runtime/lifecycle/ready-gate.d.mts +1 -0
  657. package/dist/substrate/runtime/lifecycle/ready-gate.mjs +34 -0
  658. package/dist/substrate/runtime/lifecycle/ready-gate.mjs.map +1 -0
  659. package/dist/substrate/runtime/lifecycle/selective-restart.d.mts +1 -0
  660. package/dist/substrate/runtime/lifecycle/selective-restart.mjs +43 -0
  661. package/dist/substrate/runtime/lifecycle/selective-restart.mjs.map +1 -0
  662. package/dist/substrate/runtime/lifecycle/signals.d.mts +1 -0
  663. package/dist/substrate/runtime/lifecycle/signals.mjs +64 -0
  664. package/dist/substrate/runtime/lifecycle/signals.mjs.map +1 -0
  665. package/dist/substrate/runtime/lifecycle/state-machine.d.mts +1 -0
  666. package/dist/substrate/runtime/lifecycle/state-machine.mjs +38 -0
  667. package/dist/substrate/runtime/lifecycle/state-machine.mjs.map +1 -0
  668. package/dist/substrate/runtime/lifecycle/watch-attribution.d.mts +1 -0
  669. package/dist/substrate/runtime/lifecycle/watch-attribution.mjs +27 -0
  670. package/dist/substrate/runtime/lifecycle/watch-attribution.mjs.map +1 -0
  671. package/dist/substrate/runtime/managed-container.d.mts +30 -0
  672. package/dist/substrate/runtime/managed-container.mjs +32 -0
  673. package/dist/substrate/runtime/managed-container.mjs.map +1 -0
  674. package/dist/substrate/runtime/manifest/manifest.mjs +73 -0
  675. package/dist/substrate/runtime/manifest/manifest.mjs.map +1 -0
  676. package/dist/substrate/runtime/mode-errors.d.mts +36 -0
  677. package/dist/substrate/runtime/observability/cascade-formatter.d.mts +1 -0
  678. package/dist/substrate/runtime/observability/cascade-formatter.mjs +135 -0
  679. package/dist/substrate/runtime/observability/cascade-formatter.mjs.map +1 -0
  680. package/dist/substrate/runtime/observability/formatter-registry.d.mts +1 -0
  681. package/dist/substrate/runtime/observability/formatter-registry.mjs +65 -0
  682. package/dist/substrate/runtime/observability/formatter-registry.mjs.map +1 -0
  683. package/dist/substrate/runtime/observability/index.d.mts +3 -0
  684. package/dist/substrate/runtime/observability/logger.d.mts +58 -0
  685. package/dist/substrate/runtime/observability/logger.mjs +89 -0
  686. package/dist/substrate/runtime/observability/logger.mjs.map +1 -0
  687. package/dist/substrate/runtime/observability/pretty-error.d.mts +1 -0
  688. package/dist/substrate/runtime/observability/pretty-error.mjs +119 -0
  689. package/dist/substrate/runtime/observability/pretty-error.mjs.map +1 -0
  690. package/dist/substrate/runtime/observability/process-lines.d.mts +31 -0
  691. package/dist/substrate/runtime/observability/process-lines.mjs +40 -0
  692. package/dist/substrate/runtime/observability/process-lines.mjs.map +1 -0
  693. package/dist/substrate/runtime/observability/redaction.d.mts +28 -0
  694. package/dist/substrate/runtime/observability/redaction.mjs +45 -0
  695. package/dist/substrate/runtime/observability/redaction.mjs.map +1 -0
  696. package/dist/substrate/runtime/observability/spans.d.mts +1 -0
  697. package/dist/substrate/runtime/observability/spans.mjs +87 -0
  698. package/dist/substrate/runtime/observability/spans.mjs.map +1 -0
  699. package/dist/substrate/runtime/observability/subprocess-capture.d.mts +2 -0
  700. package/dist/substrate/runtime/observability/subprocess-capture.mjs +82 -0
  701. package/dist/substrate/runtime/observability/subprocess-capture.mjs.map +1 -0
  702. package/dist/substrate/runtime/paths.d.mts +17 -0
  703. package/dist/substrate/runtime/paths.mjs +61 -0
  704. package/dist/substrate/runtime/paths.mjs.map +1 -0
  705. package/dist/substrate/runtime/port-broker/index.d.mts +1 -0
  706. package/dist/substrate/runtime/port-broker/service.d.mts +1 -0
  707. package/dist/substrate/runtime/port-broker/service.mjs +319 -0
  708. package/dist/substrate/runtime/port-broker/service.mjs.map +1 -0
  709. package/dist/substrate/runtime/post-acquire-tasks.d.mts +1 -0
  710. package/dist/substrate/runtime/post-acquire-tasks.mjs +34 -0
  711. package/dist/substrate/runtime/post-acquire-tasks.mjs.map +1 -0
  712. package/dist/substrate/runtime/probes.d.mts +51 -0
  713. package/dist/substrate/runtime/probes.mjs +84 -0
  714. package/dist/substrate/runtime/probes.mjs.map +1 -0
  715. package/dist/substrate/runtime/process-supervisor.d.mts +57 -0
  716. package/dist/substrate/runtime/process-supervisor.mjs +73 -0
  717. package/dist/substrate/runtime/process-supervisor.mjs.map +1 -0
  718. package/dist/substrate/runtime/projection/operational-endpoints.mjs +44 -0
  719. package/dist/substrate/runtime/projection/operational-endpoints.mjs.map +1 -0
  720. package/dist/substrate/runtime/projection/persisted.mjs +195 -0
  721. package/dist/substrate/runtime/projection/persisted.mjs.map +1 -0
  722. package/dist/substrate/runtime/projection/state-ref.mjs +48 -0
  723. package/dist/substrate/runtime/projection/state-ref.mjs.map +1 -0
  724. package/dist/substrate/runtime/projection/update.mjs +200 -0
  725. package/dist/substrate/runtime/projection/update.mjs.map +1 -0
  726. package/dist/substrate/runtime/retry-policy.d.mts +18 -0
  727. package/dist/substrate/runtime/retry-policy.mjs +16 -0
  728. package/dist/substrate/runtime/retry-policy.mjs.map +1 -0
  729. package/dist/substrate/runtime/run.mjs +86 -0
  730. package/dist/substrate/runtime/run.mjs.map +1 -0
  731. package/dist/substrate/runtime/runtime-decode.d.mts +32 -0
  732. package/dist/substrate/runtime/runtime-decode.mjs +53 -0
  733. package/dist/substrate/runtime/runtime-decode.mjs.map +1 -0
  734. package/dist/substrate/runtime/scoped-http-server.mjs +36 -0
  735. package/dist/substrate/runtime/scoped-http-server.mjs.map +1 -0
  736. package/dist/substrate/runtime/scoped-ref-map/service.mjs +83 -0
  737. package/dist/substrate/runtime/scoped-ref-map/service.mjs.map +1 -0
  738. package/dist/substrate/runtime/stage-and-swap/index.d.mts +1 -0
  739. package/dist/substrate/runtime/stage-and-swap/index.mjs +131 -0
  740. package/dist/substrate/runtime/stage-and-swap/index.mjs.map +1 -0
  741. package/dist/substrate/runtime/state-store/schema.mjs +36 -0
  742. package/dist/substrate/runtime/state-store/schema.mjs.map +1 -0
  743. package/dist/substrate/runtime/strategy-registry/chain-probe-for.d.mts +1 -0
  744. package/dist/substrate/runtime/strategy-registry/chain-probe-for.mjs +22 -0
  745. package/dist/substrate/runtime/strategy-registry/chain-probe-for.mjs.map +1 -0
  746. package/dist/substrate/runtime/strategy-registry/faucet-capability-for.d.mts +1 -0
  747. package/dist/substrate/runtime/strategy-registry/faucet-capability-for.mjs +30 -0
  748. package/dist/substrate/runtime/strategy-registry/faucet-capability-for.mjs.map +1 -0
  749. package/dist/substrate/runtime/strategy-registry/index.d.mts +1 -0
  750. package/dist/substrate/runtime/strategy-registry/service.d.mts +1 -0
  751. package/dist/substrate/runtime/strategy-registry/service.mjs +67 -0
  752. package/dist/substrate/runtime/strategy-registry/service.mjs.map +1 -0
  753. package/dist/substrate/runtime/sui-execute/index.d.mts +11 -0
  754. package/dist/substrate/runtime/sui-execute/index.mjs +144 -0
  755. package/dist/substrate/runtime/sui-execute/index.mjs.map +1 -0
  756. package/dist/substrate/runtime/sui-move-build/index.d.mts +1 -0
  757. package/dist/substrate/runtime/sui-move-build/index.mjs +283 -0
  758. package/dist/substrate/runtime/sui-move-build/index.mjs.map +1 -0
  759. package/dist/substrate/runtime/supervisor.d.mts +1 -0
  760. package/dist/substrate/runtime/supervisor.mjs +831 -0
  761. package/dist/substrate/runtime/supervisor.mjs.map +1 -0
  762. package/dist/surfaces/cli/command-tree.mjs +276 -0
  763. package/dist/surfaces/cli/command-tree.mjs.map +1 -0
  764. package/dist/surfaces/cli/commands/config.mjs +31 -0
  765. package/dist/surfaces/cli/commands/config.mjs.map +1 -0
  766. package/dist/surfaces/cli/commands/confirm-node.mjs +26 -0
  767. package/dist/surfaces/cli/commands/confirm-node.mjs.map +1 -0
  768. package/dist/surfaces/cli/commands/confirm.mjs +26 -0
  769. package/dist/surfaces/cli/commands/confirm.mjs.map +1 -0
  770. package/dist/surfaces/cli/commands/doctor-probes.mjs +452 -0
  771. package/dist/surfaces/cli/commands/doctor-probes.mjs.map +1 -0
  772. package/dist/surfaces/cli/commands/doctor.mjs +38 -0
  773. package/dist/surfaces/cli/commands/doctor.mjs.map +1 -0
  774. package/dist/surfaces/cli/commands/prune-picker.mjs +347 -0
  775. package/dist/surfaces/cli/commands/prune-picker.mjs.map +1 -0
  776. package/dist/surfaces/cli/commands/prune.mjs +178 -0
  777. package/dist/surfaces/cli/commands/prune.mjs.map +1 -0
  778. package/dist/surfaces/cli/commands/snapshot.mjs +141 -0
  779. package/dist/surfaces/cli/commands/snapshot.mjs.map +1 -0
  780. package/dist/surfaces/cli/commands/status.mjs +95 -0
  781. package/dist/surfaces/cli/commands/status.mjs.map +1 -0
  782. package/dist/surfaces/cli/commands/supervisor-presence.mjs +33 -0
  783. package/dist/surfaces/cli/commands/supervisor-presence.mjs.map +1 -0
  784. package/dist/surfaces/cli/commands/wipe.mjs +28 -0
  785. package/dist/surfaces/cli/commands/wipe.mjs.map +1 -0
  786. package/dist/surfaces/cli/envelope.mjs +43 -0
  787. package/dist/surfaces/cli/envelope.mjs.map +1 -0
  788. package/dist/surfaces/cli/errors.mjs +110 -0
  789. package/dist/surfaces/cli/errors.mjs.map +1 -0
  790. package/dist/surfaces/cli/flags.mjs +56 -0
  791. package/dist/surfaces/cli/flags.mjs.map +1 -0
  792. package/dist/surfaces/cli/index.mjs +418 -0
  793. package/dist/surfaces/cli/index.mjs.map +1 -0
  794. package/dist/surfaces/cli/output.mjs +115 -0
  795. package/dist/surfaces/cli/output.mjs.map +1 -0
  796. package/dist/surfaces/cli/sysexits.mjs +139 -0
  797. package/dist/surfaces/cli/sysexits.mjs.map +1 -0
  798. package/dist/surfaces/tui/app.mjs +104 -0
  799. package/dist/surfaces/tui/app.mjs.map +1 -0
  800. package/dist/surfaces/tui/dashboard.mjs +261 -0
  801. package/dist/surfaces/tui/dashboard.mjs.map +1 -0
  802. package/dist/surfaces/tui/display-derivation.mjs +395 -0
  803. package/dist/surfaces/tui/display-derivation.mjs.map +1 -0
  804. package/dist/surfaces/tui/errors.mjs +11 -0
  805. package/dist/surfaces/tui/errors.mjs.map +1 -0
  806. package/dist/surfaces/tui/event-log.mjs +155 -0
  807. package/dist/surfaces/tui/event-log.mjs.map +1 -0
  808. package/dist/surfaces/tui/heartbeat.mjs +33 -0
  809. package/dist/surfaces/tui/heartbeat.mjs.map +1 -0
  810. package/dist/surfaces/tui/index.mjs +50 -0
  811. package/dist/surfaces/tui/index.mjs.map +1 -0
  812. package/dist/surfaces/tui/input.mjs +104 -0
  813. package/dist/surfaces/tui/input.mjs.map +1 -0
  814. package/dist/surfaces/tui/mode-detect.mjs +32 -0
  815. package/dist/surfaces/tui/mode-detect.mjs.map +1 -0
  816. package/dist/surfaces/tui/mount-ink.mjs +31 -0
  817. package/dist/surfaces/tui/mount-ink.mjs.map +1 -0
  818. package/dist/surfaces/tui/plain-renderer.mjs +170 -0
  819. package/dist/surfaces/tui/plain-renderer.mjs.map +1 -0
  820. package/dist/surfaces/tui/resource-table.mjs +507 -0
  821. package/dist/surfaces/tui/resource-table.mjs.map +1 -0
  822. package/images/_shared/signal-forward.sh +77 -0
  823. package/images/postgres/Dockerfile +32 -0
  824. package/images/seal/Dockerfile +68 -0
  825. package/images/seal/entrypoint.sh +65 -0
  826. package/images/sui/Dockerfile +73 -0
  827. package/images/sui/entrypoint.sh +244 -0
  828. package/images/sui-fork/Dockerfile +53 -0
  829. package/images/sui-fork/entrypoint.sh +51 -0
  830. package/images/walrus/Dockerfile +122 -0
  831. package/images/walrus/deploy-walrus.sh +305 -0
  832. package/images/walrus/run-walrus.sh +53 -0
  833. package/package.json +94 -0
@@ -0,0 +1,60 @@
1
+ import { suiPluginError } from "../errors.mjs";
2
+ import { assembleSuiClient, buildWaitForTransactionsReady, fetchChainId, makeResolvedNetwork, noopWaitForTransactionsReady } from "./shared-boot.mjs";
3
+ import { Duration, Effect } from "effect";
4
+ import { SuiGrpcClient } from "@mysten/sui/grpc";
5
+ //#region src/plugins/sui/mode/external.ts
6
+ /** Default chain-id fetch timeout for caller-owned local RPCs. The wire
7
+ * latency is the dominant cost; 30s is the documented ceiling. */
8
+ const DEFAULT_EXTERNAL_CHAIN_ID_TIMEOUT = Duration.seconds(30);
9
+ /** Build the local-RPC-mode boot Effect. No container, no sidecar,
10
+ * no build image. Just probe chain id + wire `waitForTransactionsReady`
11
+ * conditional on `faucetUrl`. */
12
+ const bootLocalRpcMode = (opts) => Effect.gen(function* () {
13
+ const sdkClient = yield* Effect.try({
14
+ try: () => new SuiGrpcClient({
15
+ baseUrl: opts.rpcUrl,
16
+ network: "localnet"
17
+ }),
18
+ catch: (cause) => suiPluginError("chain-id-fetch", `sui local-rpc mode: SuiGrpcClient construction failed for rpcUrl=${opts.rpcUrl}: ${stringifyCause(cause)}`, cause)
19
+ });
20
+ const chain = opts.chain ?? (yield* fetchChainId(sdkClient, {
21
+ timeout: opts.readyTimeout ?? DEFAULT_EXTERNAL_CHAIN_ID_TIMEOUT,
22
+ span: "devstack.plugin.sui.localRpc.fetchChainId"
23
+ }));
24
+ const waitForTransactionsReady = opts.faucetUrl !== void 0 ? yield* buildWaitForTransactionsReady(opts.faucetUrl) : noopWaitForTransactionsReady;
25
+ const { client } = assembleSuiClient({
26
+ sdkClient,
27
+ chain,
28
+ rpcUrl: opts.rpcUrl,
29
+ ...opts.faucetUrl !== void 0 ? { faucetUrl: opts.faucetUrl } : {},
30
+ ...opts.graphqlUrl !== void 0 ? { graphqlUrl: opts.graphqlUrl } : {},
31
+ waitForTransactionsReady
32
+ });
33
+ return {
34
+ resolved: makeResolvedNetwork({
35
+ mode: "local-rpc",
36
+ chain,
37
+ rpc: opts.rpcUrl,
38
+ source: "config",
39
+ ...opts.faucetUrl !== void 0 ? { faucet: opts.faucetUrl } : {},
40
+ ...opts.graphqlUrl !== void 0 ? { graphql: opts.graphqlUrl } : {}
41
+ }),
42
+ client
43
+ };
44
+ }).pipe(Effect.withSpan("devstack.plugin.sui.localRpc.boot", { attributes: {
45
+ "devstack.plugin": "sui",
46
+ "sui.mode": "local-rpc"
47
+ } }));
48
+ const stringifyCause = (cause) => {
49
+ if (cause instanceof Error) return cause.message;
50
+ if (typeof cause === "string") return cause;
51
+ try {
52
+ return JSON.stringify(cause);
53
+ } catch {
54
+ return String(cause);
55
+ }
56
+ };
57
+ //#endregion
58
+ export { bootLocalRpcMode };
59
+
60
+ //# sourceMappingURL=external.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"external.mjs","names":[],"sources":["../../../../src/plugins/sui/mode/external.ts"],"sourcesContent":["// Sui plugin — local caller-owned RPC mode.\n//\n// Caller already has a Sui process running and supplies the RPC URL\n// (optionally faucet and GraphQL). Used in CI, custom-runtime\n// experiments, and \"wrap my own sui localnet\" scenarios.\n//\n// What's hard:\n// - The entire container + sidecar + build-container pipeline\n// must be skipped cleanly. No image build, no docker network,\n// no SuiBuildImage wired in.\n// - Downstream consumers must still get the same endpoint shape,\n// the same chain id, and a working `waitForTransactionsReady`\n// when a faucet URL is supplied.\n// - The chain-id fetch IS the only readiness sentinel; must have\n// a bounded timeout.\n//\n// Local-RPC mode contributes a `NetworkResolver` and a `ChainProbe`\n// but does NOT contribute a `Snapshotable`-managed container or a\n// `Routable` entrypoint (the caller's own router fronts the RPC).\n//\n// Boot sequence:\n//\n// 1. Construct an `@mysten/sui/grpc` `SuiGrpcClient` against the\n// caller-supplied `rpcUrl`. `network: 'localnet'` is the\n// semantically-correct discriminator — external IS a local-mode\n// sub-shape, not a public-net target.\n// 2. Fetch the chain identifier with a bounded timeout — the only\n// readiness sentinel for this mode.\n// 3. Build `waitForTransactionsReady`:\n// - If `faucetUrl` is supplied, wire the real HTTP probe\n// (same code path as local mode).\n// - Otherwise, the gate is a trivially-succeeding no-op\n// (callers that need funds must arrange them externally).\n// 4. Assemble the resolved `SuiClient` and return it alongside the\n// `ResolvedSuiNetwork` projection (consumed by the codegen +\n// network-resolver contributions at the barrel).\n\nimport { Duration, Effect, type Scope } from 'effect';\n\nimport { SuiGrpcClient } from '@mysten/sui/grpc';\n\nimport { suiPluginError, type SuiPluginError } from '../errors.ts';\nimport type { ResolvedSuiNetwork } from '../network-resolver.ts';\nimport type { SuiClient } from './shared.ts';\nimport {\n\tassembleSuiClient,\n\tbuildWaitForTransactionsReady,\n\tfetchChainId,\n\tmakeResolvedNetwork,\n\tnoopWaitForTransactionsReady,\n} from './shared-boot.ts';\nimport type { SuiLocalRpcOptions } from './spec.ts';\n\n/** Default chain-id fetch timeout for caller-owned local RPCs. The wire\n * latency is the dominant cost; 30s is the documented ceiling. */\nexport const DEFAULT_EXTERNAL_CHAIN_ID_TIMEOUT = Duration.seconds(30);\n\n/** Resolved local-RPC-mode boot artifacts. */\nexport interface LocalRpcModeBootResult {\n\treadonly resolved: ResolvedSuiNetwork;\n\treadonly client: SuiClient;\n}\n\n/** Build the local-RPC-mode boot Effect. No container, no sidecar,\n * no build image. Just probe chain id + wire `waitForTransactionsReady`\n * conditional on `faucetUrl`. */\nexport const bootLocalRpcMode = (\n\topts: SuiLocalRpcOptions,\n): Effect.Effect<LocalRpcModeBootResult, SuiPluginError, Scope.Scope> =>\n\tEffect.gen(function* () {\n\t\t// ----- 1. Construct the grpc client ----------------------------------\n\t\t// `network: 'localnet'` is semantically correct: external is a\n\t\t// substrate-level `'local'` sub-mode (caller's own localnet); the\n\t\t// SDK uses `network` for MVR / wallet-standard hints which the\n\t\t// caller-provided RPC won't honor anyway.\n\t\tconst sdkClient = yield* Effect.try({\n\t\t\ttry: () =>\n\t\t\t\tnew SuiGrpcClient({\n\t\t\t\t\tbaseUrl: opts.rpcUrl,\n\t\t\t\t\tnetwork: 'localnet',\n\t\t\t\t}),\n\t\t\tcatch: (cause): SuiPluginError =>\n\t\t\t\tsuiPluginError(\n\t\t\t\t\t'chain-id-fetch',\n\t\t\t\t\t`sui local-rpc mode: SuiGrpcClient construction failed for rpcUrl=${opts.rpcUrl}: ${stringifyCause(cause)}`,\n\t\t\t\t\tcause,\n\t\t\t\t),\n\t\t});\n\n\t\t// ----- 2. Resolve chain id -------------------------------------------\n\t\tconst chain =\n\t\t\topts.chain ??\n\t\t\t(yield* fetchChainId(sdkClient, {\n\t\t\t\ttimeout: opts.readyTimeout ?? DEFAULT_EXTERNAL_CHAIN_ID_TIMEOUT,\n\t\t\t\tspan: 'devstack.plugin.sui.localRpc.fetchChainId',\n\t\t\t}));\n\n\t\t// ----- 3. Build waitForTransactionsReady -----------------------------\n\t\t// Faucet-bearing: real HTTP probe. Faucet-less: no-op (caller\n\t\t// must arrange funding out-of-band).\n\t\tconst waitForTransactionsReady =\n\t\t\topts.faucetUrl !== undefined\n\t\t\t\t? yield* buildWaitForTransactionsReady(opts.faucetUrl)\n\t\t\t\t: noopWaitForTransactionsReady;\n\n\t\t// ----- 4. Assemble + return ------------------------------------------\n\t\tconst { client } = assembleSuiClient({\n\t\t\tsdkClient,\n\t\t\tchain,\n\t\t\trpcUrl: opts.rpcUrl,\n\t\t\t...(opts.faucetUrl !== undefined ? { faucetUrl: opts.faucetUrl } : {}),\n\t\t\t...(opts.graphqlUrl !== undefined ? { graphqlUrl: opts.graphqlUrl } : {}),\n\t\t\twaitForTransactionsReady,\n\t\t});\n\t\tconst resolved = makeResolvedNetwork({\n\t\t\tmode: 'local-rpc',\n\t\t\tchain,\n\t\t\trpc: opts.rpcUrl,\n\t\t\tsource: 'config',\n\t\t\t...(opts.faucetUrl !== undefined ? { faucet: opts.faucetUrl } : {}),\n\t\t\t...(opts.graphqlUrl !== undefined ? { graphql: opts.graphqlUrl } : {}),\n\t\t});\n\n\t\treturn { resolved, client };\n\t}).pipe(\n\t\tEffect.withSpan('devstack.plugin.sui.localRpc.boot', {\n\t\t\tattributes: { 'devstack.plugin': 'sui', 'sui.mode': 'local-rpc' },\n\t\t}),\n\t);\n\nconst stringifyCause = (cause: unknown): string => {\n\tif (cause instanceof Error) return cause.message;\n\tif (typeof cause === 'string') return cause;\n\ttry {\n\t\treturn JSON.stringify(cause);\n\t} catch {\n\t\treturn String(cause);\n\t}\n};\n"],"mappings":";;;;;;;AAuDA,MAAa,oCAAoC,SAAS,QAAQ,GAAG;;;;AAWrE,MAAa,oBACZ,SAEA,OAAO,IAAI,aAAa;CAMvB,MAAM,YAAY,OAAO,OAAO,IAAI;EACnC,WACC,IAAI,cAAc;GACjB,SAAS,KAAK;GACd,SAAS;GACT,CAAC;EACH,QAAQ,UACP,eACC,kBACA,oEAAoE,KAAK,OAAO,IAAI,eAAe,MAAM,IACzG,MACA;EACF,CAAC;CAGF,MAAM,QACL,KAAK,UACJ,OAAO,aAAa,WAAW;EAC/B,SAAS,KAAK,gBAAgB;EAC9B,MAAM;EACN,CAAC;CAKH,MAAM,2BACL,KAAK,cAAc,KAAA,IAChB,OAAO,8BAA8B,KAAK,UAAU,GACpD;CAGJ,MAAM,EAAE,WAAW,kBAAkB;EACpC;EACA;EACA,QAAQ,KAAK;EACb,GAAI,KAAK,cAAc,KAAA,IAAY,EAAE,WAAW,KAAK,WAAW,GAAG,EAAE;EACrE,GAAI,KAAK,eAAe,KAAA,IAAY,EAAE,YAAY,KAAK,YAAY,GAAG,EAAE;EACxE;EACA,CAAC;AAUF,QAAO;EAAE,UATQ,oBAAoB;GACpC,MAAM;GACN;GACA,KAAK,KAAK;GACV,QAAQ;GACR,GAAI,KAAK,cAAc,KAAA,IAAY,EAAE,QAAQ,KAAK,WAAW,GAAG,EAAE;GAClE,GAAI,KAAK,eAAe,KAAA,IAAY,EAAE,SAAS,KAAK,YAAY,GAAG,EAAE;GACrE,CAEgB;EAAE;EAAQ;EAC1B,CAAC,KACF,OAAO,SAAS,qCAAqC,EACpD,YAAY;CAAE,mBAAmB;CAAO,YAAY;CAAa,EACjE,CAAC,CACF;AAEF,MAAM,kBAAkB,UAA2B;AAClD,KAAI,iBAAiB,MAAO,QAAO,MAAM;AACzC,KAAI,OAAO,UAAU,SAAU,QAAO;AACtC,KAAI;AACH,SAAO,KAAK,UAAU,MAAM;SACrB;AACP,SAAO,OAAO,MAAM"}
@@ -0,0 +1,283 @@
1
+ import { renderUrl, routerHostname } from "../../../orchestrators/router/hostname.mjs";
2
+ import { ProbeTimeoutError, waitForProbe } from "../../../substrate/runtime/probes.mjs";
3
+ import { suiPluginError } from "../errors.mjs";
4
+ import { toDockerHostGatewayUrl } from "./shared.mjs";
5
+ import { assembleSuiClient, fetchChainId, makeResolvedNetwork, noopWaitForTransactionsReady } from "./shared-boot.mjs";
6
+ import { ensureManagedContainer } from "../../../substrate/runtime/managed-container.mjs";
7
+ import { resolveAutoTickIntervalMs, runAutoTickClock } from "../auto-tick.mjs";
8
+ import { SUI_RPC_ENTRYPOINT_PORT } from "../routable.mjs";
9
+ import { wrapWithForkGuard } from "../fork-orchestration.mjs";
10
+ import { verifyForkImpersonationSender } from "../fork-transaction.mjs";
11
+ import { DEFAULT_SUI_CLI_VERSION } from "../../../substrate/runtime/sui-move-build/index.mjs";
12
+ import { Duration, Effect } from "effect";
13
+ import { createHash } from "node:crypto";
14
+ import { join, resolve } from "node:path";
15
+ import { SuiGrpcClient } from "@mysten/sui/grpc";
16
+ import { mkdir } from "node:fs/promises";
17
+ import { normalizeSuiAddress, normalizeSuiObjectId } from "@mysten/sui/utils";
18
+ //#region src/plugins/sui/mode/fork.ts
19
+ /** Default ready-probe timeout for fork-mode cold start. */
20
+ const DEFAULT_FORK_READY_TIMEOUT = Duration.seconds(180);
21
+ /** Default Sui repository revision used by the bundled `sui-fork` image build. */
22
+ const DEFAULT_SUI_FORK_REV = "62ee6ada958cd61b3c8a4466dd33c9aba3cdff8a";
23
+ const DEFAULT_FORK_HOST_RPC_PORT = 51002;
24
+ const DOCKER_PUBLISH_HOST = "0.0.0.0";
25
+ const CONTAINER_RPC_PORT = SUI_RPC_ENTRYPOINT_PORT;
26
+ const FORK_CONTAINER_DATA_DIR = "/var/lib/sui-fork";
27
+ const PROBE_ATTEMPT_TIMEOUT_MS = 3e3;
28
+ const bootForkMode = (runtime, identity, portBroker, paths, opts) => Effect.gen(function* () {
29
+ const autoTickIntervalMs = resolveAutoTickIntervalMs(opts.autoTick);
30
+ const image = yield* resolveForkImage(runtime, opts);
31
+ const dataDir = yield* ensureForkDataDir(paths, opts);
32
+ const { handle, ports } = yield* ensureForkContainer({
33
+ runtime,
34
+ portBroker,
35
+ image,
36
+ labels: {
37
+ app: identity.app,
38
+ stack: identity.stack,
39
+ plugin: "sui",
40
+ role: "fork-validator"
41
+ },
42
+ containerName: `devstack-${identity.app}-${identity.stack}-sui-fork`,
43
+ dataDir,
44
+ opts
45
+ });
46
+ const directRpcUrl = `http://127.0.0.1:${pickPublishedPort(ports, handle.ports).hostPort}`;
47
+ const rpcUrl = yield* routedSuiRpcUrl(identity);
48
+ const sdkClient = new SuiGrpcClient({
49
+ baseUrl: directRpcUrl,
50
+ network: opts.upstream
51
+ });
52
+ const status = yield* waitForForkReady(sdkClient, opts.readyTimeout ?? DEFAULT_FORK_READY_TIMEOUT).pipe(Effect.annotateLogs({ "sui.container": handle.name }));
53
+ const chain = yield* fetchChainId(sdkClient, { span: "devstack.plugin.sui.fork.fetchChainId" });
54
+ const fork = makeForkAdminSurface(sdkClient);
55
+ const assembled = assembleSuiClient({
56
+ sdkClient,
57
+ chain,
58
+ rpcUrl,
59
+ waitForTransactionsReady: noopWaitForTransactionsReady,
60
+ buildImage: image,
61
+ hostGateway: {
62
+ rpcUrl: toDockerHostGatewayUrl(directRpcUrl),
63
+ faucetUrl: null,
64
+ graphqlUrl: null
65
+ }
66
+ });
67
+ const client = {
68
+ ...assembled.client,
69
+ sdk: wrapWithForkGuard(assembled.sdkShim),
70
+ fork
71
+ };
72
+ if (autoTickIntervalMs !== void 0) yield* runAutoTickClock(fork, autoTickIntervalMs);
73
+ return {
74
+ resolved: makeResolvedNetwork({
75
+ mode: "fork",
76
+ chain,
77
+ rpc: rpcUrl,
78
+ source: "default",
79
+ checkpoint: status.forkedAtCheckpoint,
80
+ forkUpstream: opts.upstream
81
+ }),
82
+ client,
83
+ autoTickIntervalMs
84
+ };
85
+ }).pipe(Effect.withSpan("devstack.plugin.sui.fork.boot", { attributes: { "devstack.plugin": "sui" } }));
86
+ const suiForkImageBuildContext = (rev = DEFAULT_SUI_FORK_REV) => ({
87
+ contextPath: new URL("../../../../images/", import.meta.url).pathname,
88
+ dockerfile: "sui-fork/Dockerfile",
89
+ buildArgs: {
90
+ SUI_FORK_REV: rev,
91
+ SUI_CLI_VERSION: DEFAULT_SUI_CLI_VERSION
92
+ }
93
+ });
94
+ const resolveForkImage = (runtime, opts) => Effect.gen(function* () {
95
+ if (opts.image && "pull" in opts.image) {
96
+ const pullRef = opts.image.pull;
97
+ if (runtime.pullImage === void 0) return yield* Effect.fail(suiPluginError("image-build", `sui fork mode cannot pull image '${pullRef}' because the configured container runtime does not expose image pulls.`));
98
+ return yield* runtime.pullImage(pullRef).pipe(Effect.mapError((cause) => suiPluginError("image-build", `sui fork mode failed to pull image '${pullRef}': ${cause.reason}: ${cause.detail}`, cause)));
99
+ }
100
+ const rev = opts.version ?? "62ee6ada958cd61b3c8a4466dd33c9aba3cdff8a";
101
+ const buildCtx = opts.image && "build" in opts.image ? {
102
+ contextPath: opts.image.build.context,
103
+ dockerfile: opts.image.build.dockerfile ?? "Dockerfile",
104
+ buildArgs: {
105
+ SUI_FORK_REV: rev,
106
+ SUI_CLI_VERSION: DEFAULT_SUI_CLI_VERSION
107
+ }
108
+ } : suiForkImageBuildContext(rev);
109
+ return yield* runtime.ensureImage(buildCtx).pipe(Effect.mapError((cause) => suiPluginError("image-build", `sui fork image build failed: ${cause.reason}: ${cause.detail}`, cause)));
110
+ }).pipe(Effect.withSpan("devstack.plugin.sui.fork.resolveImage"));
111
+ const ensureForkContainer = (params) => Effect.gen(function* () {
112
+ const reusable = params.opts.ports === void 0 ? yield* findReusableForkPort(params.runtime, params.labels, params.containerName) : void 0;
113
+ const ports = reusable === void 0 ? [yield* allocateForkRpcPort(params.portBroker, params.opts.ports)] : [reusable];
114
+ const reconciliation = reusable === void 0 && params.opts.ports !== void 0 ? "exact" : "adopt-existing";
115
+ const command = forkStartCommand(params.opts);
116
+ return {
117
+ handle: yield* ensureManagedContainer({
118
+ runtime: params.runtime,
119
+ labels: params.labels,
120
+ spec: {
121
+ name: params.containerName,
122
+ image: params.image,
123
+ recreate: "on-config-change",
124
+ configHash: forkContainerConfigHash(params.opts, params.dataDir, command),
125
+ stopGraceSeconds: 30,
126
+ ports,
127
+ portBindingReconciliation: reconciliation,
128
+ mounts: [{
129
+ source: params.dataDir,
130
+ target: FORK_CONTAINER_DATA_DIR
131
+ }],
132
+ command
133
+ },
134
+ mapError: (cause) => cause
135
+ }).pipe(Effect.mapError((cause) => suiPluginError("container-start", `sui-fork container failed: ${cause.reason}: ${cause.detail}`, cause))),
136
+ ports
137
+ };
138
+ });
139
+ const forkStartCommand = (opts) => {
140
+ const seed = normalizeForkSeed(opts);
141
+ const command = [
142
+ "start",
143
+ "--network",
144
+ opts.upstream,
145
+ "--data-dir",
146
+ FORK_CONTAINER_DATA_DIR,
147
+ "--rpc-addr",
148
+ `0.0.0.0:${CONTAINER_RPC_PORT}`
149
+ ];
150
+ if (opts.checkpoint !== void 0) command.push("--checkpoint", String(opts.checkpoint));
151
+ for (const address of seed.addresses) command.push("--address", address);
152
+ for (const objectId of seed.objects) command.push("--object", objectId);
153
+ return command;
154
+ };
155
+ const normalizeForkSeed = (opts) => ({
156
+ addresses: [...new Set((opts.seed?.addresses ?? []).map((address) => normalizeSuiAddress(address)))].sort(),
157
+ objects: [...new Set((opts.seed?.objects ?? []).map((objectId) => normalizeSuiObjectId(objectId)))].sort()
158
+ });
159
+ const forkContainerConfigHash = (opts, dataDir, command) => createHash("sha256").update(JSON.stringify({
160
+ dataDir,
161
+ command,
162
+ version: opts.version ?? "62ee6ada958cd61b3c8a4466dd33c9aba3cdff8a",
163
+ ports: opts.ports ?? null
164
+ })).digest("hex");
165
+ const allocateForkRpcPort = (portBroker, override) => {
166
+ const overridePort = override?.[CONTAINER_RPC_PORT];
167
+ if (overridePort !== void 0) return Effect.succeed(portPublish(CONTAINER_RPC_PORT, overridePort));
168
+ return portBroker.allocate({
169
+ kind: "rpc",
170
+ preferredPort: DEFAULT_FORK_HOST_RPC_PORT,
171
+ probeHost: DOCKER_PUBLISH_HOST
172
+ }).pipe(Effect.catchTag("PortBrokerError", (cause) => cause.reason === "preferred-busy" ? portBroker.allocate({
173
+ kind: "rpc",
174
+ probeHost: DOCKER_PUBLISH_HOST
175
+ }) : Effect.fail(cause)), Effect.map((allocated) => portPublish(CONTAINER_RPC_PORT, allocated.port)), Effect.mapError((cause) => suiPluginError("port-allocate", `sui fork mode: failed to allocate RPC host port: ${cause.detail}`, cause)));
176
+ };
177
+ const findReusableForkPort = (runtime, labels, containerName) => runtime.inspectByLabels(labels).pipe(Effect.map((handles) => handles.find((handle) => handle.name === containerName)?.ports?.find((port) => port.containerPort === CONTAINER_RPC_PORT)), Effect.mapError((cause) => suiPluginError("container-start", `sui fork mode: failed to inspect existing fork container: ${cause.reason}: ${cause.detail}`, cause)));
178
+ const pickPublishedPort = (requested, actual) => actual?.find((port) => port.containerPort === CONTAINER_RPC_PORT) ?? requested.find((port) => port.containerPort === CONTAINER_RPC_PORT) ?? portPublish(CONTAINER_RPC_PORT, 51002);
179
+ const portPublish = (containerPort, hostPort) => ({
180
+ containerPort,
181
+ hostPort,
182
+ hostIp: DOCKER_PUBLISH_HOST
183
+ });
184
+ const forkDataDirKey = (opts) => createHash("sha256").update(JSON.stringify({
185
+ upstream: opts.upstream,
186
+ checkpoint: opts.checkpoint ?? null,
187
+ version: opts.version ?? "62ee6ada958cd61b3c8a4466dd33c9aba3cdff8a",
188
+ seed: normalizeForkSeed(opts)
189
+ })).digest("hex").slice(0, 16);
190
+ const ensureForkDataDir = (paths, opts) => {
191
+ const dataDir = resolve(join(paths.stackRoot, "sui-fork", forkDataDirKey(opts)));
192
+ return Effect.tryPromise({
193
+ try: async () => {
194
+ await mkdir(dataDir, {
195
+ recursive: true,
196
+ mode: 448
197
+ });
198
+ return dataDir;
199
+ },
200
+ catch: (cause) => suiPluginError("fork-data-dir", `sui fork mode: failed to create data directory ${dataDir}: ${stringifyCause(cause)}`, cause)
201
+ });
202
+ };
203
+ const waitForForkReady = (sdkClient, readyTimeout) => Effect.gen(function* () {
204
+ const readyTimeoutMs = Duration.toMillis(readyTimeout);
205
+ yield* waitForProbe({
206
+ label: "sui.fork.rpc",
207
+ timeoutMs: readyTimeoutMs,
208
+ intervalMs: 1e3,
209
+ attemptTimeoutMs: PROBE_ATTEMPT_TIMEOUT_MS,
210
+ probe: () => readForkStatus(sdkClient).pipe(Effect.as(true))
211
+ }).pipe(Effect.mapError((cause) => cause instanceof ProbeTimeoutError ? suiPluginError("fork-status-probe", `sui fork mode: ForkingService.GetStatus did not become ready within ${readyTimeoutMs}ms.`, cause.lastError ?? cause.lastNotReady ?? cause) : suiPluginError("fork-status-probe", `sui fork mode: ForkingService.GetStatus probe failed: ${stringifyCause(cause)}`, cause)));
212
+ return yield* readForkStatus(sdkClient);
213
+ }).pipe(Effect.withSpan("devstack.plugin.sui.fork.waitForReady"));
214
+ const makeForkAdminSurface = (sdkClient) => ({
215
+ status: readForkStatus(sdkClient).pipe(Effect.map(({ checkpoint, clock }) => ({
216
+ checkpoint,
217
+ clock
218
+ }))),
219
+ advanceClock: (intervalMs) => Effect.tryPromise({
220
+ try: () => sdkClient.forkingService.advanceClock({ durationMs: BigInt(intervalMs) }).response,
221
+ catch: (cause) => suiPluginError("fork-advance-clock", `sui fork mode: advanceClock(${intervalMs}) failed: ${stringifyCause(cause)}`, cause)
222
+ }).pipe(Effect.asVoid),
223
+ advanceCheckpoint: Effect.tryPromise({
224
+ try: () => sdkClient.forkingService.advanceCheckpoint({}).response,
225
+ catch: (cause) => suiPluginError("fork-advance-checkpoint", `sui fork mode: advanceCheckpoint failed: ${stringifyCause(cause)}`, cause)
226
+ }).pipe(Effect.asVoid),
227
+ impersonate: (sender, tx) => Effect.gen(function* () {
228
+ if (!(tx instanceof Uint8Array)) return yield* Effect.fail(suiPluginError("fork-impersonate", `sui fork mode: impersonate(${sender}) expected serialized transaction bytes.`));
229
+ yield* verifyForkImpersonationSender(sender, tx);
230
+ const raw = yield* Effect.tryPromise({
231
+ try: () => sdkClient.executeTransaction({
232
+ transaction: tx,
233
+ signatures: [],
234
+ include: {
235
+ effects: true,
236
+ objectTypes: true
237
+ }
238
+ }),
239
+ catch: (cause) => suiPluginError("fork-impersonate", `sui fork mode: impersonate(${sender}) failed: ${stringifyCause(cause)}`, cause)
240
+ });
241
+ const digest = extractExecuteDigest(raw);
242
+ if (digest === void 0) return yield* Effect.fail(suiPluginError("fork-impersonate", `sui fork mode: impersonate(${sender}) returned no transaction digest.`, raw));
243
+ return {
244
+ digest,
245
+ success: !isFailedTransaction(raw),
246
+ raw
247
+ };
248
+ })
249
+ });
250
+ const readForkStatus = (sdkClient) => Effect.tryPromise({
251
+ try: async () => {
252
+ const response = await sdkClient.forkingService.getStatus({}).response;
253
+ return {
254
+ checkpoint: response.checkpointSequenceNumber.toString(),
255
+ clock: Number(response.timestampMs),
256
+ forkedAtCheckpoint: response.forkedAtCheckpoint.toString()
257
+ };
258
+ },
259
+ catch: (cause) => suiPluginError("fork-status-probe", `sui fork mode: GetStatus failed: ${stringifyCause(cause)}`, cause)
260
+ });
261
+ const routedSuiRpcUrl = (identity) => routerHostname(identity, "rpc").pipe(Effect.map((hostname) => renderUrl({
262
+ protocol: "http",
263
+ hostname,
264
+ port: SUI_RPC_ENTRYPOINT_PORT
265
+ })), Effect.mapError((cause) => suiPluginError("container-start", `sui fork mode: failed to construct router RPC URL: ${cause.detail}`, cause)));
266
+ const extractExecuteDigest = (raw) => {
267
+ const env = raw;
268
+ return env.$kind === "FailedTransaction" ? env.FailedTransaction?.digest : env.Transaction?.digest;
269
+ };
270
+ const isFailedTransaction = (raw) => raw.$kind === "FailedTransaction";
271
+ const stringifyCause = (cause) => {
272
+ if (cause instanceof Error) return cause.message;
273
+ if (typeof cause === "string") return cause;
274
+ try {
275
+ return JSON.stringify(cause);
276
+ } catch {
277
+ return String(cause);
278
+ }
279
+ };
280
+ //#endregion
281
+ export { bootForkMode };
282
+
283
+ //# sourceMappingURL=fork.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fork.mjs","names":["sharedFetchChainId"],"sources":["../../../../src/plugins/sui/mode/fork.ts"],"sourcesContent":["// Sui plugin — fork mode.\n\nimport { createHash } from 'node:crypto';\nimport { mkdir } from 'node:fs/promises';\nimport { join, resolve } from 'node:path';\n\nimport { Duration, Effect, type Scope } from 'effect';\n\nimport { SuiGrpcClient } from '@mysten/sui/grpc';\nimport { normalizeSuiAddress, normalizeSuiObjectId } from '@mysten/sui/utils';\n\nimport type {\n\tContainerHandle,\n\tContainerPortPublish,\n\tContainerRuntime,\n\tContainerRuntimeError,\n\tImageRef,\n\tPortBindingReconciliation,\n} from '../../../contracts/container-runtime.ts';\nimport type { ContainerLabelTuple } from '../../../contracts/snapshotable.ts';\nimport type { Identity } from '../../../substrate/identity.ts';\nimport { ensureManagedContainer } from '../../../substrate/runtime/managed-container.ts';\nimport type { StackPaths } from '../../../substrate/runtime/paths.ts';\nimport type { AllocatedPort, PortBroker } from '../../../substrate/runtime/port-broker/index.ts';\nimport { ProbeTimeoutError, waitForProbe } from '../../../substrate/runtime/probes.ts';\nimport { renderUrl, routerHostname } from '../../../orchestrators/router/hostname.ts';\nimport { resolveAutoTickIntervalMs, runAutoTickClock } from '../auto-tick.ts';\nimport { suiPluginError, type SeedManifestMismatchError, type SuiPluginError } from '../errors.ts';\nimport type { ResolvedSuiNetwork } from '../network-resolver.ts';\nimport { SUI_RPC_ENDPOINT_NAME, SUI_RPC_ENTRYPOINT_PORT } from '../routable.ts';\nimport { wrapWithForkGuard } from '../fork-orchestration.ts';\nimport { verifyForkImpersonationSender } from '../fork-transaction.ts';\nimport { DEFAULT_SUI_CLI_VERSION } from '../../../substrate/runtime/sui-move-build/index.ts';\nimport type { ForkAdminSurface, SuiClient } from './shared.ts';\nimport { toDockerHostGatewayUrl } from './shared.ts';\nimport {\n\tassembleSuiClient,\n\tfetchChainId as sharedFetchChainId,\n\tmakeResolvedNetwork,\n\tnoopWaitForTransactionsReady,\n} from './shared-boot.ts';\nimport type { SuiForkOptions } from './spec.ts';\n\n/** Default ready-probe timeout for fork-mode cold start. */\nexport const DEFAULT_FORK_READY_TIMEOUT = Duration.seconds(180);\n\n/** Default Sui repository revision used by the bundled `sui-fork` image build. */\nexport const DEFAULT_SUI_FORK_REV = '62ee6ada958cd61b3c8a4466dd33c9aba3cdff8a';\n\n/** Map upstream literal to the canonical \"live\" chain id known by wallet-standard / MVR. */\nexport const FORK_UPSTREAM_TO_KNOWN_NETWORK = {\n\tmainnet: 'sui:mainnet',\n\ttestnet: 'sui:testnet',\n\tdevnet: 'sui:devnet',\n} as const;\n\nexport const DEFAULT_FORK_HOST_RPC_PORT = 51002;\nexport const FORK_VALIDATOR_STOP_GRACE_SECONDS = 30;\n\nconst DOCKER_PUBLISH_HOST = '0.0.0.0' as const;\nconst CONTAINER_RPC_PORT = SUI_RPC_ENTRYPOINT_PORT;\nconst FORK_CONTAINER_DATA_DIR = '/var/lib/sui-fork';\nconst PROBE_ATTEMPT_TIMEOUT_MS = 3_000;\n\n/** Resolved fork-mode boot artifacts. */\nexport interface ForkModeBootResult {\n\treadonly resolved: ResolvedSuiNetwork;\n\treadonly client: SuiClient;\n\treadonly autoTickIntervalMs: number | undefined;\n}\n\nexport const bootForkMode = (\n\truntime: ContainerRuntime,\n\tidentity: Identity,\n\tportBroker: PortBroker,\n\tpaths: StackPaths,\n\topts: SuiForkOptions,\n): Effect.Effect<ForkModeBootResult, SuiPluginError | SeedManifestMismatchError, Scope.Scope> =>\n\tEffect.gen(function* () {\n\t\tconst autoTickIntervalMs = resolveAutoTickIntervalMs(opts.autoTick);\n\t\tconst image = yield* resolveForkImage(runtime, opts);\n\t\tconst dataDir = yield* ensureForkDataDir(paths, opts);\n\n\t\tconst labels: ContainerLabelTuple = {\n\t\t\tapp: identity.app,\n\t\t\tstack: identity.stack,\n\t\t\tplugin: 'sui',\n\t\t\trole: 'fork-validator',\n\t\t};\n\t\tconst containerName = `devstack-${identity.app}-${identity.stack}-sui-fork`;\n\t\tconst { handle, ports } = yield* ensureForkContainer({\n\t\t\truntime,\n\t\t\tportBroker,\n\t\t\timage,\n\t\t\tlabels,\n\t\t\tcontainerName,\n\t\t\tdataDir,\n\t\t\topts,\n\t\t});\n\n\t\tconst published = pickPublishedPort(ports, handle.ports);\n\t\tconst directRpcUrl = `http://127.0.0.1:${published.hostPort}`;\n\t\tconst rpcUrl = yield* routedSuiRpcUrl(identity);\n\t\tconst sdkClient = new SuiGrpcClient({ baseUrl: directRpcUrl, network: opts.upstream });\n\t\tconst readyTimeout = opts.readyTimeout ?? DEFAULT_FORK_READY_TIMEOUT;\n\n\t\tconst status = yield* waitForForkReady(sdkClient, readyTimeout).pipe(\n\t\t\tEffect.annotateLogs({ 'sui.container': handle.name }),\n\t\t);\n\t\tconst chain = yield* sharedFetchChainId(sdkClient, {\n\t\t\tspan: 'devstack.plugin.sui.fork.fetchChainId',\n\t\t});\n\n\t\tconst fork = makeForkAdminSurface(sdkClient);\n\t\tconst assembled = assembleSuiClient({\n\t\t\tsdkClient,\n\t\t\tchain,\n\t\t\trpcUrl,\n\t\t\twaitForTransactionsReady: noopWaitForTransactionsReady,\n\t\t\tbuildImage: image,\n\t\t\thostGateway: {\n\t\t\t\trpcUrl: toDockerHostGatewayUrl(directRpcUrl),\n\t\t\t\tfaucetUrl: null,\n\t\t\t\tgraphqlUrl: null,\n\t\t\t},\n\t\t});\n\t\tconst client: SuiClient = {\n\t\t\t...assembled.client,\n\t\t\tsdk: wrapWithForkGuard(assembled.sdkShim),\n\t\t\tfork,\n\t\t};\n\n\t\tif (autoTickIntervalMs !== undefined) {\n\t\t\tyield* runAutoTickClock(fork, autoTickIntervalMs);\n\t\t}\n\n\t\treturn {\n\t\t\tresolved: makeResolvedNetwork({\n\t\t\t\tmode: 'fork',\n\t\t\t\tchain,\n\t\t\t\trpc: rpcUrl,\n\t\t\t\tsource: 'default',\n\t\t\t\tcheckpoint: status.forkedAtCheckpoint,\n\t\t\t\tforkUpstream: opts.upstream,\n\t\t\t}),\n\t\t\tclient,\n\t\t\tautoTickIntervalMs,\n\t\t};\n\t}).pipe(\n\t\tEffect.withSpan('devstack.plugin.sui.fork.boot', { attributes: { 'devstack.plugin': 'sui' } }),\n\t);\n\nexport const suiForkImageBuildContext = (rev = DEFAULT_SUI_FORK_REV) => ({\n\tcontextPath: new URL('../../../../images/', import.meta.url).pathname,\n\tdockerfile: 'sui-fork/Dockerfile',\n\tbuildArgs: { SUI_FORK_REV: rev, SUI_CLI_VERSION: DEFAULT_SUI_CLI_VERSION },\n});\n\nexport const resolveForkImage = (\n\truntime: ContainerRuntime,\n\topts: SuiForkOptions,\n): Effect.Effect<ImageRef, SuiPluginError> =>\n\tEffect.gen(function* () {\n\t\tif (opts.image && 'pull' in opts.image) {\n\t\t\tconst pullRef = opts.image.pull;\n\t\t\tif (runtime.pullImage === undefined) {\n\t\t\t\treturn yield* Effect.fail(\n\t\t\t\t\tsuiPluginError(\n\t\t\t\t\t\t'image-build',\n\t\t\t\t\t\t`sui fork mode cannot pull image '${pullRef}' because the configured container runtime does not expose image pulls.`,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn yield* runtime\n\t\t\t\t.pullImage(pullRef)\n\t\t\t\t.pipe(\n\t\t\t\t\tEffect.mapError((cause) =>\n\t\t\t\t\t\tsuiPluginError(\n\t\t\t\t\t\t\t'image-build',\n\t\t\t\t\t\t\t`sui fork mode failed to pull image '${pullRef}': ${cause.reason}: ${cause.detail}`,\n\t\t\t\t\t\t\tcause,\n\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t}\n\t\tconst rev = opts.version ?? DEFAULT_SUI_FORK_REV;\n\t\tconst buildCtx =\n\t\t\topts.image && 'build' in opts.image\n\t\t\t\t? {\n\t\t\t\t\t\tcontextPath: opts.image.build.context,\n\t\t\t\t\t\tdockerfile: opts.image.build.dockerfile ?? 'Dockerfile',\n\t\t\t\t\t\tbuildArgs: { SUI_FORK_REV: rev, SUI_CLI_VERSION: DEFAULT_SUI_CLI_VERSION },\n\t\t\t\t\t}\n\t\t\t\t: suiForkImageBuildContext(rev);\n\t\treturn yield* runtime\n\t\t\t.ensureImage(buildCtx)\n\t\t\t.pipe(\n\t\t\t\tEffect.mapError((cause) =>\n\t\t\t\t\tsuiPluginError(\n\t\t\t\t\t\t'image-build',\n\t\t\t\t\t\t`sui fork image build failed: ${cause.reason}: ${cause.detail}`,\n\t\t\t\t\t\tcause,\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t);\n\t}).pipe(Effect.withSpan('devstack.plugin.sui.fork.resolveImage'));\n\ninterface ForkContainerResult {\n\treadonly handle: ContainerHandle;\n\treadonly ports: ReadonlyArray<ContainerPortPublish>;\n}\n\nconst ensureForkContainer = (params: {\n\treadonly runtime: ContainerRuntime;\n\treadonly portBroker: PortBroker;\n\treadonly image: ImageRef;\n\treadonly labels: ContainerLabelTuple;\n\treadonly containerName: string;\n\treadonly dataDir: string;\n\treadonly opts: SuiForkOptions;\n}): Effect.Effect<ForkContainerResult, SuiPluginError, Scope.Scope> =>\n\tEffect.gen(function* () {\n\t\tconst reusable =\n\t\t\tparams.opts.ports === undefined\n\t\t\t\t? yield* findReusableForkPort(params.runtime, params.labels, params.containerName)\n\t\t\t\t: undefined;\n\t\tconst ports =\n\t\t\treusable === undefined\n\t\t\t\t? [yield* allocateForkRpcPort(params.portBroker, params.opts.ports)]\n\t\t\t\t: [reusable];\n\t\tconst reconciliation: PortBindingReconciliation =\n\t\t\treusable === undefined && params.opts.ports !== undefined ? 'exact' : 'adopt-existing';\n\t\tconst command = forkStartCommand(params.opts);\n\t\tconst handle = yield* ensureManagedContainer({\n\t\t\truntime: params.runtime,\n\t\t\tlabels: params.labels,\n\t\t\tspec: {\n\t\t\t\tname: params.containerName,\n\t\t\t\timage: params.image,\n\t\t\t\trecreate: 'on-config-change',\n\t\t\t\tconfigHash: forkContainerConfigHash(params.opts, params.dataDir, command),\n\t\t\t\tstopGraceSeconds: FORK_VALIDATOR_STOP_GRACE_SECONDS,\n\t\t\t\tports,\n\t\t\t\tportBindingReconciliation: reconciliation,\n\t\t\t\tmounts: [{ source: params.dataDir, target: FORK_CONTAINER_DATA_DIR }],\n\t\t\t\tcommand,\n\t\t\t},\n\t\t\tmapError: (cause) => cause,\n\t\t}).pipe(\n\t\t\tEffect.mapError((cause: ContainerRuntimeError) =>\n\t\t\t\tsuiPluginError(\n\t\t\t\t\t'container-start',\n\t\t\t\t\t`sui-fork container failed: ${cause.reason}: ${cause.detail}`,\n\t\t\t\t\tcause,\n\t\t\t\t),\n\t\t\t),\n\t\t);\n\t\treturn { handle, ports };\n\t});\n\nexport const forkStartCommand = (opts: SuiForkOptions): ReadonlyArray<string> => {\n\tconst seed = normalizeForkSeed(opts);\n\tconst command = [\n\t\t'start',\n\t\t'--network',\n\t\topts.upstream,\n\t\t'--data-dir',\n\t\tFORK_CONTAINER_DATA_DIR,\n\t\t'--rpc-addr',\n\t\t`0.0.0.0:${CONTAINER_RPC_PORT}`,\n\t];\n\tif (opts.checkpoint !== undefined) {\n\t\tcommand.push('--checkpoint', String(opts.checkpoint));\n\t}\n\tfor (const address of seed.addresses) {\n\t\tcommand.push('--address', address);\n\t}\n\tfor (const objectId of seed.objects) {\n\t\tcommand.push('--object', objectId);\n\t}\n\treturn command;\n};\n\nconst normalizeForkSeed = (opts: SuiForkOptions) => ({\n\taddresses: [\n\t\t...new Set((opts.seed?.addresses ?? []).map((address) => normalizeSuiAddress(address))),\n\t].sort(),\n\tobjects: [\n\t\t...new Set((opts.seed?.objects ?? []).map((objectId) => normalizeSuiObjectId(objectId))),\n\t].sort(),\n});\n\nconst forkContainerConfigHash = (\n\topts: SuiForkOptions,\n\tdataDir: string,\n\tcommand: ReadonlyArray<string>,\n): string =>\n\tcreateHash('sha256')\n\t\t.update(\n\t\t\tJSON.stringify({\n\t\t\t\tdataDir,\n\t\t\t\tcommand,\n\t\t\t\tversion: opts.version ?? DEFAULT_SUI_FORK_REV,\n\t\t\t\tports: opts.ports ?? null,\n\t\t\t}),\n\t\t)\n\t\t.digest('hex');\n\nconst allocateForkRpcPort = (\n\tportBroker: PortBroker,\n\toverride: Readonly<Record<number, number>> | undefined,\n): Effect.Effect<ContainerPortPublish, SuiPluginError, Scope.Scope> => {\n\tconst overridePort = override?.[CONTAINER_RPC_PORT];\n\tif (overridePort !== undefined) {\n\t\treturn Effect.succeed(portPublish(CONTAINER_RPC_PORT, overridePort));\n\t}\n\treturn portBroker\n\t\t.allocate({\n\t\t\tkind: 'rpc',\n\t\t\tpreferredPort: DEFAULT_FORK_HOST_RPC_PORT,\n\t\t\tprobeHost: DOCKER_PUBLISH_HOST,\n\t\t})\n\t\t.pipe(\n\t\t\tEffect.catchTag('PortBrokerError', (cause) =>\n\t\t\t\tcause.reason === 'preferred-busy'\n\t\t\t\t\t? portBroker.allocate({ kind: 'rpc', probeHost: DOCKER_PUBLISH_HOST })\n\t\t\t\t\t: Effect.fail(cause),\n\t\t\t),\n\t\t\tEffect.map((allocated: AllocatedPort) => portPublish(CONTAINER_RPC_PORT, allocated.port)),\n\t\t\tEffect.mapError((cause) =>\n\t\t\t\tsuiPluginError(\n\t\t\t\t\t'port-allocate',\n\t\t\t\t\t`sui fork mode: failed to allocate RPC host port: ${cause.detail}`,\n\t\t\t\t\tcause,\n\t\t\t\t),\n\t\t\t),\n\t\t);\n};\n\nconst findReusableForkPort = (\n\truntime: ContainerRuntime,\n\tlabels: ContainerLabelTuple,\n\tcontainerName: string,\n): Effect.Effect<ContainerPortPublish | undefined, SuiPluginError> =>\n\truntime.inspectByLabels(labels).pipe(\n\t\tEffect.map((handles) =>\n\t\t\thandles\n\t\t\t\t.find((handle) => handle.name === containerName)\n\t\t\t\t?.ports?.find((port) => port.containerPort === CONTAINER_RPC_PORT),\n\t\t),\n\t\tEffect.mapError((cause) =>\n\t\t\tsuiPluginError(\n\t\t\t\t'container-start',\n\t\t\t\t`sui fork mode: failed to inspect existing fork container: ${cause.reason}: ${cause.detail}`,\n\t\t\t\tcause,\n\t\t\t),\n\t\t),\n\t);\n\nconst pickPublishedPort = (\n\trequested: ReadonlyArray<ContainerPortPublish>,\n\tactual: ReadonlyArray<ContainerPortPublish> | undefined,\n): ContainerPortPublish =>\n\tactual?.find((port) => port.containerPort === CONTAINER_RPC_PORT) ??\n\trequested.find((port) => port.containerPort === CONTAINER_RPC_PORT) ??\n\tportPublish(CONTAINER_RPC_PORT, DEFAULT_FORK_HOST_RPC_PORT);\n\nconst portPublish = (containerPort: number, hostPort: number): ContainerPortPublish => ({\n\tcontainerPort,\n\thostPort,\n\thostIp: DOCKER_PUBLISH_HOST,\n});\n\nexport const forkDataDirKey = (opts: SuiForkOptions): string =>\n\tcreateHash('sha256')\n\t\t.update(\n\t\t\tJSON.stringify({\n\t\t\t\tupstream: opts.upstream,\n\t\t\t\tcheckpoint: opts.checkpoint ?? null,\n\t\t\t\tversion: opts.version ?? DEFAULT_SUI_FORK_REV,\n\t\t\t\tseed: normalizeForkSeed(opts),\n\t\t\t}),\n\t\t)\n\t\t.digest('hex')\n\t\t.slice(0, 16);\n\nconst ensureForkDataDir = (\n\tpaths: StackPaths,\n\topts: SuiForkOptions,\n): Effect.Effect<string, SuiPluginError> => {\n\tconst dataDir = resolve(join(paths.stackRoot, 'sui-fork', forkDataDirKey(opts)));\n\treturn Effect.tryPromise({\n\t\ttry: async () => {\n\t\t\tawait mkdir(dataDir, { recursive: true, mode: 0o700 });\n\t\t\treturn dataDir;\n\t\t},\n\t\tcatch: (cause) =>\n\t\t\tsuiPluginError(\n\t\t\t\t'fork-data-dir',\n\t\t\t\t`sui fork mode: failed to create data directory ${dataDir}: ${stringifyCause(cause)}`,\n\t\t\t\tcause,\n\t\t\t),\n\t});\n};\n\ninterface ForkStatus {\n\treadonly checkpoint: string;\n\treadonly clock: number;\n\treadonly forkedAtCheckpoint: string;\n}\n\nconst waitForForkReady = (\n\tsdkClient: SuiGrpcClient,\n\treadyTimeout: Duration.Duration,\n): Effect.Effect<ForkStatus, SuiPluginError> =>\n\tEffect.gen(function* () {\n\t\tconst readyTimeoutMs = Duration.toMillis(readyTimeout);\n\t\tyield* waitForProbe({\n\t\t\tlabel: 'sui.fork.rpc',\n\t\t\ttimeoutMs: readyTimeoutMs,\n\t\t\tintervalMs: 1_000,\n\t\t\tattemptTimeoutMs: PROBE_ATTEMPT_TIMEOUT_MS,\n\t\t\tprobe: () => readForkStatus(sdkClient).pipe(Effect.as(true)),\n\t\t}).pipe(\n\t\t\tEffect.mapError((cause) =>\n\t\t\t\tcause instanceof ProbeTimeoutError\n\t\t\t\t\t? suiPluginError(\n\t\t\t\t\t\t\t'fork-status-probe',\n\t\t\t\t\t\t\t`sui fork mode: ForkingService.GetStatus did not become ready within ${readyTimeoutMs}ms.`,\n\t\t\t\t\t\t\tcause.lastError ?? cause.lastNotReady ?? cause,\n\t\t\t\t\t\t)\n\t\t\t\t\t: suiPluginError(\n\t\t\t\t\t\t\t'fork-status-probe',\n\t\t\t\t\t\t\t`sui fork mode: ForkingService.GetStatus probe failed: ${stringifyCause(cause)}`,\n\t\t\t\t\t\t\tcause,\n\t\t\t\t\t\t),\n\t\t\t),\n\t\t);\n\t\treturn yield* readForkStatus(sdkClient);\n\t}).pipe(Effect.withSpan('devstack.plugin.sui.fork.waitForReady'));\n\nconst makeForkAdminSurface = (sdkClient: SuiGrpcClient): ForkAdminSurface => ({\n\tstatus: readForkStatus(sdkClient).pipe(\n\t\tEffect.map(({ checkpoint, clock }) => ({ checkpoint, clock })),\n\t),\n\tadvanceClock: (intervalMs) =>\n\t\tEffect.tryPromise({\n\t\t\ttry: () => sdkClient.forkingService.advanceClock({ durationMs: BigInt(intervalMs) }).response,\n\t\t\tcatch: (cause) =>\n\t\t\t\tsuiPluginError(\n\t\t\t\t\t'fork-advance-clock',\n\t\t\t\t\t`sui fork mode: advanceClock(${intervalMs}) failed: ${stringifyCause(cause)}`,\n\t\t\t\t\tcause,\n\t\t\t\t),\n\t\t}).pipe(Effect.asVoid),\n\tadvanceCheckpoint: Effect.tryPromise({\n\t\ttry: () => sdkClient.forkingService.advanceCheckpoint({}).response,\n\t\tcatch: (cause) =>\n\t\t\tsuiPluginError(\n\t\t\t\t'fork-advance-checkpoint',\n\t\t\t\t`sui fork mode: advanceCheckpoint failed: ${stringifyCause(cause)}`,\n\t\t\t\tcause,\n\t\t\t),\n\t}).pipe(Effect.asVoid),\n\timpersonate: (sender, tx) =>\n\t\tEffect.gen(function* () {\n\t\t\tif (!(tx instanceof Uint8Array)) {\n\t\t\t\treturn yield* Effect.fail(\n\t\t\t\t\tsuiPluginError(\n\t\t\t\t\t\t'fork-impersonate',\n\t\t\t\t\t\t`sui fork mode: impersonate(${sender}) expected serialized transaction bytes.`,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t\tyield* verifyForkImpersonationSender(sender, tx);\n\t\t\tconst raw = yield* Effect.tryPromise({\n\t\t\t\ttry: () =>\n\t\t\t\t\tsdkClient.executeTransaction({\n\t\t\t\t\t\ttransaction: tx,\n\t\t\t\t\t\tsignatures: [],\n\t\t\t\t\t\tinclude: { effects: true, objectTypes: true },\n\t\t\t\t\t}),\n\t\t\t\tcatch: (cause) =>\n\t\t\t\t\tsuiPluginError(\n\t\t\t\t\t\t'fork-impersonate',\n\t\t\t\t\t\t`sui fork mode: impersonate(${sender}) failed: ${stringifyCause(cause)}`,\n\t\t\t\t\t\tcause,\n\t\t\t\t\t),\n\t\t\t});\n\t\t\tconst digest = extractExecuteDigest(raw);\n\t\t\tif (digest === undefined) {\n\t\t\t\treturn yield* Effect.fail(\n\t\t\t\t\tsuiPluginError(\n\t\t\t\t\t\t'fork-impersonate',\n\t\t\t\t\t\t`sui fork mode: impersonate(${sender}) returned no transaction digest.`,\n\t\t\t\t\t\traw,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn { digest, success: !isFailedTransaction(raw), raw };\n\t\t}),\n});\n\nconst readForkStatus = (sdkClient: SuiGrpcClient): Effect.Effect<ForkStatus, SuiPluginError> =>\n\tEffect.tryPromise({\n\t\ttry: async () => {\n\t\t\tconst response = await sdkClient.forkingService.getStatus({}).response;\n\t\t\treturn {\n\t\t\t\tcheckpoint: response.checkpointSequenceNumber.toString(),\n\t\t\t\tclock: Number(response.timestampMs),\n\t\t\t\tforkedAtCheckpoint: response.forkedAtCheckpoint.toString(),\n\t\t\t};\n\t\t},\n\t\tcatch: (cause) =>\n\t\t\tsuiPluginError(\n\t\t\t\t'fork-status-probe',\n\t\t\t\t`sui fork mode: GetStatus failed: ${stringifyCause(cause)}`,\n\t\t\t\tcause,\n\t\t\t),\n\t});\n\nconst routedSuiRpcUrl = (identity: Identity): Effect.Effect<string, SuiPluginError> =>\n\trouterHostname(identity, SUI_RPC_ENDPOINT_NAME).pipe(\n\t\tEffect.map((hostname) =>\n\t\t\trenderUrl({ protocol: 'http', hostname, port: SUI_RPC_ENTRYPOINT_PORT }),\n\t\t),\n\t\tEffect.mapError((cause) =>\n\t\t\tsuiPluginError(\n\t\t\t\t'container-start',\n\t\t\t\t`sui fork mode: failed to construct router RPC URL: ${cause.detail}`,\n\t\t\t\tcause,\n\t\t\t),\n\t\t),\n\t);\n\nconst extractExecuteDigest = (raw: unknown): string | undefined => {\n\tconst env = raw as {\n\t\treadonly $kind?: 'Transaction' | 'FailedTransaction';\n\t\treadonly Transaction?: { readonly digest?: string };\n\t\treadonly FailedTransaction?: { readonly digest?: string };\n\t};\n\treturn env.$kind === 'FailedTransaction'\n\t\t? env.FailedTransaction?.digest\n\t\t: env.Transaction?.digest;\n};\n\nconst isFailedTransaction = (raw: unknown): boolean =>\n\t(raw as { readonly $kind?: string }).$kind === 'FailedTransaction';\n\nconst stringifyCause = (cause: unknown): string => {\n\tif (cause instanceof Error) return cause.message;\n\tif (typeof cause === 'string') return cause;\n\ttry {\n\t\treturn JSON.stringify(cause);\n\t} catch {\n\t\treturn String(cause);\n\t}\n};\n"],"mappings":"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"}
@@ -0,0 +1,103 @@
1
+ import { suiPluginError } from "../errors.mjs";
2
+ import { assembleSuiClient, buildWaitForTransactionsReady, fetchChainId, makeResolvedNetwork, noopWaitForTransactionsReady } from "./shared-boot.mjs";
3
+ import { Duration, Effect } from "effect";
4
+ import { SuiGrpcClient } from "@mysten/sui/grpc";
5
+ //#region src/plugins/sui/mode/live.ts
6
+ /** Default chain-id fetch timeout for live RPCs. */
7
+ const DEFAULT_LIVE_CHAIN_ID_TIMEOUT = Duration.seconds(30);
8
+ /** Default RPC endpoints per known network. `custom` requires the
9
+ * caller to supply `rpcUrl`. */
10
+ const LIVE_DEFAULTS = {
11
+ testnet: {
12
+ rpcUrl: "https://fullnode.testnet.sui.io:443",
13
+ faucetUrl: "https://faucet.testnet.sui.io",
14
+ graphqlUrl: "https://sui-testnet.mystenlabs.com/graphql"
15
+ },
16
+ mainnet: {
17
+ rpcUrl: "https://fullnode.mainnet.sui.io:443",
18
+ faucetUrl: void 0,
19
+ graphqlUrl: "https://sui-mainnet.mystenlabs.com/graphql"
20
+ },
21
+ devnet: {
22
+ rpcUrl: "https://fullnode.devnet.sui.io:443",
23
+ faucetUrl: "https://faucet.devnet.sui.io",
24
+ graphqlUrl: void 0
25
+ }
26
+ };
27
+ /** Resolve endpoints from caller overrides + the known-network table.
28
+ * Order: caller-provided wins; otherwise the LIVE_DEFAULTS row for
29
+ * the requested network. `custom` MUST carry an explicit `rpcUrl`. */
30
+ const resolveEndpoints = (opts) => {
31
+ if (opts.network === "custom") {
32
+ if (opts.rpcUrl === void 0) return Effect.fail(suiPluginError("chain-id-fetch", "sui live mode: network='custom' requires opts.rpcUrl. Use suiFor(network).live.custom({rpcUrl: ...}) or pass network='testnet'|'mainnet'|'devnet' to use the built-in defaults."));
33
+ return Effect.succeed({
34
+ rpcUrl: opts.rpcUrl,
35
+ faucetUrl: opts.faucetUrl,
36
+ graphqlUrl: opts.graphqlUrl,
37
+ sdkNetwork: "localnet"
38
+ });
39
+ }
40
+ const defaults = LIVE_DEFAULTS[opts.network];
41
+ return Effect.succeed({
42
+ rpcUrl: opts.rpcUrl ?? defaults.rpcUrl,
43
+ faucetUrl: opts.faucetUrl ?? defaults.faucetUrl,
44
+ graphqlUrl: opts.graphqlUrl ?? defaults.graphqlUrl,
45
+ sdkNetwork: opts.network
46
+ });
47
+ };
48
+ /** Build the live-mode boot Effect. */
49
+ const bootLiveMode = (opts) => Effect.gen(function* () {
50
+ const endpoints = yield* resolveEndpoints(opts);
51
+ yield* Effect.annotateCurrentSpan({
52
+ "sui.live.network": opts.network,
53
+ "sui.live.rpcUrl": endpoints.rpcUrl,
54
+ "sui.live.faucetUrl": endpoints.faucetUrl ?? "<none>"
55
+ });
56
+ const sdkClient = yield* Effect.try({
57
+ try: () => new SuiGrpcClient({
58
+ baseUrl: endpoints.rpcUrl,
59
+ network: endpoints.sdkNetwork
60
+ }),
61
+ catch: (cause) => suiPluginError("chain-id-fetch", `sui live mode: SuiGrpcClient construction failed for rpcUrl=${endpoints.rpcUrl}: ${stringifyCause(cause)}`, cause)
62
+ });
63
+ const chain = opts.chain ?? (yield* fetchChainId(sdkClient, {
64
+ timeout: opts.readyTimeout ?? DEFAULT_LIVE_CHAIN_ID_TIMEOUT,
65
+ span: "devstack.plugin.sui.live.fetchChainId"
66
+ }));
67
+ const waitForTransactionsReady = endpoints.faucetUrl !== void 0 ? yield* buildWaitForTransactionsReady(endpoints.faucetUrl) : noopWaitForTransactionsReady;
68
+ const { client } = assembleSuiClient({
69
+ sdkClient,
70
+ chain,
71
+ rpcUrl: endpoints.rpcUrl,
72
+ ...endpoints.faucetUrl !== void 0 ? { faucetUrl: endpoints.faucetUrl } : {},
73
+ ...endpoints.graphqlUrl !== void 0 ? { graphqlUrl: endpoints.graphqlUrl } : {},
74
+ waitForTransactionsReady
75
+ });
76
+ return {
77
+ resolved: makeResolvedNetwork({
78
+ mode: "live",
79
+ chain,
80
+ rpc: endpoints.rpcUrl,
81
+ source: opts.rpcUrl === void 0 && opts.faucetUrl === void 0 && opts.graphqlUrl === void 0 ? "default" : "config",
82
+ ...endpoints.faucetUrl !== void 0 ? { faucet: endpoints.faucetUrl } : {},
83
+ ...endpoints.graphqlUrl !== void 0 ? { graphql: endpoints.graphqlUrl } : {}
84
+ }),
85
+ client
86
+ };
87
+ }).pipe(Effect.withSpan("devstack.plugin.sui.live.boot", { attributes: {
88
+ "devstack.plugin": "sui",
89
+ "sui.mode": "live"
90
+ } }));
91
+ const stringifyCause = (cause) => {
92
+ if (cause instanceof Error) return cause.message;
93
+ if (typeof cause === "string") return cause;
94
+ try {
95
+ return JSON.stringify(cause);
96
+ } catch {
97
+ return String(cause);
98
+ }
99
+ };
100
+ //#endregion
101
+ export { bootLiveMode };
102
+
103
+ //# sourceMappingURL=live.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live.mjs","names":[],"sources":["../../../../src/plugins/sui/mode/live.ts"],"sourcesContent":["// Sui plugin — live mode (testnet / mainnet / devnet / custom).\n//\n// Wraps a public or caller-provided Sui RPC. Testnet has a faucet;\n// mainnet has none; custom may or may not.\n//\n// What's hard:\n// - No ready probe is meaningful (the public chain is always\n// up); chain-id fetch IS the only sentinel with a bounded\n// timeout.\n// - Faucet-less networks (mainnet) need a \"no-op\" funds-ready\n// gate so downstream callers don't have to branch.\n// - The KnownPackage substrate contributions are wired here so\n// wallet-standard / MVR / known-deployment lookups find the\n// right published ids.\n//\n// Live mode contributes a `NetworkResolver`, a `ChainProbe`, and a\n// `Codegenable` — but NO managed container, NO `Routable`, and the\n// build container is forced to the host CLI path (no in-stack\n// build image). The latter is flagged in the distilled-doc Open\n// questions as a candidate to revisit.\n//\n// Boot sequence:\n//\n// 1. Resolve `rpcUrl` / `faucetUrl` / `graphqlUrl` from caller\n// overrides, then fall back to `LIVE_DEFAULTS` for known nets.\n// `custom` requires `rpcUrl` — surface a typed refusal if\n// omitted.\n// 2. Construct `SuiGrpcClient` against the resolved URL with the\n// matching `network:` discriminator (so MVR / wallet-standard\n// hints route correctly).\n// 3. Fetch chain id (the only readiness sentinel for live).\n// 4. Build `waitForTransactionsReady`:\n// - mainnet: trivially-succeeding no-op (no faucet exists).\n// - testnet/devnet/custom-with-faucet: real HTTP probe.\n// - custom-without-faucet: no-op.\n\nimport { Duration, Effect, type Scope } from 'effect';\n\nimport { SuiGrpcClient } from '@mysten/sui/grpc';\n\nimport { suiPluginError, type SuiPluginError } from '../errors.ts';\nimport type { ResolvedSuiNetwork } from '../network-resolver.ts';\nimport type { SuiClient } from './shared.ts';\nimport {\n\tassembleSuiClient,\n\tbuildWaitForTransactionsReady,\n\tfetchChainId,\n\tmakeResolvedNetwork,\n\tnoopWaitForTransactionsReady,\n} from './shared-boot.ts';\nimport type { SuiLiveOptions } from './spec.ts';\n\n/** Default chain-id fetch timeout for live RPCs. */\nexport const DEFAULT_LIVE_CHAIN_ID_TIMEOUT = Duration.seconds(30);\n\n/** Default RPC endpoints per known network. `custom` requires the\n * caller to supply `rpcUrl`. */\nexport const LIVE_DEFAULTS = {\n\ttestnet: {\n\t\trpcUrl: 'https://fullnode.testnet.sui.io:443',\n\t\tfaucetUrl: 'https://faucet.testnet.sui.io',\n\t\tgraphqlUrl: 'https://sui-testnet.mystenlabs.com/graphql',\n\t},\n\tmainnet: {\n\t\trpcUrl: 'https://fullnode.mainnet.sui.io:443',\n\t\tfaucetUrl: undefined as string | undefined,\n\t\tgraphqlUrl: 'https://sui-mainnet.mystenlabs.com/graphql',\n\t},\n\tdevnet: {\n\t\trpcUrl: 'https://fullnode.devnet.sui.io:443',\n\t\tfaucetUrl: 'https://faucet.devnet.sui.io',\n\t\tgraphqlUrl: undefined as string | undefined,\n\t},\n} as const;\n\n/** Resolved live-mode boot artifacts. */\nexport interface LiveModeBootResult {\n\treadonly resolved: ResolvedSuiNetwork;\n\treadonly client: SuiClient;\n}\n\ninterface ResolvedLiveEndpoints {\n\treadonly rpcUrl: string;\n\treadonly faucetUrl: string | undefined;\n\treadonly graphqlUrl: string | undefined;\n\treadonly sdkNetwork: 'mainnet' | 'testnet' | 'devnet' | 'localnet';\n}\n\n/** Resolve endpoints from caller overrides + the known-network table.\n * Order: caller-provided wins; otherwise the LIVE_DEFAULTS row for\n * the requested network. `custom` MUST carry an explicit `rpcUrl`. */\nconst resolveEndpoints = (\n\topts: SuiLiveOptions,\n): Effect.Effect<ResolvedLiveEndpoints, SuiPluginError> => {\n\tif (opts.network === 'custom') {\n\t\tif (opts.rpcUrl === undefined) {\n\t\t\treturn Effect.fail(\n\t\t\t\tsuiPluginError(\n\t\t\t\t\t'chain-id-fetch',\n\t\t\t\t\t`sui live mode: network='custom' requires opts.rpcUrl. ` +\n\t\t\t\t\t\t`Use suiFor(network).live.custom({rpcUrl: ...}) or pass network='testnet'|'mainnet'|'devnet' to use the built-in defaults.`,\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t\treturn Effect.succeed({\n\t\t\trpcUrl: opts.rpcUrl,\n\t\t\tfaucetUrl: opts.faucetUrl,\n\t\t\tgraphqlUrl: opts.graphqlUrl,\n\t\t\t// SDK accepts arbitrary strings under the `(string & {})`\n\t\t\t// branch; `localnet` is the closest semantic for a custom\n\t\t\t// caller-defined live target.\n\t\t\tsdkNetwork: 'localnet',\n\t\t});\n\t}\n\tconst defaults = LIVE_DEFAULTS[opts.network];\n\treturn Effect.succeed({\n\t\trpcUrl: opts.rpcUrl ?? defaults.rpcUrl,\n\t\tfaucetUrl: opts.faucetUrl ?? defaults.faucetUrl,\n\t\tgraphqlUrl: opts.graphqlUrl ?? defaults.graphqlUrl,\n\t\tsdkNetwork: opts.network,\n\t});\n};\n\n/** Build the live-mode boot Effect. */\nexport const bootLiveMode = (\n\topts: SuiLiveOptions,\n): Effect.Effect<LiveModeBootResult, SuiPluginError, Scope.Scope> =>\n\tEffect.gen(function* () {\n\t\t// ----- 1. Resolve endpoints ------------------------------------------\n\t\tconst endpoints = yield* resolveEndpoints(opts);\n\n\t\tyield* Effect.annotateCurrentSpan({\n\t\t\t'sui.live.network': opts.network,\n\t\t\t'sui.live.rpcUrl': endpoints.rpcUrl,\n\t\t\t'sui.live.faucetUrl': endpoints.faucetUrl ?? '<none>',\n\t\t});\n\n\t\t// ----- 2. Construct the grpc client ----------------------------------\n\t\tconst sdkClient = yield* Effect.try({\n\t\t\ttry: () =>\n\t\t\t\tnew SuiGrpcClient({\n\t\t\t\t\tbaseUrl: endpoints.rpcUrl,\n\t\t\t\t\tnetwork: endpoints.sdkNetwork,\n\t\t\t\t}),\n\t\t\tcatch: (cause): SuiPluginError =>\n\t\t\t\tsuiPluginError(\n\t\t\t\t\t'chain-id-fetch',\n\t\t\t\t\t`sui live mode: SuiGrpcClient construction failed for rpcUrl=${endpoints.rpcUrl}: ${stringifyCause(cause)}`,\n\t\t\t\t\tcause,\n\t\t\t\t),\n\t\t});\n\n\t\t// ----- 3. Resolve chain id -------------------------------------------\n\t\tconst chain =\n\t\t\topts.chain ??\n\t\t\t(yield* fetchChainId(sdkClient, {\n\t\t\t\ttimeout: opts.readyTimeout ?? DEFAULT_LIVE_CHAIN_ID_TIMEOUT,\n\t\t\t\tspan: 'devstack.plugin.sui.live.fetchChainId',\n\t\t\t}));\n\n\t\t// ----- 4. Build waitForTransactionsReady -----------------------------\n\t\t// Mainnet: no faucet exists, gate is a no-op. testnet/devnet/\n\t\t// custom-with-faucet: real HTTP probe (rate-limited by upstream,\n\t\t// but the wire shape is identical to localnet).\n\t\tconst waitForTransactionsReady =\n\t\t\tendpoints.faucetUrl !== undefined\n\t\t\t\t? yield* buildWaitForTransactionsReady(endpoints.faucetUrl)\n\t\t\t\t: noopWaitForTransactionsReady;\n\n\t\t// ----- 5. Assemble + return ------------------------------------------\n\t\tconst { client } = assembleSuiClient({\n\t\t\tsdkClient,\n\t\t\tchain,\n\t\t\trpcUrl: endpoints.rpcUrl,\n\t\t\t...(endpoints.faucetUrl !== undefined ? { faucetUrl: endpoints.faucetUrl } : {}),\n\t\t\t...(endpoints.graphqlUrl !== undefined ? { graphqlUrl: endpoints.graphqlUrl } : {}),\n\t\t\twaitForTransactionsReady,\n\t\t});\n\t\tconst resolved = makeResolvedNetwork({\n\t\t\tmode: 'live',\n\t\t\tchain,\n\t\t\trpc: endpoints.rpcUrl,\n\t\t\t// `source: 'default'` when we pulled from LIVE_DEFAULTS;\n\t\t\t// `'config'` when the caller passed an override. The\n\t\t\t// distinction matters for the doctor's \"where did this\n\t\t\t// value come from\" surface.\n\t\t\tsource:\n\t\t\t\topts.rpcUrl === undefined && opts.faucetUrl === undefined && opts.graphqlUrl === undefined\n\t\t\t\t\t? 'default'\n\t\t\t\t\t: 'config',\n\t\t\t...(endpoints.faucetUrl !== undefined ? { faucet: endpoints.faucetUrl } : {}),\n\t\t\t...(endpoints.graphqlUrl !== undefined ? { graphql: endpoints.graphqlUrl } : {}),\n\t\t});\n\n\t\treturn { resolved, client };\n\t}).pipe(\n\t\tEffect.withSpan('devstack.plugin.sui.live.boot', {\n\t\t\tattributes: { 'devstack.plugin': 'sui', 'sui.mode': 'live' },\n\t\t}),\n\t);\n\nconst stringifyCause = (cause: unknown): string => {\n\tif (cause instanceof Error) return cause.message;\n\tif (typeof cause === 'string') return cause;\n\ttry {\n\t\treturn JSON.stringify(cause);\n\t} catch {\n\t\treturn String(cause);\n\t}\n};\n"],"mappings":";;;;;;AAqDA,MAAa,gCAAgC,SAAS,QAAQ,GAAG;;;AAIjE,MAAa,gBAAgB;CAC5B,SAAS;EACR,QAAQ;EACR,WAAW;EACX,YAAY;EACZ;CACD,SAAS;EACR,QAAQ;EACR,WAAW,KAAA;EACX,YAAY;EACZ;CACD,QAAQ;EACP,QAAQ;EACR,WAAW;EACX,YAAY,KAAA;EACZ;CACD;;;;AAkBD,MAAM,oBACL,SAC0D;AAC1D,KAAI,KAAK,YAAY,UAAU;AAC9B,MAAI,KAAK,WAAW,KAAA,EACnB,QAAO,OAAO,KACb,eACC,kBACA,kLAEA,CACD;AAEF,SAAO,OAAO,QAAQ;GACrB,QAAQ,KAAK;GACb,WAAW,KAAK;GAChB,YAAY,KAAK;GAIjB,YAAY;GACZ,CAAC;;CAEH,MAAM,WAAW,cAAc,KAAK;AACpC,QAAO,OAAO,QAAQ;EACrB,QAAQ,KAAK,UAAU,SAAS;EAChC,WAAW,KAAK,aAAa,SAAS;EACtC,YAAY,KAAK,cAAc,SAAS;EACxC,YAAY,KAAK;EACjB,CAAC;;;AAIH,MAAa,gBACZ,SAEA,OAAO,IAAI,aAAa;CAEvB,MAAM,YAAY,OAAO,iBAAiB,KAAK;AAE/C,QAAO,OAAO,oBAAoB;EACjC,oBAAoB,KAAK;EACzB,mBAAmB,UAAU;EAC7B,sBAAsB,UAAU,aAAa;EAC7C,CAAC;CAGF,MAAM,YAAY,OAAO,OAAO,IAAI;EACnC,WACC,IAAI,cAAc;GACjB,SAAS,UAAU;GACnB,SAAS,UAAU;GACnB,CAAC;EACH,QAAQ,UACP,eACC,kBACA,+DAA+D,UAAU,OAAO,IAAI,eAAe,MAAM,IACzG,MACA;EACF,CAAC;CAGF,MAAM,QACL,KAAK,UACJ,OAAO,aAAa,WAAW;EAC/B,SAAS,KAAK,gBAAgB;EAC9B,MAAM;EACN,CAAC;CAMH,MAAM,2BACL,UAAU,cAAc,KAAA,IACrB,OAAO,8BAA8B,UAAU,UAAU,GACzD;CAGJ,MAAM,EAAE,WAAW,kBAAkB;EACpC;EACA;EACA,QAAQ,UAAU;EAClB,GAAI,UAAU,cAAc,KAAA,IAAY,EAAE,WAAW,UAAU,WAAW,GAAG,EAAE;EAC/E,GAAI,UAAU,eAAe,KAAA,IAAY,EAAE,YAAY,UAAU,YAAY,GAAG,EAAE;EAClF;EACA,CAAC;AAiBF,QAAO;EAAE,UAhBQ,oBAAoB;GACpC,MAAM;GACN;GACA,KAAK,UAAU;GAKf,QACC,KAAK,WAAW,KAAA,KAAa,KAAK,cAAc,KAAA,KAAa,KAAK,eAAe,KAAA,IAC9E,YACA;GACJ,GAAI,UAAU,cAAc,KAAA,IAAY,EAAE,QAAQ,UAAU,WAAW,GAAG,EAAE;GAC5E,GAAI,UAAU,eAAe,KAAA,IAAY,EAAE,SAAS,UAAU,YAAY,GAAG,EAAE;GAC/E,CAEgB;EAAE;EAAQ;EAC1B,CAAC,KACF,OAAO,SAAS,iCAAiC,EAChD,YAAY;CAAE,mBAAmB;CAAO,YAAY;CAAQ,EAC5D,CAAC,CACF;AAEF,MAAM,kBAAkB,UAA2B;AAClD,KAAI,iBAAiB,MAAO,QAAO,MAAM;AACzC,KAAI,OAAO,UAAU,SAAU,QAAO;AACtC,KAAI;AACH,SAAO,KAAK,UAAU,MAAM;SACrB;AACP,SAAO,OAAO,MAAM"}