@astrale-os/kernel-client 0.6.0-beta.8 → 0.6.0-beta.80

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 (473) hide show
  1. package/dist/auth/auth.d.ts +25 -10
  2. package/dist/auth/auth.js +5 -7
  3. package/dist/auth/authorization.d.ts +6 -4
  4. package/dist/auth/authorization.js +25 -6
  5. package/dist/auth/credential.d.ts +11 -2
  6. package/dist/auth/credential.js +6 -3
  7. package/dist/auth/identity.d.ts +6 -9
  8. package/dist/auth/identity.js +0 -1
  9. package/dist/auth/index.d.ts +4 -5
  10. package/dist/auth/index.js +2 -4
  11. package/dist/auth/register.d.ts +24 -0
  12. package/dist/auth/register.js +10 -0
  13. package/dist/client/admission.d.ts +4 -2
  14. package/dist/client/admission.js +8 -2
  15. package/dist/client/client.d.ts +4 -3
  16. package/dist/client/client.js +13 -3
  17. package/dist/client/credential.d.ts +4 -3
  18. package/dist/client/credential.js +7 -3
  19. package/dist/client/index.d.ts +1 -2
  20. package/dist/client/index.js +1 -2
  21. package/dist/client/request.d.ts +10 -4
  22. package/dist/client/request.js +33 -6
  23. package/dist/client/result.d.ts +3 -4
  24. package/dist/client/result.js +3 -1
  25. package/dist/client/routing-control.d.ts +0 -1
  26. package/dist/client/routing-control.js +0 -1
  27. package/dist/errors/client-error.d.ts +0 -1
  28. package/dist/errors/client-error.js +2 -1
  29. package/dist/errors/exchange-error.d.ts +19 -0
  30. package/dist/errors/exchange-error.js +9 -0
  31. package/dist/errors/index.d.ts +8 -7
  32. package/dist/errors/index.js +8 -7
  33. package/dist/errors/miss-error.d.ts +0 -1
  34. package/dist/errors/miss-error.js +0 -1
  35. package/dist/errors/protocol-error.d.ts +0 -1
  36. package/dist/errors/protocol-error.js +0 -1
  37. package/dist/errors/response-error.d.ts +0 -1
  38. package/dist/errors/response-error.js +0 -1
  39. package/dist/errors/session-error.d.ts +9 -0
  40. package/dist/errors/session-error.js +9 -0
  41. package/dist/errors/stale-route-error.d.ts +0 -1
  42. package/dist/errors/stale-route-error.js +0 -1
  43. package/dist/errors/transport-error.d.ts +18 -6
  44. package/dist/errors/transport-error.js +11 -7
  45. package/dist/graph/domain/binding.d.ts +22 -0
  46. package/dist/graph/domain/binding.js +123 -0
  47. package/dist/graph/domain/domain.typecheck.d.ts +1 -0
  48. package/dist/graph/domain/domain.typecheck.js +147 -0
  49. package/dist/graph/domain/index.d.ts +3 -0
  50. package/dist/graph/domain/index.js +1 -0
  51. package/dist/graph/domain/model.d.ts +18 -0
  52. package/dist/graph/domain/model.js +1 -0
  53. package/dist/graph/domain/page.d.ts +23 -0
  54. package/dist/graph/domain/page.js +42 -0
  55. package/dist/graph/domain/project.d.ts +8 -0
  56. package/dist/graph/domain/project.js +124 -0
  57. package/dist/graph/domain/provenance.d.ts +6 -0
  58. package/dist/graph/domain/provenance.js +11 -0
  59. package/dist/graph/errors.d.ts +2 -3
  60. package/dist/graph/errors.js +1 -2
  61. package/dist/graph/expectation.d.ts +3 -0
  62. package/dist/graph/expectation.js +6 -0
  63. package/dist/graph/graph.d.ts +12 -8
  64. package/dist/graph/graph.js +0 -1
  65. package/dist/graph/index.d.ts +2 -2
  66. package/dist/graph/index.js +1 -1
  67. package/dist/graph/mutation.d.ts +2 -4
  68. package/dist/graph/mutation.js +10 -2
  69. package/dist/graph/page/index.d.ts +0 -1
  70. package/dist/graph/page/index.js +0 -1
  71. package/dist/graph/page/neighbors.d.ts +4 -5
  72. package/dist/graph/page/neighbors.js +7 -7
  73. package/dist/graph/page/page.d.ts +5 -2
  74. package/dist/graph/page/page.js +0 -1
  75. package/dist/graph/page-contract.d.ts +1 -2
  76. package/dist/graph/page-contract.js +0 -1
  77. package/dist/graph/provenance.d.ts +14 -0
  78. package/dist/graph/provenance.js +42 -0
  79. package/dist/graph/query.d.ts +3 -1
  80. package/dist/graph/query.js +33 -13
  81. package/dist/graph/read.d.ts +3 -4
  82. package/dist/graph/read.js +6 -5
  83. package/dist/index.d.ts +3 -3
  84. package/dist/index.js +2 -2
  85. package/dist/pacer/batcher/batcher.d.ts +0 -1
  86. package/dist/pacer/batcher/batcher.js +0 -1
  87. package/dist/pacer/batcher/defaults.d.ts +0 -1
  88. package/dist/pacer/batcher/defaults.js +0 -1
  89. package/dist/pacer/batcher/index.d.ts +0 -1
  90. package/dist/pacer/batcher/index.js +0 -1
  91. package/dist/pacer/index.d.ts +0 -1
  92. package/dist/pacer/index.js +0 -1
  93. package/dist/pacer/limiter/defaults.d.ts +0 -1
  94. package/dist/pacer/limiter/defaults.js +0 -1
  95. package/dist/pacer/limiter/index.d.ts +0 -1
  96. package/dist/pacer/limiter/index.js +0 -1
  97. package/dist/pacer/limiter/limiter.d.ts +0 -1
  98. package/dist/pacer/limiter/limiter.js +0 -1
  99. package/dist/pacer/queue/defaults.d.ts +0 -1
  100. package/dist/pacer/queue/defaults.js +0 -1
  101. package/dist/pacer/queue/index.d.ts +0 -1
  102. package/dist/pacer/queue/index.js +0 -1
  103. package/dist/pacer/queue/queue.d.ts +0 -1
  104. package/dist/pacer/queue/queue.js +0 -1
  105. package/dist/pacer/retry/defaults.d.ts +0 -1
  106. package/dist/pacer/retry/defaults.js +0 -1
  107. package/dist/pacer/retry/index.d.ts +0 -1
  108. package/dist/pacer/retry/index.js +0 -1
  109. package/dist/pacer/retry/retry.d.ts +0 -1
  110. package/dist/pacer/retry/retry.js +0 -1
  111. package/dist/pool/index.d.ts +0 -1
  112. package/dist/pool/index.js +0 -1
  113. package/dist/pool/pool.d.ts +0 -1
  114. package/dist/pool/pool.js +0 -1
  115. package/dist/pool/target.d.ts +0 -1
  116. package/dist/pool/target.js +0 -1
  117. package/dist/schema/admission.d.ts +1 -2
  118. package/dist/schema/admission.js +0 -1
  119. package/dist/schema/contracts.d.ts +6 -16
  120. package/dist/schema/contracts.js +0 -1
  121. package/dist/schema/index.d.ts +2 -3
  122. package/dist/schema/index.js +1 -2
  123. package/dist/schema/introspection.d.ts +1 -2
  124. package/dist/schema/introspection.js +9 -2
  125. package/dist/schema/operation.d.ts +0 -1
  126. package/dist/schema/operation.js +2 -3
  127. package/dist/schema/schema.d.ts +13 -10
  128. package/dist/schema/schema.js +83 -11
  129. package/dist/session/admission.d.ts +6 -0
  130. package/dist/session/admission.js +59 -0
  131. package/dist/session/bound.d.ts +48 -0
  132. package/dist/session/bound.js +110 -0
  133. package/dist/session/content.d.ts +27 -0
  134. package/dist/session/content.js +158 -0
  135. package/dist/session/context/control.d.ts +0 -1
  136. package/dist/session/context/control.js +0 -1
  137. package/dist/session/context/index.d.ts +0 -1
  138. package/dist/session/context/index.js +0 -1
  139. package/dist/session/context/limits.d.ts +0 -1
  140. package/dist/session/context/limits.js +0 -1
  141. package/dist/session/context/operation.d.ts +5 -2
  142. package/dist/session/context/operation.js +19 -17
  143. package/dist/session/context/policy.d.ts +0 -1
  144. package/dist/session/context/policy.js +0 -1
  145. package/dist/session/credential/index.d.ts +1 -0
  146. package/dist/session/credential/index.js +1 -0
  147. package/dist/session/credential/limits.d.ts +12 -0
  148. package/dist/session/credential/limits.js +12 -0
  149. package/dist/session/credential/provider.d.ts +56 -0
  150. package/dist/session/credential/provider.js +236 -0
  151. package/dist/session/discovery/bundle.d.ts +5 -2
  152. package/dist/session/discovery/bundle.js +34 -15
  153. package/dist/session/discovery/discovery.d.ts +4 -2
  154. package/dist/session/discovery/discovery.js +34 -6
  155. package/dist/session/discovery/index.d.ts +3 -1
  156. package/dist/session/discovery/index.js +1 -1
  157. package/dist/session/discovery/publication.d.ts +0 -1
  158. package/dist/session/discovery/publication.js +4 -4
  159. package/dist/session/discovery/snapshot.d.ts +0 -1
  160. package/dist/session/discovery/snapshot.js +0 -1
  161. package/dist/session/discovery/transport.d.ts +6 -0
  162. package/dist/session/discovery/transport.js +13 -0
  163. package/dist/session/exchange/domain.d.ts +27 -0
  164. package/dist/session/exchange/domain.js +63 -0
  165. package/dist/session/exchange/exchange.d.ts +54 -0
  166. package/dist/session/exchange/exchange.js +58 -0
  167. package/dist/session/exchange/index.d.ts +5 -0
  168. package/dist/session/exchange/index.js +5 -0
  169. package/dist/session/exchange/issuer.d.ts +18 -0
  170. package/dist/session/exchange/issuer.js +149 -0
  171. package/dist/session/exchange/limits.d.ts +10 -0
  172. package/dist/session/exchange/limits.js +10 -0
  173. package/dist/session/exchange/options.d.ts +29 -0
  174. package/dist/session/exchange/options.js +57 -0
  175. package/dist/session/exchange/presentation.d.ts +18 -0
  176. package/dist/session/exchange/presentation.js +73 -0
  177. package/dist/session/exchange/source.d.ts +32 -0
  178. package/dist/session/exchange/source.js +78 -0
  179. package/dist/session/execution.d.ts +65 -0
  180. package/dist/session/execution.js +34 -0
  181. package/dist/session/index.d.ts +9 -4
  182. package/dist/session/index.js +4 -1
  183. package/dist/session/reference.d.ts +40 -12
  184. package/dist/session/reference.js +56 -14
  185. package/dist/session/routing/auth.d.ts +10 -1
  186. package/dist/session/routing/auth.js +8 -2
  187. package/dist/session/routing/cache.d.ts +27 -8
  188. package/dist/session/routing/cache.js +218 -25
  189. package/dist/session/routing/dispatch.d.ts +15 -8
  190. package/dist/session/routing/dispatch.js +121 -48
  191. package/dist/session/routing/envelope.d.ts +2 -1
  192. package/dist/session/routing/envelope.js +14 -10
  193. package/dist/session/routing/index.d.ts +3 -5
  194. package/dist/session/routing/index.js +2 -3
  195. package/dist/session/routing/request.d.ts +9 -1
  196. package/dist/session/routing/request.js +17 -1
  197. package/dist/session/session.d.ts +41 -8
  198. package/dist/session/session.js +129 -41
  199. package/dist/session/session.typecheck.d.ts +0 -1
  200. package/dist/session/session.typecheck.js +172 -3
  201. package/dist/session/views/catalog.d.ts +0 -1
  202. package/dist/session/views/catalog.js +14 -5
  203. package/dist/session/views/index.d.ts +0 -1
  204. package/dist/session/views/index.js +0 -1
  205. package/dist/session/views/resolve.d.ts +0 -1
  206. package/dist/session/views/resolve.js +0 -1
  207. package/dist/store/entity-index.d.ts +0 -1
  208. package/dist/store/entity-index.js +0 -1
  209. package/dist/store/index.d.ts +0 -1
  210. package/dist/store/index.js +0 -1
  211. package/dist/store/memory.d.ts +2 -2
  212. package/dist/store/memory.js +38 -15
  213. package/dist/store/mutation.d.ts +1 -2
  214. package/dist/store/mutation.js +6 -4
  215. package/dist/store/observe.d.ts +0 -1
  216. package/dist/store/observe.js +0 -1
  217. package/dist/store/optimistic.d.ts +0 -1
  218. package/dist/store/optimistic.js +0 -1
  219. package/dist/store/query-key.d.ts +2 -2
  220. package/dist/store/query-key.js +7 -3
  221. package/dist/store/shape.d.ts +4 -2
  222. package/dist/store/shape.js +4 -2
  223. package/dist/store/store.d.ts +2 -4
  224. package/dist/store/store.js +6 -5
  225. package/dist/store/store.typecheck.d.ts +0 -1
  226. package/dist/store/store.typecheck.js +3 -9
  227. package/dist/transport/auto/decision.d.ts +0 -1
  228. package/dist/transport/auto/decision.js +0 -1
  229. package/dist/transport/auto/fallback.d.ts +2 -2
  230. package/dist/transport/auto/fallback.js +10 -11
  231. package/dist/transport/auto/index.d.ts +0 -1
  232. package/dist/transport/auto/index.js +0 -1
  233. package/dist/transport/auto/transport.d.ts +0 -1
  234. package/dist/transport/auto/transport.js +5 -6
  235. package/dist/transport/auto/warning.d.ts +0 -1
  236. package/dist/transport/auto/warning.js +5 -3
  237. package/dist/transport/deadline.d.ts +0 -1
  238. package/dist/transport/deadline.js +0 -1
  239. package/dist/transport/failure.d.ts +7 -0
  240. package/dist/transport/failure.js +9 -0
  241. package/dist/transport/http/byte-stream.d.ts +18 -0
  242. package/dist/transport/http/byte-stream.js +94 -0
  243. package/dist/transport/http/index.d.ts +0 -1
  244. package/dist/transport/http/index.js +0 -1
  245. package/dist/transport/http/response.d.ts +0 -1
  246. package/dist/transport/http/response.js +0 -1
  247. package/dist/transport/http/stream.d.ts +0 -1
  248. package/dist/transport/http/stream.js +7 -7
  249. package/dist/transport/http/transport.d.ts +3 -1
  250. package/dist/transport/http/transport.js +87 -30
  251. package/dist/transport/index.d.ts +0 -1
  252. package/dist/transport/index.js +0 -1
  253. package/dist/transport/transport.d.ts +0 -1
  254. package/dist/transport/transport.js +0 -1
  255. package/dist/transport/websocket/connection.d.ts +0 -1
  256. package/dist/transport/websocket/connection.js +16 -26
  257. package/dist/transport/websocket/exchange.d.ts +0 -1
  258. package/dist/transport/websocket/exchange.js +5 -9
  259. package/dist/transport/websocket/index.d.ts +0 -1
  260. package/dist/transport/websocket/index.js +0 -1
  261. package/dist/transport/websocket/transport.d.ts +0 -1
  262. package/dist/transport/websocket/transport.js +7 -20
  263. package/package.json +12 -14
  264. package/dist/auth/auth.d.ts.map +0 -1
  265. package/dist/auth/auth.js.map +0 -1
  266. package/dist/auth/authorization.d.ts.map +0 -1
  267. package/dist/auth/authorization.js.map +0 -1
  268. package/dist/auth/credential.d.ts.map +0 -1
  269. package/dist/auth/credential.js.map +0 -1
  270. package/dist/auth/identity.d.ts.map +0 -1
  271. package/dist/auth/identity.js.map +0 -1
  272. package/dist/auth/index.d.ts.map +0 -1
  273. package/dist/auth/index.js.map +0 -1
  274. package/dist/auth/provision.d.ts +0 -9
  275. package/dist/auth/provision.d.ts.map +0 -1
  276. package/dist/auth/provision.js +0 -11
  277. package/dist/auth/provision.js.map +0 -1
  278. package/dist/client/admission.d.ts.map +0 -1
  279. package/dist/client/admission.js.map +0 -1
  280. package/dist/client/client.d.ts.map +0 -1
  281. package/dist/client/client.js.map +0 -1
  282. package/dist/client/credential.d.ts.map +0 -1
  283. package/dist/client/credential.js.map +0 -1
  284. package/dist/client/index.d.ts.map +0 -1
  285. package/dist/client/index.js.map +0 -1
  286. package/dist/client/request.d.ts.map +0 -1
  287. package/dist/client/request.js.map +0 -1
  288. package/dist/client/result.d.ts.map +0 -1
  289. package/dist/client/result.js.map +0 -1
  290. package/dist/client/routing-control.d.ts.map +0 -1
  291. package/dist/client/routing-control.js.map +0 -1
  292. package/dist/errors/client-error.d.ts.map +0 -1
  293. package/dist/errors/client-error.js.map +0 -1
  294. package/dist/errors/index.d.ts.map +0 -1
  295. package/dist/errors/index.js.map +0 -1
  296. package/dist/errors/miss-error.d.ts.map +0 -1
  297. package/dist/errors/miss-error.js.map +0 -1
  298. package/dist/errors/protocol-error.d.ts.map +0 -1
  299. package/dist/errors/protocol-error.js.map +0 -1
  300. package/dist/errors/response-error.d.ts.map +0 -1
  301. package/dist/errors/response-error.js.map +0 -1
  302. package/dist/errors/stale-route-error.d.ts.map +0 -1
  303. package/dist/errors/stale-route-error.js.map +0 -1
  304. package/dist/errors/transport-error.d.ts.map +0 -1
  305. package/dist/errors/transport-error.js.map +0 -1
  306. package/dist/graph/errors.d.ts.map +0 -1
  307. package/dist/graph/errors.js.map +0 -1
  308. package/dist/graph/graph.d.ts.map +0 -1
  309. package/dist/graph/graph.js.map +0 -1
  310. package/dist/graph/index.d.ts.map +0 -1
  311. package/dist/graph/index.js.map +0 -1
  312. package/dist/graph/mutation.d.ts.map +0 -1
  313. package/dist/graph/mutation.js.map +0 -1
  314. package/dist/graph/page/index.d.ts.map +0 -1
  315. package/dist/graph/page/index.js.map +0 -1
  316. package/dist/graph/page/neighbors.d.ts.map +0 -1
  317. package/dist/graph/page/neighbors.js.map +0 -1
  318. package/dist/graph/page/page.d.ts.map +0 -1
  319. package/dist/graph/page/page.js.map +0 -1
  320. package/dist/graph/page-contract.d.ts.map +0 -1
  321. package/dist/graph/page-contract.js.map +0 -1
  322. package/dist/graph/query.d.ts.map +0 -1
  323. package/dist/graph/query.js.map +0 -1
  324. package/dist/graph/read.d.ts.map +0 -1
  325. package/dist/graph/read.js.map +0 -1
  326. package/dist/index.d.ts.map +0 -1
  327. package/dist/index.js.map +0 -1
  328. package/dist/pacer/batcher/batcher.d.ts.map +0 -1
  329. package/dist/pacer/batcher/batcher.js.map +0 -1
  330. package/dist/pacer/batcher/defaults.d.ts.map +0 -1
  331. package/dist/pacer/batcher/defaults.js.map +0 -1
  332. package/dist/pacer/batcher/index.d.ts.map +0 -1
  333. package/dist/pacer/batcher/index.js.map +0 -1
  334. package/dist/pacer/index.d.ts.map +0 -1
  335. package/dist/pacer/index.js.map +0 -1
  336. package/dist/pacer/limiter/defaults.d.ts.map +0 -1
  337. package/dist/pacer/limiter/defaults.js.map +0 -1
  338. package/dist/pacer/limiter/index.d.ts.map +0 -1
  339. package/dist/pacer/limiter/index.js.map +0 -1
  340. package/dist/pacer/limiter/limiter.d.ts.map +0 -1
  341. package/dist/pacer/limiter/limiter.js.map +0 -1
  342. package/dist/pacer/queue/defaults.d.ts.map +0 -1
  343. package/dist/pacer/queue/defaults.js.map +0 -1
  344. package/dist/pacer/queue/index.d.ts.map +0 -1
  345. package/dist/pacer/queue/index.js.map +0 -1
  346. package/dist/pacer/queue/queue.d.ts.map +0 -1
  347. package/dist/pacer/queue/queue.js.map +0 -1
  348. package/dist/pacer/retry/defaults.d.ts.map +0 -1
  349. package/dist/pacer/retry/defaults.js.map +0 -1
  350. package/dist/pacer/retry/index.d.ts.map +0 -1
  351. package/dist/pacer/retry/index.js.map +0 -1
  352. package/dist/pacer/retry/retry.d.ts.map +0 -1
  353. package/dist/pacer/retry/retry.js.map +0 -1
  354. package/dist/pool/index.d.ts.map +0 -1
  355. package/dist/pool/index.js.map +0 -1
  356. package/dist/pool/pool.d.ts.map +0 -1
  357. package/dist/pool/pool.js.map +0 -1
  358. package/dist/pool/target.d.ts.map +0 -1
  359. package/dist/pool/target.js.map +0 -1
  360. package/dist/schema/admission.d.ts.map +0 -1
  361. package/dist/schema/admission.js.map +0 -1
  362. package/dist/schema/contracts.d.ts.map +0 -1
  363. package/dist/schema/contracts.js.map +0 -1
  364. package/dist/schema/index.d.ts.map +0 -1
  365. package/dist/schema/index.js.map +0 -1
  366. package/dist/schema/introspection.d.ts.map +0 -1
  367. package/dist/schema/introspection.js.map +0 -1
  368. package/dist/schema/operation.d.ts.map +0 -1
  369. package/dist/schema/operation.js.map +0 -1
  370. package/dist/schema/schema.d.ts.map +0 -1
  371. package/dist/schema/schema.js.map +0 -1
  372. package/dist/session/context/control.d.ts.map +0 -1
  373. package/dist/session/context/control.js.map +0 -1
  374. package/dist/session/context/index.d.ts.map +0 -1
  375. package/dist/session/context/index.js.map +0 -1
  376. package/dist/session/context/limits.d.ts.map +0 -1
  377. package/dist/session/context/limits.js.map +0 -1
  378. package/dist/session/context/operation.d.ts.map +0 -1
  379. package/dist/session/context/operation.js.map +0 -1
  380. package/dist/session/context/policy.d.ts.map +0 -1
  381. package/dist/session/context/policy.js.map +0 -1
  382. package/dist/session/discovery/bundle.d.ts.map +0 -1
  383. package/dist/session/discovery/bundle.js.map +0 -1
  384. package/dist/session/discovery/discovery.d.ts.map +0 -1
  385. package/dist/session/discovery/discovery.js.map +0 -1
  386. package/dist/session/discovery/index.d.ts.map +0 -1
  387. package/dist/session/discovery/index.js.map +0 -1
  388. package/dist/session/discovery/publication.d.ts.map +0 -1
  389. package/dist/session/discovery/publication.js.map +0 -1
  390. package/dist/session/discovery/snapshot.d.ts.map +0 -1
  391. package/dist/session/discovery/snapshot.js.map +0 -1
  392. package/dist/session/index.d.ts.map +0 -1
  393. package/dist/session/index.js.map +0 -1
  394. package/dist/session/reference.d.ts.map +0 -1
  395. package/dist/session/reference.js.map +0 -1
  396. package/dist/session/routing/auth.d.ts.map +0 -1
  397. package/dist/session/routing/auth.js.map +0 -1
  398. package/dist/session/routing/cache.d.ts.map +0 -1
  399. package/dist/session/routing/cache.js.map +0 -1
  400. package/dist/session/routing/dispatch.d.ts.map +0 -1
  401. package/dist/session/routing/dispatch.js.map +0 -1
  402. package/dist/session/routing/envelope.d.ts.map +0 -1
  403. package/dist/session/routing/envelope.js.map +0 -1
  404. package/dist/session/routing/expectation.d.ts +0 -7
  405. package/dist/session/routing/expectation.d.ts.map +0 -1
  406. package/dist/session/routing/expectation.js +0 -2
  407. package/dist/session/routing/expectation.js.map +0 -1
  408. package/dist/session/routing/index.d.ts.map +0 -1
  409. package/dist/session/routing/index.js.map +0 -1
  410. package/dist/session/routing/request.d.ts.map +0 -1
  411. package/dist/session/routing/request.js.map +0 -1
  412. package/dist/session/session.d.ts.map +0 -1
  413. package/dist/session/session.js.map +0 -1
  414. package/dist/session/session.typecheck.d.ts.map +0 -1
  415. package/dist/session/session.typecheck.js.map +0 -1
  416. package/dist/session/views/catalog.d.ts.map +0 -1
  417. package/dist/session/views/catalog.js.map +0 -1
  418. package/dist/session/views/index.d.ts.map +0 -1
  419. package/dist/session/views/index.js.map +0 -1
  420. package/dist/session/views/resolve.d.ts.map +0 -1
  421. package/dist/session/views/resolve.js.map +0 -1
  422. package/dist/store/entity-index.d.ts.map +0 -1
  423. package/dist/store/entity-index.js.map +0 -1
  424. package/dist/store/index.d.ts.map +0 -1
  425. package/dist/store/index.js.map +0 -1
  426. package/dist/store/memory.d.ts.map +0 -1
  427. package/dist/store/memory.js.map +0 -1
  428. package/dist/store/mutation.d.ts.map +0 -1
  429. package/dist/store/mutation.js.map +0 -1
  430. package/dist/store/observe.d.ts.map +0 -1
  431. package/dist/store/observe.js.map +0 -1
  432. package/dist/store/optimistic.d.ts.map +0 -1
  433. package/dist/store/optimistic.js.map +0 -1
  434. package/dist/store/query-key.d.ts.map +0 -1
  435. package/dist/store/query-key.js.map +0 -1
  436. package/dist/store/shape.d.ts.map +0 -1
  437. package/dist/store/shape.js.map +0 -1
  438. package/dist/store/store.d.ts.map +0 -1
  439. package/dist/store/store.js.map +0 -1
  440. package/dist/store/store.typecheck.d.ts.map +0 -1
  441. package/dist/store/store.typecheck.js.map +0 -1
  442. package/dist/transport/auto/decision.d.ts.map +0 -1
  443. package/dist/transport/auto/decision.js.map +0 -1
  444. package/dist/transport/auto/fallback.d.ts.map +0 -1
  445. package/dist/transport/auto/fallback.js.map +0 -1
  446. package/dist/transport/auto/index.d.ts.map +0 -1
  447. package/dist/transport/auto/index.js.map +0 -1
  448. package/dist/transport/auto/transport.d.ts.map +0 -1
  449. package/dist/transport/auto/transport.js.map +0 -1
  450. package/dist/transport/auto/warning.d.ts.map +0 -1
  451. package/dist/transport/auto/warning.js.map +0 -1
  452. package/dist/transport/deadline.d.ts.map +0 -1
  453. package/dist/transport/deadline.js.map +0 -1
  454. package/dist/transport/http/index.d.ts.map +0 -1
  455. package/dist/transport/http/index.js.map +0 -1
  456. package/dist/transport/http/response.d.ts.map +0 -1
  457. package/dist/transport/http/response.js.map +0 -1
  458. package/dist/transport/http/stream.d.ts.map +0 -1
  459. package/dist/transport/http/stream.js.map +0 -1
  460. package/dist/transport/http/transport.d.ts.map +0 -1
  461. package/dist/transport/http/transport.js.map +0 -1
  462. package/dist/transport/index.d.ts.map +0 -1
  463. package/dist/transport/index.js.map +0 -1
  464. package/dist/transport/transport.d.ts.map +0 -1
  465. package/dist/transport/transport.js.map +0 -1
  466. package/dist/transport/websocket/connection.d.ts.map +0 -1
  467. package/dist/transport/websocket/connection.js.map +0 -1
  468. package/dist/transport/websocket/exchange.d.ts.map +0 -1
  469. package/dist/transport/websocket/exchange.js.map +0 -1
  470. package/dist/transport/websocket/index.d.ts.map +0 -1
  471. package/dist/transport/websocket/index.js.map +0 -1
  472. package/dist/transport/websocket/transport.d.ts.map +0 -1
  473. package/dist/transport/websocket/transport.js.map +0 -1
