@astrale-os/kernel-protocol 0.5.0-beta.7 → 0.5.0-beta.70

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 (556) 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 +3 -3
  21. package/dist/errors/protocol-error.d.ts +0 -1
  22. package/dist/errors/protocol-error.js +4 -3
  23. package/dist/errors/reason.d.ts +0 -1
  24. package/dist/errors/reason.js +0 -1
  25. package/dist/errors/retry.d.ts +23 -0
  26. package/dist/errors/retry.js +44 -0
  27. package/dist/index.d.ts +3 -2
  28. package/dist/index.js +3 -2
  29. package/dist/invocation/admission.d.ts +2 -3
  30. package/dist/invocation/admission.js +7 -11
  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 +1 -2
  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 +1 -11
  40. package/dist/invocation/delegate.js +4 -19
  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 +9 -0
  48. package/dist/invocation/http/request.js +61 -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 +6 -4
  58. package/dist/invocation/index.js +5 -4
  59. package/dist/invocation/legacy/index.d.ts +29 -0
  60. package/dist/invocation/legacy/index.js +28 -0
  61. package/dist/invocation/legacy/route.d.ts +14 -0
  62. package/dist/invocation/legacy/route.js +25 -0
  63. package/dist/invocation/legacy/via.d.ts +30 -0
  64. package/dist/invocation/legacy/via.js +15 -0
  65. package/dist/invocation/miss.d.ts +0 -1
  66. package/dist/invocation/miss.js +0 -1
  67. package/dist/invocation/redirect.d.ts +15 -13
  68. package/dist/invocation/redirect.js +9 -22
  69. package/dist/invocation/request.d.ts +0 -1
  70. package/dist/invocation/request.js +2 -3
  71. package/dist/invocation/response.d.ts +0 -1
  72. package/dist/invocation/response.js +0 -1
  73. package/dist/invocation/routing.d.ts +19 -6
  74. package/dist/invocation/routing.js +50 -21
  75. package/dist/invocation/schema.d.ts +6 -5
  76. package/dist/invocation/schema.js +5 -12
  77. package/dist/invocation/service-reason.d.ts +21 -17
  78. package/dist/invocation/service-reason.js +27 -20
  79. package/dist/invocation/stale-route.d.ts +1 -2
  80. package/dist/invocation/stale-route.js +0 -1
  81. package/dist/invocation/stream.d.ts +0 -1
  82. package/dist/invocation/stream.js +0 -1
  83. package/dist/invocation/target.d.ts +5 -3
  84. package/dist/invocation/target.js +25 -4
  85. package/dist/invocation/trace.d.ts +0 -1
  86. package/dist/invocation/trace.js +0 -1
  87. package/dist/invocation/version.d.ts +0 -1
  88. package/dist/invocation/version.js +0 -1
  89. package/dist/invocation/websocket/binary.d.ts +0 -1
  90. package/dist/invocation/websocket/binary.js +1 -1
  91. package/dist/invocation/websocket/index.d.ts +1 -2
  92. package/dist/invocation/websocket/index.js +1 -2
  93. package/dist/invocation/websocket/subprotocol.d.ts +1 -3
  94. package/dist/invocation/websocket/subprotocol.js +3 -5
  95. package/dist/issuer/claims.d.ts +7 -0
  96. package/dist/issuer/claims.js +7 -0
  97. package/dist/issuer/configuration.d.ts +0 -1
  98. package/dist/issuer/configuration.js +0 -1
  99. package/dist/issuer/error.d.ts +0 -1
  100. package/dist/issuer/error.js +0 -1
  101. package/dist/issuer/exchange.d.ts +0 -1
  102. package/dist/issuer/exchange.js +0 -1
  103. package/dist/issuer/hosted.d.ts +0 -1
  104. package/dist/issuer/hosted.js +0 -1
  105. package/dist/issuer/index.d.ts +2 -1
  106. package/dist/issuer/index.js +2 -1
  107. package/dist/issuer/key-set.d.ts +0 -1
  108. package/dist/issuer/key-set.js +0 -1
  109. package/dist/issuer/paths.d.ts +2 -1
  110. package/dist/issuer/paths.js +1 -1
  111. package/dist/issuer/url.d.ts +0 -1
  112. package/dist/issuer/url.js +0 -1
  113. package/dist/issuer/workflow-engine.d.ts +18 -0
  114. package/dist/issuer/workflow-engine.js +59 -0
  115. package/dist/{publication → release}/bindings/callable.d.ts +0 -1
  116. package/dist/release/bindings/callable.js +34 -0
  117. package/dist/{publication → release}/bindings/index.d.ts +1 -2
  118. package/dist/{publication → release}/bindings/index.js +0 -1
  119. package/dist/{publication → release}/bindings/invocation.d.ts +0 -1
  120. package/dist/release/bindings/invocation.js +13 -0
  121. package/dist/release/bindings/view.d.ts +16 -0
  122. package/dist/release/bindings/view.js +148 -0
  123. package/dist/release/build.d.ts +6 -0
  124. package/dist/release/build.js +7 -0
  125. package/dist/release/bundle-admission.d.ts +21 -0
  126. package/dist/release/bundle-admission.js +66 -0
  127. package/dist/{publication → release}/bundle-descriptor.d.ts +0 -1
  128. package/dist/release/bundle-descriptor.js +19 -0
  129. package/dist/release/bundle-evidence.d.ts +3 -0
  130. package/dist/release/bundle-evidence.js +13 -0
  131. package/dist/release/bundle.d.ts +12 -0
  132. package/dist/{publication → release}/bundle.js +16 -11
  133. package/dist/{publication → release}/declaration.d.ts +0 -1
  134. package/dist/release/declaration.js +1 -0
  135. package/dist/{publication → release}/delivery/attestation.d.ts +1 -1
  136. package/dist/{publication → release}/delivery/attestation.js +0 -1
  137. package/dist/release/delivery/claims.d.ts +21 -0
  138. package/dist/release/delivery/claims.js +68 -0
  139. package/dist/release/delivery/delivery.d.ts +11 -0
  140. package/dist/release/delivery/delivery.js +24 -0
  141. package/dist/{publication → release}/delivery/error.d.ts +2 -1
  142. package/dist/{publication → release}/delivery/error.js +1 -1
  143. package/dist/{publication → release}/delivery/index.d.ts +6 -2
  144. package/dist/{publication → release}/delivery/index.js +5 -1
  145. package/dist/{publication → release}/delivery/limits.d.ts +2 -2
  146. package/dist/release/delivery/limits.js +5 -0
  147. package/dist/release/delivery/request.d.ts +21 -0
  148. package/dist/release/delivery/request.js +60 -0
  149. package/dist/{publication → release}/delivery-declaration.d.ts +0 -1
  150. package/dist/{publication → release}/delivery-declaration.js +4 -5
  151. package/dist/{publication → release}/delivery-endpoint.d.ts +0 -1
  152. package/dist/release/delivery-endpoint.js +22 -0
  153. package/dist/release/digest.d.ts +13 -0
  154. package/dist/{publication/etag.js → release/digest.js} +1 -7
  155. package/dist/release/error.d.ts +7 -0
  156. package/dist/release/error.js +11 -0
  157. package/dist/release/index.d.ts +21 -0
  158. package/dist/release/index.js +14 -0
  159. package/dist/release/issuer.d.ts +5 -0
  160. package/dist/release/issuer.js +34 -0
  161. package/dist/release/legacy/bindings.d.ts +14 -0
  162. package/dist/release/legacy/bindings.js +11 -0
  163. package/dist/release/legacy/bundle-admission.d.ts +6 -0
  164. package/dist/release/legacy/bundle-admission.js +10 -0
  165. package/dist/release/legacy/bundle-evidence.d.ts +8 -0
  166. package/dist/release/legacy/bundle-evidence.js +11 -0
  167. package/dist/release/legacy/bundle.d.ts +24 -0
  168. package/dist/release/legacy/bundle.js +31 -0
  169. package/dist/release/legacy/delivery/attestation.d.ts +6 -0
  170. package/dist/release/legacy/delivery/attestation.js +1 -0
  171. package/dist/{publication → release/legacy}/delivery/claims.d.ts +10 -2
  172. package/dist/{publication → release/legacy}/delivery/claims.js +7 -3
  173. package/dist/release/legacy/delivery/delivery.d.ts +18 -0
  174. package/dist/{publication → release/legacy}/delivery/delivery.js +6 -3
  175. package/dist/release/legacy/delivery/error.d.ts +16 -0
  176. package/dist/release/legacy/delivery/error.js +6 -0
  177. package/dist/release/legacy/delivery/index.d.ts +13 -0
  178. package/dist/release/legacy/delivery/index.js +13 -0
  179. package/dist/release/legacy/delivery/limits.d.ts +21 -0
  180. package/dist/release/legacy/delivery/limits.js +22 -0
  181. package/dist/release/legacy/delivery/request.d.ts +26 -0
  182. package/dist/{publication → release/legacy}/delivery/request.js +8 -4
  183. package/dist/release/legacy/delivery-declaration.d.ts +9 -0
  184. package/dist/release/legacy/delivery-declaration.js +11 -0
  185. package/dist/release/legacy/error.d.ts +26 -0
  186. package/dist/release/legacy/error.js +114 -0
  187. package/dist/release/legacy/etag.d.ts +12 -0
  188. package/dist/release/legacy/etag.js +14 -0
  189. package/dist/release/legacy/index.d.ts +75 -0
  190. package/dist/release/legacy/index.js +15 -0
  191. package/dist/release/legacy/profiles.d.ts +23 -0
  192. package/dist/release/legacy/profiles.js +36 -0
  193. package/dist/release/legacy/projection.d.ts +13 -0
  194. package/dist/release/legacy/projection.js +25 -0
  195. package/dist/release/legacy/publication.d.ts +90 -0
  196. package/dist/release/legacy/publication.js +124 -0
  197. package/dist/release/legacy/reference.d.ts +47 -0
  198. package/dist/{publication → release/legacy}/reference.js +27 -4
  199. package/dist/release/legacy/requirements.d.ts +30 -0
  200. package/dist/release/legacy/requirements.js +20 -0
  201. package/dist/{publication → release}/manifest.d.ts +2 -3
  202. package/dist/release/manifest.js +30 -0
  203. package/dist/release/reference.d.ts +26 -0
  204. package/dist/release/reference.js +70 -0
  205. package/dist/release/release.d.ts +60 -0
  206. package/dist/release/release.js +123 -0
  207. package/dist/release/requirements.d.ts +41 -0
  208. package/dist/release/requirements.js +306 -0
  209. package/dist/{publication → release}/route.d.ts +0 -1
  210. package/dist/{publication → release}/route.js +24 -25
  211. package/dist/{publication → release}/schema.d.ts +1 -2
  212. package/dist/{publication → release}/schema.js +4 -5
  213. package/dist/release/served.d.ts +26 -0
  214. package/dist/release/served.js +65 -0
  215. package/dist/release/shape.d.ts +8 -0
  216. package/dist/{publication/content.js → release/shape.js} +0 -1
  217. package/dist/routes/admission.d.ts +1 -2
  218. package/dist/routes/admission.js +7 -86
  219. package/dist/routes/binding.d.ts +4 -5
  220. package/dist/routes/binding.js +11 -22
  221. package/dist/routes/collision.d.ts +0 -1
  222. package/dist/routes/collision.js +0 -1
  223. package/dist/routes/compiler.d.ts +4 -5
  224. package/dist/routes/compiler.js +20 -13
  225. package/dist/routes/credential.d.ts +12 -2
  226. package/dist/routes/credential.js +11 -4
  227. package/dist/routes/decode.d.ts +6 -4
  228. package/dist/routes/decode.js +32 -30
  229. package/dist/routes/deployment-retired.d.ts +30 -0
  230. package/dist/routes/deployment-retired.js +96 -0
  231. package/dist/routes/encode.d.ts +2 -3
  232. package/dist/routes/encode.js +22 -20
  233. package/dist/routes/entries.d.ts +23 -0
  234. package/dist/routes/entries.js +150 -0
  235. package/dist/routes/error-response.d.ts +0 -1
  236. package/dist/routes/error-response.js +0 -1
  237. package/dist/routes/error.d.ts +0 -1
  238. package/dist/routes/error.js +0 -1
  239. package/dist/routes/evidence.d.ts +4 -5
  240. package/dist/routes/evidence.js +8 -34
  241. package/dist/routes/header.d.ts +9 -0
  242. package/dist/routes/header.js +34 -0
  243. package/dist/routes/index.d.ts +5 -3
  244. package/dist/routes/index.js +5 -3
  245. package/dist/routes/legacy/index.d.ts +29 -0
  246. package/dist/routes/legacy/index.js +29 -0
  247. package/dist/routes/legacy/routing.d.ts +24 -0
  248. package/dist/routes/legacy/routing.js +45 -0
  249. package/dist/routes/legacy/table.d.ts +34 -0
  250. package/dist/routes/legacy/table.js +50 -0
  251. package/dist/routes/mapping.d.ts +1 -2
  252. package/dist/routes/mapping.js +4 -5
  253. package/dist/routes/match.d.ts +1 -2
  254. package/dist/routes/match.js +0 -1
  255. package/dist/routes/placement.d.ts +2 -3
  256. package/dist/routes/placement.js +1 -2
  257. package/dist/routes/plan.d.ts +6 -6
  258. package/dist/routes/plan.js +0 -1
  259. package/dist/routes/request.d.ts +5 -4
  260. package/dist/routes/request.js +0 -1
  261. package/dist/routes/reservation.d.ts +4 -3
  262. package/dist/routes/reservation.js +10 -4
  263. package/dist/routes/routing.d.ts +30 -7
  264. package/dist/routes/routing.js +34 -50
  265. package/dist/routes/scalar.d.ts +3 -4
  266. package/dist/routes/scalar.js +5 -6
  267. package/dist/routes/select.d.ts +1 -2
  268. package/dist/routes/select.js +0 -1
  269. package/dist/routes/stream.d.ts +0 -1
  270. package/dist/routes/stream.js +0 -1
  271. package/dist/routes/table.d.ts +3 -3
  272. package/dist/routes/table.js +0 -1
  273. package/dist/routes/target.d.ts +5 -1
  274. package/dist/routes/target.js +16 -1
  275. package/dist/routes/template.d.ts +0 -1
  276. package/dist/routes/template.js +0 -1
  277. package/dist/runtime/artifact.d.ts +8 -7
  278. package/dist/runtime/artifact.js +23 -11
  279. package/dist/runtime/index.d.ts +1 -2
  280. package/dist/runtime/index.js +1 -2
  281. package/dist/schema/index.d.ts +0 -1
  282. package/dist/schema/index.js +0 -1
  283. package/dist/schema/installation/codec.d.ts +9 -0
  284. package/dist/schema/installation/codec.js +74 -0
  285. package/dist/schema/installation/index.d.ts +2 -1
  286. package/dist/schema/installation/index.js +1 -1
  287. package/dist/schema/installation/introspection/codec.d.ts +14 -3
  288. package/dist/schema/installation/introspection/codec.js +323 -194
  289. package/dist/schema/installation/introspection/index.d.ts +2 -3
  290. package/dist/schema/installation/introspection/index.js +1 -2
  291. package/dist/schema/installation/introspection/result.d.ts +96 -23
  292. package/dist/schema/installation/introspection/result.js +0 -1
  293. package/dist/schema/installation/legacy/index.d.ts +39 -0
  294. package/dist/schema/installation/legacy/index.js +39 -0
  295. package/dist/schema/installation/legacy/installation.d.ts +9 -0
  296. package/dist/schema/installation/legacy/installation.js +28 -0
  297. package/dist/schema/installation/legacy/introspection.d.ts +10 -0
  298. package/dist/schema/installation/legacy/introspection.js +70 -0
  299. package/dist/schema/installation/legacy/msgpack.d.ts +1 -0
  300. package/dist/schema/installation/legacy/msgpack.js +143 -0
  301. package/dist/schema/installation/result.d.ts +9 -0
  302. package/dist/schema/installation/result.js +1 -0
  303. package/package.json +78 -37
  304. package/dist/artifact/index.d.ts.map +0 -1
  305. package/dist/artifact/index.js.map +0 -1
  306. package/dist/artifact/ref.d.ts.map +0 -1
  307. package/dist/artifact/ref.js.map +0 -1
  308. package/dist/codecs/codec.d.ts.map +0 -1
  309. package/dist/codecs/codec.js.map +0 -1
  310. package/dist/codecs/index.d.ts.map +0 -1
  311. package/dist/codecs/index.js.map +0 -1
  312. package/dist/codecs/json.d.ts.map +0 -1
  313. package/dist/codecs/json.js.map +0 -1
  314. package/dist/codecs/media-types.d.ts.map +0 -1
  315. package/dist/codecs/media-types.js.map +0 -1
  316. package/dist/codecs/msgpack.d.ts +0 -5
  317. package/dist/codecs/msgpack.d.ts.map +0 -1
  318. package/dist/codecs/msgpack.js +0 -51
  319. package/dist/codecs/msgpack.js.map +0 -1
  320. package/dist/errors/codes.d.ts.map +0 -1
  321. package/dist/errors/codes.js.map +0 -1
  322. package/dist/errors/http-status.d.ts.map +0 -1
  323. package/dist/errors/http-status.js.map +0 -1
  324. package/dist/errors/index.d.ts.map +0 -1
  325. package/dist/errors/index.js.map +0 -1
  326. package/dist/errors/payload.d.ts.map +0 -1
  327. package/dist/errors/payload.js.map +0 -1
  328. package/dist/errors/protocol-error.d.ts.map +0 -1
  329. package/dist/errors/protocol-error.js.map +0 -1
  330. package/dist/errors/reason.d.ts.map +0 -1
  331. package/dist/errors/reason.js.map +0 -1
  332. package/dist/index.d.ts.map +0 -1
  333. package/dist/index.js.map +0 -1
  334. package/dist/invocation/admission.d.ts.map +0 -1
  335. package/dist/invocation/admission.js.map +0 -1
  336. package/dist/invocation/binary.d.ts.map +0 -1
  337. package/dist/invocation/binary.js.map +0 -1
  338. package/dist/invocation/binding-codecs.d.ts.map +0 -1
  339. package/dist/invocation/binding-codecs.js.map +0 -1
  340. package/dist/invocation/cancellation.d.ts.map +0 -1
  341. package/dist/invocation/cancellation.js.map +0 -1
  342. package/dist/invocation/correlation.d.ts.map +0 -1
  343. package/dist/invocation/correlation.js.map +0 -1
  344. package/dist/invocation/delegate.d.ts.map +0 -1
  345. package/dist/invocation/delegate.js.map +0 -1
  346. package/dist/invocation/http/binary.d.ts.map +0 -1
  347. package/dist/invocation/http/binary.js.map +0 -1
  348. package/dist/invocation/http/index.d.ts.map +0 -1
  349. package/dist/invocation/http/index.js.map +0 -1
  350. package/dist/invocation/http/negotiation.d.ts.map +0 -1
  351. package/dist/invocation/http/negotiation.js.map +0 -1
  352. package/dist/invocation/http/stream.d.ts.map +0 -1
  353. package/dist/invocation/http/stream.js.map +0 -1
  354. package/dist/invocation/http/trace.d.ts.map +0 -1
  355. package/dist/invocation/http/trace.js.map +0 -1
  356. package/dist/invocation/idempotency.d.ts.map +0 -1
  357. package/dist/invocation/idempotency.js.map +0 -1
  358. package/dist/invocation/identity.d.ts.map +0 -1
  359. package/dist/invocation/identity.js.map +0 -1
  360. package/dist/invocation/index.d.ts.map +0 -1
  361. package/dist/invocation/index.js.map +0 -1
  362. package/dist/invocation/miss.d.ts.map +0 -1
  363. package/dist/invocation/miss.js.map +0 -1
  364. package/dist/invocation/redirect.d.ts.map +0 -1
  365. package/dist/invocation/redirect.js.map +0 -1
  366. package/dist/invocation/request.d.ts.map +0 -1
  367. package/dist/invocation/request.js.map +0 -1
  368. package/dist/invocation/response.d.ts.map +0 -1
  369. package/dist/invocation/response.js.map +0 -1
  370. package/dist/invocation/routing.d.ts.map +0 -1
  371. package/dist/invocation/routing.js.map +0 -1
  372. package/dist/invocation/schema.d.ts.map +0 -1
  373. package/dist/invocation/schema.js.map +0 -1
  374. package/dist/invocation/service-reason.d.ts.map +0 -1
  375. package/dist/invocation/service-reason.js.map +0 -1
  376. package/dist/invocation/stale-route.d.ts.map +0 -1
  377. package/dist/invocation/stale-route.js.map +0 -1
  378. package/dist/invocation/stream.d.ts.map +0 -1
  379. package/dist/invocation/stream.js.map +0 -1
  380. package/dist/invocation/target.d.ts.map +0 -1
  381. package/dist/invocation/target.js.map +0 -1
  382. package/dist/invocation/trace.d.ts.map +0 -1
  383. package/dist/invocation/trace.js.map +0 -1
  384. package/dist/invocation/version.d.ts.map +0 -1
  385. package/dist/invocation/version.js.map +0 -1
  386. package/dist/invocation/websocket/binary.d.ts.map +0 -1
  387. package/dist/invocation/websocket/binary.js.map +0 -1
  388. package/dist/invocation/websocket/index.d.ts.map +0 -1
  389. package/dist/invocation/websocket/index.js.map +0 -1
  390. package/dist/invocation/websocket/subprotocol.d.ts.map +0 -1
  391. package/dist/invocation/websocket/subprotocol.js.map +0 -1
  392. package/dist/issuer/configuration.d.ts.map +0 -1
  393. package/dist/issuer/configuration.js.map +0 -1
  394. package/dist/issuer/error.d.ts.map +0 -1
  395. package/dist/issuer/error.js.map +0 -1
  396. package/dist/issuer/exchange.d.ts.map +0 -1
  397. package/dist/issuer/exchange.js.map +0 -1
  398. package/dist/issuer/hosted.d.ts.map +0 -1
  399. package/dist/issuer/hosted.js.map +0 -1
  400. package/dist/issuer/index.d.ts.map +0 -1
  401. package/dist/issuer/index.js.map +0 -1
  402. package/dist/issuer/key-set.d.ts.map +0 -1
  403. package/dist/issuer/key-set.js.map +0 -1
  404. package/dist/issuer/paths.d.ts.map +0 -1
  405. package/dist/issuer/paths.js.map +0 -1
  406. package/dist/issuer/url.d.ts.map +0 -1
  407. package/dist/issuer/url.js.map +0 -1
  408. package/dist/publication/bindings/callable.d.ts.map +0 -1
  409. package/dist/publication/bindings/callable.js +0 -32
  410. package/dist/publication/bindings/callable.js.map +0 -1
  411. package/dist/publication/bindings/index.d.ts.map +0 -1
  412. package/dist/publication/bindings/index.js.map +0 -1
  413. package/dist/publication/bindings/invocation.d.ts.map +0 -1
  414. package/dist/publication/bindings/invocation.js +0 -14
  415. package/dist/publication/bindings/invocation.js.map +0 -1
  416. package/dist/publication/bindings/view.d.ts +0 -8
  417. package/dist/publication/bindings/view.d.ts.map +0 -1
  418. package/dist/publication/bindings/view.js +0 -29
  419. package/dist/publication/bindings/view.js.map +0 -1
  420. package/dist/publication/bundle-admission.d.ts +0 -5
  421. package/dist/publication/bundle-admission.d.ts.map +0 -1
  422. package/dist/publication/bundle-admission.js +0 -66
  423. package/dist/publication/bundle-admission.js.map +0 -1
  424. package/dist/publication/bundle-descriptor.d.ts.map +0 -1
  425. package/dist/publication/bundle-descriptor.js +0 -20
  426. package/dist/publication/bundle-descriptor.js.map +0 -1
  427. package/dist/publication/bundle-evidence.d.ts +0 -4
  428. package/dist/publication/bundle-evidence.d.ts.map +0 -1
  429. package/dist/publication/bundle-evidence.js +0 -14
  430. package/dist/publication/bundle-evidence.js.map +0 -1
  431. package/dist/publication/bundle.d.ts +0 -10
  432. package/dist/publication/bundle.d.ts.map +0 -1
  433. package/dist/publication/bundle.js.map +0 -1
  434. package/dist/publication/content.d.ts +0 -11
  435. package/dist/publication/content.d.ts.map +0 -1
  436. package/dist/publication/content.js.map +0 -1
  437. package/dist/publication/declaration.d.ts.map +0 -1
  438. package/dist/publication/declaration.js +0 -2
  439. package/dist/publication/declaration.js.map +0 -1
  440. package/dist/publication/delivery/attestation.d.ts.map +0 -1
  441. package/dist/publication/delivery/attestation.js.map +0 -1
  442. package/dist/publication/delivery/claims.d.ts.map +0 -1
  443. package/dist/publication/delivery/claims.js.map +0 -1
  444. package/dist/publication/delivery/delivery.d.ts +0 -10
  445. package/dist/publication/delivery/delivery.d.ts.map +0 -1
  446. package/dist/publication/delivery/delivery.js.map +0 -1
  447. package/dist/publication/delivery/error.d.ts.map +0 -1
  448. package/dist/publication/delivery/error.js.map +0 -1
  449. package/dist/publication/delivery/index.d.ts.map +0 -1
  450. package/dist/publication/delivery/index.js.map +0 -1
  451. package/dist/publication/delivery/limits.d.ts.map +0 -1
  452. package/dist/publication/delivery/limits.js +0 -5
  453. package/dist/publication/delivery/limits.js.map +0 -1
  454. package/dist/publication/delivery/request.d.ts +0 -16
  455. package/dist/publication/delivery/request.d.ts.map +0 -1
  456. package/dist/publication/delivery/request.js.map +0 -1
  457. package/dist/publication/delivery-declaration.d.ts.map +0 -1
  458. package/dist/publication/delivery-declaration.js.map +0 -1
  459. package/dist/publication/delivery-endpoint.d.ts.map +0 -1
  460. package/dist/publication/delivery-endpoint.js +0 -23
  461. package/dist/publication/delivery-endpoint.js.map +0 -1
  462. package/dist/publication/error.d.ts +0 -8
  463. package/dist/publication/error.d.ts.map +0 -1
  464. package/dist/publication/error.js +0 -12
  465. package/dist/publication/error.js.map +0 -1
  466. package/dist/publication/etag.d.ts +0 -7
  467. package/dist/publication/etag.d.ts.map +0 -1
  468. package/dist/publication/etag.js.map +0 -1
  469. package/dist/publication/index.d.ts +0 -18
  470. package/dist/publication/index.d.ts.map +0 -1
  471. package/dist/publication/index.js +0 -11
  472. package/dist/publication/index.js.map +0 -1
  473. package/dist/publication/manifest.d.ts.map +0 -1
  474. package/dist/publication/manifest.js +0 -26
  475. package/dist/publication/manifest.js.map +0 -1
  476. package/dist/publication/publication.d.ts +0 -37
  477. package/dist/publication/publication.d.ts.map +0 -1
  478. package/dist/publication/publication.js +0 -131
  479. package/dist/publication/publication.js.map +0 -1
  480. package/dist/publication/reference.d.ts +0 -18
  481. package/dist/publication/reference.d.ts.map +0 -1
  482. package/dist/publication/reference.js.map +0 -1
  483. package/dist/publication/requirements.d.ts +0 -27
  484. package/dist/publication/requirements.d.ts.map +0 -1
  485. package/dist/publication/requirements.js +0 -185
  486. package/dist/publication/requirements.js.map +0 -1
  487. package/dist/publication/route.d.ts.map +0 -1
  488. package/dist/publication/route.js.map +0 -1
  489. package/dist/publication/schema.d.ts.map +0 -1
  490. package/dist/publication/schema.js.map +0 -1
  491. package/dist/routes/admission.d.ts.map +0 -1
  492. package/dist/routes/admission.js.map +0 -1
  493. package/dist/routes/binding.d.ts.map +0 -1
  494. package/dist/routes/binding.js.map +0 -1
  495. package/dist/routes/collision.d.ts.map +0 -1
  496. package/dist/routes/collision.js.map +0 -1
  497. package/dist/routes/compiler.d.ts.map +0 -1
  498. package/dist/routes/compiler.js.map +0 -1
  499. package/dist/routes/credential.d.ts.map +0 -1
  500. package/dist/routes/credential.js.map +0 -1
  501. package/dist/routes/decode.d.ts.map +0 -1
  502. package/dist/routes/decode.js.map +0 -1
  503. package/dist/routes/encode.d.ts.map +0 -1
  504. package/dist/routes/encode.js.map +0 -1
  505. package/dist/routes/error-response.d.ts.map +0 -1
  506. package/dist/routes/error-response.js.map +0 -1
  507. package/dist/routes/error.d.ts.map +0 -1
  508. package/dist/routes/error.js.map +0 -1
  509. package/dist/routes/evidence.d.ts.map +0 -1
  510. package/dist/routes/evidence.js.map +0 -1
  511. package/dist/routes/index.d.ts.map +0 -1
  512. package/dist/routes/index.js.map +0 -1
  513. package/dist/routes/mapping.d.ts.map +0 -1
  514. package/dist/routes/mapping.js.map +0 -1
  515. package/dist/routes/match.d.ts.map +0 -1
  516. package/dist/routes/match.js.map +0 -1
  517. package/dist/routes/placement.d.ts.map +0 -1
  518. package/dist/routes/placement.js.map +0 -1
  519. package/dist/routes/plan.d.ts.map +0 -1
  520. package/dist/routes/plan.js.map +0 -1
  521. package/dist/routes/release-unavailable.d.ts +0 -9
  522. package/dist/routes/release-unavailable.d.ts.map +0 -1
  523. package/dist/routes/release-unavailable.js +0 -33
  524. package/dist/routes/release-unavailable.js.map +0 -1
  525. package/dist/routes/request.d.ts.map +0 -1
  526. package/dist/routes/request.js.map +0 -1
  527. package/dist/routes/reservation.d.ts.map +0 -1
  528. package/dist/routes/reservation.js.map +0 -1
  529. package/dist/routes/routing.d.ts.map +0 -1
  530. package/dist/routes/routing.js.map +0 -1
  531. package/dist/routes/scalar.d.ts.map +0 -1
  532. package/dist/routes/scalar.js.map +0 -1
  533. package/dist/routes/select.d.ts.map +0 -1
  534. package/dist/routes/select.js.map +0 -1
  535. package/dist/routes/stream.d.ts.map +0 -1
  536. package/dist/routes/stream.js.map +0 -1
  537. package/dist/routes/table.d.ts.map +0 -1
  538. package/dist/routes/table.js.map +0 -1
  539. package/dist/routes/target.d.ts.map +0 -1
  540. package/dist/routes/target.js.map +0 -1
  541. package/dist/routes/template.d.ts.map +0 -1
  542. package/dist/routes/template.js.map +0 -1
  543. package/dist/runtime/artifact.d.ts.map +0 -1
  544. package/dist/runtime/artifact.js.map +0 -1
  545. package/dist/runtime/index.d.ts.map +0 -1
  546. package/dist/runtime/index.js.map +0 -1
  547. package/dist/schema/index.d.ts.map +0 -1
  548. package/dist/schema/index.js.map +0 -1
  549. package/dist/schema/installation/index.d.ts.map +0 -1
  550. package/dist/schema/installation/index.js.map +0 -1
  551. package/dist/schema/installation/introspection/codec.d.ts.map +0 -1
  552. package/dist/schema/installation/introspection/codec.js.map +0 -1
  553. package/dist/schema/installation/introspection/index.d.ts.map +0 -1
  554. package/dist/schema/installation/introspection/index.js.map +0 -1
  555. package/dist/schema/installation/introspection/result.d.ts.map +0 -1
  556. package/dist/schema/installation/introspection/result.js.map +0 -1
