@procedures/client 0.2.3 → 0.3.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 (299) hide show
  1. package/CHANGELOG.md +65 -0
  2. package/README.md +61 -38
  3. package/dist/.tsbuildinfo +1 -1
  4. package/dist/adapters/http/client/transport.d.ts.map +1 -1
  5. package/dist/adapters/http/client/transport.js +35 -3
  6. package/dist/adapters/http/client/transport.js.map +1 -1
  7. package/dist/adapters/http/client/types.d.ts +3 -2
  8. package/dist/adapters/http/client/types.d.ts.map +1 -1
  9. package/dist/adapters/http/server/transport.d.ts +2 -2
  10. package/dist/adapters/http/server/transport.d.ts.map +1 -1
  11. package/dist/adapters/http/server/transport.js +53 -20
  12. package/dist/adapters/http/server/transport.js.map +1 -1
  13. package/dist/adapters/http/shared/headers.d.ts +1 -1
  14. package/dist/adapters/http/shared/headers.d.ts.map +1 -1
  15. package/dist/adapters/http/shared/headers.js +7 -6
  16. package/dist/adapters/http/shared/headers.js.map +1 -1
  17. package/dist/adapters/local/client/transport.d.ts +3 -0
  18. package/dist/adapters/local/client/transport.d.ts.map +1 -1
  19. package/dist/adapters/local/client/transport.js +63 -4
  20. package/dist/adapters/local/client/transport.js.map +1 -1
  21. package/dist/adapters/local/client/types.d.ts +15 -0
  22. package/dist/adapters/local/client/types.d.ts.map +1 -1
  23. package/dist/adapters/local/client/types.js.map +1 -1
  24. package/dist/adapters/mock/client/transport.d.ts +3 -2
  25. package/dist/adapters/mock/client/transport.d.ts.map +1 -1
  26. package/dist/adapters/mock/client/transport.js +8 -5
  27. package/dist/adapters/mock/client/transport.js.map +1 -1
  28. package/dist/adapters/mock/client/types.d.ts +7 -6
  29. package/dist/adapters/mock/client/types.d.ts.map +1 -1
  30. package/dist/adapters/port/transport.d.ts +62 -0
  31. package/dist/adapters/port/transport.d.ts.map +1 -0
  32. package/dist/adapters/port/transport.js +94 -0
  33. package/dist/adapters/port/transport.js.map +1 -0
  34. package/dist/adapters/websocket/client/index.d.ts +1 -1
  35. package/dist/adapters/websocket/client/index.d.ts.map +1 -1
  36. package/dist/adapters/websocket/client/index.js.map +1 -1
  37. package/dist/adapters/websocket/client/transport.d.ts +47 -7
  38. package/dist/adapters/websocket/client/transport.d.ts.map +1 -1
  39. package/dist/adapters/websocket/client/transport.js +213 -67
  40. package/dist/adapters/websocket/client/transport.js.map +1 -1
  41. package/dist/adapters/websocket/client/types.d.ts +70 -21
  42. package/dist/adapters/websocket/client/types.d.ts.map +1 -1
  43. package/dist/adapters/websocket/client/types.js.map +1 -1
  44. package/dist/adapters/websocket/server/transport.d.ts +65 -24
  45. package/dist/adapters/websocket/server/transport.d.ts.map +1 -1
  46. package/dist/adapters/websocket/server/transport.js +192 -263
  47. package/dist/adapters/websocket/server/transport.js.map +1 -1
  48. package/dist/adapters/websocket/server/types.d.ts +20 -1
  49. package/dist/adapters/websocket/server/types.d.ts.map +1 -1
  50. package/dist/adapters/websocket/shared/rpc.d.ts +129 -0
  51. package/dist/adapters/websocket/shared/rpc.d.ts.map +1 -0
  52. package/dist/adapters/websocket/shared/rpc.js +425 -0
  53. package/dist/adapters/websocket/shared/rpc.js.map +1 -0
  54. package/dist/browser.d.ts +29 -7
  55. package/dist/browser.d.ts.map +1 -1
  56. package/dist/browser.js +26 -3
  57. package/dist/browser.js.map +1 -1
  58. package/dist/client/call-types.d.ts +10 -10
  59. package/dist/client/call-types.d.ts.map +1 -1
  60. package/dist/client/call-types.js +1 -6
  61. package/dist/client/call-types.js.map +1 -1
  62. package/dist/client/client.d.ts +6 -1
  63. package/dist/client/client.d.ts.map +1 -1
  64. package/dist/client/client.js +23 -9
  65. package/dist/client/client.js.map +1 -1
  66. package/dist/client/deadline.d.ts +38 -0
  67. package/dist/client/deadline.d.ts.map +1 -0
  68. package/dist/client/deadline.js +60 -0
  69. package/dist/client/deadline.js.map +1 -0
  70. package/dist/client/errors/factory.d.ts.map +1 -1
  71. package/dist/client/errors/factory.js +11 -7
  72. package/dist/client/errors/factory.js.map +1 -1
  73. package/dist/client/index.d.ts +9 -2
  74. package/dist/client/index.d.ts.map +1 -1
  75. package/dist/client/index.js +8 -2
  76. package/dist/client/index.js.map +1 -1
  77. package/dist/client/middleware/cache.d.ts +19 -5
  78. package/dist/client/middleware/cache.d.ts.map +1 -1
  79. package/dist/client/middleware/cache.js +106 -18
  80. package/dist/client/middleware/cache.js.map +1 -1
  81. package/dist/client/middleware/circuit-breaker.d.ts +28 -10
  82. package/dist/client/middleware/circuit-breaker.d.ts.map +1 -1
  83. package/dist/client/middleware/circuit-breaker.js +35 -24
  84. package/dist/client/middleware/circuit-breaker.js.map +1 -1
  85. package/dist/client/middleware/contexts.d.ts +16 -10
  86. package/dist/client/middleware/contexts.d.ts.map +1 -1
  87. package/dist/client/middleware/contexts.js.map +1 -1
  88. package/dist/client/middleware/items.d.ts +31 -2
  89. package/dist/client/middleware/items.d.ts.map +1 -1
  90. package/dist/client/middleware/items.js +86 -6
  91. package/dist/client/middleware/items.js.map +1 -1
  92. package/dist/client/middleware/lru.d.ts +2 -0
  93. package/dist/client/middleware/lru.d.ts.map +1 -1
  94. package/dist/client/middleware/lru.js +11 -0
  95. package/dist/client/middleware/lru.js.map +1 -1
  96. package/dist/client/middleware/rate-limit.d.ts +7 -6
  97. package/dist/client/middleware/rate-limit.d.ts.map +1 -1
  98. package/dist/client/middleware/rate-limit.js +9 -6
  99. package/dist/client/middleware/rate-limit.js.map +1 -1
  100. package/dist/client/middleware/resilience.d.ts +61 -0
  101. package/dist/client/middleware/resilience.d.ts.map +1 -0
  102. package/dist/client/middleware/resilience.js +59 -0
  103. package/dist/client/middleware/resilience.js.map +1 -0
  104. package/dist/client/middleware/retry.d.ts +45 -11
  105. package/dist/client/middleware/retry.d.ts.map +1 -1
  106. package/dist/client/middleware/retry.js +102 -22
  107. package/dist/client/middleware/retry.js.map +1 -1
  108. package/dist/client/middleware/timeout.d.ts +15 -12
  109. package/dist/client/middleware/timeout.d.ts.map +1 -1
  110. package/dist/client/middleware/timeout.js +46 -37
  111. package/dist/client/middleware/timeout.js.map +1 -1
  112. package/dist/client/middleware/tracing.d.ts.map +1 -1
  113. package/dist/client/middleware/tracing.js +11 -3
  114. package/dist/client/middleware/tracing.js.map +1 -1
  115. package/dist/client/types.d.ts +9 -1
  116. package/dist/client/types.d.ts.map +1 -1
  117. package/dist/client/types.js.map +1 -1
  118. package/dist/clock.d.ts +19 -0
  119. package/dist/clock.d.ts.map +1 -0
  120. package/dist/clock.js +18 -0
  121. package/dist/clock.js.map +1 -0
  122. package/dist/duration.d.ts +37 -0
  123. package/dist/duration.d.ts.map +1 -0
  124. package/dist/duration.js +44 -0
  125. package/dist/duration.js.map +1 -0
  126. package/dist/machines.d.ts +90 -0
  127. package/dist/machines.d.ts.map +1 -0
  128. package/dist/machines.js +127 -0
  129. package/dist/machines.js.map +1 -0
  130. package/dist/procedures/capability.d.ts +3 -6
  131. package/dist/procedures/capability.d.ts.map +1 -1
  132. package/dist/procedures/capability.js +7 -8
  133. package/dist/procedures/capability.js.map +1 -1
  134. package/dist/procedures/collection/index.d.ts +3 -3
  135. package/dist/procedures/collection/index.d.ts.map +1 -1
  136. package/dist/procedures/collection/index.js +1 -1
  137. package/dist/procedures/collection/index.js.map +1 -1
  138. package/dist/procedures/collection/procedures.d.ts.map +1 -1
  139. package/dist/procedures/collection/procedures.js +49 -1
  140. package/dist/procedures/collection/procedures.js.map +1 -1
  141. package/dist/procedures/collection/schemas.d.ts +33 -0
  142. package/dist/procedures/collection/schemas.d.ts.map +1 -1
  143. package/dist/procedures/collection/schemas.js +68 -0
  144. package/dist/procedures/collection/schemas.js.map +1 -1
  145. package/dist/procedures/collection/storage.d.ts +37 -0
  146. package/dist/procedures/collection/storage.d.ts.map +1 -1
  147. package/dist/procedures/core/array.d.ts.map +1 -1
  148. package/dist/procedures/core/array.js +26 -15
  149. package/dist/procedures/core/array.js.map +1 -1
  150. package/dist/procedures/core/index.d.ts.map +1 -1
  151. package/dist/procedures/core/index.js +8 -0
  152. package/dist/procedures/core/index.js.map +1 -1
  153. package/dist/procedures/core/meta.d.ts.map +1 -1
  154. package/dist/procedures/core/meta.js +2 -1
  155. package/dist/procedures/core/meta.js.map +1 -1
  156. package/dist/procedures/core/object.d.ts.map +1 -1
  157. package/dist/procedures/core/object.js +42 -13
  158. package/dist/procedures/core/object.js.map +1 -1
  159. package/dist/procedures/core/operands.d.ts.map +1 -1
  160. package/dist/procedures/core/operands.js +6 -1
  161. package/dist/procedures/core/operands.js.map +1 -1
  162. package/dist/procedures/core/string.d.ts.map +1 -1
  163. package/dist/procedures/core/string.js +4 -2
  164. package/dist/procedures/core/string.js.map +1 -1
  165. package/dist/procedures/define-procedure.d.ts +19 -7
  166. package/dist/procedures/define-procedure.d.ts.map +1 -1
  167. package/dist/procedures/define-procedure.js +57 -17
  168. package/dist/procedures/define-procedure.js.map +1 -1
  169. package/dist/procedures/effects.d.ts +16 -0
  170. package/dist/procedures/effects.d.ts.map +1 -1
  171. package/dist/procedures/effects.js +33 -0
  172. package/dist/procedures/effects.js.map +1 -1
  173. package/dist/procedures/idempotency.d.ts +73 -0
  174. package/dist/procedures/idempotency.d.ts.map +1 -0
  175. package/dist/procedures/idempotency.js +131 -0
  176. package/dist/procedures/idempotency.js.map +1 -0
  177. package/dist/procedures/index.d.ts +7 -3
  178. package/dist/procedures/index.d.ts.map +1 -1
  179. package/dist/procedures/index.js +6 -2
  180. package/dist/procedures/index.js.map +1 -1
  181. package/dist/procedures/interceptors.d.ts +17 -4
  182. package/dist/procedures/interceptors.d.ts.map +1 -1
  183. package/dist/procedures/interceptors.js +18 -7
  184. package/dist/procedures/interceptors.js.map +1 -1
  185. package/dist/procedures/invoke.d.ts +15 -3
  186. package/dist/procedures/invoke.d.ts.map +1 -1
  187. package/dist/procedures/invoke.js +8 -3
  188. package/dist/procedures/invoke.js.map +1 -1
  189. package/dist/procedures/manifest.d.ts +83 -0
  190. package/dist/procedures/manifest.d.ts.map +1 -0
  191. package/dist/procedures/manifest.js +90 -0
  192. package/dist/procedures/manifest.js.map +1 -0
  193. package/dist/procedures/runtime-programs.d.ts +19 -0
  194. package/dist/procedures/runtime-programs.d.ts.map +1 -0
  195. package/dist/procedures/runtime-programs.js +24 -0
  196. package/dist/procedures/runtime-programs.js.map +1 -0
  197. package/dist/procedures/types.d.ts +16 -0
  198. package/dist/procedures/types.d.ts.map +1 -1
  199. package/dist/procedures/types.js.map +1 -1
  200. package/dist/protocol.d.ts +40 -0
  201. package/dist/protocol.d.ts.map +1 -0
  202. package/dist/protocol.js +58 -0
  203. package/dist/protocol.js.map +1 -0
  204. package/dist/server/host-policy.d.ts +4 -3
  205. package/dist/server/host-policy.d.ts.map +1 -1
  206. package/dist/server/host-policy.js +6 -3
  207. package/dist/server/host-policy.js.map +1 -1
  208. package/dist/server/host-procedures.d.ts +31 -0
  209. package/dist/server/host-procedures.d.ts.map +1 -0
  210. package/dist/server/host-procedures.js +75 -0
  211. package/dist/server/host-procedures.js.map +1 -0
  212. package/dist/server/index.d.ts +3 -3
  213. package/dist/server/index.d.ts.map +1 -1
  214. package/dist/server/index.js +1 -1
  215. package/dist/server/index.js.map +1 -1
  216. package/dist/server/procedure-server.d.ts +110 -4
  217. package/dist/server/procedure-server.d.ts.map +1 -1
  218. package/dist/server/procedure-server.js +269 -17
  219. package/dist/server/procedure-server.js.map +1 -1
  220. package/dist/server/request-auth.d.ts +19 -0
  221. package/dist/server/request-auth.d.ts.map +1 -0
  222. package/dist/server/request-auth.js +32 -0
  223. package/dist/server/request-auth.js.map +1 -0
  224. package/dist/server/types.d.ts +32 -0
  225. package/dist/server/types.d.ts.map +1 -1
  226. package/dist/server/types.js.map +1 -1
  227. package/dist/timers.d.ts +60 -0
  228. package/dist/timers.d.ts.map +1 -0
  229. package/dist/timers.js +33 -0
  230. package/dist/timers.js.map +1 -0
  231. package/dist/tracing/traceparent.d.ts +26 -0
  232. package/dist/tracing/traceparent.d.ts.map +1 -0
  233. package/dist/tracing/traceparent.js +53 -0
  234. package/dist/tracing/traceparent.js.map +1 -0
  235. package/package.json +7 -1
  236. package/src/adapters/http/client/transport.ts +31 -3
  237. package/src/adapters/http/client/types.ts +3 -2
  238. package/src/adapters/http/server/transport.ts +60 -24
  239. package/src/adapters/http/shared/headers.ts +7 -6
  240. package/src/adapters/local/client/transport.ts +70 -5
  241. package/src/adapters/local/client/types.ts +18 -0
  242. package/src/adapters/mock/client/transport.ts +9 -6
  243. package/src/adapters/mock/client/types.ts +7 -6
  244. package/src/adapters/port/transport.ts +124 -0
  245. package/src/adapters/websocket/client/index.ts +1 -0
  246. package/src/adapters/websocket/client/transport.ts +232 -73
  247. package/src/adapters/websocket/client/types.ts +80 -21
  248. package/src/adapters/websocket/server/transport.ts +199 -301
  249. package/src/adapters/websocket/server/types.ts +20 -1
  250. package/src/adapters/websocket/shared/rpc.ts +453 -0
  251. package/src/browser.ts +51 -3
  252. package/src/client/call-types.ts +10 -14
  253. package/src/client/client.ts +28 -9
  254. package/src/client/deadline.ts +64 -0
  255. package/src/client/errors/factory.ts +12 -8
  256. package/src/client/index.ts +21 -3
  257. package/src/client/middleware/cache.ts +120 -23
  258. package/src/client/middleware/circuit-breaker.ts +65 -35
  259. package/src/client/middleware/contexts.ts +17 -10
  260. package/src/client/middleware/items.ts +101 -6
  261. package/src/client/middleware/lru.ts +12 -0
  262. package/src/client/middleware/rate-limit.ts +9 -7
  263. package/src/client/middleware/resilience.ts +81 -0
  264. package/src/client/middleware/retry.ts +146 -34
  265. package/src/client/middleware/timeout.ts +55 -46
  266. package/src/client/middleware/tracing.ts +13 -4
  267. package/src/client/types.ts +9 -1
  268. package/src/clock.ts +21 -0
  269. package/src/duration.ts +56 -0
  270. package/src/machines.ts +186 -0
  271. package/src/procedures/capability.ts +7 -8
  272. package/src/procedures/collection/index.ts +9 -1
  273. package/src/procedures/collection/procedures.ts +57 -0
  274. package/src/procedures/collection/schemas.ts +110 -0
  275. package/src/procedures/collection/storage.ts +38 -0
  276. package/src/procedures/core/array.ts +27 -16
  277. package/src/procedures/core/index.ts +8 -0
  278. package/src/procedures/core/meta.ts +2 -1
  279. package/src/procedures/core/object.ts +48 -14
  280. package/src/procedures/core/operands.ts +7 -0
  281. package/src/procedures/core/string.ts +4 -2
  282. package/src/procedures/define-procedure.ts +73 -20
  283. package/src/procedures/effects.ts +35 -0
  284. package/src/procedures/idempotency.ts +152 -0
  285. package/src/procedures/index.ts +18 -2
  286. package/src/procedures/interceptors.ts +28 -11
  287. package/src/procedures/invoke.ts +19 -5
  288. package/src/procedures/manifest.ts +158 -0
  289. package/src/procedures/runtime-programs.ts +27 -0
  290. package/src/procedures/types.ts +16 -0
  291. package/src/protocol.ts +97 -0
  292. package/src/server/host-policy.ts +8 -5
  293. package/src/server/host-procedures.ts +102 -0
  294. package/src/server/index.ts +5 -2
  295. package/src/server/procedure-server.ts +324 -10
  296. package/src/server/request-auth.ts +35 -0
  297. package/src/server/types.ts +37 -0
  298. package/src/timers.ts +82 -0
  299. package/src/tracing/traceparent.ts +61 -0