@@ -0,0 +1,124 @@
1
+ import { MethodKey, PropertyKey } from '@astrale-os/kernel-dsl/v1/addressing';
2
+ import { retainProjectedProvenance } from './provenance.js';
3
+ export function projectNode(selected, node, provenance, call) {
4
+ const invoke = async (receiver, method, input) => {
5
+ if (receiver.class !== method.owner.key) {
6
+ throw new TypeError(`Method ${method.key} requires an exact ${method.owner.key} receiver.`);
7
+ }
8
+ return call(receiver, method, input);
9
+ };
10
+ const property = propertyAccessor(selected, node.props);
11
+ const method = methodAccessor(selected, node, invoke);
12
+ const value = {
13
+ id: node.id,
14
+ class: node.class,
15
+ props: node.props,
16
+ property,
17
+ method,
18
+ };
19
+ installPropertyShortcuts(value, selected, node.props, NODE_RESERVED);
20
+ installMethodShortcuts(value, selected, node, invoke, NODE_RESERVED);
21
+ const projected = Object.freeze(value);
22
+ retainProjectedProvenance(projected, provenance);
23
+ return projected;
24
+ }
25
+ export function projectEdge(selected, edge, provenance) {
26
+ const value = {
27
+ source: edge.source,
28
+ target: edge.target,
29
+ class: edge.class,
30
+ ...(edge.slug === undefined ? {} : { slug: edge.slug }),
31
+ props: edge.props,
32
+ property: propertyAccessor(selected, edge.props),
33
+ };
34
+ installPropertyShortcuts(value, selected, edge.props, EDGE_RESERVED);
35
+ const projected = Object.freeze(value);
36
+ retainProjectedProvenance(projected, provenance);
37
+ return projected;
38
+ }
39
+ const NODE_RESERVED = new Set(['id', 'class', 'props', 'property', 'method']);
40
+ const EDGE_RESERVED = new Set(['source', 'target', 'class', 'slug', 'props', 'property']);
41
+ function propertyAccessor(selected, props) {
42
+ return (input) => {
43
+ const property = resolveProperty(selected, input);
44
+ return props[property.key];
45
+ };
46
+ }
47
+ function methodAccessor(selected, node, call) {
48
+ return (input) => {
49
+ const method = resolveMethod(selected, input);
50
+ if (!method.executable) {
51
+ throw new TypeError(`Abstract Method ${method.key} cannot be invoked.`);
52
+ }
53
+ return (value) => call(node, method, value);
54
+ };
55
+ }
56
+ function resolveProperty(selected, input) {
57
+ if (typeof input !== 'string') {
58
+ const member = selected.properties.get(input.key);
59
+ if (member !== input)
60
+ throw new TypeError('Property does not belong to the selected Class.');
61
+ return member;
62
+ }
63
+ if (PropertyKey.is(input)) {
64
+ const member = selected.properties.get(input);
65
+ if (member === undefined)
66
+ throw new TypeError(`Property ${input} is not effective.`);
67
+ return member;
68
+ }
69
+ const member = named(selected.properties, input);
70
+ if (member === undefined || typeof member !== 'object') {
71
+ throw new TypeError(`Property name ${JSON.stringify(input)} is absent or ambiguous.`);
72
+ }
73
+ return member;
74
+ }
75
+ function resolveMethod(selected, input) {
76
+ if (typeof input !== 'string') {
77
+ const member = selected.methods.get(input.key);
78
+ if (member !== input)
79
+ throw new TypeError('Method does not belong to the selected Class.');
80
+ return member;
81
+ }
82
+ if (MethodKey.is(input)) {
83
+ const member = selected.methods.get(input);
84
+ if (member === undefined)
85
+ throw new TypeError(`Method ${input} is not effective.`);
86
+ return member;
87
+ }
88
+ const member = named(selected.methods, input);
89
+ if (member === undefined || typeof member !== 'object') {
90
+ throw new TypeError(`Method name ${JSON.stringify(input)} is absent or ambiguous.`);
91
+ }
92
+ return member;
93
+ }
94
+ function installPropertyShortcuts(target, selected, props, reserved) {
95
+ for (const property of selected.properties) {
96
+ if (reserved.has(property.name) || hasOwn(target, property.name))
97
+ continue;
98
+ if (named(selected.properties, property.name) !== property)
99
+ continue;
100
+ if (selected.kind === 'node' && named(selected.methods, property.name) !== undefined)
101
+ continue;
102
+ install(target, property.name, props[property.key]);
103
+ }
104
+ }
105
+ function installMethodShortcuts(target, selected, node, call, reserved) {
106
+ for (const member of selected.methods) {
107
+ if (!member.executable || reserved.has(member.name) || hasOwn(target, member.name))
108
+ continue;
109
+ if (named(selected.methods, member.name) !== member)
110
+ continue;
111
+ if (named(selected.properties, member.name) !== undefined)
112
+ continue;
113
+ install(target, member.name, (input) => call(node, member, input));
114
+ }
115
+ }
116
+ function named(collection, name) {
117
+ return hasOwn(collection, name) ? Reflect.get(collection, name) : undefined;
118
+ }
119
+ function hasOwn(value, name) {
120
+ return Object.prototype.hasOwnProperty.call(value, name);
121
+ }
122
+ function install(target, name, value) {
123
+ Object.defineProperty(target, name, { enumerable: true, value });
124
+ }
@@ -0,0 +1,6 @@
1
+ import type { Domain } from '@astrale-os/kernel-dsl/v1/domain';
2
+ import type { QueryProvenance } from '../provenance.js';
3
+ export declare function retainProjectedProvenance(value: object, provenance: QueryProvenance): void;
4
+ export declare function provenanceOfProjectedValue(value: object): QueryProvenance | undefined;
5
+ export declare function sameClosure(left: Domain['closure'], right: Domain['closure']): boolean;
6
+ export type { QueryProvenance };
@@ -0,0 +1,11 @@
1
+ const projectedValues = new WeakMap();
2
+ export function retainProjectedProvenance(value, provenance) {
3
+ projectedValues.set(value, provenance);
4
+ }
5
+ export function provenanceOfProjectedValue(value) {
6
+ return projectedValues.get(value);
7
+ }
8
+ export function sameClosure(left, right) {
9
+ return (left.length === right.length &&
10
+ left.every((identity, index) => identity.origin === right[index]?.origin && identity.revision === right[index]?.revision));
11
+ }
@@ -1,9 +1,8 @@
1
- import type { NodePath, PathLike } from '@astrale-os/kernel-core/path';
1
+ import type { NodePath, NodeTarget } from '@astrale-os/kernel-core/path';
2
2
  import { ClientError } from '../errors/index.js';
