@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.
Files changed (850) hide show
  1. package/README.md +1 -2
  2. package/dist/appliance-owner.d.ts.map +1 -1
  3. package/dist/appliance-owner.js +6 -6
  4. package/dist/appliance-owner.js.map +1 -1
  5. package/dist/assets/appliance-base/authorization.lock.json +5186 -0
  6. package/dist/assets/appliance-base/distribution.lock.json +760 -279
  7. package/dist/assets/appliance-base/images.lock.json +576 -513
  8. package/dist/assets/appliance-lean/authorization.lock.json +4648 -0
  9. package/dist/assets/appliance-lean/distribution.lock.json +641 -186
  10. package/dist/assets/appliance-lean/images.lock.json +574 -512
  11. package/dist/assets/boot-graph.json +33 -14
  12. package/dist/assets/distribution-assets.manifest.json +23 -20
  13. package/dist/cli.d.ts.map +1 -1
  14. package/dist/cli.js +7 -9
  15. package/dist/cli.js.map +1 -1
  16. package/dist/commands/biome-dev.d.ts.map +1 -1
  17. package/dist/commands/biome-dev.js +41 -137
  18. package/dist/commands/biome-dev.js.map +1 -1
  19. package/dist/commands/biome-lifecycle.d.ts +24 -0
  20. package/dist/commands/biome-lifecycle.d.ts.map +1 -0
  21. package/dist/commands/biome-lifecycle.js +253 -0
  22. package/dist/commands/biome-lifecycle.js.map +1 -0
  23. package/dist/commands/biome.d.ts +2 -4
  24. package/dist/commands/biome.d.ts.map +1 -1
  25. package/dist/commands/biome.js +61 -46
  26. package/dist/commands/biome.js.map +1 -1
  27. package/dist/commands/config.d.ts.map +1 -1
  28. package/dist/commands/config.js +96 -8
  29. package/dist/commands/config.js.map +1 -1
  30. package/dist/commands/doctor.d.ts.map +1 -1
  31. package/dist/commands/doctor.js +13 -20
  32. package/dist/commands/doctor.js.map +1 -1
  33. package/dist/commands/down.d.ts.map +1 -1
  34. package/dist/commands/down.js +14 -21
  35. package/dist/commands/down.js.map +1 -1
  36. package/dist/commands/init.d.ts.map +1 -1
  37. package/dist/commands/init.js +6 -3
  38. package/dist/commands/init.js.map +1 -1
  39. package/dist/commands/installation-tenancy.d.ts +11 -0
  40. package/dist/commands/installation-tenancy.d.ts.map +1 -0
  41. package/dist/commands/installation-tenancy.js +308 -0
  42. package/dist/commands/installation-tenancy.js.map +1 -0
  43. package/dist/commands/installation.d.ts.map +1 -1
  44. package/dist/commands/installation.js +19 -5
  45. package/dist/commands/installation.js.map +1 -1
  46. package/dist/commands/logs.d.ts +2 -0
  47. package/dist/commands/logs.d.ts.map +1 -1
  48. package/dist/commands/logs.js +41 -8
  49. package/dist/commands/logs.js.map +1 -1
  50. package/dist/commands/{dev.d.ts → mirror.d.ts} +1 -1
  51. package/dist/commands/mirror.d.ts.map +1 -0
  52. package/dist/commands/mirror.js +132 -0
  53. package/dist/commands/mirror.js.map +1 -0
  54. package/dist/commands/source.d.ts.map +1 -1
  55. package/dist/commands/source.js +3 -2
  56. package/dist/commands/source.js.map +1 -1
  57. package/dist/commands/status.d.ts.map +1 -1
  58. package/dist/commands/status.js +40 -21
  59. package/dist/commands/status.js.map +1 -1
  60. package/dist/commands/up.d.ts.map +1 -1
  61. package/dist/commands/up.js +36 -4
  62. package/dist/commands/up.js.map +1 -1
  63. package/dist/dev/infra-preflight.d.ts.map +1 -1
  64. package/dist/dev/infra-preflight.js +0 -4
  65. package/dist/dev/infra-preflight.js.map +1 -1
  66. package/dist/lib/confirm.d.ts +3 -0
  67. package/dist/lib/confirm.d.ts.map +1 -0
  68. package/dist/lib/confirm.js +19 -0
  69. package/dist/lib/confirm.js.map +1 -0
  70. package/dist/lib/output-format.d.ts +6 -0
  71. package/dist/lib/output-format.d.ts.map +1 -0
  72. package/dist/lib/output-format.js +20 -0
  73. package/dist/lib/output-format.js.map +1 -0
  74. package/dist/mirror/config/mirror-config-document.d.ts +18 -0
  75. package/dist/mirror/config/mirror-config-document.d.ts.map +1 -0
  76. package/dist/mirror/config/mirror-config-document.js +57 -0
  77. package/dist/mirror/config/mirror-config-document.js.map +1 -0
  78. package/dist/mirror/config/mirror-config-schema.d.ts +54 -0
  79. package/dist/mirror/config/mirror-config-schema.d.ts.map +1 -0
  80. package/dist/mirror/config/mirror-config-schema.js +80 -0
  81. package/dist/mirror/config/mirror-config-schema.js.map +1 -0
  82. package/dist/mirror/kit/delta.d.ts +4 -0
  83. package/dist/mirror/kit/delta.d.ts.map +1 -0
  84. package/dist/mirror/kit/delta.js +41 -0
  85. package/dist/mirror/kit/delta.js.map +1 -0
  86. package/dist/mirror/kit/export-kit.d.ts +16 -0
  87. package/dist/mirror/kit/export-kit.d.ts.map +1 -0
  88. package/dist/mirror/kit/export-kit.js +112 -0
  89. package/dist/mirror/kit/export-kit.js.map +1 -0
  90. package/dist/mirror/kit/import-kit.d.ts +9 -0
  91. package/dist/mirror/kit/import-kit.d.ts.map +1 -0
  92. package/dist/mirror/kit/import-kit.js +166 -0
  93. package/dist/mirror/kit/import-kit.js.map +1 -0
  94. package/dist/mirror/kit/kit-archive.d.ts +4 -0
  95. package/dist/mirror/kit/kit-archive.d.ts.map +1 -0
  96. package/dist/mirror/kit/kit-archive.js +38 -0
  97. package/dist/mirror/kit/kit-archive.js.map +1 -0
  98. package/dist/mirror/kit/kit-layout.d.ts +10 -0
  99. package/dist/mirror/kit/kit-layout.d.ts.map +1 -0
  100. package/dist/mirror/kit/kit-layout.js +19 -0
  101. package/dist/mirror/kit/kit-layout.js.map +1 -0
  102. package/dist/mirror/kit/kit-sums.d.ts +5 -0
  103. package/dist/mirror/kit/kit-sums.d.ts.map +1 -0
  104. package/dist/mirror/kit/kit-sums.js +63 -0
  105. package/dist/mirror/kit/kit-sums.js.map +1 -0
  106. package/dist/mirror/kit/layout-sync.d.ts +8 -0
  107. package/dist/mirror/kit/layout-sync.d.ts.map +1 -0
  108. package/dist/mirror/kit/layout-sync.js +58 -0
  109. package/dist/mirror/kit/layout-sync.js.map +1 -0
  110. package/dist/mirror/plan/bundle-content.d.ts +10 -0
  111. package/dist/mirror/plan/bundle-content.d.ts.map +1 -0
  112. package/dist/mirror/plan/bundle-content.js +61 -0
  113. package/dist/mirror/plan/bundle-content.js.map +1 -0
  114. package/dist/mirror/plan/declaration-file.d.ts +9 -0
  115. package/dist/mirror/plan/declaration-file.d.ts.map +1 -0
  116. package/dist/mirror/plan/declaration-file.js +27 -0
  117. package/dist/mirror/plan/declaration-file.js.map +1 -0
  118. package/dist/mirror/plan/edition-inputs.d.ts +57 -0
  119. package/dist/mirror/plan/edition-inputs.d.ts.map +1 -0
  120. package/dist/mirror/plan/edition-inputs.js +44 -0
  121. package/dist/mirror/plan/edition-inputs.js.map +1 -0
  122. package/dist/mirror/plan/edition-reader.d.ts +9 -0
  123. package/dist/mirror/plan/edition-reader.d.ts.map +1 -0
  124. package/dist/mirror/plan/edition-reader.js +47 -0
  125. package/dist/mirror/plan/edition-reader.js.map +1 -0
  126. package/dist/mirror/plan/image-content.d.ts +30 -0
  127. package/dist/mirror/plan/image-content.d.ts.map +1 -0
  128. package/dist/mirror/plan/image-content.js +120 -0
  129. package/dist/mirror/plan/image-content.js.map +1 -0
  130. package/dist/mirror/plan/npm-lockfile.d.ts +12 -0
  131. package/dist/mirror/plan/npm-lockfile.d.ts.map +1 -0
  132. package/dist/mirror/plan/npm-lockfile.js +106 -0
  133. package/dist/mirror/plan/npm-lockfile.js.map +1 -0
  134. package/dist/mirror/plan/oci-reads.d.ts +22 -0
  135. package/dist/mirror/plan/oci-reads.d.ts.map +1 -0
  136. package/dist/mirror/plan/oci-reads.js +43 -0
  137. package/dist/mirror/plan/oci-reads.js.map +1 -0
  138. package/dist/mirror/plan/plan-command.d.ts +22 -0
  139. package/dist/mirror/plan/plan-command.d.ts.map +1 -0
  140. package/dist/mirror/plan/plan-command.js +81 -0
  141. package/dist/mirror/plan/plan-command.js.map +1 -0
  142. package/dist/mirror/plan/plan-file.d.ts +13 -0
  143. package/dist/mirror/plan/plan-file.d.ts.map +1 -0
  144. package/dist/mirror/plan/plan-file.js +63 -0
  145. package/dist/mirror/plan/plan-file.js.map +1 -0
  146. package/dist/mirror/plan/resolve-content-set.d.ts +16 -0
  147. package/dist/mirror/plan/resolve-content-set.d.ts.map +1 -0
  148. package/dist/mirror/plan/resolve-content-set.js +90 -0
  149. package/dist/mirror/plan/resolve-content-set.js.map +1 -0
  150. package/dist/mirror/preflight/glob.d.ts +2 -0
  151. package/dist/mirror/preflight/glob.d.ts.map +1 -0
  152. package/dist/mirror/preflight/glob.js +59 -0
  153. package/dist/mirror/preflight/glob.js.map +1 -0
  154. package/dist/mirror/preflight/harbor-api.d.ts +27 -0
  155. package/dist/mirror/preflight/harbor-api.d.ts.map +1 -0
  156. package/dist/mirror/preflight/harbor-api.js +39 -0
  157. package/dist/mirror/preflight/harbor-api.js.map +1 -0
  158. package/dist/mirror/preflight/preflight.d.ts +18 -0
  159. package/dist/mirror/preflight/preflight.d.ts.map +1 -0
  160. package/dist/mirror/preflight/preflight.js +41 -0
  161. package/dist/mirror/preflight/preflight.js.map +1 -0
  162. package/dist/mirror/preflight/tag-moves.d.ts +16 -0
  163. package/dist/mirror/preflight/tag-moves.d.ts.map +1 -0
  164. package/dist/mirror/preflight/tag-moves.js +28 -0
  165. package/dist/mirror/preflight/tag-moves.js.map +1 -0
  166. package/dist/mirror/preflight/write-probe.d.ts +10 -0
  167. package/dist/mirror/preflight/write-probe.d.ts.map +1 -0
  168. package/dist/mirror/preflight/write-probe.js +36 -0
  169. package/dist/mirror/preflight/write-probe.js.map +1 -0
  170. package/dist/mirror/target/extras.d.ts +16 -0
  171. package/dist/mirror/target/extras.d.ts.map +1 -0
  172. package/dist/mirror/target/extras.js +47 -0
  173. package/dist/mirror/target/extras.js.map +1 -0
  174. package/dist/mirror/target/npm-registry.d.ts +20 -0
  175. package/dist/mirror/target/npm-registry.d.ts.map +1 -0
  176. package/dist/mirror/target/npm-registry.js +67 -0
  177. package/dist/mirror/target/npm-registry.js.map +1 -0
  178. package/dist/mirror/target/npm-sync.d.ts +15 -0
  179. package/dist/mirror/target/npm-sync.d.ts.map +1 -0
  180. package/dist/mirror/target/npm-sync.js +44 -0
  181. package/dist/mirror/target/npm-sync.js.map +1 -0
  182. package/dist/mirror/target/oci-items.d.ts +27 -0
  183. package/dist/mirror/target/oci-items.d.ts.map +1 -0
  184. package/dist/mirror/target/oci-items.js +79 -0
  185. package/dist/mirror/target/oci-items.js.map +1 -0
  186. package/dist/mirror/target/oci-sync.d.ts +20 -0
  187. package/dist/mirror/target/oci-sync.d.ts.map +1 -0
  188. package/dist/mirror/target/oci-sync.js +93 -0
  189. package/dist/mirror/target/oci-sync.js.map +1 -0
  190. package/dist/mirror/target/receipt-store.d.ts +13 -0
  191. package/dist/mirror/target/receipt-store.d.ts.map +1 -0
  192. package/dist/mirror/target/receipt-store.js +61 -0
  193. package/dist/mirror/target/receipt-store.js.map +1 -0
  194. package/dist/mirror/target/receipt.d.ts +13 -0
  195. package/dist/mirror/target/receipt.d.ts.map +1 -0
  196. package/dist/mirror/target/receipt.js +25 -0
  197. package/dist/mirror/target/receipt.js.map +1 -0
  198. package/dist/mirror/target/seed-push.d.ts +15 -0
  199. package/dist/mirror/target/seed-push.d.ts.map +1 -0
  200. package/dist/mirror/target/seed-push.js +20 -0
  201. package/dist/mirror/target/seed-push.js.map +1 -0
  202. package/dist/mirror/target/target-access.d.ts +7 -0
  203. package/dist/mirror/target/target-access.d.ts.map +1 -0
  204. package/dist/mirror/target/target-access.js +17 -0
  205. package/dist/mirror/target/target-access.js.map +1 -0
  206. package/dist/mirror/target/target-commands.d.ts +21 -0
  207. package/dist/mirror/target/target-commands.d.ts.map +1 -0
  208. package/dist/mirror/target/target-commands.js +134 -0
  209. package/dist/mirror/target/target-commands.js.map +1 -0
  210. package/dist/mirror/target/target-context.d.ts +11 -0
  211. package/dist/mirror/target/target-context.d.ts.map +1 -0
  212. package/dist/mirror/target/target-context.js +31 -0
  213. package/dist/mirror/target/target-context.js.map +1 -0
  214. package/dist/mirror/target/target-ports.d.ts +18 -0
  215. package/dist/mirror/target/target-ports.d.ts.map +1 -0
  216. package/dist/mirror/target/target-ports.js +49 -0
  217. package/dist/mirror/target/target-ports.js.map +1 -0
  218. package/dist/mirror/target/target-state.d.ts +22 -0
  219. package/dist/mirror/target/target-state.d.ts.map +1 -0
  220. package/dist/mirror/target/target-state.js +41 -0
  221. package/dist/mirror/target/target-state.js.map +1 -0
  222. package/dist/runtime/biome-dev.d.ts +0 -16
  223. package/dist/runtime/biome-dev.d.ts.map +1 -1
  224. package/dist/runtime/biome-dev.js +0 -53
  225. package/dist/runtime/biome-dev.js.map +1 -1
  226. package/dist/runtime/biome-host/biome-directory-packer.d.ts +3 -0
  227. package/dist/runtime/biome-host/biome-directory-packer.d.ts.map +1 -0
  228. package/dist/runtime/biome-host/biome-directory-packer.js +12 -0
  229. package/dist/runtime/biome-host/biome-directory-packer.js.map +1 -0
  230. package/dist/runtime/biome-host/bundle-packer.d.ts +8 -0
  231. package/dist/runtime/biome-host/bundle-packer.d.ts.map +1 -0
  232. package/dist/runtime/biome-host/bundle-packer.js +3 -0
  233. package/dist/runtime/biome-host/bundle-packer.js.map +1 -0
  234. package/dist/runtime/biome-host/from-spec.d.ts +33 -0
  235. package/dist/runtime/biome-host/from-spec.d.ts.map +1 -0
  236. package/dist/runtime/biome-host/from-spec.js +70 -0
  237. package/dist/runtime/biome-host/from-spec.js.map +1 -0
  238. package/dist/runtime/biome-host/lifecycle-client.d.ts +20 -0
  239. package/dist/runtime/biome-host/lifecycle-client.d.ts.map +1 -0
  240. package/dist/runtime/biome-host/lifecycle-client.js +197 -0
  241. package/dist/runtime/biome-host/lifecycle-client.js.map +1 -0
  242. package/dist/runtime/biome-host/lifecycle-contract.d.ts +95 -0
  243. package/dist/runtime/biome-host/lifecycle-contract.d.ts.map +1 -0
  244. package/dist/runtime/biome-host/lifecycle-contract.js +61 -0
  245. package/dist/runtime/biome-host/lifecycle-contract.js.map +1 -0
  246. package/dist/runtime/biome-host/lifecycle-flow.d.ts +29 -0
  247. package/dist/runtime/biome-host/lifecycle-flow.d.ts.map +1 -0
  248. package/dist/runtime/biome-host/lifecycle-flow.js +106 -0
  249. package/dist/runtime/biome-host/lifecycle-flow.js.map +1 -0
  250. package/dist/runtime/biome-host/plan-sources.d.ts +4 -0
  251. package/dist/runtime/biome-host/plan-sources.d.ts.map +1 -0
  252. package/dist/runtime/biome-host/plan-sources.js +26 -0
  253. package/dist/runtime/biome-host/plan-sources.js.map +1 -0
  254. package/dist/runtime/biome-host/relay/bundle-fetch.d.ts +12 -0
  255. package/dist/runtime/biome-host/relay/bundle-fetch.d.ts.map +1 -0
  256. package/dist/runtime/biome-host/relay/bundle-fetch.js +76 -0
  257. package/dist/runtime/biome-host/relay/bundle-fetch.js.map +1 -0
  258. package/dist/runtime/biome-host/relay/declared-scheme.d.ts +3 -0
  259. package/dist/runtime/biome-host/relay/declared-scheme.d.ts.map +1 -0
  260. package/dist/runtime/biome-host/relay/declared-scheme.js +14 -0
  261. package/dist/runtime/biome-host/relay/declared-scheme.js.map +1 -0
  262. package/dist/runtime/biome-host/relay/npm-token.d.ts +4 -0
  263. package/dist/runtime/biome-host/relay/npm-token.d.ts.map +1 -0
  264. package/dist/runtime/biome-host/relay/npm-token.js +16 -0
  265. package/dist/runtime/biome-host/relay/npm-token.js.map +1 -0
  266. package/dist/runtime/biome-host/relay/relay-flow.d.ts +16 -0
  267. package/dist/runtime/biome-host/relay/relay-flow.d.ts.map +1 -0
  268. package/dist/runtime/biome-host/relay/relay-flow.js +48 -0
  269. package/dist/runtime/biome-host/relay/relay-flow.js.map +1 -0
  270. package/dist/runtime/biome-host/source-staging.d.ts +17 -0
  271. package/dist/runtime/biome-host/source-staging.d.ts.map +1 -0
  272. package/dist/runtime/biome-host/source-staging.js +80 -0
  273. package/dist/runtime/biome-host/source-staging.js.map +1 -0
  274. package/dist/runtime/biome-host/sse.d.ts +2 -0
  275. package/dist/runtime/biome-host/sse.d.ts.map +1 -0
  276. package/dist/runtime/biome-host/sse.js +33 -0
  277. package/dist/runtime/biome-host/sse.js.map +1 -0
  278. package/dist/runtime/biome-local-install.js +1 -1
  279. package/dist/runtime/biome-local-install.js.map +1 -1
  280. package/dist/runtime/browser-origins.d.ts +9 -0
  281. package/dist/runtime/browser-origins.d.ts.map +1 -1
  282. package/dist/runtime/browser-origins.js +10 -0
  283. package/dist/runtime/browser-origins.js.map +1 -1
  284. package/dist/runtime/config/config-document.d.ts +10 -0
  285. package/dist/runtime/config/config-document.d.ts.map +1 -0
  286. package/dist/runtime/config/config-document.js +56 -0
  287. package/dist/runtime/config/config-document.js.map +1 -0
  288. package/dist/runtime/config/config-migrations.d.ts +21 -0
  289. package/dist/runtime/config/config-migrations.d.ts.map +1 -0
  290. package/dist/runtime/config/config-migrations.js +102 -0
  291. package/dist/runtime/config/config-migrations.js.map +1 -0
  292. package/dist/runtime/config/config-paths.d.ts +3 -0
  293. package/dist/runtime/config/config-paths.d.ts.map +1 -0
  294. package/dist/runtime/config/config-paths.js +9 -0
  295. package/dist/runtime/config/config-paths.js.map +1 -0
  296. package/dist/runtime/config/dev-mode.d.ts +0 -1
  297. package/dist/runtime/config/dev-mode.d.ts.map +1 -1
  298. package/dist/runtime/config/dev-mode.js +11 -27
  299. package/dist/runtime/config/dev-mode.js.map +1 -1
  300. package/dist/runtime/config/init-presets.js +5 -9
  301. package/dist/runtime/config/init-presets.js.map +1 -1
  302. package/dist/runtime/config/launch-config-help.d.ts +4 -0
  303. package/dist/runtime/config/launch-config-help.d.ts.map +1 -0
  304. package/dist/runtime/config/launch-config-help.js +42 -0
  305. package/dist/runtime/config/launch-config-help.js.map +1 -0
  306. package/dist/runtime/config/launch-config.d.ts +60 -0
  307. package/dist/runtime/config/launch-config.d.ts.map +1 -0
  308. package/dist/runtime/config/launch-config.js +123 -0
  309. package/dist/runtime/config/launch-config.js.map +1 -0
  310. package/dist/runtime/config/launch-schema.d.ts +18 -0
  311. package/dist/runtime/config/launch-schema.d.ts.map +1 -0
  312. package/dist/runtime/config/launch-schema.js +31 -0
  313. package/dist/runtime/config/launch-schema.js.map +1 -0
  314. package/dist/runtime/config/loader.d.ts.map +1 -1
  315. package/dist/runtime/config/loader.js +4 -14
  316. package/dist/runtime/config/loader.js.map +1 -1
  317. package/dist/runtime/config/schema.d.ts +43 -38
  318. package/dist/runtime/config/schema.d.ts.map +1 -1
  319. package/dist/runtime/config/schema.js +17 -46
  320. package/dist/runtime/config/schema.js.map +1 -1
  321. package/dist/runtime/config/sources-config.d.ts +0 -2
  322. package/dist/runtime/config/sources-config.d.ts.map +1 -1
  323. package/dist/runtime/config/sources-config.js +10 -29
  324. package/dist/runtime/config/sources-config.js.map +1 -1
  325. package/dist/runtime/config/versioned-document.d.ts +26 -0
  326. package/dist/runtime/config/versioned-document.d.ts.map +1 -0
  327. package/dist/runtime/config/versioned-document.js +87 -0
  328. package/dist/runtime/config/versioned-document.js.map +1 -0
  329. package/dist/runtime/directory-changes.d.ts +12 -0
  330. package/dist/runtime/directory-changes.d.ts.map +1 -0
  331. package/dist/runtime/directory-changes.js +62 -0
  332. package/dist/runtime/directory-changes.js.map +1 -0
  333. package/dist/runtime/foreground.d.ts +2 -0
  334. package/dist/runtime/foreground.d.ts.map +1 -1
  335. package/dist/runtime/foreground.js +5 -20
  336. package/dist/runtime/foreground.js.map +1 -1
  337. package/dist/runtime/infra/infra-runner.js +5 -5
  338. package/dist/runtime/infra/infra-runner.js.map +1 -1
  339. package/dist/runtime/infra/keycloak-realm.d.ts +3 -19
  340. package/dist/runtime/infra/keycloak-realm.d.ts.map +1 -1
  341. package/dist/runtime/infra/keycloak-realm.js +12 -133
  342. package/dist/runtime/infra/keycloak-realm.js.map +1 -1
  343. package/dist/runtime/installation/current-launcher-renderer.js.map +1 -1
  344. package/dist/runtime/installation/from-current-config.d.ts.map +1 -1
  345. package/dist/runtime/installation/from-current-config.js +24 -47
  346. package/dist/runtime/installation/from-current-config.js.map +1 -1
  347. package/dist/runtime/installation/index.d.ts +1 -0
  348. package/dist/runtime/installation/index.d.ts.map +1 -1
  349. package/dist/runtime/installation/index.js +1 -0
  350. package/dist/runtime/installation/index.js.map +1 -1
  351. package/dist/runtime/installation/installation-file.d.ts +3 -0
  352. package/dist/runtime/installation/installation-file.d.ts.map +1 -0
  353. package/dist/runtime/installation/installation-file.js +9 -0
  354. package/dist/runtime/installation/installation-file.js.map +1 -0
  355. package/dist/runtime/installation/readiness.d.ts +6 -7
  356. package/dist/runtime/installation/readiness.d.ts.map +1 -1
  357. package/dist/runtime/installation/readiness.js +82 -132
  358. package/dist/runtime/installation/readiness.js.map +1 -1
  359. package/dist/runtime/installation/state-store.d.ts +4 -0
  360. package/dist/runtime/installation/state-store.d.ts.map +1 -1
  361. package/dist/runtime/installation/state-store.js +22 -1
  362. package/dist/runtime/installation/state-store.js.map +1 -1
  363. package/dist/runtime/installation/to-current-config.d.ts +4 -1
  364. package/dist/runtime/installation/to-current-config.d.ts.map +1 -1
  365. package/dist/runtime/installation/to-current-config.js +10 -36
  366. package/dist/runtime/installation/to-current-config.js.map +1 -1
  367. package/dist/runtime/launch-plan-format.d.ts.map +1 -1
  368. package/dist/runtime/launch-plan-format.js +31 -6
  369. package/dist/runtime/launch-plan-format.js.map +1 -1
  370. package/dist/runtime/launch-result.d.ts +15 -0
  371. package/dist/runtime/launch-result.d.ts.map +1 -0
  372. package/dist/runtime/launch-result.js +3 -0
  373. package/dist/runtime/launch-result.js.map +1 -0
  374. package/dist/runtime/launch.d.ts +16 -5
  375. package/dist/runtime/launch.d.ts.map +1 -1
  376. package/dist/runtime/launch.js +151 -315
  377. package/dist/runtime/launch.js.map +1 -1
  378. package/dist/runtime/license/helm-pull-secret.d.ts +1 -1
  379. package/dist/runtime/license/helm-pull-secret.d.ts.map +1 -1
  380. package/dist/runtime/license/helm-pull-secret.js +2 -2
  381. package/dist/runtime/license/helm-pull-secret.js.map +1 -1
  382. package/dist/runtime/lifecycle-progress/index.d.ts +9 -0
  383. package/dist/runtime/lifecycle-progress/index.d.ts.map +1 -0
  384. package/dist/runtime/lifecycle-progress/index.js +30 -0
  385. package/dist/runtime/lifecycle-progress/index.js.map +1 -0
  386. package/dist/runtime/lifecycle-progress/json-renderer.d.ts +3 -0
  387. package/dist/runtime/lifecycle-progress/json-renderer.d.ts.map +1 -0
  388. package/dist/runtime/lifecycle-progress/json-renderer.js +27 -0
  389. package/dist/runtime/lifecycle-progress/json-renderer.js.map +1 -0
  390. package/dist/runtime/lifecycle-progress/text-renderer.d.ts +5 -0
  391. package/dist/runtime/lifecycle-progress/text-renderer.d.ts.map +1 -0
  392. package/dist/runtime/lifecycle-progress/text-renderer.js +83 -0
  393. package/dist/runtime/lifecycle-progress/text-renderer.js.map +1 -0
  394. package/dist/runtime/lifecycle-progress/types.d.ts +79 -0
  395. package/dist/runtime/lifecycle-progress/types.d.ts.map +1 -0
  396. package/dist/runtime/lifecycle-progress/types.js +32 -0
  397. package/dist/runtime/lifecycle-progress/types.js.map +1 -0
  398. package/dist/runtime/lock-loader.d.ts +13 -3
  399. package/dist/runtime/lock-loader.d.ts.map +1 -1
  400. package/dist/runtime/lock-loader.js +28 -8
  401. package/dist/runtime/lock-loader.js.map +1 -1
  402. package/dist/runtime/paths.d.ts +2 -0
  403. package/dist/runtime/paths.d.ts.map +1 -1
  404. package/dist/runtime/paths.js +17 -4
  405. package/dist/runtime/paths.js.map +1 -1
  406. package/dist/runtime/roster.d.ts +6 -5
  407. package/dist/runtime/roster.d.ts.map +1 -1
  408. package/dist/runtime/roster.js +0 -21
  409. package/dist/runtime/roster.js.map +1 -1
  410. package/dist/runtime/runner/container-preflight.d.ts +3 -2
  411. package/dist/runtime/runner/container-preflight.d.ts.map +1 -1
  412. package/dist/runtime/runner/container-preflight.js +5 -5
  413. package/dist/runtime/runner/container-preflight.js.map +1 -1
  414. package/dist/runtime/runner/container-runner.d.ts +0 -22
  415. package/dist/runtime/runner/container-runner.d.ts.map +1 -1
  416. package/dist/runtime/runner/container-runner.js +0 -112
  417. package/dist/runtime/runner/container-runner.js.map +1 -1
  418. package/dist/runtime/runner/docker-cli.d.ts +1 -0
  419. package/dist/runtime/runner/docker-cli.d.ts.map +1 -1
  420. package/dist/runtime/runner/docker-cli.js +19 -0
  421. package/dist/runtime/runner/docker-cli.js.map +1 -1
  422. package/dist/runtime/runner/helm-cli.d.ts +1 -0
  423. package/dist/runtime/runner/helm-cli.d.ts.map +1 -1
  424. package/dist/runtime/runner/helm-cli.js +5 -1
  425. package/dist/runtime/runner/helm-cli.js.map +1 -1
  426. package/dist/runtime/runner/helm-pre-install.d.ts +3 -2
  427. package/dist/runtime/runner/helm-pre-install.d.ts.map +1 -1
  428. package/dist/runtime/runner/helm-pre-install.js +3 -3
  429. package/dist/runtime/runner/helm-pre-install.js.map +1 -1
  430. package/dist/runtime/runner/helm-runner.d.ts +29 -4
  431. package/dist/runtime/runner/helm-runner.d.ts.map +1 -1
  432. package/dist/runtime/runner/helm-runner.js +44 -14
  433. package/dist/runtime/runner/helm-runner.js.map +1 -1
  434. package/dist/runtime/runner/kube-cli.d.ts +1 -0
  435. package/dist/runtime/runner/kube-cli.d.ts.map +1 -1
  436. package/dist/runtime/runner/kube-cli.js +24 -2
  437. package/dist/runtime/runner/kube-cli.js.map +1 -1
  438. package/dist/runtime/secrets/managed-local-key-provider.d.ts +2 -0
  439. package/dist/runtime/secrets/managed-local-key-provider.d.ts.map +1 -1
  440. package/dist/runtime/secrets/managed-local-key-provider.js +17 -8
  441. package/dist/runtime/secrets/managed-local-key-provider.js.map +1 -1
  442. package/dist/runtime/seed/closure-container.d.ts +8 -0
  443. package/dist/runtime/seed/closure-container.d.ts.map +1 -0
  444. package/dist/runtime/seed/closure-container.js +23 -0
  445. package/dist/runtime/seed/closure-container.js.map +1 -0
  446. package/dist/runtime/seed/closure-helm.d.ts +9 -0
  447. package/dist/runtime/seed/closure-helm.d.ts.map +1 -0
  448. package/dist/runtime/seed/closure-helm.js +16 -0
  449. package/dist/runtime/seed/closure-helm.js.map +1 -0
  450. package/dist/runtime/seed/closure-names.d.ts +4 -0
  451. package/dist/runtime/seed/closure-names.d.ts.map +1 -0
  452. package/dist/runtime/seed/closure-names.js +29 -0
  453. package/dist/runtime/seed/closure-names.js.map +1 -0
  454. package/dist/runtime/seed/closure-native.d.ts +3 -0
  455. package/dist/runtime/seed/closure-native.d.ts.map +1 -0
  456. package/dist/runtime/seed/closure-native.js +18 -0
  457. package/dist/runtime/seed/closure-native.js.map +1 -0
  458. package/dist/runtime/seed/installation-tar.d.ts +5 -0
  459. package/dist/runtime/seed/installation-tar.d.ts.map +1 -0
  460. package/dist/runtime/seed/installation-tar.js +30 -0
  461. package/dist/runtime/seed/installation-tar.js.map +1 -0
  462. package/dist/runtime/seed/launch-env.d.ts +42 -0
  463. package/dist/runtime/seed/launch-env.d.ts.map +1 -0
  464. package/dist/runtime/seed/launch-env.js +150 -0
  465. package/dist/runtime/seed/launch-env.js.map +1 -0
  466. package/dist/runtime/seed/seed-container.d.ts +13 -0
  467. package/dist/runtime/seed/seed-container.d.ts.map +1 -0
  468. package/dist/runtime/seed/seed-container.js +175 -0
  469. package/dist/runtime/seed/seed-container.js.map +1 -0
  470. package/dist/runtime/seed/seed-delivery-env.d.ts +39 -0
  471. package/dist/runtime/seed/seed-delivery-env.d.ts.map +1 -0
  472. package/dist/runtime/seed/seed-delivery-env.js +47 -0
  473. package/dist/runtime/seed/seed-delivery-env.js.map +1 -0
  474. package/dist/runtime/seed/seed-down.d.ts +2 -0
  475. package/dist/runtime/seed/seed-down.d.ts.map +1 -0
  476. package/dist/runtime/seed/seed-down.js +52 -0
  477. package/dist/runtime/seed/seed-down.js.map +1 -0
  478. package/dist/runtime/seed/seed-env-file.d.ts +3 -0
  479. package/dist/runtime/seed/seed-env-file.d.ts.map +1 -0
  480. package/dist/runtime/seed/seed-env-file.js +24 -0
  481. package/dist/runtime/seed/seed-env-file.js.map +1 -0
  482. package/dist/runtime/seed/seed-env-secret.d.ts +18 -0
  483. package/dist/runtime/seed/seed-env-secret.d.ts.map +1 -0
  484. package/dist/runtime/seed/seed-env-secret.js +62 -0
  485. package/dist/runtime/seed/seed-env-secret.js.map +1 -0
  486. package/dist/runtime/seed/seed-environment.d.ts +12 -0
  487. package/dist/runtime/seed/seed-environment.d.ts.map +1 -0
  488. package/dist/runtime/seed/seed-environment.js +66 -0
  489. package/dist/runtime/seed/seed-environment.js.map +1 -0
  490. package/dist/runtime/seed/seed-facts.d.ts +22 -0
  491. package/dist/runtime/seed/seed-facts.d.ts.map +1 -0
  492. package/dist/runtime/seed/seed-facts.js +40 -0
  493. package/dist/runtime/seed/seed-facts.js.map +1 -0
  494. package/dist/runtime/seed/seed-helm.d.ts +10 -0
  495. package/dist/runtime/seed/seed-helm.d.ts.map +1 -0
  496. package/dist/runtime/seed/seed-helm.js +74 -0
  497. package/dist/runtime/seed/seed-helm.js.map +1 -0
  498. package/dist/runtime/seed/seed-image-user.d.ts +6 -0
  499. package/dist/runtime/seed/seed-image-user.d.ts.map +1 -0
  500. package/dist/runtime/seed/seed-image-user.js +14 -0
  501. package/dist/runtime/seed/seed-image-user.js.map +1 -0
  502. package/dist/runtime/seed/seed-installation-files.d.ts +23 -0
  503. package/dist/runtime/seed/seed-installation-files.d.ts.map +1 -0
  504. package/dist/runtime/seed/seed-installation-files.js +51 -0
  505. package/dist/runtime/seed/seed-installation-files.js.map +1 -0
  506. package/dist/runtime/seed/seed-installation.d.ts +20 -0
  507. package/dist/runtime/seed/seed-installation.d.ts.map +1 -0
  508. package/dist/runtime/seed/seed-installation.js +36 -0
  509. package/dist/runtime/seed/seed-installation.js.map +1 -0
  510. package/dist/runtime/seed/seed-launcher.d.ts +14 -0
  511. package/dist/runtime/seed/seed-launcher.d.ts.map +1 -0
  512. package/dist/runtime/seed/seed-launcher.js +155 -0
  513. package/dist/runtime/seed/seed-launcher.js.map +1 -0
  514. package/dist/runtime/seed/seed-options.d.ts +22 -0
  515. package/dist/runtime/seed/seed-options.d.ts.map +1 -0
  516. package/dist/runtime/seed/seed-options.js +57 -0
  517. package/dist/runtime/seed/seed-options.js.map +1 -0
  518. package/dist/runtime/seed/seed-platform-endpoints.d.ts +8 -0
  519. package/dist/runtime/seed/seed-platform-endpoints.d.ts.map +1 -0
  520. package/dist/runtime/seed/seed-platform-endpoints.js +55 -0
  521. package/dist/runtime/seed/seed-platform-endpoints.js.map +1 -0
  522. package/dist/runtime/seed/seed-process.d.ts +22 -0
  523. package/dist/runtime/seed/seed-process.d.ts.map +1 -0
  524. package/dist/runtime/seed/seed-process.js +79 -0
  525. package/dist/runtime/seed/seed-process.js.map +1 -0
  526. package/dist/runtime/seed/seed-record.d.ts +101 -0
  527. package/dist/runtime/seed/seed-record.d.ts.map +1 -0
  528. package/dist/runtime/seed/seed-record.js +141 -0
  529. package/dist/runtime/seed/seed-record.js.map +1 -0
  530. package/dist/runtime/seed/seed-resolved-deployment.d.ts +14 -0
  531. package/dist/runtime/seed/seed-resolved-deployment.d.ts.map +1 -0
  532. package/dist/runtime/seed/seed-resolved-deployment.js +52 -0
  533. package/dist/runtime/seed/seed-resolved-deployment.js.map +1 -0
  534. package/dist/runtime/seed/substrate-facts.d.ts +52 -0
  535. package/dist/runtime/seed/substrate-facts.d.ts.map +1 -0
  536. package/dist/runtime/seed/substrate-facts.js +92 -0
  537. package/dist/runtime/seed/substrate-facts.js.map +1 -0
  538. package/dist/runtime/seed/supervisor-contract.d.ts +9 -0
  539. package/dist/runtime/seed/supervisor-contract.d.ts.map +1 -0
  540. package/dist/runtime/seed/supervisor-contract.js +68 -0
  541. package/dist/runtime/seed/supervisor-contract.js.map +1 -0
  542. package/dist/runtime/seed/workload-identity-facts.d.ts +17 -0
  543. package/dist/runtime/seed/workload-identity-facts.d.ts.map +1 -0
  544. package/dist/runtime/seed/workload-identity-facts.js +53 -0
  545. package/dist/runtime/seed/workload-identity-facts.js.map +1 -0
  546. package/dist/runtime/sources/schema.d.ts +2 -0
  547. package/dist/runtime/sources/schema.d.ts.map +1 -1
  548. package/dist/runtime/sources/schema.js +10 -9
  549. package/dist/runtime/sources/schema.js.map +1 -1
  550. package/dist/runtime/store-client.d.ts +0 -10
  551. package/dist/runtime/store-client.d.ts.map +1 -1
  552. package/dist/runtime/store-client.js +0 -5
  553. package/dist/runtime/store-client.js.map +1 -1
  554. package/dist/runtime/tenancy/identity-installer.d.ts +11 -0
  555. package/dist/runtime/tenancy/identity-installer.d.ts.map +1 -0
  556. package/dist/runtime/tenancy/identity-installer.js +39 -0
  557. package/dist/runtime/tenancy/identity-installer.js.map +1 -0
  558. package/dist/runtime/tenancy/import-cache.d.ts +5 -0
  559. package/dist/runtime/tenancy/import-cache.d.ts.map +1 -0
  560. package/dist/runtime/tenancy/import-cache.js +27 -0
  561. package/dist/runtime/tenancy/import-cache.js.map +1 -0
  562. package/dist/runtime/tenancy/openfga.d.ts +4 -0
  563. package/dist/runtime/tenancy/openfga.d.ts.map +1 -0
  564. package/dist/runtime/tenancy/openfga.js +29 -0
  565. package/dist/runtime/tenancy/openfga.js.map +1 -0
  566. package/dist/runtime/tenancy/servers.d.ts +18 -0
  567. package/dist/runtime/tenancy/servers.d.ts.map +1 -0
  568. package/dist/runtime/tenancy/servers.js +102 -0
  569. package/dist/runtime/tenancy/servers.js.map +1 -0
  570. package/dist/runtime/tenancy/session.d.ts +19 -0
  571. package/dist/runtime/tenancy/session.d.ts.map +1 -0
  572. package/dist/runtime/tenancy/session.js +79 -0
  573. package/dist/runtime/tenancy/session.js.map +1 -0
  574. package/dist/runtime/tenancy/specs.d.ts +27 -0
  575. package/dist/runtime/tenancy/specs.d.ts.map +1 -0
  576. package/dist/runtime/tenancy/specs.js +129 -0
  577. package/dist/runtime/tenancy/specs.js.map +1 -0
  578. package/examples/01-local-native.yaml +1 -3
  579. package/examples/02-local-container-full.yaml +0 -2
  580. package/examples/03-byo-infra.yaml +1 -5
  581. package/examples/06-biome-sources.yaml +1 -3
  582. package/package.json +32 -37
  583. package/xema.config.example.yaml +1 -10
  584. package/dist/assets/keycloak/realm-xema.json +0 -397
  585. package/dist/commands/dev.d.ts.map +0 -1
  586. package/dist/commands/dev.js +0 -196
  587. package/dist/commands/dev.js.map +0 -1
  588. package/dist/commands/edition.d.ts +0 -3
  589. package/dist/commands/edition.d.ts.map +0 -1
  590. package/dist/commands/edition.js +0 -54
  591. package/dist/commands/edition.js.map +0 -1
  592. package/dist/commands/serve.d.ts +0 -3
  593. package/dist/commands/serve.d.ts.map +0 -1
  594. package/dist/commands/serve.js +0 -114
  595. package/dist/commands/serve.js.map +0 -1
  596. package/dist/dev/carved-installs.d.ts +0 -3
  597. package/dist/dev/carved-installs.d.ts.map +0 -1
  598. package/dist/dev/carved-installs.js +0 -63
  599. package/dist/dev/carved-installs.js.map +0 -1
  600. package/dist/dev/env-defaults.d.ts +0 -15
  601. package/dist/dev/env-defaults.d.ts.map +0 -1
  602. package/dist/dev/env-defaults.js +0 -178
  603. package/dist/dev/env-defaults.js.map +0 -1
  604. package/dist/dev/forked-worker-bootstrap-protocol.d.ts +0 -17
  605. package/dist/dev/forked-worker-bootstrap-protocol.d.ts.map +0 -1
  606. package/dist/dev/forked-worker-bootstrap-protocol.js +0 -35
  607. package/dist/dev/forked-worker-bootstrap-protocol.js.map +0 -1
  608. package/dist/dev/forked-worker-bootstrap.d.ts +0 -18
  609. package/dist/dev/forked-worker-bootstrap.d.ts.map +0 -1
  610. package/dist/dev/forked-worker-bootstrap.js +0 -84
  611. package/dist/dev/forked-worker-bootstrap.js.map +0 -1
  612. package/dist/dev/forked-worker.d.ts +0 -43
  613. package/dist/dev/forked-worker.d.ts.map +0 -1
  614. package/dist/dev/forked-worker.js +0 -358
  615. package/dist/dev/forked-worker.js.map +0 -1
  616. package/dist/edition/verify-image-evidence.bundle.mjs +0 -70456
  617. package/dist/edition/verify-image-evidence.bundle.provenance.json +0 -3957
  618. package/dist/runtime/backing-registration.d.ts +0 -11
  619. package/dist/runtime/backing-registration.d.ts.map +0 -1
  620. package/dist/runtime/backing-registration.js +0 -94
  621. package/dist/runtime/backing-registration.js.map +0 -1
  622. package/dist/runtime/edition/run-entry.d.ts +0 -9
  623. package/dist/runtime/edition/run-entry.d.ts.map +0 -1
  624. package/dist/runtime/edition/run-entry.js +0 -36
  625. package/dist/runtime/edition/run-entry.js.map +0 -1
  626. package/dist/runtime/edition/verb-map.d.ts +0 -70
  627. package/dist/runtime/edition/verb-map.d.ts.map +0 -1
  628. package/dist/runtime/edition/verb-map.js +0 -166
  629. package/dist/runtime/edition/verb-map.js.map +0 -1
  630. package/dist/runtime/env-seeder.d.ts +0 -26
  631. package/dist/runtime/env-seeder.d.ts.map +0 -1
  632. package/dist/runtime/env-seeder.js +0 -340
  633. package/dist/runtime/env-seeder.js.map +0 -1
  634. package/dist/runtime/port-map.d.ts +0 -3
  635. package/dist/runtime/port-map.d.ts.map +0 -1
  636. package/dist/runtime/port-map.js +0 -25
  637. package/dist/runtime/port-map.js.map +0 -1
  638. package/dist/runtime/run-manifest.d.ts +0 -52
  639. package/dist/runtime/run-manifest.d.ts.map +0 -1
  640. package/dist/runtime/run-manifest.js +0 -585
  641. package/dist/runtime/run-manifest.js.map +0 -1
  642. package/dist/runtime/runner/native-runner.d.ts +0 -13
  643. package/dist/runtime/runner/native-runner.d.ts.map +0 -1
  644. package/dist/runtime/runner/native-runner.js +0 -94
  645. package/dist/runtime/runner/native-runner.js.map +0 -1
  646. package/dist/runtime/runner/service-runner.d.ts +0 -28
  647. package/dist/runtime/runner/service-runner.d.ts.map +0 -1
  648. package/dist/runtime/runner/service-runner.js +0 -10
  649. package/dist/runtime/runner/service-runner.js.map +0 -1
  650. package/dist/runtime/secrets/generated-platform-secrets.d.ts +0 -16
  651. package/dist/runtime/secrets/generated-platform-secrets.d.ts.map +0 -1
  652. package/dist/runtime/secrets/generated-platform-secrets.js +0 -115
  653. package/dist/runtime/secrets/generated-platform-secrets.js.map +0 -1
  654. package/dist/runtime/secrets/resolver.d.ts +0 -23
  655. package/dist/runtime/secrets/resolver.d.ts.map +0 -1
  656. package/dist/runtime/secrets/resolver.js +0 -266
  657. package/dist/runtime/secrets/resolver.js.map +0 -1
  658. package/dist/runtime/supervisor.d.ts +0 -67
  659. package/dist/runtime/supervisor.d.ts.map +0 -1
  660. package/dist/runtime/supervisor.js +0 -227
  661. package/dist/runtime/supervisor.js.map +0 -1
  662. package/edition/README.md +0 -293
  663. package/edition/adapter-bundled-versions.mjs +0 -108
  664. package/edition/adapter-host-versions.mjs +0 -41
  665. package/edition/assemble-producer-input.mjs +0 -1414
  666. package/edition/assemble-third-party-input.mjs +0 -336
  667. package/edition/authored-source-check.mjs +0 -135
  668. package/edition/authorization-base.mjs +0 -357
  669. package/edition/biome-content.mjs +0 -327
  670. package/edition/build-biome-index.mjs +0 -180
  671. package/edition/build-ledger-completeness.mjs +0 -67
  672. package/edition/build-ledger.mjs +0 -107
  673. package/edition/build-platform-service-index.mjs +0 -292
  674. package/edition/build-runtime-image-source-index.mjs +0 -1187
  675. package/edition/built-verifier.mjs +0 -55
  676. package/edition/candidate-edition.mjs +0 -697
  677. package/edition/canonical-evidence-json.mjs +0 -82
  678. package/edition/canonical-repository-url.mjs +0 -47
  679. package/edition/catalogue-edition.mjs +0 -49
  680. package/edition/catalogue-evidence.mjs +0 -228
  681. package/edition/catalogue-fetch.mjs +0 -124
  682. package/edition/catalogue-lock-field.mjs +0 -41
  683. package/edition/catalogue-pin.mjs +0 -71
  684. package/edition/catalogue.mjs +0 -223
  685. package/edition/chart-set-source-commit.mjs +0 -97
  686. package/edition/check-committed-image-evidence.mjs +0 -412
  687. package/edition/checkout-indexed-source-repositories.mjs +0 -283
  688. package/edition/collected-refusals.mjs +0 -59
  689. package/edition/comment-blanker.mjs +0 -75
  690. package/edition/connector-source-authority.mjs +0 -60
  691. package/edition/contract-authority.mjs +0 -122
  692. package/edition/cosign-certificate-constraints.mjs +0 -50
  693. package/edition/cross-repo-build-inputs.mjs +0 -158
  694. package/edition/customer-definition.mjs +0 -174
  695. package/edition/customer-edition-verbs.mjs +0 -617
  696. package/edition/customer-flags.mjs +0 -15
  697. package/edition/develop-catalogue-free-resolve.mjs +0 -280
  698. package/edition/develop-chart-roster.mjs +0 -96
  699. package/edition/develop-chart-set.mjs +0 -147
  700. package/edition/develop-coverage-readers.mjs +0 -217
  701. package/edition/develop-coverage-run.mjs +0 -50
  702. package/edition/develop-coverage-verdict.mjs +0 -153
  703. package/edition/develop-coverage.mjs +0 -131
  704. package/edition/develop-current-resolution.mjs +0 -29
  705. package/edition/develop-edition-invariants.mjs +0 -142
  706. package/edition/develop-edition-resolve.mjs +0 -211
  707. package/edition/develop-edition.mjs +0 -379
  708. package/edition/develop-engine-image.mjs +0 -95
  709. package/edition/develop-follow.mjs +0 -491
  710. package/edition/develop-freeze.mjs +0 -289
  711. package/edition/develop-git-bundles.mjs +0 -255
  712. package/edition/develop-graph.mjs +0 -28
  713. package/edition/develop-image-coordinate.mjs +0 -54
  714. package/edition/develop-image-probe.mjs +0 -120
  715. package/edition/develop-image-record.mjs +0 -194
  716. package/edition/develop-record-ancestry.mjs +0 -144
  717. package/edition/develop-record-verify.mjs +0 -216
  718. package/edition/develop-resolve-report.mjs +0 -159
  719. package/edition/develop-select-records.mjs +0 -172
  720. package/edition/develop-selection-line.mjs +0 -30
  721. package/edition/develop-selection-pins.mjs +0 -36
  722. package/edition/develop-snapshot-inputs.mjs +0 -93
  723. package/edition/develop-verify-image-record.mjs +0 -109
  724. package/edition/dispatched-runtime-components.mjs +0 -172
  725. package/edition/dist-check.mjs +0 -1137
  726. package/edition/distribution-evidence-set.mjs +0 -1064
  727. package/edition/distribution-paths.mjs +0 -191
  728. package/edition/edition-artifact.mjs +0 -529
  729. package/edition/edition-biome-manifests.mjs +0 -85
  730. package/edition/edition-ceiling.mjs +0 -180
  731. package/edition/edition-channel.mjs +0 -20
  732. package/edition/edition-chart-set.mjs +0 -104
  733. package/edition/edition-config.mjs +0 -374
  734. package/edition/edition-constants.mjs +0 -110
  735. package/edition/edition-contract-parse.mjs +0 -179
  736. package/edition/edition-contract.json +0 -100
  737. package/edition/edition-image-seal.mjs +0 -110
  738. package/edition/edition-kind.mjs +0 -10
  739. package/edition/edition-list.mjs +0 -35
  740. package/edition/edition-locks.mjs +0 -79
  741. package/edition/edition-pin-verbs.mjs +0 -183
  742. package/edition/edition-pin.mjs +0 -17
  743. package/edition/edition-pinned-inputs.mjs +0 -116
  744. package/edition/edition-protocol.mjs +0 -277
  745. package/edition/edition-publisher.mjs +0 -21
  746. package/edition/edition-seal.mjs +0 -257
  747. package/edition/edition-source-pins.mjs +0 -211
  748. package/edition/edition-unpin.mjs +0 -16
  749. package/edition/edition-workspace.mjs +0 -204
  750. package/edition/evidence-checkout.mjs +0 -439
  751. package/edition/evidence-grammars.mjs +0 -18
  752. package/edition/evidence-input-mode.mjs +0 -136
  753. package/edition/evidence-trust-pin.mjs +0 -380
  754. package/edition/evidence-trust-policy.mjs +0 -374
  755. package/edition/external-source-walk.mjs +0 -485
  756. package/edition/first-party-source-ids.mjs +0 -62
  757. package/edition/fleet-coordinate-finality.mjs +0 -363
  758. package/edition/fulcio-certificate-extensions.mjs +0 -231
  759. package/edition/git-json.mjs +0 -54
  760. package/edition/git-source-auth.mjs +0 -131
  761. package/edition/image-delivery-entitlement-descriptor.mjs +0 -106
  762. package/edition/image-evidence-replay-state.mjs +0 -242
  763. package/edition/image-evidence.mjs +0 -1404
  764. package/edition/image-lock-service-rows.mjs +0 -26
  765. package/edition/image-subject-identity.mjs +0 -24
  766. package/edition/images-from-record.mjs +0 -298
  767. package/edition/indexes-at-pins.mjs +0 -13
  768. package/edition/kernel-capability-domain.mjs +0 -30
  769. package/edition/kernel-contract-authority.mjs +0 -517
  770. package/edition/kernel-contract-source-path-set.mjs +0 -94
  771. package/edition/kernel-package.mjs +0 -206
  772. package/edition/kernel-protocol-choice.mjs +0 -239
  773. package/edition/kernel-signer-kind.mjs +0 -23
  774. package/edition/lib.mjs +0 -3303
  775. package/edition/locked-bundle-signer.mjs +0 -297
  776. package/edition/map-with-concurrency.mjs +0 -19
  777. package/edition/no-follow-file.mjs +0 -94
  778. package/edition/oci-evidence-verbs.mjs +0 -419
  779. package/edition/oci-image-source-evidence.mjs +0 -364
  780. package/edition/operation-grant-admission.mjs +0 -285
  781. package/edition/operation-requirements.mjs +0 -282
  782. package/edition/oras-process.mjs +0 -35
  783. package/edition/oras.mjs +0 -742
  784. package/edition/pin-source.mjs +0 -242
  785. package/edition/pinned-cosign.mjs +0 -70
  786. package/edition/plan-image-evidence-refresh.mjs +0 -427
  787. package/edition/platform-lock-readability.mjs +0 -901
  788. package/edition/platform-service-class.mjs +0 -85
  789. package/edition/platform-service-ownership.mjs +0 -88
  790. package/edition/platform-service-source-authority.mjs +0 -105
  791. package/edition/positive-closure.mjs +0 -162
  792. package/edition/previous-seal-registry.mjs +0 -149
  793. package/edition/produce-distribution-completeness-evidence.mjs +0 -318
  794. package/edition/produce-edition-catalogue-evidence.mjs +0 -252
  795. package/edition/produce-image-delivery-entitlement-evidence.mjs +0 -304
  796. package/edition/produce-image-source-evidence.mjs +0 -788
  797. package/edition/producer-evidence-bundle.mjs +0 -201
  798. package/edition/producer-evidence-index-file.mjs +0 -4
  799. package/edition/record-refused.mjs +0 -12
  800. package/edition/registry-credentials.mjs +0 -225
  801. package/edition/release-catalogue.mjs +0 -47
  802. package/edition/release-channel-guard.mjs +0 -108
  803. package/edition/release-edition-artifact.mjs +0 -152
  804. package/edition/release-edition.mjs +0 -54
  805. package/edition/remedy-command.mjs +0 -89
  806. package/edition/repin-evidence-trust.mjs +0 -109
  807. package/edition/required-resource-provider.mjs +0 -58
  808. package/edition/resolve-chart-set.mjs +0 -376
  809. package/edition/resolve-customer-edition.mjs +0 -374
  810. package/edition/resolve-distribution.mjs +0 -2639
  811. package/edition/resolve-edition.mjs +0 -192
  812. package/edition/resolve-images.mjs +0 -2294
  813. package/edition/seal-image-digests.mjs +0 -954
  814. package/edition/sealed-distribution-lock.mjs +0 -22
  815. package/edition/sealed-evidence-accept.mjs +0 -82
  816. package/edition/shallow-checkout.mjs +0 -18
  817. package/edition/sigstore-bundle-media-type.mjs +0 -4
  818. package/edition/source-authority.mjs +0 -713
  819. package/edition/source-closure.mjs +0 -115
  820. package/edition/store-publisher-trust.mjs +0 -40
  821. package/edition/strict-json.mjs +0 -121
  822. package/edition/string-order.mjs +0 -5
  823. package/edition/third-party-admission.mjs +0 -91
  824. package/edition/third-party-bundle-registry.mjs +0 -242
  825. package/edition/third-party-certificate-extensions.mjs +0 -21
  826. package/edition/third-party-image-pins.mjs +0 -41
  827. package/edition/third-party-pins-trusted.mjs +0 -24
  828. package/edition/third-party-producer-evidence.mjs +0 -76
  829. package/edition/third-party-source-check.mjs +0 -28
  830. package/edition/third-party-source-context.mjs +0 -41
  831. package/edition/third-party-source-evidence.mjs +0 -287
  832. package/edition/third-party-source-flags.mjs +0 -134
  833. package/edition/third-party-source-pins.mjs +0 -259
  834. package/edition/third-party-source-uniqueness.mjs +0 -54
  835. package/edition/third-party-source-walk.mjs +0 -115
  836. package/edition/third-party-source-writer.mjs +0 -213
  837. package/edition/third-party-subjects.mjs +0 -128
  838. package/edition/trust-policy-arming-verb.mjs +0 -60
  839. package/edition/trust-policy-arming.mjs +0 -144
  840. package/edition/trust-policy-image-ownership.mjs +0 -85
  841. package/edition/trusted-executable.mjs +0 -166
  842. package/edition/verifier-binding.mjs +0 -45
  843. package/edition/verifier-files.mjs +0 -8
  844. package/edition/verifier-kernel-schemas.mjs +0 -22
  845. package/edition/verifier-provenance.mjs +0 -64
  846. package/edition/verify-catalogue-evidence.mjs +0 -247
  847. package/edition/verify-image-evidence.mjs +0 -475
  848. package/edition/verify-image-platforms.mjs +0 -523
  849. package/edition/why.mjs +0 -56
  850. package/edition/workspace-sections.mjs +0 -276