@@ -5,8 +5,14 @@
5
5
  * Supports bidirectional streaming and persistent connections.
6
6
  */
7
7
  import { WebSocketServer, WebSocket } from "ws";
8
+ import { pathToMethod } from "../../../server/method.js";
9
+ import { IncomingCalls, OutgoingCalls } from "../shared/rpc.js";
8
10
  import { withoutInternalKeys } from "../../metadata.js";
9
11
  import { checkBrowserRequest } from "../../../server/browser-guard.js";
12
+ import { optionalMs } from "../../../duration.js";
13
+ import { credentialsOf, withoutSecretHeaders } from "../../../server/request-auth.js";
14
+ import { PROTOCOL_VERSION, protocolVersionOf } from "../../../protocol.js";
15
+ import { TIMER_DEFAULTS } from "../../../timers.js";
10
16
  /**
11
17
  * WebSocket server transport adapter.
12
18
  *
@@ -32,69 +38,27 @@ import { checkBrowserRequest } from "../../../server/browser-guard.js";
32
38
  * httpServer.listen(3000);
33
39
  * ```
34
40
  */
35
- /**
36
- * The credit of one stream: the number of items the client can take now. The client sends
37
- * more credit as its reader takes items (deep dive TRN-3).
38
- */
39
- class StreamCredit {
40
- credit;
41
- wake;
42
- constructor(credit) {
43
- this.credit = credit;
44
- }
45
- grant(n) {
46
- this.credit += n;
47
- const wake = this.wake;
48
- this.wake = undefined;
49
- wake?.();
50
- }
51
- /** Take one item of credit. Returns false when the signal aborted the wait. */
52
- async take(signal) {
53
- while (this.credit <= 0) {
54
- if (signal.aborted)
55
- return false;
56
- await new Promise((resolve) => {
57
- const onAbort = () => resolve();
58
- signal.addEventListener("abort", onAbort, { once: true });
59
- this.wake = () => {
60
- signal.removeEventListener("abort", onAbort);
61
- resolve();
62
- };
63
- });
64
- }
65
- if (signal.aborted)
66
- return false;
67
- this.credit--;
68
- return true;
69
- }
70
- }
71
- /** The error of a failed stream or handler: its code (a string) and its retryable flag. */
72
- function errorStatus(error) {
73
- const code = error?.code;
74
- const retryable = error?.retryable;
75
- return {
76
- type: "error",
77
- code: typeof code === "string" ? code : "HANDLER_ERROR",
78
- message: error instanceof Error ? error.message : String(error),
79
- // Before, every stream error lost its retryable flag (deep dive TRN-7)
80
- retryable: typeof retryable === "boolean" ? retryable : false,
81
- };
82
- }
83
41
  export class WebSocketServerTransport {
84
42
  name = "websocket";
85
43
  wss = null;
86
44
  options;
87
45
  server;
88
46
  connections = new Set();
47
+ /** The time until the first frame of a call to a client, in milliseconds (R24) */
48
+ reverseRequestTimeoutMs;
49
+ /** The heartbeat of the server, or undefined when it is off (roadmap R3) */
50
+ heartbeat;
51
+ heartbeatTimer;
52
+ /** The pings without a pong, one after the other, of each connection */
53
+ missedPongs = new WeakMap();
89
54
  // Tracked connections with IDs for bidirectional RPC
90
55
  trackedConnections = new Map();
91
- pendingRequests = new Map();
92
56
  connectionCounter = 0;
93
- // The requests in progress, by "connectionId:requestId": a cancel message or a closed
94
- // connection aborts their signal, so a stream stops and its handler gets return()
95
- inflight = new Map();
96
- // The flow control of the streams in progress, by the same key
97
- credits = new Map();
57
+ /**
58
+ * The calls of each connection in the two directions (roadmap R24): the calls that the client
59
+ * sends (served by the server) and the calls that the server sends to the client.
60
+ */
61
+ channels = new Map();
98
62
  /** The browser checks of each connection (see `server/browser-guard.ts`) */
99
63
  guard;
100
64
  // Connection lifecycle event handlers
@@ -113,6 +77,37 @@ export class WebSocketServerTransport {
113
77
  highWaterMark: options.highWaterMark ?? 1024 * 1024,
114
78
  };
115
79
  this.guard = { allowedOrigins: options.allowedOrigins, allowedHosts: options.allowedHosts };
80
+ this.reverseRequestTimeoutMs = optionalMs(options.reverseRequestTimeout, "reverseRequestTimeout") ?? TIMER_DEFAULTS.webSocketServer.reverseRequestTimeoutMs;
81
+ this.heartbeat =
82
+ options.heartbeat === false
83
+ ? undefined
84
+ : {
85
+ interval: optionalMs(options.heartbeat?.interval, "heartbeat.interval") ?? TIMER_DEFAULTS.webSocketServer.heartbeatIntervalMs,
86
+ misses: Math.max(1, options.heartbeat?.misses ?? TIMER_DEFAULTS.webSocketServer.heartbeatMisses),
87
+ };
88
+ }
89
+ /**
90
+ * One beat of the heartbeat: a connection that missed too many pongs closes at once (its close
91
+ * event aborts its requests), and each other connection gets a ping.
92
+ */
93
+ beat() {
94
+ if (!this.heartbeat)
95
+ return;
96
+ for (const ws of this.connections) {
97
+ const missed = this.missedPongs.get(ws) ?? 0;
98
+ if (missed >= this.heartbeat.misses) {
99
+ console.error(`[${this.name}] A connection missed ${missed} pongs: closing it`);
100
+ ws.terminate();
101
+ continue;
102
+ }
103
+ this.missedPongs.set(ws, missed + 1);
104
+ try {
105
+ ws.ping();
106
+ }
107
+ catch {
108
+ // The socket is closing: its close event cleans up
109
+ }
110
+ }
116
111
  }
