@xemahq/xema 0.59.1 → 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 -1423
- 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 -2351
- 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,439 +0,0 @@
|
|
|
1
|
-
// Grades the checkouts the evidence verifier reads from: the data root and the
|
|
2
|
-
// editions root. Each is judged to ONE standard — a trusted git binary, a
|
|
3
|
-
// location no other user can write, an exact HEAD commit, every file the
|
|
4
|
-
// verifier reads bound byte-for-byte to its HEAD blob, and no untrusted change
|
|
5
|
-
// anywhere in the repository (the commit is what the completeness signature
|
|
6
|
-
// binds to, so a checkout that is not exactly that commit is not that commit).
|
|
7
|
-
//
|
|
8
|
-
// Nothing here knows where this module sits: the verifier's own integrity is
|
|
9
|
-
// bound by the data-root pin of its bundle (`evidence-trust-policy.mjs`), not by
|
|
10
|
-
// a checkout of its source.
|
|
11
|
-
|
|
12
|
-
import { execFileSync } from 'node:child_process';
|
|
13
|
-
import { lstatSync, readFileSync, realpathSync } from 'node:fs';
|
|
14
|
-
import { dirname, isAbsolute, relative, resolve, sep } from 'node:path';
|
|
15
|
-
|
|
16
|
-
import { COMMIT_PATTERN } from './evidence-grammars.mjs';
|
|
17
|
-
import {
|
|
18
|
-
assertPreparedExecutable,
|
|
19
|
-
exactExecutableOutput,
|
|
20
|
-
prepareRootOwnedPinnedExecutable,
|
|
21
|
-
} from './trusted-executable.mjs';
|
|
22
|
-
|
|
23
|
-
const GIT_VERSION_PATTERN = /^git version (\d+\.\d+\.\d+)(?: .*)?\n?$/;
|
|
24
|
-
const GIT_ENV = Object.freeze({
|
|
25
|
-
GIT_CONFIG_NOSYSTEM: '1',
|
|
26
|
-
GIT_CONFIG_GLOBAL: '/dev/null',
|
|
27
|
-
GIT_TERMINAL_PROMPT: '0',
|
|
28
|
-
GIT_NO_REPLACE_OBJECTS: '1',
|
|
29
|
-
GIT_OPTIONAL_LOCKS: '0',
|
|
30
|
-
GIT_PAGER: 'cat',
|
|
31
|
-
LC_ALL: 'C',
|
|
32
|
-
PATH: '/usr/bin:/bin',
|
|
33
|
-
});
|
|
34
|
-
const GIT_SAFE_CONFIG = Object.freeze([
|
|
35
|
-
'-c',
|
|
36
|
-
'core.fsmonitor=false',
|
|
37
|
-
'-c',
|
|
38
|
-
'core.hooksPath=/dev/null',
|
|
39
|
-
'-c',
|
|
40
|
-
'core.attributesFile=/dev/null',
|
|
41
|
-
'--no-pager',
|
|
42
|
-
]);
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* The largest output one git call here may return. Node's default `maxBuffer`
|
|
46
|
-
* is 1 MiB, and a graded file can be larger (the Sigstore trusted root is up to
|
|
47
|
-
* 8 MiB); with the default the verifier could not bind it to its HEAD blob and
|
|
48
|
-
* would fail with `spawnSync git ENOBUFS`, which names neither the file nor the
|
|
49
|
-
* limit. 64 MiB is a bound, not a hope: far above any file graded here and far
|
|
50
|
-
* below anything that would matter to the host.
|
|
51
|
-
*/
|
|
52
|
-
const MAX_GIT_OUTPUT_BYTES = 64 * 1024 * 1024;
|
|
53
|
-
|
|
54
|
-
function git(trustedGit, directory, args, encoding = 'utf8') {
|
|
55
|
-
const gitBinary = assertPreparedExecutable(trustedGit, 'git');
|
|
56
|
-
const output = execFileSync(
|
|
57
|
-
gitBinary,
|
|
58
|
-
[...GIT_SAFE_CONFIG, '-C', directory, ...args],
|
|
59
|
-
{
|
|
60
|
-
encoding,
|
|
61
|
-
stdio: ['ignore', 'pipe', 'pipe'],
|
|
62
|
-
env: GIT_ENV,
|
|
63
|
-
maxBuffer: MAX_GIT_OUTPUT_BYTES,
|
|
64
|
-
},
|
|
65
|
-
);
|
|
66
|
-
assertPreparedExecutable(trustedGit, 'git');
|
|
67
|
-
return output;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
export function prepareTrustedGitBinary({ gitBinary, policy }) {
|
|
71
|
-
return prepareRootOwnedPinnedExecutable({
|
|
72
|
-
executablePath: gitBinary,
|
|
73
|
-
trustedDigests: policy.trustedGitBinaryDigests,
|
|
74
|
-
label: 'git',
|
|
75
|
-
verifyVersion(privateBinary) {
|
|
76
|
-
const output = exactExecutableOutput(privateBinary, ['--version'], {
|
|
77
|
-
env: GIT_ENV,
|
|
78
|
-
timeout: 10_000,
|
|
79
|
-
});
|
|
80
|
-
const match = GIT_VERSION_PATTERN.exec(output);
|
|
81
|
-
if (!match) {
|
|
82
|
-
throw new Error('Git version output is not exact');
|
|
83
|
-
}
|
|
84
|
-
if (match[1] !== policy.gitVersion) {
|
|
85
|
-
throw new Error(
|
|
86
|
-
`Git version does not match pinned ${policy.gitVersion}`,
|
|
87
|
-
);
|
|
88
|
-
}
|
|
89
|
-
},
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
function assertContained(root, candidate, label, within) {
|
|
94
|
-
const rel = relative(root, candidate);
|
|
95
|
-
if (rel === '..' || rel.startsWith(`..${sep}`) || isAbsolute(rel)) {
|
|
96
|
-
throw new Error(`${label} is outside ${within}`);
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
/**
|
|
101
|
-
* `path` and every ancestor up to `/` must be owned by root or the current user
|
|
102
|
-
* and not group/world writable. The refusal names the offending directory, its
|
|
103
|
-
* mode and its owner: the fault is almost always one specific ancestor, and the
|
|
104
|
-
* reader cannot otherwise tell which, nor whether it failed on ownership or on
|
|
105
|
-
* the write bits.
|
|
106
|
-
*/
|
|
107
|
-
export function assertProtectedPathAncestry(path, label) {
|
|
108
|
-
const currentUid =
|
|
109
|
-
typeof process.getuid === 'function' ? process.getuid() : undefined;
|
|
110
|
-
let current = realpathSync(path);
|
|
111
|
-
while (true) {
|
|
112
|
-
const stats = lstatSync(current);
|
|
113
|
-
const foreignOwner =
|
|
114
|
-
currentUid !== undefined && stats.uid !== 0 && stats.uid !== currentUid;
|
|
115
|
-
const groupOrWorldWritable = (stats.mode & 0o022) !== 0;
|
|
116
|
-
if (foreignOwner || groupOrWorldWritable) {
|
|
117
|
-
throw new Error(
|
|
118
|
-
`${label} and every ancestor must be verifier/root-owned and not group/world writable — ` +
|
|
119
|
-
`${current} is ${foreignOwner ? `owned by uid ${stats.uid} (running as uid ${currentUid})` : `mode ${(stats.mode & 0o7777).toString(8).padStart(4, '0')}`}`,
|
|
120
|
-
);
|
|
121
|
-
}
|
|
122
|
-
if (current === '/') {break;}
|
|
123
|
-
current = dirname(current);
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
function dirtyPaths(trustedGit, repositoryRoot) {
|
|
128
|
-
const records = git(
|
|
129
|
-
trustedGit,
|
|
130
|
-
repositoryRoot,
|
|
131
|
-
['status', '--porcelain=v1', '-z', '--untracked-files=all'],
|
|
132
|
-
'buffer',
|
|
133
|
-
)
|
|
134
|
-
.toString('utf8')
|
|
135
|
-
.split('\0')
|
|
136
|
-
.filter(Boolean);
|
|
137
|
-
const entries = [];
|
|
138
|
-
for (let index = 0; index < records.length; index += 1) {
|
|
139
|
-
const record = records[index];
|
|
140
|
-
const status = record.slice(0, 2);
|
|
141
|
-
entries.push({ status, path: record.slice(3) });
|
|
142
|
-
if (status[0] === 'R' || status[0] === 'C') {
|
|
143
|
-
entries.push({ status, path: records[index + 1] });
|
|
144
|
-
index += 1;
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
return entries;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
function assertSafeWorktreeFile(path, expectedMode, label) {
|
|
151
|
-
const stats = lstatSync(path);
|
|
152
|
-
if (!stats.isFile() || stats.isSymbolicLink()) {
|
|
153
|
-
throw new Error(`${label} must be a no-follow regular file`);
|
|
154
|
-
}
|
|
155
|
-
if (typeof process.getuid === 'function' && stats.uid !== process.getuid()) {
|
|
156
|
-
throw new Error(`${label} is not owned by the current user`);
|
|
157
|
-
}
|
|
158
|
-
const actualMode = stats.mode & 0o777;
|
|
159
|
-
if (actualMode !== expectedMode || (actualMode & 0o022) !== 0) {
|
|
160
|
-
throw new Error(
|
|
161
|
-
`${label} must have exact mode ${expectedMode.toString(8)}`,
|
|
162
|
-
);
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
function parseTreeRecord(record, expectedPath, label) {
|
|
167
|
-
const match = /^(100644|100755) blob ([a-f0-9]{40,64})\t(.+)$/.exec(record);
|
|
168
|
-
if (!match || match[3] !== expectedPath) {
|
|
169
|
-
throw new Error(
|
|
170
|
-
`${label} "${expectedPath}" is absent or has an untrusted HEAD mode`,
|
|
171
|
-
);
|
|
172
|
-
}
|
|
173
|
-
return { mode: match[1], objectId: match[2] };
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
function assertNormalIndexFlags(trustedGit, repositoryRoot, path, label) {
|
|
177
|
-
const tagged = git(
|
|
178
|
-
trustedGit,
|
|
179
|
-
repositoryRoot,
|
|
180
|
-
['ls-files', '--stage', '-v', '-z', '--', path],
|
|
181
|
-
'buffer',
|
|
182
|
-
)
|
|
183
|
-
.toString('utf8')
|
|
184
|
-
.split('\0')
|
|
185
|
-
.filter(Boolean);
|
|
186
|
-
if (tagged.length !== 1 || !tagged[0].startsWith('H ')) {
|
|
187
|
-
throw new Error(
|
|
188
|
-
`${label} "${path}" has skip-worktree, assume-unchanged, or unexpected index state`,
|
|
189
|
-
);
|
|
190
|
-
}
|
|
191
|
-
const debug = git(trustedGit, repositoryRoot, [
|
|
192
|
-
'ls-files',
|
|
193
|
-
'--debug',
|
|
194
|
-
'--',
|
|
195
|
-
path,
|
|
196
|
-
]);
|
|
197
|
-
const flags = /\bflags:\s+(\d+)\s*$/m.exec(debug);
|
|
198
|
-
if (!flags || flags[1] !== '0') {
|
|
199
|
-
throw new Error(`${label} "${path}" has non-zero Git index flags`);
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
/**
|
|
204
|
-
* `path` is a repository-root-relative POSIX path. It must be exactly one HEAD
|
|
205
|
-
* blob, carry no index flags, and match its HEAD bytes and mode in the working
|
|
206
|
-
* tree. `label` names what the path IS in every refusal, so a reader can tell
|
|
207
|
-
* which checkout refused.
|
|
208
|
-
*/
|
|
209
|
-
function assertHeadBoundPath(trustedGit, repositoryRoot, path, label) {
|
|
210
|
-
const records = git(
|
|
211
|
-
trustedGit,
|
|
212
|
-
repositoryRoot,
|
|
213
|
-
['ls-tree', '-z', 'HEAD', '--', path],
|
|
214
|
-
'buffer',
|
|
215
|
-
)
|
|
216
|
-
.toString('utf8')
|
|
217
|
-
.split('\0')
|
|
218
|
-
.filter(Boolean);
|
|
219
|
-
if (records.length !== 1) {
|
|
220
|
-
throw new Error(`${label} "${path}" is not one exact HEAD blob`);
|
|
221
|
-
}
|
|
222
|
-
const { mode, objectId } = parseTreeRecord(records[0], path, label);
|
|
223
|
-
assertNormalIndexFlags(trustedGit, repositoryRoot, path, label);
|
|
224
|
-
|
|
225
|
-
const absolutePath = resolve(repositoryRoot, path);
|
|
226
|
-
assertContained(
|
|
227
|
-
repositoryRoot,
|
|
228
|
-
absolutePath,
|
|
229
|
-
`${label} "${path}"`,
|
|
230
|
-
`the checkout ${repositoryRoot}`,
|
|
231
|
-
);
|
|
232
|
-
assertSafeWorktreeFile(
|
|
233
|
-
absolutePath,
|
|
234
|
-
mode === '100755' ? 0o755 : 0o644,
|
|
235
|
-
`${label} "${path}"`,
|
|
236
|
-
);
|
|
237
|
-
const headBytes = git(
|
|
238
|
-
trustedGit,
|
|
239
|
-
repositoryRoot,
|
|
240
|
-
['cat-file', 'blob', objectId],
|
|
241
|
-
'buffer',
|
|
242
|
-
);
|
|
243
|
-
if (!readFileSync(absolutePath).equals(headBytes)) {
|
|
244
|
-
throw new Error(`${label} "${path}" does not match its HEAD blob`);
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
/**
|
|
249
|
-
* Locate the Git checkout a root sits in. Locating it is separate from judging
|
|
250
|
-
* it — see {@link assertTrustedCheckoutLocation}.
|
|
251
|
-
*/
|
|
252
|
-
export function locateCheckout({ root, trustedGit, label }) {
|
|
253
|
-
assertPreparedExecutable(trustedGit, 'git');
|
|
254
|
-
let repositoryRoot;
|
|
255
|
-
try {
|
|
256
|
-
repositoryRoot = realpathSync(
|
|
257
|
-
git(trustedGit, root, ['rev-parse', '--show-toplevel']).trim(),
|
|
258
|
-
);
|
|
259
|
-
} catch {
|
|
260
|
-
throw new Error(`${label} verification requires a trusted Git checkout`);
|
|
261
|
-
}
|
|
262
|
-
const gitDirectory = realpathSync(
|
|
263
|
-
git(trustedGit, repositoryRoot, ['rev-parse', '--absolute-git-dir']).trim(),
|
|
264
|
-
);
|
|
265
|
-
return { repositoryRoot, gitDirectory };
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
/**
|
|
269
|
-
* WHERE the checkout is: no ancestor may be writable by anyone but its owner or
|
|
270
|
-
* root, or another local process could swap the inputs between verification and
|
|
271
|
-
* use.
|
|
272
|
-
*
|
|
273
|
-
* This is a property of the MACHINE, not of the repository's contents, and the
|
|
274
|
-
* two are deliberately separately callable and separately tested: fused, every
|
|
275
|
-
* content test depended on the ambient environment (a runner whose `/home/<user>`
|
|
276
|
-
* is 0777 failed them all) and this rule, the one with real security weight, had
|
|
277
|
-
* no direct test. There is deliberately NO option to skip it in
|
|
278
|
-
* {@link gradeTrustedCheckout}.
|
|
279
|
-
*/
|
|
280
|
-
export function assertTrustedCheckoutLocation(
|
|
281
|
-
{ repositoryRoot, gitDirectory },
|
|
282
|
-
label,
|
|
283
|
-
) {
|
|
284
|
-
assertProtectedPathAncestry(repositoryRoot, `${label} checkout`);
|
|
285
|
-
assertProtectedPathAncestry(gitDirectory, `${label} Git directory`);
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
/**
|
|
289
|
-
* WHAT the checkout contains: an exact HEAD, every required path bound to its
|
|
290
|
-
* HEAD blob, and no untrusted working-tree change anywhere in the repository.
|
|
291
|
-
*
|
|
292
|
-
* `requirements` are `{root, label, requiredPaths}`: each `root` sits anywhere
|
|
293
|
-
* inside `repositoryRoot` and each required path is relative to its root, so it
|
|
294
|
-
* is re-rooted to the repository before git is asked. A path that resolves
|
|
295
|
-
* outside its root is refused BY NAME before git runs.
|
|
296
|
-
*/
|
|
297
|
-
export function verifyCheckoutContents({
|
|
298
|
-
repositoryRoot,
|
|
299
|
-
requirements,
|
|
300
|
-
trustedGit,
|
|
301
|
-
expectedCommit,
|
|
302
|
-
}) {
|
|
303
|
-
const commit = git(trustedGit, repositoryRoot, [
|
|
304
|
-
'rev-parse',
|
|
305
|
-
'--verify',
|
|
306
|
-
'HEAD^{commit}',
|
|
307
|
-
]).trim();
|
|
308
|
-
if (!COMMIT_PATTERN.test(commit)) {
|
|
309
|
-
throw new Error(`${repositoryRoot} HEAD is not an exact Git commit`);
|
|
310
|
-
}
|
|
311
|
-
if (expectedCommit !== undefined && commit !== expectedCommit) {
|
|
312
|
-
throw new Error(`${repositoryRoot} HEAD changed during verification`);
|
|
313
|
-
}
|
|
314
|
-
for (const { root, label, requiredPaths } of requirements) {
|
|
315
|
-
if (requiredPaths.length === 0) {
|
|
316
|
-
throw new Error(
|
|
317
|
-
`the ${label} checkout is graded for at least one path; none was named`,
|
|
318
|
-
);
|
|
319
|
-
}
|
|
320
|
-
for (const requiredPath of requiredPaths) {
|
|
321
|
-
const absolutePath = resolve(root, requiredPath);
|
|
322
|
-
assertContained(
|
|
323
|
-
root,
|
|
324
|
-
absolutePath,
|
|
325
|
-
`${label} path "${requiredPath}"`,
|
|
326
|
-
`the ${label} ${root}`,
|
|
327
|
-
);
|
|
328
|
-
assertHeadBoundPath(
|
|
329
|
-
trustedGit,
|
|
330
|
-
repositoryRoot,
|
|
331
|
-
relative(repositoryRoot, absolutePath).split(sep).join('/'),
|
|
332
|
-
label,
|
|
333
|
-
);
|
|
334
|
-
}
|
|
335
|
-
}
|
|
336
|
-
const unexpected = dirtyPaths(trustedGit, repositoryRoot).map(
|
|
337
|
-
(entry) => `${entry.status} ${entry.path}`,
|
|
338
|
-
);
|
|
339
|
-
if (unexpected.length > 0) {
|
|
340
|
-
throw new Error(
|
|
341
|
-
`checkout ${repositoryRoot} has untrusted source changes: ${unexpected.join(', ')}`,
|
|
342
|
-
);
|
|
343
|
-
}
|
|
344
|
-
return { repositoryRoot, commit };
|
|
345
|
-
}
|
|
346
|
-
|
|
347
|
-
/**
|
|
348
|
-
* Locate, judge the location of, and grade the contents of the checkout one
|
|
349
|
-
* root sits in. `root` and `requiredPaths` are as in {@link verifyCheckoutContents}.
|
|
350
|
-
*/
|
|
351
|
-
export function gradeTrustedCheckout({
|
|
352
|
-
root,
|
|
353
|
-
requiredPaths,
|
|
354
|
-
label,
|
|
355
|
-
trustedGit,
|
|
356
|
-
expectedCommit,
|
|
357
|
-
}) {
|
|
358
|
-
const canonicalRoot = realpathSync(root);
|
|
359
|
-
const location = locateCheckout({ root: canonicalRoot, trustedGit, label });
|
|
360
|
-
assertTrustedCheckoutLocation(location, label);
|
|
361
|
-
return verifyCheckoutContents({
|
|
362
|
-
repositoryRoot: location.repositoryRoot,
|
|
363
|
-
requirements: [{ root: canonicalRoot, label, requiredPaths }],
|
|
364
|
-
trustedGit,
|
|
365
|
-
expectedCommit,
|
|
366
|
-
});
|
|
367
|
-
}
|
|
368
|
-
|
|
369
|
-
/**
|
|
370
|
-
* Grade several roots, each repository ONCE: roots in the same repository are
|
|
371
|
-
* graded together under one HEAD and one clean-tree check. Returns a Map from
|
|
372
|
-
* each (canonical) root to `{repositoryRoot, commit}`. `expected` is an earlier
|
|
373
|
-
* result of this function; passing it demands every HEAD is unchanged.
|
|
374
|
-
*/
|
|
375
|
-
export function gradeTrustedCheckouts({ grades, trustedGit, expected }) {
|
|
376
|
-
const byRepository = new Map();
|
|
377
|
-
for (const { root, label, requiredPaths } of grades) {
|
|
378
|
-
const canonicalRoot = realpathSync(root);
|
|
379
|
-
const location = locateCheckout({ root: canonicalRoot, trustedGit, label });
|
|
380
|
-
const group = byRepository.get(location.repositoryRoot) ?? {
|
|
381
|
-
location,
|
|
382
|
-
labels: [],
|
|
383
|
-
requirements: [],
|
|
384
|
-
};
|
|
385
|
-
group.labels.push(label);
|
|
386
|
-
group.requirements.push({ root: canonicalRoot, label, requiredPaths });
|
|
387
|
-
byRepository.set(location.repositoryRoot, group);
|
|
388
|
-
}
|
|
389
|
-
// A re-grade covers exactly the roots first graded: a root the first grade
|
|
390
|
-
// never saw has no HEAD to be held to, and is refused rather than re-graded
|
|
391
|
-
// unchecked.
|
|
392
|
-
if (expected !== undefined) {
|
|
393
|
-
const regraded = new Set(
|
|
394
|
-
[...byRepository.values()].flatMap((group) => group.requirements.map(({ root }) => root)),
|
|
395
|
-
);
|
|
396
|
-
for (const root of regraded) {
|
|
397
|
-
if (typeof expected.get(root)?.commit !== 'string') {
|
|
398
|
-
throw new Error(`${root} was not graded first, so its HEAD cannot be held unchanged`);
|
|
399
|
-
}
|
|
400
|
-
}
|
|
401
|
-
for (const root of expected.keys()) {
|
|
402
|
-
if (!regraded.has(root)) {
|
|
403
|
-
throw new Error(`${root} was graded first and is missing from the re-grade`);
|
|
404
|
-
}
|
|
405
|
-
}
|
|
406
|
-
}
|
|
407
|
-
const result = new Map();
|
|
408
|
-
for (const [repositoryRoot, group] of byRepository) {
|
|
409
|
-
assertTrustedCheckoutLocation(group.location, group.labels.join(' + '));
|
|
410
|
-
const graded = verifyCheckoutContents({
|
|
411
|
-
repositoryRoot,
|
|
412
|
-
requirements: group.requirements,
|
|
413
|
-
trustedGit,
|
|
414
|
-
expectedCommit: expected?.get(group.requirements[0].root).commit,
|
|
415
|
-
});
|
|
416
|
-
for (const { root } of group.requirements) {
|
|
417
|
-
if (expected !== undefined && expected.get(root).commit !== graded.commit) {
|
|
418
|
-
throw new Error(`${repositoryRoot} HEAD changed during verification`);
|
|
419
|
-
}
|
|
420
|
-
result.set(root, graded);
|
|
421
|
-
}
|
|
422
|
-
}
|
|
423
|
-
return result;
|
|
424
|
-
}
|
|
425
|
-
|
|
426
|
-
/**
|
|
427
|
-
* A verifier input (the evidence tree, the replay state) must live outside every
|
|
428
|
-
* graded checkout: a path inside one is graded as source, not as input.
|
|
429
|
-
*/
|
|
430
|
-
export function assertExternalInput(repositoryRoots, path, label) {
|
|
431
|
-
const canonical = realpathSync(path);
|
|
432
|
-
for (const repositoryRoot of repositoryRoots) {
|
|
433
|
-
const rel = relative(repositoryRoot, canonical);
|
|
434
|
-
if (rel === '' || (!rel.startsWith(`..${sep}`) && rel !== '..')) {
|
|
435
|
-
throw new Error(`${label} must be outside the checkout ${repositoryRoot}`);
|
|
436
|
-
}
|
|
437
|
-
}
|
|
438
|
-
return canonical;
|
|
439
|
-
}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
// The lexical grammars the evidence plane checks, declared once. The kernel
|
|
2
|
-
// states the same shapes inside its schemas (`@xemahq/contracts` distribution
|
|
3
|
-
// schemas keep them module-private and export no pattern), so the evidence
|
|
4
|
-
// plane has no kernel export to import; this is the ONE CLI declaration every
|
|
5
|
-
// evidence module reads.
|
|
6
|
-
|
|
7
|
-
/** A full 40-hex lowercase git commit. */
|
|
8
|
-
export const COMMIT_PATTERN = /^[a-f0-9]{40}$/;
|
|
9
|
-
/** 64 lowercase hex digits, no algorithm prefix. */
|
|
10
|
-
export const SHA256_HEX_PATTERN = /^[a-f0-9]{64}$/;
|
|
11
|
-
/** An OCI/sigstore content digest: `sha256:` and 64 lowercase hex digits. */
|
|
12
|
-
export const SHA256_DIGEST_PATTERN = /^sha256:[a-f0-9]{64}$/;
|
|
13
|
-
/** `owner/repository` of a GitHub repository. */
|
|
14
|
-
export const GITHUB_REPOSITORY_PATTERN = /^[a-zA-Z0-9_.-]+\/[a-zA-Z0-9_.-]+$/;
|
|
15
|
-
/** A policy, subject or run identifier: alphanumeric ends, `._:/@+-` inside, at most 256 characters. */
|
|
16
|
-
export const CANONICAL_IDENTIFIER = /^[a-zA-Z0-9](?:[a-zA-Z0-9._:/@+-]{0,254}[a-zA-Z0-9])?$/;
|
|
17
|
-
/** A GitHub branch or tag ref. */
|
|
18
|
-
export const GITHUB_REF_PATTERN = /^refs\/(?:heads|tags)\/.+$/;
|
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
// evidence-input-mode — where a producer-side evidence verb takes its kernel contract authority and schemas from.
|
|
2
|
-
//
|
|
3
|
-
// Vendor mode (`--data-root <dir> --kernel <dir>`): the authority the data root's evidence-trust pin records, and the
|
|
4
|
-
// schemas of a kernel checkout at that commit. Public-input mode (`--contract-authority <file>`): a third-party
|
|
5
|
-
// publisher's run, on public inputs only. The authority is the file, and the schemas are the `@xemahq/contracts` this
|
|
6
|
-
// CLI bundles, proved to be that authority. There is no data root, no kernel checkout and no vendor trust policy; what
|
|
7
|
-
// needs the vendor's trust policy is checked at the vendor's admission.
|
|
8
|
-
//
|
|
9
|
-
// `readPublicContractAuthority` is the one resolution of a `--contract-authority` file, shared by
|
|
10
|
-
// `evidence assemble-third-party-input`, `statement producer <stage|accept>` and `oci <attach-plan|validate>`.
|
|
11
|
-
|
|
12
|
-
import { readFileSync } from 'node:fs';
|
|
13
|
-
import { join, resolve } from 'node:path';
|
|
14
|
-
|
|
15
|
-
import { KernelContractAuthoritySchema } from '@xemahq/contracts/distribution';
|
|
16
|
-
|
|
17
|
-
import { readKernelEditionProtocol } from './edition-protocol.mjs';
|
|
18
|
-
import {
|
|
19
|
-
WorkspaceRoot,
|
|
20
|
-
configureEditionWorkspaceFromArgv,
|
|
21
|
-
kernelPackageDir,
|
|
22
|
-
stateKernelPackageDir,
|
|
23
|
-
} from './edition-workspace.mjs';
|
|
24
|
-
import { KERNEL_PACKAGE_NAME, assertKernelPackageIsCatalogueAuthority, shippedKernelPackageDir } from './kernel-package.mjs';
|
|
25
|
-
import { loadKernelDistributionSchemas } from './lib.mjs';
|
|
26
|
-
|
|
27
|
-
/** The two closed ways a producer-side evidence verb is given its kernel contract authority. */
|
|
28
|
-
export const EvidenceInputMode = Object.freeze({
|
|
29
|
-
/** `--data-root` and `--kernel`: the vendor's pinned authority and kernel checkout. */
|
|
30
|
-
Vendor: 'vendor',
|
|
31
|
-
/** `--contract-authority`: a publisher's run on public inputs, with the kernel this CLI bundles. */
|
|
32
|
-
PublicInput: 'public-input',
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
const CONTRACT_AUTHORITY_FLAG = '--contract-authority';
|
|
36
|
-
const VENDOR_FLAGS = ['--data-root', '--kernel'];
|
|
37
|
-
|
|
38
|
-
const flagOf = (arg) => {
|
|
39
|
-
const eq = typeof arg === 'string' ? arg.indexOf('=') : -1;
|
|
40
|
-
return eq > 0 ? arg.slice(0, eq) : arg;
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
const readVersion = (packageJsonPath) => {
|
|
44
|
-
const { version } = JSON.parse(readFileSync(packageJsonPath, 'utf8'));
|
|
45
|
-
if (typeof version !== 'string' || version.length === 0) {throw new Error(`${packageJsonPath} has no "version"`);}
|
|
46
|
-
return version;
|
|
47
|
-
};
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* The contract authority of a `--contract-authority` file, proved to be the kernel this CLI bundles (`kernelDir`),
|
|
51
|
-
* and that kernel's distribution schemas. An authority whose contracts digest is not the bundled one is refused
|
|
52
|
-
* first, naming both digests: the publisher installs the xema CLI whose bundled `@xemahq/contracts` is that authority.
|
|
53
|
-
* The file is then strict-parsed by the kernel's `KernelContractAuthoritySchema` (imported from `@xemahq/contracts/distribution`, this CLI's own dependency, which is the bundled package) (an unknown or missing field is
|
|
54
|
-
* refused) and returned in the schema's form, so its key order is never what a later comparison sees.
|
|
55
|
-
*
|
|
56
|
-
* `sourceCommit` is held to the schema's shape only: it is provenance, which the bundled package cannot prove. The
|
|
57
|
-
* vendor holds it, comparing the statement's whole authority with its pinned one at the third-party pin writer
|
|
58
|
-
* (`assertImageStatementBindsPin`, third-party-source-evidence.mjs).
|
|
59
|
-
*/
|
|
60
|
-
export async function readPublicContractAuthority({ path, kernelDir = kernelPackageDir() }) {
|
|
61
|
-
let contractAuthority;
|
|
62
|
-
try {
|
|
63
|
-
contractAuthority = JSON.parse(readFileSync(path, 'utf8'));
|
|
64
|
-
} catch (error) {
|
|
65
|
-
throw new Error(`${CONTRACT_AUTHORITY_FLAG} ${path} is not a JSON kernel contract authority: ${error.message}`);
|
|
66
|
-
}
|
|
67
|
-
if (typeof contractAuthority !== 'object' || contractAuthority === null || Array.isArray(contractAuthority)) {
|
|
68
|
-
throw new Error(`${CONTRACT_AUTHORITY_FLAG} ${path} does not hold one kernel contract authority object`);
|
|
69
|
-
}
|
|
70
|
-
const bundledDigest = readKernelEditionProtocol(kernelDir).contentDigest;
|
|
71
|
-
if (contractAuthority.contentDigest !== bundledDigest) {
|
|
72
|
-
const cli = readVersion(new URL('../package.json', import.meta.url));
|
|
73
|
-
const contracts = readVersion(join(kernelDir, 'package.json'));
|
|
74
|
-
throw new Error(
|
|
75
|
-
`${CONTRACT_AUTHORITY_FLAG} ${path} is kernel contracts digest ${JSON.stringify(contractAuthority.contentDigest)}, ` +
|
|
76
|
-
`but this CLI (@xemahq/xema ${cli}) bundles ${KERNEL_PACKAGE_NAME} ${contracts}, digest ${bundledDigest}; ` +
|
|
77
|
-
`install the @xemahq/xema version whose bundled ${KERNEL_PACKAGE_NAME} has digest ${JSON.stringify(contractAuthority.contentDigest)}`,
|
|
78
|
-
);
|
|
79
|
-
}
|
|
80
|
-
const parsed = KernelContractAuthoritySchema.safeParse(contractAuthority);
|
|
81
|
-
if (!parsed.success) {
|
|
82
|
-
const issues = parsed.error.issues.map((issue) => `${issue.path.join('.') || '(root)'}: ${issue.message}`).join('; ');
|
|
83
|
-
throw new Error(`${CONTRACT_AUTHORITY_FLAG} ${path} is not a kernel contract authority: ${issues}`);
|
|
84
|
-
}
|
|
85
|
-
contractAuthority = parsed.data;
|
|
86
|
-
try {
|
|
87
|
-
const schemas = await assertKernelPackageIsCatalogueAuthority({
|
|
88
|
-
catalogue: { contractAuthority },
|
|
89
|
-
kernelPackageDir: kernelDir,
|
|
90
|
-
loadSchemas: loadKernelDistributionSchemas,
|
|
91
|
-
});
|
|
92
|
-
return { contractAuthority, schemas };
|
|
93
|
-
} catch (error) {
|
|
94
|
-
throw new Error(
|
|
95
|
-
`${CONTRACT_AUTHORITY_FLAG} ${path} is not the kernel this CLI ships (${kernelDir}): ${error.message}; ` +
|
|
96
|
-
`install the xema CLI version whose ${KERNEL_PACKAGE_NAME} is that authority`,
|
|
97
|
-
);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
/**
|
|
102
|
-
* Configure a producer-side evidence verb from its argv in exactly one mode. `--contract-authority <file>` together
|
|
103
|
-
* with `--data-root`/`--kernel`, or neither, is refused by name.
|
|
104
|
-
*
|
|
105
|
-
* Vendor mode configures the Data and Kernel roots and returns `{mode, rest}`; the verb reads its pinned authority.
|
|
106
|
-
* Public-input mode configures no root, states the bundled kernel as the Kernel root and returns
|
|
107
|
-
* `{mode, rest, contractAuthority, schemas}` from {@link readPublicContractAuthority}.
|
|
108
|
-
*/
|
|
109
|
-
export async function configureEvidenceInputMode(argv, { verb }) {
|
|
110
|
-
const authorityAt = argv.findIndex((arg) => flagOf(arg) === CONTRACT_AUTHORITY_FLAG);
|
|
111
|
-
const vendorFlags = VENDOR_FLAGS.filter((flag) => argv.some((arg) => flagOf(arg) === flag));
|
|
112
|
-
const modes = `${CONTRACT_AUTHORITY_FLAG} <file> (public-input mode) or --data-root <dir> --kernel <dir> (vendor mode)`;
|
|
113
|
-
if (authorityAt !== -1 && vendorFlags.length > 0) {
|
|
114
|
-
throw new Error(`${verb}: ${CONTRACT_AUTHORITY_FLAG} and ${vendorFlags.join('/')} are two modes; pass one: ${modes}`);
|
|
115
|
-
}
|
|
116
|
-
if (authorityAt === -1 && vendorFlags.length === 0) {
|
|
117
|
-
throw new Error(`${verb} needs ${modes}`);
|
|
118
|
-
}
|
|
119
|
-
if (authorityAt === -1) {
|
|
120
|
-
return { mode: EvidenceInputMode.Vendor, rest: configureEditionWorkspaceFromArgv(argv, [WorkspaceRoot.Data, WorkspaceRoot.Kernel]) };
|
|
121
|
-
}
|
|
122
|
-
const arg = argv[authorityAt];
|
|
123
|
-
const inline = arg.length > CONTRACT_AUTHORITY_FLAG.length;
|
|
124
|
-
const path = inline ? arg.slice(CONTRACT_AUTHORITY_FLAG.length + 1) : argv[authorityAt + 1];
|
|
125
|
-
if (typeof path !== 'string' || path.length === 0 || path.startsWith('--')) {
|
|
126
|
-
throw new Error(`${CONTRACT_AUTHORITY_FLAG} requires a file path`);
|
|
127
|
-
}
|
|
128
|
-
if (argv.some((other, index) => index !== authorityAt && flagOf(other) === CONTRACT_AUTHORITY_FLAG)) {
|
|
129
|
-
throw new Error(`${CONTRACT_AUTHORITY_FLAG} is given more than once`);
|
|
130
|
-
}
|
|
131
|
-
const remaining = argv.filter((_, index) => index !== authorityAt && (inline || index !== authorityAt + 1));
|
|
132
|
-
const rest = configureEditionWorkspaceFromArgv(remaining, [], { refuseOthers: true });
|
|
133
|
-
stateKernelPackageDir(shippedKernelPackageDir());
|
|
134
|
-
const { contractAuthority, schemas } = await readPublicContractAuthority({ path: resolve(path) });
|
|
135
|
-
return { mode: EvidenceInputMode.PublicInput, rest, contractAuthority, schemas };
|
|
136
|
-
}
|