@@ -1,277 +0,0 @@
1
- // The edition protocol this library speaks, and the check that a kernel speaks
2
- // it too.
3
- //
4
- // The kernel (`@xemahq/contracts/edition-protocol`) exports the identity of the
5
- // code this library executes as DATA: `{contentDigest, provisional, version}` in
6
- // `dist/edition-protocol/edition-protocol.json`, and the edition contract in
7
- // `dist/edition-protocol/edition-contract.schema.json` (the identity, the
8
- // hashing convention, the entry subpaths this library may load, and every
9
- // kernel source file those subpaths load at runtime). `contentDigest` is the
10
- // kernel contract authority digest over the exact bytes of those files.
11
- //
12
- // The digest is a CONSERVATIVE, deterministic stand-in for protocol semantics.
13
- // Any change to accepted or refused edition semantics MUST change it; a
14
- // behaviour-preserving refactor MAY change it too, and the cost is a repin,
15
- // which is accepted. Semantic equivalence isn't computable, so it is never
16
- // detected.
17
- //
18
- // This library declares the versions it supports, each pinned to one digest,
19
- // and vendors a copy of each supported contract (`vendored/`, held to its pin
20
- // by `edition-protocol.test.mjs`). A kernel is accepted only when its identity
21
- // names a supported version, its digest is the one this library pins for that
22
- // version, and its contract file states that same identity. Nothing else about
23
- // the kernel is compared: a kernel change outside the protocol's source closure
24
- // needs no CLI release; a change inside it needs the CLI to add support.
25
- // Checking a kernel reads two files and executes nothing from it.
26
-
27
- import { realpathSync } from 'node:fs';
28
-
29
- import { RefusalError } from './collected-refusals.mjs';
30
- import { readBoundedNoFollowFile } from './no-follow-file.mjs';
31
-
32
- /** The edition protocols this library interprets: version -> content digest. A protocol is listed only
33
- * while every kernel published under it exports what this library imports (`kernel-export-coverage.test.mjs`).
34
- * Only v45 is listed (contracts 0.119.0: image-lock v5, build record `members`, and an idempotent
35
- * `carryForwardComposedArtifacts`). A v44 kernel's carry-forward bumps the generation on every call, so dist-check could never
36
- * be green on its seals; v43 cannot carry build record members; v42 and older lack `DEFAULT_COMPOSED_IMAGE_CLASS` and
37
- * `dedicatedServiceImageSubjects`. No legacy row is kept. */
38
- export const SUPPORTED_EDITION_PROTOCOLS = Object.freeze([
39
- Object.freeze({ version: 45, contentDigest: '54eb2f7d40e966e6efd5bc2ef0f4751b1121786300f4c50066e8add10c3ecb6a' }),
40
- ]);
41
-
42
- /** Where a kernel package publishes its identity and its contract, package-relative. */
43
- export const KERNEL_EDITION_PROTOCOL_FILE = 'dist/edition-protocol/edition-protocol.json';
44
- export const KERNEL_EDITION_CONTRACT_FILE = 'dist/edition-protocol/edition-contract.schema.json';
45
-
46
- /** This package's vendored copy of a supported contract, package-relative. */
47
- export const vendoredEditionContractFile = (version) =>
48
- `edition/vendored/edition-contract-v${version}.schema.json`;
49
-
50
- const MAX_IDENTITY_BYTES = 4 * 1024;
51
- const MAX_CONTRACT_BYTES = 8 * 1024 * 1024;
52
- const SHA256_HEX = /^[a-f0-9]{64}$/;
53
-
54
- /** Why a kernel's edition protocol was refused. A closed set. */
55
- export const EditionProtocolMismatchReason = Object.freeze({
56
- /** The kernel publishes no edition protocol identity. */
57
- Undeclared: 'undeclared',
58
- /** The identity file is not exactly `{contentDigest, provisional, version}`. */
59
- Malformed: 'malformed',
60
- /** The identity states `provisional: true`: a branch-local working identity, never pinned. */
61
- Provisional: 'provisional',
62
- /** This library supports no protocol of that version. */
63
- UnsupportedVersion: 'unsupported-version',
64
- /** The version is supported, but pinned to a different digest. */
65
- DigestMismatch: 'digest-mismatch',
66
- /** The kernel's contract file does not state its own identity. */
67
- ContractMismatch: 'contract-mismatch',
68
- /** The kernel's protocol is not the one compiled into the running verifier. */
69
- BundleMismatch: 'bundle-mismatch',
70
- /** No commit on the kernel checkout's first-parent history declares a protocol this library supports. */
71
- NoSupportedCommit: 'no-supported-commit',
72
- /** A kernel commit's protocol declaration source exists but does not parse; refused, never skipped. */
73
- Unparseable: 'unparseable',
74
- /** An explicit kernel commit is not on the first-parent history of the checkout's develop head. */
75
- NotOnDevelop: 'not-on-develop',
76
- });
77
-
78
- export class EditionProtocolMismatchError extends RefusalError {
79
- constructor(reason, message) {
80
- super(message);
81
- this.name = 'EditionProtocolMismatchError';
82
- this.reason = reason;
83
- }
84
- }
85
-
86
- const describe = ({ version, contentDigest }) => `edition protocol v${version} (${contentDigest})`;
87
-
88
- /** `v<N>, v<M>`: the versions this library supports, as every refusal names them. */
89
- export const supportedList = () =>
90
- SUPPORTED_EDITION_PROTOCOLS.map((protocol) => `v${protocol.version}`).join(', ');
91
-
92
- /** Refuse an identity that states `provisional: true`; nothing provisional is ever read as a protocol. */
93
- function assertFinalIdentity(identity, label) {
94
- if (identity.provisional !== false) {
95
- throw new EditionProtocolMismatchError(
96
- EditionProtocolMismatchReason.Provisional,
97
- `${label} declares ${describe(identity)} as provisional (a branch-local working identity); a provisional edition protocol is never pinned`,
98
- );
99
- }
100
- }
101
-
102
- /**
103
- * Parse identity bytes strictly: exactly `{contentDigest, provisional, version}`, a positive integer version, a
104
- * lowercase SHA-256 hex digest and a boolean `provisional`. An identity stating `provisional: true` is refused.
105
- */
106
- export function parseEditionProtocolIdentity(bytes, label) {
107
- let identity;
108
- try {
109
- identity = JSON.parse(bytes.toString('utf8'));
110
- } catch (error) {
111
- throw new EditionProtocolMismatchError(
112
- EditionProtocolMismatchReason.Malformed,
113
- `${label} is not JSON: ${error.message}`,
114
- );
115
- }
116
- if (
117
- identity === null ||
118
- typeof identity !== 'object' ||
119
- Array.isArray(identity) ||
120
- Object.keys(identity).sort().join() !== 'contentDigest,provisional,version' ||
121
- typeof identity.provisional !== 'boolean' ||
122
- !Number.isSafeInteger(identity.version) ||
123
- identity.version < 1 ||
124
- typeof identity.contentDigest !== 'string' ||
125
- !SHA256_HEX.test(identity.contentDigest)
126
- ) {
127
- throw new EditionProtocolMismatchError(
128
- EditionProtocolMismatchReason.Malformed,
129
- `${label} must be exactly {"contentDigest":"<64 lowercase hex>","provisional":<boolean>,"version":<positive integer>}`,
130
- );
131
- }
132
- assertFinalIdentity(identity, label);
133
- return Object.freeze({
134
- contentDigest: identity.contentDigest,
135
- provisional: identity.provisional,
136
- version: identity.version,
137
- });
138
- }
139
-
140
- /** The `{version, contentDigest}` a contract file states, or undefined. */
141
- function contractIdentity(contractBytes) {
142
- let contract;
143
- try {
144
- contract = JSON.parse(contractBytes.toString('utf8'));
145
- } catch {
146
- return undefined;
147
- }
148
- if (
149
- contract === null ||
150
- typeof contract !== 'object' ||
151
- !Number.isSafeInteger(contract.version) ||
152
- typeof contract.contentDigest !== 'string'
153
- ) {
154
- return undefined;
155
- }
156
- return { version: contract.version, contentDigest: contract.contentDigest };
157
- }
158
-
159
- /**
160
- * Refuse an identity this library does not support: a provisional one, an
161
- * unsupported version, or a supported version at another digest. Returns it.
162
- */
163
- export function assertSupportedEditionIdentity(identity, source) {
164
- assertFinalIdentity(identity, source);
165
- const supported = SUPPORTED_EDITION_PROTOCOLS.find(
166
- (protocol) => protocol.version === identity.version,
167
- );
168
- if (supported === undefined) {
169
- throw new EditionProtocolMismatchError(
170
- EditionProtocolMismatchReason.UnsupportedVersion,
171
- `${source} declares ${describe(identity)}; this CLI supports ${supportedList()}. ` +
172
- 'Use a CLI release that supports it, or pin a kernel that speaks a supported protocol.',
173
- );
174
- }
175
- if (supported.contentDigest !== identity.contentDigest) {
176
- throw new EditionProtocolMismatchError(
177
- EditionProtocolMismatchReason.DigestMismatch,
178
- `${source} declares ${describe(identity)}; this CLI pins v${supported.version} to ` +
179
- `${supported.contentDigest} (this CLI supports ${supportedList()}). The kernel changed the edition ` +
180
- 'contract without a new protocol version.',
181
- );
182
- }
183
- return identity;
184
- }
185
-
186
- /** True when `identity` is final and is a row of the supported table (version and digest). */
187
- export const isSupportedEditionIdentity = (identity) =>
188
- identity?.provisional === false &&
189
- SUPPORTED_EDITION_PROTOCOLS.some(
190
- (protocol) => protocol.version === identity.version && protocol.contentDigest === identity.contentDigest,
191
- );
192
-
193
- /**
194
- * Refuse an identity this library does not support, and a contract file that
195
- * does not state that identity. Returns the identity.
196
- */
197
- export function assertSupportedEditionProtocol({ identity, contractBytes, source }) {
198
- assertSupportedEditionIdentity(identity, source);
199
- const stated = contractIdentity(contractBytes);
200
- if (stated?.version !== identity.version || stated?.contentDigest !== identity.contentDigest) {
201
- throw new EditionProtocolMismatchError(
202
- EditionProtocolMismatchReason.ContractMismatch,
203
- `${source} declares ${describe(identity)}, but its edition contract file states ` +
204
- `${stated === undefined ? 'no identity' : describe(stated)}`,
205
- );
206
- }
207
- return identity;
208
- }
209
-
210
- /**
211
- * Read and check the edition protocol of the built kernel package at
212
- * `kernelPackageDir`. Reads two files, no-follow and bounded; executes nothing.
213
- */
214
- export function readKernelEditionProtocol(kernelPackageDir) {
215
- const source = `the kernel at ${kernelPackageDir}`;
216
- let identityBytes;
217
- try {
218
- ({ bytes: identityBytes } = readBoundedNoFollowFile(
219
- kernelPackageDir,
220
- KERNEL_EDITION_PROTOCOL_FILE,
221
- `${source}: ${KERNEL_EDITION_PROTOCOL_FILE}`,
222
- MAX_IDENTITY_BYTES,
223
- ));
224
- } catch (error) {
225
- if (error?.code !== 'ENOENT') {throw error;}
226
- throw new EditionProtocolMismatchError(
227
- EditionProtocolMismatchReason.Undeclared,
228
- `${source} publishes no edition protocol (${KERNEL_EDITION_PROTOCOL_FILE} is absent); ` +
229
- `this CLI supports ${supportedList()}. Pin a kernel that publishes its edition protocol identity.`,
230
- );
231
- }
232
- const identity = parseEditionProtocolIdentity(
233
- identityBytes,
234
- `${source}: ${KERNEL_EDITION_PROTOCOL_FILE}`,
235
- );
236
- const { bytes: contractBytes } = readBoundedNoFollowFile(
237
- kernelPackageDir,
238
- KERNEL_EDITION_CONTRACT_FILE,
239
- `${source}: ${KERNEL_EDITION_CONTRACT_FILE}`,
240
- MAX_CONTRACT_BYTES,
241
- );
242
- return assertSupportedEditionProtocol({ identity, contractBytes, source });
243
- }
244
-
245
- const checkedKernels = new Map();
246
-
247
- /**
248
- * {@link readKernelEditionProtocol}, once per kernel directory. Every loader
249
- * that executes kernel code calls it first, so no code path interprets a
250
- * kernel whose protocol this library does not support.
251
- */
252
- export function assertKernelEditionProtocol(kernelPackageDir) {
253
- const key = realpathSync(kernelPackageDir);
254
- let identity = checkedKernels.get(key);
255
- if (identity === undefined) {
256
- identity = readKernelEditionProtocol(key);
257
- checkedKernels.set(key, identity);
258
- }
259
- return identity;
260
- }
261
-
262
- /**
263
- * The running verifier interprets evidence with the contracts compiled into
264
- * it, so the kernel the workspace states must speak exactly that protocol.
265
- */
266
- export function assertKernelSpeaksBundledProtocol({ kernelPackageDir, bundled }) {
267
- assertFinalIdentity(bundled, 'the edition protocol compiled into this verifier');
268
- const stated = readKernelEditionProtocol(kernelPackageDir);
269
- if (stated.version !== bundled.version || stated.contentDigest !== bundled.contentDigest) {
270
- throw new EditionProtocolMismatchError(
271
- EditionProtocolMismatchReason.BundleMismatch,
272
- `the kernel at ${kernelPackageDir} declares ${describe(stated)}, but this verifier was built ` +
273
- `with ${describe(bundled)}`,
274
- );
275
- }
276
- return stated;
277
- }
@@ -1,21 +0,0 @@
1
- // edition-publisher — the grammar of an edition publisher: the exact GitHub Actions workflow whose keyless
2
- // signature admits an edition. `{repository, workflow, ref}`, each held to edition-contract.json
3
- // signers.publishers.shape; its certificate identity is `https://github.com/<repository>/<workflow>@<ref>`
4
- // (signers.identity), never a wildcard. The issuer is the contract's (edition-constants.mjs); the publisher
5
- // VALUES are the data root's (edition-workspace.json editionPublishers, edition-config.mjs).
6
-
7
- import { EDITION_CONTRACT } from './edition-constants.mjs';
8
-
9
- const SHAPE = Object.freeze(Object.fromEntries(Object.entries(EDITION_CONTRACT.signers.publishers.shape).map(([field, source]) => [field, new RegExp(source)])));
10
-
11
- /** Hold `publisher` to exactly `{repository, workflow, ref}`, each in the contract's shape; returns it. */
12
- export function assertPublisher(publisher, where) {
13
- const keys = publisher !== null && typeof publisher === 'object' && !Array.isArray(publisher) ? Object.keys(publisher).sort().join() : '';
14
- if (keys !== 'ref,repository,workflow' || !Object.entries(SHAPE).every(([field, pattern]) => typeof publisher[field] === 'string' && pattern.test(publisher[field]))) {
15
- throw new Error(`${where} must be exactly {repository: <owner>/<name>, workflow: .github/workflows/<file>.yaml, ref: refs/heads/<branch>} (edition-contract.json signers.publishers.shape; got ${JSON.stringify(publisher)})`);
16
- }
17
- return publisher;
18
- }
19
-
20
- /** The exact keyless certificate identity of a publisher. */
21
- export const publisherIdentity = ({ repository, workflow, ref }) => `https://github.com/${repository}/${workflow}@${ref}`;
@@ -1,257 +0,0 @@
1
- #!/usr/bin/env node
2
- // edition-seal — seal ONE exact resolved edition.
3
- //
4
- // xema edition seal --resolved <registry root>/<channel segment>/xema-edition-<id>@sha256:<64 hex>
5
- // --manifest <file> --artifact <dir> --out <dir>
6
- // --cosign <absolute path> --resolve-workflow-sha <40 hex>
7
- // [--local]
8
- // --data-root <dir> --editions-root <dir> --kernel <dir>
9
- //
10
- // FIRST, the seal verifies its input and fails closed: `cosign verify` of --resolved (the manifest digest),
11
- // through the one pinned-cosign path (pinned-cosign.mjs: the caller's cosign held to the digest the data root's
12
- // pinned policy names, `--offline` against the policy's pinned trusted root), with every certificate constraint
13
- // (cosign-certificate-constraints.mjs): the identity of the RESOLVE publisher, the contract's issuer (never
14
- // overridden), its workflow repository and ref, and --resolve-workflow-sha, the commit the resolve workflow ran
15
- // at (it only narrows the constraint: a wrong value fails the verify). The publisher is the data root's resolved
16
- // publisher of the --resolved repository's channel (edition-workspace.json editionPublishers.resolved.<channel>,
17
- // refused by name when undeclared: no default, and no flag names another). Its repository must be the
18
- // repository the resolved descriptor records as its workflow (provenance.workflow.repository), checked before
19
- // cosign runs. A refused or unrunnable verify writes nothing.
20
- //
21
- // The caller pulls the resolved edition BY DIGEST (`oras manifest fetch` into --manifest, `oras pull`
22
- // into --artifact). A seal is RELEASE-ONLY (edition-contract.json sealOf.channel, D99): a --resolved edition of any
23
- // other channel is refused by name, and the sealed edition records provenance.channel release and goes to the
24
- // release repository. Nothing pulled is trusted until it is proven to be the edition --resolved names:
25
- //
26
- // * the manifest bytes hash to the --resolved digest, it is an edition artifact (artifactType), and
27
- // every layer is titled with a file an edition may hold, once;
28
- // * every pulled file hashes to the digest of its layer, and the artifact holds no other file;
29
- // * the descriptor parses (xema.edition/v2) and is `kind: resolved`, of the distribution and the
30
- // channel the --resolved repository names.
31
- //
32
- // The sealed edition (written to --out, outside the committed trees) holds every layer of the resolved
33
- // edition but its descriptor BYTE FOR BYTE, plus a `kind: sealed` descriptor naming --resolved as `sealOf`,
34
- // with the resolved edition's channel (release), pins and engine image and the seal run as provenance.workflow.
35
- // A seal must be ARMED (edition-contract.json evidenceTrust.statesByKind): the data root's evidence trust
36
- // policy is judged on the resolved edition's channel, and anything but armed is refused by name
37
- // (EvidenceTrustRequiredError, EVIDENCE_TRUST_REQUIRED_UNARMED). The sealed repository is printed:
38
- // the same registry root, the release namespace segment. The workflow pushes --out there and signs the
39
- // manifest digest with the SEAL identity; who may seal is the signer's, not this command's.
40
-
41
- import { readFileSync, readdirSync } from 'node:fs';
42
- import { join, resolve } from 'node:path';
43
-
44
- import { certificateConstraintArgs } from './cosign-certificate-constraints.mjs';
45
- import { LOCAL_WORKFLOW, editionRepository, parseEditionDescriptor, parseSealOf, workflowFromEnv, writeSealedEditionArtifact } from './edition-artifact.mjs';
46
- import { editionPublisher } from './edition-config.mjs';
47
- import {
48
- CATALOGUE_PIN_KEY,
49
- EDITION_ARTIFACT_TYPE,
50
- EDITION_DESCRIPTOR_FILE,
51
- EDITION_FILES,
52
- EDITION_SIGNER_OIDC_ISSUER,
53
- EDITION_OFFERING_LAYERS,
54
- EditionKind,
55
- SEALED_EDITION_CHANNEL,
56
- } from './edition-constants.mjs';
57
- import { publisherIdentity } from './edition-publisher.mjs';
58
- import { WorkspaceRoot, configureEditionWorkspaceFromProcess, isEntryModule } from './edition-workspace.mjs';
59
- import { descriptorEvidenceTrust } from './evidence-trust-policy.mjs';
60
- import { sha256Hex } from './lib.mjs';
61
- import { cosignEnvironment, withPinnedCosign } from './pinned-cosign.mjs';
62
- import { splitImageRef } from './registry-credentials.mjs';
63
- import { parseStrictJson } from './strict-json.mjs';
64
-
65
- if (isEntryModule(import.meta.url)) {
66
- configureEditionWorkspaceFromProcess([WorkspaceRoot.Data, WorkspaceRoot.Editions, WorkspaceRoot.Kernel]);
67
- }
68
-
69
- const REQUIRED_FLAGS = Object.freeze(['--resolved', '--manifest', '--artifact', '--out', '--cosign', '--resolve-workflow-sha']);
70
- const VALUE_FLAGS = REQUIRED_FLAGS;
71
- const USAGE =
72
- 'usage: seal --resolved <repository>@sha256:<digest> --manifest <file> --artifact <dir> --out <dir> --cosign <absolute path> ' +
73
- '--resolve-workflow-sha <40 hex> [--local]';
74
- const WORKFLOW_SHA = /^[0-9a-f]{40}$/;
75
- const TITLE = 'org.opencontainers.image.title';
76
- /** Every file an edition artifact may hold: the descriptor, the locks, the offering layers. */
77
- const ADMITTED_FILES = Object.freeze([...EDITION_FILES, ...Object.values(EDITION_OFFERING_LAYERS)]);
78
-
79
- /** Parse the argv after the `seal` verb: every value flag exactly once, `--local` optional, nothing else. */
80
- export function parseSealArgs(argv) {
81
- const options = {};
82
- for (let i = 0; i < argv.length; i += 1) {
83
- const arg = argv[i];
84
- if (arg === '--local') {
85
- options[arg] = true;
86
- } else if (VALUE_FLAGS.includes(arg)) {
87
- const value = argv[i + 1];
88
- if (value === undefined || value.startsWith('--')) {throw new Error(`${arg} requires a value`);}
89
- if (arg in options) {throw new Error(`${arg} is given twice`);}
90
- options[arg] = value;
91
- i += 1;
92
- } else {
93
- throw new Error(`unknown argument ${arg} for seal (${USAGE})`);
94
- }
95
- }
96
- const missing = REQUIRED_FLAGS.filter((flag) => !(flag in options));
97
- if (missing.length > 0) {throw new Error(`seal requires ${missing.join(', ')} (${USAGE})`);}
98
- if (!WORKFLOW_SHA.test(options['--resolve-workflow-sha'])) {
99
- throw new Error(`--resolve-workflow-sha ${JSON.stringify(options['--resolve-workflow-sha'])} is not the 40-hex commit the resolve workflow ran at`);
100
- }
101
- return options;
102
- }
103
-
104
- /**
105
- * Prove the pulled manifest and files are the resolved edition `sealOf` names, and return
106
- * `{ resolved, layers }`: its parsed descriptor and every other layer's bytes by title.
107
- *
108
- * @param {{ sealOf: string, manifestBytes: Buffer, artifactDir: string }} input
109
- */
110
- export function readResolvedEdition({ sealOf, manifestBytes, artifactDir }) {
111
- const ref = parseSealOf(sealOf);
112
- if (ref.channel !== SEALED_EDITION_CHANNEL) {
113
- throw new Error(
114
- `${sealOf} is a ${ref.channel} edition: a seal is ${SEALED_EDITION_CHANNEL}-only (edition-contract.json sealOf.channel); ` +
115
- `seal the resolved ${SEALED_EDITION_CHANNEL} edition of "${ref.distributionId}" instead`,
116
- );
117
- }
118
- if (`sha256:${sha256Hex(manifestBytes)}` !== ref.digest) {
119
- throw new Error(`the manifest given hashes to sha256:${sha256Hex(manifestBytes)}, not to ${ref.digest}: it is not the manifest of ${sealOf}`);
120
- }
121
- const manifest = parseStrictJson(manifestBytes.toString('utf8'), 'the manifest');
122
- if (manifest?.artifactType !== EDITION_ARTIFACT_TYPE || !Array.isArray(manifest.layers)) {
123
- throw new Error(`${sealOf} is not an edition artifact (artifactType ${JSON.stringify(manifest?.artifactType)}, expected ${EDITION_ARTIFACT_TYPE})`);
124
- }
125
- const digestByTitle = new Map();
126
- for (const layer of manifest.layers) {
127
- const title = layer?.annotations?.[TITLE];
128
- if (!ADMITTED_FILES.includes(title)) {
129
- throw new Error(`${sealOf} carries a layer titled ${JSON.stringify(title)}, which is not a file an edition holds (${ADMITTED_FILES.join(', ')})`);
130
- }
131
- if (digestByTitle.has(title)) {throw new Error(`${sealOf} carries two layers titled ${title}`);}
132
- digestByTitle.set(title, layer.digest);
133
- }
134
- const pulled = readdirSync(artifactDir).sort();
135
- const expected = [...digestByTitle.keys()].sort();
136
- if (pulled.join('\0') !== expected.join('\0')) {
137
- throw new Error(`${artifactDir} holds ${pulled.join(', ') || 'nothing'}, but ${sealOf} has the layers ${expected.join(', ')}; pull exactly that artifact`);
138
- }
139
- const layers = new Map();
140
- let descriptorBytes;
141
- for (const [title, digest] of digestByTitle) {
142
- const bytes = readFileSync(join(artifactDir, title));
143
- if (`sha256:${sha256Hex(bytes)}` !== digest) {
144
- throw new Error(`${join(artifactDir, title)} hashes to sha256:${sha256Hex(bytes)}, not to its layer digest ${digest} in ${sealOf}`);
145
- }
146
- if (title === EDITION_DESCRIPTOR_FILE) {descriptorBytes = bytes;} else {layers.set(title, bytes);}
147
- }
148
- if (descriptorBytes === undefined) {throw new Error(`${sealOf} carries no ${EDITION_DESCRIPTOR_FILE}`);}
149
- const resolved = parseEditionDescriptor(parseStrictJson(descriptorBytes.toString('utf8'), `${sealOf} ${EDITION_DESCRIPTOR_FILE}`));
150
- if (resolved.kind !== EditionKind.Resolved) {
151
- throw new Error(`${sealOf} is a ${resolved.kind} edition; a seal seals exactly one resolved edition`);
152
- }
153
- if (resolved.distributionId !== ref.distributionId || resolved.provenance.channel !== ref.channel) {
154
- throw new Error(
155
- `${sealOf} is the ${ref.channel} repository of "${ref.distributionId}", but its descriptor records the ${resolved.provenance.channel} edition "${resolved.distributionId}"`,
156
- );
157
- }
158
- return { resolved, layers };
159
- }
160
-
161
- /**
162
- * The resolve publisher a seal verifies against: ONLY the data root's edition-workspace.json
163
- * editionPublishers.resolved.<channel> (refused by name when undeclared; no flag or default names another), and only
164
- * when its repository is the one the resolved descriptor records as its workflow: a seal never verifies an edition
165
- * against a publisher its own provenance does not name. Checked before cosign runs.
166
- */
167
- export function resolvePublisher(resolved, sealOf) {
168
- const channel = resolved.provenance.channel;
169
- const publisher = editionPublisher(EditionKind.Resolved, channel);
170
- const recorded = resolved.provenance.workflow?.repository;
171
- if (publisher.repository !== recorded) {
172
- throw new Error(
173
- `${sealOf} records its resolve workflow in ${JSON.stringify(recorded)}, but the data root's resolved ${channel} publisher ` +
174
- `(edition-workspace.json editionPublishers.resolved.${channel}) is in "${publisher.repository}": a seal verifies an edition only ` +
175
- 'against the publisher its provenance names; nothing is sealed',
176
- );
177
- }
178
- return publisher;
179
- }
180
-
181
- /**
182
- * `cosign verify` of `sealOf` against the exact resolve publisher, through the one pinned-cosign path. Throws, naming
183
- * the publisher, when cosign refuses (unsigned, another identity, another commit) or cannot run; returns nothing.
184
- *
185
- * @param {{ sealOf: string, publisher: {repository: string, workflow: string, ref: string}, workflowSha: string, cosignBinary: string, env: object, pinned?: object }} input
186
- * `pinned` are withPinnedCosign's injections (tests)
187
- */
188
- export async function verifyResolvedSignature({ sealOf, publisher, workflowSha, cosignBinary, env, pinned = {} }) {
189
- const signer = {
190
- certificateIdentity: publisherIdentity(publisher),
191
- oidcIssuer: EDITION_SIGNER_OIDC_ISSUER,
192
- githubWorkflow: { repository: publisher.repository, ref: publisher.ref },
193
- };
194
- const constraints = certificateConstraintArgs(signer, workflowSha);
195
- const { authority } = splitImageRef(parseSealOf(sealOf).repository);
196
- await withPinnedCosign({ cosignBinary, env, ...pinned }, async ({ runCosign, cosignEnvFor, trustedRootPath }) => {
197
- let result;
198
- try {
199
- result = await runCosign(['verify', '--offline', '--trusted-root', trustedRootPath, ...constraints, sealOf], cosignEnvironment(cosignEnvFor, authority));
200
- } catch (error) {
201
- throw new Error(`cosign could not run for ${sealOf}: ${error.message}; nothing is sealed`);
202
- }
203
- if (result.code !== 0) {
204
- throw new Error(
205
- `cosign refused ${sealOf} as signed by the resolve publisher ${signer.certificateIdentity} (issuer ${EDITION_SIGNER_OIDC_ISSUER}, ` +
206
- `workflow commit ${workflowSha}) (exit ${result.code}): ${String(result.stderr).trim()}; nothing is sealed`,
207
- );
208
- }
209
- });
210
- }
211
-
212
- /**
213
- * Seal: prove the pulled edition by digest, verify the resolve publisher's signature over it, require an ARMED policy
214
- * on its channel, write the sealed edition. Returns `{ descriptor, repository }`; the repository is where the sealed edition goes.
215
- */
216
- export async function sealEdition({ options, env, evidenceTrust = descriptorEvidenceTrust, pinned = {} }) {
217
- const sealOf = options['--resolved'];
218
- const { resolved, layers } = readResolvedEdition({
219
- sealOf,
220
- manifestBytes: readFileSync(options['--manifest']),
221
- artifactDir: resolve(options['--artifact']),
222
- });
223
- const channel = resolved.provenance.channel;
224
- await verifyResolvedSignature({
225
- sealOf,
226
- publisher: resolvePublisher(resolved, sealOf),
227
- workflowSha: options['--resolve-workflow-sha'],
228
- cosignBinary: options['--cosign'],
229
- env,
230
- pinned,
231
- });
232
- const evidenceTrustPolicy = await evidenceTrust({
233
- kind: EditionKind.Sealed,
234
- channel,
235
- consumesCatalogue: CATALOGUE_PIN_KEY in resolved.provenance.pins,
236
- });
237
- const descriptor = writeSealedEditionArtifact({
238
- outDir: resolve(options['--out']),
239
- resolved,
240
- sealOf,
241
- layers,
242
- workflow: options['--local'] ? LOCAL_WORKFLOW : workflowFromEnv(env),
243
- evidenceTrustPolicy,
244
- });
245
- const repository = editionRepository(resolved.distributionId, parseSealOf(sealOf).registryRoot, SEALED_EDITION_CHANNEL);
246
- return { descriptor, repository };
247
- }
248
-
249
- if (isEntryModule(import.meta.url)) {
250
- Promise.resolve()
251
- .then(() => sealEdition({ options: parseSealArgs(process.argv.slice(2)), env: process.env }))
252
- .then(({ repository }) => console.log(repository))
253
- .catch((error) => {
254
- console.error(`[edition-seal] ${error.message}`);
255
- process.exit(1);
256
- });
257
- }