@astrale-os/sdk 0.6.0-beta.2 → 0.6.0-beta.21
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 +74 -14
- 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 +17 -8
- package/dist/application/action/define.d.ts +3 -3
- package/dist/application/action/index.d.ts +1 -1
- package/dist/application/define.d.ts +5 -5
- package/dist/application/define.js +13 -13
- package/dist/application/dependency/index.d.ts +1 -1
- package/dist/application/dependency/invoker.d.ts +11 -6
- package/dist/application/domain.d.ts +28 -0
- package/dist/application/index.d.ts +3 -3
- package/dist/application/index.js +1 -1
- 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/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 +2 -0
- package/dist/application/runtime/workflows.js +5 -0
- 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 +3 -3
- package/dist/application/workflow/define.js +19 -3
- package/dist/application/workflow/durable.d.ts +83 -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 +12 -0
- package/dist/deployment/adapter/adapter.d.ts +59 -11
- 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 +25 -3
- package/dist/deployment/adapter/define.js +101 -24
- package/dist/deployment/adapter/index.d.ts +6 -3
- package/dist/deployment/adapter/index.js +1 -0
- package/dist/deployment/adapter/legacy/adapter.d.ts +40 -0
- package/dist/deployment/adapter/{deploy → legacy/deploy}/context.d.ts +6 -2
- package/dist/deployment/adapter/legacy/deploy/index.d.ts +2 -0
- package/dist/deployment/adapter/legacy/deploy/index.js +1 -0
- package/dist/deployment/adapter/legacy/deploy/result.d.ts +89 -0
- package/dist/deployment/adapter/legacy/deploy/result.js +1 -0
- package/dist/deployment/adapter/legacy/index.d.ts +24 -0
- package/dist/deployment/adapter/legacy/index.js +1 -0
- package/dist/deployment/adapter/legacy/prepare/artifact.d.ts +43 -0
- package/dist/deployment/adapter/legacy/prepare/artifact.js +1 -0
- package/dist/deployment/adapter/legacy/prepare/context.d.ts +33 -0
- package/dist/deployment/adapter/legacy/prepare/context.js +1 -0
- package/dist/deployment/adapter/legacy/prepare/index.d.ts +2 -0
- package/dist/deployment/adapter/legacy/prepare/index.js +1 -0
- package/dist/deployment/adapter/release/context.d.ts +95 -0
- package/dist/deployment/adapter/release/context.js +1 -0
- package/dist/deployment/adapter/release/index.d.ts +3 -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 +83 -0
- package/dist/deployment/address/configuration.js +262 -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 +5 -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 +52 -0
- package/dist/deployment/address/record.js +104 -0
- package/dist/deployment/address/summary.d.ts +57 -0
- package/dist/deployment/address/summary.js +117 -0
- package/dist/deployment/address/vectors.d.ts +60 -0
- package/dist/deployment/address/vectors.js +517 -0
- package/dist/deployment/build/build.d.ts +2 -2
- package/dist/deployment/build/compile.d.ts +4 -4
- package/dist/deployment/build/compile.js +17 -17
- 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.js +2 -2
- package/dist/deployment/build/schema.d.ts +2 -2
- package/dist/deployment/deploy.d.ts +10 -10
- package/dist/deployment/deploy.js +3 -3
- package/dist/deployment/deployment.d.ts +9 -4
- package/dist/deployment/environment.d.ts +6 -0
- package/dist/deployment/environment.js +6 -0
- package/dist/deployment/index.d.ts +4 -4
- package/dist/deployment/index.js +1 -1
- package/dist/deployment/release/addressing.d.ts +9 -1
- package/dist/deployment/release/assemble.d.ts +6 -3
- package/dist/deployment/release/assemble.js +12 -10
- package/dist/deployment/release/index.d.ts +2 -0
- package/dist/deployment/release/index.js +2 -0
- package/dist/deployment/release/legacy/admission.d.ts +3 -0
- package/dist/deployment/release/legacy/admission.js +8 -0
- package/dist/deployment/release/legacy/assemble.d.ts +5 -0
- package/dist/deployment/release/legacy/assemble.js +20 -0
- package/dist/deployment/release/legacy/index.d.ts +35 -0
- package/dist/deployment/release/legacy/index.js +34 -0
- package/dist/deployment/release/legacy/release.d.ts +12 -0
- package/dist/deployment/release/legacy/release.js +1 -0
- package/dist/deployment/release/{publication → legacy}/seal.d.ts +3 -3
- package/dist/deployment/release/legacy/seal.js +17 -0
- package/dist/deployment/release/release.d.ts +16 -5
- package/dist/deployment/release/runtime.d.ts +2 -0
- package/dist/deployment/release/runtime.js +2 -0
- 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 +12 -0
- package/dist/deployment/release/served/index.js +22 -0
- package/dist/deployment/release/{publication → served}/views.d.ts +2 -2
- package/dist/deployment/runtime/admission.d.ts +2 -2
- package/dist/deployment/runtime/admission.js +5 -5
- package/dist/deployment/verify/index.d.ts +2 -1
- package/dist/deployment/verify/index.js +1 -0
- package/dist/deployment/verify/preflight/artifact.d.ts +1 -1
- 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 +2 -1
- package/dist/deployment/verify/preflight/index.js +1 -0
- package/dist/deployment/verify/preflight/publication.d.ts +2 -2
- package/dist/deployment/verify/preflight/publication.js +4 -3
- package/dist/deployment/verify/readiness/deployment.js +7 -15
- 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 +11 -7
- package/dist/deployment/verify/readiness/index.js +15 -4
- package/dist/deployment/verify/readiness/legacy/index.d.ts +2 -0
- package/dist/deployment/verify/readiness/legacy/index.js +2 -0
- package/dist/deployment/verify/readiness/legacy/publication.d.ts +12 -0
- package/dist/deployment/verify/readiness/legacy/publication.js +23 -0
- package/dist/deployment/verify/readiness/release.d.ts +8 -0
- package/dist/deployment/verify/readiness/release.js +22 -0
- package/dist/execution/identity/authentication.d.ts +23 -2
- package/dist/execution/identity/authentication.js +64 -40
- package/dist/execution/identity/callback.d.ts +16 -15
- package/dist/execution/identity/callback.js +21 -16
- package/dist/execution/identity/delivery.d.ts +11 -4
- package/dist/execution/identity/delivery.js +47 -20
- package/dist/execution/identity/identity.d.ts +18 -3
- package/dist/execution/identity/identity.js +8 -4
- package/dist/execution/identity/jwks.js +57 -12
- package/dist/execution/index.d.ts +4 -2
- package/dist/execution/index.js +2 -1
- package/dist/execution/invocation/admission/authentication.d.ts +3 -8
- package/dist/execution/invocation/admission/authentication.js +10 -24
- package/dist/execution/invocation/admission/authority.d.ts +15 -8
- package/dist/execution/invocation/admission/authority.js +5 -0
- package/dist/execution/invocation/admission/input.d.ts +2 -2
- package/dist/execution/invocation/admission/input.js +16 -2
- package/dist/execution/invocation/dependency/bind.d.ts +1 -1
- package/dist/execution/invocation/dependency/bind.js +35 -14
- package/dist/execution/invocation/dispatch/context.d.ts +2 -1
- package/dist/execution/invocation/dispatch/context.js +1 -1
- package/dist/execution/invocation/invocation.js +58 -16
- 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 +22 -0
- package/dist/execution/runtime/release.js +14 -0
- package/dist/execution/serve.d.ts +10 -4
- package/dist/execution/serve.js +3 -0
- package/dist/execution/service/create.js +39 -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 +15 -5
- package/dist/execution/service/serving/delivery.d.ts +6 -0
- package/dist/execution/service/{publication → serving}/delivery.js +5 -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/legacy/index.d.ts +15 -0
- package/dist/execution/service/serving/legacy/index.js +19 -0
- package/dist/execution/service/serving/source.d.ts +18 -0
- package/dist/execution/service/serving/source.js +19 -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 +52 -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 +11 -0
- package/dist/execution/workflows/failure.js +43 -0
- package/dist/execution/workflows/index.d.ts +4 -0
- package/dist/execution/workflows/index.js +3 -0
- package/dist/execution/workflows/options.d.ts +40 -0
- package/dist/execution/workflows/options.js +83 -0
- package/dist/execution/workflows/receiver.d.ts +22 -0
- package/dist/execution/workflows/receiver.js +99 -0
- package/dist/execution/workflows/route.d.ts +14 -0
- package/dist/execution/workflows/route.js +40 -0
- package/dist/execution/workflows/run.d.ts +22 -0
- package/dist/execution/workflows/run.js +211 -0
- package/dist/index.d.ts +3 -3
- package/dist/index.js +1 -1
- package/dist/platform/release/index.d.ts +27 -0
- package/dist/platform/release/index.js +27 -0
- package/dist/platform/schema/index.d.ts +2 -1
- package/dist/platform/schema/property-input.d.ts +15 -0
- package/dist/platform/schema/property-input.js +1 -0
- package/dist/platform/schema/property.d.ts +5 -0
- 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 +2 -2
- 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 +10 -0
- package/dist/project/install-command.js +13 -0
- package/dist/project/project.d.ts +10 -8
- package/dist/testing/dataset/builder.d.ts +3 -3
- package/dist/testing/dataset/define.d.ts +1 -1
- package/dist/testing/load.js +1 -1
- package/dist/tooling/cli/arguments.d.ts +10 -5
- package/dist/tooling/cli/arguments.js +123 -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 +82 -0
- package/dist/tooling/cli/deploy-mode.js +135 -0
- package/dist/tooling/cli/deploy-result.d.ts +85 -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 +2 -2
- package/dist/tooling/cli/dotenv.js +3 -33
- package/dist/tooling/cli/help.js +176 -59
- 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 +10 -4
- package/dist/tooling/cli/index.js +5 -3
- package/dist/tooling/cli/installed-on.d.ts +83 -0
- package/dist/tooling/cli/installed-on.js +156 -0
- package/dist/tooling/cli/legacy/deploy-result.d.ts +28 -0
- package/dist/tooling/cli/legacy/deploy-result.js +37 -0
- package/dist/tooling/cli/legacy/stable-target-adapter.d.ts +21 -0
- package/dist/tooling/cli/legacy/stable-target-adapter.js +14 -0
- package/dist/tooling/cli/legacy/stable-target-deploy.d.ts +40 -0
- package/dist/tooling/cli/legacy/stable-target-deploy.js +102 -0
- package/dist/tooling/cli/legacy/uploaded-build.d.ts +11 -0
- package/dist/tooling/cli/legacy/uploaded-build.js +22 -0
- package/dist/tooling/cli/list.d.ts +154 -0
- package/dist/tooling/cli/list.js +381 -0
- package/dist/tooling/cli/log.d.ts +5 -0
- package/dist/tooling/cli/log.js +9 -0
- package/dist/tooling/cli/orchestrate.d.ts +0 -6
- package/dist/tooling/cli/orchestrate.js +236 -88
- package/dist/tooling/cli/project.d.ts +3 -3
- package/dist/tooling/cli/publish/index.d.ts +73 -0
- package/dist/tooling/cli/publish/index.js +346 -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 +114 -0
- package/dist/tooling/cli/registry/client.js +346 -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 +29 -0
- package/dist/tooling/cli/registry/executable.js +90 -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/implementations/source/callable-requirements.d.ts +1 -1
- package/dist/tooling/linter/implementations/source/callable-requirements.js +10 -10
- package/dist/tooling/linter/implementations/source/dependencies.js +12 -10
- package/dist/tooling/linter/implementations/source/global.js +1 -1
- package/dist/tooling/linter/implementations/source/mutations.js +17 -17
- package/dist/tooling/linter/implementations/source/providers.js +5 -5
- package/dist/tooling/linter/implementations/source/views.js +2 -2
- package/dist/tooling/linter/policy/generated.js +16 -16
- 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/package.json +32 -11
- package/dist/application/application.d.ts +0 -28
- 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/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.js +0 -39
- package/dist/deployment/verify/readiness/publication.d.ts +0 -11
- package/dist/deployment/verify/readiness/publication.js +0 -41
- 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/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/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 → legacy/adapter.js} +0 -0
- /package/dist/deployment/adapter/{prepare → legacy/deploy}/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/deployment/release/{publication → served}/views.js +0 -0
- /package/dist/execution/service/{publication → serving}/index.js +0 -0
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import type { DeploymentRecordV1, DeploymentSummaryV1 } from '../../deployment/address/index.js';
|
|
2
|
+
import type { DeploymentCallTarget } from '../../deployment/index.js';
|
|
3
|
+
import type { InstallationSourcesV1, InstalledOnV1 } from './installed-on.js';
|
|
4
|
+
import type { LoadedEnvironment } from './project.js';
|
|
5
|
+
import type { DomainRegistry } from './registry/index.js';
|
|
6
|
+
export type { InstallationSourcesV1, InstalledOnV1, InstanceSourceV1 } from './installed-on.js';
|
|
7
|
+
export type { InstallationUnknownReason } from './registry/index.js';
|
|
8
|
+
/**
|
|
9
|
+
* `astrale-domain list --json` on stdout: the deployments of the Project's Environments that their
|
|
10
|
+
* hosts keep for the caller, each with its computed name, the instances known to pin it and where
|
|
11
|
+
* it is called. It changes nothing, at any host, registry or instance.
|
|
12
|
+
*/
|
|
13
|
+
export interface ListResultV1 {
|
|
14
|
+
readonly format: 'astrale.deployment-list';
|
|
15
|
+
readonly version: 1;
|
|
16
|
+
readonly origin: string;
|
|
17
|
+
/** Environment by Environment in the Project's order, each in its host's order. */
|
|
18
|
+
readonly deployments: readonly ListedDeploymentV1[];
|
|
19
|
+
/**
|
|
20
|
+
* The selected Environments whose deployments are not in `deployments`, and why: the listing is
|
|
21
|
+
* complete exactly when this is empty.
|
|
22
|
+
*/
|
|
23
|
+
readonly unlisted: readonly UnlistedEnvironmentV1[];
|
|
24
|
+
/** Where every `installedOn` comes from, and what of it is unknown (AM-198). */
|
|
25
|
+
readonly installations: InstallationSourcesV1;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* One deployment: what its host knows (`DeploymentSummaryV1`), the Environment it was listed for
|
|
29
|
+
* and its adapter, its computed name, and its call target. `lastCallAt` and a preview's `expiresAt`
|
|
30
|
+
* are as of the listing: a platform namespace (adapter-cloudflare) reads every call from its calls
|
|
31
|
+
* dataset, and omits both without Account Analytics Read. Admin's Services (adapter-astrale) keeps
|
|
32
|
+
* every deployment until it is retired and counts no call: its rows are `published`, with neither
|
|
33
|
+
* clock, and say whether their Service serves them (`current`).
|
|
34
|
+
*/
|
|
35
|
+
export type ListedDeploymentV1 = Omit<DeploymentSummaryV1, 'record'> & {
|
|
36
|
+
/** The Project Environment whose line holds the deployment, as its host listed it. */
|
|
37
|
+
readonly environment: string;
|
|
38
|
+
/** `<adapter name>@<adapter version>` */
|
|
39
|
+
readonly adapter: string;
|
|
40
|
+
/**
|
|
41
|
+
* The deployment's name (`deploymentName`, CT28), computed and never stored: the version of the
|
|
42
|
+
* registry that names its release (`1.5.0`), or its build elsewhere (`1.5.0 · staging`), else
|
|
43
|
+
* from its record's commit (`1.4.2 + 7 commits · a1b2c3d · staging`). Print it as it is,
|
|
44
|
+
* environment included (AM-57).
|
|
45
|
+
*/
|
|
46
|
+
readonly name: string;
|
|
47
|
+
/**
|
|
48
|
+
* The instances known to pin this deployment: those `--instance` asked, as their Kernels list
|
|
49
|
+
* them (CT24). Partial by nature: an instance is known only when asked, and one whose
|
|
50
|
+
* installations are unknown is under `installations`, never absent from here as "not installed"
|
|
51
|
+
* (AM-198).
|
|
52
|
+
*/
|
|
53
|
+
readonly installedOn: readonly InstalledOnV1[];
|
|
54
|
+
/**
|
|
55
|
+
* The record its deployer declared, as `acceptDeploymentRecord` admits it. `null` when there is
|
|
56
|
+
* no admitted record: the host returns a record this SDK refuses or one that describes another
|
|
57
|
+
* deployment, or keeps none (the adapter lists it without a record, as a platform namespace lists
|
|
58
|
+
* a deployment it has not activated). The deployment is then listed from what its host knows, and
|
|
59
|
+
* named in the listed Environment, from the commit of that record only when the record names this
|
|
60
|
+
* deployment, origin and Environment.
|
|
61
|
+
*/
|
|
62
|
+
readonly record: DeploymentRecordV1 | null;
|
|
63
|
+
/**
|
|
64
|
+
* Why there is no admitted record: the refusal of the stored one, or that its host keeps none;
|
|
65
|
+
* present exactly when `record` is `null`.
|
|
66
|
+
*/
|
|
67
|
+
readonly recordRefusal?: string;
|
|
68
|
+
/**
|
|
69
|
+
* Whether the stable URL of the deployment's Service serves it; present only for a host with
|
|
70
|
+
* Services (Admin's Services).
|
|
71
|
+
*/
|
|
72
|
+
readonly current?: boolean;
|
|
73
|
+
/** Where to call this deployment, and on Admin's Services its Service. */
|
|
74
|
+
readonly callTarget: DeploymentCallTarget;
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* An Environment the listing did not list:
|
|
78
|
+
* - `legacy-direct`: it replaces one stable target in place and makes no immutable deployment;
|
|
79
|
+
* - `refused`: `deploy` refuses its configuration, so it deploys nothing;
|
|
80
|
+
* - `unsupported`: its adapter deploys immutable deployments but lists none.
|
|
81
|
+
*/
|
|
82
|
+
export interface UnlistedEnvironmentV1 {
|
|
83
|
+
readonly environment: string;
|
|
84
|
+
readonly adapter: string;
|
|
85
|
+
readonly reason: 'legacy-direct' | 'refused' | 'unsupported';
|
|
86
|
+
}
|
|
87
|
+
/** What a listing found, beside the result: what to tell a person, and what failed. */
|
|
88
|
+
export interface DeploymentListing {
|
|
89
|
+
readonly result: ListResultV1;
|
|
90
|
+
/**
|
|
91
|
+
* One line for each Environment not listed, each record not admitted and each source of
|
|
92
|
+
* INSTALLED ON that could not tell, for stderr.
|
|
93
|
+
*/
|
|
94
|
+
readonly notices: readonly string[];
|
|
95
|
+
/** Environments whose host could not be listed: their deployments are missing from the result. */
|
|
96
|
+
readonly failures: readonly {
|
|
97
|
+
readonly environment: string;
|
|
98
|
+
readonly adapter: string;
|
|
99
|
+
readonly error: Error;
|
|
100
|
+
}[];
|
|
101
|
+
/**
|
|
102
|
+
* The Domain registry could not be read, so no deployment can be named by its version and the
|
|
103
|
+
* result is not to be printed: versions are never dropped silently (AM-224). That is a missing
|
|
104
|
+
* Astrale CLI, one older than the listing's floor, no identity it may use, an Admin it cannot
|
|
105
|
+
* reach, an index it cannot read, or an interruption while it reads; never a source of
|
|
106
|
+
* INSTALLED ON, which only makes the listing partial.
|
|
107
|
+
*/
|
|
108
|
+
readonly registryFailure?: Error;
|
|
109
|
+
}
|
|
110
|
+
/** What the listing reads through the Astrale CLI: the registry index and the instances. */
|
|
111
|
+
export type DeploymentRegistry = Pick<DomainRegistry, 'index' | 'instance'>;
|
|
112
|
+
/**
|
|
113
|
+
* List the deployments of the selected Environments, one adapter `list` call each, then name them
|
|
114
|
+
* and say where they are installed (tech [.59528]: the records, the registry's versions and the
|
|
115
|
+
* instances' pins).
|
|
116
|
+
*
|
|
117
|
+
* Only an Environment that deploys immutable deployments (CT33 canonical) is listed; the others are
|
|
118
|
+
* `unlisted`, with the reason. A record the host returns but `acceptDeploymentRecord` refuses never
|
|
119
|
+
* fails the listing: that deployment is listed from what its host knows, its record `null`. This
|
|
120
|
+
* covers a host whose SDK still admits a record this SDK refuses, and a host that lists a record
|
|
121
|
+
* its own SDK no longer admits as it is stored (Admin's Services does). An Environment whose host
|
|
122
|
+
* cannot be listed, or whose adapter answers anything but deployments, is a failure, and the others
|
|
123
|
+
* are still listed.
|
|
124
|
+
*
|
|
125
|
+
* Once a deployment is listed, the registry is opened once: its index of the origin names each
|
|
126
|
+
* deployment by the version of its release or build (CT28; none when the origin is unregistered or
|
|
127
|
+
* not readable), and the instances that pin each deployment come from each `--instance` (CT24);
|
|
128
|
+
* Admin does not say which instances pin a release (AM-241). A registry that cannot be opened or
|
|
129
|
+
* whose index cannot be read is `registryFailure`, and the instance reads still running are
|
|
130
|
+
* stopped at once; an instance that cannot tell never fails the listing: it is partial (AM-198,
|
|
131
|
+
* AM-224).
|
|
132
|
+
*/
|
|
133
|
+
export declare function listDeployments(input: {
|
|
134
|
+
readonly origin: string;
|
|
135
|
+
/** The selected Environments, in the Project's order. */
|
|
136
|
+
readonly environments: readonly (readonly [string, LoadedEnvironment])[];
|
|
137
|
+
readonly identity?: string;
|
|
138
|
+
readonly signal: AbortSignal;
|
|
139
|
+
/**
|
|
140
|
+
* Opens the Domain registry, once, and only when at least one deployment is listed. Every read
|
|
141
|
+
* it makes follows `signal`, which also stops when the index cannot be read.
|
|
142
|
+
*/
|
|
143
|
+
readonly registry: (signal: AbortSignal) => Promise<DeploymentRegistry>;
|
|
144
|
+
/** Instances to ask what they run (`--instance`, repeatable). */
|
|
145
|
+
readonly instances?: readonly string[];
|
|
146
|
+
}): Promise<DeploymentListing>;
|
|
147
|
+
/**
|
|
148
|
+
* The listing as a table for a person, at `now`: each deployment's release, its name as computed
|
|
149
|
+
* (never shortened, AM-57), its Environment and state (`active (current)` for the deployment its
|
|
150
|
+
* Service serves), the instances known to pin it (`?` when a source could not tell, AM-198), its
|
|
151
|
+
* last call and its expiry, and the URL `astrale domain install` takes. Without deployments, it says so only for what was listed: nothing when a host
|
|
152
|
+
* `failed` (stderr says which), and that some Environments were not listed when any was not.
|
|
153
|
+
*/
|
|
154
|
+
export declare function renderDeploymentList(result: ListResultV1, now: number, failed?: boolean): readonly string[];
|
|
@@ -0,0 +1,381 @@
|
|
|
1
|
+
import { acceptDeploymentRecord } from '../../deployment/address/index.js';
|
|
2
|
+
import { deploymentName } from '../../platform/versioning/name.js';
|
|
3
|
+
import { selectDeployMode } from './deploy-mode.js';
|
|
4
|
+
import { installationNotices, installedOn, installedOnCell, readInstallations, skippedInstallations, } from './installed-on.js';
|
|
5
|
+
/**
|
|
6
|
+
* List the deployments of the selected Environments, one adapter `list` call each, then name them
|
|
7
|
+
* and say where they are installed (tech [.59528]: the records, the registry's versions and the
|
|
8
|
+
* instances' pins).
|
|
9
|
+
*
|
|
10
|
+
* Only an Environment that deploys immutable deployments (CT33 canonical) is listed; the others are
|
|
11
|
+
* `unlisted`, with the reason. A record the host returns but `acceptDeploymentRecord` refuses never
|
|
12
|
+
* fails the listing: that deployment is listed from what its host knows, its record `null`. This
|
|
13
|
+
* covers a host whose SDK still admits a record this SDK refuses, and a host that lists a record
|
|
14
|
+
* its own SDK no longer admits as it is stored (Admin's Services does). An Environment whose host
|
|
15
|
+
* cannot be listed, or whose adapter answers anything but deployments, is a failure, and the others
|
|
16
|
+
* are still listed.
|
|
17
|
+
*
|
|
18
|
+
* Once a deployment is listed, the registry is opened once: its index of the origin names each
|
|
19
|
+
* deployment by the version of its release or build (CT28; none when the origin is unregistered or
|
|
20
|
+
* not readable), and the instances that pin each deployment come from each `--instance` (CT24);
|
|
21
|
+
* Admin does not say which instances pin a release (AM-241). A registry that cannot be opened or
|
|
22
|
+
* whose index cannot be read is `registryFailure`, and the instance reads still running are
|
|
23
|
+
* stopped at once; an instance that cannot tell never fails the listing: it is partial (AM-198,
|
|
24
|
+
* AM-224).
|
|
25
|
+
*/
|
|
26
|
+
export async function listDeployments(input) {
|
|
27
|
+
const hosted = [];
|
|
28
|
+
const unlisted = [];
|
|
29
|
+
const notices = [];
|
|
30
|
+
const failures = [];
|
|
31
|
+
for (const [environment, definition] of input.environments) {
|
|
32
|
+
const { adapter, parameters } = definition.deployment;
|
|
33
|
+
const name = `${adapter.name}@${adapter.version}`;
|
|
34
|
+
const mode = selectDeployMode({ command: 'deploy', environment, definition });
|
|
35
|
+
if (mode.kind !== 'canonical') {
|
|
36
|
+
unlisted.push(Object.freeze({
|
|
37
|
+
environment,
|
|
38
|
+
adapter: name,
|
|
39
|
+
reason: mode.kind,
|
|
40
|
+
}));
|
|
41
|
+
notices.push(mode.kind === 'legacy-direct'
|
|
42
|
+
? `Environment ${environment} is not listed: it deploys in legacy direct mode, replacing ` +
|
|
43
|
+
'one stable target in place, and has no immutable deployments.'
|
|
44
|
+
: `Environment ${environment} is not listed: deploy refuses its configuration. ` +
|
|
45
|
+
mode.refusals.map((refusal) => refusal.guidance).join(' '));
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
if (!('list' in adapter) || typeof adapter.list !== 'function') {
|
|
49
|
+
unlisted.push(Object.freeze({ environment, adapter: name, reason: 'unsupported' }));
|
|
50
|
+
notices.push(`Environment ${environment} is not listed: adapter ${name} lists no deployments.`);
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
let listed;
|
|
54
|
+
try {
|
|
55
|
+
listed = await adapter.list(parameters, {
|
|
56
|
+
origin: input.origin,
|
|
57
|
+
environment,
|
|
58
|
+
signal: input.signal,
|
|
59
|
+
...(input.identity === undefined ? {} : { identity: input.identity }),
|
|
60
|
+
});
|
|
61
|
+
if (!Array.isArray(listed)) {
|
|
62
|
+
throw new TypeError(`Adapter ${name} listed no array of deployments.`);
|
|
63
|
+
}
|
|
64
|
+
for (const deployment of listed)
|
|
65
|
+
admitListed(deployment, name);
|
|
66
|
+
}
|
|
67
|
+
catch (cause) {
|
|
68
|
+
failures.push(Object.freeze({
|
|
69
|
+
environment,
|
|
70
|
+
adapter: name,
|
|
71
|
+
error: cause instanceof Error ? cause : new Error(String(cause)),
|
|
72
|
+
}));
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
for (const deployment of listed) {
|
|
76
|
+
const row = hostedDeployment(deployment, { origin: input.origin, environment, adapter: name });
|
|
77
|
+
if (row.recordRefusal !== undefined) {
|
|
78
|
+
notices.push(deployment.record === undefined
|
|
79
|
+
? `Deployment ${deployment.label} (${environment}) is listed from what its host knows: ` +
|
|
80
|
+
`${row.recordRefusal}`
|
|
81
|
+
: `Deployment ${deployment.label} (${environment}) is listed from what its host knows: its ` +
|
|
82
|
+
`stored record is not admitted. ${row.recordRefusal}`);
|
|
83
|
+
}
|
|
84
|
+
hosted.push(row);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
let publications = [];
|
|
88
|
+
let installations = skippedInstallations(input.instances ?? []);
|
|
89
|
+
let registryFailure;
|
|
90
|
+
if (hosted.length > 0) {
|
|
91
|
+
// One signal for every registry read, so that an unreadable index stops the others.
|
|
92
|
+
const reads = new AbortController();
|
|
93
|
+
const interrupt = () => reads.abort(input.signal.reason);
|
|
94
|
+
if (input.signal.aborted)
|
|
95
|
+
interrupt();
|
|
96
|
+
else
|
|
97
|
+
input.signal.addEventListener('abort', interrupt, { once: true });
|
|
98
|
+
try {
|
|
99
|
+
const registry = await input.registry(reads.signal);
|
|
100
|
+
// The index and every `--instance` are read together; the latter fail only when the reads
|
|
101
|
+
// are stopped, which is handled where they are awaited below.
|
|
102
|
+
const read = readInstallations(registry, input.origin, input.instances ?? [], reads.signal);
|
|
103
|
+
read.catch(() => undefined);
|
|
104
|
+
try {
|
|
105
|
+
publications = (await registry.index(input.origin))?.publications ?? [];
|
|
106
|
+
}
|
|
107
|
+
catch (cause) {
|
|
108
|
+
// Nothing is printed without the versions: stop the CLI processes still asking instances
|
|
109
|
+
// what they run, and wait only for them to end.
|
|
110
|
+
reads.abort(cause);
|
|
111
|
+
await read.catch(() => undefined);
|
|
112
|
+
throw cause;
|
|
113
|
+
}
|
|
114
|
+
installations = await read;
|
|
115
|
+
}
|
|
116
|
+
catch (cause) {
|
|
117
|
+
registryFailure = cause instanceof Error ? cause : new Error(String(cause));
|
|
118
|
+
}
|
|
119
|
+
finally {
|
|
120
|
+
input.signal.removeEventListener('abort', interrupt);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// INSTALLED ON is reported only for rows the listing prints.
|
|
124
|
+
if (hosted.length > 0 && registryFailure === undefined) {
|
|
125
|
+
notices.push(...installationNotices(installations.sources));
|
|
126
|
+
}
|
|
127
|
+
return Object.freeze({
|
|
128
|
+
result: Object.freeze({
|
|
129
|
+
format: 'astrale.deployment-list',
|
|
130
|
+
version: 1,
|
|
131
|
+
origin: input.origin,
|
|
132
|
+
deployments: Object.freeze(hosted.map((row) => listedDeployment(row, publications, installations))),
|
|
133
|
+
unlisted: Object.freeze(unlisted),
|
|
134
|
+
installations: installations.sources,
|
|
135
|
+
}),
|
|
136
|
+
notices: Object.freeze(notices),
|
|
137
|
+
failures: Object.freeze(failures),
|
|
138
|
+
...(registryFailure === undefined ? {} : { registryFailure }),
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* One listed deployment's record, admitted when it describes exactly this deployment of this
|
|
143
|
+
* origin and Environment, else refused with why, or none when its host keeps none (`NO_RECORD`).
|
|
144
|
+
*/
|
|
145
|
+
function hostedDeployment(deployment, listing) {
|
|
146
|
+
if (deployment.record === undefined) {
|
|
147
|
+
return { deployment, listing, record: null, recordRefusal: NO_RECORD };
|
|
148
|
+
}
|
|
149
|
+
try {
|
|
150
|
+
const admitted = acceptDeploymentRecord(deployment.record);
|
|
151
|
+
const recordRefusal = describesAnother(admitted, deployment.label, listing);
|
|
152
|
+
return recordRefusal === undefined
|
|
153
|
+
? { deployment, listing, record: admitted }
|
|
154
|
+
: { deployment, listing, record: null, recordRefusal };
|
|
155
|
+
}
|
|
156
|
+
catch (cause) {
|
|
157
|
+
return {
|
|
158
|
+
deployment,
|
|
159
|
+
listing,
|
|
160
|
+
record: null,
|
|
161
|
+
recordRefusal: cause instanceof Error ? cause.message : String(cause),
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* One listed deployment, named and placed. With an admitted record, its name comes from the
|
|
167
|
+
* registry's Publications of the origin that name its release, else its build, else from its
|
|
168
|
+
* record (CT28). Otherwise it is named in the listed Environment, with the commit of the stored
|
|
169
|
+
* record only when that record names this deployment, origin and Environment, and never by a
|
|
170
|
+
* version: a record the listing does not admit gives no digest to name.
|
|
171
|
+
*/
|
|
172
|
+
function listedDeployment(hosted, publications, installations) {
|
|
173
|
+
const { deployment, listing, record, recordRefusal } = hosted;
|
|
174
|
+
// A build digest names the row from any Publication of the origin, whatever its URL: the row is
|
|
175
|
+
// a deployment its own host lists for the caller, and the build of a version deployed elsewhere
|
|
176
|
+
// is another deployment at another URL (`1.5.0 · staging`, tech [.83533]). An instance's pin,
|
|
177
|
+
// which a frozen Worker's tenant may serve, is named only within its issuer (AM-73, AM-224).
|
|
178
|
+
const name = record === null
|
|
179
|
+
? deploymentName(canonicalParts(deployment.record, deployment.label, listing), [])
|
|
180
|
+
: deploymentName(record, publications);
|
|
181
|
+
return Object.freeze({
|
|
182
|
+
environment: listing.environment,
|
|
183
|
+
adapter: listing.adapter,
|
|
184
|
+
name,
|
|
185
|
+
installedOn: installedOn(deployment.url, installations),
|
|
186
|
+
id: deployment.id,
|
|
187
|
+
url: deployment.url,
|
|
188
|
+
label: deployment.label,
|
|
189
|
+
line: deployment.line,
|
|
190
|
+
owner: deployment.owner,
|
|
191
|
+
state: deployment.state,
|
|
192
|
+
retention: deployment.retention,
|
|
193
|
+
createdAt: deployment.createdAt,
|
|
194
|
+
...(deployment.lastCallAt === undefined ? {} : { lastCallAt: deployment.lastCallAt }),
|
|
195
|
+
...(deployment.expiresAt === undefined ? {} : { expiresAt: deployment.expiresAt }),
|
|
196
|
+
...(deployment.retiredAt === undefined ? {} : { retiredAt: deployment.retiredAt }),
|
|
197
|
+
...(deployment.retirement === undefined ? {} : { retirement: deployment.retirement }),
|
|
198
|
+
signingKeyId: deployment.signingKeyId,
|
|
199
|
+
record,
|
|
200
|
+
...(recordRefusal === undefined ? {} : { recordRefusal }),
|
|
201
|
+
...(deployment.current === undefined ? {} : { current: deployment.current }),
|
|
202
|
+
callTarget: deployment.callTarget,
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Why a deployment its host keeps no record of has none: the adapter lists it without `record`, as a
|
|
207
|
+
* platform namespace lists a deployment it has not activated.
|
|
208
|
+
*/
|
|
209
|
+
const NO_RECORD = 'Its host keeps no record of it: it has not been activated (a deploy still in progress, or one ' +
|
|
210
|
+
'that stopped before activating it).';
|
|
211
|
+
/** Why an admitted record does not describe the listed deployment, if it does not. */
|
|
212
|
+
function describesAnother(record, label, listing) {
|
|
213
|
+
if (record.providerScript !== label) {
|
|
214
|
+
return `Deployment record describes deployment ${record.providerScript}, not ${label}.`;
|
|
215
|
+
}
|
|
216
|
+
if (record.origin !== listing.origin) {
|
|
217
|
+
return `Deployment record declares origin ${record.origin}, not ${listing.origin}.`;
|
|
218
|
+
}
|
|
219
|
+
if (record.environment !== listing.environment) {
|
|
220
|
+
return `Deployment record declares environment ${record.environment}, not ${listing.environment}.`;
|
|
221
|
+
}
|
|
222
|
+
return undefined;
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* What a deployment name may read of a stored record that is not admitted: the listed Environment,
|
|
226
|
+
* never the record's own, and the record's commit only when the record names this deployment, its
|
|
227
|
+
* origin and that Environment, each part kept only with the type the name reads. No digest: a
|
|
228
|
+
* record the listing does not admit is never named by a published version.
|
|
229
|
+
*/
|
|
230
|
+
function canonicalParts(input, label, listing) {
|
|
231
|
+
const value = members(input);
|
|
232
|
+
// A record that does not say it describes this deployment says nothing of it, not its commit.
|
|
233
|
+
const describesThis = value?.providerScript === label &&
|
|
234
|
+
value.origin === listing.origin &&
|
|
235
|
+
value.environment === listing.environment;
|
|
236
|
+
const commit = describesThis ? members(value.commit) : undefined;
|
|
237
|
+
const base = members(commit?.base);
|
|
238
|
+
return {
|
|
239
|
+
environment: listing.environment,
|
|
240
|
+
commit: typeof commit?.sha === 'string'
|
|
241
|
+
? {
|
|
242
|
+
sha: commit.sha,
|
|
243
|
+
dirty: commit.dirty === true,
|
|
244
|
+
...(typeof base?.version === 'string' && typeof base.distance === 'number'
|
|
245
|
+
? { base: { version: base.version, distance: base.distance } }
|
|
246
|
+
: {}),
|
|
247
|
+
}
|
|
248
|
+
: null,
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
const STATES = ['deploying', 'active', 'retiring', 'retired', 'failed'];
|
|
252
|
+
/**
|
|
253
|
+
* Admit one deployment an adapter listed, before any is kept: the facts a row prints, each of the
|
|
254
|
+
* type `DeploymentSummaryV1` gives it, and a call target an operator can act on. Anything else is
|
|
255
|
+
* that Environment's failure, never a row without its call target.
|
|
256
|
+
*/
|
|
257
|
+
function admitListed(deployment, adapter) {
|
|
258
|
+
const invalid = (member) => {
|
|
259
|
+
throw new TypeError(`Adapter ${adapter} listed an invalid deployment (${member}).`);
|
|
260
|
+
};
|
|
261
|
+
const value = members(deployment) ?? invalid('deployment');
|
|
262
|
+
for (const key of ['id', 'url', 'label', 'line', 'owner', 'createdAt', 'signingKeyId']) {
|
|
263
|
+
if (!text(value[key]))
|
|
264
|
+
invalid(key);
|
|
265
|
+
}
|
|
266
|
+
for (const key of ['lastCallAt', 'expiresAt', 'retiredAt']) {
|
|
267
|
+
if (value[key] !== undefined && !text(value[key]))
|
|
268
|
+
invalid(key);
|
|
269
|
+
}
|
|
270
|
+
if (!STATES.includes(value.state))
|
|
271
|
+
invalid('state');
|
|
272
|
+
if (value.retention !== 'preview' && value.retention !== 'published')
|
|
273
|
+
invalid('retention');
|
|
274
|
+
if (value.retirement !== undefined &&
|
|
275
|
+
value.retirement !== 'expired' &&
|
|
276
|
+
value.retirement !== 'withdrawn') {
|
|
277
|
+
invalid('retirement');
|
|
278
|
+
}
|
|
279
|
+
if (value.current !== undefined && typeof value.current !== 'boolean')
|
|
280
|
+
invalid('current');
|
|
281
|
+
const target = members(value.callTarget) ?? invalid('callTarget');
|
|
282
|
+
if (target.kind === 'services') {
|
|
283
|
+
if (!text(target.path) ||
|
|
284
|
+
!text(target.service) ||
|
|
285
|
+
(target.admin !== undefined && !text(target.admin))) {
|
|
286
|
+
invalid('callTarget');
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
else if (target.kind !== 'namespace' || !text(target.namespace) || !text(target.script)) {
|
|
290
|
+
invalid('callTarget');
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
function text(value) {
|
|
294
|
+
return typeof value === 'string' && value.length > 0;
|
|
295
|
+
}
|
|
296
|
+
function members(input) {
|
|
297
|
+
return input !== null && typeof input === 'object' && !Array.isArray(input)
|
|
298
|
+
? input
|
|
299
|
+
: undefined;
|
|
300
|
+
}
|
|
301
|
+
const COLUMNS = [
|
|
302
|
+
'RELEASE',
|
|
303
|
+
'VERSION',
|
|
304
|
+
'ENV',
|
|
305
|
+
'STATE',
|
|
306
|
+
'INSTALLED ON',
|
|
307
|
+
'LAST CALL',
|
|
308
|
+
'EXPIRES',
|
|
309
|
+
'URL',
|
|
310
|
+
];
|
|
311
|
+
const MINUTE = 60_000;
|
|
312
|
+
const HOUR = 60 * MINUTE;
|
|
313
|
+
const DAY = 24 * HOUR;
|
|
314
|
+
/**
|
|
315
|
+
* The listing as a table for a person, at `now`: each deployment's release, its name as computed
|
|
316
|
+
* (never shortened, AM-57), its Environment and state (`active (current)` for the deployment its
|
|
317
|
+
* Service serves), the instances known to pin it (`?` when a source could not tell, AM-198), its
|
|
318
|
+
* last call and its expiry, and the URL `astrale domain install` takes. Without deployments, it says so only for what was listed: nothing when a host
|
|
319
|
+
* `failed` (stderr says which), and that some Environments were not listed when any was not.
|
|
320
|
+
*/
|
|
321
|
+
export function renderDeploymentList(result, now, failed = false) {
|
|
322
|
+
if (result.deployments.length === 0) {
|
|
323
|
+
if (failed)
|
|
324
|
+
return Object.freeze([]);
|
|
325
|
+
return Object.freeze([
|
|
326
|
+
result.unlisted.length === 0
|
|
327
|
+
? `No deployments of ${result.origin}.`
|
|
328
|
+
: `No deployments of ${result.origin} in the Environments listed; ` +
|
|
329
|
+
`${result.unlisted.length} not listed (see above).`,
|
|
330
|
+
]);
|
|
331
|
+
}
|
|
332
|
+
const rows = result.deployments.map((deployment) => [
|
|
333
|
+
deployment.record === null ? '?' : shortDigest(deployment.record.releaseDigest),
|
|
334
|
+
deployment.name,
|
|
335
|
+
deployment.environment,
|
|
336
|
+
deployment.current === true ? `${deployment.state} (current)` : deployment.state,
|
|
337
|
+
installedOnCell(deployment.installedOn, result.installations),
|
|
338
|
+
deployment.lastCallAt === undefined
|
|
339
|
+
? '—'
|
|
340
|
+
: `${elapsed(now - Date.parse(deployment.lastCallAt))} ago`,
|
|
341
|
+
expiry(deployment, now),
|
|
342
|
+
deployment.url,
|
|
343
|
+
]);
|
|
344
|
+
const widths = COLUMNS.map((column, index) => Math.max(column.length, ...rows.map((row) => row[index].length)));
|
|
345
|
+
const line = (cells) => cells
|
|
346
|
+
.map((cell, index) => (index === cells.length - 1 ? cell : cell.padEnd(widths[index])))
|
|
347
|
+
.join(' ');
|
|
348
|
+
return Object.freeze([line(COLUMNS), ...rows.map(line)]);
|
|
349
|
+
}
|
|
350
|
+
/** `sha256:` and the first seven hexadecimal digits, as git abbreviates a commit. */
|
|
351
|
+
function shortDigest(digest) {
|
|
352
|
+
return `${digest.slice(0, 'sha256:'.length + 7)}…`;
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* When a deployment stops serving: `never` once published, else its preview expiry as its host
|
|
356
|
+
* keeps it, 30 days after its activation or its last call, whichever is later (AM-123), with the
|
|
357
|
+
* calls counted since the host recorded them; `due` once that instant passed but the host has not
|
|
358
|
+
* retired it yet; for a retired deployment, why it was retired.
|
|
359
|
+
*/
|
|
360
|
+
function expiry(deployment, now) {
|
|
361
|
+
if (deployment.state === 'retiring')
|
|
362
|
+
return 'retiring';
|
|
363
|
+
if (deployment.state === 'retired')
|
|
364
|
+
return deployment.retirement ?? 'retired';
|
|
365
|
+
if (deployment.retention === 'published')
|
|
366
|
+
return 'never';
|
|
367
|
+
if (deployment.expiresAt === undefined)
|
|
368
|
+
return '—';
|
|
369
|
+
const remaining = Date.parse(deployment.expiresAt) - now;
|
|
370
|
+
return remaining > 0 ? `in ${elapsed(remaining)}` : 'due';
|
|
371
|
+
}
|
|
372
|
+
/** A duration as a person reads it in a listing: minutes, then hours, then days. */
|
|
373
|
+
function elapsed(milliseconds) {
|
|
374
|
+
if (!(milliseconds >= MINUTE))
|
|
375
|
+
return '< 1 min';
|
|
376
|
+
if (milliseconds < HOUR)
|
|
377
|
+
return `${Math.floor(milliseconds / MINUTE)} min`;
|
|
378
|
+
if (milliseconds < DAY)
|
|
379
|
+
return `${Math.floor(milliseconds / HOUR)} h`;
|
|
380
|
+
return `${Math.floor(milliseconds / DAY)} d`;
|
|
381
|
+
}
|
|
@@ -6,5 +6,10 @@ export declare const YELLOW = "\u001B[33m";
|
|
|
6
6
|
export declare const RED = "\u001B[31m";
|
|
7
7
|
export declare const RESET = "\u001B[0m";
|
|
8
8
|
export declare function info(msg: string): void;
|
|
9
|
+
/**
|
|
10
|
+
* Where a command reports its progress: `info` on stdout for a person, the same lines on stderr
|
|
11
|
+
* when stdout carries one machine-readable document (`--json`).
|
|
12
|
+
*/
|
|
13
|
+
export declare function progress(machine: boolean): (msg: string) => void;
|
|
9
14
|
export declare function warn(msg: string): void;
|
|
10
15
|
export declare function error(msg: string): void;
|
package/dist/tooling/cli/log.js
CHANGED
|
@@ -8,6 +8,15 @@ export const RESET = '\x1b[0m';
|
|
|
8
8
|
export function info(msg) {
|
|
9
9
|
process.stdout.write(`${DIM}›${RESET} ${msg}\n`);
|
|
10
10
|
}
|
|
11
|
+
/**
|
|
12
|
+
* Where a command reports its progress: `info` on stdout for a person, the same lines on stderr
|
|
13
|
+
* when stdout carries one machine-readable document (`--json`).
|
|
14
|
+
*/
|
|
15
|
+
export function progress(machine) {
|
|
16
|
+
if (!machine)
|
|
17
|
+
return info;
|
|
18
|
+
return (msg) => process.stderr.write(`${DIM}›${RESET} ${msg}\n`);
|
|
19
|
+
}
|
|
11
20
|
export function warn(msg) {
|
|
12
21
|
process.stderr.write(`${YELLOW}!${RESET} ${msg}\n`);
|
|
13
22
|
}
|
|
@@ -1,7 +1 @@
|
|
|
1
|
-
import { type ParsedArgs } from './arguments.js';
|
|
2
|
-
import { develop } from './development/develop.js';
|
|
3
1
|
export declare function run(argv: readonly string[]): Promise<number>;
|
|
4
|
-
export declare function executeDevelopmentCommand(parsed: ParsedArgs, input: {
|
|
5
|
-
readonly configPath: string;
|
|
6
|
-
readonly projectDir: string;
|
|
7
|
-
}, execute?: typeof develop): Promise<number>;
|