@astrale-os/sdk 0.6.0-beta.3 → 0.6.0-beta.31
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 +181 -58
- package/dist/application/action/action.d.ts +6 -0
- package/dist/application/action/authoring.d.ts +1 -1
- package/dist/application/action/context.d.ts +44 -31
- package/dist/application/action/define.d.ts +3 -3
- package/dist/application/action/index.d.ts +1 -1
- package/dist/application/define.d.ts +8 -6
- package/dist/application/define.js +28 -14
- package/dist/application/dependency/index.d.ts +1 -1
- package/dist/application/dependency/invoker.d.ts +14 -9
- package/dist/application/domain.d.ts +30 -0
- package/dist/application/index.d.ts +4 -4
- package/dist/application/index.js +1 -1
- package/dist/application/integration/operation.d.ts +2 -2
- package/dist/application/mutation/authoring/properties.d.ts +5 -3
- package/dist/application/mutation/authoring/properties.js +35 -2
- package/dist/application/mutation/authoring/transition.js +4 -1
- package/dist/application/mutation/index.d.ts +1 -1
- package/dist/application/query/composite/plan.d.ts +0 -4
- package/dist/application/query/composite/plan.js +0 -2
- package/dist/application/routes/admission.d.ts +2 -2
- package/dist/application/routes/admission.js +1 -1
- package/dist/application/routes/route.d.ts +2 -2
- package/dist/application/runtime/actions.js +3 -0
- package/dist/application/runtime/workflows.d.ts +3 -1
- package/dist/application/runtime/workflows.js +6 -4
- package/dist/application/view/define.js +4 -6
- package/dist/application/view/frontend.d.ts +2 -2
- package/dist/application/view/index.d.ts +1 -1
- package/dist/application/view/route.d.ts +0 -14
- package/dist/application/view/route.js +1 -64
- package/dist/application/workflow/authoring.d.ts +3 -2
- package/dist/application/workflow/context.d.ts +8 -2
- package/dist/application/workflow/define.d.ts +4 -4
- package/dist/application/workflow/define.js +20 -4
- package/dist/application/workflow/durable.d.ts +87 -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 +13 -3
- package/dist/deployment/adapter/adapter.d.ts +55 -13
- package/dist/deployment/adapter/bundle/bundle.d.ts +36 -0
- package/dist/deployment/adapter/bundle/file.d.ts +10 -0
- package/dist/deployment/adapter/bundle/index.d.ts +2 -0
- package/dist/deployment/adapter/define.d.ts +4 -3
- package/dist/deployment/adapter/define.js +107 -23
- package/dist/deployment/adapter/index.d.ts +4 -3
- package/dist/deployment/adapter/index.js +1 -0
- package/dist/deployment/adapter/release/command.d.ts +33 -0
- package/dist/deployment/adapter/release/context.d.ts +94 -0
- package/dist/deployment/adapter/release/index.d.ts +4 -0
- package/dist/deployment/adapter/release/index.js +1 -0
- package/dist/deployment/adapter/release/list.d.ts +53 -0
- package/dist/deployment/adapter/release/list.js +1 -0
- package/dist/deployment/adapter/release/refusal.d.ts +10 -0
- package/dist/deployment/adapter/release/refusal.js +14 -0
- package/dist/deployment/adapter/release/result.d.ts +56 -0
- package/dist/deployment/adapter/release/result.js +1 -0
- package/dist/deployment/address/configuration.d.ts +95 -0
- package/dist/deployment/address/configuration.js +273 -0
- package/dist/deployment/address/fingerprint.d.ts +5 -0
- package/dist/deployment/address/fingerprint.js +27 -0
- package/dist/deployment/address/index.d.ts +5 -0
- package/dist/deployment/address/index.js +4 -0
- package/dist/deployment/address/label.d.ts +42 -0
- package/dist/deployment/address/label.js +80 -0
- package/dist/deployment/address/line.d.ts +29 -0
- package/dist/deployment/address/line.js +53 -0
- package/dist/deployment/address/record.d.ts +73 -0
- package/dist/deployment/address/record.js +138 -0
- package/dist/deployment/address/summary.d.ts +30 -0
- package/dist/deployment/address/summary.js +1 -0
- package/dist/deployment/address/vectors.d.ts +60 -0
- package/dist/deployment/address/vectors.js +517 -0
- package/dist/deployment/authoring.d.ts +0 -2
- package/dist/deployment/authoring.js +0 -1
- package/dist/deployment/build/build.d.ts +8 -2
- package/dist/deployment/build/compile.d.ts +4 -4
- package/dist/deployment/build/compile.js +19 -17
- package/dist/deployment/build/frontend/compilation.d.ts +2 -4
- package/dist/deployment/build/frontend/compilation.js +0 -5
- package/dist/deployment/build/frontend/digest.js +1 -5
- package/dist/deployment/build/index.d.ts +1 -0
- package/dist/deployment/build/index.js +1 -0
- package/dist/deployment/build/manifest.d.ts +59 -0
- package/dist/deployment/build/manifest.js +118 -0
- package/dist/deployment/build/material.d.ts +2 -2
- package/dist/deployment/build/material.js +28 -13
- package/dist/deployment/build/schema.d.ts +2 -2
- package/dist/deployment/deployment.d.ts +3 -2
- package/dist/deployment/environment.d.ts +6 -0
- package/dist/deployment/environment.js +6 -0
- package/dist/deployment/index.d.ts +4 -6
- package/dist/deployment/index.js +1 -2
- package/dist/deployment/release/addressing.d.ts +6 -5
- package/dist/deployment/release/addressing.js +2 -3
- package/dist/deployment/release/assemble.d.ts +6 -3
- package/dist/deployment/release/assemble.js +12 -10
- package/dist/deployment/release/release.d.ts +16 -5
- package/dist/deployment/release/seal.d.ts +14 -0
- package/dist/deployment/release/seal.js +22 -0
- package/dist/deployment/release/{publication → served}/callables.d.ts +2 -2
- package/dist/deployment/release/{publication → served}/callables.js +2 -2
- package/dist/deployment/release/served/index.d.ts +11 -0
- package/dist/deployment/release/served/index.js +26 -0
- package/dist/deployment/release/{publication → served}/views.d.ts +2 -2
- package/dist/deployment/release/{publication → served}/views.js +0 -1
- package/dist/deployment/runtime/admission.d.ts +2 -2
- package/dist/deployment/runtime/admission.js +5 -5
- package/dist/deployment/verify/index.d.ts +3 -4
- package/dist/deployment/verify/index.js +2 -3
- package/dist/deployment/verify/preflight/bundle.d.ts +18 -0
- package/dist/deployment/verify/preflight/bundle.js +71 -0
- package/dist/deployment/verify/preflight/index.d.ts +1 -12
- package/dist/deployment/verify/preflight/index.js +1 -12
- package/dist/deployment/verify/readiness/fetch.d.ts +13 -0
- package/dist/deployment/verify/readiness/fetch.js +26 -0
- package/dist/deployment/verify/readiness/identity.d.ts +3 -6
- package/dist/deployment/verify/readiness/identity.js +3 -3
- package/dist/deployment/verify/readiness/index.d.ts +15 -8
- package/dist/deployment/verify/readiness/index.js +25 -6
- package/dist/deployment/verify/readiness/release.d.ts +8 -0
- package/dist/deployment/verify/readiness/release.js +22 -0
- package/dist/deployment/worker/address.d.ts +26 -0
- package/dist/deployment/worker/address.js +43 -0
- package/dist/deployment/worker/build.d.ts +60 -0
- package/dist/deployment/worker/build.js +172 -0
- package/dist/deployment/worker/configuration.d.ts +73 -0
- package/dist/deployment/worker/configuration.js +165 -0
- package/dist/deployment/worker/content.d.ts +38 -0
- package/dist/deployment/worker/content.js +169 -0
- package/dist/deployment/worker/index.d.ts +29 -0
- package/dist/deployment/worker/index.js +29 -0
- package/dist/deployment/worker/limits.d.ts +30 -0
- package/dist/deployment/worker/limits.js +30 -0
- package/dist/deployment/worker/record.d.ts +29 -0
- package/dist/deployment/worker/record.js +69 -0
- package/dist/deployment/worker/request.d.ts +118 -0
- package/dist/deployment/worker/request.js +280 -0
- package/dist/deployment/worker/response.d.ts +101 -0
- package/dist/deployment/worker/response.js +207 -0
- package/dist/execution/identity/authentication.d.ts +33 -3
- package/dist/execution/identity/authentication.js +85 -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 +6 -4
- package/dist/execution/identity/delivery.js +25 -20
- package/dist/execution/identity/identity.d.ts +17 -3
- package/dist/execution/identity/identity.js +12 -4
- package/dist/execution/identity/jwks.d.ts +5 -0
- package/dist/execution/identity/jwks.js +92 -102
- package/dist/execution/index.d.ts +4 -4
- package/dist/execution/index.js +2 -2
- package/dist/execution/invocation/admission/authentication.d.ts +11 -13
- package/dist/execution/invocation/admission/authentication.js +48 -44
- package/dist/execution/invocation/admission/authority.d.ts +28 -6
- package/dist/execution/invocation/admission/authority.js +9 -2
- package/dist/execution/invocation/admission/index.d.ts +2 -2
- package/dist/execution/invocation/admission/index.js +1 -1
- 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 +3 -1
- package/dist/execution/invocation/dependency/bind.js +36 -16
- package/dist/execution/invocation/dispatch/context.d.ts +7 -6
- package/dist/execution/invocation/dispatch/context.js +17 -31
- package/dist/execution/invocation/dispatch/workflow.js +0 -4
- package/dist/execution/invocation/index.d.ts +2 -2
- package/dist/execution/invocation/index.js +1 -1
- package/dist/execution/invocation/integration/call.d.ts +2 -1
- package/dist/execution/invocation/integration/call.js +1 -1
- package/dist/execution/invocation/integration/clients.d.ts +1 -1
- package/dist/execution/invocation/invocation.js +49 -16
- package/dist/execution/invocation/result/errors.d.ts +0 -10
- package/dist/execution/invocation/result/errors.js +0 -17
- package/dist/execution/invocation/result/index.d.ts +2 -2
- package/dist/execution/invocation/result/index.js +1 -1
- package/dist/execution/invocation/result/project.js +41 -1
- package/dist/execution/node/serve.d.ts +2 -2
- package/dist/execution/node/serve.js +1 -1
- package/dist/execution/runtime/index.d.ts +1 -0
- package/dist/execution/runtime/index.js +1 -0
- package/dist/execution/runtime/load.d.ts +3 -3
- package/dist/execution/runtime/load.js +3 -2
- package/dist/execution/runtime/release.d.ts +17 -0
- package/dist/execution/runtime/release.js +7 -0
- package/dist/execution/serve.d.ts +10 -4
- package/dist/execution/serve.js +3 -0
- package/dist/execution/service/create.js +41 -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 +14 -5
- package/dist/execution/service/serving/delivery.d.ts +5 -0
- package/dist/execution/service/{publication → serving}/delivery.js +4 -1
- package/dist/execution/service/{publication → serving}/index.d.ts +1 -1
- package/dist/execution/service/serving/installation.d.ts +4 -0
- package/dist/execution/service/serving/installation.js +9 -0
- package/dist/execution/service/serving/source.d.ts +11 -0
- package/dist/execution/service/serving/source.js +15 -0
- package/dist/execution/workflows/discovery.d.ts +14 -0
- package/dist/execution/workflows/discovery.js +151 -0
- package/dist/execution/workflows/engine.d.ts +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 +34 -0
- package/dist/execution/workflows/options.js +65 -0
- package/dist/execution/workflows/receiver.d.ts +21 -0
- package/dist/execution/workflows/receiver.js +92 -0
- package/dist/execution/workflows/route.d.ts +12 -0
- package/dist/execution/workflows/route.js +35 -0
- package/dist/execution/workflows/run.d.ts +22 -0
- package/dist/execution/workflows/run.js +223 -0
- package/dist/index.d.ts +4 -4
- package/dist/index.js +2 -2
- package/dist/platform/graph/alias.d.ts +1 -5
- package/dist/platform/graph/alias.js +1 -5
- package/dist/platform/graph/document/index.d.ts +1 -1
- package/dist/platform/graph/document/index.js +1 -1
- package/dist/platform/graph/index.d.ts +1 -1
- package/dist/platform/graph/index.js +1 -1
- package/dist/platform/release/index.d.ts +2 -0
- package/dist/platform/release/index.js +2 -0
- package/dist/platform/schema/callable-authoring.d.ts +21 -0
- package/dist/platform/schema/callable-authoring.js +27 -0
- package/dist/platform/schema/class-authoring.d.ts +61 -11
- package/dist/platform/schema/class-authoring.js +37 -4
- package/dist/platform/schema/class-icon-svg.d.ts +9 -0
- package/dist/platform/schema/class-icon-svg.js +29 -0
- package/dist/platform/schema/class-icon.d.ts +3 -8
- package/dist/platform/schema/class-icon.js +2 -29
- package/dist/platform/schema/index.d.ts +6 -4
- package/dist/platform/schema/index.js +2 -1
- package/dist/platform/schema/property.d.ts +5 -0
- package/dist/platform/schema/schema-authoring.d.ts +14 -7
- package/dist/platform/schema/schema-authoring.js +5 -1
- package/dist/platform/versioning/dependents.d.ts +18 -0
- package/dist/platform/versioning/dependents.js +15 -0
- package/dist/platform/versioning/index.d.ts +5 -0
- package/dist/platform/versioning/index.js +5 -0
- package/dist/platform/versioning/name.d.ts +38 -0
- package/dist/platform/versioning/name.js +58 -0
- package/dist/platform/versioning/reference.d.ts +48 -0
- package/dist/platform/versioning/reference.js +95 -0
- package/dist/platform/versioning/version.d.ts +72 -0
- package/dist/platform/versioning/version.js +98 -0
- package/dist/project/admit.js +1 -5
- package/dist/project/define.d.ts +4 -4
- package/dist/project/define.js +55 -35
- package/dist/project/index.d.ts +1 -1
- package/dist/project/install-command.d.ts +6 -0
- package/dist/project/install-command.js +9 -0
- package/dist/project/project.d.ts +10 -8
- package/dist/testing/dataset/define.d.ts +1 -1
- package/dist/testing/load.js +1 -1
- package/dist/tooling/cli/adapter-command.d.ts +35 -0
- package/dist/tooling/cli/adapter-command.js +66 -0
- package/dist/tooling/cli/arguments.d.ts +17 -6
- package/dist/tooling/cli/arguments.js +175 -52
- package/dist/tooling/cli/build.d.ts +55 -0
- package/dist/tooling/cli/build.js +77 -0
- package/dist/tooling/cli/bun.d.ts +0 -1
- package/dist/tooling/cli/bun.js +0 -7
- package/dist/tooling/cli/commit.d.ts +35 -0
- package/dist/tooling/cli/commit.js +235 -0
- package/dist/tooling/cli/deploy-mode.d.ts +26 -0
- package/dist/tooling/cli/deploy-mode.js +59 -0
- package/dist/tooling/cli/deploy-result.d.ts +80 -0
- package/dist/tooling/cli/deploy-result.js +64 -0
- package/dist/tooling/cli/diff/declared.d.ts +7 -0
- package/dist/tooling/cli/diff/declared.js +27 -0
- package/dist/tooling/cli/diff/index.d.ts +30 -0
- package/dist/tooling/cli/diff/index.js +58 -0
- package/dist/tooling/cli/diff/render.d.ts +15 -0
- package/dist/tooling/cli/diff/render.js +131 -0
- package/dist/tooling/cli/diff/report.d.ts +88 -0
- package/dist/tooling/cli/diff/report.js +154 -0
- package/dist/tooling/cli/dotenv.d.ts +2 -2
- package/dist/tooling/cli/dotenv.js +3 -33
- package/dist/tooling/cli/help.js +173 -60
- package/dist/tooling/cli/immutable-deployment.d.ts +83 -0
- package/dist/tooling/cli/immutable-deployment.js +135 -0
- package/dist/tooling/cli/index.d.ts +12 -4
- package/dist/tooling/cli/index.js +6 -3
- package/dist/tooling/cli/installed-on.d.ts +83 -0
- package/dist/tooling/cli/installed-on.js +156 -0
- package/dist/tooling/cli/list.d.ts +152 -0
- package/dist/tooling/cli/list.js +331 -0
- package/dist/tooling/cli/log.d.ts +5 -0
- package/dist/tooling/cli/log.js +9 -0
- package/dist/tooling/cli/orchestrate.d.ts +0 -6
- package/dist/tooling/cli/orchestrate.js +246 -90
- package/dist/tooling/cli/project.d.ts +3 -3
- package/dist/tooling/cli/publish/index.d.ts +81 -0
- package/dist/tooling/cli/publish/index.js +383 -0
- package/dist/tooling/cli/publish/report.d.ts +49 -0
- package/dist/tooling/cli/publish/report.js +15 -0
- package/dist/tooling/cli/registry/client.d.ts +121 -0
- package/dist/tooling/cli/registry/client.js +354 -0
- package/dist/tooling/cli/registry/error.d.ts +11 -0
- package/dist/tooling/cli/registry/error.js +17 -0
- package/dist/tooling/cli/registry/executable.d.ts +35 -0
- package/dist/tooling/cli/registry/executable.js +96 -0
- package/dist/tooling/cli/registry/index.d.ts +9 -0
- package/dist/tooling/cli/registry/index.js +8 -0
- package/dist/tooling/cli/registry/installations.d.ts +67 -0
- package/dist/tooling/cli/registry/installations.js +108 -0
- package/dist/tooling/cli/registry/process.d.ts +36 -0
- package/dist/tooling/cli/registry/process.js +119 -0
- package/dist/tooling/cli/secrets.d.ts +9 -0
- package/dist/tooling/cli/secrets.js +19 -0
- package/dist/tooling/cli/yank.d.ts +34 -0
- package/dist/tooling/cli/yank.js +32 -0
- package/dist/tooling/linter/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 -2
- 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/verifiers.js +0 -2
- package/dist/tooling/linter/implementations/source/views.js +2 -2
- package/dist/tooling/linter/policy/generated.js +14 -63
- package/dist/tooling/linter/requirements/registry.js +1 -6
- 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 +39 -13
- package/dist/application/application.d.ts +0 -28
- package/dist/application/query/execution/projection.d.ts +0 -3
- package/dist/application/query/execution/projection.js +0 -3
- package/dist/deployment/adapter/deploy/context.d.ts +0 -15
- package/dist/deployment/adapter/deploy/index.d.ts +0 -2
- package/dist/deployment/adapter/deploy/result.d.ts +0 -50
- package/dist/deployment/adapter/prepare/artifact.d.ts +0 -33
- package/dist/deployment/adapter/prepare/context.d.ts +0 -23
- package/dist/deployment/adapter/prepare/index.d.ts +0 -2
- package/dist/deployment/deploy.d.ts +0 -20
- package/dist/deployment/deploy.js +0 -31
- package/dist/deployment/release/publication/index.d.ts +0 -6
- package/dist/deployment/release/publication/index.js +0 -6
- package/dist/deployment/release/publication/manifest.d.ts +0 -3
- package/dist/deployment/release/publication/manifest.js +0 -5
- package/dist/deployment/release/publication/requirements.d.ts +0 -3
- package/dist/deployment/release/publication/requirements.js +0 -3
- package/dist/deployment/release/publication/seal.d.ts +0 -10
- package/dist/deployment/release/publication/seal.js +0 -39
- package/dist/deployment/verify/preflight/artifact.d.ts +0 -6
- package/dist/deployment/verify/preflight/artifact.js +0 -122
- package/dist/deployment/verify/preflight/publication.d.ts +0 -4
- package/dist/deployment/verify/preflight/publication.js +0 -14
- package/dist/deployment/verify/readiness/deployment.d.ts +0 -3
- package/dist/deployment/verify/readiness/deployment.js +0 -151
- package/dist/deployment/verify/readiness/publication.d.ts +0 -11
- package/dist/deployment/verify/readiness/publication.js +0 -41
- package/dist/execution/service/errors.d.ts +0 -3
- package/dist/execution/service/errors.js +0 -3
- package/dist/execution/service/publication/delivery.d.ts +0 -2
- package/dist/execution/service/publication/installation.d.ts +0 -3
- package/dist/execution/service/publication/installation.js +0 -8
- package/dist/execution/service/publication/source.d.ts +0 -3
- package/dist/execution/service/publication/source.js +0 -11
- package/dist/platform/publication/index.d.ts +0 -2
- package/dist/platform/publication/index.js +0 -2
- package/dist/tooling/cli/astrale/authority.d.ts +0 -5
- package/dist/tooling/cli/astrale/authority.js +0 -11
- package/dist/tooling/cli/astrale/executable.d.ts +0 -2
- package/dist/tooling/cli/astrale/executable.js +0 -47
- package/dist/tooling/cli/astrale/failure.d.ts +0 -6
- package/dist/tooling/cli/astrale/failure.js +0 -48
- package/dist/tooling/cli/astrale/instance.d.ts +0 -11
- package/dist/tooling/cli/astrale/instance.js +0 -52
- package/dist/tooling/cli/astrale/process.d.ts +0 -13
- package/dist/tooling/cli/astrale/process.js +0 -94
- package/dist/tooling/cli/astrale/version.d.ts +0 -18
- package/dist/tooling/cli/astrale/version.js +0 -55
- package/dist/tooling/cli/credential.d.ts +0 -2
- package/dist/tooling/cli/credential.js +0 -57
- package/dist/tooling/cli/deprecations.d.ts +0 -9
- package/dist/tooling/cli/deprecations.js +0 -15
- package/dist/tooling/cli/development/candidate.d.ts +0 -25
- package/dist/tooling/cli/development/candidate.js +0 -176
- package/dist/tooling/cli/development/deployment.d.ts +0 -16
- package/dist/tooling/cli/development/deployment.js +0 -39
- package/dist/tooling/cli/development/develop.d.ts +0 -11
- package/dist/tooling/cli/development/develop.js +0 -243
- package/dist/tooling/cli/development/lease.d.ts +0 -18
- package/dist/tooling/cli/development/lease.js +0 -163
- package/dist/tooling/cli/development/lifecycle.d.ts +0 -9
- package/dist/tooling/cli/development/lifecycle.js +0 -43
- package/dist/tooling/cli/development/project-imports.d.ts +0 -22
- package/dist/tooling/cli/development/project-imports.js +0 -39
- package/dist/tooling/cli/development/project-lock.d.ts +0 -16
- package/dist/tooling/cli/development/project-lock.js +0 -41
- package/dist/tooling/cli/development/rebuild.d.ts +0 -13
- package/dist/tooling/cli/development/rebuild.js +0 -58
- package/dist/tooling/cli/development/release-evidence.d.ts +0 -4
- package/dist/tooling/cli/development/release-evidence.js +0 -10
- package/dist/tooling/cli/development/report.d.ts +0 -6
- package/dist/tooling/cli/development/report.js +0 -14
- package/dist/tooling/cli/development/session-file.d.ts +0 -53
- package/dist/tooling/cli/development/session-file.js +0 -337
- package/dist/tooling/cli/development/source-watch.d.ts +0 -14
- package/dist/tooling/cli/development/source-watch.js +0 -140
- package/dist/tooling/cli/development/sources.d.ts +0 -7
- package/dist/tooling/cli/development/sources.js +0 -48
- package/dist/tooling/cli/development/target-lock.d.ts +0 -16
- package/dist/tooling/cli/development/target-lock.js +0 -68
- package/dist/tooling/cli/development/view.d.ts +0 -28
- package/dist/tooling/cli/development/view.js +0 -151
- package/dist/tooling/cli/environment-release.d.ts +0 -21
- package/dist/tooling/cli/environment-release.js +0 -46
- package/dist/tooling/cli/evidence.d.ts +0 -11
- package/dist/tooling/cli/evidence.js +0 -53
- package/dist/tooling/cli/installation/index.d.ts +0 -2
- package/dist/tooling/cli/installation/index.js +0 -1
- package/dist/tooling/cli/installation/observation.d.ts +0 -10
- package/dist/tooling/cli/installation/observation.js +0 -44
- package/dist/tooling/cli/installation/reconcile.d.ts +0 -32
- package/dist/tooling/cli/installation/reconcile.js +0 -122
- package/dist/tooling/linter/implementations/source/migrations.d.ts +0 -2
- package/dist/tooling/linter/implementations/source/migrations.js +0 -113
- package/dist/tooling/linter/qualification/index.d.ts +0 -10
- package/dist/tooling/linter/qualification/index.js +0 -2
- package/dist/tooling/linter/qualification/query-fixtures.d.ts +0 -2
- package/dist/tooling/linter/qualification/query-fixtures.js +0 -68
- package/dist/tooling/linter/qualification/runner.d.ts +0 -3
- package/dist/tooling/linter/qualification/runner.js +0 -6
- /package/dist/application/{application.js → domain.js} +0 -0
- /package/dist/{deployment/adapter/deploy/context.js → application/workflow/durable.js} +0 -0
- /package/dist/deployment/adapter/{deploy/index.js → bundle/bundle.js} +0 -0
- /package/dist/deployment/adapter/{deploy/result.js → bundle/file.js} +0 -0
- /package/dist/deployment/adapter/{prepare → bundle}/index.js +0 -0
- /package/dist/deployment/adapter/{prepare/artifact.js → release/command.js} +0 -0
- /package/dist/deployment/adapter/{prepare → release}/context.js +0 -0
- /package/dist/deployment/release/{publication → served}/routes.d.ts +0 -0
- /package/dist/deployment/release/{publication → served}/routes.js +0 -0
- /package/dist/execution/service/{publication → serving}/index.js +0 -0
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import type { WorkerRecord, WorkerRecordWireV1 } from './record.js';
|
|
2
|
+
/** Where a Worker host addresses Services and deployments. */
|
|
3
|
+
export interface WorkerHostingV1 {
|
|
4
|
+
/**
|
|
5
|
+
* The DNS name every URL ends with: `https://<service>.<routingDomain>` serves a Service's
|
|
6
|
+
* current deployment, `https://<label>.<routingDomain>` one deployment.
|
|
7
|
+
*/
|
|
8
|
+
readonly routingDomain: string;
|
|
9
|
+
}
|
|
10
|
+
/** What a host lists: the deployments of the caller's Services, optionally of one project or environment. */
|
|
11
|
+
export interface WorkerDeploymentListRequestV1 {
|
|
12
|
+
readonly project?: string;
|
|
13
|
+
readonly environment?: string;
|
|
14
|
+
}
|
|
15
|
+
/** The lifecycle of one deployment at its host. */
|
|
16
|
+
export type WorkerDeploymentState = 'deploying' | 'active' | 'retiring' | 'retired' | 'failed';
|
|
17
|
+
/**
|
|
18
|
+
* What a host knows of one deployment. It names a deployment by its label and URL, never by a
|
|
19
|
+
* provider version. A host keeps every deployment until it is retired: it has no preview, expiry or
|
|
20
|
+
* last call.
|
|
21
|
+
*/
|
|
22
|
+
export interface WorkerDeploymentSummaryV1 {
|
|
23
|
+
/** The host's id of the deployment (a node id on Admin's Services). */
|
|
24
|
+
readonly id: string;
|
|
25
|
+
readonly url: string;
|
|
26
|
+
readonly label: string;
|
|
27
|
+
/** The host's id of the Service this deployment is a version of. */
|
|
28
|
+
readonly serviceId: string;
|
|
29
|
+
/** The name of that Service: the first part of the label. */
|
|
30
|
+
readonly service: string;
|
|
31
|
+
readonly project: string;
|
|
32
|
+
readonly environment: string;
|
|
33
|
+
/** Who owns the Service (an Identity node path on Admin's Services). */
|
|
34
|
+
readonly owner: string;
|
|
35
|
+
readonly state: WorkerDeploymentState;
|
|
36
|
+
/** Whether the Service's stable URL serves this deployment. */
|
|
37
|
+
readonly current: boolean;
|
|
38
|
+
readonly createdAt: string;
|
|
39
|
+
/** When its retirement began; present once it is `retiring`. */
|
|
40
|
+
readonly retiredAt?: string;
|
|
41
|
+
readonly buildDigest: string;
|
|
42
|
+
/** The digest of its `WorkerConfigurationV1`. */
|
|
43
|
+
readonly configuration: string;
|
|
44
|
+
/** The RFC 7638 thumbprint of its key, when its configuration asked for a signing identity. */
|
|
45
|
+
readonly signingKeyId?: string;
|
|
46
|
+
/** The record it serves, when its configuration asked for one. */
|
|
47
|
+
readonly record?: WorkerRecordWireV1;
|
|
48
|
+
}
|
|
49
|
+
/** One summary with its record decoded. */
|
|
50
|
+
export type WorkerDeploymentSummary = Omit<WorkerDeploymentSummaryV1, 'record'> & {
|
|
51
|
+
readonly record?: WorkerRecord;
|
|
52
|
+
};
|
|
53
|
+
/** Why a host refused to host one Worker release. A refusal changed nothing (see each reason). */
|
|
54
|
+
export type WorkerDeploymentRejectionReason = 'invalid-deployment' | 'address-mismatch' | 'build-mismatch' | 'service-owned-elsewhere' | 'deployment-conflict' | 'deployment-retired' | 'hosting-unavailable' | 'service-unavailable';
|
|
55
|
+
export declare const WORKER_DEPLOYMENT_REJECTIONS: readonly WorkerDeploymentRejectionReason[];
|
|
56
|
+
/**
|
|
57
|
+
* `WorkerDeploymentResponseV1`: a deployment `created` with the request's secrets `bound` to it,
|
|
58
|
+
* or `reused` with its declared secrets rewritten in place (`updated`) or left `unchanged`, or a
|
|
59
|
+
* refusal. A refusal changed nothing, except that a `service-unavailable` may follow effects (a
|
|
60
|
+
* creation that lost its lease after uploading, an in-place rewrite that wrote part of the
|
|
61
|
+
* values): rerunning the same deploy converges.
|
|
62
|
+
*/
|
|
63
|
+
export type WorkerDeploymentResponseV1 = {
|
|
64
|
+
readonly kind: 'deployed';
|
|
65
|
+
readonly state: 'created' | 'reused';
|
|
66
|
+
readonly secrets: {
|
|
67
|
+
readonly state: 'bound' | 'updated' | 'unchanged';
|
|
68
|
+
};
|
|
69
|
+
readonly deployment: WorkerDeploymentSummaryV1;
|
|
70
|
+
} | WorkerDeploymentRejection;
|
|
71
|
+
export interface WorkerDeploymentRejection {
|
|
72
|
+
readonly kind: 'rejected';
|
|
73
|
+
readonly reason: WorkerDeploymentRejectionReason;
|
|
74
|
+
readonly message: string;
|
|
75
|
+
/** When a retry may succeed, for a refusal that only waits on another operation. */
|
|
76
|
+
readonly retryAfter?: string;
|
|
77
|
+
}
|
|
78
|
+
/** One decoded answer of a deploy. */
|
|
79
|
+
export type WorkerDeploymentResult = {
|
|
80
|
+
readonly kind: 'deployed';
|
|
81
|
+
readonly state: 'created' | 'reused';
|
|
82
|
+
readonly secrets: {
|
|
83
|
+
readonly state: 'bound' | 'updated' | 'unchanged';
|
|
84
|
+
};
|
|
85
|
+
readonly deployment: WorkerDeploymentSummary;
|
|
86
|
+
} | WorkerDeploymentRejection;
|
|
87
|
+
/** Admit the answer of a host's `hosting`: exactly its routing domain. */
|
|
88
|
+
export declare function decodeWorkerHosting(input: unknown): WorkerHostingV1;
|
|
89
|
+
/**
|
|
90
|
+
* Admit the answer of a deploy exactly: a deployment whose state reports the secret state it
|
|
91
|
+
* pairs with, or a refusal a host can give.
|
|
92
|
+
*/
|
|
93
|
+
export declare function decodeWorkerDeploymentResponse(input: unknown): WorkerDeploymentResult;
|
|
94
|
+
/** Admit the answer of a host's `list`: the summaries of the caller's deployments, in its order. */
|
|
95
|
+
export declare function decodeWorkerDeploymentList(input: unknown): readonly WorkerDeploymentSummary[];
|
|
96
|
+
/**
|
|
97
|
+
* Admit one summary exactly: node ids and names a person can read, a label whose first part is
|
|
98
|
+
* the Service's name, the URL of that label, a known state, instants, digests, and a record that
|
|
99
|
+
* decodes.
|
|
100
|
+
*/
|
|
101
|
+
export declare function decodeWorkerDeploymentSummary(input: unknown): WorkerDeploymentSummary;
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import { parseDeploymentLabel } from '../address/label.js';
|
|
2
|
+
import { serviceName } from './address.js';
|
|
3
|
+
import { decodeWorkerRecord } from './record.js';
|
|
4
|
+
export const WORKER_DEPLOYMENT_REJECTIONS = Object.freeze([
|
|
5
|
+
'invalid-deployment',
|
|
6
|
+
'address-mismatch',
|
|
7
|
+
'build-mismatch',
|
|
8
|
+
'service-owned-elsewhere',
|
|
9
|
+
'deployment-conflict',
|
|
10
|
+
'deployment-retired',
|
|
11
|
+
'hosting-unavailable',
|
|
12
|
+
'service-unavailable',
|
|
13
|
+
]);
|
|
14
|
+
const STATES = Object.freeze([
|
|
15
|
+
'deploying',
|
|
16
|
+
'active',
|
|
17
|
+
'retiring',
|
|
18
|
+
'retired',
|
|
19
|
+
'failed',
|
|
20
|
+
]);
|
|
21
|
+
/** Which secret states each deployment state reports. */
|
|
22
|
+
const SECRETS_BY_STATE = Object.freeze({
|
|
23
|
+
created: Object.freeze(['bound']),
|
|
24
|
+
reused: Object.freeze(['updated', 'unchanged']),
|
|
25
|
+
});
|
|
26
|
+
/** Admit the answer of a host's `hosting`: exactly its routing domain. */
|
|
27
|
+
export function decodeWorkerHosting(input) {
|
|
28
|
+
const value = exact(input, ['routingDomain'], [], 'hosting');
|
|
29
|
+
if (typeof value.routingDomain !== 'string' || !isDnsName(value.routingDomain)) {
|
|
30
|
+
invalid('hosting', 'routingDomain');
|
|
31
|
+
}
|
|
32
|
+
return Object.freeze({ routingDomain: value.routingDomain });
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Admit the answer of a deploy exactly: a deployment whose state reports the secret state it
|
|
36
|
+
* pairs with, or a refusal a host can give.
|
|
37
|
+
*/
|
|
38
|
+
export function decodeWorkerDeploymentResponse(input) {
|
|
39
|
+
const value = exact(input, ['kind'], ['state', 'secrets', 'deployment', 'reason', 'message', 'retryAfter'], 'deploy');
|
|
40
|
+
if (value.kind === 'rejected') {
|
|
41
|
+
exact(value, ['kind', 'reason', 'message'], ['retryAfter'], 'refusal');
|
|
42
|
+
if (!WORKER_DEPLOYMENT_REJECTIONS.includes(value.reason)) {
|
|
43
|
+
invalid('refusal', 'reason');
|
|
44
|
+
}
|
|
45
|
+
if (typeof value.message !== 'string' ||
|
|
46
|
+
value.message.length < 1 ||
|
|
47
|
+
value.message.length > 500) {
|
|
48
|
+
invalid('refusal', 'message');
|
|
49
|
+
}
|
|
50
|
+
if (value.retryAfter !== undefined && !isInstant(value.retryAfter)) {
|
|
51
|
+
invalid('refusal', 'retryAfter');
|
|
52
|
+
}
|
|
53
|
+
return Object.freeze({
|
|
54
|
+
kind: 'rejected',
|
|
55
|
+
reason: value.reason,
|
|
56
|
+
message: value.message,
|
|
57
|
+
...(value.retryAfter === undefined ? {} : { retryAfter: value.retryAfter }),
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
exact(value, ['kind', 'state', 'secrets', 'deployment'], [], 'deploy');
|
|
61
|
+
if (value.kind !== 'deployed')
|
|
62
|
+
invalid('deploy', 'kind');
|
|
63
|
+
if (value.state !== 'created' && value.state !== 'reused')
|
|
64
|
+
invalid('deploy', 'state');
|
|
65
|
+
const secrets = exact(value.secrets, ['state'], [], 'secrets');
|
|
66
|
+
const allowed = SECRETS_BY_STATE[value.state];
|
|
67
|
+
if (typeof secrets.state !== 'string' || !allowed.includes(secrets.state)) {
|
|
68
|
+
invalid('deploy', 'secrets.state');
|
|
69
|
+
}
|
|
70
|
+
return Object.freeze({
|
|
71
|
+
kind: 'deployed',
|
|
72
|
+
state: value.state,
|
|
73
|
+
secrets: Object.freeze({ state: secrets.state }),
|
|
74
|
+
deployment: decodeWorkerDeploymentSummary(value.deployment),
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
/** Admit the answer of a host's `list`: the summaries of the caller's deployments, in its order. */
|
|
78
|
+
export function decodeWorkerDeploymentList(input) {
|
|
79
|
+
const value = exact(input, ['deployments'], [], 'list');
|
|
80
|
+
if (!Array.isArray(value.deployments))
|
|
81
|
+
invalid('list', 'deployments');
|
|
82
|
+
return Object.freeze(value.deployments.map((deployment) => decodeWorkerDeploymentSummary(deployment)));
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Admit one summary exactly: node ids and names a person can read, a label whose first part is
|
|
86
|
+
* the Service's name, the URL of that label, a known state, instants, digests, and a record that
|
|
87
|
+
* decodes.
|
|
88
|
+
*/
|
|
89
|
+
export function decodeWorkerDeploymentSummary(input) {
|
|
90
|
+
const value = exact(input, [
|
|
91
|
+
'id',
|
|
92
|
+
'url',
|
|
93
|
+
'label',
|
|
94
|
+
'serviceId',
|
|
95
|
+
'service',
|
|
96
|
+
'project',
|
|
97
|
+
'environment',
|
|
98
|
+
'owner',
|
|
99
|
+
'state',
|
|
100
|
+
'current',
|
|
101
|
+
'createdAt',
|
|
102
|
+
'buildDigest',
|
|
103
|
+
'configuration',
|
|
104
|
+
], ['retiredAt', 'signingKeyId', 'record'], 'deployment');
|
|
105
|
+
for (const key of [
|
|
106
|
+
'id',
|
|
107
|
+
'url',
|
|
108
|
+
'label',
|
|
109
|
+
'serviceId',
|
|
110
|
+
'service',
|
|
111
|
+
'project',
|
|
112
|
+
'environment',
|
|
113
|
+
'owner',
|
|
114
|
+
]) {
|
|
115
|
+
if (typeof value[key] !== 'string' || !isPrintable(value[key]))
|
|
116
|
+
invalid('deployment', key);
|
|
117
|
+
}
|
|
118
|
+
if (value.signingKeyId !== undefined) {
|
|
119
|
+
if (typeof value.signingKeyId !== 'string' || !isPrintable(value.signingKeyId)) {
|
|
120
|
+
invalid('deployment', 'signingKeyId');
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
let line;
|
|
124
|
+
try {
|
|
125
|
+
line = parseDeploymentLabel(value.label).line;
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
invalid('deployment', 'label');
|
|
129
|
+
}
|
|
130
|
+
if (value.service !== line)
|
|
131
|
+
invalid('deployment', 'service');
|
|
132
|
+
let named;
|
|
133
|
+
try {
|
|
134
|
+
named = serviceName(value.project, value.environment);
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
invalid('deployment', 'project');
|
|
138
|
+
}
|
|
139
|
+
if (named !== line)
|
|
140
|
+
invalid('deployment', 'service');
|
|
141
|
+
if (!isDeploymentUrl(value.url, value.label))
|
|
142
|
+
invalid('deployment', 'url');
|
|
143
|
+
if (!STATES.includes(value.state))
|
|
144
|
+
invalid('deployment', 'state');
|
|
145
|
+
if (typeof value.current !== 'boolean')
|
|
146
|
+
invalid('deployment', 'current');
|
|
147
|
+
if (!isInstant(value.createdAt))
|
|
148
|
+
invalid('deployment', 'createdAt');
|
|
149
|
+
if (value.retiredAt !== undefined && !isInstant(value.retiredAt))
|
|
150
|
+
invalid('deployment', 'retiredAt');
|
|
151
|
+
for (const key of ['buildDigest', 'configuration']) {
|
|
152
|
+
if (typeof value[key] !== 'string' || !/^sha256:[0-9a-f]{64}$/u.test(value[key])) {
|
|
153
|
+
invalid('deployment', key);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
let record;
|
|
157
|
+
if (value.record !== undefined) {
|
|
158
|
+
try {
|
|
159
|
+
record = decodeWorkerRecord(value.record);
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
invalid('deployment', 'record');
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
const summary = { ...value };
|
|
166
|
+
delete summary.record;
|
|
167
|
+
return Object.freeze({
|
|
168
|
+
...summary,
|
|
169
|
+
...(record === undefined ? {} : { record }),
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
/** `https://<label>.<routing domain>`, nothing more. */
|
|
173
|
+
function isDeploymentUrl(url, label) {
|
|
174
|
+
const prefix = `https://${label}.`;
|
|
175
|
+
return url.startsWith(prefix) && isDnsName(url.slice(prefix.length));
|
|
176
|
+
}
|
|
177
|
+
/** Text a person can read in a listing: at most 512 characters, none of them a control character. */
|
|
178
|
+
function isPrintable(value) {
|
|
179
|
+
return value.length > 0 && value.length <= 512 && !/[\p{Cc}]/u.test(value);
|
|
180
|
+
}
|
|
181
|
+
function isInstant(value) {
|
|
182
|
+
return (typeof value === 'string' &&
|
|
183
|
+
value.length > 0 &&
|
|
184
|
+
value.length <= 64 &&
|
|
185
|
+
!Number.isNaN(Date.parse(value)));
|
|
186
|
+
}
|
|
187
|
+
function isDnsName(value) {
|
|
188
|
+
return (value.length <= 253 &&
|
|
189
|
+
value.split('.').every((label) => /^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/u.test(label)));
|
|
190
|
+
}
|
|
191
|
+
function exact(input, required, optional, label) {
|
|
192
|
+
if (input === null || typeof input !== 'object' || Array.isArray(input))
|
|
193
|
+
invalid(label);
|
|
194
|
+
const value = input;
|
|
195
|
+
for (const key of Reflect.ownKeys(value)) {
|
|
196
|
+
if (typeof key !== 'string' || (!required.includes(key) && !optional.includes(key))) {
|
|
197
|
+
invalid(label, String(key));
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
for (const key of required)
|
|
201
|
+
if (!Object.hasOwn(value, key))
|
|
202
|
+
invalid(label, key);
|
|
203
|
+
return value;
|
|
204
|
+
}
|
|
205
|
+
function invalid(label, member) {
|
|
206
|
+
throw new TypeError(`The Worker host returned an invalid ${label} answer${member === undefined ? '' : ` (${member})`}.`);
|
|
207
|
+
}
|
|
@@ -1,9 +1,18 @@
|
|
|
1
1
|
import type { Fetch } from '@astrale-os/kernel-client';
|
|
2
|
-
import type { CredentialInput,
|
|
3
|
-
import type { AuthenticatedInvocation } from '../invocation/index.js';
|
|
2
|
+
import type { CredentialInput, IdentityId, IssuerId } from '../../platform/auth/index.js';
|
|
3
|
+
import type { AuthenticatedInvocation, SelfInvocation } from '../invocation/index.js';
|
|
4
4
|
import type { InvocationAdmissionInput } from '../invocation/index.js';
|
|
5
5
|
import type { IdentityNetworkPolicy, VerificationBasis, VerificationBasisResolver } from './jwks.js';
|
|
6
6
|
import type { SigningMaterial } from './signing.js';
|
|
7
|
+
import { ClientSession } from '../../platform/client/session/index.js';
|
|
8
|
+
import { NodeId } from '../../platform/graph/node/index.js';
|
|
9
|
+
/**
|
|
10
|
+
* How long a callback Session reuses a learned route. It stays at most the Kernel's in-flight
|
|
11
|
+
* issuer window (`KERNEL_INFLIGHT_ISSUER_MS`, Host default 300 s; CT11): a route learned to a
|
|
12
|
+
* deployment replaced by a consented install ages out while that deployment is still accepted and
|
|
13
|
+
* answers the reserved miss, never after its own credential is refused (AM-85).
|
|
14
|
+
*/
|
|
15
|
+
export declare const DEFAULT_ROUTE_AGE_MS = 60000;
|
|
7
16
|
export declare function admit(request: InvocationAdmissionInput, configuration: AuthenticationConfiguration): Promise<unknown>;
|
|
8
17
|
export interface AuthenticationConfiguration {
|
|
9
18
|
readonly issuer: IssuerId;
|
|
@@ -17,5 +26,26 @@ export declare function authenticate(credentialInput: CredentialInput, expectedK
|
|
|
17
26
|
readonly deadline: number;
|
|
18
27
|
readonly signal: AbortSignal;
|
|
19
28
|
}, configuration: AuthenticationConfiguration): Promise<AuthenticatedInvocation>;
|
|
20
|
-
|
|
29
|
+
/**
|
|
30
|
+
* The Domain's own authority toward the source Kernel of an admitted call that carries no
|
|
31
|
+
* credential. No caller credential bounds it: its callbacks live as long as the execution, exactly
|
|
32
|
+
* as the `self` half of an authenticated call does within its carrier.
|
|
33
|
+
*/
|
|
34
|
+
export declare function selfInvocation(kernel: IssuerId, execution: {
|
|
35
|
+
readonly deadline: number;
|
|
36
|
+
readonly signal: AbortSignal;
|
|
37
|
+
}, configuration: AuthenticationConfiguration): SelfInvocation;
|
|
38
|
+
/**
|
|
39
|
+
* The Domain's own authority toward one Kernel for a step of the durable Execution `executionId`,
|
|
40
|
+
* which no caller credential carries: the run acts as its executor, never as its initiator. Every
|
|
41
|
+
* credential names `executionId` in `EXECUTION_CLAIM`, so the Kernel can accept a replaced issuer
|
|
42
|
+
* for the steps of a run in flight at a consented issuer change. The caller owns the returned
|
|
43
|
+
* Session.
|
|
44
|
+
*/
|
|
45
|
+
export declare function executorSession(kernel: IssuerId, executionId: NodeId, execution: {
|
|
46
|
+
readonly deadline: number;
|
|
47
|
+
readonly signal: AbortSignal;
|
|
48
|
+
}, configuration: AuthenticationConfiguration): ClientSession;
|
|
49
|
+
/** Accept a Kernel delegation proof claim naming exactly one resolved caller Identity. */
|
|
50
|
+
export declare function acceptResolvedDelegation(input: unknown): IdentityId;
|
|
21
51
|
export type { VerificationBasis };
|
|
@@ -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,67 @@ 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 the source Kernel of an admitted call that carries no
|
|
83
|
+
* credential. No caller credential bounds it: its callbacks live as long as the execution, exactly
|
|
84
|
+
* as the `self` half of an authenticated call does within its carrier.
|
|
85
|
+
*/
|
|
86
|
+
export function selfInvocation(kernel, execution, configuration) {
|
|
87
|
+
requireLive(execution);
|
|
88
|
+
const admitted = httpIssuer(kernel, configuration.policy.allowInsecureHttp === true);
|
|
89
|
+
admitEndpoint(invocationUrl(admitted), configuration.policy);
|
|
90
|
+
const session = callbackSession(admitted, selfIdentity, undefined, execution, configuration);
|
|
91
|
+
let closed = false;
|
|
92
|
+
return Object.freeze({
|
|
93
|
+
graph: Object.freeze({ self: bindSession(session, execution) }),
|
|
94
|
+
close() {
|
|
95
|
+
if (closed)
|
|
96
|
+
return;
|
|
97
|
+
closed = true;
|
|
98
|
+
session.close();
|
|
99
|
+
},
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* The Domain's own authority toward one Kernel for a step of the durable Execution `executionId`,
|
|
104
|
+
* which no caller credential carries: the run acts as its executor, never as its initiator. Every
|
|
105
|
+
* credential names `executionId` in `EXECUTION_CLAIM`, so the Kernel can accept a replaced issuer
|
|
106
|
+
* for the steps of a run in flight at a consented issuer change. The caller owns the returned
|
|
107
|
+
* Session.
|
|
108
|
+
*/
|
|
109
|
+
export function executorSession(kernel, executionId, execution, configuration) {
|
|
110
|
+
const admitted = httpIssuer(kernel, configuration.policy.allowInsecureHttp === true);
|
|
111
|
+
admitEndpoint(invocationUrl(admitted), configuration.policy);
|
|
112
|
+
return callbackSession(admitted, selfIdentity, undefined, execution, configuration, executionId);
|
|
113
|
+
}
|
|
114
|
+
function callbackSession(kernel, expression, carrier, execution, configuration, executionId) {
|
|
115
|
+
const resolveCallback = createCallbackCredentialResolver(configuration.signing, configuration.issuer, configuration.subject, kernel, expression, carrier, execution, executionId);
|
|
116
|
+
return new ClientSession({
|
|
117
|
+
kernel,
|
|
118
|
+
fetch: boundedFetch(configuration.fetch, execution.signal),
|
|
119
|
+
auth: {
|
|
120
|
+
ttlSeconds: Math.min(callbackTtl(execution.deadline), maximumCallbackDelegationTtlSeconds),
|
|
121
|
+
async resolve(_call, signal) {
|
|
122
|
+
const callback = await resolveCallback(signal);
|
|
123
|
+
signal.throwIfAborted();
|
|
124
|
+
return {
|
|
125
|
+
credential: callback.credential,
|
|
126
|
+
delegate: { ttlSeconds: callback.delegateTtlSeconds },
|
|
127
|
+
};
|
|
101
128
|
},
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
129
|
+
},
|
|
130
|
+
policy: {
|
|
131
|
+
maximumRouteAgeMs: DEFAULT_ROUTE_AGE_MS,
|
|
132
|
+
...(configuration.policy.allowEndpoint === undefined
|
|
133
|
+
? {}
|
|
134
|
+
: { allowEndpoint: configuration.policy.allowEndpoint }),
|
|
135
|
+
...(configuration.policy.allowInsecureHttp === true ? { allowInsecureHttp: true } : {}),
|
|
136
|
+
},
|
|
137
|
+
timeoutMs: Math.max(1, execution.deadline - Date.now()),
|
|
138
|
+
});
|
|
105
139
|
}
|
|
106
140
|
async function establishCaller(input, audience, verification, execution, policy) {
|
|
107
141
|
requireLive(execution);
|
|
@@ -115,7 +149,7 @@ async function establishCaller(input, audience, verification, execution, policy)
|
|
|
115
149
|
if (proof.verified.sub !== context.verified.sub) {
|
|
116
150
|
throw new CredentialRejected('Destination carrier and authority proof subjects differ.');
|
|
117
151
|
}
|
|
118
|
-
const
|
|
152
|
+
const identity = acceptResolvedDelegation(proof.verified.claims.delegation);
|
|
119
153
|
let principal;
|
|
120
154
|
try {
|
|
121
155
|
principal = NodeId(context.verified.sub);
|
|
@@ -129,7 +163,7 @@ async function establishCaller(input, audience, verification, execution, policy)
|
|
|
129
163
|
caller: Object.freeze({
|
|
130
164
|
kind: 'authenticated',
|
|
131
165
|
principal,
|
|
132
|
-
|
|
166
|
+
identity,
|
|
133
167
|
authentication: credential.evidence(context),
|
|
134
168
|
}),
|
|
135
169
|
});
|
|
@@ -140,6 +174,7 @@ async function establishCaller(input, audience, verification, execution, policy)
|
|
|
140
174
|
throw protocolError('BACKEND_UNAVAILABLE', 'Credential issuer is unavailable.');
|
|
141
175
|
}
|
|
142
176
|
if (cause instanceof CredentialRejected ||
|
|
177
|
+
cause instanceof AuthValueError ||
|
|
143
178
|
cause instanceof joseErrors.JOSEError ||
|
|
144
179
|
cause instanceof protocolErrors.ProtocolError) {
|
|
145
180
|
throw protocolError('AUTH_INVALID', 'Credential is invalid.');
|
|
@@ -147,6 +182,7 @@ async function establishCaller(input, audience, verification, execution, policy)
|
|
|
147
182
|
throw cause;
|
|
148
183
|
}
|
|
149
184
|
}
|
|
185
|
+
/** Accept a Kernel delegation proof claim naming exactly one resolved caller Identity. */
|
|
150
186
|
export function acceptResolvedDelegation(input) {
|
|
151
187
|
if (input === null ||
|
|
152
188
|
typeof input !== 'object' ||
|
|
@@ -157,5 +193,14 @@ export function acceptResolvedDelegation(input) {
|
|
|
157
193
|
Reflect.get(input, 'v') !== 1) {
|
|
158
194
|
throw new AuthValueError('AUTH_GRANT_INVALID', 'Expected resolved delegation.');
|
|
159
195
|
}
|
|
160
|
-
|
|
196
|
+
const raw = Reflect.get(input, 'expr');
|
|
197
|
+
// grant.accept collapses duplicate operands (union(X, X) becomes X), so the leaf is checked as sent.
|
|
198
|
+
if (raw === null || typeof raw !== 'object' || Reflect.get(raw, 'kind') !== 'identity') {
|
|
199
|
+
throw new AuthValueError('AUTH_GRANT_INVALID', 'Expected one resolved caller Identity.');
|
|
200
|
+
}
|
|
201
|
+
const { expr } = grant.accept({ expr: raw });
|
|
202
|
+
if (expr.kind !== 'identity') {
|
|
203
|
+
throw new AuthValueError('AUTH_GRANT_INVALID', 'Expected one resolved caller Identity.');
|
|
204
|
+
}
|
|
205
|
+
return expr.id;
|
|
161
206
|
}
|
|
@@ -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>;
|