117
112
  async start() {
118
113
  // Create WebSocket server
@@ -148,17 +143,26 @@ export class WebSocketServerTransport {
148
143
  this.wss.on("connection", (ws, req) => {
149
144
  this.handleConnection(ws, req);
150
145
  });
146
+ if (this.heartbeat) {
147
+ this.heartbeatTimer = setInterval(() => this.beat(), this.heartbeat.interval);
148
+ // The heartbeat must not keep the process alive
149
+ this.heartbeatTimer.unref?.();
150
+ }
151
151
  console.log(`[${this.name}] WebSocket server listening on ${this.options.path}`);
152
152
  }
153
153
  async stop() {
154
+ if (this.heartbeatTimer) {
155
+ clearInterval(this.heartbeatTimer);
156
+ this.heartbeatTimer = undefined;
157
+ }
154
158
  if (this.wss) {
155
- // Stop the requests in progress, so their handlers end (deep dive TRN-15)
156
- for (const controller of this.inflight.values())
157
- controller.abort();
158
- this.inflight.clear();
159
- for (const connectionId of this.trackedConnections.keys()) {
160
- this.rejectPendingFor(connectionId, "Server stopped");
159
+ // Stop the requests in progress, so their handlers end (deep dive TRN-15), and fail the
160
+ // calls that the server sent to its clients
161
+ for (const channel of this.channels.values()) {
162
+ channel.incoming.abortAll();
163
+ channel.outgoing.failAll("Server stopped");
161
164
  }
165
+ this.channels.clear();
162
166
  // Close all connections
163
167
  for (const ws of this.connections) {
164
168
  ws.close();
@@ -196,10 +200,29 @@ export class WebSocketServerTransport {
196
200
  connectedAt: new Date(),
197
201
  metadata: {
198
202
  remoteAddress: req.socket.remoteAddress,
199
- headers: req.headers,
203
+ headers: withoutSecretHeaders(req.headers),
200
204
  },
201
205
  };
202
206
  this.trackedConnections.set(connectionId, trackedConnection);
207
+ // The calls of this connection in the two directions (roadmap R24)
208
+ const isOpen = () => ws.readyState === WebSocket.OPEN;
209
+ const send = (frame) => this.send(ws, frame);
210
+ this.channels.set(connectionId, {
211
+ incoming: new IncomingCalls({
212
+ handler: this.server,
213
+ send,
214
+ sendWithBackpressure: (frame, signal) => this.sendWithBackpressure(ws, frame, signal),
215
+ isOpen,
216
+ requestOf: (frame, signal) => this.requestOf(frame, req, connectionId, signal),
217
+ }),
218
+ outgoing: new OutgoingCalls({
219
+ send,
220
+ isOpen,
221
+ requestTimeoutMs: this.reverseRequestTimeoutMs,
222
+ streamWindow: 64,
223
+ idPrefix: "r:",
224
+ }),
225
+ });
203
226
  // Call user connection handler (legacy)
204
227
  if (this.options.onConnection) {
205
228
  this.options.onConnection(ws, req);
@@ -213,6 +236,8 @@ export class WebSocketServerTransport {
213
236
  console.error("[WebSocket] Connect handler error:", error);
214
237
  }
215
238
  }
239
+ // A pong answers the ping of the heartbeat
240
+ ws.on("pong", () => this.missedPongs.set(ws, 0));
216
241
  // Handle messages
217
242
  ws.on("message", async (data) => {
218
243
  try {
@@ -226,8 +251,11 @@ export class WebSocketServerTransport {
226
251
  // Handle close
227
252
  ws.on("close", () => {
228
253
  this.connections.delete(ws);
229
- this.rejectPendingFor(connectionId, "Connection closed");
230
- this.abortInflightFor(connectionId);
254
+ // The calls of the client stop, and the calls to the client fail (BUGS-2026-07 L29)
255
+ const channel = this.channels.get(connectionId);
256
+ channel?.incoming.abortAll();
257
+ channel?.outgoing.failAll("WebSocket connection closed");
258
+ this.channels.delete(connectionId);
231
259
  const conn = this.trackedConnections.get(connectionId);
232
260
  if (conn) {
233
261
  this.trackedConnections.delete(connectionId);
@@ -250,186 +278,77 @@ export class WebSocketServerTransport {
250
278
  });
251
279
  }
252
280
  /**
253
- * Reject the server-to-client requests that wait for a connection that went away,
254
- * instead of letting them wait for their timeout (BUGS-2026-07 L29).
281
+ * The server request of a `request` frame of a connection: the metadata of the frame and of the
282
+ * connection, the signal of the call, and the credentials of the upgrade (roadmap R18).
255
283
  */
256
- abortInflightFor(connectionId) {
257
- const prefix = `${connectionId}:`;
258
- for (const [key, controller] of this.inflight) {
259
- if (key.startsWith(prefix)) {
260
- this.inflight.delete(key);
261
- controller.abort();
262
- }
263
- }
264
- }
265
- rejectPendingFor(connectionId, reason) {
266
- for (const [requestId, pending] of this.pendingRequests) {
267
- if (pending.connectionId === connectionId) {
268
- clearTimeout(pending.timeout);
269
- this.pendingRequests.delete(requestId);
270
- pending.reject(new Error(`${reason}: ${connectionId}`));
271
- }
272
- }
284
+ requestOf(frame, req, connectionId, signal) {
285
+ return {
286
+ id: frame.id,
287
+ method: frame.method,
288
+ // Only an absent payload becomes {}: before, 0, false and "" became {} too (deep dive TRN-10)
289
+ payload: frame.payload === undefined ? {} : frame.payload,
290
+ metadata: {
291
+ ...withoutInternalKeys(frame.metadata),
292
+ // Add connection info
293
+ connectionId,
294
+ remoteAddress: req.socket.remoteAddress,
295
+ // The upgrade headers without their secrets (roadmap R18)
296
+ headers: withoutSecretHeaders(req.headers),
297
+ },
298
+ signal,
299
+ // The credentials of the connection: the bearer token of its upgrade (R18)
300
+ credentials: credentialsOf(req),
301
+ };
273
302
  }
274
303
  /**
275
- * Handle WebSocket message.
304
+ * Handle WebSocket message: a heartbeat, a frame of a call that the server sent (a response,
305
+ * an error, a stream), or a frame of a call of the client (a request, a cancel, a credit).
276
306
  */
277
- async handleMessage(ws, data, req, connectionId) {
307
+ async handleMessage(ws, data, _req, connectionId) {
278
308
  // Parse message
279
309
  let message;
280
310
  try {
281
311
  message = JSON.parse(data.toString());
282
312
  }
283
- catch (error) {
313
+ catch {
284
314
  this.sendError(ws, "unknown", "Invalid JSON message");
285
315
  return;
286
316
  }
287
317
  // Handle ping (client heartbeat)
288
318
  if (message.type === "ping") {
289
- const pong = {
290
- id: message.id,
291
- type: "pong",
292
- };
293
- this.send(ws, pong);
319
+ this.send(ws, { id: message.id, type: "pong" });
294
320
  return;
295
321
  }
296
- // Handle pong (response to our ping)
297
- if (message.type === "pong") {
298
- // Just acknowledge, no action needed
322
+ // A pong answers a ping of the server: nothing to do
323
+ if (message.type === "pong")
299
324
  return;
300
- }
301
- // Handle server-response (response to server-initiated request)
302
- if (message.type === "server-response") {
303
- const pending = this.pendingRequests.get(message.id);
304
- // Only the connection the request was sent to may answer it
305
- if (pending && pending.connectionId === connectionId) {
306
- clearTimeout(pending.timeout);
307
- this.pendingRequests.delete(message.id);
308
- if (message.error) {
309
- pending.reject(new Error(message.error.message));
310
- }
311
- else {
312
- pending.resolve(message.result);
313
- }
325
+ // The hello of the client: the protocol version (roadmap R25)
326
+ if (message.type === "hello") {
327
+ const version = protocolVersionOf(message.protocol);
328
+ const connection = this.trackedConnections.get(connectionId);
329
+ if (connection && version !== undefined)
330
+ connection.metadata = { ...connection.metadata, protocol: version };
331
+ if (version !== undefined && version > PROTOCOL_VERSION) {
332
+ this.sendError(ws, message.id || "hello", `This server speaks the protocol ${PROTOCOL_VERSION}, and the client uses ${version}`, "PROTOCOL_VERSION");
333
+ ws.close(1002, "protocol version");
334
+ return;
314
335
  }
336
+ this.send(ws, { id: message.id || "hello", type: "hello", protocol: PROTOCOL_VERSION });
315
337
  return;
316
338
  }
317
- // Handle cancel: the client stopped reading a response (for example, it left a stream early)
318
- if (message.type === "cancel") {
319
- const key = `${connectionId}:${message.id}`;
320
- this.inflight.get(key)?.abort();
321
- this.inflight.delete(key);
339
+ const channel = this.channels.get(connectionId);
340
+ if (!channel)
322
341
  return;
323
- }
324
- // Handle credit: the client's reader took items of a stream, so the stream can send more
325
- if (message.type === "credit") {
326
- if (typeof message.credit === "number" && message.credit > 0) {
327
- this.credits.get(`${connectionId}:${message.id}`)?.grant(message.credit);
328
- }
342
+ // A frame of a call that the server sent to this client (roadmap R24)
343
+ if (channel.outgoing.receive(message))
329
344
  return;
330
- }
331
- // Validate request message
332
- if (!message.id || message.type !== "request" || !message.method) {
333
- this.sendError(ws, message.id || "unknown", "Invalid message format");
345
+ // A frame of a call of the client: a request, a cancel or a credit
346
+ if (channel.incoming.receive(message))
334
347
  return;
335
- }
336
- const key = `${connectionId}:${message.id}`;
337
- // A request id names one request of the connection while it runs. A second request with
338
- // the id would take the first one's controller: its stream could not be cancelled, and the
339
- // two outputs would mix (deep dive TRN-9).
340
- if (this.inflight.has(key)) {
341
- this.sendError(ws, message.id, "A request with this id is still running", "DUPLICATE_REQUEST");
348
+ // A server-response frame of an older client, for a call that no longer exists
349
+ if (message.type === "server-response")
342
350
  return;
343
- }
344
- const controller = new AbortController();
345
- this.inflight.set(key, controller);
346
- // Convert to ServerRequest. Only an absent payload becomes {}: before, 0, false and ""
347
- // became {} too (deep dive TRN-10).
348
- const serverRequest = {
349
- id: message.id,
350
- method: message.method,
351
- payload: message.payload === undefined ? {} : message.payload,
352
- metadata: {
353
- ...withoutInternalKeys(message.metadata),
354
- // Add connection info
355
- connectionId,
356
- remoteAddress: req.socket.remoteAddress,
357
- headers: req.headers,
358
- },
359
- signal: controller.signal,
360
- };
361
- try {
362
- // Process through universal server
363
- const serverResponse = await this.server.handle(serverRequest);
364
- if (serverResponse.stream) {
365
- const credit = typeof message.credit === "number" && message.credit > 0 ? new StreamCredit(message.credit) : undefined;
366
- if (credit)
367
- this.credits.set(key, credit);
368
- await this.sendStream(ws, serverResponse.id, serverResponse.stream, controller.signal, credit);
369
- }
370
- else {
371
- this.sendResponse(ws, serverResponse);
372
- }
373
- }
374
- catch (error) {
375
- console.error("[WebSocket] Request handling error:", error);
376
- this.sendError(ws, message.id, error instanceof Error ? error.message : "Internal server error");
377
- }
378
- finally {
379
- // Delete only this request's entries (deep dive TRN-9)
380
- if (this.inflight.get(key) === controller)
381
- this.inflight.delete(key);
382
- this.credits.delete(key);
383
- }
384
- }
385
- /**
386
- * Send a stream response (BUGS-2026-07 H5): one "stream" frame for each item, then a frame
387
- * with `stream.done`. An error of the stream ends it with an "error" frame. When the signal
388
- * aborts (a cancel message, a closed connection), the loop stops, and the stream's handler
389
- * gets return().
390
- *
391
- * Flow control (deep dive TRN-3): the stream takes its next item only when the client has
392
- * credit for it (when the request carried credit), and waits while the connection's send
393
- * buffer holds more than `highWaterMark` bytes.
394
- */
395
- async sendStream(ws, id, stream, signal, credit) {
396
- const iterator = stream[Symbol.asyncIterator]();
397
- let done = false;
398
- try {
399
- for (;;) {
400
- if (credit && !(await credit.take(signal)))
401
- return;
402
- if (signal.aborted || ws.readyState !== WebSocket.OPEN)
403
- return;
404
- const result = await iterator.next();
405
- if (result.done) {
406
- done = true;
407
- break;
408
- }
409
- if (signal.aborted || ws.readyState !== WebSocket.OPEN)
410
- return;
411
- await this.sendWithBackpressure(ws, { id, type: "stream", payload: result.value, stream: { done: false } }, signal);
412
- }
413
- this.send(ws, { id, type: "stream", stream: { done: true } });
414
- }
415
- catch (error) {
416
- done = true;
417
- if (signal.aborted)
418
- return;
419
- const status = errorStatus(error);
420
- this.send(ws, {
421
- id,
422
- type: "error",
423
- status,
424
- error: { code: status.code, message: status.message, retryable: status.retryable },
425
- stream: { done: true },
426
- });
427
- }
428
- finally {
429
- // The loop stopped before the end: the handler gets return()
430
- if (!done)
431
- await iterator.return?.();
432
- }
351
+ this.sendError(ws, message.id || "unknown", "Invalid message format");
433
352
  }
434
353
  /**
435
354
  * Send a frame. When the connection's send buffer is past the high-water mark, wait until
@@ -456,23 +375,6 @@ export class WebSocketServerTransport {
456
375
  }
457
376
  });
458
377
  }
459
- sendResponse(ws, response) {
460
- const message = {
461
- id: response.id,
462
- type: response.status.type === "success" ? "response" : "error",
463
- payload: response.payload,
464
- metadata: response.metadata,
465
- status: response.status,
466
- };
467
- if (response.status.type === "error") {
468
- message.error = {
469
- code: response.status.code,
470
- message: response.status.message || "Unknown error",
471
- retryable: response.status.retryable,
472
- };
473
- }
474
- this.send(ws, message);
475
- }
476
378
  /**
477
379
  * Send error to client.
478
380
  */
@@ -541,37 +443,64 @@ export class WebSocketServerTransport {
541
443
  }
542
444
  }
543
445
  /**
544
- * Call a procedure on a specific client (server-to-client RPC).
545
- * Returns a promise that resolves with the client's response.
446
+ * Send a call to a client (roadmap R24): the same frames as the calls of the client, with
447
+ * streaming, credit, cancel, the signal and the remaining time of the call. The client serves it
448
+ * with its own handler (the `serve` option of `WebSocketTransport`). An unknown connection gives a
449
+ * `CONNECTION_NOT_FOUND` error item.
546
450
  */
547
- callClient(connectionId, path, input, timeout = 30000) {
548
- const conn = this.trackedConnections.get(connectionId);
549
- if (!conn) {
550
- return Promise.reject(new Error(`Connection not found: ${connectionId}`));
451
+ callConnection(connectionId, message) {
452
+ const channel = this.channels.get(connectionId);
453
+ if (!channel) {
454
+ return (async function* () {
455
+ yield {
456
+ id: message.id,
457
+ status: { type: "error", code: "CONNECTION_NOT_FOUND", message: `Connection not found: ${connectionId}`, retryable: false },
458
+ payload: null,
459
+ metadata: {},
460
+ };
461
+ })();
551
462
  }
552
- const requestId = `sreq_${Date.now()}_${Math.random().toString(36).slice(2)}`;
553
- return new Promise((resolve, reject) => {
554
- const timeoutHandle = setTimeout(() => {
555
- this.pendingRequests.delete(requestId);
556
- reject(new Error(`Request timeout after ${timeout}ms`));
557
- }, timeout);
558
- this.pendingRequests.set(requestId, {
559
- id: requestId,
560
- connectionId,
561
- resolve,
562
- reject,
563
- timeout: timeoutHandle,
564
- });
565
- const message = {
566
- type: "server-request",
567
- id: requestId,
568
- path,
569
- input,
570
- };
571
- this.send(conn.socket, message);
572
- });
463
+ return channel.outgoing.call(message);
464
+ }
465
+ /**
466
+ * A transport to one client: a `Client` over it calls the procedures that the client serves,
467
+ * with each client middleware (retry, timeouts) of the caller (roadmap R24).
468
+ */
469
+ transportFor(connectionId) {
470
+ return {
471
+ name: `websocket-reverse:${connectionId}`,
472
+ send: (message) => this.callConnection(connectionId, message),
473
+ close: async () => undefined,
474
+ };
475
+ }
476
+ /**
477
+ * Call a procedure on a specific client (server-to-client RPC). It gives the value of the
478
+ * call, and fails with its error. It is a wrapper of `callConnection` (roadmap R24).
479
+ */
480
+ async callClient(connectionId, path, input, timeout = 30000) {
481
+ if (!this.channels.has(connectionId))
482
+ throw new Error(`Connection not found: ${connectionId}`);
483
+ const signal = AbortSignal.timeout(timeout);
484
+ const message = {
485
+ id: `sreq_${Date.now()}_${Math.random().toString(36).slice(2)}`,
486
+ method: pathToMethod(path),
487
+ payload: input,
488
+ metadata: { "procedure-timeout": timeout },
489
+ signal,
490
+ };
491
+ let last;
492
+ for await (const item of this.callConnection(connectionId, message)) {
493
+ if (item.status.type === "error") {
494
+ if (signal.aborted)
495
+ throw new Error(`Request timeout after ${timeout}ms`);
496
+ throw Object.assign(new Error(item.status.message), { code: item.status.code, retryable: item.status.retryable });
497
+ }
498
+ last = item;
499
+ }
500
+ return last?.payload;
573
501
  }
574
502
  /**
503
+ * Register a handler for new connections. /**
575
504
  * Register a handler for new connections.
576
505
  * Returns a function to unregister the handler.
577
506
  */
@@ -1 +1 @@
1
- {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../../src/adapters/websocket/server/transport.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../../src/adapters/websocket/server/transport.ts"],"names":[],"mappings":"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"}