3
3
  /** Required point read whose absence and authorization masking are intentionally indistinguishable. */
4
4
  export declare class NodeUnavailableError extends ClientError {
5
5
  readonly code: 'NODE_UNAVAILABLE';
6
6
  readonly path: NodePath;
7
- constructor(path: PathLike);
7
+ constructor(path: NodeTarget);
8
8
  }
9
- //# sourceMappingURL=errors.d.ts.map
@@ -5,10 +5,9 @@ export class NodeUnavailableError extends ClientError {
5
5
  code = 'NODE_UNAVAILABLE';
6
6
  path;
7
7
  constructor(path) {
8
- const admitted = Path.from(path).raw;
8
+ const admitted = Path.target(path).raw;
9
9
  super(`Node ${JSON.stringify(admitted)} is unavailable.`);
10
10
  this.name = 'NodeUnavailableError';
11
11
  this.path = admitted;
12
12
  }
13
13
  }
14
- //# sourceMappingURL=errors.js.map
@@ -0,0 +1,3 @@
1
+ import type { DomainDependency } from '@astrale-os/kernel-dsl/v1/schema';
2
+ /** Detach one caller-owned expected closure before crossing the Client boundary. */
3
+ export declare function captureExpected(input: readonly DomainDependency[] | undefined): readonly DomainDependency[] | undefined;
@@ -0,0 +1,6 @@
1
+ /** Detach one caller-owned expected closure before crossing the Client boundary. */
2
+ export function captureExpected(input) {
3
+ if (input === undefined)
4
+ return undefined;
5
+ return Object.freeze(input.map(({ origin, revision }) => Object.freeze({ origin, revision })));
6
+ }
@@ -1,25 +1,29 @@
1
1
  import type { GraphSpec } from '@astrale-os/kernel-core/graph/graph';
