@astrale-os/kernel-client 0.5.1 → 0.6.0-beta.10

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 (661) hide show
  1. package/dist/auth/auth.d.ts +18 -0
  2. package/dist/auth/auth.js +15 -0
  3. package/dist/auth/authorization.d.ts +13 -0
  4. package/dist/auth/authorization.js +17 -0
  5. package/dist/auth/credential.d.ts +19 -0
  6. package/dist/auth/credential.js +21 -0
  7. package/dist/auth/identity.d.ts +14 -0
  8. package/dist/auth/identity.js +15 -0
  9. package/dist/auth/index.d.ts +6 -16
  10. package/dist/auth/index.js +5 -10
  11. package/dist/auth/provision.d.ts +8 -0
  12. package/dist/auth/provision.js +10 -0
  13. package/dist/client/admission.d.ts +4 -0
  14. package/dist/client/admission.js +34 -0
  15. package/dist/client/client.d.ts +24 -109
  16. package/dist/client/client.js +80 -381
  17. package/dist/client/credential.d.ts +12 -0
  18. package/dist/client/credential.js +51 -0
  19. package/dist/client/index.d.ts +6 -0
  20. package/dist/client/index.js +4 -0
  21. package/dist/client/request.d.ts +26 -0
  22. package/dist/client/request.js +100 -0
  23. package/dist/client/result.d.ts +35 -0
  24. package/dist/client/result.js +28 -0
  25. package/dist/client/routing-control.d.ts +10 -0
  26. package/dist/client/routing-control.js +23 -0
  27. package/dist/errors/client-error.d.ts +3 -0
  28. package/dist/errors/client-error.js +8 -0
  29. package/dist/errors/index.d.ts +7 -6
  30. package/dist/errors/index.js +7 -4
  31. package/dist/errors/miss-error.d.ts +8 -0
  32. package/dist/errors/miss-error.js +10 -0
  33. package/dist/errors/protocol-error.d.ts +9 -0
  34. package/dist/errors/protocol-error.js +9 -0
  35. package/dist/errors/response-error.d.ts +11 -0
  36. package/dist/errors/response-error.js +16 -0
  37. package/dist/errors/session-error.d.ts +8 -20
  38. package/dist/errors/session-error.js +6 -22
  39. package/dist/errors/stale-route-error.d.ts +9 -0
  40. package/dist/errors/stale-route-error.js +12 -0
  41. package/dist/errors/transport-error.d.ts +30 -0
  42. package/dist/errors/transport-error.js +18 -0
  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 +139 -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 +120 -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 +8 -0
  58. package/dist/graph/errors.js +14 -0
  59. package/dist/graph/graph.d.ts +26 -0
  60. package/dist/graph/graph.js +18 -0
  61. package/dist/graph/index.d.ts +8 -26
  62. package/dist/graph/index.js +6 -21
  63. package/dist/graph/mutation.d.ts +5 -0
  64. package/dist/graph/mutation.js +17 -0
  65. package/dist/graph/page/index.d.ts +2 -0
  66. package/dist/graph/page/index.js +1 -0
  67. package/dist/graph/page/neighbors.d.ts +9 -0
  68. package/dist/graph/page/neighbors.js +34 -0
  69. package/dist/graph/page/page.d.ts +37 -0
  70. package/dist/graph/page/page.js +55 -0
  71. package/dist/graph/page-contract.d.ts +13 -0
  72. package/dist/graph/page-contract.js +1 -0
  73. package/dist/graph/provenance.d.ts +12 -0
  74. package/dist/graph/provenance.js +37 -0
  75. package/dist/graph/query.d.ts +4 -0
  76. package/dist/graph/query.js +69 -0
  77. package/dist/graph/read.d.ts +6 -0
  78. package/dist/graph/read.js +17 -0
  79. package/dist/index.d.ts +6 -25
  80. package/dist/index.js +6 -21
  81. package/dist/pacer/batcher/batcher.d.ts +7 -0
  82. package/dist/pacer/batcher/batcher.js +13 -0
  83. package/dist/pacer/batcher/defaults.d.ts +2 -0
  84. package/dist/pacer/batcher/defaults.js +2 -0
  85. package/dist/pacer/batcher/index.d.ts +1 -0
  86. package/dist/pacer/batcher/index.js +1 -0
  87. package/dist/pacer/index.d.ts +4 -10
  88. package/dist/pacer/index.js +4 -11
  89. package/dist/pacer/limiter/defaults.d.ts +2 -0
  90. package/dist/pacer/limiter/defaults.js +2 -0
  91. package/dist/pacer/limiter/index.d.ts +1 -0
  92. package/dist/pacer/limiter/index.js +1 -0
  93. package/dist/pacer/limiter/limiter.d.ts +7 -0
  94. package/dist/pacer/limiter/limiter.js +14 -0
  95. package/dist/pacer/queue/defaults.d.ts +1 -0
  96. package/dist/pacer/queue/defaults.js +1 -0
  97. package/dist/pacer/queue/index.d.ts +1 -0
  98. package/dist/pacer/queue/index.js +1 -0
  99. package/dist/pacer/queue/queue.d.ts +6 -0
  100. package/dist/pacer/queue/queue.js +12 -0
  101. package/dist/pacer/retry/defaults.d.ts +6 -0
  102. package/dist/pacer/retry/defaults.js +16 -0
  103. package/dist/pacer/retry/index.d.ts +1 -0
  104. package/dist/pacer/retry/index.js +1 -0
  105. package/dist/pacer/retry/retry.d.ts +9 -0
  106. package/dist/pacer/retry/retry.js +55 -0
  107. package/dist/pool/index.d.ts +2 -4
  108. package/dist/pool/index.js +0 -2
  109. package/dist/pool/pool.d.ts +19 -59
  110. package/dist/pool/pool.js +46 -64
  111. package/dist/pool/target.d.ts +15 -0
  112. package/dist/pool/target.js +49 -0
  113. package/dist/schema/admission.d.ts +12 -0
  114. package/dist/schema/admission.js +17 -0
  115. package/dist/schema/contracts.d.ts +12 -0
  116. package/dist/schema/contracts.js +1 -0
  117. package/dist/schema/index.d.ts +3 -16
  118. package/dist/schema/index.js +2 -12
  119. package/dist/schema/introspection.d.ts +5 -0
  120. package/dist/schema/introspection.js +15 -0
  121. package/dist/schema/operation.d.ts +5 -0
  122. package/dist/schema/operation.js +9 -0
  123. package/dist/schema/schema.d.ts +19 -0
  124. package/dist/schema/schema.js +43 -0
  125. package/dist/session/bound.d.ts +42 -9
  126. package/dist/session/bound.js +70 -37
  127. package/dist/session/context/control.d.ts +5 -0
  128. package/dist/session/context/control.js +17 -0
  129. package/dist/session/context/index.d.ts +4 -0
  130. package/dist/session/context/index.js +4 -0
  131. package/dist/session/context/limits.d.ts +7 -0
  132. package/dist/session/context/limits.js +18 -0
  133. package/dist/session/context/operation.d.ts +19 -0
  134. package/dist/session/context/operation.js +72 -0
  135. package/dist/session/context/policy.d.ts +11 -0
  136. package/dist/session/context/policy.js +69 -0
  137. package/dist/session/discovery/bundle.d.ts +17 -0
  138. package/dist/session/discovery/bundle.js +55 -0
  139. package/dist/session/discovery/discovery.d.ts +19 -0
  140. package/dist/session/discovery/discovery.js +55 -0
  141. package/dist/session/discovery/index.d.ts +20 -0
  142. package/dist/session/discovery/index.js +15 -0
  143. package/dist/session/discovery/publication.d.ts +23 -0
  144. package/dist/session/discovery/publication.js +123 -0
  145. package/dist/session/discovery/snapshot.d.ts +12 -0
  146. package/dist/session/discovery/snapshot.js +3 -0
  147. package/dist/session/discovery/transport.d.ts +6 -0
  148. package/dist/session/discovery/transport.js +13 -0
  149. package/dist/session/index.d.ts +10 -16
  150. package/dist/session/index.js +3 -9
  151. package/dist/session/reference.d.ts +36 -0
  152. package/dist/session/reference.js +74 -0
  153. package/dist/session/routing/auth.d.ts +18 -0
  154. package/dist/session/routing/auth.js +39 -0
  155. package/dist/session/routing/cache.d.ts +20 -0
  156. package/dist/session/routing/cache.js +115 -0
  157. package/dist/session/routing/dispatch.d.ts +34 -0
  158. package/dist/session/routing/dispatch.js +137 -0
  159. package/dist/session/routing/envelope.d.ts +13 -0
  160. package/dist/session/routing/envelope.js +35 -0
  161. package/dist/session/routing/expectation.d.ts +6 -0
  162. package/dist/session/routing/expectation.js +1 -0
  163. package/dist/session/routing/index.d.ts +6 -0
  164. package/dist/session/routing/index.js +5 -0
  165. package/dist/session/routing/request.d.ts +8 -0
  166. package/dist/session/routing/request.js +25 -0
  167. package/dist/session/session.d.ts +67 -0
  168. package/dist/session/session.js +257 -0
  169. package/dist/session/session.typecheck.d.ts +1 -0
  170. package/dist/session/session.typecheck.js +31 -0
  171. package/dist/session/views/catalog.d.ts +15 -0
  172. package/dist/session/views/catalog.js +70 -0
  173. package/dist/session/views/index.d.ts +2 -0
  174. package/dist/session/views/index.js +2 -0
  175. package/dist/session/views/resolve.d.ts +11 -0
  176. package/dist/session/views/resolve.js +13 -0
  177. package/dist/store/entity-index.d.ts +22 -0
  178. package/dist/store/entity-index.js +94 -0
  179. package/dist/store/index.d.ts +1 -26
  180. package/dist/store/index.js +1 -19
  181. package/dist/store/memory.d.ts +46 -97
  182. package/dist/store/memory.js +346 -763
  183. package/dist/store/mutation.d.ts +5 -0
  184. package/dist/store/mutation.js +34 -0
  185. package/dist/store/observe.d.ts +3 -0
  186. package/dist/store/observe.js +17 -0
  187. package/dist/store/optimistic.d.ts +12 -0
  188. package/dist/store/optimistic.js +43 -0
  189. package/dist/store/query-key.d.ts +5 -0
  190. package/dist/store/query-key.js +22 -0
  191. package/dist/store/shape.d.ts +25 -0
  192. package/dist/store/shape.js +29 -0
  193. package/dist/store/store.d.ts +68 -0
  194. package/dist/store/store.js +144 -0
  195. package/dist/store/store.typecheck.d.ts +1 -0
  196. package/dist/store/store.typecheck.js +40 -0
  197. package/dist/transport/auto/decision.d.ts +22 -0
  198. package/dist/transport/auto/decision.js +48 -0
  199. package/dist/transport/auto/fallback.d.ts +16 -0
  200. package/dist/transport/auto/fallback.js +75 -0
  201. package/dist/transport/auto/index.d.ts +2 -0
  202. package/dist/transport/auto/index.js +2 -0
  203. package/dist/transport/auto/transport.d.ts +37 -0
  204. package/dist/transport/auto/transport.js +140 -0
  205. package/dist/transport/auto/warning.d.ts +13 -0
  206. package/dist/transport/auto/warning.js +18 -0
  207. package/dist/transport/deadline.d.ts +11 -0
  208. package/dist/transport/deadline.js +39 -0
  209. package/dist/transport/failure.d.ts +7 -0
  210. package/dist/transport/failure.js +9 -0
  211. package/dist/transport/http/index.d.ts +1 -0
  212. package/dist/transport/http/index.js +1 -0
  213. package/dist/transport/http/response.d.ts +8 -0
  214. package/dist/transport/http/response.js +79 -0
  215. package/dist/transport/http/stream.d.ts +26 -0
  216. package/dist/transport/http/stream.js +214 -0
  217. package/dist/transport/http/transport.d.ts +32 -0
  218. package/dist/transport/http/transport.js +343 -0
  219. package/dist/transport/index.d.ts +2 -8
  220. package/dist/transport/index.js +1 -6
  221. package/dist/transport/transport.d.ts +34 -0
  222. package/dist/transport/transport.js +1 -0
  223. package/dist/transport/websocket/connection.d.ts +38 -0
  224. package/dist/transport/websocket/connection.js +284 -0
  225. package/dist/transport/websocket/exchange.d.ts +46 -0
  226. package/dist/transport/websocket/exchange.js +300 -0
  227. package/dist/transport/websocket/index.d.ts +1 -0
  228. package/dist/transport/websocket/index.js +1 -0
  229. package/dist/transport/websocket/transport.d.ts +46 -0
  230. package/dist/transport/websocket/transport.js +164 -0
  231. package/package.json +41 -35
  232. package/dist/auth/addressing.d.ts +0 -32
  233. package/dist/auth/addressing.d.ts.map +0 -1
  234. package/dist/auth/addressing.js +0 -36
  235. package/dist/auth/addressing.js.map +0 -1
  236. package/dist/auth/api.d.ts +0 -70
  237. package/dist/auth/api.d.ts.map +0 -1
  238. package/dist/auth/api.js +0 -36
  239. package/dist/auth/api.js.map +0 -1
  240. package/dist/auth/batch.d.ts +0 -18
  241. package/dist/auth/batch.d.ts.map +0 -1
  242. package/dist/auth/batch.js +0 -25
  243. package/dist/auth/batch.js.map +0 -1
  244. package/dist/auth/composition.d.ts +0 -27
  245. package/dist/auth/composition.d.ts.map +0 -1
  246. package/dist/auth/composition.js +0 -83
  247. package/dist/auth/composition.js.map +0 -1
  248. package/dist/auth/defaults.d.ts +0 -3
  249. package/dist/auth/defaults.d.ts.map +0 -1
  250. package/dist/auth/defaults.js +0 -3
  251. package/dist/auth/defaults.js.map +0 -1
  252. package/dist/auth/index.d.ts.map +0 -1
  253. package/dist/auth/index.js.map +0 -1
  254. package/dist/auth/minting.d.ts +0 -35
  255. package/dist/auth/minting.d.ts.map +0 -1
  256. package/dist/auth/minting.js +0 -31
  257. package/dist/auth/minting.js.map +0 -1
  258. package/dist/auth/permissions.d.ts +0 -55
  259. package/dist/auth/permissions.d.ts.map +0 -1
  260. package/dist/auth/permissions.js +0 -47
  261. package/dist/auth/permissions.js.map +0 -1
  262. package/dist/auth/principal.d.ts +0 -19
  263. package/dist/auth/principal.d.ts.map +0 -1
  264. package/dist/auth/principal.js +0 -46
  265. package/dist/auth/principal.js.map +0 -1
  266. package/dist/auth/shorthands.d.ts +0 -19
  267. package/dist/auth/shorthands.d.ts.map +0 -1
  268. package/dist/auth/shorthands.js +0 -27
  269. package/dist/auth/shorthands.js.map +0 -1
  270. package/dist/client/batch.d.ts +0 -26
  271. package/dist/client/batch.d.ts.map +0 -1
  272. package/dist/client/batch.js +0 -8
  273. package/dist/client/batch.js.map +0 -1
  274. package/dist/client/bound.d.ts +0 -27
  275. package/dist/client/bound.d.ts.map +0 -1
  276. package/dist/client/bound.js +0 -14
  277. package/dist/client/bound.js.map +0 -1
  278. package/dist/client/client.d.ts.map +0 -1
  279. package/dist/client/client.js.map +0 -1
  280. package/dist/client/config.d.ts +0 -112
  281. package/dist/client/config.d.ts.map +0 -1
  282. package/dist/client/config.js +0 -10
  283. package/dist/client/config.js.map +0 -1
  284. package/dist/client/fn-map.d.ts +0 -61
  285. package/dist/client/fn-map.d.ts.map +0 -1
  286. package/dist/client/fn-map.js +0 -2
  287. package/dist/client/fn-map.js.map +0 -1
  288. package/dist/client/freeze.d.ts +0 -32
  289. package/dist/client/freeze.d.ts.map +0 -1
  290. package/dist/client/freeze.js +0 -42
  291. package/dist/client/freeze.js.map +0 -1
  292. package/dist/client/hooks.d.ts +0 -49
  293. package/dist/client/hooks.d.ts.map +0 -1
  294. package/dist/client/hooks.js +0 -2
  295. package/dist/client/hooks.js.map +0 -1
  296. package/dist/errors/errors.d.ts +0 -156
  297. package/dist/errors/errors.d.ts.map +0 -1
  298. package/dist/errors/errors.js +0 -238
  299. package/dist/errors/errors.js.map +0 -1
  300. package/dist/errors/guards.d.ts +0 -39
  301. package/dist/errors/guards.d.ts.map +0 -1
  302. package/dist/errors/guards.js +0 -127
  303. package/dist/errors/guards.js.map +0 -1
  304. package/dist/errors/index.d.ts.map +0 -1
  305. package/dist/errors/index.js.map +0 -1
  306. package/dist/errors/session-error.d.ts.map +0 -1
  307. package/dist/errors/session-error.js.map +0 -1
  308. package/dist/graph/api.d.ts +0 -85
  309. package/dist/graph/api.d.ts.map +0 -1
  310. package/dist/graph/api.js +0 -66
  311. package/dist/graph/api.js.map +0 -1
  312. package/dist/graph/index.d.ts.map +0 -1
  313. package/dist/graph/index.js.map +0 -1
  314. package/dist/graph/mutate/builder.d.ts +0 -108
  315. package/dist/graph/mutate/builder.d.ts.map +0 -1
  316. package/dist/graph/mutate/builder.js +0 -127
  317. package/dist/graph/mutate/builder.js.map +0 -1
  318. package/dist/graph/mutate/index.d.ts +0 -5
  319. package/dist/graph/mutate/index.d.ts.map +0 -1
  320. package/dist/graph/mutate/index.js +0 -3
  321. package/dist/graph/mutate/index.js.map +0 -1
  322. package/dist/graph/mutate/shorthands.d.ts +0 -42
  323. package/dist/graph/mutate/shorthands.d.ts.map +0 -1
  324. package/dist/graph/mutate/shorthands.js +0 -65
  325. package/dist/graph/mutate/shorthands.js.map +0 -1
  326. package/dist/graph/named.d.ts +0 -38
  327. package/dist/graph/named.d.ts.map +0 -1
  328. package/dist/graph/named.js +0 -47
  329. package/dist/graph/named.js.map +0 -1
  330. package/dist/graph/query/builder.d.ts +0 -116
  331. package/dist/graph/query/builder.d.ts.map +0 -1
  332. package/dist/graph/query/builder.js +0 -136
  333. package/dist/graph/query/builder.js.map +0 -1
  334. package/dist/graph/query/edge-ref.d.ts +0 -13
  335. package/dist/graph/query/edge-ref.d.ts.map +0 -1
  336. package/dist/graph/query/edge-ref.js +0 -56
  337. package/dist/graph/query/edge-ref.js.map +0 -1
  338. package/dist/graph/query/edges.d.ts +0 -10
  339. package/dist/graph/query/edges.d.ts.map +0 -1
  340. package/dist/graph/query/edges.js +0 -11
  341. package/dist/graph/query/edges.js.map +0 -1
  342. package/dist/graph/query/errors.d.ts +0 -31
  343. package/dist/graph/query/errors.d.ts.map +0 -1
  344. package/dist/graph/query/errors.js +0 -28
  345. package/dist/graph/query/errors.js.map +0 -1
  346. package/dist/graph/query/filter.d.ts +0 -50
  347. package/dist/graph/query/filter.d.ts.map +0 -1
  348. package/dist/graph/query/filter.js +0 -32
  349. package/dist/graph/query/filter.js.map +0 -1
  350. package/dist/graph/query/index.d.ts +0 -12
  351. package/dist/graph/query/index.d.ts.map +0 -1
  352. package/dist/graph/query/index.js +0 -7
  353. package/dist/graph/query/index.js.map +0 -1
  354. package/dist/graph/query/lower.d.ts +0 -30
  355. package/dist/graph/query/lower.d.ts.map +0 -1
  356. package/dist/graph/query/lower.js +0 -171
  357. package/dist/graph/query/lower.js.map +0 -1
  358. package/dist/graph/query/shorthands.d.ts +0 -34
  359. package/dist/graph/query/shorthands.d.ts.map +0 -1
  360. package/dist/graph/query/shorthands.js +0 -71
  361. package/dist/graph/query/shorthands.js.map +0 -1
  362. package/dist/graph/query/traverse.d.ts +0 -59
  363. package/dist/graph/query/traverse.d.ts.map +0 -1
  364. package/dist/graph/query/traverse.js +0 -144
  365. package/dist/graph/query/traverse.js.map +0 -1
  366. package/dist/graph/reconcile/execute.d.ts +0 -8
  367. package/dist/graph/reconcile/execute.d.ts.map +0 -1
  368. package/dist/graph/reconcile/execute.js +0 -56
  369. package/dist/graph/reconcile/execute.js.map +0 -1
  370. package/dist/graph/reconcile/index.d.ts +0 -5
  371. package/dist/graph/reconcile/index.d.ts.map +0 -1
  372. package/dist/graph/reconcile/index.js +0 -3
  373. package/dist/graph/reconcile/index.js.map +0 -1
  374. package/dist/graph/reconcile/input.d.ts +0 -80
  375. package/dist/graph/reconcile/input.d.ts.map +0 -1
  376. package/dist/graph/reconcile/input.js +0 -5
  377. package/dist/graph/reconcile/input.js.map +0 -1
  378. package/dist/graph/reconcile/normalize.d.ts +0 -3
  379. package/dist/graph/reconcile/normalize.d.ts.map +0 -1
  380. package/dist/graph/reconcile/normalize.js +0 -144
  381. package/dist/graph/reconcile/normalize.js.map +0 -1
  382. package/dist/graph/reconcile/result.d.ts +0 -19
  383. package/dist/graph/reconcile/result.d.ts.map +0 -1
  384. package/dist/graph/reconcile/result.js +0 -95
  385. package/dist/graph/reconcile/result.js.map +0 -1
  386. package/dist/graph/reconcile/scope.d.ts +0 -6
  387. package/dist/graph/reconcile/scope.d.ts.map +0 -1
  388. package/dist/graph/reconcile/scope.js +0 -69
  389. package/dist/graph/reconcile/scope.js.map +0 -1
  390. package/dist/graph/result/envelope.d.ts +0 -37
  391. package/dist/graph/result/envelope.d.ts.map +0 -1
  392. package/dist/graph/result/envelope.js +0 -59
  393. package/dist/graph/result/envelope.js.map +0 -1
  394. package/dist/graph/result/index.d.ts +0 -6
  395. package/dist/graph/result/index.d.ts.map +0 -1
  396. package/dist/graph/result/index.js +0 -4
  397. package/dist/graph/result/index.js.map +0 -1
  398. package/dist/graph/result/next.d.ts +0 -16
  399. package/dist/graph/result/next.d.ts.map +0 -1
  400. package/dist/graph/result/next.js +0 -77
  401. package/dist/graph/result/next.js.map +0 -1
  402. package/dist/graph/result/paged.d.ts +0 -30
  403. package/dist/graph/result/paged.d.ts.map +0 -1
  404. package/dist/graph/result/paged.js +0 -41
  405. package/dist/graph/result/paged.js.map +0 -1
  406. package/dist/graph/wire.d.ts +0 -33
  407. package/dist/graph/wire.d.ts.map +0 -1
  408. package/dist/graph/wire.js +0 -16
  409. package/dist/graph/wire.js.map +0 -1
  410. package/dist/index.d.ts.map +0 -1
  411. package/dist/index.js.map +0 -1
  412. package/dist/pacer/batcher.d.ts +0 -11
  413. package/dist/pacer/batcher.d.ts.map +0 -1
  414. package/dist/pacer/batcher.js +0 -15
  415. package/dist/pacer/batcher.js.map +0 -1
  416. package/dist/pacer/defaults.d.ts +0 -18
  417. package/dist/pacer/defaults.d.ts.map +0 -1
  418. package/dist/pacer/defaults.js +0 -18
  419. package/dist/pacer/defaults.js.map +0 -1
  420. package/dist/pacer/index.d.ts.map +0 -1
  421. package/dist/pacer/index.js.map +0 -1
  422. package/dist/pacer/queue.d.ts +0 -11
  423. package/dist/pacer/queue.d.ts.map +0 -1
  424. package/dist/pacer/queue.js +0 -15
  425. package/dist/pacer/queue.js.map +0 -1
  426. package/dist/pacer/rate-limiter.d.ts +0 -11
  427. package/dist/pacer/rate-limiter.d.ts.map +0 -1
  428. package/dist/pacer/rate-limiter.js +0 -15
  429. package/dist/pacer/rate-limiter.js.map +0 -1
  430. package/dist/pacer/retry.d.ts +0 -14
  431. package/dist/pacer/retry.d.ts.map +0 -1
  432. package/dist/pacer/retry.js +0 -50
  433. package/dist/pacer/retry.js.map +0 -1
  434. package/dist/pool/errors.d.ts +0 -13
  435. package/dist/pool/errors.d.ts.map +0 -1
  436. package/dist/pool/errors.js +0 -16
  437. package/dist/pool/errors.js.map +0 -1
  438. package/dist/pool/index.d.ts.map +0 -1
  439. package/dist/pool/index.js.map +0 -1
  440. package/dist/pool/pool.d.ts.map +0 -1
  441. package/dist/pool/pool.js.map +0 -1
  442. package/dist/schema/bound/binder.d.ts +0 -49
  443. package/dist/schema/bound/binder.d.ts.map +0 -1
  444. package/dist/schema/bound/binder.js +0 -195
  445. package/dist/schema/bound/binder.js.map +0 -1
  446. package/dist/schema/bound/bound-node.d.ts +0 -105
  447. package/dist/schema/bound/bound-node.d.ts.map +0 -1
  448. package/dist/schema/bound/bound-node.js +0 -128
  449. package/dist/schema/bound/bound-node.js.map +0 -1
  450. package/dist/schema/bound/index.d.ts +0 -10
  451. package/dist/schema/bound/index.d.ts.map +0 -1
  452. package/dist/schema/bound/index.js +0 -5
  453. package/dist/schema/bound/index.js.map +0 -1
  454. package/dist/schema/bound/view.d.ts +0 -44
  455. package/dist/schema/bound/view.d.ts.map +0 -1
  456. package/dist/schema/bound/view.js +0 -117
  457. package/dist/schema/bound/view.js.map +0 -1
  458. package/dist/schema/bound/write-props.d.ts +0 -38
  459. package/dist/schema/bound/write-props.d.ts.map +0 -1
  460. package/dist/schema/bound/write-props.js +0 -2
  461. package/dist/schema/bound/write-props.js.map +0 -1
  462. package/dist/schema/call-args.d.ts +0 -6
  463. package/dist/schema/call-args.d.ts.map +0 -1
  464. package/dist/schema/call-args.js +0 -21
  465. package/dist/schema/call-args.js.map +0 -1
  466. package/dist/schema/class-proxy.d.ts +0 -11
  467. package/dist/schema/class-proxy.d.ts.map +0 -1
  468. package/dist/schema/class-proxy.js +0 -46
  469. package/dist/schema/class-proxy.js.map +0 -1
  470. package/dist/schema/extract.d.ts +0 -24
  471. package/dist/schema/extract.d.ts.map +0 -1
  472. package/dist/schema/extract.js +0 -45
  473. package/dist/schema/extract.js.map +0 -1
  474. package/dist/schema/from-entries.d.ts +0 -12
  475. package/dist/schema/from-entries.d.ts.map +0 -1
  476. package/dist/schema/from-entries.js +0 -39
  477. package/dist/schema/from-entries.js.map +0 -1
  478. package/dist/schema/index.d.ts.map +0 -1
  479. package/dist/schema/index.js.map +0 -1
  480. package/dist/schema/known-dispatch.d.ts +0 -6
  481. package/dist/schema/known-dispatch.d.ts.map +0 -1
  482. package/dist/schema/known-dispatch.js +0 -39
  483. package/dist/schema/known-dispatch.js.map +0 -1
  484. package/dist/schema/node-proxy.d.ts +0 -21
  485. package/dist/schema/node-proxy.d.ts.map +0 -1
  486. package/dist/schema/node-proxy.js +0 -75
  487. package/dist/schema/node-proxy.js.map +0 -1
  488. package/dist/schema/persistence.d.ts +0 -31
  489. package/dist/schema/persistence.d.ts.map +0 -1
  490. package/dist/schema/persistence.js +0 -2
  491. package/dist/schema/persistence.js.map +0 -1
  492. package/dist/schema/proxy-types.d.ts +0 -131
  493. package/dist/schema/proxy-types.d.ts.map +0 -1
  494. package/dist/schema/proxy-types.js +0 -2
  495. package/dist/schema/proxy-types.js.map +0 -1
  496. package/dist/schema/registry.d.ts +0 -50
  497. package/dist/schema/registry.d.ts.map +0 -1
  498. package/dist/schema/registry.js +0 -110
  499. package/dist/schema/registry.js.map +0 -1
  500. package/dist/schema/resolve.d.ts +0 -26
  501. package/dist/schema/resolve.d.ts.map +0 -1
  502. package/dist/schema/resolve.js +0 -27
  503. package/dist/schema/resolve.js.map +0 -1
  504. package/dist/schema/typed-client.d.ts +0 -10
  505. package/dist/schema/typed-client.d.ts.map +0 -1
  506. package/dist/schema/typed-client.js +0 -26
  507. package/dist/schema/typed-client.js.map +0 -1
  508. package/dist/schema/types.d.ts +0 -9
  509. package/dist/schema/types.d.ts.map +0 -1
  510. package/dist/schema/types.js +0 -2
  511. package/dist/schema/types.js.map +0 -1
  512. package/dist/session/bound.d.ts.map +0 -1
  513. package/dist/session/bound.js.map +0 -1
  514. package/dist/session/client-session.d.ts +0 -72
  515. package/dist/session/client-session.d.ts.map +0 -1
  516. package/dist/session/client-session.js +0 -673
  517. package/dist/session/client-session.js.map +0 -1
  518. package/dist/session/config.d.ts +0 -168
  519. package/dist/session/config.d.ts.map +0 -1
  520. package/dist/session/config.js +0 -2
  521. package/dist/session/config.js.map +0 -1
  522. package/dist/session/delegation/cache.d.ts +0 -139
  523. package/dist/session/delegation/cache.d.ts.map +0 -1
  524. package/dist/session/delegation/cache.js +0 -256
  525. package/dist/session/delegation/cache.js.map +0 -1
  526. package/dist/session/delegation/errors.d.ts +0 -44
  527. package/dist/session/delegation/errors.d.ts.map +0 -1
  528. package/dist/session/delegation/errors.js +0 -62
  529. package/dist/session/delegation/errors.js.map +0 -1
  530. package/dist/session/delegation/policy.d.ts +0 -183
  531. package/dist/session/delegation/policy.d.ts.map +0 -1
  532. package/dist/session/delegation/policy.js +0 -114
  533. package/dist/session/delegation/policy.js.map +0 -1
  534. package/dist/session/delegation/utils.d.ts +0 -4
  535. package/dist/session/delegation/utils.d.ts.map +0 -1
  536. package/dist/session/delegation/utils.js +0 -12
  537. package/dist/session/delegation/utils.js.map +0 -1
  538. package/dist/session/delegation-mint.d.ts +0 -13
  539. package/dist/session/delegation-mint.d.ts.map +0 -1
  540. package/dist/session/delegation-mint.js +0 -39
  541. package/dist/session/delegation-mint.js.map +0 -1
  542. package/dist/session/dispatch-routes.d.ts +0 -27
  543. package/dist/session/dispatch-routes.d.ts.map +0 -1
  544. package/dist/session/dispatch-routes.js +0 -77
  545. package/dist/session/dispatch-routes.js.map +0 -1
  546. package/dist/session/errors/index.d.ts +0 -6
  547. package/dist/session/errors/index.d.ts.map +0 -1
  548. package/dist/session/errors/index.js +0 -8
  549. package/dist/session/errors/index.js.map +0 -1
  550. package/dist/session/errors/session-errors.d.ts +0 -52
  551. package/dist/session/errors/session-errors.d.ts.map +0 -1
  552. package/dist/session/errors/session-errors.js +0 -70
  553. package/dist/session/errors/session-errors.js.map +0 -1
  554. package/dist/session/forward.d.ts +0 -15
  555. package/dist/session/forward.d.ts.map +0 -1
  556. package/dist/session/forward.js +0 -40
  557. package/dist/session/forward.js.map +0 -1
  558. package/dist/session/helpers.d.ts +0 -23
  559. package/dist/session/helpers.d.ts.map +0 -1
  560. package/dist/session/helpers.js +0 -56
  561. package/dist/session/helpers.js.map +0 -1
  562. package/dist/session/hooks.d.ts +0 -140
  563. package/dist/session/hooks.d.ts.map +0 -1
  564. package/dist/session/hooks.js +0 -2
  565. package/dist/session/hooks.js.map +0 -1
  566. package/dist/session/index.d.ts.map +0 -1
  567. package/dist/session/index.js.map +0 -1
  568. package/dist/session/redirect/errors.d.ts +0 -45
  569. package/dist/session/redirect/errors.d.ts.map +0 -1
  570. package/dist/session/redirect/errors.js +0 -52
  571. package/dist/session/redirect/errors.js.map +0 -1
  572. package/dist/session/redirect/policy.d.ts +0 -79
  573. package/dist/session/redirect/policy.d.ts.map +0 -1
  574. package/dist/session/redirect/policy.js +0 -69
  575. package/dist/session/redirect/policy.js.map +0 -1
  576. package/dist/session/types.d.ts +0 -54
  577. package/dist/session/types.d.ts.map +0 -1
  578. package/dist/session/types.js +0 -2
  579. package/dist/session/types.js.map +0 -1
  580. package/dist/store/canonicalize.d.ts +0 -44
  581. package/dist/store/canonicalize.d.ts.map +0 -1
  582. package/dist/store/canonicalize.js +0 -0
  583. package/dist/store/canonicalize.js.map +0 -1
  584. package/dist/store/entities.d.ts +0 -81
  585. package/dist/store/entities.d.ts.map +0 -1
  586. package/dist/store/entities.js +0 -202
  587. package/dist/store/entities.js.map +0 -1
  588. package/dist/store/index.d.ts.map +0 -1
  589. package/dist/store/index.js.map +0 -1
  590. package/dist/store/invalidate.d.ts +0 -66
  591. package/dist/store/invalidate.d.ts.map +0 -1
  592. package/dist/store/invalidate.js +0 -117
  593. package/dist/store/invalidate.js.map +0 -1
  594. package/dist/store/memory.d.ts.map +0 -1
  595. package/dist/store/memory.js.map +0 -1
  596. package/dist/store/overlay.d.ts +0 -118
  597. package/dist/store/overlay.d.ts.map +0 -1
  598. package/dist/store/overlay.js +0 -237
  599. package/dist/store/overlay.js.map +0 -1
  600. package/dist/store/schedule.d.ts +0 -31
  601. package/dist/store/schedule.d.ts.map +0 -1
  602. package/dist/store/schedule.js +0 -76
  603. package/dist/store/schedule.js.map +0 -1
  604. package/dist/store/shapes.d.ts +0 -92
  605. package/dist/store/shapes.d.ts.map +0 -1
  606. package/dist/store/shapes.js +0 -369
  607. package/dist/store/shapes.js.map +0 -1
  608. package/dist/store/types.d.ts +0 -168
  609. package/dist/store/types.d.ts.map +0 -1
  610. package/dist/store/types.js +0 -7
  611. package/dist/store/types.js.map +0 -1
  612. package/dist/transport/binary.d.ts +0 -15
  613. package/dist/transport/binary.d.ts.map +0 -1
  614. package/dist/transport/binary.js +0 -2
  615. package/dist/transport/binary.js.map +0 -1
  616. package/dist/transport/contract.d.ts +0 -58
  617. package/dist/transport/contract.d.ts.map +0 -1
  618. package/dist/transport/contract.js +0 -11
  619. package/dist/transport/contract.js.map +0 -1
  620. package/dist/transport/fetch.d.ts +0 -31
  621. package/dist/transport/fetch.d.ts.map +0 -1
  622. package/dist/transport/fetch.js +0 -78
  623. package/dist/transport/fetch.js.map +0 -1
  624. package/dist/transport/http-envelope.d.ts +0 -49
  625. package/dist/transport/http-envelope.d.ts.map +0 -1
  626. package/dist/transport/http-envelope.js +0 -418
  627. package/dist/transport/http-envelope.js.map +0 -1
  628. package/dist/transport/http-routed.d.ts +0 -61
  629. package/dist/transport/http-routed.d.ts.map +0 -1
  630. package/dist/transport/http-routed.js +0 -409
  631. package/dist/transport/http-routed.js.map +0 -1
  632. package/dist/transport/index.d.ts.map +0 -1
  633. package/dist/transport/index.js.map +0 -1
  634. package/dist/transport/request-id.d.ts +0 -9
  635. package/dist/transport/request-id.d.ts.map +0 -1
  636. package/dist/transport/request-id.js +0 -12
  637. package/dist/transport/request-id.js.map +0 -1
  638. package/dist/transport/ws-envelope.d.ts +0 -74
  639. package/dist/transport/ws-envelope.d.ts.map +0 -1
  640. package/dist/transport/ws-envelope.js +0 -567
  641. package/dist/transport/ws-envelope.js.map +0 -1
  642. package/dist/util/race-signal.d.ts +0 -12
  643. package/dist/util/race-signal.d.ts.map +0 -1
  644. package/dist/util/race-signal.js +0 -34
  645. package/dist/util/race-signal.js.map +0 -1
  646. package/dist/wire/controller.d.ts +0 -38
  647. package/dist/wire/controller.d.ts.map +0 -1
  648. package/dist/wire/controller.js +0 -38
  649. package/dist/wire/controller.js.map +0 -1
  650. package/dist/wire/index.d.ts +0 -7
  651. package/dist/wire/index.d.ts.map +0 -1
  652. package/dist/wire/index.js +0 -4
  653. package/dist/wire/index.js.map +0 -1
  654. package/dist/wire/meta.d.ts +0 -81
  655. package/dist/wire/meta.d.ts.map +0 -1
  656. package/dist/wire/meta.js +0 -44
  657. package/dist/wire/meta.js.map +0 -1
  658. package/dist/wire/sse.d.ts +0 -67
  659. package/dist/wire/sse.d.ts.map +0 -1
  660. package/dist/wire/sse.js +0 -170
  661. package/dist/wire/sse.js.map +0 -1
