@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.
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 -1423
  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 -2351
  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,788 +0,0 @@
1
- #!/usr/bin/env node
2
- // The image-source producer statement layer: build the canonical statement
3
- // bytes a producing workflow signs, and accept the signed bundles back.
4
- //
5
- // `xema edition evidence statement producer stage|accept`. This module never
6
- // signs: it holds no key and requests no OIDC token. `stage` writes the exact
7
- // bytes to sign and prints the signing plan; the caller runs
8
- // `cosign attest-blob`; `accept` re-derives the statements from the same
9
- // input, refuses staged bytes that differ, validates each bundle, verifies it
10
- // with cosign against the declared signer, and seals the evidence directory.
11
- //
12
- // The kernel contract authority every statement binds is the one the data
13
- // root's evidence-trust pin records (`evidence-trust-pin.mjs`): the data root's
14
- // `runtime-image-source-index.json` states it, and it is used only once it is
15
- // the pinned one. The verifier holds producer statements to the same pin.
16
-
17
- import { execFileSync } from 'node:child_process';
18
- import { createHash } from 'node:crypto';
19
- import {
20
- existsSync,
21
- mkdirSync,
22
- readFileSync,
23
- writeFileSync,
24
- } from 'node:fs';
25
- import { isAbsolute, join, resolve } from 'node:path';
26
- import { pathToFileURL } from 'node:url';
27
-
28
- import { certificateConstraintArgs } from './cosign-certificate-constraints.mjs';
29
- import { editionWorkspaceConfig } from './edition-config.mjs';
30
- import {
31
- dataRoot,
32
- isEntryModule,
33
- kernelDistPath,
34
- kernelRepoDir,
35
- } from './edition-workspace.mjs';
36
- import { COMMIT_PATTERN, GITHUB_REF_PATTERN, GITHUB_REPOSITORY_PATTERN, SHA256_DIGEST_PATTERN } from './evidence-grammars.mjs';
37
- import { EvidenceInputMode, configureEvidenceInputMode } from './evidence-input-mode.mjs';
38
- import {
39
- KERNEL_CONTRACT_AUTHORITY_NOT_PINNED_ONE,
40
- KernelContractAuthorityPinError,
41
- RUNTIME_IMAGE_SOURCE_INDEX_FILE,
42
- loadPinnedDeclaredTrustPolicy,
43
- readEvidenceTrustPin,
44
- readPinnedKernelContractAuthority,
45
- } from './evidence-trust-pin.mjs';
46
- import {
47
- canonicalJsonBytes,
48
- decodeExactUtf8,
49
- parseCanonicalJsonBytes,
50
- sha256Digest,
51
- } from './image-evidence.mjs';
52
- import { assertKernelContractAuthorityEqual } from './kernel-contract-authority.mjs';
53
- import { oidcCertificateSignerKind } from './kernel-signer-kind.mjs';
54
- import { serializeJson } from './lib.mjs';
55
- import { assertStagedExactly, reserveSealing, sealAccepted } from './sealed-evidence-accept.mjs';
56
- import { BUNDLE_MEDIA_TYPE } from './sigstore-bundle-media-type.mjs';
57
-
58
- export { BUNDLE_MEDIA_TYPE };
59
- const STAGED_STATEMENTS_DIRECTORY = 'statements';
60
- const STAGED_BUNDLES_DIRECTORY = 'bundles';
61
-
62
- /**
63
- * Git, run under a fully sandboxed environment: no user/system config, no
64
- * replace-objects rewriting, no credential prompt, no locale-dependent output.
65
- *
66
- * Exported because the producer-input assembler runs git against the SAME
67
- * checkouts under the SAME guarantees — a second copy of this environment is a
68
- * second security posture, and the two would drift silently (the assembler's
69
- * copy WAS byte-for-byte identical, which is exactly how nobody noticed).
70
- */
71
- export function sandboxedGit(repositoryRoot, args) {
72
- return execFileSync('/usr/bin/git', ['-C', repositoryRoot, ...args], {
73
- encoding: 'utf8',
74
- env: {
75
- GIT_CONFIG_GLOBAL: '/dev/null',
76
- GIT_CONFIG_NOSYSTEM: '1',
77
- GIT_NO_REPLACE_OBJECTS: '1',
78
- GIT_OPTIONAL_LOCKS: '0',
79
- GIT_TERMINAL_PROMPT: '0',
80
- LANG: 'C',
81
- LC_ALL: 'C',
82
- PATH: '/usr/bin:/bin',
83
- },
84
- stdio: ['ignore', 'pipe', 'pipe'],
85
- }).trim();
86
- }
87
-
88
- /** The data root's runtime image source index, unparsed: where the authority is read before any schema is loaded. */
89
- function readRawContractAuthority(root) {
90
- if (!isAbsolute(root)) {
91
- throw new Error('the data root must be an absolute path');
92
- }
93
- const authority = JSON.parse(
94
- readFileSync(join(root, RUNTIME_IMAGE_SOURCE_INDEX_FILE), 'utf8'),
95
- )?.contractAuthority;
96
- if (
97
- typeof authority?.repositoryUrl !== 'string' ||
98
- !COMMIT_PATTERN.test(authority?.sourceCommit ?? '')
99
- ) {
100
- throw new Error(
101
- `${RUNTIME_IMAGE_SOURCE_INDEX_FILE} at ${root} carries no kernel contract authority`,
102
- );
103
- }
104
- return authority;
105
- }
106
-
107
- /**
108
- * The kernel contract authority evidence of a data root is held to: the one its
109
- * evidence-trust pin records. The runtime image source index states it; a
110
- * stated authority that is not the pinned one, or a data root with no pin, is
111
- * refused (`KernelContractAuthorityPinError`). `declaration` is the data root's
112
- * `evidenceTrustPolicy`; it defaults to the configured workspace's.
113
- */
114
- export function readPinnedContractAuthority({
115
- dataRoot: root,
116
- schemas,
117
- declaration = editionWorkspaceConfig().evidenceTrustPolicy,
118
- }) {
119
- return readPinnedKernelContractAuthority({ dataRoot: root, declaration, schemas });
120
- }
121
-
122
- /**
123
- * The kernel schemas, loaded from a kernel checkout that is clean, has the
124
- * authority's repository as its origin and is at exactly the PINNED authority
125
- * commit. The pin is read before any kernel code is imported, so a checkout at
126
- * a commit the data root did not pin is never loaded. Returns the schemas and
127
- * the pinned authority they were held to.
128
- */
129
- export async function loadProducerKernelSchemas({
130
- dataRoot: root,
131
- kernelRepositoryDirectory = kernelRepoDir(),
132
- kernelDistributionModule = kernelDistPath('distribution', 'index.js'),
133
- declaration = editionWorkspaceConfig().evidenceTrustPolicy,
134
- }) {
135
- if (declaration.policy === null) {
136
- // The coded refusal of a data root with no pin.
137
- readPinnedKernelContractAuthority({ dataRoot: root, declaration, schemas: {} });
138
- }
139
- const expected = readRawContractAuthority(root);
140
- const pinned = readEvidenceTrustPin({ dataRoot: root, declaration }).kernelContractAuthority;
141
- if (pinned === null) {
142
- throw new KernelContractAuthorityPinError(
143
- KERNEL_CONTRACT_AUTHORITY_NOT_PINNED_ONE,
144
- `${RUNTIME_IMAGE_SOURCE_INDEX_FILE} at ${root} states kernel contract authority commit ${expected.sourceCommit} ` +
145
- 'but the evidence-trust pin records none; re-pin with `xema edition repin-evidence-trust`',
146
- );
147
- }
148
- if (expected.sourceCommit !== pinned.sourceCommit) {
149
- throw new Error(
150
- `${RUNTIME_IMAGE_SOURCE_INDEX_FILE} at ${root} states kernel contract authority commit ` +
151
- `${expected.sourceCommit} but the evidence-trust pin records ${pinned.sourceCommit}`,
152
- );
153
- }
154
- if (!isAbsolute(kernelRepositoryDirectory)) {
155
- throw new Error('the kernel contracts checkout must be an absolute path');
156
- }
157
- if (
158
- sandboxedGit(kernelRepositoryDirectory, ['remote', 'get-url', 'origin']) !==
159
- expected.repositoryUrl ||
160
- sandboxedGit(kernelRepositoryDirectory, ['rev-parse', '--verify', 'HEAD^{commit}']) !==
161
- expected.sourceCommit ||
162
- sandboxedGit(kernelRepositoryDirectory, [
163
- 'status',
164
- '--porcelain=v1',
165
- '--untracked-files=all',
166
- ]) !== ''
167
- ) {
168
- throw new Error(
169
- 'kernel contracts checkout must be clean, canonical, and at the evidence authority commit',
170
- );
171
- }
172
- let schemas;
173
- try {
174
- schemas = await import(pathToFileURL(kernelDistributionModule));
175
- } catch (error) {
176
- throw new Error(
177
- `cannot load built kernel evidence schemas at ${expected.sourceCommit}: ${error.message}`,
178
- );
179
- }
180
- return {
181
- schemas,
182
- contractAuthority: readPinnedContractAuthority({ dataRoot: root, schemas, declaration }),
183
- };
184
- }
185
-
186
- function exactKeys(value, keys, label) {
187
- if (
188
- typeof value !== 'object' ||
189
- value === null ||
190
- Array.isArray(value) ||
191
- JSON.stringify(Object.keys(value).sort()) !==
192
- JSON.stringify([...keys].sort())
193
- ) {
194
- throw new Error(`${label} does not have the exact required fields`);
195
- }
196
- return value;
197
- }
198
-
199
- function subjectKey(subject) {
200
- return `${subject.kind}:${subject.id}`;
201
- }
202
-
203
- function evidenceNonce(input, subject) {
204
- return createHash('sha256')
205
- .update('xema.image-source-evidence.nonce.v2\0')
206
- .update(input.runId)
207
- .update('\0')
208
- .update(String(input.runAttempt))
209
- .update('\0')
210
- .update(subjectKey(subject))
211
- .update('\0')
212
- .update(subject.manifestDigest)
213
- .digest('base64url');
214
- }
215
-
216
- function artifactStem(subject) {
217
- return createHash('sha256').update(subjectKey(subject)).digest('hex');
218
- }
219
-
220
- function assertSigner(signer) {
221
- exactKeys(
222
- signer,
223
- ['kind', 'certificateIdentity', 'oidcIssuer', 'githubWorkflow'],
224
- 'image-source producer signer',
225
- );
226
- exactKeys(
227
- signer.githubWorkflow,
228
- ['repository', 'ref', 'path'],
229
- 'image-source producer GitHub workflow',
230
- );
231
- const { repository, ref, path } = signer.githubWorkflow;
232
- if (
233
- !GITHUB_REPOSITORY_PATTERN.test(repository) ||
234
- !GITHUB_REF_PATTERN.test(ref) ||
235
- typeof path !== 'string' ||
236
- !path.startsWith('.github/workflows/') ||
237
- path.split('/').some((segment) => !segment || segment === '..')
238
- ) {
239
- throw new Error('image-source producer GitHub workflow is not canonical');
240
- }
241
- const expectedIdentity = `https://github.com/${repository}/${path}@${ref}`;
242
- if (signer.kind !== oidcCertificateSignerKind()) {
243
- throw new Error(
244
- `image-source producer signer kind must be "${oidcCertificateSignerKind()}"`,
245
- );
246
- }
247
- if (
248
- signer.certificateIdentity !== expectedIdentity ||
249
- signer.oidcIssuer !== 'https://token.actions.githubusercontent.com'
250
- ) {
251
- throw new Error(
252
- 'image-source producer signer identity or OIDC issuer is not exact',
253
- );
254
- }
255
- return signer;
256
- }
257
-
258
- export function assertGitHubProducerContext(input, context) {
259
- exactKeys(
260
- context,
261
- ['repository', 'ref', 'sha', 'workflowRef'],
262
- 'GitHub producer context',
263
- );
264
- const signer = assertSigner(input.signer);
265
- const expectedWorkflowRef =
266
- `${signer.githubWorkflow.repository}/${signer.githubWorkflow.path}` +
267
- `@${signer.githubWorkflow.ref}`;
268
- if (
269
- context.repository !== signer.githubWorkflow.repository ||
270
- context.ref !== signer.githubWorkflow.ref ||
271
- context.sha !== input.producerWorkflowSha ||
272
- context.workflowRef !== expectedWorkflowRef
273
- ) {
274
- throw new Error(
275
- 'GitHub producer context does not exactly match the input signer and workflow SHA',
276
- );
277
- }
278
- return context;
279
- }
280
-
281
- /**
282
- * The producer input, exact. `expectedContractAuthority` is the data root's
283
- * pinned authority ({@link readPinnedContractAuthority}); an input that binds any
284
- * other authority is refused here, before a statement is built from it.
285
- */
286
- export function assertProducerInput(input, expectedContractAuthority) {
287
- if (!expectedContractAuthority) {
288
- throw new Error('the expected kernel contract authority is required');
289
- }
290
- exactKeys(
291
- input,
292
- [
293
- 'schemaVersion',
294
- 'contractAuthority',
295
- 'sourceHashAlgorithm',
296
- 'producerWorkflowSha',
297
- 'signer',
298
- 'builder',
299
- 'runId',
300
- 'runAttempt',
301
- 'issuedAt',
302
- 'expiresAt',
303
- 'expectedSubjects',
304
- 'subjects',
305
- ],
306
- 'image-source producer input',
307
- );
308
- if (input.schemaVersion !== 1) {
309
- throw new Error('image-source producer input requires schemaVersion 1');
310
- }
311
- assertKernelContractAuthorityEqual(
312
- input.contractAuthority,
313
- expectedContractAuthority,
314
- 'image-source producer input',
315
- );
316
- if (!COMMIT_PATTERN.test(input.producerWorkflowSha)) {
317
- throw new Error('producerWorkflowSha must be an exact 40-hex commit');
318
- }
319
- assertSigner(input.signer);
320
- exactKeys(
321
- input.builder,
322
- ['builderId', 'buildType', 'buildDefinitionDigest', 'parametersDigest'],
323
- 'image-source producer builder',
324
- );
325
- if (
326
- !SHA256_DIGEST_PATTERN.test(input.builder.buildDefinitionDigest) ||
327
- !SHA256_DIGEST_PATTERN.test(input.builder.parametersDigest)
328
- ) {
329
- throw new Error(
330
- 'producer build definition and parameters require sha256 digests',
331
- );
332
- }
333
- if (
334
- !Array.isArray(input.expectedSubjects) ||
335
- input.expectedSubjects.length === 0
336
- ) {
337
- throw new Error('image-source producer expected subject set is empty');
338
- }
339
- if (!Array.isArray(input.subjects) || input.subjects.length === 0) {
340
- throw new Error('image-source producer subject set is empty');
341
- }
342
- for (const subject of input.subjects) {
343
- exactKeys(
344
- subject,
345
- [
346
- 'kind',
347
- 'id',
348
- 'repositoryUrl',
349
- 'repo',
350
- 'path',
351
- 'sourceCommit',
352
- 'sourceManifestHash',
353
- 'sourceTreeHash',
354
- 'imageRepository',
355
- 'manifestDigest',
356
- 'manifestMediaType',
357
- 'platforms',
358
- 'sbomDigest',
359
- 'provenanceDigest',
360
- ],
361
- `image-source producer subject ${String(subject?.kind)}:${String(subject?.id)}`,
362
- );
363
- }
364
- const expected = [...input.expectedSubjects];
365
- const actual = input.subjects.map(subjectKey);
366
- const sortedExpected = [...new Set(expected)].sort();
367
- const sortedActual = [...new Set(actual)].sort();
368
- if (
369
- JSON.stringify(expected) !== JSON.stringify(sortedExpected) ||
370
- JSON.stringify(actual) !== JSON.stringify(sortedActual) ||
371
- JSON.stringify(expected) !== JSON.stringify(actual)
372
- ) {
373
- throw new Error(
374
- `image-source producer requires the exact complete subject set; expected=${expected.join(',')} actual=${actual.join(',')}`,
375
- );
376
- }
377
- }
378
-
379
- export function buildImageSourceStatements(input, schemas, expectedContractAuthority) {
380
- assertProducerInput(input, expectedContractAuthority);
381
- return input.subjects.map((subject) => {
382
- const statement = {
383
- _type: 'https://in-toto.io/Statement/v1',
384
- subject: [
385
- {
386
- name: subject.imageRepository,
387
- digest: { sha256: subject.manifestDigest.slice('sha256:'.length) },
388
- },
389
- ],
390
- predicateType: schemas.IMAGE_PRODUCER_PREDICATE_TYPE,
391
- predicate: {
392
- schemaVersion: 2,
393
- contractAuthority: input.contractAuthority,
394
- source: {
395
- kind: subject.kind,
396
- id: subject.id,
397
- repositoryUrl: subject.repositoryUrl,
398
- repo: subject.repo,
399
- path: subject.path,
400
- sourceCommit: subject.sourceCommit,
401
- sourceManifestHash: subject.sourceManifestHash,
402
- sourceHashAlgorithm: input.sourceHashAlgorithm,
403
- sourceTreeHash: subject.sourceTreeHash,
404
- },
405
- build: {
406
- ...input.builder,
407
- platforms: subject.platforms,
408
- },
409
- artifact: {
410
- imageRepository: subject.imageRepository,
411
- manifestDigest: subject.manifestDigest,
412
- manifestMediaType: subject.manifestMediaType,
413
- sbom: {
414
- predicateType: 'https://spdx.dev/Document',
415
- digest: subject.sbomDigest,
416
- },
417
- provenance: {
418
- predicateType: 'https://slsa.dev/provenance/v1',
419
- digest: subject.provenanceDigest,
420
- },
421
- },
422
- producerRun: {
423
- producerWorkflowSha: input.producerWorkflowSha,
424
- runId: input.runId,
425
- runAttempt: input.runAttempt,
426
- nonce: evidenceNonce(input, subject),
427
- issuedAt: input.issuedAt,
428
- expiresAt: input.expiresAt,
429
- },
430
- },
431
- };
432
- return schemas.parseImageProducerStatement(statement);
433
- });
434
- }
435
-
436
- export function validateProducedBundle(statementBytes, bundleBytes) {
437
- const bundle = parseCanonicalJsonBytes(
438
- bundleBytes,
439
- 'produced Sigstore bundle',
440
- );
441
- if (
442
- bundle.mediaType !== BUNDLE_MEDIA_TYPE ||
443
- bundle.messageSignature !== undefined ||
444
- typeof bundle.dsseEnvelope !== 'object' ||
445
- bundle.dsseEnvelope === null ||
446
- bundle.dsseEnvelope.payloadType !== 'application/vnd.in-toto+json' ||
447
- !Array.isArray(bundle.dsseEnvelope.signatures) ||
448
- bundle.dsseEnvelope.signatures.length !== 1 ||
449
- typeof bundle.dsseEnvelope.payload !== 'string'
450
- ) {
451
- throw new Error('produced bundle is not one exact DSSE in-toto signature');
452
- }
453
- const payload = Buffer.from(bundle.dsseEnvelope.payload, 'base64');
454
- if (
455
- payload.toString('base64') !== bundle.dsseEnvelope.payload ||
456
- !payload.equals(statementBytes)
457
- ) {
458
- throw new Error(
459
- 'produced bundle payload does not exactly match its statement',
460
- );
461
- }
462
- return bundle;
463
- }
464
-
465
- /** The cosign that verifies is the version the data root's trust policy pins; the library names none. */
466
- function exactCosignVersion(output, policyCosignVersion) {
467
- if (typeof policyCosignVersion !== 'string' || !/^v\d+\.\d+\.\d+$/.test(policyCosignVersion)) {
468
- throw new Error("the trust policy's cosignVersion is required to accept signed evidence");
469
- }
470
- const match = /\bGitVersion:\s*(v\d+\.\d+\.\d+)\b/.exec(output);
471
- if (!match || match[1] !== policyCosignVersion) {
472
- throw new Error(`cosign version does not match pinned ${policyCosignVersion}`);
473
- }
474
- return match[1];
475
- }
476
-
477
- /**
478
- * A cosign runner that can read the version and VERIFY, and nothing else: the
479
- * edition library never signs, so any other subcommand is refused here. It
480
- * passes no OIDC request variables to the child.
481
- */
482
- export function createCosignVerifier(cosignBinary) {
483
- if (typeof cosignBinary !== 'string' || !isAbsolute(cosignBinary)) {
484
- throw new Error('cosign binary must be an absolute path');
485
- }
486
- return {
487
- readCosignVersion: () =>
488
- execFileSync(cosignBinary, ['version'], {
489
- encoding: 'utf8',
490
- env: { LANG: 'C', LC_ALL: 'C', PATH: '/usr/bin:/bin', TZ: 'UTC' },
491
- stdio: ['ignore', 'pipe', 'pipe'],
492
- timeout: 10_000,
493
- }),
494
- runCosign: (args) => {
495
- if (args[0] !== 'verify-blob-attestation') {
496
- throw new Error(
497
- `the edition library only verifies with cosign; it does not run "cosign ${String(args[0])}"`,
498
- );
499
- }
500
- return execFileSync(cosignBinary, args, {
501
- env: {
502
- HOME: process.env.HOME,
503
- LANG: 'C',
504
- LC_ALL: 'C',
505
- PATH: '/usr/bin:/bin',
506
- TZ: 'UTC',
507
- },
508
- stdio: ['ignore', 'ignore', 'pipe'],
509
- timeout: 180_000,
510
- });
511
- },
512
- };
513
- }
514
-
515
- /** The verification every accepted bundle must pass: the declared signer, at the exact workflow commit. */
516
- export function cosignVerifyAttestationArgs({ bundlePath, signer, certificateWorkflowSha, predicateType }) {
517
- return [
518
- 'verify-blob-attestation',
519
- '--check-claims=false',
520
- '--new-bundle-format',
521
- '--bundle',
522
- bundlePath,
523
- ...certificateConstraintArgs(signer, certificateWorkflowSha),
524
- '--type',
525
- predicateType,
526
- ];
527
- }
528
-
529
- /** The canonical bytes of a cosign-produced bundle, held to its statement. Reads; writes nothing. */
530
- export function canonicalSignedBundleBytes({ statementBytes, bundlePath }) {
531
- let producedBundle;
532
- try {
533
- producedBundle = JSON.parse(
534
- decodeExactUtf8(readFileSync(bundlePath), 'cosign-produced bundle'),
535
- );
536
- } catch (error) {
537
- throw new Error(
538
- `cosign-produced bundle is not exact UTF-8 JSON: ${error.message}`,
539
- );
540
- }
541
- const bundleBytes = canonicalJsonBytes(producedBundle);
542
- validateProducedBundle(statementBytes, bundleBytes);
543
- return bundleBytes;
544
- }
545
-
546
- function stagedPaths(statement) {
547
- const stem = artifactStem(statement.predicate.source);
548
- return {
549
- statementPath: `${STAGED_STATEMENTS_DIRECTORY}/${stem}.json`,
550
- bundlePath: `${STAGED_BUNDLES_DIRECTORY}/${stem}.sigstore.json`,
551
- };
552
- }
553
-
554
- /**
555
- * Write the canonical statement bytes to sign into a NEW staging directory and
556
- * return the signing plan: what to sign, where each bundle must be written,
557
- * and the identity each bundle will be verified against.
558
- */
559
- export function stageImageSourceEvidence({
560
- input,
561
- stagingDirectory,
562
- schemas,
563
- expectedContractAuthority,
564
- }) {
565
- if (!isAbsolute(stagingDirectory)) {
566
- throw new Error('the staging directory must be an absolute path');
567
- }
568
- if (existsSync(stagingDirectory)) {
569
- throw new Error(`evidence staging directory already exists: ${stagingDirectory}`);
570
- }
571
- const statements = buildImageSourceStatements(input, schemas, expectedContractAuthority);
572
- mkdirSync(join(stagingDirectory, STAGED_STATEMENTS_DIRECTORY), { recursive: true, mode: 0o700 });
573
- mkdirSync(join(stagingDirectory, STAGED_BUNDLES_DIRECTORY), { mode: 0o700 });
574
- const planned = [];
575
- for (const statement of statements) {
576
- const paths = stagedPaths(statement);
577
- writeFileSync(join(stagingDirectory, paths.statementPath), canonicalJsonBytes(statement), {
578
- flag: 'wx',
579
- mode: 0o600,
580
- });
581
- planned.push({
582
- subjectKind: statement.predicate.source.kind,
583
- subjectId: statement.predicate.source.id,
584
- ...paths,
585
- });
586
- }
587
- return {
588
- schemaVersion: 1,
589
- kind: 'producer',
590
- root: stagingDirectory,
591
- predicateType: schemas.IMAGE_PRODUCER_PREDICATE_TYPE,
592
- signer: input.signer,
593
- certificateWorkflowSha: input.producerWorkflowSha,
594
- statements: planned,
595
- };
596
- }
597
-
598
- /**
599
- * Accept the signed bundles of a staged directory and seal `outputDirectory`.
600
- *
601
- * The output is BUILT, never renamed from the staging: each statement is
602
- * re-derived from `input` (a staged statement that is not byte-identical is
603
- * refused, so nothing but what this library built can have been signed), each
604
- * bundle is canonicalized and verified, and only those derived files are
605
- * written. The staging must hold exactly what stage recorded.
606
- *
607
- * The staging does not outlive accept. A refused accept removes it together
608
- * with the partial output, so no signed-but-unaccepted bundle is left for a
609
- * later step to pick up; a successful accept removes it too. Only the argument
610
- * refusals above the first read leave it in place.
611
- *
612
- * `inputMode` (EvidenceInputMode) decides the cosign version check. In vendor
613
- * mode `cosignVersion` is the trust policy's pinned version and the cosign that
614
- * verifies must be it. In public-input mode there is no vendor trust policy and
615
- * no version is held (`cosignVersion` must be null): the vendor's admission
616
- * re-verifies every bundle with its own pinned cosign, and that is the
617
- * authority. The signature verification itself runs in both modes.
618
- */
619
- export function acceptImageSourceEvidence({
620
- input,
621
- stagingDirectory,
622
- outputDirectory,
623
- schemas,
624
- expectedContractAuthority,
625
- inputMode,
626
- cosignVersion,
627
- readCosignVersion,
628
- runCosign,
629
- }) {
630
- if (!isAbsolute(stagingDirectory) || !isAbsolute(outputDirectory)) {
631
- throw new Error('the staging and output directories must be absolute paths');
632
- }
633
- if (!Object.values(EvidenceInputMode).includes(inputMode)) {
634
- throw new Error(`accept needs an input mode, one of ${Object.values(EvidenceInputMode).join(', ')} (got ${String(inputMode)})`);
635
- }
636
- if (inputMode === EvidenceInputMode.PublicInput && cosignVersion !== null) {
637
- throw new Error('public-input accept holds no cosign version: the vendor admission re-verifies with its pinned cosign');
638
- }
639
- if (typeof readCosignVersion !== 'function' || typeof runCosign !== 'function') {
640
- throw new Error('cosign seams are required');
641
- }
642
- const sealing = reserveSealing(outputDirectory, 'evidence');
643
- return sealAccepted({
644
- stagingDirectory,
645
- sealing,
646
- outputDirectory,
647
- build: () => {
648
- if (inputMode === EvidenceInputMode.Vendor) {
649
- exactCosignVersion(readCosignVersion(), cosignVersion);
650
- }
651
- const statements = buildImageSourceStatements(input, schemas, expectedContractAuthority);
652
- assertStagedExactly(
653
- stagingDirectory,
654
- statements.flatMap((statement) => {
655
- const { statementPath, bundlePath } = stagedPaths(statement);
656
- return [statementPath, bundlePath];
657
- }),
658
- );
659
- mkdirSync(join(sealing, STAGED_STATEMENTS_DIRECTORY), { recursive: true, mode: 0o755 });
660
- mkdirSync(join(sealing, STAGED_BUNDLES_DIRECTORY), { mode: 0o755 });
661
- const producerEvidence = [];
662
- for (const statement of statements) {
663
- const { statementPath, bundlePath } = stagedPaths(statement);
664
- const statementBytes = canonicalJsonBytes(statement);
665
- if (!readFileSync(join(stagingDirectory, statementPath)).equals(statementBytes)) {
666
- throw new Error(
667
- `staged statement ${statementPath} is not the statement this producer input builds`,
668
- );
669
- }
670
- const bundleBytes = canonicalSignedBundleBytes({
671
- statementBytes,
672
- bundlePath: join(stagingDirectory, bundlePath),
673
- });
674
- writeFileSync(join(sealing, statementPath), statementBytes, { flag: 'wx', mode: 0o644 });
675
- writeFileSync(join(sealing, bundlePath), bundleBytes, { flag: 'wx', mode: 0o644 });
676
- // Verified where it is sealed: the bytes cosign accepts are the bytes kept.
677
- runCosign(
678
- cosignVerifyAttestationArgs({
679
- bundlePath: join(sealing, bundlePath),
680
- signer: input.signer,
681
- certificateWorkflowSha: input.producerWorkflowSha,
682
- predicateType: schemas.IMAGE_PRODUCER_PREDICATE_TYPE,
683
- }),
684
- );
685
- producerEvidence.push({
686
- subjectKind: statement.predicate.source.kind,
687
- subjectId: statement.predicate.source.id,
688
- evidence: {
689
- statementPath,
690
- statementDigest: sha256Digest(statementBytes),
691
- bundlePath,
692
- bundleDigest: sha256Digest(bundleBytes),
693
- bundleMediaType: BUNDLE_MEDIA_TYPE,
694
- },
695
- });
696
- }
697
- writeFileSync(
698
- join(sealing, 'producer-evidence.json'),
699
- serializeJson({ schemaVersion: 1, producerEvidence }),
700
- { flag: 'wx', mode: 0o644 },
701
- );
702
- return producerEvidence;
703
- },
704
- });
705
- }
706
-
707
- const USAGE =
708
- 'usage: xema edition evidence statement producer <stage|accept> --input <json> --staging <absolute-directory> ' +
709
- '--github-repository <owner/repo> --github-ref <ref> --github-sha <commit> ' +
710
- '--github-workflow-ref <owner/repo/path@ref> [accept: --output <absolute-directory> --cosign <absolute-binary>] ' +
711
- '(--data-root <dir> --kernel <dir> | --contract-authority <file>)';
712
-
713
- function parseFlags(args, known) {
714
- const flags = new Map();
715
- for (let index = 0; index < args.length; index += 2) {
716
- const flag = args[index];
717
- const value = args[index + 1];
718
- if (typeof flag !== 'string' || !flag.startsWith('--') || !known.includes(flag.slice(2))) {
719
- throw new Error(USAGE);
720
- }
721
- if (value === undefined || value.startsWith('--') || flags.has(flag.slice(2))) {
722
- throw new Error(USAGE);
723
- }
724
- flags.set(flag.slice(2), value);
725
- }
726
- for (const name of known) {
727
- if (!flags.has(name)) {throw new Error(USAGE);}
728
- }
729
- return flags;
730
- }
731
-
732
- async function main() {
733
- const [phase, ...argv] = process.argv.slice(2);
734
- if (phase !== 'stage' && phase !== 'accept') {
735
- throw new Error(USAGE);
736
- }
737
- const mode = await configureEvidenceInputMode(argv, { verb: `statement producer ${phase}` });
738
- const context = ['github-repository', 'github-ref', 'github-sha', 'github-workflow-ref'];
739
- const flags = parseFlags(
740
- mode.rest,
741
- phase === 'stage' ? ['input', 'staging', ...context] : ['input', 'staging', 'output', 'cosign', ...context],
742
- );
743
- const input = JSON.parse(readFileSync(resolve(flags.get('input')), 'utf8'));
744
- const { schemas, contractAuthority } =
745
- mode.mode === EvidenceInputMode.PublicInput ? mode : await loadProducerKernelSchemas({ dataRoot: dataRoot() });
746
- assertProducerInput(input, contractAuthority);
747
- assertGitHubProducerContext(input, {
748
- repository: flags.get('github-repository'),
749
- ref: flags.get('github-ref'),
750
- sha: flags.get('github-sha'),
751
- workflowRef: flags.get('github-workflow-ref'),
752
- });
753
- if (phase === 'stage') {
754
- const plan = stageImageSourceEvidence({
755
- input,
756
- stagingDirectory: flags.get('staging'),
757
- schemas,
758
- expectedContractAuthority: contractAuthority,
759
- });
760
- process.stdout.write(serializeJson(plan));
761
- return;
762
- }
763
- const evidence = acceptImageSourceEvidence({
764
- input,
765
- stagingDirectory: flags.get('staging'),
766
- outputDirectory: flags.get('output'),
767
- schemas,
768
- expectedContractAuthority: contractAuthority,
769
- inputMode: mode.mode,
770
- cosignVersion:
771
- mode.mode === EvidenceInputMode.PublicInput
772
- ? null
773
- : loadPinnedDeclaredTrustPolicy({
774
- dataRoot: dataRoot(),
775
- declaration: editionWorkspaceConfig().evidenceTrustPolicy,
776
- schemas,
777
- }).cosignVersion,
778
- ...createCosignVerifier(flags.get('cosign')),
779
- });
780
- process.stdout.write(serializeJson({ schemaVersion: 1, kind: 'producer', outputDirectory: flags.get('output'), producerEvidence: evidence }));
781
- }
782
-
783
- if (isEntryModule(import.meta.url)) {
784
- main().catch((error) => {
785
- console.error(`[image-source-evidence] ${error.message}`);
786
- process.exitCode = 1;
787
- });
788
- }