@xemahq/xema 0.59.0 → 0.60.1
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 +1 -2
- package/dist/appliance-owner.d.ts.map +1 -1
- package/dist/appliance-owner.js +6 -6
- package/dist/appliance-owner.js.map +1 -1
- package/dist/assets/appliance-base/authorization.lock.json +5186 -0
- package/dist/assets/appliance-base/distribution.lock.json +760 -279
- package/dist/assets/appliance-base/images.lock.json +576 -513
- package/dist/assets/appliance-lean/authorization.lock.json +4648 -0
- package/dist/assets/appliance-lean/distribution.lock.json +641 -186
- package/dist/assets/appliance-lean/images.lock.json +574 -512
- package/dist/assets/boot-graph.json +33 -14
- package/dist/assets/distribution-assets.manifest.json +23 -20
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +7 -9
- package/dist/cli.js.map +1 -1
- package/dist/commands/biome-dev.d.ts.map +1 -1
- package/dist/commands/biome-dev.js +41 -137
- package/dist/commands/biome-dev.js.map +1 -1
- package/dist/commands/biome-lifecycle.d.ts +24 -0
- package/dist/commands/biome-lifecycle.d.ts.map +1 -0
- package/dist/commands/biome-lifecycle.js +253 -0
- package/dist/commands/biome-lifecycle.js.map +1 -0
- package/dist/commands/biome.d.ts +2 -4
- package/dist/commands/biome.d.ts.map +1 -1
- package/dist/commands/biome.js +61 -46
- package/dist/commands/biome.js.map +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +96 -8
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +13 -20
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/down.d.ts.map +1 -1
- package/dist/commands/down.js +14 -21
- package/dist/commands/down.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +6 -3
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/installation-tenancy.d.ts +11 -0
- package/dist/commands/installation-tenancy.d.ts.map +1 -0
- package/dist/commands/installation-tenancy.js +308 -0
- package/dist/commands/installation-tenancy.js.map +1 -0
- package/dist/commands/installation.d.ts.map +1 -1
- package/dist/commands/installation.js +19 -5
- package/dist/commands/installation.js.map +1 -1
- package/dist/commands/logs.d.ts +2 -0
- package/dist/commands/logs.d.ts.map +1 -1
- package/dist/commands/logs.js +41 -8
- package/dist/commands/logs.js.map +1 -1
- package/dist/commands/{dev.d.ts → mirror.d.ts} +1 -1
- package/dist/commands/mirror.d.ts.map +1 -0
- package/dist/commands/mirror.js +132 -0
- package/dist/commands/mirror.js.map +1 -0
- package/dist/commands/source.d.ts.map +1 -1
- package/dist/commands/source.js +3 -2
- package/dist/commands/source.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +40 -21
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/up.d.ts.map +1 -1
- package/dist/commands/up.js +36 -4
- package/dist/commands/up.js.map +1 -1
- package/dist/dev/infra-preflight.d.ts.map +1 -1
- package/dist/dev/infra-preflight.js +0 -4
- package/dist/dev/infra-preflight.js.map +1 -1
- package/dist/lib/confirm.d.ts +3 -0
- package/dist/lib/confirm.d.ts.map +1 -0
- package/dist/lib/confirm.js +19 -0
- package/dist/lib/confirm.js.map +1 -0
- package/dist/lib/output-format.d.ts +6 -0
- package/dist/lib/output-format.d.ts.map +1 -0
- package/dist/lib/output-format.js +20 -0
- package/dist/lib/output-format.js.map +1 -0
- package/dist/mirror/config/mirror-config-document.d.ts +18 -0
- package/dist/mirror/config/mirror-config-document.d.ts.map +1 -0
- package/dist/mirror/config/mirror-config-document.js +57 -0
- package/dist/mirror/config/mirror-config-document.js.map +1 -0
- package/dist/mirror/config/mirror-config-schema.d.ts +54 -0
- package/dist/mirror/config/mirror-config-schema.d.ts.map +1 -0
- package/dist/mirror/config/mirror-config-schema.js +80 -0
- package/dist/mirror/config/mirror-config-schema.js.map +1 -0
- package/dist/mirror/kit/delta.d.ts +4 -0
- package/dist/mirror/kit/delta.d.ts.map +1 -0
- package/dist/mirror/kit/delta.js +41 -0
- package/dist/mirror/kit/delta.js.map +1 -0
- package/dist/mirror/kit/export-kit.d.ts +16 -0
- package/dist/mirror/kit/export-kit.d.ts.map +1 -0
- package/dist/mirror/kit/export-kit.js +112 -0
- package/dist/mirror/kit/export-kit.js.map +1 -0
- package/dist/mirror/kit/import-kit.d.ts +9 -0
- package/dist/mirror/kit/import-kit.d.ts.map +1 -0
- package/dist/mirror/kit/import-kit.js +166 -0
- package/dist/mirror/kit/import-kit.js.map +1 -0
- package/dist/mirror/kit/kit-archive.d.ts +4 -0
- package/dist/mirror/kit/kit-archive.d.ts.map +1 -0
- package/dist/mirror/kit/kit-archive.js +38 -0
- package/dist/mirror/kit/kit-archive.js.map +1 -0
- package/dist/mirror/kit/kit-layout.d.ts +10 -0
- package/dist/mirror/kit/kit-layout.d.ts.map +1 -0
- package/dist/mirror/kit/kit-layout.js +19 -0
- package/dist/mirror/kit/kit-layout.js.map +1 -0
- package/dist/mirror/kit/kit-sums.d.ts +5 -0
- package/dist/mirror/kit/kit-sums.d.ts.map +1 -0
- package/dist/mirror/kit/kit-sums.js +63 -0
- package/dist/mirror/kit/kit-sums.js.map +1 -0
- package/dist/mirror/kit/layout-sync.d.ts +8 -0
- package/dist/mirror/kit/layout-sync.d.ts.map +1 -0
- package/dist/mirror/kit/layout-sync.js +58 -0
- package/dist/mirror/kit/layout-sync.js.map +1 -0
- package/dist/mirror/plan/bundle-content.d.ts +10 -0
- package/dist/mirror/plan/bundle-content.d.ts.map +1 -0
- package/dist/mirror/plan/bundle-content.js +61 -0
- package/dist/mirror/plan/bundle-content.js.map +1 -0
- package/dist/mirror/plan/declaration-file.d.ts +9 -0
- package/dist/mirror/plan/declaration-file.d.ts.map +1 -0
- package/dist/mirror/plan/declaration-file.js +27 -0
- package/dist/mirror/plan/declaration-file.js.map +1 -0
- package/dist/mirror/plan/edition-inputs.d.ts +57 -0
- package/dist/mirror/plan/edition-inputs.d.ts.map +1 -0
- package/dist/mirror/plan/edition-inputs.js +44 -0
- package/dist/mirror/plan/edition-inputs.js.map +1 -0
- package/dist/mirror/plan/edition-reader.d.ts +9 -0
- package/dist/mirror/plan/edition-reader.d.ts.map +1 -0
- package/dist/mirror/plan/edition-reader.js +47 -0
- package/dist/mirror/plan/edition-reader.js.map +1 -0
- package/dist/mirror/plan/image-content.d.ts +30 -0
- package/dist/mirror/plan/image-content.d.ts.map +1 -0
- package/dist/mirror/plan/image-content.js +120 -0
- package/dist/mirror/plan/image-content.js.map +1 -0
- package/dist/mirror/plan/npm-lockfile.d.ts +12 -0
- package/dist/mirror/plan/npm-lockfile.d.ts.map +1 -0
- package/dist/mirror/plan/npm-lockfile.js +106 -0
- package/dist/mirror/plan/npm-lockfile.js.map +1 -0
- package/dist/mirror/plan/oci-reads.d.ts +22 -0
- package/dist/mirror/plan/oci-reads.d.ts.map +1 -0
- package/dist/mirror/plan/oci-reads.js +43 -0
- package/dist/mirror/plan/oci-reads.js.map +1 -0
- package/dist/mirror/plan/plan-command.d.ts +22 -0
- package/dist/mirror/plan/plan-command.d.ts.map +1 -0
- package/dist/mirror/plan/plan-command.js +81 -0
- package/dist/mirror/plan/plan-command.js.map +1 -0
- package/dist/mirror/plan/plan-file.d.ts +13 -0
- package/dist/mirror/plan/plan-file.d.ts.map +1 -0
- package/dist/mirror/plan/plan-file.js +63 -0
- package/dist/mirror/plan/plan-file.js.map +1 -0
- package/dist/mirror/plan/resolve-content-set.d.ts +16 -0
- package/dist/mirror/plan/resolve-content-set.d.ts.map +1 -0
- package/dist/mirror/plan/resolve-content-set.js +90 -0
- package/dist/mirror/plan/resolve-content-set.js.map +1 -0
- package/dist/mirror/preflight/glob.d.ts +2 -0
- package/dist/mirror/preflight/glob.d.ts.map +1 -0
- package/dist/mirror/preflight/glob.js +59 -0
- package/dist/mirror/preflight/glob.js.map +1 -0
- package/dist/mirror/preflight/harbor-api.d.ts +27 -0
- package/dist/mirror/preflight/harbor-api.d.ts.map +1 -0
- package/dist/mirror/preflight/harbor-api.js +39 -0
- package/dist/mirror/preflight/harbor-api.js.map +1 -0
- package/dist/mirror/preflight/preflight.d.ts +18 -0
- package/dist/mirror/preflight/preflight.d.ts.map +1 -0
- package/dist/mirror/preflight/preflight.js +41 -0
- package/dist/mirror/preflight/preflight.js.map +1 -0
- package/dist/mirror/preflight/tag-moves.d.ts +16 -0
- package/dist/mirror/preflight/tag-moves.d.ts.map +1 -0
- package/dist/mirror/preflight/tag-moves.js +28 -0
- package/dist/mirror/preflight/tag-moves.js.map +1 -0
- package/dist/mirror/preflight/write-probe.d.ts +10 -0
- package/dist/mirror/preflight/write-probe.d.ts.map +1 -0
- package/dist/mirror/preflight/write-probe.js +36 -0
- package/dist/mirror/preflight/write-probe.js.map +1 -0
- package/dist/mirror/target/extras.d.ts +16 -0
- package/dist/mirror/target/extras.d.ts.map +1 -0
- package/dist/mirror/target/extras.js +47 -0
- package/dist/mirror/target/extras.js.map +1 -0
- package/dist/mirror/target/npm-registry.d.ts +20 -0
- package/dist/mirror/target/npm-registry.d.ts.map +1 -0
- package/dist/mirror/target/npm-registry.js +67 -0
- package/dist/mirror/target/npm-registry.js.map +1 -0
- package/dist/mirror/target/npm-sync.d.ts +15 -0
- package/dist/mirror/target/npm-sync.d.ts.map +1 -0
- package/dist/mirror/target/npm-sync.js +44 -0
- package/dist/mirror/target/npm-sync.js.map +1 -0
- package/dist/mirror/target/oci-items.d.ts +27 -0
- package/dist/mirror/target/oci-items.d.ts.map +1 -0
- package/dist/mirror/target/oci-items.js +79 -0
- package/dist/mirror/target/oci-items.js.map +1 -0
- package/dist/mirror/target/oci-sync.d.ts +20 -0
- package/dist/mirror/target/oci-sync.d.ts.map +1 -0
- package/dist/mirror/target/oci-sync.js +93 -0
- package/dist/mirror/target/oci-sync.js.map +1 -0
- package/dist/mirror/target/receipt-store.d.ts +13 -0
- package/dist/mirror/target/receipt-store.d.ts.map +1 -0
- package/dist/mirror/target/receipt-store.js +61 -0
- package/dist/mirror/target/receipt-store.js.map +1 -0
- package/dist/mirror/target/receipt.d.ts +13 -0
- package/dist/mirror/target/receipt.d.ts.map +1 -0
- package/dist/mirror/target/receipt.js +25 -0
- package/dist/mirror/target/receipt.js.map +1 -0
- package/dist/mirror/target/seed-push.d.ts +15 -0
- package/dist/mirror/target/seed-push.d.ts.map +1 -0
- package/dist/mirror/target/seed-push.js +20 -0
- package/dist/mirror/target/seed-push.js.map +1 -0
- package/dist/mirror/target/target-access.d.ts +7 -0
- package/dist/mirror/target/target-access.d.ts.map +1 -0
- package/dist/mirror/target/target-access.js +17 -0
- package/dist/mirror/target/target-access.js.map +1 -0
- package/dist/mirror/target/target-commands.d.ts +21 -0
- package/dist/mirror/target/target-commands.d.ts.map +1 -0
- package/dist/mirror/target/target-commands.js +134 -0
- package/dist/mirror/target/target-commands.js.map +1 -0
- package/dist/mirror/target/target-context.d.ts +11 -0
- package/dist/mirror/target/target-context.d.ts.map +1 -0
- package/dist/mirror/target/target-context.js +31 -0
- package/dist/mirror/target/target-context.js.map +1 -0
- package/dist/mirror/target/target-ports.d.ts +18 -0
- package/dist/mirror/target/target-ports.d.ts.map +1 -0
- package/dist/mirror/target/target-ports.js +49 -0
- package/dist/mirror/target/target-ports.js.map +1 -0
- package/dist/mirror/target/target-state.d.ts +22 -0
- package/dist/mirror/target/target-state.d.ts.map +1 -0
- package/dist/mirror/target/target-state.js +41 -0
- package/dist/mirror/target/target-state.js.map +1 -0
- package/dist/runtime/biome-dev.d.ts +0 -16
- package/dist/runtime/biome-dev.d.ts.map +1 -1
- package/dist/runtime/biome-dev.js +0 -53
- package/dist/runtime/biome-dev.js.map +1 -1
- package/dist/runtime/biome-host/biome-directory-packer.d.ts +3 -0
- package/dist/runtime/biome-host/biome-directory-packer.d.ts.map +1 -0
- package/dist/runtime/biome-host/biome-directory-packer.js +12 -0
- package/dist/runtime/biome-host/biome-directory-packer.js.map +1 -0
- package/dist/runtime/biome-host/bundle-packer.d.ts +8 -0
- package/dist/runtime/biome-host/bundle-packer.d.ts.map +1 -0
- package/dist/runtime/biome-host/bundle-packer.js +3 -0
- package/dist/runtime/biome-host/bundle-packer.js.map +1 -0
- package/dist/runtime/biome-host/from-spec.d.ts +33 -0
- package/dist/runtime/biome-host/from-spec.d.ts.map +1 -0
- package/dist/runtime/biome-host/from-spec.js +70 -0
- package/dist/runtime/biome-host/from-spec.js.map +1 -0
- package/dist/runtime/biome-host/lifecycle-client.d.ts +20 -0
- package/dist/runtime/biome-host/lifecycle-client.d.ts.map +1 -0
- package/dist/runtime/biome-host/lifecycle-client.js +197 -0
- package/dist/runtime/biome-host/lifecycle-client.js.map +1 -0
- package/dist/runtime/biome-host/lifecycle-contract.d.ts +95 -0
- package/dist/runtime/biome-host/lifecycle-contract.d.ts.map +1 -0
- package/dist/runtime/biome-host/lifecycle-contract.js +61 -0
- package/dist/runtime/biome-host/lifecycle-contract.js.map +1 -0
- package/dist/runtime/biome-host/lifecycle-flow.d.ts +29 -0
- package/dist/runtime/biome-host/lifecycle-flow.d.ts.map +1 -0
- package/dist/runtime/biome-host/lifecycle-flow.js +106 -0
- package/dist/runtime/biome-host/lifecycle-flow.js.map +1 -0
- package/dist/runtime/biome-host/plan-sources.d.ts +4 -0
- package/dist/runtime/biome-host/plan-sources.d.ts.map +1 -0
- package/dist/runtime/biome-host/plan-sources.js +26 -0
- package/dist/runtime/biome-host/plan-sources.js.map +1 -0
- package/dist/runtime/biome-host/relay/bundle-fetch.d.ts +12 -0
- package/dist/runtime/biome-host/relay/bundle-fetch.d.ts.map +1 -0
- package/dist/runtime/biome-host/relay/bundle-fetch.js +76 -0
- package/dist/runtime/biome-host/relay/bundle-fetch.js.map +1 -0
- package/dist/runtime/biome-host/relay/declared-scheme.d.ts +3 -0
- package/dist/runtime/biome-host/relay/declared-scheme.d.ts.map +1 -0
- package/dist/runtime/biome-host/relay/declared-scheme.js +14 -0
- package/dist/runtime/biome-host/relay/declared-scheme.js.map +1 -0
- package/dist/runtime/biome-host/relay/npm-token.d.ts +4 -0
- package/dist/runtime/biome-host/relay/npm-token.d.ts.map +1 -0
- package/dist/runtime/biome-host/relay/npm-token.js +16 -0
- package/dist/runtime/biome-host/relay/npm-token.js.map +1 -0
- package/dist/runtime/biome-host/relay/relay-flow.d.ts +16 -0
- package/dist/runtime/biome-host/relay/relay-flow.d.ts.map +1 -0
- package/dist/runtime/biome-host/relay/relay-flow.js +48 -0
- package/dist/runtime/biome-host/relay/relay-flow.js.map +1 -0
- package/dist/runtime/biome-host/source-staging.d.ts +17 -0
- package/dist/runtime/biome-host/source-staging.d.ts.map +1 -0
- package/dist/runtime/biome-host/source-staging.js +80 -0
- package/dist/runtime/biome-host/source-staging.js.map +1 -0
- package/dist/runtime/biome-host/sse.d.ts +2 -0
- package/dist/runtime/biome-host/sse.d.ts.map +1 -0
- package/dist/runtime/biome-host/sse.js +33 -0
- package/dist/runtime/biome-host/sse.js.map +1 -0
- package/dist/runtime/biome-local-install.js +1 -1
- package/dist/runtime/biome-local-install.js.map +1 -1
- package/dist/runtime/browser-origins.d.ts +9 -0
- package/dist/runtime/browser-origins.d.ts.map +1 -1
- package/dist/runtime/browser-origins.js +10 -0
- package/dist/runtime/browser-origins.js.map +1 -1
- package/dist/runtime/config/config-document.d.ts +10 -0
- package/dist/runtime/config/config-document.d.ts.map +1 -0
- package/dist/runtime/config/config-document.js +56 -0
- package/dist/runtime/config/config-document.js.map +1 -0
- package/dist/runtime/config/config-migrations.d.ts +21 -0
- package/dist/runtime/config/config-migrations.d.ts.map +1 -0
- package/dist/runtime/config/config-migrations.js +102 -0
- package/dist/runtime/config/config-migrations.js.map +1 -0
- package/dist/runtime/config/config-paths.d.ts +3 -0
- package/dist/runtime/config/config-paths.d.ts.map +1 -0
- package/dist/runtime/config/config-paths.js +9 -0
- package/dist/runtime/config/config-paths.js.map +1 -0
- package/dist/runtime/config/dev-mode.d.ts +0 -1
- package/dist/runtime/config/dev-mode.d.ts.map +1 -1
- package/dist/runtime/config/dev-mode.js +11 -27
- package/dist/runtime/config/dev-mode.js.map +1 -1
- package/dist/runtime/config/init-presets.js +5 -9
- package/dist/runtime/config/init-presets.js.map +1 -1
- package/dist/runtime/config/launch-config-help.d.ts +4 -0
- package/dist/runtime/config/launch-config-help.d.ts.map +1 -0
- package/dist/runtime/config/launch-config-help.js +42 -0
- package/dist/runtime/config/launch-config-help.js.map +1 -0
- package/dist/runtime/config/launch-config.d.ts +60 -0
- package/dist/runtime/config/launch-config.d.ts.map +1 -0
- package/dist/runtime/config/launch-config.js +123 -0
- package/dist/runtime/config/launch-config.js.map +1 -0
- package/dist/runtime/config/launch-schema.d.ts +18 -0
- package/dist/runtime/config/launch-schema.d.ts.map +1 -0
- package/dist/runtime/config/launch-schema.js +31 -0
- package/dist/runtime/config/launch-schema.js.map +1 -0
- package/dist/runtime/config/loader.d.ts.map +1 -1
- package/dist/runtime/config/loader.js +4 -14
- package/dist/runtime/config/loader.js.map +1 -1
- package/dist/runtime/config/schema.d.ts +43 -38
- package/dist/runtime/config/schema.d.ts.map +1 -1
- package/dist/runtime/config/schema.js +17 -46
- package/dist/runtime/config/schema.js.map +1 -1
- package/dist/runtime/config/sources-config.d.ts +0 -2
- package/dist/runtime/config/sources-config.d.ts.map +1 -1
- package/dist/runtime/config/sources-config.js +10 -29
- package/dist/runtime/config/sources-config.js.map +1 -1
- package/dist/runtime/config/versioned-document.d.ts +26 -0
- package/dist/runtime/config/versioned-document.d.ts.map +1 -0
- package/dist/runtime/config/versioned-document.js +87 -0
- package/dist/runtime/config/versioned-document.js.map +1 -0
- package/dist/runtime/directory-changes.d.ts +12 -0
- package/dist/runtime/directory-changes.d.ts.map +1 -0
- package/dist/runtime/directory-changes.js +62 -0
- package/dist/runtime/directory-changes.js.map +1 -0
- package/dist/runtime/foreground.d.ts +2 -0
- package/dist/runtime/foreground.d.ts.map +1 -1
- package/dist/runtime/foreground.js +5 -20
- package/dist/runtime/foreground.js.map +1 -1
- package/dist/runtime/infra/infra-runner.js +5 -5
- package/dist/runtime/infra/infra-runner.js.map +1 -1
- package/dist/runtime/infra/keycloak-realm.d.ts +3 -19
- package/dist/runtime/infra/keycloak-realm.d.ts.map +1 -1
- package/dist/runtime/infra/keycloak-realm.js +12 -133
- package/dist/runtime/infra/keycloak-realm.js.map +1 -1
- package/dist/runtime/installation/current-launcher-renderer.js.map +1 -1
- package/dist/runtime/installation/from-current-config.d.ts.map +1 -1
- package/dist/runtime/installation/from-current-config.js +24 -47
- package/dist/runtime/installation/from-current-config.js.map +1 -1
- package/dist/runtime/installation/index.d.ts +1 -0
- package/dist/runtime/installation/index.d.ts.map +1 -1
- package/dist/runtime/installation/index.js +1 -0
- package/dist/runtime/installation/index.js.map +1 -1
- package/dist/runtime/installation/installation-file.d.ts +3 -0
- package/dist/runtime/installation/installation-file.d.ts.map +1 -0
- package/dist/runtime/installation/installation-file.js +9 -0
- package/dist/runtime/installation/installation-file.js.map +1 -0
- package/dist/runtime/installation/readiness.d.ts +6 -7
- package/dist/runtime/installation/readiness.d.ts.map +1 -1
- package/dist/runtime/installation/readiness.js +82 -132
- package/dist/runtime/installation/readiness.js.map +1 -1
- package/dist/runtime/installation/state-store.d.ts +4 -0
- package/dist/runtime/installation/state-store.d.ts.map +1 -1
- package/dist/runtime/installation/state-store.js +22 -1
- package/dist/runtime/installation/state-store.js.map +1 -1
- package/dist/runtime/installation/to-current-config.d.ts +4 -1
- package/dist/runtime/installation/to-current-config.d.ts.map +1 -1
- package/dist/runtime/installation/to-current-config.js +10 -36
- package/dist/runtime/installation/to-current-config.js.map +1 -1
- package/dist/runtime/launch-plan-format.d.ts.map +1 -1
- package/dist/runtime/launch-plan-format.js +31 -6
- package/dist/runtime/launch-plan-format.js.map +1 -1
- package/dist/runtime/launch-result.d.ts +15 -0
- package/dist/runtime/launch-result.d.ts.map +1 -0
- package/dist/runtime/launch-result.js +3 -0
- package/dist/runtime/launch-result.js.map +1 -0
- package/dist/runtime/launch.d.ts +16 -5
- package/dist/runtime/launch.d.ts.map +1 -1
- package/dist/runtime/launch.js +151 -315
- package/dist/runtime/launch.js.map +1 -1
- package/dist/runtime/license/helm-pull-secret.d.ts +1 -1
- package/dist/runtime/license/helm-pull-secret.d.ts.map +1 -1
- package/dist/runtime/license/helm-pull-secret.js +2 -2
- package/dist/runtime/license/helm-pull-secret.js.map +1 -1
- package/dist/runtime/lifecycle-progress/index.d.ts +9 -0
- package/dist/runtime/lifecycle-progress/index.d.ts.map +1 -0
- package/dist/runtime/lifecycle-progress/index.js +30 -0
- package/dist/runtime/lifecycle-progress/index.js.map +1 -0
- package/dist/runtime/lifecycle-progress/json-renderer.d.ts +3 -0
- package/dist/runtime/lifecycle-progress/json-renderer.d.ts.map +1 -0
- package/dist/runtime/lifecycle-progress/json-renderer.js +27 -0
- package/dist/runtime/lifecycle-progress/json-renderer.js.map +1 -0
- package/dist/runtime/lifecycle-progress/text-renderer.d.ts +5 -0
- package/dist/runtime/lifecycle-progress/text-renderer.d.ts.map +1 -0
- package/dist/runtime/lifecycle-progress/text-renderer.js +83 -0
- package/dist/runtime/lifecycle-progress/text-renderer.js.map +1 -0
- package/dist/runtime/lifecycle-progress/types.d.ts +79 -0
- package/dist/runtime/lifecycle-progress/types.d.ts.map +1 -0
- package/dist/runtime/lifecycle-progress/types.js +32 -0
- package/dist/runtime/lifecycle-progress/types.js.map +1 -0
- package/dist/runtime/lock-loader.d.ts +13 -3
- package/dist/runtime/lock-loader.d.ts.map +1 -1
- package/dist/runtime/lock-loader.js +28 -8
- package/dist/runtime/lock-loader.js.map +1 -1
- package/dist/runtime/paths.d.ts +2 -0
- package/dist/runtime/paths.d.ts.map +1 -1
- package/dist/runtime/paths.js +17 -4
- package/dist/runtime/paths.js.map +1 -1
- package/dist/runtime/roster.d.ts +6 -5
- package/dist/runtime/roster.d.ts.map +1 -1
- package/dist/runtime/roster.js +0 -21
- package/dist/runtime/roster.js.map +1 -1
- package/dist/runtime/runner/container-preflight.d.ts +3 -2
- package/dist/runtime/runner/container-preflight.d.ts.map +1 -1
- package/dist/runtime/runner/container-preflight.js +5 -5
- package/dist/runtime/runner/container-preflight.js.map +1 -1
- package/dist/runtime/runner/container-runner.d.ts +0 -22
- package/dist/runtime/runner/container-runner.d.ts.map +1 -1
- package/dist/runtime/runner/container-runner.js +0 -112
- package/dist/runtime/runner/container-runner.js.map +1 -1
- package/dist/runtime/runner/docker-cli.d.ts +1 -0
- package/dist/runtime/runner/docker-cli.d.ts.map +1 -1
- package/dist/runtime/runner/docker-cli.js +19 -0
- package/dist/runtime/runner/docker-cli.js.map +1 -1
- package/dist/runtime/runner/helm-cli.d.ts +1 -0
- package/dist/runtime/runner/helm-cli.d.ts.map +1 -1
- package/dist/runtime/runner/helm-cli.js +5 -1
- package/dist/runtime/runner/helm-cli.js.map +1 -1
- package/dist/runtime/runner/helm-pre-install.d.ts +3 -2
- package/dist/runtime/runner/helm-pre-install.d.ts.map +1 -1
- package/dist/runtime/runner/helm-pre-install.js +3 -3
- package/dist/runtime/runner/helm-pre-install.js.map +1 -1
- package/dist/runtime/runner/helm-runner.d.ts +29 -4
- package/dist/runtime/runner/helm-runner.d.ts.map +1 -1
- package/dist/runtime/runner/helm-runner.js +44 -14
- package/dist/runtime/runner/helm-runner.js.map +1 -1
- package/dist/runtime/runner/kube-cli.d.ts +1 -0
- package/dist/runtime/runner/kube-cli.d.ts.map +1 -1
- package/dist/runtime/runner/kube-cli.js +24 -2
- package/dist/runtime/runner/kube-cli.js.map +1 -1
- package/dist/runtime/secrets/managed-local-key-provider.d.ts +2 -0
- package/dist/runtime/secrets/managed-local-key-provider.d.ts.map +1 -1
- package/dist/runtime/secrets/managed-local-key-provider.js +17 -8
- package/dist/runtime/secrets/managed-local-key-provider.js.map +1 -1
- package/dist/runtime/seed/closure-container.d.ts +8 -0
- package/dist/runtime/seed/closure-container.d.ts.map +1 -0
- package/dist/runtime/seed/closure-container.js +23 -0
- package/dist/runtime/seed/closure-container.js.map +1 -0
- package/dist/runtime/seed/closure-helm.d.ts +9 -0
- package/dist/runtime/seed/closure-helm.d.ts.map +1 -0
- package/dist/runtime/seed/closure-helm.js +16 -0
- package/dist/runtime/seed/closure-helm.js.map +1 -0
- package/dist/runtime/seed/closure-names.d.ts +4 -0
- package/dist/runtime/seed/closure-names.d.ts.map +1 -0
- package/dist/runtime/seed/closure-names.js +29 -0
- package/dist/runtime/seed/closure-names.js.map +1 -0
- package/dist/runtime/seed/closure-native.d.ts +3 -0
- package/dist/runtime/seed/closure-native.d.ts.map +1 -0
- package/dist/runtime/seed/closure-native.js +18 -0
- package/dist/runtime/seed/closure-native.js.map +1 -0
- package/dist/runtime/seed/installation-tar.d.ts +5 -0
- package/dist/runtime/seed/installation-tar.d.ts.map +1 -0
- package/dist/runtime/seed/installation-tar.js +30 -0
- package/dist/runtime/seed/installation-tar.js.map +1 -0
- package/dist/runtime/seed/launch-env.d.ts +42 -0
- package/dist/runtime/seed/launch-env.d.ts.map +1 -0
- package/dist/runtime/seed/launch-env.js +150 -0
- package/dist/runtime/seed/launch-env.js.map +1 -0
- package/dist/runtime/seed/seed-container.d.ts +13 -0
- package/dist/runtime/seed/seed-container.d.ts.map +1 -0
- package/dist/runtime/seed/seed-container.js +175 -0
- package/dist/runtime/seed/seed-container.js.map +1 -0
- package/dist/runtime/seed/seed-delivery-env.d.ts +39 -0
- package/dist/runtime/seed/seed-delivery-env.d.ts.map +1 -0
- package/dist/runtime/seed/seed-delivery-env.js +47 -0
- package/dist/runtime/seed/seed-delivery-env.js.map +1 -0
- package/dist/runtime/seed/seed-down.d.ts +2 -0
- package/dist/runtime/seed/seed-down.d.ts.map +1 -0
- package/dist/runtime/seed/seed-down.js +52 -0
- package/dist/runtime/seed/seed-down.js.map +1 -0
- package/dist/runtime/seed/seed-env-file.d.ts +3 -0
- package/dist/runtime/seed/seed-env-file.d.ts.map +1 -0
- package/dist/runtime/seed/seed-env-file.js +24 -0
- package/dist/runtime/seed/seed-env-file.js.map +1 -0
- package/dist/runtime/seed/seed-env-secret.d.ts +18 -0
- package/dist/runtime/seed/seed-env-secret.d.ts.map +1 -0
- package/dist/runtime/seed/seed-env-secret.js +62 -0
- package/dist/runtime/seed/seed-env-secret.js.map +1 -0
- package/dist/runtime/seed/seed-environment.d.ts +12 -0
- package/dist/runtime/seed/seed-environment.d.ts.map +1 -0
- package/dist/runtime/seed/seed-environment.js +66 -0
- package/dist/runtime/seed/seed-environment.js.map +1 -0
- package/dist/runtime/seed/seed-facts.d.ts +22 -0
- package/dist/runtime/seed/seed-facts.d.ts.map +1 -0
- package/dist/runtime/seed/seed-facts.js +40 -0
- package/dist/runtime/seed/seed-facts.js.map +1 -0
- package/dist/runtime/seed/seed-helm.d.ts +10 -0
- package/dist/runtime/seed/seed-helm.d.ts.map +1 -0
- package/dist/runtime/seed/seed-helm.js +74 -0
- package/dist/runtime/seed/seed-helm.js.map +1 -0
- package/dist/runtime/seed/seed-image-user.d.ts +6 -0
- package/dist/runtime/seed/seed-image-user.d.ts.map +1 -0
- package/dist/runtime/seed/seed-image-user.js +14 -0
- package/dist/runtime/seed/seed-image-user.js.map +1 -0
- package/dist/runtime/seed/seed-installation-files.d.ts +23 -0
- package/dist/runtime/seed/seed-installation-files.d.ts.map +1 -0
- package/dist/runtime/seed/seed-installation-files.js +51 -0
- package/dist/runtime/seed/seed-installation-files.js.map +1 -0
- package/dist/runtime/seed/seed-installation.d.ts +20 -0
- package/dist/runtime/seed/seed-installation.d.ts.map +1 -0
- package/dist/runtime/seed/seed-installation.js +36 -0
- package/dist/runtime/seed/seed-installation.js.map +1 -0
- package/dist/runtime/seed/seed-launcher.d.ts +14 -0
- package/dist/runtime/seed/seed-launcher.d.ts.map +1 -0
- package/dist/runtime/seed/seed-launcher.js +155 -0
- package/dist/runtime/seed/seed-launcher.js.map +1 -0
- package/dist/runtime/seed/seed-options.d.ts +22 -0
- package/dist/runtime/seed/seed-options.d.ts.map +1 -0
- package/dist/runtime/seed/seed-options.js +57 -0
- package/dist/runtime/seed/seed-options.js.map +1 -0
- package/dist/runtime/seed/seed-platform-endpoints.d.ts +8 -0
- package/dist/runtime/seed/seed-platform-endpoints.d.ts.map +1 -0
- package/dist/runtime/seed/seed-platform-endpoints.js +55 -0
- package/dist/runtime/seed/seed-platform-endpoints.js.map +1 -0
- package/dist/runtime/seed/seed-process.d.ts +22 -0
- package/dist/runtime/seed/seed-process.d.ts.map +1 -0
- package/dist/runtime/seed/seed-process.js +79 -0
- package/dist/runtime/seed/seed-process.js.map +1 -0
- package/dist/runtime/seed/seed-record.d.ts +101 -0
- package/dist/runtime/seed/seed-record.d.ts.map +1 -0
- package/dist/runtime/seed/seed-record.js +141 -0
- package/dist/runtime/seed/seed-record.js.map +1 -0
- package/dist/runtime/seed/seed-resolved-deployment.d.ts +14 -0
- package/dist/runtime/seed/seed-resolved-deployment.d.ts.map +1 -0
- package/dist/runtime/seed/seed-resolved-deployment.js +52 -0
- package/dist/runtime/seed/seed-resolved-deployment.js.map +1 -0
- package/dist/runtime/seed/substrate-facts.d.ts +52 -0
- package/dist/runtime/seed/substrate-facts.d.ts.map +1 -0
- package/dist/runtime/seed/substrate-facts.js +92 -0
- package/dist/runtime/seed/substrate-facts.js.map +1 -0
- package/dist/runtime/seed/supervisor-contract.d.ts +9 -0
- package/dist/runtime/seed/supervisor-contract.d.ts.map +1 -0
- package/dist/runtime/seed/supervisor-contract.js +68 -0
- package/dist/runtime/seed/supervisor-contract.js.map +1 -0
- package/dist/runtime/seed/workload-identity-facts.d.ts +17 -0
- package/dist/runtime/seed/workload-identity-facts.d.ts.map +1 -0
- package/dist/runtime/seed/workload-identity-facts.js +53 -0
- package/dist/runtime/seed/workload-identity-facts.js.map +1 -0
- package/dist/runtime/sources/schema.d.ts +2 -0
- package/dist/runtime/sources/schema.d.ts.map +1 -1
- package/dist/runtime/sources/schema.js +10 -9
- package/dist/runtime/sources/schema.js.map +1 -1
- package/dist/runtime/store-client.d.ts +0 -10
- package/dist/runtime/store-client.d.ts.map +1 -1
- package/dist/runtime/store-client.js +0 -5
- package/dist/runtime/store-client.js.map +1 -1
- package/dist/runtime/tenancy/identity-installer.d.ts +11 -0
- package/dist/runtime/tenancy/identity-installer.d.ts.map +1 -0
- package/dist/runtime/tenancy/identity-installer.js +39 -0
- package/dist/runtime/tenancy/identity-installer.js.map +1 -0
- package/dist/runtime/tenancy/import-cache.d.ts +5 -0
- package/dist/runtime/tenancy/import-cache.d.ts.map +1 -0
- package/dist/runtime/tenancy/import-cache.js +27 -0
- package/dist/runtime/tenancy/import-cache.js.map +1 -0
- package/dist/runtime/tenancy/openfga.d.ts +4 -0
- package/dist/runtime/tenancy/openfga.d.ts.map +1 -0
- package/dist/runtime/tenancy/openfga.js +29 -0
- package/dist/runtime/tenancy/openfga.js.map +1 -0
- package/dist/runtime/tenancy/servers.d.ts +18 -0
- package/dist/runtime/tenancy/servers.d.ts.map +1 -0
- package/dist/runtime/tenancy/servers.js +102 -0
- package/dist/runtime/tenancy/servers.js.map +1 -0
- package/dist/runtime/tenancy/session.d.ts +19 -0
- package/dist/runtime/tenancy/session.d.ts.map +1 -0
- package/dist/runtime/tenancy/session.js +79 -0
- package/dist/runtime/tenancy/session.js.map +1 -0
- package/dist/runtime/tenancy/specs.d.ts +27 -0
- package/dist/runtime/tenancy/specs.d.ts.map +1 -0
- package/dist/runtime/tenancy/specs.js +129 -0
- package/dist/runtime/tenancy/specs.js.map +1 -0
- package/examples/01-local-native.yaml +1 -3
- package/examples/02-local-container-full.yaml +0 -2
- package/examples/03-byo-infra.yaml +1 -5
- package/examples/06-biome-sources.yaml +1 -3
- package/package.json +32 -37
- package/xema.config.example.yaml +1 -10
- package/dist/assets/keycloak/realm-xema.json +0 -397
- package/dist/commands/dev.d.ts.map +0 -1
- package/dist/commands/dev.js +0 -196
- package/dist/commands/dev.js.map +0 -1
- package/dist/commands/edition.d.ts +0 -3
- package/dist/commands/edition.d.ts.map +0 -1
- package/dist/commands/edition.js +0 -54
- package/dist/commands/edition.js.map +0 -1
- package/dist/commands/serve.d.ts +0 -3
- package/dist/commands/serve.d.ts.map +0 -1
- package/dist/commands/serve.js +0 -114
- package/dist/commands/serve.js.map +0 -1
- package/dist/dev/carved-installs.d.ts +0 -3
- package/dist/dev/carved-installs.d.ts.map +0 -1
- package/dist/dev/carved-installs.js +0 -63
- package/dist/dev/carved-installs.js.map +0 -1
- package/dist/dev/env-defaults.d.ts +0 -15
- package/dist/dev/env-defaults.d.ts.map +0 -1
- package/dist/dev/env-defaults.js +0 -178
- package/dist/dev/env-defaults.js.map +0 -1
- package/dist/dev/forked-worker-bootstrap-protocol.d.ts +0 -17
- package/dist/dev/forked-worker-bootstrap-protocol.d.ts.map +0 -1
- package/dist/dev/forked-worker-bootstrap-protocol.js +0 -35
- package/dist/dev/forked-worker-bootstrap-protocol.js.map +0 -1
- package/dist/dev/forked-worker-bootstrap.d.ts +0 -18
- package/dist/dev/forked-worker-bootstrap.d.ts.map +0 -1
- package/dist/dev/forked-worker-bootstrap.js +0 -84
- package/dist/dev/forked-worker-bootstrap.js.map +0 -1
- package/dist/dev/forked-worker.d.ts +0 -43
- package/dist/dev/forked-worker.d.ts.map +0 -1
- package/dist/dev/forked-worker.js +0 -358
- package/dist/dev/forked-worker.js.map +0 -1
- package/dist/edition/verify-image-evidence.bundle.mjs +0 -70456
- package/dist/edition/verify-image-evidence.bundle.provenance.json +0 -3957
- package/dist/runtime/backing-registration.d.ts +0 -11
- package/dist/runtime/backing-registration.d.ts.map +0 -1
- package/dist/runtime/backing-registration.js +0 -94
- package/dist/runtime/backing-registration.js.map +0 -1
- package/dist/runtime/edition/run-entry.d.ts +0 -9
- package/dist/runtime/edition/run-entry.d.ts.map +0 -1
- package/dist/runtime/edition/run-entry.js +0 -36
- package/dist/runtime/edition/run-entry.js.map +0 -1
- package/dist/runtime/edition/verb-map.d.ts +0 -70
- package/dist/runtime/edition/verb-map.d.ts.map +0 -1
- package/dist/runtime/edition/verb-map.js +0 -166
- package/dist/runtime/edition/verb-map.js.map +0 -1
- package/dist/runtime/env-seeder.d.ts +0 -26
- package/dist/runtime/env-seeder.d.ts.map +0 -1
- package/dist/runtime/env-seeder.js +0 -340
- package/dist/runtime/env-seeder.js.map +0 -1
- package/dist/runtime/port-map.d.ts +0 -3
- package/dist/runtime/port-map.d.ts.map +0 -1
- package/dist/runtime/port-map.js +0 -25
- package/dist/runtime/port-map.js.map +0 -1
- package/dist/runtime/run-manifest.d.ts +0 -52
- package/dist/runtime/run-manifest.d.ts.map +0 -1
- package/dist/runtime/run-manifest.js +0 -585
- package/dist/runtime/run-manifest.js.map +0 -1
- package/dist/runtime/runner/native-runner.d.ts +0 -13
- package/dist/runtime/runner/native-runner.d.ts.map +0 -1
- package/dist/runtime/runner/native-runner.js +0 -94
- package/dist/runtime/runner/native-runner.js.map +0 -1
- package/dist/runtime/runner/service-runner.d.ts +0 -28
- package/dist/runtime/runner/service-runner.d.ts.map +0 -1
- package/dist/runtime/runner/service-runner.js +0 -10
- package/dist/runtime/runner/service-runner.js.map +0 -1
- package/dist/runtime/secrets/generated-platform-secrets.d.ts +0 -16
- package/dist/runtime/secrets/generated-platform-secrets.d.ts.map +0 -1
- package/dist/runtime/secrets/generated-platform-secrets.js +0 -115
- package/dist/runtime/secrets/generated-platform-secrets.js.map +0 -1
- package/dist/runtime/secrets/resolver.d.ts +0 -23
- package/dist/runtime/secrets/resolver.d.ts.map +0 -1
- package/dist/runtime/secrets/resolver.js +0 -266
- package/dist/runtime/secrets/resolver.js.map +0 -1
- package/dist/runtime/supervisor.d.ts +0 -67
- package/dist/runtime/supervisor.d.ts.map +0 -1
- package/dist/runtime/supervisor.js +0 -227
- package/dist/runtime/supervisor.js.map +0 -1
- package/edition/README.md +0 -293
- package/edition/adapter-bundled-versions.mjs +0 -108
- package/edition/adapter-host-versions.mjs +0 -41
- package/edition/assemble-producer-input.mjs +0 -1414
- package/edition/assemble-third-party-input.mjs +0 -336
- package/edition/authored-source-check.mjs +0 -135
- package/edition/authorization-base.mjs +0 -357
- package/edition/biome-content.mjs +0 -327
- package/edition/build-biome-index.mjs +0 -180
- package/edition/build-ledger-completeness.mjs +0 -67
- package/edition/build-ledger.mjs +0 -107
- package/edition/build-platform-service-index.mjs +0 -292
- package/edition/build-runtime-image-source-index.mjs +0 -1187
- package/edition/built-verifier.mjs +0 -55
- package/edition/candidate-edition.mjs +0 -697
- package/edition/canonical-evidence-json.mjs +0 -82
- package/edition/canonical-repository-url.mjs +0 -47
- package/edition/catalogue-edition.mjs +0 -49
- package/edition/catalogue-evidence.mjs +0 -228
- package/edition/catalogue-fetch.mjs +0 -124
- package/edition/catalogue-lock-field.mjs +0 -41
- package/edition/catalogue-pin.mjs +0 -71
- package/edition/catalogue.mjs +0 -223
- package/edition/chart-set-source-commit.mjs +0 -97
- package/edition/check-committed-image-evidence.mjs +0 -412
- package/edition/checkout-indexed-source-repositories.mjs +0 -283
- package/edition/collected-refusals.mjs +0 -59
- package/edition/comment-blanker.mjs +0 -75
- package/edition/connector-source-authority.mjs +0 -60
- package/edition/contract-authority.mjs +0 -122
- package/edition/cosign-certificate-constraints.mjs +0 -50
- package/edition/cross-repo-build-inputs.mjs +0 -158
- package/edition/customer-definition.mjs +0 -174
- package/edition/customer-edition-verbs.mjs +0 -617
- package/edition/customer-flags.mjs +0 -15
- package/edition/develop-catalogue-free-resolve.mjs +0 -280
- package/edition/develop-chart-roster.mjs +0 -96
- package/edition/develop-chart-set.mjs +0 -147
- package/edition/develop-coverage-readers.mjs +0 -217
- package/edition/develop-coverage-run.mjs +0 -50
- package/edition/develop-coverage-verdict.mjs +0 -153
- package/edition/develop-coverage.mjs +0 -131
- package/edition/develop-current-resolution.mjs +0 -29
- package/edition/develop-edition-invariants.mjs +0 -142
- package/edition/develop-edition-resolve.mjs +0 -211
- package/edition/develop-edition.mjs +0 -379
- package/edition/develop-engine-image.mjs +0 -95
- package/edition/develop-follow.mjs +0 -491
- package/edition/develop-freeze.mjs +0 -289
- package/edition/develop-git-bundles.mjs +0 -255
- package/edition/develop-graph.mjs +0 -28
- package/edition/develop-image-coordinate.mjs +0 -54
- package/edition/develop-image-probe.mjs +0 -120
- package/edition/develop-image-record.mjs +0 -194
- package/edition/develop-record-ancestry.mjs +0 -144
- package/edition/develop-record-verify.mjs +0 -216
- package/edition/develop-resolve-report.mjs +0 -159
- package/edition/develop-select-records.mjs +0 -172
- package/edition/develop-selection-line.mjs +0 -30
- package/edition/develop-selection-pins.mjs +0 -36
- package/edition/develop-snapshot-inputs.mjs +0 -93
- package/edition/develop-verify-image-record.mjs +0 -109
- package/edition/dispatched-runtime-components.mjs +0 -172
- package/edition/dist-check.mjs +0 -1137
- package/edition/distribution-evidence-set.mjs +0 -1064
- package/edition/distribution-paths.mjs +0 -191
- package/edition/edition-artifact.mjs +0 -529
- package/edition/edition-biome-manifests.mjs +0 -85
- package/edition/edition-ceiling.mjs +0 -180
- package/edition/edition-channel.mjs +0 -20
- package/edition/edition-chart-set.mjs +0 -104
- package/edition/edition-config.mjs +0 -374
- package/edition/edition-constants.mjs +0 -110
- package/edition/edition-contract-parse.mjs +0 -179
- package/edition/edition-contract.json +0 -100
- package/edition/edition-image-seal.mjs +0 -110
- package/edition/edition-kind.mjs +0 -10
- package/edition/edition-list.mjs +0 -35
- package/edition/edition-locks.mjs +0 -79
- package/edition/edition-pin-verbs.mjs +0 -183
- package/edition/edition-pin.mjs +0 -17
- package/edition/edition-pinned-inputs.mjs +0 -116
- package/edition/edition-protocol.mjs +0 -277
- package/edition/edition-publisher.mjs +0 -21
- package/edition/edition-seal.mjs +0 -257
- package/edition/edition-source-pins.mjs +0 -211
- package/edition/edition-unpin.mjs +0 -16
- package/edition/edition-workspace.mjs +0 -204
- package/edition/evidence-checkout.mjs +0 -439
- package/edition/evidence-grammars.mjs +0 -18
- package/edition/evidence-input-mode.mjs +0 -136
- package/edition/evidence-trust-pin.mjs +0 -380
- package/edition/evidence-trust-policy.mjs +0 -374
- package/edition/external-source-walk.mjs +0 -485
- package/edition/first-party-source-ids.mjs +0 -62
- package/edition/fleet-coordinate-finality.mjs +0 -363
- package/edition/fulcio-certificate-extensions.mjs +0 -231
- package/edition/git-json.mjs +0 -54
- package/edition/git-source-auth.mjs +0 -131
- package/edition/image-delivery-entitlement-descriptor.mjs +0 -106
- package/edition/image-evidence-replay-state.mjs +0 -242
- package/edition/image-evidence.mjs +0 -1404
- package/edition/image-lock-service-rows.mjs +0 -26
- package/edition/image-subject-identity.mjs +0 -24
- package/edition/images-from-record.mjs +0 -298
- package/edition/indexes-at-pins.mjs +0 -13
- package/edition/kernel-capability-domain.mjs +0 -30
- package/edition/kernel-contract-authority.mjs +0 -517
- package/edition/kernel-contract-source-path-set.mjs +0 -94
- package/edition/kernel-package.mjs +0 -206
- package/edition/kernel-protocol-choice.mjs +0 -239
- package/edition/kernel-signer-kind.mjs +0 -23
- package/edition/lib.mjs +0 -3303
- package/edition/locked-bundle-signer.mjs +0 -297
- package/edition/map-with-concurrency.mjs +0 -19
- package/edition/no-follow-file.mjs +0 -94
- package/edition/oci-evidence-verbs.mjs +0 -419
- package/edition/oci-image-source-evidence.mjs +0 -364
- package/edition/operation-grant-admission.mjs +0 -285
- package/edition/operation-requirements.mjs +0 -282
- package/edition/oras-process.mjs +0 -35
- package/edition/oras.mjs +0 -742
- package/edition/pin-source.mjs +0 -242
- package/edition/pinned-cosign.mjs +0 -70
- package/edition/plan-image-evidence-refresh.mjs +0 -427
- package/edition/platform-lock-readability.mjs +0 -901
- package/edition/platform-service-class.mjs +0 -85
- package/edition/platform-service-ownership.mjs +0 -88
- package/edition/platform-service-source-authority.mjs +0 -105
- package/edition/positive-closure.mjs +0 -162
- package/edition/previous-seal-registry.mjs +0 -149
- package/edition/produce-distribution-completeness-evidence.mjs +0 -318
- package/edition/produce-edition-catalogue-evidence.mjs +0 -252
- package/edition/produce-image-delivery-entitlement-evidence.mjs +0 -304
- package/edition/produce-image-source-evidence.mjs +0 -788
- package/edition/producer-evidence-bundle.mjs +0 -201
- package/edition/producer-evidence-index-file.mjs +0 -4
- package/edition/record-refused.mjs +0 -12
- package/edition/registry-credentials.mjs +0 -225
- package/edition/release-catalogue.mjs +0 -47
- package/edition/release-channel-guard.mjs +0 -108
- package/edition/release-edition-artifact.mjs +0 -152
- package/edition/release-edition.mjs +0 -54
- package/edition/remedy-command.mjs +0 -89
- package/edition/repin-evidence-trust.mjs +0 -109
- package/edition/required-resource-provider.mjs +0 -58
- package/edition/resolve-chart-set.mjs +0 -376
- package/edition/resolve-customer-edition.mjs +0 -374
- package/edition/resolve-distribution.mjs +0 -2639
- package/edition/resolve-edition.mjs +0 -192
- package/edition/resolve-images.mjs +0 -2294
- package/edition/seal-image-digests.mjs +0 -954
- package/edition/sealed-distribution-lock.mjs +0 -22
- package/edition/sealed-evidence-accept.mjs +0 -82
- package/edition/shallow-checkout.mjs +0 -18
- package/edition/sigstore-bundle-media-type.mjs +0 -4
- package/edition/source-authority.mjs +0 -713
- package/edition/source-closure.mjs +0 -115
- package/edition/store-publisher-trust.mjs +0 -40
- package/edition/strict-json.mjs +0 -121
- package/edition/string-order.mjs +0 -5
- package/edition/third-party-admission.mjs +0 -91
- package/edition/third-party-bundle-registry.mjs +0 -242
- package/edition/third-party-certificate-extensions.mjs +0 -21
- package/edition/third-party-image-pins.mjs +0 -41
- package/edition/third-party-pins-trusted.mjs +0 -24
- package/edition/third-party-producer-evidence.mjs +0 -76
- package/edition/third-party-source-check.mjs +0 -28
- package/edition/third-party-source-context.mjs +0 -41
- package/edition/third-party-source-evidence.mjs +0 -287
- package/edition/third-party-source-flags.mjs +0 -134
- package/edition/third-party-source-pins.mjs +0 -259
- package/edition/third-party-source-uniqueness.mjs +0 -54
- package/edition/third-party-source-walk.mjs +0 -115
- package/edition/third-party-source-writer.mjs +0 -213
- package/edition/third-party-subjects.mjs +0 -128
- package/edition/trust-policy-arming-verb.mjs +0 -60
- package/edition/trust-policy-arming.mjs +0 -144
- package/edition/trust-policy-image-ownership.mjs +0 -85
- package/edition/trusted-executable.mjs +0 -166
- package/edition/verifier-binding.mjs +0 -45
- package/edition/verifier-files.mjs +0 -8
- package/edition/verifier-kernel-schemas.mjs +0 -22
- package/edition/verifier-provenance.mjs +0 -64
- package/edition/verify-catalogue-evidence.mjs +0 -247
- package/edition/verify-image-evidence.mjs +0 -475
- package/edition/verify-image-platforms.mjs +0 -523
- package/edition/why.mjs +0 -56
- package/edition/workspace-sections.mjs +0 -276
|
@@ -1,364 +0,0 @@
|
|
|
1
|
-
import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs';
|
|
2
|
-
import { tmpdir } from 'node:os';
|
|
3
|
-
import { dirname, join } from 'node:path';
|
|
4
|
-
|
|
5
|
-
import { SHA256_DIGEST_PATTERN } from './evidence-grammars.mjs';
|
|
6
|
-
import { canonicalJson, sha256Digest } from './image-evidence.mjs';
|
|
7
|
-
import { compareStrings } from './lib.mjs';
|
|
8
|
-
import { OrasRegistry } from './oras.mjs';
|
|
9
|
-
import { BUNDLE_MEDIA_TYPE } from './produce-image-source-evidence.mjs';
|
|
10
|
-
import {
|
|
11
|
-
EvidenceIntegrityError,
|
|
12
|
-
PRODUCER_EVIDENCE_INDEX_FILE,
|
|
13
|
-
PRODUCER_EVIDENCE_INDEX_MEDIA_TYPE,
|
|
14
|
-
PRODUCER_STATEMENT_MEDIA_TYPE,
|
|
15
|
-
producerEvidenceLayerFiles,
|
|
16
|
-
readProducerEvidenceDirectory,
|
|
17
|
-
readRawStatementAuthorityCommits,
|
|
18
|
-
} from './producer-evidence-bundle.mjs';
|
|
19
|
-
import {
|
|
20
|
-
loadRegistryCredentialDeclarations,
|
|
21
|
-
resolveRegistryCredential,
|
|
22
|
-
splitImageRef,
|
|
23
|
-
} from './registry-credentials.mjs';
|
|
24
|
-
|
|
25
|
-
export const IMAGE_SOURCE_EVIDENCE_ARTIFACT_TYPE =
|
|
26
|
-
'application/vnd.xema.image-source-evidence.v2';
|
|
27
|
-
/** The E4 statement an edition artifact carries as an `oras attach` referrer (the catalogue's signed evidence). */
|
|
28
|
-
export const EDITION_CATALOGUE_EVIDENCE_ARTIFACT_TYPE =
|
|
29
|
-
'application/vnd.xema.edition-catalogue-evidence.v1';
|
|
30
|
-
export const OCI_IMAGE_MANIFEST_MEDIA_TYPE =
|
|
31
|
-
'application/vnd.oci.image.manifest.v1+json';
|
|
32
|
-
const OCI_TITLE_ANNOTATION = 'org.opencontainers.image.title';
|
|
33
|
-
const OCI_CREATED_ANNOTATION = 'org.opencontainers.image.created';
|
|
34
|
-
|
|
35
|
-
/** One registry reader per authority, each with the credential the data root declares for it. */
|
|
36
|
-
export function createRegistryClientResolver({ dataRoot, factory }) {
|
|
37
|
-
const declarations = loadRegistryCredentialDeclarations(dataRoot);
|
|
38
|
-
const clients = new Map();
|
|
39
|
-
return (authority) => {
|
|
40
|
-
if (clients.has(authority)) {return clients.get(authority);}
|
|
41
|
-
const client = factory
|
|
42
|
-
? factory(authority)
|
|
43
|
-
: new OrasRegistry({
|
|
44
|
-
credential: resolveRegistryCredential({ authority, declarations }),
|
|
45
|
-
});
|
|
46
|
-
clients.set(authority, client);
|
|
47
|
-
return client;
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
function exactRelativePath(value, label) {
|
|
52
|
-
if (
|
|
53
|
-
typeof value !== 'string' ||
|
|
54
|
-
value.length === 0 ||
|
|
55
|
-
value.startsWith('/') ||
|
|
56
|
-
value.split('/').some((part) => !part || part === '.' || part === '..')
|
|
57
|
-
) {
|
|
58
|
-
throw new Error(`${label} is not a contained relative path`);
|
|
59
|
-
}
|
|
60
|
-
return value;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
function expectedMediaType(path) {
|
|
64
|
-
if (path === PRODUCER_EVIDENCE_INDEX_FILE) {
|
|
65
|
-
return PRODUCER_EVIDENCE_INDEX_MEDIA_TYPE;
|
|
66
|
-
}
|
|
67
|
-
if (path.startsWith('statements/')) {return PRODUCER_STATEMENT_MEDIA_TYPE;}
|
|
68
|
-
if (path.startsWith('bundles/')) {return BUNDLE_MEDIA_TYPE;}
|
|
69
|
-
throw new Error(`OCI evidence layer has unsupported title "${path}"`);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
export function validateImageSourceEvidenceManifest({
|
|
73
|
-
manifest,
|
|
74
|
-
subjectDigest,
|
|
75
|
-
}) {
|
|
76
|
-
if (
|
|
77
|
-
manifest?.schemaVersion !== 2 ||
|
|
78
|
-
manifest.mediaType !== OCI_IMAGE_MANIFEST_MEDIA_TYPE ||
|
|
79
|
-
manifest.artifactType !== IMAGE_SOURCE_EVIDENCE_ARTIFACT_TYPE ||
|
|
80
|
-
manifest.subject?.digest !== subjectDigest ||
|
|
81
|
-
!Array.isArray(manifest.layers) ||
|
|
82
|
-
manifest.layers.length < 3
|
|
83
|
-
) {
|
|
84
|
-
throw new Error(
|
|
85
|
-
'image-source evidence artifact is not an OCI 1.1 manifest for the exact subject',
|
|
86
|
-
);
|
|
87
|
-
}
|
|
88
|
-
const created = manifest.annotations?.[OCI_CREATED_ANNOTATION];
|
|
89
|
-
if (typeof created !== 'string' || !Number.isFinite(Date.parse(created))) {
|
|
90
|
-
throw new Error(`image-source evidence artifact has no valid ${OCI_CREATED_ANNOTATION}`);
|
|
91
|
-
}
|
|
92
|
-
const seen = new Set();
|
|
93
|
-
let indexCount = 0;
|
|
94
|
-
for (const layer of manifest.layers) {
|
|
95
|
-
const title = exactRelativePath(
|
|
96
|
-
layer?.annotations?.[OCI_TITLE_ANNOTATION],
|
|
97
|
-
'OCI evidence layer title',
|
|
98
|
-
);
|
|
99
|
-
if (seen.has(title)) {
|
|
100
|
-
throw new Error(`OCI evidence manifest duplicates layer title "${title}"`);
|
|
101
|
-
}
|
|
102
|
-
seen.add(title);
|
|
103
|
-
if (
|
|
104
|
-
!SHA256_DIGEST_PATTERN.test(layer.digest ?? '') ||
|
|
105
|
-
!Number.isSafeInteger(layer.size) ||
|
|
106
|
-
layer.size < 0 ||
|
|
107
|
-
layer.mediaType !== expectedMediaType(title)
|
|
108
|
-
) {
|
|
109
|
-
throw new Error(`OCI evidence layer "${title}" has an invalid descriptor`);
|
|
110
|
-
}
|
|
111
|
-
if (title === PRODUCER_EVIDENCE_INDEX_FILE) {indexCount += 1;}
|
|
112
|
-
}
|
|
113
|
-
if (indexCount !== 1) {
|
|
114
|
-
throw new Error('OCI evidence manifest requires exactly one producer evidence index');
|
|
115
|
-
}
|
|
116
|
-
return { created, layers: manifest.layers };
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
export function validateMaterializedImageSourceEvidence({
|
|
120
|
-
directory,
|
|
121
|
-
manifest,
|
|
122
|
-
subjectDigest,
|
|
123
|
-
schemas,
|
|
124
|
-
}) {
|
|
125
|
-
const { created, layers } = validateImageSourceEvidenceManifest({
|
|
126
|
-
manifest,
|
|
127
|
-
subjectDigest,
|
|
128
|
-
});
|
|
129
|
-
const evidence = readProducerEvidenceDirectory({ directory, schemas });
|
|
130
|
-
const declared = producerEvidenceLayerFiles(evidence.records)
|
|
131
|
-
.map(({ path, mediaType }) => `${path}\0${mediaType}`)
|
|
132
|
-
.sort(compareStrings);
|
|
133
|
-
const materialized = layers
|
|
134
|
-
.map(
|
|
135
|
-
(layer) => `${layer.annotations[OCI_TITLE_ANNOTATION]}\0${layer.mediaType}`,
|
|
136
|
-
)
|
|
137
|
-
.sort(compareStrings);
|
|
138
|
-
if (canonicalJson(declared) !== canonicalJson(materialized)) {
|
|
139
|
-
throw new Error(
|
|
140
|
-
'OCI evidence layers are not the exact files declared by producer-evidence.json',
|
|
141
|
-
);
|
|
142
|
-
}
|
|
143
|
-
for (const record of evidence.records) {
|
|
144
|
-
const artifact = record.statement.predicate.artifact;
|
|
145
|
-
if (
|
|
146
|
-
artifact.manifestDigest !== subjectDigest ||
|
|
147
|
-
record.statement.subject[0]?.name !== artifact.imageRepository ||
|
|
148
|
-
`sha256:${record.statement.subject[0]?.digest?.sha256}` !== subjectDigest
|
|
149
|
-
) {
|
|
150
|
-
throw new Error(`${record.key} statement is not bound to OCI subject ${subjectDigest}`);
|
|
151
|
-
}
|
|
152
|
-
if (record.statement.predicate.producerRun.issuedAt !== created) {
|
|
153
|
-
throw new Error(
|
|
154
|
-
`${record.key} issuance does not match the OCI artifact creation annotation`,
|
|
155
|
-
);
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
return { ...evidence, created };
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
function assertExpectedAuthorityCommit(value) {
|
|
162
|
-
if (typeof value !== 'string' || value.length === 0) {
|
|
163
|
-
throw new Error('the expected kernel contract authority commit is required');
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
/** The referrer is not usable evidence under the expected authority: it is skipped for its subject and reported, never thrown past the resolver. */
|
|
168
|
-
export class InvalidEvidenceReferrerError extends Error {
|
|
169
|
-
constructor({ artifactDigest, reason, sourceCommit = null, cause }) {
|
|
170
|
-
super(`evidence referrer ${artifactDigest} is invalid: ${reason}`, { cause });
|
|
171
|
-
this.name = 'InvalidEvidenceReferrerError';
|
|
172
|
-
this.artifactDigest = artifactDigest;
|
|
173
|
-
this.reason = reason;
|
|
174
|
-
this.sourceCommit = sourceCommit;
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
/** The artifact states a kernel contract authority other than the one evidence is read under. */
|
|
179
|
-
export class ForeignAuthorityReferrerError extends InvalidEvidenceReferrerError {
|
|
180
|
-
constructor({ artifactDigest, sourceCommit, expectedAuthorityCommit }) {
|
|
181
|
-
super({
|
|
182
|
-
artifactDigest,
|
|
183
|
-
sourceCommit,
|
|
184
|
-
reason: `stated under kernel contract authority ${sourceCommit}, not ${expectedAuthorityCommit}`,
|
|
185
|
-
});
|
|
186
|
-
this.name = 'ForeignAuthorityReferrerError';
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
/** What a skipped referrer is reported as: the one sentence naming it and why it is not evidence. */
|
|
191
|
-
export function describeInvalidReferrer(skipped) {
|
|
192
|
-
return `referrer ${skipped.artifactDigest}: ${skipped.reason}`;
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
/** The one stderr line that names a skipped invalid referrer. */
|
|
196
|
-
export function writeInvalidReferrerReport(skipped) {
|
|
197
|
-
process.stderr.write(
|
|
198
|
-
`[evidence] skipped ${skipped.imageRepository}@${skipped.subjectDigest} ${describeInvalidReferrer(skipped)}\n`,
|
|
199
|
-
);
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
/**
|
|
203
|
-
* Fetch, content-address validate and decode one OCI evidence artifact.
|
|
204
|
-
* `getBlob` verifies every digest again, independently of the manifest.
|
|
205
|
-
* An artifact that is not valid evidence under `expectedAuthorityCommit`
|
|
206
|
-
* (a manifest that is not the exact subject's, RAW statements stating another authority commit, a
|
|
207
|
-
* failed strict parse, a statement whose contract authority is not exactly
|
|
208
|
-
* `expectedContractAuthority`, which is required) is refused with `InvalidEvidenceReferrerError`; a
|
|
209
|
-
* registry that cannot answer, or bytes that do not match their digests
|
|
210
|
-
* (`EvidenceIntegrityError`, a tampering signal), still throw.
|
|
211
|
-
*/
|
|
212
|
-
export async function readImageSourceEvidenceArtifact({
|
|
213
|
-
client,
|
|
214
|
-
repository,
|
|
215
|
-
subjectDigest,
|
|
216
|
-
artifactDigest,
|
|
217
|
-
schemas,
|
|
218
|
-
expectedAuthorityCommit,
|
|
219
|
-
expectedContractAuthority,
|
|
220
|
-
}) {
|
|
221
|
-
assertExpectedAuthorityCommit(expectedAuthorityCommit);
|
|
222
|
-
if (!expectedContractAuthority) {
|
|
223
|
-
throw new Error('the expected kernel contract authority is required');
|
|
224
|
-
}
|
|
225
|
-
const fetched = await client.getManifestByDigest(repository, artifactDigest);
|
|
226
|
-
const invalid = (error) =>
|
|
227
|
-
new InvalidEvidenceReferrerError({
|
|
228
|
-
artifactDigest,
|
|
229
|
-
reason: error instanceof Error ? error.message : String(error),
|
|
230
|
-
cause: error,
|
|
231
|
-
});
|
|
232
|
-
let validated;
|
|
233
|
-
try {
|
|
234
|
-
validated = validateImageSourceEvidenceManifest({
|
|
235
|
-
manifest: fetched.document,
|
|
236
|
-
subjectDigest,
|
|
237
|
-
});
|
|
238
|
-
} catch (error) {
|
|
239
|
-
throw invalid(error);
|
|
240
|
-
}
|
|
241
|
-
const { created, layers } = validated;
|
|
242
|
-
const directory = mkdtempSync(join(tmpdir(), 'xema-oci-evidence-'));
|
|
243
|
-
try {
|
|
244
|
-
for (const layer of layers) {
|
|
245
|
-
const title = layer.annotations[OCI_TITLE_ANNOTATION];
|
|
246
|
-
const bytes = await client.getBlob(repository, layer.digest);
|
|
247
|
-
if (bytes.length !== layer.size || sha256Digest(bytes) !== layer.digest) {
|
|
248
|
-
throw new EvidenceIntegrityError(
|
|
249
|
-
`OCI evidence layer "${title}" does not match its descriptor`,
|
|
250
|
-
);
|
|
251
|
-
}
|
|
252
|
-
const path = join(directory, title);
|
|
253
|
-
mkdirSync(dirname(path), { recursive: true });
|
|
254
|
-
writeFileSync(path, bytes, { flag: 'wx', mode: 0o600 });
|
|
255
|
-
}
|
|
256
|
-
try {
|
|
257
|
-
for (const sourceCommit of readRawStatementAuthorityCommits({ directory })) {
|
|
258
|
-
if (sourceCommit !== expectedAuthorityCommit) {
|
|
259
|
-
throw new ForeignAuthorityReferrerError({
|
|
260
|
-
artifactDigest,
|
|
261
|
-
sourceCommit,
|
|
262
|
-
expectedAuthorityCommit,
|
|
263
|
-
});
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
const evidence = validateMaterializedImageSourceEvidence({
|
|
267
|
-
directory,
|
|
268
|
-
manifest: fetched.document,
|
|
269
|
-
subjectDigest,
|
|
270
|
-
schemas,
|
|
271
|
-
});
|
|
272
|
-
// The wire schema checks the shape of an authority's sourcePaths only
|
|
273
|
-
// (contracts 0.110.3), so a statement naming the expected commit with
|
|
274
|
-
// another path set or digest parses: it is not evidence under the pin.
|
|
275
|
-
for (const record of evidence.records) {
|
|
276
|
-
if (canonicalJson(record.statement.predicate.contractAuthority) !== canonicalJson(expectedContractAuthority)) {
|
|
277
|
-
throw new Error(`${record.key} statement's kernel contract authority is not exactly the expected one at ${expectedAuthorityCommit}`);
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
return { ...evidence, artifactDigest, created };
|
|
281
|
-
} catch (error) {
|
|
282
|
-
if (error instanceof InvalidEvidenceReferrerError || error instanceof EvidenceIntegrityError) {
|
|
283
|
-
throw error;
|
|
284
|
-
}
|
|
285
|
-
throw invalid(error);
|
|
286
|
-
}
|
|
287
|
-
} finally {
|
|
288
|
-
rmSync(directory, { recursive: true, force: true });
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
/**
|
|
293
|
-
* Resolve the newest valid evidence referrer deterministically. Every
|
|
294
|
-
* referrer of the subject is evaluated; one that is not valid evidence under
|
|
295
|
-
* `expectedContractAuthority` (foreign authority, bad statement, bad layers)
|
|
296
|
-
* is reported to `onInvalidReferrer` and skipped. It is never a fallback: an
|
|
297
|
-
* invalid referrer is not read as evidence, however old or new. Returns null
|
|
298
|
-
* when no referrer is valid; the handler has then named each invalid one.
|
|
299
|
-
*/
|
|
300
|
-
export async function resolveImageSourceEvidenceReferrer({
|
|
301
|
-
client,
|
|
302
|
-
imageRepository,
|
|
303
|
-
subjectDigest,
|
|
304
|
-
schemas,
|
|
305
|
-
expectedContractAuthority,
|
|
306
|
-
onInvalidReferrer,
|
|
307
|
-
}) {
|
|
308
|
-
const expectedAuthorityCommit = expectedContractAuthority?.sourceCommit;
|
|
309
|
-
assertExpectedAuthorityCommit(expectedAuthorityCommit);
|
|
310
|
-
if (typeof onInvalidReferrer !== 'function') {
|
|
311
|
-
throw new Error('an invalid-referrer report handler is required');
|
|
312
|
-
}
|
|
313
|
-
const { authority, repository } = splitImageRef(imageRepository);
|
|
314
|
-
if (client.authority !== authority) {
|
|
315
|
-
throw new Error(
|
|
316
|
-
`registry client for ${client.authority} cannot read ${imageRepository}`,
|
|
317
|
-
);
|
|
318
|
-
}
|
|
319
|
-
const descriptors = await client.listReferrers(
|
|
320
|
-
repository,
|
|
321
|
-
subjectDigest,
|
|
322
|
-
IMAGE_SOURCE_EVIDENCE_ARTIFACT_TYPE,
|
|
323
|
-
);
|
|
324
|
-
const matching = descriptors.filter(
|
|
325
|
-
(descriptor) =>
|
|
326
|
-
descriptor?.artifactType === IMAGE_SOURCE_EVIDENCE_ARTIFACT_TYPE,
|
|
327
|
-
);
|
|
328
|
-
if (matching.length === 0) {return null;}
|
|
329
|
-
const candidates = [];
|
|
330
|
-
for (const descriptor of matching) {
|
|
331
|
-
if (!SHA256_DIGEST_PATTERN.test(descriptor.digest ?? '')) {
|
|
332
|
-
throw new Error('registry returned a non-canonical evidence referrer digest');
|
|
333
|
-
}
|
|
334
|
-
try {
|
|
335
|
-
candidates.push(
|
|
336
|
-
await readImageSourceEvidenceArtifact({
|
|
337
|
-
client,
|
|
338
|
-
repository,
|
|
339
|
-
subjectDigest,
|
|
340
|
-
artifactDigest: descriptor.digest,
|
|
341
|
-
schemas,
|
|
342
|
-
expectedAuthorityCommit,
|
|
343
|
-
expectedContractAuthority,
|
|
344
|
-
}),
|
|
345
|
-
);
|
|
346
|
-
} catch (error) {
|
|
347
|
-
if (!(error instanceof InvalidEvidenceReferrerError)) {throw error;}
|
|
348
|
-
onInvalidReferrer({
|
|
349
|
-
imageRepository,
|
|
350
|
-
subjectDigest,
|
|
351
|
-
artifactDigest: error.artifactDigest,
|
|
352
|
-
reason: error.reason,
|
|
353
|
-
sourceCommit: error.sourceCommit,
|
|
354
|
-
expectedAuthorityCommit,
|
|
355
|
-
});
|
|
356
|
-
}
|
|
357
|
-
}
|
|
358
|
-
if (candidates.length === 0) {return null;}
|
|
359
|
-
candidates.sort((left, right) => {
|
|
360
|
-
const byCreated = compareStrings(right.created, left.created);
|
|
361
|
-
return byCreated || compareStrings(left.artifactDigest, right.artifactDigest);
|
|
362
|
-
});
|
|
363
|
-
return candidates[0];
|
|
364
|
-
}
|
|
@@ -1,285 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Admission of service-to-service operation grants at the lock.
|
|
3
|
-
*
|
|
4
|
-
* A manifest declares intent (`requiresOperations`, carried in the lock as
|
|
5
|
-
* `operationRequirements`); the kernel's `admitOperationGrants` admits or
|
|
6
|
-
* refuses every requirement, and a refusal is never a warning. The resolve
|
|
7
|
-
* and the seal both call {@link assertOperationGrantsAdmitted}, so a lock with
|
|
8
|
-
* a refused requirement is neither written nor sealed. The installed-operation
|
|
9
|
-
* ceiling (`requestsInstalledOperations`, carried as `installedOperationRequests`)
|
|
10
|
-
* and the edition's store-workload ceiling are admitted the same way.
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
import { RefusalError, collectRefusals, isRefusal, joinRefusalMessages } from './collected-refusals.mjs';
|
|
14
|
-
|
|
15
|
-
/** Thrown when one or more declared operation requirements are not admitted. */
|
|
16
|
-
export class OperationGrantAdmissionError extends RefusalError {
|
|
17
|
-
/**
|
|
18
|
-
* @param {string} distributionId
|
|
19
|
-
* @param {ReadonlyArray<{code: string, operation: string, message: string}>} refusals
|
|
20
|
-
* @param {ReadonlyArray<{caller: object, operation: string, reason: string}>} [ungrantedOptional] what the kernel left ungranted beside the refusals
|
|
21
|
-
*/
|
|
22
|
-
constructor(distributionId, refusals, ungrantedOptional = []) {
|
|
23
|
-
super(
|
|
24
|
-
`distribution "${distributionId}" declares operation requirements that are not admitted:\n` +
|
|
25
|
-
refusals.map((refusal) => `[${refusal.code}] ${refusal.message}`).join('\n'),
|
|
26
|
-
);
|
|
27
|
-
this.name = 'OperationGrantAdmissionError';
|
|
28
|
-
this.distributionId = distributionId;
|
|
29
|
-
this.refusals = refusals;
|
|
30
|
-
this.ungrantedOptional = ungrantedOptional;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* One informational line per optional operation the kernel left ungranted
|
|
36
|
-
* (`ungrantedOptional`): the edition is valid, the caller runs without it.
|
|
37
|
-
*/
|
|
38
|
-
export function ungrantedOptionalOperationLines(distributionId, ungrantedOptional) {
|
|
39
|
-
return ungrantedOptional.map(
|
|
40
|
-
({ caller, operation, reason }) =>
|
|
41
|
-
`distribution "${distributionId}": optional operation ${operation} of ${caller.biome}/${caller.component} is not granted (${reason})`,
|
|
42
|
-
);
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* Admit every operation requirement of `lock` through the kernel, or throw
|
|
47
|
-
* {@link OperationGrantAdmissionError} listing every refusal. Returns the
|
|
48
|
-
* admitted grants. `report`, when given, receives each line of
|
|
49
|
-
* {@link ungrantedOptionalOperationLines}; an ungranted optional operation never fails.
|
|
50
|
-
*/
|
|
51
|
-
export function assertOperationGrantsAdmitted(schemas, lock, { report } = {}) {
|
|
52
|
-
const { grants, refusals, ungrantedOptional, platformServiceRefusals } = schemas.admitOperationGrants(lock);
|
|
53
|
-
// A platform service's refused requirement fails exactly like a biome component's, through the same error.
|
|
54
|
-
const allRefusals = [...refusals, ...platformServiceRefusals];
|
|
55
|
-
if (allRefusals.length > 0) {
|
|
56
|
-
throw new OperationGrantAdmissionError(lock.distributionId, allRefusals, ungrantedOptional);
|
|
57
|
-
}
|
|
58
|
-
if (report !== undefined) {
|
|
59
|
-
for (const line of ungrantedOptionalOperationLines(lock.distributionId, ungrantedOptional)) {report(line);}
|
|
60
|
-
}
|
|
61
|
-
return grants;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
/** Thrown when one or more declared organization sweeps are not admitted. */
|
|
65
|
-
export class OrganizationSweepAdmissionError extends RefusalError {
|
|
66
|
-
/**
|
|
67
|
-
* @param {string} distributionId
|
|
68
|
-
* @param {ReadonlyArray<{code: string, biome: string, component: string, sweep: string, message: string}>} refusals
|
|
69
|
-
*/
|
|
70
|
-
constructor(distributionId, refusals) {
|
|
71
|
-
super(
|
|
72
|
-
`distribution "${distributionId}" declares organization sweeps that are not admitted:\n` +
|
|
73
|
-
refusals.map((refusal) => `[${refusal.code}] ${refusal.message}`).join('\n'),
|
|
74
|
-
);
|
|
75
|
-
this.name = 'OrganizationSweepAdmissionError';
|
|
76
|
-
this.distributionId = distributionId;
|
|
77
|
-
this.refusals = refusals;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
/**
|
|
82
|
-
* Admit every organization sweep requirement of `lock` through the kernel
|
|
83
|
-
* (`admitOrganizationSweeps`), or throw {@link OrganizationSweepAdmissionError}
|
|
84
|
-
* listing every refusal. Returns the admitted rows. The resolve and the seal
|
|
85
|
-
* call it beside {@link assertOperationGrantsAdmitted}.
|
|
86
|
-
*/
|
|
87
|
-
export function assertOrganizationSweepsAdmitted(schemas, lock) {
|
|
88
|
-
const { grants, refusals } = schemas.admitOrganizationSweeps(lock);
|
|
89
|
-
if (refusals.length > 0) {
|
|
90
|
-
throw new OrganizationSweepAdmissionError(lock.distributionId, refusals);
|
|
91
|
-
}
|
|
92
|
-
return grants;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
/** Thrown when one or more declared exact audiences are not admitted. */
|
|
96
|
-
export class ExactAudienceAdmissionError extends RefusalError {
|
|
97
|
-
/**
|
|
98
|
-
* @param {string} distributionId
|
|
99
|
-
* @param {ReadonlyArray<{code: string, message: string}>} refusals
|
|
100
|
-
*/
|
|
101
|
-
constructor(distributionId, refusals) {
|
|
102
|
-
super(
|
|
103
|
-
`distribution "${distributionId}" declares audience requirements that are not admitted:\n` +
|
|
104
|
-
refusals.map((refusal) => `[${refusal.code}] ${refusal.message}`).join('\n'),
|
|
105
|
-
);
|
|
106
|
-
this.name = 'ExactAudienceAdmissionError';
|
|
107
|
-
this.distributionId = distributionId;
|
|
108
|
-
this.refusals = refusals;
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
/**
|
|
113
|
-
* Admit every exact-audience requirement of `lock` through the kernel
|
|
114
|
-
* (`admitExactAudiences`), or throw {@link ExactAudienceAdmissionError} listing
|
|
115
|
-
* every refusal. Returns the admitted grants. The resolve and the seal call it
|
|
116
|
-
* beside {@link assertOperationGrantsAdmitted}.
|
|
117
|
-
*/
|
|
118
|
-
export function assertExactAudiencesAdmitted(schemas, lock) {
|
|
119
|
-
const { grants, refusals } = schemas.admitExactAudiences(lock);
|
|
120
|
-
if (refusals.length > 0) {
|
|
121
|
-
throw new ExactAudienceAdmissionError(lock.distributionId, refusals);
|
|
122
|
-
}
|
|
123
|
-
return grants;
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
/** Thrown when one or more requested installed operations are not admitted into the ceiling. */
|
|
127
|
-
export class InstalledOperationCeilingAdmissionError extends RefusalError {
|
|
128
|
-
/**
|
|
129
|
-
* @param {string} distributionId
|
|
130
|
-
* @param {ReadonlyArray<{code: string, biome: string, component: string, operation: string, message: string}>} refusals
|
|
131
|
-
*/
|
|
132
|
-
constructor(distributionId, refusals) {
|
|
133
|
-
super(
|
|
134
|
-
`distribution "${distributionId}" declares installed operation requests that are not admitted:\n` +
|
|
135
|
-
refusals.map((refusal) => `[${refusal.code}] ${refusal.message}`).join('\n'),
|
|
136
|
-
);
|
|
137
|
-
this.name = 'InstalledOperationCeilingAdmissionError';
|
|
138
|
-
this.distributionId = distributionId;
|
|
139
|
-
this.refusals = refusals;
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
/**
|
|
144
|
-
* Admit every installed-operation request of `lock` through the kernel
|
|
145
|
-
* (`admitInstalledOperationCeiling`), or throw
|
|
146
|
-
* {@link InstalledOperationCeilingAdmissionError} listing every refusal.
|
|
147
|
-
* Returns the admitted ceiling rows.
|
|
148
|
-
*/
|
|
149
|
-
export function assertInstalledOperationCeilingAdmitted(schemas, lock) {
|
|
150
|
-
const { ceilings, refusals } = schemas.admitInstalledOperationCeiling(lock);
|
|
151
|
-
if (refusals.length > 0) {
|
|
152
|
-
throw new InstalledOperationCeilingAdmissionError(lock.distributionId, refusals);
|
|
153
|
-
}
|
|
154
|
-
return ceilings;
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
/** Thrown when one or more domains of the edition's store-workload ceiling are not admitted. */
|
|
158
|
-
export class StoreWorkloadCeilingAdmissionError extends RefusalError {
|
|
159
|
-
/**
|
|
160
|
-
* @param {string} distributionId
|
|
161
|
-
* @param {ReadonlyArray<{code: string, domain: string, message: string}>} refusals
|
|
162
|
-
*/
|
|
163
|
-
constructor(distributionId, refusals) {
|
|
164
|
-
super(
|
|
165
|
-
`distribution "${distributionId}" declares a store-workload ceiling that is not admitted:\n` +
|
|
166
|
-
refusals.map((refusal) => `[${refusal.code}] ${refusal.message}`).join('\n'),
|
|
167
|
-
);
|
|
168
|
-
this.name = 'StoreWorkloadCeilingAdmissionError';
|
|
169
|
-
this.distributionId = distributionId;
|
|
170
|
-
this.refusals = refusals;
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
/**
|
|
175
|
-
* Admit the store-workload ceiling of `lock` through the kernel
|
|
176
|
-
* (`admitStoreWorkloadCeiling`), or throw
|
|
177
|
-
* {@link StoreWorkloadCeilingAdmissionError} listing every refusal. Returns the
|
|
178
|
-
* resolved ceiling.
|
|
179
|
-
*/
|
|
180
|
-
export function assertStoreWorkloadCeilingAdmitted(schemas, lock) {
|
|
181
|
-
const { ceiling, refusals } = schemas.admitStoreWorkloadCeiling(lock);
|
|
182
|
-
if (refusals.length > 0) {
|
|
183
|
-
throw new StoreWorkloadCeilingAdmissionError(lock.distributionId, refusals);
|
|
184
|
-
}
|
|
185
|
-
return ceiling;
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
/** Thrown when one or more declared organization-context relays are not admitted. */
|
|
189
|
-
export class OrgContextRelayAdmissionError extends RefusalError {
|
|
190
|
-
/**
|
|
191
|
-
* @param {string} distributionId
|
|
192
|
-
* @param {ReadonlyArray<{code: string, biome: string, component: string, message: string}>} refusals
|
|
193
|
-
*/
|
|
194
|
-
constructor(distributionId, refusals) {
|
|
195
|
-
super(
|
|
196
|
-
`distribution "${distributionId}" declares organization-context relays that are not admitted:\n` +
|
|
197
|
-
refusals.map((refusal) => `[${refusal.code}] ${refusal.message}`).join('\n'),
|
|
198
|
-
);
|
|
199
|
-
this.name = 'OrgContextRelayAdmissionError';
|
|
200
|
-
this.distributionId = distributionId;
|
|
201
|
-
this.refusals = refusals;
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
/**
|
|
206
|
-
* Admit every `orgContextRelayers` entry of `lock` through the kernel
|
|
207
|
-
* (`admitOrgContextRelays`), or throw {@link OrgContextRelayAdmissionError}
|
|
208
|
-
* listing every refusal. Returns the admitted relay rows.
|
|
209
|
-
*/
|
|
210
|
-
export function assertOrgContextRelaysAdmitted(schemas, lock) {
|
|
211
|
-
const { relays, refusals } = schemas.admitOrgContextRelays(lock);
|
|
212
|
-
if (refusals.length > 0) {
|
|
213
|
-
throw new OrgContextRelayAdmissionError(lock.distributionId, refusals);
|
|
214
|
-
}
|
|
215
|
-
return relays;
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
/** Thrown when one or more declared event subscription clauses are not admitted. */
|
|
219
|
-
export class EventSubscriptionAdmissionError extends RefusalError {
|
|
220
|
-
/**
|
|
221
|
-
* @param {string} distributionId
|
|
222
|
-
* @param {ReadonlyArray<{code: string, biome: string, component: string, message: string}>} refusals
|
|
223
|
-
*/
|
|
224
|
-
constructor(distributionId, refusals) {
|
|
225
|
-
super(
|
|
226
|
-
`distribution "${distributionId}" declares event subscriptions that are not admitted:\n` +
|
|
227
|
-
refusals.map((refusal) => `[${refusal.code}] ${refusal.message}`).join('\n'),
|
|
228
|
-
);
|
|
229
|
-
this.name = 'EventSubscriptionAdmissionError';
|
|
230
|
-
this.distributionId = distributionId;
|
|
231
|
-
this.refusals = refusals;
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
/**
|
|
236
|
-
* Admit every `eventSubscriptionRequirements` clause of `lock` through the
|
|
237
|
-
* kernel (`admitEventSubscriptions`), or throw
|
|
238
|
-
* {@link EventSubscriptionAdmissionError} listing every refusal. Returns the
|
|
239
|
-
* admission: the first-party grants and the installed ceilings.
|
|
240
|
-
*/
|
|
241
|
-
export function assertEventSubscriptionsAdmitted(schemas, lock) {
|
|
242
|
-
const admission = schemas.admitEventSubscriptions(lock);
|
|
243
|
-
if (admission.refusals.length > 0) {
|
|
244
|
-
throw new EventSubscriptionAdmissionError(lock.distributionId, admission.refusals);
|
|
245
|
-
}
|
|
246
|
-
return admission;
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
/** Thrown when several admission categories refuse the same lock; `.errors` holds each category's own error. */
|
|
250
|
-
export class LockAdmissionRefusedError extends RefusalError {
|
|
251
|
-
/** @param {readonly Error[]} errors */
|
|
252
|
-
constructor(errors) {
|
|
253
|
-
super(`the distribution lock is refused by ${errors.length} admission checks:\n\n${joinRefusalMessages(errors)}`);
|
|
254
|
-
this.name = 'LockAdmissionRefusedError';
|
|
255
|
-
this.errors = errors;
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
/**
|
|
260
|
-
* Run every admission a lock must pass, in the order the resolve has always run them, and refuse with all of them: one
|
|
261
|
-
* refusal is rethrown unchanged, several are one {@link LockAdmissionRefusedError}. `report` receives the optional
|
|
262
|
-
* operations left ungranted. Nothing here changes `lock`.
|
|
263
|
-
*/
|
|
264
|
-
export function admitDistributionLock(schemas, lock, { report } = {}) {
|
|
265
|
-
// The two ceilings read the lock's own fields, not the outcome of the grants, so they are checked beside them.
|
|
266
|
-
const admissions = [
|
|
267
|
-
() => assertOperationGrantsAdmitted(schemas, lock, { report }),
|
|
268
|
-
() => assertOrganizationSweepsAdmitted(schemas, lock),
|
|
269
|
-
() => assertExactAudiencesAdmitted(schemas, lock),
|
|
270
|
-
() => assertOrgContextRelaysAdmitted(schemas, lock),
|
|
271
|
-
() => assertEventSubscriptionsAdmitted(schemas, lock),
|
|
272
|
-
() => assertInstalledOperationCeilingAdmitted(schemas, lock),
|
|
273
|
-
() => assertStoreWorkloadCeilingAdmitted(schemas, lock),
|
|
274
|
-
];
|
|
275
|
-
collectRefusals(admissions, (admit) => admit(), isRefusal, LockAdmissionRefusedError);
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
/**
|
|
279
|
-
* The {@link ungrantedOptionalOperationLines} a refused admission carries: the refusal of the operation grants itself, or the
|
|
280
|
-
* one among several that is. Empty when the grants were not what refused.
|
|
281
|
-
*/
|
|
282
|
-
export function ungrantedOptionalLinesOfRefusal(error) {
|
|
283
|
-
const grantRefusal = [error, ...(error.errors ?? [])].find((candidate) => candidate instanceof OperationGrantAdmissionError);
|
|
284
|
-
return grantRefusal === undefined ? [] : ungrantedOptionalOperationLines(grantRefusal.distributionId, grantRefusal.ungrantedOptional);
|
|
285
|
-
}
|