2
2
  import type { MutationAST as MutationASTValue, MutationBuilder, MutationInput, MutationResult as MutationResultValue } from '@astrale-os/kernel-core/graph/mutate';
3
3
  import type { Node } from '@astrale-os/kernel-core/graph/node';
4
- import type { QueryAST as QueryASTValue, QueryDefinitionRef, QueryResultFor } from '@astrale-os/kernel-core/graph/query';
5
- import type { PathLike } from '@astrale-os/kernel-core/path';
4
+ import type { QueryAST as QueryASTValue, QueryEdgeClassInput, QueryResultFor } from '@astrale-os/kernel-core/graph/query';
5
+ import type { NodeTarget } from '@astrale-os/kernel-core/path';
6
+ import type { DomainDependency } from '@astrale-os/kernel-dsl/v1/schema';
6
7
  import type { Call, Input } from '../client/index.js';
7
8
  import type { RequestOptions } from '../transport/index.js';
8
9
  import type { QueryPageRequest, QueryResponse } from './page-contract.js';
9
10
  import type { NeighborsOptions, NodePage } from './page/index.js';
10
11
  export type GraphCall = (call: Call, options?: RequestOptions) => Promise<Input>;
11
12
  export interface GraphQueryOptions extends RequestOptions {
13
+ readonly expected?: readonly DomainDependency[];
12
14
  readonly page: QueryPageRequest;
13
15
  }
