@astrale-os/kernel-protocol 0.5.0-beta.3 → 0.5.0-beta.31

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 (428) hide show
  1. package/CHANGELOG.md +683 -0
  2. package/dist/artifact/index.d.ts +0 -1
  3. package/dist/artifact/index.js +0 -1
  4. package/dist/artifact/ref.d.ts +0 -1
  5. package/dist/artifact/ref.js +0 -1
  6. package/dist/codecs/codec.d.ts +0 -1
  7. package/dist/codecs/codec.js +0 -1
  8. package/dist/codecs/index.d.ts +0 -1
  9. package/dist/codecs/index.js +0 -1
  10. package/dist/codecs/json.d.ts +0 -1
  11. package/dist/codecs/json.js +0 -1
  12. package/dist/codecs/media-types.d.ts +0 -1
  13. package/dist/codecs/media-types.js +0 -1
  14. package/dist/codecs/msgpack.d.ts +0 -1
  15. package/dist/codecs/msgpack.js +1 -5
  16. package/dist/errors/codes.d.ts +0 -1
  17. package/dist/errors/codes.js +0 -1
  18. package/dist/errors/http-status.d.ts +0 -1
  19. package/dist/errors/http-status.js +0 -1
  20. package/dist/errors/index.d.ts +0 -1
  21. package/dist/errors/index.js +0 -1
  22. package/dist/errors/payload.d.ts +0 -1
  23. package/dist/errors/payload.js +3 -3
  24. package/dist/errors/protocol-error.d.ts +0 -1
  25. package/dist/errors/protocol-error.js +4 -3
  26. package/dist/errors/reason.d.ts +0 -1
  27. package/dist/errors/reason.js +0 -1
  28. package/dist/index.d.ts +0 -1
  29. package/dist/index.js +0 -1
  30. package/dist/invocation/admission.d.ts +2 -3
  31. package/dist/invocation/admission.js +5 -8
  32. package/dist/invocation/binary.d.ts +1 -1
  33. package/dist/invocation/binary.js +14 -2
  34. package/dist/invocation/binding-codecs.d.ts +0 -1
  35. package/dist/invocation/binding-codecs.js +0 -1
  36. package/dist/invocation/cancellation.d.ts +0 -1
  37. package/dist/invocation/cancellation.js +0 -1
  38. package/dist/invocation/correlation.d.ts +0 -1
  39. package/dist/invocation/correlation.js +0 -1
  40. package/dist/invocation/delegate.d.ts +0 -1
  41. package/dist/invocation/delegate.js +0 -1
  42. package/dist/invocation/http/binary.d.ts +3 -2
  43. package/dist/invocation/http/binary.js +4 -2
  44. package/dist/invocation/http/index.d.ts +1 -2
  45. package/dist/invocation/http/index.js +1 -2
  46. package/dist/invocation/http/negotiation.d.ts +0 -1
  47. package/dist/invocation/http/negotiation.js +0 -1
  48. package/dist/invocation/http/stream.d.ts +0 -1
  49. package/dist/invocation/http/stream.js +0 -1
  50. package/dist/invocation/http/trace.d.ts +0 -1
  51. package/dist/invocation/http/trace.js +0 -1
  52. package/dist/invocation/idempotency.d.ts +0 -1
  53. package/dist/invocation/idempotency.js +0 -1
  54. package/dist/invocation/identity.d.ts +0 -1
  55. package/dist/invocation/identity.js +0 -1
  56. package/dist/invocation/index.d.ts +1 -2
  57. package/dist/invocation/index.js +1 -2
  58. package/dist/invocation/miss.d.ts +0 -1
  59. package/dist/invocation/miss.js +0 -1
  60. package/dist/invocation/redirect.d.ts +9 -8
  61. package/dist/invocation/redirect.js +6 -5
  62. package/dist/invocation/request.d.ts +0 -1
  63. package/dist/invocation/request.js +0 -1
  64. package/dist/invocation/response.d.ts +0 -1
  65. package/dist/invocation/response.js +0 -1
  66. package/dist/invocation/routing.d.ts +3 -3
  67. package/dist/invocation/routing.js +4 -4
  68. package/dist/invocation/schema.d.ts +2 -3
  69. package/dist/invocation/schema.js +2 -3
  70. package/dist/invocation/service-reason.d.ts +13 -13
  71. package/dist/invocation/service-reason.js +14 -14
  72. package/dist/invocation/stale-route.d.ts +0 -1
  73. package/dist/invocation/stale-route.js +0 -1
  74. package/dist/invocation/stream.d.ts +0 -1
  75. package/dist/invocation/stream.js +0 -1
  76. package/dist/invocation/target.d.ts +2 -3
  77. package/dist/invocation/target.js +0 -1
  78. package/dist/invocation/trace.d.ts +0 -1
  79. package/dist/invocation/trace.js +0 -1
  80. package/dist/invocation/version.d.ts +0 -1
  81. package/dist/invocation/version.js +0 -1
  82. package/dist/invocation/websocket/binary.d.ts +0 -1
  83. package/dist/invocation/websocket/binary.js +2 -2
  84. package/dist/invocation/websocket/index.d.ts +0 -1
  85. package/dist/invocation/websocket/index.js +0 -1
  86. package/dist/invocation/websocket/subprotocol.d.ts +0 -1
  87. package/dist/invocation/websocket/subprotocol.js +0 -1
  88. package/dist/issuer/configuration.d.ts +1 -2
  89. package/dist/issuer/configuration.js +0 -1
  90. package/dist/issuer/error.d.ts +0 -1
  91. package/dist/issuer/error.js +0 -1
  92. package/dist/issuer/exchange.d.ts +0 -1
  93. package/dist/issuer/exchange.js +0 -1
  94. package/dist/issuer/hosted.d.ts +1 -2
  95. package/dist/issuer/hosted.js +0 -1
  96. package/dist/issuer/index.d.ts +0 -1
  97. package/dist/issuer/index.js +0 -1
  98. package/dist/issuer/key-set.d.ts +1 -2
  99. package/dist/issuer/key-set.js +3 -3
  100. package/dist/issuer/paths.d.ts +0 -1
  101. package/dist/issuer/paths.js +0 -1
  102. package/dist/issuer/url.d.ts +1 -2
  103. package/dist/issuer/url.js +3 -3
  104. package/dist/publication/bindings/callable.d.ts +1 -2
  105. package/dist/publication/bindings/callable.js +8 -6
  106. package/dist/publication/bindings/index.d.ts +1 -2
  107. package/dist/publication/bindings/index.js +0 -1
  108. package/dist/publication/bindings/invocation.d.ts +0 -1
  109. package/dist/publication/bindings/invocation.js +0 -1
  110. package/dist/publication/bindings/view.d.ts +8 -2
  111. package/dist/publication/bindings/view.js +112 -4
  112. package/dist/publication/bundle-admission.d.ts +4 -0
  113. package/dist/publication/bundle-admission.js +65 -0
  114. package/dist/publication/bundle-descriptor.d.ts +9 -0
  115. package/dist/publication/bundle-descriptor.js +19 -0
  116. package/dist/publication/bundle-evidence.d.ts +3 -0
  117. package/dist/publication/bundle-evidence.js +13 -0
  118. package/dist/publication/bundle.d.ts +5 -12
  119. package/dist/publication/bundle.js +8 -29
  120. package/dist/publication/content.d.ts +0 -1
  121. package/dist/publication/content.js +0 -1
  122. package/dist/publication/declaration.d.ts +11 -0
  123. package/dist/publication/declaration.js +1 -0
  124. package/dist/publication/delivery/attestation.d.ts +0 -1
  125. package/dist/publication/delivery/attestation.js +0 -1
  126. package/dist/publication/delivery/claims.d.ts +8 -8
  127. package/dist/publication/delivery/claims.js +6 -7
  128. package/dist/publication/delivery/delivery.d.ts +1 -2
  129. package/dist/publication/delivery/delivery.js +1 -2
  130. package/dist/publication/delivery/error.d.ts +0 -1
  131. package/dist/publication/delivery/error.js +0 -1
  132. package/dist/publication/delivery/index.d.ts +0 -1
  133. package/dist/publication/delivery/index.js +0 -1
  134. package/dist/publication/delivery/limits.d.ts +0 -1
  135. package/dist/publication/delivery/limits.js +0 -1
  136. package/dist/publication/delivery/request.d.ts +3 -4
  137. package/dist/publication/delivery/request.js +4 -4
  138. package/dist/publication/delivery-declaration.d.ts +4 -0
  139. package/dist/publication/delivery-declaration.js +25 -0
  140. package/dist/publication/delivery-endpoint.d.ts +0 -1
  141. package/dist/publication/delivery-endpoint.js +0 -1
  142. package/dist/publication/error.d.ts +0 -1
  143. package/dist/publication/error.js +0 -1
  144. package/dist/publication/etag.d.ts +0 -1
  145. package/dist/publication/etag.js +0 -1
  146. package/dist/publication/index.d.ts +8 -5
  147. package/dist/publication/index.js +4 -2
  148. package/dist/publication/manifest.d.ts +2 -3
  149. package/dist/publication/manifest.js +10 -6
  150. package/dist/publication/publication.d.ts +13 -6
  151. package/dist/publication/publication.js +50 -71
  152. package/dist/publication/reference.d.ts +3 -3
  153. package/dist/publication/reference.js +7 -7
  154. package/dist/publication/requirements.d.ts +15 -7
  155. package/dist/publication/requirements.js +137 -47
  156. package/dist/publication/route.d.ts +6 -2
  157. package/dist/publication/route.js +31 -9
  158. package/dist/publication/schema.d.ts +3 -4
  159. package/dist/publication/schema.js +3 -4
  160. package/dist/routes/admission.d.ts +3 -0
  161. package/dist/routes/admission.js +89 -0
  162. package/dist/routes/binding.d.ts +6 -0
  163. package/dist/routes/binding.js +27 -0
  164. package/dist/routes/collision.d.ts +2 -0
  165. package/dist/routes/collision.js +16 -0
  166. package/dist/routes/compiler.d.ts +8 -0
  167. package/dist/routes/compiler.js +50 -0
  168. package/dist/routes/credential.d.ts +7 -8
  169. package/dist/routes/credential.js +7 -8
  170. package/dist/routes/decode.d.ts +4 -3
  171. package/dist/routes/decode.js +42 -42
  172. package/dist/routes/encode.d.ts +3 -3
  173. package/dist/routes/encode.js +31 -33
  174. package/dist/routes/error-response.d.ts +0 -1
  175. package/dist/routes/error-response.js +0 -1
  176. package/dist/routes/error.d.ts +0 -1
  177. package/dist/routes/error.js +0 -1
  178. package/dist/routes/evidence.d.ts +5 -0
  179. package/dist/routes/evidence.js +38 -0
  180. package/dist/routes/index.d.ts +9 -3
  181. package/dist/routes/index.js +6 -3
  182. package/dist/routes/mapping.d.ts +1 -2
  183. package/dist/routes/mapping.js +4 -13
  184. package/dist/routes/match.d.ts +3 -4
  185. package/dist/routes/match.js +3 -5
  186. package/dist/routes/placement.d.ts +5 -0
  187. package/dist/routes/placement.js +18 -0
  188. package/dist/routes/plan.d.ts +24 -0
  189. package/dist/routes/plan.js +1 -0
  190. package/dist/routes/release-unavailable.d.ts +8 -0
  191. package/dist/routes/release-unavailable.js +32 -0
  192. package/dist/routes/request.d.ts +0 -1
  193. package/dist/routes/request.js +3 -2
  194. package/dist/routes/reservation.d.ts +3 -4
  195. package/dist/routes/reservation.js +8 -5
  196. package/dist/routes/routing.d.ts +0 -1
  197. package/dist/routes/routing.js +0 -1
  198. package/dist/routes/scalar.d.ts +4 -4
  199. package/dist/routes/scalar.js +14 -11
  200. package/dist/routes/select.d.ts +2 -3
  201. package/dist/routes/select.js +2 -3
  202. package/dist/routes/stream.d.ts +0 -1
  203. package/dist/routes/stream.js +0 -1
  204. package/dist/routes/table.d.ts +9 -0
  205. package/dist/routes/table.js +1 -0
  206. package/dist/routes/target.d.ts +13 -0
  207. package/dist/routes/target.js +3 -0
  208. package/dist/routes/template.d.ts +0 -1
  209. package/dist/routes/template.js +0 -1
  210. package/dist/runtime/artifact.d.ts +3 -4
  211. package/dist/runtime/artifact.js +5 -6
  212. package/dist/runtime/index.d.ts +0 -1
  213. package/dist/runtime/index.js +0 -1
  214. package/dist/schema/index.d.ts +0 -1
  215. package/dist/schema/index.js +0 -1
  216. package/dist/schema/installation/codec.d.ts +4 -0
  217. package/dist/schema/installation/codec.js +70 -0
  218. package/dist/schema/installation/index.d.ts +2 -1
  219. package/dist/schema/installation/index.js +1 -1
  220. package/dist/schema/installation/introspection/codec.d.ts +3 -3
  221. package/dist/schema/installation/introspection/codec.js +144 -204
  222. package/dist/schema/installation/introspection/index.d.ts +2 -3
  223. package/dist/schema/installation/introspection/index.js +1 -2
  224. package/dist/schema/installation/introspection/result.d.ts +18 -23
  225. package/dist/schema/installation/introspection/result.js +0 -1
  226. package/dist/schema/installation/result.d.ts +9 -0
  227. package/dist/schema/installation/result.js +1 -0
  228. package/package.json +116 -13
  229. package/dist/artifact/index.d.ts.map +0 -1
  230. package/dist/artifact/index.js.map +0 -1
  231. package/dist/artifact/ref.d.ts.map +0 -1
  232. package/dist/artifact/ref.js.map +0 -1
  233. package/dist/codecs/codec.d.ts.map +0 -1
  234. package/dist/codecs/codec.js.map +0 -1
  235. package/dist/codecs/index.d.ts.map +0 -1
  236. package/dist/codecs/index.js.map +0 -1
  237. package/dist/codecs/json.d.ts.map +0 -1
  238. package/dist/codecs/json.js.map +0 -1
  239. package/dist/codecs/media-types.d.ts.map +0 -1
  240. package/dist/codecs/media-types.js.map +0 -1
  241. package/dist/codecs/msgpack.d.ts.map +0 -1
  242. package/dist/codecs/msgpack.js.map +0 -1
  243. package/dist/errors/codes.d.ts.map +0 -1
  244. package/dist/errors/codes.js.map +0 -1
  245. package/dist/errors/http-status.d.ts.map +0 -1
  246. package/dist/errors/http-status.js.map +0 -1
  247. package/dist/errors/index.d.ts.map +0 -1
  248. package/dist/errors/index.js.map +0 -1
  249. package/dist/errors/payload.d.ts.map +0 -1
  250. package/dist/errors/payload.js.map +0 -1
  251. package/dist/errors/protocol-error.d.ts.map +0 -1
  252. package/dist/errors/protocol-error.js.map +0 -1
  253. package/dist/errors/reason.d.ts.map +0 -1
  254. package/dist/errors/reason.js.map +0 -1
  255. package/dist/index.d.ts.map +0 -1
  256. package/dist/index.js.map +0 -1
  257. package/dist/invocation/admission.d.ts.map +0 -1
  258. package/dist/invocation/admission.js.map +0 -1
  259. package/dist/invocation/binary.d.ts.map +0 -1
  260. package/dist/invocation/binary.js.map +0 -1
  261. package/dist/invocation/binding-codecs.d.ts.map +0 -1
  262. package/dist/invocation/binding-codecs.js.map +0 -1
  263. package/dist/invocation/cancellation.d.ts.map +0 -1
  264. package/dist/invocation/cancellation.js.map +0 -1
  265. package/dist/invocation/correlation.d.ts.map +0 -1
  266. package/dist/invocation/correlation.js.map +0 -1
  267. package/dist/invocation/delegate.d.ts.map +0 -1
  268. package/dist/invocation/delegate.js.map +0 -1
  269. package/dist/invocation/http/binary.d.ts.map +0 -1
  270. package/dist/invocation/http/binary.js.map +0 -1
  271. package/dist/invocation/http/index.d.ts.map +0 -1
  272. package/dist/invocation/http/index.js.map +0 -1
  273. package/dist/invocation/http/negotiation.d.ts.map +0 -1
  274. package/dist/invocation/http/negotiation.js.map +0 -1
  275. package/dist/invocation/http/stream.d.ts.map +0 -1
  276. package/dist/invocation/http/stream.js.map +0 -1
  277. package/dist/invocation/http/trace.d.ts.map +0 -1
  278. package/dist/invocation/http/trace.js.map +0 -1
  279. package/dist/invocation/idempotency.d.ts.map +0 -1
  280. package/dist/invocation/idempotency.js.map +0 -1
  281. package/dist/invocation/identity.d.ts.map +0 -1
  282. package/dist/invocation/identity.js.map +0 -1
  283. package/dist/invocation/index.d.ts.map +0 -1
  284. package/dist/invocation/index.js.map +0 -1
  285. package/dist/invocation/miss.d.ts.map +0 -1
  286. package/dist/invocation/miss.js.map +0 -1
  287. package/dist/invocation/redirect.d.ts.map +0 -1
  288. package/dist/invocation/redirect.js.map +0 -1
  289. package/dist/invocation/request.d.ts.map +0 -1
  290. package/dist/invocation/request.js.map +0 -1
  291. package/dist/invocation/response.d.ts.map +0 -1
  292. package/dist/invocation/response.js.map +0 -1
  293. package/dist/invocation/routing.d.ts.map +0 -1
  294. package/dist/invocation/routing.js.map +0 -1
  295. package/dist/invocation/schema.d.ts.map +0 -1
  296. package/dist/invocation/schema.js.map +0 -1
  297. package/dist/invocation/service-reason.d.ts.map +0 -1
  298. package/dist/invocation/service-reason.js.map +0 -1
  299. package/dist/invocation/stale-route.d.ts.map +0 -1
  300. package/dist/invocation/stale-route.js.map +0 -1
  301. package/dist/invocation/stream.d.ts.map +0 -1
  302. package/dist/invocation/stream.js.map +0 -1
  303. package/dist/invocation/target.d.ts.map +0 -1
  304. package/dist/invocation/target.js.map +0 -1
  305. package/dist/invocation/trace.d.ts.map +0 -1
  306. package/dist/invocation/trace.js.map +0 -1
  307. package/dist/invocation/version.d.ts.map +0 -1
  308. package/dist/invocation/version.js.map +0 -1
  309. package/dist/invocation/websocket/binary.d.ts.map +0 -1
  310. package/dist/invocation/websocket/binary.js.map +0 -1
  311. package/dist/invocation/websocket/index.d.ts.map +0 -1
  312. package/dist/invocation/websocket/index.js.map +0 -1
  313. package/dist/invocation/websocket/subprotocol.d.ts.map +0 -1
  314. package/dist/invocation/websocket/subprotocol.js.map +0 -1
  315. package/dist/issuer/configuration.d.ts.map +0 -1
  316. package/dist/issuer/configuration.js.map +0 -1
  317. package/dist/issuer/error.d.ts.map +0 -1
  318. package/dist/issuer/error.js.map +0 -1
  319. package/dist/issuer/exchange.d.ts.map +0 -1
  320. package/dist/issuer/exchange.js.map +0 -1
  321. package/dist/issuer/hosted.d.ts.map +0 -1
  322. package/dist/issuer/hosted.js.map +0 -1
  323. package/dist/issuer/index.d.ts.map +0 -1
  324. package/dist/issuer/index.js.map +0 -1
  325. package/dist/issuer/key-set.d.ts.map +0 -1
  326. package/dist/issuer/key-set.js.map +0 -1
  327. package/dist/issuer/paths.d.ts.map +0 -1
  328. package/dist/issuer/paths.js.map +0 -1
  329. package/dist/issuer/url.d.ts.map +0 -1
  330. package/dist/issuer/url.js.map +0 -1
  331. package/dist/publication/bindings/callable.d.ts.map +0 -1
  332. package/dist/publication/bindings/callable.js.map +0 -1
  333. package/dist/publication/bindings/index.d.ts.map +0 -1
  334. package/dist/publication/bindings/index.js.map +0 -1
  335. package/dist/publication/bindings/invocation.d.ts.map +0 -1
  336. package/dist/publication/bindings/invocation.js.map +0 -1
  337. package/dist/publication/bindings/view.d.ts.map +0 -1
  338. package/dist/publication/bindings/view.js.map +0 -1
  339. package/dist/publication/bundle.d.ts.map +0 -1
  340. package/dist/publication/bundle.js.map +0 -1
  341. package/dist/publication/content.d.ts.map +0 -1
  342. package/dist/publication/content.js.map +0 -1
  343. package/dist/publication/delivery/attestation.d.ts.map +0 -1
  344. package/dist/publication/delivery/attestation.js.map +0 -1
  345. package/dist/publication/delivery/claims.d.ts.map +0 -1
  346. package/dist/publication/delivery/claims.js.map +0 -1
  347. package/dist/publication/delivery/delivery.d.ts.map +0 -1
  348. package/dist/publication/delivery/delivery.js.map +0 -1
  349. package/dist/publication/delivery/error.d.ts.map +0 -1
  350. package/dist/publication/delivery/error.js.map +0 -1
  351. package/dist/publication/delivery/index.d.ts.map +0 -1
  352. package/dist/publication/delivery/index.js.map +0 -1
  353. package/dist/publication/delivery/limits.d.ts.map +0 -1
  354. package/dist/publication/delivery/limits.js.map +0 -1
  355. package/dist/publication/delivery/request.d.ts.map +0 -1
  356. package/dist/publication/delivery/request.js.map +0 -1
  357. package/dist/publication/delivery-endpoint.d.ts.map +0 -1
  358. package/dist/publication/delivery-endpoint.js.map +0 -1
  359. package/dist/publication/error.d.ts.map +0 -1
  360. package/dist/publication/error.js.map +0 -1
  361. package/dist/publication/etag.d.ts.map +0 -1
  362. package/dist/publication/etag.js.map +0 -1
  363. package/dist/publication/index.d.ts.map +0 -1
  364. package/dist/publication/index.js.map +0 -1
  365. package/dist/publication/manifest.d.ts.map +0 -1
  366. package/dist/publication/manifest.js.map +0 -1
  367. package/dist/publication/publication.d.ts.map +0 -1
  368. package/dist/publication/publication.js.map +0 -1
  369. package/dist/publication/reference.d.ts.map +0 -1
  370. package/dist/publication/reference.js.map +0 -1
  371. package/dist/publication/requirements.d.ts.map +0 -1
  372. package/dist/publication/requirements.js.map +0 -1
  373. package/dist/publication/route.d.ts.map +0 -1
  374. package/dist/publication/route.js.map +0 -1
  375. package/dist/publication/schema.d.ts.map +0 -1
  376. package/dist/publication/schema.js.map +0 -1
  377. package/dist/routes/compile.d.ts +0 -5
  378. package/dist/routes/compile.d.ts.map +0 -1
  379. package/dist/routes/compile.js +0 -69
  380. package/dist/routes/compile.js.map +0 -1
  381. package/dist/routes/credential.d.ts.map +0 -1
  382. package/dist/routes/credential.js.map +0 -1
  383. package/dist/routes/decode.d.ts.map +0 -1
  384. package/dist/routes/decode.js.map +0 -1
  385. package/dist/routes/encode.d.ts.map +0 -1
  386. package/dist/routes/encode.js.map +0 -1
  387. package/dist/routes/error-response.d.ts.map +0 -1
  388. package/dist/routes/error-response.js.map +0 -1
  389. package/dist/routes/error.d.ts.map +0 -1
  390. package/dist/routes/error.js.map +0 -1
  391. package/dist/routes/index.d.ts.map +0 -1
  392. package/dist/routes/index.js.map +0 -1
  393. package/dist/routes/mapping.d.ts.map +0 -1
  394. package/dist/routes/mapping.js.map +0 -1
  395. package/dist/routes/match.d.ts.map +0 -1
  396. package/dist/routes/match.js.map +0 -1
  397. package/dist/routes/request.d.ts.map +0 -1
  398. package/dist/routes/request.js.map +0 -1
  399. package/dist/routes/reservation.d.ts.map +0 -1
  400. package/dist/routes/reservation.js.map +0 -1
  401. package/dist/routes/route.d.ts +0 -13
  402. package/dist/routes/route.d.ts.map +0 -1
  403. package/dist/routes/route.js +0 -6
  404. package/dist/routes/route.js.map +0 -1
  405. package/dist/routes/routing.d.ts.map +0 -1
  406. package/dist/routes/routing.js.map +0 -1
  407. package/dist/routes/scalar.d.ts.map +0 -1
  408. package/dist/routes/scalar.js.map +0 -1
  409. package/dist/routes/select.d.ts.map +0 -1
  410. package/dist/routes/select.js.map +0 -1
  411. package/dist/routes/stream.d.ts.map +0 -1
  412. package/dist/routes/stream.js.map +0 -1
  413. package/dist/routes/template.d.ts.map +0 -1
  414. package/dist/routes/template.js.map +0 -1
  415. package/dist/runtime/artifact.d.ts.map +0 -1
  416. package/dist/runtime/artifact.js.map +0 -1
  417. package/dist/runtime/index.d.ts.map +0 -1
  418. package/dist/runtime/index.js.map +0 -1
  419. package/dist/schema/index.d.ts.map +0 -1
  420. package/dist/schema/index.js.map +0 -1
  421. package/dist/schema/installation/index.d.ts.map +0 -1
  422. package/dist/schema/installation/index.js.map +0 -1
  423. package/dist/schema/installation/introspection/codec.d.ts.map +0 -1
  424. package/dist/schema/installation/introspection/codec.js.map +0 -1
  425. package/dist/schema/installation/introspection/index.d.ts.map +0 -1
  426. package/dist/schema/installation/introspection/index.js.map +0 -1
  427. package/dist/schema/installation/introspection/result.d.ts.map +0 -1
  428. package/dist/schema/installation/introspection/result.js.map +0 -1
