@procedures/client 0.0.0-stage → 0.2.0

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 (777) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/LICENSE +21 -0
  3. package/README.md +832 -2
  4. package/dist/.tsbuildinfo +1 -0
  5. package/dist/adapters/http/client/index.d.ts +11 -0
  6. package/dist/adapters/http/client/index.d.ts.map +1 -0
  7. package/dist/adapters/http/client/index.js +18 -0
  8. package/dist/adapters/http/client/index.js.map +1 -0
  9. package/dist/adapters/http/client/transport.d.ts +72 -0
  10. package/dist/adapters/http/client/transport.d.ts.map +1 -0
  11. package/dist/adapters/http/client/transport.js +282 -0
  12. package/dist/adapters/http/client/transport.js.map +1 -0
  13. package/dist/adapters/http/client/types.d.ts +27 -0
  14. package/dist/adapters/http/client/types.d.ts.map +1 -0
  15. package/dist/adapters/http/client/types.js +8 -0
  16. package/dist/adapters/http/client/types.js.map +1 -0
  17. package/dist/adapters/http/index.d.ts +7 -0
  18. package/dist/adapters/http/index.d.ts.map +1 -0
  19. package/dist/adapters/http/index.js +7 -0
  20. package/dist/adapters/http/index.js.map +1 -0
  21. package/dist/adapters/http/server/index.d.ts +9 -0
  22. package/dist/adapters/http/server/index.d.ts.map +1 -0
  23. package/dist/adapters/http/server/index.js +10 -0
  24. package/dist/adapters/http/server/index.js.map +1 -0
  25. package/dist/adapters/http/server/strategies.d.ts +39 -0
  26. package/dist/adapters/http/server/strategies.d.ts.map +1 -0
  27. package/dist/adapters/http/server/strategies.js +90 -0
  28. package/dist/adapters/http/server/strategies.js.map +1 -0
  29. package/dist/adapters/http/server/transport.d.ts +66 -0
  30. package/dist/adapters/http/server/transport.d.ts.map +1 -0
  31. package/dist/adapters/http/server/transport.js +562 -0
  32. package/dist/adapters/http/server/transport.js.map +1 -0
  33. package/dist/adapters/http/server/types.d.ts +71 -0
  34. package/dist/adapters/http/server/types.d.ts.map +1 -0
  35. package/dist/adapters/http/server/types.js +7 -0
  36. package/dist/adapters/http/server/types.js.map +1 -0
  37. package/dist/adapters/http/shared/constants.d.ts +95 -0
  38. package/dist/adapters/http/shared/constants.d.ts.map +1 -0
  39. package/dist/adapters/http/shared/constants.js +102 -0
  40. package/dist/adapters/http/shared/constants.js.map +1 -0
  41. package/dist/adapters/http/shared/errors.d.ts +78 -0
  42. package/dist/adapters/http/shared/errors.d.ts.map +1 -0
  43. package/dist/adapters/http/shared/errors.js +151 -0
  44. package/dist/adapters/http/shared/errors.js.map +1 -0
  45. package/dist/adapters/http/shared/headers.d.ts +122 -0
  46. package/dist/adapters/http/shared/headers.d.ts.map +1 -0
  47. package/dist/adapters/http/shared/headers.js +216 -0
  48. package/dist/adapters/http/shared/headers.js.map +1 -0
  49. package/dist/adapters/http/shared/index.d.ts +12 -0
  50. package/dist/adapters/http/shared/index.d.ts.map +1 -0
  51. package/dist/adapters/http/shared/index.js +17 -0
  52. package/dist/adapters/http/shared/index.js.map +1 -0
  53. package/dist/adapters/http/shared/status-codes.d.ts +92 -0
  54. package/dist/adapters/http/shared/status-codes.d.ts.map +1 -0
  55. package/dist/adapters/http/shared/status-codes.js +189 -0
  56. package/dist/adapters/http/shared/status-codes.js.map +1 -0
  57. package/dist/adapters/http/shared/strategies.d.ts +90 -0
  58. package/dist/adapters/http/shared/strategies.d.ts.map +1 -0
  59. package/dist/adapters/http/shared/strategies.js +180 -0
  60. package/dist/adapters/http/shared/strategies.js.map +1 -0
  61. package/dist/adapters/local/client/index.d.ts +8 -0
  62. package/dist/adapters/local/client/index.d.ts.map +1 -0
  63. package/dist/adapters/local/client/index.js +8 -0
  64. package/dist/adapters/local/client/index.js.map +1 -0
  65. package/dist/adapters/local/client/transport.d.ts +81 -0
  66. package/dist/adapters/local/client/transport.d.ts.map +1 -0
  67. package/dist/adapters/local/client/transport.js +172 -0
  68. package/dist/adapters/local/client/transport.js.map +1 -0
  69. package/dist/adapters/local/client/types.d.ts +39 -0
  70. package/dist/adapters/local/client/types.d.ts.map +1 -0
  71. package/dist/adapters/local/client/types.js +13 -0
  72. package/dist/adapters/local/client/types.js.map +1 -0
  73. package/dist/adapters/metadata.d.ts +10 -0
  74. package/dist/adapters/metadata.d.ts.map +1 -0
  75. package/dist/adapters/metadata.js +19 -0
  76. package/dist/adapters/metadata.js.map +1 -0
  77. package/dist/adapters/mock/client/builder.d.ts +35 -0
  78. package/dist/adapters/mock/client/builder.d.ts.map +1 -0
  79. package/dist/adapters/mock/client/builder.js +58 -0
  80. package/dist/adapters/mock/client/builder.js.map +1 -0
  81. package/dist/adapters/mock/client/index.d.ts +9 -0
  82. package/dist/adapters/mock/client/index.d.ts.map +1 -0
  83. package/dist/adapters/mock/client/index.js +10 -0
  84. package/dist/adapters/mock/client/index.js.map +1 -0
  85. package/dist/adapters/mock/client/transport.d.ts +149 -0
  86. package/dist/adapters/mock/client/transport.d.ts.map +1 -0
  87. package/dist/adapters/mock/client/transport.js +289 -0
  88. package/dist/adapters/mock/client/transport.js.map +1 -0
  89. package/dist/adapters/mock/client/types.d.ts +86 -0
  90. package/dist/adapters/mock/client/types.d.ts.map +1 -0
  91. package/dist/adapters/mock/client/types.js +7 -0
  92. package/dist/adapters/mock/client/types.js.map +1 -0
  93. package/dist/adapters/websocket/client/index.d.ts +9 -0
  94. package/dist/adapters/websocket/client/index.d.ts.map +1 -0
  95. package/dist/adapters/websocket/client/index.js +9 -0
  96. package/dist/adapters/websocket/client/index.js.map +1 -0
  97. package/dist/adapters/websocket/client/transport.d.ts +106 -0
  98. package/dist/adapters/websocket/client/transport.d.ts.map +1 -0
  99. package/dist/adapters/websocket/client/transport.js +647 -0
  100. package/dist/adapters/websocket/client/transport.js.map +1 -0
  101. package/dist/adapters/websocket/client/types.d.ts +192 -0
  102. package/dist/adapters/websocket/client/types.d.ts.map +1 -0
  103. package/dist/adapters/websocket/client/types.js +17 -0
  104. package/dist/adapters/websocket/client/types.js.map +1 -0
  105. package/dist/adapters/websocket/index.d.ts +8 -0
  106. package/dist/adapters/websocket/index.d.ts.map +1 -0
  107. package/dist/adapters/websocket/index.js +8 -0
  108. package/dist/adapters/websocket/index.js.map +1 -0
  109. package/dist/adapters/websocket/server/index.d.ts +8 -0
  110. package/dist/adapters/websocket/server/index.d.ts.map +1 -0
  111. package/dist/adapters/websocket/server/index.js +8 -0
  112. package/dist/adapters/websocket/server/index.js.map +1 -0
  113. package/dist/adapters/websocket/server/transport.d.ts +112 -0
  114. package/dist/adapters/websocket/server/transport.d.ts.map +1 -0
  115. package/dist/adapters/websocket/server/transport.js +619 -0
  116. package/dist/adapters/websocket/server/transport.js.map +1 -0
  117. package/dist/adapters/websocket/server/types.d.ts +140 -0
  118. package/dist/adapters/websocket/server/types.d.ts.map +1 -0
  119. package/dist/adapters/websocket/server/types.js +7 -0
  120. package/dist/adapters/websocket/server/types.js.map +1 -0
  121. package/dist/browser.d.ts +51 -0
  122. package/dist/browser.d.ts.map +1 -0
  123. package/dist/browser.js +89 -0
  124. package/dist/browser.js.map +1 -0
  125. package/dist/client/batch-executor.d.ts +160 -0
  126. package/dist/client/batch-executor.d.ts.map +1 -0
  127. package/dist/client/batch-executor.js +397 -0
  128. package/dist/client/batch-executor.js.map +1 -0
  129. package/dist/client/call-types.d.ts +271 -0
  130. package/dist/client/call-types.d.ts.map +1 -0
  131. package/dist/client/call-types.js +208 -0
  132. package/dist/client/call-types.js.map +1 -0
  133. package/dist/client/client.d.ts +525 -0
  134. package/dist/client/client.d.ts.map +1 -0
  135. package/dist/client/client.js +1011 -0
  136. package/dist/client/client.js.map +1 -0
  137. package/dist/client/consumption.d.ts +191 -0
  138. package/dist/client/consumption.d.ts.map +1 -0
  139. package/dist/client/consumption.js +98 -0
  140. package/dist/client/consumption.js.map +1 -0
  141. package/dist/client/context.d.ts +116 -0
  142. package/dist/client/context.d.ts.map +1 -0
  143. package/dist/client/context.js +111 -0
  144. package/dist/client/context.js.map +1 -0
  145. package/dist/client/errors/codes.d.ts +71 -0
  146. package/dist/client/errors/codes.d.ts.map +1 -0
  147. package/dist/client/errors/codes.js +81 -0
  148. package/dist/client/errors/codes.js.map +1 -0
  149. package/dist/client/errors/factory.d.ts +102 -0
  150. package/dist/client/errors/factory.d.ts.map +1 -0
  151. package/dist/client/errors/factory.js +210 -0
  152. package/dist/client/errors/factory.js.map +1 -0
  153. package/dist/client/errors/http-errors.d.ts +47 -0
  154. package/dist/client/errors/http-errors.d.ts.map +1 -0
  155. package/dist/client/errors/http-errors.js +548 -0
  156. package/dist/client/errors/http-errors.js.map +1 -0
  157. package/dist/client/errors/http-status.d.ts +73 -0
  158. package/dist/client/errors/http-status.d.ts.map +1 -0
  159. package/dist/client/errors/http-status.js +79 -0
  160. package/dist/client/errors/http-status.js.map +1 -0
  161. package/dist/client/errors/index.d.ts +36 -0
  162. package/dist/client/errors/index.d.ts.map +1 -0
  163. package/dist/client/errors/index.js +40 -0
  164. package/dist/client/errors/index.js.map +1 -0
  165. package/dist/client/errors/registry.d.ts +38 -0
  166. package/dist/client/errors/registry.d.ts.map +1 -0
  167. package/dist/client/errors/registry.js +535 -0
  168. package/dist/client/errors/registry.js.map +1 -0
  169. package/dist/client/errors/types.d.ts +112 -0
  170. package/dist/client/errors/types.d.ts.map +1 -0
  171. package/dist/client/errors/types.js +45 -0
  172. package/dist/client/errors/types.js.map +1 -0
  173. package/dist/client/index.d.ts +44 -0
  174. package/dist/client/index.d.ts.map +1 -0
  175. package/dist/client/index.js +36 -0
  176. package/dist/client/index.js.map +1 -0
  177. package/dist/client/middleware/auth.d.ts +90 -0
  178. package/dist/client/middleware/auth.d.ts.map +1 -0
  179. package/dist/client/middleware/auth.js +98 -0
  180. package/dist/client/middleware/auth.js.map +1 -0
  181. package/dist/client/middleware/batching.d.ts +102 -0
  182. package/dist/client/middleware/batching.d.ts.map +1 -0
  183. package/dist/client/middleware/batching.js +245 -0
  184. package/dist/client/middleware/batching.js.map +1 -0
  185. package/dist/client/middleware/cache.d.ts +124 -0
  186. package/dist/client/middleware/cache.d.ts.map +1 -0
  187. package/dist/client/middleware/cache.js +208 -0
  188. package/dist/client/middleware/cache.js.map +1 -0
  189. package/dist/client/middleware/circuit-breaker.d.ts +113 -0
  190. package/dist/client/middleware/circuit-breaker.d.ts.map +1 -0
  191. package/dist/client/middleware/circuit-breaker.js +236 -0
  192. package/dist/client/middleware/circuit-breaker.js.map +1 -0
  193. package/dist/client/middleware/contexts.d.ts +199 -0
  194. package/dist/client/middleware/contexts.d.ts.map +1 -0
  195. package/dist/client/middleware/contexts.js +74 -0
  196. package/dist/client/middleware/contexts.js.map +1 -0
  197. package/dist/client/middleware/items.d.ts +37 -0
  198. package/dist/client/middleware/items.d.ts.map +1 -0
  199. package/dist/client/middleware/items.js +100 -0
  200. package/dist/client/middleware/items.js.map +1 -0
  201. package/dist/client/middleware/lru.d.ts +32 -0
  202. package/dist/client/middleware/lru.d.ts.map +1 -0
  203. package/dist/client/middleware/lru.js +62 -0
  204. package/dist/client/middleware/lru.js.map +1 -0
  205. package/dist/client/middleware/pagination.d.ts +114 -0
  206. package/dist/client/middleware/pagination.d.ts.map +1 -0
  207. package/dist/client/middleware/pagination.js +148 -0
  208. package/dist/client/middleware/pagination.js.map +1 -0
  209. package/dist/client/middleware/rate-limit.d.ts +105 -0
  210. package/dist/client/middleware/rate-limit.d.ts.map +1 -0
  211. package/dist/client/middleware/rate-limit.js +222 -0
  212. package/dist/client/middleware/rate-limit.js.map +1 -0
  213. package/dist/client/middleware/retry.d.ts +100 -0
  214. package/dist/client/middleware/retry.d.ts.map +1 -0
  215. package/dist/client/middleware/retry.js +150 -0
  216. package/dist/client/middleware/retry.js.map +1 -0
  217. package/dist/client/middleware/timeout.d.ts +91 -0
  218. package/dist/client/middleware/timeout.d.ts.map +1 -0
  219. package/dist/client/middleware/timeout.js +253 -0
  220. package/dist/client/middleware/timeout.js.map +1 -0
  221. package/dist/client/middleware/tracing.d.ts +118 -0
  222. package/dist/client/middleware/tracing.d.ts.map +1 -0
  223. package/dist/client/middleware/tracing.js +152 -0
  224. package/dist/client/middleware/tracing.js.map +1 -0
  225. package/dist/client/route-resolver.d.ts +181 -0
  226. package/dist/client/route-resolver.d.ts.map +1 -0
  227. package/dist/client/route-resolver.js +300 -0
  228. package/dist/client/route-resolver.js.map +1 -0
  229. package/dist/client/typed-method.d.ts +29 -0
  230. package/dist/client/typed-method.d.ts.map +1 -0
  231. package/dist/client/typed-method.js +36 -0
  232. package/dist/client/typed-method.js.map +1 -0
  233. package/dist/client/typed.d.ts +102 -0
  234. package/dist/client/typed.d.ts.map +1 -0
  235. package/dist/client/typed.js +52 -0
  236. package/dist/client/typed.js.map +1 -0
  237. package/dist/client/types.d.ts +305 -0
  238. package/dist/client/types.d.ts.map +1 -0
  239. package/dist/client/types.js +26 -0
  240. package/dist/client/types.js.map +1 -0
  241. package/dist/client/validation/index.d.ts +34 -0
  242. package/dist/client/validation/index.d.ts.map +1 -0
  243. package/dist/client/validation/index.js +36 -0
  244. package/dist/client/validation/index.js.map +1 -0
  245. package/dist/client/validation/middleware.d.ts +82 -0
  246. package/dist/client/validation/middleware.d.ts.map +1 -0
  247. package/dist/client/validation/middleware.js +138 -0
  248. package/dist/client/validation/middleware.js.map +1 -0
  249. package/dist/client/validation/types.d.ts +118 -0
  250. package/dist/client/validation/types.d.ts.map +1 -0
  251. package/dist/client/validation/types.js +59 -0
  252. package/dist/client/validation/types.js.map +1 -0
  253. package/dist/collections/async/async-queue.d.ts +144 -0
  254. package/dist/collections/async/async-queue.d.ts.map +1 -0
  255. package/dist/collections/async/async-queue.js +347 -0
  256. package/dist/collections/async/async-queue.js.map +1 -0
  257. package/dist/collections/async/channels.d.ts +188 -0
  258. package/dist/collections/async/channels.d.ts.map +1 -0
  259. package/dist/collections/async/channels.js +312 -0
  260. package/dist/collections/async/channels.js.map +1 -0
  261. package/dist/collections/behaviors/bounded.d.ts +79 -0
  262. package/dist/collections/behaviors/bounded.d.ts.map +1 -0
  263. package/dist/collections/behaviors/bounded.js +384 -0
  264. package/dist/collections/behaviors/bounded.js.map +1 -0
  265. package/dist/collections/behaviors/evented.d.ts +154 -0
  266. package/dist/collections/behaviors/evented.d.ts.map +1 -0
  267. package/dist/collections/behaviors/evented.js +299 -0
  268. package/dist/collections/behaviors/evented.js.map +1 -0
  269. package/dist/collections/behaviors/lru.d.ts +84 -0
  270. package/dist/collections/behaviors/lru.d.ts.map +1 -0
  271. package/dist/collections/behaviors/lru.js +330 -0
  272. package/dist/collections/behaviors/lru.js.map +1 -0
  273. package/dist/collections/behaviors/readonly.d.ts +73 -0
  274. package/dist/collections/behaviors/readonly.d.ts.map +1 -0
  275. package/dist/collections/behaviors/readonly.js +158 -0
  276. package/dist/collections/behaviors/readonly.js.map +1 -0
  277. package/dist/collections/behaviors/safe.d.ts +163 -0
  278. package/dist/collections/behaviors/safe.d.ts.map +1 -0
  279. package/dist/collections/behaviors/safe.js +172 -0
  280. package/dist/collections/behaviors/safe.js.map +1 -0
  281. package/dist/collections/behaviors/synchronized.d.ts +88 -0
  282. package/dist/collections/behaviors/synchronized.d.ts.map +1 -0
  283. package/dist/collections/behaviors/synchronized.js +294 -0
  284. package/dist/collections/behaviors/synchronized.js.map +1 -0
  285. package/dist/collections/behaviors/ttl.d.ts +118 -0
  286. package/dist/collections/behaviors/ttl.d.ts.map +1 -0
  287. package/dist/collections/behaviors/ttl.js +338 -0
  288. package/dist/collections/behaviors/ttl.js.map +1 -0
  289. package/dist/collections/core/effects.d.ts +176 -0
  290. package/dist/collections/core/effects.d.ts.map +1 -0
  291. package/dist/collections/core/effects.js +180 -0
  292. package/dist/collections/core/effects.js.map +1 -0
  293. package/dist/collections/core/events.d.ts +192 -0
  294. package/dist/collections/core/events.d.ts.map +1 -0
  295. package/dist/collections/core/events.js +291 -0
  296. package/dist/collections/core/events.js.map +1 -0
  297. package/dist/collections/core/middleware.d.ts +231 -0
  298. package/dist/collections/core/middleware.d.ts.map +1 -0
  299. package/dist/collections/core/middleware.js +161 -0
  300. package/dist/collections/core/middleware.js.map +1 -0
  301. package/dist/collections/core/policies.d.ts +220 -0
  302. package/dist/collections/core/policies.d.ts.map +1 -0
  303. package/dist/collections/core/policies.js +48 -0
  304. package/dist/collections/core/policies.js.map +1 -0
  305. package/dist/collections/core/traits.d.ts +142 -0
  306. package/dist/collections/core/traits.d.ts.map +1 -0
  307. package/dist/collections/core/traits.js +8 -0
  308. package/dist/collections/core/traits.js.map +1 -0
  309. package/dist/collections/examples.d.ts +13 -0
  310. package/dist/collections/examples.d.ts.map +1 -0
  311. package/dist/collections/examples.js +302 -0
  312. package/dist/collections/examples.js.map +1 -0
  313. package/dist/collections/fx/collectors.d.ts +190 -0
  314. package/dist/collections/fx/collectors.d.ts.map +1 -0
  315. package/dist/collections/fx/collectors.js +369 -0
  316. package/dist/collections/fx/collectors.js.map +1 -0
  317. package/dist/collections/fx/iter.d.ts +166 -0
  318. package/dist/collections/fx/iter.d.ts.map +1 -0
  319. package/dist/collections/fx/iter.js +421 -0
  320. package/dist/collections/fx/iter.js.map +1 -0
  321. package/dist/collections/impl/array-deque.d.ts +107 -0
  322. package/dist/collections/impl/array-deque.d.ts.map +1 -0
  323. package/dist/collections/impl/array-deque.js +381 -0
  324. package/dist/collections/impl/array-deque.js.map +1 -0
  325. package/dist/collections/impl/array-list.d.ts +101 -0
  326. package/dist/collections/impl/array-list.d.ts.map +1 -0
  327. package/dist/collections/impl/array-list.js +387 -0
  328. package/dist/collections/impl/array-list.js.map +1 -0
  329. package/dist/collections/impl/hash-map.d.ts +141 -0
  330. package/dist/collections/impl/hash-map.d.ts.map +1 -0
  331. package/dist/collections/impl/hash-map.js +450 -0
  332. package/dist/collections/impl/hash-map.js.map +1 -0
  333. package/dist/collections/impl/hash-set.d.ts +125 -0
  334. package/dist/collections/impl/hash-set.d.ts.map +1 -0
  335. package/dist/collections/impl/hash-set.js +264 -0
  336. package/dist/collections/impl/hash-set.js.map +1 -0
  337. package/dist/collections/impl/linked-hash-map.d.ts +141 -0
  338. package/dist/collections/impl/linked-hash-map.d.ts.map +1 -0
  339. package/dist/collections/impl/linked-hash-map.js +472 -0
  340. package/dist/collections/impl/linked-hash-map.js.map +1 -0
  341. package/dist/collections/impl/linked-list.d.ts +109 -0
  342. package/dist/collections/impl/linked-list.d.ts.map +1 -0
  343. package/dist/collections/impl/linked-list.js +491 -0
  344. package/dist/collections/impl/linked-list.js.map +1 -0
  345. package/dist/collections/impl/priority-queue.d.ts +134 -0
  346. package/dist/collections/impl/priority-queue.d.ts.map +1 -0
  347. package/dist/collections/impl/priority-queue.js +336 -0
  348. package/dist/collections/impl/priority-queue.js.map +1 -0
  349. package/dist/collections/impl/tree-map.d.ts +146 -0
  350. package/dist/collections/impl/tree-map.d.ts.map +1 -0
  351. package/dist/collections/impl/tree-map.js +781 -0
  352. package/dist/collections/impl/tree-map.js.map +1 -0
  353. package/dist/collections/impl/tree-set.d.ts +112 -0
  354. package/dist/collections/impl/tree-set.d.ts.map +1 -0
  355. package/dist/collections/impl/tree-set.js +374 -0
  356. package/dist/collections/impl/tree-set.js.map +1 -0
  357. package/dist/collections/index.d.ts +105 -0
  358. package/dist/collections/index.d.ts.map +1 -0
  359. package/dist/collections/index.js +135 -0
  360. package/dist/collections/index.js.map +1 -0
  361. package/dist/collections/interfaces/collection.d.ts +119 -0
  362. package/dist/collections/interfaces/collection.d.ts.map +1 -0
  363. package/dist/collections/interfaces/collection.js +8 -0
  364. package/dist/collections/interfaces/collection.js.map +1 -0
  365. package/dist/collections/interfaces/list.d.ts +247 -0
  366. package/dist/collections/interfaces/list.d.ts.map +1 -0
  367. package/dist/collections/interfaces/list.js +8 -0
  368. package/dist/collections/interfaces/list.js.map +1 -0
  369. package/dist/collections/interfaces/map.d.ts +344 -0
  370. package/dist/collections/interfaces/map.d.ts.map +1 -0
  371. package/dist/collections/interfaces/map.js +8 -0
  372. package/dist/collections/interfaces/map.js.map +1 -0
  373. package/dist/collections/interfaces/queue.d.ts +304 -0
  374. package/dist/collections/interfaces/queue.d.ts.map +1 -0
  375. package/dist/collections/interfaces/queue.js +8 -0
  376. package/dist/collections/interfaces/queue.js.map +1 -0
  377. package/dist/collections/interfaces/set.d.ts +137 -0
  378. package/dist/collections/interfaces/set.d.ts.map +1 -0
  379. package/dist/collections/interfaces/set.js +8 -0
  380. package/dist/collections/interfaces/set.js.map +1 -0
  381. package/dist/collections/storage/api.d.ts +109 -0
  382. package/dist/collections/storage/api.d.ts.map +1 -0
  383. package/dist/collections/storage/api.js +182 -0
  384. package/dist/collections/storage/api.js.map +1 -0
  385. package/dist/collections/storage/hybrid.d.ts +164 -0
  386. package/dist/collections/storage/hybrid.d.ts.map +1 -0
  387. package/dist/collections/storage/hybrid.js +416 -0
  388. package/dist/collections/storage/hybrid.js.map +1 -0
  389. package/dist/collections/storage/index.d.ts +16 -0
  390. package/dist/collections/storage/index.d.ts.map +1 -0
  391. package/dist/collections/storage/index.js +13 -0
  392. package/dist/collections/storage/index.js.map +1 -0
  393. package/dist/collections/storage/interface.d.ts +141 -0
  394. package/dist/collections/storage/interface.d.ts.map +1 -0
  395. package/dist/collections/storage/interface.js +23 -0
  396. package/dist/collections/storage/interface.js.map +1 -0
  397. package/dist/collections/storage/memory.d.ts +68 -0
  398. package/dist/collections/storage/memory.d.ts.map +1 -0
  399. package/dist/collections/storage/memory.js +154 -0
  400. package/dist/collections/storage/memory.js.map +1 -0
  401. package/dist/collections/utils/defaults.d.ts +135 -0
  402. package/dist/collections/utils/defaults.d.ts.map +1 -0
  403. package/dist/collections/utils/defaults.js +322 -0
  404. package/dist/collections/utils/defaults.js.map +1 -0
  405. package/dist/collections/utils/factories.d.ts +144 -0
  406. package/dist/collections/utils/factories.d.ts.map +1 -0
  407. package/dist/collections/utils/factories.js +293 -0
  408. package/dist/collections/utils/factories.js.map +1 -0
  409. package/dist/collections/utils/helpers.d.ts +137 -0
  410. package/dist/collections/utils/helpers.d.ts.map +1 -0
  411. package/dist/collections/utils/helpers.js +221 -0
  412. package/dist/collections/utils/helpers.js.map +1 -0
  413. package/dist/collections.d.ts +12 -0
  414. package/dist/collections.d.ts.map +1 -0
  415. package/dist/collections.js +10 -0
  416. package/dist/collections.js.map +1 -0
  417. package/dist/components/define.d.ts +134 -0
  418. package/dist/components/define.d.ts.map +1 -0
  419. package/dist/components/define.js +486 -0
  420. package/dist/components/define.js.map +1 -0
  421. package/dist/components/index.d.ts +39 -0
  422. package/dist/components/index.d.ts.map +1 -0
  423. package/dist/components/index.js +38 -0
  424. package/dist/components/index.js.map +1 -0
  425. package/dist/components/types.d.ts +264 -0
  426. package/dist/components/types.d.ts.map +1 -0
  427. package/dist/components/types.js +46 -0
  428. package/dist/components/types.js.map +1 -0
  429. package/dist/events/bus.d.ts +193 -0
  430. package/dist/events/bus.d.ts.map +1 -0
  431. package/dist/events/bus.js +511 -0
  432. package/dist/events/bus.js.map +1 -0
  433. package/dist/events/index.d.ts +34 -0
  434. package/dist/events/index.d.ts.map +1 -0
  435. package/dist/events/index.js +36 -0
  436. package/dist/events/index.js.map +1 -0
  437. package/dist/events/types.d.ts +242 -0
  438. package/dist/events/types.d.ts.map +1 -0
  439. package/dist/events/types.js +8 -0
  440. package/dist/events/types.js.map +1 -0
  441. package/dist/index.d.ts +17 -0
  442. package/dist/index.d.ts.map +1 -0
  443. package/dist/index.js +17 -0
  444. package/dist/index.js.map +1 -0
  445. package/dist/middleware/compose.d.ts +88 -0
  446. package/dist/middleware/compose.d.ts.map +1 -0
  447. package/dist/middleware/compose.js +108 -0
  448. package/dist/middleware/compose.js.map +1 -0
  449. package/dist/middleware/index.d.ts +12 -0
  450. package/dist/middleware/index.d.ts.map +1 -0
  451. package/dist/middleware/index.js +11 -0
  452. package/dist/middleware/index.js.map +1 -0
  453. package/dist/middleware/types.d.ts +112 -0
  454. package/dist/middleware/types.d.ts.map +1 -0
  455. package/dist/middleware/types.js +14 -0
  456. package/dist/middleware/types.js.map +1 -0
  457. package/dist/procedures/capability.d.ts +111 -0
  458. package/dist/procedures/capability.d.ts.map +1 -0
  459. package/dist/procedures/capability.js +269 -0
  460. package/dist/procedures/capability.js.map +1 -0
  461. package/dist/procedures/cli/announce.d.ts +67 -0
  462. package/dist/procedures/cli/announce.d.ts.map +1 -0
  463. package/dist/procedures/cli/announce.js +392 -0
  464. package/dist/procedures/cli/announce.js.map +1 -0
  465. package/dist/procedures/cli/discover.d.ts +66 -0
  466. package/dist/procedures/cli/discover.d.ts.map +1 -0
  467. package/dist/procedures/cli/discover.js +310 -0
  468. package/dist/procedures/cli/discover.js.map +1 -0
  469. package/dist/procedures/cli/index.d.ts +13 -0
  470. package/dist/procedures/cli/index.d.ts.map +1 -0
  471. package/dist/procedures/cli/index.js +203 -0
  472. package/dist/procedures/cli/index.js.map +1 -0
  473. package/dist/procedures/cli/init.d.ts +17 -0
  474. package/dist/procedures/cli/init.d.ts.map +1 -0
  475. package/dist/procedures/cli/init.js +336 -0
  476. package/dist/procedures/cli/init.js.map +1 -0
  477. package/dist/procedures/collection/index.d.ts +10 -0
  478. package/dist/procedures/collection/index.d.ts.map +1 -0
  479. package/dist/procedures/collection/index.js +10 -0
  480. package/dist/procedures/collection/index.js.map +1 -0
  481. package/dist/procedures/collection/procedures.d.ts +21 -0
  482. package/dist/procedures/collection/procedures.d.ts.map +1 -0
  483. package/dist/procedures/collection/procedures.js +210 -0
  484. package/dist/procedures/collection/procedures.js.map +1 -0
  485. package/dist/procedures/collection/schemas.d.ts +131 -0
  486. package/dist/procedures/collection/schemas.d.ts.map +1 -0
  487. package/dist/procedures/collection/schemas.js +422 -0
  488. package/dist/procedures/collection/schemas.js.map +1 -0
  489. package/dist/procedures/collection/storage.d.ts +53 -0
  490. package/dist/procedures/collection/storage.d.ts.map +1 -0
  491. package/dist/procedures/collection/storage.js +2 -0
  492. package/dist/procedures/collection/storage.js.map +1 -0
  493. package/dist/procedures/core/array.d.ts +276 -0
  494. package/dist/procedures/core/array.d.ts.map +1 -0
  495. package/dist/procedures/core/array.js +639 -0
  496. package/dist/procedures/core/array.js.map +1 -0
  497. package/dist/procedures/core/comparison.d.ts +85 -0
  498. package/dist/procedures/core/comparison.d.ts.map +1 -0
  499. package/dist/procedures/core/comparison.js +158 -0
  500. package/dist/procedures/core/comparison.js.map +1 -0
  501. package/dist/procedures/core/index.d.ts +261 -0
  502. package/dist/procedures/core/index.d.ts.map +1 -0
  503. package/dist/procedures/core/index.js +588 -0
  504. package/dist/procedures/core/index.js.map +1 -0
  505. package/dist/procedures/core/logic.d.ts +144 -0
  506. package/dist/procedures/core/logic.d.ts.map +1 -0
  507. package/dist/procedures/core/logic.js +169 -0
  508. package/dist/procedures/core/logic.js.map +1 -0
  509. package/dist/procedures/core/math.d.ts +139 -0
  510. package/dist/procedures/core/math.d.ts.map +1 -0
  511. package/dist/procedures/core/math.js +275 -0
  512. package/dist/procedures/core/math.js.map +1 -0
  513. package/dist/procedures/core/meta.d.ts +111 -0
  514. package/dist/procedures/core/meta.d.ts.map +1 -0
  515. package/dist/procedures/core/meta.js +244 -0
  516. package/dist/procedures/core/meta.js.map +1 -0
  517. package/dist/procedures/core/object.d.ts +109 -0
  518. package/dist/procedures/core/object.d.ts.map +1 -0
  519. package/dist/procedures/core/object.js +272 -0
  520. package/dist/procedures/core/object.js.map +1 -0
  521. package/dist/procedures/core/operands.d.ts +51 -0
  522. package/dist/procedures/core/operands.d.ts.map +1 -0
  523. package/dist/procedures/core/operands.js +90 -0
  524. package/dist/procedures/core/operands.js.map +1 -0
  525. package/dist/procedures/core/outputs.d.ts +28 -0
  526. package/dist/procedures/core/outputs.d.ts.map +1 -0
  527. package/dist/procedures/core/outputs.js +42 -0
  528. package/dist/procedures/core/outputs.js.map +1 -0
  529. package/dist/procedures/core/results.d.ts +202 -0
  530. package/dist/procedures/core/results.d.ts.map +1 -0
  531. package/dist/procedures/core/results.js +106 -0
  532. package/dist/procedures/core/results.js.map +1 -0
  533. package/dist/procedures/core/schemas.d.ts +48 -0
  534. package/dist/procedures/core/schemas.d.ts.map +1 -0
  535. package/dist/procedures/core/schemas.js +102 -0
  536. package/dist/procedures/core/schemas.js.map +1 -0
  537. package/dist/procedures/core/string.d.ts +138 -0
  538. package/dist/procedures/core/string.d.ts.map +1 -0
  539. package/dist/procedures/core/string.js +270 -0
  540. package/dist/procedures/core/string.js.map +1 -0
  541. package/dist/procedures/core/type.d.ts +101 -0
  542. package/dist/procedures/core/type.d.ts.map +1 -0
  543. package/dist/procedures/core/type.js +210 -0
  544. package/dist/procedures/core/type.js.map +1 -0
  545. package/dist/procedures/define-procedure.d.ts +187 -0
  546. package/dist/procedures/define-procedure.d.ts.map +1 -0
  547. package/dist/procedures/define-procedure.js +357 -0
  548. package/dist/procedures/define-procedure.js.map +1 -0
  549. package/dist/procedures/define.d.ts +228 -0
  550. package/dist/procedures/define.d.ts.map +1 -0
  551. package/dist/procedures/define.js +300 -0
  552. package/dist/procedures/define.js.map +1 -0
  553. package/dist/procedures/discovery.d.ts +57 -0
  554. package/dist/procedures/discovery.d.ts.map +1 -0
  555. package/dist/procedures/discovery.js +68 -0
  556. package/dist/procedures/discovery.js.map +1 -0
  557. package/dist/procedures/effects.d.ts +15 -0
  558. package/dist/procedures/effects.d.ts.map +1 -0
  559. package/dist/procedures/effects.js +18 -0
  560. package/dist/procedures/effects.js.map +1 -0
  561. package/dist/procedures/index.d.ts +27 -0
  562. package/dist/procedures/index.d.ts.map +1 -0
  563. package/dist/procedures/index.js +54 -0
  564. package/dist/procedures/index.js.map +1 -0
  565. package/dist/procedures/interceptors.d.ts +82 -0
  566. package/dist/procedures/interceptors.d.ts.map +1 -0
  567. package/dist/procedures/interceptors.js +194 -0
  568. package/dist/procedures/interceptors.js.map +1 -0
  569. package/dist/procedures/invoke.d.ts +155 -0
  570. package/dist/procedures/invoke.d.ts.map +1 -0
  571. package/dist/procedures/invoke.js +343 -0
  572. package/dist/procedures/invoke.js.map +1 -0
  573. package/dist/procedures/module.d.ts +54 -0
  574. package/dist/procedures/module.d.ts.map +1 -0
  575. package/dist/procedures/module.js +103 -0
  576. package/dist/procedures/module.js.map +1 -0
  577. package/dist/procedures/policy.d.ts +70 -0
  578. package/dist/procedures/policy.d.ts.map +1 -0
  579. package/dist/procedures/policy.js +138 -0
  580. package/dist/procedures/policy.js.map +1 -0
  581. package/dist/procedures/ref.d.ts +606 -0
  582. package/dist/procedures/ref.d.ts.map +1 -0
  583. package/dist/procedures/ref.js +895 -0
  584. package/dist/procedures/ref.js.map +1 -0
  585. package/dist/procedures/registry.d.ts +208 -0
  586. package/dist/procedures/registry.d.ts.map +1 -0
  587. package/dist/procedures/registry.js +402 -0
  588. package/dist/procedures/registry.js.map +1 -0
  589. package/dist/procedures/schema.d.ts +126 -0
  590. package/dist/procedures/schema.d.ts.map +1 -0
  591. package/dist/procedures/schema.js +108 -0
  592. package/dist/procedures/schema.js.map +1 -0
  593. package/dist/procedures/storage/adapter.d.ts +148 -0
  594. package/dist/procedures/storage/adapter.d.ts.map +1 -0
  595. package/dist/procedures/storage/adapter.js +214 -0
  596. package/dist/procedures/storage/adapter.js.map +1 -0
  597. package/dist/procedures/storage/api.d.ts +125 -0
  598. package/dist/procedures/storage/api.d.ts.map +1 -0
  599. package/dist/procedures/storage/api.js +220 -0
  600. package/dist/procedures/storage/api.js.map +1 -0
  601. package/dist/procedures/storage/factory.d.ts +134 -0
  602. package/dist/procedures/storage/factory.d.ts.map +1 -0
  603. package/dist/procedures/storage/factory.js +166 -0
  604. package/dist/procedures/storage/factory.js.map +1 -0
  605. package/dist/procedures/storage/hybrid.d.ts +193 -0
  606. package/dist/procedures/storage/hybrid.d.ts.map +1 -0
  607. package/dist/procedures/storage/hybrid.js +519 -0
  608. package/dist/procedures/storage/hybrid.js.map +1 -0
  609. package/dist/procedures/storage/index.d.ts +17 -0
  610. package/dist/procedures/storage/index.d.ts.map +1 -0
  611. package/dist/procedures/storage/index.js +17 -0
  612. package/dist/procedures/storage/index.js.map +1 -0
  613. package/dist/procedures/storage/procedures.d.ts +39 -0
  614. package/dist/procedures/storage/procedures.d.ts.map +1 -0
  615. package/dist/procedures/storage/procedures.js +261 -0
  616. package/dist/procedures/storage/procedures.js.map +1 -0
  617. package/dist/procedures/storage/serialization.d.ts +123 -0
  618. package/dist/procedures/storage/serialization.d.ts.map +1 -0
  619. package/dist/procedures/storage/serialization.js +216 -0
  620. package/dist/procedures/storage/serialization.js.map +1 -0
  621. package/dist/procedures/storage/synced-registry.d.ts +246 -0
  622. package/dist/procedures/storage/synced-registry.d.ts.map +1 -0
  623. package/dist/procedures/storage/synced-registry.js +575 -0
  624. package/dist/procedures/storage/synced-registry.js.map +1 -0
  625. package/dist/procedures/storage/types.d.ts +130 -0
  626. package/dist/procedures/storage/types.d.ts.map +1 -0
  627. package/dist/procedures/storage/types.js +8 -0
  628. package/dist/procedures/storage/types.js.map +1 -0
  629. package/dist/procedures/types.d.ts +468 -0
  630. package/dist/procedures/types.d.ts.map +1 -0
  631. package/dist/procedures/types.js +23 -0
  632. package/dist/procedures/types.js.map +1 -0
  633. package/dist/register.d.ts +8 -0
  634. package/dist/register.d.ts.map +1 -0
  635. package/dist/register.js +9 -0
  636. package/dist/register.js.map +1 -0
  637. package/dist/server/browser-guard.d.ts +69 -0
  638. package/dist/server/browser-guard.d.ts.map +1 -0
  639. package/dist/server/browser-guard.js +103 -0
  640. package/dist/server/browser-guard.js.map +1 -0
  641. package/dist/server/host-policy.d.ts +81 -0
  642. package/dist/server/host-policy.d.ts.map +1 -0
  643. package/dist/server/host-policy.js +104 -0
  644. package/dist/server/host-policy.js.map +1 -0
  645. package/dist/server/index.d.ts +46 -0
  646. package/dist/server/index.d.ts.map +1 -0
  647. package/dist/server/index.js +42 -0
  648. package/dist/server/index.js.map +1 -0
  649. package/dist/server/method.d.ts +24 -0
  650. package/dist/server/method.d.ts.map +1 -0
  651. package/dist/server/method.js +29 -0
  652. package/dist/server/method.js.map +1 -0
  653. package/dist/server/procedure-server.d.ts +226 -0
  654. package/dist/server/procedure-server.d.ts.map +1 -0
  655. package/dist/server/procedure-server.js +348 -0
  656. package/dist/server/procedure-server.js.map +1 -0
  657. package/dist/server/server.d.ts +161 -0
  658. package/dist/server/server.d.ts.map +1 -0
  659. package/dist/server/server.js +279 -0
  660. package/dist/server/server.js.map +1 -0
  661. package/dist/server/types.d.ts +106 -0
  662. package/dist/server/types.d.ts.map +1 -0
  663. package/dist/server/types.js +29 -0
  664. package/dist/server/types.js.map +1 -0
  665. package/package.json +117 -3
  666. package/src/adapters/http/client/index.ts +51 -0
  667. package/src/adapters/http/client/transport.ts +338 -0
  668. package/src/adapters/http/client/types.ts +33 -0
  669. package/src/adapters/http/index.ts +7 -0
  670. package/src/adapters/http/server/index.ts +14 -0
  671. package/src/adapters/http/server/strategies.ts +105 -0
  672. package/src/adapters/http/server/transport.ts +623 -0
  673. package/src/adapters/http/server/types.ts +81 -0
  674. package/src/adapters/http/shared/constants.ts +108 -0
  675. package/src/adapters/http/shared/errors.ts +199 -0
  676. package/src/adapters/http/shared/headers.ts +291 -0
  677. package/src/adapters/http/shared/index.ts +21 -0
  678. package/src/adapters/http/shared/status-codes.ts +212 -0
  679. package/src/adapters/http/shared/strategies.ts +255 -0
  680. package/src/adapters/local/client/index.ts +11 -0
  681. package/src/adapters/local/client/transport.ts +188 -0
  682. package/src/adapters/local/client/types.ts +50 -0
  683. package/src/adapters/metadata.ts +17 -0
  684. package/src/adapters/mock/client/builder.ts +64 -0
  685. package/src/adapters/mock/client/index.ts +19 -0
  686. package/src/adapters/mock/client/transport.ts +352 -0
  687. package/src/adapters/mock/client/types.ts +99 -0
  688. package/src/adapters/websocket/client/index.ts +18 -0
  689. package/src/adapters/websocket/client/transport.ts +733 -0
  690. package/src/adapters/websocket/client/types.ts +235 -0
  691. package/src/adapters/websocket/index.ts +24 -0
  692. package/src/adapters/websocket/server/index.ts +18 -0
  693. package/src/adapters/websocket/server/transport.ts +705 -0
  694. package/src/adapters/websocket/server/types.ts +169 -0
  695. package/src/browser.ts +401 -0
  696. package/src/client/batch-executor.ts +514 -0
  697. package/src/client/call-types.ts +491 -0
  698. package/src/client/client.ts +1229 -0
  699. package/src/client/consumption.ts +288 -0
  700. package/src/client/context.ts +228 -0
  701. package/src/client/errors/README.md +279 -0
  702. package/src/client/errors/codes.ts +88 -0
  703. package/src/client/errors/factory.ts +263 -0
  704. package/src/client/errors/http-errors.ts +601 -0
  705. package/src/client/errors/http-status.ts +82 -0
  706. package/src/client/errors/index.ts +72 -0
  707. package/src/client/errors/registry.ts +595 -0
  708. package/src/client/errors/types.ts +139 -0
  709. package/src/client/index.ts +124 -0
  710. package/src/client/middleware/auth.ts +132 -0
  711. package/src/client/middleware/cache.ts +316 -0
  712. package/src/client/middleware/circuit-breaker.ts +339 -0
  713. package/src/client/middleware/contexts.ts +319 -0
  714. package/src/client/middleware/items.ts +114 -0
  715. package/src/client/middleware/lru.ts +66 -0
  716. package/src/client/middleware/pagination.ts +213 -0
  717. package/src/client/middleware/rate-limit.ts +315 -0
  718. package/src/client/middleware/retry.ts +236 -0
  719. package/src/client/middleware/timeout.ts +308 -0
  720. package/src/client/middleware/tracing.ts +191 -0
  721. package/src/client/route-resolver.ts +407 -0
  722. package/src/client/typed-method.ts +65 -0
  723. package/src/client/typed.ts +140 -0
  724. package/src/client/types.ts +372 -0
  725. package/src/client/validation/index.ts +56 -0
  726. package/src/client/validation/middleware.ts +254 -0
  727. package/src/client/validation/types.ts +162 -0
  728. package/src/events/bus.ts +594 -0
  729. package/src/events/index.ts +67 -0
  730. package/src/events/types.ts +263 -0
  731. package/src/index.ts +33 -0
  732. package/src/middleware/compose.ts +159 -0
  733. package/src/middleware/index.ts +28 -0
  734. package/src/middleware/types.ts +166 -0
  735. package/src/procedures/capability.ts +333 -0
  736. package/src/procedures/cli/announce.ts +470 -0
  737. package/src/procedures/cli/discover.ts +390 -0
  738. package/src/procedures/cli/index.ts +231 -0
  739. package/src/procedures/cli/init.ts +370 -0
  740. package/src/procedures/collection/index.ts +51 -0
  741. package/src/procedures/collection/procedures.ts +257 -0
  742. package/src/procedures/collection/schemas.ts +550 -0
  743. package/src/procedures/collection/storage.ts +53 -0
  744. package/src/procedures/core/array.ts +1026 -0
  745. package/src/procedures/core/comparison.ts +265 -0
  746. package/src/procedures/core/index.ts +898 -0
  747. package/src/procedures/core/logic.ts +225 -0
  748. package/src/procedures/core/math.ts +471 -0
  749. package/src/procedures/core/meta.ts +389 -0
  750. package/src/procedures/core/object.ts +429 -0
  751. package/src/procedures/core/operands.ts +119 -0
  752. package/src/procedures/core/outputs.ts +48 -0
  753. package/src/procedures/core/results.ts +296 -0
  754. package/src/procedures/core/schemas.ts +123 -0
  755. package/src/procedures/core/string.ts +460 -0
  756. package/src/procedures/core/type.ts +346 -0
  757. package/src/procedures/define-procedure.ts +532 -0
  758. package/src/procedures/define.ts +387 -0
  759. package/src/procedures/discovery.ts +76 -0
  760. package/src/procedures/effects.ts +24 -0
  761. package/src/procedures/index.ts +239 -0
  762. package/src/procedures/interceptors.ts +273 -0
  763. package/src/procedures/invoke.ts +506 -0
  764. package/src/procedures/module.ts +117 -0
  765. package/src/procedures/policy.ts +171 -0
  766. package/src/procedures/ref.ts +1305 -0
  767. package/src/procedures/registry.ts +473 -0
  768. package/src/procedures/schema.ts +225 -0
  769. package/src/procedures/types.ts +596 -0
  770. package/src/register.ts +10 -0
  771. package/src/server/browser-guard.ts +147 -0
  772. package/src/server/host-policy.ts +163 -0
  773. package/src/server/index.ts +70 -0
  774. package/src/server/method.ts +33 -0
  775. package/src/server/procedure-server.ts +459 -0
  776. package/src/server/server.ts +364 -0
  777. package/src/server/types.ts +147 -0
