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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (496) hide show
  1. package/dist/artifact/index.d.ts +1 -2
  2. package/dist/artifact/index.js +1 -2
  3. package/dist/artifact/ref.d.ts +2 -1
  4. package/dist/artifact/ref.js +4 -4
  5. package/dist/codecs/codec.d.ts +0 -1
  6. package/dist/codecs/codec.js +0 -1
  7. package/dist/codecs/index.d.ts +1 -3
  8. package/dist/codecs/index.js +1 -3
  9. package/dist/codecs/json.d.ts +0 -1
  10. package/dist/codecs/json.js +0 -1
  11. package/dist/codecs/media-types.d.ts +0 -2
  12. package/dist/codecs/media-types.js +0 -2
  13. package/dist/errors/codes.d.ts +0 -1
  14. package/dist/errors/codes.js +0 -1
  15. package/dist/errors/http-status.d.ts +0 -1
  16. package/dist/errors/http-status.js +0 -1
  17. package/dist/errors/index.d.ts +1 -1
  18. package/dist/errors/index.js +1 -1
  19. package/dist/errors/payload.d.ts +0 -1
  20. package/dist/errors/payload.js +0 -1
  21. package/dist/errors/protocol-error.d.ts +0 -1
  22. package/dist/errors/protocol-error.js +0 -1
  23. package/dist/errors/reason.d.ts +0 -1
  24. package/dist/errors/reason.js +0 -1
  25. package/dist/errors/retry.d.ts +25 -0
  26. package/dist/errors/retry.js +46 -0
  27. package/dist/index.d.ts +1 -2
  28. package/dist/index.js +1 -2
  29. package/dist/invocation/admission.d.ts +2 -3
  30. package/dist/invocation/admission.js +5 -6
  31. package/dist/invocation/binary.d.ts +1 -1
  32. package/dist/invocation/binary.js +21 -5
  33. package/dist/invocation/binding-codecs.d.ts +3 -3
  34. package/dist/invocation/binding-codecs.js +1 -7
  35. package/dist/invocation/cancellation.d.ts +0 -1
  36. package/dist/invocation/cancellation.js +0 -1
  37. package/dist/invocation/correlation.d.ts +0 -1
  38. package/dist/invocation/correlation.js +0 -1
  39. package/dist/invocation/delegate.d.ts +0 -21
  40. package/dist/invocation/delegate.js +2 -35
  41. package/dist/invocation/http/binary.d.ts +3 -2
  42. package/dist/invocation/http/binary.js +6 -2
  43. package/dist/invocation/http/index.d.ts +2 -2
  44. package/dist/invocation/http/index.js +2 -2
  45. package/dist/invocation/http/negotiation.d.ts +0 -1
  46. package/dist/invocation/http/negotiation.js +3 -11
  47. package/dist/invocation/http/request.d.ts +11 -0
  48. package/dist/invocation/http/request.js +69 -0
  49. package/dist/invocation/http/stream.d.ts +0 -1
  50. package/dist/invocation/http/stream.js +0 -1
  51. package/dist/invocation/http/trace.d.ts +0 -1
  52. package/dist/invocation/http/trace.js +0 -1
  53. package/dist/invocation/idempotency.d.ts +0 -1
  54. package/dist/invocation/idempotency.js +0 -1
  55. package/dist/invocation/identity.d.ts +0 -1
  56. package/dist/invocation/identity.js +0 -1
  57. package/dist/invocation/index.d.ts +5 -5
  58. package/dist/invocation/index.js +4 -4
  59. package/dist/invocation/maintenance.d.ts +14 -0
  60. package/dist/invocation/maintenance.js +18 -0
  61. package/dist/invocation/miss.d.ts +0 -1
  62. package/dist/invocation/miss.js +0 -1
  63. package/dist/invocation/redirect.d.ts +10 -13
  64. package/dist/invocation/redirect.js +10 -23
  65. package/dist/invocation/request.d.ts +3 -1
  66. package/dist/invocation/request.js +9 -3
  67. package/dist/invocation/response.d.ts +6 -2
  68. package/dist/invocation/response.js +26 -16
  69. package/dist/invocation/routing.d.ts +14 -5
  70. package/dist/invocation/routing.js +35 -21
  71. package/dist/invocation/schema.d.ts +6 -5
  72. package/dist/invocation/schema.js +5 -12
  73. package/dist/invocation/service-reason.d.ts +20 -16
  74. package/dist/invocation/service-reason.js +27 -20
  75. package/dist/invocation/stale-route.d.ts +3 -4
  76. package/dist/invocation/stale-route.js +0 -1
  77. package/dist/invocation/stream.d.ts +0 -1
  78. package/dist/invocation/stream.js +0 -1
  79. package/dist/invocation/target.d.ts +5 -3
  80. package/dist/invocation/target.js +25 -4
  81. package/dist/invocation/trace.d.ts +0 -1
  82. package/dist/invocation/trace.js +0 -1
  83. package/dist/invocation/version.d.ts +0 -1
  84. package/dist/invocation/version.js +0 -1
  85. package/dist/invocation/websocket/binary.d.ts +0 -1
  86. package/dist/invocation/websocket/binary.js +1 -1
  87. package/dist/invocation/websocket/index.d.ts +1 -2
  88. package/dist/invocation/websocket/index.js +1 -2
  89. package/dist/invocation/websocket/subprotocol.d.ts +1 -3
  90. package/dist/invocation/websocket/subprotocol.js +3 -5
  91. package/dist/issuer/claims.d.ts +7 -0
  92. package/dist/issuer/claims.js +7 -0
  93. package/dist/issuer/configuration.d.ts +0 -1
  94. package/dist/issuer/configuration.js +0 -1
  95. package/dist/issuer/error.d.ts +0 -1
  96. package/dist/issuer/error.js +0 -1
  97. package/dist/issuer/exchange.d.ts +0 -1
  98. package/dist/issuer/exchange.js +0 -1
  99. package/dist/issuer/hosted.d.ts +0 -1
  100. package/dist/issuer/hosted.js +0 -1
  101. package/dist/issuer/index.d.ts +2 -1
  102. package/dist/issuer/index.js +2 -1
  103. package/dist/issuer/key-set.d.ts +0 -1
  104. package/dist/issuer/key-set.js +0 -1
  105. package/dist/issuer/paths.d.ts +2 -1
  106. package/dist/issuer/paths.js +1 -1
  107. package/dist/issuer/url.d.ts +0 -1
  108. package/dist/issuer/url.js +0 -1
  109. package/dist/issuer/workflow-engine.d.ts +18 -0
  110. package/dist/issuer/workflow-engine.js +59 -0
  111. package/dist/{publication → release}/bindings/callable.d.ts +0 -1
  112. package/dist/{publication → release}/bindings/callable.js +6 -7
  113. package/dist/{publication → release}/bindings/index.d.ts +0 -1
  114. package/dist/{publication → release}/bindings/index.js +0 -1
  115. package/dist/{publication → release}/bindings/invocation.d.ts +0 -1
  116. package/dist/release/bindings/invocation.js +13 -0
  117. package/dist/release/bindings/view.d.ts +11 -0
  118. package/dist/release/bindings/view.js +54 -0
  119. package/dist/release/build.d.ts +6 -0
  120. package/dist/release/build.js +7 -0
  121. package/dist/release/bundle-admission.d.ts +21 -0
  122. package/dist/{publication → release}/bundle-admission.js +15 -21
  123. package/dist/{publication → release}/bundle-descriptor.d.ts +0 -1
  124. package/dist/release/bundle-descriptor.js +19 -0
  125. package/dist/release/bundle-evidence.d.ts +3 -0
  126. package/dist/release/bundle-evidence.js +13 -0
  127. package/dist/{publication → release}/bundle.d.ts +5 -3
  128. package/dist/{publication → release}/bundle.js +13 -8
  129. package/dist/{publication → release}/declaration.d.ts +0 -1
  130. package/dist/release/declaration.js +1 -0
  131. package/dist/{publication → release}/delivery/attestation.d.ts +1 -1
  132. package/dist/{publication → release}/delivery/attestation.js +0 -1
  133. package/dist/{publication → release}/delivery/claims.d.ts +7 -3
  134. package/dist/{publication → release}/delivery/claims.js +20 -14
  135. package/dist/release/delivery/delivery.d.ts +11 -0
  136. package/dist/{publication → release}/delivery/delivery.js +7 -13
  137. package/dist/{publication → release}/delivery/error.d.ts +2 -1
  138. package/dist/{publication → release}/delivery/error.js +1 -1
  139. package/dist/{publication → release}/delivery/index.d.ts +5 -2
  140. package/dist/{publication → release}/delivery/index.js +4 -1
  141. package/dist/{publication → release}/delivery/limits.d.ts +2 -2
  142. package/dist/release/delivery/limits.js +5 -0
  143. package/dist/{publication → release}/delivery/request.d.ts +10 -10
  144. package/dist/{publication → release}/delivery/request.js +9 -11
  145. package/dist/{publication → release}/delivery-declaration.d.ts +0 -1
  146. package/dist/{publication → release}/delivery-declaration.js +4 -5
  147. package/dist/{publication → release}/delivery-endpoint.d.ts +0 -1
  148. package/dist/release/delivery-endpoint.js +22 -0
  149. package/dist/release/digest.d.ts +13 -0
  150. package/dist/{publication/etag.js → release/digest.js} +1 -7
  151. package/dist/release/error.d.ts +7 -0
  152. package/dist/release/error.js +11 -0
  153. package/dist/release/index.d.ts +17 -0
  154. package/dist/release/index.js +10 -0
  155. package/dist/release/issuer.d.ts +5 -0
  156. package/dist/release/issuer.js +34 -0
  157. package/dist/release/manifest.d.ts +6 -0
  158. package/dist/release/manifest.js +22 -0
  159. package/dist/release/reference.d.ts +26 -0
  160. package/dist/release/reference.js +70 -0
  161. package/dist/release/release.d.ts +60 -0
  162. package/dist/release/release.js +125 -0
  163. package/dist/release/requirements.d.ts +41 -0
  164. package/dist/release/requirements.js +306 -0
  165. package/dist/{publication → release}/route.d.ts +0 -1
  166. package/dist/{publication → release}/route.js +24 -25
  167. package/dist/{publication → release}/schema.d.ts +0 -1
  168. package/dist/{publication → release}/schema.js +4 -5
  169. package/dist/release/served.d.ts +27 -0
  170. package/dist/release/served.js +56 -0
  171. package/dist/release/shape.d.ts +8 -0
  172. package/dist/{publication/content.js → release/shape.js} +0 -1
  173. package/dist/routes/admission.d.ts +1 -2
  174. package/dist/routes/admission.js +7 -86
  175. package/dist/routes/binding.d.ts +3 -4
  176. package/dist/routes/binding.js +11 -22
  177. package/dist/routes/collision.d.ts +0 -1
  178. package/dist/routes/collision.js +0 -1
  179. package/dist/routes/compiler.d.ts +2 -3
  180. package/dist/routes/compiler.js +7 -4
  181. package/dist/routes/credential.d.ts +12 -3
  182. package/dist/routes/credential.js +9 -5
  183. package/dist/routes/decode.d.ts +5 -3
  184. package/dist/routes/decode.js +24 -18
  185. package/dist/routes/deployment-retired.d.ts +30 -0
  186. package/dist/routes/deployment-retired.js +96 -0
  187. package/dist/routes/encode.d.ts +0 -1
  188. package/dist/routes/encode.js +12 -6
  189. package/dist/routes/entries.d.ts +23 -0
  190. package/dist/routes/entries.js +150 -0
  191. package/dist/routes/error-response.d.ts +0 -1
  192. package/dist/routes/error-response.js +0 -1
  193. package/dist/routes/error.d.ts +0 -1
  194. package/dist/routes/error.js +0 -1
  195. package/dist/routes/evidence.d.ts +3 -4
  196. package/dist/routes/evidence.js +7 -34
  197. package/dist/routes/header.d.ts +9 -0
  198. package/dist/routes/header.js +34 -0
  199. package/dist/routes/index.d.ts +2 -3
  200. package/dist/routes/index.js +2 -3
  201. package/dist/routes/mapping.d.ts +1 -2
  202. package/dist/routes/mapping.js +4 -5
  203. package/dist/routes/match.d.ts +1 -2
  204. package/dist/routes/match.js +0 -1
  205. package/dist/routes/placement.d.ts +2 -3
  206. package/dist/routes/placement.js +0 -1
  207. package/dist/routes/plan.d.ts +1 -2
  208. package/dist/routes/plan.js +0 -1
  209. package/dist/routes/request.d.ts +3 -2
  210. package/dist/routes/request.js +0 -1
  211. package/dist/routes/reservation.d.ts +4 -3
  212. package/dist/routes/reservation.js +14 -9
  213. package/dist/routes/routing.d.ts +18 -7
  214. package/dist/routes/routing.js +28 -50
  215. package/dist/routes/scalar.d.ts +0 -1
  216. package/dist/routes/scalar.js +0 -1
  217. package/dist/routes/select.d.ts +1 -2
  218. package/dist/routes/select.js +0 -1
  219. package/dist/routes/stream.d.ts +0 -1
  220. package/dist/routes/stream.js +0 -1
  221. package/dist/routes/table.d.ts +3 -3
  222. package/dist/routes/table.js +0 -1
  223. package/dist/routes/target.d.ts +5 -1
  224. package/dist/routes/target.js +16 -1
  225. package/dist/routes/template.d.ts +0 -2
  226. package/dist/routes/template.js +0 -4
  227. package/dist/runtime/artifact.d.ts +5 -5
  228. package/dist/runtime/artifact.js +7 -5
  229. package/dist/runtime/index.d.ts +1 -2
  230. package/dist/runtime/index.js +1 -2
  231. package/dist/schema/index.d.ts +0 -1
  232. package/dist/schema/index.js +0 -1
  233. package/dist/schema/installation/codec.d.ts +9 -0
  234. package/dist/schema/installation/codec.js +82 -0
  235. package/dist/schema/installation/index.d.ts +2 -1
  236. package/dist/schema/installation/index.js +1 -1
  237. package/dist/schema/installation/introspection/codec.d.ts +5 -3
  238. package/dist/schema/installation/introspection/codec.js +319 -194
  239. package/dist/schema/installation/introspection/index.d.ts +2 -3
  240. package/dist/schema/installation/introspection/index.js +1 -2
  241. package/dist/schema/installation/introspection/result.d.ts +84 -26
  242. package/dist/schema/installation/introspection/result.js +0 -1
  243. package/dist/schema/installation/result.d.ts +15 -0
  244. package/dist/schema/installation/result.js +1 -0
  245. package/package.json +23 -78
  246. package/dist/artifact/index.d.ts.map +0 -1
  247. package/dist/artifact/index.js.map +0 -1
  248. package/dist/artifact/ref.d.ts.map +0 -1
  249. package/dist/artifact/ref.js.map +0 -1
  250. package/dist/codecs/codec.d.ts.map +0 -1
  251. package/dist/codecs/codec.js.map +0 -1
  252. package/dist/codecs/index.d.ts.map +0 -1
  253. package/dist/codecs/index.js.map +0 -1
  254. package/dist/codecs/json.d.ts.map +0 -1
  255. package/dist/codecs/json.js.map +0 -1
  256. package/dist/codecs/media-types.d.ts.map +0 -1
  257. package/dist/codecs/media-types.js.map +0 -1
  258. package/dist/codecs/msgpack.d.ts +0 -5
  259. package/dist/codecs/msgpack.d.ts.map +0 -1
  260. package/dist/codecs/msgpack.js +0 -51
  261. package/dist/codecs/msgpack.js.map +0 -1
  262. package/dist/errors/codes.d.ts.map +0 -1
  263. package/dist/errors/codes.js.map +0 -1
  264. package/dist/errors/http-status.d.ts.map +0 -1
  265. package/dist/errors/http-status.js.map +0 -1
  266. package/dist/errors/index.d.ts.map +0 -1
  267. package/dist/errors/index.js.map +0 -1
  268. package/dist/errors/payload.d.ts.map +0 -1
  269. package/dist/errors/payload.js.map +0 -1
  270. package/dist/errors/protocol-error.d.ts.map +0 -1
  271. package/dist/errors/protocol-error.js.map +0 -1
  272. package/dist/errors/reason.d.ts.map +0 -1
  273. package/dist/errors/reason.js.map +0 -1
  274. package/dist/index.d.ts.map +0 -1
  275. package/dist/index.js.map +0 -1
  276. package/dist/invocation/admission.d.ts.map +0 -1
  277. package/dist/invocation/admission.js.map +0 -1
  278. package/dist/invocation/binary.d.ts.map +0 -1
  279. package/dist/invocation/binary.js.map +0 -1
  280. package/dist/invocation/binding-codecs.d.ts.map +0 -1
  281. package/dist/invocation/binding-codecs.js.map +0 -1
  282. package/dist/invocation/cancellation.d.ts.map +0 -1
  283. package/dist/invocation/cancellation.js.map +0 -1
  284. package/dist/invocation/correlation.d.ts.map +0 -1
  285. package/dist/invocation/correlation.js.map +0 -1
  286. package/dist/invocation/delegate.d.ts.map +0 -1
  287. package/dist/invocation/delegate.js.map +0 -1
  288. package/dist/invocation/http/binary.d.ts.map +0 -1
  289. package/dist/invocation/http/binary.js.map +0 -1
  290. package/dist/invocation/http/index.d.ts.map +0 -1
  291. package/dist/invocation/http/index.js.map +0 -1
  292. package/dist/invocation/http/negotiation.d.ts.map +0 -1
  293. package/dist/invocation/http/negotiation.js.map +0 -1
  294. package/dist/invocation/http/stream.d.ts.map +0 -1
  295. package/dist/invocation/http/stream.js.map +0 -1
  296. package/dist/invocation/http/trace.d.ts.map +0 -1
  297. package/dist/invocation/http/trace.js.map +0 -1
  298. package/dist/invocation/idempotency.d.ts.map +0 -1
  299. package/dist/invocation/idempotency.js.map +0 -1
  300. package/dist/invocation/identity.d.ts.map +0 -1
  301. package/dist/invocation/identity.js.map +0 -1
  302. package/dist/invocation/index.d.ts.map +0 -1
  303. package/dist/invocation/index.js.map +0 -1
  304. package/dist/invocation/miss.d.ts.map +0 -1
  305. package/dist/invocation/miss.js.map +0 -1
  306. package/dist/invocation/redirect.d.ts.map +0 -1
  307. package/dist/invocation/redirect.js.map +0 -1
  308. package/dist/invocation/request.d.ts.map +0 -1
  309. package/dist/invocation/request.js.map +0 -1
  310. package/dist/invocation/response.d.ts.map +0 -1
  311. package/dist/invocation/response.js.map +0 -1
  312. package/dist/invocation/routing.d.ts.map +0 -1
  313. package/dist/invocation/routing.js.map +0 -1
  314. package/dist/invocation/schema.d.ts.map +0 -1
  315. package/dist/invocation/schema.js.map +0 -1
  316. package/dist/invocation/service-reason.d.ts.map +0 -1
  317. package/dist/invocation/service-reason.js.map +0 -1
  318. package/dist/invocation/stale-route.d.ts.map +0 -1
  319. package/dist/invocation/stale-route.js.map +0 -1
  320. package/dist/invocation/stream.d.ts.map +0 -1
  321. package/dist/invocation/stream.js.map +0 -1
  322. package/dist/invocation/target.d.ts.map +0 -1
  323. package/dist/invocation/target.js.map +0 -1
  324. package/dist/invocation/trace.d.ts.map +0 -1
  325. package/dist/invocation/trace.js.map +0 -1
  326. package/dist/invocation/version.d.ts.map +0 -1
  327. package/dist/invocation/version.js.map +0 -1
  328. package/dist/invocation/websocket/binary.d.ts.map +0 -1
  329. package/dist/invocation/websocket/binary.js.map +0 -1
  330. package/dist/invocation/websocket/index.d.ts.map +0 -1
  331. package/dist/invocation/websocket/index.js.map +0 -1
  332. package/dist/invocation/websocket/subprotocol.d.ts.map +0 -1
  333. package/dist/invocation/websocket/subprotocol.js.map +0 -1
  334. package/dist/issuer/configuration.d.ts.map +0 -1
  335. package/dist/issuer/configuration.js.map +0 -1
  336. package/dist/issuer/error.d.ts.map +0 -1
  337. package/dist/issuer/error.js.map +0 -1
  338. package/dist/issuer/exchange.d.ts.map +0 -1
  339. package/dist/issuer/exchange.js.map +0 -1
  340. package/dist/issuer/hosted.d.ts.map +0 -1
  341. package/dist/issuer/hosted.js.map +0 -1
  342. package/dist/issuer/index.d.ts.map +0 -1
  343. package/dist/issuer/index.js.map +0 -1
  344. package/dist/issuer/key-set.d.ts.map +0 -1
  345. package/dist/issuer/key-set.js.map +0 -1
  346. package/dist/issuer/paths.d.ts.map +0 -1
  347. package/dist/issuer/paths.js.map +0 -1
  348. package/dist/issuer/url.d.ts.map +0 -1
  349. package/dist/issuer/url.js.map +0 -1
  350. package/dist/publication/bindings/callable.d.ts.map +0 -1
  351. package/dist/publication/bindings/callable.js.map +0 -1
  352. package/dist/publication/bindings/index.d.ts.map +0 -1
  353. package/dist/publication/bindings/index.js.map +0 -1
  354. package/dist/publication/bindings/invocation.d.ts.map +0 -1
  355. package/dist/publication/bindings/invocation.js +0 -14
  356. package/dist/publication/bindings/invocation.js.map +0 -1
  357. package/dist/publication/bindings/view.d.ts +0 -8
  358. package/dist/publication/bindings/view.d.ts.map +0 -1
  359. package/dist/publication/bindings/view.js +0 -29
  360. package/dist/publication/bindings/view.js.map +0 -1
  361. package/dist/publication/bundle-admission.d.ts +0 -5
  362. package/dist/publication/bundle-admission.d.ts.map +0 -1
  363. package/dist/publication/bundle-admission.js.map +0 -1
  364. package/dist/publication/bundle-descriptor.d.ts.map +0 -1
  365. package/dist/publication/bundle-descriptor.js +0 -20
  366. package/dist/publication/bundle-descriptor.js.map +0 -1
  367. package/dist/publication/bundle-evidence.d.ts +0 -4
  368. package/dist/publication/bundle-evidence.d.ts.map +0 -1
  369. package/dist/publication/bundle-evidence.js +0 -14
  370. package/dist/publication/bundle-evidence.js.map +0 -1
  371. package/dist/publication/bundle.d.ts.map +0 -1
  372. package/dist/publication/bundle.js.map +0 -1
  373. package/dist/publication/content.d.ts +0 -11
  374. package/dist/publication/content.d.ts.map +0 -1
  375. package/dist/publication/content.js.map +0 -1
  376. package/dist/publication/declaration.d.ts.map +0 -1
  377. package/dist/publication/declaration.js +0 -2
  378. package/dist/publication/declaration.js.map +0 -1
  379. package/dist/publication/delivery/attestation.d.ts.map +0 -1
  380. package/dist/publication/delivery/attestation.js.map +0 -1
  381. package/dist/publication/delivery/claims.d.ts.map +0 -1
  382. package/dist/publication/delivery/claims.js.map +0 -1
  383. package/dist/publication/delivery/delivery.d.ts +0 -10
  384. package/dist/publication/delivery/delivery.d.ts.map +0 -1
  385. package/dist/publication/delivery/delivery.js.map +0 -1
  386. package/dist/publication/delivery/error.d.ts.map +0 -1
  387. package/dist/publication/delivery/error.js.map +0 -1
  388. package/dist/publication/delivery/index.d.ts.map +0 -1
  389. package/dist/publication/delivery/index.js.map +0 -1
  390. package/dist/publication/delivery/limits.d.ts.map +0 -1
  391. package/dist/publication/delivery/limits.js +0 -5
  392. package/dist/publication/delivery/limits.js.map +0 -1
  393. package/dist/publication/delivery/request.d.ts.map +0 -1
  394. package/dist/publication/delivery/request.js.map +0 -1
  395. package/dist/publication/delivery-declaration.d.ts.map +0 -1
  396. package/dist/publication/delivery-declaration.js.map +0 -1
  397. package/dist/publication/delivery-endpoint.d.ts.map +0 -1
  398. package/dist/publication/delivery-endpoint.js +0 -23
  399. package/dist/publication/delivery-endpoint.js.map +0 -1
  400. package/dist/publication/error.d.ts +0 -8
  401. package/dist/publication/error.d.ts.map +0 -1
  402. package/dist/publication/error.js +0 -12
  403. package/dist/publication/error.js.map +0 -1
  404. package/dist/publication/etag.d.ts +0 -7
  405. package/dist/publication/etag.d.ts.map +0 -1
  406. package/dist/publication/etag.js.map +0 -1
  407. package/dist/publication/index.d.ts +0 -18
  408. package/dist/publication/index.d.ts.map +0 -1
  409. package/dist/publication/index.js +0 -11
  410. package/dist/publication/index.js.map +0 -1
  411. package/dist/publication/manifest.d.ts +0 -7
  412. package/dist/publication/manifest.d.ts.map +0 -1
  413. package/dist/publication/manifest.js +0 -31
  414. package/dist/publication/manifest.js.map +0 -1
  415. package/dist/publication/publication.d.ts +0 -37
  416. package/dist/publication/publication.d.ts.map +0 -1
  417. package/dist/publication/publication.js +0 -134
  418. package/dist/publication/publication.js.map +0 -1
  419. package/dist/publication/reference.d.ts +0 -18
  420. package/dist/publication/reference.d.ts.map +0 -1
  421. package/dist/publication/reference.js +0 -69
  422. package/dist/publication/reference.js.map +0 -1
  423. package/dist/publication/requirements.d.ts +0 -27
  424. package/dist/publication/requirements.d.ts.map +0 -1
  425. package/dist/publication/requirements.js +0 -181
  426. package/dist/publication/requirements.js.map +0 -1
  427. package/dist/publication/route.d.ts.map +0 -1
  428. package/dist/publication/route.js.map +0 -1
  429. package/dist/publication/schema.d.ts.map +0 -1
  430. package/dist/publication/schema.js.map +0 -1
  431. package/dist/routes/admission.d.ts.map +0 -1
  432. package/dist/routes/admission.js.map +0 -1
  433. package/dist/routes/binding.d.ts.map +0 -1
  434. package/dist/routes/binding.js.map +0 -1
  435. package/dist/routes/collision.d.ts.map +0 -1
  436. package/dist/routes/collision.js.map +0 -1
  437. package/dist/routes/compiler.d.ts.map +0 -1
  438. package/dist/routes/compiler.js.map +0 -1
  439. package/dist/routes/credential.d.ts.map +0 -1
  440. package/dist/routes/credential.js.map +0 -1
  441. package/dist/routes/decode.d.ts.map +0 -1
  442. package/dist/routes/decode.js.map +0 -1
  443. package/dist/routes/encode.d.ts.map +0 -1
  444. package/dist/routes/encode.js.map +0 -1
  445. package/dist/routes/error-response.d.ts.map +0 -1
  446. package/dist/routes/error-response.js.map +0 -1
  447. package/dist/routes/error.d.ts.map +0 -1
  448. package/dist/routes/error.js.map +0 -1
  449. package/dist/routes/evidence.d.ts.map +0 -1
  450. package/dist/routes/evidence.js.map +0 -1
  451. package/dist/routes/index.d.ts.map +0 -1
  452. package/dist/routes/index.js.map +0 -1
  453. package/dist/routes/mapping.d.ts.map +0 -1
  454. package/dist/routes/mapping.js.map +0 -1
  455. package/dist/routes/match.d.ts.map +0 -1
  456. package/dist/routes/match.js.map +0 -1
  457. package/dist/routes/placement.d.ts.map +0 -1
  458. package/dist/routes/placement.js.map +0 -1
  459. package/dist/routes/plan.d.ts.map +0 -1
  460. package/dist/routes/plan.js.map +0 -1
  461. package/dist/routes/release-unavailable.d.ts +0 -9
  462. package/dist/routes/release-unavailable.d.ts.map +0 -1
  463. package/dist/routes/release-unavailable.js +0 -33
  464. package/dist/routes/release-unavailable.js.map +0 -1
  465. package/dist/routes/request.d.ts.map +0 -1
  466. package/dist/routes/request.js.map +0 -1
  467. package/dist/routes/reservation.d.ts.map +0 -1
  468. package/dist/routes/reservation.js.map +0 -1
  469. package/dist/routes/routing.d.ts.map +0 -1
  470. package/dist/routes/routing.js.map +0 -1
  471. package/dist/routes/scalar.d.ts.map +0 -1
  472. package/dist/routes/scalar.js.map +0 -1
  473. package/dist/routes/select.d.ts.map +0 -1
  474. package/dist/routes/select.js.map +0 -1
  475. package/dist/routes/stream.d.ts.map +0 -1
  476. package/dist/routes/stream.js.map +0 -1
  477. package/dist/routes/table.d.ts.map +0 -1
  478. package/dist/routes/table.js.map +0 -1
  479. package/dist/routes/target.d.ts.map +0 -1
  480. package/dist/routes/target.js.map +0 -1
  481. package/dist/routes/template.d.ts.map +0 -1
  482. package/dist/routes/template.js.map +0 -1
  483. package/dist/runtime/artifact.d.ts.map +0 -1
  484. package/dist/runtime/artifact.js.map +0 -1
  485. package/dist/runtime/index.d.ts.map +0 -1
  486. package/dist/runtime/index.js.map +0 -1
  487. package/dist/schema/index.d.ts.map +0 -1
  488. package/dist/schema/index.js.map +0 -1
  489. package/dist/schema/installation/index.d.ts.map +0 -1
  490. package/dist/schema/installation/index.js.map +0 -1
  491. package/dist/schema/installation/introspection/codec.d.ts.map +0 -1
  492. package/dist/schema/installation/introspection/codec.js.map +0 -1
  493. package/dist/schema/installation/introspection/index.d.ts.map +0 -1
  494. package/dist/schema/installation/introspection/index.js.map +0 -1
  495. package/dist/schema/installation/introspection/result.d.ts.map +0 -1
  496. package/dist/schema/installation/introspection/result.js.map +0 -1
