@astrale-os/kernel-client 0.6.0-beta.3 → 0.6.0-beta.30

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 (462) hide show
  1. package/CHANGELOG.md +890 -0
  2. package/dist/auth/auth.d.ts +3 -4
  3. package/dist/auth/auth.js +0 -1
  4. package/dist/auth/authorization.d.ts +2 -3
  5. package/dist/auth/authorization.js +3 -4
  6. package/dist/auth/credential.d.ts +1 -2
  7. package/dist/auth/credential.js +5 -6
  8. package/dist/auth/identity.d.ts +6 -9
  9. package/dist/auth/identity.js +4 -5
  10. package/dist/auth/index.d.ts +1 -2
  11. package/dist/auth/index.js +0 -1
  12. package/dist/auth/provision.d.ts +0 -1
  13. package/dist/auth/provision.js +2 -3
  14. package/dist/client/admission.d.ts +0 -1
  15. package/dist/client/admission.js +0 -1
  16. package/dist/client/client.d.ts +0 -1
  17. package/dist/client/client.js +0 -1
  18. package/dist/client/credential.d.ts +0 -1
  19. package/dist/client/credential.js +0 -1
  20. package/dist/client/index.d.ts +0 -1
  21. package/dist/client/index.js +0 -1
  22. package/dist/client/request.d.ts +1 -2
  23. package/dist/client/request.js +1 -2
  24. package/dist/client/result.d.ts +3 -4
  25. package/dist/client/result.js +3 -1
  26. package/dist/client/routing-control.d.ts +0 -1
  27. package/dist/client/routing-control.js +0 -1
  28. package/dist/errors/client-error.d.ts +0 -1
  29. package/dist/errors/client-error.js +2 -1
  30. package/dist/errors/index.d.ts +7 -7
  31. package/dist/errors/index.js +7 -7
  32. package/dist/errors/miss-error.d.ts +0 -1
  33. package/dist/errors/miss-error.js +0 -1
  34. package/dist/errors/protocol-error.d.ts +0 -1
  35. package/dist/errors/protocol-error.js +0 -1
  36. package/dist/errors/response-error.d.ts +2 -2
  37. package/dist/errors/response-error.js +1 -2
  38. package/dist/errors/session-error.d.ts +9 -0
  39. package/dist/errors/session-error.js +9 -0
  40. package/dist/errors/stale-route-error.d.ts +0 -1
  41. package/dist/errors/stale-route-error.js +0 -1
  42. package/dist/errors/transport-error.d.ts +18 -6
  43. package/dist/errors/transport-error.js +11 -7
  44. package/dist/graph/domain/binding.d.ts +22 -0
  45. package/dist/graph/domain/binding.js +123 -0
  46. package/dist/graph/domain/domain.typecheck.d.ts +1 -0
  47. package/dist/graph/domain/domain.typecheck.js +139 -0
  48. package/dist/graph/domain/index.d.ts +3 -0
  49. package/dist/graph/domain/index.js +1 -0
  50. package/dist/graph/domain/model.d.ts +18 -0
  51. package/dist/graph/domain/model.js +1 -0
  52. package/dist/graph/domain/page.d.ts +23 -0
  53. package/dist/graph/domain/page.js +42 -0
  54. package/dist/graph/domain/project.d.ts +8 -0
  55. package/dist/graph/domain/project.js +120 -0
  56. package/dist/graph/domain/provenance.d.ts +6 -0
  57. package/dist/graph/domain/provenance.js +11 -0
  58. package/dist/graph/errors.d.ts +2 -3
  59. package/dist/graph/errors.js +2 -2
  60. package/dist/graph/expectation.d.ts +3 -0
  61. package/dist/graph/expectation.js +6 -0
  62. package/dist/graph/graph.d.ts +12 -8
  63. package/dist/graph/graph.js +0 -1
  64. package/dist/graph/index.d.ts +2 -2
  65. package/dist/graph/index.js +1 -1
  66. package/dist/graph/mutation.d.ts +2 -4
  67. package/dist/graph/mutation.js +12 -4
  68. package/dist/graph/page/index.d.ts +0 -1
  69. package/dist/graph/page/index.js +0 -1
  70. package/dist/graph/page/neighbors.d.ts +4 -5
  71. package/dist/graph/page/neighbors.js +6 -7
  72. package/dist/graph/page/page.d.ts +5 -2
  73. package/dist/graph/page/page.js +0 -1
  74. package/dist/graph/page-contract.d.ts +1 -2
  75. package/dist/graph/page-contract.js +0 -1
  76. package/dist/graph/provenance.d.ts +14 -0
  77. package/dist/graph/provenance.js +42 -0
  78. package/dist/graph/query.d.ts +0 -1
  79. package/dist/graph/query.js +21 -13
  80. package/dist/graph/read.d.ts +3 -4
  81. package/dist/graph/read.js +1 -2
  82. package/dist/index.d.ts +1 -2
  83. package/dist/index.js +1 -2
  84. package/dist/pacer/batcher/batcher.d.ts +0 -1
  85. package/dist/pacer/batcher/batcher.js +0 -1
  86. package/dist/pacer/batcher/defaults.d.ts +0 -1
  87. package/dist/pacer/batcher/defaults.js +0 -1
  88. package/dist/pacer/batcher/index.d.ts +0 -1
  89. package/dist/pacer/batcher/index.js +0 -1
  90. package/dist/pacer/index.d.ts +0 -1
  91. package/dist/pacer/index.js +0 -1
  92. package/dist/pacer/limiter/defaults.d.ts +0 -1
  93. package/dist/pacer/limiter/defaults.js +0 -1
  94. package/dist/pacer/limiter/index.d.ts +0 -1
  95. package/dist/pacer/limiter/index.js +0 -1
  96. package/dist/pacer/limiter/limiter.d.ts +0 -1
  97. package/dist/pacer/limiter/limiter.js +0 -1
  98. package/dist/pacer/queue/defaults.d.ts +0 -1
  99. package/dist/pacer/queue/defaults.js +0 -1
  100. package/dist/pacer/queue/index.d.ts +0 -1
  101. package/dist/pacer/queue/index.js +0 -1
  102. package/dist/pacer/queue/queue.d.ts +0 -1
  103. package/dist/pacer/queue/queue.js +0 -1
  104. package/dist/pacer/retry/defaults.d.ts +0 -1
  105. package/dist/pacer/retry/defaults.js +0 -1
  106. package/dist/pacer/retry/index.d.ts +0 -1
  107. package/dist/pacer/retry/index.js +0 -1
  108. package/dist/pacer/retry/retry.d.ts +0 -1
  109. package/dist/pacer/retry/retry.js +0 -1
  110. package/dist/pool/index.d.ts +0 -1
  111. package/dist/pool/index.js +0 -1
  112. package/dist/pool/pool.d.ts +0 -1
  113. package/dist/pool/pool.js +0 -1
  114. package/dist/pool/target.d.ts +0 -1
  115. package/dist/pool/target.js +0 -1
  116. package/dist/schema/admission.d.ts +9 -7
  117. package/dist/schema/admission.js +6 -12
  118. package/dist/schema/contracts.d.ts +6 -16
  119. package/dist/schema/contracts.js +0 -1
  120. package/dist/schema/index.d.ts +2 -3
  121. package/dist/schema/index.js +0 -1
  122. package/dist/schema/introspection.d.ts +1 -2
  123. package/dist/schema/introspection.js +7 -4
  124. package/dist/schema/operation.d.ts +0 -1
  125. package/dist/schema/operation.js +1 -2
  126. package/dist/schema/schema.d.ts +9 -10
  127. package/dist/schema/schema.js +47 -10
  128. package/dist/session/bound.d.ts +45 -0
  129. package/dist/session/bound.js +89 -0
  130. package/dist/session/context/control.d.ts +0 -1
  131. package/dist/session/context/control.js +0 -1
  132. package/dist/session/context/index.d.ts +0 -1
  133. package/dist/session/context/index.js +0 -1
  134. package/dist/session/context/limits.d.ts +0 -1
  135. package/dist/session/context/limits.js +0 -1
  136. package/dist/session/context/operation.d.ts +0 -1
  137. package/dist/session/context/operation.js +19 -17
  138. package/dist/session/context/policy.d.ts +1 -2
  139. package/dist/session/context/policy.js +2 -3
  140. package/dist/session/discovery/bundle.d.ts +0 -1
  141. package/dist/session/discovery/bundle.js +6 -6
  142. package/dist/session/discovery/discovery.d.ts +1 -2
  143. package/dist/session/discovery/discovery.js +0 -1
  144. package/dist/session/discovery/index.d.ts +1 -2
  145. package/dist/session/discovery/index.js +0 -1
  146. package/dist/session/discovery/publication.d.ts +1 -2
  147. package/dist/session/discovery/publication.js +6 -5
  148. package/dist/session/discovery/snapshot.d.ts +1 -2
  149. package/dist/session/discovery/snapshot.js +0 -1
  150. package/dist/session/discovery/transport.d.ts +6 -0
  151. package/dist/session/discovery/transport.js +13 -0
  152. package/dist/session/index.d.ts +6 -4
  153. package/dist/session/index.js +3 -2
  154. package/dist/session/reference.d.ts +36 -0
  155. package/dist/session/reference.js +74 -0
  156. package/dist/session/routing/auth.d.ts +1 -2
  157. package/dist/session/routing/auth.js +1 -2
  158. package/dist/session/routing/cache.d.ts +28 -8
  159. package/dist/session/routing/cache.js +212 -26
  160. package/dist/session/routing/dispatch.d.ts +3 -7
  161. package/dist/session/routing/dispatch.js +32 -25
  162. package/dist/session/routing/envelope.d.ts +2 -1
  163. package/dist/session/routing/envelope.js +14 -10
  164. package/dist/session/routing/expectation.d.ts +6 -0
  165. package/dist/session/routing/expectation.js +1 -0
  166. package/dist/session/routing/index.d.ts +2 -3
  167. package/dist/session/routing/index.js +1 -2
  168. package/dist/session/routing/request.d.ts +1 -2
  169. package/dist/session/routing/request.js +1 -2
  170. package/dist/session/session.d.ts +16 -10
  171. package/dist/session/session.js +50 -36
  172. package/dist/session/session.typecheck.d.ts +0 -1
  173. package/dist/session/session.typecheck.js +23 -2
  174. package/dist/session/views/catalog.d.ts +2 -3
  175. package/dist/session/views/catalog.js +15 -7
  176. package/dist/session/views/index.d.ts +0 -1
  177. package/dist/session/views/index.js +0 -1
  178. package/dist/session/views/resolve.d.ts +0 -1
  179. package/dist/session/views/resolve.js +4 -3
  180. package/dist/store/entity-index.d.ts +0 -1
  181. package/dist/store/entity-index.js +0 -1
  182. package/dist/store/index.d.ts +0 -1
  183. package/dist/store/index.js +0 -1
  184. package/dist/store/memory.d.ts +2 -2
  185. package/dist/store/memory.js +24 -13
  186. package/dist/store/mutation.d.ts +0 -1
  187. package/dist/store/mutation.js +0 -1
  188. package/dist/store/observe.d.ts +0 -1
  189. package/dist/store/observe.js +0 -1
  190. package/dist/store/optimistic.d.ts +0 -1
  191. package/dist/store/optimistic.js +0 -1
  192. package/dist/store/query-key.d.ts +2 -2
  193. package/dist/store/query-key.js +7 -3
  194. package/dist/store/shape.d.ts +3 -2
  195. package/dist/store/shape.js +3 -2
  196. package/dist/store/store.d.ts +2 -4
  197. package/dist/store/store.js +5 -4
  198. package/dist/store/store.typecheck.d.ts +0 -1
  199. package/dist/store/store.typecheck.js +3 -4
  200. package/dist/transport/auto/decision.d.ts +0 -1
  201. package/dist/transport/auto/decision.js +0 -1
  202. package/dist/transport/auto/fallback.d.ts +0 -1
  203. package/dist/transport/auto/fallback.js +8 -10
  204. package/dist/transport/auto/index.d.ts +0 -1
  205. package/dist/transport/auto/index.js +0 -1
  206. package/dist/transport/auto/transport.d.ts +0 -1
  207. package/dist/transport/auto/transport.js +5 -6
  208. package/dist/transport/auto/warning.d.ts +0 -1
  209. package/dist/transport/auto/warning.js +0 -1
  210. package/dist/transport/deadline.d.ts +0 -1
  211. package/dist/transport/deadline.js +0 -1
  212. package/dist/transport/failure.d.ts +7 -0
  213. package/dist/transport/failure.js +9 -0
  214. package/dist/transport/http/byte-stream.d.ts +17 -0
  215. package/dist/transport/http/byte-stream.js +86 -0
  216. package/dist/transport/http/index.d.ts +0 -1
  217. package/dist/transport/http/index.js +0 -1
  218. package/dist/transport/http/response.d.ts +2 -2
  219. package/dist/transport/http/response.js +2 -2
  220. package/dist/transport/http/stream.d.ts +2 -2
  221. package/dist/transport/http/stream.js +8 -8
  222. package/dist/transport/http/transport.d.ts +0 -1
  223. package/dist/transport/http/transport.js +36 -15
  224. package/dist/transport/index.d.ts +0 -1
  225. package/dist/transport/index.js +0 -1
  226. package/dist/transport/transport.d.ts +0 -1
  227. package/dist/transport/transport.js +0 -1
  228. package/dist/transport/websocket/connection.d.ts +2 -2
  229. package/dist/transport/websocket/connection.js +12 -25
  230. package/dist/transport/websocket/exchange.d.ts +1 -2
  231. package/dist/transport/websocket/exchange.js +6 -10
  232. package/dist/transport/websocket/index.d.ts +0 -1
  233. package/dist/transport/websocket/index.js +0 -1
  234. package/dist/transport/websocket/transport.d.ts +0 -1
  235. package/dist/transport/websocket/transport.js +8 -20
  236. package/package.json +21 -18
  237. package/dist/auth/auth.d.ts.map +0 -1
  238. package/dist/auth/auth.js.map +0 -1
  239. package/dist/auth/authorization.d.ts.map +0 -1
  240. package/dist/auth/authorization.js.map +0 -1
  241. package/dist/auth/credential.d.ts.map +0 -1
  242. package/dist/auth/credential.js.map +0 -1
  243. package/dist/auth/identity.d.ts.map +0 -1
  244. package/dist/auth/identity.js.map +0 -1
  245. package/dist/auth/index.d.ts.map +0 -1
  246. package/dist/auth/index.js.map +0 -1
  247. package/dist/auth/provision.d.ts.map +0 -1
  248. package/dist/auth/provision.js.map +0 -1
  249. package/dist/client/admission.d.ts.map +0 -1
  250. package/dist/client/admission.js.map +0 -1
  251. package/dist/client/client.d.ts.map +0 -1
  252. package/dist/client/client.js.map +0 -1
  253. package/dist/client/credential.d.ts.map +0 -1
  254. package/dist/client/credential.js.map +0 -1
  255. package/dist/client/index.d.ts.map +0 -1
  256. package/dist/client/index.js.map +0 -1
  257. package/dist/client/request.d.ts.map +0 -1
  258. package/dist/client/request.js.map +0 -1
  259. package/dist/client/result.d.ts.map +0 -1
  260. package/dist/client/result.js.map +0 -1
  261. package/dist/client/routing-control.d.ts.map +0 -1
  262. package/dist/client/routing-control.js.map +0 -1
  263. package/dist/domain/binding.d.ts +0 -24
  264. package/dist/domain/binding.d.ts.map +0 -1
  265. package/dist/domain/binding.js +0 -69
  266. package/dist/domain/binding.js.map +0 -1
  267. package/dist/domain/callable.d.ts +0 -25
  268. package/dist/domain/callable.d.ts.map +0 -1
  269. package/dist/domain/callable.js +0 -70
  270. package/dist/domain/callable.js.map +0 -1
  271. package/dist/domain/domain.typecheck.d.ts +0 -2
  272. package/dist/domain/domain.typecheck.d.ts.map +0 -1
  273. package/dist/domain/domain.typecheck.js +0 -69
  274. package/dist/domain/domain.typecheck.js.map +0 -1
  275. package/dist/domain/index.d.ts +0 -4
  276. package/dist/domain/index.d.ts.map +0 -1
  277. package/dist/domain/index.js +0 -2
  278. package/dist/domain/index.js.map +0 -1
  279. package/dist/domain/node.d.ts +0 -10
  280. package/dist/domain/node.d.ts.map +0 -1
  281. package/dist/domain/node.js +0 -6
  282. package/dist/domain/node.js.map +0 -1
  283. package/dist/errors/client-error.d.ts.map +0 -1
  284. package/dist/errors/client-error.js.map +0 -1
  285. package/dist/errors/index.d.ts.map +0 -1
  286. package/dist/errors/index.js.map +0 -1
  287. package/dist/errors/miss-error.d.ts.map +0 -1
  288. package/dist/errors/miss-error.js.map +0 -1
  289. package/dist/errors/protocol-error.d.ts.map +0 -1
  290. package/dist/errors/protocol-error.js.map +0 -1
  291. package/dist/errors/response-error.d.ts.map +0 -1
  292. package/dist/errors/response-error.js.map +0 -1
  293. package/dist/errors/stale-route-error.d.ts.map +0 -1
  294. package/dist/errors/stale-route-error.js.map +0 -1
  295. package/dist/errors/transport-error.d.ts.map +0 -1
  296. package/dist/errors/transport-error.js.map +0 -1
  297. package/dist/graph/errors.d.ts.map +0 -1
  298. package/dist/graph/errors.js.map +0 -1
  299. package/dist/graph/graph.d.ts.map +0 -1
  300. package/dist/graph/graph.js.map +0 -1
  301. package/dist/graph/index.d.ts.map +0 -1
  302. package/dist/graph/index.js.map +0 -1
  303. package/dist/graph/mutation.d.ts.map +0 -1
  304. package/dist/graph/mutation.js.map +0 -1
  305. package/dist/graph/page/index.d.ts.map +0 -1
  306. package/dist/graph/page/index.js.map +0 -1
  307. package/dist/graph/page/neighbors.d.ts.map +0 -1
  308. package/dist/graph/page/neighbors.js.map +0 -1
  309. package/dist/graph/page/page.d.ts.map +0 -1
  310. package/dist/graph/page/page.js.map +0 -1
  311. package/dist/graph/page-contract.d.ts.map +0 -1
  312. package/dist/graph/page-contract.js.map +0 -1
  313. package/dist/graph/query.d.ts.map +0 -1
  314. package/dist/graph/query.js.map +0 -1
  315. package/dist/graph/read.d.ts.map +0 -1
  316. package/dist/graph/read.js.map +0 -1
  317. package/dist/index.d.ts.map +0 -1
  318. package/dist/index.js.map +0 -1
  319. package/dist/pacer/batcher/batcher.d.ts.map +0 -1
  320. package/dist/pacer/batcher/batcher.js.map +0 -1
  321. package/dist/pacer/batcher/defaults.d.ts.map +0 -1
  322. package/dist/pacer/batcher/defaults.js.map +0 -1
  323. package/dist/pacer/batcher/index.d.ts.map +0 -1
  324. package/dist/pacer/batcher/index.js.map +0 -1
  325. package/dist/pacer/index.d.ts.map +0 -1
  326. package/dist/pacer/index.js.map +0 -1
  327. package/dist/pacer/limiter/defaults.d.ts.map +0 -1
  328. package/dist/pacer/limiter/defaults.js.map +0 -1
  329. package/dist/pacer/limiter/index.d.ts.map +0 -1
  330. package/dist/pacer/limiter/index.js.map +0 -1
  331. package/dist/pacer/limiter/limiter.d.ts.map +0 -1
  332. package/dist/pacer/limiter/limiter.js.map +0 -1
  333. package/dist/pacer/queue/defaults.d.ts.map +0 -1
  334. package/dist/pacer/queue/defaults.js.map +0 -1
  335. package/dist/pacer/queue/index.d.ts.map +0 -1
  336. package/dist/pacer/queue/index.js.map +0 -1
  337. package/dist/pacer/queue/queue.d.ts.map +0 -1
  338. package/dist/pacer/queue/queue.js.map +0 -1
  339. package/dist/pacer/retry/defaults.d.ts.map +0 -1
  340. package/dist/pacer/retry/defaults.js.map +0 -1
  341. package/dist/pacer/retry/index.d.ts.map +0 -1
  342. package/dist/pacer/retry/index.js.map +0 -1
  343. package/dist/pacer/retry/retry.d.ts.map +0 -1
  344. package/dist/pacer/retry/retry.js.map +0 -1
  345. package/dist/pool/index.d.ts.map +0 -1
  346. package/dist/pool/index.js.map +0 -1
  347. package/dist/pool/pool.d.ts.map +0 -1
  348. package/dist/pool/pool.js.map +0 -1
  349. package/dist/pool/target.d.ts.map +0 -1
  350. package/dist/pool/target.js.map +0 -1
  351. package/dist/schema/admission.d.ts.map +0 -1
  352. package/dist/schema/admission.js.map +0 -1
  353. package/dist/schema/contracts.d.ts.map +0 -1
  354. package/dist/schema/contracts.js.map +0 -1
  355. package/dist/schema/index.d.ts.map +0 -1
  356. package/dist/schema/index.js.map +0 -1
  357. package/dist/schema/introspection.d.ts.map +0 -1
  358. package/dist/schema/introspection.js.map +0 -1
  359. package/dist/schema/operation.d.ts.map +0 -1
  360. package/dist/schema/operation.js.map +0 -1
  361. package/dist/schema/schema.d.ts.map +0 -1
  362. package/dist/schema/schema.js.map +0 -1
  363. package/dist/session/context/control.d.ts.map +0 -1
  364. package/dist/session/context/control.js.map +0 -1
  365. package/dist/session/context/index.d.ts.map +0 -1
  366. package/dist/session/context/index.js.map +0 -1
  367. package/dist/session/context/limits.d.ts.map +0 -1
  368. package/dist/session/context/limits.js.map +0 -1
  369. package/dist/session/context/operation.d.ts.map +0 -1
  370. package/dist/session/context/operation.js.map +0 -1
  371. package/dist/session/context/policy.d.ts.map +0 -1
  372. package/dist/session/context/policy.js.map +0 -1
  373. package/dist/session/discovery/bundle.d.ts.map +0 -1
  374. package/dist/session/discovery/bundle.js.map +0 -1
  375. package/dist/session/discovery/discovery.d.ts.map +0 -1
  376. package/dist/session/discovery/discovery.js.map +0 -1
  377. package/dist/session/discovery/index.d.ts.map +0 -1
  378. package/dist/session/discovery/index.js.map +0 -1
  379. package/dist/session/discovery/publication.d.ts.map +0 -1
  380. package/dist/session/discovery/publication.js.map +0 -1
  381. package/dist/session/discovery/snapshot.d.ts.map +0 -1
  382. package/dist/session/discovery/snapshot.js.map +0 -1
  383. package/dist/session/index.d.ts.map +0 -1
  384. package/dist/session/index.js.map +0 -1
  385. package/dist/session/routing/auth.d.ts.map +0 -1
  386. package/dist/session/routing/auth.js.map +0 -1
  387. package/dist/session/routing/bound.d.ts +0 -7
  388. package/dist/session/routing/bound.d.ts.map +0 -1
  389. package/dist/session/routing/bound.js +0 -2
  390. package/dist/session/routing/bound.js.map +0 -1
  391. package/dist/session/routing/cache.d.ts.map +0 -1
  392. package/dist/session/routing/cache.js.map +0 -1
  393. package/dist/session/routing/dispatch.d.ts.map +0 -1
  394. package/dist/session/routing/dispatch.js.map +0 -1
  395. package/dist/session/routing/envelope.d.ts.map +0 -1
  396. package/dist/session/routing/envelope.js.map +0 -1
  397. package/dist/session/routing/index.d.ts.map +0 -1
  398. package/dist/session/routing/index.js.map +0 -1
  399. package/dist/session/routing/request.d.ts.map +0 -1
  400. package/dist/session/routing/request.js.map +0 -1
  401. package/dist/session/session.d.ts.map +0 -1
  402. package/dist/session/session.js.map +0 -1
  403. package/dist/session/session.typecheck.d.ts.map +0 -1
  404. package/dist/session/session.typecheck.js.map +0 -1
  405. package/dist/session/views/catalog.d.ts.map +0 -1
  406. package/dist/session/views/catalog.js.map +0 -1
  407. package/dist/session/views/index.d.ts.map +0 -1
  408. package/dist/session/views/index.js.map +0 -1
  409. package/dist/session/views/resolve.d.ts.map +0 -1
  410. package/dist/session/views/resolve.js.map +0 -1
  411. package/dist/store/entity-index.d.ts.map +0 -1
  412. package/dist/store/entity-index.js.map +0 -1
  413. package/dist/store/index.d.ts.map +0 -1
  414. package/dist/store/index.js.map +0 -1
  415. package/dist/store/memory.d.ts.map +0 -1
  416. package/dist/store/memory.js.map +0 -1
  417. package/dist/store/mutation.d.ts.map +0 -1
  418. package/dist/store/mutation.js.map +0 -1
  419. package/dist/store/observe.d.ts.map +0 -1
  420. package/dist/store/observe.js.map +0 -1
  421. package/dist/store/optimistic.d.ts.map +0 -1
  422. package/dist/store/optimistic.js.map +0 -1
  423. package/dist/store/query-key.d.ts.map +0 -1
  424. package/dist/store/query-key.js.map +0 -1
  425. package/dist/store/shape.d.ts.map +0 -1
  426. package/dist/store/shape.js.map +0 -1
  427. package/dist/store/store.d.ts.map +0 -1
  428. package/dist/store/store.js.map +0 -1
  429. package/dist/store/store.typecheck.d.ts.map +0 -1
  430. package/dist/store/store.typecheck.js.map +0 -1
  431. package/dist/transport/auto/decision.d.ts.map +0 -1
  432. package/dist/transport/auto/decision.js.map +0 -1
  433. package/dist/transport/auto/fallback.d.ts.map +0 -1
  434. package/dist/transport/auto/fallback.js.map +0 -1
  435. package/dist/transport/auto/index.d.ts.map +0 -1
  436. package/dist/transport/auto/index.js.map +0 -1
  437. package/dist/transport/auto/transport.d.ts.map +0 -1
  438. package/dist/transport/auto/transport.js.map +0 -1
  439. package/dist/transport/auto/warning.d.ts.map +0 -1
  440. package/dist/transport/auto/warning.js.map +0 -1
  441. package/dist/transport/deadline.d.ts.map +0 -1
  442. package/dist/transport/deadline.js.map +0 -1
  443. package/dist/transport/http/index.d.ts.map +0 -1
  444. package/dist/transport/http/index.js.map +0 -1
  445. package/dist/transport/http/response.d.ts.map +0 -1
  446. package/dist/transport/http/response.js.map +0 -1
  447. package/dist/transport/http/stream.d.ts.map +0 -1
  448. package/dist/transport/http/stream.js.map +0 -1
  449. package/dist/transport/http/transport.d.ts.map +0 -1
  450. package/dist/transport/http/transport.js.map +0 -1
  451. package/dist/transport/index.d.ts.map +0 -1
  452. package/dist/transport/index.js.map +0 -1
  453. package/dist/transport/transport.d.ts.map +0 -1
  454. package/dist/transport/transport.js.map +0 -1
  455. package/dist/transport/websocket/connection.d.ts.map +0 -1
  456. package/dist/transport/websocket/connection.js.map +0 -1
  457. package/dist/transport/websocket/exchange.d.ts.map +0 -1
  458. package/dist/transport/websocket/exchange.js.map +0 -1
  459. package/dist/transport/websocket/index.d.ts.map +0 -1
  460. package/dist/transport/websocket/index.js.map +0 -1
  461. package/dist/transport/websocket/transport.d.ts.map +0 -1
  462. package/dist/transport/websocket/transport.js.map +0 -1
