@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
@@ -0,0 +1,306 @@
1
+ import { AuthorityOperationOrder } from '@astrale-os/kernel-core/schema/authority/operation';
2
+ import { acceptDefinitionRef, callableAddress, Key } from '@astrale-os/kernel-dsl/v1/addressing';
3
+ import { isMethodExecutable } from '@astrale-os/kernel-dsl/v1/language';
4
+ import { revision } from '@astrale-os/kernel-dsl/v1/schema/revision';
5
+ import { fail } from './error.js';
6
+ import { array, deepFreeze, exact, record, unique } from './shape.js';
7
+ const KernelIdentityClass = Object.freeze({
8
+ origin: 'kernel.astrale.ai',
9
+ kind: 'class',
10
+ name: 'Identity',
11
+ });
12
+ export const ClassOperationOrder = Object.freeze([
13
+ 'create',
14
+ 'read',
15
+ 'traverse',
16
+ 'update',
17
+ 'delete',
18
+ ]);
19
+ /**
20
+ * Admit the exact closed canonical Release requirements object.
21
+ */
22
+ export function admitRequirements(input) {
23
+ const requirements = record(input, 'RELEASE_INVALID', 'Release requirements are invalid.');
24
+ exact(requirements, ['capabilities'], 'RELEASE_INVALID');
25
+ const capabilities = record(requirements.capabilities, 'RELEASE_INVALID', 'Release capability requirements are invalid.');
26
+ exact(capabilities, ['authority', 'classes', 'functions', 'core'], 'RELEASE_INVALID');
27
+ const functions = capabilities.functions === undefined
28
+ ? undefined
29
+ : nonEmpty(capabilities.functions, 'Function capability requirements').map(admitCallable);
30
+ if (functions !== undefined) {
31
+ unique(functions, 'RELEASE_INVALID', 'Function capability requirement');
32
+ canonical(functions, compare, 'Function capability requirements');
33
+ }
34
+ const classes = capabilities.classes === undefined
35
+ ? undefined
36
+ : nonEmpty(capabilities.classes, 'Class capability requirements').map(admitClassRequirement);
37
+ if (classes !== undefined) {
38
+ unique(classes.map((entry) => classKey(entry.class)), 'RELEASE_INVALID', 'Class capability requirement');
39
+ canonical(classes, (left, right) => compare(classKey(left.class), classKey(right.class)), 'Class capability requirements');
40
+ }
41
+ const authority = capabilities.authority === undefined
42
+ ? undefined
43
+ : admitAuthorityRequirements(capabilities.authority);
44
+ const core = capabilities.core === undefined
45
+ ? undefined
46
+ : nonEmpty(capabilities.core, 'Core capability requirements').map(admitCoreCapabilityRequirement);
47
+ if (core !== undefined) {
48
+ unique(core.map(({ subject }) => Key.of(subject)), 'RELEASE_INVALID', 'Core capability subject');
49
+ canonical(core, (left, right) => compare(Key.of(left.subject), Key.of(right.subject)), 'Core capability requirements');
50
+ }
51
+ return deepFreeze({
52
+ capabilities: {
53
+ ...(functions === undefined
54
+ ? {}
55
+ : { functions: Object.freeze(functions) }),
56
+ ...(classes === undefined
57
+ ? {}
58
+ : { classes: Object.freeze(classes) }),
59
+ ...(authority === undefined ? {} : { authority }),
60
+ ...(core === undefined
61
+ ? {}
62
+ : { core: Object.freeze(core) }),
63
+ },
64
+ });
65
+ }
66
+ function admitCoreCapabilityRequirement(input) {
67
+ const requirement = record(input, 'RELEASE_INVALID', 'Core capability requirement is invalid.');
68
+ exact(requirement, ['authority', 'classes', 'functions', 'subject'], 'RELEASE_INVALID');
69
+ const subject = admitCoreRef(requirement.subject);
70
+ const functions = requirement.functions === undefined
71
+ ? undefined
72
+ : nonEmpty(requirement.functions, 'Core capability Function requirements').map(admitCallable);
73
+ if (functions !== undefined) {
74
+ unique(functions, 'RELEASE_INVALID', 'Core capability Function requirement');
75
+ canonical(functions, compare, 'Core capability Function requirements');
76
+ }
77
+ const classes = requirement.classes === undefined
78
+ ? undefined
79
+ : nonEmpty(requirement.classes, 'Core capability Class requirements').map(admitClassRequirement);
80
+ if (classes !== undefined) {
81
+ unique(classes.map((entry) => classKey(entry.class)), 'RELEASE_INVALID', 'Core capability Class requirement');
82
+ canonical(classes, (left, right) => compare(classKey(left.class), classKey(right.class)), 'Core capability Class requirements');
83
+ }
84
+ const authority = requirement.authority === undefined
85
+ ? undefined
86
+ : admitAuthorityRequirements(requirement.authority);
87
+ if (functions === undefined && classes === undefined && authority === undefined) {
88
+ fail('RELEASE_INVALID', 'Core capability requirements cannot be empty.');
89
+ }
90
+ return Object.freeze({
91
+ subject,
92
+ ...(functions === undefined
93
+ ? {}
94
+ : { functions: Object.freeze(functions) }),
95
+ ...(classes === undefined
96
+ ? {}
97
+ : { classes: Object.freeze(classes) }),
98
+ ...(authority === undefined ? {} : { authority }),
99
+ });
100
+ }
101
+ /** Bind explicit capability targets to exact functional dependencies in the bundle closure. */
102
+ export function validateRequirements(root, closure, requirements) {
103
+ const dependencies = exactDependencyClosure(root, closure);
104
+ for (const callable of requirements.capabilities.functions ?? []) {
105
+ const dependency = capabilityOwner(root, dependencies, callable, 'Function');
106
+ if (!hasCallable(dependency, callable)) {
107
+ fail('RELEASE_INVALID', 'Function capability requirement names an unknown dependency callable.');
108
+ }
109
+ }
110
+ for (const requirement of requirements.capabilities.classes ?? []) {
111
+ const key = Key.of(requirement.class);
112
+ const dependency = capabilityOwner(root, dependencies, key, 'Class');
113
+ if (dependency.classes[requirement.class.name] === undefined) {
114
+ fail('RELEASE_INVALID', 'Class capability requirement names an unknown dependency Class.');
115
+ }
116
+ }
117
+ for (const requirement of requirements.capabilities.core ?? []) {
118
+ const subject = root.core.nodes[requirement.subject.name];
119
+ if (requirement.subject.origin !== root.origin ||
120
+ subject === undefined ||
121
+ !classSatisfies(root, dependencies, subject.class, KernelIdentityClass)) {
122
+ fail('RELEASE_INVALID', 'Core capability subject must name one local Core Identity.');
123
+ }
124
+ for (const callable of requirement.functions ?? []) {
125
+ const owner = Key.origin(callable) === root.origin
126
+ ? root
127
+ : capabilityOwner(root, dependencies, callable, 'Function');
128
+ if (!hasCallable(owner, callable)) {
129
+ fail('RELEASE_INVALID', 'Core capability Function requirement names an unknown or non-executable callable.');
130
+ }
131
+ }
132
+ for (const classRequirement of requirement.classes ?? []) {
133
+ const key = Key.of(classRequirement.class);
134
+ const owner = classRequirement.class.origin === root.origin
135
+ ? root
136
+ : capabilityOwner(root, dependencies, key, 'Class');
137
+ if (owner.classes[classRequirement.class.name] === undefined) {
138
+ fail('RELEASE_INVALID', 'Core capability Class requirement names an unknown dependency Class.');
139
+ }
140
+ }
141
+ }
142
+ }
143
+ /**
144
+ * Distinct Function, Method and Class Keys, including Core-scoped targets, in code-unit order.
145
+ * Core subjects and authority operations contribute no Keys. Results may span multiple origins.
146
+ */
147
+ export function capabilityKeys(capabilities) {
148
+ const keys = new Set(capabilities.functions);
149
+ for (const requirement of capabilities.classes ?? [])
150
+ keys.add(Key.of(requirement.class));
151
+ for (const requirement of capabilities.core ?? []) {
152
+ for (const callable of requirement.functions ?? [])
153
+ keys.add(callable);
154
+ for (const classRequirement of requirement.classes ?? []) {
155
+ keys.add(Key.of(classRequirement.class));
156
+ }
157
+ }
158
+ return Object.freeze([...keys].sort(compare));
159
+ }
160
+ function classSatisfies(root, dependencies, candidate, expected) {
161
+ const expectedKey = Key.of(expected);
162
+ const visited = new Set();
163
+ const visit = (reference) => {
164
+ const key = Key.of(reference);
165
+ if (key === expectedKey)
166
+ return true;
167
+ if (visited.has(key))
168
+ return false;
169
+ visited.add(key);
170
+ const owner = reference.origin === root.origin ? root : dependencies.get(reference.origin);
171
+ const definition = owner?.classes[reference.name];
172
+ return definition?.kind === 'node' && definition.extends.some(visit);
173
+ };
174
+ return visit(candidate);
175
+ }
176
+ function exactDependencyClosure(root, closure) {
177
+ const supplied = new Map(closure.map((dependency) => [dependency.origin, dependency]));
178
+ const reachable = new Map();
179
+ const visit = (owner) => {
180
+ for (const coordinate of Object.values(owner.dependencies)) {
181
+ const dependency = supplied.get(coordinate.origin);
182
+ if (dependency === undefined || revision(dependency) !== coordinate.revision) {
183
+ fail('RELEASE_INVALID', 'Release bundle omits an exact dependency.');
184
+ }
185
+ if (reachable.has(dependency.origin))
186
+ continue;
187
+ reachable.set(dependency.origin, dependency);
188
+ visit(dependency);
189
+ }
190
+ };
191
+ visit(root);
192
+ return reachable;
193
+ }
194
+ function admitCallable(input) {
195
+ if (typeof input !== 'string' || !Key.is(input)) {
196
+ return fail('RELEASE_INVALID', 'Function capability reference is invalid.');
197
+ }
198
+ try {
199
+ callableAddress(input);
200
+ }
201
+ catch {
202
+ return fail('RELEASE_INVALID', 'Function capability reference must name a Function or Method.');
203
+ }
204
+ return input;
205
+ }
206
+ function admitClassRequirement(input) {
207
+ const requirement = record(input, 'RELEASE_INVALID', 'Class capability requirement is invalid.');
208
+ exact(requirement, ['class', 'operations'], 'RELEASE_INVALID');
209
+ const operations = nonEmpty(requirement.operations, 'Class capability operations').map((entry) => admitOperation(entry, ClassOperationOrder, 'Class capability operation'));
210
+ unique(operations, 'RELEASE_INVALID', 'Class capability operation');
211
+ canonical(operations, ordered(ClassOperationOrder), 'Class capability operations');
212
+ return Object.freeze({
213
+ class: admitClassRef(requirement.class),
214
+ operations: Object.freeze(operations),
215
+ });
216
+ }
217
+ function admitAuthorityRequirements(input) {
218
+ const authority = record(input, 'RELEASE_INVALID', 'Authority capability requirements are invalid.');
219
+ exact(authority, ['grant', 'revoke'], 'RELEASE_INVALID');
220
+ if (authority.grant === undefined && authority.revoke === undefined) {
221
+ fail('RELEASE_INVALID', 'Authority capability requirements cannot be empty.');
222
+ }
223
+ const grant = admitAuthorityOperations(authority.grant, 'grant');
224
+ const revoke = admitAuthorityOperations(authority.revoke, 'revoke');
225
+ return Object.freeze({
226
+ ...(grant === undefined ? {} : { grant }),
227
+ ...(revoke === undefined ? {} : { revoke }),
228
+ });
229
+ }
230
+ function admitAuthorityOperations(input, kind) {
231
+ if (input === undefined)
232
+ return undefined;
233
+ const values = nonEmpty(input, `Authority ${kind} operations`).map((entry) => admitOperation(entry, AuthorityOperationOrder, `Authority ${kind} operation`));
234
+ unique(values, 'RELEASE_INVALID', `authority ${kind} operation`);
235
+ canonical(values, ordered(AuthorityOperationOrder), `Authority ${kind} operations`);
236
+ return Object.freeze(values);
237
+ }
238
+ function admitClassRef(input) {
239
+ let value;
240
+ try {
241
+ value = acceptDefinitionRef(input);
242
+ }
243
+ catch {
244
+ fail('RELEASE_INVALID', 'Class capability reference is invalid.');
245
+ }
246
+ if (value.kind !== 'class')
247
+ fail('RELEASE_INVALID', 'Class capability reference is invalid.');
248
+ return value;
249
+ }
250
+ function admitCoreRef(input) {
251
+ let value;
252
+ try {
253
+ value = acceptDefinitionRef(input);
254
+ }
255
+ catch {
256
+ fail('RELEASE_INVALID', 'Core capability subject is invalid.');
257
+ }
258
+ if (value.kind !== 'core') {
259
+ fail('RELEASE_INVALID', 'Core capability subject must be one local Core reference.');
260
+ }
261
+ return value;
262
+ }
263
+ function nonEmpty(input, label) {
264
+ const values = [...array(input, 'RELEASE_INVALID')];
265
+ if (values.length === 0)
266
+ fail('RELEASE_INVALID', `${label} cannot be empty.`);
267
+ return values;
268
+ }
269
+ function admitOperation(input, vocabulary, label) {
270
+ if (typeof input !== 'string' || !vocabulary.includes(input)) {
271
+ return fail('RELEASE_INVALID', `${label} is unknown.`);
272
+ }
273
+ return input;
274
+ }
275
+ function canonical(values, comparator, label) {
276
+ if (values.some((entry, index) => index > 0 && comparator(values[index - 1], entry) >= 0)) {
277
+ fail('RELEASE_INVALID', `${label} must be sorted canonically.`);
278
+ }
279
+ }
280
+ function ordered(order) {
281
+ return (left, right) => order.indexOf(left) - order.indexOf(right);
282
+ }
283
+ function compare(left, right) {
284
+ return left < right ? -1 : left > right ? 1 : 0;
285
+ }
286
+ function classKey(input) {
287
+ return String(Key.of(input));
288
+ }
289
+ function capabilityOwner(root, dependencies, key, label) {
290
+ const origin = Key.origin(key);
291
+ if (origin === root.origin)
292
+ fail('RELEASE_INVALID', `${label} capability target cannot be local.`);
293
+ const dependency = dependencies.get(origin);
294
+ if (dependency === undefined) {
295
+ fail('RELEASE_INVALID', `${label} capability target must belong to the exact dependency closure.`);
296
+ }
297
+ return dependency;
298
+ }
299
+ function hasCallable(dependency, callable) {
300
+ const coordinate = callableAddress(callable);
301
+ if (coordinate.kind === 'function')
302
+ return dependency.functions[coordinate.name] !== undefined;
303
+ const declaration = dependency.classes[coordinate.owner.name];
304
+ const method = declaration?.kind === 'node' ? declaration.methods[coordinate.name] : undefined;
305
+ return method !== undefined && isMethodExecutable(declaration, method);
306
+ }
@@ -35,4 +35,3 @@ export interface HttpRouteDeclaration extends Omit<HttpRoute, 'href'> {
35
35
  }
