@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
@@ -0,0 +1,284 @@
1
+ import * as protocol from '@astrale-os/kernel-protocol/invocation';
2
+ import { ProtocolError } from '../../errors/index.js';
3
+ import { invocationFailure } from '../failure.js';
4
+ import { asError } from '../index.js';
5
+ import { WebSocketExchange } from './exchange.js';
6
+ const WS_CONNECTING = 0;
7
+ const WS_OPEN = 1;
8
+ export class WebSocketConnection {
9
+ owner;
10
+ codec;
11
+ maximumRequestBytes;
12
+ maximumResponseBytes;
13
+ maximumBufferedBytes;
14
+ maximumActiveInvocations;
15
+ socket;
16
+ ready;
17
+ resolveReady;
18
+ rejectReady;
19
+ opened = false;
20
+ closedState = false;
21
+ active = new Map();
22
+ cancelled = new Set();
23
+ incoming = Promise.resolve();
24
+ constructor(owner, WebSocketConstructor, url, codec, maximumRequestBytes, maximumResponseBytes, maximumBufferedBytes, maximumActiveInvocations) {
25
+ this.owner = owner;
26
+ this.codec = codec;
27
+ this.maximumRequestBytes = maximumRequestBytes;
28
+ this.maximumResponseBytes = maximumResponseBytes;
29
+ this.maximumBufferedBytes = maximumBufferedBytes;
30
+ this.maximumActiveInvocations = maximumActiveInvocations;
31
+ this.ready = new Promise((resolve, reject) => {
32
+ this.resolveReady = resolve;
33
+ this.rejectReady = reject;
34
+ });
35
+ this.socket = new WebSocketConstructor(url, protocol.websocket.subprotocolFor(codec));
36
+ this.socket.binaryType = 'arraybuffer';
37
+ this.socket.addEventListener('open', () => this.onOpen(), { once: true });
38
+ this.socket.addEventListener('message', (event) => this.onMessage(event));
39
+ this.socket.addEventListener('error', () => this.onFailure('WebSocket connection failed.'));
40
+ this.socket.addEventListener('close', () => this.onFailure('WebSocket connection closed.'));
41
+ }
42
+ get isOpen() {
43
+ return !this.closedState && this.opened && this.socket.readyState === WS_OPEN;
44
+ }
45
+ get isAvailable() {
46
+ return !this.closedState;
47
+ }
48
+ async connect(control) {
49
+ if (control.signal.aborted) {
50
+ throw asError(control.signal.reason);
51
+ }
52
+ let abort;
53
+ const cancelled = new Promise((_resolve, reject) => {
54
+ abort = () => reject(asError(control.signal.reason));
55
+ control.signal.addEventListener('abort', abort, { once: true });
56
+ });
57
+ try {
58
+ await Promise.race([this.ready, cancelled]);
59
+ }
60
+ finally {
61
+ control.signal.removeEventListener('abort', abort);
62
+ }
63
+ }
64
+ dispatch(request, control, maximumBufferedItems) {
65
+ if (!this.isOpen) {
66
+ control.close();
67
+ return Promise.reject(invocationFailure('WebSocket connection is not available.', 'connect'));
68
+ }
69
+ const key = requestKey(request.requestId);
70
+ if (this.active.has(key) || this.cancelled.has(key)) {
71
+ control.close();
72
+ return Promise.reject(new ProtocolError('WebSocket request ID is already in use.'));
73
+ }
74
+ if (this.active.size + this.cancelled.size >= this.maximumActiveInvocations) {
75
+ control.close();
76
+ return Promise.reject(invocationFailure(`WebSocket connection exceeds maximumActiveInvocations (${this.maximumActiveInvocations}).`, 'send'));
77
+ }
78
+ const encoded = this.codec.encode(request);
79
+ const encodedBytes = frameSize(encoded);
80
+ if (encodedBytes > this.maximumRequestBytes) {
81
+ control.close();
82
+ return Promise.reject(invocationFailure(`WebSocket request exceeds maximumRequestBytes (${this.maximumRequestBytes}).`, 'send'));
83
+ }
84
+ if (this.socket.bufferedAmount + encodedBytes > this.maximumBufferedBytes) {
85
+ control.close();
86
+ return Promise.reject(invocationFailure(`WebSocket connection exceeds maximumBufferedBytes (${this.maximumBufferedBytes}).`, 'send'));
87
+ }
88
+ const exchange = new WebSocketExchange(this, request.requestId, control, maximumBufferedItems);
89
+ this.active.set(key, exchange);
90
+ return exchange.start((data) => this.socket.send(socketData(data)), encoded);
91
+ }
92
+ finish(exchange, reusable, closeCode = 1002) {
93
+ removeExchange(this.active, exchange);
94
+ if (!reusable) {
95
+ this.shutdown(invocationFailure('WebSocket connection was closed after a binding failure.', 'receive'), closeCode, closeReason(closeCode));
96
+ }
97
+ }
98
+ cancel(exchange, requestId) {
99
+ const key = requestKey(requestId);
100
+ if (this.active.get(key) !== exchange)
101
+ return;
102
+ this.active.delete(key);
103
+ this.cancelled.add(key);
104
+ try {
105
+ const encoded = this.codec.encode(protocol.decodeCancelRequest({ version: protocol.VERSION, kind: 'cancel', requestId }));
106
+ const bytes = frameSize(encoded);
107
+ if (bytes > this.maximumRequestBytes ||
108
+ this.socket.bufferedAmount + bytes > this.maximumBufferedBytes) {
109
+ throw new WebSocketBindingFailure('WebSocket cancellation exceeds the connection send policy.', 1008, 'Client send policy exceeded');
110
+ }
111
+ this.socket.send(socketData(encoded));
112
+ }
113
+ catch (error) {
114
+ this.shutdown(invocationFailure('Failed to send WebSocket cancellation.', 'send', {
115
+ cause: asError(error),
116
+ delivery: 'unknown',
117
+ }), error instanceof WebSocketBindingFailure ? error.closeCode : 1011, error instanceof WebSocketBindingFailure ? error.closeReason : 'Client send failed');
118
+ }
119
+ }
120
+ shutdown(reason = invocationFailure('WebSocket connection was closed.', 'closed'), closeCode = 1000, closeReason = 'Client closed') {
121
+ if (this.closedState)
122
+ return;
123
+ this.closedState = true;
124
+ this.rejectReady(reason);
125
+ const active = [...this.active.values()];
126
+ this.active.clear();
127
+ this.cancelled.clear();
128
+ for (const exchange of active)
129
+ exchange.connectionFailed(reason);
130
+ try {
131
+ if (this.socket.readyState === WS_CONNECTING || this.socket.readyState === WS_OPEN) {
132
+ this.socket.close(closeCode, closeReason);
133
+ }
134
+ }
135
+ catch {
136
+ // The platform already owns a broken socket.
137
+ }
138
+ this.owner.closed(this);
139
+ }
140
+ onOpen() {
141
+ if (this.closedState)
142
+ return;
143
+ const expected = protocol.websocket.subprotocolFor(this.codec);
144
+ if (this.socket.protocol !== expected) {
145
+ this.shutdown(invocationFailure(`server selected WebSocket subprotocol ${JSON.stringify(this.socket.protocol)}; expected ${JSON.stringify(expected)}.`, 'connect'), 1002, 'Subprotocol mismatch');
146
+ return;
147
+ }
148
+ this.opened = true;
149
+ this.resolveReady();
150
+ }
151
+ onMessage(event) {
152
+ this.incoming = this.incoming
153
+ .then(async () => {
154
+ const frame = await normalizeFrame(event.data);
155
+ if (frameSize(frame) > this.maximumResponseBytes) {
156
+ throw new WebSocketBindingFailure(`WebSocket frame exceeds maximumResponseBytes (${this.maximumResponseBytes}).`, 1009, 'Message too big');
157
+ }
158
+ const admitted = decodeFrame(this.codec, frame);
159
+ const key = requestKey(admitted.requestId);
160
+ const exchange = this.active.get(key);
161
+ if (exchange !== undefined) {
162
+ exchange.receive(admitted);
163
+ return;
164
+ }
165
+ if (this.cancelled.has(key)) {
166
+ if (isTerminal(admitted))
167
+ this.cancelled.delete(key);
168
+ return;
169
+ }
170
+ throw new ProtocolError('server sent an unsolicited WebSocket frame.');
171
+ })
172
+ .catch((error) => {
173
+ const failure = bindingFailure(error);
174
+ this.shutdown(failure, failure.closeCode, failure.closeReason);
175
+ });
176
+ }
177
+ onFailure(message) {
178
+ if (this.closedState)
179
+ return;
180
+ this.shutdown(invocationFailure(message, this.opened ? 'receive' : 'connect'));
181
+ }
182
+ }
183
+ async function normalizeFrame(input) {
184
+ if (typeof input === 'string')
185
+ return input;
186
+ if (input instanceof ArrayBuffer)
187
+ return new Uint8Array(input.slice(0));
188
+ if (ArrayBuffer.isView(input)) {
189
+ return new Uint8Array(input.buffer.slice(input.byteOffset, input.byteOffset + input.byteLength));
190
+ }
191
+ if (typeof Blob !== 'undefined' && input instanceof Blob) {
192
+ return new Uint8Array(await input.arrayBuffer());
193
+ }
194
+ throw new ProtocolError('server returned an unsupported WebSocket frame type.');
195
+ }
196
+ function frameSize(input) {
197
+ return typeof input === 'string' ? new TextEncoder().encode(input).byteLength : input.byteLength;
198
+ }
199
+ function socketData(input) {
200
+ if (typeof input === 'string')
201
+ return input;
202
+ const copy = new Uint8Array(input);
203
+ return copy.buffer;
204
+ }
205
+ function decodeFrame(codec, input) {
206
+ try {
207
+ const binary = typeof input === 'string' ? undefined : protocol.websocket.decodeBinary(input);
208
+ if (binary !== undefined)
209
+ return binary;
210
+ if ((codec.binary && typeof input === 'string') ||
211
+ (!codec.binary && typeof input !== 'string')) {
212
+ throw new WebSocketBindingFailure('server returned a message type incompatible with the selected subprotocol.', 1003, 'Unsupported message type');
213
+ }
214
+ const decoded = codec.decode(input);
215
+ if (isKind(decoded, 'redirect'))
216
+ return protocol.decodeRedirectResponse(decoded);
217
+ if (isKind(decoded, 'stale'))
218
+ return protocol.decodeStale(decoded);
219
+ if (isKind(decoded, 'miss'))
220
+ return protocol.decodeMiss(decoded);
221
+ if (isStreamFrame(decoded))
222
+ return protocol.decodeStreamFrame(decoded);
223
+ return protocol.decodeResponse(decoded);
224
+ }
225
+ catch (error) {
226
+ if (error instanceof WebSocketBindingFailure)
227
+ throw error;
228
+ throw new ProtocolError('server returned an invalid WebSocket frame.', {
229
+ cause: asError(error),
230
+ });
231
+ }
232
+ }
233
+ class WebSocketBindingFailure extends ProtocolError {
234
+ closeCode;
235
+ closeReason;
236
+ constructor(message, closeCode, closeReason) {
237
+ super(message);
238
+ this.closeCode = closeCode;
239
+ this.closeReason = closeReason;
240
+ }
241
+ }
242
+ function bindingFailure(input) {
243
+ if (input instanceof WebSocketBindingFailure)
244
+ return input;
245
+ const error = input instanceof ProtocolError
246
+ ? input
247
+ : new ProtocolError('server returned an invalid WebSocket frame.', {
248
+ cause: asError(input),
249
+ });
250
+ return new WebSocketBindingFailure(error.message, 1002, 'Protocol error');
251
+ }
252
+ function closeReason(code) {
253
+ if (code === 1008)
254
+ return 'Client policy exceeded';
255
+ if (code === 1011)
256
+ return 'Client send failed';
257
+ return 'Protocol error';
258
+ }
259
+ function isTerminal(input) {
260
+ return !isKind(input, 'stream.start') && !isKind(input, 'stream.item');
261
+ }
262
+ function isStreamFrame(input) {
263
+ const kind = typeof input === 'object' && input !== null && !Array.isArray(input)
264
+ ? input.kind
265
+ : undefined;
266
+ return typeof kind === 'string' && kind.startsWith('stream.');
267
+ }
268
+ function isKind(input, kind) {
269
+ return (typeof input === 'object' &&
270
+ input !== null &&
271
+ !Array.isArray(input) &&
272
+ input.kind === kind);
273
+ }
274
+ function requestKey(requestId) {
275
+ return requestId === null ? 'null:' : `${typeof requestId}:${String(requestId)}`;
276
+ }
277
+ function removeExchange(exchanges, exchange) {
278
+ for (const [key, active] of exchanges) {
279
+ if (active !== exchange)
280
+ continue;
281
+ exchanges.delete(key);
282
+ return;
283
+ }
284
+ }
@@ -0,0 +1,46 @@
1
+ import type { Value } from '@astrale-os/kernel-dsl/value';
2
+ import type * as protocol from '@astrale-os/kernel-protocol/invocation';
3
+ import type { Stream } from '../../client/index.js';
4
+ import type { ControlledSignal } from '../index.js';
5
+ import type { TransportResult } from '../index.js';
6
+ export interface ExchangeOwner {
7
+ finish(exchange: WebSocketExchange, reusable: boolean, closeCode?: 1002 | 1008 | 1011): void;
8
+ cancel(exchange: WebSocketExchange, requestId: protocol.RequestId): void;
9
+ }
10
+ export type WebSocketInbound = protocol.BinaryResponse | protocol.RedirectResponse | protocol.Stale | protocol.Miss | protocol.Response | protocol.StreamFrame;
11
+ /** One correlated invocation within a multiplexed WebSocket connection. */
12
+ export declare class WebSocketExchange implements Stream {
13
+ private readonly owner;
14
+ private readonly requestId;
15
+ private readonly control;
16
+ private readonly maximumBufferedItems;
17
+ private readonly result;
18
+ private resolveResult;
19
+ private rejectResult;
20
+ private readonly abort;
21
+ private state;
22
+ private claimed;
23
+ private index;
24
+ private readonly values;
25
+ private readonly waiters;
26
+ private terminal;
27
+ private sent;
28
+ private invocation?;
29
+ constructor(owner: ExchangeOwner, requestId: protocol.RequestId, control: ControlledSignal, maximumBufferedItems: number);
30
+ start(send: (data: string | Uint8Array) => void, encoded: string | Uint8Array): Promise<TransportResult>;
31
+ receive(input: WebSocketInbound): void;
32
+ connectionFailed(error: Error): void;
33
+ [Symbol.asyncIterator](): AsyncIterator<Value>;
34
+ cancel(_reason?: string): Promise<void>;
35
+ private receiveResponse;
36
+ private receiveStreamFrame;
37
+ private next;
38
+ private complete;
39
+ private reject;
40
+ private fail;
41
+ private cancelLocally;
42
+ private finish;
43
+ private finishCancelled;
44
+ private flushTerminal;
45
+ private abortFailure;
46
+ }
@@ -0,0 +1,300 @@
1
+ import * as errors from '@astrale-os/kernel-protocol/errors';
2
+ import { ProtocolError, ResponseError } from '../../errors/index.js';
3
+ import { invocationFailure } from '../failure.js';
4
+ import { asError } from '../index.js';
5
+ /** One correlated invocation within a multiplexed WebSocket connection. */
6
+ export class WebSocketExchange {
7
+ owner;
8
+ requestId;
9
+ control;
10
+ maximumBufferedItems;
11
+ result;
12
+ resolveResult;
13
+ rejectResult;
14
+ abort;
15
+ state = 'response';
16
+ claimed = false;
17
+ index = 0;
18
+ values = [];
19
+ waiters = [];
20
+ terminal;
21
+ sent = false;
22
+ invocation;
23
+ constructor(owner, requestId, control, maximumBufferedItems) {
24
+ this.owner = owner;
25
+ this.requestId = requestId;
26
+ this.control = control;
27
+ this.maximumBufferedItems = maximumBufferedItems;
28
+ this.result = new Promise((resolve, reject) => {
29
+ this.resolveResult = resolve;
30
+ this.rejectResult = reject;
31
+ });
32
+ this.abort = () => this.cancelLocally(this.abortFailure());
33
+ if (!control.signal.aborted)
34
+ control.signal.addEventListener('abort', this.abort, { once: true });
35
+ }
36
+ start(send, encoded) {
37
+ if (this.state === 'finished')
38
+ return this.result;
39
+ if (this.control.signal.aborted) {
40
+ this.abort();
41
+ return this.result;
42
+ }
43
+ try {
44
+ send(encoded);
45
+ this.sent = true;
46
+ }
47
+ catch (error) {
48
+ this.fail(invocationFailure('Failed to send the WebSocket invocation.', 'send', {
49
+ cause: asError(error),
50
+ }), 1011);
51
+ }
52
+ return this.result;
53
+ }
54
+ receive(input) {
55
+ try {
56
+ if (this.state === 'response') {
57
+ this.receiveResponse(input);
58
+ return;
59
+ }
60
+ if (this.state !== 'stream' || isKind(input, 'binary')) {
61
+ throw new ProtocolError('server sent an unexpected WebSocket response.');
62
+ }
63
+ this.receiveStreamFrame(input);
64
+ }
65
+ catch (error) {
66
+ const failure = protocolFailure(error, this.invocation);
67
+ this.fail(failure, failure instanceof WebSocketPolicyError ? 1008 : 1002);
68
+ }
69
+ }
70
+ connectionFailed(error) {
71
+ this.fail(this.sent
72
+ ? invocationFailure(error.message, 'receive', {
73
+ cause: error,
74
+ delivery: 'unknown',
75
+ ...(this.invocation === undefined ? {} : { invocation: this.invocation }),
76
+ })
77
+ : error);
78
+ }
79
+ [Symbol.asyncIterator]() {
80
+ if (this.claimed)
81
+ throw new TypeError('streams admit exactly one consumer.');
82
+ this.claimed = true;
83
+ return {
84
+ next: () => this.next(),
85
+ return: async () => {
86
+ await this.cancel('stream consumer stopped');
87
+ return { done: true, value: undefined };
88
+ },
89
+ throw: async (error) => {
90
+ await this.cancel('stream consumer failed');
91
+ throw error;
92
+ },
93
+ };
94
+ }
95
+ async cancel(_reason = 'stream cancelled') {
96
+ if (this.state === 'finished')
97
+ return;
98
+ this.values.length = 0;
99
+ this.terminal = true;
100
+ this.finishCancelled();
101
+ this.flushTerminal();
102
+ }
103
+ receiveResponse(input) {
104
+ if (isKind(input, 'binary')) {
105
+ const binary = input;
106
+ requireId(this.requestId, binary.requestId);
107
+ this.complete({
108
+ kind: 'binary',
109
+ invocation: binary.invocation,
110
+ value: {
111
+ body: binary.body,
112
+ mediaType: binary.mediaType,
113
+ ...(binary.headers === undefined ? {} : { headers: binary.headers }),
114
+ },
115
+ });
116
+ return;
117
+ }
118
+ if (isKind(input, 'stream.start')) {
119
+ const start = input;
120
+ requireId(this.requestId, start.requestId);
121
+ if (start.kind !== 'stream.start')
122
+ throw new ProtocolError('stream did not begin with stream.start.');
123
+ this.state = 'stream';
124
+ this.invocation = start.invocation;
125
+ this.resolveResult({ kind: 'stream', stream: this, invocation: start.invocation });
126
+ return;
127
+ }
128
+ if (isKind(input, 'redirect')) {
129
+ const response = input;
130
+ requireId(this.requestId, response.requestId);
131
+ this.complete({
132
+ kind: 'redirect',
133
+ invocation: response.invocation,
134
+ redirect: response.redirect,
135
+ });
136
+ return;
137
+ }
138
+ if (isKind(input, 'stale')) {
139
+ const stale = input;
140
+ requireId(this.requestId, stale.requestId);
141
+ this.complete(Object.freeze({ kind: 'stale', current: stale.current, invocation: stale.invocation }));
142
+ return;
143
+ }
144
+ if (isKind(input, 'miss')) {
145
+ const miss = input;
146
+ requireId(this.requestId, miss.requestId);
147
+ this.complete(Object.freeze({ kind: 'miss', invocation: miss.invocation }));
148
+ return;
149
+ }
150
+ const response = input;
151
+ requireId(this.requestId, response.requestId);
152
+ if ('error' in response) {
153
+ this.reject(new ResponseError(response.error.code, response.error.message, response.invocation, response.error.data));
154
+ return;
155
+ }
156
+ this.complete({ kind: 'value', value: response.result, invocation: response.invocation });
157
+ }
158
+ receiveStreamFrame(frame) {
159
+ requireId(this.requestId, frame.requestId);
160
+ if (frame.kind === 'stream.start') {
161
+ throw new ProtocolError('server sent a duplicate stream.start frame.');
162
+ }
163
+ if (frame.kind === 'stream.item') {
164
+ if (frame.index !== this.index) {
165
+ throw new ProtocolError(`stream item ${frame.index} does not match expected index ${this.index}.`);
166
+ }
167
+ this.index += 1;
168
+ const waiter = this.waiters.shift();
169
+ if (waiter !== undefined)
170
+ waiter.resolve({ done: false, value: frame.value });
171
+ else {
172
+ if (this.values.length >= this.maximumBufferedItems) {
173
+ throw new WebSocketPolicyError(`stream exceeds maximumBufferedStreamItems (${this.maximumBufferedItems}).`);
174
+ }
175
+ this.values.push(frame.value);
176
+ }
177
+ return;
178
+ }
179
+ if (frame.kind === 'stream.end' && frame.count !== this.index) {
180
+ throw new ProtocolError(`stream ended with count ${frame.count}; ${this.index} items were received.`);
181
+ }
182
+ this.terminal =
183
+ frame.kind === 'stream.error'
184
+ ? new ResponseError(frame.error.code, frame.error.message, this.invocation, frame.error.data)
185
+ : true;
186
+ this.finish(true);
187
+ this.flushTerminal();
188
+ }
189
+ next() {
190
+ const value = this.values.shift();
191
+ if (value !== undefined)
192
+ return Promise.resolve({ done: false, value });
193
+ if (this.terminal === true)
194
+ return Promise.resolve({ done: true, value: undefined });
195
+ if (this.terminal instanceof Error)
196
+ return Promise.reject(this.terminal);
197
+ return new Promise((resolve, reject) => this.waiters.push({ resolve, reject }));
198
+ }
199
+ complete(result) {
200
+ this.finish(true);
201
+ this.resolveResult(result);
202
+ }
203
+ reject(error) {
204
+ this.finish(true);
205
+ this.rejectResult(error);
206
+ }
207
+ fail(error, closeCode = 1002) {
208
+ if (this.state === 'finished')
209
+ return;
210
+ if (this.state === 'response')
211
+ this.rejectResult(error);
212
+ else {
213
+ this.terminal = error;
214
+ this.flushTerminal();
215
+ }
216
+ this.finish(false, closeCode);
217
+ }
218
+ cancelLocally(error) {
219
+ if (this.state === 'finished')
220
+ return;
221
+ if (this.state === 'response')
222
+ this.rejectResult(error);
223
+ else {
224
+ this.values.length = 0;
225
+ this.terminal = error;
226
+ this.flushTerminal();
227
+ }
228
+ this.finishCancelled();
229
+ }
230
+ finish(reusable, closeCode) {
231
+ if (this.state === 'finished')
232
+ return;
233
+ this.state = 'finished';
234
+ this.control.signal.removeEventListener('abort', this.abort);
235
+ this.control.close();
236
+ this.owner.finish(this, reusable, closeCode);
237
+ }
238
+ finishCancelled() {
239
+ if (this.state === 'finished')
240
+ return;
241
+ this.state = 'finished';
242
+ this.control.signal.removeEventListener('abort', this.abort);
243
+ this.control.close();
244
+ this.owner.cancel(this, this.requestId);
245
+ }
246
+ flushTerminal() {
247
+ if (this.terminal === undefined)
248
+ return;
249
+ for (const waiter of this.waiters.splice(0)) {
250
+ if (this.terminal === true)
251
+ waiter.resolve({ done: true, value: undefined });
252
+ else
253
+ waiter.reject(this.terminal);
254
+ }
255
+ }
256
+ abortFailure() {
257
+ if (this.control.timedOut) {
258
+ return invocationFailure('WebSocket invocation exceeded its timeout.', 'timeout', {
259
+ cause: asError(this.control.signal.reason),
260
+ delivery: this.sent ? 'unknown' : 'not-sent',
261
+ ...(this.invocation === undefined ? {} : { invocation: this.invocation }),
262
+ });
263
+ }
264
+ return asError(this.control.signal.reason ?? new Error('WebSocket invocation was cancelled.'));
265
+ }
266
+ }
267
+ class WebSocketPolicyError extends ProtocolError {
268
+ }
269
+ function protocolFailure(input, invocation) {
270
+ if (input instanceof ResponseError)
271
+ return input;
272
+ if (input instanceof WebSocketPolicyError) {
273
+ return input.invocation !== undefined || invocation === undefined
274
+ ? input
275
+ : new WebSocketPolicyError(input.message, { cause: input, invocation });
276
+ }
277
+ if (input instanceof ProtocolError) {
278
+ return input.invocation !== undefined || invocation === undefined
279
+ ? input
280
+ : new ProtocolError(input.message, { cause: input, invocation });
281
+ }
282
+ if (input instanceof errors.ProtocolError) {
283
+ return new ProtocolError(input.message, { cause: input, invocation });
284
+ }
285
+ return new ProtocolError('server returned an invalid WebSocket frame.', {
286
+ cause: asError(input),
287
+ invocation,
288
+ });
289
+ }
290
+ function requireId(expected, received) {
291
+ if (received !== expected) {
292
+ throw new ProtocolError(`response requestId ${JSON.stringify(received)} does not match request requestId ${JSON.stringify(expected)}.`);
293
+ }
294
+ }
295
+ function isKind(input, kind) {
296
+ return (typeof input === 'object' &&
297
+ input !== null &&
298
+ !Array.isArray(input) &&
299
+ input.kind === kind);
300
+ }
@@ -0,0 +1 @@
1
+ export { WebSocketTransport, type WebSocketConstructor, type WebSocketTransportOptions, } from './transport.js';
@@ -0,0 +1 @@
1
+ export { WebSocketTransport, } from './transport.js';
@@ -0,0 +1,46 @@
1
+ import type { RequestOptions, Transport, TransportRequest, TransportResult } from '../index.js';
2
+ /** Web-compatible WebSocket constructor used by the built-in WebSocket transport. */
3
+ export type WebSocketConstructor = new (url: string | URL, protocols?: string | string[]) => WebSocket;
4
+ export interface WebSocketTransportOptions {
5
+ readonly url: string;
6
+ readonly codec?: 'json' | 'msgpack';
7
+ /** Inject this capability when the host does not provide a global WebSocket. */
8
+ readonly websocket?: WebSocketConstructor;
9
+ readonly timeoutMs?: number;
10
+ /** Maximum bytes in one encoded request or cancellation before send. */
11
+ readonly maximumRequestBytes?: number;
12
+ /** Maximum unary, binary, or individual stream-frame body size. */
13
+ readonly maximumResponseBytes?: number;
14
+ /** Maximum socket bufferedAmount plus the next encoded message. */
15
+ readonly maximumBufferedBytes?: number;
16
+ /** Maximum active correlated invocations on one connection. */
17
+ readonly maximumActiveInvocations?: number;
18
+ /** Maximum decoded items retained while a stream consumer is slower than the socket. */
19
+ readonly maximumBufferedStreamItems?: number;
20
+ }
21
+ /** WebSocket implementation of the universal invocation protocol. */
22
+ export declare class WebSocketTransport implements Transport {
23
+ readonly url: string;
24
+ private readonly connectionUrl;
25
+ private readonly codecName;
26
+ private readonly WebSocketConstructor;
27
+ private readonly timeoutMs;
28
+ private readonly maximumRequestBytes;
29
+ private readonly maximumResponseBytes;
30
+ private readonly maximumBufferedBytes;
31
+ private readonly maximumActiveInvocations;
32
+ private readonly maximumBufferedStreamItems;
33
+ private readonly connections;
34
+ private readonly connectionOwner;
35
+ private connection;
36
+ private stopped;
37
+ private nextId;
38
+ constructor(options: WebSocketTransportOptions);
39
+ dispatch(input: TransportRequest, options?: RequestOptions): Promise<TransportResult>;
40
+ /** Close the multiplexed connection, reject active exchanges, and reject future dispatches. */
41
+ close(): void;
42
+ private connectionClosed;
43
+ private acquire;
44
+ private nextRequestId;
45
+ private codec;
46
+ }