@@ -0,0 +1,36 @@
1
+ import type { Path as PathValue, PathLike } from '@astrale-os/kernel-core/path';
2
+ import type { CallableInputOf, CallableOutputOf, CallableResultOf, Domain, MethodInheritance, ResolvedFunction, ResolvedMethod } from '@astrale-os/kernel-dsl/v1';
3
+ import type { Revision } from '@astrale-os/kernel-dsl/v1/addressing';
4
+ import { type Key as KeyType } from '@astrale-os/kernel-dsl/v1/addressing';
5
+ import type { Binary, Input } from '../client/index.js';
6
+ declare const REFERENCE_INPUT: unique symbol;
7
+ declare const REFERENCE_OUTPUT: unique symbol;
8
+ export interface CallableReference<InputValue extends Input = Input, Output = unknown> {
9
+ readonly origin: KeyType.Origin;
10
+ readonly revision: Revision;
11
+ readonly callable: KeyType.Callable;
12
+ readonly target: PathValue;
13
+ readonly outputMode: 'value' | 'stream' | 'binary';
14
+ readonly [REFERENCE_INPUT]?: InputValue;
15
+ readonly [REFERENCE_OUTPUT]?: Output;
16
+ }
17
+ export interface InstanceCallableReference<InputValue extends Input = Input, Output = unknown> {
18
+ (receiver: PathLike): CallableReference<InputValue, Output>;
19
+ readonly origin: KeyType.Origin;
20
+ readonly revision: Revision;
21
+ readonly callable: KeyType.Callable;
22
+ readonly outputMode: 'value' | 'stream' | 'binary';
23
+ }
24
+ export type InputOfReference<Reference extends CallableReference> = Reference extends CallableReference<infer InputValue, unknown> ? InputValue : never;
25
+ export type OutputOfReference<Reference extends CallableReference> = Reference extends CallableReference<infer _Input, infer Output> ? Output : never;
26
+ type ReferenceInput<Callable> = unknown extends CallableInputOf<Callable> ? Input : Extract<CallableInputOf<Callable>, Input>;
27
+ type ReferenceOutput<Callable> = unknown extends CallableOutputOf<Callable> ? unknown : CallableResultOf<Callable, Binary>;
28
+ type ExecutableMethodInheritance = Exclude<MethodInheritance, 'abstract'>;
29
+ type ExecutableStaticMethod = ResolvedMethod<unknown, unknown, true, ExecutableMethodInheritance>;
30
+ type ExecutableInstanceMethod = ResolvedMethod<unknown, unknown, false, ExecutableMethodInheritance>;
31
+ /** Project one exact resolved Function or static Method into a typed Client reference. */
32
+ export declare function reference<const Callable extends ResolvedFunction | ExecutableStaticMethod>(domain: Pick<Domain, 'origin' | 'revision'>, callable: Callable): CallableReference<ReferenceInput<Callable>, ReferenceOutput<Callable>>;
33
+ /** Project one exact resolved instance Method into a receiver-bound typed Client reference. */
34
+ export declare function reference<const Callable extends ExecutableInstanceMethod>(domain: Pick<Domain, 'origin' | 'revision'>, callable: Callable): InstanceCallableReference<ReferenceInput<Callable>, ReferenceOutput<Callable>>;
35
+ export declare function admitReference(input: CallableReference): CallableReference;
36
+ export {};
@@ -0,0 +1,74 @@
1
+ import { Path } from '@astrale-os/kernel-core/path';
2
+ import { callableAddress, Key, patterns, } from '@astrale-os/kernel-dsl/v1/addressing';
3
+ export function reference(domain, callable) {
4
+ if ('owner' in callable && callable.inheritance === 'abstract')
5
+ invalid();
6
+ const common = Object.freeze({
7
+ origin: domain.origin,
8
+ revision: domain.revision,
9
+ callable: callable.key,
10
+ outputMode: callable.output.mode,
11
+ });
12
+ if ('owner' in callable && !callable.static) {
13
+ const bind = (receiver) => admitReference({
14
+ ...common,
15
+ target: Path.instanceMethod(Path.from(receiver), callable.name),
16
+ });
17
+ return Object.assign(bind, common);
18
+ }
19
+ const target = 'owner' in callable
20
+ ? Path.staticMethod(Path.project(callable.owner.ref), callable.name)
21
+ : Path.project(callable.ref);
22
+ return admitReference({ ...common, target });
23
+ }
24
+ export function admitReference(input) {
25
+ if (input === null || typeof input !== 'object')
26
+ invalid();
27
+ if (typeof input.origin !== 'string' ||
28
+ !patterns.origin.test(input.origin) ||
29
+ typeof input.revision !== 'string' ||
30
+ !patterns.revision.test(input.revision) ||
31
+ typeof input.callable !== 'string' ||
32
+ !Key.is(input.callable) ||
33
+ Key.origin(input.callable) !== input.origin ||
34
+ !['value', 'stream', 'binary'].includes(input.outputMode))
35
+ invalid();
36
+ const target = Path.from(input.target);
37
+ if (!matchesCallable(target, input.callable))
38
+ invalid();
39
+ return Object.freeze({
40
+ origin: input.origin,
41
+ revision: input.revision,
42
+ callable: input.callable,
43
+ target,
44
+ outputMode: input.outputMode,
45
+ });
46
+ }
47
+ function matchesCallable(target, callable) {
48
+ const coordinate = callableAddress(callable);
49
+ const { anchor, steps } = target.ast;
50
+ const last = steps.at(-1);
51
+ if (coordinate.kind === 'method') {
52
+ if (last?.kind !== 'method' || last.name !== coordinate.name)
53
+ return false;
54
+ if (last.dispatch === 'instance')
55
+ return true;
56
+ const owner = steps.at(-2);
57
+ return (anchor.kind === 'domain' &&
58
+ anchor.origin === Key.origin(callable) &&
59
+ steps.length === 2 &&
60
+ owner?.kind === 'projection' &&
61
+ owner.projection.kind === 'class' &&
62
+ owner.projection.name === coordinate.owner.name);
63
+ }
64
+ const projection = steps[0];
65
+ return (anchor.kind === 'domain' &&
66
+ anchor.origin === Key.origin(callable) &&
67
+ steps.length === 1 &&
68
+ projection?.kind === 'projection' &&
69
+ projection.projection.kind === 'function' &&
70
+ projection.projection.name === coordinate.name);
71
+ }
72
+ function invalid() {
73
+ throw new TypeError('Callable reference is invalid.');
74
+ }
@@ -1,4 +1,4 @@
1
- import type { invocation } from '@astrale-os/kernel-protocol';
1
+ import type * as invocation from '@astrale-os/kernel-protocol/invocation';
2
2
  import type { SessionOperation } from '../context/index.js';