16
+ export interface GraphMutationOptions extends RequestOptions {
17
+ readonly expected?: readonly DomainDependency[];
18
+ }
14
19
  export type MutationAuthor = (mutation: MutationBuilder) => undefined;
15
20
  export interface GraphApi {
16
21
  query<Query extends QueryASTValue>(ast: Query, options: GraphQueryOptions): Promise<QueryResponse<QueryResultFor<Query>>>;
17
- mutate(author: MutationAuthor, options?: RequestOptions): Promise<MutationResultValue>;
18
- mutate(ast: MutationASTValue | MutationInput | GraphSpec, options?: RequestOptions): Promise<MutationResultValue>;
19
- get(target: PathLike, options?: RequestOptions): Promise<Node | null>;
20
- getOrThrow(target: PathLike, options?: RequestOptions): Promise<Node>;
21
- neighbors(source: PathLike, via: QueryDefinitionRef | readonly [QueryDefinitionRef, ...QueryDefinitionRef[]], options: NeighborsOptions): Promise<NodePage>;
22
+ mutate(author: MutationAuthor, options?: GraphMutationOptions): Promise<MutationResultValue>;
23
+ mutate(ast: MutationASTValue | MutationInput | GraphSpec, options?: GraphMutationOptions): Promise<MutationResultValue>;
24
+ get(target: NodeTarget, options?: RequestOptions): Promise<Node | null>;
25
+ getOrThrow(target: NodeTarget, options?: RequestOptions): Promise<Node>;
26
+ neighbors(source: NodeTarget, via: QueryEdgeClassInput | readonly [QueryEdgeClassInput, ...QueryEdgeClassInput[]], options: NeighborsOptions): Promise<NodePage>;
22
27
  }
23
28
  /** Bind Core's canonical graph documents to one caller-scoped value-call capability. */
24
29
  export declare function createGraph(call: GraphCall): GraphApi;