@@ -1,90 +1,11 @@
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 AUTHENTICATION = new Set(['anonymous', 'authenticated', 'authorized']);
6
- const OUTPUT = new Set(['value', 'stream', 'binary']);
7
- /** Admit one emitted portable Table before Server composition. */
1
+ import { acceptReference } from '../release/reference.js';
2
+ import { acceptEntries, tableObject } from './entries.js';
3
+ /** Admit one emitted portable release Table before Server composition. */
8
4
  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', 'authentication', '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.authentication !== 'string' || !AUTHENTICATION.has(value.authentication)) {
26
- invalid('Route Table authentication');
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;
5
+ const value = tableObject(input, ['release', 'entries']);
6
+ const reference = acceptReference(value.release);
44
7
  return Object.freeze({
45
- ...common,
46
- target: target(value.target),
47
- authentication: value.authentication,
48
- output: value.output,
49
- default: value.default,
8
+ release: reference,
9
+ entries: acceptEntries(value.entries, reference.origin),
50
10
  });
51
11
  }
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
- }
90
- //# sourceMappingURL=admission.js.map
@@ -1,7 +1,6 @@
1
- import type { schema } from '@astrale-os/kernel-dsl/v1';
2
- import type { Publication } from '../publication/publication.js';
1
+ import type { Domain } from '@astrale-os/kernel-dsl/v1';
2
+ import type { DomainRelease } from '../release/release.js';
3
3
  import type { Plan } from './plan.js';