3
3
  export interface Auth {
4
4
  readonly credential?: string;
@@ -16,4 +16,3 @@ export interface EffectiveAuth {
16
16
  }
17
17
  export declare function admitSessionAuth(input: SessionAuth | undefined): SessionAuth | undefined;
18
18
  export declare function resolveAuth(resolver: SessionAuth | undefined, call: invocation.Call, operation: SessionOperation): Promise<EffectiveAuth>;
19
- //# sourceMappingURL=auth.d.ts.map
@@ -1,4 +1,4 @@
1
- import { invocation as protocol } from '@astrale-os/kernel-protocol';
1
+ import * as protocol from '@astrale-os/kernel-protocol/invocation';
2
2
  import { ClientError } from '../../errors/index.js';
3
3
  import { runSessionOperation } from '../context/index.js';
4
4
  export function admitSessionAuth(input) {
@@ -37,4 +37,3 @@ export async function resolveAuth(resolver, call, operation) {
37
37
  : protocol.acceptDelegate(input.delegate);
38
38
  return Object.freeze({ credential, delegate });
39
39
  }
40
- //# sourceMappingURL=auth.js.map
@@ -1,21 +1,41 @@
1
- import type { invocation } from '@astrale-os/kernel-protocol';
1
+ import { invocation } from '@astrale-os/kernel-protocol';
2
2
  import type { EffectiveAuth } from './auth.js';
3
- import type { BoundTarget } from './bound.js';
3
+ import type { SchemaExpectation } from './expectation.js';
4
4
  export interface LearnedRoute {
5
5
  readonly route: invocation.Route;
6
6
  readonly credential?: string;
7
7
  readonly expiresAt: number;
8
8
  }
9
- /** Confidential, process-local warm routing state owned by exactly one ClientSession. */
9
+ export interface PersistedRoute extends LearnedRoute {
10
+ /** HMAC over this entry and its exact authority partition. */
11
+ readonly integrity: string;
12
+ }
13
+ export interface SessionRouteArtifact {
14
+ readonly version: 1;
15
+ readonly entries: Readonly<Record<string, PersistedRoute>>;
16
+ }
17
+ /** Caller-owned persistence for confidential route artifacts. */
18
+ export interface SessionRouteStore {
19
+ read(): unknown;
20
+ write(artifact: SessionRouteArtifact): void;
21
+ }
22
+ /** Confidential warm routing state owned by exactly one ClientSession. */
10
23
  export declare class RouteCache {
11
24
  private readonly maximumAgeMs;
12
25
  private readonly maximumSize;
13
26
  private readonly entries;
14
- constructor(maximumAgeMs: number, maximumSize?: number);
15
- key(source: string, call: invocation.Call, auth: EffectiveAuth, expected?: BoundTarget): Promise<string>;
16
- get(key: string, now?: number): LearnedRoute | undefined;
17
- learn(key: string, route: invocation.Route, credential: string | undefined, now?: number): LearnedRoute;
27
+ private readonly keyTokens;
28
+ private readonly store?;
29
+ constructor(maximumAgeMs: number, maximumSize?: number, store?: SessionRouteStore);
30
+ key(source: string, call: invocation.Call, auth: EffectiveAuth, expected?: SchemaExpectation): Promise<string>;
31
+ get(key: string, sourceCredential?: string, now?: number): Promise<LearnedRoute | undefined>;
32
+ learn(key: string, route: invocation.Route, credential: string | undefined, sourceCredential?: string, now?: number): Promise<LearnedRoute>;
18
33
  delete(key: string): void;
34
+ /** Clear this Session's memory without deleting caller-owned persistent state. */
19
35
  clear(): void;
36
+ private invalidate;
37
+ private reserve;
38
+ private restore;
39
+ private restoreInput;
40
+ private persist;
20
41
  }
21
- //# sourceMappingURL=cache.d.ts.map
@@ -1,12 +1,18 @@
1
+ import { invocation } from '@astrale-os/kernel-protocol';
1
2
  import { DEFAULT_MAXIMUM_ROUTES } from '../context/index.js';
2
- /** Confidential, process-local warm routing state owned by exactly one ClientSession. */
3
+ const DESTINATION_CREDENTIAL_REFRESH_SKEW_MS = 5_000;
4
+ /** Confidential warm routing state owned by exactly one ClientSession. */
3
5
  export class RouteCache {
4
6
  maximumAgeMs;
5
7
  maximumSize;
6
8
  entries = new Map();
7
- constructor(maximumAgeMs, maximumSize = DEFAULT_MAXIMUM_ROUTES) {
9
+ keyTokens = new Map();
10
+ store;
11
+ constructor(maximumAgeMs, maximumSize = DEFAULT_MAXIMUM_ROUTES, store) {
8
12
  this.maximumAgeMs = maximumAgeMs;
9
13
  this.maximumSize = maximumSize;
14
+ this.store = store === undefined ? undefined : captureSessionRouteStore(store);
15
+ this.restore();
10
16
  }
11
17
  async key(source, call, auth, expected) {
12
18
  const credential = auth.credential === undefined ? 'anonymous' : await digestText(auth.credential);
@@ -16,35 +22,36 @@ export class RouteCache {
16
22
  call.target,
17
23
  credential,
18
24
  delegate,
19
- expected === undefined
20
- ? null
21
- : [
22
- expected.schema,
23
- expected.publication === undefined
24
- ? null
25
- : [
26
- expected.publication.origin,
27
- expected.publication.revision,
28
- expected.publication.etag,
29
- ],
30
- ],
25
+ expected === undefined ? null : [expected.origin, expected.revision],
31
26
  ]);
32
27
  }
33
- get(key, now = Date.now()) {
34
- const entry = this.entries.get(key);
35
- if (entry === undefined)
28
+ async get(key, sourceCredential, now = Date.now()) {
29
+ const cached = this.entries.get(key);
30
+ if (cached === undefined)
36
31
  return undefined;
37
- if (entry.expiresAt <= now) {
38
- this.entries.delete(key);
32
+ const token = this.keyTokens.get(key);
33
+ if (cached.learned.expiresAt <= now) {
34
+ this.invalidate(key);
39
35
  return undefined;
40
36
  }
37
+ if (cached.integrity !== undefined) {
38
+ const matches = sourceCredential !== undefined &&
39
+ (await matchesIntegrity(sourceCredential, key, cached.sealed ?? cached.learned, cached.integrity));
40
+ if (this.keyTokens.get(key) !== token || this.entries.get(key) !== cached) {
41
+ return undefined;
42
+ }
43
+ if (!matches) {
44
+ this.invalidate(key);
45
+ return undefined;
46
+ }
47
+ }
41
48
  this.entries.delete(key);
42
- this.entries.set(key, entry);
43
- return entry;
49
+ this.entries.set(key, cached);
50
+ return cached.learned;
44
51
  }
45
- learn(key, route, credential, now = Date.now()) {
52
+ async learn(key, route, credential, sourceCredential, now = Date.now()) {
46
53
  const credentialExpiry = credential === undefined ? undefined : jwtExpiry(credential);
47
- const expiresAt = Math.min(now + this.maximumAgeMs, credentialExpiry ?? Number.POSITIVE_INFINITY);
54
+ const expiresAt = Math.min(now + this.maximumAgeMs, refreshBoundary(credentialExpiry));
48
55
  const entry = Object.freeze({
49
56
  route,
50
57
  ...(credential === undefined ? {} : { credential }),
@@ -55,22 +62,202 @@ export class RouteCache {
55
62
  return entry;
56
63
  if (expiresAt <= now)
57
64
  return entry;
65
+ const token = this.reserve(key);
66
+ let integrity;
67
+ if (this.store !== undefined && sourceCredential !== undefined) {
68
+ try {
69
+ integrity = await routeIntegrity(sourceCredential, key, entry);
70
+ }
71
+ catch {
72
+ // Integrity support is a persistence optimization; the learned route remains usable in memory.
73
+ }
74
+ }
75
+ if (this.keyTokens.get(key) !== token) {
76
+ return entry;
77
+ }
58
78
  this.entries.delete(key);
59
79
  while (this.entries.size >= this.maximumSize) {
60
80
  const oldest = this.entries.keys().next().value;
61
81
  if (oldest === undefined)
62
82
  break;
63
83
  this.entries.delete(oldest);
84
+ this.keyTokens.delete(oldest);
64
85
  }
65
- this.entries.set(key, entry);
86
+ this.entries.set(key, Object.freeze({
87
+ learned: entry,
88
+ ...(integrity === undefined ? {} : { sealed: entry, integrity }),
89
+ }));
90
+ this.persist();
66
91
  return entry;
67
92
  }
68
93
  delete(key) {
69
- this.entries.delete(key);
94
+ this.invalidate(key);
70
95
  }
96
+ /** Clear this Session's memory without deleting caller-owned persistent state. */
71
97
  clear() {
98
+ this.keyTokens.clear();
72
99
  this.entries.clear();
73
100
  }
101
+ invalidate(key) {
102
+ this.keyTokens.delete(key);
103
+ if (this.entries.delete(key))
104
+ this.persist();
105
+ }
106
+ reserve(key) {
107
+ const token = Object.freeze({});
108
+ this.keyTokens.set(key, token);
109
+ return token;
110
+ }
111
+ restore(now = Date.now()) {
112
+ if (this.store === undefined)
113
+ return;
114
+ try {
115
+ this.restoreInput(this.store.read(), now);
116
+ }
117
+ catch {
118
+ this.keyTokens.clear();
119
+ this.entries.clear();
120
+ }
121
+ }
122
+ restoreInput(input, now) {
123
+ if (input === undefined)
124
+ return;
125
+ if (typeof input !== 'object' || input === null || Array.isArray(input))
126
+ return;
127
+ const artifact = input;
128
+ if (artifact.version !== 1 ||
129
+ typeof artifact.entries !== 'object' ||
130
+ artifact.entries === null ||
131
+ Array.isArray(artifact.entries)) {
132
+ return;
133
+ }
134
+ let count = 0;
135
+ for (const key in artifact.entries) {
136
+ if (!Object.hasOwn(artifact.entries, key))
137
+ continue;
138
+ count += 1;
139
+ if (count > this.maximumSize) {
140
+ this.keyTokens.clear();
141
+ this.entries.clear();
142
+ return;
143
+ }
144
+ const value = Reflect.get(artifact.entries, key);
145
+ const entry = admitStoredEntry(value, now, this.maximumAgeMs);
146
+ if (entry === undefined)
147
+ continue;
148
+ this.reserve(key);
149
+ this.entries.set(key, entry);
150
+ }
151
+ }
152
+ persist() {
153
+ if (this.store === undefined)
154
+ return;
155
+ const entries = Object.fromEntries([...this.entries].flatMap(([key, cached]) => cached.integrity === undefined
156
+ ? []
157
+ : [
158
+ [
159
+ key,
160
+ Object.freeze({
161
+ ...(cached.sealed ?? cached.learned),
162
+ integrity: cached.integrity,
163
+ }),
164
+ ],
165
+ ]));
166
+ try {
167
+ this.store.write(Object.freeze({ version: 1, entries: Object.freeze(entries) }));
168
+ }
169
+ catch {
170
+ // A cache-store outage must not turn a valid invocation into a product failure.
171
+ }
172
+ }
173
+ }
174
+ function captureSessionRouteStore(input) {
175
+ if (input === null ||
176
+ typeof input !== 'object' ||
177
+ typeof input.read !== 'function' ||
178
+ typeof input.write !== 'function') {
179
+ throw new TypeError('Session route store capability is invalid.');
180
+ }
181
+ const read = input.read;
182
+ const write = input.write;
183
+ return Object.freeze({
184
+ read: () => read.call(input),
185
+ write: (artifact) => write.call(input, artifact),
186
+ });
187
+ }
188
+ function admitStoredEntry(input, now, maximumAgeMs) {
189
+ try {
190
+ if (typeof input !== 'object' || input === null || Array.isArray(input))
191
+ return undefined;
192
+ const value = input;
193
+ if ((value.credential !== undefined && typeof value.credential !== 'string') ||
194
+ typeof value.expiresAt !== 'number' ||
195
+ !Number.isSafeInteger(value.expiresAt) ||
196
+ typeof value.integrity !== 'string' ||
197
+ !/^[A-Za-z0-9_-]{43}$/u.test(value.integrity)) {
198
+ return undefined;
199
+ }
200
+ const credentialExpiry = value.credential === undefined ? undefined : jwtExpiry(value.credential);
201
+ if (value.credential !== undefined && credentialExpiry === undefined)
202
+ return undefined;
203
+ const sealed = Object.freeze({
204
+ route: invocation.acceptRoute(value.route),
205
+ ...(value.credential === undefined ? {} : { credential: value.credential }),
206
+ expiresAt: value.expiresAt,
207
+ });
208
+ const expiresAt = Math.min(value.expiresAt, now + maximumAgeMs, refreshBoundary(credentialExpiry));
209
+ if (expiresAt <= now)
210
+ return undefined;
211
+ return Object.freeze({
212
+ learned: Object.freeze({
213
+ route: sealed.route,
214
+ ...(sealed.credential === undefined ? {} : { credential: sealed.credential }),
215
+ expiresAt,
216
+ }),
217
+ sealed,
218
+ integrity: value.integrity,
219
+ });
220
+ }
221
+ catch {
222
+ return undefined;
223
+ }
224
+ }
225
+ function refreshBoundary(credentialExpiry) {
226
+ return credentialExpiry === undefined
227
+ ? Number.POSITIVE_INFINITY
228
+ : credentialExpiry - DESTINATION_CREDENTIAL_REFRESH_SKEW_MS;
229
+ }
230
+ async function routeIntegrity(sourceCredential, key, learned) {
231
+ if (globalThis.crypto?.subtle === undefined) {
232
+ throw new TypeError('Persistent Session route integrity requires Web Crypto HMAC support.');
233
+ }
234
+ const algorithm = Object.freeze({ name: 'HMAC', hash: 'SHA-256' });
235
+ const cryptographicKey = await globalThis.crypto.subtle.importKey('raw', new TextEncoder().encode(sourceCredential), algorithm, false, ['sign']);
236
+ const signature = await globalThis.crypto.subtle.sign(algorithm, cryptographicKey, new TextEncoder().encode(integrityMaterial(key, learned)));
237
+ return encodeBase64Url(new Uint8Array(signature));
238
+ }
239
+ async function matchesIntegrity(sourceCredential, key, learned, expected) {
240
+ try {
241
+ return (await routeIntegrity(sourceCredential, key, learned)) === expected;
242
+ }
243
+ catch {
244
+ return false;
245
+ }
246
+ }
247
+ function integrityMaterial(key, learned) {
248
+ return JSON.stringify({
249
+ version: 1,
250
+ key,
251
+ route: learned.route,
252
+ ...(learned.credential === undefined ? {} : { credential: learned.credential }),
253
+ expiresAt: learned.expiresAt,
254
+ });
255
+ }
256
+ function encodeBase64Url(input) {
257
+ let binary = '';
258
+ for (const byte of input)
259
+ binary += String.fromCharCode(byte);
260
+ return globalThis.btoa(binary).replace(/\+/gu, '-').replace(/\//gu, '_').replace(/=+$/gu, '');
74
261
  }
75
262
  function canonicalDelegate(input) {
76
263
  return JSON.stringify({
@@ -124,4 +311,3 @@ function decodeBase64(input) {
124
311
  }
125
312
  throw new TypeError('Session route caching requires base64 decoding support.');
126
313
  }
127
- //# sourceMappingURL=cache.js.map
@@ -1,11 +1,10 @@
1
- import type { IssuerId } from '@astrale-os/kernel-core/auth';
1
+ import type { IssuerId } from '@astrale-os/kernel-core/auth/issuer';
2
2
  import type { Call, Result } from '../../client/index.js';
3
3
  import type { SessionOperation, SessionPolicy } from '../context/index.js';
4
- import type { SessionDiscovery } from '../discovery/index.js';
5
4
  import type { SessionAuth } from './auth.js';
6
- import type { BoundTarget } from './bound.js';
7
5
  import type { RouteCache } from './cache.js';
8
6
  import type { ClientPoolCapability } from './envelope.js';
7
+ import type { SchemaExpectation } from './expectation.js';
9
8
  import type { SessionEnvelopeTransport, SessionRequestOptions } from './request.js';
10
9
  export interface SessionDispatcherOptions {
11
10
  readonly kernel: IssuerId;
@@ -16,20 +15,17 @@ export interface SessionDispatcherOptions {
16
15
  readonly cache: RouteCache;
17
16
  readonly policy: Readonly<SessionPolicy>;
18
17
  readonly envelopeTransport: SessionEnvelopeTransport;
19
- readonly discovery: SessionDiscovery;
20
18
  readonly requireOpen: () => void;
21
19
  }
22
20
  export declare class SessionDispatcher {
23
21
  private readonly state;
24
22
  constructor(state: SessionDispatcherOptions);
25
- dispatch(input: Call, options: SessionRequestOptions, operation: SessionOperation, expected?: BoundTarget): Promise<Result>;
23
+ dispatch(input: Call, options: SessionRequestOptions, operation: SessionOperation, expected?: SchemaExpectation): Promise<Result>;
26
24
  private dispatchSource;
27
25
  private followSource;
28
26
  private dispatchDestinationWithRecovery;
29
27
  private dispatchDestination;
30
- private sourceKernel;
31
28
  }
32
29
  export declare function requireResultKind<Kind extends 'value' | 'stream' | 'binary'>(expected: Kind, result: Result): Extract<Result, {
33
30
  kind: Kind;
34
31
  }>;
35
- //# sourceMappingURL=dispatch.d.ts.map
@@ -1,9 +1,9 @@
1
- import { invocation as invocationProtocol, publication as publications, } from '@astrale-os/kernel-protocol';
1
+ import * as invocationProtocol from '@astrale-os/kernel-protocol/invocation';
2
2
  import { acceptCall, dispatchTrace, isAdmittedMissError, isAdmittedStaleRouteError, } from '../../client/index.js';
3
3
  import { ClientError, ResponseError } from '../../errors/index.js';
4
4
  import { runSessionOperation, sessionTransportOptions, allowEndpoint } from '../context/index.js';
5
5
  import { resolveAuth } from './auth.js';
6
- import { selectEnvelope } from './envelope.js';
6
+ import { selectEnvelope, selectEnvelopeTarget } from './envelope.js';
7
7
  export class SessionDispatcher {
8
8
  state;
9
9
  constructor(state) {
@@ -15,8 +15,8 @@ export class SessionDispatcher {
15
15
  // Authority is resolved before warm lookup so changed credentials or delegation cannot reuse a
16
16
  // carrier minted for a different caller partition.
17
17
  const auth = await resolveAuth(this.state.auth, call, operation);
18
- const source = await this.sourceKernel(operation);
19
- const cacheKey = await this.state.cache.key(source.issuer, call, auth, expected);
18
+ const source = this.state.kernel;
19
+ const cacheKey = await this.state.cache.key(source, call, auth, expected);
20
20
  const dispatch = Object.freeze({
21
21
  call,
22
22
  auth,
@@ -24,7 +24,16 @@ export class SessionDispatcher {
24
24
  cacheKey,
25
25
  ...(expected === undefined ? {} : { expected }),
26
26
  });
27
- const learned = this.state.cache.get(cacheKey);
27
+ let learned = await this.state.cache.get(cacheKey, auth.credential);
28
+ if (learned !== undefined) {
29
+ try {
30
+ requireCachedRoute(learned, source, expected, this.state.envelopeTransport, this.state.websocketAvailable, this.state.policy);
31
+ }
32
+ catch {
33
+ this.state.cache.delete(cacheKey);
34
+ learned = undefined;
35
+ }
36
+ }
28
37
  if (learned !== undefined) {
29
38
  return this.dispatchDestinationWithRecovery(learned, dispatch, options, operation);
30
39
  }
@@ -39,23 +48,23 @@ export class SessionDispatcher {
39
48
  ...sessionTransportOptions(operation, options.idempotencyKey),
40
49
  ...(state.auth.delegate === undefined ? {} : { delegate: state.auth.delegate }),
41
50
  ...(routing === undefined ? {} : { routing }),
42
- ...(state.expected === undefined ? {} : { schema: state.expected.schema }),
51
+ ...(state.expected === undefined ? {} : { schema: { revision: state.expected.revision } }),
43
52
  }));
44
53
  }
45
54
  async followSource(result, state, options, operation) {
46
55
  if (result.kind !== 'redirect')
47
56
  return result;
48
57
  const redirect = result.redirect;
49
- if (redirect.route.via.issuer !== state.source.issuer) {
58
+ if (redirect.route.via.issuer !== state.source) {
50
59
  throw new ClientError('Redirect issuer differs from the session-pinned source Kernel identity.');
51
60
  }
52
61
  requireExpectedPublication(redirect.route, state.expected);
53
- const learned = this.state.cache.learn(state.cacheKey, redirect.route, redirect.credential);
62
+ const learned = await this.state.cache.learn(state.cacheKey, redirect.route, redirect.credential, state.auth.credential);
54
63
  return this.dispatchDestinationWithRecovery(learned, state, options, operation, redirect.trace);
55
64
  }
56
65
  async dispatchDestinationWithRecovery(learned, state, options, operation, trace) {
57
66
  try {
58
- return await this.dispatchDestination(learned, state.call, options, operation, state.expected, trace);
67
+ return await this.dispatchDestination(learned, state.call, options, operation, state.source, state.expected, trace);
59
68
  }
60
69
  catch (cause) {
61
70
  const stale = isAdmittedStaleRouteError(cause);
@@ -79,8 +88,8 @@ export class SessionDispatcher {
79
88
  return this.followSource(refreshed, state, options, operation);
80
89
  }
81
90
  }
82
- async dispatchDestination(learned, call, options, operation, expected, trace) {
83
- if (learned.route.via.issuer !== (await this.sourceKernel(operation)).issuer) {
91
+ async dispatchDestination(learned, call, options, operation, source, expected, trace) {
92
+ if (learned.route.via.issuer !== source) {
84
93
  throw new ClientError('Learned route issuer differs from the session-pinned source Kernel.');
85
94
  }
86
95
  requireExpectedPublication(learned.route, expected);
@@ -97,13 +106,13 @@ export class SessionDispatcher {
97
106
  }
98
107
  return result;
99
108
  }
100
- async sourceKernel(operation) {
101
- const snapshot = await this.state.discovery.snapshot(operation);
102
- if (snapshot.kernel !== this.state.kernel) {
103
- throw new ClientError('Session discovery returned another Kernel identity.');
104
- }
105
- return Object.freeze({ issuer: snapshot.publication.identity.issuer });
109
+ }
110
+ function requireCachedRoute(learned, source, expected, envelopeTransport, websocketAvailable, policy) {
111
+ if (learned.route.via.issuer !== source) {
112
+ throw new ClientError('Learned route issuer differs from the session-pinned source Kernel.');
106
113
  }
114
+ requireExpectedPublication(learned.route, expected);
115
+ selectEnvelopeTarget(learned.route.endpoint, envelopeTransport, websocketAvailable, policy);
107
116
  }
108
117
  function isRouteCompatibilityConflict(input) {
109
118
  if (!(input instanceof ResponseError))
@@ -113,19 +122,15 @@ function isRouteCompatibilityConflict(input) {
113
122
  message: input.message,
114
123
  ...(input.data === undefined ? {} : { data: input.data }),
115
124
  });
116
- return (failure?.data.code === invocationProtocol.SCHEMA_UPGRADE_REQUIRED ||
125
+ return (failure?.data.code === invocationProtocol.SCHEMA_REVISION_MISMATCH ||
117
126
  failure?.data.code === invocationProtocol.SERVICE_TRUST_REQUIRED);
118
127
  }
119
128
  function requireExpectedPublication(route, expected) {
120
129
  if (expected === undefined)
121
130
  return;
122
- if (expected.publication === undefined) {
123
- throw new ClientError('A local bound installation cannot resolve to a remote route.');
124
- }
125
131
  const actual = route.via.publication;
126
- const relation = publications.compareReferences(actual, expected.publication);
127
- if (relation !== 'exact' && relation !== 'same-schema') {
128
- throw new ClientError('Resolved route does not match the bound installed Publication.');
132
+ if (actual.origin !== expected.origin || actual.revision !== expected.revision) {
133
+ throw new ClientError('Resolved route does not match the expected Schema revision.');
129
134
  }
130
135
  }
131
136
  export function requireResultKind(expected, result) {
@@ -133,9 +138,11 @@ export function requireResultKind(expected, result) {
133
138
  return result;
134
139
  if (result.kind === 'stream')
135
140
  void result.stream.cancel(`Expected ${expected} result.`);
141
+ if (result.kind === 'binary' && !(result.value.body instanceof Uint8Array)) {
142
+ void result.value.body[Symbol.asyncIterator]().return?.();
143
+ }
136
144
  throw new ClientError(`Function returned ${result.kind}; ${expected} was required.`);
137
145
  }
138
146
  function authenticated(client, credential) {
139
147
  return credential === undefined ? client : client.as(credential);
140
148
  }
141
- //# sourceMappingURL=dispatch.js.map
@@ -11,4 +11,5 @@ export interface EnvelopeSelection {
11
11
  readonly destination: ClientTarget;
12
12
  }
13
13
  export declare function selectEnvelope(endpoints: publication.InvocationEndpoints, preference: SessionEnvelopeTransport, websocketAvailable: boolean, pool: ClientPoolCapability, policy: Readonly<SessionPolicy>): EnvelopeSelection;
14
- //# sourceMappingURL=envelope.d.ts.map
14
+ /** Resolve and admit one route endpoint without acquiring a transport Client. */
15
+ export declare function selectEnvelopeTarget(endpoints: publication.InvocationEndpoints, preference: SessionEnvelopeTransport, websocketAvailable: boolean, policy: Readonly<SessionPolicy>): ClientTarget;