@astrale-os/sdk 0.6.0-beta.3 → 0.6.0-beta.30
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 +179 -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
|
@@ -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,8 @@
|
|
|
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
|
+
/**
|
|
6
|
+
* Create one stateless, nonce-bound public Delivery v2 provider for the exact deployment release.
|
|
7
|
+
*/
|
|
8
|
+
export declare function releaseDelivery(signing: SigningMaterial, issuer: IssuerId, subject: string, deployed: release.DomainRelease): serverRelease.delivery.Provider;
|
|
@@ -1,34 +1,39 @@
|
|
|
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 v2 provider for the exact deployment release.
|
|
6
|
+
*/
|
|
7
|
+
export function releaseDelivery(signing, issuer, subject, deployed) {
|
|
6
8
|
return Object.freeze({
|
|
7
9
|
async create(request, context) {
|
|
8
10
|
context.signal.throwIfAborted();
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
purpose: publication.delivery.PURPOSE,
|
|
11
|
+
const attestation = await attest(signing, issuer, subject, request.kernel, {
|
|
12
|
+
purpose: release.delivery.PURPOSE,
|
|
12
13
|
nonce: request.nonce,
|
|
13
|
-
|
|
14
|
+
release: deployed.digest,
|
|
14
15
|
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);
|
|
16
|
+
});
|
|
25
17
|
context.signal.throwIfAborted();
|
|
26
|
-
return
|
|
18
|
+
return release.delivery.accept({
|
|
27
19
|
format: 'astrale.domain.delivery',
|
|
28
|
-
version:
|
|
29
|
-
|
|
20
|
+
version: 2,
|
|
21
|
+
release: deployed,
|
|
30
22
|
attestation,
|
|
31
23
|
});
|
|
32
24
|
},
|
|
33
25
|
});
|
|
34
26
|
}
|
|
27
|
+
async function attest(signing, issuer, subject, kernel, claims) {
|
|
28
|
+
const now = Math.floor(Date.now() / 1_000);
|
|
29
|
+
return new SignJWT(claims)
|
|
30
|
+
.setProtectedHeader({
|
|
31
|
+
alg: signing.algorithm,
|
|
32
|
+
...(signing.keyId === undefined ? {} : { kid: signing.keyId }),
|
|
33
|
+
})
|
|
34
|
+
.setIssuer(issuer)
|
|
35
|
+
.setSubject(subject)
|
|
36
|
+
.setAudience(kernel)
|
|
37
|
+
.setExpirationTime(now + ATTESTATION_TTL_SECONDS)
|
|
38
|
+
.sign(await signing.privateKey);
|
|
39
|
+
}
|
|
@@ -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,19 @@ 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 v2 for the exact release this deployment serves.
|
|
16
|
+
*/
|
|
17
|
+
delivery(served: releaseProtocol.DomainRelease): release.delivery.Provider;
|
|
18
|
+
/**
|
|
19
|
+
* The Domain's own authority toward one Kernel for a step of the durable Execution `executionId`
|
|
20
|
+
* (`ctx.execution.id`), which no caller credential carries; its credentials name `executionId` in
|
|
21
|
+
* `EXECUTION_CLAIM`. Required to serve durable Workflows; the caller closes the Session.
|
|
22
|
+
*/
|
|
23
|
+
executor?(kernel: IssuerId, executionId: NodeId, execution: {
|
|
24
|
+
readonly deadline: number;
|
|
25
|
+
readonly signal: AbortSignal;
|
|
26
|
+
}): ClientSession;
|
|
13
27
|
}
|
|
14
28
|
export interface IdentityInput extends IdentityNetworkPolicy {
|
|
15
29
|
readonly issuer: IssuerId;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { admit, authenticate } from './authentication.js';
|
|
2
|
-
import {
|
|
1
|
+
import { admit, authenticate, executorSession, selfInvocation } 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,9 +49,11 @@ 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),
|
|
56
|
+
self: async (request) => selfInvocation(request.via.issuer, request.context.execution, configuration),
|
|
55
57
|
});
|
|
56
58
|
}
|
|
57
59
|
export function identity(input) {
|
|
@@ -67,6 +69,8 @@ export function identity(input) {
|
|
|
67
69
|
'delivery',
|
|
68
70
|
'admit',
|
|
69
71
|
'authenticate',
|
|
72
|
+
'self',
|
|
73
|
+
'executor',
|
|
70
74
|
]);
|
|
71
75
|
if (Reflect.ownKeys(input).some((key) => !allowed.has(key)) ||
|
|
72
76
|
typeof input.subject !== 'string' ||
|
|
@@ -74,7 +78,9 @@ export function identity(input) {
|
|
|
74
78
|
typeof input.loadPublicKeys !== 'function' ||
|
|
75
79
|
typeof input.delivery !== 'function' ||
|
|
76
80
|
typeof input.admit !== 'function' ||
|
|
77
|
-
typeof input.authenticate !== 'function'
|
|
81
|
+
typeof input.authenticate !== 'function' ||
|
|
82
|
+
typeof input.self !== 'function' ||
|
|
83
|
+
(input.executor !== undefined && typeof input.executor !== 'function')) {
|
|
78
84
|
invalid();
|
|
79
85
|
}
|
|
80
86
|
const receiver = Object.freeze({ ...input });
|
|
@@ -92,6 +98,8 @@ export function identity(input) {
|
|
|
92
98
|
delivery: receiver.delivery.bind(receiver),
|
|
93
99
|
admit: receiver.admit.bind(receiver),
|
|
94
100
|
authenticate: receiver.authenticate.bind(receiver),
|
|
101
|
+
self: receiver.self.bind(receiver),
|
|
102
|
+
...(receiver.executor === undefined ? {} : { executor: receiver.executor.bind(receiver) }),
|
|
95
103
|
});
|
|
96
104
|
}
|
|
97
105
|
function invalid() {
|
|
@@ -16,6 +16,11 @@ export interface VerificationBasisResolver {
|
|
|
16
16
|
/**
|
|
17
17
|
* Retain only recently admitted public issuer material for one execution Identity.
|
|
18
18
|
* An unseen key ID may refresh once per cooldown; failures never replace a usable basis.
|
|
19
|
+
*
|
|
20
|
+
* Callers share admitted bases, never a discovery in flight: each refresh runs on its own caller's
|
|
21
|
+
* fetch and signal. A Worker binds a subrequest to the request that started it and, once that
|
|
22
|
+
* request is cancelled, never settles it, so a shared refresh would hold every later caller of the
|
|
23
|
+
* issuer until its own deadline, for as long as the isolate lives.
|
|
19
24
|
*/
|
|
20
25
|
export declare function createVerificationBasisResolver(fetch: Fetch, policy: IdentityNetworkPolicy, now?: () => number): VerificationBasisResolver;
|
|
21
26
|
export declare function verifyCredential(input: CredentialInput, audience: IssuerId, bases: VerificationBasisResolver, signal: AbortSignal, policy: IdentityNetworkPolicy): Promise<{
|
|
@@ -8,13 +8,37 @@ 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.
|
|
25
|
+
*
|
|
26
|
+
* Callers share admitted bases, never a discovery in flight: each refresh runs on its own caller's
|
|
27
|
+
* fetch and signal. A Worker binds a subrequest to the request that started it and, once that
|
|
28
|
+
* request is cancelled, never settles it, so a shared refresh would hold every later caller of the
|
|
29
|
+
* issuer until its own deadline, for as long as the isolate lives.
|
|
14
30
|
*/
|
|
15
31
|
export function createVerificationBasisResolver(fetch, policy, now = Date.now) {
|
|
16
32
|
const bases = new Map();
|
|
17
|
-
const
|
|
33
|
+
const retain = (issuer, entry) => {
|
|
34
|
+
if (bases.size >= MAXIMUM_VERIFICATION_BASES && !bases.has(issuer)) {
|
|
35
|
+
const oldest = bases.keys().next().value;
|
|
36
|
+
if (oldest !== undefined)
|
|
37
|
+
bases.delete(oldest);
|
|
38
|
+
}
|
|
39
|
+
bases.delete(issuer);
|
|
40
|
+
bases.set(issuer, Object.freeze(entry));
|
|
41
|
+
};
|
|
18
42
|
return Object.freeze({
|
|
19
43
|
async resolve(issuer, keyId, signal) {
|
|
20
44
|
signal.throwIfAborted();
|
|
@@ -27,66 +51,33 @@ export function createVerificationBasisResolver(fetch, policy, now = Date.now) {
|
|
|
27
51
|
const unknownKeyCooldown = cached?.unknownKeyRefreshedAt !== undefined &&
|
|
28
52
|
observedAt - cached.unknownKeyRefreshedAt >= 0 &&
|
|
29
53
|
observedAt - cached.unknownKeyRefreshedAt < UNKNOWN_KEY_REFRESH_COOLDOWN_MS;
|
|
30
|
-
if (fresh && knownKey) {
|
|
31
|
-
|
|
32
|
-
bases.set(issuer, cached);
|
|
54
|
+
if (fresh && (knownKey || unknownKeyCooldown)) {
|
|
55
|
+
retain(issuer, cached);
|
|
33
56
|
return cached.basis;
|
|
34
57
|
}
|
|
35
58
|
const unknownKeyRefresh = cached !== undefined && !knownKey;
|
|
36
|
-
let
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
bases.set(issuer, cached);
|
|
40
|
-
return cached.basis;
|
|
41
|
-
}
|
|
42
|
-
if (refresh === undefined && unknownKeyRefresh && cached !== undefined) {
|
|
43
|
-
bases.set(issuer, Object.freeze({ ...cached, unknownKeyRefreshedAt: observedAt }));
|
|
59
|
+
let basis;
|
|
60
|
+
try {
|
|
61
|
+
basis = await discover(issuer, fetch, signal, policy);
|
|
44
62
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
unknownKeyRefresh,
|
|
53
|
-
requestedKeyIds: new Set(keyId === undefined ? [] : [keyId]),
|
|
54
|
-
};
|
|
55
|
-
const owned = refresh;
|
|
56
|
-
owned.operation = discover(issuer, fetch, controller.signal, policy)
|
|
57
|
-
.then((basis) => {
|
|
58
|
-
controller.signal.throwIfAborted();
|
|
59
|
-
const refreshedAt = now();
|
|
60
|
-
if (bases.size >= MAXIMUM_VERIFICATION_BASES && !bases.has(issuer)) {
|
|
61
|
-
const oldest = bases.keys().next().value;
|
|
62
|
-
if (oldest !== undefined)
|
|
63
|
-
bases.delete(oldest);
|
|
64
|
-
}
|
|
65
|
-
bases.delete(issuer);
|
|
66
|
-
bases.set(issuer, Object.freeze({
|
|
67
|
-
basis,
|
|
68
|
-
refreshedAt,
|
|
69
|
-
...(owned.unknownKeyRefresh ||
|
|
70
|
-
[...owned.requestedKeyIds].some((requested) => !basis.keys.some((candidate) => candidate.kid === requested))
|
|
71
|
-
? { unknownKeyRefreshedAt: refreshedAt }
|
|
72
|
-
: {}),
|
|
73
|
-
}));
|
|
74
|
-
return basis;
|
|
75
|
-
})
|
|
76
|
-
.finally(() => {
|
|
77
|
-
owned.settled = true;
|
|
78
|
-
if (pending.get(issuer) === owned)
|
|
79
|
-
pending.delete(issuer);
|
|
80
|
-
});
|
|
81
|
-
pending.set(issuer, owned);
|
|
63
|
+
catch (cause) {
|
|
64
|
+
// A failed unknown-key refresh spends the cooldown and keeps the usable basis.
|
|
65
|
+
const current = bases.get(issuer);
|
|
66
|
+
if (unknownKeyRefresh && !signal.aborted && current !== undefined) {
|
|
67
|
+
retain(issuer, { ...current, unknownKeyRefreshedAt: observedAt });
|
|
68
|
+
}
|
|
69
|
+
throw cause;
|
|
82
70
|
}
|
|
83
|
-
else if (unknownKeyRefresh) {
|
|
84
|
-
refresh.unknownKeyRefresh = true;
|
|
85
|
-
}
|
|
86
|
-
if (keyId !== undefined)
|
|
87
|
-
refresh.requestedKeyIds.add(keyId);
|
|
88
|
-
const basis = await subscribe(refresh, issuer, pending, signal);
|
|
89
71
|
signal.throwIfAborted();
|
|
72
|
+
const refreshedAt = now();
|
|
73
|
+
retain(issuer, {
|
|
74
|
+
basis,
|
|
75
|
+
refreshedAt,
|
|
76
|
+
...(unknownKeyRefresh ||
|
|
77
|
+
(keyId !== undefined && !basis.keys.some((candidate) => candidate.kid === keyId))
|
|
78
|
+
? { unknownKeyRefreshedAt: refreshedAt }
|
|
79
|
+
: {}),
|
|
80
|
+
});
|
|
90
81
|
return basis;
|
|
91
82
|
},
|
|
92
83
|
});
|
|
@@ -116,41 +107,6 @@ export async function verifyCredential(input, audience, bases, signal, policy) {
|
|
|
116
107
|
admitEndpoint(`${admittedIssuer.replace(/\/+$/u, '')}/invoke`, policy);
|
|
117
108
|
return Object.freeze({ raw: input, verified: verified.verified, basis });
|
|
118
109
|
}
|
|
119
|
-
function subscribe(refresh, issuer, pending, signal) {
|
|
120
|
-
signal.throwIfAborted();
|
|
121
|
-
refresh.subscribers += 1;
|
|
122
|
-
return new Promise((resolve, reject) => {
|
|
123
|
-
let complete = false;
|
|
124
|
-
const finish = () => {
|
|
125
|
-
if (complete)
|
|
126
|
-
return false;
|
|
127
|
-
complete = true;
|
|
128
|
-
signal.removeEventListener('abort', cancel);
|
|
129
|
-
refresh.subscribers -= 1;
|
|
130
|
-
if (!refresh.settled && refresh.subscribers === 0) {
|
|
131
|
-
if (pending.get(issuer) === refresh)
|
|
132
|
-
pending.delete(issuer);
|
|
133
|
-
refresh.controller.abort(new DOMException('Issuer discovery was cancelled.', 'AbortError'));
|
|
134
|
-
}
|
|
135
|
-
return true;
|
|
136
|
-
};
|
|
137
|
-
const cancel = () => {
|
|
138
|
-
if (!finish())
|
|
139
|
-
return;
|
|
140
|
-
reject(signal.reason);
|
|
141
|
-
};
|
|
142
|
-
signal.addEventListener('abort', cancel, { once: true });
|
|
143
|
-
refresh.operation.then((basis) => {
|
|
144
|
-
if (!finish())
|
|
145
|
-
return;
|
|
146
|
-
resolve(basis);
|
|
147
|
-
}, (cause) => {
|
|
148
|
-
if (!finish())
|
|
149
|
-
return;
|
|
150
|
-
reject(cause);
|
|
151
|
-
});
|
|
152
|
-
});
|
|
153
|
-
}
|
|
154
110
|
export async function verifyCredentialAgainst(input, audience, basis, preinspected) {
|
|
155
111
|
let inspected;
|
|
156
112
|
try {
|
|
@@ -220,21 +176,55 @@ async function discover(issuer, fetch, signal, policy) {
|
|
|
220
176
|
});
|
|
221
177
|
}
|
|
222
178
|
async function request(fetch, url, signal) {
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
await
|
|
227
|
-
|
|
179
|
+
for (let attempt = 0;; attempt += 1) {
|
|
180
|
+
signal.throwIfAborted();
|
|
181
|
+
try {
|
|
182
|
+
const response = await fetch(url, { method: 'GET', redirect: 'error', signal });
|
|
183
|
+
if (!response.ok) {
|
|
184
|
+
await response.body?.cancel();
|
|
185
|
+
throw new IssuerUnavailable(`Issuer discovery returned HTTP ${response.status}.`);
|
|
186
|
+
}
|
|
187
|
+
return response;
|
|
188
|
+
}
|
|
189
|
+
catch (cause) {
|
|
190
|
+
if (signal.aborted)
|
|
191
|
+
throw signal.reason;
|
|
192
|
+
if (cause instanceof IssuerUnavailable)
|
|
193
|
+
throw cause;
|
|
194
|
+
// One retry belongs to the caller's issuer load, never to its business call.
|
|
195
|
+
if (attempt !== 0 || !transientTransport(cause)) {
|
|
196
|
+
throw new IssuerUnavailable('Issuer discovery request failed.', cause);
|
|
197
|
+
}
|
|
198
|
+
await retryDelay(signal);
|
|
228
199
|
}
|
|
229
|
-
return response;
|
|
230
200
|
}
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
201
|
+
}
|
|
202
|
+
function transientTransport(cause) {
|
|
203
|
+
// Node fetch wraps its transport Error; Bun may expose the code directly. Bound traversal
|
|
204
|
+
// of an external cause chain, including cycles, and do not look past a classified refusal.
|
|
205
|
+
for (let depth = 0; depth < 4; depth += 1) {
|
|
206
|
+
if (cause === null || typeof cause !== 'object')
|
|
207
|
+
return false;
|
|
208
|
+
const code = Reflect.get(cause, 'code');
|
|
209
|
+
if (typeof code === 'string')
|
|
210
|
+
return TRANSIENT_TRANSPORT_CODES.has(code);
|
|
211
|
+
cause = Reflect.get(cause, 'cause');
|
|
237
212
|
}
|
|
213
|
+
return false;
|
|
214
|
+
}
|
|
215
|
+
function retryDelay(signal) {
|
|
216
|
+
signal.throwIfAborted();
|
|
217
|
+
return new Promise((resolve, reject) => {
|
|
218
|
+
const cancel = () => {
|
|
219
|
+
clearTimeout(timer);
|
|
220
|
+
reject(signal.reason);
|
|
221
|
+
};
|
|
222
|
+
const timer = setTimeout(() => {
|
|
223
|
+
signal.removeEventListener('abort', cancel);
|
|
224
|
+
resolve();
|
|
225
|
+
}, DISCOVERY_RETRY_DELAY_MS);
|
|
226
|
+
signal.addEventListener('abort', cancel, { once: true });
|
|
227
|
+
});
|
|
238
228
|
}
|
|
239
229
|
async function json(response, signal) {
|
|
240
230
|
const bytes = new Uint8Array(await response.arrayBuffer());
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { serve } from './serve.js';
|
|
2
|
-
export type { ExecutionContext,
|
|
3
|
-
export { createIdentity, type ExchangeOptions, type Identity, type IdentityInput, } from './identity/index.js';
|
|
4
|
-
export {
|
|
5
|
-
export
|
|
2
|
+
export type { ExecutionContext, ServedDomain, ServeInput } from './serve.js';
|
|
3
|
+
export { createIdentity, maximumExchangeTtl, type ExchangeOptions, type Identity, type IdentityInput, } from './identity/index.js';
|
|
4
|
+
export type { DurableEngine, DurableServing, DurableServingProvider } from './workflows/index.js';
|
|
5
|
+
export { isCanonicalDurableRequest } from './workflows/route.js';
|
package/dist/execution/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { serve } from './serve.js';
|
|
2
|
-
export { createIdentity, } from './identity/index.js';
|
|
3
|
-
export {
|
|
2
|
+
export { createIdentity, maximumExchangeTtl, } from './identity/index.js';
|
|
3
|
+
export { isCanonicalDurableRequest } from './workflows/route.js';
|
|
@@ -1,17 +1,15 @@
|
|
|
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
|
-
import type { AuthenticatedInvocation, InvocationAuthority } from './authority.js';
|
|
6
|
-
|
|
4
|
+
import type { AuthenticatedInvocation, InvocationAuthority, SelfInvocation } from './authority.js';
|
|
5
|
+
/** A call without a credential: no caller, and the installed Domain's own capabilities. */
|
|
6
|
+
export interface AnonymousInvocation extends SelfInvocation {
|
|
7
7
|
readonly caller: AnonymousCaller;
|
|
8
|
-
readonly kernel: null;
|
|
9
|
-
readonly graph: null;
|
|
10
|
-
close(): void;
|
|
11
8
|
}
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
export
|
|
9
|
+
export type InvocationAuthentication = AnonymousInvocation | AuthenticatedInvocation;
|
|
10
|
+
/**
|
|
11
|
+
* The sessions one invocation holds toward its source Kernel: the Domain's own always, its
|
|
12
|
+
* caller's only when the call carried a credential.
|
|
13
|
+
*/
|
|
14
|
+
export type InvocationSessions = InvocationAuthentication['graph'];
|
|
15
|
+
export declare function authentication(callable: ResolvedCallable, request: HandlerRequest, domain: Domain, authority: InvocationAuthority): Promise<InvocationAuthentication>;
|