@@ -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 AUTH = 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', '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;
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
- auth: value.auth,
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
1
  import type { Domain } from '@astrale-os/kernel-dsl/v1';
2
- import type { Publication } from '../publication/publication.js';
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 resolved Domain. */
6
- export declare function bind(plan: Plan, deployed: Publication, domain: Domain): 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 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.');
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
1
  import type { Domain } from '@astrale-os/kernel-dsl/v1';
2
- import type * as publication from '../publication/index.js';
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[];
5
+ readonly routes: readonly HttpRouteDeclaration[];
6
6
  readonly domain: Domain;
7
7
  }
8
8
  export declare function compile(input: CompileInput): Plan;
9
- //# sourceMappingURL=compiler.d.ts.map
@@ -1,4 +1,5 @@
1
- import { admitRouteDeclaration } from '../publication/route.js';
1
+ import { isBinaryInput } from '@astrale-os/kernel-dsl/v1/language';
2
+ import { admitRouteDeclaration } from '../release/route.js';
2
3
  import { rejectCollisions } from './collision.js';
3
4
  import { fail } from './error.js';
4
5
  import { validateCredentialMapping, validateMapping, validateWireMapping } from './mapping.js';
@@ -11,8 +12,11 @@ export function compile(input) {
11
12
  const authored = input.routes.map((entry) => admitRouteDeclaration(entry, input.domain.origin));
12
13
  const entries = authored.map((declaration) => {
13
14
  const meaning = input.domain.callable(declaration.callable);
14
- if (meaning === undefined) {
15
- fail('NATIVE_ROUTE_BINDING_INVALID', `Unknown callable ${declaration.callable}.`);
15
+ if (meaning === undefined || (isMethod(meaning) && !meaning.executable)) {
16
+ fail('NATIVE_ROUTE_BINDING_INVALID', `Unavailable callable ${declaration.callable}.`);
17
+ }
18
+ if (isBinaryInput(meaning.definition.input)) {
19
+ fail('NATIVE_ROUTE_BINDING_INVALID', `Native route ${declaration.name} cannot bind a binary-input Function.`);
16
20
  }
17
21
  const href = placePath(declaration.path, 'https://routes.invalid');
18
22
  const route = { ...declaration, href };
@@ -48,4 +52,3 @@ export function compile(input) {
48
52
  function isMethod(meaning) {
49
53
  return 'owner' in meaning;
50
54
  }
51
- //# sourceMappingURL=compiler.js.map
@@ -1,9 +1,18 @@
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
- export declare function readCredential(entry: Route, url: URL, headers: Record<string, string>): string | undefined;
9
- //# sourceMappingURL=credential.d.ts.map
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
+ }
13
+ /**
14
+ * Read the request credential and report which declared channel supplied it. A `cookie` channel is
15
+ * ambient (the browser attaches it automatically), which the Server uses to decide CSRF defense; a
16
+ * `header` (Bearer) or `query` channel is caller-chosen and not CSRF-exposed.
17
+ */
18
+ export declare function locateCredential(entry: Route, url: URL, headers: Record<string, string>): LocatedCredential | undefined;
@@ -51,8 +51,12 @@ export function withoutCredentialHeaders(entry, input) {
51
51
  }
52
52
  return output;
53
53
  }
54
- export function readCredential(entry, url, headers) {
55
- const found = [];
54
+ /**
55
+ * Read the request credential and report which declared channel supplied it. A `cookie` channel is
56
+ * ambient (the browser attaches it automatically), which the Server uses to decide CSRF defense; a
57
+ * `header` (Bearer) or `query` channel is caller-chosen and not CSRF-exposed.
58
+ */
59
+ export function locateCredential(entry, url, headers) {
56
60
  if (entry.credential === undefined) {
57
61
  const authorization = headers.authorization;
58
62
  if (authorization === undefined)
@@ -60,8 +64,9 @@ export function readCredential(entry, url, headers) {
60
64
  const matched = /^Bearer[ \t]+([^\s]+)$/iu.exec(authorization.trim());
61
65
  if (matched === null)
62
66
  invalidRequest('Authorization must contain one Bearer credential.');
63
- return matched[1];
67
+ return { value: matched[1], in: 'header' };
64
68
  }
69
+ const found = [];
65
70
  for (const source of credentialSources(entry)) {
66
71
  let value;
67
72
  if (source.in === 'header') {
@@ -78,7 +83,7 @@ export function readCredential(entry, url, headers) {
78
83
  value = cookie(headers.cookie, source.name);
79
84
  }
80
85
  if (value !== undefined)
81
- found.push(value);
86
+ found.push({ value, in: source.in });
82
87
  }
83
88
  if (found.length > 1)
84
89
  invalidRequest('Request supplies more than one Astrale credential channel.');
@@ -116,4 +121,3 @@ function withoutCookie(header, name) {
116
121
  .join('; ');
117
122
  return value.length === 0 ? undefined : value;
118
123
  }
119
- //# sourceMappingURL=credential.js.map
@@ -1,6 +1,8 @@
1
1
  import type { Domain } from '@astrale-os/kernel-dsl/v1';
2
- import type { PublicationRef } from '../publication/index.js';
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, domain: Domain, 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 { callableAddress } 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';
12
+ /** Decode one native route request served by a release-backed destination. */
13
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);
@@ -34,8 +44,9 @@ export function decode(entry, request, domain, 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);
@@ -112,20 +123,16 @@ export function decode(entry, request, domain, served) {
112
123
  }
113
124
  throw cause;
114
125
  }
115
- const coordinate = callableAddress(entry.callable);
116
- const target = coordinate.kind === 'method'
117
- ? receiver === undefined
118
- ? Path.staticMethod(Path.project(coordinate.owner), coordinate.name).raw
119
- : Path.instanceMethod(Path.from(receiver), coordinate.name).raw
120
- : Path.project({
121
- origin: coordinate.origin,
122
- kind: 'function',
123
- name: coordinate.name,
124
- }).raw;
126
+ const target = Object.freeze({
127
+ callable: entry.callable,
128
+ fingerprint: routeFingerprint(domain, entry.callable),
129
+ ...(receiver === undefined ? {} : { instance: receiver }),
130
+ });
125
131
  return Object.freeze({
126
132
  call: Object.freeze({ target, input }),
127
133
  ...(credential === undefined ? {} : { credential }),
128
- ...(routing === undefined ? {} : { routing }),
134
+ ...(located === undefined ? {} : { credentialIn: located.in }),
135
+ ...(routed === undefined ? {} : { routing: routed }),
129
136
  });
130
137
  }
131
138
  function remainderFields(entry, domain) {
@@ -145,4 +152,3 @@ function remainderFields(entry, domain) {
145
152
  }
146
153
  return allowed;
147
154
  }
148
- //# 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
+ }
@@ -2,4 +2,3 @@ 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
4
  export declare function encode(entry: Route, invocation: Invocation, domain: Domain): Request;
5
- //# sourceMappingURL=encode.d.ts.map
@@ -1,23 +1,30 @@
1
+ import { targetPath } from '@astrale-os/kernel-core/callable';
1
2
  import { Path } from '@astrale-os/kernel-core/path';
2
3
  import { callableAddress } from '@astrale-os/kernel-dsl/v1/addressing';
3
4
  import * as portable from '@astrale-os/kernel-dsl/value';
5
+ import { routedDigest } from '../invocation/index.js';
4
6
  import { firstCredentialIsAmbient, putCredential, specificHeaderWires, withoutCredentialHeaders, } from './credential.js';
5
7
  import { fail, invalidRequest } from './error.js';
6
8
  import { isReservedHeader } from './mapping.js';
7
- import { encodeStrongEtag, HTTP_ROUTE_ISSUER, HTTP_ROUTE_PUBLICATION } from './routing.js';
9
+ import { encodeStrongEtag, HTTP_ROUTE_DIGEST, HTTP_ROUTE_ISSUER } from './routing.js';
8
10
  import { asObject, encodeScalar, scalar } from './scalar.js';
9
- import { requiresReceiver } from './target.js';
11
+ import { requiresReceiver, routeFingerprint } from './target.js';
10
12
  import { authorityEnd, encodeTemplate, PLACEHOLDER } from './template.js';
11
13
  export function encode(entry, invocation, domain) {
14
+ if (typeof invocation.call.target !== 'string' &&
15
+ invocation.call.target.fingerprint !== undefined &&
16
+ invocation.call.target.fingerprint !== routeFingerprint(domain, entry.callable)) {
17
+ invalidRequest('Invocation Target fingerprint does not match the selected route Domain.');
18
+ }
12
19
  const input = asObject(invocation.call.input);
13
- const target = Path.from(invocation.call.target);
20
+ const target = Path.from(targetPath(invocation.call.target));
14
21
  const needsReceiver = requiresReceiver(entry);
15
22
  const coordinate = callableAddress(entry.callable);
16
23
  const methodName = coordinate.kind === 'method' ? coordinate.name : undefined;
17
24
  const receiver = needsReceiver ? instanceSource(target, methodName) : undefined;
18
25
  const source = receiver?.raw;
19
26
  const expected = needsReceiver
20
- ? Path.instanceMethod(receiver, methodName).raw
27
+ ? Path.instanceMethod(receiver, entry.callable).raw
21
28
  : coordinate.kind === 'method'
22
29
  ? Path.staticMethod(Path.project(coordinate.owner), methodName).raw
23
30
  : Path.project({
@@ -103,7 +110,7 @@ export function encode(entry, invocation, domain) {
103
110
  }
104
111
  }
105
112
  if (invocation.routing !== undefined) {
106
- headers[HTTP_ROUTE_PUBLICATION] = encodeStrongEtag(invocation.routing.publication.etag);
113
+ headers[HTTP_ROUTE_DIGEST] = encodeStrongEtag(routedDigest(invocation.routing));
107
114
  headers[HTTP_ROUTE_ISSUER] = invocation.routing.issuer;
108
115
  }
109
116
  url = parsed.toString();
@@ -143,4 +150,3 @@ function instanceSource(target, name) {
143
150
  }
144
151
  return Path.fromAST({ anchor: target.ast.anchor, steps: steps.slice(0, -1) });
145
152
  }
146
- //# sourceMappingURL=encode.js.map
@@ -0,0 +1,23 @@
1
+ import type { Domain } from '@astrale-os/kernel-dsl/v1';
2
+ import type { Object as JsonObject, Value as JsonValue } from '@astrale-os/kernel-dsl/value';
3
+ import type { Plan } from './plan.js';
4
+ import type { Placed } from './reservation.js';
5
+ import type { Route } from './table.js';
6
+ type Meaning = Pick<Domain, 'origin' | 'revision' | 'callable'>;
7
+ /**
8
+ * The coordinate in which a served document differs from one Plan placed at `publicUrl`: its
9
+ * origin or schema revision (`identity`), or its route wire (`routes`). Each Table words its own
10
+ * refusal after the document it binds.
11
+ */
12
+ export declare function placementMismatch(plan: Plan, deployed: Placed, domain: Domain, publicUrl: string): 'identity' | 'routes' | undefined;
13
+ /** The entries of one placed Plan at the hrefs its served document publishes. */
14
+ export declare function placedEntries(plan: Plan, deployed: Pick<Placed, 'routes'>): readonly Route[];
15
+ /** Whether entries carry exactly the route wire and Domain identity of one served document. */
16
+ export declare function sameServedWire(entries: readonly Route[], deployed: Pick<Placed, 'origin' | 'schema' | 'routes'>, domain: Meaning): boolean;
17
+ /** Refuse an entry whose target, auth or output differs from the Domain's callable meaning. */
18
+ export declare function verifyMeaning(entries: readonly Route[], domain: Meaning): void;
19
+ /** Admit one portable Table object holding exactly `fields`. */
20
+ export declare function tableObject(input: unknown, fields: readonly string[]): JsonObject;
21
+ /** Admit the entries of one Table bound to `origin`; an invalid route wire is a `ReleaseError`. */
22
+ export declare function acceptEntries(input: JsonValue | undefined, origin: string): readonly Route[];
23
+ export {};