36
36
  export declare function admitRoute(input: unknown, origin: string): HttpRoute;
37
37
  export declare function admitRouteDeclaration(input: unknown, origin: string): HttpRouteDeclaration;
38
- //# sourceMappingURL=route.d.ts.map
@@ -1,31 +1,31 @@
1
1
  import { patterns } from '@astrale-os/kernel-dsl/v1/addressing';
2
2
  import { admitCallableKey } from './bindings/callable.js';
3
- import { absoluteHttpUrl, deepFreeze, exact, record } from './content.js';
4
3
  import { fail } from './error.js';
4
+ import { absoluteHttpUrl, deepFreeze, exact, record } from './shape.js';
5
5
  const ROUTE_NAME = /^[A-Za-z][A-Za-z0-9_-]{0,63}$/u;
6
6
  export function admitRoute(input, origin) {
7
- const value = record(input, 'PUBLICATION_ROUTE_INVALID', 'Published HTTP route is invalid.');
7
+ const value = record(input, 'RELEASE_ROUTE_INVALID', 'Release HTTP route is invalid.');
8
8
  const common = admitRouteCommon(value, origin, 'href');
9
9
  return deepFreeze({
10
10
  ...common,
11
- href: absoluteHttpUrl(value.href, false, 'PUBLICATION_ROUTE_INVALID', true),
11
+ href: absoluteHttpUrl(value.href, false, 'RELEASE_ROUTE_INVALID', true),
12
12
  });
13
13
  }