25
- //# sourceMappingURL=graph.d.ts.map
@@ -16,4 +16,3 @@ export function createGraph(call) {
16
16
  neighbors: (source, via, options) => readNeighbors(query, source, via, options),
17
17
  });
18
18
  }
19
- //# sourceMappingURL=graph.js.map
@@ -1,8 +1,8 @@
1
- export { createGraph, type GraphApi, type GraphCall, type GraphQueryOptions, type MutationAuthor, } from './graph.js';
1
+ export { createGraph, type GraphApi, type GraphCall, type GraphMutationOptions, type GraphQueryOptions, type MutationAuthor, } from './graph.js';
2
2
  export type { QueryPageRequest, QueryResponse } from './page-contract.js';
3
+ export { type BoundEdge, type BoundEdgePage, type BoundGraphValue, type BoundNode, type BoundNodeFor, type BoundNodePage, type BoundQueryPage, type DomainBinding, type DomainQueryOptions, } from './domain/index.js';
3
4
  export { NodeUnavailableError } from './errors.js';
4
5
  export type { NeighborsOptions, NodePage } from './page/index.js';
5
6
  export { LocalBinding, type GraphSpec } from '@astrale-os/kernel-core/graph/graph';
6
7
  export { MutationAST, MutationResult, type MutationBuilder, type MutationInput, } from '@astrale-os/kernel-core/graph/mutate';
7
8
  export { Query, QueryAST, QueryResult } from '@astrale-os/kernel-core/graph/query';
8
- //# sourceMappingURL=index.d.ts.map
@@ -1,6 +1,6 @@
1
1
  export { createGraph, } from './graph.js';
2
+ export {} from './domain/index.js';
2
3
  export { NodeUnavailableError } from './errors.js';
3
4
  export { LocalBinding } from '@astrale-os/kernel-core/graph/graph';
4
5
  export { MutationAST, MutationResult, } from '@astrale-os/kernel-core/graph/mutate';
5
6
  export { Query, QueryAST, QueryResult } from '@astrale-os/kernel-core/graph/query';
6
- //# sourceMappingURL=index.js.map
@@ -1,6 +1,4 @@
1
1
  import type { GraphSpec } from '@astrale-os/kernel-core/graph/graph';
2
2
  import type { MutationAST as MutationASTValue, MutationInput, MutationResult as MutationResultValue } from '@astrale-os/kernel-core/graph/mutate';
3
- import type { RequestOptions } from '../transport/index.js';
4
- import type { GraphCall, MutationAuthor } from './graph.js';
5
- export declare function mutateGraph(call: GraphCall, input: MutationAuthor | MutationASTValue | MutationInput | GraphSpec, options?: RequestOptions): Promise<MutationResultValue>;
6
- //# sourceMappingURL=mutation.d.ts.map
3
+ import type { GraphCall, GraphMutationOptions, MutationAuthor } from './graph.js';
4
+ export declare function mutateGraph(call: GraphCall, input: MutationAuthor | MutationASTValue | MutationInput | GraphSpec, options?: GraphMutationOptions): Promise<MutationResultValue>;
@@ -2,10 +2,19 @@ import { MutationAST, MutationResult } from '@astrale-os/kernel-core/graph/mutat
2
2
  import { Path } from '@astrale-os/kernel-core/path';
3
3
  import { mutate } from '@astrale-os/kernel-core/schema/kernel/syscalls/references';
4
4
  import { call as invocation } from '../client/index.js';
5
+ import { captureExpected } from './expectation.js';
5
6
  const KERNEL_MUTATE_PATH = Path.project(mutate).raw;
6
7
  export async function mutateGraph(call, input, options) {
7
8
  const ast = typeof input === 'function' ? MutationAST.build(input) : admitMutation(input);
8
- const output = await call(invocation(KERNEL_MUTATE_PATH, ast), options);
9
+ const expected = options?.expected;
10
+ const request = options === undefined
11
+ ? undefined
12
+ : (({ expected: _expected, ...rest }) => rest)(options);
13
+ const capturedExpected = captureExpected(expected);
14
+ const output = await call(invocation(KERNEL_MUTATE_PATH, Object.freeze({
15
+ ast,
16
+ ...(capturedExpected === undefined ? {} : { expected: capturedExpected }),
17
+ })), request);
9
18
  return MutationResult.decode(output);
10
19
  }
