@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 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../src/plugins/deepbook/index.ts"],"sourcesContent":["// Deepbook plugin — barrel + factories.\n//\n// Architecture: Deepbook is a task plugin that resolves a managed\n// local deployment, a known deployment, or explicit caller-supplied\n// override ids, then emits bindings.\n//\n// Mode discipline:\n//\n// - `deepbook(opts)` — explicit mode selection.\n// Localnet can default to local when\n// passed local options.\n// - `deepbookFor(network).local` — local-branch managed deployment.\n// - `deepbookFor(network).override` — local-branch override for\n// caller-supplied deployment ids.\n// - `deepbookFor(network).known` — known-deployment branch (live +\n// fork networks; wraps an already-\n// deployed canonical instance).\n//\n// Capability decls emitted:\n//\n// Local mode:\n// 1. snapshotable — `deepbook/<name>` subtree.\n// 2. codegenable — `deepbook-network` bindings.\n//\n// Override mode:\n// 1. snapshotable — identity guard only.\n// 2. codegenable — `deepbook-network` bindings.\n//\n// Known mode:\n// 1. snapshotable — identity guard only.\n// 2. codegenable — `deepbook-network` bindings (mode='known').\n//\n// Resource id: `deepbook/<name>`. Plugin key: `deepbook:<name>`.\n\nimport { Effect } from 'effect';\n\nimport { defineModeNamespace } from '../../api/mode-narrowed-factory.ts';\nimport { definePlugin, resource, type ResourceValueOf } from '../../api/define-plugin.ts';\nimport { pluginErrorContributions } from '../../api/plugin-errors.ts';\nimport type { CodegenableDecl } from '../../contracts/codegenable.ts';\nimport type { SnapshotableDecl } from '../../contracts/snapshotable.ts';\nimport { ArtifactPublisherService } from '../../substrate/runtime/artifact-publisher/index.ts';\nimport { setCurrentPluginPhase } from '../../substrate/runtime/current-plugin.ts';\nimport { suiResource } from '../sui/index.ts';\nimport type { AccountValue } from '../account/service.ts';\nimport type { CoinValue } from '../coin/index.ts';\nimport type { LocalPackageResolved } from '../package/index.ts';\n\nimport { deepbookPluginKey } from './plugin-key.ts';\nimport {\n\tDEEPBOOK_ERROR_TAGS,\n\tdeepbookConfigError,\n\tdeepbookPluginError,\n\ttype DeepbookError,\n\ttype DeepbookPluginError,\n} from './errors.ts';\nimport { makeDeepbookCodegenable, type DeepbookBindings } from './codegen.ts';\nimport {\n\tmakeDeepbookDeepFundingContribution,\n\tmakeDeepbookDeepFundingStrategy,\n\ttype DeepbookDeepFundingStrategy,\n} from './faucet-strategy.ts';\nimport { makeKnownSnapshotable, makeLocalSnapshotable } from './snapshot.ts';\nimport {\n\tcreateDeepbookPools,\n\tseedDeepbookPools,\n\ttype DeepbookDeployment,\n\ttype ResolvedDeepbookPoolSpec,\n} from './deploy.ts';\nimport { initLocalPythFeeds } from './pyth/index.ts';\nimport type {\n\tAccountMemberAlias,\n\tDeepbookPackageMember,\n\tDeepbookPool,\n\tDeepbookPoolSpec,\n\tPythHandle,\n\tPythOptions,\n} from './types.ts';\n\n// ---------------------------------------------------------------------------\n// Resource — the resolved value all consumers read\n// ---------------------------------------------------------------------------\n\nexport type DeepbookResourceId<Name extends string> = `deepbook/${Name}`;\n\nconst makeDeepbookResource = <Name extends string>(name: Name) =>\n\tresource<DeepbookResourceId<Name>, DeepbookResolved>(\n\t\t`deepbook/${name}` as DeepbookResourceId<Name>,\n\t);\n\n/** The deepbook resolved value. Mode-asymmetric:\n *\n * - `adminCapId` is `null` for known-deployment mode.\n * - `margin` / `serverUrl` / `indexerUrl` / `marketMakerRunning`\n * are `null` when the corresponding sub-feature is not enabled. */\nexport interface DeepbookResolved {\n\treadonly mode: 'local' | 'override' | 'known';\n\treadonly chain: string;\n\treadonly packageId: string;\n\treadonly registryId: string;\n\treadonly adminCapId: string | null;\n\treadonly deepTreasuryId: string | null;\n\treadonly pools: ReadonlyArray<DeepbookPool>;\n\treadonly pyth: PythHandle | null;\n\treadonly margin: {\n\t\treadonly packageId: string;\n\t\treadonly registryId: string;\n\t} | null;\n\treadonly serverUrl: string | null;\n\treadonly indexerUrl: string | null;\n\treadonly marketMakerRunning: boolean;\n\treadonly deepFundingStrategy: DeepbookDeepFundingStrategy | null;\n}\n\n// ---------------------------------------------------------------------------\n// Options\n// ---------------------------------------------------------------------------\n\nexport interface DeepbookCommonOptions {\n\treadonly name?: string;\n}\n\n/** Override mode wraps an explicitly supplied deployment. It does not\n * publish or manage DeepBook locally. */\nexport interface DeepbookOverrideOptions extends DeepbookCommonOptions {\n\treadonly packageId: string;\n\treadonly registryId: string;\n\treadonly adminCapId: string;\n\treadonly chain?: string;\n}\n\n/** Local mode wraps an explicitly supplied local DeepBook package. */\nexport interface DeepbookLocalOptions<\n\tPublisher extends AccountMemberAlias = AccountMemberAlias,\n\tPackage extends DeepbookPackageMember = DeepbookPackageMember,\n\tPools extends ReadonlyArray<DeepbookPoolSpec> = readonly [],\n\tPyth extends PythOptions | undefined = undefined,\n> extends DeepbookCommonOptions {\n\t/** Publisher account — Direct Member Ref (locked API decision). */\n\treadonly publisher: Publisher;\n\t/** Published DeepBook package member. The package must capture the\n\t * `registry::Registry` and `registry::DeepbookAdminCap` object ids. */\n\treadonly package: Package;\n\t/** Optional local mock-Pyth package + feed setup. */\n\treadonly pyth?: Pyth;\n\t/** Capture key for the package-created `registry::Registry`. */\n\treadonly registryIdKey?: string;\n\t/** Capture key for the package-created `registry::DeepbookAdminCap`. */\n\treadonly adminCapIdKey?: string;\n\t/** Optional capture key for a DEEP treasury object used by SDK bindings. */\n\treadonly deepTreasuryIdKey?: string;\n\t/** Pools to create after the DeepBook package publishes. Pass `[]`\n\t * only for composition tests or known-empty deployments. */\n\treadonly pools: Pools;\n}\n\nexport type DeepbookKnownNetwork = 'mainnet' | 'testnet';\n\ninterface DeepbookKnownCommonOptions extends DeepbookCommonOptions {\n\t/** Optional chain id pin (defaults to the configured network). */\n\treadonly chain?: string;\n}\n\ninterface DeepbookKnownNetworkOptions extends DeepbookKnownCommonOptions {\n\treadonly network: DeepbookKnownNetwork;\n\treadonly packageId?: string;\n\treadonly registryId?: string;\n}\n\ninterface DeepbookKnownExplicitOptions extends DeepbookKnownCommonOptions {\n\treadonly packageId: string;\n\treadonly registryId: string;\n\treadonly network?: DeepbookKnownNetwork;\n}\n\nexport type DeepbookKnownOptions = DeepbookKnownNetworkOptions | DeepbookKnownExplicitOptions;\n\nexport type DeepbookOptions<\n\tPublisher extends AccountMemberAlias = AccountMemberAlias,\n\tPyth extends PythOptions | undefined = PythOptions | undefined,\n> =\n\t| ({\n\t\t\treadonly mode: 'local';\n\t } & DeepbookLocalOptions<\n\t\t\tPublisher,\n\t\t\tDeepbookPackageMember,\n\t\t\tReadonlyArray<DeepbookPoolSpec>,\n\t\t\tPyth\n\t >)\n\t| ({ readonly mode: 'override' } & DeepbookOverrideOptions)\n\t| ({ readonly mode: 'known' } & DeepbookKnownOptions);\n\n// ---------------------------------------------------------------------------\n// Plugin construction — override\n// ---------------------------------------------------------------------------\n\nconst DEFAULT_NAME = 'deepbook';\nconst deepbookErrorContributions = pluginErrorContributions(DEEPBOOK_ERROR_TAGS);\n\ntype DeepbookLocalEmptyPoolOptions<\n\tPublisher extends AccountMemberAlias,\n\tPackage extends DeepbookPackageMember,\n\tPyth extends PythOptions | undefined = undefined,\n> = Omit<DeepbookLocalOptions<Publisher, Package, readonly [], Pyth>, 'pools'> & {\n\treadonly pools: readonly [];\n};\n\nconst KNOWN_DEEPBOOK_DEPLOYMENTS: Record<\n\tDeepbookKnownNetwork,\n\t{\n\t\treadonly chain: string;\n\t\treadonly packageId: string;\n\t\treadonly registryId: string;\n\t\treadonly deepTreasuryId: string;\n\t\treadonly pyth: PythHandle;\n\t}\n> = {\n\ttestnet: {\n\t\tchain: 'sui:testnet',\n\t\tpackageId: '0x22be4cade64bf2d02412c7e8d0e8beea2f78828b948118d46735315409371a3c',\n\t\tregistryId: '0x7c256edbda983a2cd6f946655f4bf3f00a41043993781f8674a7046e8c0e11d1',\n\t\tdeepTreasuryId: '0x69fffdae0075f8f71f4fa793549c11079266910e8905169845af1f5d00e09dcb',\n\t\tpyth: {\n\t\t\tpackageId: null,\n\t\t\tstateId: '0x243759059f4c3111179da5878c12f68d612c21a8d54d85edc86164bb18be1c7c',\n\t\t\twormholeStateId: '0x31358d198147da50db32eda2562951d53973a0c0ad5ed738e9b17d88b213d790',\n\t\t\tfeeds: [],\n\t\t},\n\t},\n\tmainnet: {\n\t\tchain: 'sui:mainnet',\n\t\tpackageId: '0xf48222c4e057fa468baf136bff8e12504209d43850c5778f76159292a96f621e',\n\t\tregistryId: '0xaf16199a2dff736e9f07a845f23c5da6df6f756eddb631aed9d24a93efc4549d',\n\t\tdeepTreasuryId: '0x032abf8948dda67a271bcc18e776dbbcfb0d58c8d288a700ff0d5521e57a1ffe',\n\t\tpyth: {\n\t\t\tpackageId: null,\n\t\t\tstateId: '0x1f9310238ee9298fb703c3419030b35b22bb1cc37113e3bb5007c99aec79e5b8',\n\t\t\twormholeStateId: '0xaeab97f96cf9877fee2883315d459552b2b921edc16d7ceac6eab944dd88919c',\n\t\t\tfeeds: [],\n\t\t},\n\t},\n};\n\ntype PoolCoinRefs<Pools extends ReadonlyArray<DeepbookPoolSpec>> =\n\tPools[number] extends DeepbookPoolSpec<infer Base, infer Quote> ? Base | Quote : never;\ntype PoolCoinRefTuple<Pools extends ReadonlyArray<DeepbookPoolSpec>> = Pools extends readonly []\n\t? readonly []\n\t: readonly PoolCoinRefs<Pools>[];\n\ntype PythRefs<Pyth extends PythOptions | undefined> =\n\tPyth extends PythOptions<infer Package, infer Pusher> ? readonly [Pusher, Package] : readonly [];\n\ntype LocalDependsOn<\n\tPublisher extends AccountMemberAlias,\n\tPackage extends DeepbookPackageMember,\n\tPools extends ReadonlyArray<DeepbookPoolSpec>,\n\tPyth extends PythOptions | undefined,\n> = readonly [\n\ttypeof suiResource,\n\tPublisher,\n\tPackage,\n\t...PythRefs<Pyth>,\n\t...PoolCoinRefTuple<Pools>,\n];\n\nconst poolCoinRefs = <Pools extends ReadonlyArray<DeepbookPoolSpec>>(\n\tpools: Pools,\n): ReadonlyArray<PoolCoinRefs<Pools>> =>\n\tpools.flatMap((pool) => [pool.base.coin, pool.quote.coin]) as unknown as ReadonlyArray<\n\t\tPoolCoinRefs<Pools>\n\t>;\n\nconst pythRefs = <Pyth extends PythOptions | undefined>(pyth: Pyth): PythRefs<Pyth> =>\n\t(pyth === undefined ? [] : [pyth.pusher, pyth.package]) as unknown as PythRefs<Pyth>;\n\nconst localDependsOn = <\n\tPublisher extends AccountMemberAlias,\n\tPackage extends DeepbookPackageMember,\n\tPools extends ReadonlyArray<DeepbookPoolSpec>,\n\tPyth extends PythOptions | undefined,\n>(\n\topts: DeepbookLocalOptions<Publisher, Package, Pools, Pyth>,\n): LocalDependsOn<Publisher, Package, Pools, Pyth> =>\n\t[\n\t\tsuiResource,\n\t\topts.publisher,\n\t\topts.package,\n\t\t...pythRefs(opts.pyth),\n\t\t...poolCoinRefs(opts.pools),\n\t] as unknown as LocalDependsOn<Publisher, Package, Pools, Pyth>;\n\nconst requireCapturedId = (\n\tpkg: LocalPackageResolved,\n\tkey: string,\n\tkind: 'registryId' | 'adminCapId',\n): Effect.Effect<string, DeepbookPluginError> => {\n\tconst value = pkg.captured[key];\n\tif (typeof value === 'string' && value.length > 0) {\n\t\treturn Effect.succeed(value);\n\t}\n\treturn Effect.fail(\n\t\tdeepbookPluginError(\n\t\t\t'publish',\n\t\t\t`deepbook local package '${pkg.name}' is missing captured ${kind} '${key}'.`,\n\t\t),\n\t);\n};\n\nconst resolvePoolSpecs = (\n\tpools: ReadonlyArray<DeepbookPoolSpec>,\n\tcoinValuesByRefId: ReadonlyMap<string, CoinValue>,\n): ReadonlyArray<ResolvedDeepbookPoolSpec> =>\n\tpools.map((pool) => {\n\t\tconst base = coinValuesByRefId.get(pool.base.coin.id) as CoinValue;\n\t\tconst quote = coinValuesByRefId.get(pool.quote.coin.id) as CoinValue;\n\t\treturn {\n\t\t\tname: pool.name,\n\t\t\tbase: pool.base.key,\n\t\t\tquote: pool.quote.key,\n\t\t\tbaseCoinType: base.fullCoinType,\n\t\t\tquoteCoinType: quote.fullCoinType,\n\t\t\t...(base.fundingStrategy === undefined ? {} : { baseFundingStrategy: base.fundingStrategy }),\n\t\t\t...(quote.fundingStrategy === undefined\n\t\t\t\t? {}\n\t\t\t\t: { quoteFundingStrategy: quote.fundingStrategy }),\n\t\t\ttickSize: pool.tickSize,\n\t\t\tlotSize: pool.lotSize,\n\t\t\tminSize: pool.minSize,\n\t\t\twhitelisted: pool.whitelisted ?? true,\n\t\t\tstablePool: pool.stablePool ?? false,\n\t\t\t...(pool.seed === undefined ? {} : { seed: pool.seed }),\n\t\t};\n\t});\n\nconst assertUniquePoolNames = (name: string, pools: ReadonlyArray<DeepbookPoolSpec>) => {\n\tconst seen = new Set<string>();\n\tfor (const pool of pools) {\n\t\tif (seen.has(pool.name)) {\n\t\t\tthrow deepbookConfigError(\n\t\t\t\t'pools',\n\t\t\t\t`deepbook({mode:'local', name:'${name}'}) has duplicate pool '${pool.name}'.`,\n\t\t\t\t'Give each local DeepBook pool a unique SDK key.',\n\t\t\t);\n\t\t}\n\t\tseen.add(pool.name);\n\t\tfor (const order of pool.seed?.orders ?? []) {\n\t\t\tif (order.quantity < pool.minSize) {\n\t\t\t\tthrow deepbookConfigError(\n\t\t\t\t\t'pools',\n\t\t\t\t\t`deepbook({mode:'local', name:'${name}'}) seed order for pool '${pool.name}' is below minSize.`,\n\t\t\t\t\t'Use a seed order quantity greater than or equal to the pool minSize.',\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (order.quantity % pool.lotSize !== 0n) {\n\t\t\t\tthrow deepbookConfigError(\n\t\t\t\t\t'pools',\n\t\t\t\t\t`deepbook({mode:'local', name:'${name}'}) seed order for pool '${pool.name}' is not lot-aligned.`,\n\t\t\t\t\t'Use a seed order quantity divisible by the pool lotSize.',\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (order.price % pool.tickSize !== 0n) {\n\t\t\t\tthrow deepbookConfigError(\n\t\t\t\t\t'pools',\n\t\t\t\t\t`deepbook({mode:'local', name:'${name}'}) seed order for pool '${pool.name}' is not tick-aligned.`,\n\t\t\t\t\t'Use a seed order price divisible by the pool tickSize.',\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n};\n\nconst buildOverridePlugin = (opts: DeepbookOverrideOptions) => {\n\tconst name = opts.name ?? DEFAULT_NAME;\n\tif (!opts.packageId || !opts.registryId || !opts.adminCapId) {\n\t\tthrow deepbookConfigError(\n\t\t\t'packageId',\n\t\t\t`deepbook({mode:'override', name:'${name}'}) requires packageId, registryId, and adminCapId.`,\n\t\t\t`Pass explicit deployment ids or use deepbook({mode:'known', network:'testnet'}).`,\n\t\t);\n\t}\n\tconst deepbookResource = makeDeepbookResource(name);\n\tconst snap = makeKnownSnapshotable({ name });\n\n\treturn definePlugin({\n\t\tid: deepbookResource.id,\n\t\tdependsOn: [suiResource] as const,\n\t\trole: 'task',\n\t\tpluginKey: deepbookPluginKey(name),\n\t\tstart: (deps) =>\n\t\t\tEffect.sync(() => {\n\t\t\t\tconst [sui] = deps;\n\t\t\t\tconst chain = opts.chain ?? sui.chain;\n\t\t\t\tconst resolved: DeepbookResolved = {\n\t\t\t\t\tmode: 'override',\n\t\t\t\t\tchain,\n\t\t\t\t\tpackageId: opts.packageId,\n\t\t\t\t\tregistryId: opts.registryId,\n\t\t\t\t\tadminCapId: opts.adminCapId,\n\t\t\t\t\tdeepTreasuryId: null,\n\t\t\t\t\tpools: [],\n\t\t\t\t\tpyth: null,\n\t\t\t\t\tmargin: null,\n\t\t\t\t\tserverUrl: null,\n\t\t\t\t\tindexerUrl: null,\n\t\t\t\t\tmarketMakerRunning: false,\n\t\t\t\t\tdeepFundingStrategy: null,\n\t\t\t\t};\n\t\t\t\treturn resolved;\n\t\t\t}),\n\t\tcapabilities: ({ value: resolved }) => {\n\t\t\tconst bindings: DeepbookBindings = {\n\t\t\t\tname,\n\t\t\t\tchain: resolved.chain,\n\t\t\t\tpackageId: resolved.packageId,\n\t\t\t\tregistryId: resolved.registryId,\n\t\t\t\tadminCapId: resolved.adminCapId,\n\t\t\t\tdeepTreasuryId: resolved.deepTreasuryId,\n\t\t\t\tpools: [],\n\t\t\t\tpyth: null,\n\t\t\t\tmargin: null,\n\t\t\t\tserverUrl: null,\n\t\t\t\tindexerUrl: null,\n\t\t\t};\n\t\t\tconst codegen: CodegenableDecl<'deepbook-network'> = makeDeepbookCodegenable(bindings);\n\t\t\treturn [snap, codegen] as const;\n\t\t},\n\t\terrorContributions: deepbookErrorContributions,\n\t});\n};\n\nconst buildLocalPlugin = <\n\tconst Publisher extends AccountMemberAlias,\n\tconst Package extends DeepbookPackageMember,\n\tconst Pools extends ReadonlyArray<DeepbookPoolSpec> = readonly [],\n\tconst Pyth extends PythOptions | undefined = undefined,\n>(\n\topts: DeepbookLocalOptions<Publisher, Package, Pools, Pyth>,\n) => {\n\tconst name = opts.name ?? DEFAULT_NAME;\n\tif (!opts.package) {\n\t\tthrow deepbookConfigError(\n\t\t\t'packageId',\n\t\t\t`deepbook({mode:'local', name:'${name}'}) requires a DeepBook package ref.`,\n\t\t\t`Pass \\`package: <localPackageMember>\\` with captured registryId/adminCapId.`,\n\t\t);\n\t}\n\tassertUniquePoolNames(name, opts.pools);\n\n\tconst deepbookResource = makeDeepbookResource(name);\n\tconst dependsOn = localDependsOn(opts);\n\n\treturn definePlugin({\n\t\tid: deepbookResource.id,\n\t\tdependsOn,\n\t\trole: 'task',\n\t\tpluginKey: deepbookPluginKey(name),\n\t\tstart: (deps) =>\n\t\t\tEffect.gen(function* () {\n\t\t\t\tconst [sui, publisher, deepbookPackage, ...extraValues] = deps as unknown as readonly [\n\t\t\t\t\tResourceValueOf<typeof suiResource>,\n\t\t\t\t\tAccountValue,\n\t\t\t\t\tLocalPackageResolved,\n\t\t\t\t\t...(AccountValue | LocalPackageResolved | CoinValue)[],\n\t\t\t\t];\n\t\t\t\tconst pythValueCount = opts.pyth === undefined ? 0 : 2;\n\t\t\t\tconst pythValues = extraValues.slice(0, pythValueCount);\n\t\t\t\tconst coinValues = extraValues.slice(pythValueCount) as CoinValue[];\n\n\t\t\t\tyield* Effect.annotateCurrentSpan({\n\t\t\t\t\t'deepbook.name': name,\n\t\t\t\t\t'deepbook.chain': sui.chain,\n\t\t\t\t\t'deepbook.publisher': publisher.address,\n\t\t\t\t});\n\t\t\t\tyield* setCurrentPluginPhase('reading deployment captures');\n\n\t\t\t\tconst registryId = yield* requireCapturedId(\n\t\t\t\t\tdeepbookPackage,\n\t\t\t\t\topts.registryIdKey ?? 'registryId',\n\t\t\t\t\t'registryId',\n\t\t\t\t);\n\t\t\t\tconst adminCapId = yield* requireCapturedId(\n\t\t\t\t\tdeepbookPackage,\n\t\t\t\t\topts.adminCapIdKey ?? 'adminCapId',\n\t\t\t\t\t'adminCapId',\n\t\t\t\t);\n\t\t\t\tconst deepTreasuryId =\n\t\t\t\t\topts.deepTreasuryIdKey === undefined\n\t\t\t\t\t\t? null\n\t\t\t\t\t\t: (deepbookPackage.captured[opts.deepTreasuryIdKey] ?? null);\n\t\t\t\tconst deployment: DeepbookDeployment = {\n\t\t\t\t\tpackageId: deepbookPackage.packageId,\n\t\t\t\t\tregistryId,\n\t\t\t\t\tadminCapId,\n\t\t\t\t\tdeepTreasuryId,\n\t\t\t\t};\n\t\t\t\tconst poolRefs = poolCoinRefs(opts.pools);\n\t\t\t\tconst coinValuesByRefId = new Map<string, CoinValue>();\n\t\t\t\tfor (let i = 0; i < poolRefs.length; i += 1) {\n\t\t\t\t\tconst ref = poolRefs[i];\n\t\t\t\t\tconst value = coinValues[i];\n\t\t\t\t\tif (ref !== undefined && value !== undefined) {\n\t\t\t\t\t\tcoinValuesByRefId.set(ref.id, value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst poolSpecs = resolvePoolSpecs(opts.pools, coinValuesByRefId);\n\t\t\t\tconst artifactPublisher = yield* ArtifactPublisherService;\n\t\t\t\tyield* setCurrentPluginPhase(\n\t\t\t\t\topts.pyth === undefined ? 'creating pools' : 'initializing Pyth feeds',\n\t\t\t\t);\n\t\t\t\tconst pyth =\n\t\t\t\t\topts.pyth === undefined\n\t\t\t\t\t\t? null\n\t\t\t\t\t\t: yield* initLocalPythFeeds(\n\t\t\t\t\t\t\t\tartifactPublisher,\n\t\t\t\t\t\t\t\tsui.sdk,\n\t\t\t\t\t\t\t\tsui.chain,\n\t\t\t\t\t\t\t\tpythValues[0] as AccountValue,\n\t\t\t\t\t\t\t\t{ packageId: (pythValues[1] as LocalPackageResolved).packageId },\n\t\t\t\t\t\t\t\topts.pyth.feeds,\n\t\t\t\t\t\t\t);\n\t\t\t\tyield* setCurrentPluginPhase('creating pools');\n\t\t\t\tconst poolResult = yield* createDeepbookPools(\n\t\t\t\t\tartifactPublisher,\n\t\t\t\t\tsui.sdk,\n\t\t\t\t\tsui.chain,\n\t\t\t\t\tpublisher,\n\t\t\t\t\tdeployment,\n\t\t\t\t\tpoolSpecs,\n\t\t\t\t);\n\t\t\t\tyield* setCurrentPluginPhase('seeding pools');\n\t\t\t\tconst seedResults = yield* seedDeepbookPools(\n\t\t\t\t\tartifactPublisher,\n\t\t\t\t\tsui.sdk,\n\t\t\t\t\tsui.chain,\n\t\t\t\t\tpublisher,\n\t\t\t\t\tdeployment,\n\t\t\t\t\tpoolSpecs,\n\t\t\t\t\tpoolResult.pools,\n\t\t\t\t);\n\t\t\t\tyield* setCurrentPluginPhase(null);\n\n\t\t\t\tconst resolved: DeepbookResolved = {\n\t\t\t\t\tmode: 'local',\n\t\t\t\t\tchain: sui.chain,\n\t\t\t\t\tpackageId: deployment.packageId,\n\t\t\t\t\tregistryId: deployment.registryId,\n\t\t\t\t\tadminCapId: deployment.adminCapId,\n\t\t\t\t\tdeepTreasuryId,\n\t\t\t\t\tpools: poolResult.pools,\n\t\t\t\t\tpyth,\n\t\t\t\t\tmargin: null,\n\t\t\t\t\tserverUrl: null,\n\t\t\t\t\tindexerUrl: null,\n\t\t\t\t\tmarketMakerRunning: seedResults.length > 0,\n\t\t\t\t\tdeepFundingStrategy: null,\n\t\t\t\t};\n\t\t\t\treturn resolved;\n\t\t\t}).pipe(\n\t\t\t\tEffect.catch((err: unknown) => {\n\t\t\t\t\t// Typed plugin errors flow through; other errors\n\t\t\t\t\t// (substrate primitives) are wrapped under a\n\t\t\t\t\t// `'publish'` phase tag so the cascade walker keeps\n\t\t\t\t\t// the plugin attribution.\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypeof err === 'object' &&\n\t\t\t\t\t\terr !== null &&\n\t\t\t\t\t\t'_tag' in err &&\n\t\t\t\t\t\t(err._tag === 'DeepbookPluginError' ||\n\t\t\t\t\t\t\terr._tag === 'DeepbookConfigError' ||\n\t\t\t\t\t\t\terr._tag === 'ForkIncompatibleError')\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn Effect.fail(err as DeepbookError);\n\t\t\t\t\t}\n\t\t\t\t\treturn Effect.fail(\n\t\t\t\t\t\tdeepbookPluginError('publish', `deepbook acquire failed: ${String(err)}`),\n\t\t\t\t\t);\n\t\t\t\t}),\n\t\t\t),\n\t\tcapabilities: ({ value: resolved, runtime: acquireCtx }) => {\n\t\t\tconst snap: SnapshotableDecl = makeLocalSnapshotable({\n\t\t\t\tname,\n\t\t\t\tapp: acquireCtx.identity.app,\n\t\t\t\tstack: acquireCtx.identity.stack,\n\t\t\t\tindexerEnabled: false,\n\t\t\t\tserverEnabled: false,\n\t\t\t});\n\t\t\tconst bindings: DeepbookBindings = {\n\t\t\t\tname,\n\t\t\t\tchain: resolved.chain,\n\t\t\t\tpackageId: resolved.packageId,\n\t\t\t\tregistryId: resolved.registryId,\n\t\t\t\tadminCapId: resolved.adminCapId,\n\t\t\t\tdeepTreasuryId: resolved.deepTreasuryId,\n\t\t\t\tpools: resolved.pools.map((p) => ({\n\t\t\t\t\tname: p.name,\n\t\t\t\t\tpoolId: p.poolId,\n\t\t\t\t\tbase: p.base,\n\t\t\t\t\tquote: p.quote,\n\t\t\t\t\tbaseCoinType: p.baseCoinType,\n\t\t\t\t\tquoteCoinType: p.quoteCoinType,\n\t\t\t\t})),\n\t\t\t\tpyth: resolved.pyth\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tpackageId: resolved.pyth.packageId,\n\t\t\t\t\t\t\tstateId: resolved.pyth.stateId,\n\t\t\t\t\t\t\twormholeStateId: resolved.pyth.wormholeStateId,\n\t\t\t\t\t\t\tfeeds: resolved.pyth.feeds.map((feed) => ({\n\t\t\t\t\t\t\t\tsymbol: feed.symbol,\n\t\t\t\t\t\t\t\tfeedId: feed.feedId,\n\t\t\t\t\t\t\t\tpriceInfoObjectId: feed.priceInfoObjectId,\n\t\t\t\t\t\t\t\tprice: feed.price.toString(),\n\t\t\t\t\t\t\t\texpo: feed.expo,\n\t\t\t\t\t\t\t})),\n\t\t\t\t\t\t}\n\t\t\t\t\t: null,\n\t\t\t\tmargin: resolved.margin,\n\t\t\t\tserverUrl: resolved.serverUrl,\n\t\t\t\tindexerUrl: resolved.indexerUrl,\n\t\t\t};\n\t\t\tconst codegen: CodegenableDecl<'deepbook-network'> = makeDeepbookCodegenable(bindings);\n\t\t\treturn [snap, codegen] as const;\n\t\t},\n\t\terrorContributions: deepbookErrorContributions,\n\t});\n};\n\nfunction buildLocalPluginPublic<\n\tconst Publisher extends AccountMemberAlias,\n\tconst Package extends DeepbookPackageMember,\n\tconst Pools extends ReadonlyArray<DeepbookPoolSpec>,\n\tconst Pyth extends PythOptions | undefined = undefined,\n>(\n\topts: DeepbookLocalOptions<Publisher, Package, Pools, Pyth>,\n): DeepbookLocalMember<Publisher, Package, Pools, Pyth>;\nfunction buildLocalPluginPublic<\n\tconst Publisher extends AccountMemberAlias,\n\tconst Package extends DeepbookPackageMember,\n\tconst Pools extends ReadonlyArray<DeepbookPoolSpec>,\n\tconst Pyth extends PythOptions | undefined = undefined,\n>(opts: DeepbookLocalOptions<Publisher, Package, Pools, Pyth>) {\n\treturn buildLocalPlugin(opts);\n}\n\n// ---------------------------------------------------------------------------\n// Plugin construction — known\n// ---------------------------------------------------------------------------\n\nconst buildKnownPlugin = (opts: DeepbookKnownOptions) => {\n\tconst name = opts.name ?? DEFAULT_NAME;\n\tconst known = opts.network ? KNOWN_DEEPBOOK_DEPLOYMENTS[opts.network] : null;\n\tconst packageId = opts.packageId ?? known?.packageId;\n\tconst registryId = opts.registryId ?? known?.registryId;\n\tif (!packageId || !registryId) {\n\t\tthrow deepbookConfigError(\n\t\t\t'packageId',\n\t\t\t`deepbook({mode:'known', name:'${name}'}) requires packageId and registryId, or network:'mainnet'|'testnet'.`,\n\t\t\t`Pass explicit ids or use deepbook({mode:'known', network:'testnet'}).`,\n\t\t);\n\t}\n\tconst deepbookResource = makeDeepbookResource(name);\n\tconst snap = makeKnownSnapshotable({ name });\n\n\treturn definePlugin({\n\t\tid: deepbookResource.id,\n\t\tdependsOn: [suiResource] as const,\n\t\trole: 'task',\n\t\tstart: (deps) =>\n\t\t\tEffect.sync(() => {\n\t\t\t\tconst [sui] = deps;\n\t\t\t\tconst chain = opts.chain ?? known?.chain ?? sui.chain;\n\t\t\t\tconst resolved: DeepbookResolved = {\n\t\t\t\t\tmode: 'known',\n\t\t\t\t\tchain,\n\t\t\t\t\tpackageId,\n\t\t\t\t\tregistryId,\n\t\t\t\t\tadminCapId: null,\n\t\t\t\t\tdeepTreasuryId: known?.deepTreasuryId ?? null,\n\t\t\t\t\tpools: [],\n\t\t\t\t\tpyth: known?.pyth ?? null,\n\t\t\t\t\tmargin: null,\n\t\t\t\t\tserverUrl: null,\n\t\t\t\t\tindexerUrl: null,\n\t\t\t\t\tmarketMakerRunning: false,\n\t\t\t\t\tdeepFundingStrategy:\n\t\t\t\t\t\topts.network === 'testnet' && String(chain) === 'sui:testnet'\n\t\t\t\t\t\t\t? makeDeepbookDeepFundingStrategy({ suiSdk: sui.sdk })\n\t\t\t\t\t\t\t: null,\n\t\t\t\t};\n\t\t\t\treturn resolved;\n\t\t\t}),\n\t\tcapabilities: ({ value: resolved }) => {\n\t\t\tconst bindings: DeepbookBindings = {\n\t\t\t\tname,\n\t\t\t\tchain: resolved.chain,\n\t\t\t\tpackageId: resolved.packageId,\n\t\t\t\tregistryId: resolved.registryId,\n\t\t\t\tadminCapId: null,\n\t\t\t\tdeepTreasuryId: resolved.deepTreasuryId,\n\t\t\t\tpools: [],\n\t\t\t\tpyth: resolved.pyth\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tpackageId: resolved.pyth.packageId,\n\t\t\t\t\t\t\tstateId: resolved.pyth.stateId,\n\t\t\t\t\t\t\twormholeStateId: resolved.pyth.wormholeStateId,\n\t\t\t\t\t\t\tfeeds: resolved.pyth.feeds.map((feed) => ({\n\t\t\t\t\t\t\t\tsymbol: feed.symbol,\n\t\t\t\t\t\t\t\tfeedId: feed.feedId,\n\t\t\t\t\t\t\t\tpriceInfoObjectId: feed.priceInfoObjectId,\n\t\t\t\t\t\t\t\tprice: feed.price.toString(),\n\t\t\t\t\t\t\t\texpo: feed.expo,\n\t\t\t\t\t\t\t})),\n\t\t\t\t\t\t}\n\t\t\t\t\t: null,\n\t\t\t\tmargin: null,\n\t\t\t\tserverUrl: null,\n\t\t\t\tindexerUrl: null,\n\t\t\t};\n\t\t\tconst deepFunding =\n\t\t\t\tresolved.deepFundingStrategy === null\n\t\t\t\t\t? []\n\t\t\t\t\t: [makeDeepbookDeepFundingContribution(resolved.deepFundingStrategy)];\n\t\t\treturn [snap, makeDeepbookCodegenable(bindings), ...deepFunding] as const;\n\t\t},\n\t\terrorContributions: deepbookErrorContributions,\n\t});\n};\n\n// ---------------------------------------------------------------------------\n// Default option resolution (env-driven)\n// ---------------------------------------------------------------------------\n\nconst resolveDefaultMode = <\n\tconst Publisher extends AccountMemberAlias,\n\tconst Package extends DeepbookPackageMember,\n\tconst Pools extends ReadonlyArray<DeepbookPoolSpec> = readonly [],\n\tconst Pyth extends PythOptions | undefined = undefined,\n>(\n\topts?: DeepbookLocalOptions<Publisher, Package, Pools, Pyth>,\n): DeepbookOptions<Publisher, Pyth> => {\n\tconst env = (globalThis as { process?: { env?: Record<string, string | undefined> } }).process\n\t\t?.env?.DEVSTACK_NETWORK;\n\tif (env === undefined || env === 'localnet') {\n\t\tif (!opts || !opts.publisher) {\n\t\t\tthrow deepbookConfigError(\n\t\t\t\t'publisher',\n\t\t\t\t`deepbook() on localnet requires \\`publisher\\` and \\`package\\` member refs.`,\n\t\t\t\t`Pass options via deepbook({mode:'local', publisher, package: deepbookPackage, ...}).`,\n\t\t\t);\n\t\t}\n\t\treturn { mode: 'local', ...opts };\n\t}\n\t// Non-local default: refuse — known mode requires explicit\n\t// packageId/registryId. The user passes them via\n\t// `deepbookFor(network).known({...})` or `deepbook({mode:'known',...})`.\n\tthrow deepbookConfigError(\n\t\t'mode',\n\t\t`deepbook(): cannot auto-default to known mode on network='${env}'.`,\n\t\t`Use deepbookFor(network).known({packageId, registryId, ...}).`,\n\t);\n};\n\n// ---------------------------------------------------------------------------\n// User-facing factories\n// ---------------------------------------------------------------------------\n\n/** Env-driven factory. Defaults to local mode on localnet when passed local\n * options. Explicit `override` and `known` modes bypass env inference. */\ntype DeepbookLocalMember<\n\tPublisher extends AccountMemberAlias,\n\tPackage extends DeepbookPackageMember,\n\tPools extends ReadonlyArray<DeepbookPoolSpec>,\n\tPyth extends PythOptions | undefined = undefined,\n> = ReturnType<typeof buildLocalPlugin<Publisher, Package, Pools, Pyth>>;\ntype DeepbookOverrideMember = ReturnType<typeof buildOverridePlugin>;\ntype DeepbookKnownMember = ReturnType<typeof buildKnownPlugin>;\n\nexport function deepbookCore<\n\tconst Publisher extends AccountMemberAlias,\n\tconst Package extends DeepbookPackageMember,\n\tconst Pyth extends PythOptions | undefined = undefined,\n>(\n\topts: { readonly mode: 'local' } & DeepbookLocalEmptyPoolOptions<Publisher, Package, Pyth>,\n): DeepbookLocalMember<Publisher, Package, readonly [], Pyth>;\nexport function deepbookCore<\n\tconst Publisher extends AccountMemberAlias,\n\tconst Package extends DeepbookPackageMember,\n\tconst Pools extends ReadonlyArray<DeepbookPoolSpec> = readonly [],\n\tconst Pyth extends PythOptions | undefined = undefined,\n>(\n\topts: { readonly mode: 'local' } & DeepbookLocalOptions<Publisher, Package, Pools, Pyth>,\n): DeepbookLocalMember<Publisher, Package, Pools, Pyth>;\nexport function deepbookCore(\n\topts: { readonly mode: 'override' } & DeepbookOverrideOptions,\n): DeepbookOverrideMember;\nexport function deepbookCore(\n\topts: { readonly mode: 'known' } & DeepbookKnownOptions,\n): DeepbookKnownMember;\nexport function deepbookCore<\n\tconst Publisher extends AccountMemberAlias,\n\tconst Package extends DeepbookPackageMember,\n\tconst Pyth extends PythOptions | undefined = undefined,\n>(\n\topts: DeepbookLocalEmptyPoolOptions<Publisher, Package, Pyth>,\n): DeepbookLocalMember<Publisher, Package, readonly [], Pyth>;\nexport function deepbookCore<\n\tconst Publisher extends AccountMemberAlias,\n\tconst Package extends DeepbookPackageMember,\n\tconst Pools extends ReadonlyArray<DeepbookPoolSpec> = readonly [],\n\tconst Pyth extends PythOptions | undefined = undefined,\n>(\n\topts: DeepbookLocalOptions<Publisher, Package, Pools, Pyth>,\n): DeepbookLocalMember<Publisher, Package, Pools, Pyth>;\nexport function deepbookCore<\n\tconst Publisher extends AccountMemberAlias,\n\tconst Package extends DeepbookPackageMember,\n\tconst Pools extends ReadonlyArray<DeepbookPoolSpec> = readonly [],\n\tconst Pyth extends PythOptions | undefined = undefined,\n>(\n\topts?: DeepbookLocalOptions<Publisher, Package, Pools, Pyth> | DeepbookOptions<Publisher, Pyth>,\n):\n\t| DeepbookLocalMember<Publisher, Package, Pools, Pyth>\n\t| DeepbookOverrideMember\n\t| DeepbookKnownMember {\n\tconst resolved: DeepbookOptions<Publisher, Pyth> =\n\t\topts !== undefined && 'mode' in opts\n\t\t\t? (opts as DeepbookOptions<Publisher, Pyth>)\n\t\t\t: resolveDefaultMode(\n\t\t\t\t\topts as DeepbookLocalOptions<Publisher, Package, Pools, Pyth> | undefined,\n\t\t\t\t);\n\tswitch (resolved.mode) {\n\t\tcase 'local':\n\t\t\treturn buildLocalPluginPublic(\n\t\t\t\tresolved as { readonly mode: 'local' } & DeepbookLocalOptions<\n\t\t\t\t\tPublisher,\n\t\t\t\t\tPackage,\n\t\t\t\t\tPools,\n\t\t\t\t\tPyth\n\t\t\t\t>,\n\t\t\t) as DeepbookLocalMember<Publisher, Package, Pools, Pyth>;\n\t\tcase 'override':\n\t\t\treturn buildOverridePlugin(resolved);\n\t\tcase 'known':\n\t\t\treturn buildKnownPlugin(resolved);\n\t}\n}\n\n/** Mode-narrowed factory namespace.\n *\n * Usage:\n * const local = { mode: 'local', chain: 'sui:localnet' } as const;\n * deepbookFor(local).local({publisher, package, pools}) // OK\n * deepbookFor(local).override({packageId, registryId, adminCapId}) // OK\n * deepbookFor(local).known({...}) // OK\n *\n * const fork = { mode: 'fork', chain: 'sui:mainnet-fork', upstream: 'mainnet' } as const;\n * deepbookFor(fork).local({...}) // COMPILE ERROR\n * deepbookFor(fork).override({...}) // COMPILE ERROR\n *\n * The fork branch has NO `.local` or `.override` entry — `deepbookFor(forkNetwork).local`\n * is a compile-time refusal. */\nexport const deepbookFor = defineModeNamespace({\n\tlocal: {\n\t\tlocal: <\n\t\t\tconst Publisher extends AccountMemberAlias,\n\t\t\tconst Package extends DeepbookPackageMember,\n\t\t\tconst Pools extends ReadonlyArray<DeepbookPoolSpec> = readonly [],\n\t\t\tconst Pyth extends PythOptions | undefined = undefined,\n\t\t>(\n\t\t\topts: DeepbookLocalOptions<Publisher, Package, Pools, Pyth>,\n\t\t) => buildLocalPluginPublic(opts),\n\t\toverride: (opts: DeepbookOverrideOptions) => buildOverridePlugin(opts),\n\t\tknown: (opts: DeepbookKnownOptions) => buildKnownPlugin(opts),\n\t},\n\tlive: {\n\t\tknown: (opts: DeepbookKnownOptions) => buildKnownPlugin(opts),\n\t},\n\tfork: {\n\t\t// `.override` intentionally absent — compile-time refusal.\n\t\tknown: (opts: DeepbookKnownOptions) => buildKnownPlugin(opts),\n\t},\n});\n\nexport { deepbookCore as deepbook };\n\n// ---------------------------------------------------------------------------\n// Re-exports for advanced callers\n// ---------------------------------------------------------------------------\n\nexport {\n\tDEEPBOOK_DEEP_FAUCET_STRATEGY_KEY,\n\tDEEPBOOK_TESTNET_DEEP_COIN_TYPE,\n\tmakeDeepbookDeepFundingContribution,\n\tmakeDeepbookDeepFundingStrategy,\n\ttype DeepbookDeepFundingStrategy,\n\ttype DeepbookDeepFundingStrategyOptions,\n} from './faucet-strategy.ts';\nexport {\n\tDEEPBOOK_ERROR_TAGS,\n\ttype DeepbookError,\n\ttype DeepbookPluginError,\n\ttype DeepbookConfigError,\n\ttype DeepbookPhase,\n} from './errors.ts';\nexport type { DeepbookBindings, DeepbookPoolBinding } from './codegen.ts';\nexport type {\n\tAccountMemberAlias,\n\tCoinMemberAlias,\n\tDeepbookPackageMember,\n\tDeepbookPool,\n\tDeepbookPoolCoin,\n\tDeepbookPoolSeedLiquidity,\n\tDeepbookPoolSeedOrder,\n\tDeepbookPoolSpec,\n\tPythFeed,\n\tPythHandle,\n\tPythOptions,\n\tPythPackageMember,\n\tPythPriceFeedId,\n} from './types.ts';\nexport {\n\tDEEP_PRICE_FEED_ID,\n\tpythPriceFeedId,\n\tSUI_PRICE_FEED_ID,\n\tUSDC_PRICE_FEED_ID,\n} from './types.ts';\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-key.mjs","names":[],"sources":["../../../src/plugins/deepbook/plugin-key.ts"],"sourcesContent":["import { pluginKey, type PluginKey } from '../../substrate/brand.ts';\n\nexport const deepbookPluginKey = (name: string): PluginKey => pluginKey(`deepbook:${name}`);\n"],"mappings":";;AAEA,MAAa,qBAAqB,SAA4B,UAAU,YAAY,OAAO"}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
import { chainId, contentHash } from "../../../substrate/brand.mjs";
|
|
2
|
+
import { executeSuiTx } from "../../../substrate/runtime/sui-execute/index.mjs";
|
|
3
|
+
import { deepbookPluginError } from "../errors.mjs";
|
|
4
|
+
import "../types.mjs";
|
|
5
|
+
import { Effect, Schema } from "effect";
|
|
6
|
+
import { createHash } from "node:crypto";
|
|
7
|
+
import { fromBase64, fromHex, toHex } from "@mysten/sui/utils";
|
|
8
|
+
import { Transaction } from "@mysten/sui/transactions";
|
|
9
|
+
//#region src/plugins/deepbook/pyth/index.ts
|
|
10
|
+
const CachedPythFeedSchema = Schema.Struct({
|
|
11
|
+
symbol: Schema.String,
|
|
12
|
+
feedId: Schema.String,
|
|
13
|
+
priceInfoObjectId: Schema.String,
|
|
14
|
+
price: Schema.String,
|
|
15
|
+
expo: Schema.Number
|
|
16
|
+
});
|
|
17
|
+
const CachedPythHandleSchema = Schema.Struct({
|
|
18
|
+
packageId: Schema.String,
|
|
19
|
+
feeds: Schema.Array(CachedPythFeedSchema)
|
|
20
|
+
});
|
|
21
|
+
const DEFAULT_EXPO = -8;
|
|
22
|
+
const PYTH_GAS_BUDGET = 2e8;
|
|
23
|
+
const stableContentHash = (input) => contentHash(createHash("sha256").update(input).digest("hex"));
|
|
24
|
+
const normalizeFeedId = (feedId) => feedId.replace(/^0x/i, "").toLowerCase();
|
|
25
|
+
const feedExpo = (feed) => feed.expo ?? DEFAULT_EXPO;
|
|
26
|
+
const toCachedFeed = (feed, priceInfoObjectId) => ({
|
|
27
|
+
symbol: feed.symbol,
|
|
28
|
+
feedId: normalizeFeedId(feed.feedId),
|
|
29
|
+
priceInfoObjectId,
|
|
30
|
+
price: feed.initialPrice.toString(),
|
|
31
|
+
expo: feedExpo(feed)
|
|
32
|
+
});
|
|
33
|
+
const fromCachedHandle = (cached) => ({
|
|
34
|
+
packageId: cached.packageId,
|
|
35
|
+
stateId: null,
|
|
36
|
+
wormholeStateId: null,
|
|
37
|
+
feeds: cached.feeds.map((feed) => ({
|
|
38
|
+
symbol: feed.symbol,
|
|
39
|
+
feedId: normalizeFeedId(feed.feedId),
|
|
40
|
+
priceInfoObjectId: feed.priceInfoObjectId,
|
|
41
|
+
price: BigInt(feed.price),
|
|
42
|
+
expo: feed.expo
|
|
43
|
+
}))
|
|
44
|
+
});
|
|
45
|
+
const pythInputsHash = (pkg, signer, feeds) => stableContentHash([
|
|
46
|
+
"v1",
|
|
47
|
+
pkg.packageId,
|
|
48
|
+
signer.address,
|
|
49
|
+
...feeds.map((feed) => [
|
|
50
|
+
feed.symbol,
|
|
51
|
+
normalizeFeedId(feed.feedId),
|
|
52
|
+
feed.initialPrice.toString(),
|
|
53
|
+
feedExpo(feed).toString(),
|
|
54
|
+
(feed.confidence ?? 0n).toString(),
|
|
55
|
+
(feed.emaPrice ?? feed.initialPrice).toString()
|
|
56
|
+
].join("|")).sort()
|
|
57
|
+
].join("||"));
|
|
58
|
+
const buildVerifyProbe = (sdk, cached) => Effect.gen(function* () {
|
|
59
|
+
for (const feed of cached.feeds) {
|
|
60
|
+
const raw = yield* Effect.tryPromise({
|
|
61
|
+
try: () => sdk.core.getObject({ objectId: feed.priceInfoObjectId }),
|
|
62
|
+
catch: () => null
|
|
63
|
+
}).pipe(Effect.catch(() => Effect.succeed(null)));
|
|
64
|
+
if (raw === null || raw === void 0) return null;
|
|
65
|
+
}
|
|
66
|
+
return cached;
|
|
67
|
+
});
|
|
68
|
+
const transactionBuildClient = (sdk) => sdk.client;
|
|
69
|
+
const addI64 = (tx, packageId, value) => {
|
|
70
|
+
const raw = BigInt(value);
|
|
71
|
+
const negative = raw < 0n;
|
|
72
|
+
return tx.moveCall({
|
|
73
|
+
target: `${packageId}::i64::new`,
|
|
74
|
+
arguments: [tx.pure.u64(negative ? -raw : raw), tx.pure.bool(negative)]
|
|
75
|
+
});
|
|
76
|
+
};
|
|
77
|
+
const addPriceInfo = (tx, packageId, feed, timestamp) => {
|
|
78
|
+
const price = tx.moveCall({
|
|
79
|
+
target: `${packageId}::price::new`,
|
|
80
|
+
arguments: [
|
|
81
|
+
addI64(tx, packageId, feed.initialPrice),
|
|
82
|
+
tx.pure.u64(feed.confidence ?? 0n),
|
|
83
|
+
addI64(tx, packageId, BigInt(feedExpo(feed))),
|
|
84
|
+
tx.pure.u64(timestamp)
|
|
85
|
+
]
|
|
86
|
+
});
|
|
87
|
+
const emaPrice = tx.moveCall({
|
|
88
|
+
target: `${packageId}::price::new`,
|
|
89
|
+
arguments: [
|
|
90
|
+
addI64(tx, packageId, feed.emaPrice ?? feed.initialPrice),
|
|
91
|
+
tx.pure.u64(feed.confidence ?? 0n),
|
|
92
|
+
addI64(tx, packageId, BigInt(feedExpo(feed))),
|
|
93
|
+
tx.pure.u64(timestamp)
|
|
94
|
+
]
|
|
95
|
+
});
|
|
96
|
+
const priceIdentifier = tx.moveCall({
|
|
97
|
+
target: `${packageId}::price_identifier::from_byte_vec`,
|
|
98
|
+
arguments: [tx.pure.vector("u8", Array.from(fromHex(normalizeFeedId(feed.feedId))))]
|
|
99
|
+
});
|
|
100
|
+
const priceFeed = tx.moveCall({
|
|
101
|
+
target: `${packageId}::price_feed::new`,
|
|
102
|
+
arguments: [
|
|
103
|
+
priceIdentifier,
|
|
104
|
+
price,
|
|
105
|
+
emaPrice
|
|
106
|
+
]
|
|
107
|
+
});
|
|
108
|
+
return tx.moveCall({
|
|
109
|
+
target: `${packageId}::price_info::new_price_info`,
|
|
110
|
+
arguments: [
|
|
111
|
+
tx.pure.u64(timestamp),
|
|
112
|
+
tx.pure.u64(timestamp),
|
|
113
|
+
priceFeed
|
|
114
|
+
]
|
|
115
|
+
});
|
|
116
|
+
};
|
|
117
|
+
const priceObjectClient = (sdk) => sdk.client;
|
|
118
|
+
const feedIdBytesFromJson = (bytes) => {
|
|
119
|
+
if (typeof bytes === "string" && bytes.length > 0) try {
|
|
120
|
+
return fromBase64(bytes);
|
|
121
|
+
} catch {
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
if (!Array.isArray(bytes) || bytes.length === 0) return null;
|
|
125
|
+
if (!bytes.every((byte) => Number.isInteger(byte) && byte >= 0 && byte <= 255)) return null;
|
|
126
|
+
return Uint8Array.from(bytes);
|
|
127
|
+
};
|
|
128
|
+
const feedIdFromJson = (json) => {
|
|
129
|
+
if (typeof json !== "object" || json === null) return null;
|
|
130
|
+
const priceInfo = json.price_info;
|
|
131
|
+
if (typeof priceInfo !== "object" || priceInfo === null) return null;
|
|
132
|
+
const priceFeed = priceInfo.price_feed;
|
|
133
|
+
if (typeof priceFeed !== "object" || priceFeed === null) return null;
|
|
134
|
+
const priceIdentifier = priceFeed.price_identifier;
|
|
135
|
+
if (typeof priceIdentifier !== "object" || priceIdentifier === null) return null;
|
|
136
|
+
const bytes = priceIdentifier.bytes;
|
|
137
|
+
const decoded = feedIdBytesFromJson(bytes);
|
|
138
|
+
if (decoded === null) return null;
|
|
139
|
+
return normalizeFeedId(toHex(decoded));
|
|
140
|
+
};
|
|
141
|
+
const mapCreatedPriceObjects = async (sdk, objectIds) => {
|
|
142
|
+
const objects = await priceObjectClient(sdk).getObjects({
|
|
143
|
+
objectIds,
|
|
144
|
+
include: { json: true }
|
|
145
|
+
});
|
|
146
|
+
const result = /* @__PURE__ */ new Map();
|
|
147
|
+
for (const object of objects.objects) {
|
|
148
|
+
if (object instanceof Error) continue;
|
|
149
|
+
const feedId = feedIdFromJson(object.json);
|
|
150
|
+
if (feedId !== null) result.set(feedId, object.objectId);
|
|
151
|
+
}
|
|
152
|
+
return result;
|
|
153
|
+
};
|
|
154
|
+
const pickCreatedPriceInfoObjects = (changes) => changes.filter((change) => change.idOperation === "Created" && change.objectType?.includes("::price_info::PriceInfoObject") === true).map((change) => change.objectId);
|
|
155
|
+
/** Create shared mock-Pyth PriceInfoObjects for local DeepBook feeds. */
|
|
156
|
+
const initLocalPythFeeds = (publisher, sdk, chain, signer, pkg, feeds) => Effect.gen(function* () {
|
|
157
|
+
if (feeds.length === 0) return null;
|
|
158
|
+
return fromCachedHandle(yield* publisher.publish({
|
|
159
|
+
namespace: "deepbook/pyth",
|
|
160
|
+
chain: chainId(chain),
|
|
161
|
+
contentHash: pythInputsHash(pkg, signer, feeds),
|
|
162
|
+
verifySchema: CachedPythHandleSchema,
|
|
163
|
+
verify: (entry) => buildVerifyProbe(sdk, entry),
|
|
164
|
+
produce: Effect.gen(function* () {
|
|
165
|
+
const receipt = yield* executeSuiTx({
|
|
166
|
+
client: sdk.client,
|
|
167
|
+
signer,
|
|
168
|
+
build: async () => {
|
|
169
|
+
const tx = new Transaction();
|
|
170
|
+
tx.setSender(signer.address);
|
|
171
|
+
tx.setGasBudget(PYTH_GAS_BUDGET);
|
|
172
|
+
const timestamp = 0n;
|
|
173
|
+
const priceInfos = feeds.map((feed) => addPriceInfo(tx, pkg.packageId, feed, timestamp));
|
|
174
|
+
tx.moveCall({
|
|
175
|
+
target: `${pkg.packageId}::pyth::create_price_feeds`,
|
|
176
|
+
arguments: [tx.makeMoveVec({
|
|
177
|
+
type: `${pkg.packageId}::price_info::PriceInfo`,
|
|
178
|
+
elements: priceInfos
|
|
179
|
+
})]
|
|
180
|
+
});
|
|
181
|
+
return tx.build({ client: transactionBuildClient(sdk) });
|
|
182
|
+
}
|
|
183
|
+
}).pipe(Effect.mapError((err) => ({
|
|
184
|
+
_tag: "ArtifactPublishError",
|
|
185
|
+
reason: "produce-failed",
|
|
186
|
+
detail: `pyth feed transaction failed: ${err.message}`
|
|
187
|
+
})));
|
|
188
|
+
const created = pickCreatedPriceInfoObjects(receipt.objectChanges);
|
|
189
|
+
if (created.length !== feeds.length) return yield* Effect.fail({
|
|
190
|
+
_tag: "ArtifactPublishError",
|
|
191
|
+
reason: "produce-failed",
|
|
192
|
+
detail: `expected ${feeds.length} Pyth PriceInfoObject creations, got ${created.length} (digest=${receipt.digest}).`
|
|
193
|
+
});
|
|
194
|
+
const idsByFeed = yield* Effect.tryPromise({
|
|
195
|
+
try: () => mapCreatedPriceObjects(sdk, created),
|
|
196
|
+
catch: (cause) => ({
|
|
197
|
+
_tag: "ArtifactPublishError",
|
|
198
|
+
reason: "produce-failed",
|
|
199
|
+
detail: `failed to read created Pyth PriceInfoObjects: ${cause instanceof Error ? cause.message : String(cause)}`
|
|
200
|
+
})
|
|
201
|
+
});
|
|
202
|
+
const cachedFeeds = [];
|
|
203
|
+
for (const feed of feeds) {
|
|
204
|
+
const priceInfoObjectId = idsByFeed.get(normalizeFeedId(feed.feedId));
|
|
205
|
+
if (priceInfoObjectId === void 0) return yield* Effect.fail({
|
|
206
|
+
_tag: "ArtifactPublishError",
|
|
207
|
+
reason: "produce-failed",
|
|
208
|
+
detail: `created Pyth PriceInfoObject for '${feed.symbol}' was not found by feed id.`
|
|
209
|
+
});
|
|
210
|
+
cachedFeeds.push(toCachedFeed(feed, priceInfoObjectId));
|
|
211
|
+
}
|
|
212
|
+
return {
|
|
213
|
+
packageId: pkg.packageId,
|
|
214
|
+
feeds: cachedFeeds
|
|
215
|
+
};
|
|
216
|
+
}),
|
|
217
|
+
register: () => Effect.void
|
|
218
|
+
}).pipe(Effect.mapError((err) => deepbookPluginError("pyth-feed", err._tag === "ArtifactPublishError" ? err.detail : String(err)))));
|
|
219
|
+
}).pipe(Effect.withSpan("devstack.plugin.deepbook.pyth.initFeeds", { attributes: {
|
|
220
|
+
"pyth.packageId": pkg.packageId,
|
|
221
|
+
"pyth.feed.count": feeds.length
|
|
222
|
+
} }));
|
|
223
|
+
//#endregion
|
|
224
|
+
export { initLocalPythFeeds };
|
|
225
|
+
|
|
226
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["brandContentHash","brandChainId"],"sources":["../../../../src/plugins/deepbook/pyth/index.ts"],"sourcesContent":["// Pyth — internal module under the DeepBook plugin.\n//\n// Local mode uses the DeepBook sandbox's mock Pyth package shape: publish a\n// local Move package with `pyth::create_price_feeds`, then create shared\n// `PriceInfoObject`s for the requested feeds. This is intentionally not a\n// top-level devstack plugin; DeepBook owns the oracle wiring it needs.\n\nimport { createHash } from 'node:crypto';\n\nimport { Effect, Schema, type Scope } from 'effect';\nimport { Transaction } from '@mysten/sui/transactions';\nimport { fromBase64, fromHex, toHex } from '@mysten/sui/utils';\n\nimport type { ArtifactPublisher } from '../../../primitives/artifact-publisher.ts';\nimport type {\n\tResolvedSigner,\n\tSuiExecuteClient,\n} from '../../../substrate/runtime/sui-execute/index.ts';\nimport { executeSuiTx } from '../../../substrate/runtime/sui-execute/index.ts';\nimport {\n\tchainId as brandChainId,\n\tcontentHash as brandContentHash,\n\ttype ContentHash,\n} from '../../../substrate/brand.ts';\nimport type { SuiSdkShim } from '../../sui/chain-probe.ts';\nimport { deepbookPluginError, type DeepbookPluginError } from '../errors.ts';\nimport type { PythFeed, PythHandle, PythPriceFeedId } from '../types.ts';\n\nexport interface PythDeployment {\n\treadonly packageId: string;\n}\n\ninterface CachedPythFeed {\n\treadonly symbol: string;\n\treadonly feedId: string;\n\treadonly priceInfoObjectId: string;\n\treadonly price: string;\n\treadonly expo: number;\n}\n\ninterface CachedPythHandle {\n\treadonly packageId: string;\n\treadonly feeds: ReadonlyArray<CachedPythFeed>;\n}\n\nconst CachedPythFeedSchema = Schema.Struct({\n\tsymbol: Schema.String,\n\tfeedId: Schema.String,\n\tpriceInfoObjectId: Schema.String,\n\tprice: Schema.String,\n\texpo: Schema.Number,\n});\n\nconst CachedPythHandleSchema = Schema.Struct({\n\tpackageId: Schema.String,\n\tfeeds: Schema.Array(CachedPythFeedSchema),\n});\n\nconst DEFAULT_EXPO = -8;\nconst PYTH_GAS_BUDGET = 200_000_000;\n\nconst stableContentHash = (input: string): ContentHash =>\n\tbrandContentHash(createHash('sha256').update(input).digest('hex'));\n\nconst normalizeFeedId = (feedId: string): string => feedId.replace(/^0x/i, '').toLowerCase();\n\nconst feedExpo = (feed: PythFeed): number => feed.expo ?? DEFAULT_EXPO;\n\nconst toCachedFeed = (feed: PythFeed, priceInfoObjectId: string): CachedPythFeed => ({\n\tsymbol: feed.symbol,\n\tfeedId: normalizeFeedId(feed.feedId),\n\tpriceInfoObjectId,\n\tprice: feed.initialPrice.toString(),\n\texpo: feedExpo(feed),\n});\n\nconst fromCachedHandle = (cached: CachedPythHandle): PythHandle => ({\n\tpackageId: cached.packageId,\n\tstateId: null,\n\twormholeStateId: null,\n\tfeeds: cached.feeds.map((feed) => ({\n\t\tsymbol: feed.symbol,\n\t\tfeedId: normalizeFeedId(feed.feedId) as PythPriceFeedId,\n\t\tpriceInfoObjectId: feed.priceInfoObjectId,\n\t\tprice: BigInt(feed.price),\n\t\texpo: feed.expo,\n\t})),\n});\n\nconst pythInputsHash = (\n\tpkg: PythDeployment,\n\tsigner: ResolvedSigner,\n\tfeeds: ReadonlyArray<PythFeed>,\n) =>\n\tstableContentHash(\n\t\t[\n\t\t\t'v1',\n\t\t\tpkg.packageId,\n\t\t\tsigner.address,\n\t\t\t...feeds\n\t\t\t\t.map((feed) =>\n\t\t\t\t\t[\n\t\t\t\t\t\tfeed.symbol,\n\t\t\t\t\t\tnormalizeFeedId(feed.feedId),\n\t\t\t\t\t\tfeed.initialPrice.toString(),\n\t\t\t\t\t\tfeedExpo(feed).toString(),\n\t\t\t\t\t\t(feed.confidence ?? 0n).toString(),\n\t\t\t\t\t\t(feed.emaPrice ?? feed.initialPrice).toString(),\n\t\t\t\t\t].join('|'),\n\t\t\t\t)\n\t\t\t\t.sort(),\n\t\t].join('||'),\n\t);\n\nconst buildVerifyProbe = (\n\tsdk: SuiSdkShim,\n\tcached: CachedPythHandle,\n): Effect.Effect<CachedPythHandle | null, never> =>\n\tEffect.gen(function* () {\n\t\tfor (const feed of cached.feeds) {\n\t\t\tconst raw = yield* Effect.tryPromise({\n\t\t\t\ttry: () => sdk.core.getObject({ objectId: feed.priceInfoObjectId }),\n\t\t\t\tcatch: () => null,\n\t\t\t}).pipe(Effect.catch(() => Effect.succeed(null)));\n\t\t\tif (raw === null || raw === undefined) return null;\n\t\t}\n\t\treturn cached;\n\t});\n\ntype SuiTransactionBuildClient = Parameters<Transaction['build']>[0] extends\n\t| { readonly client?: infer C }\n\t| undefined\n\t? C\n\t: never;\n\nconst transactionBuildClient = (sdk: SuiSdkShim): SuiTransactionBuildClient =>\n\tsdk.client as SuiTransactionBuildClient;\n\nconst addI64 = (tx: Transaction, packageId: string, value: bigint | number) => {\n\tconst raw = BigInt(value);\n\tconst negative = raw < 0n;\n\treturn tx.moveCall({\n\t\ttarget: `${packageId}::i64::new`,\n\t\targuments: [tx.pure.u64(negative ? -raw : raw), tx.pure.bool(negative)],\n\t});\n};\n\nconst addPriceInfo = (tx: Transaction, packageId: string, feed: PythFeed, timestamp: bigint) => {\n\tconst price = tx.moveCall({\n\t\ttarget: `${packageId}::price::new`,\n\t\targuments: [\n\t\t\taddI64(tx, packageId, feed.initialPrice),\n\t\t\ttx.pure.u64(feed.confidence ?? 0n),\n\t\t\taddI64(tx, packageId, BigInt(feedExpo(feed))),\n\t\t\ttx.pure.u64(timestamp),\n\t\t],\n\t});\n\tconst emaPrice = tx.moveCall({\n\t\ttarget: `${packageId}::price::new`,\n\t\targuments: [\n\t\t\taddI64(tx, packageId, feed.emaPrice ?? feed.initialPrice),\n\t\t\ttx.pure.u64(feed.confidence ?? 0n),\n\t\t\taddI64(tx, packageId, BigInt(feedExpo(feed))),\n\t\t\ttx.pure.u64(timestamp),\n\t\t],\n\t});\n\tconst priceIdentifier = tx.moveCall({\n\t\ttarget: `${packageId}::price_identifier::from_byte_vec`,\n\t\targuments: [tx.pure.vector('u8', Array.from(fromHex(normalizeFeedId(feed.feedId))))],\n\t});\n\tconst priceFeed = tx.moveCall({\n\t\ttarget: `${packageId}::price_feed::new`,\n\t\targuments: [priceIdentifier, price, emaPrice],\n\t});\n\treturn tx.moveCall({\n\t\ttarget: `${packageId}::price_info::new_price_info`,\n\t\targuments: [tx.pure.u64(timestamp), tx.pure.u64(timestamp), priceFeed],\n\t});\n};\n\nconst priceObjectClient = (\n\tsdk: SuiSdkShim,\n): {\n\treadonly getObjects: (args: {\n\t\treadonly objectIds: ReadonlyArray<string>;\n\t\treadonly include: { readonly json: boolean };\n\t}) => Promise<{\n\t\treadonly objects: ReadonlyArray<\n\t\t\t| Error\n\t\t\t| {\n\t\t\t\t\treadonly objectId: string;\n\t\t\t\t\treadonly json?: unknown;\n\t\t\t }\n\t\t>;\n\t}>;\n} =>\n\tsdk.client as {\n\t\treadonly getObjects: (args: {\n\t\t\treadonly objectIds: ReadonlyArray<string>;\n\t\t\treadonly include: { readonly json: boolean };\n\t\t}) => Promise<{\n\t\t\treadonly objects: ReadonlyArray<\n\t\t\t\t| Error\n\t\t\t\t| {\n\t\t\t\t\t\treadonly objectId: string;\n\t\t\t\t\t\treadonly json?: unknown;\n\t\t\t\t }\n\t\t\t>;\n\t\t}>;\n\t};\n\nconst feedIdBytesFromJson = (bytes: unknown): Uint8Array | null => {\n\tif (typeof bytes === 'string' && bytes.length > 0) {\n\t\ttry {\n\t\t\treturn fromBase64(bytes);\n\t\t} catch {\n\t\t\treturn null;\n\t\t}\n\t}\n\tif (!Array.isArray(bytes) || bytes.length === 0) return null;\n\tif (!bytes.every((byte): byte is number => Number.isInteger(byte) && byte >= 0 && byte <= 255)) {\n\t\treturn null;\n\t}\n\treturn Uint8Array.from(bytes);\n};\n\nexport const feedIdFromJson = (json: unknown): string | null => {\n\tif (typeof json !== 'object' || json === null) return null;\n\tconst priceInfo = (json as { readonly price_info?: unknown }).price_info;\n\tif (typeof priceInfo !== 'object' || priceInfo === null) return null;\n\tconst priceFeed = (priceInfo as { readonly price_feed?: unknown }).price_feed;\n\tif (typeof priceFeed !== 'object' || priceFeed === null) return null;\n\tconst priceIdentifier = (priceFeed as { readonly price_identifier?: unknown }).price_identifier;\n\tif (typeof priceIdentifier !== 'object' || priceIdentifier === null) return null;\n\tconst bytes = (priceIdentifier as { readonly bytes?: unknown }).bytes;\n\tconst decoded = feedIdBytesFromJson(bytes);\n\tif (decoded === null) return null;\n\treturn normalizeFeedId(toHex(decoded));\n};\n\nconst mapCreatedPriceObjects = async (\n\tsdk: SuiSdkShim,\n\tobjectIds: ReadonlyArray<string>,\n): Promise<ReadonlyMap<string, string>> => {\n\tconst objects = await priceObjectClient(sdk).getObjects({\n\t\tobjectIds,\n\t\tinclude: { json: true },\n\t});\n\tconst result = new Map<string, string>();\n\tfor (const object of objects.objects) {\n\t\tif (object instanceof Error) continue;\n\t\tconst feedId = feedIdFromJson(object.json);\n\t\tif (feedId !== null) result.set(feedId, object.objectId);\n\t}\n\treturn result;\n};\n\nconst pickCreatedPriceInfoObjects = (\n\tchanges: ReadonlyArray<{\n\t\treadonly objectId: string;\n\t\treadonly objectType?: string;\n\t\treadonly idOperation?: string;\n\t}>,\n): ReadonlyArray<string> =>\n\tchanges\n\t\t.filter(\n\t\t\t(change) =>\n\t\t\t\tchange.idOperation === 'Created' &&\n\t\t\t\tchange.objectType?.includes('::price_info::PriceInfoObject') === true,\n\t\t)\n\t\t.map((change) => change.objectId);\n\n/** Create shared mock-Pyth PriceInfoObjects for local DeepBook feeds. */\nexport const initLocalPythFeeds = (\n\tpublisher: ArtifactPublisher,\n\tsdk: SuiSdkShim,\n\tchain: string,\n\tsigner: ResolvedSigner,\n\tpkg: PythDeployment,\n\tfeeds: ReadonlyArray<PythFeed>,\n): Effect.Effect<PythHandle | null, DeepbookPluginError, Scope.Scope> =>\n\tEffect.gen(function* () {\n\t\tif (feeds.length === 0) return null;\n\n\t\tconst cached = yield* publisher\n\t\t\t.publish<CachedPythHandle, CachedPythHandle>({\n\t\t\t\tnamespace: 'deepbook/pyth',\n\t\t\t\tchain: brandChainId(chain),\n\t\t\t\tcontentHash: pythInputsHash(pkg, signer, feeds),\n\t\t\t\tverifySchema: CachedPythHandleSchema,\n\t\t\t\tverify: (entry) => buildVerifyProbe(sdk, entry),\n\t\t\t\tproduce: Effect.gen(function* () {\n\t\t\t\t\tconst receipt = yield* executeSuiTx({\n\t\t\t\t\t\tclient: sdk.client as SuiExecuteClient,\n\t\t\t\t\t\tsigner,\n\t\t\t\t\t\tbuild: async () => {\n\t\t\t\t\t\t\tconst tx = new Transaction();\n\t\t\t\t\t\t\ttx.setSender(signer.address);\n\t\t\t\t\t\t\ttx.setGasBudget(PYTH_GAS_BUDGET);\n\t\t\t\t\t\t\tconst timestamp = 0n;\n\t\t\t\t\t\t\tconst priceInfos = feeds.map((feed) =>\n\t\t\t\t\t\t\t\taddPriceInfo(tx, pkg.packageId, feed, timestamp),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\ttx.moveCall({\n\t\t\t\t\t\t\t\ttarget: `${pkg.packageId}::pyth::create_price_feeds`,\n\t\t\t\t\t\t\t\targuments: [\n\t\t\t\t\t\t\t\t\ttx.makeMoveVec({\n\t\t\t\t\t\t\t\t\t\ttype: `${pkg.packageId}::price_info::PriceInfo`,\n\t\t\t\t\t\t\t\t\t\telements: priceInfos,\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\treturn tx.build({ client: transactionBuildClient(sdk) });\n\t\t\t\t\t\t},\n\t\t\t\t\t}).pipe(\n\t\t\t\t\t\tEffect.mapError(\n\t\t\t\t\t\t\t(err) =>\n\t\t\t\t\t\t\t\t({\n\t\t\t\t\t\t\t\t\t_tag: 'ArtifactPublishError',\n\t\t\t\t\t\t\t\t\treason: 'produce-failed',\n\t\t\t\t\t\t\t\t\tdetail: `pyth feed transaction failed: ${err.message}`,\n\t\t\t\t\t\t\t\t}) as const,\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\n\t\t\t\t\tconst created = pickCreatedPriceInfoObjects(receipt.objectChanges);\n\t\t\t\t\tif (created.length !== feeds.length) {\n\t\t\t\t\t\treturn yield* Effect.fail({\n\t\t\t\t\t\t\t_tag: 'ArtifactPublishError' as const,\n\t\t\t\t\t\t\treason: 'produce-failed' as const,\n\t\t\t\t\t\t\tdetail:\n\t\t\t\t\t\t\t\t`expected ${feeds.length} Pyth PriceInfoObject creations, got ${created.length} ` +\n\t\t\t\t\t\t\t\t`(digest=${receipt.digest}).`,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tconst idsByFeed = yield* Effect.tryPromise({\n\t\t\t\t\t\ttry: () => mapCreatedPriceObjects(sdk, created),\n\t\t\t\t\t\tcatch: (cause) =>\n\t\t\t\t\t\t\t({\n\t\t\t\t\t\t\t\t_tag: 'ArtifactPublishError',\n\t\t\t\t\t\t\t\treason: 'produce-failed',\n\t\t\t\t\t\t\t\tdetail: `failed to read created Pyth PriceInfoObjects: ${\n\t\t\t\t\t\t\t\t\tcause instanceof Error ? cause.message : String(cause)\n\t\t\t\t\t\t\t\t}`,\n\t\t\t\t\t\t\t}) as const,\n\t\t\t\t\t});\n\t\t\t\t\tconst cachedFeeds: CachedPythFeed[] = [];\n\t\t\t\t\tfor (const feed of feeds) {\n\t\t\t\t\t\tconst priceInfoObjectId = idsByFeed.get(normalizeFeedId(feed.feedId));\n\t\t\t\t\t\tif (priceInfoObjectId === undefined) {\n\t\t\t\t\t\t\treturn yield* Effect.fail({\n\t\t\t\t\t\t\t\t_tag: 'ArtifactPublishError' as const,\n\t\t\t\t\t\t\t\treason: 'produce-failed' as const,\n\t\t\t\t\t\t\t\tdetail: `created Pyth PriceInfoObject for '${feed.symbol}' was not found by feed id.`,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcachedFeeds.push(toCachedFeed(feed, priceInfoObjectId));\n\t\t\t\t\t}\n\t\t\t\t\treturn { packageId: pkg.packageId, feeds: cachedFeeds };\n\t\t\t\t}),\n\t\t\t\tregister: () => Effect.void,\n\t\t\t})\n\t\t\t.pipe(\n\t\t\t\tEffect.mapError(\n\t\t\t\t\t(err): DeepbookPluginError =>\n\t\t\t\t\t\tdeepbookPluginError(\n\t\t\t\t\t\t\t'pyth-feed',\n\t\t\t\t\t\t\terr._tag === 'ArtifactPublishError' ? err.detail : String(err),\n\t\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t);\n\n\t\treturn fromCachedHandle(cached);\n\t}).pipe(\n\t\tEffect.withSpan('devstack.plugin.deepbook.pyth.initFeeds', {\n\t\t\tattributes: {\n\t\t\t\t'pyth.packageId': pkg.packageId,\n\t\t\t\t'pyth.feed.count': feeds.length,\n\t\t\t},\n\t\t}),\n\t);\n\n// Compatibility exports for callers/tests that import the internal module.\nexport type { PythFeed, PythHandle, PythOptions } from '../types.ts';\nexport {\n\tDEEP_PRICE_FEED_ID,\n\tpythPriceFeedId,\n\tSUI_PRICE_FEED_ID,\n\tUSDC_PRICE_FEED_ID,\n} from '../types.ts';\n"],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
const DEEPBOOK_ENTRYPOINTS = [
|
|
2
|
+
{
|
|
3
|
+
name: "deepbook-server",
|
|
4
|
+
port: 9008,
|
|
5
|
+
protocol: "http"
|
|
6
|
+
},
|
|
7
|
+
{
|
|
8
|
+
name: "deepbook-server-metrics",
|
|
9
|
+
port: 9186,
|
|
10
|
+
protocol: "http"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
name: "deepbook-indexer-metrics",
|
|
14
|
+
port: 9184,
|
|
15
|
+
protocol: "http"
|
|
16
|
+
}
|
|
17
|
+
];
|
|
18
|
+
//#endregion
|
|
19
|
+
export { DEEPBOOK_ENTRYPOINTS };
|
|
20
|
+
|
|
21
|
+
//# sourceMappingURL=routable.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routable.mjs","names":[],"sources":["../../../src/plugins/deepbook/routable.ts"],"sourcesContent":["// Deepbook plugin — Routable contributions.\n//\n// Two optional endpoints in local mode:\n//\n// - `deepbook-server` — Rust REST server (port 9008). HTTP, CORS.\n// - `deepbook-indexer` — Postgres-writing indexer (no HTTP), only\n// the Prometheus scrape endpoint surfaces;\n// we don't route it through Traefik today.\n//\n// Substrate's router mints hostnames from `(app, stack, dispatch-id)`\n// — no service hostnames hardcoded in router code.\n\nimport type { DispatchId, EntrypointDecl, RoutableDecl } from '../../contracts/routable.ts';\n\nexport const DEEPBOOK_SERVER_ENDPOINT_NAME = 'deepbook-server' as const;\nexport const DEEPBOOK_SERVER_METRICS_ENDPOINT_NAME = 'deepbook-server-metrics' as const;\nexport const DEEPBOOK_INDEXER_METRICS_ENDPOINT_NAME = 'deepbook-indexer-metrics' as const;\nexport const DEEPBOOK_SERVER_ENTRYPOINT_PORT = 9008;\nexport const DEEPBOOK_SERVER_METRICS_ENTRYPOINT_PORT = 9186;\nexport const DEEPBOOK_INDEXER_METRICS_ENTRYPOINT_PORT = 9184;\n\nexport const DEEPBOOK_ENTRYPOINTS: ReadonlyArray<EntrypointDecl> = [\n\t{ name: DEEPBOOK_SERVER_ENDPOINT_NAME, port: DEEPBOOK_SERVER_ENTRYPOINT_PORT, protocol: 'http' },\n\t{\n\t\tname: DEEPBOOK_SERVER_METRICS_ENDPOINT_NAME,\n\t\tport: DEEPBOOK_SERVER_METRICS_ENTRYPOINT_PORT,\n\t\tprotocol: 'http',\n\t},\n\t{\n\t\tname: DEEPBOOK_INDEXER_METRICS_ENDPOINT_NAME,\n\t\tport: DEEPBOOK_INDEXER_METRICS_ENTRYPOINT_PORT,\n\t\tprotocol: 'http',\n\t},\n];\n\nexport const buildServerDispatchId = (name: string): DispatchId => ({\n\tserviceKey: `deepbook:${name}`,\n\trole: 'server',\n});\n\nexport const makeServerRoutable = (inputs: {\n\treadonly name: string;\n\treadonly containerName: string;\n}): RoutableDecl => ({\n\tkind: 'routable',\n\tendpointName: DEEPBOOK_SERVER_ENDPOINT_NAME,\n\tdispatchId: buildServerDispatchId(inputs.name),\n\tupstream: {\n\t\ttype: 'container',\n\t\tcontainerName: inputs.containerName,\n\t\tcontainerPort: DEEPBOOK_SERVER_ENTRYPOINT_PORT,\n\t},\n\tcors: true,\n\twireProtocol: 'http',\n});\n"],"mappings":"AAqBA,MAAa,uBAAsD;CAClE;EAAE,MAAM;EAA+B,MAAM;EAAiC,UAAU;EAAQ;CAChG;EACC,MAAM;EACN,MAAM;EACN,UAAU;EACV;CACD;EACC,MAAM;EACN,MAAM;EACN,UAAU;EACV;CACD"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { Effect } from "effect";
|
|
2
|
+
//#region src/plugins/deepbook/snapshot.ts
|
|
3
|
+
/** Build the Snapshotable contribution for the local-mode plugin. */
|
|
4
|
+
const makeLocalSnapshotable = (inputs) => {
|
|
5
|
+
const managed = [];
|
|
6
|
+
if (inputs.indexerEnabled) managed.push({
|
|
7
|
+
app: inputs.app,
|
|
8
|
+
stack: inputs.stack,
|
|
9
|
+
plugin: "deepbook",
|
|
10
|
+
role: "indexer"
|
|
11
|
+
});
|
|
12
|
+
if (inputs.serverEnabled) managed.push({
|
|
13
|
+
app: inputs.app,
|
|
14
|
+
stack: inputs.stack,
|
|
15
|
+
plugin: "deepbook",
|
|
16
|
+
role: "server"
|
|
17
|
+
});
|
|
18
|
+
return {
|
|
19
|
+
kind: "snapshotable",
|
|
20
|
+
subtrees: [`deepbook/${inputs.name}`],
|
|
21
|
+
managedContainers: managed,
|
|
22
|
+
quiesce: Effect.void,
|
|
23
|
+
preRestore: Effect.succeed({
|
|
24
|
+
kind: "deepbook",
|
|
25
|
+
name: inputs.name
|
|
26
|
+
}),
|
|
27
|
+
postRestore: Effect.void,
|
|
28
|
+
missingTolerance: "fine",
|
|
29
|
+
secretMaterial: false
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
/** Build the Snapshotable contribution for the known-deployment
|
|
33
|
+
* mode. No on-disk state, no managed containers — pure value
|
|
34
|
+
* producer. */
|
|
35
|
+
const makeKnownSnapshotable = (inputs) => ({
|
|
36
|
+
kind: "snapshotable",
|
|
37
|
+
subtrees: [],
|
|
38
|
+
preRestore: Effect.succeed({
|
|
39
|
+
kind: "deepbook",
|
|
40
|
+
name: inputs.name
|
|
41
|
+
}),
|
|
42
|
+
postRestore: Effect.void,
|
|
43
|
+
missingTolerance: "fine",
|
|
44
|
+
secretMaterial: false
|
|
45
|
+
});
|
|
46
|
+
//#endregion
|
|
47
|
+
export { makeKnownSnapshotable, makeLocalSnapshotable };
|
|
48
|
+
|
|
49
|
+
//# sourceMappingURL=snapshot.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshot.mjs","names":[],"sources":["../../../src/plugins/deepbook/snapshot.ts"],"sourcesContent":["// Deepbook plugin — Snapshotable contribution.\n//\n// What needs to survive snapshot:\n//\n// - Cached publish receipts under runtime/deepbook/<name>/cache/\n// (driven by the artifact publisher primitive's cache layer; the host-tree\n// subtree is `deepbook/<name>` and the artifact publisher cache lives inside it).\n// - Managed containers — the optional indexer + server use\n// labeled tuples drive the docker commit + save path.\n//\n// Architecture: the orchestrator is service-name-blind — it walks\n// the Snapshotable decls, sees `deepbook/<name>` as just a subtree\n// path, and treats the secret flag as opaque.\n\nimport { Effect } from 'effect';\n\nimport type { ContainerLabelTuple, SnapshotableDecl } from '../../contracts/snapshotable.ts';\n\n/** Build the Snapshotable contribution for the local-mode plugin. */\nexport const makeLocalSnapshotable = (inputs: {\n\treadonly name: string;\n\treadonly app: string;\n\treadonly stack: string;\n\treadonly indexerEnabled: boolean;\n\treadonly serverEnabled: boolean;\n}): SnapshotableDecl => {\n\tconst managed: Array<ContainerLabelTuple> = [];\n\tif (inputs.indexerEnabled) {\n\t\tmanaged.push({\n\t\t\tapp: inputs.app,\n\t\t\tstack: inputs.stack,\n\t\t\tplugin: 'deepbook',\n\t\t\trole: 'indexer',\n\t\t});\n\t}\n\tif (inputs.serverEnabled) {\n\t\tmanaged.push({\n\t\t\tapp: inputs.app,\n\t\t\tstack: inputs.stack,\n\t\t\tplugin: 'deepbook',\n\t\t\trole: 'server',\n\t\t});\n\t}\n\treturn {\n\t\tkind: 'snapshotable',\n\t\tsubtrees: [`deepbook/${inputs.name}`],\n\t\tmanagedContainers: managed,\n\t\tquiesce: Effect.void,\n\t\tpreRestore: Effect.succeed({ kind: 'deepbook' as const, name: inputs.name }),\n\t\tpostRestore: Effect.void,\n\t\tmissingTolerance: 'fine',\n\t\tsecretMaterial: false,\n\t};\n};\n\n/** Build the Snapshotable contribution for the known-deployment\n * mode. No on-disk state, no managed containers — pure value\n * producer. */\nexport const makeKnownSnapshotable = (inputs: { readonly name: string }): SnapshotableDecl => ({\n\tkind: 'snapshotable',\n\tsubtrees: [],\n\tpreRestore: Effect.succeed({ kind: 'deepbook' as const, name: inputs.name }),\n\tpostRestore: Effect.void,\n\tmissingTolerance: 'fine',\n\tsecretMaterial: false,\n});\n"],"mappings":";;;AAmBA,MAAa,yBAAyB,WAMd;CACvB,MAAM,UAAsC,EAAE;AAC9C,KAAI,OAAO,eACV,SAAQ,KAAK;EACZ,KAAK,OAAO;EACZ,OAAO,OAAO;EACd,QAAQ;EACR,MAAM;EACN,CAAC;AAEH,KAAI,OAAO,cACV,SAAQ,KAAK;EACZ,KAAK,OAAO;EACZ,OAAO,OAAO;EACd,QAAQ;EACR,MAAM;EACN,CAAC;AAEH,QAAO;EACN,MAAM;EACN,UAAU,CAAC,YAAY,OAAO,OAAO;EACrC,mBAAmB;EACnB,SAAS,OAAO;EAChB,YAAY,OAAO,QAAQ;GAAE,MAAM;GAAqB,MAAM,OAAO;GAAM,CAAC;EAC5E,aAAa,OAAO;EACpB,kBAAkB;EAClB,gBAAgB;EAChB;;;;;AAMF,MAAa,yBAAyB,YAAyD;CAC9F,MAAM;CACN,UAAU,EAAE;CACZ,YAAY,OAAO,QAAQ;EAAE,MAAM;EAAqB,MAAM,OAAO;EAAM,CAAC;CAC5E,aAAa,OAAO;CACpB,kBAAkB;CAClB,gBAAgB;CAChB"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { ResourceRef } from "../../substrate/plugin.mjs";
|
|
2
|
+
import { CoinValue } from "../coin/service.mjs";
|
|
3
|
+
import { AccountValue } from "../account/service.mjs";
|
|
4
|
+
import { LocalPackageResolved } from "../package/index.mjs";
|
|
5
|
+
|
|
6
|
+
//#region src/plugins/deepbook/types.d.ts
|
|
7
|
+
/** A Pyth price feed id — opaque 64-character hex string. */
|
|
8
|
+
type PythPriceFeedId = string & {
|
|
9
|
+
readonly __pythPriceFeedId: unique symbol;
|
|
10
|
+
};
|
|
11
|
+
declare const pythPriceFeedId: (s: string) => PythPriceFeedId;
|
|
12
|
+
/** Pyth feed binding — symbol + feed id + initial price. */
|
|
13
|
+
interface PythFeed {
|
|
14
|
+
readonly symbol: string;
|
|
15
|
+
readonly feedId: PythPriceFeedId;
|
|
16
|
+
/** Initial price expressed in feed-native scale (Pyth conf is the
|
|
17
|
+
* signed-int representation; bigint avoids float precision drift). */
|
|
18
|
+
readonly initialPrice: bigint;
|
|
19
|
+
/** Feed exponent. Defaults to -8, matching the DeepBook sandbox. */
|
|
20
|
+
readonly expo?: number;
|
|
21
|
+
/** Optional confidence interval. Defaults to 0 for deterministic local feeds. */
|
|
22
|
+
readonly confidence?: bigint;
|
|
23
|
+
/** Optional EMA price. Defaults to `initialPrice`. */
|
|
24
|
+
readonly emaPrice?: bigint;
|
|
25
|
+
}
|
|
26
|
+
/** Pyth options. `package` and `pusher` are member refs, not magic strings. */
|
|
27
|
+
interface PythOptions<Package extends PythPackageMember = PythPackageMember, Pusher extends AccountMemberAlias = AccountMemberAlias> {
|
|
28
|
+
readonly package: Package;
|
|
29
|
+
readonly pusher: Pusher;
|
|
30
|
+
readonly feeds: ReadonlyArray<PythFeed>;
|
|
31
|
+
}
|
|
32
|
+
/** Resolved Pyth handle exposed inside the deepbook resolved value. */
|
|
33
|
+
interface PythHandle {
|
|
34
|
+
/** Local sandbox Pyth has no Wormhole state; known deployments do. */
|
|
35
|
+
readonly packageId: string | null;
|
|
36
|
+
readonly stateId: string | null;
|
|
37
|
+
readonly wormholeStateId: string | null;
|
|
38
|
+
readonly feeds: ReadonlyArray<{
|
|
39
|
+
readonly symbol: string;
|
|
40
|
+
readonly feedId: PythPriceFeedId;
|
|
41
|
+
readonly priceInfoObjectId: string;
|
|
42
|
+
readonly price: bigint;
|
|
43
|
+
readonly expo: number;
|
|
44
|
+
}>;
|
|
45
|
+
}
|
|
46
|
+
/** Common Pyth price feed ids (subset; users pass their own as
|
|
47
|
+
* needed). These are the well-known Pyth hex feed ids, NOT
|
|
48
|
+
* per-stack derived. */
|
|
49
|
+
declare const SUI_PRICE_FEED_ID: PythPriceFeedId;
|
|
50
|
+
declare const USDC_PRICE_FEED_ID: PythPriceFeedId;
|
|
51
|
+
declare const DEEP_PRICE_FEED_ID: PythPriceFeedId;
|
|
52
|
+
/** Coin handle used by local DeepBook pool specs. `key` is the SDK-facing
|
|
53
|
+
* coin key (for example `DEEP` or `SUI`); `coin` is the devstack member ref
|
|
54
|
+
* whose resolved value supplies the full Move coin type. */
|
|
55
|
+
interface DeepbookPoolCoin<Coin extends CoinMemberAlias = CoinMemberAlias> {
|
|
56
|
+
readonly key: string;
|
|
57
|
+
readonly coin: Coin;
|
|
58
|
+
/** SDK scalar for this coin. Defaults to the resolved coin decimals. */
|
|
59
|
+
readonly scalar?: number;
|
|
60
|
+
/** SDK address column. Defaults to the package id for package coins, or
|
|
61
|
+
* the address portion of the resolved full coin type. */
|
|
62
|
+
readonly address?: string;
|
|
63
|
+
}
|
|
64
|
+
/** Seed order placed after a local pool is created. Price and quantity use
|
|
65
|
+
* DeepBook's on-chain units: `price` is quote-unit price and `quantity` is
|
|
66
|
+
* base-asset quantity. */
|
|
67
|
+
interface DeepbookPoolSeedOrder {
|
|
68
|
+
readonly side: 'ask' | 'bid';
|
|
69
|
+
readonly price: bigint;
|
|
70
|
+
readonly quantity: bigint;
|
|
71
|
+
readonly clientOrderId?: bigint;
|
|
72
|
+
readonly payWithDeep?: boolean;
|
|
73
|
+
}
|
|
74
|
+
/** Optional local liquidity seed. Package coins with a generic funding
|
|
75
|
+
* strategy are minted to the publisher before the seed transaction; otherwise
|
|
76
|
+
* the publisher must already own the deposited coins. */
|
|
77
|
+
interface DeepbookPoolSeedLiquidity {
|
|
78
|
+
readonly baseAmount?: bigint;
|
|
79
|
+
readonly quoteAmount?: bigint;
|
|
80
|
+
readonly orders: ReadonlyArray<DeepbookPoolSeedOrder>;
|
|
81
|
+
}
|
|
82
|
+
/** Whitelisted pool to create at deploy time. `base` / `quote` are real coin
|
|
83
|
+
* member refs so pool creation cannot race package/coin resolution. */
|
|
84
|
+
interface DeepbookPoolSpec<Base extends CoinMemberAlias = CoinMemberAlias, Quote extends CoinMemberAlias = CoinMemberAlias> {
|
|
85
|
+
readonly name: string;
|
|
86
|
+
readonly base: DeepbookPoolCoin<Base>;
|
|
87
|
+
readonly quote: DeepbookPoolCoin<Quote>;
|
|
88
|
+
readonly tickSize: bigint;
|
|
89
|
+
readonly lotSize: bigint;
|
|
90
|
+
readonly minSize: bigint;
|
|
91
|
+
/** Whitelisted? Defaults true for local deploy (no DEEP-burn). */
|
|
92
|
+
readonly whitelisted?: boolean;
|
|
93
|
+
/** Stable pool? Defaults false. */
|
|
94
|
+
readonly stablePool?: boolean;
|
|
95
|
+
/** Optional publisher-owned BalanceManager + seed orders for local demos. */
|
|
96
|
+
readonly seed?: DeepbookPoolSeedLiquidity;
|
|
97
|
+
}
|
|
98
|
+
/** A resolved pool record on chain. */
|
|
99
|
+
interface DeepbookPool {
|
|
100
|
+
readonly name: string;
|
|
101
|
+
readonly poolId: string;
|
|
102
|
+
readonly base: string;
|
|
103
|
+
readonly baseCoinType: string;
|
|
104
|
+
readonly quote: string;
|
|
105
|
+
readonly quoteCoinType: string;
|
|
106
|
+
readonly tickSize: bigint;
|
|
107
|
+
readonly lotSize: bigint;
|
|
108
|
+
readonly minSize: bigint;
|
|
109
|
+
}
|
|
110
|
+
/** Account ref alias — the user passes the value returned by
|
|
111
|
+
* `account('name')`. Resource-typed at the factory boundary so a
|
|
112
|
+
* package-shaped ref is a TS error while preserving the literal
|
|
113
|
+
* `account/<name>` id. */
|
|
114
|
+
type AccountMemberAlias<Name extends string = string> = ResourceRef<`account/${Name}`, AccountValue>;
|
|
115
|
+
/** Coin ref alias — the user passes `coin.fromPackage(...)`, `coin.known(...)`,
|
|
116
|
+
* or `coin.builtin(...)`. */
|
|
117
|
+
type CoinMemberAlias<Name extends string = string> = ResourceRef<`coin:${Name}`, CoinValue>;
|
|
118
|
+
/** Local package ref alias for the published DeepBook package. The package
|
|
119
|
+
* should capture `registryId` and `adminCapId` from its publish output. */
|
|
120
|
+
type DeepbookPackageMember<Name extends string = string> = ResourceRef<`package:${Name}`, LocalPackageResolved>;
|
|
121
|
+
/** Local package ref alias for the mock Pyth package used by local DeepBook. */
|
|
122
|
+
type PythPackageMember<Name extends string = string> = ResourceRef<`package:${Name}`, LocalPackageResolved>;
|
|
123
|
+
//#endregion
|
|
124
|
+
export { AccountMemberAlias, CoinMemberAlias, DEEP_PRICE_FEED_ID, DeepbookPackageMember, DeepbookPool, DeepbookPoolCoin, DeepbookPoolSeedLiquidity, DeepbookPoolSeedOrder, DeepbookPoolSpec, PythFeed, PythHandle, PythOptions, PythPackageMember, PythPriceFeedId, SUI_PRICE_FEED_ID, USDC_PRICE_FEED_ID, pythPriceFeedId };
|
|
125
|
+
//# sourceMappingURL=types.d.mts.map
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
//#region src/plugins/deepbook/types.ts
|
|
2
|
+
const pythPriceFeedId = (s) => s;
|
|
3
|
+
/** Common Pyth price feed ids (subset; users pass their own as
|
|
4
|
+
* needed). These are the well-known Pyth hex feed ids, NOT
|
|
5
|
+
* per-stack derived. */
|
|
6
|
+
const SUI_PRICE_FEED_ID = pythPriceFeedId("23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744");
|
|
7
|
+
const USDC_PRICE_FEED_ID = pythPriceFeedId("eaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a");
|
|
8
|
+
const DEEP_PRICE_FEED_ID = pythPriceFeedId("29bdd5248234e33bd93d3b81100b5fa32eaa5997843847e2c2cb16d7c6d9f7ff");
|
|
9
|
+
//#endregion
|
|
10
|
+
export { DEEP_PRICE_FEED_ID, SUI_PRICE_FEED_ID, USDC_PRICE_FEED_ID, pythPriceFeedId };
|
|
11
|
+
|
|
12
|
+
//# sourceMappingURL=types.mjs.map
|