@astrale-os/kernel-protocol 0.5.0-beta.8 → 0.5.0

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 (496) hide show
  1. package/dist/artifact/index.d.ts +1 -2
  2. package/dist/artifact/index.js +1 -2
  3. package/dist/artifact/ref.d.ts +2 -1
  4. package/dist/artifact/ref.js +4 -4
  5. package/dist/codecs/codec.d.ts +0 -1
  6. package/dist/codecs/codec.js +0 -1
  7. package/dist/codecs/index.d.ts +1 -3
  8. package/dist/codecs/index.js +1 -3
  9. package/dist/codecs/json.d.ts +0 -1
  10. package/dist/codecs/json.js +0 -1
  11. package/dist/codecs/media-types.d.ts +0 -2
  12. package/dist/codecs/media-types.js +0 -2
  13. package/dist/errors/codes.d.ts +0 -1
  14. package/dist/errors/codes.js +0 -1
  15. package/dist/errors/http-status.d.ts +0 -1
  16. package/dist/errors/http-status.js +0 -1
  17. package/dist/errors/index.d.ts +1 -1
  18. package/dist/errors/index.js +1 -1
  19. package/dist/errors/payload.d.ts +0 -1
  20. package/dist/errors/payload.js +0 -1
  21. package/dist/errors/protocol-error.d.ts +0 -1
  22. package/dist/errors/protocol-error.js +0 -1
  23. package/dist/errors/reason.d.ts +0 -1
  24. package/dist/errors/reason.js +0 -1
  25. package/dist/errors/retry.d.ts +25 -0
  26. package/dist/errors/retry.js +46 -0
  27. package/dist/index.d.ts +1 -2
  28. package/dist/index.js +1 -2
  29. package/dist/invocation/admission.d.ts +2 -3
  30. package/dist/invocation/admission.js +5 -6
  31. package/dist/invocation/binary.d.ts +1 -1
  32. package/dist/invocation/binary.js +21 -5
  33. package/dist/invocation/binding-codecs.d.ts +3 -3
  34. package/dist/invocation/binding-codecs.js +1 -7
  35. package/dist/invocation/cancellation.d.ts +0 -1
  36. package/dist/invocation/cancellation.js +0 -1
  37. package/dist/invocation/correlation.d.ts +0 -1
  38. package/dist/invocation/correlation.js +0 -1
  39. package/dist/invocation/delegate.d.ts +0 -21
  40. package/dist/invocation/delegate.js +2 -35
  41. package/dist/invocation/http/binary.d.ts +3 -2
  42. package/dist/invocation/http/binary.js +6 -2
  43. package/dist/invocation/http/index.d.ts +2 -2
  44. package/dist/invocation/http/index.js +2 -2
  45. package/dist/invocation/http/negotiation.d.ts +0 -1
  46. package/dist/invocation/http/negotiation.js +3 -11
  47. package/dist/invocation/http/request.d.ts +11 -0
  48. package/dist/invocation/http/request.js +69 -0
  49. package/dist/invocation/http/stream.d.ts +0 -1
  50. package/dist/invocation/http/stream.js +0 -1
  51. package/dist/invocation/http/trace.d.ts +0 -1
  52. package/dist/invocation/http/trace.js +0 -1
  53. package/dist/invocation/idempotency.d.ts +0 -1
  54. package/dist/invocation/idempotency.js +0 -1
  55. package/dist/invocation/identity.d.ts +0 -1
  56. package/dist/invocation/identity.js +0 -1
  57. package/dist/invocation/index.d.ts +5 -5
  58. package/dist/invocation/index.js +4 -4
  59. package/dist/invocation/maintenance.d.ts +14 -0
  60. package/dist/invocation/maintenance.js +18 -0
  61. package/dist/invocation/miss.d.ts +0 -1
  62. package/dist/invocation/miss.js +0 -1
  63. package/dist/invocation/redirect.d.ts +10 -13
  64. package/dist/invocation/redirect.js +10 -23
  65. package/dist/invocation/request.d.ts +3 -1
  66. package/dist/invocation/request.js +9 -3
  67. package/dist/invocation/response.d.ts +6 -2
  68. package/dist/invocation/response.js +26 -16
  69. package/dist/invocation/routing.d.ts +14 -5
  70. package/dist/invocation/routing.js +35 -21
  71. package/dist/invocation/schema.d.ts +6 -5
  72. package/dist/invocation/schema.js +5 -12
  73. package/dist/invocation/service-reason.d.ts +20 -16
  74. package/dist/invocation/service-reason.js +27 -20
  75. package/dist/invocation/stale-route.d.ts +3 -4
  76. package/dist/invocation/stale-route.js +0 -1
  77. package/dist/invocation/stream.d.ts +0 -1
  78. package/dist/invocation/stream.js +0 -1
  79. package/dist/invocation/target.d.ts +5 -3
  80. package/dist/invocation/target.js +25 -4
  81. package/dist/invocation/trace.d.ts +0 -1
  82. package/dist/invocation/trace.js +0 -1
  83. package/dist/invocation/version.d.ts +0 -1
  84. package/dist/invocation/version.js +0 -1
  85. package/dist/invocation/websocket/binary.d.ts +0 -1
  86. package/dist/invocation/websocket/binary.js +1 -1
  87. package/dist/invocation/websocket/index.d.ts +1 -2
  88. package/dist/invocation/websocket/index.js +1 -2
  89. package/dist/invocation/websocket/subprotocol.d.ts +1 -3
  90. package/dist/invocation/websocket/subprotocol.js +3 -5
  91. package/dist/issuer/claims.d.ts +7 -0
  92. package/dist/issuer/claims.js +7 -0
  93. package/dist/issuer/configuration.d.ts +0 -1
  94. package/dist/issuer/configuration.js +0 -1
  95. package/dist/issuer/error.d.ts +0 -1
  96. package/dist/issuer/error.js +0 -1
  97. package/dist/issuer/exchange.d.ts +0 -1
  98. package/dist/issuer/exchange.js +0 -1
  99. package/dist/issuer/hosted.d.ts +0 -1
  100. package/dist/issuer/hosted.js +0 -1
  101. package/dist/issuer/index.d.ts +2 -1
  102. package/dist/issuer/index.js +2 -1
  103. package/dist/issuer/key-set.d.ts +0 -1
  104. package/dist/issuer/key-set.js +0 -1
  105. package/dist/issuer/paths.d.ts +2 -1
  106. package/dist/issuer/paths.js +1 -1
  107. package/dist/issuer/url.d.ts +0 -1
  108. package/dist/issuer/url.js +0 -1
  109. package/dist/issuer/workflow-engine.d.ts +18 -0
  110. package/dist/issuer/workflow-engine.js +59 -0
  111. package/dist/{publication → release}/bindings/callable.d.ts +0 -1
  112. package/dist/{publication → release}/bindings/callable.js +6 -7
  113. package/dist/{publication → release}/bindings/index.d.ts +0 -1
  114. package/dist/{publication → release}/bindings/index.js +0 -1
  115. package/dist/{publication → release}/bindings/invocation.d.ts +0 -1
  116. package/dist/release/bindings/invocation.js +13 -0
  117. package/dist/release/bindings/view.d.ts +11 -0
  118. package/dist/release/bindings/view.js +54 -0
  119. package/dist/release/build.d.ts +6 -0
  120. package/dist/release/build.js +7 -0
  121. package/dist/release/bundle-admission.d.ts +21 -0
  122. package/dist/{publication → release}/bundle-admission.js +15 -21
  123. package/dist/{publication → release}/bundle-descriptor.d.ts +0 -1
  124. package/dist/release/bundle-descriptor.js +19 -0
  125. package/dist/release/bundle-evidence.d.ts +3 -0
  126. package/dist/release/bundle-evidence.js +13 -0
  127. package/dist/{publication → release}/bundle.d.ts +5 -3
  128. package/dist/{publication → release}/bundle.js +13 -8
  129. package/dist/{publication → release}/declaration.d.ts +0 -1
  130. package/dist/release/declaration.js +1 -0
  131. package/dist/{publication → release}/delivery/attestation.d.ts +1 -1
  132. package/dist/{publication → release}/delivery/attestation.js +0 -1
  133. package/dist/{publication → release}/delivery/claims.d.ts +7 -3
  134. package/dist/{publication → release}/delivery/claims.js +20 -14
  135. package/dist/release/delivery/delivery.d.ts +11 -0
  136. package/dist/{publication → release}/delivery/delivery.js +7 -13
  137. package/dist/{publication → release}/delivery/error.d.ts +2 -1
  138. package/dist/{publication → release}/delivery/error.js +1 -1
  139. package/dist/{publication → release}/delivery/index.d.ts +5 -2
  140. package/dist/{publication → release}/delivery/index.js +4 -1
  141. package/dist/{publication → release}/delivery/limits.d.ts +2 -2
  142. package/dist/release/delivery/limits.js +5 -0
  143. package/dist/{publication → release}/delivery/request.d.ts +10 -10
  144. package/dist/{publication → release}/delivery/request.js +9 -11
  145. package/dist/{publication → release}/delivery-declaration.d.ts +0 -1
  146. package/dist/{publication → release}/delivery-declaration.js +4 -5
  147. package/dist/{publication → release}/delivery-endpoint.d.ts +0 -1
  148. package/dist/release/delivery-endpoint.js +22 -0
  149. package/dist/release/digest.d.ts +13 -0
  150. package/dist/{publication/etag.js → release/digest.js} +1 -7
  151. package/dist/release/error.d.ts +7 -0
  152. package/dist/release/error.js +11 -0
  153. package/dist/release/index.d.ts +17 -0
  154. package/dist/release/index.js +10 -0
  155. package/dist/release/issuer.d.ts +5 -0
  156. package/dist/release/issuer.js +34 -0
  157. package/dist/release/manifest.d.ts +6 -0
  158. package/dist/release/manifest.js +22 -0
  159. package/dist/release/reference.d.ts +26 -0
  160. package/dist/release/reference.js +70 -0
  161. package/dist/release/release.d.ts +60 -0
  162. package/dist/release/release.js +125 -0
  163. package/dist/release/requirements.d.ts +41 -0
  164. package/dist/release/requirements.js +306 -0
  165. package/dist/{publication → release}/route.d.ts +0 -1
  166. package/dist/{publication → release}/route.js +24 -25
  167. package/dist/{publication → release}/schema.d.ts +0 -1
  168. package/dist/{publication → release}/schema.js +4 -5
  169. package/dist/release/served.d.ts +27 -0
  170. package/dist/release/served.js +56 -0
  171. package/dist/release/shape.d.ts +8 -0
  172. package/dist/{publication/content.js → release/shape.js} +0 -1
  173. package/dist/routes/admission.d.ts +1 -2
  174. package/dist/routes/admission.js +7 -86
  175. package/dist/routes/binding.d.ts +3 -4
  176. package/dist/routes/binding.js +11 -22
  177. package/dist/routes/collision.d.ts +0 -1
  178. package/dist/routes/collision.js +0 -1
  179. package/dist/routes/compiler.d.ts +2 -3
  180. package/dist/routes/compiler.js +7 -4
  181. package/dist/routes/credential.d.ts +12 -3
  182. package/dist/routes/credential.js +9 -5
  183. package/dist/routes/decode.d.ts +5 -3
  184. package/dist/routes/decode.js +24 -18
  185. package/dist/routes/deployment-retired.d.ts +30 -0
  186. package/dist/routes/deployment-retired.js +96 -0
  187. package/dist/routes/encode.d.ts +0 -1
  188. package/dist/routes/encode.js +12 -6
  189. package/dist/routes/entries.d.ts +23 -0
  190. package/dist/routes/entries.js +150 -0
  191. package/dist/routes/error-response.d.ts +0 -1
  192. package/dist/routes/error-response.js +0 -1
  193. package/dist/routes/error.d.ts +0 -1
  194. package/dist/routes/error.js +0 -1
  195. package/dist/routes/evidence.d.ts +3 -4
  196. package/dist/routes/evidence.js +7 -34
  197. package/dist/routes/header.d.ts +9 -0
  198. package/dist/routes/header.js +34 -0
  199. package/dist/routes/index.d.ts +2 -3
  200. package/dist/routes/index.js +2 -3
  201. package/dist/routes/mapping.d.ts +1 -2
  202. package/dist/routes/mapping.js +4 -5
  203. package/dist/routes/match.d.ts +1 -2
  204. package/dist/routes/match.js +0 -1
  205. package/dist/routes/placement.d.ts +2 -3
  206. package/dist/routes/placement.js +0 -1
  207. package/dist/routes/plan.d.ts +1 -2
  208. package/dist/routes/plan.js +0 -1
  209. package/dist/routes/request.d.ts +3 -2
  210. package/dist/routes/request.js +0 -1
  211. package/dist/routes/reservation.d.ts +4 -3
  212. package/dist/routes/reservation.js +14 -9
  213. package/dist/routes/routing.d.ts +18 -7
  214. package/dist/routes/routing.js +28 -50
  215. package/dist/routes/scalar.d.ts +0 -1
  216. package/dist/routes/scalar.js +0 -1
  217. package/dist/routes/select.d.ts +1 -2
  218. package/dist/routes/select.js +0 -1
  219. package/dist/routes/stream.d.ts +0 -1
  220. package/dist/routes/stream.js +0 -1
  221. package/dist/routes/table.d.ts +3 -3
  222. package/dist/routes/table.js +0 -1
  223. package/dist/routes/target.d.ts +5 -1
  224. package/dist/routes/target.js +16 -1
  225. package/dist/routes/template.d.ts +0 -2
  226. package/dist/routes/template.js +0 -4
  227. package/dist/runtime/artifact.d.ts +5 -5
  228. package/dist/runtime/artifact.js +7 -5
  229. package/dist/runtime/index.d.ts +1 -2
  230. package/dist/runtime/index.js +1 -2
  231. package/dist/schema/index.d.ts +0 -1
  232. package/dist/schema/index.js +0 -1
  233. package/dist/schema/installation/codec.d.ts +9 -0
  234. package/dist/schema/installation/codec.js +82 -0
  235. package/dist/schema/installation/index.d.ts +2 -1
  236. package/dist/schema/installation/index.js +1 -1
  237. package/dist/schema/installation/introspection/codec.d.ts +5 -3
  238. package/dist/schema/installation/introspection/codec.js +319 -194
  239. package/dist/schema/installation/introspection/index.d.ts +2 -3
  240. package/dist/schema/installation/introspection/index.js +1 -2
  241. package/dist/schema/installation/introspection/result.d.ts +84 -26
  242. package/dist/schema/installation/introspection/result.js +0 -1
  243. package/dist/schema/installation/result.d.ts +15 -0
  244. package/dist/schema/installation/result.js +1 -0
  245. package/package.json +23 -78
  246. package/dist/artifact/index.d.ts.map +0 -1
  247. package/dist/artifact/index.js.map +0 -1
  248. package/dist/artifact/ref.d.ts.map +0 -1
  249. package/dist/artifact/ref.js.map +0 -1
  250. package/dist/codecs/codec.d.ts.map +0 -1
  251. package/dist/codecs/codec.js.map +0 -1
  252. package/dist/codecs/index.d.ts.map +0 -1
  253. package/dist/codecs/index.js.map +0 -1
  254. package/dist/codecs/json.d.ts.map +0 -1
  255. package/dist/codecs/json.js.map +0 -1
  256. package/dist/codecs/media-types.d.ts.map +0 -1
  257. package/dist/codecs/media-types.js.map +0 -1
  258. package/dist/codecs/msgpack.d.ts +0 -5
  259. package/dist/codecs/msgpack.d.ts.map +0 -1
  260. package/dist/codecs/msgpack.js +0 -51
  261. package/dist/codecs/msgpack.js.map +0 -1
  262. package/dist/errors/codes.d.ts.map +0 -1
  263. package/dist/errors/codes.js.map +0 -1
  264. package/dist/errors/http-status.d.ts.map +0 -1
  265. package/dist/errors/http-status.js.map +0 -1
  266. package/dist/errors/index.d.ts.map +0 -1
  267. package/dist/errors/index.js.map +0 -1
  268. package/dist/errors/payload.d.ts.map +0 -1
  269. package/dist/errors/payload.js.map +0 -1
  270. package/dist/errors/protocol-error.d.ts.map +0 -1
  271. package/dist/errors/protocol-error.js.map +0 -1
  272. package/dist/errors/reason.d.ts.map +0 -1
  273. package/dist/errors/reason.js.map +0 -1
  274. package/dist/index.d.ts.map +0 -1
  275. package/dist/index.js.map +0 -1
  276. package/dist/invocation/admission.d.ts.map +0 -1
  277. package/dist/invocation/admission.js.map +0 -1
  278. package/dist/invocation/binary.d.ts.map +0 -1
  279. package/dist/invocation/binary.js.map +0 -1
  280. package/dist/invocation/binding-codecs.d.ts.map +0 -1
  281. package/dist/invocation/binding-codecs.js.map +0 -1
  282. package/dist/invocation/cancellation.d.ts.map +0 -1
  283. package/dist/invocation/cancellation.js.map +0 -1
  284. package/dist/invocation/correlation.d.ts.map +0 -1
  285. package/dist/invocation/correlation.js.map +0 -1
  286. package/dist/invocation/delegate.d.ts.map +0 -1
  287. package/dist/invocation/delegate.js.map +0 -1
  288. package/dist/invocation/http/binary.d.ts.map +0 -1
  289. package/dist/invocation/http/binary.js.map +0 -1
  290. package/dist/invocation/http/index.d.ts.map +0 -1
  291. package/dist/invocation/http/index.js.map +0 -1
  292. package/dist/invocation/http/negotiation.d.ts.map +0 -1
  293. package/dist/invocation/http/negotiation.js.map +0 -1
  294. package/dist/invocation/http/stream.d.ts.map +0 -1
  295. package/dist/invocation/http/stream.js.map +0 -1
  296. package/dist/invocation/http/trace.d.ts.map +0 -1
  297. package/dist/invocation/http/trace.js.map +0 -1
  298. package/dist/invocation/idempotency.d.ts.map +0 -1
  299. package/dist/invocation/idempotency.js.map +0 -1
  300. package/dist/invocation/identity.d.ts.map +0 -1
  301. package/dist/invocation/identity.js.map +0 -1
  302. package/dist/invocation/index.d.ts.map +0 -1
  303. package/dist/invocation/index.js.map +0 -1
  304. package/dist/invocation/miss.d.ts.map +0 -1
  305. package/dist/invocation/miss.js.map +0 -1
  306. package/dist/invocation/redirect.d.ts.map +0 -1
  307. package/dist/invocation/redirect.js.map +0 -1
  308. package/dist/invocation/request.d.ts.map +0 -1
  309. package/dist/invocation/request.js.map +0 -1
  310. package/dist/invocation/response.d.ts.map +0 -1
  311. package/dist/invocation/response.js.map +0 -1
  312. package/dist/invocation/routing.d.ts.map +0 -1
  313. package/dist/invocation/routing.js.map +0 -1
  314. package/dist/invocation/schema.d.ts.map +0 -1
  315. package/dist/invocation/schema.js.map +0 -1
  316. package/dist/invocation/service-reason.d.ts.map +0 -1
  317. package/dist/invocation/service-reason.js.map +0 -1
  318. package/dist/invocation/stale-route.d.ts.map +0 -1
  319. package/dist/invocation/stale-route.js.map +0 -1
  320. package/dist/invocation/stream.d.ts.map +0 -1
  321. package/dist/invocation/stream.js.map +0 -1
  322. package/dist/invocation/target.d.ts.map +0 -1
  323. package/dist/invocation/target.js.map +0 -1
  324. package/dist/invocation/trace.d.ts.map +0 -1
  325. package/dist/invocation/trace.js.map +0 -1
  326. package/dist/invocation/version.d.ts.map +0 -1
  327. package/dist/invocation/version.js.map +0 -1
  328. package/dist/invocation/websocket/binary.d.ts.map +0 -1
  329. package/dist/invocation/websocket/binary.js.map +0 -1
  330. package/dist/invocation/websocket/index.d.ts.map +0 -1
  331. package/dist/invocation/websocket/index.js.map +0 -1
  332. package/dist/invocation/websocket/subprotocol.d.ts.map +0 -1
  333. package/dist/invocation/websocket/subprotocol.js.map +0 -1
  334. package/dist/issuer/configuration.d.ts.map +0 -1
  335. package/dist/issuer/configuration.js.map +0 -1
  336. package/dist/issuer/error.d.ts.map +0 -1
  337. package/dist/issuer/error.js.map +0 -1
  338. package/dist/issuer/exchange.d.ts.map +0 -1
  339. package/dist/issuer/exchange.js.map +0 -1
  340. package/dist/issuer/hosted.d.ts.map +0 -1
  341. package/dist/issuer/hosted.js.map +0 -1
  342. package/dist/issuer/index.d.ts.map +0 -1
  343. package/dist/issuer/index.js.map +0 -1
  344. package/dist/issuer/key-set.d.ts.map +0 -1
  345. package/dist/issuer/key-set.js.map +0 -1
  346. package/dist/issuer/paths.d.ts.map +0 -1
  347. package/dist/issuer/paths.js.map +0 -1
  348. package/dist/issuer/url.d.ts.map +0 -1
  349. package/dist/issuer/url.js.map +0 -1
  350. package/dist/publication/bindings/callable.d.ts.map +0 -1
  351. package/dist/publication/bindings/callable.js.map +0 -1
  352. package/dist/publication/bindings/index.d.ts.map +0 -1
  353. package/dist/publication/bindings/index.js.map +0 -1
  354. package/dist/publication/bindings/invocation.d.ts.map +0 -1
  355. package/dist/publication/bindings/invocation.js +0 -14
  356. package/dist/publication/bindings/invocation.js.map +0 -1
  357. package/dist/publication/bindings/view.d.ts +0 -8
  358. package/dist/publication/bindings/view.d.ts.map +0 -1
  359. package/dist/publication/bindings/view.js +0 -29
  360. package/dist/publication/bindings/view.js.map +0 -1
  361. package/dist/publication/bundle-admission.d.ts +0 -5
  362. package/dist/publication/bundle-admission.d.ts.map +0 -1
  363. package/dist/publication/bundle-admission.js.map +0 -1
  364. package/dist/publication/bundle-descriptor.d.ts.map +0 -1
  365. package/dist/publication/bundle-descriptor.js +0 -20
  366. package/dist/publication/bundle-descriptor.js.map +0 -1
  367. package/dist/publication/bundle-evidence.d.ts +0 -4
  368. package/dist/publication/bundle-evidence.d.ts.map +0 -1
  369. package/dist/publication/bundle-evidence.js +0 -14
  370. package/dist/publication/bundle-evidence.js.map +0 -1
  371. package/dist/publication/bundle.d.ts.map +0 -1
  372. package/dist/publication/bundle.js.map +0 -1
  373. package/dist/publication/content.d.ts +0 -11
  374. package/dist/publication/content.d.ts.map +0 -1
  375. package/dist/publication/content.js.map +0 -1
  376. package/dist/publication/declaration.d.ts.map +0 -1
  377. package/dist/publication/declaration.js +0 -2
  378. package/dist/publication/declaration.js.map +0 -1
  379. package/dist/publication/delivery/attestation.d.ts.map +0 -1
  380. package/dist/publication/delivery/attestation.js.map +0 -1
  381. package/dist/publication/delivery/claims.d.ts.map +0 -1
  382. package/dist/publication/delivery/claims.js.map +0 -1
  383. package/dist/publication/delivery/delivery.d.ts +0 -10
  384. package/dist/publication/delivery/delivery.d.ts.map +0 -1
  385. package/dist/publication/delivery/delivery.js.map +0 -1
  386. package/dist/publication/delivery/error.d.ts.map +0 -1
  387. package/dist/publication/delivery/error.js.map +0 -1
  388. package/dist/publication/delivery/index.d.ts.map +0 -1
  389. package/dist/publication/delivery/index.js.map +0 -1
  390. package/dist/publication/delivery/limits.d.ts.map +0 -1
  391. package/dist/publication/delivery/limits.js +0 -5
  392. package/dist/publication/delivery/limits.js.map +0 -1
  393. package/dist/publication/delivery/request.d.ts.map +0 -1
  394. package/dist/publication/delivery/request.js.map +0 -1
  395. package/dist/publication/delivery-declaration.d.ts.map +0 -1
  396. package/dist/publication/delivery-declaration.js.map +0 -1
  397. package/dist/publication/delivery-endpoint.d.ts.map +0 -1
  398. package/dist/publication/delivery-endpoint.js +0 -23
  399. package/dist/publication/delivery-endpoint.js.map +0 -1
  400. package/dist/publication/error.d.ts +0 -8
  401. package/dist/publication/error.d.ts.map +0 -1
  402. package/dist/publication/error.js +0 -12
  403. package/dist/publication/error.js.map +0 -1
  404. package/dist/publication/etag.d.ts +0 -7
  405. package/dist/publication/etag.d.ts.map +0 -1
  406. package/dist/publication/etag.js.map +0 -1
  407. package/dist/publication/index.d.ts +0 -18
  408. package/dist/publication/index.d.ts.map +0 -1
  409. package/dist/publication/index.js +0 -11
  410. package/dist/publication/index.js.map +0 -1
  411. package/dist/publication/manifest.d.ts +0 -7
  412. package/dist/publication/manifest.d.ts.map +0 -1
  413. package/dist/publication/manifest.js +0 -31
  414. package/dist/publication/manifest.js.map +0 -1
  415. package/dist/publication/publication.d.ts +0 -37
  416. package/dist/publication/publication.d.ts.map +0 -1
  417. package/dist/publication/publication.js +0 -134
  418. package/dist/publication/publication.js.map +0 -1
  419. package/dist/publication/reference.d.ts +0 -18
  420. package/dist/publication/reference.d.ts.map +0 -1
  421. package/dist/publication/reference.js +0 -69
  422. package/dist/publication/reference.js.map +0 -1
  423. package/dist/publication/requirements.d.ts +0 -27
  424. package/dist/publication/requirements.d.ts.map +0 -1
  425. package/dist/publication/requirements.js +0 -181
  426. package/dist/publication/requirements.js.map +0 -1
  427. package/dist/publication/route.d.ts.map +0 -1
  428. package/dist/publication/route.js.map +0 -1
  429. package/dist/publication/schema.d.ts.map +0 -1
  430. package/dist/publication/schema.js.map +0 -1
  431. package/dist/routes/admission.d.ts.map +0 -1
  432. package/dist/routes/admission.js.map +0 -1
  433. package/dist/routes/binding.d.ts.map +0 -1
  434. package/dist/routes/binding.js.map +0 -1
  435. package/dist/routes/collision.d.ts.map +0 -1
  436. package/dist/routes/collision.js.map +0 -1
  437. package/dist/routes/compiler.d.ts.map +0 -1
  438. package/dist/routes/compiler.js.map +0 -1
  439. package/dist/routes/credential.d.ts.map +0 -1
  440. package/dist/routes/credential.js.map +0 -1
  441. package/dist/routes/decode.d.ts.map +0 -1
  442. package/dist/routes/decode.js.map +0 -1
  443. package/dist/routes/encode.d.ts.map +0 -1
  444. package/dist/routes/encode.js.map +0 -1
  445. package/dist/routes/error-response.d.ts.map +0 -1
  446. package/dist/routes/error-response.js.map +0 -1
  447. package/dist/routes/error.d.ts.map +0 -1
  448. package/dist/routes/error.js.map +0 -1
  449. package/dist/routes/evidence.d.ts.map +0 -1
  450. package/dist/routes/evidence.js.map +0 -1
  451. package/dist/routes/index.d.ts.map +0 -1
  452. package/dist/routes/index.js.map +0 -1
  453. package/dist/routes/mapping.d.ts.map +0 -1
  454. package/dist/routes/mapping.js.map +0 -1
  455. package/dist/routes/match.d.ts.map +0 -1
  456. package/dist/routes/match.js.map +0 -1
  457. package/dist/routes/placement.d.ts.map +0 -1
  458. package/dist/routes/placement.js.map +0 -1
  459. package/dist/routes/plan.d.ts.map +0 -1
  460. package/dist/routes/plan.js.map +0 -1
  461. package/dist/routes/release-unavailable.d.ts +0 -9
  462. package/dist/routes/release-unavailable.d.ts.map +0 -1
  463. package/dist/routes/release-unavailable.js +0 -33
  464. package/dist/routes/release-unavailable.js.map +0 -1
  465. package/dist/routes/request.d.ts.map +0 -1
  466. package/dist/routes/request.js.map +0 -1
  467. package/dist/routes/reservation.d.ts.map +0 -1
  468. package/dist/routes/reservation.js.map +0 -1
  469. package/dist/routes/routing.d.ts.map +0 -1
  470. package/dist/routes/routing.js.map +0 -1
  471. package/dist/routes/scalar.d.ts.map +0 -1
  472. package/dist/routes/scalar.js.map +0 -1
  473. package/dist/routes/select.d.ts.map +0 -1
  474. package/dist/routes/select.js.map +0 -1
  475. package/dist/routes/stream.d.ts.map +0 -1
  476. package/dist/routes/stream.js.map +0 -1
  477. package/dist/routes/table.d.ts.map +0 -1
  478. package/dist/routes/table.js.map +0 -1
  479. package/dist/routes/target.d.ts.map +0 -1
  480. package/dist/routes/target.js.map +0 -1
  481. package/dist/routes/template.d.ts.map +0 -1
  482. package/dist/routes/template.js.map +0 -1
  483. package/dist/runtime/artifact.d.ts.map +0 -1
  484. package/dist/runtime/artifact.js.map +0 -1
  485. package/dist/runtime/index.d.ts.map +0 -1
  486. package/dist/runtime/index.js.map +0 -1
  487. package/dist/schema/index.d.ts.map +0 -1
  488. package/dist/schema/index.js.map +0 -1
  489. package/dist/schema/installation/index.d.ts.map +0 -1
  490. package/dist/schema/installation/index.js.map +0 -1
  491. package/dist/schema/installation/introspection/codec.d.ts.map +0 -1
  492. package/dist/schema/installation/introspection/codec.js.map +0 -1
  493. package/dist/schema/installation/introspection/index.d.ts.map +0 -1
  494. package/dist/schema/installation/introspection/index.js.map +0 -1
  495. package/dist/schema/installation/introspection/result.d.ts.map +0 -1
  496. package/dist/schema/installation/introspection/result.js.map +0 -1
