@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.
- package/LICENSE +189 -0
- package/README.md +94 -0
- package/dist/_virtual/_rolldown/runtime.mjs +13 -0
- package/dist/api/define-capabilities.d.mts +25 -0
- package/dist/api/define-capabilities.mjs +19 -0
- package/dist/api/define-capabilities.mjs.map +1 -0
- package/dist/api/define-devstack-with.d.mts +41 -0
- package/dist/api/define-devstack-with.mjs +24 -0
- package/dist/api/define-devstack-with.mjs.map +1 -0
- package/dist/api/define-devstack.d.mts +62 -0
- package/dist/api/define-devstack.mjs +108 -0
- package/dist/api/define-devstack.mjs.map +1 -0
- package/dist/api/define-plugin.d.mts +1 -0
- package/dist/api/inference-network.mjs +122 -0
- package/dist/api/inference-network.mjs.map +1 -0
- package/dist/api/mode-narrowed-factory.d.mts +26 -0
- package/dist/api/mode-narrowed-factory.mjs +8 -0
- package/dist/api/mode-narrowed-factory.mjs.map +1 -0
- package/dist/api/plugin-errors.mjs +10 -0
- package/dist/api/plugin-errors.mjs.map +1 -0
- package/dist/api/run-stack.d.mts +82 -0
- package/dist/api/run-stack.mjs +127 -0
- package/dist/api/run-stack.mjs.map +1 -0
- package/dist/build-integrations/playwright/config.d.mts +92 -0
- package/dist/build-integrations/playwright/config.mjs +71 -0
- package/dist/build-integrations/playwright/config.mjs.map +1 -0
- package/dist/build-integrations/playwright/errors.d.mts +82 -0
- package/dist/build-integrations/playwright/errors.mjs +43 -0
- package/dist/build-integrations/playwright/errors.mjs.map +1 -0
- package/dist/build-integrations/playwright/global-setup.d.mts +64 -0
- package/dist/build-integrations/playwright/global-setup.mjs +44 -0
- package/dist/build-integrations/playwright/global-setup.mjs.map +1 -0
- package/dist/build-integrations/playwright/index.d.mts +6 -0
- package/dist/build-integrations/playwright/index.mjs +6 -0
- package/dist/build-integrations/playwright/stack-context.d.mts +95 -0
- package/dist/build-integrations/playwright/stack-context.mjs +277 -0
- package/dist/build-integrations/playwright/stack-context.mjs.map +1 -0
- package/dist/build-integrations/playwright/wallet-context.d.mts +87 -0
- package/dist/build-integrations/playwright/wallet-context.mjs +148 -0
- package/dist/build-integrations/playwright/wallet-context.mjs.map +1 -0
- package/dist/build-integrations/runtime/cold-start-url.d.mts +67 -0
- package/dist/build-integrations/runtime/cold-start-url.mjs +56 -0
- package/dist/build-integrations/runtime/cold-start-url.mjs.map +1 -0
- package/dist/build-integrations/runtime/dapp-kit-slot.mjs +10 -0
- package/dist/build-integrations/runtime/dapp-kit-slot.mjs.map +1 -0
- package/dist/build-integrations/runtime/discover.d.mts +78 -0
- package/dist/build-integrations/runtime/discover.mjs +124 -0
- package/dist/build-integrations/runtime/discover.mjs.map +1 -0
- package/dist/build-integrations/runtime/endpoint-registry.d.mts +26 -0
- package/dist/build-integrations/runtime/endpoint-registry.mjs +41 -0
- package/dist/build-integrations/runtime/endpoint-registry.mjs.map +1 -0
- package/dist/build-integrations/runtime/errors.d.mts +64 -0
- package/dist/build-integrations/runtime/errors.mjs +51 -0
- package/dist/build-integrations/runtime/errors.mjs.map +1 -0
- package/dist/build-integrations/runtime/index.d.mts +7 -0
- package/dist/build-integrations/runtime/index.mjs +6 -0
- package/dist/build-integrations/runtime/read-stack-context.d.mts +38 -0
- package/dist/build-integrations/runtime/read-stack-context.mjs +130 -0
- package/dist/build-integrations/runtime/read-stack-context.mjs.map +1 -0
- package/dist/build-integrations/runtime/stack-context.d.mts +53 -0
- package/dist/build-integrations/vitest/config.d.mts +62 -0
- package/dist/build-integrations/vitest/config.mjs +80 -0
- package/dist/build-integrations/vitest/config.mjs.map +1 -0
- package/dist/build-integrations/vitest/env.d.mts +48 -0
- package/dist/build-integrations/vitest/env.mjs +50 -0
- package/dist/build-integrations/vitest/env.mjs.map +1 -0
- package/dist/build-integrations/vitest/errors.d.mts +44 -0
- package/dist/build-integrations/vitest/errors.mjs +18 -0
- package/dist/build-integrations/vitest/errors.mjs.map +1 -0
- package/dist/build-integrations/vitest/index.d.mts +6 -0
- package/dist/build-integrations/vitest/index.mjs +6 -0
- package/dist/build-integrations/vitest/setup.d.mts +53 -0
- package/dist/build-integrations/vitest/setup.mjs +56 -0
- package/dist/build-integrations/vitest/setup.mjs.map +1 -0
- package/dist/build-integrations/vitest/stack-context.d.mts +58 -0
- package/dist/build-integrations/vitest/stack-context.mjs +67 -0
- package/dist/build-integrations/vitest/stack-context.mjs.map +1 -0
- package/dist/cli/main.d.mts +5 -0
- package/dist/cli/main.mjs +586 -0
- package/dist/cli/main.mjs.map +1 -0
- package/dist/cli/prune-direct.mjs +216 -0
- package/dist/cli/prune-direct.mjs.map +1 -0
- package/dist/cli/snapshot-reader.mjs +73 -0
- package/dist/cli/snapshot-reader.mjs.map +1 -0
- package/dist/cli/up-lifecycle.mjs +28 -0
- package/dist/cli/up-lifecycle.mjs.map +1 -0
- package/dist/contracts/capability-decl.d.mts +42 -0
- package/dist/contracts/chain-probe.d.mts +26 -0
- package/dist/contracts/chain-probe.mjs +8 -0
- package/dist/contracts/chain-probe.mjs.map +1 -0
- package/dist/contracts/codegenable.d.mts +43 -0
- package/dist/contracts/container-runtime.d.mts +245 -0
- package/dist/contracts/liveness-classifier.d.mts +19 -0
- package/dist/contracts/network-resolver.d.mts +15 -0
- package/dist/contracts/network-resolver.mjs +7 -0
- package/dist/contracts/network-resolver.mjs.map +1 -0
- package/dist/contracts/projection.d.mts +15 -0
- package/dist/contracts/routable.d.mts +53 -0
- package/dist/contracts/snapshotable.d.mts +39 -0
- package/dist/contracts/strategy-contributor.d.mts +26 -0
- package/dist/index.d.mts +89 -0
- package/dist/index.mjs +37 -0
- package/dist/orchestrators/codegen/bindings.d.mts +2 -0
- package/dist/orchestrators/codegen/bindings.mjs +340 -0
- package/dist/orchestrators/codegen/bindings.mjs.map +1 -0
- package/dist/orchestrators/codegen/emit.mjs +56 -0
- package/dist/orchestrators/codegen/emit.mjs.map +1 -0
- package/dist/orchestrators/codegen/errors.d.mts +1 -0
- package/dist/orchestrators/codegen/errors.mjs +66 -0
- package/dist/orchestrators/codegen/errors.mjs.map +1 -0
- package/dist/orchestrators/codegen/extras.mjs +16 -0
- package/dist/orchestrators/codegen/extras.mjs.map +1 -0
- package/dist/orchestrators/codegen/format.mjs +109 -0
- package/dist/orchestrators/codegen/format.mjs.map +1 -0
- package/dist/orchestrators/codegen/gitignore.mjs +67 -0
- package/dist/orchestrators/codegen/gitignore.mjs.map +1 -0
- package/dist/orchestrators/codegen/paths.d.mts +1 -0
- package/dist/orchestrators/codegen/paths.mjs +33 -0
- package/dist/orchestrators/codegen/paths.mjs.map +1 -0
- package/dist/orchestrators/codegen/permissions.mjs +6 -0
- package/dist/orchestrators/codegen/permissions.mjs.map +1 -0
- package/dist/orchestrators/codegen/service.d.mts +1 -0
- package/dist/orchestrators/codegen/service.mjs +276 -0
- package/dist/orchestrators/codegen/service.mjs.map +1 -0
- package/dist/orchestrators/router/cleanup.mjs +58 -0
- package/dist/orchestrators/router/cleanup.mjs.map +1 -0
- package/dist/orchestrators/router/cors.mjs +31 -0
- package/dist/orchestrators/router/cors.mjs.map +1 -0
- package/dist/orchestrators/router/entrypoints.d.mts +1 -0
- package/dist/orchestrators/router/entrypoints.mjs +80 -0
- package/dist/orchestrators/router/entrypoints.mjs.map +1 -0
- package/dist/orchestrators/router/errors.d.mts +1 -0
- package/dist/orchestrators/router/errors.mjs +103 -0
- package/dist/orchestrators/router/errors.mjs.map +1 -0
- package/dist/orchestrators/router/file-provider.d.mts +1 -0
- package/dist/orchestrators/router/file-provider.mjs +320 -0
- package/dist/orchestrators/router/file-provider.mjs.map +1 -0
- package/dist/orchestrators/router/hostname.d.mts +1 -0
- package/dist/orchestrators/router/hostname.mjs +107 -0
- package/dist/orchestrators/router/hostname.mjs.map +1 -0
- package/dist/orchestrators/router/index.d.mts +1 -0
- package/dist/orchestrators/router/profile.d.mts +1 -0
- package/dist/orchestrators/router/profile.mjs +109 -0
- package/dist/orchestrators/router/profile.mjs.map +1 -0
- package/dist/orchestrators/router/service.d.mts +3 -0
- package/dist/orchestrators/router/service.mjs +421 -0
- package/dist/orchestrators/router/service.mjs.map +1 -0
- package/dist/orchestrators/router/traefik-container.d.mts +1 -0
- package/dist/orchestrators/router/traefik-container.mjs +229 -0
- package/dist/orchestrators/router/traefik-container.mjs.map +1 -0
- package/dist/orchestrators/runtime-composition.d.mts +10 -0
- package/dist/orchestrators/runtime-composition.mjs +168 -0
- package/dist/orchestrators/runtime-composition.mjs.map +1 -0
- package/dist/orchestrators/snapshot/capture.d.mts +1 -0
- package/dist/orchestrators/snapshot/capture.mjs +350 -0
- package/dist/orchestrators/snapshot/capture.mjs.map +1 -0
- package/dist/orchestrators/snapshot/descriptor.d.mts +1 -0
- package/dist/orchestrators/snapshot/descriptor.mjs +109 -0
- package/dist/orchestrators/snapshot/descriptor.mjs.map +1 -0
- package/dist/orchestrators/snapshot/identity-guard.d.mts +1 -0
- package/dist/orchestrators/snapshot/identity-guard.mjs +132 -0
- package/dist/orchestrators/snapshot/identity-guard.mjs.map +1 -0
- package/dist/orchestrators/snapshot/image-bundle-tags.mjs +207 -0
- package/dist/orchestrators/snapshot/image-bundle-tags.mjs.map +1 -0
- package/dist/orchestrators/snapshot/index.d.mts +1 -0
- package/dist/orchestrators/snapshot/integrity.d.mts +1 -0
- package/dist/orchestrators/snapshot/integrity.mjs +74 -0
- package/dist/orchestrators/snapshot/integrity.mjs.map +1 -0
- package/dist/orchestrators/snapshot/prune.d.mts +1 -0
- package/dist/orchestrators/snapshot/prune.mjs +110 -0
- package/dist/orchestrators/snapshot/prune.mjs.map +1 -0
- package/dist/orchestrators/snapshot/restore.d.mts +1 -0
- package/dist/orchestrators/snapshot/restore.mjs +404 -0
- package/dist/orchestrators/snapshot/restore.mjs.map +1 -0
- package/dist/orchestrators/snapshot/service.d.mts +1 -0
- package/dist/orchestrators/snapshot/service.mjs +296 -0
- package/dist/orchestrators/snapshot/service.mjs.map +1 -0
- package/dist/orchestrators/snapshot/state-document.mjs +18 -0
- package/dist/orchestrators/snapshot/state-document.mjs.map +1 -0
- package/dist/orchestrators/snapshot/wipe.d.mts +1 -0
- package/dist/orchestrators/snapshot/wipe.mjs +59 -0
- package/dist/orchestrators/snapshot/wipe.mjs.map +1 -0
- package/dist/plugins/account/codegen.d.mts +12 -0
- package/dist/plugins/account/codegen.mjs +22 -0
- package/dist/plugins/account/codegen.mjs.map +1 -0
- package/dist/plugins/account/errors.d.mts +44 -0
- package/dist/plugins/account/errors.mjs +16 -0
- package/dist/plugins/account/errors.mjs.map +1 -0
- package/dist/plugins/account/funding.d.mts +94 -0
- package/dist/plugins/account/funding.mjs +199 -0
- package/dist/plugins/account/funding.mjs.map +1 -0
- package/dist/plugins/account/index.d.mts +54 -0
- package/dist/plugins/account/index.mjs +151 -0
- package/dist/plugins/account/index.mjs.map +1 -0
- package/dist/plugins/account/keypair.d.mts +32 -0
- package/dist/plugins/account/keypair.mjs +99 -0
- package/dist/plugins/account/keypair.mjs.map +1 -0
- package/dist/plugins/account/lease.mjs +21 -0
- package/dist/plugins/account/lease.mjs.map +1 -0
- package/dist/plugins/account/registry.d.mts +33 -0
- package/dist/plugins/account/registry.mjs +36 -0
- package/dist/plugins/account/registry.mjs.map +1 -0
- package/dist/plugins/account/service.d.mts +104 -0
- package/dist/plugins/account/service.mjs +405 -0
- package/dist/plugins/account/service.mjs.map +1 -0
- package/dist/plugins/account/snapshot.mjs +33 -0
- package/dist/plugins/account/snapshot.mjs.map +1 -0
- package/dist/plugins/account/variants/env.mjs +24 -0
- package/dist/plugins/account/variants/env.mjs.map +1 -0
- package/dist/plugins/account/variants/ephemeral.mjs +72 -0
- package/dist/plugins/account/variants/ephemeral.mjs.map +1 -0
- package/dist/plugins/account/variants/impersonate.d.mts +16 -0
- package/dist/plugins/account/variants/impersonate.mjs +48 -0
- package/dist/plugins/account/variants/impersonate.mjs.map +1 -0
- package/dist/plugins/account/variants/inline.mjs +13 -0
- package/dist/plugins/account/variants/inline.mjs.map +1 -0
- package/dist/plugins/account/variants/keystore.mjs +93 -0
- package/dist/plugins/account/variants/keystore.mjs.map +1 -0
- package/dist/plugins/account/variants/signer.mjs +31 -0
- package/dist/plugins/account/variants/signer.mjs.map +1 -0
- package/dist/plugins/action/build-context.d.mts +41 -0
- package/dist/plugins/action/discriminator.d.mts +20 -0
- package/dist/plugins/action/discriminator.mjs +13 -0
- package/dist/plugins/action/discriminator.mjs.map +1 -0
- package/dist/plugins/action/errors.d.mts +31 -0
- package/dist/plugins/action/errors.mjs +13 -0
- package/dist/plugins/action/errors.mjs.map +1 -0
- package/dist/plugins/action/execute.d.mts +2 -0
- package/dist/plugins/action/execute.mjs +145 -0
- package/dist/plugins/action/execute.mjs.map +1 -0
- package/dist/plugins/action/index.d.mts +56 -0
- package/dist/plugins/action/index.mjs +82 -0
- package/dist/plugins/action/index.mjs.map +1 -0
- package/dist/plugins/action/service.d.mts +26 -0
- package/dist/plugins/action/service.mjs +84 -0
- package/dist/plugins/action/service.mjs.map +1 -0
- package/dist/plugins/coin/address-resolution.d.mts +34 -0
- package/dist/plugins/coin/address-resolution.mjs +80 -0
- package/dist/plugins/coin/address-resolution.mjs.map +1 -0
- package/dist/plugins/coin/codegen.d.mts +16 -0
- package/dist/plugins/coin/codegen.mjs +21 -0
- package/dist/plugins/coin/codegen.mjs.map +1 -0
- package/dist/plugins/coin/discovery.d.mts +26 -0
- package/dist/plugins/coin/discovery.mjs +112 -0
- package/dist/plugins/coin/discovery.mjs.map +1 -0
- package/dist/plugins/coin/errors.d.mts +48 -0
- package/dist/plugins/coin/errors.mjs +13 -0
- package/dist/plugins/coin/errors.mjs.map +1 -0
- package/dist/plugins/coin/index.d.mts +95 -0
- package/dist/plugins/coin/index.mjs +172 -0
- package/dist/plugins/coin/index.mjs.map +1 -0
- package/dist/plugins/coin/metadata.d.mts +15 -0
- package/dist/plugins/coin/metadata.mjs +99 -0
- package/dist/plugins/coin/metadata.mjs.map +1 -0
- package/dist/plugins/coin/mint.d.mts +34 -0
- package/dist/plugins/coin/mint.mjs +164 -0
- package/dist/plugins/coin/mint.mjs.map +1 -0
- package/dist/plugins/coin/registry.d.mts +1 -0
- package/dist/plugins/coin/registry.mjs +37 -0
- package/dist/plugins/coin/registry.mjs.map +1 -0
- package/dist/plugins/coin/service.d.mts +47 -0
- package/dist/plugins/coin/service.mjs +51 -0
- package/dist/plugins/coin/service.mjs.map +1 -0
- package/dist/plugins/coin/snapshot.mjs +19 -0
- package/dist/plugins/coin/snapshot.mjs.map +1 -0
- package/dist/plugins/coin/type-strings.mjs +49 -0
- package/dist/plugins/coin/type-strings.mjs.map +1 -0
- package/dist/plugins/deepbook/codegen.d.mts +39 -0
- package/dist/plugins/deepbook/codegen.mjs +15 -0
- package/dist/plugins/deepbook/codegen.mjs.map +1 -0
- package/dist/plugins/deepbook/deploy.mjs +437 -0
- package/dist/plugins/deepbook/deploy.mjs.map +1 -0
- package/dist/plugins/deepbook/errors.d.mts +29 -0
- package/dist/plugins/deepbook/errors.mjs +26 -0
- package/dist/plugins/deepbook/errors.mjs.map +1 -0
- package/dist/plugins/deepbook/faucet-strategy.d.mts +8 -0
- package/dist/plugins/deepbook/faucet-strategy.mjs +81 -0
- package/dist/plugins/deepbook/faucet-strategy.mjs.map +1 -0
- package/dist/plugins/deepbook/index.d.mts +171 -0
- package/dist/plugins/deepbook/index.mjs +359 -0
- package/dist/plugins/deepbook/index.mjs.map +1 -0
- package/dist/plugins/deepbook/plugin-key.mjs +7 -0
- package/dist/plugins/deepbook/plugin-key.mjs.map +1 -0
- package/dist/plugins/deepbook/pyth/index.mjs +226 -0
- package/dist/plugins/deepbook/pyth/index.mjs.map +1 -0
- package/dist/plugins/deepbook/routable.mjs +21 -0
- package/dist/plugins/deepbook/routable.mjs.map +1 -0
- package/dist/plugins/deepbook/snapshot.mjs +49 -0
- package/dist/plugins/deepbook/snapshot.mjs.map +1 -0
- package/dist/plugins/deepbook/types.d.mts +125 -0
- package/dist/plugins/deepbook/types.mjs +12 -0
- package/dist/plugins/deepbook/types.mjs.map +1 -0
- package/dist/plugins/faucet/dispatcher.d.mts +9 -0
- package/dist/plugins/faucet/dispatcher.mjs +13 -0
- package/dist/plugins/faucet/dispatcher.mjs.map +1 -0
- package/dist/plugins/faucet/errors.d.mts +86 -0
- package/dist/plugins/faucet/errors.mjs +19 -0
- package/dist/plugins/faucet/errors.mjs.map +1 -0
- package/dist/plugins/faucet/http.mjs +127 -0
- package/dist/plugins/faucet/http.mjs.map +1 -0
- package/dist/plugins/faucet/index.d.mts +43 -0
- package/dist/plugins/faucet/index.mjs +42 -0
- package/dist/plugins/faucet/index.mjs.map +1 -0
- package/dist/plugins/faucet/service.d.mts +20 -0
- package/dist/plugins/faucet/strategies/sui-local.d.mts +23 -0
- package/dist/plugins/faucet/strategies/sui-local.mjs +29 -0
- package/dist/plugins/faucet/strategies/sui-local.mjs.map +1 -0
- package/dist/plugins/host-service/errors.d.mts +27 -0
- package/dist/plugins/host-service/errors.mjs +14 -0
- package/dist/plugins/host-service/errors.mjs.map +1 -0
- package/dist/plugins/host-service/index.d.mts +10 -0
- package/dist/plugins/host-service/index.mjs +48 -0
- package/dist/plugins/host-service/index.mjs.map +1 -0
- package/dist/plugins/host-service/routable.mjs +24 -0
- package/dist/plugins/host-service/routable.mjs.map +1 -0
- package/dist/plugins/host-service/service.d.mts +49 -0
- package/dist/plugins/host-service/service.mjs +375 -0
- package/dist/plugins/host-service/service.mjs.map +1 -0
- package/dist/plugins/package/build.d.mts +1 -0
- package/dist/plugins/package/build.mjs +24 -0
- package/dist/plugins/package/build.mjs.map +1 -0
- package/dist/plugins/package/codegen.d.mts +19 -0
- package/dist/plugins/package/codegen.mjs +41 -0
- package/dist/plugins/package/codegen.mjs.map +1 -0
- package/dist/plugins/package/dep-resolution.mjs +10 -0
- package/dist/plugins/package/dep-resolution.mjs.map +1 -0
- package/dist/plugins/package/errors.d.mts +34 -0
- package/dist/plugins/package/errors.mjs +13 -0
- package/dist/plugins/package/errors.mjs.map +1 -0
- package/dist/plugins/package/index.d.mts +109 -0
- package/dist/plugins/package/index.mjs +207 -0
- package/dist/plugins/package/index.mjs.map +1 -0
- package/dist/plugins/package/mode-known.mjs +41 -0
- package/dist/plugins/package/mode-known.mjs.map +1 -0
- package/dist/plugins/package/mode-local.d.mts +1 -0
- package/dist/plugins/package/mode-local.mjs +183 -0
- package/dist/plugins/package/mode-local.mjs.map +1 -0
- package/dist/plugins/package/publish-executor.mjs +202 -0
- package/dist/plugins/package/publish-executor.mjs.map +1 -0
- package/dist/plugins/package/publish-output.d.mts +28 -0
- package/dist/plugins/package/publish-output.mjs +45 -0
- package/dist/plugins/package/publish-output.mjs.map +1 -0
- package/dist/plugins/package/registry.d.mts +25 -0
- package/dist/plugins/package/registry.mjs +30 -0
- package/dist/plugins/package/registry.mjs.map +1 -0
- package/dist/plugins/package/service.mjs +20 -0
- package/dist/plugins/package/service.mjs.map +1 -0
- package/dist/plugins/package/snapshot.mjs +25 -0
- package/dist/plugins/package/snapshot.mjs.map +1 -0
- package/dist/plugins/postgres/codegen.mjs +42 -0
- package/dist/plugins/postgres/codegen.mjs.map +1 -0
- package/dist/plugins/postgres/connection.d.mts +33 -0
- package/dist/plugins/postgres/connection.mjs +19 -0
- package/dist/plugins/postgres/connection.mjs.map +1 -0
- package/dist/plugins/postgres/db-ensure.mjs +100 -0
- package/dist/plugins/postgres/db-ensure.mjs.map +1 -0
- package/dist/plugins/postgres/errors.d.mts +55 -0
- package/dist/plugins/postgres/errors.mjs +29 -0
- package/dist/plugins/postgres/errors.mjs.map +1 -0
- package/dist/plugins/postgres/index.d.mts +37 -0
- package/dist/plugins/postgres/index.mjs +75 -0
- package/dist/plugins/postgres/index.mjs.map +1 -0
- package/dist/plugins/postgres/routable.mjs +33 -0
- package/dist/plugins/postgres/routable.mjs.map +1 -0
- package/dist/plugins/postgres/service.d.mts +50 -0
- package/dist/plugins/postgres/service.mjs +145 -0
- package/dist/plugins/postgres/service.mjs.map +1 -0
- package/dist/plugins/postgres/snapshot.d.mts +1 -0
- package/dist/plugins/postgres/snapshot.mjs +32 -0
- package/dist/plugins/postgres/snapshot.mjs.map +1 -0
- package/dist/plugins/router-entrypoints.mjs +21 -0
- package/dist/plugins/router-entrypoints.mjs.map +1 -0
- package/dist/plugins/seal/bootstrap-assets/cargo-image.mjs +59 -0
- package/dist/plugins/seal/bootstrap-assets/cargo-image.mjs.map +1 -0
- package/dist/plugins/seal/bootstrap-assets/source-fetch.mjs +132 -0
- package/dist/plugins/seal/bootstrap-assets/source-fetch.mjs.map +1 -0
- package/dist/plugins/seal/codegen.d.mts +19 -0
- package/dist/plugins/seal/codegen.mjs +16 -0
- package/dist/plugins/seal/codegen.mjs.map +1 -0
- package/dist/plugins/seal/config-render.mjs +82 -0
- package/dist/plugins/seal/config-render.mjs.map +1 -0
- package/dist/plugins/seal/deploy.mjs +198 -0
- package/dist/plugins/seal/deploy.mjs.map +1 -0
- package/dist/plugins/seal/errors.d.mts +52 -0
- package/dist/plugins/seal/errors.mjs +19 -0
- package/dist/plugins/seal/errors.mjs.map +1 -0
- package/dist/plugins/seal/index.d.mts +161 -0
- package/dist/plugins/seal/index.mjs +235 -0
- package/dist/plugins/seal/index.mjs.map +1 -0
- package/dist/plugins/seal/key-manager.d.mts +22 -0
- package/dist/plugins/seal/key-manager.mjs +22 -0
- package/dist/plugins/seal/key-manager.mjs.map +1 -0
- package/dist/plugins/seal/key-server.mjs +175 -0
- package/dist/plugins/seal/key-server.mjs.map +1 -0
- package/dist/plugins/seal/keygen.mjs +96 -0
- package/dist/plugins/seal/keygen.mjs.map +1 -0
- package/dist/plugins/seal/mode/fork-known.d.mts +8 -0
- package/dist/plugins/seal/mode/fork-known.mjs +23 -0
- package/dist/plugins/seal/mode/fork-known.mjs.map +1 -0
- package/dist/plugins/seal/mode/live.d.mts +18 -0
- package/dist/plugins/seal/mode/live.mjs +64 -0
- package/dist/plugins/seal/mode/live.mjs.map +1 -0
- package/dist/plugins/seal/mode/local-keygen.mjs +180 -0
- package/dist/plugins/seal/mode/local-keygen.mjs.map +1 -0
- package/dist/plugins/seal/plugin-key.mjs +7 -0
- package/dist/plugins/seal/plugin-key.mjs.map +1 -0
- package/dist/plugins/seal/registry-publish.d.mts +43 -0
- package/dist/plugins/seal/registry-publish.mjs +9 -0
- package/dist/plugins/seal/registry-publish.mjs.map +1 -0
- package/dist/plugins/seal/routable.mjs +57 -0
- package/dist/plugins/seal/routable.mjs.map +1 -0
- package/dist/plugins/seal/service.mjs +17 -0
- package/dist/plugins/seal/service.mjs.map +1 -0
- package/dist/plugins/seal/snapshot.mjs +51 -0
- package/dist/plugins/seal/snapshot.mjs.map +1 -0
- package/dist/plugins/sui/auto-tick.mjs +45 -0
- package/dist/plugins/sui/auto-tick.mjs.map +1 -0
- package/dist/plugins/sui/chain-build-container.d.mts +1 -0
- package/dist/plugins/sui/chain-probe.d.mts +85 -0
- package/dist/plugins/sui/chain-probe.mjs +104 -0
- package/dist/plugins/sui/chain-probe.mjs.map +1 -0
- package/dist/plugins/sui/codegen.d.mts +14 -0
- package/dist/plugins/sui/codegen.mjs +26 -0
- package/dist/plugins/sui/codegen.mjs.map +1 -0
- package/dist/plugins/sui/errors.d.mts +74 -0
- package/dist/plugins/sui/errors.mjs +28 -0
- package/dist/plugins/sui/errors.mjs.map +1 -0
- package/dist/plugins/sui/fork-orchestration.mjs +24 -0
- package/dist/plugins/sui/fork-orchestration.mjs.map +1 -0
- package/dist/plugins/sui/fork-transaction.mjs +96 -0
- package/dist/plugins/sui/fork-transaction.mjs.map +1 -0
- package/dist/plugins/sui/index.d.mts +318 -0
- package/dist/plugins/sui/index.mjs +182 -0
- package/dist/plugins/sui/index.mjs.map +1 -0
- package/dist/plugins/sui/mode/external.mjs +60 -0
- package/dist/plugins/sui/mode/external.mjs.map +1 -0
- package/dist/plugins/sui/mode/fork.mjs +283 -0
- package/dist/plugins/sui/mode/fork.mjs.map +1 -0
- package/dist/plugins/sui/mode/live.mjs +103 -0
- package/dist/plugins/sui/mode/live.mjs.map +1 -0
- package/dist/plugins/sui/mode/local.mjs +293 -0
- package/dist/plugins/sui/mode/local.mjs.map +1 -0
- package/dist/plugins/sui/mode/shared-boot.mjs +254 -0
- package/dist/plugins/sui/mode/shared-boot.mjs.map +1 -0
- package/dist/plugins/sui/mode/shared.d.mts +103 -0
- package/dist/plugins/sui/mode/shared.mjs +12 -0
- package/dist/plugins/sui/mode/shared.mjs.map +1 -0
- package/dist/plugins/sui/mode/spec.d.mts +94 -0
- package/dist/plugins/sui/network-resolver.d.mts +23 -0
- package/dist/plugins/sui/routable.mjs +88 -0
- package/dist/plugins/sui/routable.mjs.map +1 -0
- package/dist/plugins/sui/seed-objects.d.mts +18 -0
- package/dist/plugins/sui/seed-objects.mjs +25 -0
- package/dist/plugins/sui/seed-objects.mjs.map +1 -0
- package/dist/plugins/sui/service.mjs +38 -0
- package/dist/plugins/sui/service.mjs.map +1 -0
- package/dist/plugins/sui/snapshot.mjs +53 -0
- package/dist/plugins/sui/snapshot.mjs.map +1 -0
- package/dist/plugins/wallet/codegen.d.mts +33 -0
- package/dist/plugins/wallet/codegen.mjs +34 -0
- package/dist/plugins/wallet/codegen.mjs.map +1 -0
- package/dist/plugins/wallet/errors.d.mts +66 -0
- package/dist/plugins/wallet/errors.mjs +16 -0
- package/dist/plugins/wallet/errors.mjs.map +1 -0
- package/dist/plugins/wallet/index.d.mts +63 -0
- package/dist/plugins/wallet/index.mjs +126 -0
- package/dist/plugins/wallet/index.mjs.map +1 -0
- package/dist/plugins/wallet/origin-policy.d.mts +1 -0
- package/dist/plugins/wallet/origin-policy.mjs +65 -0
- package/dist/plugins/wallet/origin-policy.mjs.map +1 -0
- package/dist/plugins/wallet/pairing.d.mts +11 -0
- package/dist/plugins/wallet/pairing.mjs +125 -0
- package/dist/plugins/wallet/pairing.mjs.map +1 -0
- package/dist/plugins/wallet/protocol.d.mts +1 -0
- package/dist/plugins/wallet/protocol.mjs +96 -0
- package/dist/plugins/wallet/protocol.mjs.map +1 -0
- package/dist/plugins/wallet/routable.mjs +32 -0
- package/dist/plugins/wallet/routable.mjs.map +1 -0
- package/dist/plugins/wallet/server.d.mts +12 -0
- package/dist/plugins/wallet/server.mjs +317 -0
- package/dist/plugins/wallet/server.mjs.map +1 -0
- package/dist/plugins/wallet/service.d.mts +68 -0
- package/dist/plugins/wallet/service.mjs +97 -0
- package/dist/plugins/wallet/service.mjs.map +1 -0
- package/dist/plugins/wallet/snapshot.d.mts +1 -0
- package/dist/plugins/wallet/snapshot.mjs +14 -0
- package/dist/plugins/wallet/snapshot.mjs.map +1 -0
- package/dist/plugins/walrus/bootstrap-assets/cargo-image.mjs +42 -0
- package/dist/plugins/walrus/bootstrap-assets/cargo-image.mjs.map +1 -0
- package/dist/plugins/walrus/codegen.d.mts +38 -0
- package/dist/plugins/walrus/codegen.mjs +34 -0
- package/dist/plugins/walrus/codegen.mjs.map +1 -0
- package/dist/plugins/walrus/deploy-paths.mjs +14 -0
- package/dist/plugins/walrus/deploy-paths.mjs.map +1 -0
- package/dist/plugins/walrus/deploy.d.mts +1 -0
- package/dist/plugins/walrus/deploy.mjs +224 -0
- package/dist/plugins/walrus/deploy.mjs.map +1 -0
- package/dist/plugins/walrus/errors.d.mts +38 -0
- package/dist/plugins/walrus/errors.mjs +26 -0
- package/dist/plugins/walrus/errors.mjs.map +1 -0
- package/dist/plugins/walrus/faucet-strategy.d.mts +12 -0
- package/dist/plugins/walrus/faucet-strategy.mjs +62 -0
- package/dist/plugins/walrus/faucet-strategy.mjs.map +1 -0
- package/dist/plugins/walrus/index.d.mts +177 -0
- package/dist/plugins/walrus/index.mjs +284 -0
- package/dist/plugins/walrus/index.mjs.map +1 -0
- package/dist/plugins/walrus/mode/known-deploy.d.mts +25 -0
- package/dist/plugins/walrus/mode/known-deploy.mjs +71 -0
- package/dist/plugins/walrus/mode/known-deploy.mjs.map +1 -0
- package/dist/plugins/walrus/mode/local-cluster.d.mts +34 -0
- package/dist/plugins/walrus/mode/local-cluster.mjs +153 -0
- package/dist/plugins/walrus/mode/local-cluster.mjs.map +1 -0
- package/dist/plugins/walrus/plugin-key.mjs +7 -0
- package/dist/plugins/walrus/plugin-key.mjs.map +1 -0
- package/dist/plugins/walrus/registry-publish.d.mts +24 -0
- package/dist/plugins/walrus/registry-publish.mjs +7 -0
- package/dist/plugins/walrus/registry-publish.mjs.map +1 -0
- package/dist/plugins/walrus/routable.mjs +99 -0
- package/dist/plugins/walrus/routable.mjs.map +1 -0
- package/dist/plugins/walrus/service.mjs +20 -0
- package/dist/plugins/walrus/service.mjs.map +1 -0
- package/dist/plugins/walrus/snapshot.mjs +53 -0
- package/dist/plugins/walrus/snapshot.mjs.map +1 -0
- package/dist/plugins/walrus/storage-nodes.d.mts +15 -0
- package/dist/plugins/walrus/storage-nodes.mjs +154 -0
- package/dist/plugins/walrus/storage-nodes.mjs.map +1 -0
- package/dist/plugins/walrus/wal-swap.d.mts +2 -0
- package/dist/plugins/walrus/wal-swap.mjs +58 -0
- package/dist/plugins/walrus/wal-swap.mjs.map +1 -0
- package/dist/primitives/artifact-publisher.d.mts +12 -0
- package/dist/primitives/cache.d.mts +1 -0
- package/dist/runtime/built-in-plugin-layers.mjs +49 -0
- package/dist/runtime/built-in-plugin-layers.mjs.map +1 -0
- package/dist/runtime/docker/client.d.mts +2 -0
- package/dist/runtime/docker/client.mjs +54 -0
- package/dist/runtime/docker/client.mjs.map +1 -0
- package/dist/runtime/docker/container.d.mts +1 -0
- package/dist/runtime/docker/container.mjs +562 -0
- package/dist/runtime/docker/container.mjs.map +1 -0
- package/dist/runtime/docker/errors.d.mts +1 -0
- package/dist/runtime/docker/errors.mjs +187 -0
- package/dist/runtime/docker/errors.mjs.map +1 -0
- package/dist/runtime/docker/exec.d.mts +1 -0
- package/dist/runtime/docker/exec.mjs +63 -0
- package/dist/runtime/docker/exec.mjs.map +1 -0
- package/dist/runtime/docker/image.d.mts +1 -0
- package/dist/runtime/docker/image.mjs +278 -0
- package/dist/runtime/docker/image.mjs.map +1 -0
- package/dist/runtime/docker/index.d.mts +1 -0
- package/dist/runtime/docker/inventory.d.mts +1 -0
- package/dist/runtime/docker/inventory.mjs +167 -0
- package/dist/runtime/docker/inventory.mjs.map +1 -0
- package/dist/runtime/docker/labels.d.mts +1 -0
- package/dist/runtime/docker/labels.mjs +97 -0
- package/dist/runtime/docker/labels.mjs.map +1 -0
- package/dist/runtime/docker/logs.d.mts +1 -0
- package/dist/runtime/docker/logs.mjs +34 -0
- package/dist/runtime/docker/logs.mjs.map +1 -0
- package/dist/runtime/docker/network.d.mts +1 -0
- package/dist/runtime/docker/network.mjs +168 -0
- package/dist/runtime/docker/network.mjs.map +1 -0
- package/dist/runtime/docker/service.d.mts +9 -0
- package/dist/runtime/docker/service.mjs +266 -0
- package/dist/runtime/docker/service.mjs.map +1 -0
- package/dist/runtime/docker/sweep.d.mts +1 -0
- package/dist/runtime/docker/sweep.mjs +220 -0
- package/dist/runtime/docker/sweep.mjs.map +1 -0
- package/dist/runtime/docker/volume.d.mts +1 -0
- package/dist/runtime/docker/volume.mjs +24 -0
- package/dist/runtime/docker/volume.mjs.map +1 -0
- package/dist/runtime/docker/wrap.d.mts +1 -0
- package/dist/runtime/docker/wrap.mjs +131 -0
- package/dist/runtime/docker/wrap.mjs.map +1 -0
- package/dist/substrate/brand.d.mts +24 -0
- package/dist/substrate/brand.mjs +14 -0
- package/dist/substrate/brand.mjs.map +1 -0
- package/dist/substrate/cross-process.d.mts +1 -0
- package/dist/substrate/cross-process.mjs +28 -0
- package/dist/substrate/cross-process.mjs.map +1 -0
- package/dist/substrate/events.d.mts +117 -0
- package/dist/substrate/identity.d.mts +13 -0
- package/dist/substrate/lifecycle.d.mts +12 -0
- package/dist/substrate/manifest.d.mts +39 -0
- package/dist/substrate/manifest.mjs +33 -0
- package/dist/substrate/manifest.mjs.map +1 -0
- package/dist/substrate/network.d.mts +34 -0
- package/dist/substrate/options.d.mts +23 -0
- package/dist/substrate/plugin.d.mts +101 -0
- package/dist/substrate/plugin.mjs +61 -0
- package/dist/substrate/plugin.mjs.map +1 -0
- package/dist/substrate/projection.d.mts +100 -0
- package/dist/substrate/runtime/artifact-publisher/index.mjs +76 -0
- package/dist/substrate/runtime/artifact-publisher/index.mjs.map +1 -0
- package/dist/substrate/runtime/atomic-write.mjs +106 -0
- package/dist/substrate/runtime/atomic-write.mjs.map +1 -0
- package/dist/substrate/runtime/cache/index.d.mts +1 -0
- package/dist/substrate/runtime/cache/schema.d.mts +1 -0
- package/dist/substrate/runtime/cache/schema.mjs +22 -0
- package/dist/substrate/runtime/cache/schema.mjs.map +1 -0
- package/dist/substrate/runtime/cache/service.d.mts +1 -0
- package/dist/substrate/runtime/cache/service.mjs +89 -0
- package/dist/substrate/runtime/cache/service.mjs.map +1 -0
- package/dist/substrate/runtime/capability-sinks/index.d.mts +1 -0
- package/dist/substrate/runtime/capability-sinks/layer.d.mts +1 -0
- package/dist/substrate/runtime/capability-sinks/layer.mjs +31 -0
- package/dist/substrate/runtime/capability-sinks/layer.mjs.map +1 -0
- package/dist/substrate/runtime/capability-sinks/service.d.mts +36 -0
- package/dist/substrate/runtime/capability-sinks/service.mjs +74 -0
- package/dist/substrate/runtime/capability-sinks/service.mjs.map +1 -0
- package/dist/substrate/runtime/config-validation.d.mts +38 -0
- package/dist/substrate/runtime/config-validation.mjs +137 -0
- package/dist/substrate/runtime/config-validation.mjs.map +1 -0
- package/dist/substrate/runtime/context-helpers.mjs +32 -0
- package/dist/substrate/runtime/context-helpers.mjs.map +1 -0
- package/dist/substrate/runtime/cross-process/command-channel/channel.mjs +128 -0
- package/dist/substrate/runtime/cross-process/command-channel/channel.mjs.map +1 -0
- package/dist/substrate/runtime/cross-process/command-channel/file-channel.mjs +136 -0
- package/dist/substrate/runtime/cross-process/command-channel/file-channel.mjs.map +1 -0
- package/dist/substrate/runtime/cross-process/command-channel/protocol.mjs +49 -0
- package/dist/substrate/runtime/cross-process/command-channel/protocol.mjs.map +1 -0
- package/dist/substrate/runtime/cross-process/command-channel/runtime-control-lock.mjs +9 -0
- package/dist/substrate/runtime/cross-process/command-channel/runtime-control-lock.mjs.map +1 -0
- package/dist/substrate/runtime/cross-process/liveness.mjs +119 -0
- package/dist/substrate/runtime/cross-process/liveness.mjs.map +1 -0
- package/dist/substrate/runtime/cross-process/roster.mjs +275 -0
- package/dist/substrate/runtime/cross-process/roster.mjs.map +1 -0
- package/dist/substrate/runtime/cross-process/snapshot-reservation.d.mts +1 -0
- package/dist/substrate/runtime/cross-process/snapshot-reservation.mjs +117 -0
- package/dist/substrate/runtime/cross-process/snapshot-reservation.mjs.map +1 -0
- package/dist/substrate/runtime/cross-process/stack-lock.d.mts +1 -0
- package/dist/substrate/runtime/cross-process/stack-lock.mjs +142 -0
- package/dist/substrate/runtime/cross-process/stack-lock.mjs.map +1 -0
- package/dist/substrate/runtime/current-plugin.mjs +15 -0
- package/dist/substrate/runtime/current-plugin.mjs.map +1 -0
- package/dist/substrate/runtime/errors.d.mts +1 -0
- package/dist/substrate/runtime/errors.mjs +76 -0
- package/dist/substrate/runtime/errors.mjs.map +1 -0
- package/dist/substrate/runtime/host-tree-tar/index.mjs +364 -0
- package/dist/substrate/runtime/host-tree-tar/index.mjs.map +1 -0
- package/dist/substrate/runtime/http-probe.d.mts +35 -0
- package/dist/substrate/runtime/http-probe.mjs +65 -0
- package/dist/substrate/runtime/http-probe.mjs.map +1 -0
- package/dist/substrate/runtime/lease-broker/index.d.mts +1 -0
- package/dist/substrate/runtime/lease-broker/service.d.mts +64 -0
- package/dist/substrate/runtime/lease-broker/service.mjs +155 -0
- package/dist/substrate/runtime/lease-broker/service.mjs.map +1 -0
- package/dist/substrate/runtime/lifecycle/dep-graph.d.mts +1 -0
- package/dist/substrate/runtime/lifecycle/dep-graph.mjs +138 -0
- package/dist/substrate/runtime/lifecycle/dep-graph.mjs.map +1 -0
- package/dist/substrate/runtime/lifecycle/index.d.mts +1 -0
- package/dist/substrate/runtime/lifecycle/lifecycle-fact.mjs +31 -0
- package/dist/substrate/runtime/lifecycle/lifecycle-fact.mjs.map +1 -0
- package/dist/substrate/runtime/lifecycle/plugin-registry.d.mts +1 -0
- package/dist/substrate/runtime/lifecycle/plugin-registry.mjs +133 -0
- package/dist/substrate/runtime/lifecycle/plugin-registry.mjs.map +1 -0
- package/dist/substrate/runtime/lifecycle/ready-gate.d.mts +1 -0
- package/dist/substrate/runtime/lifecycle/ready-gate.mjs +34 -0
- package/dist/substrate/runtime/lifecycle/ready-gate.mjs.map +1 -0
- package/dist/substrate/runtime/lifecycle/selective-restart.d.mts +1 -0
- package/dist/substrate/runtime/lifecycle/selective-restart.mjs +43 -0
- package/dist/substrate/runtime/lifecycle/selective-restart.mjs.map +1 -0
- package/dist/substrate/runtime/lifecycle/signals.d.mts +1 -0
- package/dist/substrate/runtime/lifecycle/signals.mjs +64 -0
- package/dist/substrate/runtime/lifecycle/signals.mjs.map +1 -0
- package/dist/substrate/runtime/lifecycle/state-machine.d.mts +1 -0
- package/dist/substrate/runtime/lifecycle/state-machine.mjs +38 -0
- package/dist/substrate/runtime/lifecycle/state-machine.mjs.map +1 -0
- package/dist/substrate/runtime/lifecycle/watch-attribution.d.mts +1 -0
- package/dist/substrate/runtime/lifecycle/watch-attribution.mjs +27 -0
- package/dist/substrate/runtime/lifecycle/watch-attribution.mjs.map +1 -0
- package/dist/substrate/runtime/managed-container.d.mts +30 -0
- package/dist/substrate/runtime/managed-container.mjs +32 -0
- package/dist/substrate/runtime/managed-container.mjs.map +1 -0
- package/dist/substrate/runtime/manifest/manifest.mjs +73 -0
- package/dist/substrate/runtime/manifest/manifest.mjs.map +1 -0
- package/dist/substrate/runtime/mode-errors.d.mts +36 -0
- package/dist/substrate/runtime/observability/cascade-formatter.d.mts +1 -0
- package/dist/substrate/runtime/observability/cascade-formatter.mjs +135 -0
- package/dist/substrate/runtime/observability/cascade-formatter.mjs.map +1 -0
- package/dist/substrate/runtime/observability/formatter-registry.d.mts +1 -0
- package/dist/substrate/runtime/observability/formatter-registry.mjs +65 -0
- package/dist/substrate/runtime/observability/formatter-registry.mjs.map +1 -0
- package/dist/substrate/runtime/observability/index.d.mts +3 -0
- package/dist/substrate/runtime/observability/logger.d.mts +58 -0
- package/dist/substrate/runtime/observability/logger.mjs +89 -0
- package/dist/substrate/runtime/observability/logger.mjs.map +1 -0
- package/dist/substrate/runtime/observability/pretty-error.d.mts +1 -0
- package/dist/substrate/runtime/observability/pretty-error.mjs +119 -0
- package/dist/substrate/runtime/observability/pretty-error.mjs.map +1 -0
- package/dist/substrate/runtime/observability/process-lines.d.mts +31 -0
- package/dist/substrate/runtime/observability/process-lines.mjs +40 -0
- package/dist/substrate/runtime/observability/process-lines.mjs.map +1 -0
- package/dist/substrate/runtime/observability/redaction.d.mts +28 -0
- package/dist/substrate/runtime/observability/redaction.mjs +45 -0
- package/dist/substrate/runtime/observability/redaction.mjs.map +1 -0
- package/dist/substrate/runtime/observability/spans.d.mts +1 -0
- package/dist/substrate/runtime/observability/spans.mjs +87 -0
- package/dist/substrate/runtime/observability/spans.mjs.map +1 -0
- package/dist/substrate/runtime/observability/subprocess-capture.d.mts +2 -0
- package/dist/substrate/runtime/observability/subprocess-capture.mjs +82 -0
- package/dist/substrate/runtime/observability/subprocess-capture.mjs.map +1 -0
- package/dist/substrate/runtime/paths.d.mts +17 -0
- package/dist/substrate/runtime/paths.mjs +61 -0
- package/dist/substrate/runtime/paths.mjs.map +1 -0
- package/dist/substrate/runtime/port-broker/index.d.mts +1 -0
- package/dist/substrate/runtime/port-broker/service.d.mts +1 -0
- package/dist/substrate/runtime/port-broker/service.mjs +319 -0
- package/dist/substrate/runtime/port-broker/service.mjs.map +1 -0
- package/dist/substrate/runtime/post-acquire-tasks.d.mts +1 -0
- package/dist/substrate/runtime/post-acquire-tasks.mjs +34 -0
- package/dist/substrate/runtime/post-acquire-tasks.mjs.map +1 -0
- package/dist/substrate/runtime/probes.d.mts +51 -0
- package/dist/substrate/runtime/probes.mjs +84 -0
- package/dist/substrate/runtime/probes.mjs.map +1 -0
- package/dist/substrate/runtime/process-supervisor.d.mts +57 -0
- package/dist/substrate/runtime/process-supervisor.mjs +73 -0
- package/dist/substrate/runtime/process-supervisor.mjs.map +1 -0
- package/dist/substrate/runtime/projection/operational-endpoints.mjs +44 -0
- package/dist/substrate/runtime/projection/operational-endpoints.mjs.map +1 -0
- package/dist/substrate/runtime/projection/persisted.mjs +195 -0
- package/dist/substrate/runtime/projection/persisted.mjs.map +1 -0
- package/dist/substrate/runtime/projection/state-ref.mjs +48 -0
- package/dist/substrate/runtime/projection/state-ref.mjs.map +1 -0
- package/dist/substrate/runtime/projection/update.mjs +200 -0
- package/dist/substrate/runtime/projection/update.mjs.map +1 -0
- package/dist/substrate/runtime/retry-policy.d.mts +18 -0
- package/dist/substrate/runtime/retry-policy.mjs +16 -0
- package/dist/substrate/runtime/retry-policy.mjs.map +1 -0
- package/dist/substrate/runtime/run.mjs +86 -0
- package/dist/substrate/runtime/run.mjs.map +1 -0
- package/dist/substrate/runtime/runtime-decode.d.mts +32 -0
- package/dist/substrate/runtime/runtime-decode.mjs +53 -0
- package/dist/substrate/runtime/runtime-decode.mjs.map +1 -0
- package/dist/substrate/runtime/scoped-http-server.mjs +36 -0
- package/dist/substrate/runtime/scoped-http-server.mjs.map +1 -0
- package/dist/substrate/runtime/scoped-ref-map/service.mjs +83 -0
- package/dist/substrate/runtime/scoped-ref-map/service.mjs.map +1 -0
- package/dist/substrate/runtime/stage-and-swap/index.d.mts +1 -0
- package/dist/substrate/runtime/stage-and-swap/index.mjs +131 -0
- package/dist/substrate/runtime/stage-and-swap/index.mjs.map +1 -0
- package/dist/substrate/runtime/state-store/schema.mjs +36 -0
- package/dist/substrate/runtime/state-store/schema.mjs.map +1 -0
- package/dist/substrate/runtime/strategy-registry/chain-probe-for.d.mts +1 -0
- package/dist/substrate/runtime/strategy-registry/chain-probe-for.mjs +22 -0
- package/dist/substrate/runtime/strategy-registry/chain-probe-for.mjs.map +1 -0
- package/dist/substrate/runtime/strategy-registry/faucet-capability-for.d.mts +1 -0
- package/dist/substrate/runtime/strategy-registry/faucet-capability-for.mjs +30 -0
- package/dist/substrate/runtime/strategy-registry/faucet-capability-for.mjs.map +1 -0
- package/dist/substrate/runtime/strategy-registry/index.d.mts +1 -0
- package/dist/substrate/runtime/strategy-registry/service.d.mts +1 -0
- package/dist/substrate/runtime/strategy-registry/service.mjs +67 -0
- package/dist/substrate/runtime/strategy-registry/service.mjs.map +1 -0
- package/dist/substrate/runtime/sui-execute/index.d.mts +11 -0
- package/dist/substrate/runtime/sui-execute/index.mjs +144 -0
- package/dist/substrate/runtime/sui-execute/index.mjs.map +1 -0
- package/dist/substrate/runtime/sui-move-build/index.d.mts +1 -0
- package/dist/substrate/runtime/sui-move-build/index.mjs +283 -0
- package/dist/substrate/runtime/sui-move-build/index.mjs.map +1 -0
- package/dist/substrate/runtime/supervisor.d.mts +1 -0
- package/dist/substrate/runtime/supervisor.mjs +831 -0
- package/dist/substrate/runtime/supervisor.mjs.map +1 -0
- package/dist/surfaces/cli/command-tree.mjs +276 -0
- package/dist/surfaces/cli/command-tree.mjs.map +1 -0
- package/dist/surfaces/cli/commands/config.mjs +31 -0
- package/dist/surfaces/cli/commands/config.mjs.map +1 -0
- package/dist/surfaces/cli/commands/confirm-node.mjs +26 -0
- package/dist/surfaces/cli/commands/confirm-node.mjs.map +1 -0
- package/dist/surfaces/cli/commands/confirm.mjs +26 -0
- package/dist/surfaces/cli/commands/confirm.mjs.map +1 -0
- package/dist/surfaces/cli/commands/doctor-probes.mjs +452 -0
- package/dist/surfaces/cli/commands/doctor-probes.mjs.map +1 -0
- package/dist/surfaces/cli/commands/doctor.mjs +38 -0
- package/dist/surfaces/cli/commands/doctor.mjs.map +1 -0
- package/dist/surfaces/cli/commands/prune-picker.mjs +347 -0
- package/dist/surfaces/cli/commands/prune-picker.mjs.map +1 -0
- package/dist/surfaces/cli/commands/prune.mjs +178 -0
- package/dist/surfaces/cli/commands/prune.mjs.map +1 -0
- package/dist/surfaces/cli/commands/snapshot.mjs +141 -0
- package/dist/surfaces/cli/commands/snapshot.mjs.map +1 -0
- package/dist/surfaces/cli/commands/status.mjs +95 -0
- package/dist/surfaces/cli/commands/status.mjs.map +1 -0
- package/dist/surfaces/cli/commands/supervisor-presence.mjs +33 -0
- package/dist/surfaces/cli/commands/supervisor-presence.mjs.map +1 -0
- package/dist/surfaces/cli/commands/wipe.mjs +28 -0
- package/dist/surfaces/cli/commands/wipe.mjs.map +1 -0
- package/dist/surfaces/cli/envelope.mjs +43 -0
- package/dist/surfaces/cli/envelope.mjs.map +1 -0
- package/dist/surfaces/cli/errors.mjs +110 -0
- package/dist/surfaces/cli/errors.mjs.map +1 -0
- package/dist/surfaces/cli/flags.mjs +56 -0
- package/dist/surfaces/cli/flags.mjs.map +1 -0
- package/dist/surfaces/cli/index.mjs +418 -0
- package/dist/surfaces/cli/index.mjs.map +1 -0
- package/dist/surfaces/cli/output.mjs +115 -0
- package/dist/surfaces/cli/output.mjs.map +1 -0
- package/dist/surfaces/cli/sysexits.mjs +139 -0
- package/dist/surfaces/cli/sysexits.mjs.map +1 -0
- package/dist/surfaces/tui/app.mjs +104 -0
- package/dist/surfaces/tui/app.mjs.map +1 -0
- package/dist/surfaces/tui/dashboard.mjs +261 -0
- package/dist/surfaces/tui/dashboard.mjs.map +1 -0
- package/dist/surfaces/tui/display-derivation.mjs +395 -0
- package/dist/surfaces/tui/display-derivation.mjs.map +1 -0
- package/dist/surfaces/tui/errors.mjs +11 -0
- package/dist/surfaces/tui/errors.mjs.map +1 -0
- package/dist/surfaces/tui/event-log.mjs +155 -0
- package/dist/surfaces/tui/event-log.mjs.map +1 -0
- package/dist/surfaces/tui/heartbeat.mjs +33 -0
- package/dist/surfaces/tui/heartbeat.mjs.map +1 -0
- package/dist/surfaces/tui/index.mjs +50 -0
- package/dist/surfaces/tui/index.mjs.map +1 -0
- package/dist/surfaces/tui/input.mjs +104 -0
- package/dist/surfaces/tui/input.mjs.map +1 -0
- package/dist/surfaces/tui/mode-detect.mjs +32 -0
- package/dist/surfaces/tui/mode-detect.mjs.map +1 -0
- package/dist/surfaces/tui/mount-ink.mjs +31 -0
- package/dist/surfaces/tui/mount-ink.mjs.map +1 -0
- package/dist/surfaces/tui/plain-renderer.mjs +170 -0
- package/dist/surfaces/tui/plain-renderer.mjs.map +1 -0
- package/dist/surfaces/tui/resource-table.mjs +507 -0
- package/dist/surfaces/tui/resource-table.mjs.map +1 -0
- package/images/_shared/signal-forward.sh +77 -0
- package/images/postgres/Dockerfile +32 -0
- package/images/seal/Dockerfile +68 -0
- package/images/seal/entrypoint.sh +65 -0
- package/images/sui/Dockerfile +73 -0
- package/images/sui/entrypoint.sh +244 -0
- package/images/sui-fork/Dockerfile +53 -0
- package/images/sui-fork/entrypoint.sh +51 -0
- package/images/walrus/Dockerfile +122 -0
- package/images/walrus/deploy-walrus.sh +305 -0
- package/images/walrus/run-walrus.sh +53 -0
- package/package.json +94 -0
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { Effect } from "effect";
|
|
2
|
+
//#region src/plugins/walrus/snapshot.ts
|
|
3
|
+
/** Build the Snapshotable contribution.
|
|
4
|
+
*
|
|
5
|
+
* `app` / `stack` / `walrusName` are resolved at the plugin's
|
|
6
|
+
* acquire-time so the snapshot's identity guard can match the
|
|
7
|
+
* plugin's actual container labels.
|
|
8
|
+
*
|
|
9
|
+
* `nodeCount` (local mode only) drives the per-node managed-container
|
|
10
|
+
* decls. Each storage node carries `role: storage-node-${i}` so the
|
|
11
|
+
* substrate's label filter pauses/commits each independently. */
|
|
12
|
+
const makeSnapshotable = (mode, app, stack, walrusName, chain, nodeCount = 1) => {
|
|
13
|
+
const labels = (role) => ({
|
|
14
|
+
app,
|
|
15
|
+
stack,
|
|
16
|
+
plugin: "walrus",
|
|
17
|
+
role
|
|
18
|
+
});
|
|
19
|
+
switch (mode) {
|
|
20
|
+
case "local": {
|
|
21
|
+
const perNodeContainers = Array.from({ length: nodeCount }, (_, i) => labels(`storage-node-${i}`));
|
|
22
|
+
return {
|
|
23
|
+
kind: "snapshotable",
|
|
24
|
+
subtrees: [`walrus/${walrusName}/deploy/`],
|
|
25
|
+
managedContainers: perNodeContainers,
|
|
26
|
+
missingTolerance: "fine",
|
|
27
|
+
preRestore: Effect.succeed({
|
|
28
|
+
kind: "walrus",
|
|
29
|
+
mode: "local",
|
|
30
|
+
name: walrusName,
|
|
31
|
+
nodeCount,
|
|
32
|
+
chain
|
|
33
|
+
}),
|
|
34
|
+
postRestore: Effect.void,
|
|
35
|
+
secretMaterial: true
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
case "known": return {
|
|
39
|
+
kind: "snapshotable",
|
|
40
|
+
subtrees: [],
|
|
41
|
+
missingTolerance: "fine",
|
|
42
|
+
preRestore: Effect.succeed({
|
|
43
|
+
kind: "walrus",
|
|
44
|
+
mode: "known",
|
|
45
|
+
chain
|
|
46
|
+
})
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
//#endregion
|
|
51
|
+
export { makeSnapshotable };
|
|
52
|
+
|
|
53
|
+
//# sourceMappingURL=snapshot.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshot.mjs","names":[],"sources":["../../../src/plugins/walrus/snapshot.ts"],"sourcesContent":["// Walrus plugin — Snapshotable contribution.\n//\n// Distilled-doc reference (06-walrus.md §\"Persistence model\" +\n// §\"Hard requirements\" item 7):\n// - `runtime/walrus/<name>/deploy/` MUST ride the snapshot tar.\n// It holds storage-node private keys + per-node configs that\n// `walrus-deploy` wrote; without them, a state-store entry that\n// says \"walrus is already deployed\" cannot be honored on resume.\n// - Local cluster: N storage-node containers' writable layers\n// hold RocksDB at `/var/walrus/storage` — managed-containers\n// declaration; runtime adapter pauses then `docker commit`.\n// Per-node label tuple `role: storage-node-${i}` so the snapshot\n// orchestrator's label filter resolves each node distinctly.\n// - Known-deployment: no containers, no subtrees. The shape still\n// exists so the identity guard fires on restore.\n//\n// Identity guard: contributes the deploy mode + chainId + (when\n// local) the `name` discriminator to the pre-restore identity\n// record. A snapshot taken in local mode restored under known\n// mode (or vice versa) refuses BEFORE any destructive mutation.\n\nimport { Effect } from 'effect';\n\nimport type { ContainerLabelTuple, SnapshotableDecl } from '../../contracts/snapshotable.ts';\n\n/** Discriminator passed to `makeSnapshotable` — narrower than the\n * full mode union because the snapshot shape only cares about\n * \"local with containers\" vs \"known with nothing\". */\nexport type WalrusSnapshotMode = 'local' | 'known';\n\n/** Build the Snapshotable contribution.\n *\n * `app` / `stack` / `walrusName` are resolved at the plugin's\n * acquire-time so the snapshot's identity guard can match the\n * plugin's actual container labels.\n *\n * `nodeCount` (local mode only) drives the per-node managed-container\n * decls. Each storage node carries `role: storage-node-${i}` so the\n * substrate's label filter pauses/commits each independently. */\nexport const makeSnapshotable = (\n\tmode: WalrusSnapshotMode,\n\tapp: string,\n\tstack: string,\n\twalrusName: string,\n\tchain: string,\n\tnodeCount = 1,\n): SnapshotableDecl => {\n\tconst labels = (role: string): ContainerLabelTuple => ({\n\t\tapp,\n\t\tstack,\n\t\tplugin: 'walrus',\n\t\trole,\n\t});\n\n\tswitch (mode) {\n\t\tcase 'local': {\n\t\t\tconst perNodeContainers: ReadonlyArray<ContainerLabelTuple> = Array.from(\n\t\t\t\t{ length: nodeCount },\n\t\t\t\t(_, i) => labels(`storage-node-${i}`),\n\t\t\t);\n\t\t\treturn {\n\t\t\t\tkind: 'snapshotable',\n\t\t\t\t// `runtime/walrus/<name>/deploy/` — the deploy one-shot's\n\t\t\t\t// output dir. The substrate's runtime-dir root is\n\t\t\t\t// resolved at acquire; the path here is relative to it.\n\t\t\t\tsubtrees: [`walrus/${walrusName}/deploy/`],\n\t\t\t\tmanagedContainers: perNodeContainers,\n\t\t\t\tmissingTolerance: 'fine',\n\t\t\t\t// Storage nodes need >10s to flush + checkpoint RocksDB\n\t\t\t\t// on `docker stop`; the snapshot quiesce mirrors the\n\t\t\t\t// stop grace (distilled-doc invariant 22). Default\n\t\t\t\t// \"pause container\" gives us this for free in the\n\t\t\t\t// substrate's adapter.\n\t\t\t\tpreRestore: Effect.succeed({\n\t\t\t\t\tkind: 'walrus' as const,\n\t\t\t\t\tmode: 'local' as const,\n\t\t\t\t\tname: walrusName,\n\t\t\t\t\tnodeCount,\n\t\t\t\t\tchain,\n\t\t\t\t}),\n\t\t\t\tpostRestore: Effect.void,\n\t\t\t\t// Storage-node keystores are secret material; the\n\t\t\t\t// substrate preserves 0o600 on round-trip.\n\t\t\t\tsecretMaterial: true,\n\t\t\t};\n\t\t}\n\t\tcase 'known': {\n\t\t\treturn {\n\t\t\t\tkind: 'snapshotable',\n\t\t\t\tsubtrees: [],\n\t\t\t\tmissingTolerance: 'fine',\n\t\t\t\tpreRestore: Effect.succeed({\n\t\t\t\t\tkind: 'walrus' as const,\n\t\t\t\t\tmode: 'known' as const,\n\t\t\t\t\tchain,\n\t\t\t\t}),\n\t\t\t};\n\t\t}\n\t}\n};\n"],"mappings":";;;;;;;;;;;AAuCA,MAAa,oBACZ,MACA,KACA,OACA,YACA,OACA,YAAY,MACU;CACtB,MAAM,UAAU,UAAuC;EACtD;EACA;EACA,QAAQ;EACR;EACA;AAED,SAAQ,MAAR;EACC,KAAK,SAAS;GACb,MAAM,oBAAwD,MAAM,KACnE,EAAE,QAAQ,WAAW,GACpB,GAAG,MAAM,OAAO,gBAAgB,IAAI,CACrC;AACD,UAAO;IACN,MAAM;IAIN,UAAU,CAAC,UAAU,WAAW,UAAU;IAC1C,mBAAmB;IACnB,kBAAkB;IAMlB,YAAY,OAAO,QAAQ;KAC1B,MAAM;KACN,MAAM;KACN,MAAM;KACN;KACA;KACA,CAAC;IACF,aAAa,OAAO;IAGpB,gBAAgB;IAChB;;EAEF,KAAK,QACJ,QAAO;GACN,MAAM;GACN,UAAU,EAAE;GACZ,kBAAkB;GAClB,YAAY,OAAO,QAAQ;IAC1B,MAAM;IACN,MAAM;IACN;IACA,CAAC;GACF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Effect, Scope } from "effect";
|
|
2
|
+
|
|
3
|
+
//#region src/plugins/walrus/storage-nodes.d.ts
|
|
4
|
+
/** Per-node descriptor — what the plugin resolved value surfaces
|
|
5
|
+
* for downstream consumers (the `@mysten/walrus` SDK reads this). */
|
|
6
|
+
interface WalrusStorageNode {
|
|
7
|
+
readonly nodeIndex: number;
|
|
8
|
+
readonly nodeId: string;
|
|
9
|
+
readonly publicKey: string;
|
|
10
|
+
readonly publicHostname: string;
|
|
11
|
+
readonly rpcUrl: string;
|
|
12
|
+
}
|
|
13
|
+
//#endregion
|
|
14
|
+
export { WalrusStorageNode };
|
|
15
|
+
//# sourceMappingURL=storage-nodes.d.mts.map
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { ProbeTimeoutError, exitCodeProbeResult, waitForProbe } from "../../substrate/runtime/probes.mjs";
|
|
2
|
+
import { ensureManagedContainer } from "../../substrate/runtime/managed-container.mjs";
|
|
3
|
+
import { setCurrentPluginPhase } from "../../substrate/runtime/current-plugin.mjs";
|
|
4
|
+
import { walrusDeployMountPaths } from "./deploy-paths.mjs";
|
|
5
|
+
import { walrusPluginError } from "./errors.mjs";
|
|
6
|
+
import { Duration, Effect, Scope } from "effect";
|
|
7
|
+
/** Default per-node ready-probe timeout. */
|
|
8
|
+
const DEFAULT_NODE_READY_TIMEOUT_MS = 6e4;
|
|
9
|
+
/** Distilled-doc invariant 9: the on-chain `public_port` value
|
|
10
|
+
* matches the global router entrypoint port. One canonical
|
|
11
|
+
* constant — opportunity #14 in the distilled doc was to deduplicate
|
|
12
|
+
* this across three files. */
|
|
13
|
+
const WALRUS_ROUTER_PORT = 9185;
|
|
14
|
+
/** Default container API port — each storage node binds this inside
|
|
15
|
+
* the container. Same value as the router port (the storage node's
|
|
16
|
+
* in-container bind matches the on-chain public_port). */
|
|
17
|
+
const DEFAULT_CONTAINER_API_PORT = WALRUS_ROUTER_PORT;
|
|
18
|
+
/** Compute the public hostname for one storage node. Mirrors
|
|
19
|
+
* v3's `routerHostname(identity, 'walrus-node-' + i)` shape
|
|
20
|
+
* (06-walrus.md §"Routes registered"). Main stack omits the stack
|
|
21
|
+
* segment; non-main inserts it after the service label. */
|
|
22
|
+
const computePublicHostname = (app, stack, nodeIndex) => {
|
|
23
|
+
const base = `walrus-node-${nodeIndex}.${app}.localhost`;
|
|
24
|
+
return stack === "main" ? base : `walrus-node-${nodeIndex}.${stack}.${app}.localhost`;
|
|
25
|
+
};
|
|
26
|
+
const storageNodeConfigHash = (parts) => [
|
|
27
|
+
parts.deployConfigHash,
|
|
28
|
+
`node=${parts.nodeIndex}`,
|
|
29
|
+
`mount=${parts.deploySourceHostPath}->${parts.deployMountTarget}`,
|
|
30
|
+
`api=${parts.containerApiPort}`,
|
|
31
|
+
`net=${parts.walrusNetworkName},${parts.suiNetworkName}`
|
|
32
|
+
].join("|");
|
|
33
|
+
const buildWalrusNetworkName = (app, stack, walrusName) => `devstack-${app}-${stack}-walrus-${walrusName}-net`;
|
|
34
|
+
/** Per-node TCP ready-probe interval. */
|
|
35
|
+
const NODE_READY_PROBE_INTERVAL_MS = 500;
|
|
36
|
+
/** Start the N-node committee.
|
|
37
|
+
*
|
|
38
|
+
* Wiring (this body is the load-bearing path):
|
|
39
|
+
*
|
|
40
|
+
* 1. Defense-in-depth nodeCount guard.
|
|
41
|
+
* 2. Fork a parallel-strategy child scope off the caller's scope so
|
|
42
|
+
* every node's `docker stop` finalizer fires concurrently on
|
|
43
|
+
* outer teardown — collapses shutdown wall-time from `N×grace` to
|
|
44
|
+
* `~max(grace)` (distilled-doc invariant 21).
|
|
45
|
+
* 3. For each `i ∈ [0..N)`:
|
|
46
|
+
* a. `ensureContainer` on the wrapper image with pinned IP,
|
|
47
|
+
* label tuple, primary network attach (walrus net), recreate
|
|
48
|
+
* on config-change.
|
|
49
|
+
* b. TCP ready probe against `<publicHostname>:<routerPort>`
|
|
50
|
+
* with bounded retries until the outer `readyTimeoutMs`.
|
|
51
|
+
* 4. Run [3] under `Effect.all({concurrency: 'unbounded'})` — boot
|
|
52
|
+
* parallelism collapses to ~max(perNode).
|
|
53
|
+
*
|
|
54
|
+
* WHAT THE SUBSTRATE STILL OWES:
|
|
55
|
+
* - Secondary network attach (`Docker.networkConnect(suiNet)`).
|
|
56
|
+
* `EnsureContainerSpec.networkAttach` accepts an array, so passing
|
|
57
|
+
* `[walrusNet, suiNet]` would dual-home in one shot, but the
|
|
58
|
+
* runtime adapter currently treats the first entry as the primary
|
|
59
|
+
* and post-attaches the rest; the per-node pinned IP only attaches
|
|
60
|
+
* to the primary. The dual-home is documented inline below and
|
|
61
|
+
* relies on that adapter behavior. Storage nodes do not request
|
|
62
|
+
* faucet funds during boot; the secondary network is retained for
|
|
63
|
+
* future Sui-side in-network calls.
|
|
64
|
+
* - Per-node `networkAlias` (`walrus-node-<i>.localhost`). The
|
|
65
|
+
* contract doesn't expose alias plumbing yet; peer containers dial by
|
|
66
|
+
* container name, which docker DNS publishes. The architecture
|
|
67
|
+
* revision is tracked in `index.ts`.
|
|
68
|
+
* - Stop-grace duration propagation. The contract's `stop` takes a
|
|
69
|
+
* Duration but `ensureContainer` doesn't yet accept a default
|
|
70
|
+
* grace; the runtime adapter defaults to 10s. RocksDB needs 20s
|
|
71
|
+
* (distilled-doc invariant 22) — see opportunity below.
|
|
72
|
+
*/
|
|
73
|
+
const startStorageNodes = (runtime, spec) => Effect.gen(function* () {
|
|
74
|
+
if (spec.nodeCount < 1) return yield* Effect.fail(walrusPluginError("storage-node", `storage-nodes: nodeCount must be >= 1 (got ${spec.nodeCount})`));
|
|
75
|
+
const outerScope = yield* Effect.scope;
|
|
76
|
+
const nodeStopScope = yield* Scope.fork(outerScope, "parallel");
|
|
77
|
+
const stopGraceSeconds = spec.stopGraceSeconds ?? 20;
|
|
78
|
+
const readyTimeout = Duration.millis(spec.readyTimeoutMs ?? 6e4);
|
|
79
|
+
const deployMount = walrusDeployMountPaths(spec.deployHostMountPath, "/opt/walrus/runtime");
|
|
80
|
+
const indices = Array.from({ length: spec.nodeCount }, (_, i) => i);
|
|
81
|
+
const bootOne = (i) => Effect.gen(function* () {
|
|
82
|
+
const containerIp = `${spec.subnetPrefix}.${10 + i}`;
|
|
83
|
+
const containerName = `devstack-${spec.app}-${spec.stack}-walrus-${spec.walrusName}-node-${i}`;
|
|
84
|
+
const nodeHostname = `dryrun-node-${i}`;
|
|
85
|
+
const publicHostname = computePublicHostname(spec.app, spec.stack, i);
|
|
86
|
+
yield* setCurrentPluginPhase(`creating storage-node-${i} container ${containerName}`);
|
|
87
|
+
const ensureNode = ensureManagedContainer({
|
|
88
|
+
runtime,
|
|
89
|
+
identity: {
|
|
90
|
+
app: spec.app,
|
|
91
|
+
stack: spec.stack
|
|
92
|
+
},
|
|
93
|
+
plugin: "walrus",
|
|
94
|
+
role: `storage-node-${i}`,
|
|
95
|
+
spec: {
|
|
96
|
+
name: containerName,
|
|
97
|
+
image: spec.image,
|
|
98
|
+
recreate: "on-config-change",
|
|
99
|
+
configHash: storageNodeConfigHash({
|
|
100
|
+
deployConfigHash: spec.deployConfigHash,
|
|
101
|
+
nodeIndex: i,
|
|
102
|
+
deploySourceHostPath: deployMount.sourceHostPath,
|
|
103
|
+
deployMountTarget: deployMount.mountTarget,
|
|
104
|
+
containerApiPort: spec.containerApiPort,
|
|
105
|
+
walrusNetworkName: spec.walrusNetworkName,
|
|
106
|
+
suiNetworkName: spec.suiNetworkName
|
|
107
|
+
}),
|
|
108
|
+
env: {
|
|
109
|
+
HOSTNAME: nodeHostname,
|
|
110
|
+
DEPLOY_OUTPUT_DIR: deployMount.outputDirInContainer
|
|
111
|
+
},
|
|
112
|
+
stopGraceSeconds,
|
|
113
|
+
networkAttach: [spec.walrusNetworkName, spec.suiNetworkName],
|
|
114
|
+
extraHosts: { "host.docker.internal": "host-gateway" },
|
|
115
|
+
mounts: [{
|
|
116
|
+
source: deployMount.sourceHostPath,
|
|
117
|
+
target: deployMount.mountTarget,
|
|
118
|
+
readonly: true
|
|
119
|
+
}]
|
|
120
|
+
},
|
|
121
|
+
mapError: (cause) => walrusPluginError("storage-node", `walrus storage-node-${i} (ip=${containerIp}) ensureContainer failed: ${cause.reason}: ${cause.detail}`, { cause })
|
|
122
|
+
});
|
|
123
|
+
const handle = yield* Scope.provide(ensureNode, nodeStopScope);
|
|
124
|
+
yield* setCurrentPluginPhase(`waiting for storage-node-${i} on 127.0.0.1:${spec.containerApiPort}`);
|
|
125
|
+
yield* waitForProbe({
|
|
126
|
+
label: `walrus.storage-node.${i}`,
|
|
127
|
+
timeoutMs: Duration.toMillis(readyTimeout),
|
|
128
|
+
intervalMs: NODE_READY_PROBE_INTERVAL_MS,
|
|
129
|
+
probe: () => runtime.exec(handle, [
|
|
130
|
+
"sh",
|
|
131
|
+
"-c",
|
|
132
|
+
`nc -z 127.0.0.1 ${spec.containerApiPort} || exit 1`
|
|
133
|
+
]).pipe(Effect.map(exitCodeProbeResult))
|
|
134
|
+
}).pipe(Effect.mapError((cause) => {
|
|
135
|
+
if (cause instanceof ProbeTimeoutError) return walrusPluginError("storage-node", `storage-node-${i} never became ready within ${Duration.toMillis(readyTimeout)}ms (container=${containerName}, probe=127.0.0.1:${spec.containerApiPort}, publicUrl=http://${publicHostname}:${WALRUS_ROUTER_PORT}). The container was created, but walrus-node did not bind its API port. Check the storage-node container logs for the faucet, WAL exchange, or walrus-node run step that stalled.`, { cause: cause.lastError ?? cause.lastNotReady ?? cause });
|
|
136
|
+
return walrusPluginError("storage-node", `storage-node-${i} ready-probe exec failed: ${cause.reason}: ${cause.detail}`, { cause });
|
|
137
|
+
}));
|
|
138
|
+
return {
|
|
139
|
+
nodeIndex: i,
|
|
140
|
+
nodeId: `walrus-node-${i}`,
|
|
141
|
+
publicKey: `<bls-pubkey-storage-node-${i}>`,
|
|
142
|
+
publicHostname,
|
|
143
|
+
rpcUrl: `http://${publicHostname}:${WALRUS_ROUTER_PORT}`
|
|
144
|
+
};
|
|
145
|
+
}).pipe(Effect.withSpan(`devstack.plugin.walrus.storage-node-${i}.boot`, { attributes: {
|
|
146
|
+
"devstack.plugin": "walrus",
|
|
147
|
+
"walrus.node": i
|
|
148
|
+
} }));
|
|
149
|
+
return { nodes: yield* Effect.all(indices.map(bootOne), { concurrency: "unbounded" }) };
|
|
150
|
+
}).pipe(Effect.withSpan("devstack.plugin.walrus.storage-nodes.boot", { attributes: { "devstack.plugin": "walrus" } }));
|
|
151
|
+
//#endregion
|
|
152
|
+
export { DEFAULT_CONTAINER_API_PORT, DEFAULT_NODE_READY_TIMEOUT_MS, WALRUS_ROUTER_PORT, buildWalrusNetworkName, computePublicHostname, startStorageNodes };
|
|
153
|
+
|
|
154
|
+
//# sourceMappingURL=storage-nodes.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage-nodes.mjs","names":[],"sources":["../../../src/plugins/walrus/storage-nodes.ts"],"sourcesContent":["// Walrus storage-node committee lifecycle.\n//\n// Distilled-doc reference (06-walrus.md §\"Capabilities CONSUMED\" +\n// §\"Lifecycle phase 4\"): N storage-node containers, pinned IPs on a\n// per-stack /24 docker network. Each node carries one Traefik route\n// via the `Routable` capability; the router binds host port 9185 once\n// globally and dispatches by `Host:` header.\n//\n// Substrate-side responsibilities:\n// - `ContainerRuntime.ensureContainer` per node — content-addressed\n// image, label tuple, recreate policy.\n// - Parallel `Effect.all({concurrency: 'unbounded'})` over [0..N) —\n// concurrent boot.\n// - Per-node stop finalizer fires in a *forked parallel scope* so\n// teardown collapses to ~max(grace) instead of summing graces\n// (distilled-doc invariant 21 — \"StopFinalizerScope MUST be a\n// forked parallel scope\").\n//\n// What we DON'T own here:\n// - Plugin row narration.\n// - The faucet-strategy registration — `faucet-strategy.ts`.\n// - The deploy one-shot — `deploy.ts`.\n\nimport { Duration, Effect, Scope } from 'effect';\n\nimport type {\n\tContainerHandle,\n\tContainerRuntime,\n\tImageRef,\n} from '../../contracts/container-runtime.ts';\nimport {\n\tProbeTimeoutError,\n\texitCodeProbeResult,\n\twaitForProbe,\n} from '../../substrate/runtime/probes.ts';\nimport { setCurrentPluginPhase } from '../../substrate/runtime/current-plugin.ts';\nimport { ensureManagedContainer } from '../../substrate/runtime/managed-container.ts';\nimport { walrusDeployMountPaths } from './deploy-paths.ts';\nimport { walrusPluginError, type WalrusPluginError } from './errors.ts';\n\n/** Default per-node grace window. Storage nodes maintain RocksDB-\n * backed state; need >10s to flush and checkpoint on `docker stop`.\n * Distilled-doc invariant 22. */\nexport const DEFAULT_NODE_STOP_GRACE_SECONDS = 20;\n\n/** Default per-node ready-probe timeout. */\nexport const DEFAULT_NODE_READY_TIMEOUT_MS = 60_000;\n\n/** Distilled-doc invariant 9: the on-chain `public_port` value\n * matches the global router entrypoint port. One canonical\n * constant — opportunity #14 in the distilled doc was to deduplicate\n * this across three files. */\nexport const WALRUS_ROUTER_PORT = 9185;\n\n/** Default container API port — each storage node binds this inside\n * the container. Same value as the router port (the storage node's\n * in-container bind matches the on-chain public_port). */\nexport const DEFAULT_CONTAINER_API_PORT = WALRUS_ROUTER_PORT;\n\n/** Per-node descriptor — what the plugin resolved value surfaces\n * for downstream consumers (the `@mysten/walrus` SDK reads this). */\nexport interface WalrusStorageNode {\n\treadonly nodeIndex: number;\n\treadonly nodeId: string;\n\treadonly publicKey: string;\n\treadonly publicHostname: string;\n\treadonly rpcUrl: string;\n}\n\n/** Storage-node startup config — the plugin's local-cluster mode\n * passes this in once per cluster boot. */\nexport interface StorageNodesSpec {\n\treadonly app: string;\n\treadonly stack: string;\n\treadonly walrusName: string;\n\treadonly image: ImageRef;\n\treadonly nodeCount: number;\n\t/** Pre-allocated /24 prefix from `subnetForStack`. Example:\n\t * `'10.42.7'` (the third octet is hashed per stack). */\n\treadonly subnetPrefix: string;\n\treadonly containerApiPort: number;\n\treadonly walrusNetworkName: string;\n\treadonly suiNetworkName: string;\n\treadonly deployHostMountPath: string;\n\t/** Fingerprint of the deploy outputs mounted into each node. */\n\treadonly deployConfigHash: string;\n\treadonly stopGraceSeconds?: number;\n\treadonly readyTimeoutMs?: number;\n}\n\n/** Result of starting the committee — descriptors used by the\n * plugin's resolved value. */\nexport interface StorageNodesAcquired {\n\treadonly nodes: ReadonlyArray<WalrusStorageNode>;\n}\n\n/** Distilled-doc invariant 1: pinned IPs start at `<prefix>.10`.\n * Centralized so the deploy one-shot's `WALRUS_LISTENING_IPS` env\n * var and the per-node `--ip` pin compute from one source. */\nexport const WALRUS_NODE_IP_BASE = 10;\n\n/** Compute the public hostname for one storage node. Mirrors\n * v3's `routerHostname(identity, 'walrus-node-' + i)` shape\n * (06-walrus.md §\"Routes registered\"). Main stack omits the stack\n * segment; non-main inserts it after the service label. */\nexport const computePublicHostname = (app: string, stack: string, nodeIndex: number): string => {\n\tconst base = `walrus-node-${nodeIndex}.${app}.localhost`;\n\treturn stack === 'main' ? base : `walrus-node-${nodeIndex}.${stack}.${app}.localhost`;\n};\n\nexport const storageNodeConfigHash = (parts: {\n\treadonly deployConfigHash: string;\n\treadonly nodeIndex: number;\n\treadonly deploySourceHostPath: string;\n\treadonly deployMountTarget: string;\n\treadonly containerApiPort: number;\n\treadonly walrusNetworkName: string;\n\treadonly suiNetworkName: string;\n}): string =>\n\t[\n\t\tparts.deployConfigHash,\n\t\t`node=${parts.nodeIndex}`,\n\t\t`mount=${parts.deploySourceHostPath}->${parts.deployMountTarget}`,\n\t\t`api=${parts.containerApiPort}`,\n\t\t`net=${parts.walrusNetworkName},${parts.suiNetworkName}`,\n\t].join('|');\n\nexport const buildWalrusNetworkName = (app: string, stack: string, walrusName: string): string =>\n\t`devstack-${app}-${stack}-walrus-${walrusName}-net`;\n\n/** Per-node TCP ready-probe interval. */\nconst NODE_READY_PROBE_INTERVAL_MS = 500;\n\n/** Start the N-node committee.\n *\n * Wiring (this body is the load-bearing path):\n *\n * 1. Defense-in-depth nodeCount guard.\n * 2. Fork a parallel-strategy child scope off the caller's scope so\n * every node's `docker stop` finalizer fires concurrently on\n * outer teardown — collapses shutdown wall-time from `N×grace` to\n * `~max(grace)` (distilled-doc invariant 21).\n * 3. For each `i ∈ [0..N)`:\n * a. `ensureContainer` on the wrapper image with pinned IP,\n * label tuple, primary network attach (walrus net), recreate\n * on config-change.\n * b. TCP ready probe against `<publicHostname>:<routerPort>`\n * with bounded retries until the outer `readyTimeoutMs`.\n * 4. Run [3] under `Effect.all({concurrency: 'unbounded'})` — boot\n * parallelism collapses to ~max(perNode).\n *\n * WHAT THE SUBSTRATE STILL OWES:\n * - Secondary network attach (`Docker.networkConnect(suiNet)`).\n * `EnsureContainerSpec.networkAttach` accepts an array, so passing\n * `[walrusNet, suiNet]` would dual-home in one shot, but the\n * runtime adapter currently treats the first entry as the primary\n * and post-attaches the rest; the per-node pinned IP only attaches\n * to the primary. The dual-home is documented inline below and\n * relies on that adapter behavior. Storage nodes do not request\n * faucet funds during boot; the secondary network is retained for\n * future Sui-side in-network calls.\n * - Per-node `networkAlias` (`walrus-node-<i>.localhost`). The\n * contract doesn't expose alias plumbing yet; peer containers dial by\n * container name, which docker DNS publishes. The architecture\n * revision is tracked in `index.ts`.\n * - Stop-grace duration propagation. The contract's `stop` takes a\n * Duration but `ensureContainer` doesn't yet accept a default\n * grace; the runtime adapter defaults to 10s. RocksDB needs 20s\n * (distilled-doc invariant 22) — see opportunity below.\n */\nexport const startStorageNodes = (\n\truntime: ContainerRuntime,\n\tspec: StorageNodesSpec,\n): Effect.Effect<StorageNodesAcquired, WalrusPluginError, Scope.Scope> =>\n\tEffect.gen(function* () {\n\t\tif (spec.nodeCount < 1) {\n\t\t\treturn yield* Effect.fail(\n\t\t\t\twalrusPluginError(\n\t\t\t\t\t'storage-node',\n\t\t\t\t\t`storage-nodes: nodeCount must be >= 1 (got ${spec.nodeCount})`,\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\t// Fork a parallel stop-scope. Per-node `ensureContainer` finalizers\n\t\t// fire here on outer teardown; closing the parallel scope races\n\t\t// the per-container `docker stop`s instead of summing them.\n\t\tconst outerScope = yield* Effect.scope;\n\t\tconst nodeStopScope = yield* Scope.fork(outerScope, 'parallel');\n\n\t\tconst stopGraceSeconds = spec.stopGraceSeconds ?? DEFAULT_NODE_STOP_GRACE_SECONDS;\n\t\tconst readyTimeout = Duration.millis(spec.readyTimeoutMs ?? DEFAULT_NODE_READY_TIMEOUT_MS);\n\t\tconst deployMount = walrusDeployMountPaths(spec.deployHostMountPath, '/opt/walrus/runtime');\n\n\t\tconst indices = Array.from({ length: spec.nodeCount }, (_, i) => i);\n\n\t\tconst bootOne = (i: number): Effect.Effect<WalrusStorageNode, WalrusPluginError, Scope.Scope> =>\n\t\t\tEffect.gen(function* () {\n\t\t\t\tconst containerIp = `${spec.subnetPrefix}.${WALRUS_NODE_IP_BASE + i}`;\n\t\t\t\tconst containerName = `devstack-${spec.app}-${spec.stack}-walrus-${spec.walrusName}-node-${i}`;\n\t\t\t\tconst nodeHostname = `dryrun-node-${i}`;\n\t\t\t\tconst publicHostname = computePublicHostname(spec.app, spec.stack, i);\n\n\t\t\t\tyield* setCurrentPluginPhase(`creating storage-node-${i} container ${containerName}`);\n\t\t\t\t// Acquire under the forked parallel stop scope so the\n\t\t\t\t// finalizer (docker stop) joins the per-node fan-out race.\n\t\t\t\tconst ensureNode: Effect.Effect<ContainerHandle, WalrusPluginError, Scope.Scope> =\n\t\t\t\t\tensureManagedContainer<WalrusPluginError>({\n\t\t\t\t\t\truntime,\n\t\t\t\t\t\tidentity: { app: spec.app, stack: spec.stack },\n\t\t\t\t\t\tplugin: 'walrus',\n\t\t\t\t\t\trole: `storage-node-${i}`,\n\t\t\t\t\t\tspec: {\n\t\t\t\t\t\t\tname: containerName,\n\t\t\t\t\t\t\timage: spec.image,\n\t\t\t\t\t\t\trecreate: 'on-config-change',\n\t\t\t\t\t\t\tconfigHash: storageNodeConfigHash({\n\t\t\t\t\t\t\t\tdeployConfigHash: spec.deployConfigHash,\n\t\t\t\t\t\t\t\tnodeIndex: i,\n\t\t\t\t\t\t\t\tdeploySourceHostPath: deployMount.sourceHostPath,\n\t\t\t\t\t\t\t\tdeployMountTarget: deployMount.mountTarget,\n\t\t\t\t\t\t\t\tcontainerApiPort: spec.containerApiPort,\n\t\t\t\t\t\t\t\twalrusNetworkName: spec.walrusNetworkName,\n\t\t\t\t\t\t\t\tsuiNetworkName: spec.suiNetworkName,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\tenv: {\n\t\t\t\t\t\t\t\tHOSTNAME: nodeHostname,\n\t\t\t\t\t\t\t\tDEPLOY_OUTPUT_DIR: deployMount.outputDirInContainer,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tstopGraceSeconds,\n\t\t\t\t\t\t\t// Primary network owns the pinned `--ip`; the\n\t\t\t\t\t\t\t// secondary attach gives docker DNS for the sui\n\t\t\t\t\t\t\t// network. The adapter treats [0] as primary.\n\t\t\t\t\t\t\tnetworkAttach: [spec.walrusNetworkName, spec.suiNetworkName],\n\t\t\t\t\t\t\t// `host-gateway` resolves `host.docker.internal` to\n\t\t\t\t\t\t\t// the host's loopback inside the container — Docker\n\t\t\t\t\t\t\t// Desktop wires this automatically on macOS/Windows\n\t\t\t\t\t\t\t// but native Linux Docker requires the explicit\n\t\t\t\t\t\t\t// `--add-host` flag. Storage nodes dial sui's\n\t\t\t\t\t\t\t// host-bound RPC + faucet via this hostname.\n\t\t\t\t\t\t\textraHosts: { 'host.docker.internal': 'host-gateway' },\n\t\t\t\t\t\t\tmounts: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t// Mount the stack root and point the entrypoint at\n\t\t\t\t\t\t\t\t\t// the deploy child. Docker Desktop can reject\n\t\t\t\t\t\t\t\t\t// freshly-created nested bind sources immediately\n\t\t\t\t\t\t\t\t\t// after a wiped stack recreates them.\n\t\t\t\t\t\t\t\t\tsource: deployMount.sourceHostPath,\n\t\t\t\t\t\t\t\t\ttarget: deployMount.mountTarget,\n\t\t\t\t\t\t\t\t\treadonly: true,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmapError: (cause) =>\n\t\t\t\t\t\t\twalrusPluginError(\n\t\t\t\t\t\t\t\t'storage-node',\n\t\t\t\t\t\t\t\t`walrus storage-node-${i} (ip=${containerIp}) ensureContainer failed: ${cause.reason}: ${cause.detail}`,\n\t\t\t\t\t\t\t\t{ cause },\n\t\t\t\t\t\t\t),\n\t\t\t\t\t});\n\t\t\t\tconst handle: ContainerHandle = yield* Scope.provide(ensureNode, nodeStopScope);\n\n\t\t\t\t// TCP ready probe. We exec a tiny `nc`-style probe inside\n\t\t\t\t// the container against its own listener — proves the\n\t\t\t\t// in-container HTTP server bound and is accepting before\n\t\t\t\t// declaring ready. `exec` only fails on daemon-level\n\t\t\t\t// errors; a non-zero exit code is treated as \"retry\"\n\t\t\t\t// (the same policy postgres uses for `pg_isready`).\n\t\t\t\tyield* setCurrentPluginPhase(\n\t\t\t\t\t`waiting for storage-node-${i} on 127.0.0.1:${spec.containerApiPort}`,\n\t\t\t\t);\n\t\t\t\tyield* waitForProbe({\n\t\t\t\t\tlabel: `walrus.storage-node.${i}`,\n\t\t\t\t\ttimeoutMs: Duration.toMillis(readyTimeout),\n\t\t\t\t\tintervalMs: NODE_READY_PROBE_INTERVAL_MS,\n\t\t\t\t\tprobe: () =>\n\t\t\t\t\t\truntime\n\t\t\t\t\t\t\t.exec(handle, [\n\t\t\t\t\t\t\t\t'sh',\n\t\t\t\t\t\t\t\t'-c',\n\t\t\t\t\t\t\t\t// busybox-style portable probe: open TCP, write\n\t\t\t\t\t\t\t\t// nothing, exit. `nc -z` is the common form.\n\t\t\t\t\t\t\t\t`nc -z 127.0.0.1 ${spec.containerApiPort} || exit 1`,\n\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t.pipe(Effect.map(exitCodeProbeResult)),\n\t\t\t\t}).pipe(\n\t\t\t\t\tEffect.mapError((cause) => {\n\t\t\t\t\t\tif (cause instanceof ProbeTimeoutError) {\n\t\t\t\t\t\t\treturn walrusPluginError(\n\t\t\t\t\t\t\t\t'storage-node',\n\t\t\t\t\t\t\t\t`storage-node-${i} never became ready within ${Duration.toMillis(readyTimeout)}ms ` +\n\t\t\t\t\t\t\t\t\t`(container=${containerName}, probe=127.0.0.1:${spec.containerApiPort}, ` +\n\t\t\t\t\t\t\t\t\t`publicUrl=http://${publicHostname}:${WALRUS_ROUTER_PORT}). ` +\n\t\t\t\t\t\t\t\t\t`The container was created, but walrus-node did not bind its API port. ` +\n\t\t\t\t\t\t\t\t\t`Check the storage-node container logs for the faucet, WAL exchange, or ` +\n\t\t\t\t\t\t\t\t\t`walrus-node run step that stalled.`,\n\t\t\t\t\t\t\t\t{ cause: cause.lastError ?? cause.lastNotReady ?? cause },\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn walrusPluginError(\n\t\t\t\t\t\t\t'storage-node',\n\t\t\t\t\t\t\t`storage-node-${i} ready-probe exec failed: ${cause.reason}: ${cause.detail}`,\n\t\t\t\t\t\t\t{ cause },\n\t\t\t\t\t\t);\n\t\t\t\t\t}),\n\t\t\t\t);\n\n\t\t\t\treturn {\n\t\t\t\t\tnodeIndex: i,\n\t\t\t\t\t// Stable node-id derived from name. The on-chain\n\t\t\t\t\t// public_key + bls12-381 keypair lives inside the\n\t\t\t\t\t// per-node keystore the deploy one-shot emitted;\n\t\t\t\t\t// this descriptor is the routing handle, not the\n\t\t\t\t\t// crypto identity. The SDK consumer reads the\n\t\t\t\t\t// public key off `packageConfig` rather than this\n\t\t\t\t\t// per-node descriptor.\n\t\t\t\t\tnodeId: `walrus-node-${i}`,\n\t\t\t\t\tpublicKey: `<bls-pubkey-storage-node-${i}>`,\n\t\t\t\t\tpublicHostname,\n\t\t\t\t\t// Router-fronted URL on the well-known walrus\n\t\t\t\t\t// entrypoint port — Traefik routes by Host: header.\n\t\t\t\t\trpcUrl: `http://${publicHostname}:${WALRUS_ROUTER_PORT}`,\n\t\t\t\t} satisfies WalrusStorageNode;\n\t\t\t}).pipe(\n\t\t\t\tEffect.withSpan(`devstack.plugin.walrus.storage-node-${i}.boot`, {\n\t\t\t\t\tattributes: { 'devstack.plugin': 'walrus', 'walrus.node': i },\n\t\t\t\t}),\n\t\t\t);\n\n\t\tconst nodes = yield* Effect.all(indices.map(bootOne), {\n\t\t\tconcurrency: 'unbounded',\n\t\t});\n\n\t\treturn { nodes };\n\t}).pipe(\n\t\tEffect.withSpan('devstack.plugin.walrus.storage-nodes.boot', {\n\t\t\tattributes: { 'devstack.plugin': 'walrus' },\n\t\t}),\n\t);\n"],"mappings":";;;;;;;AA8CA,MAAa,gCAAgC;;;;;AAM7C,MAAa,qBAAqB;;;;AAKlC,MAAa,6BAA6B;;;;;AAgD1C,MAAa,yBAAyB,KAAa,OAAe,cAA8B;CAC/F,MAAM,OAAO,eAAe,UAAU,GAAG,IAAI;AAC7C,QAAO,UAAU,SAAS,OAAO,eAAe,UAAU,GAAG,MAAM,GAAG,IAAI;;AAG3E,MAAa,yBAAyB,UASrC;CACC,MAAM;CACN,QAAQ,MAAM;CACd,SAAS,MAAM,qBAAqB,IAAI,MAAM;CAC9C,OAAO,MAAM;CACb,OAAO,MAAM,kBAAkB,GAAG,MAAM;CACxC,CAAC,KAAK,IAAI;AAEZ,MAAa,0BAA0B,KAAa,OAAe,eAClE,YAAY,IAAI,GAAG,MAAM,UAAU,WAAW;;AAG/C,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuCrC,MAAa,qBACZ,SACA,SAEA,OAAO,IAAI,aAAa;AACvB,KAAI,KAAK,YAAY,EACpB,QAAO,OAAO,OAAO,KACpB,kBACC,gBACA,8CAA8C,KAAK,UAAU,GAC7D,CACD;CAMF,MAAM,aAAa,OAAO,OAAO;CACjC,MAAM,gBAAgB,OAAO,MAAM,KAAK,YAAY,WAAW;CAE/D,MAAM,mBAAmB,KAAK,oBAAA;CAC9B,MAAM,eAAe,SAAS,OAAO,KAAK,kBAAA,IAAgD;CAC1F,MAAM,cAAc,uBAAuB,KAAK,qBAAqB,sBAAsB;CAE3F,MAAM,UAAU,MAAM,KAAK,EAAE,QAAQ,KAAK,WAAW,GAAG,GAAG,MAAM,EAAE;CAEnE,MAAM,WAAW,MAChB,OAAO,IAAI,aAAa;EACvB,MAAM,cAAc,GAAG,KAAK,aAAa,GAAA,KAAyB;EAClE,MAAM,gBAAgB,YAAY,KAAK,IAAI,GAAG,KAAK,MAAM,UAAU,KAAK,WAAW,QAAQ;EAC3F,MAAM,eAAe,eAAe;EACpC,MAAM,iBAAiB,sBAAsB,KAAK,KAAK,KAAK,OAAO,EAAE;AAErE,SAAO,sBAAsB,yBAAyB,EAAE,aAAa,gBAAgB;EAGrF,MAAM,aACL,uBAA0C;GACzC;GACA,UAAU;IAAE,KAAK,KAAK;IAAK,OAAO,KAAK;IAAO;GAC9C,QAAQ;GACR,MAAM,gBAAgB;GACtB,MAAM;IACL,MAAM;IACN,OAAO,KAAK;IACZ,UAAU;IACV,YAAY,sBAAsB;KACjC,kBAAkB,KAAK;KACvB,WAAW;KACX,sBAAsB,YAAY;KAClC,mBAAmB,YAAY;KAC/B,kBAAkB,KAAK;KACvB,mBAAmB,KAAK;KACxB,gBAAgB,KAAK;KACrB,CAAC;IACF,KAAK;KACJ,UAAU;KACV,mBAAmB,YAAY;KAC/B;IACD;IAIA,eAAe,CAAC,KAAK,mBAAmB,KAAK,eAAe;IAO5D,YAAY,EAAE,wBAAwB,gBAAgB;IACtD,QAAQ,CACP;KAKC,QAAQ,YAAY;KACpB,QAAQ,YAAY;KACpB,UAAU;KACV,CACD;IACD;GACD,WAAW,UACV,kBACC,gBACA,uBAAuB,EAAE,OAAO,YAAY,4BAA4B,MAAM,OAAO,IAAI,MAAM,UAC/F,EAAE,OAAO,CACT;GACF,CAAC;EACH,MAAM,SAA0B,OAAO,MAAM,QAAQ,YAAY,cAAc;AAQ/E,SAAO,sBACN,4BAA4B,EAAE,gBAAgB,KAAK,mBACnD;AACD,SAAO,aAAa;GACnB,OAAO,uBAAuB;GAC9B,WAAW,SAAS,SAAS,aAAa;GAC1C,YAAY;GACZ,aACC,QACE,KAAK,QAAQ;IACb;IACA;IAGA,mBAAmB,KAAK,iBAAiB;IACzC,CAAC,CACD,KAAK,OAAO,IAAI,oBAAoB,CAAC;GACxC,CAAC,CAAC,KACF,OAAO,UAAU,UAAU;AAC1B,OAAI,iBAAiB,kBACpB,QAAO,kBACN,gBACA,gBAAgB,EAAE,6BAA6B,SAAS,SAAS,aAAa,CAAC,gBAChE,cAAc,oBAAoB,KAAK,iBAAiB,qBAClD,eAAe,GAAG,mBAAmB,qLAI1D,EAAE,OAAO,MAAM,aAAa,MAAM,gBAAgB,OAAO,CACzD;AAEF,UAAO,kBACN,gBACA,gBAAgB,EAAE,4BAA4B,MAAM,OAAO,IAAI,MAAM,UACrE,EAAE,OAAO,CACT;IACA,CACF;AAED,SAAO;GACN,WAAW;GAQX,QAAQ,eAAe;GACvB,WAAW,4BAA4B,EAAE;GACzC;GAGA,QAAQ,UAAU,eAAe,GAAG;GACpC;GACA,CAAC,KACF,OAAO,SAAS,uCAAuC,EAAE,QAAQ,EAChE,YAAY;EAAE,mBAAmB;EAAU,eAAe;EAAG,EAC7D,CAAC,CACF;AAMF,QAAO,EAAE,OAAA,OAJY,OAAO,IAAI,QAAQ,IAAI,QAAQ,EAAE,EACrD,aAAa,aACb,CAAC,EAEc;EACf,CAAC,KACF,OAAO,SAAS,6CAA6C,EAC5D,YAAY,EAAE,mBAAmB,UAAU,EAC3C,CAAC,CACF"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { walrusPluginError } from "./errors.mjs";
|
|
2
|
+
import { Effect, Schema } from "effect";
|
|
3
|
+
import { Transaction } from "@mysten/sui/transactions";
|
|
4
|
+
//#region src/plugins/walrus/wal-swap.ts
|
|
5
|
+
const WalExchangeObjectShape = Schema.Struct({
|
|
6
|
+
objectId: Schema.String,
|
|
7
|
+
type: Schema.String
|
|
8
|
+
});
|
|
9
|
+
const resolveWalExchange = (probe, exchangeObjectId) => Effect.gen(function* () {
|
|
10
|
+
if (exchangeObjectId === void 0) return null;
|
|
11
|
+
const found = yield* probe.get({
|
|
12
|
+
kind: "object",
|
|
13
|
+
objectId: exchangeObjectId
|
|
14
|
+
}, WalExchangeObjectShape, "lenient").pipe(Effect.mapError((cause) => walrusPluginError("exchange", `walrus.exchange: failed to resolve exchange object ${exchangeObjectId}: ${cause.reason}: ${cause.detail}`, { cause })));
|
|
15
|
+
if (found === null) return null;
|
|
16
|
+
const packageId = found.type.split("::")[0];
|
|
17
|
+
if (packageId === void 0 || !packageId.startsWith("0x")) return yield* Effect.fail(walrusPluginError("exchange", `walrus.exchange: unexpected exchange object type "${found.type}" — expected "<pkg>::wal_exchange::Exchange"`));
|
|
18
|
+
return {
|
|
19
|
+
objectId: exchangeObjectId,
|
|
20
|
+
packageId
|
|
21
|
+
};
|
|
22
|
+
});
|
|
23
|
+
const buildWalSwapTransaction = (args) => {
|
|
24
|
+
const tx = new Transaction();
|
|
25
|
+
tx.setSender(args.signerAddress);
|
|
26
|
+
const paymentCoin = tx.coin({
|
|
27
|
+
balance: args.paymentMist,
|
|
28
|
+
type: "0x2::sui::SUI",
|
|
29
|
+
useGasCoin: true
|
|
30
|
+
});
|
|
31
|
+
const walCoin = tx.moveCall({
|
|
32
|
+
target: `${args.exchange.packageId}::wal_exchange::exchange_all_for_wal`,
|
|
33
|
+
arguments: [tx.object(args.exchange.objectId), paymentCoin]
|
|
34
|
+
});
|
|
35
|
+
tx.transferObjects([walCoin], tx.pure.address(args.recipientAddress));
|
|
36
|
+
return tx;
|
|
37
|
+
};
|
|
38
|
+
const swapAccountSuiForWal = (args) => args.account.withTransactionSigner((lockedSigner) => Effect.gen(function* () {
|
|
39
|
+
const tx = buildWalSwapTransaction({
|
|
40
|
+
signerAddress: args.account.address,
|
|
41
|
+
recipientAddress: args.recipientAddress,
|
|
42
|
+
exchange: args.exchange,
|
|
43
|
+
paymentMist: args.paymentMist
|
|
44
|
+
});
|
|
45
|
+
const txBytes = yield* Effect.tryPromise({
|
|
46
|
+
try: () => tx.build({ client: args.sdk.client }),
|
|
47
|
+
catch: (cause) => walrusPluginError("fund-wal", `walrus.fundWal: transaction serialization failed for account '${args.account.name}'.`, { cause })
|
|
48
|
+
});
|
|
49
|
+
return { digest: (yield* lockedSigner.signAndExecute(txBytes).pipe(Effect.mapError((cause) => walrusPluginError("fund-wal", `walrus.fundWal: SUI -> WAL swap failed for ${args.recipientAddress} using account '${args.account.name}' (address=${args.account.address}) against exchange ${args.exchange.objectId}.`, { cause })))).digest };
|
|
50
|
+
})).pipe(Effect.withSpan("devstack.plugin.walrus.fundWal", { attributes: {
|
|
51
|
+
"walrus.fund.account": args.account.name,
|
|
52
|
+
"walrus.fund.address": args.recipientAddress,
|
|
53
|
+
"walrus.fund.exchange": args.exchange.objectId
|
|
54
|
+
} }));
|
|
55
|
+
//#endregion
|
|
56
|
+
export { resolveWalExchange, swapAccountSuiForWal };
|
|
57
|
+
|
|
58
|
+
//# sourceMappingURL=wal-swap.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wal-swap.mjs","names":[],"sources":["../../../src/plugins/walrus/wal-swap.ts"],"sourcesContent":["import { Effect, Schema } from 'effect';\nimport { Transaction } from '@mysten/sui/transactions';\n\nimport type { ChainProbe } from '../../contracts/chain-probe.ts';\nimport type { AccountValue } from '../account/index.ts';\nimport { walrusPluginError, type WalrusPluginError } from './errors.ts';\n\nexport interface WalExchangeHandle {\n\treadonly objectId: string;\n\treadonly packageId: string;\n}\n\nexport type WalExchangeProbeKey = { readonly kind: 'object'; readonly objectId: string };\n\nexport interface WalSwapSdk {\n\treadonly client: unknown;\n}\n\nexport interface WalAccountSwapRequest {\n\treadonly account: AccountValue;\n\treadonly sdk: WalSwapSdk;\n\treadonly exchange: WalExchangeHandle;\n\treadonly recipientAddress: string;\n\treadonly paymentMist: bigint;\n}\n\nconst WalExchangeObjectShape = Schema.Struct({\n\tobjectId: Schema.String,\n\ttype: Schema.String,\n});\n\nexport const resolveWalExchange = (\n\tprobe: ChainProbe<WalExchangeProbeKey>,\n\texchangeObjectId: string | undefined,\n): Effect.Effect<WalExchangeHandle | null, WalrusPluginError> =>\n\tEffect.gen(function* () {\n\t\tif (exchangeObjectId === undefined) return null;\n\t\tconst found = yield* probe\n\t\t\t.get({ kind: 'object', objectId: exchangeObjectId }, WalExchangeObjectShape, 'lenient')\n\t\t\t.pipe(\n\t\t\t\tEffect.mapError((cause) =>\n\t\t\t\t\twalrusPluginError(\n\t\t\t\t\t\t'exchange',\n\t\t\t\t\t\t`walrus.exchange: failed to resolve exchange object ${exchangeObjectId}: ${cause.reason}: ${cause.detail}`,\n\t\t\t\t\t\t{ cause },\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t);\n\t\tif (found === null) return null;\n\t\tconst packageId = found.type.split('::')[0];\n\t\tif (packageId === undefined || !packageId.startsWith('0x')) {\n\t\t\treturn yield* Effect.fail(\n\t\t\t\twalrusPluginError(\n\t\t\t\t\t'exchange',\n\t\t\t\t\t`walrus.exchange: unexpected exchange object type \"${found.type}\" — expected \"<pkg>::wal_exchange::Exchange\"`,\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t\treturn { objectId: exchangeObjectId, packageId };\n\t});\n\nexport const buildWalSwapTransaction = (args: {\n\treadonly signerAddress: string;\n\treadonly recipientAddress: string;\n\treadonly exchange: WalExchangeHandle;\n\treadonly paymentMist: bigint;\n}): Transaction => {\n\tconst tx = new Transaction();\n\ttx.setSender(args.signerAddress);\n\tconst paymentCoin = tx.coin({\n\t\tbalance: args.paymentMist,\n\t\ttype: '0x2::sui::SUI',\n\t\tuseGasCoin: true,\n\t});\n\tconst walCoin = tx.moveCall({\n\t\ttarget: `${args.exchange.packageId}::wal_exchange::exchange_all_for_wal`,\n\t\targuments: [tx.object(args.exchange.objectId), paymentCoin],\n\t});\n\ttx.transferObjects([walCoin], tx.pure.address(args.recipientAddress));\n\treturn tx;\n};\n\ntype TransactionBuildClient = Parameters<Transaction['build']>[0] extends\n\t| { readonly client?: infer Client }\n\t| undefined\n\t? Client\n\t: never;\n\nexport const swapAccountSuiForWal = (\n\targs: WalAccountSwapRequest,\n): Effect.Effect<{ readonly digest: string }, WalrusPluginError> =>\n\targs.account\n\t\t.withTransactionSigner((lockedSigner) =>\n\t\t\tEffect.gen(function* () {\n\t\t\t\tconst tx = buildWalSwapTransaction({\n\t\t\t\t\tsignerAddress: args.account.address,\n\t\t\t\t\trecipientAddress: args.recipientAddress,\n\t\t\t\t\texchange: args.exchange,\n\t\t\t\t\tpaymentMist: args.paymentMist,\n\t\t\t\t});\n\t\t\t\tconst txBytes = yield* Effect.tryPromise({\n\t\t\t\t\ttry: () =>\n\t\t\t\t\t\ttx.build({\n\t\t\t\t\t\t\tclient: args.sdk.client as TransactionBuildClient,\n\t\t\t\t\t\t}),\n\t\t\t\t\tcatch: (cause): WalrusPluginError =>\n\t\t\t\t\t\twalrusPluginError(\n\t\t\t\t\t\t\t'fund-wal',\n\t\t\t\t\t\t\t`walrus.fundWal: transaction serialization failed for account '${args.account.name}'.`,\n\t\t\t\t\t\t\t{ cause },\n\t\t\t\t\t\t),\n\t\t\t\t});\n\t\t\t\tconst receipt = yield* lockedSigner\n\t\t\t\t\t.signAndExecute(txBytes)\n\t\t\t\t\t.pipe(\n\t\t\t\t\t\tEffect.mapError(\n\t\t\t\t\t\t\t(cause): WalrusPluginError =>\n\t\t\t\t\t\t\t\twalrusPluginError(\n\t\t\t\t\t\t\t\t\t'fund-wal',\n\t\t\t\t\t\t\t\t\t`walrus.fundWal: SUI -> WAL swap failed for ${args.recipientAddress} ` +\n\t\t\t\t\t\t\t\t\t\t`using account '${args.account.name}' (address=${args.account.address}) ` +\n\t\t\t\t\t\t\t\t\t\t`against exchange ${args.exchange.objectId}.`,\n\t\t\t\t\t\t\t\t\t{ cause },\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\treturn { digest: receipt.digest };\n\t\t\t}),\n\t\t)\n\t\t.pipe(\n\t\t\tEffect.withSpan('devstack.plugin.walrus.fundWal', {\n\t\t\t\tattributes: {\n\t\t\t\t\t'walrus.fund.account': args.account.name,\n\t\t\t\t\t'walrus.fund.address': args.recipientAddress,\n\t\t\t\t\t'walrus.fund.exchange': args.exchange.objectId,\n\t\t\t\t},\n\t\t\t}),\n\t\t);\n"],"mappings":";;;;AA0BA,MAAM,yBAAyB,OAAO,OAAO;CAC5C,UAAU,OAAO;CACjB,MAAM,OAAO;CACb,CAAC;AAEF,MAAa,sBACZ,OACA,qBAEA,OAAO,IAAI,aAAa;AACvB,KAAI,qBAAqB,KAAA,EAAW,QAAO;CAC3C,MAAM,QAAQ,OAAO,MACnB,IAAI;EAAE,MAAM;EAAU,UAAU;EAAkB,EAAE,wBAAwB,UAAU,CACtF,KACA,OAAO,UAAU,UAChB,kBACC,YACA,sDAAsD,iBAAiB,IAAI,MAAM,OAAO,IAAI,MAAM,UAClG,EAAE,OAAO,CACT,CACD,CACD;AACF,KAAI,UAAU,KAAM,QAAO;CAC3B,MAAM,YAAY,MAAM,KAAK,MAAM,KAAK,CAAC;AACzC,KAAI,cAAc,KAAA,KAAa,CAAC,UAAU,WAAW,KAAK,CACzD,QAAO,OAAO,OAAO,KACpB,kBACC,YACA,qDAAqD,MAAM,KAAK,8CAChE,CACD;AAEF,QAAO;EAAE,UAAU;EAAkB;EAAW;EAC/C;AAEH,MAAa,2BAA2B,SAKrB;CAClB,MAAM,KAAK,IAAI,aAAa;AAC5B,IAAG,UAAU,KAAK,cAAc;CAChC,MAAM,cAAc,GAAG,KAAK;EAC3B,SAAS,KAAK;EACd,MAAM;EACN,YAAY;EACZ,CAAC;CACF,MAAM,UAAU,GAAG,SAAS;EAC3B,QAAQ,GAAG,KAAK,SAAS,UAAU;EACnC,WAAW,CAAC,GAAG,OAAO,KAAK,SAAS,SAAS,EAAE,YAAY;EAC3D,CAAC;AACF,IAAG,gBAAgB,CAAC,QAAQ,EAAE,GAAG,KAAK,QAAQ,KAAK,iBAAiB,CAAC;AACrE,QAAO;;AASR,MAAa,wBACZ,SAEA,KAAK,QACH,uBAAuB,iBACvB,OAAO,IAAI,aAAa;CACvB,MAAM,KAAK,wBAAwB;EAClC,eAAe,KAAK,QAAQ;EAC5B,kBAAkB,KAAK;EACvB,UAAU,KAAK;EACf,aAAa,KAAK;EAClB,CAAC;CACF,MAAM,UAAU,OAAO,OAAO,WAAW;EACxC,WACC,GAAG,MAAM,EACR,QAAQ,KAAK,IAAI,QACjB,CAAC;EACH,QAAQ,UACP,kBACC,YACA,iEAAiE,KAAK,QAAQ,KAAK,KACnF,EAAE,OAAO,CACT;EACF,CAAC;AAeF,QAAO,EAAE,SAAQ,OAdM,aACrB,eAAe,QAAQ,CACvB,KACA,OAAO,UACL,UACA,kBACC,YACA,8CAA8C,KAAK,iBAAiB,kBACjD,KAAK,QAAQ,KAAK,aAAa,KAAK,QAAQ,QAAQ,qBAClD,KAAK,SAAS,SAAS,IAC5C,EAAE,OAAO,CACT,CACF,CACD,EACuB,QAAQ;EAChC,CACF,CACA,KACA,OAAO,SAAS,kCAAkC,EACjD,YAAY;CACX,uBAAuB,KAAK,QAAQ;CACpC,uBAAuB,KAAK;CAC5B,wBAAwB,KAAK,SAAS;CACtC,EACD,CAAC,CACF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Effect, Schema, Scope } from "effect";
|
|
2
|
+
|
|
3
|
+
//#region src/primitives/artifact-publisher.d.ts
|
|
4
|
+
/** Tagged error from a publish round. */
|
|
5
|
+
interface ArtifactPublishError {
|
|
6
|
+
readonly _tag: 'ArtifactPublishError';
|
|
7
|
+
readonly reason: 'produce-failed' | 'verify-exhausted' | 'cache-corrupt';
|
|
8
|
+
readonly detail: string;
|
|
9
|
+
}
|
|
10
|
+
//#endregion
|
|
11
|
+
export { ArtifactPublishError };
|
|
12
|
+
//# sourceMappingURL=artifact-publisher.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import { Effect } from "effect";
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { CapabilitySinksService } from "../substrate/runtime/capability-sinks/service.mjs";
|
|
2
|
+
import { layerCapabilitySinksDefault } from "../substrate/runtime/capability-sinks/layer.mjs";
|
|
3
|
+
import { discoverCoinsFromPublish } from "../plugins/coin/discovery.mjs";
|
|
4
|
+
import { CoinRegistryService, coinRegistryLayer } from "../plugins/coin/registry.mjs";
|
|
5
|
+
import { LOCAL_PACKAGE_PUBLISHED_KIND } from "../plugins/package/publish-output.mjs";
|
|
6
|
+
import { PackageRegistryService, layerPackageRegistry } from "../plugins/package/registry.mjs";
|
|
7
|
+
import { Context, Effect, Layer } from "effect";
|
|
8
|
+
//#region src/runtime/built-in-plugin-layers.ts
|
|
9
|
+
const layerBuiltInPluginServices = Layer.mergeAll(coinRegistryLayer, layerPackageRegistry);
|
|
10
|
+
const publishResultSink = (coinRegistry) => ({
|
|
11
|
+
kind: LOCAL_PACKAGE_PUBLISHED_KIND,
|
|
12
|
+
accept: (decl) => Effect.gen(function* () {
|
|
13
|
+
for (const discovered of discoverCoinsFromPublish(decl.output)) {
|
|
14
|
+
const record = {
|
|
15
|
+
key: (discovered.symbol ?? discovered.witness).toLowerCase(),
|
|
16
|
+
type: discovered.fullCoinType,
|
|
17
|
+
witness: discovered.witness,
|
|
18
|
+
moduleName: discovered.moduleName,
|
|
19
|
+
decimals: discovered.decimals ?? 0,
|
|
20
|
+
...discovered.symbol === void 0 ? {} : { symbol: discovered.symbol },
|
|
21
|
+
...discovered.displayName === void 0 ? {} : { displayName: discovered.displayName },
|
|
22
|
+
...discovered.iconUrl === void 0 ? {} : { iconUrl: discovered.iconUrl },
|
|
23
|
+
...!discovered.publisherOwnsCap || discovered.treasuryCapId === void 0 ? {} : { treasuryCapId: discovered.treasuryCapId },
|
|
24
|
+
...discovered.metadataId === void 0 ? {} : { metadataId: discovered.metadataId },
|
|
25
|
+
packageId: decl.packageId,
|
|
26
|
+
publishingPackageName: decl.packageName
|
|
27
|
+
};
|
|
28
|
+
yield* coinRegistry.register(record);
|
|
29
|
+
}
|
|
30
|
+
})
|
|
31
|
+
});
|
|
32
|
+
const layerBuiltInCapabilitySinks = (orchestrator) => {
|
|
33
|
+
return Layer.effectDiscard(Effect.gen(function* () {
|
|
34
|
+
const sinks = yield* CapabilitySinksService;
|
|
35
|
+
const coinRegistry = yield* CoinRegistryService;
|
|
36
|
+
yield* sinks.registerSink(publishResultSink(coinRegistry));
|
|
37
|
+
})).pipe(Layer.provideMerge(layerCapabilitySinksDefault(orchestrator)));
|
|
38
|
+
};
|
|
39
|
+
const layerBuiltInPluginRuntime = (orchestrator) => layerBuiltInCapabilitySinks(orchestrator).pipe(Layer.provideMerge(layerBuiltInPluginServices));
|
|
40
|
+
const extendBuiltInPluginContext = (ctx) => Effect.gen(function* () {
|
|
41
|
+
const coinRegistry = yield* CoinRegistryService;
|
|
42
|
+
const packageRegistry = yield* PackageRegistryService;
|
|
43
|
+
const capabilitySinks = yield* CapabilitySinksService;
|
|
44
|
+
return ctx.pipe(Context.add(CoinRegistryService, coinRegistry), Context.add(PackageRegistryService, packageRegistry), Context.add(CapabilitySinksService, capabilitySinks));
|
|
45
|
+
});
|
|
46
|
+
//#endregion
|
|
47
|
+
export { extendBuiltInPluginContext, layerBuiltInPluginRuntime };
|
|
48
|
+
|
|
49
|
+
//# sourceMappingURL=built-in-plugin-layers.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"built-in-plugin-layers.mjs","names":[],"sources":["../../src/runtime/built-in-plugin-layers.ts"],"sourcesContent":["// Built-in plugin runtime composition.\n//\n// L0 substrate builds only name-blind services. This module is the higher-level\n// composition point for built-in plugin services and built-in capability sinks.\n\nimport { Context, Effect, Layer } from 'effect';\n\nimport { discoverCoinsFromPublish } from '../plugins/coin/discovery.ts';\nimport {\n\tCoinRegistryService,\n\tcoinRegistryLayer,\n\ttype CoinRecord,\n} from '../plugins/coin/registry.ts';\nimport {\n\tLOCAL_PACKAGE_PUBLISHED_KIND,\n\ttype LocalPackagePublishedDecl,\n} from '../plugins/package/publish-output.ts';\nimport { PackageRegistryService, layerPackageRegistry } from '../plugins/package/registry.ts';\nimport {\n\tCapabilitySinksService,\n\tlayerCapabilitySinksDefault,\n\ttype CapabilitySink,\n\ttype OrchestratorSinks,\n} from '../substrate/runtime/capability-sinks/index.ts';\n\nexport const layerBuiltInPluginServices: Layer.Layer<CoinRegistryService | PackageRegistryService> =\n\tLayer.mergeAll(coinRegistryLayer, layerPackageRegistry);\n\nconst publishResultSink = (\n\tcoinRegistry: typeof CoinRegistryService.Service,\n): CapabilitySink<typeof LOCAL_PACKAGE_PUBLISHED_KIND, LocalPackagePublishedDecl> => ({\n\tkind: LOCAL_PACKAGE_PUBLISHED_KIND,\n\taccept: (decl) =>\n\t\tEffect.gen(function* () {\n\t\t\tfor (const discovered of discoverCoinsFromPublish(decl.output)) {\n\t\t\t\tconst record: CoinRecord = {\n\t\t\t\t\tkey: (discovered.symbol ?? discovered.witness).toLowerCase(),\n\t\t\t\t\ttype: discovered.fullCoinType,\n\t\t\t\t\twitness: discovered.witness,\n\t\t\t\t\tmoduleName: discovered.moduleName,\n\t\t\t\t\tdecimals: discovered.decimals ?? 0,\n\t\t\t\t\t...(discovered.symbol === undefined ? {} : { symbol: discovered.symbol }),\n\t\t\t\t\t...(discovered.displayName === undefined ? {} : { displayName: discovered.displayName }),\n\t\t\t\t\t...(discovered.iconUrl === undefined ? {} : { iconUrl: discovered.iconUrl }),\n\t\t\t\t\t...(!discovered.publisherOwnsCap || discovered.treasuryCapId === undefined\n\t\t\t\t\t\t? {}\n\t\t\t\t\t\t: { treasuryCapId: discovered.treasuryCapId }),\n\t\t\t\t\t...(discovered.metadataId === undefined ? {} : { metadataId: discovered.metadataId }),\n\t\t\t\t\tpackageId: decl.packageId,\n\t\t\t\t\tpublishingPackageName: decl.packageName,\n\t\t\t\t};\n\t\t\t\tyield* coinRegistry.register(record);\n\t\t\t}\n\t\t}),\n});\n\nexport const layerBuiltInCapabilitySinks = (\n\torchestrator: OrchestratorSinks,\n): Layer.Layer<CapabilitySinksService, never, CoinRegistryService | PackageRegistryService> => {\n\tconst registerBuiltInPluginSinks = Layer.effectDiscard(\n\t\tEffect.gen(function* () {\n\t\t\tconst sinks = yield* CapabilitySinksService;\n\t\t\tconst coinRegistry = yield* CoinRegistryService;\n\t\t\tyield* sinks.registerSink(publishResultSink(coinRegistry));\n\t\t}),\n\t);\n\treturn registerBuiltInPluginSinks.pipe(\n\t\tLayer.provideMerge(layerCapabilitySinksDefault(orchestrator)),\n\t);\n};\n\nexport const layerBuiltInPluginRuntime = (\n\torchestrator: OrchestratorSinks,\n): Layer.Layer<CoinRegistryService | PackageRegistryService | CapabilitySinksService> =>\n\tlayerBuiltInCapabilitySinks(orchestrator).pipe(Layer.provideMerge(layerBuiltInPluginServices));\n\nexport const extendBuiltInPluginContext = (\n\tctx: Context.Context<never>,\n): Effect.Effect<\n\tContext.Context<never>,\n\tnever,\n\tCoinRegistryService | PackageRegistryService | CapabilitySinksService\n> =>\n\tEffect.gen(function* () {\n\t\tconst coinRegistry = yield* CoinRegistryService;\n\t\tconst packageRegistry = yield* PackageRegistryService;\n\t\tconst capabilitySinks = yield* CapabilitySinksService;\n\t\treturn ctx.pipe(\n\t\t\tContext.add(CoinRegistryService, coinRegistry),\n\t\t\tContext.add(PackageRegistryService, packageRegistry),\n\t\t\tContext.add(CapabilitySinksService, capabilitySinks),\n\t\t) as Context.Context<never>;\n\t});\n"],"mappings":";;;;;;;;AAyBA,MAAa,6BACZ,MAAM,SAAS,mBAAmB,qBAAqB;AAExD,MAAM,qBACL,kBACqF;CACrF,MAAM;CACN,SAAS,SACR,OAAO,IAAI,aAAa;AACvB,OAAK,MAAM,cAAc,yBAAyB,KAAK,OAAO,EAAE;GAC/D,MAAM,SAAqB;IAC1B,MAAM,WAAW,UAAU,WAAW,SAAS,aAAa;IAC5D,MAAM,WAAW;IACjB,SAAS,WAAW;IACpB,YAAY,WAAW;IACvB,UAAU,WAAW,YAAY;IACjC,GAAI,WAAW,WAAW,KAAA,IAAY,EAAE,GAAG,EAAE,QAAQ,WAAW,QAAQ;IACxE,GAAI,WAAW,gBAAgB,KAAA,IAAY,EAAE,GAAG,EAAE,aAAa,WAAW,aAAa;IACvF,GAAI,WAAW,YAAY,KAAA,IAAY,EAAE,GAAG,EAAE,SAAS,WAAW,SAAS;IAC3E,GAAI,CAAC,WAAW,oBAAoB,WAAW,kBAAkB,KAAA,IAC9D,EAAE,GACF,EAAE,eAAe,WAAW,eAAe;IAC9C,GAAI,WAAW,eAAe,KAAA,IAAY,EAAE,GAAG,EAAE,YAAY,WAAW,YAAY;IACpF,WAAW,KAAK;IAChB,uBAAuB,KAAK;IAC5B;AACD,UAAO,aAAa,SAAS,OAAO;;GAEpC;CACH;AAED,MAAa,+BACZ,iBAC8F;AAQ9F,QAPmC,MAAM,cACxC,OAAO,IAAI,aAAa;EACvB,MAAM,QAAQ,OAAO;EACrB,MAAM,eAAe,OAAO;AAC5B,SAAO,MAAM,aAAa,kBAAkB,aAAa,CAAC;GACzD,CAE8B,CAAC,KACjC,MAAM,aAAa,4BAA4B,aAAa,CAAC,CAC7D;;AAGF,MAAa,6BACZ,iBAEA,4BAA4B,aAAa,CAAC,KAAK,MAAM,aAAa,2BAA2B,CAAC;AAE/F,MAAa,8BACZ,QAMA,OAAO,IAAI,aAAa;CACvB,MAAM,eAAe,OAAO;CAC5B,MAAM,kBAAkB,OAAO;CAC/B,MAAM,kBAAkB,OAAO;AAC/B,QAAO,IAAI,KACV,QAAQ,IAAI,qBAAqB,aAAa,EAC9C,QAAQ,IAAI,wBAAwB,gBAAgB,EACpD,QAAQ,IAAI,wBAAwB,gBAAgB,CACpD;EACA"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { capture } from "../../substrate/runtime/observability/subprocess-capture.mjs";
|
|
2
|
+
import { Context, Effect, Layer } from "effect";
|
|
3
|
+
import { ChildProcess } from "effect/unstable/process";
|
|
4
|
+
//#region src/runtime/docker/client.ts
|
|
5
|
+
var DockerHost = class extends Context.Service()("@devstack-rewrite/runtime-docker/DockerHost") {};
|
|
6
|
+
const layerDockerHostDefault = Layer.succeed(DockerHost)({});
|
|
7
|
+
/** A spawner service exposing `spawn`. Held as a service so tests can
|
|
8
|
+
* inject a stub. In production this is `ChildProcessSpawner.make()`
|
|
9
|
+
* from `effect/unstable/process` (provided via `@effect/platform-node`). */
|
|
10
|
+
var DockerSpawner = class extends Context.Service()("@devstack-rewrite/runtime-docker/DockerSpawner") {};
|
|
11
|
+
const buildEnv = (host) => {
|
|
12
|
+
const env = {};
|
|
13
|
+
if (host.dockerHost !== void 0) env.DOCKER_HOST = host.dockerHost;
|
|
14
|
+
return env;
|
|
15
|
+
};
|
|
16
|
+
/** Build a `ChildProcess.Command` from `(verb, ...args)`. The verb is
|
|
17
|
+
* separate so observability span attributes can pin the
|
|
18
|
+
* high-cardinality `args` separately from the `devstack.op` tag. */
|
|
19
|
+
const dockerCommand = (host, verb, args, overrideEnv = {}) => {
|
|
20
|
+
const bin = host.bin ?? "docker";
|
|
21
|
+
const env = {
|
|
22
|
+
...buildEnv(host),
|
|
23
|
+
...overrideEnv
|
|
24
|
+
};
|
|
25
|
+
return ChildProcess.make(bin, [verb, ...args], {
|
|
26
|
+
env,
|
|
27
|
+
extendEnv: true
|
|
28
|
+
});
|
|
29
|
+
};
|
|
30
|
+
/** Capture a docker invocation, fail on non-zero exit. Use when any
|
|
31
|
+
* non-zero exit is a failure case (most write operations). */
|
|
32
|
+
const dockerRun = (verb, args, opts) => Effect.gen(function* () {
|
|
33
|
+
const host = yield* DockerHost;
|
|
34
|
+
return yield* capture(yield* DockerSpawner, dockerCommand(host, verb, args), {
|
|
35
|
+
...opts,
|
|
36
|
+
op: `docker.${verb}`,
|
|
37
|
+
nonZeroIsFailure: true
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
/** Capture a docker invocation, return the `CaptureResult` regardless
|
|
41
|
+
* of exit. Use when the caller classifies stderr or wants the exit
|
|
42
|
+
* code (lifecycle state machine, inventory). */
|
|
43
|
+
const dockerRunOk = (verb, args, opts) => Effect.gen(function* () {
|
|
44
|
+
const host = yield* DockerHost;
|
|
45
|
+
return yield* capture(yield* DockerSpawner, dockerCommand(host, verb, args), {
|
|
46
|
+
...opts,
|
|
47
|
+
op: `docker.${verb}`,
|
|
48
|
+
nonZeroIsFailure: false
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
//#endregion
|
|
52
|
+
export { DockerHost, DockerSpawner, dockerCommand, dockerRun, dockerRunOk, layerDockerHostDefault };
|
|
53
|
+
|
|
54
|
+
//# sourceMappingURL=client.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.mjs","names":[],"sources":["../../../src/runtime/docker/client.ts"],"sourcesContent":["// Thin `docker` CLI wrapper.\n//\n// Every subprocess invocation flows through the L0 subprocess-capture\n// primitive (one capture function, one error class). This module owns:\n//\n// - The argv constructor (`dockerArgv`).\n// - The `DOCKER_HOST` env passthrough (architecture §7: one-daemon\n// assumption, env override supported).\n// - Two convenience verbs: `run` (capture-with-success-or-fail-by-exit)\n// and `runOk` (capture, return CaptureResult regardless of exit so\n// the caller can classify stderr). NO docker compose anywhere.\n//\n// No service names appear here. No stderr-pattern classification —\n// that's in `wrap.ts`. This file is mechanical argv + spawn.\n\nimport { Context, Effect, Layer } from 'effect';\nimport { ChildProcess } from 'effect/unstable/process';\nimport { ChildProcessSpawner } from 'effect/unstable/process';\n\nimport {\n\tcapture,\n\ttype CaptureError,\n\ttype CaptureOptions,\n\ttype CaptureResult,\n} from '../../substrate/runtime/observability/subprocess-capture.ts';\n\n// -----------------------------------------------------------------------------\n// Daemon-host configuration\n// -----------------------------------------------------------------------------\n\n/** Optional `DOCKER_HOST` override. When absent we let the docker CLI\n * resolve its default socket (Unix: `/var/run/docker.sock`; macOS\n * Desktop: `unix:///var/run/docker.sock`; remote daemon if the user\n * set `DOCKER_HOST` in their own env). */\nexport interface DockerHostShape {\n\treadonly dockerHost?: string;\n\t/** Optional explicit binary path (default `docker`). Tests use\n\t * this to point at a stub; otherwise we resolve via PATH. */\n\treadonly bin?: string;\n}\n\nexport class DockerHost extends Context.Service<DockerHost, DockerHostShape>()(\n\t'@devstack-rewrite/runtime-docker/DockerHost',\n) {}\n\nexport const layerDockerHostDefault: Layer.Layer<DockerHost> = Layer.succeed(DockerHost)({});\n\nexport const layerDockerHost = (shape: DockerHostShape): Layer.Layer<DockerHost> =>\n\tLayer.succeed(DockerHost)(shape);\n\n// -----------------------------------------------------------------------------\n// Spawner injection\n// -----------------------------------------------------------------------------\n\n/** A spawner service exposing `spawn`. Held as a service so tests can\n * inject a stub. In production this is `ChildProcessSpawner.make()`\n * from `effect/unstable/process` (provided via `@effect/platform-node`). */\nexport class DockerSpawner extends Context.Service<\n\tDockerSpawner,\n\tReturnType<typeof ChildProcessSpawner.make>\n>()('@devstack-rewrite/runtime-docker/DockerSpawner') {}\n\n// -----------------------------------------------------------------------------\n// Argv construction\n// -----------------------------------------------------------------------------\n\nconst buildEnv = (host: DockerHostShape): Record<string, string> => {\n\tconst env: Record<string, string> = {};\n\tif (host.dockerHost !== undefined) env.DOCKER_HOST = host.dockerHost;\n\treturn env;\n};\n\n/** Build a `ChildProcess.Command` from `(verb, ...args)`. The verb is\n * separate so observability span attributes can pin the\n * high-cardinality `args` separately from the `devstack.op` tag. */\nexport const dockerCommand = (\n\thost: DockerHostShape,\n\tverb: string,\n\targs: ReadonlyArray<string>,\n\toverrideEnv: Readonly<Record<string, string>> = {},\n): ChildProcess.Command => {\n\tconst bin = host.bin ?? 'docker';\n\tconst env = { ...buildEnv(host), ...overrideEnv };\n\treturn ChildProcess.make(bin, [verb, ...args], { env, extendEnv: true });\n};\n\n// -----------------------------------------------------------------------------\n// Capture verbs\n// -----------------------------------------------------------------------------\n\n/** Capture a docker invocation, fail on non-zero exit. Use when any\n * non-zero exit is a failure case (most write operations). */\nexport const dockerRun = (\n\tverb: string,\n\targs: ReadonlyArray<string>,\n\topts?: Omit<CaptureOptions, 'op' | 'nonZeroIsFailure'>,\n): Effect.Effect<CaptureResult, CaptureError, DockerHost | DockerSpawner> =>\n\tEffect.gen(function* () {\n\t\tconst host = yield* DockerHost;\n\t\tconst spawner = yield* DockerSpawner;\n\t\treturn yield* capture(spawner, dockerCommand(host, verb, args), {\n\t\t\t...opts,\n\t\t\top: `docker.${verb}`,\n\t\t\tnonZeroIsFailure: true,\n\t\t});\n\t});\n\n/** Capture a docker invocation, return the `CaptureResult` regardless\n * of exit. Use when the caller classifies stderr or wants the exit\n * code (lifecycle state machine, inventory). */\nexport const dockerRunOk = (\n\tverb: string,\n\targs: ReadonlyArray<string>,\n\topts?: Omit<CaptureOptions, 'op' | 'nonZeroIsFailure'>,\n): Effect.Effect<CaptureResult, CaptureError, DockerHost | DockerSpawner> =>\n\tEffect.gen(function* () {\n\t\tconst host = yield* DockerHost;\n\t\tconst spawner = yield* DockerSpawner;\n\t\treturn yield* capture(spawner, dockerCommand(host, verb, args), {\n\t\t\t...opts,\n\t\t\top: `docker.${verb}`,\n\t\t\tnonZeroIsFailure: false,\n\t\t});\n\t});\n"],"mappings":";;;;AAyCA,IAAa,aAAb,cAAgC,QAAQ,SAAsC,CAC7E,8CACA,CAAC;AAEF,MAAa,yBAAkD,MAAM,QAAQ,WAAW,CAAC,EAAE,CAAC;;;;AAY5F,IAAa,gBAAb,cAAmC,QAAQ,SAGxC,CAAC,iDAAiD,CAAC;AAMtD,MAAM,YAAY,SAAkD;CACnE,MAAM,MAA8B,EAAE;AACtC,KAAI,KAAK,eAAe,KAAA,EAAW,KAAI,cAAc,KAAK;AAC1D,QAAO;;;;;AAMR,MAAa,iBACZ,MACA,MACA,MACA,cAAgD,EAAE,KACxB;CAC1B,MAAM,MAAM,KAAK,OAAO;CACxB,MAAM,MAAM;EAAE,GAAG,SAAS,KAAK;EAAE,GAAG;EAAa;AACjD,QAAO,aAAa,KAAK,KAAK,CAAC,MAAM,GAAG,KAAK,EAAE;EAAE;EAAK,WAAW;EAAM,CAAC;;;;AASzE,MAAa,aACZ,MACA,MACA,SAEA,OAAO,IAAI,aAAa;CACvB,MAAM,OAAO,OAAO;AAEpB,QAAO,OAAO,QAAQ,OADC,eACQ,cAAc,MAAM,MAAM,KAAK,EAAE;EAC/D,GAAG;EACH,IAAI,UAAU;EACd,kBAAkB;EAClB,CAAC;EACD;;;;AAKH,MAAa,eACZ,MACA,MACA,SAEA,OAAO,IAAI,aAAa;CACvB,MAAM,OAAO,OAAO;AAEpB,QAAO,OAAO,QAAQ,OADC,eACQ,cAAc,MAAM,MAAM,KAAK,EAAE;EAC/D,GAAG;EACH,IAAI,UAAU;EACd,kBAAkB;EAClB,CAAC;EACD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import { Deferred, Effect, Ref, Scope } from "effect";
|