@astrale-os/kernel-client 0.6.0-beta.7 → 0.6.0-beta.71

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 (451) 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 +5 -1
  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 +0 -1
  16. package/dist/client/client.js +0 -1
  17. package/dist/client/credential.d.ts +0 -1
  18. package/dist/client/credential.js +0 -1
  19. package/dist/client/index.d.ts +0 -1
  20. package/dist/client/index.js +0 -1
  21. package/dist/client/request.d.ts +3 -3
  22. package/dist/client/request.js +3 -1
  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/index.d.ts +7 -7
  30. package/dist/errors/index.js +7 -7
  31. package/dist/errors/miss-error.d.ts +0 -1
  32. package/dist/errors/miss-error.js +0 -1
  33. package/dist/errors/protocol-error.d.ts +0 -1
  34. package/dist/errors/protocol-error.js +0 -1
  35. package/dist/errors/response-error.d.ts +0 -1
  36. package/dist/errors/response-error.js +0 -1
  37. package/dist/errors/session-error.d.ts +9 -0
  38. package/dist/errors/session-error.js +9 -0
  39. package/dist/errors/stale-route-error.d.ts +0 -1
  40. package/dist/errors/stale-route-error.js +0 -1
  41. package/dist/errors/transport-error.d.ts +18 -6
  42. package/dist/errors/transport-error.js +11 -7
  43. package/dist/graph/domain/binding.d.ts +22 -0
  44. package/dist/graph/domain/binding.js +123 -0
  45. package/dist/graph/domain/domain.typecheck.d.ts +1 -0
  46. package/dist/graph/domain/domain.typecheck.js +147 -0
  47. package/dist/graph/domain/index.d.ts +3 -0
  48. package/dist/graph/domain/index.js +1 -0
  49. package/dist/graph/domain/model.d.ts +18 -0
  50. package/dist/graph/domain/model.js +1 -0
  51. package/dist/graph/domain/page.d.ts +23 -0
  52. package/dist/graph/domain/page.js +42 -0
  53. package/dist/graph/domain/project.d.ts +8 -0
  54. package/dist/graph/domain/project.js +124 -0
  55. package/dist/graph/domain/provenance.d.ts +6 -0
  56. package/dist/graph/domain/provenance.js +11 -0
  57. package/dist/graph/errors.d.ts +2 -3
  58. package/dist/graph/errors.js +1 -2
  59. package/dist/graph/expectation.d.ts +3 -0
  60. package/dist/graph/expectation.js +6 -0
  61. package/dist/graph/graph.d.ts +12 -8
  62. package/dist/graph/graph.js +0 -1
  63. package/dist/graph/index.d.ts +2 -2
  64. package/dist/graph/index.js +1 -1
  65. package/dist/graph/mutation.d.ts +2 -4
  66. package/dist/graph/mutation.js +10 -2
  67. package/dist/graph/page/index.d.ts +0 -1
  68. package/dist/graph/page/index.js +0 -1
  69. package/dist/graph/page/neighbors.d.ts +4 -5
  70. package/dist/graph/page/neighbors.js +7 -7
  71. package/dist/graph/page/page.d.ts +5 -2
  72. package/dist/graph/page/page.js +0 -1
  73. package/dist/graph/page-contract.d.ts +1 -2
  74. package/dist/graph/page-contract.js +0 -1
  75. package/dist/graph/provenance.d.ts +14 -0
  76. package/dist/graph/provenance.js +42 -0
  77. package/dist/graph/query.d.ts +3 -1
  78. package/dist/graph/query.js +33 -13
  79. package/dist/graph/read.d.ts +3 -4
  80. package/dist/graph/read.js +6 -5
  81. package/dist/index.d.ts +2 -2
  82. package/dist/index.js +2 -2
  83. package/dist/pacer/batcher/batcher.d.ts +0 -1
  84. package/dist/pacer/batcher/batcher.js +0 -1
  85. package/dist/pacer/batcher/defaults.d.ts +0 -1
  86. package/dist/pacer/batcher/defaults.js +0 -1
  87. package/dist/pacer/batcher/index.d.ts +0 -1
  88. package/dist/pacer/batcher/index.js +0 -1
  89. package/dist/pacer/index.d.ts +0 -1
  90. package/dist/pacer/index.js +0 -1
  91. package/dist/pacer/limiter/defaults.d.ts +0 -1
  92. package/dist/pacer/limiter/defaults.js +0 -1
  93. package/dist/pacer/limiter/index.d.ts +0 -1
  94. package/dist/pacer/limiter/index.js +0 -1
  95. package/dist/pacer/limiter/limiter.d.ts +0 -1
  96. package/dist/pacer/limiter/limiter.js +0 -1
  97. package/dist/pacer/queue/defaults.d.ts +0 -1
  98. package/dist/pacer/queue/defaults.js +0 -1
  99. package/dist/pacer/queue/index.d.ts +0 -1
  100. package/dist/pacer/queue/index.js +0 -1
  101. package/dist/pacer/queue/queue.d.ts +0 -1
  102. package/dist/pacer/queue/queue.js +0 -1
  103. package/dist/pacer/retry/defaults.d.ts +0 -1
  104. package/dist/pacer/retry/defaults.js +0 -1
  105. package/dist/pacer/retry/index.d.ts +0 -1
  106. package/dist/pacer/retry/index.js +0 -1
  107. package/dist/pacer/retry/retry.d.ts +0 -1
  108. package/dist/pacer/retry/retry.js +0 -1
  109. package/dist/pool/index.d.ts +0 -1
  110. package/dist/pool/index.js +0 -1
  111. package/dist/pool/pool.d.ts +0 -1
  112. package/dist/pool/pool.js +0 -1
  113. package/dist/pool/target.d.ts +0 -1
  114. package/dist/pool/target.js +0 -1
  115. package/dist/schema/admission.d.ts +1 -2
  116. package/dist/schema/admission.js +0 -1
  117. package/dist/schema/contracts.d.ts +6 -16
  118. package/dist/schema/contracts.js +0 -1
  119. package/dist/schema/index.d.ts +2 -3
  120. package/dist/schema/index.js +1 -2
  121. package/dist/schema/introspection.d.ts +1 -2
  122. package/dist/schema/introspection.js +5 -2
  123. package/dist/schema/operation.d.ts +0 -1
  124. package/dist/schema/operation.js +2 -3
  125. package/dist/schema/schema.d.ts +13 -10
  126. package/dist/schema/schema.js +83 -11
  127. package/dist/session/admission.d.ts +18 -0
  128. package/dist/session/admission.js +117 -0
  129. package/dist/session/bound.d.ts +46 -0
  130. package/dist/session/bound.js +93 -0
  131. package/dist/session/context/control.d.ts +0 -1
  132. package/dist/session/context/control.js +0 -1
  133. package/dist/session/context/index.d.ts +0 -1
  134. package/dist/session/context/index.js +0 -1
  135. package/dist/session/context/limits.d.ts +0 -1
  136. package/dist/session/context/limits.js +0 -1
  137. package/dist/session/context/operation.d.ts +0 -1
  138. package/dist/session/context/operation.js +19 -17
  139. package/dist/session/context/policy.d.ts +0 -1
  140. package/dist/session/context/policy.js +0 -1
  141. package/dist/session/credential/index.d.ts +1 -0
  142. package/dist/session/credential/index.js +1 -0
  143. package/dist/session/credential/limits.d.ts +12 -0
  144. package/dist/session/credential/limits.js +12 -0
  145. package/dist/session/credential/provider.d.ts +51 -0
  146. package/dist/session/credential/provider.js +229 -0
  147. package/dist/session/discovery/bundle.d.ts +5 -2
  148. package/dist/session/discovery/bundle.js +34 -15
  149. package/dist/session/discovery/discovery.d.ts +4 -2
  150. package/dist/session/discovery/discovery.js +34 -6
  151. package/dist/session/discovery/index.d.ts +3 -1
  152. package/dist/session/discovery/index.js +1 -1
  153. package/dist/session/discovery/publication.d.ts +0 -1
  154. package/dist/session/discovery/publication.js +4 -4
  155. package/dist/session/discovery/snapshot.d.ts +0 -1
  156. package/dist/session/discovery/snapshot.js +0 -1
  157. package/dist/session/discovery/transport.d.ts +6 -0
  158. package/dist/session/discovery/transport.js +13 -0
  159. package/dist/session/index.d.ts +5 -3
  160. package/dist/session/index.js +3 -1
  161. package/dist/session/reference.d.ts +24 -10
  162. package/dist/session/reference.js +39 -11
  163. package/dist/session/routing/auth.d.ts +0 -1
  164. package/dist/session/routing/auth.js +0 -1
  165. package/dist/session/routing/cache.d.ts +27 -8
  166. package/dist/session/routing/cache.js +218 -25
  167. package/dist/session/routing/dispatch.d.ts +3 -7
  168. package/dist/session/routing/dispatch.js +53 -28
  169. package/dist/session/routing/envelope.d.ts +2 -1
  170. package/dist/session/routing/envelope.js +14 -10
  171. package/dist/session/routing/index.d.ts +1 -3
  172. package/dist/session/routing/index.js +1 -2
  173. package/dist/session/routing/request.d.ts +0 -1
  174. package/dist/session/routing/request.js +0 -1
  175. package/dist/session/session.d.ts +18 -7
  176. package/dist/session/session.js +77 -33
  177. package/dist/session/session.typecheck.d.ts +0 -1
  178. package/dist/session/session.typecheck.js +103 -3
  179. package/dist/session/views/catalog.d.ts +0 -1
  180. package/dist/session/views/catalog.js +14 -5
  181. package/dist/session/views/index.d.ts +0 -1
  182. package/dist/session/views/index.js +0 -1
  183. package/dist/session/views/resolve.d.ts +0 -1
  184. package/dist/session/views/resolve.js +0 -1
  185. package/dist/store/entity-index.d.ts +0 -1
  186. package/dist/store/entity-index.js +0 -1
  187. package/dist/store/index.d.ts +0 -1
  188. package/dist/store/index.js +0 -1
  189. package/dist/store/memory.d.ts +2 -2
  190. package/dist/store/memory.js +38 -15
  191. package/dist/store/mutation.d.ts +1 -2
  192. package/dist/store/mutation.js +6 -4
  193. package/dist/store/observe.d.ts +0 -1
  194. package/dist/store/observe.js +0 -1
  195. package/dist/store/optimistic.d.ts +0 -1
  196. package/dist/store/optimistic.js +0 -1
  197. package/dist/store/query-key.d.ts +2 -2
  198. package/dist/store/query-key.js +7 -3
  199. package/dist/store/shape.d.ts +4 -2
  200. package/dist/store/shape.js +4 -2
  201. package/dist/store/store.d.ts +2 -4
  202. package/dist/store/store.js +6 -5
  203. package/dist/store/store.typecheck.d.ts +0 -1
  204. package/dist/store/store.typecheck.js +3 -9
  205. package/dist/transport/auto/decision.d.ts +0 -1
  206. package/dist/transport/auto/decision.js +0 -1
  207. package/dist/transport/auto/fallback.d.ts +2 -2
  208. package/dist/transport/auto/fallback.js +10 -11
  209. package/dist/transport/auto/index.d.ts +0 -1
  210. package/dist/transport/auto/index.js +0 -1
  211. package/dist/transport/auto/transport.d.ts +0 -1
  212. package/dist/transport/auto/transport.js +5 -6
  213. package/dist/transport/auto/warning.d.ts +0 -1
  214. package/dist/transport/auto/warning.js +5 -3
  215. package/dist/transport/deadline.d.ts +0 -1
  216. package/dist/transport/deadline.js +0 -1
  217. package/dist/transport/failure.d.ts +7 -0
  218. package/dist/transport/failure.js +9 -0
  219. package/dist/transport/http/byte-stream.d.ts +17 -0
  220. package/dist/transport/http/byte-stream.js +86 -0
  221. package/dist/transport/http/index.d.ts +0 -1
  222. package/dist/transport/http/index.js +0 -1
  223. package/dist/transport/http/response.d.ts +0 -1
  224. package/dist/transport/http/response.js +0 -1
  225. package/dist/transport/http/stream.d.ts +0 -1
  226. package/dist/transport/http/stream.js +7 -7
  227. package/dist/transport/http/transport.d.ts +0 -1
  228. package/dist/transport/http/transport.js +43 -20
  229. package/dist/transport/index.d.ts +0 -1
  230. package/dist/transport/index.js +0 -1
  231. package/dist/transport/transport.d.ts +0 -1
  232. package/dist/transport/transport.js +0 -1
  233. package/dist/transport/websocket/connection.d.ts +0 -1
  234. package/dist/transport/websocket/connection.js +16 -26
  235. package/dist/transport/websocket/exchange.d.ts +0 -1
  236. package/dist/transport/websocket/exchange.js +5 -9
  237. package/dist/transport/websocket/index.d.ts +0 -1
  238. package/dist/transport/websocket/index.js +0 -1
  239. package/dist/transport/websocket/transport.d.ts +0 -1
  240. package/dist/transport/websocket/transport.js +7 -20
  241. package/package.json +12 -14
  242. package/dist/auth/auth.d.ts.map +0 -1
  243. package/dist/auth/auth.js.map +0 -1
  244. package/dist/auth/authorization.d.ts.map +0 -1
  245. package/dist/auth/authorization.js.map +0 -1
  246. package/dist/auth/credential.d.ts.map +0 -1
  247. package/dist/auth/credential.js.map +0 -1
  248. package/dist/auth/identity.d.ts.map +0 -1
  249. package/dist/auth/identity.js.map +0 -1
  250. package/dist/auth/index.d.ts.map +0 -1
  251. package/dist/auth/index.js.map +0 -1
  252. package/dist/auth/provision.d.ts +0 -9
  253. package/dist/auth/provision.d.ts.map +0 -1
  254. package/dist/auth/provision.js +0 -11
  255. package/dist/auth/provision.js.map +0 -1
  256. package/dist/client/admission.d.ts.map +0 -1
  257. package/dist/client/admission.js.map +0 -1
  258. package/dist/client/client.d.ts.map +0 -1
  259. package/dist/client/client.js.map +0 -1
  260. package/dist/client/credential.d.ts.map +0 -1
  261. package/dist/client/credential.js.map +0 -1
  262. package/dist/client/index.d.ts.map +0 -1
  263. package/dist/client/index.js.map +0 -1
  264. package/dist/client/request.d.ts.map +0 -1
  265. package/dist/client/request.js.map +0 -1
  266. package/dist/client/result.d.ts.map +0 -1
  267. package/dist/client/result.js.map +0 -1
  268. package/dist/client/routing-control.d.ts.map +0 -1
  269. package/dist/client/routing-control.js.map +0 -1
  270. package/dist/errors/client-error.d.ts.map +0 -1
  271. package/dist/errors/client-error.js.map +0 -1
  272. package/dist/errors/index.d.ts.map +0 -1
  273. package/dist/errors/index.js.map +0 -1
  274. package/dist/errors/miss-error.d.ts.map +0 -1
  275. package/dist/errors/miss-error.js.map +0 -1
  276. package/dist/errors/protocol-error.d.ts.map +0 -1
  277. package/dist/errors/protocol-error.js.map +0 -1
  278. package/dist/errors/response-error.d.ts.map +0 -1
  279. package/dist/errors/response-error.js.map +0 -1
  280. package/dist/errors/stale-route-error.d.ts.map +0 -1
  281. package/dist/errors/stale-route-error.js.map +0 -1
  282. package/dist/errors/transport-error.d.ts.map +0 -1
  283. package/dist/errors/transport-error.js.map +0 -1
  284. package/dist/graph/errors.d.ts.map +0 -1
  285. package/dist/graph/errors.js.map +0 -1
  286. package/dist/graph/graph.d.ts.map +0 -1
  287. package/dist/graph/graph.js.map +0 -1
  288. package/dist/graph/index.d.ts.map +0 -1
  289. package/dist/graph/index.js.map +0 -1
  290. package/dist/graph/mutation.d.ts.map +0 -1
  291. package/dist/graph/mutation.js.map +0 -1
  292. package/dist/graph/page/index.d.ts.map +0 -1
  293. package/dist/graph/page/index.js.map +0 -1
  294. package/dist/graph/page/neighbors.d.ts.map +0 -1
  295. package/dist/graph/page/neighbors.js.map +0 -1
  296. package/dist/graph/page/page.d.ts.map +0 -1
  297. package/dist/graph/page/page.js.map +0 -1
  298. package/dist/graph/page-contract.d.ts.map +0 -1
  299. package/dist/graph/page-contract.js.map +0 -1
  300. package/dist/graph/query.d.ts.map +0 -1
  301. package/dist/graph/query.js.map +0 -1
  302. package/dist/graph/read.d.ts.map +0 -1
  303. package/dist/graph/read.js.map +0 -1
  304. package/dist/index.d.ts.map +0 -1
  305. package/dist/index.js.map +0 -1
  306. package/dist/pacer/batcher/batcher.d.ts.map +0 -1
  307. package/dist/pacer/batcher/batcher.js.map +0 -1
  308. package/dist/pacer/batcher/defaults.d.ts.map +0 -1
  309. package/dist/pacer/batcher/defaults.js.map +0 -1
  310. package/dist/pacer/batcher/index.d.ts.map +0 -1
  311. package/dist/pacer/batcher/index.js.map +0 -1
  312. package/dist/pacer/index.d.ts.map +0 -1
  313. package/dist/pacer/index.js.map +0 -1
  314. package/dist/pacer/limiter/defaults.d.ts.map +0 -1
  315. package/dist/pacer/limiter/defaults.js.map +0 -1
  316. package/dist/pacer/limiter/index.d.ts.map +0 -1
  317. package/dist/pacer/limiter/index.js.map +0 -1
  318. package/dist/pacer/limiter/limiter.d.ts.map +0 -1
  319. package/dist/pacer/limiter/limiter.js.map +0 -1
  320. package/dist/pacer/queue/defaults.d.ts.map +0 -1
  321. package/dist/pacer/queue/defaults.js.map +0 -1
  322. package/dist/pacer/queue/index.d.ts.map +0 -1
  323. package/dist/pacer/queue/index.js.map +0 -1
  324. package/dist/pacer/queue/queue.d.ts.map +0 -1
  325. package/dist/pacer/queue/queue.js.map +0 -1
  326. package/dist/pacer/retry/defaults.d.ts.map +0 -1
  327. package/dist/pacer/retry/defaults.js.map +0 -1
  328. package/dist/pacer/retry/index.d.ts.map +0 -1
  329. package/dist/pacer/retry/index.js.map +0 -1
  330. package/dist/pacer/retry/retry.d.ts.map +0 -1
  331. package/dist/pacer/retry/retry.js.map +0 -1
  332. package/dist/pool/index.d.ts.map +0 -1
  333. package/dist/pool/index.js.map +0 -1
  334. package/dist/pool/pool.d.ts.map +0 -1
  335. package/dist/pool/pool.js.map +0 -1
  336. package/dist/pool/target.d.ts.map +0 -1
  337. package/dist/pool/target.js.map +0 -1
  338. package/dist/schema/admission.d.ts.map +0 -1
  339. package/dist/schema/admission.js.map +0 -1
  340. package/dist/schema/contracts.d.ts.map +0 -1
  341. package/dist/schema/contracts.js.map +0 -1
  342. package/dist/schema/index.d.ts.map +0 -1
  343. package/dist/schema/index.js.map +0 -1
  344. package/dist/schema/introspection.d.ts.map +0 -1
  345. package/dist/schema/introspection.js.map +0 -1
  346. package/dist/schema/operation.d.ts.map +0 -1
  347. package/dist/schema/operation.js.map +0 -1
  348. package/dist/schema/schema.d.ts.map +0 -1
  349. package/dist/schema/schema.js.map +0 -1
  350. package/dist/session/context/control.d.ts.map +0 -1
  351. package/dist/session/context/control.js.map +0 -1
  352. package/dist/session/context/index.d.ts.map +0 -1
  353. package/dist/session/context/index.js.map +0 -1
  354. package/dist/session/context/limits.d.ts.map +0 -1
  355. package/dist/session/context/limits.js.map +0 -1
  356. package/dist/session/context/operation.d.ts.map +0 -1
  357. package/dist/session/context/operation.js.map +0 -1
  358. package/dist/session/context/policy.d.ts.map +0 -1
  359. package/dist/session/context/policy.js.map +0 -1
  360. package/dist/session/discovery/bundle.d.ts.map +0 -1
  361. package/dist/session/discovery/bundle.js.map +0 -1
  362. package/dist/session/discovery/discovery.d.ts.map +0 -1
  363. package/dist/session/discovery/discovery.js.map +0 -1
  364. package/dist/session/discovery/index.d.ts.map +0 -1
  365. package/dist/session/discovery/index.js.map +0 -1
  366. package/dist/session/discovery/publication.d.ts.map +0 -1
  367. package/dist/session/discovery/publication.js.map +0 -1
  368. package/dist/session/discovery/snapshot.d.ts.map +0 -1
  369. package/dist/session/discovery/snapshot.js.map +0 -1
  370. package/dist/session/index.d.ts.map +0 -1
  371. package/dist/session/index.js.map +0 -1
  372. package/dist/session/reference.d.ts.map +0 -1
  373. package/dist/session/reference.js.map +0 -1
  374. package/dist/session/routing/auth.d.ts.map +0 -1
  375. package/dist/session/routing/auth.js.map +0 -1
  376. package/dist/session/routing/cache.d.ts.map +0 -1
  377. package/dist/session/routing/cache.js.map +0 -1
  378. package/dist/session/routing/dispatch.d.ts.map +0 -1
  379. package/dist/session/routing/dispatch.js.map +0 -1
  380. package/dist/session/routing/envelope.d.ts.map +0 -1
  381. package/dist/session/routing/envelope.js.map +0 -1
  382. package/dist/session/routing/expectation.d.ts +0 -7
  383. package/dist/session/routing/expectation.d.ts.map +0 -1
  384. package/dist/session/routing/expectation.js +0 -2
  385. package/dist/session/routing/expectation.js.map +0 -1
  386. package/dist/session/routing/index.d.ts.map +0 -1
  387. package/dist/session/routing/index.js.map +0 -1
  388. package/dist/session/routing/request.d.ts.map +0 -1
  389. package/dist/session/routing/request.js.map +0 -1
  390. package/dist/session/session.d.ts.map +0 -1
  391. package/dist/session/session.js.map +0 -1
  392. package/dist/session/session.typecheck.d.ts.map +0 -1
  393. package/dist/session/session.typecheck.js.map +0 -1
  394. package/dist/session/views/catalog.d.ts.map +0 -1
  395. package/dist/session/views/catalog.js.map +0 -1
  396. package/dist/session/views/index.d.ts.map +0 -1
  397. package/dist/session/views/index.js.map +0 -1
  398. package/dist/session/views/resolve.d.ts.map +0 -1
  399. package/dist/session/views/resolve.js.map +0 -1
  400. package/dist/store/entity-index.d.ts.map +0 -1
  401. package/dist/store/entity-index.js.map +0 -1
  402. package/dist/store/index.d.ts.map +0 -1
  403. package/dist/store/index.js.map +0 -1
  404. package/dist/store/memory.d.ts.map +0 -1
  405. package/dist/store/memory.js.map +0 -1
  406. package/dist/store/mutation.d.ts.map +0 -1
  407. package/dist/store/mutation.js.map +0 -1
  408. package/dist/store/observe.d.ts.map +0 -1
  409. package/dist/store/observe.js.map +0 -1
  410. package/dist/store/optimistic.d.ts.map +0 -1
  411. package/dist/store/optimistic.js.map +0 -1
  412. package/dist/store/query-key.d.ts.map +0 -1
  413. package/dist/store/query-key.js.map +0 -1
  414. package/dist/store/shape.d.ts.map +0 -1
  415. package/dist/store/shape.js.map +0 -1
  416. package/dist/store/store.d.ts.map +0 -1
  417. package/dist/store/store.js.map +0 -1
  418. package/dist/store/store.typecheck.d.ts.map +0 -1
  419. package/dist/store/store.typecheck.js.map +0 -1
  420. package/dist/transport/auto/decision.d.ts.map +0 -1
  421. package/dist/transport/auto/decision.js.map +0 -1
  422. package/dist/transport/auto/fallback.d.ts.map +0 -1
  423. package/dist/transport/auto/fallback.js.map +0 -1
  424. package/dist/transport/auto/index.d.ts.map +0 -1
  425. package/dist/transport/auto/index.js.map +0 -1
  426. package/dist/transport/auto/transport.d.ts.map +0 -1
  427. package/dist/transport/auto/transport.js.map +0 -1
  428. package/dist/transport/auto/warning.d.ts.map +0 -1
  429. package/dist/transport/auto/warning.js.map +0 -1
  430. package/dist/transport/deadline.d.ts.map +0 -1
  431. package/dist/transport/deadline.js.map +0 -1
  432. package/dist/transport/http/index.d.ts.map +0 -1
  433. package/dist/transport/http/index.js.map +0 -1
  434. package/dist/transport/http/response.d.ts.map +0 -1
  435. package/dist/transport/http/response.js.map +0 -1
  436. package/dist/transport/http/stream.d.ts.map +0 -1
  437. package/dist/transport/http/stream.js.map +0 -1
  438. package/dist/transport/http/transport.d.ts.map +0 -1
  439. package/dist/transport/http/transport.js.map +0 -1
  440. package/dist/transport/index.d.ts.map +0 -1
  441. package/dist/transport/index.js.map +0 -1
  442. package/dist/transport/transport.d.ts.map +0 -1
  443. package/dist/transport/transport.js.map +0 -1
  444. package/dist/transport/websocket/connection.d.ts.map +0 -1
  445. package/dist/transport/websocket/connection.js.map +0 -1
  446. package/dist/transport/websocket/exchange.d.ts.map +0 -1
  447. package/dist/transport/websocket/exchange.js.map +0 -1
  448. package/dist/transport/websocket/index.d.ts.map +0 -1
  449. package/dist/transport/websocket/index.js.map +0 -1
  450. package/dist/transport/websocket/transport.d.ts.map +0 -1
  451. package/dist/transport/websocket/transport.js.map +0 -1
