@astrale-os/sdk 0.6.0-beta.4 → 0.6.0-beta.40
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/README.md +191 -58
- package/dist/application/action/action.d.ts +6 -0
- package/dist/application/action/authoring.d.ts +1 -1
- package/dist/application/action/context.d.ts +47 -31
- package/dist/application/action/define.d.ts +3 -3
- package/dist/application/action/index.d.ts +1 -1
- package/dist/application/define.d.ts +8 -6
- package/dist/application/define.js +28 -14
- package/dist/application/dependency/index.d.ts +1 -1
- package/dist/application/dependency/invoker.d.ts +21 -10
- package/dist/application/domain.d.ts +30 -0
- package/dist/application/index.d.ts +4 -4
- package/dist/application/index.js +1 -1
- package/dist/application/integration/define.d.ts +8 -1
- package/dist/application/integration/index.d.ts +2 -2
- package/dist/application/integration/integration.d.ts +13 -1
- package/dist/application/integration/operation.d.ts +16 -3
- package/dist/application/mutation/authoring/properties.d.ts +5 -3
- package/dist/application/mutation/authoring/properties.js +35 -2
- package/dist/application/mutation/authoring/transition.js +4 -1
- package/dist/application/mutation/execution/execute.js +1 -1
- package/dist/application/mutation/failure.d.ts +6 -0
- package/dist/application/mutation/failure.js +24 -18
- package/dist/application/mutation/index.d.ts +1 -1
- package/dist/application/query/collection/union.js +11 -4
- package/dist/application/query/composite/plan.d.ts +0 -4
- package/dist/application/query/composite/plan.js +0 -2
- package/dist/application/query/conformance.d.ts +15 -0
- package/dist/application/query/conformance.js +46 -0
- package/dist/application/query/define.js +4 -3
- package/dist/application/query/execution/execute.d.ts +0 -1
- package/dist/application/query/execution/execute.js +7 -1
- package/dist/application/query/failure.d.ts +8 -0
- package/dist/application/query/failure.js +8 -0
- package/dist/application/query/index.d.ts +1 -1
- package/dist/application/query/index.js +1 -1
- package/dist/application/routes/admission.d.ts +2 -2
- package/dist/application/routes/admission.js +1 -1
- package/dist/application/routes/route.d.ts +2 -2
- package/dist/application/runtime/actions.js +3 -0
- package/dist/application/runtime/workflows.d.ts +3 -1
- package/dist/application/runtime/workflows.js +3 -4
- package/dist/application/view/define.js +4 -6
- package/dist/application/view/frontend.d.ts +2 -2
- package/dist/application/view/index.d.ts +1 -1
- package/dist/application/view/route.d.ts +0 -14
- package/dist/application/view/route.js +1 -64
- package/dist/application/workflow/authoring.d.ts +3 -2
- package/dist/application/workflow/context.d.ts +8 -2
- package/dist/application/workflow/define.d.ts +4 -4
- package/dist/application/workflow/define.js +14 -9
- package/dist/application/workflow/durable.d.ts +185 -0
- package/dist/application/workflow/index.d.ts +3 -2
- package/dist/application/workflow/runner/inline.js +3 -4
- package/dist/application/workflow/runner/runner.d.ts +2 -2
- package/dist/application/workflow/step/output.d.ts +2 -0
- package/dist/application/workflow/step/output.js +73 -0
- package/dist/application/workflow/workflow.d.ts +5 -3
- package/dist/deployment/adapter/adapter.d.ts +55 -13
- package/dist/deployment/adapter/bundle/bundle.d.ts +36 -0
- package/dist/deployment/adapter/bundle/file.d.ts +10 -0
- package/dist/deployment/adapter/bundle/index.d.ts +2 -0
- package/dist/deployment/adapter/define.d.ts +4 -3
- package/dist/deployment/adapter/define.js +107 -23
- package/dist/deployment/adapter/index.d.ts +4 -3
- package/dist/deployment/adapter/index.js +1 -0
- package/dist/deployment/adapter/release/command.d.ts +33 -0
- package/dist/deployment/adapter/release/context.d.ts +94 -0
- package/dist/deployment/adapter/release/index.d.ts +4 -0
- package/dist/deployment/adapter/release/index.js +1 -0
- package/dist/deployment/adapter/release/list.d.ts +53 -0
- package/dist/deployment/adapter/release/list.js +1 -0
- package/dist/deployment/adapter/release/refusal.d.ts +10 -0
- package/dist/deployment/adapter/release/refusal.js +14 -0
- package/dist/deployment/adapter/release/result.d.ts +56 -0
- package/dist/deployment/adapter/release/result.js +1 -0
- package/dist/deployment/address/configuration.d.ts +96 -0
- package/dist/deployment/address/configuration.js +274 -0
- package/dist/deployment/address/fingerprint.d.ts +5 -0
- package/dist/deployment/address/fingerprint.js +27 -0
- package/dist/deployment/address/index.d.ts +5 -0
- package/dist/deployment/address/index.js +4 -0
- package/dist/deployment/address/label.d.ts +42 -0
- package/dist/deployment/address/label.js +80 -0
- package/dist/deployment/address/line.d.ts +29 -0
- package/dist/deployment/address/line.js +53 -0
- package/dist/deployment/address/record.d.ts +73 -0
- package/dist/deployment/address/record.js +138 -0
- package/dist/deployment/address/summary.d.ts +30 -0
- package/dist/deployment/address/summary.js +1 -0
- package/dist/deployment/address/vectors.d.ts +60 -0
- package/dist/deployment/address/vectors.js +517 -0
- package/dist/deployment/authoring.d.ts +0 -2
- package/dist/deployment/authoring.js +0 -1
- package/dist/deployment/build/build.d.ts +8 -2
- package/dist/deployment/build/compile.d.ts +4 -4
- package/dist/deployment/build/compile.js +19 -17
- package/dist/deployment/build/frontend/compilation.d.ts +2 -4
- package/dist/deployment/build/frontend/compilation.js +0 -5
- package/dist/deployment/build/frontend/digest.js +1 -5
- package/dist/deployment/build/index.d.ts +1 -0
- package/dist/deployment/build/index.js +1 -0
- package/dist/deployment/build/manifest.d.ts +59 -0
- package/dist/deployment/build/manifest.js +118 -0
- package/dist/deployment/build/material.d.ts +2 -2
- package/dist/deployment/build/material.js +28 -13
- package/dist/deployment/build/schema.d.ts +2 -2
- package/dist/deployment/deployment.d.ts +3 -2
- package/dist/deployment/environment.d.ts +6 -0
- package/dist/deployment/environment.js +6 -0
- package/dist/deployment/index.d.ts +4 -6
- package/dist/deployment/index.js +1 -2
- package/dist/deployment/release/addressing.d.ts +6 -5
- package/dist/deployment/release/addressing.js +2 -3
- package/dist/deployment/release/assemble.d.ts +6 -3
- package/dist/deployment/release/assemble.js +12 -10
- package/dist/deployment/release/release.d.ts +16 -5
- package/dist/deployment/release/seal.d.ts +14 -0
- package/dist/deployment/release/seal.js +22 -0
- package/dist/deployment/release/{publication → served}/callables.d.ts +2 -2
- package/dist/deployment/release/{publication → served}/callables.js +2 -2
- package/dist/deployment/release/served/index.d.ts +11 -0
- package/dist/deployment/release/served/index.js +26 -0
- package/dist/deployment/release/{publication → served}/views.d.ts +2 -2
- package/dist/deployment/release/{publication → served}/views.js +0 -1
- package/dist/deployment/runtime/admission.d.ts +2 -2
- package/dist/deployment/runtime/admission.js +5 -5
- package/dist/deployment/verify/index.d.ts +3 -4
- package/dist/deployment/verify/index.js +2 -3
- package/dist/deployment/verify/preflight/bundle.d.ts +18 -0
- package/dist/deployment/verify/preflight/bundle.js +71 -0
- package/dist/deployment/verify/preflight/index.d.ts +1 -12
- package/dist/deployment/verify/preflight/index.js +1 -12
- package/dist/deployment/verify/readiness/fetch.d.ts +13 -0
- package/dist/deployment/verify/readiness/fetch.js +26 -0
- package/dist/deployment/verify/readiness/identity.d.ts +3 -6
- package/dist/deployment/verify/readiness/identity.js +3 -3
- package/dist/deployment/verify/readiness/index.d.ts +15 -8
- package/dist/deployment/verify/readiness/index.js +25 -6
- package/dist/deployment/verify/readiness/release.d.ts +8 -0
- package/dist/deployment/verify/readiness/release.js +22 -0
- package/dist/deployment/worker/address.d.ts +26 -0
- package/dist/deployment/worker/address.js +43 -0
- package/dist/deployment/worker/build.d.ts +60 -0
- package/dist/deployment/worker/build.js +172 -0
- package/dist/deployment/worker/configuration.d.ts +73 -0
- package/dist/deployment/worker/configuration.js +165 -0
- package/dist/deployment/worker/content.d.ts +38 -0
- package/dist/deployment/worker/content.js +169 -0
- package/dist/deployment/worker/index.d.ts +29 -0
- package/dist/deployment/worker/index.js +29 -0
- package/dist/deployment/worker/limits.d.ts +30 -0
- package/dist/deployment/worker/limits.js +30 -0
- package/dist/deployment/worker/record.d.ts +29 -0
- package/dist/deployment/worker/record.js +69 -0
- package/dist/deployment/worker/request.d.ts +118 -0
- package/dist/deployment/worker/request.js +280 -0
- package/dist/deployment/worker/response.d.ts +101 -0
- package/dist/deployment/worker/response.js +207 -0
- package/dist/execution/cache/cache.d.ts +17 -0
- package/dist/execution/cache/cache.js +11 -0
- package/dist/execution/cache/index.d.ts +2 -0
- package/dist/execution/cache/index.js +2 -0
- package/dist/execution/cache/memory.d.ts +13 -0
- package/dist/execution/cache/memory.js +48 -0
- package/dist/execution/identity/authentication.d.ts +33 -3
- package/dist/execution/identity/authentication.js +90 -36
- package/dist/execution/identity/callback.d.ts +20 -20
- package/dist/execution/identity/callback.js +34 -26
- package/dist/execution/identity/delivery.d.ts +6 -4
- package/dist/execution/identity/delivery.js +25 -20
- package/dist/execution/identity/identity.d.ts +17 -3
- package/dist/execution/identity/identity.js +12 -4
- package/dist/execution/identity/jwks.d.ts +5 -0
- package/dist/execution/identity/jwks.js +92 -102
- package/dist/execution/index.d.ts +6 -4
- package/dist/execution/index.js +4 -2
- package/dist/execution/invocation/admission/age.d.ts +57 -0
- package/dist/execution/invocation/admission/age.js +208 -0
- package/dist/execution/invocation/admission/authentication.d.ts +13 -13
- package/dist/execution/invocation/admission/authentication.js +52 -44
- package/dist/execution/invocation/admission/authority.d.ts +28 -6
- package/dist/execution/invocation/admission/authority.js +9 -2
- package/dist/execution/invocation/admission/index.d.ts +4 -3
- package/dist/execution/invocation/admission/index.js +3 -2
- package/dist/execution/invocation/admission/input.d.ts +2 -2
- package/dist/execution/invocation/admission/input.js +16 -2
- package/dist/execution/invocation/admission/target.d.ts +11 -0
- package/dist/execution/invocation/admission/target.js +22 -3
- package/dist/execution/invocation/capabilities/bind.d.ts +11 -0
- package/dist/execution/invocation/capabilities/bind.js +25 -0
- package/dist/execution/invocation/capabilities/index.d.ts +1 -0
- package/dist/execution/invocation/capabilities/index.js +1 -0
- package/dist/execution/invocation/dependency/bind.d.ts +3 -1
- package/dist/execution/invocation/dependency/bind.js +36 -16
- package/dist/execution/invocation/dispatch/context.d.ts +7 -6
- package/dist/execution/invocation/dispatch/context.js +11 -44
- package/dist/execution/invocation/dispatch/workflow.js +0 -4
- package/dist/execution/invocation/handler.js +8 -2
- package/dist/execution/invocation/index.d.ts +2 -2
- package/dist/execution/invocation/index.js +1 -1
- package/dist/execution/invocation/integration/authentication.d.ts +3 -3
- package/dist/execution/invocation/integration/authentication.js +7 -7
- package/dist/execution/invocation/integration/call.d.ts +2 -1
- package/dist/execution/invocation/integration/call.js +3 -3
- package/dist/execution/invocation/integration/clients.d.ts +1 -1
- package/dist/execution/invocation/integration/index.d.ts +1 -0
- package/dist/execution/invocation/integration/index.js +1 -0
- package/dist/execution/invocation/invocation.d.ts +6 -0
- package/dist/execution/invocation/invocation.js +129 -21
- package/dist/execution/invocation/lifecycle/active.d.ts +8 -2
- package/dist/execution/invocation/lifecycle/active.js +3 -3
- package/dist/execution/invocation/lifecycle/index.d.ts +1 -1
- package/dist/execution/invocation/result/errors.d.ts +0 -10
- package/dist/execution/invocation/result/errors.js +0 -17
- package/dist/execution/invocation/result/index.d.ts +2 -2
- package/dist/execution/invocation/result/index.js +1 -1
- package/dist/execution/invocation/result/project.js +41 -1
- package/dist/execution/node/serve.d.ts +2 -2
- package/dist/execution/node/serve.js +1 -1
- package/dist/execution/runtime/index.d.ts +1 -0
- package/dist/execution/runtime/index.js +1 -0
- package/dist/execution/runtime/load.d.ts +3 -3
- package/dist/execution/runtime/load.js +3 -2
- package/dist/execution/runtime/release.d.ts +17 -0
- package/dist/execution/runtime/release.js +7 -0
- package/dist/execution/serve.d.ts +18 -4
- package/dist/execution/serve.js +10 -0
- package/dist/execution/service/create.js +43 -7
- package/dist/execution/service/initialization.d.ts +4 -4
- package/dist/execution/service/initialization.js +23 -14
- package/dist/execution/service/release.d.ts +2 -2
- package/dist/execution/service/release.js +3 -2
- package/dist/execution/service/service.d.ts +20 -5
- package/dist/execution/service/serving/delivery.d.ts +5 -0
- package/dist/execution/service/{publication → serving}/delivery.js +4 -1
- package/dist/execution/service/{publication → serving}/index.d.ts +1 -1
- package/dist/execution/service/serving/installation.d.ts +4 -0
- package/dist/execution/service/serving/installation.js +9 -0
- package/dist/execution/service/serving/source.d.ts +11 -0
- package/dist/execution/service/serving/source.js +15 -0
- package/dist/execution/workflows/discovery.d.ts +14 -0
- package/dist/execution/workflows/discovery.js +151 -0
- package/dist/execution/workflows/engine.d.ts +89 -0
- package/dist/execution/workflows/engine.js +1 -0
- package/dist/execution/workflows/envelope.d.ts +12 -0
- package/dist/execution/workflows/envelope.js +46 -0
- package/dist/execution/workflows/failure.d.ts +46 -0
- package/dist/execution/workflows/failure.js +160 -0
- package/dist/execution/workflows/index.d.ts +4 -0
- package/dist/execution/workflows/index.js +3 -0
- package/dist/execution/workflows/integrations.d.ts +13 -0
- package/dist/execution/workflows/integrations.js +25 -0
- package/dist/execution/workflows/options.d.ts +66 -0
- package/dist/execution/workflows/options.js +148 -0
- package/dist/execution/workflows/receiver.d.ts +24 -0
- package/dist/execution/workflows/receiver.js +99 -0
- package/dist/execution/workflows/route.d.ts +12 -0
- package/dist/execution/workflows/route.js +35 -0
- package/dist/execution/workflows/run.d.ts +21 -0
- package/dist/execution/workflows/run.js +321 -0
- package/dist/execution/workflows/steps.d.ts +42 -0
- package/dist/execution/workflows/steps.js +67 -0
- package/dist/index.d.ts +4 -4
- package/dist/index.js +2 -2
- package/dist/platform/graph/alias.d.ts +1 -5
- package/dist/platform/graph/alias.js +1 -5
- package/dist/platform/graph/document/index.d.ts +1 -1
- package/dist/platform/graph/document/index.js +1 -1
- package/dist/platform/graph/index.d.ts +1 -1
- package/dist/platform/graph/index.js +1 -1
- package/dist/platform/release/index.d.ts +2 -0
- package/dist/platform/release/index.js +2 -0
- package/dist/platform/schema/callable-authoring.d.ts +21 -0
- package/dist/platform/schema/callable-authoring.js +27 -0
- package/dist/platform/schema/class-authoring.d.ts +61 -11
- package/dist/platform/schema/class-authoring.js +37 -4
- package/dist/platform/schema/class-icon-svg.d.ts +9 -0
- package/dist/platform/schema/class-icon-svg.js +29 -0
- package/dist/platform/schema/class-icon.d.ts +3 -8
- package/dist/platform/schema/class-icon.js +2 -29
- package/dist/platform/schema/index.d.ts +6 -4
- package/dist/platform/schema/index.js +2 -1
- package/dist/platform/schema/property.d.ts +5 -0
- package/dist/platform/schema/schema-authoring.d.ts +14 -7
- package/dist/platform/schema/schema-authoring.js +5 -1
- package/dist/platform/versioning/dependents.d.ts +18 -0
- package/dist/platform/versioning/dependents.js +15 -0
- package/dist/platform/versioning/index.d.ts +5 -0
- package/dist/platform/versioning/index.js +5 -0
- package/dist/platform/versioning/name.d.ts +38 -0
- package/dist/platform/versioning/name.js +58 -0
- package/dist/platform/versioning/reference.d.ts +48 -0
- package/dist/platform/versioning/reference.js +95 -0
- package/dist/platform/versioning/version.d.ts +72 -0
- package/dist/platform/versioning/version.js +98 -0
- package/dist/project/admit.js +1 -5
- package/dist/project/define.d.ts +4 -4
- package/dist/project/define.js +55 -35
- package/dist/project/index.d.ts +1 -1
- package/dist/project/install-command.d.ts +6 -0
- package/dist/project/install-command.js +9 -0
- package/dist/project/project.d.ts +10 -8
- package/dist/testing/dataset/define.d.ts +1 -1
- package/dist/testing/durable/engine.d.ts +121 -0
- package/dist/testing/durable/engine.js +614 -0
- package/dist/testing/durable/index.d.ts +3 -0
- package/dist/testing/durable/index.js +1 -0
- package/dist/testing/durable/steps.d.ts +30 -0
- package/dist/testing/durable/steps.js +40 -0
- package/dist/testing/index.d.ts +6 -1
- package/dist/testing/index.js +5 -1
- package/dist/testing/load.js +1 -1
- package/dist/tooling/cli/adapter-command.d.ts +35 -0
- package/dist/tooling/cli/adapter-command.js +66 -0
- package/dist/tooling/cli/arguments.d.ts +17 -6
- package/dist/tooling/cli/arguments.js +175 -52
- package/dist/tooling/cli/build.d.ts +55 -0
- package/dist/tooling/cli/build.js +77 -0
- package/dist/tooling/cli/bun.d.ts +0 -1
- package/dist/tooling/cli/bun.js +0 -7
- package/dist/tooling/cli/commit.d.ts +35 -0
- package/dist/tooling/cli/commit.js +235 -0
- package/dist/tooling/cli/deploy-mode.d.ts +26 -0
- package/dist/tooling/cli/deploy-mode.js +59 -0
- package/dist/tooling/cli/deploy-result.d.ts +80 -0
- package/dist/tooling/cli/deploy-result.js +64 -0
- package/dist/tooling/cli/diff/declared.d.ts +7 -0
- package/dist/tooling/cli/diff/declared.js +27 -0
- package/dist/tooling/cli/diff/index.d.ts +30 -0
- package/dist/tooling/cli/diff/index.js +58 -0
- package/dist/tooling/cli/diff/render.d.ts +15 -0
- package/dist/tooling/cli/diff/render.js +131 -0
- package/dist/tooling/cli/diff/report.d.ts +88 -0
- package/dist/tooling/cli/diff/report.js +154 -0
- package/dist/tooling/cli/dotenv.d.ts +5 -5
- package/dist/tooling/cli/dotenv.js +6 -36
- package/dist/tooling/cli/help.js +173 -60
- package/dist/tooling/cli/immutable-deployment.d.ts +83 -0
- package/dist/tooling/cli/immutable-deployment.js +135 -0
- package/dist/tooling/cli/index.d.ts +12 -4
- package/dist/tooling/cli/index.js +6 -3
- package/dist/tooling/cli/installed-on.d.ts +83 -0
- package/dist/tooling/cli/installed-on.js +156 -0
- package/dist/tooling/cli/list.d.ts +152 -0
- package/dist/tooling/cli/list.js +331 -0
- package/dist/tooling/cli/log.d.ts +5 -2
- package/dist/tooling/cli/log.js +9 -2
- package/dist/tooling/cli/orchestrate.d.ts +0 -6
- package/dist/tooling/cli/orchestrate.js +246 -90
- package/dist/tooling/cli/project.d.ts +3 -3
- package/dist/tooling/cli/publish/index.d.ts +81 -0
- package/dist/tooling/cli/publish/index.js +383 -0
- package/dist/tooling/cli/publish/report.d.ts +49 -0
- package/dist/tooling/cli/publish/report.js +15 -0
- package/dist/tooling/cli/registry/client.d.ts +121 -0
- package/dist/tooling/cli/registry/client.js +354 -0
- package/dist/tooling/cli/registry/error.d.ts +11 -0
- package/dist/tooling/cli/registry/error.js +17 -0
- package/dist/tooling/cli/registry/executable.d.ts +35 -0
- package/dist/tooling/cli/registry/executable.js +96 -0
- package/dist/tooling/cli/registry/index.d.ts +9 -0
- package/dist/tooling/cli/registry/index.js +8 -0
- package/dist/tooling/cli/registry/installations.d.ts +67 -0
- package/dist/tooling/cli/registry/installations.js +108 -0
- package/dist/tooling/cli/registry/process.d.ts +36 -0
- package/dist/tooling/cli/registry/process.js +119 -0
- package/dist/tooling/cli/secrets.d.ts +9 -0
- package/dist/tooling/cli/secrets.js +19 -0
- package/dist/tooling/cli/yank.d.ts +34 -0
- package/dist/tooling/cli/yank.js +32 -0
- package/dist/tooling/linter/adapters/typescript/imports.d.ts +0 -1
- package/dist/tooling/linter/adapters/typescript/imports.js +1 -5
- package/dist/tooling/linter/adapters/typescript/index.d.ts +1 -1
- package/dist/tooling/linter/adapters/typescript/index.js +1 -1
- package/dist/tooling/linter/adapters/typescript/syntax.d.ts +3 -3
- package/dist/tooling/linter/adapters/typescript/syntax.js +13 -25
- package/dist/tooling/linter/implementations/source/callable-requirements.d.ts +1 -2
- package/dist/tooling/linter/implementations/source/callable-requirements.js +11 -16
- package/dist/tooling/linter/implementations/source/dependencies.js +13 -72
- package/dist/tooling/linter/implementations/source/global.js +1 -2
- package/dist/tooling/linter/implementations/source/mutations.js +18 -29
- package/dist/tooling/linter/implementations/source/providers.js +5 -5
- package/dist/tooling/linter/implementations/source/queries.js +1 -17
- package/dist/tooling/linter/implementations/source/shared.d.ts +12 -4
- package/dist/tooling/linter/implementations/source/shared.js +101 -46
- package/dist/tooling/linter/implementations/source/verifiers.js +0 -2
- package/dist/tooling/linter/implementations/source/views.js +2 -2
- package/dist/tooling/linter/implementations/source/workflows.js +500 -17
- package/dist/tooling/linter/policy/generated.js +14 -63
- package/dist/tooling/linter/requirements/registry.js +6 -8
- package/dist/tooling/packaging/declarations/ownership.js +1 -1
- package/dist/tooling/packaging/finalize.d.ts +1 -1
- package/dist/tooling/packaging/finalize.js +1 -1
- package/docs/admission-age.md +88 -0
- package/docs/auth-api-migration.md +55 -0
- package/docs/business-errors.md +42 -0
- package/docs/domain-definition-migration.md +44 -0
- package/docs/domain-schema-migration.md +36 -0
- package/docs/durable-workflows.md +418 -0
- package/docs/handler-dependencies.md +213 -0
- package/docs/release.md +155 -0
- package/docs/schema-cost.md +124 -0
- package/package.json +45 -16
- package/dist/application/application.d.ts +0 -28
- package/dist/application/query/execution/projection.d.ts +0 -3
- package/dist/application/query/execution/projection.js +0 -3
- package/dist/deployment/adapter/deploy/context.d.ts +0 -15
- package/dist/deployment/adapter/deploy/index.d.ts +0 -2
- package/dist/deployment/adapter/deploy/result.d.ts +0 -50
- package/dist/deployment/adapter/prepare/artifact.d.ts +0 -33
- package/dist/deployment/adapter/prepare/context.d.ts +0 -23
- package/dist/deployment/adapter/prepare/index.d.ts +0 -2
- package/dist/deployment/deploy.d.ts +0 -20
- package/dist/deployment/deploy.js +0 -31
- package/dist/deployment/release/publication/index.d.ts +0 -6
- package/dist/deployment/release/publication/index.js +0 -6
- package/dist/deployment/release/publication/manifest.d.ts +0 -3
- package/dist/deployment/release/publication/manifest.js +0 -5
- package/dist/deployment/release/publication/requirements.d.ts +0 -3
- package/dist/deployment/release/publication/requirements.js +0 -3
- package/dist/deployment/release/publication/seal.d.ts +0 -10
- package/dist/deployment/release/publication/seal.js +0 -39
- package/dist/deployment/verify/preflight/artifact.d.ts +0 -6
- package/dist/deployment/verify/preflight/artifact.js +0 -122
- package/dist/deployment/verify/preflight/publication.d.ts +0 -4
- package/dist/deployment/verify/preflight/publication.js +0 -14
- package/dist/deployment/verify/readiness/deployment.d.ts +0 -3
- package/dist/deployment/verify/readiness/deployment.js +0 -151
- package/dist/deployment/verify/readiness/publication.d.ts +0 -11
- package/dist/deployment/verify/readiness/publication.js +0 -41
- package/dist/execution/service/errors.d.ts +0 -3
- package/dist/execution/service/errors.js +0 -3
- package/dist/execution/service/publication/delivery.d.ts +0 -2
- package/dist/execution/service/publication/installation.d.ts +0 -3
- package/dist/execution/service/publication/installation.js +0 -8
- package/dist/execution/service/publication/source.d.ts +0 -3
- package/dist/execution/service/publication/source.js +0 -11
- package/dist/platform/publication/index.d.ts +0 -2
- package/dist/platform/publication/index.js +0 -2
- package/dist/tooling/cli/astrale/authority.d.ts +0 -5
- package/dist/tooling/cli/astrale/authority.js +0 -11
- package/dist/tooling/cli/astrale/executable.d.ts +0 -2
- package/dist/tooling/cli/astrale/executable.js +0 -47
- package/dist/tooling/cli/astrale/failure.d.ts +0 -6
- package/dist/tooling/cli/astrale/failure.js +0 -48
- package/dist/tooling/cli/astrale/instance.d.ts +0 -11
- package/dist/tooling/cli/astrale/instance.js +0 -52
- package/dist/tooling/cli/astrale/process.d.ts +0 -13
- package/dist/tooling/cli/astrale/process.js +0 -94
- package/dist/tooling/cli/astrale/version.d.ts +0 -18
- package/dist/tooling/cli/astrale/version.js +0 -55
- package/dist/tooling/cli/credential.d.ts +0 -2
- package/dist/tooling/cli/credential.js +0 -57
- package/dist/tooling/cli/deprecations.d.ts +0 -9
- package/dist/tooling/cli/deprecations.js +0 -15
- package/dist/tooling/cli/development/candidate.d.ts +0 -25
- package/dist/tooling/cli/development/candidate.js +0 -176
- package/dist/tooling/cli/development/deployment.d.ts +0 -16
- package/dist/tooling/cli/development/deployment.js +0 -39
- package/dist/tooling/cli/development/develop.d.ts +0 -11
- package/dist/tooling/cli/development/develop.js +0 -243
- package/dist/tooling/cli/development/lease.d.ts +0 -18
- package/dist/tooling/cli/development/lease.js +0 -163
- package/dist/tooling/cli/development/lifecycle.d.ts +0 -9
- package/dist/tooling/cli/development/lifecycle.js +0 -43
- package/dist/tooling/cli/development/project-imports.d.ts +0 -22
- package/dist/tooling/cli/development/project-imports.js +0 -39
- package/dist/tooling/cli/development/project-lock.d.ts +0 -16
- package/dist/tooling/cli/development/project-lock.js +0 -41
- package/dist/tooling/cli/development/rebuild.d.ts +0 -13
- package/dist/tooling/cli/development/rebuild.js +0 -58
- package/dist/tooling/cli/development/release-evidence.d.ts +0 -4
- package/dist/tooling/cli/development/release-evidence.js +0 -10
- package/dist/tooling/cli/development/report.d.ts +0 -6
- package/dist/tooling/cli/development/report.js +0 -14
- package/dist/tooling/cli/development/session-file.d.ts +0 -53
- package/dist/tooling/cli/development/session-file.js +0 -337
- package/dist/tooling/cli/development/source-watch.d.ts +0 -14
- package/dist/tooling/cli/development/source-watch.js +0 -140
- package/dist/tooling/cli/development/sources.d.ts +0 -7
- package/dist/tooling/cli/development/sources.js +0 -48
- package/dist/tooling/cli/development/target-lock.d.ts +0 -16
- package/dist/tooling/cli/development/target-lock.js +0 -68
- package/dist/tooling/cli/development/view.d.ts +0 -28
- package/dist/tooling/cli/development/view.js +0 -151
- package/dist/tooling/cli/environment-release.d.ts +0 -21
- package/dist/tooling/cli/environment-release.js +0 -46
- package/dist/tooling/cli/evidence.d.ts +0 -11
- package/dist/tooling/cli/evidence.js +0 -53
- package/dist/tooling/cli/installation/index.d.ts +0 -2
- package/dist/tooling/cli/installation/index.js +0 -1
- package/dist/tooling/cli/installation/observation.d.ts +0 -10
- package/dist/tooling/cli/installation/observation.js +0 -44
- package/dist/tooling/cli/installation/reconcile.d.ts +0 -32
- package/dist/tooling/cli/installation/reconcile.js +0 -122
- package/dist/tooling/linter/implementations/source/migrations.d.ts +0 -2
- package/dist/tooling/linter/implementations/source/migrations.js +0 -113
- package/dist/tooling/linter/qualification/index.d.ts +0 -10
- package/dist/tooling/linter/qualification/index.js +0 -2
- package/dist/tooling/linter/qualification/query-fixtures.d.ts +0 -2
- package/dist/tooling/linter/qualification/query-fixtures.js +0 -68
- package/dist/tooling/linter/qualification/runner.d.ts +0 -3
- package/dist/tooling/linter/qualification/runner.js +0 -6
- /package/dist/application/{application.js → domain.js} +0 -0
- /package/dist/{deployment/adapter/deploy/context.js → application/workflow/durable.js} +0 -0
- /package/dist/deployment/adapter/{deploy/index.js → bundle/bundle.js} +0 -0
- /package/dist/deployment/adapter/{deploy/result.js → bundle/file.js} +0 -0
- /package/dist/deployment/adapter/{prepare → bundle}/index.js +0 -0
- /package/dist/deployment/adapter/{prepare/artifact.js → release/command.js} +0 -0
- /package/dist/deployment/adapter/{prepare → release}/context.js +0 -0
- /package/dist/deployment/release/{publication → served}/routes.d.ts +0 -0
- /package/dist/deployment/release/{publication → served}/routes.js +0 -0
- /package/dist/execution/service/{publication → serving}/index.js +0 -0
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import * as value from '../../../platform/value/index.js';
|
|
2
|
+
/** Capture optional Object fields as absence without changing portable Array or scalar semantics. */
|
|
3
|
+
export function acceptStepOutput(input) {
|
|
4
|
+
if (input === undefined)
|
|
5
|
+
return input;
|
|
6
|
+
const captured = new WeakMap();
|
|
7
|
+
const omitted = new WeakMap();
|
|
8
|
+
const pending = [];
|
|
9
|
+
let members = 0;
|
|
10
|
+
function capture(source, depth) {
|
|
11
|
+
if (source === null || typeof source !== 'object')
|
|
12
|
+
return source;
|
|
13
|
+
const retained = captured.get(source);
|
|
14
|
+
if (retained !== undefined)
|
|
15
|
+
return retained;
|
|
16
|
+
if (depth >= value.defaultLimits.maxDepth) {
|
|
17
|
+
throw new value.BoundaryError('VALUE_LIMIT', 'Workflow Step container depth exceeds the portable limit', '');
|
|
18
|
+
}
|
|
19
|
+
const array = Array.isArray(source);
|
|
20
|
+
const snapshot = array ? [] : Object.create(Object.getPrototypeOf(source));
|
|
21
|
+
captured.set(source, snapshot);
|
|
22
|
+
pending.push({ source, snapshot, depth, array });
|
|
23
|
+
return snapshot;
|
|
24
|
+
}
|
|
25
|
+
const snapshot = capture(input, 0);
|
|
26
|
+
for (let index = 0; index < pending.length; index += 1) {
|
|
27
|
+
const { source, snapshot: container, depth, array } = pending[index];
|
|
28
|
+
const descriptors = Object.getOwnPropertyDescriptors(source);
|
|
29
|
+
const keys = Reflect.ownKeys(descriptors);
|
|
30
|
+
// Bound this preparatory capture too; canonical admission subsequently checks each path.
|
|
31
|
+
members += keys.length - (array ? 1 : 0);
|
|
32
|
+
if (members > value.defaultLimits.maxMembers) {
|
|
33
|
+
throw new value.BoundaryError('VALUE_LIMIT', 'Workflow Step member count exceeds the portable limit', '');
|
|
34
|
+
}
|
|
35
|
+
const absent = new Set();
|
|
36
|
+
for (const key of keys) {
|
|
37
|
+
const descriptor = Object.getOwnPropertyDescriptor(descriptors, key)
|
|
38
|
+
.value;
|
|
39
|
+
if ('value' in descriptor) {
|
|
40
|
+
if (!array &&
|
|
41
|
+
typeof key === 'string' &&
|
|
42
|
+
descriptor.enumerable &&
|
|
43
|
+
descriptor.value === undefined) {
|
|
44
|
+
// Validate this member's key, descriptor and budget before interpreting its absence.
|
|
45
|
+
descriptor.value = null;
|
|
46
|
+
absent.add(key);
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
descriptor.value = capture(descriptor.value, depth + 1);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
Object.defineProperty(container, key, descriptor);
|
|
53
|
+
}
|
|
54
|
+
if (absent.size > 0)
|
|
55
|
+
omitted.set(container, absent);
|
|
56
|
+
}
|
|
57
|
+
// The canonical owner still rejects cycles, invalid descriptors/prototypes/keys and lossy values.
|
|
58
|
+
const output = value.accept(snapshot);
|
|
59
|
+
const pruning = [{ snapshot, output }];
|
|
60
|
+
for (let index = 0; index < pruning.length; index += 1) {
|
|
61
|
+
const pair = pruning[index];
|
|
62
|
+
if (pair.output === null || typeof pair.output !== 'object')
|
|
63
|
+
continue;
|
|
64
|
+
const source = pair.snapshot;
|
|
65
|
+
const target = pair.output;
|
|
66
|
+
for (const key of omitted.get(source) ?? [])
|
|
67
|
+
delete target[key];
|
|
68
|
+
for (const key of Object.keys(target)) {
|
|
69
|
+
pruning.push({ snapshot: source[key], output: target[key] });
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return output;
|
|
73
|
+
}
|
|
@@ -3,15 +3,17 @@ import type { ActionAddressOf, ActionOutputOf, CallableAtAddress, LocalCallable,
|
|
|
3
3
|
import type { DeclaredErrors, NoDeclaredErrors } from '../error/index.js';
|
|
4
4
|
import type { Integrations } from '../integration/index.js';
|
|
5
5
|
import type { WorkflowContext } from './context.js';
|
|
6
|
-
export type WorkflowCallable<Callable> = Callable extends ResolvedCallable ? Callable extends {
|
|
7
|
-
readonly auth: 'anonymous';
|
|
8
|
-
} ? never : CallableOutputOf<Callable> extends {
|
|
6
|
+
export type WorkflowCallable<Callable> = Callable extends ResolvedCallable ? CallableOutputOf<Callable> extends {
|
|
9
7
|
readonly mode: 'value';
|
|
10
8
|
} ? Callable : never : never;
|
|
11
9
|
export type WorkflowAddress<Schema extends schema.DomainSchema> = ActionAddressOf<WorkflowCallable<LocalCallable<ResolvedDomainOf<Schema>>>>;
|
|
12
10
|
export type CallableAtWorkflowAddress<Schema extends schema.DomainSchema, Address extends WorkflowAddress<Schema>> = WorkflowCallable<Extract<CallableAtAddress<Schema, Address>, ResolvedCallable>>;
|
|
13
11
|
export type Workflow<Callable extends ResolvedCallable, Definitions extends Integrations = Readonly<Record<never, never>>, DomainValue extends Domain = Domain, Errors extends DeclaredErrors = NoDeclaredErrors> = (context: WorkflowContext<Callable, DomainValue, Definitions, Errors>) => Promise<ActionOutputOf<Callable>>;
|
|
14
12
|
declare const WORKFLOW_SCHEMA: unique symbol;
|
|
13
|
+
/** Options of one Workflow implementation. */
|
|
14
|
+
export interface WorkflowOptions<out Errors extends DeclaredErrors = DeclaredErrors> {
|
|
15
|
+
readonly errors?: Errors;
|
|
16
|
+
}
|
|
15
17
|
/** Sealed multi-step Workflow awaiting canonical callable association by Runtime admission. */
|
|
16
18
|
export interface WorkflowDefinition<Schema extends schema.DomainSchema = schema.DomainSchema, Address extends WorkflowAddress<Schema> = WorkflowAddress<Schema>, Definitions extends Integrations = Readonly<Record<never, never>>, Errors extends DeclaredErrors = NoDeclaredErrors> {
|
|
17
19
|
readonly kind: 'workflow';
|
|
@@ -1,27 +1,69 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
readonly identity?: string;
|
|
6
|
-
}
|
|
1
|
+
import type { DeploymentConfiguration } from '../address/index.js';
|
|
2
|
+
import type { Bundler } from './bundle/index.js';
|
|
3
|
+
import type { AdapterCommand, ConfigureContext, ListContext, ListedDeployment, Placement, PlacementContext, ReleaseDeployContext, ReleaseDeployResult, RetainContext } from './release/index.js';
|
|
4
|
+
/** What `admit` receives when `defineProject` binds an adapter to one Environment. */
|
|
7
5
|
export interface AdapterEnvironmentContext {
|
|
8
6
|
readonly environment: string;
|
|
9
|
-
readonly installation?: InstallationTarget;
|
|
10
7
|
}
|
|
8
|
+
/**
|
|
9
|
+
* A provider adapter (adapter interface v2). It bundles a Build without any Environment, freezes
|
|
10
|
+
* an Environment's configuration, says where the host places that Environment's deployments, and
|
|
11
|
+
* deploys one sealed release as one immutable deployment, created or reused. It never installs:
|
|
12
|
+
* `astrale domain install <url>` installs a deployment by its URL.
|
|
13
|
+
*
|
|
14
|
+
*/
|
|
11
15
|
export interface Adapter<Parameters extends object = object> {
|
|
12
16
|
readonly kind: 'adapter';
|
|
13
17
|
readonly name: string;
|
|
14
18
|
readonly version: string;
|
|
19
|
+
/**
|
|
20
|
+
* Produces the environment-free bytes `astrale-domain build` identifies by their build digest
|
|
21
|
+
* and `deployRelease` receives as its Bundle. Adapters that share one bundler share one build.
|
|
22
|
+
*/
|
|
23
|
+
readonly bundler: Bundler;
|
|
24
|
+
/** Refuse parameters that cannot serve this Environment, before any effect. */
|
|
15
25
|
admit?(parameters: Parameters, context: AdapterEnvironmentContext): void;
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
26
|
+
/**
|
|
27
|
+
* Freeze what a deployment of this Environment binds beside its build: a `FrozenConfigurationV1`
|
|
28
|
+
* for a host that binds a generated Worker's settings itself, a `WorkerConfigurationV1` for a
|
|
29
|
+
* Worker host that binds only what it is asked (Admin's Services). Pure.
|
|
30
|
+
*/
|
|
31
|
+
configure(parameters: Parameters, context: ConfigureContext): DeploymentConfiguration;
|
|
32
|
+
/** Where the host places this Environment's deployments. No effect at the host. */
|
|
33
|
+
placement(parameters: Parameters, context: PlacementContext): Promise<Placement>;
|
|
34
|
+
/** Create, or reuse, the immutable deployment of one sealed release. */
|
|
35
|
+
deployRelease(parameters: Parameters, context: ReleaseDeployContext): Promise<ReleaseDeployResult>;
|
|
36
|
+
/**
|
|
37
|
+
* The deployments of one Environment of one origin the host keeps for the caller, each with
|
|
38
|
+
* where it is called. No effect at the host.
|
|
39
|
+
*/
|
|
40
|
+
list?(parameters: Parameters, context: ListContext): Promise<readonly ListedDeployment[]>;
|
|
41
|
+
/**
|
|
42
|
+
* Keep one published deployment where the host has no registry principal to mark it (a platform
|
|
43
|
+
* namespace). Called only after its registry publication commits. Rejects with a `RetainRefusal` when the
|
|
44
|
+
* host can no longer keep it (absent or retired), which no rerun changes; any other rejection is
|
|
45
|
+
* transient. Absent: the registry marks it (Admin's Services).
|
|
46
|
+
*/
|
|
47
|
+
retain?(parameters: Parameters, context: RetainContext): Promise<void>;
|
|
48
|
+
/**
|
|
49
|
+
* Provider commands, by name: `astrale-domain <adapter name> <command> <environment>` runs one
|
|
50
|
+
* on an Environment this adapter deploys (adapter-cloudflare's `plan` and `init` provision the
|
|
51
|
+
* host on the operator's own account). Every effect is the adapter's; the CLI only routes.
|
|
52
|
+
*/
|
|
53
|
+
readonly commands?: Readonly<Record<string, AdapterCommand<Parameters>>>;
|
|
54
|
+
secretsFile?(parameters: Parameters): string | undefined;
|
|
19
55
|
}
|
|
56
|
+
/** What `defineAdapter` admits for an `Adapter` (adapter interface v2). */
|
|
20
57
|
export interface AdapterInput<Parameters extends object> {
|
|
21
58
|
readonly name: string;
|
|
22
59
|
readonly version: string;
|
|
60
|
+
readonly bundler: Bundler;
|
|
23
61
|
admit?(parameters: Parameters, context: AdapterEnvironmentContext): void;
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
62
|
+
configure(parameters: Parameters, context: ConfigureContext): DeploymentConfiguration;
|
|
63
|
+
placement(parameters: Parameters, context: PlacementContext): Promise<Placement>;
|
|
64
|
+
deployRelease(parameters: Parameters, context: ReleaseDeployContext): Promise<ReleaseDeployResult>;
|
|
65
|
+
list?(parameters: Parameters, context: ListContext): Promise<readonly ListedDeployment[]>;
|
|
66
|
+
retain?(parameters: Parameters, context: RetainContext): Promise<void>;
|
|
67
|
+
readonly commands?: Readonly<Record<string, AdapterCommand<Parameters>>>;
|
|
68
|
+
secretsFile?(parameters: Parameters): string | undefined;
|
|
27
69
|
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { Build, BuildDigest, BuildManifestV1 } from '../../build/index.js';
|
|
2
|
+
import type { ResolvedRuntimeReference } from '../../runtime/index.js';
|
|
3
|
+
import type { ArtifactFile, PreparedArtifactFile } from './file.js';
|
|
4
|
+
/**
|
|
5
|
+
* Produces the environment-free bytes of one Build. It takes no Environment, address, key or
|
|
6
|
+
* secret, which is what makes its build digest identical in every Environment. Adapters that share
|
|
7
|
+
* a bundler share their build.
|
|
8
|
+
*/
|
|
9
|
+
export interface Bundler {
|
|
10
|
+
readonly id: string;
|
|
11
|
+
readonly version: string;
|
|
12
|
+
bundle(context: BundleContext): Promise<BundleSource>;
|
|
13
|
+
}
|
|
14
|
+
export interface BundleContext<BuildValue extends Build = Build> {
|
|
15
|
+
readonly projectDir: string;
|
|
16
|
+
readonly build: BuildValue;
|
|
17
|
+
readonly runtime: ResolvedRuntimeReference;
|
|
18
|
+
/** Parent-owned lifecycle cancellation shared by every bundling process. */
|
|
19
|
+
readonly signal: AbortSignal;
|
|
20
|
+
/** Optional observer of authored paths read outside the Domain/Runtime module graph. */
|
|
21
|
+
readonly recordSource?: (path: string) => void;
|
|
22
|
+
}
|
|
23
|
+
/** Untrusted bundler output admitted by verify/preflight. */
|
|
24
|
+
export interface BundleSource {
|
|
25
|
+
readonly entrypoint: string;
|
|
26
|
+
readonly files: readonly ArtifactFile[];
|
|
27
|
+
}
|
|
28
|
+
/** Exact environment-free bytes of one Build, identified by their build digest. */
|
|
29
|
+
export interface Bundle<BuildValue extends Build = Build> {
|
|
30
|
+
readonly kind: 'bundle';
|
|
31
|
+
readonly build: BuildValue;
|
|
32
|
+
readonly manifest: BuildManifestV1;
|
|
33
|
+
readonly digest: BuildDigest;
|
|
34
|
+
readonly entrypoint: string;
|
|
35
|
+
readonly files: readonly PreparedArtifactFile[];
|
|
36
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** One file a bundler produced, before admission. */
|
|
2
|
+
export interface ArtifactFile {
|
|
3
|
+
readonly path: string;
|
|
4
|
+
readonly content: Uint8Array;
|
|
5
|
+
}
|
|
6
|
+
/** One admitted file: a detached copy of its bytes on every read. */
|
|
7
|
+
export interface PreparedArtifactFile {
|
|
8
|
+
readonly path: string;
|
|
9
|
+
bytes(): Uint8Array;
|
|
10
|
+
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { Deployment } from '../deployment.js';
|
|
2
2
|
import type { Adapter, AdapterInput } from './adapter.js';
|
|
3
|
-
/** Capture one receiver-bound
|
|
3
|
+
/** Capture one receiver-bound adapter that deploys immutable DomainRelease v4 deployments. */
|
|
4
4
|
export declare function defineAdapter<Parameters extends object>(input: AdapterInput<Parameters>): Adapter<Parameters>;
|
|
5
|
-
/** Bind one
|
|
6
|
-
export declare function defineDeployment<const Parameters extends object>(adapter: Adapter<Parameters>, parameters: Parameters): Deployment<Parameters
|
|
5
|
+
/** Bind one admitted adapter to the parameters of one Project Environment. */
|
|
6
|
+
export declare function defineDeployment<const Parameters extends object>(adapter: Adapter<Parameters>, parameters: Parameters): Deployment<Parameters, Adapter<Parameters>>;
|
|
7
|
+
/** Whether defineAdapter admitted this immutable-deployment adapter. */
|
|
7
8
|
export declare function isAdapter(input: unknown): input is Adapter;
|
|
@@ -1,29 +1,53 @@
|
|
|
1
1
|
import { captureDeployment } from '../deployment.js';
|
|
2
2
|
const admittedAdapters = new WeakSet();
|
|
3
|
-
|
|
3
|
+
const admittedBundlers = new WeakMap();
|
|
4
|
+
/** Every field an immutable-deployment adapter may declare. */
|
|
5
|
+
const FIELDS = [
|
|
6
|
+
'name',
|
|
7
|
+
'version',
|
|
8
|
+
'bundler',
|
|
9
|
+
'admit',
|
|
10
|
+
'configure',
|
|
11
|
+
'placement',
|
|
12
|
+
'deployRelease',
|
|
13
|
+
'list',
|
|
14
|
+
'retain',
|
|
15
|
+
'commands',
|
|
16
|
+
'secretsFile',
|
|
17
|
+
];
|
|
18
|
+
const RELEASE_OPERATIONS = ['configure', 'placement', 'deployRelease'];
|
|
19
|
+
const OPERATIONS = ['admit', ...RELEASE_OPERATIONS, 'list', 'retain', 'secretsFile'];
|
|
20
|
+
const COMMAND_NAME = /^[a-z][a-z0-9-]{0,31}$/u;
|
|
21
|
+
/** Capture one receiver-bound adapter that deploys immutable DomainRelease v4 deployments. */
|
|
4
22
|
export function defineAdapter(input) {
|
|
5
23
|
const value = record(input, 'Adapter definition');
|
|
6
|
-
|
|
24
|
+
if (Reflect.ownKeys(value).some((key) => !FIELDS.includes(key))) {
|
|
25
|
+
invalidFields();
|
|
26
|
+
}
|
|
7
27
|
const name = stableName(input.name);
|
|
8
28
|
const version = stableName(input.version);
|
|
29
|
+
const missing = RELEASE_OPERATIONS.filter((key) => value[key] === undefined);
|
|
30
|
+
if (missing.length > 0) {
|
|
31
|
+
throw new TypeError(`Adapter ${name} must declare ${missing.join(', ')} to deploy immutable releases.`);
|
|
32
|
+
}
|
|
33
|
+
if (value.bundler === undefined)
|
|
34
|
+
missingBundler(name);
|
|
35
|
+
const bundler = admitBundler(input.bundler);
|
|
9
36
|
const receiver = Object.freeze({ ...input });
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
const deploy = capture(receiver, 'deploy');
|
|
13
|
-
const secretsFile = optional(receiver, 'secretsFile');
|
|
37
|
+
const operations = Object.fromEntries(OPERATIONS.filter((key) => RELEASE_OPERATIONS.includes(key) ||
|
|
38
|
+
value[key] !== undefined).map((key) => [key, capture(receiver, key)]));
|
|
14
39
|
const adapter = Object.freeze({
|
|
15
40
|
kind: 'adapter',
|
|
16
41
|
name,
|
|
17
42
|
version,
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
...(secretsFile === undefined ? {} : { secretsFile }),
|
|
43
|
+
bundler,
|
|
44
|
+
...operations,
|
|
45
|
+
...(value.commands === undefined ? {} : { commands: admitCommands(name, value.commands) }),
|
|
22
46
|
});
|
|
23
47
|
admittedAdapters.add(adapter);
|
|
24
48
|
return adapter;
|
|
25
49
|
}
|
|
26
|
-
/** Bind one
|
|
50
|
+
/** Bind one admitted adapter to the parameters of one Project Environment. */
|
|
27
51
|
export function defineDeployment(adapter, parameters) {
|
|
28
52
|
if (!isAdapter(adapter))
|
|
29
53
|
throw new TypeError('Deployment Adapter is not admitted.');
|
|
@@ -32,12 +56,39 @@ export function defineDeployment(adapter, parameters) {
|
|
|
32
56
|
}
|
|
33
57
|
return captureDeployment(adapter, Object.freeze({ ...parameters }));
|
|
34
58
|
}
|
|
59
|
+
/** Whether defineAdapter admitted this immutable-deployment adapter. */
|
|
35
60
|
export function isAdapter(input) {
|
|
36
61
|
return input !== null && typeof input === 'object' && admittedAdapters.has(input);
|
|
37
62
|
}
|
|
38
|
-
|
|
63
|
+
/**
|
|
64
|
+
* Capture one receiver-bound bundler; its id and version name the bytes it produces. Adapters that
|
|
65
|
+
* declare one bundler object receive one admitted Bundler, so `astrale-domain build` bundles once
|
|
66
|
+
* for all of them.
|
|
67
|
+
*/
|
|
68
|
+
function admitBundler(input) {
|
|
69
|
+
const value = record(input, 'Bundler');
|
|
70
|
+
if (Reflect.ownKeys(value).some((key) => key !== 'id' && key !== 'version' && key !== 'bundle') ||
|
|
71
|
+
typeof input.bundle !== 'function') {
|
|
72
|
+
throw new TypeError('Bundler must declare exactly id, version and bundle.');
|
|
73
|
+
}
|
|
74
|
+
const admitted = admittedBundlers.get(value);
|
|
75
|
+
if (admitted !== undefined &&
|
|
76
|
+
admitted.declared === input.bundle &&
|
|
77
|
+
admitted.bundler.id === input.id &&
|
|
78
|
+
admitted.bundler.version === input.version) {
|
|
79
|
+
return admitted.bundler;
|
|
80
|
+
}
|
|
81
|
+
const bundler = Object.freeze({
|
|
82
|
+
id: stableName(input.id, 'Bundler id'),
|
|
83
|
+
version: stableName(input.version, 'Bundler version'),
|
|
84
|
+
bundle: input.bundle.bind(input),
|
|
85
|
+
});
|
|
86
|
+
admittedBundlers.set(value, { declared: input.bundle, bundler });
|
|
87
|
+
return bundler;
|
|
88
|
+
}
|
|
89
|
+
function stableName(input, label = 'Adapter name') {
|
|
39
90
|
if (typeof input !== 'string' || input.length === 0 || input.trim() !== input) {
|
|
40
|
-
throw new TypeError(
|
|
91
|
+
throw new TypeError(`${label} must be a non-empty stable string.`);
|
|
41
92
|
}
|
|
42
93
|
return input;
|
|
43
94
|
}
|
|
@@ -47,20 +98,53 @@ function record(input, label) {
|
|
|
47
98
|
}
|
|
48
99
|
return input;
|
|
49
100
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
101
|
+
/** Every adapter declares the bundler of the bytes it deploys. */
|
|
102
|
+
function missingBundler(name) {
|
|
103
|
+
throw new TypeError(`Adapter ${name} declares no bundler. ` +
|
|
104
|
+
'Every adapter declares `bundler`: the bundler of the environment-free bytes ' +
|
|
105
|
+
'`astrale-domain build` identifies by their build digest and `astrale-domain deploy` hands ' +
|
|
106
|
+
'to the adapter as its Bundle (a Cloudflare Worker adapter declares ' +
|
|
107
|
+
'`cloudflareWorkerBundler` from `@astrale-os/adapter-cloudflare/build`).');
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Capture the provider commands of one adapter: each a lower-case name, a one-line `summary`,
|
|
111
|
+
* optional `options` (name to one line of help) and a receiver-bound `run`.
|
|
112
|
+
*/
|
|
113
|
+
function admitCommands(adapter, input) {
|
|
114
|
+
const commands = record(input, `Adapter ${adapter} commands`);
|
|
115
|
+
const admitted = {};
|
|
116
|
+
for (const name of Reflect.ownKeys(commands)) {
|
|
117
|
+
if (typeof name !== 'string' || !COMMAND_NAME.test(name)) {
|
|
118
|
+
throw new TypeError(`Adapter ${adapter} declares an invalid command name.`);
|
|
119
|
+
}
|
|
120
|
+
const command = record(commands[name], `Adapter ${adapter} command ${name}`);
|
|
121
|
+
const options = command.options === undefined ? {} : record(command.options, 'Command options');
|
|
122
|
+
if (Reflect.ownKeys(command).some((key) => key !== 'summary' && key !== 'options' && key !== 'run') ||
|
|
123
|
+
typeof command.summary !== 'string' ||
|
|
124
|
+
command.summary.length === 0 ||
|
|
125
|
+
typeof command.run !== 'function' ||
|
|
126
|
+
Reflect.ownKeys(options).some((key) => typeof key !== 'string' ||
|
|
127
|
+
!COMMAND_NAME.test(key) ||
|
|
128
|
+
key === 'json' ||
|
|
129
|
+
typeof options[key] !== 'string')) {
|
|
130
|
+
throw new TypeError(`Adapter ${adapter} command ${name} must declare a summary, string options other than ` +
|
|
131
|
+
'json and run.');
|
|
132
|
+
}
|
|
133
|
+
admitted[name] = Object.freeze({
|
|
134
|
+
summary: command.summary,
|
|
135
|
+
options: Object.freeze({ ...options }),
|
|
136
|
+
run: command.run.bind(command),
|
|
137
|
+
});
|
|
55
138
|
}
|
|
139
|
+
return Object.freeze(admitted);
|
|
140
|
+
}
|
|
141
|
+
function invalidFields() {
|
|
142
|
+
throw new TypeError('Adapter definition contains missing or unknown fields.');
|
|
56
143
|
}
|
|
57
144
|
function capture(receiver, key) {
|
|
58
|
-
const method = receiver
|
|
145
|
+
const method = Reflect.get(receiver, key);
|
|
59
146
|
if (typeof method !== 'function') {
|
|
60
|
-
throw new TypeError(`Adapter ${
|
|
147
|
+
throw new TypeError(`Adapter ${key} operation is invalid.`);
|
|
61
148
|
}
|
|
62
149
|
return method.bind(receiver);
|
|
63
150
|
}
|
|
64
|
-
function optional(receiver, key) {
|
|
65
|
-
return receiver[key] === undefined ? undefined : capture(receiver, key);
|
|
66
|
-
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
export type { Adapter, AdapterEnvironmentContext, AdapterInput
|
|
1
|
+
export type { Adapter, AdapterEnvironmentContext, AdapterInput } from './adapter.js';
|
|
2
2
|
export { defineAdapter, defineDeployment, isAdapter } from './define.js';
|
|
3
|
-
export
|
|
4
|
-
export type * from './
|
|
3
|
+
export { RetainRefusal } from './release/refusal.js';
|
|
4
|
+
export type * from './bundle/index.js';
|
|
5
|
+
export type * from './release/index.js';
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One command an adapter declares for its provider (`astrale-domain <adapter> <command>
|
|
3
|
+
* <environment>`), such as adapter-cloudflare's `plan` and `init`, which provision the host on the
|
|
4
|
+
* operator's own account. The CLI only routes: it loads the Project, selects the Environment, checks
|
|
5
|
+
* that its adapter is the one named and declares the command, and admits the options the command
|
|
6
|
+
* declares; everything the command does is the adapter's.
|
|
7
|
+
*/
|
|
8
|
+
export interface AdapterCommand<Parameters extends object = object> {
|
|
9
|
+
/** One line: what the command does, for help. */
|
|
10
|
+
readonly summary: string;
|
|
11
|
+
/** The options it takes, `--<name> <value>`, each with one line of help. */
|
|
12
|
+
readonly options?: Readonly<Record<string, string>>;
|
|
13
|
+
run(parameters: Parameters, context: AdapterCommandContext): Promise<AdapterCommandResult>;
|
|
14
|
+
}
|
|
15
|
+
/** What an adapter command receives. */
|
|
16
|
+
export interface AdapterCommandContext {
|
|
17
|
+
readonly environment: string;
|
|
18
|
+
/** Parent-owned lifecycle cancellation. */
|
|
19
|
+
readonly signal: AbortSignal;
|
|
20
|
+
/** The options given, each one the command declares. */
|
|
21
|
+
readonly options: Readonly<Record<string, string>>;
|
|
22
|
+
}
|
|
23
|
+
/** What an adapter command answers; a command that cannot run rejects instead. */
|
|
24
|
+
export interface AdapterCommandResult {
|
|
25
|
+
/** 0 done; 1 refused or blocked (the command ran, and says why in `warnings`). */
|
|
26
|
+
readonly exitCode: 0 | 1;
|
|
27
|
+
/** Lines for a person, printed on stdout without `--json`. */
|
|
28
|
+
readonly lines: readonly string[];
|
|
29
|
+
/** Lines for stderr, printed in either case. */
|
|
30
|
+
readonly warnings?: readonly string[];
|
|
31
|
+
/** The JSON-serializable result `--json` prints. */
|
|
32
|
+
readonly result: unknown;
|
|
33
|
+
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import type { DeploymentCommitV1, DeploymentConfiguration, LineAddressing } from '../../address/index.js';
|
|
2
|
+
import type { Release } from '../../release/index.js';
|
|
3
|
+
import type { Bundle } from '../bundle/index.js';
|
|
4
|
+
/**
|
|
5
|
+
* What `configure` receives: the Environment whose configuration it freezes, and the names of the
|
|
6
|
+
* secrets its deployment binds. Never a secret value: a rotated value is not another configuration,
|
|
7
|
+
* a name added or removed is.
|
|
8
|
+
*/
|
|
9
|
+
export interface ConfigureContext {
|
|
10
|
+
readonly environment: string;
|
|
11
|
+
/**
|
|
12
|
+
* The names of the Environment's current secrets (the adapter's `secretsFile`), sorted and
|
|
13
|
+
* unique: exactly the secrets `deployRelease` receives, which the configuration declares.
|
|
14
|
+
*/
|
|
15
|
+
readonly secrets: readonly string[];
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Where the host places the deployments of one Environment. `routingDomain` is the DNS name every
|
|
19
|
+
* deployment URL ends with, `https://<label>.<routingDomain>`; `addressing` is how its line reads:
|
|
20
|
+
* `readable` for platform lines, `opaque` (the fingerprint alone) for tenant lines.
|
|
21
|
+
*/
|
|
22
|
+
export interface Placement {
|
|
23
|
+
readonly addressing: LineAddressing;
|
|
24
|
+
readonly routingDomain: string;
|
|
25
|
+
}
|
|
26
|
+
/** What `placement` receives. It answers without any effect at the host. */
|
|
27
|
+
export interface PlacementContext {
|
|
28
|
+
readonly environment: string;
|
|
29
|
+
/** Parent-owned lifecycle cancellation. */
|
|
30
|
+
readonly signal: AbortSignal;
|
|
31
|
+
/** Optional command-scoped identity override (`--as`). */
|
|
32
|
+
readonly identity?: string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Everything `deployRelease` deploys: one sealed release as one immutable deployment at
|
|
36
|
+
* `release.url`, which is `deploymentUrl(label, placement.routingDomain)` and the release's issuer.
|
|
37
|
+
* The SDK computes each value before the call, from the Build, `configure` and `placement`, so the
|
|
38
|
+
* adapter never derives an address or seals anything itself.
|
|
39
|
+
*/
|
|
40
|
+
export interface ReleaseDeployContext {
|
|
41
|
+
readonly projectDir: string;
|
|
42
|
+
readonly environment: string;
|
|
43
|
+
/** Optional command-scoped identity override (`--as`). */
|
|
44
|
+
readonly identity?: string;
|
|
45
|
+
/** Optional command-scoped credential; trusted adapters must neither retain nor disclose it. */
|
|
46
|
+
readonly credential?: string;
|
|
47
|
+
/**
|
|
48
|
+
* The Environment's current secrets. A new deployment binds them; a reused deployment has its
|
|
49
|
+
* own declared secrets rewritten in place. A deploy never writes another deployment's secrets.
|
|
50
|
+
*/
|
|
51
|
+
readonly secrets: Readonly<Record<string, string>>;
|
|
52
|
+
/** The environment-free bytes of the adapter's `bundler`, identified by `bundle.digest`. */
|
|
53
|
+
readonly bundle: Bundle;
|
|
54
|
+
/** What `configure` froze for this Environment. */
|
|
55
|
+
readonly configuration: DeploymentConfiguration;
|
|
56
|
+
/** Where `placement` said the host places the deployment. */
|
|
57
|
+
readonly placement: Placement;
|
|
58
|
+
/**
|
|
59
|
+
* `<line>-<content>`: the DNS label of the deployment, which is also its provider script. Its
|
|
60
|
+
* content covers `bundle.digest` and `configuration`, so one label serves one release.
|
|
61
|
+
*/
|
|
62
|
+
readonly label: string;
|
|
63
|
+
/**
|
|
64
|
+
* The release the SDK sealed for this deployment before the call: its `document` is the
|
|
65
|
+
* `DomainRelease` v4 the deployment serves at `release.json`, its `url` the deployment URL.
|
|
66
|
+
*/
|
|
67
|
+
readonly release: Release;
|
|
68
|
+
/**
|
|
69
|
+
* The commit this deploy runs from, which the record of a deployment it creates declares. The
|
|
70
|
+
* label does not cover it: a reused deployment keeps the record, and so the commit, of the deploy
|
|
71
|
+
* that created it, and an adapter never refuses a reuse for another commit.
|
|
72
|
+
*/
|
|
73
|
+
readonly commit: DeploymentCommitV1 | null;
|
|
74
|
+
/** Parent-owned lifecycle cancellation shared by every provider effect. */
|
|
75
|
+
readonly signal: AbortSignal;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* What `list` receives: the origin and the Environment whose deployments the host lists for the
|
|
79
|
+
* caller. It answers without any effect at the host.
|
|
80
|
+
*/
|
|
81
|
+
export interface ListContext {
|
|
82
|
+
readonly origin: string;
|
|
83
|
+
readonly environment: string;
|
|
84
|
+
/** Parent-owned lifecycle cancellation. */
|
|
85
|
+
readonly signal: AbortSignal;
|
|
86
|
+
/** Optional command-scoped identity override (`--as`). */
|
|
87
|
+
readonly identity?: string;
|
|
88
|
+
}
|
|
89
|
+
/** What `retain` receives: the label of the published deployment to keep. */
|
|
90
|
+
export interface RetainContext {
|
|
91
|
+
readonly label: string;
|
|
92
|
+
readonly signal: AbortSignal;
|
|
93
|
+
readonly identity?: string;
|
|
94
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export type { ConfigureContext, ListContext, Placement, PlacementContext, ReleaseDeployContext, RetainContext, } from './context.js';
|
|
2
|
+
export type { AdapterCommand, AdapterCommandContext, AdapterCommandResult } from './command.js';
|
|
3
|
+
export type { DeploymentCallTarget, ListedDeployment } from './list.js';
|
|
4
|
+
export type { DeploymentSecretsState, FailedReleaseDeployResult, MutationKnowledge, ReadyReleaseDeployResult, ReleaseDeploymentPhase, ReleaseDeployResult, } from './result.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { DeploymentSummaryV1 } from '../../address/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Where one listed deployment is called on its host, so that an operator can act on it:
|
|
4
|
+
*
|
|
5
|
+
* - `services`: a deployment Admin's Services hosts, called on the Admin instance with
|
|
6
|
+
* `astrale call "<node>.method.<method>" --admin` (`--admin=<admin>` when `admin` names the
|
|
7
|
+
* Admin bookmark). `path` is the deployment's node, `@<id>`, qualified by its class,
|
|
8
|
+
* `@<id>::services.astrale.ai:class.CloudflareDeployment`, whose only Method is `retire`.
|
|
9
|
+
* `service` is the node of the Service it is a version of,
|
|
10
|
+
* `@<serviceId>::services.astrale.ai:class.CloudflareService`, whose Methods act on the Service
|
|
11
|
+
* and the deployment it currently serves: `promote` (this deployment's label rolls the Service
|
|
12
|
+
* back or forward to it), `setSecret` and `secrets`, `setSchedule` and `schedules`, `logs`,
|
|
13
|
+
* `transfer` and `delete`.
|
|
14
|
+
* - `namespace`: a deployment of a Cloudflare dispatch namespace (adapter-cloudflare's namespace
|
|
15
|
+
* mode), which has no Services node: the namespace and the script, which the hosting kit
|
|
16
|
+
* (`@astrale-os/adapter-cloudflare/hosting`) retires, points a name at or schedules.
|
|
17
|
+
*/
|
|
18
|
+
export type DeploymentCallTarget = {
|
|
19
|
+
readonly kind: 'services';
|
|
20
|
+
readonly path: string;
|
|
21
|
+
readonly service: string;
|
|
22
|
+
/** The Admin bookmark the deployment is reached through; the CLI's own Admin target when absent. */
|
|
23
|
+
readonly admin?: string;
|
|
24
|
+
} | {
|
|
25
|
+
readonly kind: 'namespace';
|
|
26
|
+
readonly namespace: string;
|
|
27
|
+
readonly script: string;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* One deployment as an adapter's `list` returns it: what its host knows of it, its record as the
|
|
31
|
+
* host stores it, and where it is called. Admin's Services keeps every deployment until it is
|
|
32
|
+
* retired and counts no call: its deployments are `published` and `withdrawn` once retiring. A
|
|
33
|
+
* Cloudflare dispatch namespace keeps no retention: its rows carry none, and carry their creation
|
|
34
|
+
* instant and key only while their script exists. Deployments have no last-call or expiry clock.
|
|
35
|
+
*
|
|
36
|
+
* The adapter does not admit the record. The listing admits it with `acceptDeploymentRecord`, and a
|
|
37
|
+
* record it refuses (one a host on an older SDK still admits, say) never fails the listing: that
|
|
38
|
+
* deployment is listed from the facts its host owns.
|
|
39
|
+
*/
|
|
40
|
+
export interface ListedDeployment extends Omit<DeploymentSummaryV1, 'record'> {
|
|
41
|
+
/**
|
|
42
|
+
* The record as the host stores it, unadmitted, whatever value that is (JSON `null` included).
|
|
43
|
+
* Absent when the host keeps no record of the deployment: a dispatch namespace keeps none for a
|
|
44
|
+
* label it only retired.
|
|
45
|
+
*/
|
|
46
|
+
readonly record?: unknown;
|
|
47
|
+
/**
|
|
48
|
+
* Whether the stable URL of the deployment's Service serves it. Present only where the host has
|
|
49
|
+
* Services (Admin's Services); a dispatch namespace has none.
|
|
50
|
+
*/
|
|
51
|
+
readonly current?: boolean;
|
|
52
|
+
readonly callTarget: DeploymentCallTarget;
|
|
53
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Why the host can no longer keep one published deployment (`Adapter.retain`): it is `absent`
|
|
3
|
+
* (the host holds no deployment of that label, or it was deleted) or `retired` (withdrawn, never
|
|
4
|
+
* served again). No rerun keeps it; a new version publishes a new deployment. Any other rejection
|
|
5
|
+
* of `retain` is transient: once it has passed, a rerun keeps the deployment.
|
|
6
|
+
*/
|
|
7
|
+
export declare class RetainRefusal extends Error {
|
|
8
|
+
readonly reason: 'absent' | 'retired';
|
|
9
|
+
constructor(reason: RetainRefusal['reason'], message: string);
|
|
10
|
+
}
|