@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,82 @@
|
|
|
1
|
+
import { atomicWriteFile } from "../../substrate/runtime/atomic-write.mjs";
|
|
2
|
+
import { sealError } from "./errors.mjs";
|
|
3
|
+
import { KEY_SERVER_CONFIG_BASENAME, MASTER_KEY_ENVFILE_BASENAME } from "./keygen.mjs";
|
|
4
|
+
import { Effect } from "effect";
|
|
5
|
+
//#region src/plugins/seal/config-render.ts
|
|
6
|
+
const DEFAULT_TS_SDK_REQUIREMENT = ">=0.4.5";
|
|
7
|
+
/** Render the key-server config yaml.
|
|
8
|
+
*
|
|
9
|
+
* Distilled-doc invariant #19: `network: !Devnet` is hardcoded.
|
|
10
|
+
* This is the "custom chain via node_url" discriminator the
|
|
11
|
+
* upstream binary expects when devstack supplies its own RPC. */
|
|
12
|
+
const renderSealKeyServerConfig = (inputs) => {
|
|
13
|
+
const tsReq = inputs.tsSdkVersionRequirement ?? DEFAULT_TS_SDK_REQUIREMENT;
|
|
14
|
+
return [
|
|
15
|
+
"network: !Devnet",
|
|
16
|
+
` seal_package: "${inputs.sealPackageId}"`,
|
|
17
|
+
`node_url: "${inputs.nodeUrl}"`,
|
|
18
|
+
"server_mode: !Open",
|
|
19
|
+
` key_server_object_id: "${inputs.keyServerObjectId}"`,
|
|
20
|
+
`ts_sdk_version_requirement: "${tsReq}"`,
|
|
21
|
+
""
|
|
22
|
+
].join("\n");
|
|
23
|
+
};
|
|
24
|
+
/** Render the docker `--env-file` body. Single `KEY=value` line.
|
|
25
|
+
* Distilled-doc invariant #3 — this is the ONLY path the master key
|
|
26
|
+
* reaches the container; inline `-e MASTER_KEY=…` would surface
|
|
27
|
+
* the secret in `docker inspect` and host process env. */
|
|
28
|
+
const renderMasterKeyEnvFile = (masterKeyHex) => `MASTER_KEY=${masterKeyHex}\n`;
|
|
29
|
+
const parseMasterKeyEnvFile = (body) => {
|
|
30
|
+
return /^MASTER_KEY=(0x)?([0-9a-fA-F]+)\s*$/m.exec(body)?.[2] ?? null;
|
|
31
|
+
};
|
|
32
|
+
/** Compose the two writes the local-keygen mode needs.
|
|
33
|
+
*
|
|
34
|
+
* Writes:
|
|
35
|
+
*
|
|
36
|
+
* - `${servicePath}/key-server-config.yaml` (mode 0o644 — public)
|
|
37
|
+
* - `${servicePath}/master-key.env` (mode 0o600 — secret)
|
|
38
|
+
*
|
|
39
|
+
* Parent dir is created with 0o700 (distilled-doc invariant #2).
|
|
40
|
+
* Both writes flow through the substrate's `atomicWriteFile`
|
|
41
|
+
* (tempfile + fsync + rename, never partial-write visible).
|
|
42
|
+
*
|
|
43
|
+
* Distilled-doc invariant #4: `master-key.env` MUST NOT be unlinked
|
|
44
|
+
* on scope close (snapshot → restore round-trip retains the key).
|
|
45
|
+
* We do NOT register a finalizer here.
|
|
46
|
+
*
|
|
47
|
+
* Error surface: `SealError({phase: 'config-render'})` wraps any
|
|
48
|
+
* underlying `AtomicWriteFailed`. The substrate's atomic write owns
|
|
49
|
+
* fsync + rename + cleanup semantics. */
|
|
50
|
+
const stageSealConfig = (yamlBody, masterKeyHex, servicePath, name) => Effect.gen(function* () {
|
|
51
|
+
const configPath = `${servicePath}/${KEY_SERVER_CONFIG_BASENAME}`;
|
|
52
|
+
const masterKeyEnvFile = `${servicePath}/${MASTER_KEY_ENVFILE_BASENAME}`;
|
|
53
|
+
const yamlBytes = new TextEncoder().encode(yamlBody);
|
|
54
|
+
const envBytes = new TextEncoder().encode(renderMasterKeyEnvFile(masterKeyHex));
|
|
55
|
+
yield* atomicWriteFile(configPath, yamlBytes, {
|
|
56
|
+
mode: 420,
|
|
57
|
+
parentMode: 448
|
|
58
|
+
}).pipe(Effect.catch((cause) => Effect.fail(sealError("config-render", {
|
|
59
|
+
name,
|
|
60
|
+
message: `seal.config-render: failed to write ${KEY_SERVER_CONFIG_BASENAME} (${cause.stage})`,
|
|
61
|
+
cause
|
|
62
|
+
}))));
|
|
63
|
+
yield* atomicWriteFile(masterKeyEnvFile, envBytes, {
|
|
64
|
+
mode: 384,
|
|
65
|
+
parentMode: 448
|
|
66
|
+
}).pipe(Effect.catch((cause) => Effect.fail(sealError("config-render", {
|
|
67
|
+
name,
|
|
68
|
+
message: `seal.config-render: failed to write ${MASTER_KEY_ENVFILE_BASENAME} (${cause.stage})`,
|
|
69
|
+
cause
|
|
70
|
+
}))));
|
|
71
|
+
return {
|
|
72
|
+
configPath,
|
|
73
|
+
masterKeyEnvFile
|
|
74
|
+
};
|
|
75
|
+
}).pipe(Effect.withSpan("devstack.plugin.seal.config-render.stage", { attributes: {
|
|
76
|
+
"seal.name": name,
|
|
77
|
+
"seal.servicePath": servicePath
|
|
78
|
+
} }));
|
|
79
|
+
//#endregion
|
|
80
|
+
export { parseMasterKeyEnvFile, renderSealKeyServerConfig, stageSealConfig };
|
|
81
|
+
|
|
82
|
+
//# sourceMappingURL=config-render.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-render.mjs","names":[],"sources":["../../../src/plugins/seal/config-render.ts"],"sourcesContent":["// Seal plugin — key-server-config.yaml renderer.\n//\n// Distilled-doc invariant #19: the `network: !Devnet` discriminator\n// is LOAD-BEARING. Env-only mode silently routes at the public\n// testnet fullnode regardless of `NODE_URL`; going through the\n// config file with the `!Devnet` discriminator binds the daemon to\n// the in-stack sui RPC.\n//\n// Distilled-doc invariant #20: the rendered file MUST land under\n// `runtime/seal/`, NOT a scoped temp dir. The substrate's\n// service-path resolver (`servicePath('seal')`) produces the host\n// path; we land both the yaml and the master-key env-file there.\n//\n// This file declares the renderer + the staging procedure. The\n// renderer is a pure string builder; the staging procedure uses the\n// substrate's atomic-write primitive (FileSystem-backed).\n\nimport { Effect, FileSystem } from 'effect';\n\nimport { atomicWriteFile } from '../../substrate/runtime/atomic-write.ts';\nimport { sealError, type SealError } from './errors.ts';\nimport { KEY_SERVER_CONFIG_BASENAME, MASTER_KEY_ENVFILE_BASENAME } from './keygen.ts';\n\n// ---------------------------------------------------------------------------\n// Render inputs\n// ---------------------------------------------------------------------------\n\n/** Inputs the renderer consumes. The substrate provides the\n * sui node URL (in-container DNS form, e.g. `http://sui-localnet:9000`)\n * + the seal package id + the on-chain key-server object id. */\nexport interface SealKeyServerConfigInputs {\n\t/** Seal Move package id (from publish). */\n\treadonly sealPackageId: string;\n\t/** Sui RPC node URL as seen from inside the container's network. */\n\treadonly nodeUrl: string;\n\t/** On-chain `KeyServer` object id (from register). */\n\treadonly keyServerObjectId: string;\n\t/** Optional ts-sdk version requirement override. Default is the\n\t * pin distilled from v3 (`'>=0.4.5'`); v2 plans expose this so\n\t * consumers running older `@mysten/seal` aren't silently\n\t * rejected. Distilled-doc opportunity #8. */\n\treadonly tsSdkVersionRequirement?: string;\n}\n\nexport interface ParsedSealKeyServerConfig {\n\treadonly sealPackageId: string;\n\treadonly nodeUrl: string;\n\treadonly keyServerObjectId: string;\n}\n\nconst DEFAULT_TS_SDK_REQUIREMENT = '>=0.4.5';\n\n// ---------------------------------------------------------------------------\n// Render — pure string builder\n// ---------------------------------------------------------------------------\n\n/** Render the key-server config yaml.\n *\n * Distilled-doc invariant #19: `network: !Devnet` is hardcoded.\n * This is the \"custom chain via node_url\" discriminator the\n * upstream binary expects when devstack supplies its own RPC. */\nexport const renderSealKeyServerConfig = (inputs: SealKeyServerConfigInputs): string => {\n\tconst tsReq = inputs.tsSdkVersionRequirement ?? DEFAULT_TS_SDK_REQUIREMENT;\n\treturn [\n\t\t'network: !Devnet',\n\t\t` seal_package: \"${inputs.sealPackageId}\"`,\n\t\t`node_url: \"${inputs.nodeUrl}\"`,\n\t\t'server_mode: !Open',\n\t\t` key_server_object_id: \"${inputs.keyServerObjectId}\"`,\n\t\t`ts_sdk_version_requirement: \"${tsReq}\"`,\n\t\t'',\n\t].join('\\n');\n};\n\n// ---------------------------------------------------------------------------\n// Master-key env-file body\n// ---------------------------------------------------------------------------\n\n/** Render the docker `--env-file` body. Single `KEY=value` line.\n * Distilled-doc invariant #3 — this is the ONLY path the master key\n * reaches the container; inline `-e MASTER_KEY=…` would surface\n * the secret in `docker inspect` and host process env. */\nexport const renderMasterKeyEnvFile = (masterKeyHex: string): string =>\n\t`MASTER_KEY=${masterKeyHex}\\n`;\n\nconst readQuotedYamlField = (body: string, field: string): string | null => {\n\tconst escaped = field.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\tconst match = new RegExp(`(?:^|\\\\n)\\\\s*${escaped}:\\\\s*\"([^\"]+)\"\\\\s*(?:\\\\n|$)`).exec(body);\n\treturn match?.[1] ?? null;\n};\n\nexport const parseSealKeyServerConfig = (body: string): ParsedSealKeyServerConfig | null => {\n\tconst sealPackageId = readQuotedYamlField(body, 'seal_package');\n\tconst nodeUrl = readQuotedYamlField(body, 'node_url');\n\tconst keyServerObjectId = readQuotedYamlField(body, 'key_server_object_id');\n\tif (sealPackageId === null || nodeUrl === null || keyServerObjectId === null) {\n\t\treturn null;\n\t}\n\treturn { sealPackageId, nodeUrl, keyServerObjectId };\n};\n\nexport const parseMasterKeyEnvFile = (body: string): string | null => {\n\tconst match = /^MASTER_KEY=(0x)?([0-9a-fA-F]+)\\s*$/m.exec(body);\n\treturn match?.[2] ?? null;\n};\n\n// ---------------------------------------------------------------------------\n// Staging procedure — write yaml + env-file with proper mode bits\n// ---------------------------------------------------------------------------\n\n/** Compose the two writes the local-keygen mode needs.\n *\n * Writes:\n *\n * - `${servicePath}/key-server-config.yaml` (mode 0o644 — public)\n * - `${servicePath}/master-key.env` (mode 0o600 — secret)\n *\n * Parent dir is created with 0o700 (distilled-doc invariant #2).\n * Both writes flow through the substrate's `atomicWriteFile`\n * (tempfile + fsync + rename, never partial-write visible).\n *\n * Distilled-doc invariant #4: `master-key.env` MUST NOT be unlinked\n * on scope close (snapshot → restore round-trip retains the key).\n * We do NOT register a finalizer here.\n *\n * Error surface: `SealError({phase: 'config-render'})` wraps any\n * underlying `AtomicWriteFailed`. The substrate's atomic write owns\n * fsync + rename + cleanup semantics. */\nexport const stageSealConfig = (\n\tyamlBody: string,\n\tmasterKeyHex: string,\n\tservicePath: string,\n\tname: string,\n): Effect.Effect<\n\t{\n\t\treadonly configPath: string;\n\t\treadonly masterKeyEnvFile: string;\n\t},\n\tSealError,\n\tFileSystem.FileSystem\n> =>\n\tEffect.gen(function* () {\n\t\tconst configPath = `${servicePath}/${KEY_SERVER_CONFIG_BASENAME}`;\n\t\tconst masterKeyEnvFile = `${servicePath}/${MASTER_KEY_ENVFILE_BASENAME}`;\n\t\tconst yamlBytes = new TextEncoder().encode(yamlBody);\n\t\tconst envBytes = new TextEncoder().encode(renderMasterKeyEnvFile(masterKeyHex));\n\n\t\t// World-readable yaml (no secrets) inside 0o700 parent — the\n\t\t// daemon process inside the container reads via the bind-mount\n\t\t// so host-side mode bits don't fully matter, but 0o644 is the\n\t\t// least-surprising default for a non-secret config.\n\t\tyield* atomicWriteFile(configPath, yamlBytes, {\n\t\t\tmode: 0o644,\n\t\t\tparentMode: 0o700,\n\t\t}).pipe(\n\t\t\tEffect.catch((cause) =>\n\t\t\t\tEffect.fail(\n\t\t\t\t\tsealError('config-render', {\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tmessage: `seal.config-render: failed to write ${KEY_SERVER_CONFIG_BASENAME} (${cause.stage})`,\n\t\t\t\t\t\tcause,\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\t),\n\t\t);\n\n\t\t// SECRET — 0o600 inside the same 0o700 parent. Distilled-doc\n\t\t// §Hard requirements #2.\n\t\tyield* atomicWriteFile(masterKeyEnvFile, envBytes, {\n\t\t\tmode: 0o600,\n\t\t\tparentMode: 0o700,\n\t\t}).pipe(\n\t\t\tEffect.catch((cause) =>\n\t\t\t\tEffect.fail(\n\t\t\t\t\tsealError('config-render', {\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tmessage: `seal.config-render: failed to write ${MASTER_KEY_ENVFILE_BASENAME} (${cause.stage})`,\n\t\t\t\t\t\tcause,\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\t),\n\t\t);\n\n\t\treturn { configPath, masterKeyEnvFile };\n\t}).pipe(\n\t\tEffect.withSpan('devstack.plugin.seal.config-render.stage', {\n\t\t\tattributes: { 'seal.name': name, 'seal.servicePath': servicePath },\n\t\t}),\n\t);\n"],"mappings":";;;;;AAkDA,MAAM,6BAA6B;;;;;;AAWnC,MAAa,6BAA6B,WAA8C;CACvF,MAAM,QAAQ,OAAO,2BAA2B;AAChD,QAAO;EACN;EACA,oBAAoB,OAAO,cAAc;EACzC,cAAc,OAAO,QAAQ;EAC7B;EACA,4BAA4B,OAAO,kBAAkB;EACrD,gCAAgC,MAAM;EACtC;EACA,CAAC,KAAK,KAAK;;;;;;AAWb,MAAa,0BAA0B,iBACtC,cAAc,aAAa;AAkB5B,MAAa,yBAAyB,SAAgC;AAErE,QADc,uCAAuC,KAAK,KAC9C,GAAG,MAAM;;;;;;;;;;;;;;;;;;;;AAyBtB,MAAa,mBACZ,UACA,cACA,aACA,SASA,OAAO,IAAI,aAAa;CACvB,MAAM,aAAa,GAAG,YAAY,GAAG;CACrC,MAAM,mBAAmB,GAAG,YAAY,GAAG;CAC3C,MAAM,YAAY,IAAI,aAAa,CAAC,OAAO,SAAS;CACpD,MAAM,WAAW,IAAI,aAAa,CAAC,OAAO,uBAAuB,aAAa,CAAC;AAM/E,QAAO,gBAAgB,YAAY,WAAW;EAC7C,MAAM;EACN,YAAY;EACZ,CAAC,CAAC,KACF,OAAO,OAAO,UACb,OAAO,KACN,UAAU,iBAAiB;EAC1B;EACA,SAAS,uCAAuC,2BAA2B,IAAI,MAAM,MAAM;EAC3F;EACA,CAAC,CACF,CACD,CACD;AAID,QAAO,gBAAgB,kBAAkB,UAAU;EAClD,MAAM;EACN,YAAY;EACZ,CAAC,CAAC,KACF,OAAO,OAAO,UACb,OAAO,KACN,UAAU,iBAAiB;EAC1B;EACA,SAAS,uCAAuC,4BAA4B,IAAI,MAAM,MAAM;EAC5F;EACA,CAAC,CACF,CACD,CACD;AAED,QAAO;EAAE;EAAY;EAAkB;EACtC,CAAC,KACF,OAAO,SAAS,4CAA4C,EAC3D,YAAY;CAAE,aAAa;CAAM,oBAAoB;CAAa,EAClE,CAAC,CACF"}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import { contentHash } from "../../substrate/brand.mjs";
|
|
2
|
+
import { hashMoveSources, runMoveBuild, scrubLocksHost } from "../../substrate/runtime/sui-move-build/index.mjs";
|
|
3
|
+
import { sealError } from "./errors.mjs";
|
|
4
|
+
import { decodeHex } from "./keygen.mjs";
|
|
5
|
+
import { executeSuiTx } from "../../substrate/runtime/sui-execute/index.mjs";
|
|
6
|
+
import { Effect, Schema } from "effect";
|
|
7
|
+
import { createHash } from "node:crypto";
|
|
8
|
+
import { Transaction } from "@mysten/sui/transactions";
|
|
9
|
+
//#region src/plugins/seal/deploy.ts
|
|
10
|
+
const KEY_TYPE_BONEH_FRANKLIN_BLS12381 = 0;
|
|
11
|
+
const sealProduceFailed = (op, err) => ({
|
|
12
|
+
_tag: "ArtifactPublishError",
|
|
13
|
+
reason: "produce-failed",
|
|
14
|
+
detail: `seal.${op} ${err.phase}: ${err.message}`
|
|
15
|
+
});
|
|
16
|
+
const moveBuildToSealError = (name, err) => sealError("publish", {
|
|
17
|
+
name,
|
|
18
|
+
message: `seal publish ${err.phase} failed for source '${err.sourcePath}': ${err.message}`,
|
|
19
|
+
cause: err
|
|
20
|
+
});
|
|
21
|
+
const verifyObjectLenient = (probe, objectId, schema) => probe.get({
|
|
22
|
+
kind: "object",
|
|
23
|
+
objectId
|
|
24
|
+
}, schema, "lenient").pipe(Effect.catch(() => Effect.succeed(null)));
|
|
25
|
+
const SEAL_PACKAGE_NAMESPACE = "seal/package";
|
|
26
|
+
const SealPackageVerifyShape = Schema.Struct({
|
|
27
|
+
objectId: Schema.String,
|
|
28
|
+
type: Schema.optional(Schema.Unknown)
|
|
29
|
+
});
|
|
30
|
+
const sealPackageInputsHash = (sourceHash, signerAddress) => contentHash(`seal-package|source=${sourceHash}|signer=${signerAddress}`);
|
|
31
|
+
const publishTransactionBuilder = (tx) => ({
|
|
32
|
+
setSender: (address) => tx.setSender(address),
|
|
33
|
+
publish: (input) => tx.publish({
|
|
34
|
+
modules: input.modules.map((m) => [...m]),
|
|
35
|
+
dependencies: [...input.dependencies]
|
|
36
|
+
}),
|
|
37
|
+
transferObjects: (objects, recipient) => tx.transferObjects([...objects], recipient)
|
|
38
|
+
});
|
|
39
|
+
const buildSealPublishTransaction = (tx, buildOutput, signerAddress) => {
|
|
40
|
+
tx.setSender(signerAddress);
|
|
41
|
+
const upgradeCap = tx.publish({
|
|
42
|
+
modules: buildOutput.modules.map((m) => Array.from(m)),
|
|
43
|
+
dependencies: [...buildOutput.dependencies]
|
|
44
|
+
});
|
|
45
|
+
tx.transferObjects([upgradeCap], signerAddress);
|
|
46
|
+
};
|
|
47
|
+
const pickPackageWriteObjectId = (receipt) => receipt.objectChanges.find((change) => change.outputState === "PackageWrite")?.objectId ?? null;
|
|
48
|
+
const pickUpgradeCapObjectId = (receipt) => receipt.objectChanges.find((change) => change.idOperation === "Created" && (change.objectType?.endsWith("::package::UpgradeCap") ?? false))?.objectId ?? null;
|
|
49
|
+
const projectSealPublishReceipt = (name, receipt) => {
|
|
50
|
+
const packageId = pickPackageWriteObjectId(receipt);
|
|
51
|
+
if (packageId === null) return Effect.fail(sealError("publish", {
|
|
52
|
+
name,
|
|
53
|
+
message: `seal publish tx wrote no PackageWrite object (digest=${receipt.digest})`
|
|
54
|
+
}));
|
|
55
|
+
const upgradeCapId = pickUpgradeCapObjectId(receipt);
|
|
56
|
+
return Effect.succeed({
|
|
57
|
+
packageId,
|
|
58
|
+
...upgradeCapId !== null ? { upgradeCapId } : {}
|
|
59
|
+
});
|
|
60
|
+
};
|
|
61
|
+
const runSealPublishTransaction = (inputs) => Effect.gen(function* () {
|
|
62
|
+
yield* scrubLocksHost(inputs.movePackagePath, "~/.move", { packageLockFailures: inputs.buildImage !== void 0 ? "best-effort" : "fatal" }).pipe(Effect.mapError((err) => moveBuildToSealError(inputs.name, err)));
|
|
63
|
+
const buildOutput = yield* runMoveBuild({
|
|
64
|
+
sourcePath: inputs.movePackagePath,
|
|
65
|
+
packageName: inputs.name,
|
|
66
|
+
chainId: inputs.chain,
|
|
67
|
+
runtime: inputs.runtime,
|
|
68
|
+
...inputs.buildImage !== void 0 ? { buildImage: inputs.buildImage } : {}
|
|
69
|
+
}).pipe(Effect.mapError((err) => moveBuildToSealError(inputs.name, err)));
|
|
70
|
+
const receipt = yield* executeSuiTx({
|
|
71
|
+
client: inputs.sdk.client,
|
|
72
|
+
signer: inputs.signer,
|
|
73
|
+
build: async () => {
|
|
74
|
+
const tx = new Transaction();
|
|
75
|
+
buildSealPublishTransaction(publishTransactionBuilder(tx), buildOutput, inputs.signer.address);
|
|
76
|
+
return tx.build({ client: inputs.sdk.client });
|
|
77
|
+
}
|
|
78
|
+
}).pipe(Effect.mapError((cause) => sealError("publish", {
|
|
79
|
+
name: inputs.name,
|
|
80
|
+
message: `seal publish tx failed for signer '${inputs.signer.name}' (address=${inputs.signer.address}) during ${cause.phase}: ${cause.message}`,
|
|
81
|
+
cause
|
|
82
|
+
})));
|
|
83
|
+
return yield* projectSealPublishReceipt(inputs.name, receipt);
|
|
84
|
+
}).pipe(Effect.withSpan("devstack.plugin.seal.publish.suiTx", { attributes: {
|
|
85
|
+
"seal.name": inputs.name,
|
|
86
|
+
"seal.signer": inputs.signer.address
|
|
87
|
+
} }));
|
|
88
|
+
const publishSealPackage = (publisher, inputs) => Effect.gen(function* () {
|
|
89
|
+
const inputsHash = sealPackageInputsHash(yield* hashMoveSources(inputs.movePackagePath).pipe(Effect.mapError((err) => moveBuildToSealError(inputs.name, err))), inputs.signer.address);
|
|
90
|
+
const result = yield* publisher.publish({
|
|
91
|
+
namespace: SEAL_PACKAGE_NAMESPACE,
|
|
92
|
+
chain: inputs.chain,
|
|
93
|
+
contentHash: inputsHash,
|
|
94
|
+
verifySchema: SealPackageVerifyShape,
|
|
95
|
+
verify: (cached) => verifyObjectLenient(inputs.chainProbe, cached.packageId, SealPackageVerifyShape),
|
|
96
|
+
produce: runSealPublishTransaction(inputs).pipe(Effect.mapError((err) => sealProduceFailed("publish", err))),
|
|
97
|
+
register: () => Effect.void
|
|
98
|
+
});
|
|
99
|
+
const packageId = "packageId" in result ? result.packageId : result.objectId;
|
|
100
|
+
if (!packageId) return yield* Effect.fail(sealError("publish", {
|
|
101
|
+
name: inputs.name,
|
|
102
|
+
message: "seal.deploy.publishSealPackage: publisher returned no package id"
|
|
103
|
+
}));
|
|
104
|
+
return { packageId };
|
|
105
|
+
}).pipe(Effect.withSpan("devstack.plugin.seal.publish", { attributes: {
|
|
106
|
+
"seal.name": inputs.name,
|
|
107
|
+
"seal.chain": inputs.chain
|
|
108
|
+
} }));
|
|
109
|
+
const SEAL_KEY_SERVER_NAMESPACE = "seal/key-server-id";
|
|
110
|
+
const SealKeyServerVerifyShape = Schema.Struct({
|
|
111
|
+
objectId: Schema.String,
|
|
112
|
+
type: Schema.optional(Schema.Unknown)
|
|
113
|
+
});
|
|
114
|
+
const sealRegisterInputsHash = (inputs, signerAddress) => contentHash(`seal-register-v2|${createHash("sha256").update(JSON.stringify({
|
|
115
|
+
packageId: inputs.sealPackageId,
|
|
116
|
+
keyServerUrl: inputs.keyServerUrl,
|
|
117
|
+
keyServerName: inputs.keyServerName,
|
|
118
|
+
publicKeyHex: inputs.publicKeyHex,
|
|
119
|
+
signerAddress
|
|
120
|
+
})).digest("hex")}`);
|
|
121
|
+
const registerTransactionBuilder = (tx) => ({
|
|
122
|
+
pure: {
|
|
123
|
+
string: (value) => tx.pure.string(value),
|
|
124
|
+
u8: (value) => tx.pure.u8(value),
|
|
125
|
+
vector: (type, value) => tx.pure.vector(type, [...value])
|
|
126
|
+
},
|
|
127
|
+
setSender: (address) => tx.setSender(address),
|
|
128
|
+
moveCall: (input) => tx.moveCall({
|
|
129
|
+
target: input.target,
|
|
130
|
+
arguments: [...input.arguments]
|
|
131
|
+
})
|
|
132
|
+
});
|
|
133
|
+
const buildRegisterKeyServerMoveCall = (tx, inputs, signerAddress) => {
|
|
134
|
+
const pkBytes = decodeHex(inputs.publicKeyHex);
|
|
135
|
+
tx.setSender(signerAddress);
|
|
136
|
+
tx.moveCall({
|
|
137
|
+
target: `${inputs.sealPackageId}::key_server::create_and_transfer_v2_independent_server`,
|
|
138
|
+
arguments: [
|
|
139
|
+
tx.pure.string(inputs.keyServerName),
|
|
140
|
+
tx.pure.string(inputs.keyServerUrl),
|
|
141
|
+
tx.pure.u8(KEY_TYPE_BONEH_FRANKLIN_BLS12381),
|
|
142
|
+
tx.pure.vector("u8", Array.from(pkBytes))
|
|
143
|
+
]
|
|
144
|
+
});
|
|
145
|
+
};
|
|
146
|
+
const pickCreatedKeyServerObjectId = (receipt) => receipt.objectChanges.find((change) => change.idOperation === "Created" && (change.objectType?.endsWith("::key_server::KeyServer") ?? false))?.objectId ?? null;
|
|
147
|
+
const projectRegisterKeyServerReceipt = (name, receipt) => {
|
|
148
|
+
const objectId = pickCreatedKeyServerObjectId(receipt);
|
|
149
|
+
if (objectId === null) return Effect.fail(sealError("register", {
|
|
150
|
+
name,
|
|
151
|
+
message: `seal register tx created no ::key_server::KeyServer object (digest=${receipt.digest})`
|
|
152
|
+
}));
|
|
153
|
+
return Effect.succeed({ objectId });
|
|
154
|
+
};
|
|
155
|
+
const runRegisterKeyServerTransaction = (sdk, signer, inputs) => Effect.gen(function* () {
|
|
156
|
+
const receipt = yield* executeSuiTx({
|
|
157
|
+
client: sdk.client,
|
|
158
|
+
signer,
|
|
159
|
+
build: async () => {
|
|
160
|
+
const tx = new Transaction();
|
|
161
|
+
buildRegisterKeyServerMoveCall(registerTransactionBuilder(tx), inputs, signer.address);
|
|
162
|
+
return tx.build({ client: sdk.client });
|
|
163
|
+
}
|
|
164
|
+
}).pipe(Effect.mapError((cause) => sealError("register", {
|
|
165
|
+
name: inputs.name,
|
|
166
|
+
message: `seal register tx failed for signer '${signer.name}' (address=${signer.address}) during ${cause.phase}: ${cause.message}`,
|
|
167
|
+
cause
|
|
168
|
+
})));
|
|
169
|
+
return yield* projectRegisterKeyServerReceipt(inputs.name, receipt);
|
|
170
|
+
}).pipe(Effect.withSpan("devstack.plugin.seal.register.suiTx", { attributes: {
|
|
171
|
+
"seal.name": inputs.name,
|
|
172
|
+
"seal.url": inputs.keyServerUrl
|
|
173
|
+
} }));
|
|
174
|
+
const registerKeyServer = (publisher, inputs) => Effect.gen(function* () {
|
|
175
|
+
const inputsHash = sealRegisterInputsHash(inputs, inputs.signer.address);
|
|
176
|
+
const result = yield* publisher.publish({
|
|
177
|
+
namespace: SEAL_KEY_SERVER_NAMESPACE,
|
|
178
|
+
chain: inputs.chain,
|
|
179
|
+
contentHash: inputsHash,
|
|
180
|
+
verifySchema: SealKeyServerVerifyShape,
|
|
181
|
+
verify: (cached) => verifyObjectLenient(inputs.chainProbe, cached.objectId, SealKeyServerVerifyShape),
|
|
182
|
+
produce: runRegisterKeyServerTransaction(inputs.sdk, inputs.signer, inputs).pipe(Effect.mapError((err) => sealProduceFailed("register", err))),
|
|
183
|
+
register: () => Effect.void
|
|
184
|
+
});
|
|
185
|
+
const objectId = "objectId" in result ? result.objectId : void 0;
|
|
186
|
+
if (!objectId) return yield* Effect.fail(sealError("register", {
|
|
187
|
+
name: inputs.name,
|
|
188
|
+
message: "seal.deploy.registerKeyServer: publisher returned no objectId"
|
|
189
|
+
}));
|
|
190
|
+
return { objectId };
|
|
191
|
+
}).pipe(Effect.withSpan("devstack.plugin.seal.register", { attributes: {
|
|
192
|
+
"seal.name": inputs.name,
|
|
193
|
+
"seal.url": inputs.keyServerUrl
|
|
194
|
+
} }));
|
|
195
|
+
//#endregion
|
|
196
|
+
export { publishSealPackage, registerKeyServer };
|
|
197
|
+
|
|
198
|
+
//# sourceMappingURL=deploy.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploy.mjs","names":[],"sources":["../../../src/plugins/seal/deploy.ts"],"sourcesContent":["// Seal plugin — SDK-backed Move publish + on-chain KeyServer register.\n\nimport { createHash } from 'node:crypto';\n\nimport { Effect, Schema, type Scope } from 'effect';\n\nimport {\n\tTransaction,\n\ttype TransactionArgument,\n\ttype TransactionObjectArgument,\n} from '@mysten/sui/transactions';\n\nimport type { ChainProbe, ChainProbeSchema } from '../../contracts/chain-probe.ts';\nimport type { ContainerRuntime, ImageRef } from '../../contracts/container-runtime.ts';\nimport type {\n\tArtifactPublishError,\n\tArtifactPublisher,\n} from '../../primitives/artifact-publisher.ts';\nimport { contentHash, type ChainId, type ContentHash } from '../../substrate/brand.ts';\nimport {\n\texecuteSuiTx,\n\ttype ExecutedReceipt,\n\ttype SuiExecuteClient,\n} from '../../substrate/runtime/sui-execute/index.ts';\nimport {\n\thashMoveSources,\n\trunMoveBuild,\n\tscrubLocksHost,\n\ttype BuildOutput,\n\ttype MoveBuildError,\n} from '../../substrate/runtime/sui-move-build/index.ts';\nimport type { AccountValue } from '../account/service.ts';\nimport { sealError, type SealError } from './errors.ts';\nimport { decodeHex } from './keygen.ts';\n\nconst KEY_TYPE_BONEH_FRANKLIN_BLS12381 = 0;\n\nexport type SealObjectProbeKey = { readonly kind: 'object'; readonly objectId: string };\n\nexport interface SealSuiSdk {\n\treadonly client: unknown;\n}\n\nconst sealProduceFailed = (op: 'publish' | 'register', err: SealError): ArtifactPublishError => ({\n\t_tag: 'ArtifactPublishError',\n\treason: 'produce-failed',\n\tdetail: `seal.${op} ${err.phase}: ${err.message}`,\n});\n\nconst moveBuildToSealError = (name: string, err: MoveBuildError): SealError =>\n\tsealError('publish', {\n\t\tname,\n\t\tmessage: `seal publish ${err.phase} failed for source '${err.sourcePath}': ${err.message}`,\n\t\tcause: err,\n\t});\n\nconst verifyObjectLenient = <Verified>(\n\tprobe: ChainProbe<SealObjectProbeKey>,\n\tobjectId: string,\n\tschema: ChainProbeSchema<Verified>,\n): Effect.Effect<Verified | null, never> =>\n\tprobe\n\t\t.get({ kind: 'object', objectId }, schema, 'lenient')\n\t\t.pipe(Effect.catch(() => Effect.succeed(null as Verified | null)));\n\n// ---------------------------------------------------------------------------\n// Move publish — `sealPackage` artifact\n// ---------------------------------------------------------------------------\n\nexport const SEAL_PACKAGE_NAMESPACE = 'seal/package' as const;\n\nexport interface SealPackageCached {\n\treadonly packageId: string;\n\treadonly upgradeCapId?: string;\n}\n\nexport const SealPackageVerifyShape = Schema.Struct({\n\tobjectId: Schema.String,\n\ttype: Schema.optional(Schema.Unknown),\n});\nexport type SealPackageVerified = Schema.Schema.Type<typeof SealPackageVerifyShape>;\n\nexport interface SealPublishInputs {\n\treadonly name: string;\n\treadonly chain: ChainId;\n\treadonly movePackagePath: string;\n\treadonly signer: AccountValue;\n\treadonly sdk: SealSuiSdk;\n\treadonly runtime: ContainerRuntime;\n\treadonly buildImage?: ImageRef;\n\treadonly chainProbe: ChainProbe<SealObjectProbeKey>;\n}\n\nexport const sealPackageInputsHash = (\n\tsourceHash: ContentHash,\n\tsignerAddress: string,\n): ContentHash => contentHash(`seal-package|source=${sourceHash}|signer=${signerAddress}`);\n\nexport const parseSealPublishOutput = (stdout: string): SealPackageCached | null => {\n\tconst re = /(?:^|\\n)\\s*(?:package_id|packageId)\\s*[:=]\\s*(0x[0-9a-fA-F]+)/;\n\tconst m = re.exec(stdout);\n\tif (!m?.[1]) return null;\n\treturn { packageId: m[1] };\n};\n\nexport interface SealPublishTransactionBuilder<TUpgradeCap = unknown> {\n\treadonly setSender: (address: string) => void;\n\treadonly publish: (input: {\n\t\treadonly modules: ReadonlyArray<ReadonlyArray<number>>;\n\t\treadonly dependencies: ReadonlyArray<string>;\n\t}) => TUpgradeCap;\n\treadonly transferObjects: (objects: ReadonlyArray<TUpgradeCap>, recipient: string) => void;\n}\n\nconst publishTransactionBuilder = (\n\ttx: Transaction,\n): SealPublishTransactionBuilder<TransactionObjectArgument> => ({\n\tsetSender: (address) => tx.setSender(address),\n\tpublish: (input) =>\n\t\ttx.publish({\n\t\t\tmodules: input.modules.map((m) => [...m]),\n\t\t\tdependencies: [...input.dependencies],\n\t\t}),\n\ttransferObjects: (objects, recipient) => tx.transferObjects([...objects], recipient),\n});\n\nexport const buildSealPublishTransaction = <TUpgradeCap>(\n\ttx: SealPublishTransactionBuilder<TUpgradeCap>,\n\tbuildOutput: BuildOutput,\n\tsignerAddress: string,\n): void => {\n\ttx.setSender(signerAddress);\n\tconst upgradeCap = tx.publish({\n\t\tmodules: buildOutput.modules.map((m) => Array.from(m)),\n\t\tdependencies: [...buildOutput.dependencies],\n\t});\n\ttx.transferObjects([upgradeCap], signerAddress);\n};\n\nexport const pickPackageWriteObjectId = (receipt: ExecutedReceipt): string | null =>\n\treceipt.objectChanges.find((change) => change.outputState === 'PackageWrite')?.objectId ?? null;\n\nexport const pickUpgradeCapObjectId = (receipt: ExecutedReceipt): string | null =>\n\treceipt.objectChanges.find(\n\t\t(change) =>\n\t\t\tchange.idOperation === 'Created' &&\n\t\t\t(change.objectType?.endsWith('::package::UpgradeCap') ?? false),\n\t)?.objectId ?? null;\n\nexport const projectSealPublishReceipt = (\n\tname: string,\n\treceipt: ExecutedReceipt,\n): Effect.Effect<SealPackageCached, SealError> => {\n\tconst packageId = pickPackageWriteObjectId(receipt);\n\tif (packageId === null) {\n\t\treturn Effect.fail(\n\t\t\tsealError('publish', {\n\t\t\t\tname,\n\t\t\t\tmessage: `seal publish tx wrote no PackageWrite object ` + `(digest=${receipt.digest})`,\n\t\t\t}),\n\t\t);\n\t}\n\tconst upgradeCapId = pickUpgradeCapObjectId(receipt);\n\treturn Effect.succeed({\n\t\tpackageId,\n\t\t...(upgradeCapId !== null ? { upgradeCapId } : {}),\n\t});\n};\n\nexport const runSealPublishTransaction = (\n\tinputs: SealPublishInputs,\n): Effect.Effect<SealPackageCached, SealError, Scope.Scope> =>\n\tEffect.gen(function* () {\n\t\t// The one-shot build path scrubs the mounted package again. Seal's\n\t\t// default source is a shared cache, so a prior container build can\n\t\t// leave Move.lock unwritable to the host.\n\t\tyield* scrubLocksHost(inputs.movePackagePath, '~/.move', {\n\t\t\tpackageLockFailures: inputs.buildImage !== undefined ? 'best-effort' : 'fatal',\n\t\t}).pipe(Effect.mapError((err) => moveBuildToSealError(inputs.name, err)));\n\n\t\tconst buildOutput = yield* runMoveBuild({\n\t\t\tsourcePath: inputs.movePackagePath,\n\t\t\tpackageName: inputs.name,\n\t\t\tchainId: inputs.chain,\n\t\t\truntime: inputs.runtime,\n\t\t\t...(inputs.buildImage !== undefined ? { buildImage: inputs.buildImage } : {}),\n\t\t}).pipe(Effect.mapError((err) => moveBuildToSealError(inputs.name, err)));\n\n\t\tconst receipt = yield* executeSuiTx({\n\t\t\tclient: inputs.sdk.client as SuiExecuteClient,\n\t\t\tsigner: inputs.signer,\n\t\t\tbuild: async () => {\n\t\t\t\tconst tx = new Transaction();\n\t\t\t\tbuildSealPublishTransaction(\n\t\t\t\t\tpublishTransactionBuilder(tx),\n\t\t\t\t\tbuildOutput,\n\t\t\t\t\tinputs.signer.address,\n\t\t\t\t);\n\t\t\t\treturn tx.build({\n\t\t\t\t\tclient: inputs.sdk.client as Parameters<typeof tx.build>[0] extends\n\t\t\t\t\t\t| { client?: infer C }\n\t\t\t\t\t\t| undefined\n\t\t\t\t\t\t? C\n\t\t\t\t\t\t: never,\n\t\t\t\t});\n\t\t\t},\n\t\t}).pipe(\n\t\t\tEffect.mapError((cause) =>\n\t\t\t\tsealError('publish', {\n\t\t\t\t\tname: inputs.name,\n\t\t\t\t\tmessage:\n\t\t\t\t\t\t`seal publish tx failed for signer '${inputs.signer.name}' ` +\n\t\t\t\t\t\t`(address=${inputs.signer.address}) during ${cause.phase}: ${cause.message}`,\n\t\t\t\t\tcause,\n\t\t\t\t}),\n\t\t\t),\n\t\t);\n\n\t\treturn yield* projectSealPublishReceipt(inputs.name, receipt);\n\t}).pipe(\n\t\tEffect.withSpan('devstack.plugin.seal.publish.suiTx', {\n\t\t\tattributes: {\n\t\t\t\t'seal.name': inputs.name,\n\t\t\t\t'seal.signer': inputs.signer.address,\n\t\t\t},\n\t\t}),\n\t);\n\nexport const publishSealPackage = (\n\tpublisher: ArtifactPublisher,\n\tinputs: SealPublishInputs,\n): Effect.Effect<{ readonly packageId: string }, ArtifactPublishError | SealError, Scope.Scope> =>\n\tEffect.gen(function* () {\n\t\tconst sourceHash = yield* hashMoveSources(inputs.movePackagePath).pipe(\n\t\t\tEffect.mapError((err) => moveBuildToSealError(inputs.name, err)),\n\t\t);\n\t\tconst inputsHash = sealPackageInputsHash(sourceHash, inputs.signer.address);\n\n\t\tconst result = yield* publisher.publish<SealPackageCached, SealPackageVerified>({\n\t\t\tnamespace: SEAL_PACKAGE_NAMESPACE,\n\t\t\tchain: inputs.chain,\n\t\t\tcontentHash: inputsHash,\n\t\t\tverifySchema: SealPackageVerifyShape,\n\t\t\tverify: (cached) =>\n\t\t\t\tverifyObjectLenient(inputs.chainProbe, cached.packageId, SealPackageVerifyShape),\n\t\t\tproduce: runSealPublishTransaction(inputs).pipe(\n\t\t\t\tEffect.mapError((err) => sealProduceFailed('publish', err)),\n\t\t\t),\n\t\t\tregister: () => Effect.void,\n\t\t});\n\n\t\tconst packageId = 'packageId' in result ? result.packageId : result.objectId;\n\t\tif (!packageId) {\n\t\t\treturn yield* Effect.fail(\n\t\t\t\tsealError('publish', {\n\t\t\t\t\tname: inputs.name,\n\t\t\t\t\tmessage: 'seal.deploy.publishSealPackage: publisher returned no package id',\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\treturn { packageId };\n\t}).pipe(\n\t\tEffect.withSpan('devstack.plugin.seal.publish', {\n\t\t\tattributes: { 'seal.name': inputs.name, 'seal.chain': inputs.chain },\n\t\t}),\n\t);\n\n// ---------------------------------------------------------------------------\n// KeyServer register — `keyServer` artifact\n// ---------------------------------------------------------------------------\n\nexport const SEAL_KEY_SERVER_NAMESPACE = 'seal/key-server-id' as const;\n\nexport interface SealKeyServerCached {\n\treadonly objectId: string;\n}\n\nexport const SealKeyServerVerifyShape = Schema.Struct({\n\tobjectId: Schema.String,\n\ttype: Schema.optional(Schema.Unknown),\n});\nexport type SealKeyServerVerified = Schema.Schema.Type<typeof SealKeyServerVerifyShape>;\n\nexport interface RegisterKeyServerTransactionInputs {\n\treadonly keyServerUrl: string;\n\treadonly sealPackageId: string;\n\treadonly publicKeyHex: string;\n\treadonly keyServerName: string;\n}\n\nexport interface RegisterKeyServerInputs extends RegisterKeyServerTransactionInputs {\n\treadonly name: string;\n\treadonly chain: ChainId;\n\treadonly signer: AccountValue;\n\treadonly sdk: SealSuiSdk;\n\treadonly chainProbe: ChainProbe<SealObjectProbeKey>;\n}\n\nexport const sealRegisterInputsHash = (\n\tinputs: RegisterKeyServerTransactionInputs,\n\tsignerAddress: string,\n): ContentHash =>\n\t// Keep the cache key path-safe and bounded. The raw material includes\n\t// a routed URL plus a long BLS public key; using it directly made the\n\t// best-effort cache write miss on normal restarts.\n\tcontentHash(\n\t\t`seal-register-v2|${createHash('sha256')\n\t\t\t.update(\n\t\t\t\tJSON.stringify({\n\t\t\t\t\tpackageId: inputs.sealPackageId,\n\t\t\t\t\tkeyServerUrl: inputs.keyServerUrl,\n\t\t\t\t\tkeyServerName: inputs.keyServerName,\n\t\t\t\t\tpublicKeyHex: inputs.publicKeyHex,\n\t\t\t\t\tsignerAddress,\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.digest('hex')}`,\n\t);\n\nexport const parseRegisterKeyServerOutput = (stdout: string): SealKeyServerCached | null => {\n\tconst re =\n\t\t/(?:^|\\n)\\s*(?:key_server_object_id|object_id|objectId|key_server_id)\\s*[:=]\\s*(0x[0-9a-fA-F]+)/;\n\tconst m = re.exec(stdout);\n\tif (!m?.[1]) return null;\n\treturn { objectId: m[1] };\n};\n\nexport interface SealRegisterTransactionBuilder<TArgument = unknown> {\n\treadonly pure: {\n\t\treadonly string: (value: string) => TArgument;\n\t\treadonly u8: (value: number) => TArgument;\n\t\treadonly vector: (type: 'u8', value: ReadonlyArray<number>) => TArgument;\n\t};\n\treadonly setSender: (address: string) => void;\n\treadonly moveCall: (input: {\n\t\treadonly target: string;\n\t\treadonly arguments: ReadonlyArray<TArgument>;\n\t}) => unknown;\n}\n\nexport type SealRegisterSdk = SealSuiSdk;\n\nconst registerTransactionBuilder = (\n\ttx: Transaction,\n): SealRegisterTransactionBuilder<TransactionArgument> => ({\n\tpure: {\n\t\tstring: (value) => tx.pure.string(value),\n\t\tu8: (value) => tx.pure.u8(value),\n\t\tvector: (type, value) => tx.pure.vector(type, [...value]),\n\t},\n\tsetSender: (address) => tx.setSender(address),\n\tmoveCall: (input) =>\n\t\ttx.moveCall({\n\t\t\ttarget: input.target,\n\t\t\targuments: [...input.arguments],\n\t\t}),\n});\n\nexport const buildRegisterKeyServerMoveCall = <TArgument>(\n\ttx: SealRegisterTransactionBuilder<TArgument>,\n\tinputs: RegisterKeyServerTransactionInputs,\n\tsignerAddress: string,\n): void => {\n\tconst pkBytes = decodeHex(inputs.publicKeyHex);\n\ttx.setSender(signerAddress);\n\ttx.moveCall({\n\t\ttarget: `${inputs.sealPackageId}::key_server::create_and_transfer_v2_independent_server`,\n\t\targuments: [\n\t\t\ttx.pure.string(inputs.keyServerName),\n\t\t\ttx.pure.string(inputs.keyServerUrl),\n\t\t\ttx.pure.u8(KEY_TYPE_BONEH_FRANKLIN_BLS12381),\n\t\t\ttx.pure.vector('u8', Array.from(pkBytes)),\n\t\t],\n\t});\n};\n\nexport const pickCreatedKeyServerObjectId = (receipt: ExecutedReceipt): string | null =>\n\treceipt.objectChanges.find(\n\t\t(change) =>\n\t\t\tchange.idOperation === 'Created' &&\n\t\t\t(change.objectType?.endsWith('::key_server::KeyServer') ?? false),\n\t)?.objectId ?? null;\n\nexport const projectRegisterKeyServerReceipt = (\n\tname: string,\n\treceipt: ExecutedReceipt,\n): Effect.Effect<SealKeyServerCached, SealError> => {\n\tconst objectId = pickCreatedKeyServerObjectId(receipt);\n\tif (objectId === null) {\n\t\treturn Effect.fail(\n\t\t\tsealError('register', {\n\t\t\t\tname,\n\t\t\t\tmessage:\n\t\t\t\t\t`seal register tx created no ::key_server::KeyServer object ` +\n\t\t\t\t\t`(digest=${receipt.digest})`,\n\t\t\t}),\n\t\t);\n\t}\n\treturn Effect.succeed({ objectId });\n};\n\nexport const runRegisterKeyServerTransaction = (\n\tsdk: SealRegisterSdk,\n\tsigner: AccountValue,\n\tinputs: RegisterKeyServerInputs,\n): Effect.Effect<SealKeyServerCached, SealError, Scope.Scope> =>\n\tEffect.gen(function* () {\n\t\tconst receipt = yield* executeSuiTx({\n\t\t\tclient: sdk.client as SuiExecuteClient,\n\t\t\tsigner,\n\t\t\tbuild: async () => {\n\t\t\t\tconst tx = new Transaction();\n\t\t\t\tbuildRegisterKeyServerMoveCall(registerTransactionBuilder(tx), inputs, signer.address);\n\t\t\t\treturn tx.build({\n\t\t\t\t\tclient: sdk.client as Parameters<typeof tx.build>[0] extends\n\t\t\t\t\t\t| { client?: infer C }\n\t\t\t\t\t\t| undefined\n\t\t\t\t\t\t? C\n\t\t\t\t\t\t: never,\n\t\t\t\t});\n\t\t\t},\n\t\t}).pipe(\n\t\t\tEffect.mapError((cause) =>\n\t\t\t\tsealError('register', {\n\t\t\t\t\tname: inputs.name,\n\t\t\t\t\tmessage:\n\t\t\t\t\t\t`seal register tx failed for signer '${signer.name}' ` +\n\t\t\t\t\t\t`(address=${signer.address}) during ${cause.phase}: ${cause.message}`,\n\t\t\t\t\tcause,\n\t\t\t\t}),\n\t\t\t),\n\t\t);\n\n\t\treturn yield* projectRegisterKeyServerReceipt(inputs.name, receipt);\n\t}).pipe(\n\t\tEffect.withSpan('devstack.plugin.seal.register.suiTx', {\n\t\t\tattributes: { 'seal.name': inputs.name, 'seal.url': inputs.keyServerUrl },\n\t\t}),\n\t);\n\nexport const registerKeyServer = (\n\tpublisher: ArtifactPublisher,\n\tinputs: RegisterKeyServerInputs,\n): Effect.Effect<{ readonly objectId: string }, ArtifactPublishError | SealError, Scope.Scope> =>\n\tEffect.gen(function* () {\n\t\tconst inputsHash = sealRegisterInputsHash(inputs, inputs.signer.address);\n\t\tconst result = yield* publisher.publish<SealKeyServerCached, SealKeyServerVerified>({\n\t\t\tnamespace: SEAL_KEY_SERVER_NAMESPACE,\n\t\t\tchain: inputs.chain,\n\t\t\tcontentHash: inputsHash,\n\t\t\tverifySchema: SealKeyServerVerifyShape,\n\t\t\tverify: (cached) =>\n\t\t\t\tverifyObjectLenient(inputs.chainProbe, cached.objectId, SealKeyServerVerifyShape),\n\t\t\tproduce: runRegisterKeyServerTransaction(inputs.sdk, inputs.signer, inputs).pipe(\n\t\t\t\tEffect.mapError((err) => sealProduceFailed('register', err)),\n\t\t\t),\n\t\t\tregister: () => Effect.void,\n\t\t});\n\n\t\tconst objectId = 'objectId' in result ? result.objectId : undefined;\n\t\tif (!objectId) {\n\t\t\treturn yield* Effect.fail(\n\t\t\t\tsealError('register', {\n\t\t\t\t\tname: inputs.name,\n\t\t\t\t\tmessage: 'seal.deploy.registerKeyServer: publisher returned no objectId',\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\treturn { objectId };\n\t}).pipe(\n\t\tEffect.withSpan('devstack.plugin.seal.register', {\n\t\t\tattributes: { 'seal.name': inputs.name, 'seal.url': inputs.keyServerUrl },\n\t\t}),\n\t);\n"],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { ConfigIssue } from "../../substrate/runtime/config-validation.mjs";
|
|
2
|
+
import { ForkIncompatibleError } from "../../substrate/runtime/mode-errors.mjs";
|
|
3
|
+
|
|
4
|
+
//#region src/plugins/seal/errors.d.ts
|
|
5
|
+
/** Phases for `SealError`. Closed sum — matches the v3 catalog
|
|
6
|
+
* (07-seal.md §"Adjacent Seal references" → `engine/phases.ts:79-91`).
|
|
7
|
+
*
|
|
8
|
+
* Phase semantics:
|
|
9
|
+
* - `port-alloc` — router `seal` entrypoint not registered.
|
|
10
|
+
* - `image` — image build / pull failed (bootstrap-asset
|
|
11
|
+
* cargo step).
|
|
12
|
+
* - `keygen` — `seal-cli genkey` container failed OR stdout
|
|
13
|
+
* parse failed.
|
|
14
|
+
* - `publish` — Move publish of the seal contracts failed.
|
|
15
|
+
* - `register` — `KeyServer::create_and_transfer_v2_independent_server`
|
|
16
|
+
* Move call failed OR object id parse failed.
|
|
17
|
+
* - `config-render` — key-server-config.yaml / master-key.env write
|
|
18
|
+
* failed (FS perms, disk full).
|
|
19
|
+
* - `container` — long-running key-server container start failed.
|
|
20
|
+
* - `ready` — /health probe timed out.
|
|
21
|
+
* - `rotate` — master-key rotation pipeline failed (sub-phase
|
|
22
|
+
* is in the `cause` chain).
|
|
23
|
+
* - `seal` — generic catch-all for non-phaseable failures. */
|
|
24
|
+
type SealPhase = 'port-alloc' | 'image' | 'keygen' | 'publish' | 'register' | 'config-render' | 'container' | 'ready' | 'rotate' | 'seal';
|
|
25
|
+
/** Generic Seal plugin error. The structured shape mirrors the v3
|
|
26
|
+
* `SealError` from `engine/errors.ts:325-341` minus the dead
|
|
27
|
+
* `keyServer` field (07-seal.md §Opportunities #6).
|
|
28
|
+
*
|
|
29
|
+
* Distilled-doc invariant #16: `stdout` / `stderr` MUST be redacted
|
|
30
|
+
* via `redactMasterKey` at every raise site that touches `seal-cli`
|
|
31
|
+
* output. The raise sites in this plugin pipe their captures
|
|
32
|
+
* through the redactor before constructing the error. */
|
|
33
|
+
interface SealError {
|
|
34
|
+
readonly _tag: 'SealError';
|
|
35
|
+
readonly phase: SealPhase;
|
|
36
|
+
/** Seal instance name (default `'seal'`). Folds into TUI display
|
|
37
|
+
* + cause-walker context. */
|
|
38
|
+
readonly name: string;
|
|
39
|
+
readonly message: string;
|
|
40
|
+
readonly stdout?: string;
|
|
41
|
+
readonly stderr?: string;
|
|
42
|
+
readonly exitCode?: number;
|
|
43
|
+
readonly cause?: unknown;
|
|
44
|
+
}
|
|
45
|
+
interface SealConfigError extends ConfigIssue {
|
|
46
|
+
readonly _tag: 'SealConfigError';
|
|
47
|
+
}
|
|
48
|
+
/** Union of every error a Seal-plugin caller may encounter. */
|
|
49
|
+
type SealAnyError = SealError | ForkIncompatibleError | SealConfigError;
|
|
50
|
+
//#endregion
|
|
51
|
+
export { SealAnyError, SealConfigError, SealError };
|
|
52
|
+
//# sourceMappingURL=errors.d.mts.map
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { defineConfigError } from "../../substrate/runtime/config-validation.mjs";
|
|
2
|
+
//#region src/plugins/seal/errors.ts
|
|
3
|
+
const sealError = (phase, parts) => ({
|
|
4
|
+
_tag: "SealError",
|
|
5
|
+
phase,
|
|
6
|
+
...parts
|
|
7
|
+
});
|
|
8
|
+
const sealConfigError = defineConfigError("SealConfigError");
|
|
9
|
+
/** Error tags this plugin contributes — surfaced to the cause walker
|
|
10
|
+
* via `PluginErrorContribution`. */
|
|
11
|
+
const SEAL_ERROR_TAGS = [
|
|
12
|
+
"SealError",
|
|
13
|
+
"ForkIncompatibleError",
|
|
14
|
+
"SealConfigError"
|
|
15
|
+
];
|
|
16
|
+
//#endregion
|
|
17
|
+
export { SEAL_ERROR_TAGS, sealConfigError, sealError };
|
|
18
|
+
|
|
19
|
+
//# sourceMappingURL=errors.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.mjs","names":[],"sources":["../../../src/plugins/seal/errors.ts"],"sourcesContent":["// Seal plugin — typed errors.\n//\n// Every error surfacing site that may carry stdout/stderr from the\n// seal-cli MUST run the bytes through a master-key redactor. The\n// redactor lives in `keygen.ts` so the keygen pipeline is the single\n// owner of the redaction substrate; this file only declares the\n// closed phase set + the structured error shapes.\n//\n// Effect v4: errors are plain interfaces with a `_tag` discriminator\n// (per surrounding subsystem style). `Effect.catchTag` / `catchTags`\n// match on the literal `_tag`.\n//\n// `ForkIncompatibleError` is a cross-cutting mode-refusal shape\n// owned by `substrate/runtime/mode-errors.ts`; seal contributes\n// the `sealLocalKeygen` variant via the factory below. Substrate\n// owns the canonical re-export; this module does NOT re-export the\n// class — the cross-plugin re-export was the cause of a name\n// collision at the root barrel.\n\nimport { ForkIncompatibleError } from '../../substrate/runtime/mode-errors.ts';\nimport { defineConfigError, type ConfigIssue } from '../../substrate/runtime/config-validation.ts';\n\n// ---------------------------------------------------------------------------\n// SealError — the plugin's primary tagged error\n// ---------------------------------------------------------------------------\n\n/** Phases for `SealError`. Closed sum — matches the v3 catalog\n * (07-seal.md §\"Adjacent Seal references\" → `engine/phases.ts:79-91`).\n *\n * Phase semantics:\n * - `port-alloc` — router `seal` entrypoint not registered.\n * - `image` — image build / pull failed (bootstrap-asset\n * cargo step).\n * - `keygen` — `seal-cli genkey` container failed OR stdout\n * parse failed.\n * - `publish` — Move publish of the seal contracts failed.\n * - `register` — `KeyServer::create_and_transfer_v2_independent_server`\n * Move call failed OR object id parse failed.\n * - `config-render` — key-server-config.yaml / master-key.env write\n * failed (FS perms, disk full).\n * - `container` — long-running key-server container start failed.\n * - `ready` — /health probe timed out.\n * - `rotate` — master-key rotation pipeline failed (sub-phase\n * is in the `cause` chain).\n * - `seal` — generic catch-all for non-phaseable failures. */\nexport type SealPhase =\n\t| 'port-alloc'\n\t| 'image'\n\t| 'keygen'\n\t| 'publish'\n\t| 'register'\n\t| 'config-render'\n\t| 'container'\n\t| 'ready'\n\t| 'rotate'\n\t| 'seal';\n\n/** Generic Seal plugin error. The structured shape mirrors the v3\n * `SealError` from `engine/errors.ts:325-341` minus the dead\n * `keyServer` field (07-seal.md §Opportunities #6).\n *\n * Distilled-doc invariant #16: `stdout` / `stderr` MUST be redacted\n * via `redactMasterKey` at every raise site that touches `seal-cli`\n * output. The raise sites in this plugin pipe their captures\n * through the redactor before constructing the error. */\nexport interface SealError {\n\treadonly _tag: 'SealError';\n\treadonly phase: SealPhase;\n\t/** Seal instance name (default `'seal'`). Folds into TUI display\n\t * + cause-walker context. */\n\treadonly name: string;\n\treadonly message: string;\n\treadonly stdout?: string;\n\treadonly stderr?: string;\n\treadonly exitCode?: number;\n\treadonly cause?: unknown;\n}\n\nexport const sealError = (\n\tphase: SealPhase,\n\tparts: Omit<SealError, '_tag' | 'phase'>,\n): SealError => ({ _tag: 'SealError', phase, ...parts });\n\n// ---------------------------------------------------------------------------\n// ForkIncompatibleError — shared shape owned by substrate\n// ---------------------------------------------------------------------------\n\n/** Synchronous refusal raised at factory time when a local-keygen\n * variant is composed under a fork network. Refusal MUST be a\n * synchronous throw at the factory call site (NOT a deferred\n * acquire-time failure) so the user sees the actionable hint before\n * any other plugin starts work. */\nexport const forkIncompatibleError = (\n\tparts: ConstructorParameters<typeof ForkIncompatibleError>[0],\n): ForkIncompatibleError => new ForkIncompatibleError(parts);\n\n// ---------------------------------------------------------------------------\n// SealConfigError — synchronous factory-time configuration faults\n// ---------------------------------------------------------------------------\n\nexport interface SealConfigError extends ConfigIssue {\n\treadonly _tag: 'SealConfigError';\n}\n\nexport const sealConfigError = defineConfigError('SealConfigError');\n\n// ---------------------------------------------------------------------------\n// Error-tag inventory\n// ---------------------------------------------------------------------------\n\n/** Error tags this plugin contributes — surfaced to the cause walker\n * via `PluginErrorContribution`. */\nexport const SEAL_ERROR_TAGS = ['SealError', 'ForkIncompatibleError', 'SealConfigError'] as const;\n\n/** Union of every error a Seal-plugin caller may encounter. */\nexport type SealAnyError = SealError | ForkIncompatibleError | SealConfigError;\n"],"mappings":";;AA8EA,MAAa,aACZ,OACA,WACgB;CAAE,MAAM;CAAa;CAAO,GAAG;CAAO;AAuBvD,MAAa,kBAAkB,kBAAkB,kBAAkB;;;AAQnE,MAAa,kBAAkB;CAAC;CAAa;CAAyB;CAAkB"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { CodegenableDecl } from "../../contracts/codegenable.mjs";
|
|
2
|
+
import { RoutableDecl } from "../../contracts/routable.mjs";
|
|
3
|
+
import { SnapshotableDecl } from "../../contracts/snapshotable.mjs";
|
|
4
|
+
import { AnyResourceRef, Plugin, ResourceRef } from "../../substrate/plugin.mjs";
|
|
5
|
+
import { ModeNamespace } from "../../api/mode-narrowed-factory.mjs";
|
|
6
|
+
import { SeedObjectsAccumulator } from "../sui/seed-objects.mjs";
|
|
7
|
+
import { SuiClient } from "../sui/mode/shared.mjs";
|
|
8
|
+
import { SuiOptions } from "../sui/mode/spec.mjs";
|
|
9
|
+
import { AccountValue } from "../account/service.mjs";
|
|
10
|
+
import { AccountResourceId } from "../account/index.mjs";
|
|
11
|
+
import { SealAnyError, SealConfigError, SealError } from "./errors.mjs";
|
|
12
|
+
import { SealKeyManager } from "./key-manager.mjs";
|
|
13
|
+
import { SealKeyServer, SealKeyServerEntry, SealKnownResolved, SealLocalKeygenResolved, SealResolved } from "./registry-publish.mjs";
|
|
14
|
+
import { KnownNetwork } from "./mode/live.mjs";
|
|
15
|
+
import { ForkUpstream } from "./mode/fork-known.mjs";
|
|
16
|
+
import { SealBindings } from "./codegen.mjs";
|
|
17
|
+
//#region src/plugins/seal/index.d.ts
|
|
18
|
+
/** Common options shared across all three modes. */
|
|
19
|
+
interface SealCommonOptions {
|
|
20
|
+
readonly name?: string;
|
|
21
|
+
}
|
|
22
|
+
/** A user-supplied signer account ref. The user passes the result of
|
|
23
|
+
* `account('publisher')` — NOT a magic-string token. Generic over the
|
|
24
|
+
* literal account name so the seal dependency edge preserves the
|
|
25
|
+
* per-account resource id. */
|
|
26
|
+
type SealSignerMember<Name extends string = string> = ResourceRef<AccountResourceId<Name>, AccountValue>;
|
|
27
|
+
/** Local-keygen mode options. The `signer` field is REQUIRED — the
|
|
28
|
+
* Move publish + on-chain register both need it. The mode-narrowed
|
|
29
|
+
* factory's TypeScript shape enforces this (no `signer?` here). */
|
|
30
|
+
interface SealLocalKeygenOptions<Signer extends SealSignerMember = SealSignerMember> extends SealCommonOptions {
|
|
31
|
+
/** Signer for the seal Move publish + on-chain key-server register.
|
|
32
|
+
* Pass the result of `account('publisher')` — the same plugin/resource
|
|
33
|
+
* ref used elsewhere in the stack. The ref is threaded through
|
|
34
|
+
* `dependsOn` so the publish tx waits for the account's acquire
|
|
35
|
+
* (keypair mint + funding) to complete. */
|
|
36
|
+
readonly signer: Signer;
|
|
37
|
+
readonly version?: string;
|
|
38
|
+
readonly movePackagePath?: string;
|
|
39
|
+
readonly readyTimeoutMs?: number;
|
|
40
|
+
readonly keyServerName?: string;
|
|
41
|
+
readonly image?: {
|
|
42
|
+
readonly pull: string;
|
|
43
|
+
} | {
|
|
44
|
+
readonly build: {
|
|
45
|
+
readonly context: string;
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/** Live-mode options (testnet / mainnet). */
|
|
50
|
+
interface SealLiveOptions extends SealCommonOptions {
|
|
51
|
+
readonly network?: KnownNetwork;
|
|
52
|
+
readonly objectId?: string;
|
|
53
|
+
readonly keyServerUrl?: string;
|
|
54
|
+
}
|
|
55
|
+
/** Fork-known-mode options. */
|
|
56
|
+
interface SealForkKnownOptions extends SealCommonOptions {
|
|
57
|
+
readonly upstream: ForkUpstream;
|
|
58
|
+
readonly objectId?: string;
|
|
59
|
+
readonly keyServerUrl?: string;
|
|
60
|
+
}
|
|
61
|
+
type SealOptions<Signer extends SealSignerMember = SealSignerMember> = ({
|
|
62
|
+
readonly mode: 'local-keygen';
|
|
63
|
+
} & SealLocalKeygenOptions<Signer>) | ({
|
|
64
|
+
readonly mode: 'live';
|
|
65
|
+
} & SealLiveOptions) | ({
|
|
66
|
+
readonly mode: 'fork-known';
|
|
67
|
+
} & SealForkKnownOptions);
|
|
68
|
+
/** Explicit Seal factory. `local-keygen` requires a signer; live and
|
|
69
|
+
* fork-known modes must be selected directly or through `sealFor`. */
|
|
70
|
+
declare const seal: <const Signer extends SealSignerMember = SealSignerMember>(opts: SealOptions<Signer>) => Plugin<`seal:${string}`, SealResolved, {
|
|
71
|
+
readonly sui: ResourceRef<"sui", SuiClient & {
|
|
72
|
+
readonly mode: SuiOptions["mode"];
|
|
73
|
+
readonly seedObjects: SeedObjectsAccumulator;
|
|
74
|
+
}>;
|
|
75
|
+
readonly signer: Signer;
|
|
76
|
+
} extends infer T ? T extends {
|
|
77
|
+
readonly sui: ResourceRef<"sui", SuiClient & {
|
|
78
|
+
readonly mode: SuiOptions["mode"];
|
|
79
|
+
readonly seedObjects: SeedObjectsAccumulator;
|
|
80
|
+
}>;
|
|
81
|
+
readonly signer: Signer;
|
|
82
|
+
} ? T extends Readonly<Record<string, AnyResourceRef>> ? readonly T[keyof T][] : readonly [] : never : never, readonly [SnapshotableDecl, CodegenableDecl<"seal-key-server">, RoutableDecl]> | Plugin<`seal:${string}`, {
|
|
83
|
+
mode: "live";
|
|
84
|
+
manager: null;
|
|
85
|
+
serverConfigs: ReadonlyArray<SealKeyServerEntry>;
|
|
86
|
+
keyServerUrl: string;
|
|
87
|
+
objectId: string;
|
|
88
|
+
}, readonly [], readonly [SnapshotableDecl, CodegenableDecl<"seal-key-server">]> | Plugin<`seal:${string}`, {
|
|
89
|
+
mode: "fork-known";
|
|
90
|
+
manager: null;
|
|
91
|
+
serverConfigs: ReadonlyArray<SealKeyServerEntry>;
|
|
92
|
+
keyServerUrl: string;
|
|
93
|
+
objectId: string;
|
|
94
|
+
}, readonly [], readonly [SnapshotableDecl, CodegenableDecl<"seal-key-server">]>;
|
|
95
|
+
/** Mode-narrowed factory namespace.
|
|
96
|
+
*
|
|
97
|
+
* Usage:
|
|
98
|
+
* const local = { mode: 'local' } as const;
|
|
99
|
+
* sealFor(local).localKeygen({signer}) // OK
|
|
100
|
+
* sealFor(local).forkKnown(...) // type error: not in 'local' branch
|
|
101
|
+
*
|
|
102
|
+
* const fork = { mode: 'fork' } as const;
|
|
103
|
+
* sealFor(fork).forkKnown({upstream}) // OK
|
|
104
|
+
* sealFor(fork).localKeygen({signer}) // type error: not in 'fork' branch
|
|
105
|
+
* // (distilled-doc invariant #8)
|
|
106
|
+
*
|
|
107
|
+
* Distilled-doc invariant #8 (fork-localkeygen-refused): the
|
|
108
|
+
* fork-mode branch has NO `localKeygen` entry — that's the
|
|
109
|
+
* type-level refusal. */
|
|
110
|
+
declare const sealFor: ModeNamespace<{
|
|
111
|
+
local: {
|
|
112
|
+
localKeygen: <const Signer extends SealSignerMember>(opts: SealLocalKeygenOptions<Signer>) => Plugin<`seal:${string}`, SealResolved, {
|
|
113
|
+
readonly sui: ResourceRef<"sui", SuiClient & {
|
|
114
|
+
readonly mode: SuiOptions["mode"];
|
|
115
|
+
readonly seedObjects: SeedObjectsAccumulator;
|
|
116
|
+
}>;
|
|
117
|
+
readonly signer: Signer;
|
|
118
|
+
} extends infer T ? T extends {
|
|
119
|
+
readonly sui: ResourceRef<"sui", SuiClient & {
|
|
120
|
+
readonly mode: SuiOptions["mode"];
|
|
121
|
+
readonly seedObjects: SeedObjectsAccumulator;
|
|
122
|
+
}>;
|
|
123
|
+
readonly signer: Signer;
|
|
124
|
+
} ? T extends Readonly<Record<string, AnyResourceRef>> ? readonly T[keyof T][] : readonly [] : never : never, readonly [SnapshotableDecl, CodegenableDecl<"seal-key-server">, RoutableDecl]>;
|
|
125
|
+
};
|
|
126
|
+
live: {
|
|
127
|
+
testnet: (opts?: Omit<SealLiveOptions, "network">) => Plugin<`seal:${string}`, {
|
|
128
|
+
mode: "live";
|
|
129
|
+
manager: null;
|
|
130
|
+
serverConfigs: ReadonlyArray<SealKeyServerEntry>;
|
|
131
|
+
keyServerUrl: string;
|
|
132
|
+
objectId: string;
|
|
133
|
+
}, readonly [], readonly [SnapshotableDecl, CodegenableDecl<"seal-key-server">]>;
|
|
134
|
+
mainnet: (opts?: Omit<SealLiveOptions, "network">) => Plugin<`seal:${string}`, {
|
|
135
|
+
mode: "live";
|
|
136
|
+
manager: null;
|
|
137
|
+
serverConfigs: ReadonlyArray<SealKeyServerEntry>;
|
|
138
|
+
keyServerUrl: string;
|
|
139
|
+
objectId: string;
|
|
140
|
+
}, readonly [], readonly [SnapshotableDecl, CodegenableDecl<"seal-key-server">]>;
|
|
141
|
+
custom: (opts: Required<Pick<SealLiveOptions, "objectId" | "keyServerUrl">> & SealLiveOptions) => Plugin<`seal:${string}`, {
|
|
142
|
+
mode: "live";
|
|
143
|
+
manager: null;
|
|
144
|
+
serverConfigs: ReadonlyArray<SealKeyServerEntry>;
|
|
145
|
+
keyServerUrl: string;
|
|
146
|
+
objectId: string;
|
|
147
|
+
}, readonly [], readonly [SnapshotableDecl, CodegenableDecl<"seal-key-server">]>;
|
|
148
|
+
};
|
|
149
|
+
fork: {
|
|
150
|
+
forkKnown: (opts: SealForkKnownOptions) => Plugin<`seal:${string}`, {
|
|
151
|
+
mode: "fork-known";
|
|
152
|
+
manager: null;
|
|
153
|
+
serverConfigs: ReadonlyArray<SealKeyServerEntry>;
|
|
154
|
+
keyServerUrl: string;
|
|
155
|
+
objectId: string;
|
|
156
|
+
}, readonly [], readonly [SnapshotableDecl, CodegenableDecl<"seal-key-server">]>;
|
|
157
|
+
};
|
|
158
|
+
}>;
|
|
159
|
+
//#endregion
|
|
160
|
+
export { SealCommonOptions, SealForkKnownOptions, SealLiveOptions, SealLocalKeygenOptions, SealOptions, seal, sealFor };
|
|
161
|
+
//# sourceMappingURL=index.d.mts.map
|