@@ -0,0 +1,22 @@
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 { QueryAST, QuerySingleSourceClassOf } from '@astrale-os/kernel-core/graph/query';
4
+ import type { Domain } from '@astrale-os/kernel-dsl/v1/domain';
5
+ import type { AnyResolvedClass, ResolvedClass } from '@astrale-os/kernel-dsl/v1/language';
6
+ import type { GraphApi, GraphQueryOptions } from '../graph.js';
7
+ import type { BoundEdge, BoundNode } from './model.js';
8
+ import type { BoundQueryPage } from './page.js';
9
+ import type { MethodCall } from './project.js';
10
+ export type DomainQueryOptions = Omit<GraphQueryOptions, 'expected'>;
11
+ type AdmittedSourceClasses<Query extends QueryAST> = [QuerySingleSourceClassOf<Query>] extends [
12
+ never
13
+ ] ? never : QuerySingleSourceClassOf<Query> extends AnyResolvedClass ? unknown : never;
14
+ export interface DomainBinding<DomainValue extends Domain = Domain> {
15
+ readonly domain: DomainValue;
16
+ readonly graph: GraphApi;
17
+ query<Query extends QueryAST>(query: Query & AdmittedSourceClasses<Query>, options: DomainQueryOptions): Promise<BoundQueryPage<Query>>;
18
+ wrapNode<Class extends ResolvedClass<'node'>>(selected: Class, node: Node): BoundNode<Class>;
19
+ wrapEdge<Class extends ResolvedClass<'edge'>>(selected: Class, edge: Edge): BoundEdge<Class>;
20
+ }
21
+ export declare function createDomainBinding<DomainValue extends Domain>(domain: DomainValue, graph: GraphApi, call: MethodCall): DomainBinding<DomainValue>;
22
+ export {};
@@ -0,0 +1,123 @@
1
+ import { ClassKey } from '@astrale-os/kernel-dsl/v1/addressing';
2
+ import { isDomain } from '@astrale-os/kernel-dsl/v1/domain';
3
+ import { provenanceOfGraphValue, provenanceOfResponse } from '../provenance.js';
4
+ import { selectedEdges, selectedNodes } from './page.js';
5
+ import { projectEdge, projectNode } from './project.js';
6
+ import { provenanceOfProjectedValue, sameClosure } from './provenance.js';
7
+ export function createDomainBinding(domain, graph, call) {
8
+ if (!isDomain(domain))
9
+ throw new TypeError('Domain binding requires an admitted DSL Domain.');
10
+ const wrapNode = (selected, node) => {
11
+ requireOwnedClass(domain, selected);
12
+ const provenance = requireProvenance(domain, node);
13
+ const exact = requireExactClass(domain, node.class, 'node');
14
+ if (!exact.satisfies(selected))
15
+ throw new TypeError(`${exact.key} does not satisfy ${selected.key}.`);
16
+ const diagnostics = exact.validateProperties(node.props);
17
+ if (diagnostics.length > 0)
18
+ throw new TypeError(`Node ${node.id} has invalid exact Properties.`);
19
+ return projectNode(selected, node, provenance, call);
20
+ };
21
+ const wrapEdge = (selected, edge) => {
22
+ requireOwnedClass(domain, selected);
23
+ const provenance = requireProvenance(domain, edge);
24
+ const exact = requireExactClass(domain, edge.class, 'edge');
25
+ if (!exact.satisfies(selected))
26
+ throw new TypeError(`${exact.key} does not satisfy ${selected.key}.`);
27
+ const diagnostics = exact.validateProperties(edge.props);
28
+ if (diagnostics.length > 0)
29
+ throw new TypeError('Edge has invalid exact Properties.');
30
+ return projectEdge(selected, edge, provenance);
31
+ };
32
+ return Object.freeze({
33
+ domain,
34
+ graph,
35
+ async query(query, options) {
36
+ const selected = selectedSourceClass(domain, query);
37
+ const response = await graph.query(query, { ...options, expected: domain.closure });
38
+ const provenance = provenanceOfResponse(response);
39
+ if (provenance === undefined || !sameClosure(provenance.closure, domain.closure)) {
40
+ throw new TypeError('Authenticated query provenance was not retained.');
41
+ }
42
+ const next = response.page.next === undefined
43
+ ? undefined
44
+ : () => this.query(query, {
45
+ ...options,
46
+ page: { ...options.page, after: response.page.next },
47
+ });
48
+ if (selected.kind === 'node') {
49
+ const nodes = selectedNodes(response).map((node) => wrapNode(selected, node));
50
+ return Object.freeze({
51
+ nodes: Object.freeze(nodes),
52
+ raw: response,
53
+ ...(next === undefined ? {} : { next }),
54
+ refine: (value, target) => refineNode(domain, call, value, target, provenance),
55
+ });
56
+ }
57
+ const edges = selectedEdges(response).map((edge) => wrapEdge(selected, edge));
58
+ return Object.freeze({
59
+ edges: Object.freeze(edges),
60
+ raw: response,
61
+ ...(next === undefined ? {} : { next }),
62
+ refine: (value, target) => refineEdge(domain, value, target, provenance),
63
+ });
64
+ },
65
+ wrapNode,
66
+ wrapEdge,
67
+ });
68
+ }
69
+ function selectedSourceClass(domain, query) {
70
+ if (query.steps.some((step) => step.op === 'expand')) {
71
+ throw new TypeError('Rich Domain queries do not yet project expanded bindings.');
72
+ }
73
+ if (query.source.terms.length !== 1 || query.source.terms[0]?.kind !== 'class') {
74
+ throw new TypeError('Rich Domain queries require one exact Class source term.');
75
+ }
76
+ const sourceBinding = query.source.kind === 'node' ? query.source.binding : query.source.bindings.edge;
77
+ if (query.select.binding !== sourceBinding) {
78
+ throw new TypeError('Rich Domain queries must select their original source binding.');
79
+ }
80
+ const selected = domain.definition(query.source.terms[0].class);
81
+ if (selected?.ref.kind !== 'class' || selected.kind !== query.source.kind) {
82
+ throw new TypeError('Query source Class is absent or has the wrong graph kind.');
83
+ }
84
+ return selected;
85
+ }
86
+ function refineNode(domain, call, value, target, page) {
87
+ requireOwnedClass(domain, target);
88
+ const provenance = requirePageProvenance(value, page);
89
+ const exact = requireExactClass(domain, value.class, 'node');
90
+ return exact.satisfies(target) ? projectNode(target, value, provenance, call) : undefined;
91
+ }
92
+ function refineEdge(domain, value, target, page) {
93
+ requireOwnedClass(domain, target);
94
+ const provenance = requirePageProvenance(value, page);
95
+ const exact = requireExactClass(domain, value.class, 'edge');
96
+ return exact.satisfies(target) ? projectEdge(target, value, provenance) : undefined;
97
+ }
98
+ function requirePageProvenance(value, page) {
99
+ const provenance = provenanceOfProjectedValue(value);
100
+ if (provenance?.page !== page.page) {
101
+ throw new TypeError('Refinement requires a value from this exact result page.');
102
+ }
103
+ return provenance;
104
+ }
105
+ function requireOwnedClass(domain, selected) {
106
+ if (domain.definition(selected.key) !== selected) {
107
+ throw new TypeError('Selected Class does not belong to the bound Domain closure.');
108
+ }
109
+ }
110
+ function requireProvenance(domain, value) {
111
+ const provenance = provenanceOfGraphValue(value);
112
+ if (provenance === undefined || !sameClosure(provenance.closure, domain.closure)) {
113
+ throw new TypeError('Graph value lacks matching authenticated query provenance.');
114
+ }
115
+ return provenance;
116
+ }
117
+ function requireExactClass(domain, key, kind) {
118
+ const exact = domain.definition(ClassKey.ref(ClassKey(key)));
119
+ if (exact?.ref.kind !== 'class' || exact.kind !== kind || exact.abstract) {
120
+ throw new TypeError(`Exact ${kind} Class ${key} is not active and concrete.`);
121
+ }
122
+ return exact;
123
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,147 @@
1
+ import { NodeId } from '@astrale-os/kernel-core/graph/node';
2
+ import { Query, QueryAST } from '@astrale-os/kernel-core/graph/query';
3
+ import { Path } from '@astrale-os/kernel-core/path';
4
+ import { schema } from '@astrale-os/kernel-dsl/v1';
5
+ import { defineSchema, edgeClass, method, nodeClass, property, valueSchema, } from '@astrale-os/kernel-dsl/v1/builder';
6
+ const Resource = nodeClass({
7
+ abstract: true,
8
+ properties: {
9
+ title: property(valueSchema()({ type: 'string' }), { required: true }),
10
+ },
11
+ methods: {
12
+ rename: method({
13
+ auth: 'authenticated',
14
+ input: valueSchema()({
15
+ type: 'object',
16
+ properties: { title: { type: 'string' } },
17
+ required: ['title'],
18
+ additionalProperties: false,
19
+ }),
20
+ output: valueSchema()({ type: 'string' }),
21
+ }),
22
+ },
23
+ });
24
+ const Document = nodeClass({
25
+ extends: [Resource],
26
+ properties: { body: property(valueSchema()({ type: 'string' })) },
27
+ });
28
+ const MethodlessParent = nodeClass({
29
+ abstract: true,
30
+ properties: {},
31
+ });
32
+ const MethodlessChild = nodeClass({
33
+ extends: [MethodlessParent],
34
+ properties: {},
35
+ });
36
+ const PrototypeMembers = nodeClass({
37
+ properties: {
38
+ toString: property(valueSchema()({ type: 'string' }), { required: true }),
39
+ },
40
+ methods: {
41
+ constructor: method({
42
+ auth: 'authenticated',
43
+ input: valueSchema()({ type: 'string' }),
44
+ output: valueSchema()({ type: 'string' }),
45
+ }),
46
+ },
47
+ });
48
+ const Work = schema.resolve(defineSchema('client-binding-types.example', {
49
+ classes: {
50
+ Resource,
51
+ Document,
52
+ MethodlessParent,
53
+ MethodlessChild,
54
+ PrototypeMembers,
55
+ Related: edgeClass.directed({
56
+ source: { as: 'source', accepts: [Resource], outgoing: '0..*' },
57
+ target: { as: 'target', accepts: [Resource], incoming: '0..*' },
58
+ }),
59
+ },
60
+ }));
61
+ const source = Query.from({ nodes: [Work.classes.Resource] });
62
+ const query = source.select({ kind: 'nodes', projection: { kind: 'value' } });
63
+ const prototypeSource = Query.from({ nodes: [Work.classes.PrototypeMembers] });
64
+ const prototypeQuery = prototypeSource.select({ kind: 'nodes', projection: { kind: 'value' } });
65
+ // @ts-expect-error Concrete Method shortcuts are absent from a child-selected projection.
66
+ const resourceAcceptsDocument = documentProjection;
67
+ void resourceAcceptsDocument;
68
+ const resourceReceiverAcceptsDocument = documentProjection;
69
+ void resourceReceiverAcceptsDocument;
70
+ // @ts-expect-error A projection selected for another unrelated Class is not a Resource projection.
71
+ const resourceRejectsPrototype = prototypeProjection;
72
+ void resourceRejectsPrototype;
73
+ // @ts-expect-error Receiver evidence selected for an unrelated Class is not accepted.
74
+ const resourceReceiverRejectsPrototype = prototypeProjection;
75
+ void resourceReceiverRejectsPrototype;
76
+ const methodlessParentAcceptsChild = methodlessChildProjection;
77
+ void methodlessParentAcceptsChild;
78
+ // @ts-expect-error Selected ancestor provenance cannot be widened into a child projection.
79
+ const documentRejectsResource = resourceProjection;
80
+ void documentRejectsResource;
81
+ async function typeProof() {
82
+ await graph.get(definitionRef);
83
+ await graph.getOrThrow(definitionRef);
84
+ await graph.get(Work.classes.Resource.ref);
85
+ await graph.neighbors(definitionRef, Work.classes.Related.ref, {
86
+ direction: 'outgoing',
87
+ page: { size: 1 },
88
+ });
89
+ const page = await binding.query(query, { page: { size: 10 } });
90
+ const resource = page.nodes[0];
91
+ const title = resource.title;
92
+ const renamed = await resource.rename({ title: 'next' });
93
+ // @ts-expect-error Ancestor projection does not expose child-only Properties.
94
+ resource.body;
95
+ const document = page.refine(resource, Work.classes.Document);
96
+ const body = document?.body;
97
+ const detached = QueryAST.decode(query);
98
+ // @ts-expect-error Decoding destroys the authoring Class provenance required for rich projection.
99
+ await binding.query(detached, { page: { size: 10 } });
100
+ const multipleClasses = Query.from({
101
+ nodes: [Work.classes.Resource, Work.classes.Document],
102
+ }).select({ kind: 'nodes', projection: { kind: 'value' } });
103
+ // @ts-expect-error Multiple Class terms do not establish one rich selected-Class contract.
104
+ await binding.query(multipleClasses, { page: { size: 10 } });
105
+ const mixedSource = Query.from({
106
+ nodes: [NodeId('document'), Work.classes.Resource],
107
+ }).select({ kind: 'nodes', projection: { kind: 'value' } });
108
+ // @ts-expect-error Path and Class terms do not establish one rich selected-Class contract.
109
+ await binding.query(mixedSource, { page: { size: 10 } });
110
+ const detachedRefSource = Query.from({ nodes: [Work.classes.Resource.ref] }).select({
111
+ kind: 'nodes',
112
+ projection: { kind: 'value' },
113
+ });
114
+ // @ts-expect-error A ClassRef has no resolved schema witness for rich projection.
115
+ await binding.query(detachedRefSource, { page: { size: 10 } });
116
+ const detachedKeySource = Query.from({ nodes: [Work.classes.Resource.key] }).select({
117
+ kind: 'nodes',
118
+ projection: { kind: 'value' },
119
+ });
120
+ // @ts-expect-error A ClassKey has no resolved schema witness for rich projection.
121
+ await binding.query(detachedKeySource, { page: { size: 10 } });
122
+ const prototypePage = await binding.query(prototypeQuery, { page: { size: 1 } });
123
+ const prototype = prototypePage.nodes[0];
124
+ const toString = prototype.toString;
125
+ const constructed = await prototype.constructor('input');
126
+ const structural = Path.project(Work.classes.Resource.ref).raw;
127
+ await graph.get(structural);
128
+ await graph.getOrThrow(structural);
129
+ await graph.neighbors(structural, Work.classes.Related, {
130
+ direction: 'outgoing',
131
+ page: { size: 1 },
132
+ });
133
+ const exact = NodeId('document');
134
+ await graph.get(exact);
135
+ await graph.getOrThrow(exact);
136
+ await graph.neighbors(exact, Work.classes.Related, {
137
+ direction: 'outgoing',
138
+ page: { size: 1 },
139
+ });
140
+ // @ts-expect-error Neighbor traversal requires Edge Classes, not Node Classes.
141
+ await graph.neighbors(exact, Work.classes.Resource, {
142
+ direction: 'outgoing',
143
+ page: { size: 1 },
144
+ });
145
+ return { title, renamed, body, toString, constructed };
146
+ }
147
+ void typeProof;
@@ -0,0 +1,3 @@
1
+ export type { DomainBinding, DomainQueryOptions } from './binding.js';
2
+ export type { BoundEdge, BoundGraphValue, BoundNode, BoundNodeFor } from './model.js';
3
+ export type { BoundEdgePage, BoundNodePage, BoundQueryPage } from './page.js';
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,18 @@
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 { DefinitionKey, Key } from '@astrale-os/kernel-dsl/v1/addressing';
4
+ import type { AnyResolvedClass, BoundMethodShortcutsOf, ClassSatisfactionKeysOf, MethodAccessOf, PropertyAccessOf, PropertyShortcutsOf, ResolvedClass } from '@astrale-os/kernel-dsl/v1/language';
5
+ import type { Binary } from '../../client/index.js';
6
+ type NodeReserved = keyof Node | 'property' | 'method';
7
+ type EdgeReserved = keyof Edge | 'property';
8
+ declare const BOUND_CLASS: unique symbol;
9
+ /** Node evidence selected as one exact Class key, without duplicating its rich projection. */
10
+ export type BoundNodeFor<ClassKey extends DefinitionKey<Key.Origin, 'class'> = DefinitionKey<Key.Origin, 'class'>> = Node & {
11
+ readonly [BOUND_CLASS]: Readonly<Record<ClassKey, true>>;
12
+ };
13
+ /** One selected-Class view over an exact admitted Node. */
14
+ export type BoundNode<Class extends ResolvedClass<'node'> = ResolvedClass<'node'>, BinaryValue = Binary> = BoundNodeFor<ClassSatisfactionKeysOf<Class>> & PropertyShortcutsOf<Class, NodeReserved> & BoundMethodShortcutsOf<Class, BinaryValue, NodeReserved> & PropertyAccessOf<Class> & MethodAccessOf<Class, BinaryValue>;
15
+ /** One selected-Class view over an exact admitted Edge. */
16
+ export type BoundEdge<Class extends ResolvedClass<'edge'> = ResolvedClass<'edge'>> = Edge & PropertyShortcutsOf<Class, EdgeReserved> & PropertyAccessOf<Class>;
17
+ export type BoundGraphValue<Class extends AnyResolvedClass> = Class extends ResolvedClass<'node'> ? BoundNode<Class> : Class extends ResolvedClass<'edge'> ? BoundEdge<Class> : never;
18
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,23 @@
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 { QueryAST, QueryEdgeGraphResult, QueryEdgeResult, QueryNodeGraphResult, QueryNodeResult, QueryResultFor, QuerySingleSourceClassOf } from '@astrale-os/kernel-core/graph/query';
4
+ import type { AnyResolvedClass, ResolvedClass } from '@astrale-os/kernel-dsl/v1/language';
5
+ import type { QueryResponse } from '../page-contract.js';
6
+ import type { BoundEdge, BoundNode } from './model.js';
7
+ type SourceClass<Query> = Extract<QuerySingleSourceClassOf<Query>, AnyResolvedClass>;
8
+ export interface BoundNodePage<Query extends QueryAST = QueryAST, Class extends ResolvedClass<'node'> = Extract<SourceClass<Query>, ResolvedClass<'node'>>> {
9
+ readonly nodes: readonly BoundNode<Class>[];
10
+ readonly raw: QueryResponse<QueryResultFor<Query>>;
11
+ readonly next?: () => Promise<BoundNodePage<Query, Class>>;
12
+ refine<Target extends ResolvedClass<'node'>>(value: BoundNode<Class>, target: Target): BoundNode<Target> | undefined;
13
+ }
14
+ export interface BoundEdgePage<Query extends QueryAST = QueryAST, Class extends ResolvedClass<'edge'> = Extract<SourceClass<Query>, ResolvedClass<'edge'>>> {
15
+ readonly edges: readonly BoundEdge<Class>[];
16
+ readonly raw: QueryResponse<QueryResultFor<Query>>;
17
+ readonly next?: () => Promise<BoundEdgePage<Query, Class>>;
18
+ refine<Target extends ResolvedClass<'edge'>>(value: BoundEdge<Class>, target: Target): BoundEdge<Target> | undefined;
19
+ }
20
+ export type BoundQueryPage<Query extends QueryAST> = QueryResultFor<Query> extends QueryNodeGraphResult | QueryNodeResult ? BoundNodePage<Query> : QueryResultFor<Query> extends QueryEdgeGraphResult | QueryEdgeResult ? BoundEdgePage<Query> : never;
21
+ export declare function selectedNodes(response: QueryResponse): readonly Node[];
22
+ export declare function selectedEdges(response: QueryResponse): readonly Edge[];
23
+ export {};
@@ -0,0 +1,42 @@
1
+ import { edgeKeyOf, equalEdgeKeys } from '@astrale-os/kernel-core/graph/edge';
2
+ export function selectedNodes(response) {
3
+ const result = response.result;
4
+ if (result.kind === 'graph') {
5
+ if (result.selection.kind !== 'node')
6
+ throw new TypeError('Query did not select Nodes.');
7
+ const byId = new Map(result.graph.nodes.map((node) => [node.id, node]));
8
+ return result.selection.ids.map((id) => {
9
+ const node = byId.get(id);
10
+ if (node === undefined)
11
+ throw new TypeError(`Selected Node ${id} is absent.`);
12
+ return node;
13
+ });
14
+ }
15
+ if (result.kind !== 'nodes')
16
+ throw new TypeError('Query did not select Nodes.');
17
+ return result.nodes.map((item) => {
18
+ if (item.kind !== 'value')
19
+ throw new TypeError('Rich Node queries require value projection.');
20
+ return item.value;
21
+ });
22
+ }
23
+ export function selectedEdges(response) {
24
+ const result = response.result;
25
+ if (result.kind === 'graph') {
26
+ if (result.selection.kind !== 'edge')
27
+ throw new TypeError('Query did not select Edges.');
28
+ return result.selection.keys.map((key) => {
29
+ const edge = result.graph.edges.find((candidate) => equalEdgeKeys(edgeKeyOf(candidate), key));
30
+ if (edge === undefined)
31
+ throw new TypeError('Selected Edge is absent.');
32
+ return edge;
33
+ });
34
+ }
35
+ if (result.kind !== 'edges')
36
+ throw new TypeError('Query did not select Edges.');
37
+ return result.edges.map((item) => {
38
+ if (item.edge.kind !== 'value')
39
+ throw new TypeError('Rich Edge queries require value projection.');
40
+ return item.edge.value;
41
+ });
42
+ }
@@ -0,0 +1,8 @@
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 { ResolvedClass, ResolvedMethod } from '@astrale-os/kernel-dsl/v1/language';
4
+ import type { BoundEdge, BoundNode } from './model.js';
5
+ import type { QueryProvenance } from './provenance.js';
6
+ export type MethodCall = (node: Node, method: ResolvedMethod, input: unknown) => Promise<unknown>;
7
+ export declare function projectNode<Class extends ResolvedClass<'node'>>(selected: Class, node: Node, provenance: QueryProvenance, call: MethodCall): BoundNode<Class>;
8
+ export declare function projectEdge<Class extends ResolvedClass<'edge'>>(selected: Class, edge: Edge, provenance: QueryProvenance): BoundEdge<Class>;
@@ -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