@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,327 +0,0 @@
|
|
|
1
|
-
// biome-content — the content address of every biome a distribution lock ships.
|
|
2
|
-
//
|
|
3
|
-
// A sealed (v5) lock carries, per biome, `biomeContentHash`: the kernel's
|
|
4
|
-
// `computeBiomeContentHash` over THREE facts the lock itself cannot vouch for:
|
|
5
|
-
//
|
|
6
|
-
// * the biome's source manifest hash, recomputed from the manifest AT the
|
|
7
|
-
// pinned commit (`computeBiomeSourceManifestHash`);
|
|
8
|
-
// * the git tree object id of the biome directory at that commit
|
|
9
|
-
// (`git rev-parse <commit>:<path>`);
|
|
10
|
-
// * the sorted image subject digests of the images the biome owns, from the
|
|
11
|
-
// SEALED images lock.
|
|
12
|
-
//
|
|
13
|
-
// The kernel cannot recompute any of them ("sealed" is only a field), so the
|
|
14
|
-
// producer of the seal AND every verifier recompute from the sources and REFUSE
|
|
15
|
-
// a mismatch, naming the biome. Nothing here assembles a v5 lock: the unsealed
|
|
16
|
-
// document goes to the kernel's `sealDistributionLock` together with the hashes
|
|
17
|
-
// computed below.
|
|
18
|
-
|
|
19
|
-
import { execFileSync } from 'node:child_process';
|
|
20
|
-
import { relative, sep } from 'node:path';
|
|
21
|
-
|
|
22
|
-
import { CatalogueLockField, catalogueLockFieldOf } from './catalogue-lock-field.mjs';
|
|
23
|
-
import { assertCustomerLockWithinCatalogueCeiling } from './catalogue.mjs';
|
|
24
|
-
import { readGitJsonAtCommit } from './lib.mjs';
|
|
25
|
-
import { assertLockBundleSigners } from './locked-bundle-signer.mjs';
|
|
26
|
-
import { admitDistributionLock } from './operation-grant-admission.mjs';
|
|
27
|
-
|
|
28
|
-
/** A biome whose recomputed content hash is not the lock's, or whose inputs cannot be recomputed. */
|
|
29
|
-
export class BiomeContentHashError extends Error {
|
|
30
|
-
constructor(message) {
|
|
31
|
-
super(message);
|
|
32
|
-
this.name = 'BiomeContentHashError';
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* The commit a biome's content is pinned at. A biome that ships images (or a web
|
|
38
|
-
* bundle) is pinned where its images lock row is; a declared source at its
|
|
39
|
-
* locked commit; a content-only first-party biome at the vendored-source pin
|
|
40
|
-
* (`vendoredCommit(repo)`), the axis its manifest hash was read on.
|
|
41
|
-
*
|
|
42
|
-
* `contentCommits` (repo -> commit) is a CANDIDATE edition's recorded override
|
|
43
|
-
* (candidate-edition.mjs): every first-party biome of a named repo has its content
|
|
44
|
-
* at the recorded commit, not at its carried images' `sourceCommit`. Absent, the
|
|
45
|
-
* rule above is the whole rule. Nothing reads it but a caller that holds the record.
|
|
46
|
-
*/
|
|
47
|
-
function pinnedCommit({ biome, imageLock, ownerKinds, vendoredCommit, contentCommits }) {
|
|
48
|
-
if (biome.source !== undefined) {return biome.source.commit;}
|
|
49
|
-
const recorded = contentCommits?.get(biome.repo);
|
|
50
|
-
if (recorded !== undefined) {return recorded;}
|
|
51
|
-
// Only subjects from the biome's OWN repo pin its content commit; a runtime component it
|
|
52
|
-
// launches from another repo is owned (and digest-bound) but is not where the biome lives.
|
|
53
|
-
const owned = imageLock.subjects.filter(
|
|
54
|
-
(subject) =>
|
|
55
|
-
subject.repo === biome.repo &&
|
|
56
|
-
subject.owners.some((owner) => owner.kind === ownerKinds.Biome && owner.biomeId === biome.id),
|
|
57
|
-
);
|
|
58
|
-
const commits = new Set(owned.map((subject) => subject.sourceCommit));
|
|
59
|
-
if (commits.size > 1) {
|
|
60
|
-
throw new BiomeContentHashError(`biome "${biome.id}": its images in its own repo "${biome.repo}" pin ${commits.size} different commits`);
|
|
61
|
-
}
|
|
62
|
-
if (commits.size === 1) {return [...commits][0];}
|
|
63
|
-
const web = imageLock.webBiomes.find((row) => row.biomeId === biome.id);
|
|
64
|
-
if (web !== undefined) {return web.sourceCommit;}
|
|
65
|
-
return vendoredCommit(biome.repo);
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
function treeId({ parseGitTreeId, repoDirectory, commit, repoRelativePath }) {
|
|
69
|
-
const object = repoRelativePath === '.' ? `${commit}^{tree}` : `${commit}:${repoRelativePath}`;
|
|
70
|
-
const out = execFileSync('git', ['-C', repoDirectory, 'rev-parse', '--verify', object], {
|
|
71
|
-
encoding: 'utf8',
|
|
72
|
-
stdio: ['ignore', 'pipe', 'pipe'],
|
|
73
|
-
});
|
|
74
|
-
return parseGitTreeId(out.trim());
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
/** The sorted `sha256:` subject digests of the images `biome` owns; an unsealed row is refused. */
|
|
78
|
-
function imageSubjectDigests({ biome, imageLock, ownerKinds, parseOciDigest }) {
|
|
79
|
-
return imageLock.subjects
|
|
80
|
-
.filter((subject) => subject.owners.some((owner) => owner.kind === ownerKinds.Biome && owner.biomeId === biome.id))
|
|
81
|
-
.map((subject) => {
|
|
82
|
-
if (subject.imageDigest === undefined) {
|
|
83
|
-
throw new BiomeContentHashError(
|
|
84
|
-
`biome "${biome.id}": image ${subject.kind}:${subject.id} is not sealed (no imageDigest); seal the images lock first`,
|
|
85
|
-
);
|
|
86
|
-
}
|
|
87
|
-
return parseOciDigest(subject.imageDigest);
|
|
88
|
-
});
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
function ownedSubjects(imageLock, ownerKinds, biomeId) {
|
|
92
|
-
return imageLock.subjects.filter((subject) =>
|
|
93
|
-
subject.owners.some((owner) => owner.kind === ownerKinds.Biome && owner.biomeId === biomeId),
|
|
94
|
-
);
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
/** The biome's `xema-biome.json` AT the commit its content is pinned at, read from the source checkout `locate` names. */
|
|
98
|
-
function readPinnedManifest({ biome, commit, locate }) {
|
|
99
|
-
const { dir: repoDirectory, base } = locate(biome.repo);
|
|
100
|
-
const repoRelativePath = relative(repoDirectory, `${base}${sep}${biome.path}`).split(sep).join('/') || '.';
|
|
101
|
-
const manifestPath = repoRelativePath === '.' ? 'xema-biome.json' : `${repoRelativePath}/xema-biome.json`;
|
|
102
|
-
return { repoDirectory, repoRelativePath, manifestPath, manifest: readGitJsonAtCommit(repoDirectory, manifestPath, commit) };
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
/**
|
|
106
|
-
* The manifest at the pinned commit, held to the lock: its hash, by the kernel's
|
|
107
|
-
* `computeBiomeSourceManifestHash`, is the lock's `sourceManifestHash`, or the biome is
|
|
108
|
-
* refused. The ONE comparison, for the seal, the verify step and `biome-manifests`.
|
|
109
|
-
*/
|
|
110
|
-
async function readLockedManifest({ schemas, biome, commit, locate }) {
|
|
111
|
-
const pinned = readPinnedManifest({ biome, commit, locate });
|
|
112
|
-
const sourceManifestHash = await schemas.computeBiomeSourceManifestHash(pinned.manifest);
|
|
113
|
-
if (sourceManifestHash !== biome.sourceManifestHash) {
|
|
114
|
-
throw new BiomeContentHashError(
|
|
115
|
-
`biome "${biome.id}": the manifest at ${biome.repo}@${commit}:${pinned.manifestPath} hashes to ${sourceManifestHash}, ` +
|
|
116
|
-
`not the lock's sourceManifestHash ${biome.sourceManifestHash}`,
|
|
117
|
-
);
|
|
118
|
-
}
|
|
119
|
-
return { ...pinned, sourceManifestHash };
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
/**
|
|
123
|
-
* The pinned `xema-biome.json` of every biome of a lock, read exactly as the seal
|
|
124
|
-
* and the verify step read it, sorted by biome id: `[{ id, repo, sourceCommit, manifest }]`.
|
|
125
|
-
* A manifest that cannot be read at its pinned commit, or that is not the manifest
|
|
126
|
-
* the lock names (`sourceManifestHash`), is refused, naming the biome.
|
|
127
|
-
*/
|
|
128
|
-
export async function pinnedBiomeManifests({ schemas, lock, imageLock, locate, vendoredCommit, contentCommits }) {
|
|
129
|
-
const ownerKinds = schemas.RuntimeImageOwnerKind;
|
|
130
|
-
const manifests = [];
|
|
131
|
-
for (const biome of [...lock.biomes].sort((a, b) => (a.id < b.id ? -1 : a.id > b.id ? 1 : 0))) {
|
|
132
|
-
const sourceCommit = pinnedCommit({ biome, imageLock, ownerKinds, vendoredCommit, contentCommits });
|
|
133
|
-
let manifest;
|
|
134
|
-
try {
|
|
135
|
-
({ manifest } = await readLockedManifest({ schemas, biome, commit: sourceCommit, locate }));
|
|
136
|
-
} catch (error) {
|
|
137
|
-
if (error instanceof BiomeContentHashError) {throw error;}
|
|
138
|
-
throw new BiomeContentHashError(`biome "${biome.id}": its manifest at ${biome.repo}@${sourceCommit} cannot be read: ${error.message}`);
|
|
139
|
-
}
|
|
140
|
-
manifests.push({ id: biome.id, repo: biome.repo, sourceCommit, manifest });
|
|
141
|
-
}
|
|
142
|
-
return manifests;
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
/** The three facts of a biome recomputed from a checkout of its source at the pinned commit. */
|
|
146
|
-
async function sourceFacts({ schemas, biome, imageLock, locate, vendoredCommit, contentCommits }) {
|
|
147
|
-
const ownerKinds = schemas.RuntimeImageOwnerKind;
|
|
148
|
-
const commit = pinnedCommit({ biome, imageLock, ownerKinds, vendoredCommit, contentCommits });
|
|
149
|
-
const { repoDirectory, repoRelativePath, sourceManifestHash } = await readLockedManifest({ schemas, biome, commit, locate });
|
|
150
|
-
return {
|
|
151
|
-
sourceManifestHash,
|
|
152
|
-
sourceTreeId: treeId({ parseGitTreeId: schemas.parseGitTreeId, repoDirectory, commit, repoRelativePath }),
|
|
153
|
-
imageSubjectDigests: imageSubjectDigests({ biome, imageLock, ownerKinds, parseOciDigest: schemas.parseOciDigest }),
|
|
154
|
-
};
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
const CATALOGUE_AUTHORITY_NOTE =
|
|
158
|
-
"the vendor biome's source tree id is an INPUT taken on the catalogue's authority; it is not re-derived " +
|
|
159
|
-
'from a checkout (the customer has none), so this is not a verification of the vendor source';
|
|
160
|
-
|
|
161
|
-
/**
|
|
162
|
-
* The three facts of a VENDOR biome in a customer edition. The customer holds no
|
|
163
|
-
* checkout of the vendor source, so, on the catalogue's authority (and ONLY
|
|
164
|
-
* there): the tree id is the catalogue's `sourceTreeIds[biome]`, and the
|
|
165
|
-
* manifest hash is the catalogue row's. Everything the customer CAN check is
|
|
166
|
-
* checked: the lock's manifest hash equals the row's, and the image digests the
|
|
167
|
-
* customer's images lock carries for the biome equal the catalogue's. A biome
|
|
168
|
-
* the catalogue does not carry, or carries without a tree id, is refused.
|
|
169
|
-
*/
|
|
170
|
-
async function catalogueFacts({ schemas, biome, imageLock, catalogue }) {
|
|
171
|
-
const ownerKinds = schemas.RuntimeImageOwnerKind;
|
|
172
|
-
const row = catalogue.biomes.find((candidate) => candidate.id === biome.id);
|
|
173
|
-
if (row === undefined) {
|
|
174
|
-
throw new BiomeContentHashError(`vendor biome "${biome.id}" is absent from catalogue "${catalogue.offeringId}"; ${CATALOGUE_AUTHORITY_NOTE}`);
|
|
175
|
-
}
|
|
176
|
-
const treeIdText = catalogue.sourceTreeIds?.[biome.id];
|
|
177
|
-
if (treeIdText === undefined) {
|
|
178
|
-
throw new BiomeContentHashError(`catalogue "${catalogue.offeringId}" carries no source tree id for vendor biome "${biome.id}"; ${CATALOGUE_AUTHORITY_NOTE}`);
|
|
179
|
-
}
|
|
180
|
-
if (row.sourceManifestHash !== biome.sourceManifestHash) {
|
|
181
|
-
throw new BiomeContentHashError(
|
|
182
|
-
`vendor biome "${biome.id}": the lock's sourceManifestHash ${biome.sourceManifestHash} is not the catalogue row's ${row.sourceManifestHash}`,
|
|
183
|
-
);
|
|
184
|
-
}
|
|
185
|
-
const own = imageSubjectDigests({ biome, imageLock, ownerKinds, parseOciDigest: schemas.parseOciDigest });
|
|
186
|
-
const offered = ownedSubjects({ subjects: catalogue.images.subjects }, ownerKinds, biome.id)
|
|
187
|
-
.map((subject) => schemas.parseOciDigest(subject.imageDigest));
|
|
188
|
-
if (JSON.stringify([...own].sort()) !== JSON.stringify([...offered].sort())) {
|
|
189
|
-
throw new BiomeContentHashError(
|
|
190
|
-
`vendor biome "${biome.id}": its image digests in the images lock differ from the catalogue's (${[...own].sort().join(',')} vs ${[...offered].sort().join(',')})`,
|
|
191
|
-
);
|
|
192
|
-
}
|
|
193
|
-
return {
|
|
194
|
-
sourceManifestHash: schemas.parseBiomeSourceManifestHash(row.sourceManifestHash),
|
|
195
|
-
sourceTreeId: schemas.parseGitTreeId(treeIdText),
|
|
196
|
-
imageSubjectDigests: own,
|
|
197
|
-
};
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
/**
|
|
201
|
-
* Customer mode: the lock must say which catalogue produced its hashes, and it must be
|
|
202
|
-
* the catalogue supplied, in the same field: `catalogueDigest` (a published catalogue artifact)
|
|
203
|
-
* or `catalogueContentDigest` (the catalogue bytes of a catalogue-free resolve), exactly one supplied
|
|
204
|
-
* and the lock carrying that one only. A lock without it, with another digest, or naming the catalogue
|
|
205
|
-
* in the other field, was not resolved against this catalogue, so its hashes cannot be checked on
|
|
206
|
-
* this catalogue's authority.
|
|
207
|
-
*/
|
|
208
|
-
function assertLockNamesCatalogue({ schemas, lock, catalogue, catalogueDigest, catalogueContentDigest, storePublisherAnchorKeys }) {
|
|
209
|
-
const { key, digest } = catalogueLockFieldOf({ catalogueDigest, catalogueContentDigest }, { what: `customer mode for catalogue "${catalogue.offeringId}"`, ErrorType: BiomeContentHashError });
|
|
210
|
-
const other = key === CatalogueLockField.Artifact ? CatalogueLockField.Content : CatalogueLockField.Artifact;
|
|
211
|
-
if (lock[other] !== undefined) {
|
|
212
|
-
throw new BiomeContentHashError(
|
|
213
|
-
`distribution "${lock.distributionId}": the lock carries ${other}, but the supplied catalogue is named by ${key} ${digest}`,
|
|
214
|
-
);
|
|
215
|
-
}
|
|
216
|
-
if (lock[key] === undefined) {
|
|
217
|
-
throw new BiomeContentHashError(
|
|
218
|
-
`distribution "${lock.distributionId}": the lock carries no ${key}, so it was not resolved against a catalogue; supplied catalogue ${digest}`,
|
|
219
|
-
);
|
|
220
|
-
}
|
|
221
|
-
if (lock[key] !== digest) {
|
|
222
|
-
throw new BiomeContentHashError(
|
|
223
|
-
`distribution "${lock.distributionId}": the lock was resolved against catalogue ${lock[key]}, not the supplied ${digest} (${key})`,
|
|
224
|
-
);
|
|
225
|
-
}
|
|
226
|
-
// The lock is within the catalogue's ceiling: the kernel's one check, its Store publishers against the definition's selection.
|
|
227
|
-
assertCustomerLockWithinCatalogueCeiling({ schemas, catalogue, lock, storePublisherAnchorKeys });
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
/**
|
|
231
|
-
* Recompute every biome's `biomeContentHash`.
|
|
232
|
-
*
|
|
233
|
-
* @param {object} request
|
|
234
|
-
* @param {object} request.schemas the kernel distribution schemas (`loadKernelDistributionSchemas`)
|
|
235
|
-
* @param {object} request.lock the unsealed or sealed distribution lock
|
|
236
|
-
* @param {object} request.imageLock the SEALED images lock
|
|
237
|
-
* @param {(repo: string) => {dir: string, base: string}} request.locate repo handle -> checkout
|
|
238
|
-
* @param {(repo: string) => string} request.vendoredCommit the vendored-source pin of a first-party repo
|
|
239
|
-
* @param {object} [request.catalogue] customer mode: the digest-pinned catalogue vendor biomes are taken from
|
|
240
|
-
* @param {string} [request.catalogueDigest] customer mode, a published catalogue: the digest of its artifact; the lock must carry the same one
|
|
241
|
-
* @param {string} [request.catalogueContentDigest] customer mode, catalogue-free: the digest of the catalogue bytes; exclusive with catalogueDigest, the lock must carry the same one
|
|
242
|
-
* @param {readonly string[]} [request.storePublisherAnchorKeys] customer mode: the definition's Store publisher selection (absent = none)
|
|
243
|
-
* @param {Map<string, string>} [request.contentCommits] a candidate edition's recorded override: repo -> the commit its first-party biomes' content is read at
|
|
244
|
-
* @returns {Promise<Map<string, string>>} biome id -> BiomeContentHash
|
|
245
|
-
*/
|
|
246
|
-
export async function computeBiomeContentHashes({ schemas, lock, imageLock, locate, vendoredCommit, catalogue, catalogueDigest, catalogueContentDigest, storePublisherAnchorKeys, sourceFactsById, contentCommits }) {
|
|
247
|
-
if (catalogue !== undefined) {assertLockNamesCatalogue({ schemas, lock, catalogue, catalogueDigest, catalogueContentDigest, storePublisherAnchorKeys });}
|
|
248
|
-
const hashes = new Map();
|
|
249
|
-
for (const biome of lock.biomes) {
|
|
250
|
-
const facts =
|
|
251
|
-
catalogue !== undefined && biome.source === undefined
|
|
252
|
-
? await catalogueFacts({ schemas, biome, imageLock, catalogue })
|
|
253
|
-
: sourceFactsById === undefined
|
|
254
|
-
? await sourceFacts({ schemas, biome, imageLock, locate, vendoredCommit, contentCommits })
|
|
255
|
-
: precomputedFacts(sourceFactsById, biome);
|
|
256
|
-
hashes.set(biome.id, await schemas.computeBiomeContentHash(facts));
|
|
257
|
-
}
|
|
258
|
-
return hashes;
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
/**
|
|
262
|
-
* The source facts of every biome of `lock`, read ONCE: a caller that needs both
|
|
263
|
-
* the content hashes and the tree ids (the develop resolve) passes the result to
|
|
264
|
-
* `sealLock` and `biomeSourceTreeIds` as `sourceFactsById`, instead of each walking
|
|
265
|
-
* every biome's checkout again.
|
|
266
|
-
*
|
|
267
|
-
* @returns {Promise<Map<string, object>>} biome id -> the three source facts
|
|
268
|
-
*/
|
|
269
|
-
export async function readBiomeSourceFacts({ schemas, lock, imageLock, locate, vendoredCommit, contentCommits }) {
|
|
270
|
-
const facts = new Map();
|
|
271
|
-
for (const biome of lock.biomes) {
|
|
272
|
-
facts.set(biome.id, await sourceFacts({ schemas, biome, imageLock, locate, vendoredCommit, contentCommits }));
|
|
273
|
-
}
|
|
274
|
-
return facts;
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
function precomputedFacts(sourceFactsById, biome) {
|
|
278
|
-
const facts = sourceFactsById.get(biome.id);
|
|
279
|
-
if (facts === undefined) {
|
|
280
|
-
throw new BiomeContentHashError(`biome "${biome.id}": the precomputed source facts do not cover it`);
|
|
281
|
-
}
|
|
282
|
-
return facts;
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
/**
|
|
286
|
-
* The git tree id of every biome of a VENDOR offering at its pinned commit, as
|
|
287
|
-
* the catalogue publishes them: `{ [biomeId]: GitTreeId }`, sorted by id.
|
|
288
|
-
* THIS is the writer's source of the catalogue's `sourceTreeIds` (callers:
|
|
289
|
-
* release-catalogue.mjs `releaseCatalogue`, develop-edition-resolve.mjs).
|
|
290
|
-
*/
|
|
291
|
-
export async function biomeSourceTreeIds({ schemas, lock, imageLock, locate, vendoredCommit, sourceFactsById }) {
|
|
292
|
-
const ids = {};
|
|
293
|
-
for (const biome of [...lock.biomes].sort((a, b) => (a.id < b.id ? -1 : a.id > b.id ? 1 : 0))) {
|
|
294
|
-
const facts = sourceFactsById === undefined
|
|
295
|
-
? await sourceFacts({ schemas, biome, imageLock, locate, vendoredCommit })
|
|
296
|
-
: precomputedFacts(sourceFactsById, biome);
|
|
297
|
-
ids[biome.id] = facts.sourceTreeId;
|
|
298
|
-
}
|
|
299
|
-
return ids;
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
/** Seal: the unsealed lock + the recomputed hashes -> the kernel's `sealDistributionLock`. */
|
|
303
|
-
export async function sealLock({ schemas, unsealed, imageLock, locate, vendoredCommit, catalogue, catalogueDigest, catalogueContentDigest, storePublisherAnchorKeys, sourceFactsById, bundleSigners, contentCommits, gitSourcedBundle }) {
|
|
304
|
-
assertLockBundleSigners({ lock: unsealed, selection: bundleSigners, schemas, gitSourcedBundle });
|
|
305
|
-
const hashes = await computeBiomeContentHashes({ schemas, lock: unsealed, imageLock, locate, vendoredCommit, catalogue, catalogueDigest, catalogueContentDigest, storePublisherAnchorKeys, sourceFactsById, contentCommits });
|
|
306
|
-
admitDistributionLock(schemas, unsealed);
|
|
307
|
-
return schemas.sealDistributionLock(unsealed, hashes);
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
/**
|
|
311
|
-
* Verify: recompute every biome's hash and REFUSE a mismatch, naming the biome.
|
|
312
|
-
* The lock's own field is never trusted; a missing or extra biome is a mismatch.
|
|
313
|
-
*/
|
|
314
|
-
export async function verifyBiomeContentHashes({ schemas, lock, imageLock, locate, vendoredCommit, catalogue, catalogueDigest, catalogueContentDigest, storePublisherAnchorKeys, bundleSigners, contentCommits, gitSourcedBundle }) {
|
|
315
|
-
const expected = await computeBiomeContentHashes({ schemas, lock, imageLock, locate, vendoredCommit, catalogue, catalogueDigest, catalogueContentDigest, storePublisherAnchorKeys, contentCommits });
|
|
316
|
-
assertLockBundleSigners({ lock, selection: bundleSigners, schemas, gitSourcedBundle });
|
|
317
|
-
const mismatched = lock.biomes
|
|
318
|
-
.filter((biome) => biome.biomeContentHash !== expected.get(biome.id))
|
|
319
|
-
.map((biome) => `${biome.id} (lock ${String(biome.biomeContentHash)}, recomputed ${expected.get(biome.id)})`);
|
|
320
|
-
if (mismatched.length > 0) {
|
|
321
|
-
throw new BiomeContentHashError(
|
|
322
|
-
`distribution "${lock.distributionId}": biomeContentHash does not match its inputs for ${mismatched.join('; ')}` +
|
|
323
|
-
(catalogue === undefined ? '' : `; ${CATALOGUE_AUTHORITY_NOTE}`),
|
|
324
|
-
);
|
|
325
|
-
}
|
|
326
|
-
return expected;
|
|
327
|
-
}
|
|
@@ -1,180 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
// build-biome-index — walk every `xema-biome.json` in the monorepo and emit the
|
|
3
|
-
// global biome index (`distributions/biome-index.json`) that the distribution
|
|
4
|
-
// resolver reads. The index is the single source of truth for "which biomes
|
|
5
|
-
// exist, at what tier/target/origin/version, and what they require". It carries
|
|
6
|
-
// PACKAGING-relevant fields only.
|
|
7
|
-
//
|
|
8
|
-
// Usage:
|
|
9
|
-
// node build-biome-index.mjs [--check] [--source published|workspace] [--unpinned]
|
|
10
|
-
//
|
|
11
|
-
// THE COMMITTED PINS ARE THE AUTHORITY, and this index is a CONSUMER of them.
|
|
12
|
-
// Each repository's commit comes from `runtime-image-source-index.json`'s
|
|
13
|
-
// `repositoryPins`; nothing here asks a repository what its newest built commit
|
|
14
|
-
// is. `--unpinned` is the one way to reach a live resolution and it is a POLICY
|
|
15
|
-
// operation — see `pinAuthority` below.
|
|
16
|
-
//
|
|
17
|
-
// Fail-fast on any manifest missing id/scope/target or with an unknown tier
|
|
18
|
-
// (see manifestToIndexEntry). mjs tooling — clocks are fine; the index itself
|
|
19
|
-
// carries no timestamp so it is reproducible.
|
|
20
|
-
|
|
21
|
-
import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
22
|
-
import { dirname } from 'node:path';
|
|
23
|
-
|
|
24
|
-
import { WorkspaceRoot, biomeIndexPath, configureEditionWorkspaceFromProcess, isEntryModule, platformServiceIndexPath } from './edition-workspace.mjs';
|
|
25
|
-
import {
|
|
26
|
-
buildBiomeIndex,
|
|
27
|
-
distributionBiomeSourceRepositories,
|
|
28
|
-
loadKernelDistributionSchemas,
|
|
29
|
-
serializeJson,
|
|
30
|
-
} from './lib.mjs';
|
|
31
|
-
import { commandForSelf } from './remedy-command.mjs';
|
|
32
|
-
import {
|
|
33
|
-
DistributionSourceMode,
|
|
34
|
-
committedRepositoryPins,
|
|
35
|
-
createPinnedSourceAuthority,
|
|
36
|
-
createSourceAuthority,
|
|
37
|
-
parseSourceModeArgs,
|
|
38
|
-
} from './source-authority.mjs';
|
|
39
|
-
|
|
40
|
-
if (isEntryModule(import.meta.url)) {
|
|
41
|
-
configureEditionWorkspaceFromProcess([WorkspaceRoot.Data, WorkspaceRoot.Sources, WorkspaceRoot.Kernel]);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* WHY THIS INDEX READS THE PINS INSTEAD OF RESOLVING REPOSITORIES ITSELF.
|
|
46
|
-
*
|
|
47
|
-
* This index and `runtime-image-source-index.json` used to be derived from the
|
|
48
|
-
* same fact and DERIVE IT SEPARATELY: each called `commitForRepository`, which
|
|
49
|
-
* asks the world a live question whose answer moves whenever a build lands.
|
|
50
|
-
* `resolve-images` refuses any disagreement between them — it re-reads each
|
|
51
|
-
* biome manifest at the RUNTIME pin and fails with "sourceManifestHash does not
|
|
52
|
-
* match" — so two derivations minutes apart could produce two artifacts that
|
|
53
|
-
* cannot resolve together.
|
|
54
|
-
*
|
|
55
|
-
* A `--repo <repository>` scope was added to narrow the second derivation to
|
|
56
|
-
* one repository. It narrowed the COLLATERAL and left the RACE: the scoped
|
|
57
|
-
* repository was still resolved live, so a build landing between
|
|
58
|
-
* `build-runtime-image-source-index --repo X` and `build-biome-index --repo X`
|
|
59
|
-
* split the two artifacts on exactly the repository the operator was refreshing.
|
|
60
|
-
*
|
|
61
|
-
* So the scope is gone and the derivation with it. There is ONE artifact whose
|
|
62
|
-
* job is to decide what commit a repository is at — the runtime image source
|
|
63
|
-
* index — and everything downstream reads its record. A scoped refresh of this
|
|
64
|
-
* index is not a mode here any more: it is what you GET, because advancing one
|
|
65
|
-
* pin is the only thing that can move one repository's entries.
|
|
66
|
-
*
|
|
67
|
-
* `--unpinned` is the escape, and it is a POLICY operation rather than a
|
|
68
|
-
* correctness one. Two cases need it and no third has appeared:
|
|
69
|
-
*
|
|
70
|
-
* - BOOTSTRAP — a data root with no committed pins at all. A repository
|
|
71
|
-
* JOINING a data root that has pins is not this case: it has no pin yet,
|
|
72
|
-
* and `createPinnedSourceAuthority` refuses it here rather than resolving
|
|
73
|
-
* it live. The join is `build-runtime-image-source-index.mjs
|
|
74
|
-
* --trusted-write --repo <repository> [--at <sha>]`, which resolves the
|
|
75
|
-
* joining repository ONCE and writes this index, the platform-service
|
|
76
|
-
* index and the runtime index from that one pin set, every committed pin
|
|
77
|
-
* kept (`buildIndexesWithJoiningRepository`). A `--repo` here would
|
|
78
|
-
* resolve it a second time: the race above.
|
|
79
|
-
* - WORKSPACE — `--source workspace` snapshots a dirty local tree, which has
|
|
80
|
-
* no pin by construction. It therefore IMPLIES `--unpinned`, rather than
|
|
81
|
-
* making the operator state both.
|
|
82
|
-
*/
|
|
83
|
-
function parseUnpinned(argv) {
|
|
84
|
-
const index = argv.indexOf('--unpinned');
|
|
85
|
-
if (index === -1) {return { unpinned: false, remaining: argv };}
|
|
86
|
-
return {
|
|
87
|
-
unpinned: true,
|
|
88
|
-
remaining: [...argv.slice(0, index), ...argv.slice(index + 1)],
|
|
89
|
-
};
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
async function main() {
|
|
93
|
-
const { unpinned: unpinnedFlag, remaining: afterUnpinned } = parseUnpinned(
|
|
94
|
-
process.argv.slice(2),
|
|
95
|
-
);
|
|
96
|
-
const { mode, remaining } = parseSourceModeArgs(afterUnpinned);
|
|
97
|
-
const check = remaining.includes('--check');
|
|
98
|
-
if (remaining.some((argument) => argument !== '--check')) {
|
|
99
|
-
throw new Error(
|
|
100
|
-
'usage: build-biome-index.mjs [--check] [--source published|workspace] ' +
|
|
101
|
-
'[--unpinned]',
|
|
102
|
-
);
|
|
103
|
-
}
|
|
104
|
-
// A workspace snapshot has no pin and never will — see `parseUnpinned`.
|
|
105
|
-
const unpinned = unpinnedFlag || mode === DistributionSourceMode.Workspace;
|
|
106
|
-
const schemas = await loadKernelDistributionSchemas();
|
|
107
|
-
const platformServiceIndex = schemas.parsePlatformServiceSourceIndex(
|
|
108
|
-
JSON.parse(readFileSync(platformServiceIndexPath(), 'utf8')),
|
|
109
|
-
);
|
|
110
|
-
const sourceRepositories = distributionBiomeSourceRepositories();
|
|
111
|
-
const sourceAuthority = unpinned
|
|
112
|
-
? createSourceAuthority({
|
|
113
|
-
mode,
|
|
114
|
-
knownRepositories: sourceRepositories.map(({ repo }) => repo),
|
|
115
|
-
})
|
|
116
|
-
: // NO DELEGATE, deliberately. A consumer artifact has nothing to resolve,
|
|
117
|
-
// and passing a live authority it "will not use" makes that a claim about
|
|
118
|
-
// this call site rather than a property of the object. Without one, any
|
|
119
|
-
// repository missing from the record REFUSES by name instead of quietly
|
|
120
|
-
// resolving to whatever its tip happens to be today.
|
|
121
|
-
createPinnedSourceAuthority({ pins: committedRepositoryPins() });
|
|
122
|
-
const index = await buildBiomeIndex(
|
|
123
|
-
platformServiceIndex,
|
|
124
|
-
sourceRepositories,
|
|
125
|
-
sourceAuthority,
|
|
126
|
-
);
|
|
127
|
-
const serialized = serializeJson(index);
|
|
128
|
-
|
|
129
|
-
if (check) {
|
|
130
|
-
let committed;
|
|
131
|
-
try {
|
|
132
|
-
committed = readFileSync(biomeIndexPath(), 'utf8');
|
|
133
|
-
} catch {
|
|
134
|
-
console.error(
|
|
135
|
-
`[dist:index --check] ${biomeIndexPath()} does not exist. Run \`${commandForSelf(import.meta.url)}\`.`,
|
|
136
|
-
);
|
|
137
|
-
process.exit(1);
|
|
138
|
-
}
|
|
139
|
-
if (committed !== serialized) {
|
|
140
|
-
const regenerateCommand =
|
|
141
|
-
mode === DistributionSourceMode.Workspace
|
|
142
|
-
? `${commandForSelf(import.meta.url, '--source', 'workspace')} (local-only output; do not publish it)`
|
|
143
|
-
: commandForSelf(import.meta.url);
|
|
144
|
-
// WHICH AUTHORITY DISAGREED is the first thing the reader needs, because
|
|
145
|
-
// the two have different remedies: a PINNED divergence means the index
|
|
146
|
-
// does not match the pins and regenerating fixes it, while an UNPINNED one
|
|
147
|
-
// means the fleet has moved and regenerating MOVES EVERY PIN. Saying which
|
|
148
|
-
// ran is what keeps the second from being done by reflex.
|
|
149
|
-
console.error(
|
|
150
|
-
`[dist:index --check] authority: ${
|
|
151
|
-
unpinned
|
|
152
|
-
? 'UNPINNED — every repository was resolved LIVE, so this verdict ' +
|
|
153
|
-
'is about the fleet right now and regenerating will move pins'
|
|
154
|
-
: `PINNED — ${
|
|
155
|
-
committedRepositoryPins().length
|
|
156
|
-
} committed pin(s), no live resolution`
|
|
157
|
-
}.`,
|
|
158
|
-
);
|
|
159
|
-
console.error(
|
|
160
|
-
`[dist:index --check] biome-index.json is out of date. Run \`${regenerateCommand}\`.`,
|
|
161
|
-
);
|
|
162
|
-
process.exit(1);
|
|
163
|
-
}
|
|
164
|
-
console.log(
|
|
165
|
-
`[dist:index --check] biome-index.json is up to date (${index.length} biomes).`,
|
|
166
|
-
);
|
|
167
|
-
return;
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
mkdirSync(dirname(biomeIndexPath()), { recursive: true });
|
|
171
|
-
writeFileSync(biomeIndexPath(), serialized);
|
|
172
|
-
console.log(
|
|
173
|
-
`[dist:index] wrote ${biomeIndexPath()} (${index.length} biomes).`,
|
|
174
|
-
);
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
main().catch((error) => {
|
|
178
|
-
console.error(`[dist:index] ${error.message}`);
|
|
179
|
-
process.exitCode = 1;
|
|
180
|
-
});
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
// Release-lane completeness: with a v2 ledger, every resolved subject's
|
|
2
|
-
// `imageRef:contentHash` must be published with every platform its edition
|
|
3
|
-
// requires. Seal stays the final registry check; this refuses earlier, and
|
|
4
|
-
// names everything missing in one error.
|
|
5
|
-
import { platformIdentity } from './verify-image-platforms.mjs';
|
|
6
|
-
|
|
7
|
-
export class BuildLedgerIncompleteError extends Error {
|
|
8
|
-
constructor(distributionId, missing) {
|
|
9
|
-
const lines = missing.map(
|
|
10
|
-
(entry) =>
|
|
11
|
-
` ${entry.imageRef}:${entry.contentHash} lacks ${entry.platform} (repo ${entry.repo} pinned at ${entry.sourceCommit})`,
|
|
12
|
-
);
|
|
13
|
-
super(
|
|
14
|
-
`edition "${distributionId}" names ${missing.length} image coordinate(s) the build ledger ` +
|
|
15
|
-
`does not show published with every required platform:\n${lines.join('\n')}\n` +
|
|
16
|
-
`Build or re-project those images, or pin a repository commit whose images are complete.`,
|
|
17
|
-
);
|
|
18
|
-
this.name = 'BuildLedgerIncompleteError';
|
|
19
|
-
this.missing = missing;
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export class BuildLedgerMissingError extends Error {
|
|
24
|
-
constructor(distributionId, expectedAt) {
|
|
25
|
-
super(
|
|
26
|
-
`edition "${distributionId}" is resolved on the release lane, which needs the build ledger, but ` +
|
|
27
|
-
`${expectedAt} does not exist. Project the ledger into the data root; an absent ledger is not ` +
|
|
28
|
-
`read as "nothing to check".`,
|
|
29
|
-
);
|
|
30
|
-
this.name = 'BuildLedgerMissingError';
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* `ledger` is the parsed ledger (`readBuildLedger`); null means it is absent and is REFUSED.
|
|
36
|
-
* A v1 ledger records no per-image facts, so nothing is checked (transitional, like the v1 parser branch).
|
|
37
|
-
*/
|
|
38
|
-
export function assertBuildLedgerComplete({
|
|
39
|
-
ledger,
|
|
40
|
-
distributionId,
|
|
41
|
-
subjects,
|
|
42
|
-
requiredPlatforms,
|
|
43
|
-
expectedAt,
|
|
44
|
-
}) {
|
|
45
|
-
if (ledger === null) {throw new BuildLedgerMissingError(distributionId, expectedAt);}
|
|
46
|
-
if (ledger.schemaVersion !== 2) {return;}
|
|
47
|
-
const required = requiredPlatforms.map(platformIdentity);
|
|
48
|
-
const missing = [];
|
|
49
|
-
for (const subject of subjects) {
|
|
50
|
-
const repository = ledger.repositories[subject.repo];
|
|
51
|
-
const published =
|
|
52
|
-
repository?.images?.[subject.imageRef]?.contentHashes?.[subject.contentHash];
|
|
53
|
-
const have = new Set(published?.platforms ?? []);
|
|
54
|
-
for (const platform of required) {
|
|
55
|
-
if (!have.has(platform)) {
|
|
56
|
-
missing.push({
|
|
57
|
-
repo: subject.repo,
|
|
58
|
-
sourceCommit: subject.sourceCommit,
|
|
59
|
-
imageRef: subject.imageRef,
|
|
60
|
-
contentHash: subject.contentHash,
|
|
61
|
-
platform,
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
if (missing.length > 0) {throw new BuildLedgerIncompleteError(distributionId, missing);}
|
|
67
|
-
}
|