@@ -2,4 +2,3 @@ import type { DeliveryDeclaration } from './declaration.js';
2
2
  import type { Endpoint } from './delivery-endpoint.js';
3
3
  /** Place one provider-neutral Delivery declaration beneath an exact serving issuer. */
4
4
  export declare function placeDelivery(input: DeliveryDeclaration, issuer: string, bundleHref: string): Endpoint;
5
- //# sourceMappingURL=delivery-declaration.d.ts.map
@@ -3,24 +3,23 @@ import { fail } from './error.js';
3
3
  /** Place one provider-neutral Delivery declaration beneath an exact serving issuer. */
4
4
  export function placeDelivery(input, issuer, bundleHref) {
5
5
  if (input === null || typeof input !== 'object' || Array.isArray(input)) {
6
- fail('PUBLICATION_INVALID', 'Delivery declaration is invalid.');
6
+ fail('RELEASE_INVALID', 'Delivery declaration is invalid.');
7
7
  }
8
8
  if (Reflect.ownKeys(input).some((key) => key !== 'path' && key !== 'authentication') ||
9
9
  typeof input.path !== 'string' ||
10
10
  !input.path.startsWith('/')) {
11
- fail('PUBLICATION_INVALID', 'Delivery declaration is invalid.');
11
+ fail('RELEASE_INVALID', 'Delivery declaration is invalid.');
12
12
  }
13
13
  let href;
14
14
  try {
15
15
  const url = new URL(input.path, issuer);
16
16
  if (url.origin !== new URL(issuer).origin || url.search !== '' || url.hash !== '') {
17
- fail('PUBLICATION_INVALID', 'Delivery declaration must be one relative path.');
17
+ fail('RELEASE_INVALID', 'Delivery declaration must be one relative path.');
18
18
  }
19
19
  href = url.href;
20
20
  }
21
21
  catch (cause) {
22
- return fail('PUBLICATION_INVALID', 'Delivery declaration path is invalid.', cause);
22
+ return fail('RELEASE_INVALID', 'Delivery declaration path is invalid.', cause);
23
23
  }
24
24
  return admitEndpoint({ href, method: 'POST', authentication: input.authentication }, bundleHref);
25
25
  }