@@ -1,393 +1,92 @@
1
- import { KERNEL_ERROR_CODES, substituteTemplate } from '@astrale-os/kernel-api';
2
- import { ConnectionError, InvalidTransportError, KernelError, WebOSError, withDetails, } from '../errors/errors.js';
3
- import { SchemaRegistry } from '../schema/registry.js';
4
- import { createSchemaClient } from '../schema/typed-client.js';
5
- import { HttpEnvelopeTransport, HttpRoutedTransport, WsEnvelopeTransport, } from '../transport/index.js';
6
- import { DEFAULT_REQUEST_TIMEOUT_MS } from '../wire/meta.js';
7
- import { createBoundClientView } from './bound.js';
8
- import { freezeResult } from './freeze.js';
9
- /**
10
- * KernelClient — one URL, one kernel. Discriminated `Send*Result`s,
11
- * no auto-follow, no cross-host pool, no transport fallback. Identity
12
- * is opaque — the client forwards credentials onto the wire and never
13
- * inspects, compares, or rotates them.
14
- *
15
- * Four facets:
16
- * - Lean primitives: `send` / `sendStream` / `sendBinary` / `signal` /
17
- * `batch` — surface transport outcomes as-is, no orchestration.
18
- * - Identity views: `as(credential)` returns a `BoundClientView` that
19
- * curries the credential into every call. A value, not a class.
20
- * - Schema proxy: `withSchema(schema)` returns a schema-typed proxy
21
- * that throws `UNHANDLED_REDIRECT` on redirect (use `send` for
22
- * redirect-aware calls).
23
- * - Lifecycle: `disconnect()` releases held resources (open WS).
24
- */
25
- export class KernelClient {
26
- url;
27
- defaultTimeout;
28
- defaultTransport;
29
- defaultProtocol;
30
- hooks;
31
- codec;
32
- schema;
33
- httpEnvelope;
34
- httpRouted;
35
- wsFactory;
36
- logger;
37
- ws = null;
38
- wsState = 'unknown';
39
- constructor(config) {
40
- this.url = config.url.replace(/\/$/, '');
41
- this.defaultTimeout = config.requestTimeout ?? DEFAULT_REQUEST_TIMEOUT_MS;
42
- this.defaultTransport = config.defaultTransport ?? 'http';
43
- this.defaultProtocol = config.defaultProtocol ?? 'envelope';
44
- this.hooks = config.hooks ?? {};
45
- this.codec = config.codec ?? 'json';
46
- this.logger = config.logger ?? console;
47
- // Schema: either an existing registry (shared across clients) or an
48
- // array we load into a fresh registry. `SchemaRegistry.is` is a duck
49
- // check — `instanceof` fails across package duplicates / realms.
50
- if (SchemaRegistry.is(config.schema)) {
51
- this.schema = config.schema;
52
- }
53
- else {
54
- this.schema = new SchemaRegistry();
55
- if (Array.isArray(config.schema) && config.schema.length > 0) {
56
- this.schema.load(config.schema);
57
- }
1
+ import { ClientError } from '../errors/index.js';
2
+ import { HttpTransport } from '../transport/http/index.js';
3
+ import { authenticated, resolveCredential } from './credential.js';
4
+ import { admitRequest, invocation } from './request.js';
5
+ import { requireBinary, requireStream, requireValue } from './result.js';
6
+ import { admittedMissError, admittedStaleRouteError } from './routing-control.js';
7
+ const controlledDispatch = new WeakMap();
8
+ /** Package-private redirect continuation path; intentionally absent from the public Client facade. */
9
+ export function dispatchTrace(client, credential, call, options, trace) {
10
+ const dispatch = controlledDispatch.get(client);
11
+ if (dispatch === undefined)
12
+ throw new TypeError('Trace dispatch requires an owned Client.');
13
+ return dispatch(credential, call, options, trace);
14
+ }
15
+ /** Pure client for the universal remote Function invocation boundary. */
16
+ export class Client {
17
+ transport;
18
+ lifecycle = new AbortController();
19
+ closed = false;
20
+ constructor(options) {
21
+ if (options === null || typeof options !== 'object') {
22
+ throw new TypeError('Client options must be an object.');
58
23
  }
59
- this.httpEnvelope = new HttpEnvelopeTransport({
60
- url: this.url,
61
- codec: this.codec,
62
- requestTimeout: this.defaultTimeout,
63
- retry: config.retry,
64
- fetch: config.fetch,
65
- });
66
- this.httpRouted = new HttpRoutedTransport({
67
- requestTimeout: this.defaultTimeout,
68
- fetch: config.fetch,
69
- });
70
- this.wsFactory = () => new WsEnvelopeTransport({
71
- url: this.url,
72
- codec: this.codec,
73
- requestTimeout: this.defaultTimeout,
74
- });
24
+ this.transport = Object.hasOwn(options, 'transport')
25
+ ? admitTransport(options.transport)
26
+ : new HttpTransport(options);
27
+ controlledDispatch.set(this, (credential, call, requestOptions, trace) => this.dispatchWith(credential, call, requestOptions, trace));
75
28
  }
76
- // ─── Transport primitives ─────────────────────────────────────────────────
77
- async send(method, params, credential, opts) {
78
- return this.dispatchUnary('call', method, params, credential, opts);
29
+ dispatch(call, options) {
30
+ return this.dispatchWith(undefined, call, options);
79
31
  }
80
- async sendStream(method, params, credential, opts) {
81
- return this.dispatchUnary('stream', method, params, credential, opts);
32
+ call(call, options) {
33
+ return requireValue(this.dispatch(call, options));
82
34
  }
83
- async sendBinary(method, params, credential, opts) {
84
- return this.dispatchUnary('binary', method, params, credential, opts);
35
+ stream(call, options) {
36
+ return requireStream(this.dispatch(call, options));
85
37
  }
86
- signal(method, params, credential, opts) {
87
- const schemaEntry = this.lookupSchema(method, opts);
88
- const { transport, transportReq } = this.selectTransport('signal', method, params, credential, opts, schemaEntry);
89
- const beforeCtx = this.beforeCtx(method, params, credential, transport.name, transportReq, opts);
90
- void this.runHooks('onBeforeSend', beforeCtx);
91
- transport.signal(transportReq);
92
- void this.runHooks('onAfterSignal', { ...beforeCtx, dispatchedAt: Date.now() });
93
- }
94
- async batch(requests, credential, opts) {
95
- if (requests.length === 0)
96
- return [];
97
- // Batch uses the envelope transport — the only path with a
98
- // multi-request wire shape. Snapshot each entry's schema once so an
99
- // external registry mutating mid-dispatch doesn't retarget half the
100
- // batch. Mixing routed-only methods in is a policy error — flag it
101
- // before any wire work starts.
102
- const snapshot = requests.map((r) => ({
103
- method: r.method,
104
- params: r.params,
105
- schema: this.lookupSchema(r.method, opts),
106
- }));
107
- for (const entry of snapshot) {
108
- if (isRoutedOnly(entry.schema)) {
109
- throw new InvalidTransportError(`Method "${entry.method}" has a route binding; batch only supports envelope calls`);
110
- }
111
- }
112
- const transportRequests = snapshot.map((entry) => this.buildEnvelopeRequest(entry.method, entry.params, credential, opts, entry.schema));
113
- const entries = await this.httpEnvelope.batch(transportRequests);
114
- return entries;
38
+ binary(call, options) {
39
+ return requireBinary(this.dispatch(call, options));
115
40
  }
116
- // ─── Identity & schema views ──────────────────────────────────────────────
117
41
  as(credential) {
118
- return createBoundClientView(this, credential);
119
- }
120
- /**
121
- * Return a schema-typed proxy. `defaultCredential` — used by
122
- * `BoundClientView.withSchema` — supplies a credential when the
123
- * per-call `ProxyCallOptions.credential` is absent. Unbound callers
124
- * that provide neither send a no-auth request; the server decides
125
- * whether that's valid (per §9.0.1 the client treats credentials as
126
- * opaque and never pre-judges them).
127
- */
128
- withSchema(schema, defaultCredential) {
129
- return createSchemaClient(async (method, params, credential, opts) => {
130
- const effective = (credential ?? defaultCredential?.() ?? '');
131
- const result = await this.send(method, params, effective, opts);
132
- if (result.kind === 'redirect') {
133
- // Proxy is value-path only by contract (§9.4). Callers wanting
134
- // redirect awareness use `client.send` directly.
135
- const err = new KernelError(`Unhandled redirect: "${method}" resolved to ${result.redirection.url}. ` +
136
- `Use client.send() to handle redirects explicitly.`, KERNEL_ERROR_CODES.INTERNAL_ERROR, 'UNHANDLED_REDIRECT');
137
- withDetails(err, {
138
- method: String(method),
139
- params,
140
- url: this.url,
141
- transport: result.meta.transport,
142
- correlationId: opts?.correlationId,
143
- meta: result.meta,
144
- redirection: result.redirection,
145
- });
146
- throw err;
147
- }
148
- return result.value;
149
- }, schema);
150
- }
151
- describe(method) {
152
- return this.schema.get(method);
153
- }
154
- // ─── Connection lifecycle ─────────────────────────────────────────────────
155
- /**
156
- * Release any held resources (open WebSocket). Idempotent. The client
157
- * stays reusable — a subsequent `send(...)` lazily re-opens a fresh
158
- * WebSocket if the default or per-call transport selects `'ws'`. Resets
159
- * the `'auto'` probe state so the next call re-probes.
160
- */
161
- disconnect() {
162
- this.ws?.disconnect();
163
- this.ws = null;
164
- this.httpEnvelope.disconnect();
165
- this.httpRouted.disconnect();
166
- this.wsState = 'unknown';
167
- }
168
- // ─── Internals ────────────────────────────────────────────────────────────
169
- lookupSchema(method, opts) {
170
- return this.schema.resolve(method, opts?.class) ?? this.schema.get(method);
171
- }
172
- /**
173
- * Resolve the transport instance + request shape for this call.
174
- * `canFallback` signals to `dispatchUnary` that a WS `ConnectionError`
175
- * on this attempt should retry on HTTP (auto-mode probe only).
176
- */
177
- selectTransport(kind, method, params, credential, opts, schemaEntry) {
178
- const requested = opts?.transport ?? this.defaultTransport;
179
- const protocol = opts?.protocol ?? this.defaultProtocol;
180
- const binding = schemaEntry?.binding;
181
- const route = binding?.route;
182
- const remoteUrl = opts?.url ?? binding?.remoteUrl;
183
- const preferRoute = protocol === 'auto' && !!route;
184
- if (preferRoute) {
185
- if (!remoteUrl) {
186
- // Binding without remoteUrl is a schema misconfig — caller can
187
- // still rescue by passing opts.url, but both missing is broken.
188
- throw new InvalidTransportError(`Method "${method}" declares a route binding but has no remoteUrl; ` +
189
- `register a schema with binding.remoteUrl or pass opts.url`);
190
- }
191
- return {
192
- transport: this.httpRouted,
193
- transportReq: this.buildRoutedRequest(method, params, credential, opts, route, remoteUrl),
194
- canFallback: false,
195
- };
196
- }
197
- const resolved = this.resolveEnvelopePipe(requested, kind);
198
- return {
199
- transport: resolved === 'ws' ? this.envelopeWs() : this.httpEnvelope,
200
- transportReq: this.buildEnvelopeRequest(method, params, credential, opts, schemaEntry),
201
- canFallback: requested === 'auto' && resolved === 'ws' && this.wsState === 'unknown',
202
- };
203
- }
204
- /**
205
- * Resolve `CallTransport` to a concrete envelope pipe. Binary is always
206
- * HTTP (server-side WS binary unimplemented). In `'auto'+unknown`, signal
207
- * stays on HTTP — fire-and-forget can't communicate fallback.
208
- */
209
- resolveEnvelopePipe(requested, kind) {
210
- if (kind === 'binary')
211
- return 'http';
212
- if (requested === 'http')
213
- return 'http';
214
- if (requested === 'ws')
215
- return 'ws';
216
- if (this.wsState === 'unavailable')
217
- return 'http';
218
- if (this.wsState === 'proven')
219
- return 'ws';
220
- return kind === 'signal' ? 'http' : 'ws';
221
- }
222
- envelopeWs() {
223
- if (!this.ws)
224
- this.ws = this.wsFactory();
225
- return this.ws;
226
- }
227
- buildEnvelopeRequest(method, params, credential, opts, schemaEntry) {
228
- const binding = schemaEntry?.binding;
229
- const remoteUrl = opts?.url ?? binding?.remoteUrl;
230
- const url = remoteUrl && params && typeof params === 'object'
231
- ? substituteTemplate(remoteUrl, params)
232
- : remoteUrl;
233
- return {
234
- method,
235
- params,
236
- credential,
237
- timeout: opts?.timeout ?? this.defaultTimeout,
238
- signal: opts?.signal,
239
- correlationId: opts?.correlationId,
240
- url,
241
- ...(opts?.self !== undefined && { self: opts.self }),
242
- };
243
- }
244
- buildRoutedRequest(method, params, credential, opts, route, remoteUrl) {
245
- return {
246
- method,
247
- params: params ?? {},
248
- credential,
249
- timeout: opts?.timeout ?? this.defaultTimeout,
250
- signal: opts?.signal,
251
- correlationId: opts?.correlationId,
252
- route,
253
- remoteUrl,
254
- };
42
+ return authenticated((bound, request, options) => this.dispatchWith(bound, request, options), credential);
255
43
  }
256
- /**
257
- * Unary dispatch (call / stream / binary). Selects transport, fires
258
- * `onBeforeSend`, awaits the transport, freezes the result (deeply,
259
- * including `meta.wire`), wraps streams in the observability
260
- * iterator, fires `onAfterReceive`, and decorates errors with
261
- * `ClientErrorDetails` if the transport didn't already.
262
- */
263
- async dispatchUnary(kind, method, params, credential, opts) {
264
- const schemaEntry = this.lookupSchema(method, opts);
265
- const selection = this.selectTransport(kind, method, params, credential, opts, schemaEntry);
266
- try {
267
- return await this.dispatchOnce(kind, method, params, credential, opts, selection, !selection.canFallback);
268
- }
269
- catch (err) {
270
- if (selection.canFallback && err instanceof ConnectionError) {
271
- this.wsState = 'unavailable';
272
- const httpSel = this.selectTransport(kind, method, params, credential, opts, schemaEntry);
273
- return this.dispatchOnce(kind, method, params, credential, opts, httpSel, true);
274
- }
275
- throw err;
276
- }
277
- }
278
- /**
279
- * One dispatch attempt: hooks + wire + freeze. `fireErrorHook = false`
280
- * suppresses `onError` so a recovered auto-mode WS probe failure doesn't
281
- * surface as a phantom error when the fallback HTTP call succeeds.
282
- */
283
- async dispatchOnce(kind, method, params, credential, opts, selection, fireErrorHook) {
284
- const { transport, transportReq } = selection;
285
- const beforeCtx = this.beforeCtx(method, params, credential, transport.name, transportReq, opts);
286
- await this.runHooks('onBeforeSend', beforeCtx);
287
- try {
288
- const raw = kind === 'call'
289
- ? await transport.call(transportReq)
290
- : kind === 'stream'
291
- ? await transport.stream(transportReq)
292
- : await transport.binary(transportReq);
293
- if (transport.name === 'ws-envelope' && this.wsState === 'unknown') {
294
- this.wsState = 'proven';
295
- }
296
- // For streams, wrap `chunks` in the instrumented iterable BEFORE
297
- // freezing — hook and caller must see the same iterable so a hook
298
- // that iterates doesn't steal frames from the caller.
299
- const toFreeze = raw.kind === 'stream' && this.hooks.onStreamFrame
300
- ? {
301
- ...raw,
302
- chunks: this.instrumentStream(raw.chunks, beforeCtx, raw.meta),
303
- }
304
- : raw;
305
- const frozen = freezeResult(toFreeze);
306
- await this.runHooks('onAfterReceive', {
307
- ...beforeCtx,
308
- result: frozen,
309
- meta: frozen.meta,
310
- });
311
- return frozen;
312
- }
313
- catch (err) {
314
- const error = err instanceof Error ? err : new Error(String(err));
315
- if (error instanceof WebOSError && !error.details) {
316
- withDetails(error, {
317
- method,
318
- params,
319
- url: transport.url ?? this.url,
320
- transport: transport.name,
321
- correlationId: opts?.correlationId,
322
- });
323
- }
324
- if (fireErrorHook) {
325
- await this.runHooks('onError', {
326
- ...beforeCtx,
327
- error,
328
- meta: error.details?.meta,
329
- });
330
- }
331
- throw error;
332
- }
333
- }
334
- beforeCtx(method, params, credential, transport, transportReq, opts) {
335
- return {
336
- method,
337
- params,
338
- credential,
339
- transport,
340
- url: transportReq.url ?? this.url,
341
- correlationId: opts?.correlationId,
342
- };
343
- }
344
- /**
345
- * Wrap a stream iterable so each chunk fires `onStreamFrame`. Errors
346
- * during hook evaluation are swallowed per the hook contract (pure
347
- * observation); a hook that misbehaves never aborts the stream.
348
- */
349
- async *instrumentStream(chunks, beforeCtx, meta) {
350
- let index = 0;
351
- for await (const data of chunks) {
352
- if (this.hooks.onStreamFrame) {
353
- try {
354
- await this.hooks.onStreamFrame({ ...beforeCtx, index, data, meta });
355
- }
356
- catch (err) {
357
- this.logHookError('onStreamFrame', err);
358
- }
359
- }
360
- index++;
361
- yield data;
362
- }
363
- }
364
- async runHooks(key, ctx) {
365
- const hook = this.hooks[key];
366
- if (!hook)
44
+ close() {
45
+ if (this.closed)
367
46
  return;
368
- try {
369
- await hook(ctx);
370
- }
371
- catch (err) {
372
- this.logHookError(key, err);
373
- }
374
- }
375
- /**
376
- * Log a hook-layer failure. Only the error's name + message are
377
- * surfaced — the error may chain a `cause` that captured a credential
378
- * or other sensitive ref by closure, and the client never leaks those
379
- * per §9.0.1. Consumers who need full diagnostics provide a
380
- * `logger` with their own redaction policy.
381
- */
382
- logHookError(key, err) {
383
- const e = err instanceof Error ? err : new Error(String(err));
384
- this.logger.error(`[kernel-client] hook "${key}" threw: ${e.name}: ${e.message}`);
47
+ this.closed = true;
48
+ const failure = new ClientError('Client is closed.');
49
+ this.lifecycle.abort(failure);
50
+ this.transport.close?.();
51
+ }
52
+ async dispatchWith(credential, input, options, trace) {
53
+ if (this.closed)
54
+ throw new ClientError('Client is closed.');
55
+ const request = admitRequest(input, options, this.lifecycle.signal);
56
+ const resolved = credential === undefined
57
+ ? undefined
58
+ : await resolveCredential(credential, request.options.signal);
59
+ requireRequestLive(request.options.signal);
60
+ const result = await this.transport.dispatch(invocation(request, resolved, trace), request.options);
61
+ if (result.kind === 'stale')
62
+ throw admittedStaleRouteError(result.current, result.invocation);
63
+ if (result.kind === 'miss')
64
+ throw admittedMissError(result.invocation);
65
+ return result;
385
66
  }
386
67
  }
387
- function isRoutedOnly(schema) {
388
- if (!schema)
389
- return false;
390
- const binding = schema.binding;
391
- return !!binding?.route;
68
+ function requireRequestLive(signal) {
69
+ if (signal?.aborted !== true)
70
+ return;
71
+ const reason = signal.reason;
72
+ throw reason instanceof Error
73
+ ? reason
74
+ : new ClientError('Client request was cancelled.', { cause: reason });
75
+ }
76
+ function admitTransport(input) {
77
+ if (input === null || typeof input !== 'object') {
78
+ throw new TypeError('Client transport must be an object.');
79
+ }
80
+ const dispatch = input.dispatch;
81
+ if (typeof dispatch !== 'function') {
82
+ throw new TypeError('Client transport must implement dispatch().');
83
+ }
84
+ const close = input.close;
85
+ if (close !== undefined && typeof close !== 'function') {
86
+ throw new TypeError('Client transport close capability is invalid.');
87
+ }
88
+ return Object.freeze({
89
+ dispatch: dispatch.bind(input),
90
+ ...(close === undefined ? {} : { close: close.bind(input) }),
91
+ });
392
92
  }
393
- //# sourceMappingURL=client.js.map
@@ -0,0 +1,12 @@
1
+ import type { Call, ClientDispatchOptions } from './request.js';
2
+ import type { BinaryResponse, Result, StreamResult, ValueResult } from './result.js';
3
+ export type RemoteCredential = string | (() => string | Promise<string>);
4
+ export interface AuthenticatedClient {
5
+ dispatch(call: Call, options?: ClientDispatchOptions): Promise<Result>;
6
+ call(call: Call, options?: ClientDispatchOptions): Promise<ValueResult>;
7
+ stream(call: Call, options?: ClientDispatchOptions): Promise<StreamResult>;
8
+ binary(call: Call, options?: ClientDispatchOptions): Promise<BinaryResponse>;
9
+ }
10
+ export type CredentialDispatch = (credential: RemoteCredential, call: Call, options?: ClientDispatchOptions) => Promise<Result>;
11
+ export declare function authenticated(dispatchWith: CredentialDispatch, credential: RemoteCredential): AuthenticatedClient;
12
+ export declare function resolveCredential(input: RemoteCredential, signal?: AbortSignal): Promise<string>;
@@ -0,0 +1,51 @@
1
+ import { ClientError } from '../errors/index.js';
2
+ import { requireBinary, requireStream, requireValue } from './result.js';
3
+ export function authenticated(dispatchWith, credential) {
4
+ const dispatch = (call, options) => dispatchWith(credential, call, options);
5
+ return Object.freeze({
6
+ dispatch,
7
+ call: (call, options) => requireValue(dispatch(call, options)),
8
+ stream: (call, options) => requireStream(dispatch(call, options)),
9
+ binary: (call, options) => requireBinary(dispatch(call, options)),
10
+ });
11
+ }
12
+ export async function resolveCredential(input, signal) {
13
+ requireLive(signal);
14
+ const pending = Promise.resolve(typeof input === 'function' ? input() : input);
15
+ const credential = await observeWhileLive(pending, signal);
16
+ if (typeof credential !== 'string' || credential.length === 0) {
17
+ throw new TypeError('Remote credentials must be non-empty strings.');
18
+ }
19
+ return credential;
20
+ }
21
+ function observeWhileLive(pending, signal) {
22
+ if (signal === undefined)
23
+ return pending;
24
+ return new Promise((resolve, reject) => {
25
+ const cancelled = () => {
26
+ signal.removeEventListener('abort', cancelled);
27
+ reject(cancellation(signal.reason));
28
+ };
29
+ signal.addEventListener('abort', cancelled, { once: true });
30
+ if (signal.aborted) {
31
+ cancelled();
32
+ return;
33
+ }
34
+ void pending.then((value) => {
35
+ signal.removeEventListener('abort', cancelled);
36
+ resolve(value);
37
+ }, (error) => {
38
+ signal.removeEventListener('abort', cancelled);
39
+ reject(error);
40
+ });
41
+ });
42
+ }
43
+ function requireLive(signal) {
44
+ if (signal?.aborted === true)
45
+ throw cancellation(signal.reason);
46
+ }
47
+ function cancellation(reason) {
48
+ return reason instanceof Error
49
+ ? reason
50
+ : new ClientError('Client request was cancelled.', { cause: reason });
51
+ }
@@ -0,0 +1,6 @@
1
+ export { Client, dispatchTrace, type ClientOptions } from './client.js';
2
+ export { acceptCall } from './admission.js';
3
+ export type { AuthenticatedClient, RemoteCredential } from './credential.js';
4
+ export { call, type Call, type ClientDispatchOptions } from './request.js';
5
+ export type { Binary, BinaryResponse, Input, RedirectResult, Result, Stream, StreamResult, ValueResult, } from './result.js';
6
+ export { isAdmittedMissError, isAdmittedStaleRouteError } from './routing-control.js';
@@ -0,0 +1,4 @@
1
+ export { Client, dispatchTrace } from './client.js';
2
+ export { acceptCall } from './admission.js';
3
+ export { call } from './request.js';
4
+ export { isAdmittedMissError, isAdmittedStaleRouteError } from './routing-control.js';
@@ -0,0 +1,26 @@
1
+ import type { PathLike } from '@astrale-os/kernel-core/path';
2
+ import type * as protocol from '@astrale-os/kernel-protocol/invocation';
3
+ import type { RequestOptions, TransportRequest } from '../transport/index.js';
4
+ import type { Input } from './result.js';
5
+ /** One portable call before Path canonicalization, correlation, and credential binding. */
6
+ export interface Call {
7
+ readonly target: PathLike;
8
+ readonly input: Input;
9
+ }
10
+ export interface ClientDispatchOptions extends RequestOptions {
11
+ /** Untrusted delivery context; it changes neither Call meaning nor authority. */
12
+ readonly delegate?: protocol.Delegate;
13
+ readonly routing?: protocol.Routing;
14
+ /** Package-owned local-target or remote-revision precondition for a bound invocation. */
15
+ readonly schema?: protocol.SchemaTarget;
16
+ }
17
+ export interface AdmittedRequest {
18
+ readonly call: protocol.Call;
19
+ readonly delegate?: protocol.Delegate;
20
+ readonly routing?: protocol.Routing;
21
+ readonly schema?: protocol.SchemaTarget;
22
+ readonly options: RequestOptions;
23
+ }
24
+ export declare function call(target: PathLike, input: Input): Call;
25
+ export declare function admitRequest(input: Call, options: ClientDispatchOptions | undefined, lifecycle: AbortSignal): AdmittedRequest;
26
+ export declare function invocation(request: AdmittedRequest, credential?: string, trace?: protocol.Trace): TransportRequest;