14
14
  export function admitRouteDeclaration(input, origin) {
15
- const value = record(input, 'PUBLICATION_ROUTE_INVALID', 'HTTP route declaration is invalid.');
15
+ const value = record(input, 'RELEASE_ROUTE_INVALID', 'HTTP route declaration is invalid.');
16
16
  const common = admitRouteCommon(value, origin, 'path');
17
17
  if (typeof value.path !== 'string' || !value.path.startsWith('/')) {
18
- fail('PUBLICATION_ROUTE_INVALID', 'Route declaration path must be relative to one issuer.');
18
+ fail('RELEASE_ROUTE_INVALID', 'Route declaration path must be relative to one issuer.');
19
19
  }
20
20
  let parsed;
21
21
  try {
22
22
  parsed = new URL(value.path, 'https://placement.invalid');
23
23
  }
24
24
  catch (cause) {
25
- return fail('PUBLICATION_ROUTE_INVALID', 'Route declaration path is invalid.', cause);
25
+ return fail('RELEASE_ROUTE_INVALID', 'Route declaration path is invalid.', cause);
26
26
  }
27
27
  if (parsed.origin !== 'https://placement.invalid' || parsed.search !== '' || parsed.hash !== '') {
28
- fail('PUBLICATION_ROUTE_INVALID', 'Route declaration path cannot select an origin, query, or fragment.');
28
+ fail('RELEASE_ROUTE_INVALID', 'Route declaration path cannot select an origin, query, or fragment.');
29
29
  }
30
30
  return deepFreeze({ ...common, path: value.path });
31
31
  }
