@astrale-os/sdk 0.6.0-beta.2 → 0.6.0-beta.20
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 +74 -0
- package/dist/tooling/cli/publish/index.js +364 -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 +127 -0
- package/dist/tooling/cli/registry/client.js +351 -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
|
@@ -7,10 +7,16 @@ import { bindSession, ClientSession } from '../../platform/client/session/index.
|
|
|
7
7
|
import { NodeId } from '../../platform/graph/node/index.js';
|
|
8
8
|
import { Path } from '../../platform/graph/path/index.js';
|
|
9
9
|
import { projectError, protocolError } from '../invocation/result/index.js';
|
|
10
|
-
import { callbackIdentities, createCallbackCredentialResolver, maximumCallbackDelegationTtlSeconds, signDomainCallback, } from './callback.js';
|
|
11
|
-
import { CredentialRejected, IssuerUnavailable, boundedFetch, callbackTtl, invocationUrl, admitEndpoint, requireLive, } from './errors.js';
|
|
10
|
+
import { callbackIdentities, createCallbackCredentialResolver, maximumCallbackDelegationTtlSeconds, selfIdentity, signDomainCallback, } from './callback.js';
|
|
11
|
+
import { CredentialRejected, IssuerUnavailable, boundedFetch, callbackTtl, httpIssuer, invocationUrl, admitEndpoint, requireLive, } from './errors.js';
|
|
12
12
|
import { verifyCredential, verifyCredentialAgainst } from './jwks.js';
|
|
13
|
-
|
|
13
|
+
/**
|
|
14
|
+
* How long a callback Session reuses a learned route. It stays at most the Kernel's in-flight
|
|
15
|
+
* issuer window (`KERNEL_INFLIGHT_ISSUER_MS`, Host default 300 s; CT11): a route learned to a
|
|
16
|
+
* deployment replaced by a consented install ages out while that deployment is still accepted and
|
|
17
|
+
* answers the reserved miss, never after its own credential is refused (AM-85).
|
|
18
|
+
*/
|
|
19
|
+
export const DEFAULT_ROUTE_AGE_MS = 60_000;
|
|
14
20
|
export async function admit(request, configuration) {
|
|
15
21
|
const execution = request.context.execution;
|
|
16
22
|
requireLive(execution);
|
|
@@ -32,10 +38,7 @@ export async function admit(request, configuration) {
|
|
|
32
38
|
}), {
|
|
33
39
|
signal: execution.signal,
|
|
34
40
|
timeoutMs: Math.max(1, execution.deadline - Date.now()),
|
|
35
|
-
delegate: {
|
|
36
|
-
ttlSeconds: callbackTtl(execution.deadline),
|
|
37
|
-
attenuation: { kind: 'identity', self: true },
|
|
38
|
-
},
|
|
41
|
+
delegate: { ttlSeconds: callbackTtl(execution.deadline) },
|
|
39
42
|
});
|
|
40
43
|
return result.value;
|
|
41
44
|
}
|
|
@@ -53,15 +56,14 @@ export async function authenticate(credentialInput, expectedKernel, execution, c
|
|
|
53
56
|
throw protocolError('AUTH_INVALID', 'Credential is invalid.');
|
|
54
57
|
}
|
|
55
58
|
const expressions = callbackIdentities(established.delegation.credential);
|
|
59
|
+
const session = (expression) => callbackSession(expectedKernel, expression, established.verified, execution, configuration);
|
|
56
60
|
const sessions = Object.freeze({
|
|
57
|
-
caller:
|
|
58
|
-
self:
|
|
59
|
-
union: callbackSession(expressions.union),
|
|
61
|
+
caller: session(expressions.caller),
|
|
62
|
+
self: session(expressions.self),
|
|
60
63
|
});
|
|
61
64
|
const graph = Object.freeze({
|
|
62
65
|
caller: bindSession(sessions.caller, execution),
|
|
63
66
|
self: bindSession(sessions.self, execution),
|
|
64
|
-
union: bindSession(sessions.union, execution),
|
|
65
67
|
});
|
|
66
68
|
let closed = false;
|
|
67
69
|
return Object.freeze({
|
|
@@ -73,35 +75,46 @@ export async function authenticate(credentialInput, expectedKernel, execution, c
|
|
|
73
75
|
closed = true;
|
|
74
76
|
sessions.caller.close();
|
|
75
77
|
sessions.self.close();
|
|
76
|
-
sessions.union.close();
|
|
77
78
|
},
|
|
78
79
|
});
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* The Domain's own authority toward one Kernel for a step of the durable Execution `executionId`,
|
|
83
|
+
* which no caller credential carries: the run acts as its executor, never as its initiator. Every
|
|
84
|
+
* credential names `executionId` in `EXECUTION_CLAIM`, so the Kernel can accept a replaced issuer
|
|
85
|
+
* for the steps of a run in flight at a consented issuer change. The caller owns the returned
|
|
86
|
+
* Session.
|
|
87
|
+
*/
|
|
88
|
+
export function executorSession(kernel, executionId, execution, configuration) {
|
|
89
|
+
const admitted = httpIssuer(kernel, configuration.policy.allowInsecureHttp === true);
|
|
90
|
+
admitEndpoint(invocationUrl(admitted), configuration.policy);
|
|
91
|
+
return callbackSession(admitted, selfIdentity, undefined, execution, configuration, executionId);
|
|
92
|
+
}
|
|
93
|
+
function callbackSession(kernel, expression, carrier, execution, configuration, executionId) {
|
|
94
|
+
const resolveCallback = createCallbackCredentialResolver(configuration.signing, configuration.issuer, configuration.subject, kernel, expression, carrier, execution, executionId);
|
|
95
|
+
return new ClientSession({
|
|
96
|
+
kernel,
|
|
97
|
+
fetch: boundedFetch(configuration.fetch, execution.signal),
|
|
98
|
+
auth: {
|
|
99
|
+
ttlSeconds: Math.min(callbackTtl(execution.deadline), maximumCallbackDelegationTtlSeconds),
|
|
100
|
+
async resolve(_call, signal) {
|
|
101
|
+
const callback = await resolveCallback(signal);
|
|
102
|
+
signal.throwIfAborted();
|
|
103
|
+
return {
|
|
104
|
+
credential: callback.credential,
|
|
105
|
+
delegate: { ttlSeconds: callback.delegateTtlSeconds },
|
|
106
|
+
};
|
|
101
107
|
},
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
108
|
+
},
|
|
109
|
+
policy: {
|
|
110
|
+
maximumRouteAgeMs: DEFAULT_ROUTE_AGE_MS,
|
|
111
|
+
...(configuration.policy.allowEndpoint === undefined
|
|
112
|
+
? {}
|
|
113
|
+
: { allowEndpoint: configuration.policy.allowEndpoint }),
|
|
114
|
+
...(configuration.policy.allowInsecureHttp === true ? { allowInsecureHttp: true } : {}),
|
|
115
|
+
},
|
|
116
|
+
timeoutMs: Math.max(1, execution.deadline - Date.now()),
|
|
117
|
+
});
|
|
105
118
|
}
|
|
106
119
|
async function establishCaller(input, audience, verification, execution, policy) {
|
|
107
120
|
requireLive(execution);
|
|
@@ -115,7 +128,7 @@ async function establishCaller(input, audience, verification, execution, policy)
|
|
|
115
128
|
if (proof.verified.sub !== context.verified.sub) {
|
|
116
129
|
throw new CredentialRejected('Destination carrier and authority proof subjects differ.');
|
|
117
130
|
}
|
|
118
|
-
const
|
|
131
|
+
const identity = acceptResolvedDelegation(proof.verified.claims.delegation);
|
|
119
132
|
let principal;
|
|
120
133
|
try {
|
|
121
134
|
principal = NodeId(context.verified.sub);
|
|
@@ -129,7 +142,7 @@ async function establishCaller(input, audience, verification, execution, policy)
|
|
|
129
142
|
caller: Object.freeze({
|
|
130
143
|
kind: 'authenticated',
|
|
131
144
|
principal,
|
|
132
|
-
|
|
145
|
+
identity,
|
|
133
146
|
authentication: credential.evidence(context),
|
|
134
147
|
}),
|
|
135
148
|
});
|
|
@@ -140,6 +153,7 @@ async function establishCaller(input, audience, verification, execution, policy)
|
|
|
140
153
|
throw protocolError('BACKEND_UNAVAILABLE', 'Credential issuer is unavailable.');
|
|
141
154
|
}
|
|
142
155
|
if (cause instanceof CredentialRejected ||
|
|
156
|
+
cause instanceof AuthValueError ||
|
|
143
157
|
cause instanceof joseErrors.JOSEError ||
|
|
144
158
|
cause instanceof protocolErrors.ProtocolError) {
|
|
145
159
|
throw protocolError('AUTH_INVALID', 'Credential is invalid.');
|
|
@@ -147,6 +161,7 @@ async function establishCaller(input, audience, verification, execution, policy)
|
|
|
147
161
|
throw cause;
|
|
148
162
|
}
|
|
149
163
|
}
|
|
164
|
+
/** Accept a Kernel delegation proof claim naming exactly one resolved caller Identity. */
|
|
150
165
|
export function acceptResolvedDelegation(input) {
|
|
151
166
|
if (input === null ||
|
|
152
167
|
typeof input !== 'object' ||
|
|
@@ -157,5 +172,14 @@ export function acceptResolvedDelegation(input) {
|
|
|
157
172
|
Reflect.get(input, 'v') !== 1) {
|
|
158
173
|
throw new AuthValueError('AUTH_GRANT_INVALID', 'Expected resolved delegation.');
|
|
159
174
|
}
|
|
160
|
-
|
|
175
|
+
const raw = Reflect.get(input, 'expr');
|
|
176
|
+
// grant.accept collapses duplicate operands (union(X, X) becomes X), so the leaf is checked as sent.
|
|
177
|
+
if (raw === null || typeof raw !== 'object' || Reflect.get(raw, 'kind') !== 'identity') {
|
|
178
|
+
throw new AuthValueError('AUTH_GRANT_INVALID', 'Expected one resolved caller Identity.');
|
|
179
|
+
}
|
|
180
|
+
const { expr } = grant.accept({ expr: raw });
|
|
181
|
+
if (expr.kind !== 'identity') {
|
|
182
|
+
throw new AuthValueError('AUTH_GRANT_INVALID', 'Expected one resolved caller Identity.');
|
|
183
|
+
}
|
|
184
|
+
return expr.id;
|
|
161
185
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { IssuerId, UnresolvedIdentityExpr, VerifiedCredential } from '../../platform/auth/index.js';
|
|
2
|
+
import type { NodeId } from '../../platform/graph/node/index.js';
|
|
2
3
|
import type { SigningMaterial } from './signing.js';
|
|
3
4
|
export declare const maximumCallbackTtlSeconds = 120;
|
|
4
5
|
export declare const maximumCallbackDelegationTtlSeconds = 60;
|
|
@@ -7,8 +8,13 @@ export interface SignedCallback {
|
|
|
7
8
|
readonly expiresAt: number;
|
|
8
9
|
readonly delegateTtlSeconds: number;
|
|
9
10
|
}
|
|
10
|
-
export type
|
|
11
|
-
/**
|
|
11
|
+
export type CallbackMode = 'caller' | 'self';
|
|
12
|
+
/** The Domain's own authority, independent of any caller. */
|
|
13
|
+
export declare const selfIdentity: Readonly<{
|
|
14
|
+
kind: 'identity';
|
|
15
|
+
self: true;
|
|
16
|
+
}>;
|
|
17
|
+
/** Exact single-identity callback authority for each Kernel Domain graph mode. */
|
|
12
18
|
export declare function callbackIdentities(nested: string | Uint8Array): Readonly<{
|
|
13
19
|
caller: Readonly<{
|
|
14
20
|
kind: 'identity';
|
|
@@ -18,16 +24,6 @@ export declare function callbackIdentities(nested: string | Uint8Array): Readonl
|
|
|
18
24
|
kind: 'identity';
|
|
19
25
|
self: true;
|
|
20
26
|
}>;
|
|
21
|
-
union: Readonly<{
|
|
22
|
-
kind: 'union';
|
|
23
|
-
operands: readonly (Readonly<{
|
|
24
|
-
kind: 'identity';
|
|
25
|
-
credential: string | Uint8Array<ArrayBufferLike>;
|
|
26
|
-
}> | Readonly<{
|
|
27
|
-
kind: 'identity';
|
|
28
|
-
self: true;
|
|
29
|
-
}>)[];
|
|
30
|
-
}>;
|
|
31
27
|
}>;
|
|
32
28
|
export declare function signDomainCallback(signing: SigningMaterial, issuer: IssuerId, subject: string, audience: IssuerId, execution: {
|
|
33
29
|
readonly deadline: number;
|
|
@@ -37,8 +33,13 @@ export declare function signCallback(signing: SigningMaterial, issuer: IssuerId,
|
|
|
37
33
|
readonly deadline: number;
|
|
38
34
|
readonly signal: AbortSignal;
|
|
39
35
|
}): Promise<string>;
|
|
40
|
-
/**
|
|
41
|
-
|
|
36
|
+
/**
|
|
37
|
+
* Reuse one exact callback authority partition, refreshing only near its bounded expiry. Without a
|
|
38
|
+
* carrier the callback is the Domain's own authority, bounded by the execution alone. An
|
|
39
|
+
* `executionId` is the durable Execution a step's executor credential names in `EXECUTION_CLAIM`;
|
|
40
|
+
* no caller-bound callback names one.
|
|
41
|
+
*/
|
|
42
|
+
export declare function createCallbackCredentialResolver(signing: SigningMaterial, issuer: IssuerId, subject: string, audience: IssuerId, expression: UnresolvedIdentityExpr, carrier: VerifiedCredential | undefined, execution: {
|
|
42
43
|
readonly deadline: number;
|
|
43
44
|
readonly signal: AbortSignal;
|
|
44
|
-
}): (signal: AbortSignal) => Promise<SignedCallback>;
|
|
45
|
+
}, executionId?: NodeId): (signal: AbortSignal) => Promise<SignedCallback>;
|
|
@@ -1,32 +1,34 @@
|
|
|
1
|
+
import { EXECUTION_CLAIM } from '@astrale-os/kernel-protocol/issuer/claims';
|
|
1
2
|
import { SignJWT } from 'jose';
|
|
2
3
|
import { protocolError } from '../invocation/result/index.js';
|
|
3
4
|
import { requireLive } from './errors.js';
|
|
4
5
|
export const maximumCallbackTtlSeconds = 120;
|
|
5
6
|
export const maximumCallbackDelegationTtlSeconds = 60;
|
|
6
7
|
const CALLBACK_DELEGATION_SKEW_SECONDS = 5;
|
|
7
|
-
/**
|
|
8
|
+
/** The Domain's own authority, independent of any caller. */
|
|
9
|
+
export const selfIdentity = Object.freeze({ kind: 'identity', self: true });
|
|
10
|
+
/** Exact single-identity callback authority for each Kernel Domain graph mode. */
|
|
8
11
|
export function callbackIdentities(nested) {
|
|
9
|
-
const caller = Object.freeze({ kind: 'identity', credential: nested });
|
|
10
|
-
const self = Object.freeze({ kind: 'identity', self: true });
|
|
11
12
|
return Object.freeze({
|
|
12
|
-
caller,
|
|
13
|
-
self,
|
|
14
|
-
union: Object.freeze({
|
|
15
|
-
kind: 'union',
|
|
16
|
-
operands: Object.freeze([self, caller]),
|
|
17
|
-
}),
|
|
13
|
+
caller: Object.freeze({ kind: 'identity', credential: nested }),
|
|
14
|
+
self: selfIdentity,
|
|
18
15
|
});
|
|
19
16
|
}
|
|
20
17
|
export async function signDomainCallback(signing, issuer, subject, audience, execution) {
|
|
21
|
-
return (await sign(signing, issuer, subject, audience,
|
|
18
|
+
return (await sign(signing, issuer, subject, audience, selfIdentity, execution)).credential;
|
|
22
19
|
}
|
|
23
20
|
export async function signCallback(signing, issuer, subject, audience, expression, carrier, execution) {
|
|
24
21
|
const maximum = carrier.exp ?? Number.POSITIVE_INFINITY;
|
|
25
22
|
return (await sign(signing, issuer, subject, audience, expression, execution, maximum)).credential;
|
|
26
23
|
}
|
|
27
|
-
/**
|
|
28
|
-
|
|
29
|
-
|
|
24
|
+
/**
|
|
25
|
+
* Reuse one exact callback authority partition, refreshing only near its bounded expiry. Without a
|
|
26
|
+
* carrier the callback is the Domain's own authority, bounded by the execution alone. An
|
|
27
|
+
* `executionId` is the durable Execution a step's executor credential names in `EXECUTION_CLAIM`;
|
|
28
|
+
* no caller-bound callback names one.
|
|
29
|
+
*/
|
|
30
|
+
export function createCallbackCredentialResolver(signing, issuer, subject, audience, expression, carrier, execution, executionId) {
|
|
31
|
+
const maximum = carrier?.exp ?? Number.POSITIVE_INFINITY;
|
|
30
32
|
let cached;
|
|
31
33
|
let pending;
|
|
32
34
|
return async (signal) => {
|
|
@@ -38,7 +40,7 @@ export function createCallbackCredentialResolver(signing, issuer, subject, audie
|
|
|
38
40
|
return cached;
|
|
39
41
|
}
|
|
40
42
|
if (pending === undefined) {
|
|
41
|
-
const current = sign(signing, issuer, subject, audience, expression, execution, maximum).then((signed) => {
|
|
43
|
+
const current = sign(signing, issuer, subject, audience, expression, execution, maximum, executionId).then((signed) => {
|
|
42
44
|
const delegateTtlSeconds = Math.min(maximumCallbackDelegationTtlSeconds, signed.expiresAt - signed.issuedAt - CALLBACK_DELEGATION_SKEW_SECONDS);
|
|
43
45
|
if (delegateTtlSeconds < 1) {
|
|
44
46
|
throw protocolError('AUTH_INVALID', 'Credential is invalid.');
|
|
@@ -61,7 +63,7 @@ export function createCallbackCredentialResolver(signing, issuer, subject, audie
|
|
|
61
63
|
return withSignal(pending, signal);
|
|
62
64
|
};
|
|
63
65
|
}
|
|
64
|
-
async function sign(signing, issuer, subject, audience, expression, execution, maximum = Number.POSITIVE_INFINITY) {
|
|
66
|
+
async function sign(signing, issuer, subject, audience, expression, execution, maximum = Number.POSITIVE_INFINITY, executionId) {
|
|
65
67
|
requireLive(execution);
|
|
66
68
|
const privateKey = await withSignal(signing.privateKey, execution.signal);
|
|
67
69
|
requireLive(execution);
|
|
@@ -70,7 +72,10 @@ async function sign(signing, issuer, subject, audience, expression, execution, m
|
|
|
70
72
|
if (!Number.isFinite(expiresAt) || expiresAt <= now) {
|
|
71
73
|
throw protocolError('AUTH_INVALID', 'Credential is invalid.');
|
|
72
74
|
}
|
|
73
|
-
const credential = await withSignal(new SignJWT({
|
|
75
|
+
const credential = await withSignal(new SignJWT({
|
|
76
|
+
grant: { v: 1, expr: expression },
|
|
77
|
+
...(executionId === undefined ? {} : { [EXECUTION_CLAIM]: executionId }),
|
|
78
|
+
})
|
|
74
79
|
.setProtectedHeader({
|
|
75
80
|
alg: signing.algorithm,
|
|
76
81
|
...(signing.keyId === undefined ? {} : { kid: signing.keyId }),
|
|
@@ -1,6 +1,13 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import * as
|
|
1
|
+
import type { release as serverRelease } from '@astrale-os/kernel-server';
|
|
2
|
+
import * as release from '@astrale-os/kernel-protocol/release';
|
|
3
3
|
import type { IssuerId } from '../../platform/auth/index.js';
|
|
4
4
|
import type { SigningMaterial } from './signing.js';
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
type Served = release.DomainRelease | release.legacy.Publication;
|
|
6
|
+
/**
|
|
7
|
+
* Create one stateless, nonce-bound public Delivery provider for the exact document a deployment
|
|
8
|
+
* serves. It answers in the request's version: a Delivery v2 carrying the release for a v2
|
|
9
|
+
* request, and a Delivery v1 carrying the Publication (a release's frozen v3 projection) for the
|
|
10
|
+
* deprecated v1 request. A stable target's Publication answers v1 only.
|
|
11
|
+
*/
|
|
12
|
+
export declare function releaseDelivery(signing: SigningMaterial, issuer: IssuerId, subject: string, deployed: Served): serverRelease.delivery.Provider;
|
|
13
|
+
export {};
|
|
@@ -1,34 +1,61 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as release from '@astrale-os/kernel-protocol/release';
|
|
2
2
|
import { SignJWT } from 'jose';
|
|
3
3
|
const ATTESTATION_TTL_SECONDS = 60;
|
|
4
|
-
/**
|
|
5
|
-
|
|
4
|
+
/**
|
|
5
|
+
* Create one stateless, nonce-bound public Delivery provider for the exact document a deployment
|
|
6
|
+
* serves. It answers in the request's version: a Delivery v2 carrying the release for a v2
|
|
7
|
+
* request, and a Delivery v1 carrying the Publication (a release's frozen v3 projection) for the
|
|
8
|
+
* deprecated v1 request. A stable target's Publication answers v1 only.
|
|
9
|
+
*/
|
|
10
|
+
export function releaseDelivery(signing, issuer, subject, deployed) {
|
|
11
|
+
const projection = deployed.version === 4 ? release.legacy.publication(deployed) : deployed;
|
|
6
12
|
return Object.freeze({
|
|
7
13
|
async create(request, context) {
|
|
8
14
|
context.signal.throwIfAborted();
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
15
|
+
if (request.version === 1) {
|
|
16
|
+
const attestation = await attest(signing, issuer, subject, request.kernel, {
|
|
17
|
+
purpose: release.legacy.delivery.PURPOSE,
|
|
18
|
+
nonce: request.nonce,
|
|
19
|
+
etag: projection.etag,
|
|
20
|
+
schemaRevision: projection.schema.revision,
|
|
21
|
+
});
|
|
22
|
+
context.signal.throwIfAborted();
|
|
23
|
+
return release.legacy.delivery.accept({
|
|
24
|
+
format: 'astrale.domain.delivery',
|
|
25
|
+
version: 1,
|
|
26
|
+
publication: projection,
|
|
27
|
+
attestation,
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
if (deployed.version !== 4) {
|
|
31
|
+
throw new TypeError('A Publication-backed deployment answers Delivery v1 only.');
|
|
32
|
+
}
|
|
33
|
+
const attestation = await attest(signing, issuer, subject, request.kernel, {
|
|
34
|
+
purpose: release.delivery.PURPOSE,
|
|
12
35
|
nonce: request.nonce,
|
|
13
|
-
|
|
36
|
+
release: deployed.digest,
|
|
14
37
|
schemaRevision: deployed.schema.revision,
|
|
15
|
-
})
|
|
16
|
-
.setProtectedHeader({
|
|
17
|
-
alg: signing.algorithm,
|
|
18
|
-
...(signing.keyId === undefined ? {} : { kid: signing.keyId }),
|
|
19
|
-
})
|
|
20
|
-
.setIssuer(issuer)
|
|
21
|
-
.setSubject(subject)
|
|
22
|
-
.setAudience(request.kernel)
|
|
23
|
-
.setExpirationTime(now + ATTESTATION_TTL_SECONDS)
|
|
24
|
-
.sign(await signing.privateKey);
|
|
38
|
+
});
|
|
25
39
|
context.signal.throwIfAborted();
|
|
26
|
-
return
|
|
40
|
+
return release.delivery.accept({
|
|
27
41
|
format: 'astrale.domain.delivery',
|
|
28
|
-
version:
|
|
29
|
-
|
|
42
|
+
version: 2,
|
|
43
|
+
release: deployed,
|
|
30
44
|
attestation,
|
|
31
45
|
});
|
|
32
46
|
},
|
|
33
47
|
});
|
|
34
48
|
}
|
|
49
|
+
async function attest(signing, issuer, subject, kernel, claims) {
|
|
50
|
+
const now = Math.floor(Date.now() / 1_000);
|
|
51
|
+
return new SignJWT(claims)
|
|
52
|
+
.setProtectedHeader({
|
|
53
|
+
alg: signing.algorithm,
|
|
54
|
+
...(signing.keyId === undefined ? {} : { kid: signing.keyId }),
|
|
55
|
+
})
|
|
56
|
+
.setIssuer(issuer)
|
|
57
|
+
.setSubject(subject)
|
|
58
|
+
.setAudience(kernel)
|
|
59
|
+
.setExpirationTime(now + ATTESTATION_TTL_SECONDS)
|
|
60
|
+
.sign(await signing.privateKey);
|
|
61
|
+
}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import type { Fetch } from '@astrale-os/kernel-client';
|
|
2
|
-
import type * as
|
|
3
|
-
import type { Issuer, exchange,
|
|
2
|
+
import type * as releaseProtocol from '@astrale-os/kernel-protocol/release';
|
|
3
|
+
import type { Issuer, exchange, release } from '@astrale-os/kernel-server';
|
|
4
4
|
import type { IssuerId, JsonWebKey } from '../../platform/auth/index.js';
|
|
5
|
+
import type { ClientSession } from '../../platform/client/session/index.js';
|
|
6
|
+
import type { NodeId } from '../../platform/graph/node/index.js';
|
|
5
7
|
import type { InvocationAuthority } from '../invocation/index.js';
|
|
6
8
|
import type { ExchangeOptions } from './exchange.js';
|
|
7
9
|
import type { IdentityNetworkPolicy } from './jwks.js';
|
|
@@ -9,7 +11,20 @@ import type { IdentityNetworkPolicy } from './jwks.js';
|
|
|
9
11
|
export interface Identity extends Issuer, InvocationAuthority {
|
|
10
12
|
readonly subject: string;
|
|
11
13
|
readonly tokenExchange?: exchange.Provider;
|
|
12
|
-
|
|
14
|
+
/**
|
|
15
|
+
* Delivery for the exact document this deployment serves: Delivery v2 over its release and v1
|
|
16
|
+
* over its frozen v3 projection, or v1 over a stable target's Publication.
|
|
17
|
+
*/
|
|
18
|
+
delivery(served: releaseProtocol.DomainRelease | releaseProtocol.legacy.Publication): release.delivery.Provider;
|
|
19
|
+
/**
|
|
20
|
+
* The Domain's own authority toward one Kernel for a step of the durable Execution `executionId`
|
|
21
|
+
* (`ctx.execution.id`), which no caller credential carries; its credentials name `executionId` in
|
|
22
|
+
* `EXECUTION_CLAIM`. Required to serve durable Workflows; the caller closes the Session.
|
|
23
|
+
*/
|
|
24
|
+
executor?(kernel: IssuerId, executionId: NodeId, execution: {
|
|
25
|
+
readonly deadline: number;
|
|
26
|
+
readonly signal: AbortSignal;
|
|
27
|
+
}): ClientSession;
|
|
13
28
|
}
|
|
14
29
|
export interface IdentityInput extends IdentityNetworkPolicy {
|
|
15
30
|
readonly issuer: IssuerId;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { admit, authenticate } from './authentication.js';
|
|
2
|
-
import {
|
|
1
|
+
import { admit, authenticate, executorSession } from './authentication.js';
|
|
2
|
+
import { releaseDelivery } from './delivery.js';
|
|
3
3
|
import { httpIssuer } from './errors.js';
|
|
4
4
|
import { maximumExchangeTtl, tokenExchange } from './exchange.js';
|
|
5
5
|
import { createVerificationBasisResolver } from './jwks.js';
|
|
@@ -49,8 +49,9 @@ export function createIdentity(input) {
|
|
|
49
49
|
? {}
|
|
50
50
|
: { loadIssuerPublicKeys: input.loadIssuerPublicKeys }),
|
|
51
51
|
...(exchangeProvider === undefined ? {} : { tokenExchange: exchangeProvider }),
|
|
52
|
-
delivery: (
|
|
52
|
+
delivery: (served) => releaseDelivery(material, issuer, input.subject, served),
|
|
53
53
|
admit: (request) => admit(request, configuration),
|
|
54
|
+
executor: (kernel, executionId, execution) => executorSession(kernel, executionId, execution, configuration),
|
|
54
55
|
authenticate: (request) => authenticate(request.credential, request.via.issuer, request.context.execution, configuration),
|
|
55
56
|
});
|
|
56
57
|
}
|
|
@@ -67,6 +68,7 @@ export function identity(input) {
|
|
|
67
68
|
'delivery',
|
|
68
69
|
'admit',
|
|
69
70
|
'authenticate',
|
|
71
|
+
'executor',
|
|
70
72
|
]);
|
|
71
73
|
if (Reflect.ownKeys(input).some((key) => !allowed.has(key)) ||
|
|
72
74
|
typeof input.subject !== 'string' ||
|
|
@@ -74,7 +76,8 @@ export function identity(input) {
|
|
|
74
76
|
typeof input.loadPublicKeys !== 'function' ||
|
|
75
77
|
typeof input.delivery !== 'function' ||
|
|
76
78
|
typeof input.admit !== 'function' ||
|
|
77
|
-
typeof input.authenticate !== 'function'
|
|
79
|
+
typeof input.authenticate !== 'function' ||
|
|
80
|
+
(input.executor !== undefined && typeof input.executor !== 'function')) {
|
|
78
81
|
invalid();
|
|
79
82
|
}
|
|
80
83
|
const receiver = Object.freeze({ ...input });
|
|
@@ -92,6 +95,7 @@ export function identity(input) {
|
|
|
92
95
|
delivery: receiver.delivery.bind(receiver),
|
|
93
96
|
admit: receiver.admit.bind(receiver),
|
|
94
97
|
authenticate: receiver.authenticate.bind(receiver),
|
|
98
|
+
...(receiver.executor === undefined ? {} : { executor: receiver.executor.bind(receiver) }),
|
|
95
99
|
});
|
|
96
100
|
}
|
|
97
101
|
function invalid() {
|
|
@@ -8,6 +8,17 @@ const MAXIMUM_DISCOVERY_BYTES = 256 * 1024;
|
|
|
8
8
|
const MAXIMUM_VERIFICATION_BASES = 64;
|
|
9
9
|
const VERIFICATION_BASIS_TTL_MS = 60_000;
|
|
10
10
|
const UNKNOWN_KEY_REFRESH_COOLDOWN_MS = 60_000;
|
|
11
|
+
const DISCOVERY_RETRY_DELAY_MS = 250;
|
|
12
|
+
// Only typed transport failures are replayable. Browser TypeError, TLS, HTTP and document
|
|
13
|
+
// admission failures carry no evidence that repeating the request can safely recover.
|
|
14
|
+
const TRANSIENT_TRANSPORT_CODES = new Set([
|
|
15
|
+
'ENOTFOUND',
|
|
16
|
+
'EAI_AGAIN',
|
|
17
|
+
'ECONNRESET',
|
|
18
|
+
'ETIMEDOUT',
|
|
19
|
+
'UND_ERR_CONNECT_TIMEOUT',
|
|
20
|
+
'UND_ERR_SOCKET',
|
|
21
|
+
]);
|
|
11
22
|
/**
|
|
12
23
|
* Retain only recently admitted public issuer material for one execution Identity.
|
|
13
24
|
* An unseen key ID may refresh once per cooldown; failures never replace a usable basis.
|
|
@@ -220,21 +231,55 @@ async function discover(issuer, fetch, signal, policy) {
|
|
|
220
231
|
});
|
|
221
232
|
}
|
|
222
233
|
async function request(fetch, url, signal) {
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
await
|
|
227
|
-
|
|
234
|
+
for (let attempt = 0;; attempt += 1) {
|
|
235
|
+
signal.throwIfAborted();
|
|
236
|
+
try {
|
|
237
|
+
const response = await fetch(url, { method: 'GET', redirect: 'error', signal });
|
|
238
|
+
if (!response.ok) {
|
|
239
|
+
await response.body?.cancel();
|
|
240
|
+
throw new IssuerUnavailable(`Issuer discovery returned HTTP ${response.status}.`);
|
|
241
|
+
}
|
|
242
|
+
return response;
|
|
243
|
+
}
|
|
244
|
+
catch (cause) {
|
|
245
|
+
if (signal.aborted)
|
|
246
|
+
throw signal.reason;
|
|
247
|
+
if (cause instanceof IssuerUnavailable)
|
|
248
|
+
throw cause;
|
|
249
|
+
// One retry belongs to the shared issuer load, never to each observer or business call.
|
|
250
|
+
if (attempt !== 0 || !transientTransport(cause)) {
|
|
251
|
+
throw new IssuerUnavailable('Issuer discovery request failed.', cause);
|
|
252
|
+
}
|
|
253
|
+
await retryDelay(signal);
|
|
228
254
|
}
|
|
229
|
-
return response;
|
|
230
255
|
}
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
256
|
+
}
|
|
257
|
+
function transientTransport(cause) {
|
|
258
|
+
// Node fetch wraps its transport Error; Bun may expose the code directly. Bound traversal
|
|
259
|
+
// of an external cause chain, including cycles, and do not look past a classified refusal.
|
|
260
|
+
for (let depth = 0; depth < 4; depth += 1) {
|
|
261
|
+
if (cause === null || typeof cause !== 'object')
|
|
262
|
+
return false;
|
|
263
|
+
const code = Reflect.get(cause, 'code');
|
|
264
|
+
if (typeof code === 'string')
|
|
265
|
+
return TRANSIENT_TRANSPORT_CODES.has(code);
|
|
266
|
+
cause = Reflect.get(cause, 'cause');
|
|
237
267
|
}
|
|
268
|
+
return false;
|
|
269
|
+
}
|
|
270
|
+
function retryDelay(signal) {
|
|
271
|
+
signal.throwIfAborted();
|
|
272
|
+
return new Promise((resolve, reject) => {
|
|
273
|
+
const cancel = () => {
|
|
274
|
+
clearTimeout(timer);
|
|
275
|
+
reject(signal.reason);
|
|
276
|
+
};
|
|
277
|
+
const timer = setTimeout(() => {
|
|
278
|
+
signal.removeEventListener('abort', cancel);
|
|
279
|
+
resolve();
|
|
280
|
+
}, DISCOVERY_RETRY_DELAY_MS);
|
|
281
|
+
signal.addEventListener('abort', cancel, { once: true });
|
|
282
|
+
});
|
|
238
283
|
}
|
|
239
284
|
async function json(response, signal) {
|
|
240
285
|
const bytes = new Uint8Array(await response.arrayBuffer());
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export { serve } from './serve.js';
|
|
2
|
-
export type { ExecutionContext,
|
|
3
|
-
export { createIdentity, type ExchangeOptions, type Identity, type IdentityInput, } from './identity/index.js';
|
|
2
|
+
export type { ExecutionContext, ServedDomain, ServeInput } from './serve.js';
|
|
3
|
+
export { createIdentity, maximumExchangeTtl, type ExchangeOptions, type Identity, type IdentityInput, } from './identity/index.js';
|
|
4
4
|
export { InvocationError } from './invocation/index.js';
|
|
5
5
|
export type { InvocationErrorCode } from './invocation/index.js';
|
|
6
|
+
export type { DurableEngine, DurableServing, DurableServingProvider } from './workflows/index.js';
|
|
7
|
+
export { isCanonicalDurableRequest, isLegacyDurableRequest } from './workflows/route.js';
|
package/dist/execution/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export { serve } from './serve.js';
|
|
2
|
-
export { createIdentity, } from './identity/index.js';
|
|
2
|
+
export { createIdentity, maximumExchangeTtl, } from './identity/index.js';
|
|
3
3
|
export { InvocationError } from './invocation/index.js';
|
|
4
|
+
export { isCanonicalDurableRequest, isLegacyDurableRequest } from './workflows/route.js';
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import type { HandlerRequest } from '@astrale-os/kernel-server';
|
|
2
|
-
import type { AnonymousCaller,
|
|
3
|
-
import type { Release } from '../../../deployment/release/index.js';
|
|
2
|
+
import type { AnonymousCaller, ResolvedCallable } from '../../../application/action/index.js';
|
|
4
3
|
import type { Domain } from '../../../platform/schema/index.js';
|
|
5
4
|
import type { AuthenticatedInvocation, InvocationAuthority } from './authority.js';
|
|
6
5
|
export interface AnonymousInvocation {
|
|
@@ -9,9 +8,5 @@ export interface AnonymousInvocation {
|
|
|
9
8
|
readonly graph: null;
|
|
10
9
|
close(): void;
|
|
11
10
|
}
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
}
|
|
15
|
-
export type InvocationAuthentication = AnonymousInvocation | AdmittedAuthenticatedInvocation;
|
|
16
|
-
export declare function authentication(callable: ResolvedCallable, request: HandlerRequest, release: Release, domain: Domain, authority: InvocationAuthority): Promise<InvocationAuthentication>;
|
|
17
|
-
export {};
|
|
11
|
+
export type InvocationAuthentication = AnonymousInvocation | AuthenticatedInvocation;
|
|
12
|
+
export declare function authentication(callable: ResolvedCallable, request: HandlerRequest, domain: Domain, authority: InvocationAuthority): Promise<InvocationAuthentication>;
|