@astrale-os/sdk 0.6.0-beta.4 → 0.6.0-beta.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +191 -58
- package/dist/application/action/action.d.ts +6 -0
- package/dist/application/action/authoring.d.ts +1 -1
- package/dist/application/action/context.d.ts +47 -31
- package/dist/application/action/define.d.ts +3 -3
- package/dist/application/action/index.d.ts +1 -1
- package/dist/application/define.d.ts +8 -6
- package/dist/application/define.js +28 -14
- package/dist/application/dependency/index.d.ts +1 -1
- package/dist/application/dependency/invoker.d.ts +21 -10
- package/dist/application/domain.d.ts +30 -0
- package/dist/application/index.d.ts +4 -4
- package/dist/application/index.js +1 -1
- package/dist/application/integration/define.d.ts +8 -1
- package/dist/application/integration/index.d.ts +2 -2
- package/dist/application/integration/integration.d.ts +13 -1
- package/dist/application/integration/operation.d.ts +16 -3
- package/dist/application/mutation/authoring/properties.d.ts +5 -3
- package/dist/application/mutation/authoring/properties.js +35 -2
- package/dist/application/mutation/authoring/transition.js +4 -1
- package/dist/application/mutation/execution/execute.js +1 -1
- package/dist/application/mutation/failure.d.ts +6 -0
- package/dist/application/mutation/failure.js +24 -18
- package/dist/application/mutation/index.d.ts +1 -1
- package/dist/application/query/collection/union.js +11 -4
- package/dist/application/query/composite/plan.d.ts +0 -4
- package/dist/application/query/composite/plan.js +0 -2
- package/dist/application/query/conformance.d.ts +15 -0
- package/dist/application/query/conformance.js +46 -0
- package/dist/application/query/define.js +4 -3
- package/dist/application/query/execution/execute.d.ts +0 -1
- package/dist/application/query/execution/execute.js +7 -1
- package/dist/application/query/failure.d.ts +8 -0
- package/dist/application/query/failure.js +8 -0
- package/dist/application/query/index.d.ts +1 -1
- package/dist/application/query/index.js +1 -1
- package/dist/application/routes/admission.d.ts +2 -2
- package/dist/application/routes/admission.js +1 -1
- package/dist/application/routes/route.d.ts +2 -2
- package/dist/application/runtime/actions.js +3 -0
- package/dist/application/runtime/workflows.d.ts +3 -1
- package/dist/application/runtime/workflows.js +3 -4
- package/dist/application/view/define.js +4 -6
- package/dist/application/view/frontend.d.ts +2 -2
- package/dist/application/view/index.d.ts +1 -1
- package/dist/application/view/route.d.ts +0 -14
- package/dist/application/view/route.js +1 -64
- package/dist/application/workflow/authoring.d.ts +3 -2
- package/dist/application/workflow/context.d.ts +8 -2
- package/dist/application/workflow/define.d.ts +4 -4
- package/dist/application/workflow/define.js +14 -9
- package/dist/application/workflow/durable.d.ts +197 -0
- package/dist/application/workflow/index.d.ts +3 -2
- package/dist/application/workflow/runner/inline.js +3 -4
- package/dist/application/workflow/runner/runner.d.ts +2 -2
- package/dist/application/workflow/step/output.d.ts +2 -0
- package/dist/application/workflow/step/output.js +73 -0
- package/dist/application/workflow/workflow.d.ts +5 -3
- package/dist/deployment/adapter/adapter.d.ts +55 -13
- package/dist/deployment/adapter/bundle/bundle.d.ts +36 -0
- package/dist/deployment/adapter/bundle/file.d.ts +10 -0
- package/dist/deployment/adapter/bundle/index.d.ts +2 -0
- package/dist/deployment/adapter/define.d.ts +4 -3
- package/dist/deployment/adapter/define.js +107 -23
- package/dist/deployment/adapter/index.d.ts +4 -3
- package/dist/deployment/adapter/index.js +1 -0
- package/dist/deployment/adapter/release/command.d.ts +33 -0
- package/dist/deployment/adapter/release/context.d.ts +94 -0
- package/dist/deployment/adapter/release/index.d.ts +4 -0
- package/dist/deployment/adapter/release/index.js +1 -0
- package/dist/deployment/adapter/release/list.d.ts +53 -0
- package/dist/deployment/adapter/release/list.js +1 -0
- package/dist/deployment/adapter/release/refusal.d.ts +10 -0
- package/dist/deployment/adapter/release/refusal.js +14 -0
- package/dist/deployment/adapter/release/result.d.ts +56 -0
- package/dist/deployment/adapter/release/result.js +1 -0
- package/dist/deployment/address/configuration.d.ts +96 -0
- package/dist/deployment/address/configuration.js +274 -0
- package/dist/deployment/address/fingerprint.d.ts +5 -0
- package/dist/deployment/address/fingerprint.js +27 -0
- package/dist/deployment/address/index.d.ts +5 -0
- package/dist/deployment/address/index.js +4 -0
- package/dist/deployment/address/label.d.ts +42 -0
- package/dist/deployment/address/label.js +80 -0
- package/dist/deployment/address/line.d.ts +29 -0
- package/dist/deployment/address/line.js +53 -0
- package/dist/deployment/address/record.d.ts +73 -0
- package/dist/deployment/address/record.js +138 -0
- package/dist/deployment/address/summary.d.ts +30 -0
- package/dist/deployment/address/summary.js +1 -0
- package/dist/deployment/address/vectors.d.ts +60 -0
- package/dist/deployment/address/vectors.js +517 -0
- package/dist/deployment/authoring.d.ts +0 -2
- package/dist/deployment/authoring.js +0 -1
- package/dist/deployment/build/build.d.ts +8 -2
- package/dist/deployment/build/compile.d.ts +4 -4
- package/dist/deployment/build/compile.js +19 -17
- package/dist/deployment/build/frontend/compilation.d.ts +2 -4
- package/dist/deployment/build/frontend/compilation.js +0 -5
- package/dist/deployment/build/frontend/digest.js +1 -5
- package/dist/deployment/build/index.d.ts +1 -0
- package/dist/deployment/build/index.js +1 -0
- package/dist/deployment/build/manifest.d.ts +59 -0
- package/dist/deployment/build/manifest.js +118 -0
- package/dist/deployment/build/material.d.ts +2 -2
- package/dist/deployment/build/material.js +28 -13
- package/dist/deployment/build/schema.d.ts +2 -2
- package/dist/deployment/deployment.d.ts +3 -2
- package/dist/deployment/environment.d.ts +6 -0
- package/dist/deployment/environment.js +6 -0
- package/dist/deployment/index.d.ts +4 -6
- package/dist/deployment/index.js +1 -2
- package/dist/deployment/release/addressing.d.ts +6 -5
- package/dist/deployment/release/addressing.js +2 -3
- package/dist/deployment/release/assemble.d.ts +6 -3
- package/dist/deployment/release/assemble.js +12 -10
- package/dist/deployment/release/release.d.ts +16 -5
- package/dist/deployment/release/seal.d.ts +14 -0
- package/dist/deployment/release/seal.js +22 -0
- package/dist/deployment/release/{publication → served}/callables.d.ts +2 -2
- package/dist/deployment/release/{publication → served}/callables.js +2 -2
- package/dist/deployment/release/served/index.d.ts +11 -0
- package/dist/deployment/release/served/index.js +26 -0
- package/dist/deployment/release/{publication → served}/views.d.ts +2 -2
- package/dist/deployment/release/{publication → served}/views.js +0 -1
- package/dist/deployment/runtime/admission.d.ts +2 -2
- package/dist/deployment/runtime/admission.js +5 -5
- package/dist/deployment/verify/index.d.ts +3 -4
- package/dist/deployment/verify/index.js +2 -3
- package/dist/deployment/verify/preflight/bundle.d.ts +18 -0
- package/dist/deployment/verify/preflight/bundle.js +71 -0
- package/dist/deployment/verify/preflight/index.d.ts +1 -12
- package/dist/deployment/verify/preflight/index.js +1 -12
- package/dist/deployment/verify/readiness/fetch.d.ts +13 -0
- package/dist/deployment/verify/readiness/fetch.js +26 -0
- package/dist/deployment/verify/readiness/identity.d.ts +3 -6
- package/dist/deployment/verify/readiness/identity.js +3 -3
- package/dist/deployment/verify/readiness/index.d.ts +15 -8
- package/dist/deployment/verify/readiness/index.js +25 -6
- package/dist/deployment/verify/readiness/release.d.ts +8 -0
- package/dist/deployment/verify/readiness/release.js +22 -0
- package/dist/deployment/worker/address.d.ts +26 -0
- package/dist/deployment/worker/address.js +43 -0
- package/dist/deployment/worker/build.d.ts +60 -0
- package/dist/deployment/worker/build.js +172 -0
- package/dist/deployment/worker/configuration.d.ts +73 -0
- package/dist/deployment/worker/configuration.js +165 -0
- package/dist/deployment/worker/content.d.ts +38 -0
- package/dist/deployment/worker/content.js +169 -0
- package/dist/deployment/worker/index.d.ts +29 -0
- package/dist/deployment/worker/index.js +29 -0
- package/dist/deployment/worker/limits.d.ts +30 -0
- package/dist/deployment/worker/limits.js +30 -0
- package/dist/deployment/worker/record.d.ts +29 -0
- package/dist/deployment/worker/record.js +69 -0
- package/dist/deployment/worker/request.d.ts +118 -0
- package/dist/deployment/worker/request.js +280 -0
- package/dist/deployment/worker/response.d.ts +101 -0
- package/dist/deployment/worker/response.js +207 -0
- package/dist/execution/cache/cache.d.ts +17 -0
- package/dist/execution/cache/cache.js +11 -0
- package/dist/execution/cache/index.d.ts +2 -0
- package/dist/execution/cache/index.js +2 -0
- package/dist/execution/cache/memory.d.ts +13 -0
- package/dist/execution/cache/memory.js +48 -0
- package/dist/execution/identity/authentication.d.ts +33 -3
- package/dist/execution/identity/authentication.js +90 -36
- package/dist/execution/identity/callback.d.ts +20 -20
- package/dist/execution/identity/callback.js +34 -26
- package/dist/execution/identity/delivery.d.ts +6 -4
- package/dist/execution/identity/delivery.js +25 -20
- package/dist/execution/identity/identity.d.ts +17 -3
- package/dist/execution/identity/identity.js +12 -4
- package/dist/execution/identity/jwks.d.ts +5 -0
- package/dist/execution/identity/jwks.js +92 -102
- package/dist/execution/index.d.ts +6 -4
- package/dist/execution/index.js +4 -2
- package/dist/execution/invocation/admission/age.d.ts +57 -0
- package/dist/execution/invocation/admission/age.js +208 -0
- package/dist/execution/invocation/admission/authentication.d.ts +13 -13
- package/dist/execution/invocation/admission/authentication.js +52 -44
- package/dist/execution/invocation/admission/authority.d.ts +28 -6
- package/dist/execution/invocation/admission/authority.js +9 -2
- package/dist/execution/invocation/admission/index.d.ts +4 -3
- package/dist/execution/invocation/admission/index.js +3 -2
- package/dist/execution/invocation/admission/input.d.ts +2 -2
- package/dist/execution/invocation/admission/input.js +16 -2
- package/dist/execution/invocation/admission/target.d.ts +11 -0
- package/dist/execution/invocation/admission/target.js +22 -3
- package/dist/execution/invocation/capabilities/bind.d.ts +11 -0
- package/dist/execution/invocation/capabilities/bind.js +25 -0
- package/dist/execution/invocation/capabilities/index.d.ts +1 -0
- package/dist/execution/invocation/capabilities/index.js +1 -0
- package/dist/execution/invocation/dependency/bind.d.ts +3 -1
- package/dist/execution/invocation/dependency/bind.js +36 -16
- package/dist/execution/invocation/dispatch/context.d.ts +7 -6
- package/dist/execution/invocation/dispatch/context.js +11 -44
- package/dist/execution/invocation/dispatch/workflow.js +0 -4
- package/dist/execution/invocation/handler.js +8 -2
- package/dist/execution/invocation/index.d.ts +2 -2
- package/dist/execution/invocation/index.js +1 -1
- package/dist/execution/invocation/integration/authentication.d.ts +3 -3
- package/dist/execution/invocation/integration/authentication.js +7 -7
- package/dist/execution/invocation/integration/call.d.ts +2 -1
- package/dist/execution/invocation/integration/call.js +3 -3
- package/dist/execution/invocation/integration/clients.d.ts +1 -1
- package/dist/execution/invocation/integration/index.d.ts +1 -0
- package/dist/execution/invocation/integration/index.js +1 -0
- package/dist/execution/invocation/invocation.d.ts +6 -0
- package/dist/execution/invocation/invocation.js +129 -21
- package/dist/execution/invocation/lifecycle/active.d.ts +8 -2
- package/dist/execution/invocation/lifecycle/active.js +3 -3
- package/dist/execution/invocation/lifecycle/index.d.ts +1 -1
- package/dist/execution/invocation/result/errors.d.ts +0 -10
- package/dist/execution/invocation/result/errors.js +0 -17
- package/dist/execution/invocation/result/index.d.ts +2 -2
- package/dist/execution/invocation/result/index.js +1 -1
- package/dist/execution/invocation/result/project.js +41 -1
- package/dist/execution/node/serve.d.ts +2 -2
- package/dist/execution/node/serve.js +1 -1
- package/dist/execution/runtime/index.d.ts +1 -0
- package/dist/execution/runtime/index.js +1 -0
- package/dist/execution/runtime/load.d.ts +3 -3
- package/dist/execution/runtime/load.js +3 -2
- package/dist/execution/runtime/release.d.ts +17 -0
- package/dist/execution/runtime/release.js +7 -0
- package/dist/execution/serve.d.ts +18 -4
- package/dist/execution/serve.js +10 -0
- package/dist/execution/service/create.js +43 -7
- package/dist/execution/service/initialization.d.ts +4 -4
- package/dist/execution/service/initialization.js +23 -14
- package/dist/execution/service/release.d.ts +2 -2
- package/dist/execution/service/release.js +3 -2
- package/dist/execution/service/service.d.ts +20 -5
- package/dist/execution/service/serving/delivery.d.ts +5 -0
- package/dist/execution/service/{publication → serving}/delivery.js +4 -1
- package/dist/execution/service/{publication → serving}/index.d.ts +1 -1
- package/dist/execution/service/serving/installation.d.ts +4 -0
- package/dist/execution/service/serving/installation.js +9 -0
- package/dist/execution/service/serving/source.d.ts +11 -0
- package/dist/execution/service/serving/source.js +15 -0
- package/dist/execution/workflows/attempts.d.ts +87 -0
- package/dist/execution/workflows/attempts.js +205 -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 +83 -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 +39 -0
- package/dist/execution/workflows/failure.js +143 -0
- package/dist/execution/workflows/index.d.ts +4 -0
- package/dist/execution/workflows/index.js +3 -0
- package/dist/execution/workflows/integrations.d.ts +13 -0
- package/dist/execution/workflows/integrations.js +25 -0
- package/dist/execution/workflows/options.d.ts +81 -0
- package/dist/execution/workflows/options.js +158 -0
- package/dist/execution/workflows/receiver.d.ts +24 -0
- package/dist/execution/workflows/receiver.js +99 -0
- package/dist/execution/workflows/route.d.ts +12 -0
- package/dist/execution/workflows/route.js +35 -0
- package/dist/execution/workflows/run.d.ts +23 -0
- package/dist/execution/workflows/run.js +365 -0
- package/dist/execution/workflows/steps.d.ts +48 -0
- package/dist/execution/workflows/steps.js +93 -0
- package/dist/index.d.ts +4 -4
- package/dist/index.js +2 -2
- package/dist/platform/graph/alias.d.ts +1 -5
- package/dist/platform/graph/alias.js +1 -5
- package/dist/platform/graph/document/index.d.ts +1 -1
- package/dist/platform/graph/document/index.js +1 -1
- package/dist/platform/graph/index.d.ts +1 -1
- package/dist/platform/graph/index.js +1 -1
- package/dist/platform/release/index.d.ts +2 -0
- package/dist/platform/release/index.js +2 -0
- package/dist/platform/schema/callable-authoring.d.ts +21 -0
- package/dist/platform/schema/callable-authoring.js +27 -0
- package/dist/platform/schema/class-authoring.d.ts +61 -11
- package/dist/platform/schema/class-authoring.js +37 -4
- package/dist/platform/schema/class-icon-svg.d.ts +9 -0
- package/dist/platform/schema/class-icon-svg.js +29 -0
- package/dist/platform/schema/class-icon.d.ts +3 -8
- package/dist/platform/schema/class-icon.js +2 -29
- package/dist/platform/schema/index.d.ts +6 -4
- package/dist/platform/schema/index.js +2 -1
- package/dist/platform/schema/property.d.ts +5 -0
- package/dist/platform/schema/schema-authoring.d.ts +14 -7
- package/dist/platform/schema/schema-authoring.js +5 -1
- package/dist/platform/versioning/dependents.d.ts +18 -0
- package/dist/platform/versioning/dependents.js +15 -0
- package/dist/platform/versioning/index.d.ts +5 -0
- package/dist/platform/versioning/index.js +5 -0
- package/dist/platform/versioning/name.d.ts +38 -0
- package/dist/platform/versioning/name.js +58 -0
- package/dist/platform/versioning/reference.d.ts +48 -0
- package/dist/platform/versioning/reference.js +95 -0
- package/dist/platform/versioning/version.d.ts +72 -0
- package/dist/platform/versioning/version.js +98 -0
- package/dist/project/admit.js +1 -5
- package/dist/project/define.d.ts +4 -4
- package/dist/project/define.js +55 -35
- package/dist/project/index.d.ts +1 -1
- package/dist/project/install-command.d.ts +6 -0
- package/dist/project/install-command.js +9 -0
- package/dist/project/project.d.ts +10 -8
- package/dist/testing/dataset/define.d.ts +1 -1
- package/dist/testing/durable/engine.d.ts +128 -0
- package/dist/testing/durable/engine.js +619 -0
- package/dist/testing/durable/index.d.ts +3 -0
- package/dist/testing/durable/index.js +1 -0
- package/dist/testing/durable/steps.d.ts +30 -0
- package/dist/testing/durable/steps.js +45 -0
- package/dist/testing/index.d.ts +6 -1
- package/dist/testing/index.js +5 -1
- package/dist/testing/load.js +1 -1
- package/dist/tooling/cli/adapter-command.d.ts +35 -0
- package/dist/tooling/cli/adapter-command.js +66 -0
- package/dist/tooling/cli/arguments.d.ts +17 -6
- package/dist/tooling/cli/arguments.js +175 -52
- package/dist/tooling/cli/build.d.ts +55 -0
- package/dist/tooling/cli/build.js +77 -0
- package/dist/tooling/cli/bun.d.ts +0 -1
- package/dist/tooling/cli/bun.js +0 -7
- package/dist/tooling/cli/commit.d.ts +35 -0
- package/dist/tooling/cli/commit.js +235 -0
- package/dist/tooling/cli/deploy-mode.d.ts +26 -0
- package/dist/tooling/cli/deploy-mode.js +59 -0
- package/dist/tooling/cli/deploy-result.d.ts +80 -0
- package/dist/tooling/cli/deploy-result.js +64 -0
- package/dist/tooling/cli/diff/declared.d.ts +7 -0
- package/dist/tooling/cli/diff/declared.js +27 -0
- package/dist/tooling/cli/diff/index.d.ts +30 -0
- package/dist/tooling/cli/diff/index.js +58 -0
- package/dist/tooling/cli/diff/render.d.ts +15 -0
- package/dist/tooling/cli/diff/render.js +131 -0
- package/dist/tooling/cli/diff/report.d.ts +88 -0
- package/dist/tooling/cli/diff/report.js +154 -0
- package/dist/tooling/cli/dotenv.d.ts +5 -5
- package/dist/tooling/cli/dotenv.js +6 -36
- package/dist/tooling/cli/help.js +173 -60
- package/dist/tooling/cli/immutable-deployment.d.ts +83 -0
- package/dist/tooling/cli/immutable-deployment.js +135 -0
- package/dist/tooling/cli/index.d.ts +12 -4
- package/dist/tooling/cli/index.js +6 -3
- package/dist/tooling/cli/installed-on.d.ts +83 -0
- package/dist/tooling/cli/installed-on.js +156 -0
- package/dist/tooling/cli/list.d.ts +152 -0
- package/dist/tooling/cli/list.js +331 -0
- package/dist/tooling/cli/log.d.ts +5 -2
- package/dist/tooling/cli/log.js +9 -2
- package/dist/tooling/cli/orchestrate.d.ts +0 -6
- package/dist/tooling/cli/orchestrate.js +246 -90
- package/dist/tooling/cli/project.d.ts +3 -3
- package/dist/tooling/cli/publish/index.d.ts +81 -0
- package/dist/tooling/cli/publish/index.js +383 -0
- package/dist/tooling/cli/publish/report.d.ts +49 -0
- package/dist/tooling/cli/publish/report.js +15 -0
- package/dist/tooling/cli/registry/client.d.ts +121 -0
- package/dist/tooling/cli/registry/client.js +354 -0
- package/dist/tooling/cli/registry/error.d.ts +11 -0
- package/dist/tooling/cli/registry/error.js +17 -0
- package/dist/tooling/cli/registry/executable.d.ts +35 -0
- package/dist/tooling/cli/registry/executable.js +96 -0
- package/dist/tooling/cli/registry/index.d.ts +9 -0
- package/dist/tooling/cli/registry/index.js +8 -0
- package/dist/tooling/cli/registry/installations.d.ts +67 -0
- package/dist/tooling/cli/registry/installations.js +108 -0
- package/dist/tooling/cli/registry/process.d.ts +36 -0
- package/dist/tooling/cli/registry/process.js +119 -0
- package/dist/tooling/cli/secrets.d.ts +9 -0
- package/dist/tooling/cli/secrets.js +19 -0
- package/dist/tooling/cli/yank.d.ts +34 -0
- package/dist/tooling/cli/yank.js +32 -0
- package/dist/tooling/linter/adapters/typescript/imports.d.ts +0 -1
- package/dist/tooling/linter/adapters/typescript/imports.js +1 -5
- package/dist/tooling/linter/adapters/typescript/index.d.ts +1 -1
- package/dist/tooling/linter/adapters/typescript/index.js +1 -1
- package/dist/tooling/linter/adapters/typescript/syntax.d.ts +3 -3
- package/dist/tooling/linter/adapters/typescript/syntax.js +13 -25
- package/dist/tooling/linter/implementations/source/callable-requirements.d.ts +1 -2
- package/dist/tooling/linter/implementations/source/callable-requirements.js +11 -16
- package/dist/tooling/linter/implementations/source/dependencies.js +13 -72
- package/dist/tooling/linter/implementations/source/global.js +1 -2
- package/dist/tooling/linter/implementations/source/mutations.js +18 -29
- package/dist/tooling/linter/implementations/source/providers.js +5 -5
- package/dist/tooling/linter/implementations/source/queries.js +1 -17
- package/dist/tooling/linter/implementations/source/shared.d.ts +12 -4
- package/dist/tooling/linter/implementations/source/shared.js +101 -46
- package/dist/tooling/linter/implementations/source/verifiers.js +0 -2
- package/dist/tooling/linter/implementations/source/views.js +2 -2
- package/dist/tooling/linter/implementations/source/workflows.js +499 -17
- package/dist/tooling/linter/policy/generated.js +14 -63
- package/dist/tooling/linter/requirements/registry.js +6 -8
- package/dist/tooling/packaging/declarations/ownership.js +1 -1
- package/dist/tooling/packaging/finalize.d.ts +1 -1
- package/dist/tooling/packaging/finalize.js +1 -1
- package/docs/admission-age.md +88 -0
- package/docs/auth-api-migration.md +55 -0
- package/docs/business-errors.md +42 -0
- package/docs/domain-definition-migration.md +44 -0
- package/docs/domain-schema-migration.md +36 -0
- package/docs/durable-workflows.md +445 -0
- package/docs/handler-dependencies.md +213 -0
- package/docs/release.md +155 -0
- package/docs/schema-cost.md +124 -0
- package/package.json +45 -16
- package/dist/application/application.d.ts +0 -28
- package/dist/application/query/execution/projection.d.ts +0 -3
- package/dist/application/query/execution/projection.js +0 -3
- package/dist/deployment/adapter/deploy/context.d.ts +0 -15
- package/dist/deployment/adapter/deploy/index.d.ts +0 -2
- package/dist/deployment/adapter/deploy/result.d.ts +0 -50
- package/dist/deployment/adapter/prepare/artifact.d.ts +0 -33
- package/dist/deployment/adapter/prepare/context.d.ts +0 -23
- package/dist/deployment/adapter/prepare/index.d.ts +0 -2
- package/dist/deployment/deploy.d.ts +0 -20
- package/dist/deployment/deploy.js +0 -31
- package/dist/deployment/release/publication/index.d.ts +0 -6
- package/dist/deployment/release/publication/index.js +0 -6
- package/dist/deployment/release/publication/manifest.d.ts +0 -3
- package/dist/deployment/release/publication/manifest.js +0 -5
- package/dist/deployment/release/publication/requirements.d.ts +0 -3
- package/dist/deployment/release/publication/requirements.js +0 -3
- package/dist/deployment/release/publication/seal.d.ts +0 -10
- package/dist/deployment/release/publication/seal.js +0 -39
- package/dist/deployment/verify/preflight/artifact.d.ts +0 -6
- package/dist/deployment/verify/preflight/artifact.js +0 -122
- package/dist/deployment/verify/preflight/publication.d.ts +0 -4
- package/dist/deployment/verify/preflight/publication.js +0 -14
- package/dist/deployment/verify/readiness/deployment.d.ts +0 -3
- package/dist/deployment/verify/readiness/deployment.js +0 -151
- package/dist/deployment/verify/readiness/publication.d.ts +0 -11
- package/dist/deployment/verify/readiness/publication.js +0 -41
- package/dist/execution/service/errors.d.ts +0 -3
- package/dist/execution/service/errors.js +0 -3
- package/dist/execution/service/publication/delivery.d.ts +0 -2
- package/dist/execution/service/publication/installation.d.ts +0 -3
- package/dist/execution/service/publication/installation.js +0 -8
- package/dist/execution/service/publication/source.d.ts +0 -3
- package/dist/execution/service/publication/source.js +0 -11
- package/dist/platform/publication/index.d.ts +0 -2
- package/dist/platform/publication/index.js +0 -2
- package/dist/tooling/cli/astrale/authority.d.ts +0 -5
- package/dist/tooling/cli/astrale/authority.js +0 -11
- package/dist/tooling/cli/astrale/executable.d.ts +0 -2
- package/dist/tooling/cli/astrale/executable.js +0 -47
- package/dist/tooling/cli/astrale/failure.d.ts +0 -6
- package/dist/tooling/cli/astrale/failure.js +0 -48
- package/dist/tooling/cli/astrale/instance.d.ts +0 -11
- package/dist/tooling/cli/astrale/instance.js +0 -52
- package/dist/tooling/cli/astrale/process.d.ts +0 -13
- package/dist/tooling/cli/astrale/process.js +0 -94
- package/dist/tooling/cli/astrale/version.d.ts +0 -18
- package/dist/tooling/cli/astrale/version.js +0 -55
- package/dist/tooling/cli/credential.d.ts +0 -2
- package/dist/tooling/cli/credential.js +0 -57
- package/dist/tooling/cli/deprecations.d.ts +0 -9
- package/dist/tooling/cli/deprecations.js +0 -15
- package/dist/tooling/cli/development/candidate.d.ts +0 -25
- package/dist/tooling/cli/development/candidate.js +0 -176
- package/dist/tooling/cli/development/deployment.d.ts +0 -16
- package/dist/tooling/cli/development/deployment.js +0 -39
- package/dist/tooling/cli/development/develop.d.ts +0 -11
- package/dist/tooling/cli/development/develop.js +0 -243
- package/dist/tooling/cli/development/lease.d.ts +0 -18
- package/dist/tooling/cli/development/lease.js +0 -163
- package/dist/tooling/cli/development/lifecycle.d.ts +0 -9
- package/dist/tooling/cli/development/lifecycle.js +0 -43
- package/dist/tooling/cli/development/project-imports.d.ts +0 -22
- package/dist/tooling/cli/development/project-imports.js +0 -39
- package/dist/tooling/cli/development/project-lock.d.ts +0 -16
- package/dist/tooling/cli/development/project-lock.js +0 -41
- package/dist/tooling/cli/development/rebuild.d.ts +0 -13
- package/dist/tooling/cli/development/rebuild.js +0 -58
- package/dist/tooling/cli/development/release-evidence.d.ts +0 -4
- package/dist/tooling/cli/development/release-evidence.js +0 -10
- package/dist/tooling/cli/development/report.d.ts +0 -6
- package/dist/tooling/cli/development/report.js +0 -14
- package/dist/tooling/cli/development/session-file.d.ts +0 -53
- package/dist/tooling/cli/development/session-file.js +0 -337
- package/dist/tooling/cli/development/source-watch.d.ts +0 -14
- package/dist/tooling/cli/development/source-watch.js +0 -140
- package/dist/tooling/cli/development/sources.d.ts +0 -7
- package/dist/tooling/cli/development/sources.js +0 -48
- package/dist/tooling/cli/development/target-lock.d.ts +0 -16
- package/dist/tooling/cli/development/target-lock.js +0 -68
- package/dist/tooling/cli/development/view.d.ts +0 -28
- package/dist/tooling/cli/development/view.js +0 -151
- package/dist/tooling/cli/environment-release.d.ts +0 -21
- package/dist/tooling/cli/environment-release.js +0 -46
- package/dist/tooling/cli/evidence.d.ts +0 -11
- package/dist/tooling/cli/evidence.js +0 -53
- package/dist/tooling/cli/installation/index.d.ts +0 -2
- package/dist/tooling/cli/installation/index.js +0 -1
- package/dist/tooling/cli/installation/observation.d.ts +0 -10
- package/dist/tooling/cli/installation/observation.js +0 -44
- package/dist/tooling/cli/installation/reconcile.d.ts +0 -32
- package/dist/tooling/cli/installation/reconcile.js +0 -122
- package/dist/tooling/linter/implementations/source/migrations.d.ts +0 -2
- package/dist/tooling/linter/implementations/source/migrations.js +0 -113
- package/dist/tooling/linter/qualification/index.d.ts +0 -10
- package/dist/tooling/linter/qualification/index.js +0 -2
- package/dist/tooling/linter/qualification/query-fixtures.d.ts +0 -2
- package/dist/tooling/linter/qualification/query-fixtures.js +0 -68
- package/dist/tooling/linter/qualification/runner.d.ts +0 -3
- package/dist/tooling/linter/qualification/runner.js +0 -6
- /package/dist/application/{application.js → domain.js} +0 -0
- /package/dist/{deployment/adapter/deploy/context.js → application/workflow/durable.js} +0 -0
- /package/dist/deployment/adapter/{deploy/index.js → bundle/bundle.js} +0 -0
- /package/dist/deployment/adapter/{deploy/result.js → bundle/file.js} +0 -0
- /package/dist/deployment/adapter/{prepare → bundle}/index.js +0 -0
- /package/dist/deployment/adapter/{prepare/artifact.js → release/command.js} +0 -0
- /package/dist/deployment/adapter/{prepare → release}/context.js +0 -0
- /package/dist/deployment/release/{publication → served}/routes.d.ts +0 -0
- /package/dist/deployment/release/{publication → served}/routes.js +0 -0
- /package/dist/execution/service/{publication → serving}/index.js +0 -0
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { IssuerId, UnresolvedIdentityExpr
|
|
1
|
+
import type { IssuerId, UnresolvedIdentityExpr } 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,27 +24,21 @@ 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;
|
|
34
30
|
readonly signal: AbortSignal;
|
|
35
31
|
}): Promise<string>;
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
32
|
+
/**
|
|
33
|
+
* Reuse one exact callback authority partition, refreshing only near its bounded expiry. No callback
|
|
34
|
+
* outlives `validUntil`, the earliest expiry in Unix seconds of the credentials it derives from: the
|
|
35
|
+
* Kernel folds each of them into the callback's validity, so a longer callback could not carry its
|
|
36
|
+
* delegation. Without it the callback is the Domain's own authority, bounded by the execution alone.
|
|
37
|
+
* Once that authority can no longer carry a callback, the call ends as DEADLINE_EXCEEDED. An
|
|
38
|
+
* `executionId` is the durable Execution a step's executor credential names in `EXECUTION_CLAIM`;
|
|
39
|
+
* no caller-bound callback names one.
|
|
40
|
+
*/
|
|
41
|
+
export declare function createCallbackCredentialResolver(signing: SigningMaterial, issuer: IssuerId, subject: string, audience: IssuerId, expression: UnresolvedIdentityExpr, validUntil: number | undefined, execution: {
|
|
42
42
|
readonly deadline: number;
|
|
43
43
|
readonly signal: AbortSignal;
|
|
44
|
-
}): (signal: AbortSignal) => Promise<SignedCallback>;
|
|
44
|
+
}, executionId?: NodeId): (signal: AbortSignal) => Promise<SignedCallback>;
|
|
@@ -1,32 +1,33 @@
|
|
|
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
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
20
|
+
/**
|
|
21
|
+
* Reuse one exact callback authority partition, refreshing only near its bounded expiry. No callback
|
|
22
|
+
* outlives `validUntil`, the earliest expiry in Unix seconds of the credentials it derives from: the
|
|
23
|
+
* Kernel folds each of them into the callback's validity, so a longer callback could not carry its
|
|
24
|
+
* delegation. Without it the callback is the Domain's own authority, bounded by the execution alone.
|
|
25
|
+
* Once that authority can no longer carry a callback, the call ends as DEADLINE_EXCEEDED. An
|
|
26
|
+
* `executionId` is the durable Execution a step's executor credential names in `EXECUTION_CLAIM`;
|
|
27
|
+
* no caller-bound callback names one.
|
|
28
|
+
*/
|
|
29
|
+
export function createCallbackCredentialResolver(signing, issuer, subject, audience, expression, validUntil, execution, executionId) {
|
|
30
|
+
const maximum = validUntil ?? Number.POSITIVE_INFINITY;
|
|
30
31
|
let cached;
|
|
31
32
|
let pending;
|
|
32
33
|
return async (signal) => {
|
|
@@ -38,11 +39,10 @@ export function createCallbackCredentialResolver(signing, issuer, subject, audie
|
|
|
38
39
|
return cached;
|
|
39
40
|
}
|
|
40
41
|
if (pending === undefined) {
|
|
41
|
-
const current = sign(signing, issuer, subject, audience, expression, execution, maximum).then((signed) => {
|
|
42
|
+
const current = sign(signing, issuer, subject, audience, expression, execution, maximum, executionId).then((signed) => {
|
|
42
43
|
const delegateTtlSeconds = Math.min(maximumCallbackDelegationTtlSeconds, signed.expiresAt - signed.issuedAt - CALLBACK_DELEGATION_SKEW_SECONDS);
|
|
43
|
-
if (delegateTtlSeconds < 1)
|
|
44
|
-
throw
|
|
45
|
-
}
|
|
44
|
+
if (delegateTtlSeconds < 1)
|
|
45
|
+
throw exhausted(execution, maximum);
|
|
46
46
|
return (cached = Object.freeze({
|
|
47
47
|
credential: signed.credential,
|
|
48
48
|
expiresAt: signed.expiresAt,
|
|
@@ -61,16 +61,18 @@ export function createCallbackCredentialResolver(signing, issuer, subject, audie
|
|
|
61
61
|
return withSignal(pending, signal);
|
|
62
62
|
};
|
|
63
63
|
}
|
|
64
|
-
async function sign(signing, issuer, subject, audience, expression, execution, maximum = Number.POSITIVE_INFINITY) {
|
|
64
|
+
async function sign(signing, issuer, subject, audience, expression, execution, maximum = Number.POSITIVE_INFINITY, executionId) {
|
|
65
65
|
requireLive(execution);
|
|
66
66
|
const privateKey = await withSignal(signing.privateKey, execution.signal);
|
|
67
67
|
requireLive(execution);
|
|
68
68
|
const now = Math.floor(Date.now() / 1_000);
|
|
69
69
|
const expiresAt = Math.min(maximum, Math.floor(execution.deadline / 1_000), now + maximumCallbackTtlSeconds);
|
|
70
|
-
if (!Number.isFinite(expiresAt) || expiresAt <= now)
|
|
71
|
-
throw
|
|
72
|
-
|
|
73
|
-
|
|
70
|
+
if (!Number.isFinite(expiresAt) || expiresAt <= now)
|
|
71
|
+
throw exhausted(execution, maximum);
|
|
72
|
+
const credential = await withSignal(new SignJWT({
|
|
73
|
+
grant: { v: 1, expr: expression },
|
|
74
|
+
...(executionId === undefined ? {} : { [EXECUTION_CLAIM]: executionId }),
|
|
75
|
+
})
|
|
74
76
|
.setProtectedHeader({
|
|
75
77
|
alg: signing.algorithm,
|
|
76
78
|
...(signing.keyId === undefined ? {} : { kid: signing.keyId }),
|
|
@@ -84,6 +86,12 @@ async function sign(signing, issuer, subject, audience, expression, execution, m
|
|
|
84
86
|
requireLive(execution);
|
|
85
87
|
return Object.freeze({ credential, issuedAt: now, expiresAt });
|
|
86
88
|
}
|
|
89
|
+
/** The authority a callback derives from ends before the callback could serve a call. */
|
|
90
|
+
function exhausted(execution, maximum) {
|
|
91
|
+
return protocolError('DEADLINE_EXCEEDED', maximum * 1_000 < execution.deadline
|
|
92
|
+
? 'Caller authority has expired.'
|
|
93
|
+
: 'Invocation deadline was exceeded.');
|
|
94
|
+
}
|
|
87
95
|
function withSignal(operation, signal) {
|
|
88
96
|
if (signal.aborted)
|
|
89
97
|
return Promise.reject(signal.reason);
|
|
@@ -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,7 @@
|
|
|
1
1
|
export { serve } from './serve.js';
|
|
2
|
-
export type { ExecutionContext,
|
|
3
|
-
export {
|
|
4
|
-
export {
|
|
5
|
-
export type {
|
|
2
|
+
export type { ExecutionContext, ServedDomain, ServeInput } from './serve.js';
|
|
3
|
+
export { DEFAULT_MEMORY_CACHE_ENTRIES, memoryCache, type DeploymentCache, type MemoryCacheOptions, } from './cache/index.js';
|
|
4
|
+
export { createIdentity, maximumExchangeTtl, type ExchangeOptions, type Identity, type IdentityInput, } from './identity/index.js';
|
|
5
|
+
export type { DurableEngine, DurableServing, DurableServingProvider } from './workflows/index.js';
|
|
6
|
+
export { DURABLE_ENGINE_EXPORTS, isDurableEngine } from './workflows/options.js';
|
|
7
|
+
export { isCanonicalDurableRequest } from './workflows/route.js';
|
package/dist/execution/index.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
export { serve } from './serve.js';
|
|
2
|
-
export {
|
|
3
|
-
export {
|
|
2
|
+
export { DEFAULT_MEMORY_CACHE_ENTRIES, memoryCache, } from './cache/index.js';
|
|
3
|
+
export { createIdentity, maximumExchangeTtl, } from './identity/index.js';
|
|
4
|
+
export { DURABLE_ENGINE_EXPORTS, isDurableEngine } from './workflows/options.js';
|
|
5
|
+
export { isCanonicalDurableRequest } from './workflows/route.js';
|