4
4
  import type { Table } from './table.js';
5
- /** Bind one Plan to an exact placed Publication and matching Validator. */
6
- export declare function bind(plan: Plan, deployed: Publication, validator: schema.Validator): Table;
7
- //# sourceMappingURL=binding.d.ts.map
5
+ /** Bind one Plan to an exact placed release and matching resolved Domain. */
6
+ export declare function bind(plan: Plan, deployed: DomainRelease, domain: Domain, publicUrl?: string): Table;
@@ -1,28 +1,17 @@
1
- import { json } from '@astrale-os/kernel-dsl/value';
2
- import { reference } from '../publication/reference.js';
1
+ import { reference } from '../release/reference.js';
2
+ import { placedEntries, placementMismatch } from './entries.js';
3
3
  import { fail } from './error.js';
4
- import { place } from './placement.js';
5
4
  import { rejectReserved } from './reservation.js';
6
- /** Bind one Plan to an exact placed Publication and matching Validator. */
7
- export function bind(plan, deployed, validator) {
8
- if (plan.origin !== deployed.origin ||
9
- plan.origin !== validator.origin ||
10
- plan.revision !== deployed.schema.revision ||
11
- plan.revision !== validator.revision) {
12
- fail('NATIVE_ROUTE_BINDING_INVALID', 'Route Plan, Publication, and Validator identity differ.');
5
+ /** Bind one Plan to an exact placed release and matching resolved Domain. */
6
+ export function bind(plan, deployed, domain, publicUrl = deployed.identity.issuer) {
7
+ const mismatch = placementMismatch(plan, deployed, domain, publicUrl);
8
+ if (mismatch === 'identity') {
9
+ fail('NATIVE_ROUTE_BINDING_INVALID', 'Route Plan, Release, and Domain identity differ.');
13
10
  }
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.');
11
+ if (mismatch === 'routes') {
12
+ fail('NATIVE_ROUTE_BINDING_INVALID', 'Release routes differ from the placed Route Plan.');
17
13
  }
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
- });
14
+ const entries = placedEntries(plan, deployed);
22
15
  rejectReserved(deployed, entries);
23
- return Object.freeze({
24
- publication: reference(deployed),
25
- entries: Object.freeze(entries),
26
- });
16
+ return Object.freeze({ release: reference(deployed), entries });
27
17
  }