26
- //# sourceMappingURL=delivery-declaration.js.map
@@ -9,4 +9,3 @@ export interface Endpoint {
9
9
  readonly authentication: Authentication;
10
10
  }
11
11
  export declare function admitEndpoint(input: unknown, publicUrl: string): Endpoint | undefined;
12
- //# sourceMappingURL=delivery-endpoint.d.ts.map
@@ -0,0 +1,22 @@
1
+ import { fail } from './error.js';
2
+ import { absoluteHttpUrl, exact, record } from './shape.js';
3
+ export function admitEndpoint(input, publicUrl) {
4
+ if (input === undefined)
5
+ return undefined;
6
+ const value = record(input, 'RELEASE_INVALID', 'Delivery endpoint is invalid.');
7
+ exact(value, ['href', 'method', 'authentication'], 'RELEASE_INVALID');
8
+ const href = absoluteHttpUrl(value.href, true, 'RELEASE_INVALID');
9
+ if (new URL(href).origin !== new URL(publicUrl).origin || value.method !== 'POST') {
10
+ fail('RELEASE_INVALID', 'Delivery endpoint must be same-origin POST.');
11
+ }
12
+ const authentication = record(value.authentication, 'RELEASE_INVALID', 'Delivery authentication is invalid.');
13
+ exact(authentication, ['kind'], 'RELEASE_INVALID');
14
+ if (authentication.kind !== 'public' && authentication.kind !== 'bearer') {
15
+ fail('RELEASE_INVALID', 'Delivery authentication kind is invalid.');
16
+ }
17
+ return Object.freeze({
18
+ href,
19
+ method: 'POST',
20
+ authentication: Object.freeze({ kind: authentication.kind }),
21
+ });
22
+ }
@@ -0,0 +1,13 @@
1
+ export type Sha256Digest = `sha256:${string}`;
2
+ /**
3
+ * Digest of one canonical `DomainRelease`: its build, its addresses and issuer, and through the
4
+ * address the variables frozen at deploy. One per deployment.
5
+ */
6
+ export type ReleaseDigest = Sha256Digest;
7
+ /**
8
+ * Hash of the bytes one build produced (modules, assets, schema, requirements). An address, key or
9
+ * secret never enters those bytes, so the same build has the same digest in every environment.
10
+ */
11
+ export type BuildDigest = Sha256Digest;
12
+ export declare function admitDigest(input: unknown): Sha256Digest;
13
+ export declare function sha256Hex(input: Uint8Array): string;
@@ -1,16 +1,11 @@
1
- import * as portable from '@astrale-os/kernel-dsl/value';
2
1
  import { fail } from './error.js';
