@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
package/edition/oras.mjs DELETED
@@ -1,742 +0,0 @@
1
- // OCI registry read transport for delivery-time verification, done by the
2
- // pinned `oras` CLI.
3
- //
4
- // This module owns one concern: getting BYTES out of a real registry and
5
- // proving they are the bytes that were asked for. It does not know what a
6
- // distribution is or why anything is being fetched. The credential
7
- // DECLARATION contract lives in `registry-credentials.mjs`.
8
- //
9
- // Every read is fail-closed, and there is no retry and no fallback:
10
- // * the oras binary is a TRUSTED EXECUTABLE: on a data root that declares an
11
- // evidence-trust pin its bytes must hash to one of the pin's
12
- // `trustedOrasBinaryDigests`, and it runs from a private copy of exactly
13
- // those bytes; its version must be the one this module's parsing is written
14
- // against;
15
- // * oras runs under a scrubbed environment (no ambient proxy, config or
16
- // credential variable reaches it) and an EMPTY registry config, so
17
- // ambient docker/oras credentials are never used and an authenticated
18
- // registry never degrades into an anonymous read;
19
- // * the token travels on stdin only (`--password-stdin`), never in argv;
20
- // * before oras ever receives a credential, the registry's own `/v2/`
21
- // challenge is probed and a token realm on another origin is refused;
22
- // * a manifest or blob is fetched in ONE call (`--descriptor --output <file>`:
23
- // the descriptor on stdout, the raw content in a scratch file). Its bytes
24
- // must hash to the digest the registry described (and, for a digest read,
25
- // to the requested digest), or the read throws; the manifest media type is
26
- // the descriptor's, never the manifest body's optional `mediaType` (Helm's
27
- // has none);
28
- // * declared size, on-disk size and read length are all held to the cap
29
- // BEFORE the content is read into memory;
30
- // * oras runs asynchronously, so a caller's worker pool really runs in parallel;
31
- // * every call of one registry shares one empty registry config for the run;
32
- // * a registry status is read only from oras's own error forms; any other
33
- // failure carries no status and is thrown as undecided;
34
- // * `--plain-http` and `--insecure` are never passed.
35
-
36
- import { createHash, randomUUID } from 'node:crypto';
37
- import {
38
- accessSync,
39
- constants,
40
- mkdtempSync,
41
- readFileSync,
42
- realpathSync,
43
- rmSync,
44
- statSync,
45
- unlinkSync,
46
- writeFileSync,
47
- } from 'node:fs';
48
- import { tmpdir } from 'node:os';
49
- import { delimiter, isAbsolute, join } from 'node:path';
50
-
51
- import { editionWorkspaceConfig } from './edition-config.mjs';
52
- import { dataRoot as configuredDataRoot } from './edition-workspace.mjs';
53
- import { SHA256_DIGEST_PATTERN } from './evidence-grammars.mjs';
54
- import { readEvidenceTrustPin } from './evidence-trust-pin.mjs';
55
- import { runExecutable } from './oras-process.mjs';
56
- import {
57
- OCI_INDEX_MEDIA_TYPES,
58
- REGISTRY_CREDENTIALS_FILE,
59
- } from './registry-credentials.mjs';
60
- import {
61
- assertPreparedExecutable,
62
- exactExecutableOutput,
63
- prepareDigestPinnedExecutable,
64
- } from './trusted-executable.mjs';
65
-
66
- /** The oras version whose arguments, JSON and error forms this module is written against. */
67
- export const ORAS_PINNED_VERSION = '1.3.4';
68
-
69
- /**
70
- * The referrers form every artifact is ATTACHED and DISCOVERED with. One
71
- * constant for both directions: an artifact attached under the referrers tag
72
- * schema is only found by a discover that reads the same schema.
73
- */
74
- export const REFERRERS_DISTRIBUTION_SPEC = 'v1.1-referrers-tag';
75
-
76
- /** The refusal of a Bearer token realm on another origin than the registry's. */
77
- export const REGISTRY_TOKEN_REALM_CROSS_HOST = 'REGISTRY_TOKEN_REALM_CROSS_HOST';
78
-
79
- export class RegistryTokenRealmError extends Error {
80
- /** @param {string} authority @param {string} realmOrigin */
81
- constructor(authority, realmOrigin) {
82
- super(
83
- `registry ${authority} advertised token realm "${realmOrigin}", which is not its own origin; ` +
84
- 'the pull credential is never sent to a third-party host',
85
- );
86
- this.name = 'RegistryTokenRealmError';
87
- this.code = REGISTRY_TOKEN_REALM_CROSS_HOST;
88
- }
89
- }
90
-
91
- const ORAS_VERSION_PATTERN = /^Version:\s+1\.3\.4(\+\S+)?$/m;
92
- const ORAS_BIN_ENV = 'XEMA_ORAS_BIN';
93
- const ORAS_RUN_TIMEOUT_MS = 120_000;
94
- const ORAS_MAX_BUFFER_BYTES = 64 * 1024 * 1024;
95
-
96
- const ACCEPTED_MANIFEST_MEDIA_TYPES = Object.freeze([
97
- ...OCI_INDEX_MEDIA_TYPES,
98
- 'application/vnd.oci.image.manifest.v1+json',
99
- 'application/vnd.docker.distribution.manifest.v2+json',
100
- ]);
101
-
102
- const REGISTRY_REQUEST_TIMEOUT_MS = 30_000;
103
- const MAX_MANIFEST_BYTES = 4 * 1024 * 1024;
104
- const MAX_DESCRIPTOR_BYTES = 64 * 1024;
105
- const MAX_CONFIG_BLOB_BYTES = 4 * 1024 * 1024;
106
- const MAX_ERROR_DETAIL_CHARS = 512;
107
-
108
- function sha256DigestOf(bytes) {
109
- return `sha256:${createHash('sha256').update(bytes).digest('hex')}`;
110
- }
111
-
112
- function isExecutableFile(path) {
113
- try {
114
- if (!statSync(path).isFile()) {return false;}
115
- accessSync(path, constants.X_OK);
116
- return true;
117
- } catch {
118
- return false;
119
- }
120
- }
121
-
122
- function firstOnPath(env) {
123
- for (const directory of (env.PATH ?? '').split(delimiter)) {
124
- if (!directory) {continue;}
125
- const candidate = join(directory, 'oras');
126
- if (isExecutableFile(candidate)) {return candidate;}
127
- }
128
- return null;
129
- }
130
-
131
- /**
132
- * The oras binary as a real file: `XEMA_ORAS_BIN` (an absolute path) wins,
133
- * otherwise the first `oras` on PATH. Symbolic links are resolved here, so the
134
- * path returned is the file whose bytes are digested. Nothing is executed.
135
- */
136
- export function locateOras({ env = process.env } = {}) {
137
- let bin;
138
- if (env[ORAS_BIN_ENV] !== undefined && env[ORAS_BIN_ENV] !== '') {
139
- bin = env[ORAS_BIN_ENV];
140
- if (!isAbsolute(bin)) {
141
- throw new Error(`${ORAS_BIN_ENV} must be an absolute path to the oras binary, got "${bin}"`);
142
- }
143
- } else {
144
- bin = firstOnPath(env);
145
- if (!bin) {
146
- throw new Error(
147
- `no oras binary found on PATH; install oras ${ORAS_PINNED_VERSION} or set ${ORAS_BIN_ENV} to its absolute path`,
148
- );
149
- }
150
- }
151
- try {
152
- return realpathSync(bin);
153
- } catch (error) {
154
- throw new Error(`the oras binary ${bin} is not readable: ${error.message}`);
155
- }
156
- }
157
-
158
- /** The environment oras runs under: nothing ambient, and a HOME that holds nothing. */
159
- function orasEnvironment(home) {
160
- return { HOME: home, LANG: 'C', LC_ALL: 'C', PATH: '/usr/bin:/bin', TZ: 'UTC' };
161
- }
162
-
163
- function assertOrasVersion(bin, home) {
164
- let output;
165
- try {
166
- output = exactExecutableOutput(bin, ['version'], { timeout: 30_000, env: orasEnvironment(home) });
167
- } catch (error) {
168
- throw new Error(
169
- `could not run "${bin} version": ${error instanceof Error ? error.message : String(error)}`,
170
- );
171
- }
172
- if (!ORAS_VERSION_PATTERN.test(output)) {
173
- const found = /^Version:\s+(\S+)/m.exec(output)?.[1] ?? '(unreadable)';
174
- throw new Error(
175
- `${bin} is oras ${found}, but this tooling is pinned to oras ${ORAS_PINNED_VERSION}`,
176
- );
177
- }
178
- return /^Version:\s+(\S+)/m.exec(output)[1];
179
- }
180
-
181
- /**
182
- * The oras digests the configured data root trusts: `trustedOrasBinaryDigests`
183
- * of its evidence-trust pin. `null` when the data root declares no evidence
184
- * trust at all (`evidenceTrustPolicy: null`):
185
- * such a data root has no reviewed pin to hold a binary to.
186
- */
187
- export function configuredOrasTrust() {
188
- const declaration = editionWorkspaceConfig().evidenceTrustPolicy;
189
- if (declaration.policy === null) {return null;}
190
- return readEvidenceTrustPin({ dataRoot: configuredDataRoot(), declaration })
191
- .trustedOrasBinaryDigests;
192
- }
193
-
194
- /** Each notice sink is told once: the default `console.warn` once per process, a test's own sink once per test. */
195
- const noticesGiven = new WeakSet();
196
-
197
- /**
198
- * Prepare the oras binary for use. With `trustedDigests` (an array) the binary
199
- * must hash to one of them and a private copy of exactly those bytes is what
200
- * runs; an empty list trusts no binary. With `trustedDigests: null` (no
201
- * evidence trust in force: a publisher's run with no data root, or a data root
202
- * that declares none) the binary is held to its version only,
203
- * and the run says so once.
204
- *
205
- * @returns {{version: string, pinned: boolean, path: () => string, dispose: () => void}}
206
- */
207
- export function prepareTrustedOras({ env = process.env, trustedDigests, notice = console.warn } = {}) {
208
- if (trustedDigests !== null && !Array.isArray(trustedDigests)) {
209
- throw new Error('the trusted oras digests are a list, or null for a data root that declares no evidence trust');
210
- }
211
- const located = locateOras({ env });
212
- const home = mkdtempSync(join(tmpdir(), 'xema-oras-home-'));
213
- try {
214
- if (trustedDigests === null) {
215
- const version = assertOrasVersion(located, home);
216
- if (!noticesGiven.has(notice)) {
217
- noticesGiven.add(notice);
218
- notice(
219
- `[oras] ${located} is held to its version (${version}) only: no evidence-trust pin is in force ` +
220
- '(a publisher run, or a data root that declares none), so there are no trustedOrasBinaryDigests to hold it to.',
221
- );
222
- }
223
- return {
224
- version,
225
- pinned: false,
226
- home,
227
- path: () => located,
228
- dispose: () => rmSync(home, { recursive: true, force: true }),
229
- };
230
- }
231
- let version;
232
- const handle = prepareDigestPinnedExecutable({
233
- executablePath: located,
234
- trustedDigests,
235
- label: 'oras',
236
- verifyVersion: (privateBinary) => {
237
- version = assertOrasVersion(privateBinary, home);
238
- },
239
- });
240
- return {
241
- version,
242
- pinned: true,
243
- home,
244
- path: () => assertPreparedExecutable(handle, 'oras'),
245
- dispose: () => {
246
- handle.dispose();
247
- rmSync(home, { recursive: true, force: true });
248
- },
249
- };
250
- } catch (error) {
251
- rmSync(home, { recursive: true, force: true });
252
- throw error;
253
- }
254
- }
255
-
256
- /** The default runner: the trusted oras of the configured data root, under the scrubbed environment. */
257
- function defaultRunner(trust = configuredOrasTrust) {
258
- let prepared;
259
- return async (args, { stdin, cwd } = {}) => {
260
- if (prepared === undefined) {
261
- prepared = prepareTrustedOras({ trustedDigests: trust() });
262
- process.once('exit', prepared.dispose);
263
- }
264
- try {
265
- return await runExecutable(prepared.path(), args, {
266
- input: stdin,
267
- ...(cwd === undefined ? {} : { cwd }),
268
- env: orasEnvironment(prepared.home),
269
- timeoutMs: ORAS_RUN_TIMEOUT_MS,
270
- maxBufferBytes: ORAS_MAX_BUFFER_BYTES,
271
- });
272
- } catch (error) {
273
- const stderr = error?.stderr ? error.stderr.toString('utf8') : '';
274
- const wrapped = new Error(stderr.trim() || (error instanceof Error ? error.message : String(error)));
275
- // Only what oras itself wrote is offered as a registry answer; a spawn
276
- // failure, a timeout or a signal carries no stderr and so no status.
277
- wrapped.stderr = stderr;
278
- throw wrapped;
279
- }
280
- };
281
- }
282
-
283
- function parseWwwAuthenticate(header) {
284
- if (typeof header !== 'string' || !/^Bearer\s/i.test(header)) {return null;}
285
- const parameters = new Map();
286
- const pattern = /([a-zA-Z_]+)="((?:[^"\\]|\\.)*)"/g;
287
- let match = pattern.exec(header);
288
- while (match) {
289
- parameters.set(match[1], match[2].replace(/\\(.)/g, '$1'));
290
- match = pattern.exec(header);
291
- }
292
- const realm = parameters.get('realm');
293
- if (!realm) {return null;}
294
- return { realm };
295
- }
296
-
297
- const ORAS_REGISTRY_ERROR_PREFIX = 'Error response from registry: ';
298
- const ORAS_ERROR_PREFIX = 'Error: ';
299
-
300
- /**
301
- * The HTTP status a registry answered with; null when the failure is not a
302
- * registry answer.
303
- *
304
- * oras 1.3.4 has no structured error output and exits 1 for every failure, so
305
- * the status is read from its stderr, and ONLY from the forms oras itself
306
- * prints (captured against a registry; see oras.test.mjs). The FIRST line of
307
- * stderr must be oras's own error line, and within it:
308
- * * `Error response from registry: … response status code <NNN>: …` carries
309
- * the registry's status itself;
310
- * * `Error response from registry: … <ref>: not found` and
311
- * `Error: … <ref>: not found`, ending the line with the EXACT reference that
312
- * was asked for, are oras's resolution of a 404;
313
- * * `Error response from registry: name unknown: …` is the registry's error
314
- * code for a missing repository, in the position oras prints it.
315
- * Everything else is null: text from a wrapper, a shell (`oras: not found`,
316
- * `Permission denied`), a proxy or a transport failure is not a registry
317
- * answer, whatever words it contains, and neither is a status-like word inside
318
- * a reference or a quoted string. A null status is thrown by the caller as an
319
- * UNDECIDED failure; it is never read as "absent".
320
- */
321
- export function statusOfOrasFailure(text, { ref = '' } = {}) {
322
- const [line] = String(text).split('\n');
323
- const fromRegistry = line.startsWith(ORAS_REGISTRY_ERROR_PREFIX);
324
- if (!fromRegistry && !line.startsWith(ORAS_ERROR_PREFIX)) {return null;}
325
- if (fromRegistry) {
326
- // The status oras reports sits after the quoted request URL; a reference
327
- // that spells `response status code 404` is inside the quotes.
328
- const explicit = /\bresponse status code (\d{3})\b/.exec(line.replace(/"(?:[^"\\]|\\.)*"/g, '""'));
329
- if (explicit) {return Number(explicit[1]);}
330
- if (/^name unknown: /.test(line.slice(ORAS_REGISTRY_ERROR_PREFIX.length))) {return 404;}
331
- }
332
- if (ref && line.endsWith(` ${ref}: not found`)) {return 404;}
333
- return null;
334
- }
335
-
336
- /**
337
- * ONE oras working directory per registry authority per process: the (empty)
338
- * registry config every call of that registry points at, and the scratch
339
- * files a fetch writes its content to. The config never holds a credential
340
- * (that goes to oras on stdin, per call), so sharing it carries no secret; it
341
- * replaces a temp directory made and removed around every single call.
342
- */
343
- const registrySessions = new Map();
344
-
345
- function registrySession(authority) {
346
- let session = registrySessions.get(authority);
347
- if (session === undefined) {
348
- const directory = mkdtempSync(join(tmpdir(), 'xema-oras-'));
349
- const configPath = join(directory, 'registry-config.json');
350
- writeFileSync(configPath, '');
351
- session = { directory, configPath };
352
- registrySessions.set(authority, session);
353
- if (registrySessions.size === 1) {
354
- process.once('exit', disposeRegistrySessions);
355
- }
356
- }
357
- return session;
358
- }
359
-
360
- /** Remove every registry session directory; called at process exit, and by tests. */
361
- export function disposeRegistrySessions() {
362
- for (const { directory } of registrySessions.values()) {
363
- rmSync(directory, { recursive: true, force: true });
364
- }
365
- registrySessions.clear();
366
- }
367
-
368
- /**
369
- * An OCI registry client (reads, and `attach`) bound to ONE registry authority and ONE
370
- * resolved credential, doing every operation with the pinned oras.
371
- */
372
- export class OrasRegistry {
373
- #credential;
374
- #run;
375
- #fetchImpl;
376
- #username = null;
377
- #token = null;
378
- #realmCheck = null;
379
-
380
- /**
381
- * `run` replaces the oras invocation (tests). Without it the trusted oras of
382
- * the configured data root runs; `trust` states the trusted digests instead
383
- * of reading them from the data root's pin.
384
- */
385
- constructor({ credential, run, trust, fetchImpl = globalThis.fetch }) {
386
- if (typeof credential?.authority !== 'string') {
387
- throw new Error('an oras registry requires a resolved credential');
388
- }
389
- if (typeof fetchImpl !== 'function') {
390
- throw new Error('an oras registry requires a fetch implementation for the token-realm check');
391
- }
392
- this.#credential = credential;
393
- this.#run = run ?? defaultRunner(trust);
394
- this.#fetchImpl = fetchImpl;
395
- if (credential.access === 'authenticated') {
396
- const decoded = Buffer.from(credential.basicAuth ?? '', 'base64').toString('utf8');
397
- const colon = decoded.indexOf(':');
398
- if (colon <= 0 || colon === decoded.length - 1) {
399
- throw new Error(`registry ${credential.authority} is authenticated but its credential is incomplete`);
400
- }
401
- this.#username = decoded.slice(0, colon);
402
- this.#token = decoded.slice(colon + 1);
403
- }
404
- }
405
-
406
- get authority() {
407
- return this.#credential.authority;
408
- }
409
-
410
- /**
411
- * The Bearer token realm must be the registry's OWN origin. Checked once,
412
- * with an unauthenticated probe, BEFORE oras is handed the credential: a
413
- * registry that points its realm at another host would otherwise receive the
414
- * pull token (a credential exfiltration primitive).
415
- */
416
- #ensureRealmIsSameOrigin() {
417
- if (this.#credential.access !== 'authenticated') {return Promise.resolve();}
418
- this.#realmCheck ??= this.#probeRealm();
419
- return this.#realmCheck;
420
- }
421
-
422
- async #probeRealm() {
423
- const origin = `https://${this.authority}`;
424
- let response;
425
- try {
426
- response = await this.#fetchImpl(`${origin}/v2/`, {
427
- method: 'GET',
428
- redirect: 'manual',
429
- headers: { 'user-agent': 'xema-edition-platform-verifier/1' },
430
- signal: AbortSignal.timeout(REGISTRY_REQUEST_TIMEOUT_MS),
431
- });
432
- } catch (error) {
433
- throw new Error(
434
- `registry request to ${origin}/v2/ failed: ${error instanceof Error ? error.message : String(error)}`,
435
- );
436
- }
437
- if (response.status === 200) {return;}
438
- if (response.status !== 401) {
439
- throw new Error(`registry ${this.authority} answered its /v2/ probe with ${response.status}`);
440
- }
441
- const challenge = parseWwwAuthenticate(response.headers.get('www-authenticate'));
442
- if (!challenge) {return;}
443
- let url;
444
- try {
445
- url = new URL(challenge.realm);
446
- } catch {
447
- throw new Error(
448
- `registry ${this.authority} advertised a token realm that is not an absolute URL`,
449
- );
450
- }
451
- if (url.origin !== origin) {
452
- throw new RegistryTokenRealmError(this.authority, url.origin);
453
- }
454
- }
455
-
456
- #scrub(text) {
457
- return this.#token ? text.split(this.#token).join('***') : text;
458
- }
459
-
460
- /** One oras invocation under this registry's shared empty config; returns stdout bytes. */
461
- async #oras(subcommand, flags, ref, { cwd, operands = [] } = {}) {
462
- await this.#ensureRealmIsSameOrigin();
463
- const { configPath } = registrySession(this.authority);
464
- const args = [...subcommand, '--registry-config', configPath];
465
- let stdin;
466
- if (this.#credential.access === 'authenticated') {
467
- args.push('--username', this.#username, '--password-stdin');
468
- stdin = this.#token;
469
- }
470
- args.push(...flags, ref, ...operands);
471
- try {
472
- const out = await this.#run(args, { stdin, ...(cwd === undefined ? {} : { cwd }) });
473
- return Buffer.isBuffer(out) ? out : Buffer.from(out ?? '');
474
- } catch (error) {
475
- throw this.#failure(ref, error);
476
- }
477
- }
478
-
479
- /**
480
- * ONE oras call that returns the descriptor (stdout) AND the raw content
481
- * (written to a scratch file by `--output`): the call that used to be a
482
- * descriptor round trip followed by a content round trip. The content is
483
- * read into memory only after both its declared and its on-disk size are
484
- * inside `maxBytes`.
485
- */
486
- async #fetchContent(subcommand, ref, maxBytes, acceptDescriptor) {
487
- const { directory } = registrySession(this.authority);
488
- const outputPath = join(directory, `content-${randomUUID()}`);
489
- try {
490
- const described = await this.#oras(subcommand, ['--descriptor', '--output', outputPath], ref);
491
- const descriptor = this.#parseDescriptor(described, ref);
492
- acceptDescriptor(descriptor);
493
- if (descriptor.size > maxBytes) {
494
- throw new Error(`${ref} declares ${descriptor.size} bytes, exceeding ${maxBytes}`);
495
- }
496
- const onDisk = statSync(outputPath).size;
497
- if (onDisk > maxBytes) {
498
- throw new Error(`${ref} returned more than ${maxBytes} bytes`);
499
- }
500
- const bytes = readFileSync(outputPath);
501
- const actual = sha256DigestOf(bytes);
502
- if (actual !== descriptor.digest) {
503
- throw new Error(`${ref} returned content addressed ${actual}, not the digest ${descriptor.digest} it described`);
504
- }
505
- return { descriptor, bytes };
506
- } finally {
507
- try {
508
- unlinkSync(outputPath);
509
- } catch {
510
- // No content file exists when the fetch itself failed; the failure is already thrown.
511
- }
512
- }
513
- }
514
-
515
- #failure(ref, error) {
516
- // The status comes from oras's stderr ALONE. A failure with no stderr (the
517
- // binary did not start, timed out, was killed) is local, and its message is
518
- // shown but never parsed for a status.
519
- const stderr = this.#scrub(typeof error?.stderr === 'string' ? error.stderr.trim() : '');
520
- const status = stderr ? statusOfOrasFailure(stderr, { ref }) : null;
521
- const raw = this.#scrub(error instanceof Error ? error.message : String(error));
522
- const detail = (stderr || raw).slice(0, MAX_ERROR_DETAIL_CHARS).trim();
523
- if (status === null) {
524
- return new Error(`registry request to ${ref} failed: ${detail}`);
525
- }
526
- const hint =
527
- (status === 401 || status === 403) && this.#credential.access === 'anonymous'
528
- ? ` — registry "${this.authority}" is declared "anonymous" in ${REGISTRY_CREDENTIALS_FILE}; if its packages are private, declare it "authenticated"`
529
- : '';
530
- const failure = new Error(
531
- `${ref} returned HTTP ${status}${hint}${detail ? `: ${detail}` : ''}`,
532
- );
533
- failure.status = status;
534
- return failure;
535
- }
536
-
537
- #ref(repository) {
538
- return `${this.authority}/${repository}`;
539
- }
540
-
541
- #parseDescriptor(bytes, ref) {
542
- if (bytes.length > MAX_DESCRIPTOR_BYTES) {
543
- throw new Error(`${ref} descriptor is larger than ${MAX_DESCRIPTOR_BYTES} bytes`);
544
- }
545
- let descriptor;
546
- try {
547
- descriptor = JSON.parse(bytes.toString('utf8'));
548
- } catch (error) {
549
- throw new Error(`${ref} descriptor is not JSON: ${error.message}`);
550
- }
551
- if (
552
- typeof descriptor !== 'object' ||
553
- descriptor === null ||
554
- typeof descriptor.mediaType !== 'string' ||
555
- !SHA256_DIGEST_PATTERN.test(descriptor.digest) ||
556
- !Number.isSafeInteger(descriptor.size) ||
557
- descriptor.size < 0
558
- ) {
559
- throw new Error(`${ref} did not return a usable descriptor`);
560
- }
561
- return descriptor;
562
- }
563
-
564
- /**
565
- * ATTACH `files` (paths relative to `cwd`, each with its media type) as an artifact of `artifactType` that is a referrer
566
- * of `subjectDigest`, under the same referrers form discover reads ({@link REFERRERS_DISTRIBUTION_SPEC}). Returns the
567
- * digest of the referrer manifest oras reports. The only write this client does; the caller states every byte.
568
- *
569
- * @param {string} repository
570
- * @param {string} subjectDigest
571
- * @param {{ artifactType: string, files: {path: string, mediaType: string}[], annotations?: Record<string,string>, cwd: string }} attachment
572
- */
573
- async attach(repository, subjectDigest, { artifactType, files, annotations = {}, cwd }) {
574
- if (!SHA256_DIGEST_PATTERN.test(subjectDigest)) {
575
- throw new Error(`"${subjectDigest}" is not a canonical lowercase sha256 digest`);
576
- }
577
- if (typeof artifactType !== 'string' || artifactType.length === 0) {
578
- throw new Error('an attach requires a non-empty artifact type');
579
- }
580
- if (!Array.isArray(files) || files.length === 0 || typeof cwd !== 'string' || !isAbsolute(cwd)) {
581
- throw new Error('an attach requires at least one file and an absolute working directory');
582
- }
583
- const ref = `${this.#ref(repository)}@${subjectDigest}`;
584
- const flags = ['--distribution-spec', REFERRERS_DISTRIBUTION_SPEC, '--artifact-type', artifactType];
585
- for (const [key, value] of Object.entries(annotations)) {
586
- flags.push('--annotation', `${key}=${value}`);
587
- }
588
- flags.push('--format', 'json');
589
- const out = await this.#oras(['attach'], flags, ref, {
590
- cwd,
591
- operands: files.map((file) => `${file.path}:${file.mediaType}`),
592
- });
593
- let document;
594
- try {
595
- document = JSON.parse(out.toString('utf8'));
596
- } catch (error) {
597
- throw new Error(`${ref} attach did not report JSON: ${error.message}`);
598
- }
599
- if (!SHA256_DIGEST_PATTERN.test(document?.digest)) {
600
- throw new Error(`${ref} attach reported no canonical referrer digest`);
601
- }
602
- return document.digest;
603
- }
604
-
605
- /** Every tag of a repository; oras follows the registry's pagination. A failure throws, never an empty list. */
606
- async listTags(repository) {
607
- const ref = this.#ref(repository);
608
- const out = await this.#oras(['repo', 'tags'], [], ref);
609
- return out
610
- .toString('utf8')
611
- .split('\n')
612
- .map((line) => line.trim())
613
- .filter((line) => line.length > 0);
614
- }
615
-
616
- /**
617
- * Referrers whose subject is the exact immutable digest, filtered by artifact
618
- * type, read under the SAME referrers form evidence is attached with
619
- * ({@link REFERRERS_DISTRIBUTION_SPEC}). Every returned descriptor is still re-read by digest by the caller.
620
- */
621
- async listReferrers(repository, subjectDigest, artifactType) {
622
- if (!SHA256_DIGEST_PATTERN.test(subjectDigest)) {
623
- throw new Error(`"${subjectDigest}" is not a canonical lowercase sha256 digest`);
624
- }
625
- if (typeof artifactType !== 'string' || artifactType.length === 0) {
626
- throw new Error('referrers query requires a non-empty artifact type');
627
- }
628
- const ref = `${this.#ref(repository)}@${subjectDigest}`;
629
- const out = await this.#oras(
630
- ['discover'],
631
- ['--distribution-spec', REFERRERS_DISTRIBUTION_SPEC, '--format', 'json', '--artifact-type', artifactType],
632
- ref,
633
- );
634
- if (out.length > MAX_MANIFEST_BYTES) {
635
- throw new Error(`${ref} referrers listing is larger than ${MAX_MANIFEST_BYTES} bytes`);
636
- }
637
- let document;
638
- try {
639
- document = JSON.parse(out.toString('utf8'));
640
- } catch (error) {
641
- throw new Error(`${ref} referrers listing is not JSON: ${error.message}`);
642
- }
643
- if (!Array.isArray(document?.referrers)) {
644
- throw new Error(`${ref} did not return a referrers listing`);
645
- }
646
- const seen = new Set();
647
- const manifests = [];
648
- for (const referrer of document.referrers) {
649
- if (!SHA256_DIGEST_PATTERN.test(referrer?.digest)) {
650
- throw new Error(`${ref} listed a referrer without a canonical digest`);
651
- }
652
- if (referrer.artifactType !== artifactType) {continue;}
653
- if (seen.has(referrer.digest)) {
654
- throw new Error(`registry ${this.authority} repeated referrer ${referrer.digest}`);
655
- }
656
- seen.add(referrer.digest);
657
- manifests.push({
658
- mediaType: referrer.mediaType,
659
- digest: referrer.digest,
660
- size: referrer.size,
661
- artifactType: referrer.artifactType,
662
- ...(referrer.annotations ? { annotations: referrer.annotations } : {}),
663
- });
664
- }
665
- return manifests;
666
- }
667
-
668
- /**
669
- * Fetch a manifest in ONE call and hold it to everything a separate
670
- * descriptor call used to: its media type is an accepted manifest type, its
671
- * size is inside the cap, and its bytes hash to the digest the registry
672
- * described. `expectedDigest`, when the caller asked by digest, must be that
673
- * digest. The media type is the descriptor's, never the body's optional
674
- * `mediaType` (Helm's has none).
675
- */
676
- async #manifest(ref, expectedDigest) {
677
- const { descriptor, bytes } = await this.#fetchContent(['manifest', 'fetch'], ref, MAX_MANIFEST_BYTES, (described) => {
678
- if (!ACCEPTED_MANIFEST_MEDIA_TYPES.includes(described.mediaType)) {
679
- throw new Error(`${ref} returned unsupported manifest media type "${described.mediaType}"`);
680
- }
681
- if (expectedDigest !== undefined && described.digest !== expectedDigest) {
682
- throw new Error(`${ref} described ${described.digest}, not the requested ${expectedDigest}`);
683
- }
684
- });
685
- return { ...decodeManifest(bytes, descriptor.mediaType, ref), digest: descriptor.digest, bytes };
686
- }
687
-
688
- /** Fetch a manifest by TAG: one call, the content verified against the digest the registry described. */
689
- async getManifestByTag(repository, tag) {
690
- return this.#manifest(`${this.#ref(repository)}:${tag}`);
691
- }
692
-
693
- /** Fetch a manifest by DIGEST: one call, the bytes must hash to exactly that digest. */
694
- async getManifestByDigest(repository, digest) {
695
- if (!SHA256_DIGEST_PATTERN.test(digest)) {
696
- throw new Error(`"${digest}" is not a canonical lowercase sha256 digest`);
697
- }
698
- return this.#manifest(`${this.#ref(repository)}@${digest}`, digest);
699
- }
700
-
701
- /** Fetch a blob by DIGEST in one call; its declared and actual size are bounded by `maxBytes`, its bytes must hash to that digest. */
702
- async getBlob(repository, digest, maxBytes = MAX_CONFIG_BLOB_BYTES) {
703
- if (!SHA256_DIGEST_PATTERN.test(digest)) {
704
- throw new Error(`"${digest}" is not a canonical lowercase sha256 digest`);
705
- }
706
- const ref = `${this.#ref(repository)}@${digest}`;
707
- const { bytes } = await this.#fetchContent(['blob', 'fetch'], ref, maxBytes, (described) => {
708
- if (described.digest !== digest) {
709
- throw new Error(`${ref} described ${described.digest}, not the requested ${digest}`);
710
- }
711
- });
712
- return bytes;
713
- }
714
- }
715
-
716
- function decodeManifest(bytes, expectedMediaType, ref) {
717
- let document;
718
- try {
719
- document = JSON.parse(bytes.toString('utf8'));
720
- } catch (error) {
721
- throw new Error(`${ref} returned a manifest that is not valid JSON: ${error.message}`);
722
- }
723
- if (typeof document !== 'object' || document === null || Array.isArray(document)) {
724
- throw new Error(`${ref} returned a manifest that is not a JSON object`);
725
- }
726
- const mediaType = expectedMediaType;
727
- if (!ACCEPTED_MANIFEST_MEDIA_TYPES.includes(mediaType)) {
728
- throw new Error(
729
- `${ref} returned unsupported manifest media type "${mediaType}"`,
730
- );
731
- }
732
- if (typeof document.mediaType === 'string' && document.mediaType !== mediaType) {
733
- throw new Error(
734
- `${ref} served media type "${mediaType}" but the manifest declares "${document.mediaType}"`,
735
- );
736
- }
737
- return {
738
- mediaType,
739
- isIndex: OCI_INDEX_MEDIA_TYPES.includes(mediaType),
740
- document,
741
- };
742
- }