28
- //# sourceMappingURL=binding.js.map
@@ -1,3 +1,2 @@
1
1
  import type { Route } from './table.js';
2
2
  export declare function rejectCollisions(entries: readonly Route[]): void;
3
- //# sourceMappingURL=collision.d.ts.map
@@ -14,4 +14,3 @@ export function rejectCollisions(entries) {
14
14
  function overlap(left, right) {
15
15
  return left === '*' || right === '*' || left === right;
16
16
  }
17
- //# sourceMappingURL=collision.js.map
@@ -1,9 +1,8 @@
1
- import type { schema } from '@astrale-os/kernel-dsl/v1';
2
- import type * as publication from '../publication/index.js';
1
+ import type { Domain } from '@astrale-os/kernel-dsl/v1';
2
+ import type { HttpRouteDeclaration } from '../release/route.js';
3
3
  import type { Plan } from './plan.js';
4
4
  export interface CompileInput {
5
- readonly routes: readonly publication.HttpRouteDeclaration[];
6
- readonly validator: schema.Validator;
5
+ readonly routes: readonly HttpRouteDeclaration[];
6
+ readonly domain: Domain;
7
7
  }
8
8
  export declare function compile(input: CompileInput): Plan;
9
- //# sourceMappingURL=compiler.d.ts.map
@@ -1,4 +1,6 @@
1
- import { admitRouteDeclaration } from '../publication/route.js';
1
+ import { isBinaryInput } from '@astrale-os/kernel-dsl/v1/language';
2
+ import { withPublicationError } from '../release/legacy/error.js';
3
+ import { admitRouteDeclaration } from '../release/route.js';
2
4
  import { rejectCollisions } from './collision.js';
3
5
  import { fail } from './error.js';
4
6
  import { validateCredentialMapping, validateMapping, validateWireMapping } from './mapping.js';
@@ -8,41 +10,46 @@ export function compile(input) {
8
10
  if (input === null || typeof input !== 'object' || !Array.isArray(input.routes)) {
9
11
  throw new TypeError('Route compilation input is invalid.');
10
12
  }
11
- const authored = input.routes.map((entry) => admitRouteDeclaration(entry, input.validator.origin));
13
+ const authored = input.routes.map((entry) => withPublicationError(() => admitRouteDeclaration(entry, input.domain.origin)));
12
14
  const entries = authored.map((declaration) => {
13
- const meaning = input.validator.callable(declaration.callable);
14
- if (meaning === undefined) {
15
- fail('NATIVE_ROUTE_BINDING_INVALID', `Unknown callable ${declaration.callable}.`);
15
+ const meaning = input.domain.callable(declaration.callable);
16
+ if (meaning === undefined || (isMethod(meaning) && !meaning.executable)) {
17
+ fail('NATIVE_ROUTE_BINDING_INVALID', `Unavailable callable ${declaration.callable}.`);
18
+ }
19
+ if (isBinaryInput(meaning.definition.input)) {
20
+ fail('NATIVE_ROUTE_BINDING_INVALID', `Native route ${declaration.name} cannot bind a binary-input Function.`);
16
21
  }
17
22
  const href = placePath(declaration.path, 'https://routes.invalid');
18
23
  const route = { ...declaration, href };
19
24
  validateTemplate(href);
20
- validateMapping(route, meaning.fields, meaning.target.kind === 'method' && meaning.target.dispatch === 'instance');
25
+ validateMapping(route, meaning.inputFields, isMethod(meaning) && !meaning.static);
21
26
  validateWireMapping(route);
22
27
  validateCredentialMapping(route);
23
28
  if (route.method === 'GET' && route.body !== undefined) {
24
29
  fail('NATIVE_ROUTE_DECLARATION_INVALID', `GET route ${route.name} cannot declare a body.`);
25
30
  }
26
- const target = meaning.target.kind === 'function'
31
+ const target = !isMethod(meaning)
27
32
  ? { kind: 'function' }
28
- : meaning.target.dispatch === 'static'
33
+ : meaning.static
29
34
  ? { kind: 'method', dispatch: 'static' }
30
35
  : { kind: 'method', dispatch: 'instance', receiver: route.receiver };
31
36
  const { href: _href, receiver: _receiver, ...portable } = route;
32
37
  return Object.freeze({
33
38
  ...portable,
34
39
  target,
35
- authentication: meaning.authentication,
36
- output: meaning.output,
40
+ auth: meaning.auth,
41
+ output: meaning.output.mode,
37
42
  path: declaration.path,
38
43
  default: declaration.default === true,
39
44
  });
40
45
  });
41
46
  rejectCollisions(entries.map((entry) => ({ ...entry, href: placePath(entry.path, 'https://routes.invalid') })));
42
47
  return Object.freeze({
43
- origin: input.validator.origin,
44
- revision: input.validator.revision,
48
+ origin: input.domain.origin,
49
+ revision: input.domain.revision,
45
50
  entries: Object.freeze(entries),
46
51
  });
47
52
  }
48
- //# sourceMappingURL=compiler.js.map
53
+ function isMethod(meaning) {
54
+ return 'owner' in meaning;
55
+ }
@@ -1,9 +1,19 @@
1
- import type { HttpRoute, SingleCredentialSource } from '../publication/index.js';
1
+ import type { HttpRoute, SingleCredentialSource } from '../release/route.js';
2
2
  import type { Route } from './table.js';
3
3
  export declare function credentialSources(route: Pick<HttpRoute, 'credential'>): readonly SingleCredentialSource[];
4
4
  export declare function firstCredentialIsAmbient(entry: Route): boolean;
5
5
  export declare function specificHeaderWires(entry: Route): ReadonlySet<string>;
6
6
  export declare function putCredential(entry: Route, url: URL, headers: Record<string, string>, credential: string): void;
7
7
  export declare function withoutCredentialHeaders(entry: Route, input: Readonly<Record<string, string>>): Record<string, string>;
8
+ /** A credential value together with the request channel that actually carried it. */
9
+ export interface LocatedCredential {
10
+ readonly value: string;
11
+ readonly in: SingleCredentialSource['in'];
12
+ }
8
13
  export declare function readCredential(entry: Route, url: URL, headers: Record<string, string>): string | undefined;
9
- //# sourceMappingURL=credential.d.ts.map
14
+ /**
15
+ * Read the request credential and report which declared channel supplied it. A `cookie` channel is
16
+ * ambient (the browser attaches it automatically), which the Server uses to decide CSRF defense; a
17
+ * `header` (Bearer) or `query` channel is caller-chosen and not CSRF-exposed.
18
+ */
19
+ export declare function locateCredential(entry: Route, url: URL, headers: Record<string, string>): LocatedCredential | undefined;
@@ -52,7 +52,14 @@ export function withoutCredentialHeaders(entry, input) {
52
52
  return output;
53
53
  }
54
54
  export function readCredential(entry, url, headers) {
55
- const found = [];
55
+ return locateCredential(entry, url, headers)?.value;
56
+ }
57
+ /**
58
+ * Read the request credential and report which declared channel supplied it. A `cookie` channel is
59
+ * ambient (the browser attaches it automatically), which the Server uses to decide CSRF defense; a
60
+ * `header` (Bearer) or `query` channel is caller-chosen and not CSRF-exposed.
61
+ */
62
+ export function locateCredential(entry, url, headers) {
56
63
  if (entry.credential === undefined) {
57
64
  const authorization = headers.authorization;
58
65
  if (authorization === undefined)
@@ -60,8 +67,9 @@ export function readCredential(entry, url, headers) {
60
67
  const matched = /^Bearer[ \t]+([^\s]+)$/iu.exec(authorization.trim());
61
68
  if (matched === null)
62
69
  invalidRequest('Authorization must contain one Bearer credential.');
63
- return matched[1];
70
+ return { value: matched[1], in: 'header' };
64
71
  }
72
+ const found = [];
65
73
  for (const source of credentialSources(entry)) {
66
74
  let value;
67
75
  if (source.in === 'header') {
@@ -78,7 +86,7 @@ export function readCredential(entry, url, headers) {
78
86
  value = cookie(headers.cookie, source.name);
79
87
  }
80
88
  if (value !== undefined)
81
- found.push(value);
89
+ found.push({ value, in: source.in });
82
90
  }
83
91
  if (found.length > 1)
84
92
  invalidRequest('Request supplies more than one Astrale credential channel.');
@@ -116,4 +124,3 @@ function withoutCookie(header, name) {
116
124
  .join('; ');
117
125
  return value.length === 0 ? undefined : value;
118
126
  }
119
- //# sourceMappingURL=credential.js.map
@@ -1,6 +1,8 @@
1
- import type { schema } from '@astrale-os/kernel-dsl/v1';
2
- import type { PublicationRef } from '../publication/index.js';
1
+ import type { Domain } from '@astrale-os/kernel-dsl/v1';
3
2
  import type { HttpRequest, Invocation } from './request.js';
3
+ import type { ServedReferences } from './routing.js';
4
4
  import type { Route } from './table.js';
5
- export declare function decode(entry: Route, request: HttpRequest, validator: schema.Validator, served: PublicationRef): Invocation;
6
- //# sourceMappingURL=decode.d.ts.map
5
+ /** Decode one native route request served by a release-backed destination. */
6
+ export declare function decode(entry: Route, request: HttpRequest, domain: Domain, served: ServedReferences): Invocation;
7
+ /** Decode one native route request, reading its routing pair with `routing` at its fixed step. */
8
+ export declare function decodeInvocation(entry: Route, request: HttpRequest, domain: Domain, routing: (input: HttpRequest) => Invocation['routing']): Invocation;
@@ -1,16 +1,26 @@
1
- import { NodePath, Path } from '@astrale-os/kernel-core/path';
2
- import { Key, Ref } from '@astrale-os/kernel-dsl/v1/addressing';
1
+ import { NodePath } from '@astrale-os/kernel-core/path';
3
2
  import * as portable from '@astrale-os/kernel-dsl/value';
4
- import { readCredential, specificHeaderWires, withoutCredentialHeaders } from './credential.js';
3
+ import { locateCredential, specificHeaderWires, withoutCredentialHeaders } from './credential.js';
5
4
  import { fail, invalidRequest } from './error.js';
6
5
  import { isReservedHeader } from './mapping.js';
7
6
  import { methodMatches } from './match.js';
8
7
  import { bodyText, normalizeHeaders, parseJsonObject } from './request.js';
9
8
  import { decodeRouting } from './routing.js';
10
9
  import { decodeScalar } from './scalar.js';
11
- import { requiresReceiver } from './target.js';
10
+ import { requiresReceiver, routeFingerprint } from './target.js';
12
11
  import { matchTemplate, PLACEHOLDER } from './template.js';
13
- export function decode(entry, request, validator, served) {
12
+ /** Decode one native route request served by a release-backed destination. */
13
+ export function decode(entry, request, domain, served) {
14
+ return decodeInvocation(entry, request, domain, (input) => {
15
+ const routing = decodeRouting(input, served);
16
+ if (routing?.kind === 'stale') {
17
+ fail('NATIVE_ROUTE_ROUTING_INVALID', 'If-Match does not name the served release.');
18
+ }
19
+ return routing;
20
+ });
21
+ }
22
+ /** Decode one native route request, reading its routing pair with `routing` at its fixed step. */
23
+ export function decodeInvocation(entry, request, domain, routing) {
14
24
  if (!methodMatches(entry, request.method))
15
25
  invalidRequest('HTTP method does not match the route.');
16
26
  const matched = matchTemplate(entry.href, request.url);
@@ -18,10 +28,10 @@ export function decode(entry, request, validator, served) {
18
28
  invalidRequest('URL does not match the route template.');
19
29
  const values = {};
20
30
  for (const [name, value] of Object.entries(matched)) {
21
- values[name] = decodeScalar(entry, name, value, validator);
31
+ values[name] = decodeScalar(entry, name, value, domain);
22
32
  }
23
33
  if (entry.requestMethod !== undefined) {
24
- values[entry.requestMethod] = decodeScalar(entry, entry.requestMethod, request.method.toUpperCase(), validator);
34
+ values[entry.requestMethod] = decodeScalar(entry, entry.requestMethod, request.method.toUpperCase(), domain);
25
35
  }
26
36
  let url;
27
37
  try {
@@ -34,14 +44,15 @@ export function decode(entry, request, validator, served) {
34
44
  throw cause;
35
45
  }
36
46
  const headers = normalizeHeaders(request.headers);
37
- const credential = readCredential(entry, url, headers);
38
- const routing = decodeRouting(request, served);
47
+ const located = locateCredential(entry, url, headers);
48
+ const credential = located?.value;
49
+ const routed = routing(request);
39
50
  const applicationHeaders = withoutCredentialHeaders(entry, headers);
40
51
  for (const [name, wire] of Object.entries(entry.query ?? {})) {
41
52
  const found = url.searchParams.getAll(wire);
42
53
  if (found.length !== 1)
43
54
  invalidRequest(`Query parameter ${wire} must occur exactly once.`);
44
- values[name] = decodeScalar(entry, name, found[0], validator);
55
+ values[name] = decodeScalar(entry, name, found[0], domain);
45
56
  }
46
57
  for (const [name, pick] of Object.entries(entry.headers ?? {})) {
47
58
  if (pick === '*') {
@@ -55,12 +66,12 @@ export function decode(entry, request, validator, served) {
55
66
  const value = headers[pick.toLowerCase()];
56
67
  if (value === undefined)
57
68
  invalidRequest(`Missing header ${pick}.`);
58
- values[name] = decodeScalar(entry, name, value, validator);
69
+ values[name] = decodeScalar(entry, name, value, domain);
59
70
  }
60
71
  }
61
72
  if (entry.body === '*') {
62
73
  const body = parseJsonObject(request.body);
63
- const allowed = remainderFields(entry, validator);
74
+ const allowed = remainderFields(entry, domain);
64
75
  for (const name of Object.keys(body)) {
65
76
  if (!allowed.has(name)) {
66
77
  invalidRequest(`JSON body field ${name} is not owned by the route remainder mapping.`);
@@ -112,34 +123,26 @@ export function decode(entry, request, validator, served) {
112
123
  }
113
124
  throw cause;
114
125
  }
115
- const ref = Key.ref(entry.callable);
116
- const target = Ref.isMethod(ref)
117
- ? receiver === undefined
118
- ? Path.staticMethod(Path.project({
119
- origin: Key.origin(entry.callable),
120
- kind: Ref.namespace(ref),
121
- name: Ref.member(ref),
122
- }), Ref.child(ref)).raw
123
- : Path.instanceMethod(Path.from(receiver), Ref.child(ref)).raw
124
- : Path.project({
125
- origin: Key.origin(entry.callable),
126
- kind: 'function',
127
- name: Ref.member(ref),
128
- }).raw;
126
+ const target = Object.freeze({
127
+ callable: entry.callable,
128
+ fingerprint: routeFingerprint(domain, entry.callable),
129
+ ...(receiver === undefined ? {} : { instance: receiver }),
130
+ });
129
131
  return Object.freeze({
130
132
  call: Object.freeze({ target, input }),
131
133
  ...(credential === undefined ? {} : { credential }),
132
- ...(routing === undefined ? {} : { routing }),
134
+ ...(located === undefined ? {} : { credentialIn: located.in }),
135
+ ...(routed === undefined ? {} : { routing: routed }),
133
136
  });
134
137
  }
135
- function remainderFields(entry, validator) {
138
+ function remainderFields(entry, domain) {
136
139
  const claimed = new Set([
137
140
  ...[...entry.href.matchAll(PLACEHOLDER)].map((item) => item[1]),
138
141
  ...(entry.requestMethod === undefined ? [] : [entry.requestMethod]),
139
142
  ...Object.keys(entry.query ?? {}),
140
143
  ...Object.keys(entry.headers ?? {}),
141
144
  ]);
142
- const fields = validator.callable(entry.callable)?.fields ?? [];
145
+ const fields = domain.callable(entry.callable)?.inputFields ?? [];
143
146
  const allowed = new Set(fields.filter((name) => !claimed.has(name)));
144
147
  const receiver = entry.target.kind === 'method' && entry.target.dispatch === 'instance'
145
148
  ? entry.target.receiver
@@ -149,4 +152,3 @@ function remainderFields(entry, validator) {
149
152
  }
150
153
  return allowed;
151
154
  }
152
- //# sourceMappingURL=decode.js.map
@@ -0,0 +1,30 @@
1
+ import { type IssuerId } from '@astrale-os/kernel-core/auth/issuer';
2
+ import type { DeploymentRetiredReason, ErrorResponse } from '../invocation/index.js';
3
+ import type { ReleaseDigest } from '../release/digest.js';
4
+ import type { HttpRequest } from './request.js';
5
+ /**
6
+ * Reserved control of a deployment that no longer serves. Every emitter (the deployment
7
+ * dispatchers, a release-snapshot server) answers every path with the same 410, headers and
8
+ * envelope, and never runs other code in its place.
9
+ */
10
+ export interface DeploymentRetired {
11
+ readonly kind: 'deployment-retired';
12
+ readonly reason: DeploymentRetiredReason;
13
+ }
14
+ export declare const HTTP_DEPLOYMENT_RETIRED: 'x-astrale-deployment-retired';
15
+ export declare const HTTP_DEPLOYMENT_RETIRED_STATUS: 410;
16
+ export declare function deploymentRetiredHeaders(): Readonly<Record<string, string>>;
17
+ /**
18
+ * The envelope every deployed client already decodes from any status: a not-found Service error
19
+ * carrying `DEPLOYMENT_RETIRED`, attributed to the deployment rather than to one request. An
20
+ * emitter passing a deployment that is not a canonical issuer origin, or a release that is not a
21
+ * release digest, gets a `TypeError` naming that argument.
22
+ */
23
+ export declare function deploymentRetiredBody(deployment: IssuerId, release?: ReleaseDigest): ErrorResponse;
24
+ /**
25
+ * Recognize only the reserved status, header, `no-store` and envelope together. A 410 without the
26
+ * header is ordinary application behavior; the header with another status or value, without
27
+ * `Cache-Control: no-store`, or beside any other body (including one correlated to a request or
28
+ * whose invocation source is not the retired deployment), is an invalid response.
29
+ */
30
+ export declare function decodeDeploymentRetired(status: number, headers: HttpRequest['headers'], body: unknown): DeploymentRetired | undefined;
@@ -0,0 +1,96 @@
1
+ import { is as isIssuer } from '@astrale-os/kernel-core/auth/issuer';
2
+ import { CONTENT_TYPE_JSON } from '../codecs/media-types.js';
3
+ import { CODES, ProtocolError } from '../errors/index.js';
4
+ import { DEPLOYMENT_RETIRED, decodeResponse, serviceErrorOf } from '../invocation/index.js';
5
+ import { fail } from './error.js';
6
+ import { reservedHeader } from './header.js';
7
+ export const HTTP_DEPLOYMENT_RETIRED = 'x-astrale-deployment-retired';
8
+ export const HTTP_DEPLOYMENT_RETIRED_STATUS = 410;
9
+ const MESSAGE = 'This deployment is retired.';
10
+ const DIGEST = /^sha256:[0-9a-f]{64}$/u;
11
+ export function deploymentRetiredHeaders() {
12
+ return Object.freeze({
13
+ [HTTP_DEPLOYMENT_RETIRED]: '1',
14
+ 'cache-control': 'no-store',
15
+ 'content-type': CONTENT_TYPE_JSON,
16
+ });
17
+ }
18
+ /**
19
+ * The envelope every deployed client already decodes from any status: a not-found Service error
20
+ * carrying `DEPLOYMENT_RETIRED`, attributed to the deployment rather than to one request. An
21
+ * emitter passing a deployment that is not a canonical issuer origin, or a release that is not a
22
+ * release digest, gets a `TypeError` naming that argument.
23
+ */
24
+ export function deploymentRetiredBody(deployment, release) {
25
+ assertEmitterInput(deployment, release);
26
+ return decodeRetired({
27
+ requestId: null,
28
+ invocation: { source: deployment, id: 'unavailable' },
29
+ error: {
30
+ code: CODES.NOT_FOUND,
31
+ message: MESSAGE,
32
+ data: {
33
+ code: DEPLOYMENT_RETIRED,
34
+ details: { deployment, ...(release === undefined ? {} : { release }) },
35
+ },
36
+ },
37
+ }).envelope;
38
+ }
39
+ /**
40
+ * Recognize only the reserved status, header, `no-store` and envelope together. A 410 without the
41
+ * header is ordinary application behavior; the header with another status or value, without
42
+ * `Cache-Control: no-store`, or beside any other body (including one correlated to a request or
43
+ * whose invocation source is not the retired deployment), is an invalid response.
44
+ */
45
+ export function decodeDeploymentRetired(status, headers, body) {
46
+ const encoded = reservedHeader(headers, HTTP_DEPLOYMENT_RETIRED);
47
+ if (encoded === undefined)
48
+ return undefined;
49
+ if (status !== HTTP_DEPLOYMENT_RETIRED_STATUS || encoded !== '1') {
50
+ fail('NATIVE_ROUTE_ROUTING_INVALID', `${HTTP_DEPLOYMENT_RETIRED} is reserved for status ${HTTP_DEPLOYMENT_RETIRED_STATUS} with value 1.`);
51
+ }
52
+ if (!cacheDirectives(headers).includes('no-store')) {
53
+ fail('NATIVE_ROUTE_ROUTING_INVALID', `${HTTP_DEPLOYMENT_RETIRED} requires Cache-Control: no-store.`);
54
+ }
55
+ return Object.freeze({ kind: 'deployment-retired', reason: decodeRetired(body).reason });
56
+ }
57
+ function decodeRetired(input) {
58
+ let envelope;
59
+ try {
60
+ envelope = decodeResponse(input);
61
+ }
62
+ catch (cause) {
63
+ if (cause instanceof ProtocolError)
64
+ return invalid(cause);
65
+ throw cause;
66
+ }
67
+ const failure = 'error' in envelope ? serviceErrorOf(envelope.error) : undefined;
68
+ if (failure === undefined ||
69
+ failure.data.code !== DEPLOYMENT_RETIRED ||
70
+ envelope.requestId !== null ||
71
+ envelope.invocation.source !== failure.data.details.deployment) {
72
+ return invalid();
73
+ }
74
+ return { envelope: envelope, reason: failure.data };
75
+ }
76
+ /** Every `Cache-Control` directive, lower-cased, across repeated fields in any spelling. */
77
+ function cacheDirectives(input) {
78
+ const fields = input instanceof Headers
79
+ ? [input.get('cache-control') ?? '']
80
+ : Object.entries(input ?? {})
81
+ .filter(([name]) => name.toLowerCase() === 'cache-control')
82
+ .flatMap(([, value]) => value ?? []);
83
+ return fields.flatMap((field) => field.split(',').map((d) => d.trim().toLowerCase()));
84
+ }
85
+ /** Emitter-side programmer invariant: never reported as a received-response decode failure. */
86
+ function assertEmitterInput(deployment, release) {
87
+ if (!isIssuer(deployment)) {
88
+ throw new TypeError('deploymentRetiredBody: deployment must be a canonical issuer origin.');
89
+ }
90
+ if (release !== undefined && (typeof release !== 'string' || !DIGEST.test(release))) {
91
+ throw new TypeError('deploymentRetiredBody: release must be a sha256 release digest.');
92
+ }
93
+ }
94
+ function invalid(cause) {
95
+ return fail('NATIVE_ROUTE_ROUTING_INVALID', `${HTTP_DEPLOYMENT_RETIRED} requires the deployment-retired error envelope.`, cause);
96
+ }
@@ -1,5 +1,4 @@
1
- import type { schema } from '@astrale-os/kernel-dsl/v1';
1
+ import type { Domain } from '@astrale-os/kernel-dsl/v1';
2
2
  import type { Invocation, Request } from './request.js';
3
3
  import type { Route } from './table.js';
4
- export declare function encode(entry: Route, invocation: Invocation, validator: schema.Validator): Request;
5
- //# sourceMappingURL=encode.d.ts.map
4
+ export declare function encode(entry: Route, invocation: Invocation, domain: Domain): Request;