@@ -42,24 +42,24 @@ function admitRouteCommon(value, origin, location) {
42
42
  'headers',
43
43
  'body',
44
44
  'credential',
45
- ], 'PUBLICATION_ROUTE_INVALID');
45
+ ], 'RELEASE_ROUTE_INVALID');
46
46
  if (typeof value.name !== 'string' || !ROUTE_NAME.test(value.name)) {
47
- fail('PUBLICATION_ROUTE_INVALID', 'Route name is invalid.');
47
+ fail('RELEASE_ROUTE_INVALID', 'Route name is invalid.');
48
48
  }
49
49
  const callable = admitCallableKey(value.callable, origin);
50
50
  if (!['GET', 'POST', 'PUT', 'PATCH', 'DELETE', '*'].includes(value.method)) {
51
- fail('PUBLICATION_ROUTE_INVALID', 'Route method is invalid.');
51
+ fail('RELEASE_ROUTE_INVALID', 'Route method is invalid.');
52
52
  }
53
53
  if (value.default !== undefined && value.default !== true) {
54
- fail('PUBLICATION_ROUTE_INVALID', 'Route default may only be true.');
54
+ fail('RELEASE_ROUTE_INVALID', 'Route default may only be true.');
55
55
  }
56
56
  if (value.requestMethod !== undefined &&
57
57
  (typeof value.requestMethod !== 'string' || !patterns.memberName.test(value.requestMethod))) {
58
- fail('PUBLICATION_ROUTE_INVALID', 'Route request-method mapping is invalid.');
58
+ fail('RELEASE_ROUTE_INVALID', 'Route request-method mapping is invalid.');
59
59
  }