@@ -0,0 +1,705 @@
1
+ /**
2
+ * WebSocket Server Transport Implementation
3
+ *
4
+ * Adapts WebSocket connections to unified RPC format.
5
+ * Supports bidirectional streaming and persistent connections.
6
+ */
7
+
8
+ import type { IncomingMessage } from "http";
9
+ import { WebSocketServer, WebSocket } from "ws";
10
+ import type { ServerTransport, ServerRequest, ServerResponse } from "../../../server/types.js";
11
+ import type { Server } from "../../../server/server.js";
12
+ import type {
13
+ WebSocketServerTransportOptions,
14
+ WebSocketMessage,
15
+ TrackedConnection,
16
+ ConnectionEventHandler,
17
+ } from "./types.js";
18
+ import { withoutInternalKeys } from "../../metadata.js";
19
+ import { checkBrowserRequest, type BrowserGuardOptions } from "../../../server/browser-guard.js";
20
+
21
+ /**
22
+ * WebSocket server transport adapter.
23
+ *
24
+ * Provides persistent, bidirectional RPC over WebSocket.
25
+ * Perfect for real-time updates and streaming responses.
26
+ *
27
+ * @example
28
+ * ```typescript
29
+ * import { createServer } from "http";
30
+ * const httpServer = createServer();
31
+ *
32
+ * const server = new Server();
33
+ * const wsTransport = new WebSocketServerTransport(server, {
34
+ * server: httpServer,
35
+ * path: "/ws",
36
+ * authenticate: async (req) => {
37
+ * // Verify token from query string or headers
38
+ * return true;
39
+ * }
40
+ * });
41
+ *
42
+ * await wsTransport.start();
43
+ * httpServer.listen(3000);
44
+ * ```
45
+ */
46
+ /**
47
+ * The credit of one stream: the number of items the client can take now. The client sends
48
+ * more credit as its reader takes items (deep dive TRN-3).
49
+ */
50
+ class StreamCredit {
51
+ private wake: (() => void) | undefined;
52
+
53
+ constructor(private credit: number) {}
54
+
55
+ grant(n: number): void {
56
+ this.credit += n;
57
+ const wake = this.wake;
58
+ this.wake = undefined;
59
+ wake?.();
60
+ }
61
+
62
+ /** Take one item of credit. Returns false when the signal aborted the wait. */
63
+ async take(signal: AbortSignal): Promise<boolean> {
64
+ while (this.credit <= 0) {
65
+ if (signal.aborted) return false;
66
+ await new Promise<void>((resolve) => {
67
+ const onAbort = (): void => resolve();
68
+ signal.addEventListener("abort", onAbort, { once: true });
69
+ this.wake = () => {
70
+ signal.removeEventListener("abort", onAbort);
71
+ resolve();
72
+ };
73
+ });
74
+ }
75
+ if (signal.aborted) return false;
76
+ this.credit--;
77
+ return true;
78
+ }
79
+ }
80
+
81
+ /** The error of a failed stream or handler: its code (a string) and its retryable flag. */
82
+ function errorStatus(error: unknown): { type: "error"; code: string; message: string; retryable: boolean } {
83
+ const code = (error as { code?: unknown } | undefined)?.code;
84
+ const retryable = (error as { retryable?: unknown } | undefined)?.retryable;
85
+ return {
86
+ type: "error",
87
+ code: typeof code === "string" ? code : "HANDLER_ERROR",
88
+ message: error instanceof Error ? error.message : String(error),
89
+ // Before, every stream error lost its retryable flag (deep dive TRN-7)
90
+ retryable: typeof retryable === "boolean" ? retryable : false,
91
+ };
92
+ }
93
+
94
+ interface PendingRequest {
95
+ id: string;
96
+ /** The connection the request was sent to: only it may answer, and its close ends the request */
97
+ connectionId: string;
98
+ resolve: (value: unknown) => void;
99
+ reject: (error: Error) => void;
100
+ timeout: NodeJS.Timeout;
101
+ }
102
+
103
+ export class WebSocketServerTransport implements ServerTransport {
104
+ readonly name = "websocket";
105
+
106
+ private wss: WebSocketServer | null = null;
107
+ private options: Required<
108
+ Omit<WebSocketServerTransportOptions, "authenticate" | "onConnection" | "allowedOrigins" | "allowedHosts">
109
+ > & {
110
+ authenticate?: WebSocketServerTransportOptions["authenticate"];
111
+ onConnection?: WebSocketServerTransportOptions["onConnection"];
112
+ };
113
+ private server: Server;
114
+ private connections: Set<WebSocket> = new Set();
115
+
116
+ // Tracked connections with IDs for bidirectional RPC
117
+ private trackedConnections = new Map<string, TrackedConnection>();
118
+ private pendingRequests = new Map<string, PendingRequest>();
119
+ private connectionCounter = 0;
120
+
121
+ // The requests in progress, by "connectionId:requestId": a cancel message or a closed
122
+ // connection aborts their signal, so a stream stops and its handler gets return()
123
+ private inflight = new Map<string, AbortController>();
124
+
125
+ // The flow control of the streams in progress, by the same key
126
+ private credits = new Map<string, StreamCredit>();
127
+
128
+ /** The browser checks of each connection (see `server/browser-guard.ts`) */
129
+ private readonly guard: BrowserGuardOptions;
130
+
131
+ // Connection lifecycle event handlers
132
+ private connectHandlers: ConnectionEventHandler[] = [];
133
+ private disconnectHandlers: ConnectionEventHandler[] = [];
134
+
135
+ constructor(server: Server, options: WebSocketServerTransportOptions) {
136
+ this.server = server;
137
+ this.options = {
138
+ server: options.server,
139
+ path: options.path ?? "/ws",
140
+ authenticate: options.authenticate,
141
+ onConnection: options.onConnection,
142
+ perMessageDeflate: options.perMessageDeflate ?? false,
143
+ maxPayload: options.maxPayload ?? 1024 * 1024, // 1MB default
144
+ clientTracking: options.clientTracking ?? true,
145
+ highWaterMark: options.highWaterMark ?? 1024 * 1024,
146
+ };
147
+ this.guard = { allowedOrigins: options.allowedOrigins, allowedHosts: options.allowedHosts };
148
+ }
149
+
150
+ async start(): Promise<void> {
151
+ // Create WebSocket server
152
+ this.wss = new WebSocketServer({
153
+ server: this.options.server,
154
+ path: this.options.path,
155
+ perMessageDeflate: this.options.perMessageDeflate,
156
+ maxPayload: this.options.maxPayload,
157
+ clientTracking: this.options.clientTracking,
158
+ // The browser checks run for every connection: before, a connection was checked only
159
+ // when the host gave an authenticate handler, so any web page could open one and call
160
+ // procedures (cross-site WebSocket hijacking)
161
+ verifyClient: async (
162
+ { req }: { req: IncomingMessage },
163
+ callback: (result: boolean, code?: number, message?: string) => void
164
+ ) => {
165
+ const guard = checkBrowserRequest(req, this.guard);
166
+ if (!guard.ok) {
167
+ callback(false, guard.status, guard.message);
168
+ return;
169
+ }
170
+ if (!this.options.authenticate) {
171
+ callback(true);
172
+ return;
173
+ }
174
+ try {
175
+ callback(await this.options.authenticate(req));
176
+ } catch (error) {
177
+ console.error("[WebSocket] Authentication error:", error);
178
+ callback(false);
179
+ }
180
+ },
181
+ });
182
+
183
+ // Handle connections
184
+ this.wss.on("connection", (ws: WebSocket, req: IncomingMessage) => {
185
+ this.handleConnection(ws, req);
186
+ });
187
+
188
+ console.log(`[${this.name}] WebSocket server listening on ${this.options.path}`);
189
+ }
190
+
191
+ async stop(): Promise<void> {
192
+ if (this.wss) {
193
+ // Stop the requests in progress, so their handlers end (deep dive TRN-15)
194
+ for (const controller of this.inflight.values()) controller.abort();
195
+ this.inflight.clear();
196
+ for (const connectionId of this.trackedConnections.keys()) {
197
+ this.rejectPendingFor(connectionId, "Server stopped");
198
+ }
199
+
200
+ // Close all connections
201
+ for (const ws of this.connections) {
202
+ ws.close();
203
+ }
204
+ this.connections.clear();
205
+
206
+ // Close server
207
+ return new Promise((resolve, reject) => {
208
+ this.wss!.close((err?: Error) => {
209
+ if (err) {
210
+ reject(err);
211
+ } else {
212
+ console.log(`[${this.name}] WebSocket server stopped`);
213
+ this.wss = null;
214
+ resolve();
215
+ }
216
+ });
217
+ });
218
+ }
219
+ }
220
+
221
+ isRunning(): boolean {
222
+ return this.wss !== null;
223
+ }
224
+
225
+ /**
226
+ * Handle new WebSocket connection.
227
+ */
228
+ private handleConnection(ws: WebSocket, req: IncomingMessage): void {
229
+ // Track connection (legacy)
230
+ this.connections.add(ws);
231
+
232
+ // Create tracked connection with ID
233
+ const connectionId = `conn_${++this.connectionCounter}_${Date.now()}`;
234
+ const trackedConnection: TrackedConnection = {
235
+ id: connectionId,
236
+ socket: ws,
237
+ connectedAt: new Date(),
238
+ metadata: {
239
+ remoteAddress: req.socket.remoteAddress,
240
+ headers: req.headers,
241
+ },
242
+ };
243
+ this.trackedConnections.set(connectionId, trackedConnection);
244
+
245
+ // Call user connection handler (legacy)
246
+ if (this.options.onConnection) {
247
+ this.options.onConnection(ws, req);
248
+ }
249
+
250
+ // Emit connect event
251
+ for (const handler of this.connectHandlers) {
252
+ try {
253
+ handler(trackedConnection);
254
+ } catch (error) {
255
+ console.error("[WebSocket] Connect handler error:", error);
256
+ }
257
+ }
258
+
259
+ // Handle messages
260
+ ws.on("message", async (data: Buffer) => {
261
+ try {
262
+ await this.handleMessage(ws, data, req, connectionId);
263
+ } catch (error) {
264
+ console.error("[WebSocket] Message handling error:", error);
265
+ this.sendError(ws, "unknown", "Internal server error");
266
+ }
267
+ });
268
+
269
+ // Handle close
270
+ ws.on("close", () => {
271
+ this.connections.delete(ws);
272
+ this.rejectPendingFor(connectionId, "Connection closed");
273
+ this.abortInflightFor(connectionId);
274
+ const conn = this.trackedConnections.get(connectionId);
275
+ if (conn) {
276
+ this.trackedConnections.delete(connectionId);
277
+ // Emit disconnect event
278
+ for (const handler of this.disconnectHandlers) {
279
+ try {
280
+ handler(conn);
281
+ } catch (error) {
282
+ console.error("[WebSocket] Disconnect handler error:", error);
283
+ }
284
+ }
285
+ }
286
+ });
287
+
288
+ // Handle errors. The socket emits "close" after "error": the close handler does the
289
+ // cleanup and the disconnect event (deep dive TRN-16: before, this handler removed the
290
+ // connection first, so the close handler found nothing and sent no disconnect event).
291
+ ws.on("error", (error: Error) => {
292
+ console.error("[WebSocket] Connection error:", error);
293
+ });
294
+ }
295
+
296
+ /**
297
+ * Reject the server-to-client requests that wait for a connection that went away,
298
+ * instead of letting them wait for their timeout (BUGS-2026-07 L29).
299
+ */
300
+ private abortInflightFor(connectionId: string): void {
301
+ const prefix = `${connectionId}:`;
302
+ for (const [key, controller] of this.inflight) {
303
+ if (key.startsWith(prefix)) {
304
+ this.inflight.delete(key);
305
+ controller.abort();
306
+ }
307
+ }
308
+ }
309
+
310
+ private rejectPendingFor(connectionId: string, reason: string): void {
311
+ for (const [requestId, pending] of this.pendingRequests) {
312
+ if (pending.connectionId === connectionId) {
313
+ clearTimeout(pending.timeout);
314
+ this.pendingRequests.delete(requestId);
315
+ pending.reject(new Error(`${reason}: ${connectionId}`));
316
+ }
317
+ }
318
+ }
319
+
320
+ /**
321
+ * Handle WebSocket message.
322
+ */
323
+ private async handleMessage(
324
+ ws: WebSocket,
325
+ data: Buffer,
326
+ req: IncomingMessage,
327
+ connectionId: string
328
+ ): Promise<void> {
329
+ // Parse message
330
+ let message: WebSocketMessage;
331
+ try {
332
+ message = JSON.parse(data.toString());
333
+ } catch (error) {
334
+ this.sendError(ws, "unknown", "Invalid JSON message");
335
+ return;
336
+ }
337
+
338
+ // Handle ping (client heartbeat)
339
+ if (message.type === "ping") {
340
+ const pong: WebSocketMessage = {
341
+ id: message.id,
342
+ type: "pong",
343
+ };
344
+ this.send(ws, pong);
345
+ return;
346
+ }
347
+
348
+ // Handle pong (response to our ping)
349
+ if (message.type === "pong") {
350
+ // Just acknowledge, no action needed
351
+ return;
352
+ }
353
+
354
+ // Handle server-response (response to server-initiated request)
355
+ if (message.type === "server-response") {
356
+ const pending = this.pendingRequests.get(message.id);
357
+ // Only the connection the request was sent to may answer it
358
+ if (pending && pending.connectionId === connectionId) {
359
+ clearTimeout(pending.timeout);
360
+ this.pendingRequests.delete(message.id);
361
+ if (message.error) {
362
+ pending.reject(new Error(message.error.message));
363
+ } else {
364
+ pending.resolve(message.result);
365
+ }
366
+ }
367
+ return;
368
+ }
369
+
370
+ // Handle cancel: the client stopped reading a response (for example, it left a stream early)
371
+ if (message.type === "cancel") {
372
+ const key = `${connectionId}:${message.id}`;
373
+ this.inflight.get(key)?.abort();
374
+ this.inflight.delete(key);
375
+ return;
376
+ }
377
+
378
+ // Handle credit: the client's reader took items of a stream, so the stream can send more
379
+ if (message.type === "credit") {
380
+ if (typeof message.credit === "number" && message.credit > 0) {
381
+ this.credits.get(`${connectionId}:${message.id}`)?.grant(message.credit);
382
+ }
383
+ return;
384
+ }
385
+
386
+ // Validate request message
387
+ if (!message.id || message.type !== "request" || !message.method) {
388
+ this.sendError(ws, message.id || "unknown", "Invalid message format");
389
+ return;
390
+ }
391
+
392
+ const key = `${connectionId}:${message.id}`;
393
+ // A request id names one request of the connection while it runs. A second request with
394
+ // the id would take the first one's controller: its stream could not be cancelled, and the
395
+ // two outputs would mix (deep dive TRN-9).
396
+ if (this.inflight.has(key)) {
397
+ this.sendError(ws, message.id, "A request with this id is still running", "DUPLICATE_REQUEST");
398
+ return;
399
+ }
400
+ const controller = new AbortController();
401
+ this.inflight.set(key, controller);
402
+
403
+ // Convert to ServerRequest. Only an absent payload becomes {}: before, 0, false and ""
404
+ // became {} too (deep dive TRN-10).
405
+ const serverRequest: ServerRequest = {
406
+ id: message.id,
407
+ method: message.method,
408
+ payload: message.payload === undefined ? {} : message.payload,
409
+ metadata: {
410
+ ...withoutInternalKeys(message.metadata),
411
+ // Add connection info
412
+ connectionId,
413
+ remoteAddress: req.socket.remoteAddress,
414
+ headers: req.headers,
415
+ },
416
+ signal: controller.signal,
417
+ };
418
+
419
+ try {
420
+ // Process through universal server
421
+ const serverResponse = await this.server.handle(serverRequest);
422
+
423
+ if (serverResponse.stream) {
424
+ const credit =
425
+ typeof message.credit === "number" && message.credit > 0 ? new StreamCredit(message.credit) : undefined;
426
+ if (credit) this.credits.set(key, credit);
427
+ await this.sendStream(ws, serverResponse.id, serverResponse.stream, controller.signal, credit);
428
+ } else {
429
+ this.sendResponse(ws, serverResponse);
430
+ }
431
+ } catch (error) {
432
+ console.error("[WebSocket] Request handling error:", error);
433
+ this.sendError(
434
+ ws,
435
+ message.id,
436
+ error instanceof Error ? error.message : "Internal server error"
437
+ );
438
+ } finally {
439
+ // Delete only this request's entries (deep dive TRN-9)
440
+ if (this.inflight.get(key) === controller) this.inflight.delete(key);
441
+ this.credits.delete(key);
442
+ }
443
+ }
444
+
445
+ /**
446
+ * Send a stream response (BUGS-2026-07 H5): one "stream" frame for each item, then a frame
447
+ * with `stream.done`. An error of the stream ends it with an "error" frame. When the signal
448
+ * aborts (a cancel message, a closed connection), the loop stops, and the stream's handler
449
+ * gets return().
450
+ *
451
+ * Flow control (deep dive TRN-3): the stream takes its next item only when the client has
452
+ * credit for it (when the request carried credit), and waits while the connection's send
453
+ * buffer holds more than `highWaterMark` bytes.
454
+ */
455
+ private async sendStream(
456
+ ws: WebSocket,
457
+ id: string,
458
+ stream: AsyncIterable<unknown>,
459
+ signal: AbortSignal,
460
+ credit: StreamCredit | undefined
461
+ ): Promise<void> {
462
+ const iterator = stream[Symbol.asyncIterator]();
463
+ let done = false;
464
+ try {
465
+ for (;;) {
466
+ if (credit && !(await credit.take(signal))) return;
467
+ if (signal.aborted || ws.readyState !== WebSocket.OPEN) return;
468
+ const result = await iterator.next();
469
+ if (result.done) {
470
+ done = true;
471
+ break;
472
+ }
473
+ if (signal.aborted || ws.readyState !== WebSocket.OPEN) return;
474
+ await this.sendWithBackpressure(ws, { id, type: "stream", payload: result.value, stream: { done: false } }, signal);
475
+ }
476
+ this.send(ws, { id, type: "stream", stream: { done: true } });
477
+ } catch (error) {
478
+ done = true;
479
+ if (signal.aborted) return;
480
+ const status = errorStatus(error);
481
+ this.send(ws, {
482
+ id,
483
+ type: "error",
484
+ status,
485
+ error: { code: status.code, message: status.message, retryable: status.retryable },
486
+ stream: { done: true },
487
+ });
488
+ } finally {
489
+ // The loop stopped before the end: the handler gets return()
490
+ if (!done) await iterator.return?.();
491
+ }
492
+ }
493
+
494
+ /**
495
+ * Send a frame. When the connection's send buffer is past the high-water mark, wait until
496
+ * the socket has written this frame, or the signal aborts.
497
+ */
498
+ private sendWithBackpressure(ws: WebSocket, message: WebSocketMessage, signal: AbortSignal): Promise<void> {
499
+ if (ws.readyState !== WebSocket.OPEN) return Promise.resolve();
500
+ return new Promise<void>((resolve) => {
501
+ let waiting = false;
502
+ const onAbort = (): void => resolve();
503
+ ws.send(JSON.stringify(message), () => {
504
+ if (!waiting) return;
505
+ signal.removeEventListener("abort", onAbort);
506
+ resolve();
507
+ });
508
+ if (ws.bufferedAmount > this.options.highWaterMark && !signal.aborted) {
509
+ waiting = true;
510
+ signal.addEventListener("abort", onAbort, { once: true });
511
+ } else {
512
+ resolve();
513
+ }
514
+ });
515
+ }
516
+
517
+ private sendResponse(ws: WebSocket, response: ServerResponse): void {
518
+ const message: WebSocketMessage = {
519
+ id: response.id,
520
+ type: response.status.type === "success" ? "response" : "error",
521
+ payload: response.payload,
522
+ metadata: response.metadata,
523
+ status: response.status,
524
+ };
525
+
526
+ if (response.status.type === "error") {
527
+ message.error = {
528
+ code: response.status.code,
529
+ message: response.status.message || "Unknown error",
530
+ retryable: response.status.retryable,
531
+ };
532
+ }
533
+
534
+ this.send(ws, message);
535
+ }
536
+
537
+ /**
538
+ * Send error to client.
539
+ */
540
+ private sendError(ws: WebSocket, id: string, message: string, code = "INTERNAL_ERROR"): void {
541
+ const errorMessage: WebSocketMessage = {
542
+ id,
543
+ type: "error",
544
+ status: {
545
+ type: "error",
546
+ code,
547
+ message,
548
+ retryable: false,
549
+ },
550
+ error: {
551
+ code,
552
+ message,
553
+ retryable: false,
554
+ },
555
+ };
556
+
557
+ this.send(ws, errorMessage);
558
+ }
559
+
560
+ /**
561
+ * Send message to client.
562
+ */
563
+ private send(ws: WebSocket, message: WebSocketMessage): void {
564
+ if (ws.readyState === WebSocket.OPEN) {
565
+ ws.send(JSON.stringify(message));
566
+ }
567
+ }
568
+
569
+ /**
570
+ * Broadcast message to all connected clients.
571
+ */
572
+ broadcast(message: WebSocketMessage): void {
573
+ for (const ws of this.connections) {
574
+ this.send(ws, message);
575
+ }
576
+ }
577
+
578
+ /**
579
+ * Get number of connected clients.
580
+ */
581
+ getConnectionCount(): number {
582
+ return this.connections.size;
583
+ }
584
+
585
+ // ===========================================================================
586
+ // Tracked Connection Methods (for bidirectional RPC)
587
+ // ===========================================================================
588
+
589
+ /**
590
+ * Get all tracked connections.
591
+ */
592
+ getTrackedConnections(): TrackedConnection[] {
593
+ return Array.from(this.trackedConnections.values());
594
+ }
595
+
596
+ /**
597
+ * Get a specific tracked connection by ID.
598
+ */
599
+ getTrackedConnection(connectionId: string): TrackedConnection | undefined {
600
+ return this.trackedConnections.get(connectionId);
601
+ }
602
+
603
+ /**
604
+ * Send a message to a specific connection.
605
+ */
606
+ sendToConnection(connectionId: string, message: WebSocketMessage): void {
607
+ const conn = this.trackedConnections.get(connectionId);
608
+ if (conn) {
609
+ this.send(conn.socket, message);
610
+ }
611
+ }
612
+
613
+ /**
614
+ * Call a procedure on a specific client (server-to-client RPC).
615
+ * Returns a promise that resolves with the client's response.
616
+ */
617
+ callClient(
618
+ connectionId: string,
619
+ path: string[],
620
+ input: unknown,
621
+ timeout = 30000
622
+ ): Promise<unknown> {
623
+ const conn = this.trackedConnections.get(connectionId);
624
+ if (!conn) {
625
+ return Promise.reject(new Error(`Connection not found: ${connectionId}`));
626
+ }
627
+
628
+ const requestId = `sreq_${Date.now()}_${Math.random().toString(36).slice(2)}`;
629
+
630
+ return new Promise((resolve, reject) => {
631
+ const timeoutHandle = setTimeout(() => {
632
+ this.pendingRequests.delete(requestId);
633
+ reject(new Error(`Request timeout after ${timeout}ms`));
634
+ }, timeout);
635
+
636
+ this.pendingRequests.set(requestId, {
637
+ id: requestId,
638
+ connectionId,
639
+ resolve,
640
+ reject,
641
+ timeout: timeoutHandle,
642
+ });
643
+
644
+ const message: WebSocketMessage = {
645
+ type: "server-request",
646
+ id: requestId,
647
+ path,
648
+ input,
649
+ };
650
+
651
+ this.send(conn.socket, message);
652
+ });
653
+ }
654
+
655
+ /**
656
+ * Register a handler for new connections.
657
+ * Returns a function to unregister the handler.
658
+ */
659
+ onConnect(handler: ConnectionEventHandler): () => void {
660
+ this.connectHandlers.push(handler);
661
+ return () => {
662
+ const index = this.connectHandlers.indexOf(handler);
663
+ if (index >= 0) {
664
+ this.connectHandlers.splice(index, 1);
665
+ }
666
+ };
667
+ }
668
+
669
+ /**
670
+ * Register a handler for disconnections.
671
+ * Returns a function to unregister the handler.
672
+ */
673
+ onDisconnect(handler: ConnectionEventHandler): () => void {
674
+ this.disconnectHandlers.push(handler);
675
+ return () => {
676
+ const index = this.disconnectHandlers.indexOf(handler);
677
+ if (index >= 0) {
678
+ this.disconnectHandlers.splice(index, 1);
679
+ }
680
+ };
681
+ }
682
+
683
+ /**
684
+ * Update metadata for a tracked connection.
685
+ */
686
+ updateConnectionMetadata(
687
+ connectionId: string,
688
+ metadata: Record<string, unknown>
689
+ ): void {
690
+ const conn = this.trackedConnections.get(connectionId);
691
+ if (conn) {
692
+ conn.metadata = { ...conn.metadata, ...metadata };
693
+ }
694
+ }
695
+
696
+ /**
697
+ * Set discovered procedures for a tracked connection.
698
+ */
699
+ setConnectionProcedures(connectionId: string, procedures: string[]): void {
700
+ const conn = this.trackedConnections.get(connectionId);
701
+ if (conn) {
702
+ conn.procedures = procedures;
703
+ }
704
+ }
705
+ }