3
2
  const DIGEST = /^sha256:[0-9a-f]{64}$/u;
4
3
  export function admitDigest(input) {
5
4
  if (typeof input !== 'string' || !DIGEST.test(input)) {
6
- fail('PUBLICATION_INVALID', 'Digest is invalid.');
5
+ fail('RELEASE_INVALID', 'Digest is invalid.');
7
6
  }
8
7
  return input;
9
8
  }
10
- export function computeEtag(input) {
11
- const bytes = portable.json.encode(input);
12
- return `sha256:${sha256Hex(bytes)}`;
13
- }
14
9
  export function sha256Hex(input) {
15
10
  const bitLength = input.length * 8;
16
11
  const paddedLength = Math.ceil((input.length + 9) / 64) * 64;
@@ -77,4 +72,3 @@ const ROUND = new Uint32Array([
77
72
  0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
78
73
  0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,
79
74
  ]);
80
- //# sourceMappingURL=etag.js.map
@@ -0,0 +1,7 @@
1
+ export type ReleaseErrorCode = 'RELEASE_INVALID' | 'RELEASE_DIGEST_MISMATCH' | 'RELEASE_BINDING_INVALID' | 'RELEASE_ROUTE_INVALID' | 'RELEASE_VIEW_INVALID';
2
+ export declare class ReleaseError extends Error {
3
+ readonly code: ReleaseErrorCode;
4
+ readonly name = "ReleaseError";
5
+ constructor(code: ReleaseErrorCode, message: string, options?: ErrorOptions);
6
+ }
7
+ export declare function fail(code: ReleaseErrorCode, message: string, cause?: unknown): never;
@@ -0,0 +1,11 @@
1
+ export class ReleaseError extends Error {
2
+ code;
3
+ name = 'ReleaseError';
4
+ constructor(code, message, options) {
5
+ super(message, options);
6
+ this.code = code;
7
+ }
8
+ }
9
+ export function fail(code, message, cause) {
10
+ throw new ReleaseError(code, message, cause === undefined ? undefined : { cause });
11
+ }
@@ -0,0 +1,17 @@
1
+ export { MEDIA_TYPE, PATH, accept, digestOf, encode, seal, url, type Content, type DomainRelease, } from './release.js';
2
+ export type { Build } from './build.js';
3
+ export { acceptReference, compareReferences, matchesReference, reference, type ReleaseRef, type ReleaseReferenceRelation, } from './reference.js';
4
+ export { acceptBundle, decodeBundle, type ServedRelease } from './bundle-admission.js';
5
+ export { BUNDLE_MEDIA_TYPE, bundleUrl, describeBundle, type BundleDescriptor } from './bundle.js';
6
+ export { verifyBundleBytes } from './bundle-evidence.js';
7
+ export type { Declaration, DeliveryDeclaration } from './declaration.js';
8
+ export { placeDelivery } from './delivery-declaration.js';
9
+ export type { Authentication as DeliveryAuthentication, Endpoint as DeliveryEndpoint, } from './delivery-endpoint.js';
10
+ export type { BuildDigest, ReleaseDigest, Sha256Digest } from './digest.js';
11
+ export { ReleaseError, type ReleaseErrorCode } from './error.js';
12
+ export type { Manifest } from './manifest.js';
13
+ export { ClassOperationOrder, admitRequirements, capabilityKeys, validateRequirements, type CapabilityAuthorityRequirements, type CoreCapabilityRequirement, type CapabilityRequirements, type ClassCapabilityRequirement, type ClassOperation, type NonEmpty, type Requirements, } from './requirements.js';
14
+ export type { BodyPick, CredentialSource, HttpMethod, HttpRoute, HttpRouteDeclaration, RouteBody, RouteHeaders, SingleCredentialSource, } from './route.js';
15
+ export type { Schema } from './schema.js';
16
+ export { acceptInvocationEndpoints, type CallableBinding, type InvocationEndpoints, type ViewBinding, } from './bindings/index.js';
17
+ export * as delivery from './delivery/index.js';
@@ -0,0 +1,10 @@
1
+ export { MEDIA_TYPE, PATH, accept, digestOf, encode, seal, url, } from './release.js';
2
+ export { acceptReference, compareReferences, matchesReference, reference, } from './reference.js';
3
+ export { acceptBundle, decodeBundle } from './bundle-admission.js';
4
+ export { BUNDLE_MEDIA_TYPE, bundleUrl, describeBundle } from './bundle.js';
5
+ export { verifyBundleBytes } from './bundle-evidence.js';
6
+ export { placeDelivery } from './delivery-declaration.js';
7
+ export { ReleaseError } from './error.js';
8
+ export { ClassOperationOrder, admitRequirements, capabilityKeys, validateRequirements, } from './requirements.js';
9
+ export { acceptInvocationEndpoints, } from './bindings/index.js';
10
+ export * as delivery from './delivery/index.js';
@@ -0,0 +1,5 @@
1
+ import { type IssuerId } from '@astrale-os/kernel-core/auth/issuer';
2
+ /** Admit the exact serving issuer a served release document names. */
3
+ export declare function admitIssuer(input: unknown): IssuerId;
4
+ /** Resolve one served path beneath one exact HTTP(S) serving issuer, keeping its complete path. */
5
+ export declare function servedUrl(issuer: string, path: `/${string}`): string;
@@ -0,0 +1,34 @@
1
+ import { AuthValueError } from '@astrale-os/kernel-core/auth/error';
2
+ import { accept as acceptIssuerId } from '@astrale-os/kernel-core/auth/issuer';
3
+ import { fail } from './error.js';
4
+ /** Admit the exact serving issuer a served release document names. */
5
+ export function admitIssuer(input) {
6
+ try {
7
+ return acceptIssuerId(String(input));
8
+ }
9
+ catch (cause) {
10
+ if (cause instanceof AuthValueError) {
11
+ return fail('RELEASE_INVALID', 'Release issuer is invalid.', cause);
12
+ }
13
+ throw cause;
14
+ }
15
+ }
16
+ /** Resolve one served path beneath one exact HTTP(S) serving issuer, keeping its complete path. */
17
+ export function servedUrl(issuer, path) {
18
+ const admitted = admitIssuer(issuer);
19
+ let value;
20
+ try {
21
+ value = new URL(admitted);
22
+ }
23
+ catch (cause) {
24
+ return fail('RELEASE_INVALID', 'Release issuer is not an HTTP(S) URL.', cause);
25
+ }
26
+ if ((value.protocol !== 'https:' && value.protocol !== 'http:') ||
27
+ value.username !== '' ||
28
+ value.password !== '' ||
29
+ value.search !== '' ||
30
+ value.hash !== '') {
31
+ fail('RELEASE_INVALID', 'Release issuer is not an HTTP(S) URL.');
32
+ }
33
+ return `${admitted.replace(/\/+$/u, '')}${path}`;
34
+ }
@@ -0,0 +1,6 @@
1
+ export interface Manifest {
2
+ readonly logo?: string;
3
+ }
4
+ /** The root Schema owns the Domain name and entrypoint in every release. */
5
+ export declare function assertAuthoredManifest(input: unknown): void;
6
+ export declare function admitManifest(input: unknown): Manifest | undefined;
@@ -0,0 +1,22 @@
1
+ import { fail } from './error.js';
2
+ import { exact, record } from './shape.js';
3
+ /** The root Schema owns the Domain name and entrypoint in every release. */
4
+ export function assertAuthoredManifest(input) {
5
+ if (input === null || typeof input !== 'object')
6
+ return;
7
+ for (const removed of ['title', 'entrypoint']) {
8
+ if (Object.hasOwn(input, removed)) {
9
+ fail('RELEASE_INVALID', `Manifest ${removed} is removed: the root schema declares the Domain name and entrypoint.`);
10
+ }
11
+ }
12
+ }
13
+ export function admitManifest(input) {
14
+ if (input === undefined)
15
+ return undefined;
16
+ const value = record(input, 'RELEASE_INVALID', 'Manifest is invalid.');
17
+ exact(value, ['logo'], 'RELEASE_INVALID');
18
+ if (value.logo !== undefined && typeof value.logo !== 'string') {
19
+ fail('RELEASE_INVALID', 'Manifest logo must be a string.');
20
+ }
21
+ return Object.freeze(value.logo === undefined ? {} : { logo: value.logo });
22
+ }
@@ -0,0 +1,26 @@
1
+ import type { Revision } from '@astrale-os/kernel-dsl/v1/addressing';
2
+ import { type Key } from '@astrale-os/kernel-dsl/v1/addressing';
3
+ import type { ReleaseDigest } from './digest.js';
4
+ import type { DomainRelease } from './release.js';
5
+ /** Compact untrusted projection that witnesses one exact `DomainRelease`. */
6
+ export interface ReleaseRef {
7
+ readonly origin: Key.Origin;
8
+ readonly identity: DomainRelease['identity'];
9
+ readonly revision: Revision;
10
+ readonly digest: ReleaseDigest;
11
+ }
12
+ /**
13
+ * Relation between two `ReleaseRef`s. A release digest commits to identity, schema and build, so
14
+ * within one origin anything but the exact reference designates another release.
15
+ */
16
+ export type ReleaseReferenceRelation = 'exact' | 'release-drift' | 'origin-drift';
17
+ export declare function reference(input: DomainRelease): ReleaseRef;
18
+ export declare function acceptReference(input: unknown): ReleaseRef;
19
+ /**
20
+ * Classify a received reference against the expected one. A different origin is origin drift.
21
+ * Within one origin the reference is exact only when every coordinate equals the expected one: for
22
+ * references of admitted releases that is digest equality, and a received reference that names
23
+ * the expected digest beside any other coordinate witnesses no release, so it is release drift.
24
+ */
25
+ export declare function compareReferences(input: ReleaseRef, expected: ReleaseRef): ReleaseReferenceRelation;
26
+ export declare function matchesReference(input: DomainRelease, expected: ReleaseRef): boolean;
@@ -0,0 +1,70 @@
1
+ import { AuthValueError } from '@astrale-os/kernel-core/auth/error';
2
+ import { accept as acceptIssuerId } from '@astrale-os/kernel-core/auth/issuer';
3
+ import { patterns } from '@astrale-os/kernel-dsl/v1/addressing';
4
+ import { admitDigest } from './digest.js';
5
+ import { fail } from './error.js';
6
+ import { deepFreeze, exact, record } from './shape.js';
7
+ export function reference(input) {
8
+ return deepFreeze({
9
+ origin: input.origin,
10
+ identity: { ...input.identity },
11
+ revision: input.schema.revision,
12
+ digest: input.digest,
13
+ });
14
+ }
15
+ export function acceptReference(input) {
16
+ const value = record(input, 'RELEASE_INVALID', 'Release reference is invalid.');
17
+ exact(value, ['origin', 'identity', 'revision', 'digest'], 'RELEASE_INVALID');
18
+ if (typeof value.origin !== 'string' || !patterns.origin.test(value.origin)) {
19
+ fail('RELEASE_INVALID', 'Release reference origin is invalid.');
20
+ }
21
+ const origin = value.origin;
22
+ const identity = record(value.identity, 'RELEASE_INVALID', 'Release reference identity is invalid.');
23
+ exact(identity, ['issuer', 'subject'], 'RELEASE_INVALID');
24
+ const issuer = acceptIssuer(identity.issuer);
25
+ if (identity.subject !== origin) {
26
+ fail('RELEASE_INVALID', 'Release reference subject must equal its root origin.');
27
+ }
28
+ if (typeof value.revision !== 'string' || !patterns.revision.test(value.revision)) {
29
+ fail('RELEASE_INVALID', 'Release reference revision is invalid.');
30
+ }
31
+ return deepFreeze({
32
+ origin,
33
+ identity: { issuer, subject: origin },
34
+ revision: value.revision,
35
+ digest: admitDigest(value.digest),
36
+ });
37
+ }
38
+ /**
39
+ * Classify a received reference against the expected one. A different origin is origin drift.
40
+ * Within one origin the reference is exact only when every coordinate equals the expected one: for
41
+ * references of admitted releases that is digest equality, and a received reference that names
42
+ * the expected digest beside any other coordinate witnesses no release, so it is release drift.
43
+ */
44
+ export function compareReferences(input, expected) {
45
+ if (input.origin !== expected.origin)
46
+ return 'origin-drift';
47
+ return input.digest === expected.digest &&
48
+ input.revision === expected.revision &&
49
+ input.identity.issuer === expected.identity.issuer &&
50
+ input.identity.subject === expected.identity.subject
51
+ ? 'exact'
52
+ : 'release-drift';
53
+ }
54
+ export function matchesReference(input, expected) {
55
+ return compareReferences(reference(input), expected) === 'exact';
56
+ }
57
+ function acceptIssuer(input) {
58
+ if (typeof input !== 'string') {
59
+ fail('RELEASE_INVALID', 'Release reference issuer is invalid.');
60
+ }
61
+ try {
62
+ return acceptIssuerId(input);
63
+ }
64
+ catch (cause) {
65
+ if (cause instanceof AuthValueError) {
66
+ return fail('RELEASE_INVALID', 'Release reference issuer is invalid.', cause);
67
+ }
68
+ throw cause;
69
+ }
70
+ }
@@ -0,0 +1,60 @@
1
+ import type { IssuerId } from '@astrale-os/kernel-core/auth/issuer';
2
+ import type { Key } from '@astrale-os/kernel-dsl/v1/addressing';
3
+ import type { CallableBinding, ViewBinding } from './bindings/index.js';
4
+ import type { Build } from './build.js';
5
+ import type { Endpoint as DeliveryEndpoint } from './delivery-endpoint.js';
6
+ import type { ReleaseDigest } from './digest.js';
7
+ import type { Manifest } from './manifest.js';
8
+ import type { Requirements } from './requirements.js';
9
+ import type { HttpRoute } from './route.js';
10
+ import type { Schema } from './schema.js';
11
+ /** Path of the release a deployment serves beneath its serving issuer. */
12
+ export declare const PATH: '/.well-known/astrale/release.json';
13
+ /** Media type of `DomainRelease` v4. */
14
+ export declare const MEDIA_TYPE: 'application/vnd.astrale.domain-release+json;v=4';
15
+ /** Resolve the canonical release URL beneath one exact HTTP(S) serving issuer, keeping its path. */
16
+ export declare function url(issuer: string): string;
17
+ /**
18
+ * Immutable deployment document pinned by the Kernel. Its digest covers the schema, serving
19
+ * identity and code through the build digest; `version` identifies the document format.
20
+ */
21
+ export interface DomainRelease {
22
+ readonly format: 'astrale.domain.release';
23
+ readonly version: 4;
24
+ readonly origin: Key.Origin;
25
+ readonly identity: {
26
+ readonly issuer: IssuerId;
27
+ /** Always the root origin. */
28
+ readonly subject: string;
29
+ };
30
+ readonly digest: ReleaseDigest;
31
+ readonly build: Build;
32
+ readonly schema: Schema;
33
+ readonly requirements: Requirements;
34
+ readonly manifest?: Manifest;
35
+ readonly bindings: {
36
+ readonly callables: readonly CallableBinding[];
37
+ readonly views: readonly ViewBinding[];
38
+ };
39
+ readonly routes: readonly HttpRoute[];
40
+ readonly delivery?: DeliveryEndpoint;
41
+ }
42
+ /** Content of a release before its digest is computed. */
43
+ export type Content = Omit<DomainRelease, 'digest'>;
44
+ /**
45
+ * Release digest of canonical release content: SHA-256 of its canonical JSON. The content must be
46
+ * exactly what `seal` produces, a sealed release without its digest; content that `seal` would
47
+ * canonicalize or refuse throws `ReleaseError` instead of yielding a digest no decoder accepts.
48
+ * Authored content gets its digest from `seal(content).digest`.
49
+ */
50
+ export declare function digestOf(input: Content): ReleaseDigest;
51
+ /** Validate release content, canonicalize its View bindings, and set its release digest. */
52
+ export declare function seal(input: Content): DomainRelease;
53
+ /**
54
+ * Admit one wire release: exact fields at every level, every value in the canonical form `seal`
55
+ * produces, and a digest matching its content. One release therefore has exactly one wire
56
+ * document: `encode(accept(input))` is the canonical JSON of `input`.
57
+ */
58
+ export declare function accept(input: unknown): DomainRelease;
59
+ /** Encode one release as its canonical JSON bytes. */
60
+ export declare function encode(input: DomainRelease): Uint8Array;
@@ -0,0 +1,125 @@
1
+ import * as portable from '@astrale-os/kernel-dsl/value';
2
+ import { admitBuild } from './build.js';
3
+ import { admitDigest, sha256Hex } from './digest.js';
4
+ import { fail } from './error.js';
5
+ import { servedUrl } from './issuer.js';
6
+ import { assertAuthoredManifest } from './manifest.js';
7
+ import { admitServedContent } from './served.js';
8
+ import { deepFreeze, exact, record } from './shape.js';
9
+ /** Path of the release a deployment serves beneath its serving issuer. */
10
+ export const PATH = '/.well-known/astrale/release.json';
11
+ /** Media type of `DomainRelease` v4. */
12
+ export const MEDIA_TYPE = 'application/vnd.astrale.domain-release+json;v=4';
13
+ /** Resolve the canonical release URL beneath one exact HTTP(S) serving issuer, keeping its path. */
14
+ export function url(issuer) {
15
+ return servedUrl(issuer, PATH);
16
+ }
17
+ const CONTENT_FIELDS = [
18
+ 'format',
19
+ 'version',
20
+ 'origin',
21
+ 'identity',
22
+ 'build',
23
+ 'schema',
24
+ 'requirements',
25
+ 'manifest',
26
+ 'bindings',
27
+ 'routes',
28
+ 'delivery',
29
+ ];
30
+ /**
31
+ * Release digest of canonical release content: SHA-256 of its canonical JSON. The content must be
32
+ * exactly what `seal` produces, a sealed release without its digest; content that `seal` would
33
+ * canonicalize or refuse throws `ReleaseError` instead of yielding a digest no decoder accepts.
34
+ * Authored content gets its digest from `seal(content).digest`.
35
+ */
36
+ export function digestOf(input) {
37
+ const value = record(input, 'RELEASE_INVALID', 'Expected release content.');
38
+ exact(value, CONTENT_FIELDS, 'RELEASE_INVALID');
39
+ return hash(admitCanonical(value));
40
+ }
41
+ /** Validate release content, canonicalize its View bindings, and set its release digest. */
42
+ export function seal(input) {
43
+ const authored = record(input, 'RELEASE_INVALID', 'Expected release content.');
44
+ exact(authored, CONTENT_FIELDS, 'RELEASE_INVALID');
45
+ assertAuthoredManifest(authored.manifest);
46
+ const canonical = admitContent(admitContent(authored, 'canonicalize'), 'admit');
47
+ return release(canonical, hash(canonical));
48
+ }
49
+ /**
50
+ * Admit one wire release: exact fields at every level, every value in the canonical form `seal`
51
+ * produces, and a digest matching its content. One release therefore has exactly one wire
52
+ * document: `encode(accept(input))` is the canonical JSON of `input`.
53
+ */
54
+ export function accept(input) {
55
+ const value = record(input, 'RELEASE_INVALID', 'Expected a DomainRelease object.');
56
+ exact(value, [...CONTENT_FIELDS, 'digest'], 'RELEASE_INVALID');
57
+ const { digest: received, ...wire } = value;
58
+ const content = admitCanonical(wire);
59
+ const digest = admitDigest(received);
60
+ if (digest !== hash(content)) {
61
+ fail('RELEASE_DIGEST_MISMATCH', 'Release digest does not match its canonical content.');
62
+ }
63
+ return release(content, digest);
64
+ }
65
+ /** Encode one release as its canonical JSON bytes. */
66
+ export function encode(input) {
67
+ return portable.json.encode(input);
68
+ }
69
+ function admitContent(value, views) {
70
+ if (value.format !== 'astrale.domain.release' || value.version !== 4) {
71
+ fail('RELEASE_INVALID', 'Unsupported release format or version.');
72
+ }
73
+ const served = admitServedContent(value, { views });
74
+ const build = admitBuild(value.build);
75
+ return deepFreeze({
76
+ format: 'astrale.domain.release',
77
+ version: 4,
78
+ origin: served.origin,
79
+ identity: served.identity,
80
+ build,
81
+ schema: served.schema,
82
+ requirements: served.requirements,
83
+ ...(served.manifest === undefined ? {} : { manifest: served.manifest }),
84
+ bindings: served.bindings,
85
+ routes: served.routes,
86
+ ...(served.delivery === undefined ? {} : { delivery: served.delivery }),
87
+ });
88
+ }
89
+ /** Shared validators normalize legacy values; releases require their exact canonical spelling. */
90
+ function admitCanonical(value) {
91
+ const content = admitContent(value, 'admit');
92
+ const canonical = portable.json.serialize(content);
93
+ let received;
94
+ try {
95
+ received = portable.json.serialize(value);
96
+ }
97
+ catch (cause) {
98
+ if (cause instanceof portable.BoundaryError) {
99
+ return fail('RELEASE_INVALID', 'Release content is not in canonical form.', cause);
100
+ }
101
+ throw cause;
102
+ }
103
+ if (received !== canonical)
104
+ fail('RELEASE_INVALID', 'Release content is not in canonical form.');
105
+ return content;
106
+ }
107
+ function hash(content) {
108
+ return `sha256:${sha256Hex(portable.json.encode(content))}`;
109
+ }
110
+ function release(content, digest) {
111
+ return deepFreeze({
112
+ format: content.format,
113
+ version: content.version,
114
+ origin: content.origin,
115
+ identity: content.identity,
116
+ digest,
117
+ build: content.build,
118
+ schema: content.schema,
119
+ requirements: content.requirements,
120
+ ...(content.manifest === undefined ? {} : { manifest: content.manifest }),
121
+ bindings: content.bindings,
122
+ routes: content.routes,
123
+ ...(content.delivery === undefined ? {} : { delivery: content.delivery }),
124
+ });
125
+ }
@@ -0,0 +1,41 @@
1
+ import type { AuthorityOperation } from '@astrale-os/kernel-core/schema/authority/operation';
2
+ import type { schema as schemaLanguage } from '@astrale-os/kernel-dsl/v1';
3
+ import type { ClassRef, CoreRef, Key as SemanticKey } from '@astrale-os/kernel-dsl/v1/addressing';
4
+ export type NonEmpty<Value> = readonly [Value, ...Value[]];
5
+ export declare const ClassOperationOrder: readonly ["create", "read", "traverse", "update", "delete"];
6
+ export type ClassOperation = (typeof ClassOperationOrder)[number];
7
+ export interface ClassCapabilityRequirement {
8
+ readonly class: ClassRef;
9
+ readonly operations: NonEmpty<ClassOperation>;
10
+ }
11
+ export interface CapabilityAuthorityRequirements {
12
+ readonly grant?: NonEmpty<AuthorityOperation>;
13
+ readonly revoke?: NonEmpty<AuthorityOperation>;
14
+ }
15
+ export interface CapabilityRequirements {
16
+ readonly functions?: NonEmpty<SemanticKey.Callable>;
17
+ readonly classes?: NonEmpty<ClassCapabilityRequirement>;
18
+ readonly authority?: CapabilityAuthorityRequirements;
19
+ readonly core?: NonEmpty<CoreCapabilityRequirement>;
20
+ }
21
+ /** Installation-owned authority materialized onto one local Core Identity. */
22
+ export interface CoreCapabilityRequirement {
23
+ readonly subject: CoreRef;
24
+ readonly functions?: NonEmpty<SemanticKey.Callable>;
25
+ readonly classes?: NonEmpty<ClassCapabilityRequirement>;
26
+ readonly authority?: CapabilityAuthorityRequirements;
27
+ }
28
+ export interface Requirements {
29
+ readonly capabilities: CapabilityRequirements;
30
+ }
31
+ /**
32
+ * Admit the exact closed canonical Release requirements object.
33
+ */
34
+ export declare function admitRequirements(input: unknown): Requirements;
35
+ /** Bind explicit capability targets to exact functional dependencies in the bundle closure. */
36
+ export declare function validateRequirements(root: schemaLanguage.DomainSchema, closure: readonly schemaLanguage.DomainSchema[], requirements: Requirements): void;
37
+ /**
38
+ * Distinct Function, Method and Class Keys, including Core-scoped targets, in code-unit order.
39
+ * Core subjects and authority operations contribute no Keys. Results may span multiple origins.
40
+ */
41
+ export declare function capabilityKeys(capabilities: CapabilityRequirements): readonly SemanticKey[];