11
20
  function admitMutation(input) {
@@ -15,4 +24,3 @@ function admitMutation(input) {
15
24
  ? MutationAST.create(input)
16
25
  : MutationAST.fromGraph(input);
17
26
  }
18
- //# sourceMappingURL=mutation.js.map
@@ -1,3 +1,2 @@
1
1
  export { type NeighborsOptions, type NeighborSource, type NeighborVia, readNeighbors, } from './neighbors.js';
2
2
  export type { NodePage, PageQuery, PageQueryOptions } from './page.js';
3
- //# sourceMappingURL=index.d.ts.map
@@ -1,2 +1 @@
1
1
  export { readNeighbors, } from './neighbors.js';
2
- //# sourceMappingURL=index.js.map
@@ -1,10 +1,9 @@
1
- import type { QueryDefinitionRef, QueryDirection } from '@astrale-os/kernel-core/graph/query';
2
- import type { PathLike } from '@astrale-os/kernel-core/path';
1
+ import type { QueryDirection, QueryEdgeClassInput } from '@astrale-os/kernel-core/graph/query';
2
+ import type { NodeTarget } from '@astrale-os/kernel-core/path';
3
3
  import type { NodePage, PageQuery, PageQueryOptions } from './page.js';
4
4
  export interface NeighborsOptions extends PageQueryOptions {
5
5
  readonly direction: QueryDirection;
6
6
  }
7
- export type NeighborSource = PathLike;
8
- export type NeighborVia = QueryDefinitionRef | readonly [QueryDefinitionRef, ...QueryDefinitionRef[]];
7
+ export type NeighborSource = NodeTarget;
8
+ export type NeighborVia = QueryEdgeClassInput | readonly [QueryEdgeClassInput, ...QueryEdgeClassInput[]];
9
9
  export declare function readNeighbors(query: PageQuery, source: NeighborSource, via: NeighborVia, options: NeighborsOptions): Promise<NodePage>;
10
- //# sourceMappingURL=neighbors.d.ts.map
@@ -1,13 +1,14 @@
1
1
  import { Query } from '@astrale-os/kernel-core/graph/query';
2
+ import { queryNodePath } from '../query.js';
2
3
  import { createNodePage } from './page.js';
3
4
  export async function readNeighbors(query, source, via, options) {
4
5
  if (options === null || typeof options !== 'object') {
5
6
  throw new TypeError('Neighbor read options are invalid.');
6
7
  }
7
- const definitions = Array.isArray(via) ? via : [via];
8
- const [definition, ...additionalDefinitions] = definitions;
9
- if (definition === undefined)
10
- throw new TypeError('Neighbor read requires at least one Definition.');
8
+ const classes = Array.isArray(via) ? via : [via];
9
+ const [classInput, ...additionalClasses] = classes;
10
+ if (classInput === undefined)
11
+ throw new TypeError('Neighbor read requires at least one Class.');
11
12
  const direction = options.direction === 'outgoing'
12
13
  ? options.direction
13
14
  : options.direction === 'incoming'
@@ -15,8 +16,8 @@ export async function readNeighbors(query, source, via, options) {
15
16
  : options.direction === 'incident'
16
17
  ? options.direction
17
18
  : invalidDirection(options.direction);
18
- const ast = Query.from({ kind: 'node', paths: [source] })
19
- .expand({ via: [definition, ...additionalDefinitions], direction })
19
+ const ast = Query.from({ nodes: [queryNodePath(source)] })
20
+ .expand({ via: [classInput, ...additionalClasses], direction })
20
21
  .select({ kind: 'graph' });
21
22
  const { direction: _, page, ...request } = options;
22
23
  const { idempotencyKey: ___, ...basis } = request;
@@ -32,4 +33,3 @@ export async function readNeighbors(query, source, via, options) {
32
33
  function invalidDirection(input) {
33
34
  throw new TypeError(`Unsupported neighbor direction ${JSON.stringify(input)}.`);
34
35
  }
35
- //# sourceMappingURL=neighbors.js.map
@@ -1,6 +1,7 @@
1
1
  import type { GraphData } from '@astrale-os/kernel-core/graph/graph';
2
2
  import type { Node, NodeCollection } from '@astrale-os/kernel-core/graph/node';
3
3
  import type { NodeBinding, QueryAST, QueryGraphSelect, QueryNodeGraphResult, QueryResultFor } from '@astrale-os/kernel-core/graph/query';
4
+ import type { DomainDependency } from '@astrale-os/kernel-dsl/v1/schema';
4
5
  import type { RequestOptions } from '../../transport/index.js';
5
6
  import type { QueryPageRequest, QueryResponse } from '../page-contract.js';
6
7
  export interface NodePage {
@@ -23,12 +24,14 @@ export interface NodePage {
23
24
  readonly cursor: string | null;
24
25
  }>;
25
26
  }
26
- type PageBasis = Pick<RequestOptions, 'signal' | 'timeoutMs'>;
27
+ type PageBasis = Pick<RequestOptions, 'signal' | 'timeoutMs'> & {
28
+ readonly expected?: readonly DomainDependency[];
29
+ };
27
30
  export interface PageQueryOptions extends RequestOptions {
31
+ readonly expected?: readonly DomainDependency[];
28
32
  readonly page: QueryPageRequest;
29
33
  }
30
34
  export type PageQuery = <Query extends QueryAST>(ast: Query, options: PageQueryOptions) => Promise<QueryResponse<QueryResultFor<Query>>>;
31
35
  type NodeGraphQueryAST = QueryAST<QueryGraphSelect<NodeBinding>>;
32
36
  export declare function createNodePage(query: PageQuery, ast: NodeGraphQueryAST, response: QueryResponse<QueryNodeGraphResult>, basis: PageBasis, size: number): NodePage;
33
37
  export {};
34
- //# sourceMappingURL=page.d.ts.map
@@ -53,4 +53,3 @@ function requireMaximumPages(value) {
53
53
  throw new TypeError('NodePage maximumPages must be a positive safe integer.');
54
54
  }
55
55
  }
56
- //# sourceMappingURL=page.js.map
@@ -4,11 +4,10 @@ export interface QueryPageRequest {
4
4
  readonly size: number;
5
5
  readonly after?: string;
6
6
  }
7
- /** Admitted graph result and its optional opaque continuation. */
7
+ /** Decoded graph result and its optional opaque continuation. */
8
8
  export interface QueryResponse<Result extends QueryResult = QueryResult> {
9
9
  readonly result: Result;
10
10
  readonly page: {
11
11
  readonly next?: string;
12
12
  };
13
13
  }
14
- //# sourceMappingURL=page-contract.d.ts.map
@@ -1,2 +1 @@
1
1
  export {};
2
- //# sourceMappingURL=page-contract.js.map
@@ -0,0 +1,14 @@
1
+ import type { Edge } from '@astrale-os/kernel-core/graph/edge';
2
+ import type { Node } from '@astrale-os/kernel-core/graph/node';
3
+ import type { DomainDependency } from '@astrale-os/kernel-dsl/v1/schema';
4
+ import type { QueryResponse } from './page-contract.js';
5
+ export interface QueryProvenance {
6
+ readonly closure: readonly DomainDependency[];
7
+ readonly page: object;
8
+ }
9
+ /** Retain authenticated query provenance without adding serialized response metadata. */
10
+ export declare function retainQueryProvenance(response: QueryResponse, closure: readonly DomainDependency[]): QueryResponse;
11
+ /** Reattach the exact authenticated closure when Store materialization replaces response objects. */
12
+ export declare function retainDerivedQueryProvenance(source: QueryResponse, derived: QueryResponse): QueryResponse;
13
+ export declare function provenanceOfGraphValue(value: Node | Edge): QueryProvenance | undefined;
14
+ export declare function provenanceOfResponse(value: QueryResponse): QueryProvenance | undefined;
@@ -0,0 +1,42 @@
1
+ const graphValues = new WeakMap();
2
+ const responses = new WeakMap();
3
+ /** Retain authenticated query provenance without adding serialized response metadata. */
4
+ export function retainQueryProvenance(response, closure) {
5
+ const provenance = Object.freeze({ closure, page: Object.freeze({}) });
6
+ responses.set(response, provenance);
7
+ const { result } = response;
8
+ if (result.kind === 'graph') {
9
+ for (const node of result.graph.nodes)
10
+ graphValues.set(node, provenance);
11
+ for (const edge of result.graph.edges)
12
+ graphValues.set(edge, provenance);
13
+ }
14
+ else if (result.kind === 'nodes') {
15
+ for (const item of result.nodes) {
16
+ if (item.kind === 'value')
17
+ graphValues.set(item.value, provenance);
18
+ }
19
+ }
20
+ else {
21
+ for (const item of result.edges) {
22
+ if (item.edge.kind === 'value')
23
+ graphValues.set(item.edge.value, provenance);
24
+ if (item.source.kind === 'value')
25
+ graphValues.set(item.source.value, provenance);
26
+ if (item.target.kind === 'value')
27
+ graphValues.set(item.target.value, provenance);
28
+ }
29
+ }
30
+ return response;
31
+ }
32
+ /** Reattach the exact authenticated closure when Store materialization replaces response objects. */
33
+ export function retainDerivedQueryProvenance(source, derived) {
34
+ const provenance = responses.get(source);
35
+ return provenance === undefined ? derived : retainQueryProvenance(derived, provenance.closure);
36
+ }
37
+ export function provenanceOfGraphValue(value) {
38
+ return graphValues.get(value);
39
+ }
40
+ export function provenanceOfResponse(value) {
41
+ return responses.get(value);
42
+ }
@@ -1,5 +1,7 @@
1
1
  import type { QueryAST as QueryASTValue, QueryResultFor } from '@astrale-os/kernel-core/graph/query';
2
+ import { Path, type NodeTarget } from '@astrale-os/kernel-core/path';
2
3
  import type { GraphCall, GraphQueryOptions } from './graph.js';
3
4
  import type { QueryResponse } from './page-contract.js';
5
+ /** Point/neighbor reads are exact targets, unlike Query's overloaded Class sources. */
6
+ export declare function queryNodePath(target: NodeTarget): Path;
4
7
  export declare function queryGraph<Query extends QueryASTValue>(call: GraphCall, input: Query, options: GraphQueryOptions): Promise<QueryResponse<QueryResultFor<Query>>>;
5
- //# sourceMappingURL=query.d.ts.map
@@ -1,14 +1,36 @@
1
- import { QueryAST, QueryResult } from '@astrale-os/kernel-core/graph/query';
2
- import { Path } from '@astrale-os/kernel-core/path';
1
+ import { QueryAST, QueryASTDecodeError, QueryResult } from '@astrale-os/kernel-core/graph/query';
2
+ import { Path, PathError } from '@astrale-os/kernel-core/path';
3
3
  import { query } from '@astrale-os/kernel-core/schema/kernel/syscalls/references';
4
4
  import { call as invocation } from '../client/index.js';
5
+ import { captureExpected } from './expectation.js';
6
+ import { retainQueryProvenance } from './provenance.js';
5
7
  const KERNEL_QUERY_PATH = Path.project(query).raw;
8
+ /** Point/neighbor reads are exact targets, unlike Query's overloaded Class sources. */
9
+ export function queryNodePath(target) {
10
+ try {
11
+ return Path.target(target);
12
+ }
13
+ catch (cause) {
14
+ // Preserve the graph-read Query error contract; do not relabel unexpected defects.
15
+ if (!(cause instanceof PathError))
16
+ throw cause;
17
+ throw new QueryASTDecodeError('/source/nodes/0', 'Invalid Node target', { cause });
18
+ }
19
+ }
6
20
  export async function queryGraph(call, input, options) {
7
21
  const ast = QueryAST.decode(input);
8
- const { page, ...request } = options;
22
+ const { expected, page, ...request } = options;
9
23
  const admittedPage = admitPage(page);
10
- const output = await call(invocation(KERNEL_QUERY_PATH, Object.freeze({ ast, page: admittedPage })), request);
11
- return decodeResponse(output);
24
+ const capturedExpected = captureExpected(expected);
25
+ const output = await call(invocation(KERNEL_QUERY_PATH, Object.freeze({
26
+ ast,
27
+ ...(capturedExpected === undefined ? {} : { expected: capturedExpected }),
28
+ page: admittedPage,
29
+ })), request);
30
+ const response = decodeResponse(output);
31
+ return capturedExpected === undefined
32
+ ? response
33
+ : retainQueryProvenance(response, capturedExpected);
12
34
  }
13
35
  function admitPage(input) {
14
36
  if (input === null || typeof input !== 'object' || Array.isArray(input)) {
@@ -33,11 +55,11 @@ function decodeResponse(input) {
33
55
  if (!hasExactKeys(value, ['result', 'page'])) {
34
56
  throw new TypeError('Graph query response is invalid.');
35
57
  }
36
- const page = value.page;
37
- if (page === null || typeof page !== 'object' || Array.isArray(page)) {
58
+ const pageInput = value.page;
59
+ if (pageInput === null || typeof pageInput !== 'object' || Array.isArray(pageInput)) {
38
60
  throw new TypeError('Graph query response page is invalid.');
39
61
  }
40
- const pageValue = page;
62
+ const pageValue = pageInput;
41
63
  if (!hasExactKeys(pageValue, pageValue.next === undefined ? [] : ['next'])) {
42
64
  throw new TypeError('Graph query response page is invalid.');
43
65
  }
@@ -45,13 +67,11 @@ function decodeResponse(input) {
45
67
  (typeof pageValue.next !== 'string' || pageValue.next.length === 0)) {
46
68
  throw new TypeError('Graph query response continuation is invalid.');
47
69
  }
48
- return Object.freeze({
49
- result: QueryResult.decode(value.result),
50
- page: Object.freeze(pageValue.next === undefined ? {} : { next: pageValue.next }),
51
- });
70
+ const result = QueryResult.decode(value.result);
71
+ const page = Object.freeze(pageValue.next === undefined ? {} : { next: pageValue.next });
72
+ return Object.freeze({ result, page });
52
73
  }
53
74
  function hasExactKeys(input, expected) {
54
75
  const keys = Object.keys(input);
55
76
  return keys.length === expected.length && keys.every((key) => expected.includes(key));
56
77
  }
57
- //# sourceMappingURL=query.js.map
@@ -1,7 +1,6 @@
1
1
  import type { Node } from '@astrale-os/kernel-core/graph/node';
2
- import type { PathLike } from '@astrale-os/kernel-core/path';
2
+ import type { NodeTarget } from '@astrale-os/kernel-core/path';
3
3
  import type { RequestOptions } from '../transport/index.js';
4
4
  import type { GraphCall } from './graph.js';
5
- export declare function getNode(call: GraphCall, path: PathLike, options?: RequestOptions): Promise<Node | null>;
6
- export declare function requireNode(call: GraphCall, path: PathLike, options?: RequestOptions): Promise<Node>;
7
- //# sourceMappingURL=read.d.ts.map
5
+ export declare function getNode(call: GraphCall, path: NodeTarget, options?: RequestOptions): Promise<Node | null>;
6
+ export declare function requireNode(call: GraphCall, path: NodeTarget, options?: RequestOptions): Promise<Node>;
@@ -1,8 +1,8 @@
1
1
  import { Query } from '@astrale-os/kernel-core/graph/query';
2
2
  import { NodeUnavailableError } from './errors.js';
3
- import { queryGraph } from './query.js';
3
+ import { queryGraph, queryNodePath } from './query.js';
4
4
  export async function getNode(call, path, options) {
5
- const ast = Query.from({ kind: 'node', paths: [path] }).select({ kind: 'graph' });
5
+ const ast = Query.from({ nodes: [queryNodePath(path)] }).select({ kind: 'graph' });
6
6
  const response = await queryGraph(call, ast, { ...options, page: { size: 1 } });
7
7
  const { result } = response;
8
8
  if (result.kind !== 'graph')
@@ -10,9 +10,10 @@ export async function getNode(call, path, options) {
10
10
  return result.graph.nodes[0] ?? null;
11
11
  }
12
12
  export async function requireNode(call, path, options) {
13
- const node = await getNode(call, path, options);
13
+ // Retain one immutable target across I/O, including unavailable-error rendering.
14
+ const target = queryNodePath(path);
15
+ const node = await getNode(call, target, options);
14
16
  if (node === null)
15
- throw new NodeUnavailableError(path);
17
+ throw new NodeUnavailableError(target);
16
18
  return node;
17
19
  }
18
- //# sourceMappingURL=read.js.map
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
- export { Client, call, type AuthenticatedClient, type Call, type ClientDispatchOptions, type ClientOptions, type Binary, type BinaryResponse, type Input, type RemoteCredential, type Result, type Stream, type StreamResult, type ValueResult, } from './client/index.js';
2
- export { ClientError, MissError, ProtocolError, type ProtocolErrorOptions, ResponseError, StaleRouteError, TransportError, type TransportDelivery, type TransportErrorOptions, type TransportPhase, } from './errors/index.js';
1
+ export { Target, targetPath } from '@astrale-os/kernel-core/callable';
2
+ export { Client, call, type AuthenticatedClient, type Call, type ClientDispatchOptions, type ClientDispatchOptionsWithBody, type ClientOptions, type Binary, type BinaryResponse, type Input, type RemoteCredential, type Result, type Stream, type StreamResult, type ValueResult, } from './client/index.js';
3
+ export * from './errors/index.js';
3
4
  export { type RequestOptions, type MissControl, type StaleControl, type Transport, type TransportRequest, type TransportResult, } from './transport/index.js';
4
5
  export { HttpTransport, type Fetch, type HttpTransportOptions } from './transport/http/index.js';
5
6
  export { WebSocketTransport, type WebSocketConstructor, type WebSocketTransportOptions, } from './transport/websocket/index.js';
6
7
  export { AutoTransport, formatClientWarning, type AutoTransportOptions, type ClientWarning, } from './transport/auto/index.js';
7
- //# sourceMappingURL=index.d.ts.map
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
+ export { Target, targetPath } from '@astrale-os/kernel-core/callable';
1
2
  export { Client, call, } from './client/index.js';
2
- export { ClientError, MissError, ProtocolError, ResponseError, StaleRouteError, TransportError, } from './errors/index.js';
3
+ export * from './errors/index.js';
3
4
  export {} from './transport/index.js';
4
5
  export { HttpTransport } from './transport/http/index.js';
5
6
  export { WebSocketTransport, } from './transport/websocket/index.js';
6
7
  export { AutoTransport, formatClientWarning, } from './transport/auto/index.js';
7
- //# sourceMappingURL=index.js.map
@@ -5,4 +5,3 @@ export type BatchOptions<Value> = Omit<AsyncBatcherOptions<Value>, 'maxSize' | '
5
5
  readonly wait?: number;
6
6
  };
7
7
  export declare function createBatcher<Value>(consume: (values: Value[]) => Promise<unknown>, options?: BatchOptions<Value>): AsyncBatcher<Value>;
8
- //# sourceMappingURL=batcher.d.ts.map
@@ -11,4 +11,3 @@ export function createBatcher(consume, options = {}) {
11
11
  wait: options.wait ?? DEFAULT_BATCH_WAIT_MS,
12
12
  });
13
13
  }
14
- //# sourceMappingURL=batcher.js.map
@@ -1,3 +1,2 @@
1
1
  export declare const DEFAULT_BATCH_SIZE = 100;
2
2
  export declare const DEFAULT_BATCH_WAIT_MS = 10;
3
- //# sourceMappingURL=defaults.d.ts.map
@@ -1,3 +1,2 @@
1
1
  export const DEFAULT_BATCH_SIZE = 100;
2
2
  export const DEFAULT_BATCH_WAIT_MS = 10;
3
- //# sourceMappingURL=defaults.js.map
@@ -1,2 +1 @@
1
1
  export { createBatcher, type BatchOptions } from './batcher.js';
2
- //# sourceMappingURL=index.d.ts.map