60
60
  if (value.receiver !== undefined &&
61
61
  (typeof value.receiver !== 'string' || !patterns.memberName.test(value.receiver))) {
62
- fail('PUBLICATION_ROUTE_INVALID', 'Route receiver is invalid.');
62
+ fail('RELEASE_ROUTE_INVALID', 'Route receiver is invalid.');
63
63
  }
64
64
  const query = stringRecord(value.query);
65
65
  const headers = headerRecord(value.headers);
@@ -83,13 +83,13 @@ function admitCredential(input) {
83
83
  return undefined;
84
84
  const values = Array.isArray(input) ? input : [input];
85
85
  if (values.length === 0)
86
- fail('PUBLICATION_ROUTE_INVALID', 'Credential source list is empty.');
86
+ fail('RELEASE_ROUTE_INVALID', 'Credential source list is empty.');
87
87
  const admitted = values.map((entry) => {
88
- const value = record(entry, 'PUBLICATION_ROUTE_INVALID', 'Credential source is invalid.');
89
- exact(value, ['in', 'name'], 'PUBLICATION_ROUTE_INVALID');
88
+ const value = record(entry, 'RELEASE_ROUTE_INVALID', 'Credential source is invalid.');
89
+ exact(value, ['in', 'name'], 'RELEASE_ROUTE_INVALID');
90
90
  if (value.in === 'header') {
91
91
  if (value.name !== undefined && (typeof value.name !== 'string' || value.name.length === 0)) {
92
- fail('PUBLICATION_ROUTE_INVALID', 'Credential header name is invalid.');
92
+ fail('RELEASE_ROUTE_INVALID', 'Credential header name is invalid.');
93
93
  }
94
94
  return Object.freeze({
95
95
  in: 'header',
@@ -101,14 +101,14 @@ function admitCredential(input) {
101
101
  value.name.length > 0) {
102
102
  return Object.freeze({ in: value.in, name: value.name });
103
103
  }
104
- return fail('PUBLICATION_ROUTE_INVALID', 'Credential source is invalid.');
104
+ return fail('RELEASE_ROUTE_INVALID', 'Credential source is invalid.');
105
105
  });
106
106
  return Array.isArray(input) ? Object.freeze(admitted) : admitted[0];
107
107
  }
108
108
  function admitBody(input) {
109
109
  if (input === undefined || input === '*')
110
110
  return input;
111
- const value = record(input, 'PUBLICATION_ROUTE_INVALID', 'Route body mapping is invalid.');
111
+ const value = record(input, 'RELEASE_ROUTE_INVALID', 'Route body mapping is invalid.');
112
112
  const output = {};
113
113
  for (const [field, pick] of Object.entries(value)) {
114
114
  if (typeof pick === 'string' && pick.length > 0)
@@ -121,7 +121,7 @@ function admitBody(input) {
121
121
  output[field] = { as: 'text' };
122
122
  }
123
123
  else {
124
- fail('PUBLICATION_ROUTE_INVALID', 'Route body pick is invalid.');
124
+ fail('RELEASE_ROUTE_INVALID', 'Route body pick is invalid.');
125
125
  }
126
126
  }
127
127
  return Object.freeze(output);
@@ -129,11 +129,11 @@ function admitBody(input) {
129
129
  function headerRecord(input) {
130
130
  if (input === undefined)
131
131
  return undefined;
132
- const value = record(input, 'PUBLICATION_ROUTE_INVALID', 'Route header mapping is invalid.');
132
+ const value = record(input, 'RELEASE_ROUTE_INVALID', 'Route header mapping is invalid.');
133
133
  const output = {};
134
134
  for (const [field, pick] of Object.entries(value)) {
135
135
  if (typeof pick !== 'string' || pick.length === 0) {
136
- fail('PUBLICATION_ROUTE_INVALID', 'Route header pick is invalid.');
136
+ fail('RELEASE_ROUTE_INVALID', 'Route header pick is invalid.');
137
137
  }
138
138
  output[field] = pick;
139
139
  }
@@ -142,14 +142,13 @@ function headerRecord(input) {
142
142
  function stringRecord(input) {
143
143
  if (input === undefined)
144
144
  return undefined;
145
- const value = record(input, 'PUBLICATION_ROUTE_INVALID', 'Route mapping is invalid.');
145
+ const value = record(input, 'RELEASE_ROUTE_INVALID', 'Route mapping is invalid.');
146
146
  const output = {};
147
147
  for (const [field, wire] of Object.entries(value)) {
148
148
  if (typeof wire !== 'string' || wire.length === 0) {
149
- fail('PUBLICATION_ROUTE_INVALID', 'Route wire name is invalid.');
149
+ fail('RELEASE_ROUTE_INVALID', 'Route wire name is invalid.');
150
150
  }
151
151
  output[field] = wire;
152
152
  }
153
153
  return Object.freeze(output);
154
154
  }
155
- //# sourceMappingURL=route.js.map
@@ -5,4 +5,3 @@ export interface Schema {
5
5
  readonly bundle: BundleDescriptor;
6
6
  }
7
7
  export declare function admitSchema(input: unknown): Schema;
8
- //# sourceMappingURL=schema.d.ts.map
@@ -1,16 +1,15 @@
1
1
  import { patterns } from '@astrale-os/kernel-dsl/v1/addressing';
2
2
  import { admitBundleDescriptor } from './bundle-descriptor.js';
3
- import { exact, record } from './content.js';
4
3
  import { fail } from './error.js';
4
+ import { exact, record } from './shape.js';
5
5
  export function admitSchema(input) {
6
- const value = record(input, 'PUBLICATION_INVALID', 'Published schema is invalid.');
7
- exact(value, ['revision', 'bundle'], 'PUBLICATION_INVALID');
6
+ const value = record(input, 'RELEASE_INVALID', 'Release schema is invalid.');
7
+ exact(value, ['revision', 'bundle'], 'RELEASE_INVALID');
8
8
  if (typeof value.revision !== 'string' || !patterns.revision.test(value.revision)) {
9
- fail('PUBLICATION_INVALID', 'Published schema revision is invalid.');
9
+ fail('RELEASE_INVALID', 'Release schema revision is invalid.');
10
10
  }
11
11
  return Object.freeze({
12
12
  revision: value.revision,
13
13
  bundle: admitBundleDescriptor(value.bundle),
14
14
  });
15
15
  }
16
- //# sourceMappingURL=schema.js.map
@@ -0,0 +1,27 @@
1
+ import type { IssuerId } from '@astrale-os/kernel-core/auth/issuer';
2
+ import type { ServedRelease } from './bundle-admission.js';
3
+ import type { Endpoint as DeliveryEndpoint } from './delivery-endpoint.js';
4
+ import type { Requirements } from './requirements.js';
5
+ /**
6
+ * Everything a served release document carries besides its format, version, digest and build:
7
+ * the content a bundle must match, the serving identity, and the optional Delivery endpoint.
8
+ */
9
+ export interface ServedContent extends ServedRelease {
10
+ readonly identity: {
11
+ readonly issuer: IssuerId;
12
+ readonly subject: string;
13
+ };
14
+ readonly delivery?: DeliveryEndpoint;
15
+ }
16
+ interface ServedOptions {
17
+ /** `canonicalize` normalizes authored View bindings before sealing; `admit` requires canonical ones. */
18
+ readonly views: 'canonicalize' | 'admit';
19
+ /** Reads the requirements coordinate of the document version; canonical `core` by default. */
20
+ readonly requirements?: (input: unknown) => Requirements;
21
+ }
22
+ /**
23
+ * Admit the version-neutral content of one served release document. Every document version runs
24
+ * these checks in this order, so a document of any version admits exactly the same served content.
25
+ */
26
+ export declare function admitServedContent(value: Readonly<Record<string, unknown>>, options: ServedOptions): ServedContent;
27
+ export {};
@@ -0,0 +1,56 @@
1
+ import { patterns } from '@astrale-os/kernel-dsl/v1/addressing';
2
+ import { admitCallableBinding, admitViewBinding } from './bindings/index.js';
3
+ import { canonicalizeViewBinding } from './bindings/view.js';
4
+ import { admitEndpoint as admitDeliveryEndpoint } from './delivery-endpoint.js';
5
+ import { fail } from './error.js';
6
+ import { admitIssuer } from './issuer.js';
7
+ import { admitManifest } from './manifest.js';
8
+ import { admitRequirements } from './requirements.js';
9
+ import { admitRoute } from './route.js';
10
+ import { admitSchema } from './schema.js';
11
+ import { array, exact, record, unique } from './shape.js';
12
+ /**
13
+ * Admit the version-neutral content of one served release document. Every document version runs
14
+ * these checks in this order, so a document of any version admits exactly the same served content.
15
+ */
16
+ export function admitServedContent(value, options) {
17
+ if (typeof value.origin !== 'string' || !patterns.origin.test(value.origin)) {
18
+ fail('RELEASE_INVALID', 'Release origin is invalid.');
19
+ }
20
+ const origin = value.origin;
21
+ const identity = record(value.identity, 'RELEASE_INVALID', 'Release identity is invalid.');
22
+ exact(identity, ['issuer', 'subject'], 'RELEASE_INVALID');
23
+ const issuer = admitIssuer(identity.issuer);
24
+ if (identity.subject !== origin) {
25
+ fail('RELEASE_INVALID', 'Release identity subject must equal its root origin.');
26
+ }
27
+ const schema = admitSchema(value.schema);
28
+ const requirements = (options.requirements ?? admitRequirements)(value.requirements);
29
+ const manifest = admitManifest(value.manifest);
30
+ const bindingSet = record(value.bindings, 'RELEASE_BINDING_INVALID', 'Release bindings are invalid.');
31
+ exact(bindingSet, ['callables', 'views'], 'RELEASE_BINDING_INVALID');
32
+ const callables = array(bindingSet.callables, 'RELEASE_BINDING_INVALID').map((entry) => admitCallableBinding(entry, origin));
33
+ unique(callables.map(({ callable }) => callable), 'RELEASE_BINDING_INVALID', 'callable binding');
34
+ const views = array(bindingSet.views, 'RELEASE_VIEW_INVALID').map((entry) => options.views === 'canonicalize'
35
+ ? canonicalizeViewBinding(entry, origin)
36
+ : admitViewBinding(entry, origin));
37
+ unique(views.map(({ view }) => view), 'RELEASE_VIEW_INVALID', 'View binding');
38
+ const routes = array(value.routes, 'RELEASE_ROUTE_INVALID').map((entry) => admitRoute(entry, origin));
39
+ unique(routes.map(({ name }) => name), 'RELEASE_ROUTE_INVALID', 'route name');
40
+ for (const callable of new Set(routes.map(({ callable }) => callable))) {
41
+ if (routes.filter((route) => route.callable === callable && route.default === true).length > 1) {
42
+ fail('RELEASE_ROUTE_INVALID', `Callable ${callable} has more than one default route.`);
43
+ }
44
+ }
45
+ const delivery = admitDeliveryEndpoint(value.delivery, schema.bundle.href);
46
+ return {
47
+ origin,
48
+ identity: { issuer, subject: origin },
49
+ schema,
50
+ requirements,
51
+ ...(manifest === undefined ? {} : { manifest }),
52
+ bindings: { callables, views },
53
+ routes,
54
+ ...(delivery === undefined ? {} : { delivery }),
55
+ };
56
+ }
@@ -0,0 +1,8 @@
1
+ import type { ReleaseErrorCode } from './error.js';
2
+ export declare function record(input: unknown, code: ReleaseErrorCode, message: string): Record<string, unknown>;
3
+ export declare function exact(value: Record<string, unknown>, allowed: readonly string[], code: ReleaseErrorCode): void;
4
+ export declare function array(input: unknown, code: ReleaseErrorCode): readonly unknown[];
5
+ export declare function unique(values: readonly string[], code: ReleaseErrorCode, label: string): void;
6
+ export declare function deepFreeze<T>(value: T): T;
7
+ export declare function absoluteHttpUrl(input: unknown, allowSearch: boolean, code: ReleaseErrorCode, allowTemplate?: boolean): string;
8
+ export declare function absoluteUrl(input: unknown, protocols: readonly string[], allowSearch: boolean, code: ReleaseErrorCode, allowTemplate?: boolean): string;
@@ -53,4 +53,3 @@ export function absoluteUrl(input, protocols, allowSearch, code, allowTemplate =
53
53
  }
54
54
  return input;
55
55
  }
56
- //# sourceMappingURL=content.js.map
@@ -1,4 +1,3 @@
1
1
  import type { Table } from './table.js';
2
- /** Admit one emitted portable Table before Server composition. */
2
+ /** Admit one emitted portable release Table before Server composition. */
3
3
  export declare function acceptTable(input: unknown): Table;
4
- //# sourceMappingURL=admission.d.ts.map