@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,229 @@
|
|
|
1
|
+
import { RouterBootFailed } from "./errors.mjs";
|
|
2
|
+
import { DockerHost, DockerSpawner, dockerRun, dockerRunOk } from "../../runtime/docker/client.mjs";
|
|
3
|
+
import { ComposeLabelKey, LabelKey } from "../../runtime/docker/labels.mjs";
|
|
4
|
+
import { isNoSuchContainerStderr } from "../../runtime/docker/wrap.mjs";
|
|
5
|
+
import { ensureNetwork } from "../../runtime/docker/network.mjs";
|
|
6
|
+
import { inspectContainer } from "../../runtime/docker/container.mjs";
|
|
7
|
+
import { Context, Effect, Layer } from "effect";
|
|
8
|
+
import * as path from "node:path";
|
|
9
|
+
//#region src/orchestrators/router/traefik-container.ts
|
|
10
|
+
const TRAEFIK_DISPATCH_MOUNT_TARGET = "/etc/traefik/dispatch";
|
|
11
|
+
const ROUTER_PROFILE_LABEL = LabelKey.routerProfile;
|
|
12
|
+
const HOST_GATEWAY_ALIAS = "host.docker.internal:host-gateway";
|
|
13
|
+
/** Default Traefik image. Tag, not digest — distilled-doc open
|
|
14
|
+
* question #9 (digest-pin is a follow-up). */
|
|
15
|
+
const DEFAULT_TRAEFIK_IMAGE = "traefik:v3.5";
|
|
16
|
+
var TraefikContainerOpsService = class extends Context.Service()("@devstack-rewrite/orchestrators/router/TraefikContainerOps") {};
|
|
17
|
+
const sameHostPath = (left, right) => path.resolve(left) === path.resolve(right);
|
|
18
|
+
const uniqueSortedEntrypointPorts = (entrypoints) => [...new Set(entrypoints.map((entrypoint) => entrypoint.port))].sort((a, b) => a - b);
|
|
19
|
+
const traefikListenerEntrypoints = (entrypoints) => {
|
|
20
|
+
const byPort = /* @__PURE__ */ new Map();
|
|
21
|
+
for (const entrypoint of entrypoints) if (!byPort.has(entrypoint.port)) byPort.set(entrypoint.port, entrypoint);
|
|
22
|
+
return Array.from(byPort.values());
|
|
23
|
+
};
|
|
24
|
+
const traefikExpectedPortPairs = (entrypoints) => uniqueSortedEntrypointPorts(entrypoints).map((port) => `${port}=127.0.0.1:${port}`);
|
|
25
|
+
const traefikExpectedCommand = (entrypoints) => [
|
|
26
|
+
`--providers.file.directory=${TRAEFIK_DISPATCH_MOUNT_TARGET}`,
|
|
27
|
+
"--providers.file.watch=true",
|
|
28
|
+
"--api.dashboard=false",
|
|
29
|
+
"--log.level=INFO",
|
|
30
|
+
...traefikListenerEntrypoints(entrypoints).map((entrypoint) => `--entrypoints.${entrypoint.name}.address=:${entrypoint.port}`)
|
|
31
|
+
];
|
|
32
|
+
const mountedDispatchDirMatches = (existing, expected) => existing.dispatchMount !== null && existing.dispatchMount.target === "/etc/traefik/dispatch" && existing.dispatchMount.readOnly && sameHostPath(existing.dispatchMount.source, expected);
|
|
33
|
+
const sameStrings = (left, right) => left.length === right.length && left.every((value, index) => value === right[index]);
|
|
34
|
+
const sameStringSet = (left, right) => sameStrings([...new Set(left)].sort(), [...new Set(right)].sort());
|
|
35
|
+
const portBindingPair = (binding) => {
|
|
36
|
+
const [container, host] = binding.split("=");
|
|
37
|
+
const containerPort = container?.split("/")[0];
|
|
38
|
+
const hostPort = host?.slice(host.lastIndexOf(":") + 1);
|
|
39
|
+
const hostIp = host?.slice(0, host.lastIndexOf(":"));
|
|
40
|
+
if (containerPort === void 0 || hostPort === void 0 || hostIp === void 0) return null;
|
|
41
|
+
if (!/^\d+$/.test(containerPort) || !/^\d+$/.test(hostPort)) return null;
|
|
42
|
+
return `${containerPort}=${hostIp}:${hostPort}`;
|
|
43
|
+
};
|
|
44
|
+
const portBindingsMatch = (existing, entrypoints) => sameStringSet(existing.flatMap((binding) => {
|
|
45
|
+
const pair = portBindingPair(binding);
|
|
46
|
+
return pair === null ? [] : [pair];
|
|
47
|
+
}), traefikExpectedPortPairs(entrypoints));
|
|
48
|
+
const routerProfileLabelsMatch = (labels, profile) => {
|
|
49
|
+
if (labels[LabelKey.managed] !== "true") return false;
|
|
50
|
+
if (labels[LabelKey.routerMarker] !== "true") return false;
|
|
51
|
+
if (labels[ROUTER_PROFILE_LABEL] !== profile.id) return false;
|
|
52
|
+
if (labels[LabelKey.routerSpecVersion] !== "3") return false;
|
|
53
|
+
for (const forbidden of [
|
|
54
|
+
LabelKey.app,
|
|
55
|
+
LabelKey.stack,
|
|
56
|
+
LabelKey.plugin,
|
|
57
|
+
LabelKey.role,
|
|
58
|
+
LabelKey.cycle,
|
|
59
|
+
ComposeLabelKey.project,
|
|
60
|
+
ComposeLabelKey.service,
|
|
61
|
+
ComposeLabelKey.containerNumber,
|
|
62
|
+
ComposeLabelKey.version,
|
|
63
|
+
ComposeLabelKey.oneoff,
|
|
64
|
+
ComposeLabelKey.network,
|
|
65
|
+
ComposeLabelKey.volume
|
|
66
|
+
]) if (labels[forbidden] !== void 0) return false;
|
|
67
|
+
return true;
|
|
68
|
+
};
|
|
69
|
+
const routerSpecMatches = (existing, inputs) => existing.image === inputs.image && mountedDispatchDirMatches(existing, inputs.profile.dispatchDir) && portBindingsMatch(existing.portBindings, inputs.entrypoints) && sameStringSet(existing.command, traefikExpectedCommand(inputs.entrypoints)) && existing.networks.includes(inputs.profile.networkName) && routerProfileLabelsMatch(existing.labels, inputs.profile);
|
|
70
|
+
/** Adopt-or-create per the architecture's 4-way decision table.
|
|
71
|
+
* Idempotent: callers may invoke this once per supervisor lifetime,
|
|
72
|
+
* and a follow-up call returns `decision: 'adopt'` if nothing has
|
|
73
|
+
* changed. */
|
|
74
|
+
const bootstrap = (inputs) => Effect.gen(function* () {
|
|
75
|
+
const ops = yield* TraefikContainerOpsService;
|
|
76
|
+
const network = yield* ops.ensureNetwork(inputs.profile.networkName);
|
|
77
|
+
const existing = yield* ops.inspectContainer(inputs.profile.containerName);
|
|
78
|
+
if (existing === null) return {
|
|
79
|
+
decision: "recreate-fresh",
|
|
80
|
+
containerId: (yield* ops.createFresh({
|
|
81
|
+
name: inputs.profile.containerName,
|
|
82
|
+
image: inputs.image,
|
|
83
|
+
network: inputs.profile.networkName,
|
|
84
|
+
routerProfileId: inputs.profile.id,
|
|
85
|
+
entrypoints: inputs.entrypoints,
|
|
86
|
+
dispatchDirHostPath: inputs.profile.dispatchDir
|
|
87
|
+
})).id,
|
|
88
|
+
networkId: network.id,
|
|
89
|
+
imageMatches: true
|
|
90
|
+
};
|
|
91
|
+
const configMatches = routerSpecMatches(existing, inputs);
|
|
92
|
+
if (existing.running === true && configMatches) return {
|
|
93
|
+
decision: "adopt",
|
|
94
|
+
containerId: existing.id,
|
|
95
|
+
networkId: network.id,
|
|
96
|
+
imageMatches: true
|
|
97
|
+
};
|
|
98
|
+
if (existing.running === "unknown" && configMatches) {
|
|
99
|
+
if (inputs.protectedRouteLeaseIds.length > 0) return yield* Effect.fail(new RouterBootFailed({
|
|
100
|
+
stage: "ensure-container",
|
|
101
|
+
detail: `router profile '${inputs.profile.id}' container '${inputs.profile.containerName}' has unknown lifecycle state, and live or unknown route leases exist: ` + inputs.protectedRouteLeaseIds.join(", ")
|
|
102
|
+
}));
|
|
103
|
+
yield* ops.forceRemove(inputs.profile.containerName);
|
|
104
|
+
return {
|
|
105
|
+
decision: "recreate-fresh",
|
|
106
|
+
containerId: (yield* ops.createFresh({
|
|
107
|
+
name: inputs.profile.containerName,
|
|
108
|
+
image: inputs.image,
|
|
109
|
+
network: inputs.profile.networkName,
|
|
110
|
+
routerProfileId: inputs.profile.id,
|
|
111
|
+
entrypoints: inputs.entrypoints,
|
|
112
|
+
dispatchDirHostPath: inputs.profile.dispatchDir
|
|
113
|
+
})).id,
|
|
114
|
+
networkId: network.id,
|
|
115
|
+
imageMatches: true
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
if (!configMatches) {
|
|
119
|
+
if (inputs.protectedRouteLeaseIds.length > 0) return yield* Effect.fail(new RouterBootFailed({
|
|
120
|
+
stage: "ensure-container",
|
|
121
|
+
detail: `router profile '${inputs.profile.id}' container '${inputs.profile.containerName}' does not match the requested spec, but live or unknown route leases exist: ` + inputs.protectedRouteLeaseIds.join(", ")
|
|
122
|
+
}));
|
|
123
|
+
yield* ops.forceRemove(inputs.profile.containerName);
|
|
124
|
+
return {
|
|
125
|
+
decision: "recreate-fresh",
|
|
126
|
+
containerId: (yield* ops.createFresh({
|
|
127
|
+
name: inputs.profile.containerName,
|
|
128
|
+
image: inputs.image,
|
|
129
|
+
network: inputs.profile.networkName,
|
|
130
|
+
routerProfileId: inputs.profile.id,
|
|
131
|
+
entrypoints: inputs.entrypoints,
|
|
132
|
+
dispatchDirHostPath: inputs.profile.dispatchDir
|
|
133
|
+
})).id,
|
|
134
|
+
networkId: network.id,
|
|
135
|
+
imageMatches: true
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
return {
|
|
139
|
+
decision: "resume",
|
|
140
|
+
containerId: (yield* ops.resume(inputs.profile.containerName).pipe(Effect.catchTag("RouterBootFailed", (cause) => inputs.protectedRouteLeaseIds.length > 0 ? Effect.fail(new RouterBootFailed({
|
|
141
|
+
stage: "ensure-container",
|
|
142
|
+
detail: `router profile '${inputs.profile.id}' container '${inputs.profile.containerName}' could not be resumed, and live or unknown route leases exist: ` + inputs.protectedRouteLeaseIds.join(", "),
|
|
143
|
+
cause
|
|
144
|
+
})) : ops.forceRemove(inputs.profile.containerName).pipe(Effect.andThen(ops.createFresh({
|
|
145
|
+
name: inputs.profile.containerName,
|
|
146
|
+
image: inputs.image,
|
|
147
|
+
network: inputs.profile.networkName,
|
|
148
|
+
routerProfileId: inputs.profile.id,
|
|
149
|
+
entrypoints: inputs.entrypoints,
|
|
150
|
+
dispatchDirHostPath: inputs.profile.dispatchDir
|
|
151
|
+
})))))).id,
|
|
152
|
+
networkId: network.id,
|
|
153
|
+
imageMatches: true
|
|
154
|
+
};
|
|
155
|
+
}).pipe(Effect.withSpan("orchestrator.router.bootstrap"));
|
|
156
|
+
const routerBootFailed = (stage, detail, cause) => new RouterBootFailed({
|
|
157
|
+
stage,
|
|
158
|
+
detail,
|
|
159
|
+
...cause === void 0 ? {} : { cause }
|
|
160
|
+
});
|
|
161
|
+
const traefikRunArgs = (args) => {
|
|
162
|
+
const ports = uniqueSortedEntrypointPorts(args.entrypoints);
|
|
163
|
+
const dockerArgs = [
|
|
164
|
+
"-d",
|
|
165
|
+
"--name",
|
|
166
|
+
args.name,
|
|
167
|
+
"--network",
|
|
168
|
+
args.network,
|
|
169
|
+
"--label",
|
|
170
|
+
`${LabelKey.managed}=true`,
|
|
171
|
+
"--label",
|
|
172
|
+
`${LabelKey.routerMarker}=true`,
|
|
173
|
+
"--label",
|
|
174
|
+
`${ROUTER_PROFILE_LABEL}=${args.routerProfileId}`,
|
|
175
|
+
"--label",
|
|
176
|
+
`${LabelKey.routerSpecVersion}=3`,
|
|
177
|
+
"--add-host",
|
|
178
|
+
HOST_GATEWAY_ALIAS
|
|
179
|
+
];
|
|
180
|
+
for (const port of ports) dockerArgs.push("-p", `127.0.0.1:${port}:${port}`);
|
|
181
|
+
dockerArgs.push("--mount", `type=bind,source=${args.dispatchDirHostPath},target=${TRAEFIK_DISPATCH_MOUNT_TARGET},readonly`, args.image, ...traefikExpectedCommand(args.entrypoints));
|
|
182
|
+
return dockerArgs;
|
|
183
|
+
};
|
|
184
|
+
const layerTraefikContainerOpsDocker = Layer.effect(TraefikContainerOpsService, Effect.gen(function* () {
|
|
185
|
+
const dockerHost = yield* DockerHost;
|
|
186
|
+
const dockerSpawner = yield* DockerSpawner;
|
|
187
|
+
const provideDocker = (effect) => effect.pipe(Effect.provideService(DockerHost, dockerHost), Effect.provideService(DockerSpawner, dockerSpawner));
|
|
188
|
+
return TraefikContainerOpsService.of({
|
|
189
|
+
ensureNetwork: (name) => provideDocker(ensureNetwork(name, {
|
|
190
|
+
app: "devstack-router",
|
|
191
|
+
stack: name,
|
|
192
|
+
composeUi: false
|
|
193
|
+
})).pipe(Effect.map((id) => ({ id })), Effect.mapError((cause) => routerBootFailed("ensure-network", `failed to ensure shared router network '${name}'`, cause))),
|
|
194
|
+
inspectContainer: (name) => provideDocker(inspectContainer(name)).pipe(Effect.mapError((cause) => routerBootFailed("inspect", `failed to inspect router container '${name}'`, cause)), Effect.map((facts) => facts === null ? null : {
|
|
195
|
+
id: facts.id,
|
|
196
|
+
running: facts.lifecycle.kind === "unknown" ? "unknown" : facts.running,
|
|
197
|
+
image: facts.image,
|
|
198
|
+
dispatchMount: (() => {
|
|
199
|
+
const mount = facts.mounts?.find((m) => m.target === TRAEFIK_DISPATCH_MOUNT_TARGET);
|
|
200
|
+
return mount === void 0 ? null : {
|
|
201
|
+
source: mount.source,
|
|
202
|
+
target: mount.target,
|
|
203
|
+
readOnly: mount.readOnly === true
|
|
204
|
+
};
|
|
205
|
+
})(),
|
|
206
|
+
portBindings: facts.portBindings ?? [],
|
|
207
|
+
command: facts.command ?? [],
|
|
208
|
+
networks: facts.networks ?? [],
|
|
209
|
+
labels: facts.labels ?? {}
|
|
210
|
+
})),
|
|
211
|
+
createFresh: (args) => provideDocker(dockerRun("run", traefikRunArgs(args))).pipe(Effect.map((result) => ({ id: result.stdout.trim() })), Effect.mapError((cause) => routerBootFailed("ensure-container", `failed to create router container '${args.name}'`, cause))),
|
|
212
|
+
resume: (name) => provideDocker(dockerRun("start", [name])).pipe(Effect.flatMap(() => provideDocker(inspectContainer(name))), Effect.flatMap((facts) => facts === null ? Effect.fail(routerBootFailed("inspect", `router container '${name}' started but could not be inspected`)) : Effect.succeed({ id: facts.id })), Effect.mapError((cause) => cause instanceof RouterBootFailed ? cause : routerBootFailed("ensure-container", `failed to resume router container '${name}'`, cause))),
|
|
213
|
+
forceRemove: (name) => provideDocker(dockerRunOk("rm", ["-f", name])).pipe(Effect.flatMap((result) => {
|
|
214
|
+
if (result.exitCode === 0 || isNoSuchContainerStderr(result.stderr)) return Effect.void;
|
|
215
|
+
return Effect.fail(routerBootFailed("ensure-container", `failed to remove router container '${name}': ${result.stderr}`));
|
|
216
|
+
}), Effect.mapError((cause) => cause instanceof RouterBootFailed ? cause : routerBootFailed("ensure-container", `failed to remove router container '${name}'`, cause)))
|
|
217
|
+
});
|
|
218
|
+
}));
|
|
219
|
+
Layer.succeed(TraefikContainerOpsService)({
|
|
220
|
+
ensureNetwork: (_name) => Effect.succeed({ id: "stub-network" }),
|
|
221
|
+
inspectContainer: (_name) => Effect.succeed(null),
|
|
222
|
+
createFresh: (_args) => Effect.succeed({ id: "stub-container" }),
|
|
223
|
+
resume: (_name) => Effect.succeed({ id: "stub-container" }),
|
|
224
|
+
forceRemove: (_name) => Effect.succeed(void 0)
|
|
225
|
+
});
|
|
226
|
+
//#endregion
|
|
227
|
+
export { DEFAULT_TRAEFIK_IMAGE, TraefikContainerOpsService, bootstrap, layerTraefikContainerOpsDocker, routerProfileLabelsMatch, uniqueSortedEntrypointPorts };
|
|
228
|
+
|
|
229
|
+
//# sourceMappingURL=traefik-container.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"traefik-container.mjs","names":[],"sources":["../../../src/orchestrators/router/traefik-container.ts"],"sourcesContent":["// Traefik container lifecycle — router-profile singleton.\n//\n// Architecture distilled-doc §\"Lifecycle states\":\n// | Found state | Image matches | Action |\n// |----------------------------|---------------|------------------------------|\n// | Container absent | n/a | Ensure network + create fresh|\n// | Container running | yes | Adopt (no-op) |\n// | Container running | no | Force-remove + create fresh |\n// | Container stopped | yes | Resume; on fail recreate fresh|\n// | Container stopped | no | Force-remove + create fresh |\n// | Network absent | n/a | Create network first |\n//\n// Key invariants:\n// - One container per router profile. NOT per-stack — the router\n// outlives any one `pnpm dev`.\n// - The container does NOT take the stack identity label set;\n// instead a singleton router label distinguishes it from per-stack\n// resources (so per-stack `wipe` doesn't touch it).\n// - Bootstrap runs ONCE per supervisor lifetime (architecture\n// invariant #11). Hot-reload cycles do NOT re-pay docker inspect.\n//\n// This file is INTENTIONALLY a thin orchestration shell. Real container\n// I/O lives in `runtime/docker/*`; the effectful operations are\n// abstracted behind a `TraefikContainerOps` service so tests can inject\n// a no-op implementation without changing route delivery.\n\nimport { Context, Effect, Layer } from 'effect';\nimport * as path from 'node:path';\n\nimport { RouterBootFailed } from './errors.ts';\nimport type { Entrypoint } from './entrypoints.ts';\nimport {\n\tDockerHost,\n\tDockerSpawner,\n\tComposeLabelKey,\n\tensureNetwork,\n\tinspectContainer,\n\tisNoSuchContainerStderr,\n\tLabelKey,\n} from '../../runtime/docker/index.ts';\nimport { dockerRun, dockerRunOk } from '../../runtime/docker/client.ts';\nimport type { RouterProfile } from './profile.ts';\n\nexport const TRAEFIK_DISPATCH_MOUNT_TARGET = '/etc/traefik/dispatch';\nexport const ROUTER_PROFILE_LABEL = LabelKey.routerProfile;\nexport const ROUTER_CONTAINER_SPEC_VERSION = '3';\nexport const HOST_GATEWAY_ALIAS = 'host.docker.internal:host-gateway';\n\n/** Default Traefik image. Tag, not digest — distilled-doc open\n * question #9 (digest-pin is a follow-up). */\nexport const DEFAULT_TRAEFIK_IMAGE = 'traefik:v3.5';\n\n// ---------------------------------------------------------------------------\n// BootDecision — observability shape\n// ---------------------------------------------------------------------------\n\n/** What the lifecycle decision was. Emitted as a span attribute and\n * threaded into the inventory row (architecture distilled-doc\n * §\"Outputs / capabilities provided\" — \"A boot-decision report\"). */\nexport type BootDecision = 'adopt' | 'resume' | 'recreate-fresh' | 'opt-out';\n\nexport interface BootReport {\n\treadonly decision: BootDecision;\n\treadonly containerId: string | null;\n\treadonly networkId: string | null;\n\t/** Whether the observed or freshly-created container is the right image. */\n\treadonly imageMatches: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// TraefikContainerOps — the I/O seam\n// ---------------------------------------------------------------------------\n\nexport interface InspectedTraefikContainer {\n\treadonly id: string;\n\treadonly running: boolean | 'unknown';\n\treadonly image: string;\n\treadonly dispatchMount: {\n\t\treadonly source: string;\n\t\treadonly target: string;\n\t\treadonly readOnly: boolean;\n\t} | null;\n\treadonly portBindings: ReadonlyArray<string>;\n\treadonly command: ReadonlyArray<string>;\n\treadonly networks: ReadonlyArray<string>;\n\treadonly labels: Readonly<Record<string, string>>;\n}\n\n/** The orchestrator does NOT talk to docker directly. It yields these\n * operations through a service tag whose layer can be wired to\n * `runtime/docker/*` in production or to a no-op stub in tests. This\n * is the load-bearing decoupling that lets the orchestrator stay at\n * \"walk decls + write files\" complexity without growing a docker\n * dependency.\n *\n * Architecture: orchestrator depends on L0+L1 contracts, never on\n * concrete L1 implementations. */\nexport interface TraefikContainerOps {\n\t/** Idempotent network ensure. Returns the network id. */\n\treadonly ensureNetwork: (\n\t\tname: string,\n\t) => Effect.Effect<{ readonly id: string }, RouterBootFailed>;\n\n\t/** Inspect the singleton router container. Returns `null` when\n\t * absent. */\n\treadonly inspectContainer: (\n\t\tname: string,\n\t) => Effect.Effect<InspectedTraefikContainer | null, RouterBootFailed>;\n\n\t/** Create the container fresh (after force-remove if necessary).\n\t * The container is started with file-provider configured against\n\t * `dispatchDirHostPath` (bind-mounted read-only to `/etc/traefik/dispatch`)\n\t * and one `--entrypoints.<name>.address=:<port>` flag per registered\n\t * entrypoint. The shared network is attached at create time. */\n\treadonly createFresh: (args: {\n\t\treadonly name: string;\n\t\treadonly image: string;\n\t\treadonly network: string;\n\t\treadonly routerProfileId: string;\n\t\treadonly entrypoints: ReadonlyArray<Entrypoint>;\n\t\treadonly dispatchDirHostPath: string;\n\t}) => Effect.Effect<{ readonly id: string }, RouterBootFailed>;\n\n\t/** Start an already-existing stopped container. May fail (port\n\t * conflict, daemon flake); caller's contract is to fall back to\n\t * fresh-recreate on failure. */\n\treadonly resume: (name: string) => Effect.Effect<{ readonly id: string }, RouterBootFailed>;\n\n\t/** Force-remove a container (running or stopped). Idempotent on\n\t * \"no such container\". */\n\treadonly forceRemove: (name: string) => Effect.Effect<void, RouterBootFailed>;\n}\n\nexport class TraefikContainerOpsService extends Context.Service<\n\tTraefikContainerOpsService,\n\tTraefikContainerOps\n>()('@devstack-rewrite/orchestrators/router/TraefikContainerOps') {}\n\n// ---------------------------------------------------------------------------\n// Bootstrap — decides + executes\n// ---------------------------------------------------------------------------\n\nexport interface BootstrapInputs {\n\treadonly image: string;\n\treadonly entrypoints: ReadonlyArray<Entrypoint>;\n\treadonly profile: RouterProfile;\n\treadonly protectedRouteLeaseIds: ReadonlyArray<string>;\n}\n\nconst sameHostPath = (left: string, right: string): boolean =>\n\tpath.resolve(left) === path.resolve(right);\n\nexport const uniqueSortedEntrypointPorts = (\n\tentrypoints: ReadonlyArray<Entrypoint>,\n): ReadonlyArray<number> =>\n\t[...new Set(entrypoints.map((entrypoint) => entrypoint.port))].sort((a, b) => a - b);\n\nconst traefikListenerEntrypoints = (\n\tentrypoints: ReadonlyArray<Entrypoint>,\n): ReadonlyArray<Entrypoint> => {\n\tconst byPort = new Map<number, Entrypoint>();\n\tfor (const entrypoint of entrypoints) {\n\t\tif (!byPort.has(entrypoint.port)) byPort.set(entrypoint.port, entrypoint);\n\t}\n\treturn Array.from(byPort.values());\n};\n\nexport const traefikExpectedPortBindings = (\n\tentrypoints: ReadonlyArray<Entrypoint>,\n): ReadonlyArray<string> =>\n\tuniqueSortedEntrypointPorts(entrypoints).map((port) => `${port}/tcp=127.0.0.1:${port}`);\n\nconst traefikExpectedPortPairs = (entrypoints: ReadonlyArray<Entrypoint>): ReadonlyArray<string> =>\n\tuniqueSortedEntrypointPorts(entrypoints).map((port) => `${port}=127.0.0.1:${port}`);\n\nexport const traefikExpectedCommand = (\n\tentrypoints: ReadonlyArray<Entrypoint>,\n): ReadonlyArray<string> => [\n\t`--providers.file.directory=${TRAEFIK_DISPATCH_MOUNT_TARGET}`,\n\t'--providers.file.watch=true',\n\t'--api.dashboard=false',\n\t'--log.level=INFO',\n\t...traefikListenerEntrypoints(entrypoints).map(\n\t\t(entrypoint) => `--entrypoints.${entrypoint.name}.address=:${entrypoint.port}`,\n\t),\n];\n\nconst mountedDispatchDirMatches = (\n\texisting: {\n\t\treadonly dispatchMount: {\n\t\t\treadonly source: string;\n\t\t\treadonly target: string;\n\t\t\treadonly readOnly: boolean;\n\t\t} | null;\n\t},\n\texpected: string,\n): boolean =>\n\texisting.dispatchMount !== null &&\n\texisting.dispatchMount.target === TRAEFIK_DISPATCH_MOUNT_TARGET &&\n\texisting.dispatchMount.readOnly &&\n\tsameHostPath(existing.dispatchMount.source, expected);\n\nconst sameStrings = (left: ReadonlyArray<string>, right: ReadonlyArray<string>): boolean =>\n\tleft.length === right.length && left.every((value, index) => value === right[index]);\n\nconst sameStringSet = (left: ReadonlyArray<string>, right: ReadonlyArray<string>): boolean =>\n\tsameStrings([...new Set(left)].sort(), [...new Set(right)].sort());\n\nconst portBindingPair = (binding: string): string | null => {\n\tconst [container, host] = binding.split('=');\n\tconst containerPort = container?.split('/')[0];\n\tconst hostPort = host?.slice(host.lastIndexOf(':') + 1);\n\tconst hostIp = host?.slice(0, host.lastIndexOf(':'));\n\tif (containerPort === undefined || hostPort === undefined || hostIp === undefined) return null;\n\tif (!/^\\d+$/.test(containerPort) || !/^\\d+$/.test(hostPort)) return null;\n\treturn `${containerPort}=${hostIp}:${hostPort}`;\n};\n\nconst portBindingsMatch = (\n\texisting: ReadonlyArray<string>,\n\tentrypoints: ReadonlyArray<Entrypoint>,\n): boolean =>\n\tsameStringSet(\n\t\texisting.flatMap((binding) => {\n\t\t\tconst pair = portBindingPair(binding);\n\t\t\treturn pair === null ? [] : [pair];\n\t\t}),\n\t\ttraefikExpectedPortPairs(entrypoints),\n\t);\n\nexport const routerProfileLabelsMatch = (\n\tlabels: Readonly<Record<string, string>>,\n\tprofile: RouterProfile,\n): boolean => {\n\tif (labels[LabelKey.managed] !== 'true') return false;\n\tif (labels[LabelKey.routerMarker] !== 'true') return false;\n\tif (labels[ROUTER_PROFILE_LABEL] !== profile.id) return false;\n\tif (labels[LabelKey.routerSpecVersion] !== ROUTER_CONTAINER_SPEC_VERSION) return false;\n\tfor (const forbidden of [\n\t\tLabelKey.app,\n\t\tLabelKey.stack,\n\t\tLabelKey.plugin,\n\t\tLabelKey.role,\n\t\tLabelKey.cycle,\n\t\tComposeLabelKey.project,\n\t\tComposeLabelKey.service,\n\t\tComposeLabelKey.containerNumber,\n\t\tComposeLabelKey.version,\n\t\tComposeLabelKey.oneoff,\n\t\tComposeLabelKey.network,\n\t\tComposeLabelKey.volume,\n\t]) {\n\t\tif (labels[forbidden] !== undefined) return false;\n\t}\n\treturn true;\n};\n\nconst routerSpecMatches = (existing: InspectedTraefikContainer, inputs: BootstrapInputs): boolean =>\n\texisting.image === inputs.image &&\n\tmountedDispatchDirMatches(existing, inputs.profile.dispatchDir) &&\n\tportBindingsMatch(existing.portBindings, inputs.entrypoints) &&\n\tsameStringSet(existing.command, traefikExpectedCommand(inputs.entrypoints)) &&\n\texisting.networks.includes(inputs.profile.networkName) &&\n\trouterProfileLabelsMatch(existing.labels, inputs.profile);\n\n/** Adopt-or-create per the architecture's 4-way decision table.\n * Idempotent: callers may invoke this once per supervisor lifetime,\n * and a follow-up call returns `decision: 'adopt'` if nothing has\n * changed. */\nexport const bootstrap = (\n\tinputs: BootstrapInputs,\n): Effect.Effect<BootReport, RouterBootFailed, TraefikContainerOpsService> =>\n\tEffect.gen(function* () {\n\t\tconst ops = yield* TraefikContainerOpsService;\n\t\tconst network = yield* ops.ensureNetwork(inputs.profile.networkName);\n\t\tconst existing = yield* ops.inspectContainer(inputs.profile.containerName);\n\n\t\t// Decision table.\n\t\tif (existing === null) {\n\t\t\tconst created = yield* ops.createFresh({\n\t\t\t\tname: inputs.profile.containerName,\n\t\t\t\timage: inputs.image,\n\t\t\t\tnetwork: inputs.profile.networkName,\n\t\t\t\trouterProfileId: inputs.profile.id,\n\t\t\t\tentrypoints: inputs.entrypoints,\n\t\t\t\tdispatchDirHostPath: inputs.profile.dispatchDir,\n\t\t\t});\n\t\t\treturn {\n\t\t\t\tdecision: 'recreate-fresh' as const,\n\t\t\t\tcontainerId: created.id,\n\t\t\t\tnetworkId: network.id,\n\t\t\t\timageMatches: true,\n\t\t\t};\n\t\t}\n\n\t\tconst configMatches = routerSpecMatches(existing, inputs);\n\n\t\tif (existing.running === true && configMatches) {\n\t\t\treturn {\n\t\t\t\tdecision: 'adopt' as const,\n\t\t\t\tcontainerId: existing.id,\n\t\t\t\tnetworkId: network.id,\n\t\t\t\timageMatches: true,\n\t\t\t};\n\t\t}\n\n\t\tif (existing.running === 'unknown' && configMatches) {\n\t\t\tif (inputs.protectedRouteLeaseIds.length > 0) {\n\t\t\t\treturn yield* Effect.fail(\n\t\t\t\t\tnew RouterBootFailed({\n\t\t\t\t\t\tstage: 'ensure-container',\n\t\t\t\t\t\tdetail:\n\t\t\t\t\t\t\t`router profile '${inputs.profile.id}' container '${inputs.profile.containerName}' ` +\n\t\t\t\t\t\t\t`has unknown lifecycle state, and live or unknown route leases exist: ` +\n\t\t\t\t\t\t\tinputs.protectedRouteLeaseIds.join(', '),\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t\tyield* ops.forceRemove(inputs.profile.containerName);\n\t\t\tconst created = yield* ops.createFresh({\n\t\t\t\tname: inputs.profile.containerName,\n\t\t\t\timage: inputs.image,\n\t\t\t\tnetwork: inputs.profile.networkName,\n\t\t\t\trouterProfileId: inputs.profile.id,\n\t\t\t\tentrypoints: inputs.entrypoints,\n\t\t\t\tdispatchDirHostPath: inputs.profile.dispatchDir,\n\t\t\t});\n\t\t\treturn {\n\t\t\t\tdecision: 'recreate-fresh' as const,\n\t\t\t\tcontainerId: created.id,\n\t\t\t\tnetworkId: network.id,\n\t\t\t\timageMatches: true,\n\t\t\t};\n\t\t}\n\n\t\tif (!configMatches) {\n\t\t\tif (inputs.protectedRouteLeaseIds.length > 0) {\n\t\t\t\treturn yield* Effect.fail(\n\t\t\t\t\tnew RouterBootFailed({\n\t\t\t\t\t\tstage: 'ensure-container',\n\t\t\t\t\t\tdetail:\n\t\t\t\t\t\t\t`router profile '${inputs.profile.id}' container '${inputs.profile.containerName}' ` +\n\t\t\t\t\t\t\t`does not match the requested spec, but live or unknown route leases exist: ` +\n\t\t\t\t\t\t\tinputs.protectedRouteLeaseIds.join(', '),\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t\t// Running or stopped with stale image, bind mount, entrypoints,\n\t\t\t// provider args, network, labels, or mount mode — force-remove\n\t\t\t// + recreate. A profile singleton can only serve the spec it\n\t\t\t// was created with.\n\t\t\tyield* ops.forceRemove(inputs.profile.containerName);\n\t\t\tconst created = yield* ops.createFresh({\n\t\t\t\tname: inputs.profile.containerName,\n\t\t\t\timage: inputs.image,\n\t\t\t\tnetwork: inputs.profile.networkName,\n\t\t\t\trouterProfileId: inputs.profile.id,\n\t\t\t\tentrypoints: inputs.entrypoints,\n\t\t\t\tdispatchDirHostPath: inputs.profile.dispatchDir,\n\t\t\t});\n\t\t\treturn {\n\t\t\t\tdecision: 'recreate-fresh' as const,\n\t\t\t\tcontainerId: created.id,\n\t\t\t\tnetworkId: network.id,\n\t\t\t\timageMatches: true,\n\t\t\t};\n\t\t}\n\n\t\t// Stopped + image matches → resume; on failure recreate fresh.\n\t\tconst resumed = yield* ops.resume(inputs.profile.containerName).pipe(\n\t\t\tEffect.catchTag('RouterBootFailed', (cause) =>\n\t\t\t\tinputs.protectedRouteLeaseIds.length > 0\n\t\t\t\t\t? Effect.fail(\n\t\t\t\t\t\t\tnew RouterBootFailed({\n\t\t\t\t\t\t\t\tstage: 'ensure-container',\n\t\t\t\t\t\t\t\tdetail:\n\t\t\t\t\t\t\t\t\t`router profile '${inputs.profile.id}' container '${inputs.profile.containerName}' ` +\n\t\t\t\t\t\t\t\t\t`could not be resumed, and live or unknown route leases exist: ` +\n\t\t\t\t\t\t\t\t\tinputs.protectedRouteLeaseIds.join(', '),\n\t\t\t\t\t\t\t\tcause,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t)\n\t\t\t\t\t: ops.forceRemove(inputs.profile.containerName).pipe(\n\t\t\t\t\t\t\tEffect.andThen(\n\t\t\t\t\t\t\t\tops.createFresh({\n\t\t\t\t\t\t\t\t\tname: inputs.profile.containerName,\n\t\t\t\t\t\t\t\t\timage: inputs.image,\n\t\t\t\t\t\t\t\t\tnetwork: inputs.profile.networkName,\n\t\t\t\t\t\t\t\t\trouterProfileId: inputs.profile.id,\n\t\t\t\t\t\t\t\t\tentrypoints: inputs.entrypoints,\n\t\t\t\t\t\t\t\t\tdispatchDirHostPath: inputs.profile.dispatchDir,\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t),\n\t\t\t),\n\t\t);\n\t\treturn {\n\t\t\tdecision: 'resume' as const,\n\t\t\tcontainerId: resumed.id,\n\t\t\tnetworkId: network.id,\n\t\t\timageMatches: true,\n\t\t};\n\t}).pipe(Effect.withSpan('orchestrator.router.bootstrap'));\n\n// ---------------------------------------------------------------------------\n// Docker-backed layer\n// ---------------------------------------------------------------------------\n\nconst routerBootFailed = (\n\tstage: RouterBootFailed['stage'],\n\tdetail: string,\n\tcause?: unknown,\n): RouterBootFailed =>\n\tnew RouterBootFailed({\n\t\tstage,\n\t\tdetail,\n\t\t...(cause === undefined ? {} : { cause }),\n\t});\n\nconst traefikRunArgs = (args: {\n\treadonly name: string;\n\treadonly image: string;\n\treadonly network: string;\n\treadonly routerProfileId: string;\n\treadonly entrypoints: ReadonlyArray<Entrypoint>;\n\treadonly dispatchDirHostPath: string;\n}): ReadonlyArray<string> => {\n\tconst ports = uniqueSortedEntrypointPorts(args.entrypoints);\n\tconst dockerArgs: Array<string> = [\n\t\t'-d',\n\t\t'--name',\n\t\targs.name,\n\t\t'--network',\n\t\targs.network,\n\t\t'--label',\n\t\t`${LabelKey.managed}=true`,\n\t\t'--label',\n\t\t`${LabelKey.routerMarker}=true`,\n\t\t'--label',\n\t\t`${ROUTER_PROFILE_LABEL}=${args.routerProfileId}`,\n\t\t'--label',\n\t\t`${LabelKey.routerSpecVersion}=${ROUTER_CONTAINER_SPEC_VERSION}`,\n\t\t'--add-host',\n\t\tHOST_GATEWAY_ALIAS,\n\t];\n\tfor (const port of ports) {\n\t\tdockerArgs.push('-p', `127.0.0.1:${port}:${port}`);\n\t}\n\tdockerArgs.push(\n\t\t'--mount',\n\t\t`type=bind,source=${args.dispatchDirHostPath},target=${TRAEFIK_DISPATCH_MOUNT_TARGET},readonly`,\n\t\targs.image,\n\t\t...traefikExpectedCommand(args.entrypoints),\n\t);\n\treturn dockerArgs;\n};\n\nexport const layerTraefikContainerOpsDocker: Layer.Layer<\n\tTraefikContainerOpsService,\n\tnever,\n\tDockerHost | DockerSpawner\n> = Layer.effect(\n\tTraefikContainerOpsService,\n\tEffect.gen(function* () {\n\t\tconst dockerHost = yield* DockerHost;\n\t\tconst dockerSpawner = yield* DockerSpawner;\n\t\tconst provideDocker = <A, E>(\n\t\t\teffect: Effect.Effect<A, E, DockerHost | DockerSpawner>,\n\t\t): Effect.Effect<A, E, never> =>\n\t\t\teffect.pipe(\n\t\t\t\tEffect.provideService(DockerHost, dockerHost),\n\t\t\t\tEffect.provideService(DockerSpawner, dockerSpawner),\n\t\t\t);\n\n\t\tconst ops: TraefikContainerOps = {\n\t\t\tensureNetwork: (name) =>\n\t\t\t\tprovideDocker(\n\t\t\t\t\tensureNetwork(name, { app: 'devstack-router', stack: name, composeUi: false }),\n\t\t\t\t).pipe(\n\t\t\t\t\tEffect.map((id) => ({ id })),\n\t\t\t\t\tEffect.mapError((cause) =>\n\t\t\t\t\t\trouterBootFailed(\n\t\t\t\t\t\t\t'ensure-network',\n\t\t\t\t\t\t\t`failed to ensure shared router network '${name}'`,\n\t\t\t\t\t\t\tcause,\n\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\tinspectContainer: (name) =>\n\t\t\t\tprovideDocker(inspectContainer(name)).pipe(\n\t\t\t\t\tEffect.mapError((cause) =>\n\t\t\t\t\t\trouterBootFailed('inspect', `failed to inspect router container '${name}'`, cause),\n\t\t\t\t\t),\n\t\t\t\t\tEffect.map((facts) =>\n\t\t\t\t\t\tfacts === null\n\t\t\t\t\t\t\t? null\n\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\tid: facts.id,\n\t\t\t\t\t\t\t\t\trunning: facts.lifecycle.kind === 'unknown' ? 'unknown' : facts.running,\n\t\t\t\t\t\t\t\t\timage: facts.image,\n\t\t\t\t\t\t\t\t\tdispatchMount: (() => {\n\t\t\t\t\t\t\t\t\t\tconst mount = facts.mounts?.find(\n\t\t\t\t\t\t\t\t\t\t\t(m) => m.target === TRAEFIK_DISPATCH_MOUNT_TARGET,\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\treturn mount === undefined\n\t\t\t\t\t\t\t\t\t\t\t? null\n\t\t\t\t\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\t\t\t\t\tsource: mount.source,\n\t\t\t\t\t\t\t\t\t\t\t\t\ttarget: mount.target,\n\t\t\t\t\t\t\t\t\t\t\t\t\treadOnly: mount.readOnly === true,\n\t\t\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t})(),\n\t\t\t\t\t\t\t\t\tportBindings: facts.portBindings ?? [],\n\t\t\t\t\t\t\t\t\tcommand: facts.command ?? [],\n\t\t\t\t\t\t\t\t\tnetworks: facts.networks ?? [],\n\t\t\t\t\t\t\t\t\tlabels: facts.labels ?? {},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\tcreateFresh: (args) =>\n\t\t\t\tprovideDocker(dockerRun('run', traefikRunArgs(args))).pipe(\n\t\t\t\t\tEffect.map((result) => ({ id: result.stdout.trim() })),\n\t\t\t\t\tEffect.mapError((cause) =>\n\t\t\t\t\t\trouterBootFailed(\n\t\t\t\t\t\t\t'ensure-container',\n\t\t\t\t\t\t\t`failed to create router container '${args.name}'`,\n\t\t\t\t\t\t\tcause,\n\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\tresume: (name) =>\n\t\t\t\tprovideDocker(dockerRun('start', [name])).pipe(\n\t\t\t\t\tEffect.flatMap(() => provideDocker(inspectContainer(name))),\n\t\t\t\t\tEffect.flatMap((facts) =>\n\t\t\t\t\t\tfacts === null\n\t\t\t\t\t\t\t? Effect.fail(\n\t\t\t\t\t\t\t\t\trouterBootFailed(\n\t\t\t\t\t\t\t\t\t\t'inspect',\n\t\t\t\t\t\t\t\t\t\t`router container '${name}' started but could not be inspected`,\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: Effect.succeed({ id: facts.id }),\n\t\t\t\t\t),\n\t\t\t\t\tEffect.mapError((cause) =>\n\t\t\t\t\t\tcause instanceof RouterBootFailed\n\t\t\t\t\t\t\t? cause\n\t\t\t\t\t\t\t: routerBootFailed(\n\t\t\t\t\t\t\t\t\t'ensure-container',\n\t\t\t\t\t\t\t\t\t`failed to resume router container '${name}'`,\n\t\t\t\t\t\t\t\t\tcause,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\tforceRemove: (name) =>\n\t\t\t\tprovideDocker(dockerRunOk('rm', ['-f', name])).pipe(\n\t\t\t\t\tEffect.flatMap((result) => {\n\t\t\t\t\t\tif (result.exitCode === 0 || isNoSuchContainerStderr(result.stderr)) {\n\t\t\t\t\t\t\treturn Effect.void;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn Effect.fail(\n\t\t\t\t\t\t\trouterBootFailed(\n\t\t\t\t\t\t\t\t'ensure-container',\n\t\t\t\t\t\t\t\t`failed to remove router container '${name}': ${result.stderr}`,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\t}),\n\t\t\t\t\tEffect.mapError((cause) =>\n\t\t\t\t\t\tcause instanceof RouterBootFailed\n\t\t\t\t\t\t\t? cause\n\t\t\t\t\t\t\t: routerBootFailed(\n\t\t\t\t\t\t\t\t\t'ensure-container',\n\t\t\t\t\t\t\t\t\t`failed to remove router container '${name}'`,\n\t\t\t\t\t\t\t\t\tcause,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t};\n\n\t\treturn TraefikContainerOpsService.of(ops);\n\t}),\n);\n\n// ---------------------------------------------------------------------------\n// Stub layer — injected by tests\n// ---------------------------------------------------------------------------\n\n/** No-op implementation for tests that assert file-provider delivery\n * without managing a real Traefik container. Production composition\n * uses `layerTraefikContainerOpsDocker`. */\nexport const layerTraefikContainerOpsStub: Layer.Layer<TraefikContainerOpsService> = Layer.succeed(\n\tTraefikContainerOpsService,\n)({\n\tensureNetwork: (_name) => Effect.succeed({ id: 'stub-network' }),\n\tinspectContainer: (_name) => Effect.succeed(null),\n\tcreateFresh: (_args) => Effect.succeed({ id: 'stub-container' }),\n\tresume: (_name) => Effect.succeed({ id: 'stub-container' }),\n\tforceRemove: (_name) => Effect.succeed(undefined),\n});\n"],"mappings":";;;;;;;;;AA2CA,MAAa,gCAAgC;AAC7C,MAAa,uBAAuB,SAAS;AAE7C,MAAa,qBAAqB;;;AAIlC,MAAa,wBAAwB;AAmFrC,IAAa,6BAAb,cAAgD,QAAQ,SAGrD,CAAC,6DAA6D,CAAC;AAalE,MAAM,gBAAgB,MAAc,UACnC,KAAK,QAAQ,KAAK,KAAK,KAAK,QAAQ,MAAM;AAE3C,MAAa,+BACZ,gBAEA,CAAC,GAAG,IAAI,IAAI,YAAY,KAAK,eAAe,WAAW,KAAK,CAAC,CAAC,CAAC,MAAM,GAAG,MAAM,IAAI,EAAE;AAErF,MAAM,8BACL,gBAC+B;CAC/B,MAAM,yBAAS,IAAI,KAAyB;AAC5C,MAAK,MAAM,cAAc,YACxB,KAAI,CAAC,OAAO,IAAI,WAAW,KAAK,CAAE,QAAO,IAAI,WAAW,MAAM,WAAW;AAE1E,QAAO,MAAM,KAAK,OAAO,QAAQ,CAAC;;AAQnC,MAAM,4BAA4B,gBACjC,4BAA4B,YAAY,CAAC,KAAK,SAAS,GAAG,KAAK,aAAa,OAAO;AAEpF,MAAa,0BACZ,gBAC2B;CAC3B,8BAA8B;CAC9B;CACA;CACA;CACA,GAAG,2BAA2B,YAAY,CAAC,KACzC,eAAe,iBAAiB,WAAW,KAAK,YAAY,WAAW,OACxE;CACD;AAED,MAAM,6BACL,UAOA,aAEA,SAAS,kBAAkB,QAC3B,SAAS,cAAc,WAAA,2BACvB,SAAS,cAAc,YACvB,aAAa,SAAS,cAAc,QAAQ,SAAS;AAEtD,MAAM,eAAe,MAA6B,UACjD,KAAK,WAAW,MAAM,UAAU,KAAK,OAAO,OAAO,UAAU,UAAU,MAAM,OAAO;AAErF,MAAM,iBAAiB,MAA6B,UACnD,YAAY,CAAC,GAAG,IAAI,IAAI,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,IAAI,MAAM,CAAC,CAAC,MAAM,CAAC;AAEnE,MAAM,mBAAmB,YAAmC;CAC3D,MAAM,CAAC,WAAW,QAAQ,QAAQ,MAAM,IAAI;CAC5C,MAAM,gBAAgB,WAAW,MAAM,IAAI,CAAC;CAC5C,MAAM,WAAW,MAAM,MAAM,KAAK,YAAY,IAAI,GAAG,EAAE;CACvD,MAAM,SAAS,MAAM,MAAM,GAAG,KAAK,YAAY,IAAI,CAAC;AACpD,KAAI,kBAAkB,KAAA,KAAa,aAAa,KAAA,KAAa,WAAW,KAAA,EAAW,QAAO;AAC1F,KAAI,CAAC,QAAQ,KAAK,cAAc,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAE,QAAO;AACpE,QAAO,GAAG,cAAc,GAAG,OAAO,GAAG;;AAGtC,MAAM,qBACL,UACA,gBAEA,cACC,SAAS,SAAS,YAAY;CAC7B,MAAM,OAAO,gBAAgB,QAAQ;AACrC,QAAO,SAAS,OAAO,EAAE,GAAG,CAAC,KAAK;EACjC,EACF,yBAAyB,YAAY,CACrC;AAEF,MAAa,4BACZ,QACA,YACa;AACb,KAAI,OAAO,SAAS,aAAa,OAAQ,QAAO;AAChD,KAAI,OAAO,SAAS,kBAAkB,OAAQ,QAAO;AACrD,KAAI,OAAO,0BAA0B,QAAQ,GAAI,QAAO;AACxD,KAAI,OAAO,SAAS,uBAAA,IAAsD,QAAO;AACjF,MAAK,MAAM,aAAa;EACvB,SAAS;EACT,SAAS;EACT,SAAS;EACT,SAAS;EACT,SAAS;EACT,gBAAgB;EAChB,gBAAgB;EAChB,gBAAgB;EAChB,gBAAgB;EAChB,gBAAgB;EAChB,gBAAgB;EAChB,gBAAgB;EAChB,CACA,KAAI,OAAO,eAAe,KAAA,EAAW,QAAO;AAE7C,QAAO;;AAGR,MAAM,qBAAqB,UAAqC,WAC/D,SAAS,UAAU,OAAO,SAC1B,0BAA0B,UAAU,OAAO,QAAQ,YAAY,IAC/D,kBAAkB,SAAS,cAAc,OAAO,YAAY,IAC5D,cAAc,SAAS,SAAS,uBAAuB,OAAO,YAAY,CAAC,IAC3E,SAAS,SAAS,SAAS,OAAO,QAAQ,YAAY,IACtD,yBAAyB,SAAS,QAAQ,OAAO,QAAQ;;;;;AAM1D,MAAa,aACZ,WAEA,OAAO,IAAI,aAAa;CACvB,MAAM,MAAM,OAAO;CACnB,MAAM,UAAU,OAAO,IAAI,cAAc,OAAO,QAAQ,YAAY;CACpE,MAAM,WAAW,OAAO,IAAI,iBAAiB,OAAO,QAAQ,cAAc;AAG1E,KAAI,aAAa,KAShB,QAAO;EACN,UAAU;EACV,cAAa,OAVS,IAAI,YAAY;GACtC,MAAM,OAAO,QAAQ;GACrB,OAAO,OAAO;GACd,SAAS,OAAO,QAAQ;GACxB,iBAAiB,OAAO,QAAQ;GAChC,aAAa,OAAO;GACpB,qBAAqB,OAAO,QAAQ;GACpC,CAAC,EAGoB;EACrB,WAAW,QAAQ;EACnB,cAAc;EACd;CAGF,MAAM,gBAAgB,kBAAkB,UAAU,OAAO;AAEzD,KAAI,SAAS,YAAY,QAAQ,cAChC,QAAO;EACN,UAAU;EACV,aAAa,SAAS;EACtB,WAAW,QAAQ;EACnB,cAAc;EACd;AAGF,KAAI,SAAS,YAAY,aAAa,eAAe;AACpD,MAAI,OAAO,uBAAuB,SAAS,EAC1C,QAAO,OAAO,OAAO,KACpB,IAAI,iBAAiB;GACpB,OAAO;GACP,QACC,mBAAmB,OAAO,QAAQ,GAAG,eAAe,OAAO,QAAQ,cAAc,2EAEjF,OAAO,uBAAuB,KAAK,KAAK;GACzC,CAAC,CACF;AAEF,SAAO,IAAI,YAAY,OAAO,QAAQ,cAAc;AASpD,SAAO;GACN,UAAU;GACV,cAAa,OAVS,IAAI,YAAY;IACtC,MAAM,OAAO,QAAQ;IACrB,OAAO,OAAO;IACd,SAAS,OAAO,QAAQ;IACxB,iBAAiB,OAAO,QAAQ;IAChC,aAAa,OAAO;IACpB,qBAAqB,OAAO,QAAQ;IACpC,CAAC,EAGoB;GACrB,WAAW,QAAQ;GACnB,cAAc;GACd;;AAGF,KAAI,CAAC,eAAe;AACnB,MAAI,OAAO,uBAAuB,SAAS,EAC1C,QAAO,OAAO,OAAO,KACpB,IAAI,iBAAiB;GACpB,OAAO;GACP,QACC,mBAAmB,OAAO,QAAQ,GAAG,eAAe,OAAO,QAAQ,cAAc,iFAEjF,OAAO,uBAAuB,KAAK,KAAK;GACzC,CAAC,CACF;AAMF,SAAO,IAAI,YAAY,OAAO,QAAQ,cAAc;AASpD,SAAO;GACN,UAAU;GACV,cAAa,OAVS,IAAI,YAAY;IACtC,MAAM,OAAO,QAAQ;IACrB,OAAO,OAAO;IACd,SAAS,OAAO,QAAQ;IACxB,iBAAiB,OAAO,QAAQ;IAChC,aAAa,OAAO;IACpB,qBAAqB,OAAO,QAAQ;IACpC,CAAC,EAGoB;GACrB,WAAW,QAAQ;GACnB,cAAc;GACd;;AA+BF,QAAO;EACN,UAAU;EACV,cAAa,OA7BS,IAAI,OAAO,OAAO,QAAQ,cAAc,CAAC,KAC/D,OAAO,SAAS,qBAAqB,UACpC,OAAO,uBAAuB,SAAS,IACpC,OAAO,KACP,IAAI,iBAAiB;GACpB,OAAO;GACP,QACC,mBAAmB,OAAO,QAAQ,GAAG,eAAe,OAAO,QAAQ,cAAc,oEAEjF,OAAO,uBAAuB,KAAK,KAAK;GACzC;GACA,CAAC,CACF,GACA,IAAI,YAAY,OAAO,QAAQ,cAAc,CAAC,KAC9C,OAAO,QACN,IAAI,YAAY;GACf,MAAM,OAAO,QAAQ;GACrB,OAAO,OAAO;GACd,SAAS,OAAO,QAAQ;GACxB,iBAAiB,OAAO,QAAQ;GAChC,aAAa,OAAO;GACpB,qBAAqB,OAAO,QAAQ;GACpC,CAAC,CACF,CACD,CACH,CACD,EAGqB;EACrB,WAAW,QAAQ;EACnB,cAAc;EACd;EACA,CAAC,KAAK,OAAO,SAAS,gCAAgC,CAAC;AAM1D,MAAM,oBACL,OACA,QACA,UAEA,IAAI,iBAAiB;CACpB;CACA;CACA,GAAI,UAAU,KAAA,IAAY,EAAE,GAAG,EAAE,OAAO;CACxC,CAAC;AAEH,MAAM,kBAAkB,SAOK;CAC5B,MAAM,QAAQ,4BAA4B,KAAK,YAAY;CAC3D,MAAM,aAA4B;EACjC;EACA;EACA,KAAK;EACL;EACA,KAAK;EACL;EACA,GAAG,SAAS,QAAQ;EACpB;EACA,GAAG,SAAS,aAAa;EACzB;EACA,GAAG,qBAAqB,GAAG,KAAK;EAChC;EACA,GAAG,SAAS,kBAAkB;EAC9B;EACA;EACA;AACD,MAAK,MAAM,QAAQ,MAClB,YAAW,KAAK,MAAM,aAAa,KAAK,GAAG,OAAO;AAEnD,YAAW,KACV,WACA,oBAAoB,KAAK,oBAAoB,UAAU,8BAA8B,YACrF,KAAK,OACL,GAAG,uBAAuB,KAAK,YAAY,CAC3C;AACD,QAAO;;AAGR,MAAa,iCAIT,MAAM,OACT,4BACA,OAAO,IAAI,aAAa;CACvB,MAAM,aAAa,OAAO;CAC1B,MAAM,gBAAgB,OAAO;CAC7B,MAAM,iBACL,WAEA,OAAO,KACN,OAAO,eAAe,YAAY,WAAW,EAC7C,OAAO,eAAe,eAAe,cAAc,CACnD;AA0GF,QAAO,2BAA2B,GAAG;EAvGpC,gBAAgB,SACf,cACC,cAAc,MAAM;GAAE,KAAK;GAAmB,OAAO;GAAM,WAAW;GAAO,CAAC,CAC9E,CAAC,KACD,OAAO,KAAK,QAAQ,EAAE,IAAI,EAAE,EAC5B,OAAO,UAAU,UAChB,iBACC,kBACA,2CAA2C,KAAK,IAChD,MACA,CACD,CACD;EACF,mBAAmB,SAClB,cAAc,iBAAiB,KAAK,CAAC,CAAC,KACrC,OAAO,UAAU,UAChB,iBAAiB,WAAW,uCAAuC,KAAK,IAAI,MAAM,CAClF,EACD,OAAO,KAAK,UACX,UAAU,OACP,OACA;GACA,IAAI,MAAM;GACV,SAAS,MAAM,UAAU,SAAS,YAAY,YAAY,MAAM;GAChE,OAAO,MAAM;GACb,sBAAsB;IACrB,MAAM,QAAQ,MAAM,QAAQ,MAC1B,MAAM,EAAE,WAAW,8BACpB;AACD,WAAO,UAAU,KAAA,IACd,OACA;KACA,QAAQ,MAAM;KACd,QAAQ,MAAM;KACd,UAAU,MAAM,aAAa;KAC7B;OACA;GACJ,cAAc,MAAM,gBAAgB,EAAE;GACtC,SAAS,MAAM,WAAW,EAAE;GAC5B,UAAU,MAAM,YAAY,EAAE;GAC9B,QAAQ,MAAM,UAAU,EAAE;GAC1B,CACH,CACD;EACF,cAAc,SACb,cAAc,UAAU,OAAO,eAAe,KAAK,CAAC,CAAC,CAAC,KACrD,OAAO,KAAK,YAAY,EAAE,IAAI,OAAO,OAAO,MAAM,EAAE,EAAE,EACtD,OAAO,UAAU,UAChB,iBACC,oBACA,sCAAsC,KAAK,KAAK,IAChD,MACA,CACD,CACD;EACF,SAAS,SACR,cAAc,UAAU,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,KACzC,OAAO,cAAc,cAAc,iBAAiB,KAAK,CAAC,CAAC,EAC3D,OAAO,SAAS,UACf,UAAU,OACP,OAAO,KACP,iBACC,WACA,qBAAqB,KAAK,sCAC1B,CACD,GACA,OAAO,QAAQ,EAAE,IAAI,MAAM,IAAI,CAAC,CACnC,EACD,OAAO,UAAU,UAChB,iBAAiB,mBACd,QACA,iBACA,oBACA,sCAAsC,KAAK,IAC3C,MACA,CACH,CACD;EACF,cAAc,SACb,cAAc,YAAY,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,KAC9C,OAAO,SAAS,WAAW;AAC1B,OAAI,OAAO,aAAa,KAAK,wBAAwB,OAAO,OAAO,CAClE,QAAO,OAAO;AAEf,UAAO,OAAO,KACb,iBACC,oBACA,sCAAsC,KAAK,KAAK,OAAO,SACvD,CACD;IACA,EACF,OAAO,UAAU,UAChB,iBAAiB,mBACd,QACA,iBACA,oBACA,sCAAsC,KAAK,IAC3C,MACA,CACH,CACD;EAGqC,CAAC;EACxC,CACF;AASoF,MAAM,QAC1F,2BACA,CAAC;CACD,gBAAgB,UAAU,OAAO,QAAQ,EAAE,IAAI,gBAAgB,CAAC;CAChE,mBAAmB,UAAU,OAAO,QAAQ,KAAK;CACjD,cAAc,UAAU,OAAO,QAAQ,EAAE,IAAI,kBAAkB,CAAC;CAChE,SAAS,UAAU,OAAO,QAAQ,EAAE,IAAI,kBAAkB,CAAC;CAC3D,cAAc,UAAU,OAAO,QAAQ,KAAA,EAAU;CACjD,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Effect, FileSystem, Layer, Scope } from "effect";
|
|
2
|
+
//#region src/orchestrators/runtime-composition.d.ts
|
|
3
|
+
interface ProductionCodegenOptions {
|
|
4
|
+
readonly appRoot?: string;
|
|
5
|
+
readonly outputDir?: string;
|
|
6
|
+
readonly stackSubdir?: string | null;
|
|
7
|
+
}
|
|
8
|
+
//#endregion
|
|
9
|
+
export { ProductionCodegenOptions };
|
|
10
|
+
//# sourceMappingURL=runtime-composition.d.mts.map
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { StackPathsService } from "../substrate/runtime/paths.mjs";
|
|
2
|
+
import { endpointKey } from "../substrate/brand.mjs";
|
|
3
|
+
import { readResolvedSync } from "../substrate/runtime/lifecycle/plugin-registry.mjs";
|
|
4
|
+
import { PostAcquireTasksService } from "../substrate/runtime/post-acquire-tasks.mjs";
|
|
5
|
+
import { MoveCodegenService, MoveSummaryRunnerService, layerDockerMoveSummaryRunner, layerMystenMoveCodegen } from "./codegen/bindings.mjs";
|
|
6
|
+
import { CodegenPathsService, layerCodegenPaths, layerCodegenRoot } from "./codegen/paths.mjs";
|
|
7
|
+
import { CodegenOrchestratorService, layerCodegenOrchestrator } from "./codegen/service.mjs";
|
|
8
|
+
import { makeExtrasCodegenable } from "./codegen/extras.mjs";
|
|
9
|
+
import { layerTraefikContainerOpsDocker } from "./router/traefik-container.mjs";
|
|
10
|
+
import { makeDefaultRouterProfile } from "./router/profile.mjs";
|
|
11
|
+
import { layerEntrypointRegistry } from "./router/entrypoints.mjs";
|
|
12
|
+
import { RouterService, layerDockerUpstreamResolver, layerRouterConfigLiteral, layerRouterService } from "./router/service.mjs";
|
|
13
|
+
import { BUILT_IN_ENTRYPOINTS } from "../plugins/router-entrypoints.mjs";
|
|
14
|
+
import { SnapshotOrchestratorService, layerSnapshotOrchestrator } from "./snapshot/service.mjs";
|
|
15
|
+
import { resolveManifestExtras } from "../substrate/manifest.mjs";
|
|
16
|
+
import { buildEnvelope, writeManifest } from "../substrate/runtime/manifest/manifest.mjs";
|
|
17
|
+
import { Effect, FileSystem, Layer } from "effect";
|
|
18
|
+
import { isAbsolute, join, resolve } from "node:path";
|
|
19
|
+
//#region src/orchestrators/runtime-composition.ts
|
|
20
|
+
const productionRouterProfile = (options = {}) => makeDefaultRouterProfile(options);
|
|
21
|
+
const productionCodegenOutputDir = (appRoot, outputDir) => {
|
|
22
|
+
const target = outputDir ?? "src/generated";
|
|
23
|
+
return isAbsolute(target) ? target : resolve(appRoot, target);
|
|
24
|
+
};
|
|
25
|
+
const layerProductionOrchestrators = (router = {}) => {
|
|
26
|
+
const profile = router.profile ?? productionRouterProfile();
|
|
27
|
+
return Layer.mergeAll(layerSnapshotOrchestrator, layerRouterService.pipe(Layer.provideMerge(Layer.mergeAll(layerEntrypointRegistry(BUILT_IN_ENTRYPOINTS), layerTraefikContainerOpsDocker, layerDockerUpstreamResolver(profile), layerRouterConfigLiteral({
|
|
28
|
+
disabled: router.disabled ?? false,
|
|
29
|
+
profile,
|
|
30
|
+
image: router.image ?? "traefik:v3.5",
|
|
31
|
+
routeReadinessProbe: { enabled: router.disabled !== true }
|
|
32
|
+
})))), layerCodegenOrchestrator, layerCodegenPaths.pipe(Layer.provideMerge(layerCodegenRoot({
|
|
33
|
+
outputDir: productionCodegenOutputDir(router.codegen?.appRoot ?? process.cwd(), router.codegen?.outputDir),
|
|
34
|
+
stackSubdir: router.codegen?.stackSubdir ?? null
|
|
35
|
+
}))), layerDockerMoveSummaryRunner, layerMystenMoveCodegen);
|
|
36
|
+
};
|
|
37
|
+
Effect.gen(function* () {
|
|
38
|
+
yield* (yield* RouterService).boot().pipe(Effect.orDie);
|
|
39
|
+
});
|
|
40
|
+
const endpointEventFromRoutable = (pluginKey, endpoint, registeredAt = Date.now()) => ({
|
|
41
|
+
tag: "endpoint.registered",
|
|
42
|
+
endpoint: {
|
|
43
|
+
endpointKey: endpointKey(`${pluginKey}:${endpoint.endpointName}`),
|
|
44
|
+
name: endpoint.endpointName,
|
|
45
|
+
url: endpoint.url,
|
|
46
|
+
displayUrl: null,
|
|
47
|
+
wireProtocol: endpoint.wireProtocol,
|
|
48
|
+
registeredAt
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
const orchestratorSink = (sink) => sink;
|
|
52
|
+
const makeProjectionCapabilitySink = () => orchestratorSink({
|
|
53
|
+
kind: "projection",
|
|
54
|
+
accept: (decl, ctx) => Effect.gen(function* () {
|
|
55
|
+
const event = decl.event.tag === "account.updated" ? {
|
|
56
|
+
...decl.event,
|
|
57
|
+
account: {
|
|
58
|
+
...decl.event.account,
|
|
59
|
+
rowKey: decl.event.account.rowKey ?? ctx.pluginKey
|
|
60
|
+
}
|
|
61
|
+
} : {
|
|
62
|
+
...decl.event,
|
|
63
|
+
package: {
|
|
64
|
+
...decl.event.package,
|
|
65
|
+
rowKey: decl.event.package.rowKey ?? ctx.pluginKey
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
yield* ctx.publish(event);
|
|
69
|
+
})
|
|
70
|
+
});
|
|
71
|
+
const makeStrategyContributorCapabilitySink = () => orchestratorSink({
|
|
72
|
+
kind: "strategy-contributor",
|
|
73
|
+
accept: (decl, ctx) => Effect.gen(function* () {
|
|
74
|
+
yield* ctx.registerStrategy(decl);
|
|
75
|
+
const at = Date.now();
|
|
76
|
+
yield* ctx.publish({
|
|
77
|
+
tag: "strategy.registered",
|
|
78
|
+
capabilityKey: decl.capabilityKey,
|
|
79
|
+
autoMounted: decl.autoMounted,
|
|
80
|
+
at
|
|
81
|
+
});
|
|
82
|
+
yield* Effect.addFinalizer(() => ctx.publish({
|
|
83
|
+
tag: "strategy.unregistered",
|
|
84
|
+
capabilityKey: decl.capabilityKey,
|
|
85
|
+
at: Date.now()
|
|
86
|
+
}));
|
|
87
|
+
})
|
|
88
|
+
});
|
|
89
|
+
const buildProductionOrchestratorSinks = (observers = {}) => Effect.gen(function* () {
|
|
90
|
+
const snapshot = yield* SnapshotOrchestratorService;
|
|
91
|
+
const router = yield* RouterService;
|
|
92
|
+
const codegen = yield* CodegenOrchestratorService;
|
|
93
|
+
return [
|
|
94
|
+
orchestratorSink({
|
|
95
|
+
kind: "snapshotable",
|
|
96
|
+
accept: (decl, ctx) => snapshot.registerParticipant(ctx.pluginKey, decl)
|
|
97
|
+
}),
|
|
98
|
+
orchestratorSink({
|
|
99
|
+
kind: "liveness-classifier",
|
|
100
|
+
accept: (decl, ctx) => snapshot.registerClassifier(ctx.pluginKey, decl)
|
|
101
|
+
}),
|
|
102
|
+
orchestratorSink({
|
|
103
|
+
kind: "routable",
|
|
104
|
+
accept: (decl, ctx) => router.boot().pipe(Effect.andThen(router.contributeRoute(decl)), Effect.flatMap((endpoint) => {
|
|
105
|
+
const event = endpointEventFromRoutable(ctx.pluginKey, endpoint);
|
|
106
|
+
return ctx.publish(event).pipe(Effect.andThen(observers.routable ? observers.routable(ctx.pluginKey, endpoint, event) : Effect.void));
|
|
107
|
+
}))
|
|
108
|
+
}),
|
|
109
|
+
orchestratorSink({
|
|
110
|
+
kind: "codegenable",
|
|
111
|
+
accept: (decl, ctx) => codegen.registerContribution(ctx.pluginKey, decl).pipe(Effect.flatMap(() => observers.codegenable ? observers.codegenable(ctx.pluginKey, decl) : Effect.void))
|
|
112
|
+
}),
|
|
113
|
+
makeProjectionCapabilitySink(),
|
|
114
|
+
makeStrategyContributorCapabilitySink()
|
|
115
|
+
];
|
|
116
|
+
});
|
|
117
|
+
const makeManifestExtrasContext = (ctx) => {
|
|
118
|
+
const resourceIdToKey = /* @__PURE__ */ new Map();
|
|
119
|
+
for (const [key, node] of ctx.graph.nodes) resourceIdToKey.set(node.member.id, key);
|
|
120
|
+
const lookup = (resourceId) => {
|
|
121
|
+
const key = resourceIdToKey.get(resourceId);
|
|
122
|
+
if (key === void 0) throw new Error(`manifest extras requested unknown resource '${resourceId}'`);
|
|
123
|
+
const resolved = readResolvedSync(ctx.registry, key);
|
|
124
|
+
if (resolved === void 0) throw new Error(`manifest extras requested unresolved resource '${resourceId}'`);
|
|
125
|
+
return resolved;
|
|
126
|
+
};
|
|
127
|
+
return { value: (resource) => lookup(resource.id) };
|
|
128
|
+
};
|
|
129
|
+
const buildProductionPostAcquireHook = (options = {}) => Effect.gen(function* () {
|
|
130
|
+
const codegen = yield* CodegenOrchestratorService;
|
|
131
|
+
const paths = yield* CodegenPathsService;
|
|
132
|
+
const summaryRunner = yield* MoveSummaryRunnerService;
|
|
133
|
+
const moveCodegen = yield* MoveCodegenService;
|
|
134
|
+
const fs = yield* FileSystem.FileSystem;
|
|
135
|
+
const stackPaths = yield* StackPathsService;
|
|
136
|
+
const postAcquireTasks = yield* PostAcquireTasksService;
|
|
137
|
+
return (ctx) => Effect.gen(function* () {
|
|
138
|
+
const extras = yield* resolveManifestExtras(options.extras, makeManifestExtrasContext(ctx));
|
|
139
|
+
yield* writeManifest(yield* buildEnvelope({
|
|
140
|
+
identity: {
|
|
141
|
+
app: ctx.identity.app,
|
|
142
|
+
stack: ctx.identity.stack,
|
|
143
|
+
chain: ctx.identity.chain
|
|
144
|
+
},
|
|
145
|
+
contributions: [],
|
|
146
|
+
extras
|
|
147
|
+
}), join(stackPaths.stackRoot, "manifest.json")).pipe(Effect.provideService(FileSystem.FileSystem, fs));
|
|
148
|
+
const result = yield* codegen.runCycle({ extraContributions: [makeExtrasCodegenable(extras)] }).pipe(Effect.provideService(CodegenPathsService, paths), Effect.provideService(MoveSummaryRunnerService, summaryRunner), Effect.provideService(MoveCodegenService, moveCodegen), Effect.provideService(FileSystem.FileSystem, fs));
|
|
149
|
+
yield* postAcquireTasks.runAll;
|
|
150
|
+
return [{
|
|
151
|
+
tag: "manifest.flushed",
|
|
152
|
+
manifestVersion: 1,
|
|
153
|
+
at: Date.now()
|
|
154
|
+
}, {
|
|
155
|
+
tag: "codegen.emitted",
|
|
156
|
+
files: [
|
|
157
|
+
...result.filesWritten,
|
|
158
|
+
...result.filesChmod,
|
|
159
|
+
...result.bindings?.filesWritten ?? []
|
|
160
|
+
],
|
|
161
|
+
at: Date.now()
|
|
162
|
+
}];
|
|
163
|
+
});
|
|
164
|
+
});
|
|
165
|
+
//#endregion
|
|
166
|
+
export { buildProductionOrchestratorSinks, buildProductionPostAcquireHook, layerProductionOrchestrators };
|
|
167
|
+
|
|
168
|
+
//# sourceMappingURL=runtime-composition.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-composition.mjs","names":[],"sources":["../../src/orchestrators/runtime-composition.ts"],"sourcesContent":["// Shared production orchestrator composition.\n//\n// CLI, programmatic runStack, and the e2e boot harness all use this\n// module for capability delivery. Tests may swap service\n// implementations (Traefik ops, upstream resolver, codegen paths), but\n// the sink registrations and router boot step stay shared.\n\nimport { Effect, FileSystem, Layer, Scope } from 'effect';\nimport { isAbsolute, join, resolve } from 'node:path';\n\nimport {\n\tlayerDockerMoveSummaryRunner,\n\tlayerMystenMoveCodegen,\n\tMoveCodegenService,\n\tMoveSummaryRunnerService,\n} from './codegen/bindings.ts';\nimport { CodegenPathsService, layerCodegenPaths, layerCodegenRoot } from './codegen/paths.ts';\nimport {\n\tCodegenOrchestratorService,\n\tlayerCodegenOrchestrator,\n\ttype Codegenable,\n} from './codegen/service.ts';\nimport { makeExtrasCodegenable } from './codegen/extras.ts';\nimport {\n\tDEFAULT_TRAEFIK_IMAGE,\n\tlayerDockerUpstreamResolver,\n\tlayerEntrypointRegistry,\n\tlayerRouterConfigLiteral,\n\tlayerRouterService,\n\tlayerTraefikContainerOpsDocker,\n\tRouterService,\n\ttype EndpointUrl,\n\ttype ResolvedRoute,\n} from './router/index.ts';\nimport { BUILT_IN_ENTRYPOINTS } from '../plugins/router-entrypoints.ts';\nimport {\n\tmakeDefaultRouterProfile,\n\ttype DefaultRouterProfileOptions,\n\ttype RouterProfile,\n} from './router/profile.ts';\nimport { layerSnapshotOrchestrator, SnapshotOrchestratorService } from './snapshot/index.ts';\nimport type { LivenessClassifierDecl } from '../contracts/liveness-classifier.ts';\nimport type { ProjectionDecl } from '../contracts/projection.ts';\nimport type { RoutableDecl } from '../contracts/routable.ts';\nimport type { SnapshotableDecl } from '../contracts/snapshotable.ts';\nimport type { StrategyContributorDecl } from '../contracts/strategy-contributor.ts';\nimport { endpointKey, type PluginKey } from '../substrate/brand.ts';\nimport type { EngineEvent } from '../substrate/events.ts';\nimport {\n\tbuildEnvelope,\n\tCURRENT_MANIFEST_VERSION,\n\twriteManifest,\n} from '../substrate/runtime/manifest/index.ts';\nimport { readResolvedSync } from '../substrate/runtime/lifecycle/index.ts';\nimport { resolveManifestExtras, type ManifestExtrasInput } from '../substrate/manifest.ts';\nimport { StackPathsService } from '../substrate/runtime/paths.ts';\nimport { PostAcquireTasksService } from '../substrate/runtime/post-acquire-tasks.ts';\nimport type {\n\tCapabilitySink,\n\tContributionKind,\n\tHarvestContext,\n\tOrchestratorSinks,\n} from '../substrate/runtime/capability-sinks/index.ts';\nimport type {\n\tSupervisorPostAcquireContext,\n\tSupervisorPostAcquireHook,\n} from '../substrate/runtime/supervisor.ts';\n\nexport interface ProductionCodegenOptions {\n\treadonly appRoot?: string;\n\treadonly outputDir?: string;\n\treadonly stackSubdir?: string | null;\n}\n\nexport interface ProductionRouterOptions {\n\treadonly codegen?: ProductionCodegenOptions;\n\treadonly disabled?: boolean;\n\treadonly image?: string;\n\treadonly profile?: RouterProfile;\n}\n\nexport interface ProductionPostAcquireOptions {\n\treadonly extras?: ManifestExtrasInput;\n}\n\nexport interface CapabilityDeliveryObservers {\n\treadonly routable?: (\n\t\tpluginKey: PluginKey,\n\t\tendpoint: EndpointUrl,\n\t\tevent: Extract<EngineEvent, { readonly tag: 'endpoint.registered' }>,\n\t) => Effect.Effect<void, never, Scope.Scope>;\n\treadonly codegenable?: (\n\t\tpluginKey: PluginKey,\n\t\tdecl: Codegenable,\n\t) => Effect.Effect<void, never, Scope.Scope>;\n}\n\nexport const productionRouterProfile = (options: DefaultRouterProfileOptions = {}): RouterProfile =>\n\tmakeDefaultRouterProfile(options);\n\nconst productionCodegenOutputDir = (appRoot: string, outputDir: string | undefined): string => {\n\tconst target = outputDir ?? 'src/generated';\n\treturn isAbsolute(target) ? target : resolve(appRoot, target);\n};\n\nexport const layerProductionOrchestrators = (router: ProductionRouterOptions = {}) => {\n\tconst profile = router.profile ?? productionRouterProfile();\n\treturn Layer.mergeAll(\n\t\tlayerSnapshotOrchestrator,\n\t\tlayerRouterService.pipe(\n\t\t\tLayer.provideMerge(\n\t\t\t\tLayer.mergeAll(\n\t\t\t\t\tlayerEntrypointRegistry(BUILT_IN_ENTRYPOINTS),\n\t\t\t\t\tlayerTraefikContainerOpsDocker,\n\t\t\t\t\tlayerDockerUpstreamResolver(profile),\n\t\t\t\t\tlayerRouterConfigLiteral({\n\t\t\t\t\t\tdisabled: router.disabled ?? false,\n\t\t\t\t\t\tprofile,\n\t\t\t\t\t\timage: router.image ?? DEFAULT_TRAEFIK_IMAGE,\n\t\t\t\t\t\trouteReadinessProbe: {\n\t\t\t\t\t\t\tenabled: router.disabled !== true,\n\t\t\t\t\t\t},\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\t),\n\t\t),\n\t\tlayerCodegenOrchestrator,\n\t\tlayerCodegenPaths.pipe(\n\t\t\tLayer.provideMerge(\n\t\t\t\tlayerCodegenRoot({\n\t\t\t\t\toutputDir: productionCodegenOutputDir(\n\t\t\t\t\t\trouter.codegen?.appRoot ?? process.cwd(),\n\t\t\t\t\t\trouter.codegen?.outputDir,\n\t\t\t\t\t),\n\t\t\t\t\tstackSubdir: router.codegen?.stackSubdir ?? null,\n\t\t\t\t}),\n\t\t\t),\n\t\t),\n\t\tlayerDockerMoveSummaryRunner,\n\t\tlayerMystenMoveCodegen,\n\t);\n};\n\nexport const bootRouterOrchestrator: Effect.Effect<void, never, RouterService> = Effect.gen(\n\tfunction* () {\n\t\tconst router = yield* RouterService;\n\t\tyield* router.boot().pipe(Effect.orDie);\n\t},\n);\n\nexport const endpointEventFromRoutable = (\n\tpluginKey: PluginKey,\n\tendpoint: EndpointUrl,\n\tregisteredAt = Date.now(),\n): Extract<EngineEvent, { readonly tag: 'endpoint.registered' }> => ({\n\ttag: 'endpoint.registered',\n\tendpoint: {\n\t\tendpointKey: endpointKey(`${pluginKey}:${endpoint.endpointName}`),\n\t\tname: endpoint.endpointName,\n\t\turl: endpoint.url,\n\t\tdisplayUrl: null,\n\t\twireProtocol: endpoint.wireProtocol,\n\t\tregisteredAt,\n\t},\n});\n\nconst orchestratorSink = <K extends ContributionKind, TDecl>(\n\tsink: CapabilitySink<K, TDecl>,\n): OrchestratorSinks[number] => sink as OrchestratorSinks[number];\n\nexport const makeProjectionCapabilitySink = (): OrchestratorSinks[number] =>\n\torchestratorSink<'projection', ProjectionDecl>({\n\t\tkind: 'projection',\n\t\taccept: (decl, ctx) =>\n\t\t\tEffect.gen(function* () {\n\t\t\t\tconst event =\n\t\t\t\t\tdecl.event.tag === 'account.updated'\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t...decl.event,\n\t\t\t\t\t\t\t\taccount: {\n\t\t\t\t\t\t\t\t\t...decl.event.account,\n\t\t\t\t\t\t\t\t\trowKey: decl.event.account.rowKey ?? ctx.pluginKey,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t...decl.event,\n\t\t\t\t\t\t\t\tpackage: {\n\t\t\t\t\t\t\t\t\t...decl.event.package,\n\t\t\t\t\t\t\t\t\trowKey: decl.event.package.rowKey ?? ctx.pluginKey,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t};\n\t\t\t\tyield* ctx.publish(event);\n\t\t\t}),\n\t});\n\nexport const makeStrategyContributorCapabilitySink = (): OrchestratorSinks[number] =>\n\torchestratorSink<'strategy-contributor', StrategyContributorDecl<string, unknown>>({\n\t\tkind: 'strategy-contributor',\n\t\taccept: (decl, ctx) =>\n\t\t\tEffect.gen(function* () {\n\t\t\t\tyield* ctx.registerStrategy(decl);\n\t\t\t\tconst at = Date.now();\n\t\t\t\tyield* ctx.publish({\n\t\t\t\t\ttag: 'strategy.registered',\n\t\t\t\t\tcapabilityKey: decl.capabilityKey,\n\t\t\t\t\tautoMounted: decl.autoMounted,\n\t\t\t\t\tat,\n\t\t\t\t});\n\t\t\t\tyield* Effect.addFinalizer(() =>\n\t\t\t\t\tctx.publish({\n\t\t\t\t\t\ttag: 'strategy.unregistered',\n\t\t\t\t\t\tcapabilityKey: decl.capabilityKey,\n\t\t\t\t\t\tat: Date.now(),\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}),\n\t});\n\nexport const buildProductionOrchestratorSinks = (\n\tobservers: CapabilityDeliveryObservers = {},\n): Effect.Effect<\n\tOrchestratorSinks,\n\tnever,\n\tSnapshotOrchestratorService | RouterService | CodegenOrchestratorService\n> =>\n\tEffect.gen(function* () {\n\t\tconst snapshot = yield* SnapshotOrchestratorService;\n\t\tconst router = yield* RouterService;\n\t\tconst codegen = yield* CodegenOrchestratorService;\n\t\treturn [\n\t\t\torchestratorSink<'snapshotable', SnapshotableDecl>({\n\t\t\t\tkind: 'snapshotable',\n\t\t\t\taccept: (decl, ctx) => snapshot.registerParticipant(ctx.pluginKey, decl),\n\t\t\t}),\n\t\t\torchestratorSink<'liveness-classifier', LivenessClassifierDecl>({\n\t\t\t\tkind: 'liveness-classifier',\n\t\t\t\taccept: (decl, ctx) => snapshot.registerClassifier(ctx.pluginKey, decl),\n\t\t\t}),\n\t\t\torchestratorSink<'routable', RoutableDecl>({\n\t\t\t\tkind: 'routable',\n\t\t\t\taccept: (decl, ctx: HarvestContext) =>\n\t\t\t\t\trouter.boot().pipe(\n\t\t\t\t\t\tEffect.andThen(router.contributeRoute(decl)),\n\t\t\t\t\t\tEffect.flatMap((endpoint) => {\n\t\t\t\t\t\t\tconst event = endpointEventFromRoutable(ctx.pluginKey, endpoint);\n\t\t\t\t\t\t\treturn ctx\n\t\t\t\t\t\t\t\t.publish(event)\n\t\t\t\t\t\t\t\t.pipe(\n\t\t\t\t\t\t\t\t\tEffect.andThen(\n\t\t\t\t\t\t\t\t\t\tobservers.routable\n\t\t\t\t\t\t\t\t\t\t\t? observers.routable(ctx.pluginKey, endpoint, event)\n\t\t\t\t\t\t\t\t\t\t\t: Effect.void,\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}),\n\t\t\t\t\t),\n\t\t\t}),\n\t\t\torchestratorSink<'codegenable', Codegenable>({\n\t\t\t\tkind: 'codegenable',\n\t\t\t\taccept: (decl, ctx) =>\n\t\t\t\t\tcodegen\n\t\t\t\t\t\t.registerContribution(ctx.pluginKey, decl)\n\t\t\t\t\t\t.pipe(\n\t\t\t\t\t\t\tEffect.flatMap(() =>\n\t\t\t\t\t\t\t\tobservers.codegenable ? observers.codegenable(ctx.pluginKey, decl) : Effect.void,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t),\n\t\t\t}),\n\t\t\tmakeProjectionCapabilitySink(),\n\t\t\tmakeStrategyContributorCapabilitySink(),\n\t\t];\n\t});\n\nconst makeManifestExtrasContext = (ctx: SupervisorPostAcquireContext) => {\n\tconst resourceIdToKey = new Map<string, PluginKey>();\n\tfor (const [key, node] of ctx.graph.nodes) {\n\t\tresourceIdToKey.set(node.member.id, key);\n\t}\n\tconst lookup = (resourceId: string): unknown => {\n\t\tconst key = resourceIdToKey.get(resourceId);\n\t\tif (key === undefined) {\n\t\t\tthrow new Error(`manifest extras requested unknown resource '${resourceId}'`);\n\t\t}\n\t\tconst resolved = readResolvedSync(ctx.registry, key);\n\t\tif (resolved === undefined) {\n\t\t\tthrow new Error(`manifest extras requested unresolved resource '${resourceId}'`);\n\t\t}\n\t\treturn resolved;\n\t};\n\treturn {\n\t\tvalue: (resource: { readonly id: string }) => lookup(resource.id),\n\t};\n};\n\nexport const buildProductionPostAcquireHook = (\n\toptions: ProductionPostAcquireOptions = {},\n): Effect.Effect<\n\tSupervisorPostAcquireHook,\n\tnever,\n\t| CodegenOrchestratorService\n\t| CodegenPathsService\n\t| MoveSummaryRunnerService\n\t| MoveCodegenService\n\t| FileSystem.FileSystem\n\t| StackPathsService\n\t| PostAcquireTasksService\n> =>\n\tEffect.gen(function* () {\n\t\tconst codegen = yield* CodegenOrchestratorService;\n\t\tconst paths = yield* CodegenPathsService;\n\t\tconst summaryRunner = yield* MoveSummaryRunnerService;\n\t\tconst moveCodegen = yield* MoveCodegenService;\n\t\tconst fs = yield* FileSystem.FileSystem;\n\t\tconst stackPaths = yield* StackPathsService;\n\t\tconst postAcquireTasks = yield* PostAcquireTasksService;\n\t\treturn (ctx) =>\n\t\t\tEffect.gen(function* () {\n\t\t\t\tconst extras = yield* resolveManifestExtras(options.extras, makeManifestExtrasContext(ctx));\n\t\t\t\tconst envelope = yield* buildEnvelope({\n\t\t\t\t\tidentity: {\n\t\t\t\t\t\tapp: ctx.identity.app,\n\t\t\t\t\t\tstack: ctx.identity.stack,\n\t\t\t\t\t\tchain: ctx.identity.chain,\n\t\t\t\t\t},\n\t\t\t\t\tcontributions: [],\n\t\t\t\t\textras,\n\t\t\t\t});\n\t\t\t\tconst manifestPath = join(stackPaths.stackRoot, 'manifest.json');\n\t\t\t\tyield* writeManifest(envelope, manifestPath).pipe(\n\t\t\t\t\tEffect.provideService(FileSystem.FileSystem, fs),\n\t\t\t\t);\n\t\t\t\tconst result = yield* codegen\n\t\t\t\t\t.runCycle({ extraContributions: [makeExtrasCodegenable(extras)] })\n\t\t\t\t\t.pipe(\n\t\t\t\t\t\tEffect.provideService(CodegenPathsService, paths),\n\t\t\t\t\t\tEffect.provideService(MoveSummaryRunnerService, summaryRunner),\n\t\t\t\t\t\tEffect.provideService(MoveCodegenService, moveCodegen),\n\t\t\t\t\t\tEffect.provideService(FileSystem.FileSystem, fs),\n\t\t\t\t\t);\n\t\t\t\tyield* postAcquireTasks.runAll;\n\t\t\t\treturn [\n\t\t\t\t\t{\n\t\t\t\t\t\ttag: 'manifest.flushed' as const,\n\t\t\t\t\t\tmanifestVersion: CURRENT_MANIFEST_VERSION,\n\t\t\t\t\t\tat: Date.now(),\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttag: 'codegen.emitted' as const,\n\t\t\t\t\t\tfiles: [\n\t\t\t\t\t\t\t...result.filesWritten,\n\t\t\t\t\t\t\t...result.filesChmod,\n\t\t\t\t\t\t\t...(result.bindings?.filesWritten ?? []),\n\t\t\t\t\t\t],\n\t\t\t\t\t\tat: Date.now(),\n\t\t\t\t\t},\n\t\t\t\t];\n\t\t\t});\n\t});\n\nexport type { EndpointUrl, ResolvedRoute };\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import { Effect, FileSystem, Schema } from "effect";
|