@@ -1,5 +1,8 @@
1
- import { AuthorityOperationOrder } from '@astrale-os/kernel-core/schema';
2
- import { Key, Ref, schema as dslSchema } from '@astrale-os/kernel-dsl/v1';
1
+ import { K } from '@astrale-os/kernel-core/schema';
2
+ import { AuthorityOperationOrder } from '@astrale-os/kernel-core/schema/authority/operation';
3
+ import { schema as schemaApi } from '@astrale-os/kernel-dsl/v1';
4
+ import { acceptDefinitionRef, callableAddress, Key } from '@astrale-os/kernel-dsl/v1/addressing';
5
+ import { revision } from '@astrale-os/kernel-dsl/v1/schema/revision';
3
6
  import { array, deepFreeze, exact, record, unique } from './content.js';
4
7
  import { fail } from './error.js';
5
8
  export const ClassOperationOrder = Object.freeze([
@@ -14,7 +17,7 @@ export function admitRequirements(input) {
14
17
  const requirements = record(input, 'PUBLICATION_INVALID', 'Publication requirements are invalid.');
15
18
  exact(requirements, ['capabilities'], 'PUBLICATION_INVALID');
16
19
  const capabilities = record(requirements.capabilities, 'PUBLICATION_INVALID', 'Publication capability requirements are invalid.');
17
- exact(capabilities, ['admin', 'classes', 'functions'], 'PUBLICATION_INVALID');
20
+ exact(capabilities, ['authority', 'classes', 'functions', 'profiles'], 'PUBLICATION_INVALID');
18
21
  const functions = capabilities.functions === undefined
19
22
  ? undefined
20
23
  : nonEmpty(capabilities.functions, 'Function capability requirements').map(admitCallable);
@@ -29,7 +32,16 @@ export function admitRequirements(input) {
29
32
  unique(classes.map((entry) => classKey(entry.class)), 'PUBLICATION_INVALID', 'Class capability requirement');
30
33
  canonical(classes, (left, right) => compare(classKey(left.class), classKey(right.class)), 'Class capability requirements');
31
34
  }
32
- const admin = capabilities.admin === undefined ? undefined : admitAdminRequirements(capabilities.admin);
35
+ const authority = capabilities.authority === undefined
36
+ ? undefined
37
+ : admitAuthorityRequirements(capabilities.authority);
38
+ const profiles = capabilities.profiles === undefined
39
+ ? undefined
40
+ : nonEmpty(capabilities.profiles, 'Capability profiles').map(admitCapabilityProfile);
41
+ if (profiles !== undefined) {
42
+ unique(profiles.map(({ subject }) => Key.of(subject)), 'PUBLICATION_INVALID', 'Capability profile subject');
43
+ canonical(profiles, (left, right) => compare(Key.of(left.subject), Key.of(right.subject)), 'Capability profiles');
44
+ }
33
45
  return deepFreeze({
34
46
  capabilities: {
35
47
  ...(functions === undefined
@@ -38,36 +50,100 @@ export function admitRequirements(input) {
38
50
  ...(classes === undefined
39
51
  ? {}
40
52
  : { classes: Object.freeze(classes) }),
41
- ...(admin === undefined ? {} : { admin }),
53
+ ...(authority === undefined ? {} : { authority }),
54
+ ...(profiles === undefined
55
+ ? {}
56
+ : { profiles: Object.freeze(profiles) }),
42
57
  },
43
58
  });
44
59
  }
60
+ function admitCapabilityProfile(input) {
61
+ const profile = record(input, 'PUBLICATION_INVALID', 'Capability profile requirement is invalid.');
62
+ exact(profile, ['authority', 'classes', 'functions', 'subject'], 'PUBLICATION_INVALID');
63
+ const subject = admitCoreRef(profile.subject);
64
+ const functions = profile.functions === undefined
65
+ ? undefined
66
+ : nonEmpty(profile.functions, 'Capability profile Function requirements').map(admitCallable);
67
+ if (functions !== undefined) {
68
+ unique(functions, 'PUBLICATION_INVALID', 'Capability profile Function requirement');
69
+ canonical(functions, compare, 'Capability profile Function requirements');
70
+ }
71
+ const classes = profile.classes === undefined
72
+ ? undefined
73
+ : nonEmpty(profile.classes, 'Capability profile Class requirements').map(admitClassRequirement);
74
+ if (classes !== undefined) {
75
+ unique(classes.map((entry) => classKey(entry.class)), 'PUBLICATION_INVALID', 'Capability profile Class requirement');
76
+ canonical(classes, (left, right) => compare(classKey(left.class), classKey(right.class)), 'Capability profile Class requirements');
77
+ }
78
+ const authority = profile.authority === undefined ? undefined : admitAuthorityRequirements(profile.authority);
79
+ if (functions === undefined && classes === undefined && authority === undefined) {
80
+ fail('PUBLICATION_INVALID', 'Capability profile requirements cannot be empty.');
81
+ }
82
+ return Object.freeze({
83
+ subject,
84
+ ...(functions === undefined
85
+ ? {}
86
+ : { functions: Object.freeze(functions) }),
87
+ ...(classes === undefined
88
+ ? {}
89
+ : { classes: Object.freeze(classes) }),
90
+ ...(authority === undefined ? {} : { authority }),
91
+ });
92
+ }
45
93
  /** Bind explicit capability targets to exact functional dependencies in the bundle closure. */
46
94
  export function validateRequirements(root, closure, requirements) {
47
95
  const dependencies = exactDependencyClosure(root, closure);
48
96
  for (const callable of requirements.capabilities.functions ?? []) {
49
- validateForeignTarget(root, dependencies, callable, 'Function');
50
- const dependency = dependencies.get(Key.origin(callable));
51
- const reference = Key.ref(callable);
52
- if (!hasCallable(dependency, reference)) {
97
+ const dependency = capabilityOwner(root, dependencies, callable, 'Function');
98
+ if (!hasCallable(dependency, callable)) {
53
99
  fail('PUBLICATION_INVALID', 'Function capability requirement names an unknown dependency callable.');
54
100
  }
55
101
  }
56
102
  for (const requirement of requirements.capabilities.classes ?? []) {
57
- const key = Key.fromSchema(requirement.class);
58
- validateForeignTarget(root, dependencies, key, 'Class');
59
- if (dependencies.get(requirement.class.origin).classes[requirement.class.name] === undefined) {
103
+ const key = Key.of(requirement.class);
104
+ const dependency = capabilityOwner(root, dependencies, key, 'Class');
105
+ if (dependency.classes[requirement.class.name] === undefined) {
60
106
  fail('PUBLICATION_INVALID', 'Class capability requirement names an unknown dependency Class.');
61
107
  }
62
108
  }
109
+ const resolvedRoot = requirements.capabilities.profiles === undefined
110
+ ? undefined
111
+ : schemaApi.resolve(schemaApi.accept(root, {
112
+ get(origin, expectedRevision) {
113
+ return closure.find((dependency) => dependency.origin === origin && revision(dependency) === expectedRevision);
114
+ },
115
+ }));
116
+ for (const profile of requirements.capabilities.profiles ?? []) {
117
+ const subject = resolvedRoot.core.nodes[profile.subject.name];
118
+ if (profile.subject.origin !== root.origin ||
119
+ subject === undefined ||
120
+ !subject.class.satisfies(K.classes.Identity)) {
121
+ fail('PUBLICATION_INVALID', 'Capability profile subject must name one local Core Identity.');
122
+ }
123
+ for (const callable of profile.functions ?? []) {
124
+ const dependency = capabilityOwner(root, dependencies, callable, 'Function');
125
+ if (!hasCallable(dependency, callable)) {
126
+ fail('PUBLICATION_INVALID', 'Capability profile Function requirement names an unknown dependency callable.');
127
+ }
128
+ }
129
+ for (const requirement of profile.classes ?? []) {
130
+ const key = Key.of(requirement.class);
131
+ const owner = requirement.class.origin === root.origin
132
+ ? root
133
+ : capabilityOwner(root, dependencies, key, 'Class');
134
+ if (owner.classes[requirement.class.name] === undefined) {
135
+ fail('PUBLICATION_INVALID', 'Capability profile Class requirement names an unknown dependency Class.');
136
+ }
137
+ }
138
+ }
63
139
  }
64
140
  function exactDependencyClosure(root, closure) {
65
141
  const supplied = new Map(closure.map((dependency) => [dependency.origin, dependency]));
66
142
  const reachable = new Map();
67
143
  const visit = (owner) => {
68
- for (const coordinate of owner.dependencies) {
144
+ for (const coordinate of Object.values(owner.dependencies)) {
69
145
  const dependency = supplied.get(coordinate.origin);
70
- if (dependency === undefined || dslSchema.revision(dependency) !== coordinate.revision) {
146
+ if (dependency === undefined || revision(dependency) !== coordinate.revision) {
71
147
  fail('PUBLICATION_INVALID', 'Publication Bundle omits an exact dependency.');
72
148
  }
73
149
  if (reachable.has(dependency.origin))
@@ -83,8 +159,10 @@ function admitCallable(input) {
83
159
  if (typeof input !== 'string' || !Key.is(input)) {
84
160
  return fail('PUBLICATION_INVALID', 'Function capability reference is invalid.');
85
161
  }
86
- const reference = Key.ref(input);
87
- if (!reference.startsWith('function.') && !Ref.isMethod(reference)) {
162
+ try {
163
+ callableAddress(input);
164
+ }
165
+ catch {
88
166
  return fail('PUBLICATION_INVALID', 'Function capability reference must name a Function or Method.');
89
167
  }
90
168
  return input;
@@ -100,14 +178,14 @@ function admitClassRequirement(input) {
100
178
  operations: Object.freeze(operations),
101
179
  });
102
180
  }
103
- function admitAdminRequirements(input) {
104
- const admin = record(input, 'PUBLICATION_INVALID', 'Administrative capability requirements are invalid.');
105
- exact(admin, ['grant', 'revoke'], 'PUBLICATION_INVALID');
106
- if (admin.grant === undefined && admin.revoke === undefined) {
107
- fail('PUBLICATION_INVALID', 'Administrative capability requirements cannot be empty.');
181
+ function admitAuthorityRequirements(input) {
182
+ const authority = record(input, 'PUBLICATION_INVALID', 'Authority capability requirements are invalid.');
183
+ exact(authority, ['grant', 'revoke'], 'PUBLICATION_INVALID');
184
+ if (authority.grant === undefined && authority.revoke === undefined) {
185
+ fail('PUBLICATION_INVALID', 'Authority capability requirements cannot be empty.');
108
186
  }
109
- const grant = admitAuthorityOperations(admin.grant, 'grant');
110
- const revoke = admitAuthorityOperations(admin.revoke, 'revoke');
187
+ const grant = admitAuthorityOperations(authority.grant, 'grant');
188
+ const revoke = admitAuthorityOperations(authority.revoke, 'revoke');
111
189
  return Object.freeze({
112
190
  ...(grant === undefined ? {} : { grant }),
113
191
  ...(revoke === undefined ? {} : { revoke }),
@@ -116,22 +194,35 @@ function admitAdminRequirements(input) {
116
194
  function admitAuthorityOperations(input, kind) {
117
195
  if (input === undefined)
118
196
  return undefined;
119
- const values = nonEmpty(input, `Administrative ${kind} operations`).map((entry) => admitOperation(entry, AuthorityOperationOrder, `Administrative ${kind} operation`));
120
- unique(values, 'PUBLICATION_INVALID', `administrative ${kind} operation`);
121
- canonical(values, ordered(AuthorityOperationOrder), `Administrative ${kind} operations`);
197
+ const values = nonEmpty(input, `Authority ${kind} operations`).map((entry) => admitOperation(entry, AuthorityOperationOrder, `Authority ${kind} operation`));
198
+ unique(values, 'PUBLICATION_INVALID', `authority ${kind} operation`);
199
+ canonical(values, ordered(AuthorityOperationOrder), `Authority ${kind} operations`);
122
200
  return Object.freeze(values);
123
201
  }
124
202
  function admitClassRef(input) {
125
- const value = record(input, 'PUBLICATION_INVALID', 'Class capability reference is invalid.');
126
- exact(value, ['kind', 'name', 'origin'], 'PUBLICATION_INVALID');
127
- if (value.kind !== 'class' ||
128
- typeof value.origin !== 'string' ||
129
- !dslSchema.patterns.origin.test(value.origin) ||
130
- typeof value.name !== 'string' ||
131
- !dslSchema.patterns.memberName.test(value.name)) {
203
+ let value;
204
+ try {
205
+ value = acceptDefinitionRef(input);
206
+ }
207
+ catch {
132
208
  fail('PUBLICATION_INVALID', 'Class capability reference is invalid.');
133
209
  }
134
- return Object.freeze({ origin: value.origin, kind: 'class', name: value.name });
210
+ if (value.kind !== 'class')
211
+ fail('PUBLICATION_INVALID', 'Class capability reference is invalid.');
212
+ return value;
213
+ }
214
+ function admitCoreRef(input) {
215
+ let value;
216
+ try {
217
+ value = acceptDefinitionRef(input);
218
+ }
219
+ catch {
220
+ fail('PUBLICATION_INVALID', 'Capability profile subject is invalid.');
221
+ }
222
+ if (value.kind !== 'core') {
223
+ fail('PUBLICATION_INVALID', 'Capability profile subject must be one local Core reference.');
224
+ }
225
+ return value;
135
226
  }
136
227
  function nonEmpty(input, label) {
137
228
  const values = [...array(input, 'PUBLICATION_INVALID')];
@@ -157,24 +248,23 @@ function compare(left, right) {
157
248
  return left < right ? -1 : left > right ? 1 : 0;
158
249
  }
159
250
  function classKey(input) {
160
- return String(Key.fromSchema(input));
251
+ return String(Key.of(input));
161
252
  }
162
- function validateForeignTarget(root, dependencies, key, label) {
253
+ function capabilityOwner(root, dependencies, key, label) {
163
254
  const origin = Key.origin(key);
164
255
  if (origin === root.origin)
165
256
  fail('PUBLICATION_INVALID', `${label} capability target cannot be local.`);
166
- if (!dependencies.has(origin)) {
257
+ const dependency = dependencies.get(origin);
258
+ if (dependency === undefined) {
167
259
  fail('PUBLICATION_INVALID', `${label} capability target must belong to the exact dependency closure.`);
168
260
  }
261
+ return dependency;
169
262
  }
170
- function hasCallable(dependency, reference) {
171
- if (reference.startsWith('function.')) {
172
- return dependency.functions[Ref.member(reference)] !== undefined;
173
- }
174
- const ownerKind = Ref.namespace(reference);
175
- const owner = Ref.member(reference);
176
- const method = Ref.child(reference);
177
- const declaration = ownerKind === 'class' ? dependency.classes[owner] : dependency.interfaces[owner];
178
- return declaration?.family === 'node' && declaration.methods[method] !== undefined;
263
+ function hasCallable(dependency, callable) {
264
+ const coordinate = callableAddress(callable);
265
+ if (coordinate.kind === 'function')
266
+ return dependency.functions[coordinate.name] !== undefined;
267
+ const declaration = dependency.classes[coordinate.owner.name];
268
+ const method = declaration?.kind === 'node' ? declaration.methods[coordinate.name] : undefined;
269
+ return method !== undefined && method.inheritance !== 'abstract';
179
270
  }
180
- //# sourceMappingURL=requirements.js.map
@@ -1,4 +1,4 @@
1
- import { type Key } from '@astrale-os/kernel-dsl/v1';
1
+ import { type Key } from '@astrale-os/kernel-dsl/v1/addressing';
2
2
  export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | '*';
3
3
  export type SingleCredentialSource = {
4
4
  readonly in: 'header';
@@ -29,5 +29,9 @@ export interface HttpRoute {
29
29
  readonly body?: RouteBody;
30
30
  readonly credential?: CredentialSource;
31
31
  }
32
+ /** Provider-neutral build input; placement replaces path with the canonical absolute href. */
33
+ export interface HttpRouteDeclaration extends Omit<HttpRoute, 'href'> {
34
+ readonly path: string;
35
+ }
32
36
  export declare function admitRoute(input: unknown, origin: string): HttpRoute;
33
- //# sourceMappingURL=route.d.ts.map
37
+ export declare function admitRouteDeclaration(input: unknown, origin: string): HttpRouteDeclaration;
@@ -1,14 +1,39 @@
1
- import { schema as dslSchema } from '@astrale-os/kernel-dsl/v1';
1
+ import { patterns } from '@astrale-os/kernel-dsl/v1/addressing';
2
2
  import { admitCallableKey } from './bindings/callable.js';
3
3
  import { absoluteHttpUrl, deepFreeze, exact, record } from './content.js';
4
4
  import { fail } from './error.js';
5
5
  const ROUTE_NAME = /^[A-Za-z][A-Za-z0-9_-]{0,63}$/u;
6
6
  export function admitRoute(input, origin) {
7
7
  const value = record(input, 'PUBLICATION_ROUTE_INVALID', 'Published HTTP route is invalid.');
8
+ const common = admitRouteCommon(value, origin, 'href');
9
+ return deepFreeze({
10
+ ...common,
11
+ href: absoluteHttpUrl(value.href, false, 'PUBLICATION_ROUTE_INVALID', true),
12
+ });
13
+ }
14
+ export function admitRouteDeclaration(input, origin) {
15
+ const value = record(input, 'PUBLICATION_ROUTE_INVALID', 'HTTP route declaration is invalid.');
16
+ const common = admitRouteCommon(value, origin, 'path');
17
+ if (typeof value.path !== 'string' || !value.path.startsWith('/')) {
18
+ fail('PUBLICATION_ROUTE_INVALID', 'Route declaration path must be relative to one issuer.');
19
+ }
20
+ let parsed;
21
+ try {
22
+ parsed = new URL(value.path, 'https://placement.invalid');
23
+ }
24
+ catch (cause) {
25
+ return fail('PUBLICATION_ROUTE_INVALID', 'Route declaration path is invalid.', cause);
26
+ }
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.');
29
+ }
30
+ return deepFreeze({ ...common, path: value.path });
31
+ }
32
+ function admitRouteCommon(value, origin, location) {
8
33
  exact(value, [
9
34
  'name',
10
35
  'callable',
11
- 'href',
36
+ location,
12
37
  'method',
13
38
  'requestMethod',
14
39
  'default',
@@ -29,22 +54,20 @@ export function admitRoute(input, origin) {
29
54
  fail('PUBLICATION_ROUTE_INVALID', 'Route default may only be true.');
30
55
  }
31
56
  if (value.requestMethod !== undefined &&
32
- (typeof value.requestMethod !== 'string' ||
33
- !dslSchema.patterns.memberName.test(value.requestMethod))) {
57
+ (typeof value.requestMethod !== 'string' || !patterns.memberName.test(value.requestMethod))) {
34
58
  fail('PUBLICATION_ROUTE_INVALID', 'Route request-method mapping is invalid.');
35
59
  }
36
60
  if (value.receiver !== undefined &&
37
- (typeof value.receiver !== 'string' || !dslSchema.patterns.memberName.test(value.receiver))) {
61
+ (typeof value.receiver !== 'string' || !patterns.memberName.test(value.receiver))) {
38
62
  fail('PUBLICATION_ROUTE_INVALID', 'Route receiver is invalid.');
39
63
  }
40
64
  const query = stringRecord(value.query);
41
65
  const headers = headerRecord(value.headers);
42
66
  const body = admitBody(value.body);
43
67
  const credential = admitCredential(value.credential);
44
- return deepFreeze({
68
+ return {
45
69
  name: value.name,
46
70
  callable,
47
- href: absoluteHttpUrl(value.href, false, 'PUBLICATION_ROUTE_INVALID', true),
48
71
  method: value.method,
49
72
  ...(value.requestMethod === undefined ? {} : { requestMethod: value.requestMethod }),
50
73
  ...(value.default === true ? { default: true } : {}),
@@ -53,7 +76,7 @@ export function admitRoute(input, origin) {
53
76
  ...(headers === undefined ? {} : { headers }),
54
77
  ...(body === undefined ? {} : { body }),
55
78
  ...(credential === undefined ? {} : { credential }),
56
- });
79
+ };
57
80
  }
58
81
  function admitCredential(input) {
59
82
  if (input === undefined)
@@ -129,4 +152,3 @@ function stringRecord(input) {
129
152
  }
130
153
  return Object.freeze(output);
131
154
  }
132
- //# sourceMappingURL=route.js.map
@@ -1,8 +1,7 @@
1
- import { schema as dslSchema } from '@astrale-os/kernel-dsl/v1';
2
- import type { BundleDescriptor } from './bundle.js';
1
+ import type { Revision } from '@astrale-os/kernel-dsl/v1/addressing';
2
+ import type { BundleDescriptor } from './bundle-descriptor.js';
3
3
  export interface Schema {
4
- readonly revision: dslSchema.Revision;
4
+ readonly revision: Revision;
5
5
  readonly bundle: BundleDescriptor;
6
6
  }
7
7
  export declare function admitSchema(input: unknown): Schema;
8
- //# sourceMappingURL=schema.d.ts.map
@@ -1,11 +1,11 @@
1
- import { schema as dslSchema } from '@astrale-os/kernel-dsl/v1';
2
- import { admitBundleDescriptor } from './bundle.js';
1
+ import { patterns } from '@astrale-os/kernel-dsl/v1/addressing';
2
+ import { admitBundleDescriptor } from './bundle-descriptor.js';
3
3
  import { exact, record } from './content.js';
4
4
  import { fail } from './error.js';
5
5
  export function admitSchema(input) {
6
6
  const value = record(input, 'PUBLICATION_INVALID', 'Published schema is invalid.');
7
7
  exact(value, ['revision', 'bundle'], 'PUBLICATION_INVALID');
8
- if (typeof value.revision !== 'string' || !dslSchema.patterns.revision.test(value.revision)) {
8
+ if (typeof value.revision !== 'string' || !patterns.revision.test(value.revision)) {
9
9
  fail('PUBLICATION_INVALID', 'Published schema revision is invalid.');
10
10
  }
11
11
  return Object.freeze({
@@ -13,4 +13,3 @@ export function admitSchema(input) {
13
13
  bundle: admitBundleDescriptor(value.bundle),
14
14
  });
15
15
  }
16
- //# sourceMappingURL=schema.js.map
@@ -0,0 +1,3 @@
1
+ import type { Table } from './table.js';
2
+ /** Admit one emitted portable Table before Server composition. */
3
+ export declare function acceptTable(input: unknown): Table;
@@ -0,0 +1,89 @@
1
+ import { accept as acceptPortable } from '@astrale-os/kernel-dsl/value';
2
+ import { acceptReference } from '../publication/reference.js';
3
+ import { admitRoute } from '../publication/route.js';
4
+ import { fail } from './error.js';
5
+ const AUTH = new Set(['anonymous', 'authenticated', 'authorized']);
6
+ const OUTPUT = new Set(['value', 'stream', 'binary']);
7
+ /** Admit one emitted portable Table before Server composition. */
8
+ export function acceptTable(input) {
9
+ const value = object(acceptPortable(input), 'Route Table');
10
+ exact(value, ['publication', 'entries'], 'Route Table');
11
+ const reference = acceptReference(value.publication);
12
+ if (!Array.isArray(value.entries))
13
+ invalid('Route Table entries');
14
+ const entries = value.entries.map((entry) => acceptRoute(entry, reference.origin));
15
+ if (new Set(entries.map(({ name }) => name)).size !== entries.length) {
16
+ fail('NATIVE_ROUTE_BINDING_INVALID', 'Route Table names must be unique.');
17
+ }
18
+ return Object.freeze({ publication: reference, entries: Object.freeze(entries) });
19
+ }
20
+ function acceptRoute(input, origin) {
21
+ const value = object(input, 'Route Table entry');
22
+ exact(value, ['name', 'callable', 'target', 'auth', 'output', 'href', 'method', 'default'], 'Route Table entry', ['requestMethod', 'query', 'headers', 'body', 'credential']);
23
+ if (typeof value.default !== 'boolean')
24
+ invalid('Route Table default');
25
+ if (typeof value.auth !== 'string' || !AUTH.has(value.auth)) {
26
+ invalid('Route Table auth');
27
+ }
28
+ if (typeof value.output !== 'string' || !OUTPUT.has(value.output))
29
+ invalid('Route Table output');
30
+ const wire = admitRoute({
31
+ name: value.name,
32
+ callable: value.callable,
33
+ href: value.href,
34
+ method: value.method,
35
+ ...(value.default === true ? { default: true } : {}),
36
+ ...(value.requestMethod === undefined ? {} : { requestMethod: value.requestMethod }),
37
+ ...(value.query === undefined ? {} : { query: value.query }),
38
+ ...(value.headers === undefined ? {} : { headers: value.headers }),
39
+ ...(value.body === undefined ? {} : { body: value.body }),
40
+ ...(value.credential === undefined ? {} : { credential: value.credential }),
41
+ ...receiver(value.target),
42
+ }, origin);
43
+ const { default: _default, receiver: _receiver, ...common } = wire;
44
+ return Object.freeze({
45
+ ...common,
46
+ target: target(value.target),
47
+ auth: value.auth,
48
+ output: value.output,
49
+ default: value.default,
50
+ });
51
+ }
52
+ function target(input) {
53
+ const value = object(input, 'Route target');
54
+ if (value.kind === 'function') {
55
+ exact(value, ['kind'], 'Route Function target');
56
+ return Object.freeze({ kind: 'function' });
57
+ }
58
+ if (value.kind !== 'method' || (value.dispatch !== 'static' && value.dispatch !== 'instance')) {
59
+ invalid('Route Method target');
60
+ }
61
+ if (value.dispatch === 'static') {
62
+ exact(value, ['kind', 'dispatch'], 'Route static Method target');
63
+ return Object.freeze({ kind: 'method', dispatch: 'static' });
64
+ }
65
+ exact(value, ['kind', 'dispatch', 'receiver'], 'Route instance Method target');
66
+ if (typeof value.receiver !== 'string')
67
+ invalid('Route receiver');
68
+ return Object.freeze({ kind: 'method', dispatch: 'instance', receiver: value.receiver });
69
+ }
70
+ function receiver(input) {
71
+ const admitted = target(input);
72
+ return admitted.kind === 'method' && admitted.dispatch === 'instance'
73
+ ? { receiver: admitted.receiver }
74
+ : {};
75
+ }
76
+ function object(input, label) {
77
+ if (input === null || typeof input !== 'object' || Array.isArray(input))
78
+ invalid(label);
79
+ return input;
80
+ }
81
+ function exact(value, required, label, optional = []) {
82
+ const allowed = new Set([...required, ...optional]);
83
+ if (Object.keys(value).some((key) => !allowed.has(key)) ||
84
+ required.some((key) => !Object.hasOwn(value, key)))
85
+ invalid(label);
86
+ }
87
+ function invalid(label) {
88
+ return fail('NATIVE_ROUTE_BINDING_INVALID', `${label} is invalid.`);
89
+ }
@@ -0,0 +1,6 @@
1
+ import type { Domain } from '@astrale-os/kernel-dsl/v1';
2
+ import type { Publication } from '../publication/publication.js';
3
+ import type { Plan } from './plan.js';
4
+ import type { Table } from './table.js';
5
+ /** Bind one Plan to an exact placed Publication and matching resolved Domain. */
6
+ export declare function bind(plan: Plan, deployed: Publication, domain: Domain): Table;
@@ -0,0 +1,27 @@
1
+ import { json } from '@astrale-os/kernel-dsl/value';
2
+ import { reference } from '../publication/reference.js';
3
+ import { fail } from './error.js';
4
+ import { place } from './placement.js';
5
+ import { rejectReserved } from './reservation.js';
6
+ /** Bind one Plan to an exact placed Publication and matching resolved Domain. */
7
+ export function bind(plan, deployed, domain) {
8
+ if (plan.origin !== deployed.origin ||
9
+ plan.origin !== domain.origin ||
10
+ plan.revision !== deployed.schema.revision ||
11
+ plan.revision !== domain.revision) {
12
+ fail('NATIVE_ROUTE_BINDING_INVALID', 'Route Plan, Publication, and Domain identity differ.');
13
+ }
14
+ if (json.serialize(place(plan, deployed.identity.issuer)) !==
15
+ json.serialize(deployed.routes)) {
16
+ fail('NATIVE_ROUTE_BINDING_INVALID', 'Publication routes differ from the placed Route Plan.');
17
+ }
18
+ const entries = plan.entries.map((entry, index) => {
19
+ const { path: _path, ...portable } = entry;
20
+ return Object.freeze({ ...portable, href: deployed.routes[index].href });
21
+ });
22
+ rejectReserved(deployed, entries);
23
+ return Object.freeze({
24
+ publication: reference(deployed),
25
+ entries: Object.freeze(entries),
26
+ });
27
+ }
@@ -0,0 +1,2 @@
1
+ import type { Route } from './table.js';
2
+ export declare function rejectCollisions(entries: readonly Route[]): void;
@@ -0,0 +1,16 @@
1
+ import { fail } from './error.js';
2
+ import { templatesOverlap } from './template.js';
3
+ export function rejectCollisions(entries) {
4
+ const accepted = [];
5
+ for (const entry of entries) {
6
+ for (const previous of accepted) {
7
+ if (overlap(entry.method, previous.method) && templatesOverlap(entry.href, previous.href)) {
8
+ fail('NATIVE_ROUTE_COLLISION', `Route ${entry.name} collides with ${previous.name}.`);
9
+ }
10
+ }
11
+ accepted.push(entry);
12
+ }
13
+ }
14
+ function overlap(left, right) {
15
+ return left === '*' || right === '*' || left === right;
16
+ }
@@ -0,0 +1,8 @@
1
+ import type { Domain } from '@astrale-os/kernel-dsl/v1';
2
+ import type * as publication from '../publication/index.js';
3
+ import type { Plan } from './plan.js';
4
+ export interface CompileInput {
5
+ readonly routes: readonly publication.HttpRouteDeclaration[];
6
+ readonly domain: Domain;
7
+ }
8
+ export declare function compile(input: CompileInput): Plan;
@@ -0,0 +1,50 @@
1
+ import { admitRouteDeclaration } from '../publication/route.js';
2
+ import { rejectCollisions } from './collision.js';
3
+ import { fail } from './error.js';
4
+ import { validateCredentialMapping, validateMapping, validateWireMapping } from './mapping.js';
5
+ import { placePath } from './placement.js';
6
+ import { validateTemplate } from './template.js';
7
+ export function compile(input) {
8
+ if (input === null || typeof input !== 'object' || !Array.isArray(input.routes)) {
9
+ throw new TypeError('Route compilation input is invalid.');
10
+ }
11
+ const authored = input.routes.map((entry) => admitRouteDeclaration(entry, input.domain.origin));
12
+ const entries = authored.map((declaration) => {
13
+ const meaning = input.domain.callable(declaration.callable);
14
+ if (meaning === undefined) {
15
+ fail('NATIVE_ROUTE_BINDING_INVALID', `Unknown callable ${declaration.callable}.`);
16
+ }
17
+ const href = placePath(declaration.path, 'https://routes.invalid');
18
+ const route = { ...declaration, href };
19
+ validateTemplate(href);
20
+ validateMapping(route, meaning.inputFields, isMethod(meaning) && !meaning.static);
21
+ validateWireMapping(route);
22
+ validateCredentialMapping(route);
23
+ if (route.method === 'GET' && route.body !== undefined) {
24
+ fail('NATIVE_ROUTE_DECLARATION_INVALID', `GET route ${route.name} cannot declare a body.`);
25
+ }
26
+ const target = !isMethod(meaning)
27
+ ? { kind: 'function' }
28
+ : meaning.static
29
+ ? { kind: 'method', dispatch: 'static' }
30
+ : { kind: 'method', dispatch: 'instance', receiver: route.receiver };
31
+ const { href: _href, receiver: _receiver, ...portable } = route;
32
+ return Object.freeze({
33
+ ...portable,
34
+ target,
35
+ auth: meaning.auth,
36
+ output: meaning.output.mode,
37
+ path: declaration.path,
38
+ default: declaration.default === true,
39
+ });
40
+ });
41
+ rejectCollisions(entries.map((entry) => ({ ...entry, href: placePath(entry.path, 'https://routes.invalid') })));
42
+ return Object.freeze({
43
+ origin: input.domain.origin,
44
+ revision: input.domain.revision,
45
+ entries: Object.freeze(entries),
46
+ });
47
+ }
48
+ function isMethod(meaning) {
49
+ return 'owner' in meaning;
50
+ }
@@ -1,9 +1,8 @@
1
1
  import type { HttpRoute, SingleCredentialSource } from '../publication/index.js';
2
- import type { CompiledRoute } from './route.js';
3
- export declare function credentialSources(route: HttpRoute): readonly SingleCredentialSource[];
4
- export declare function firstCredentialIsAmbient(entry: CompiledRoute): boolean;
5
- export declare function specificHeaderWires(entry: CompiledRoute): ReadonlySet<string>;
6
- export declare function putCredential(entry: CompiledRoute, url: URL, headers: Record<string, string>, credential: string): void;
7
- export declare function withoutCredentialHeaders(entry: CompiledRoute, input: Readonly<Record<string, string>>): Record<string, string>;
8
- export declare function readCredential(entry: CompiledRoute, url: URL, headers: Record<string, string>): string | undefined;
9
- //# sourceMappingURL=credential.d.ts.map
2
+ import type { Route } from './table.js';
3
+ export declare function credentialSources(route: Pick<HttpRoute, 'credential'>): readonly SingleCredentialSource[];
4
+ export declare function firstCredentialIsAmbient(entry: Route): boolean;
5
+ export declare function specificHeaderWires(entry: Route): ReadonlySet<string>;
6
+ export declare function putCredential(entry: Route, url: URL, headers: Record<string, string>, credential: string): void;
7
+ export declare function withoutCredentialHeaders(entry: Route, input: Readonly<Record<string, string>>): Record<string, string>;
8
+ export declare function readCredential(entry: Route, url: URL, headers: Record<string, string>): string | undefined;