@procedures/client 0.2.2 → 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.
- package/CHANGELOG.md +71 -0
- package/README.md +61 -38
- package/dist/.tsbuildinfo +1 -1
- package/dist/adapters/http/client/transport.d.ts.map +1 -1
- package/dist/adapters/http/client/transport.js +35 -3
- package/dist/adapters/http/client/transport.js.map +1 -1
- package/dist/adapters/http/client/types.d.ts +3 -2
- package/dist/adapters/http/client/types.d.ts.map +1 -1
- package/dist/adapters/http/server/transport.d.ts +2 -2
- package/dist/adapters/http/server/transport.d.ts.map +1 -1
- package/dist/adapters/http/server/transport.js +53 -20
- package/dist/adapters/http/server/transport.js.map +1 -1
- package/dist/adapters/http/shared/headers.d.ts +1 -1
- package/dist/adapters/http/shared/headers.d.ts.map +1 -1
- package/dist/adapters/http/shared/headers.js +7 -6
- package/dist/adapters/http/shared/headers.js.map +1 -1
- package/dist/adapters/local/client/transport.d.ts +3 -0
- package/dist/adapters/local/client/transport.d.ts.map +1 -1
- package/dist/adapters/local/client/transport.js +63 -4
- package/dist/adapters/local/client/transport.js.map +1 -1
- package/dist/adapters/local/client/types.d.ts +15 -0
- package/dist/adapters/local/client/types.d.ts.map +1 -1
- package/dist/adapters/local/client/types.js.map +1 -1
- package/dist/adapters/mock/client/transport.d.ts +3 -2
- package/dist/adapters/mock/client/transport.d.ts.map +1 -1
- package/dist/adapters/mock/client/transport.js +8 -5
- package/dist/adapters/mock/client/transport.js.map +1 -1
- package/dist/adapters/mock/client/types.d.ts +7 -6
- package/dist/adapters/mock/client/types.d.ts.map +1 -1
- package/dist/adapters/port/transport.d.ts +62 -0
- package/dist/adapters/port/transport.d.ts.map +1 -0
- package/dist/adapters/port/transport.js +94 -0
- package/dist/adapters/port/transport.js.map +1 -0
- package/dist/adapters/websocket/client/index.d.ts +1 -1
- package/dist/adapters/websocket/client/index.d.ts.map +1 -1
- package/dist/adapters/websocket/client/index.js.map +1 -1
- package/dist/adapters/websocket/client/transport.d.ts +47 -7
- package/dist/adapters/websocket/client/transport.d.ts.map +1 -1
- package/dist/adapters/websocket/client/transport.js +213 -67
- package/dist/adapters/websocket/client/transport.js.map +1 -1
- package/dist/adapters/websocket/client/types.d.ts +70 -21
- package/dist/adapters/websocket/client/types.d.ts.map +1 -1
- package/dist/adapters/websocket/client/types.js.map +1 -1
- package/dist/adapters/websocket/server/transport.d.ts +65 -24
- package/dist/adapters/websocket/server/transport.d.ts.map +1 -1
- package/dist/adapters/websocket/server/transport.js +192 -263
- package/dist/adapters/websocket/server/transport.js.map +1 -1
- package/dist/adapters/websocket/server/types.d.ts +20 -1
- package/dist/adapters/websocket/server/types.d.ts.map +1 -1
- package/dist/adapters/websocket/shared/rpc.d.ts +129 -0
- package/dist/adapters/websocket/shared/rpc.d.ts.map +1 -0
- package/dist/adapters/websocket/shared/rpc.js +425 -0
- package/dist/adapters/websocket/shared/rpc.js.map +1 -0
- package/dist/browser.d.ts +29 -7
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +26 -3
- package/dist/browser.js.map +1 -1
- package/dist/client/call-types.d.ts +10 -10
- package/dist/client/call-types.d.ts.map +1 -1
- package/dist/client/call-types.js +1 -6
- package/dist/client/call-types.js.map +1 -1
- package/dist/client/client.d.ts +6 -1
- package/dist/client/client.d.ts.map +1 -1
- package/dist/client/client.js +23 -9
- package/dist/client/client.js.map +1 -1
- package/dist/client/deadline.d.ts +38 -0
- package/dist/client/deadline.d.ts.map +1 -0
- package/dist/client/deadline.js +60 -0
- package/dist/client/deadline.js.map +1 -0
- package/dist/client/errors/factory.d.ts.map +1 -1
- package/dist/client/errors/factory.js +11 -7
- package/dist/client/errors/factory.js.map +1 -1
- package/dist/client/index.d.ts +9 -2
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +8 -2
- package/dist/client/index.js.map +1 -1
- package/dist/client/middleware/cache.d.ts +19 -5
- package/dist/client/middleware/cache.d.ts.map +1 -1
- package/dist/client/middleware/cache.js +106 -18
- package/dist/client/middleware/cache.js.map +1 -1
- package/dist/client/middleware/circuit-breaker.d.ts +28 -10
- package/dist/client/middleware/circuit-breaker.d.ts.map +1 -1
- package/dist/client/middleware/circuit-breaker.js +35 -24
- package/dist/client/middleware/circuit-breaker.js.map +1 -1
- package/dist/client/middleware/contexts.d.ts +16 -10
- package/dist/client/middleware/contexts.d.ts.map +1 -1
- package/dist/client/middleware/contexts.js.map +1 -1
- package/dist/client/middleware/items.d.ts +31 -2
- package/dist/client/middleware/items.d.ts.map +1 -1
- package/dist/client/middleware/items.js +86 -6
- package/dist/client/middleware/items.js.map +1 -1
- package/dist/client/middleware/lru.d.ts +2 -0
- package/dist/client/middleware/lru.d.ts.map +1 -1
- package/dist/client/middleware/lru.js +11 -0
- package/dist/client/middleware/lru.js.map +1 -1
- package/dist/client/middleware/rate-limit.d.ts +7 -6
- package/dist/client/middleware/rate-limit.d.ts.map +1 -1
- package/dist/client/middleware/rate-limit.js +9 -6
- package/dist/client/middleware/rate-limit.js.map +1 -1
- package/dist/client/middleware/resilience.d.ts +61 -0
- package/dist/client/middleware/resilience.d.ts.map +1 -0
- package/dist/client/middleware/resilience.js +59 -0
- package/dist/client/middleware/resilience.js.map +1 -0
- package/dist/client/middleware/retry.d.ts +45 -11
- package/dist/client/middleware/retry.d.ts.map +1 -1
- package/dist/client/middleware/retry.js +102 -22
- package/dist/client/middleware/retry.js.map +1 -1
- package/dist/client/middleware/timeout.d.ts +15 -12
- package/dist/client/middleware/timeout.d.ts.map +1 -1
- package/dist/client/middleware/timeout.js +46 -37
- package/dist/client/middleware/timeout.js.map +1 -1
- package/dist/client/middleware/tracing.d.ts.map +1 -1
- package/dist/client/middleware/tracing.js +11 -3
- package/dist/client/middleware/tracing.js.map +1 -1
- package/dist/client/types.d.ts +9 -1
- package/dist/client/types.d.ts.map +1 -1
- package/dist/client/types.js.map +1 -1
- package/dist/clock.d.ts +19 -0
- package/dist/clock.d.ts.map +1 -0
- package/dist/clock.js +18 -0
- package/dist/clock.js.map +1 -0
- package/dist/duration.d.ts +37 -0
- package/dist/duration.d.ts.map +1 -0
- package/dist/duration.js +44 -0
- package/dist/duration.js.map +1 -0
- package/dist/machines.d.ts +90 -0
- package/dist/machines.d.ts.map +1 -0
- package/dist/machines.js +127 -0
- package/dist/machines.js.map +1 -0
- package/dist/procedures/capability.d.ts +3 -6
- package/dist/procedures/capability.d.ts.map +1 -1
- package/dist/procedures/capability.js +11 -9
- package/dist/procedures/capability.js.map +1 -1
- package/dist/procedures/collection/index.d.ts +3 -3
- package/dist/procedures/collection/index.d.ts.map +1 -1
- package/dist/procedures/collection/index.js +1 -1
- package/dist/procedures/collection/index.js.map +1 -1
- package/dist/procedures/collection/procedures.d.ts.map +1 -1
- package/dist/procedures/collection/procedures.js +49 -1
- package/dist/procedures/collection/procedures.js.map +1 -1
- package/dist/procedures/collection/schemas.d.ts +33 -0
- package/dist/procedures/collection/schemas.d.ts.map +1 -1
- package/dist/procedures/collection/schemas.js +68 -0
- package/dist/procedures/collection/schemas.js.map +1 -1
- package/dist/procedures/collection/storage.d.ts +37 -0
- package/dist/procedures/collection/storage.d.ts.map +1 -1
- package/dist/procedures/core/array.d.ts.map +1 -1
- package/dist/procedures/core/array.js +26 -15
- package/dist/procedures/core/array.js.map +1 -1
- package/dist/procedures/core/index.d.ts.map +1 -1
- package/dist/procedures/core/index.js +8 -0
- package/dist/procedures/core/index.js.map +1 -1
- package/dist/procedures/core/meta.d.ts.map +1 -1
- package/dist/procedures/core/meta.js +2 -1
- package/dist/procedures/core/meta.js.map +1 -1
- package/dist/procedures/core/object.d.ts.map +1 -1
- package/dist/procedures/core/object.js +42 -13
- package/dist/procedures/core/object.js.map +1 -1
- package/dist/procedures/core/operands.d.ts.map +1 -1
- package/dist/procedures/core/operands.js +6 -1
- package/dist/procedures/core/operands.js.map +1 -1
- package/dist/procedures/core/string.d.ts.map +1 -1
- package/dist/procedures/core/string.js +4 -2
- package/dist/procedures/core/string.js.map +1 -1
- package/dist/procedures/define-procedure.d.ts +19 -7
- package/dist/procedures/define-procedure.d.ts.map +1 -1
- package/dist/procedures/define-procedure.js +66 -21
- package/dist/procedures/define-procedure.js.map +1 -1
- package/dist/procedures/effects.d.ts +16 -0
- package/dist/procedures/effects.d.ts.map +1 -1
- package/dist/procedures/effects.js +33 -0
- package/dist/procedures/effects.js.map +1 -1
- package/dist/procedures/idempotency.d.ts +73 -0
- package/dist/procedures/idempotency.d.ts.map +1 -0
- package/dist/procedures/idempotency.js +131 -0
- package/dist/procedures/idempotency.js.map +1 -0
- package/dist/procedures/index.d.ts +7 -3
- package/dist/procedures/index.d.ts.map +1 -1
- package/dist/procedures/index.js +6 -2
- package/dist/procedures/index.js.map +1 -1
- package/dist/procedures/interceptors.d.ts +17 -4
- package/dist/procedures/interceptors.d.ts.map +1 -1
- package/dist/procedures/interceptors.js +18 -7
- package/dist/procedures/interceptors.js.map +1 -1
- package/dist/procedures/invoke.d.ts +15 -3
- package/dist/procedures/invoke.d.ts.map +1 -1
- package/dist/procedures/invoke.js +8 -3
- package/dist/procedures/invoke.js.map +1 -1
- package/dist/procedures/manifest.d.ts +83 -0
- package/dist/procedures/manifest.d.ts.map +1 -0
- package/dist/procedures/manifest.js +90 -0
- package/dist/procedures/manifest.js.map +1 -0
- package/dist/procedures/runtime-programs.d.ts +19 -0
- package/dist/procedures/runtime-programs.d.ts.map +1 -0
- package/dist/procedures/runtime-programs.js +24 -0
- package/dist/procedures/runtime-programs.js.map +1 -0
- package/dist/procedures/types.d.ts +20 -1
- package/dist/procedures/types.d.ts.map +1 -1
- package/dist/procedures/types.js.map +1 -1
- package/dist/protocol.d.ts +40 -0
- package/dist/protocol.d.ts.map +1 -0
- package/dist/protocol.js +58 -0
- package/dist/protocol.js.map +1 -0
- package/dist/server/host-policy.d.ts +4 -3
- package/dist/server/host-policy.d.ts.map +1 -1
- package/dist/server/host-policy.js +6 -3
- package/dist/server/host-policy.js.map +1 -1
- package/dist/server/host-procedures.d.ts +31 -0
- package/dist/server/host-procedures.d.ts.map +1 -0
- package/dist/server/host-procedures.js +75 -0
- package/dist/server/host-procedures.js.map +1 -0
- package/dist/server/index.d.ts +3 -3
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +1 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/procedure-server.d.ts +110 -4
- package/dist/server/procedure-server.d.ts.map +1 -1
- package/dist/server/procedure-server.js +269 -17
- package/dist/server/procedure-server.js.map +1 -1
- package/dist/server/request-auth.d.ts +19 -0
- package/dist/server/request-auth.d.ts.map +1 -0
- package/dist/server/request-auth.js +32 -0
- package/dist/server/request-auth.js.map +1 -0
- package/dist/server/types.d.ts +32 -0
- package/dist/server/types.d.ts.map +1 -1
- package/dist/server/types.js.map +1 -1
- package/dist/timers.d.ts +60 -0
- package/dist/timers.d.ts.map +1 -0
- package/dist/timers.js +33 -0
- package/dist/timers.js.map +1 -0
- package/dist/tracing/traceparent.d.ts +26 -0
- package/dist/tracing/traceparent.d.ts.map +1 -0
- package/dist/tracing/traceparent.js +53 -0
- package/dist/tracing/traceparent.js.map +1 -0
- package/package.json +7 -1
- package/src/adapters/http/client/transport.ts +31 -3
- package/src/adapters/http/client/types.ts +3 -2
- package/src/adapters/http/server/transport.ts +60 -24
- package/src/adapters/http/shared/headers.ts +7 -6
- package/src/adapters/local/client/transport.ts +70 -5
- package/src/adapters/local/client/types.ts +18 -0
- package/src/adapters/mock/client/transport.ts +9 -6
- package/src/adapters/mock/client/types.ts +7 -6
- package/src/adapters/port/transport.ts +124 -0
- package/src/adapters/websocket/client/index.ts +1 -0
- package/src/adapters/websocket/client/transport.ts +232 -73
- package/src/adapters/websocket/client/types.ts +80 -21
- package/src/adapters/websocket/server/transport.ts +199 -301
- package/src/adapters/websocket/server/types.ts +20 -1
- package/src/adapters/websocket/shared/rpc.ts +453 -0
- package/src/browser.ts +51 -3
- package/src/client/call-types.ts +10 -14
- package/src/client/client.ts +28 -9
- package/src/client/deadline.ts +64 -0
- package/src/client/errors/factory.ts +12 -8
- package/src/client/index.ts +21 -3
- package/src/client/middleware/cache.ts +120 -23
- package/src/client/middleware/circuit-breaker.ts +65 -35
- package/src/client/middleware/contexts.ts +17 -10
- package/src/client/middleware/items.ts +101 -6
- package/src/client/middleware/lru.ts +12 -0
- package/src/client/middleware/rate-limit.ts +9 -7
- package/src/client/middleware/resilience.ts +81 -0
- package/src/client/middleware/retry.ts +146 -34
- package/src/client/middleware/timeout.ts +55 -46
- package/src/client/middleware/tracing.ts +13 -4
- package/src/client/types.ts +9 -1
- package/src/clock.ts +21 -0
- package/src/duration.ts +56 -0
- package/src/machines.ts +186 -0
- package/src/procedures/capability.ts +11 -9
- package/src/procedures/collection/index.ts +9 -1
- package/src/procedures/collection/procedures.ts +57 -0
- package/src/procedures/collection/schemas.ts +110 -0
- package/src/procedures/collection/storage.ts +38 -0
- package/src/procedures/core/array.ts +27 -16
- package/src/procedures/core/index.ts +8 -0
- package/src/procedures/core/meta.ts +2 -1
- package/src/procedures/core/object.ts +48 -14
- package/src/procedures/core/operands.ts +7 -0
- package/src/procedures/core/string.ts +4 -2
- package/src/procedures/define-procedure.ts +82 -24
- package/src/procedures/effects.ts +35 -0
- package/src/procedures/idempotency.ts +152 -0
- package/src/procedures/index.ts +18 -2
- package/src/procedures/interceptors.ts +28 -11
- package/src/procedures/invoke.ts +19 -5
- package/src/procedures/manifest.ts +158 -0
- package/src/procedures/runtime-programs.ts +27 -0
- package/src/procedures/types.ts +20 -1
- package/src/protocol.ts +97 -0
- package/src/server/host-policy.ts +8 -5
- package/src/server/host-procedures.ts +102 -0
- package/src/server/index.ts +5 -2
- package/src/server/procedure-server.ts +324 -10
- package/src/server/request-auth.ts +35 -0
- package/src/server/types.ts +37 -0
- package/src/timers.ts +82 -0
- package/src/tracing/traceparent.ts +61 -0
|
@@ -3,8 +3,12 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Type definitions for WebSocket client adapter.
|
|
5
5
|
*/
|
|
6
|
+
import type { Duration } from "../../../duration.js";
|
|
7
|
+
import type { Clock } from "../../../clock.js";
|
|
8
|
+
import type { MachineTransition } from "../../../machines.js";
|
|
9
|
+
import type { RequestHandler } from "../../../server/types.js";
|
|
6
10
|
/**
|
|
7
|
-
* WebSocket client transport options.
|
|
11
|
+
* WebSocket client transport options. Each time is a `Duration` (roadmap R11).
|
|
8
12
|
*/
|
|
9
13
|
export interface WebSocketTransportOptions {
|
|
10
14
|
/**
|
|
@@ -27,32 +31,41 @@ export interface WebSocketTransportOptions {
|
|
|
27
31
|
*/
|
|
28
32
|
maxAttempts?: number;
|
|
29
33
|
/**
|
|
30
|
-
* Initial delay before reconnecting
|
|
31
|
-
* @default
|
|
34
|
+
* Initial delay before reconnecting.
|
|
35
|
+
* @default 1 second
|
|
32
36
|
*/
|
|
33
|
-
initialDelay?:
|
|
37
|
+
initialDelay?: Duration;
|
|
34
38
|
/**
|
|
35
|
-
* Maximum delay between reconnection attempts
|
|
36
|
-
* @default
|
|
39
|
+
* Maximum delay between reconnection attempts.
|
|
40
|
+
* @default 30 seconds
|
|
37
41
|
*/
|
|
38
|
-
maxDelay?:
|
|
42
|
+
maxDelay?: Duration;
|
|
39
43
|
/**
|
|
40
44
|
* Backoff multiplier for reconnection delay.
|
|
41
45
|
* @default 1.5
|
|
42
46
|
*/
|
|
43
47
|
backoffMultiplier?: number;
|
|
48
|
+
/**
|
|
49
|
+
* The random part of each reconnect delay, from 0 to 1. With 1 (full jitter), the delay is a
|
|
50
|
+
* random time from 0 to the backoff delay, so many clients that lost one server do not
|
|
51
|
+
* reconnect at the same time (roadmap R3). 0 gives the backoff delay exactly.
|
|
52
|
+
* @default 1
|
|
53
|
+
*/
|
|
54
|
+
jitter?: number;
|
|
44
55
|
};
|
|
45
56
|
/**
|
|
46
|
-
* Connection timeout
|
|
47
|
-
*
|
|
57
|
+
* Connection timeout: how long to wait for the WebSocket to open. A handshake that takes
|
|
58
|
+
* longer closes the socket, and the transport reconnects (roadmap R3: before, an address that
|
|
59
|
+
* never answered kept the socket in CONNECTING).
|
|
60
|
+
* @default 10 seconds
|
|
48
61
|
*/
|
|
49
|
-
connectionTimeout?:
|
|
62
|
+
connectionTimeout?: Duration;
|
|
50
63
|
/**
|
|
51
|
-
* Request timeout
|
|
64
|
+
* Request timeout: how long to wait for the response to one request.
|
|
52
65
|
* (Before, requests used connectionTimeout, so every call was capped at 10s.)
|
|
53
|
-
* @default
|
|
66
|
+
* @default 30 seconds
|
|
54
67
|
*/
|
|
55
|
-
requestTimeout?:
|
|
68
|
+
requestTimeout?: Duration;
|
|
56
69
|
/**
|
|
57
70
|
* The number of stream items that the transport holds for a reader that has not taken them.
|
|
58
71
|
* The server sends no more items until the reader takes some (deep dive TRN-3).
|
|
@@ -69,15 +82,21 @@ export interface WebSocketTransportOptions {
|
|
|
69
82
|
*/
|
|
70
83
|
enabled?: boolean;
|
|
71
84
|
/**
|
|
72
|
-
* Heartbeat interval
|
|
73
|
-
* @default
|
|
85
|
+
* Heartbeat interval.
|
|
86
|
+
* @default 20 seconds (`TIMER_DEFAULTS.webSocketClient.heartbeatIntervalMs`)
|
|
87
|
+
*/
|
|
88
|
+
interval?: Duration;
|
|
89
|
+
/**
|
|
90
|
+
* Heartbeat timeout.
|
|
91
|
+
* @default 5 seconds
|
|
74
92
|
*/
|
|
75
|
-
|
|
93
|
+
timeout?: Duration;
|
|
76
94
|
/**
|
|
77
|
-
*
|
|
78
|
-
*
|
|
95
|
+
* The number of pings without a pong, one after the other, that drop the connection. The
|
|
96
|
+
* time to find a dead server is at most `misses × interval + timeout`.
|
|
97
|
+
* @default 1
|
|
79
98
|
*/
|
|
80
|
-
|
|
99
|
+
misses?: number;
|
|
81
100
|
};
|
|
82
101
|
/**
|
|
83
102
|
* Callback when connection is established.
|
|
@@ -97,15 +116,43 @@ export interface WebSocketTransportOptions {
|
|
|
97
116
|
onError?: (error: Error) => void;
|
|
98
117
|
/**
|
|
99
118
|
* Handler for server-initiated procedure calls.
|
|
100
|
-
* Called when the server wants to call a procedure on this client.
|
|
119
|
+
* Called when the server wants to call a procedure on this client. It gets the path and the
|
|
120
|
+
* input, and gives the value. `serve` is the full form (roadmap R24).
|
|
101
121
|
*/
|
|
102
122
|
onServerRequest?: ServerRequestHandler;
|
|
123
|
+
/**
|
|
124
|
+
* The handler of the calls that the server sends to this client (roadmap R24), for example a
|
|
125
|
+
* `ProcedureServer` with the registry of the client. A call gets the same frames as a call of
|
|
126
|
+
* the client: streaming, credit, cancel, the signal and the deadline (`procedure-timeout`). The
|
|
127
|
+
* server reaches it with `callConnection()` or `transportFor()`. Without it (and without
|
|
128
|
+
* `onServerRequest`), the client answers each call of the server with `NOT_FOUND`.
|
|
129
|
+
*/
|
|
130
|
+
serve?: RequestHandler;
|
|
103
131
|
/**
|
|
104
132
|
* Handler for subscription events.
|
|
105
133
|
* Called when the server pushes an event to a subscribed topic.
|
|
106
134
|
*/
|
|
107
135
|
onEvent?: EventHandler;
|
|
136
|
+
/**
|
|
137
|
+
* The clock of each timer of the transport: the handshake, the requests, the heartbeat and the
|
|
138
|
+
* reconnect (roadmap R35). The default is the clock of the platform. A test gives a fake clock.
|
|
139
|
+
*/
|
|
140
|
+
clock?: Clock;
|
|
141
|
+
/**
|
|
142
|
+
* This function gets each change of the state, with its event, as a transition of
|
|
143
|
+
* `WEBSOCKET_CONNECTION_MACHINE` (roadmap R35). A test replays them against the document.
|
|
144
|
+
*/
|
|
145
|
+
onTransition?: (transition: MachineTransition) => void;
|
|
146
|
+
/**
|
|
147
|
+
* The class of the sockets. The default is the global `WebSocket`. In Node, give the `WebSocket`
|
|
148
|
+
* of the `ws` package: a drop then ends its socket at once with `terminate()`. The global
|
|
149
|
+
* `WebSocket` has only `close()`, which waits for the answer of the peer. With a dead peer, the
|
|
150
|
+
* socket stays open until the kernel stops it, at most 15 minutes (the harness cells of R36).
|
|
151
|
+
*/
|
|
152
|
+
webSocket?: WebSocketClass;
|
|
108
153
|
}
|
|
154
|
+
/** A class of WebSockets: the global `WebSocket`, or the `WebSocket` of the `ws` package. */
|
|
155
|
+
export type WebSocketClass = new (url: string) => unknown;
|
|
109
156
|
/**
|
|
110
157
|
* WebSocket connection state.
|
|
111
158
|
*/
|
|
@@ -123,7 +170,9 @@ export interface WebSocketMessage<T = unknown> {
|
|
|
123
170
|
/** Message ID for request/response matching */
|
|
124
171
|
id: string;
|
|
125
172
|
/** Message type */
|
|
126
|
-
type: "request" | "response" | "error" | "stream" | "cancel" | "credit" | "ping" | "pong" | "server-request" | "server-response" | "event";
|
|
173
|
+
type: "hello" | "request" | "response" | "error" | "stream" | "cancel" | "credit" | "ping" | "pong" | "server-request" | "server-response" | "event";
|
|
174
|
+
/** The protocol version of a `hello` frame (roadmap R25). */
|
|
175
|
+
protocol?: number;
|
|
127
176
|
/** RPC method (for requests) */
|
|
128
177
|
method?: {
|
|
129
178
|
service: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/adapters/websocket/client/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC;;;OAGG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;OAEG;IACH,SAAS,CAAC,EAAE;QACV;;;WAGG;QACH,OAAO,CAAC,EAAE,OAAO,CAAC;QAElB;;;WAGG;QACH,WAAW,CAAC,EAAE,MAAM,CAAC;QAErB;;;WAGG;QACH,YAAY,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/adapters/websocket/client/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/adapters/websocket/client/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/adapters/websocket/client/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAmLH;;GAEG;AACH,MAAM,CAAN,IAAY,cAMX;AAND,WAAY,cAAc;IACxB,2CAAyB,CAAA;IACzB,yCAAuB,CAAA;IACvB,iDAA+B,CAAA;IAC/B,+CAA6B,CAAA;IAC7B,+CAA6B,CAAA;AAC/B,CAAC,EANW,cAAc,KAAd,cAAc,QAMzB"}
|
|
@@ -5,24 +5,64 @@
|
|
|
5
5
|
* Supports bidirectional streaming and persistent connections.
|
|
6
6
|
*/
|
|
7
7
|
import type { ServerTransport } from "../../../server/types.js";
|
|
8
|
-
import type {
|
|
8
|
+
import type { Message, ResponseItem, Transport } from "../../../client/types.js";
|
|
9
|
+
import type { RequestHandler } from "../../../server/types.js";
|
|
9
10
|
import type { WebSocketServerTransportOptions, WebSocketMessage, TrackedConnection, ConnectionEventHandler } from "./types.js";
|
|
11
|
+
/**
|
|
12
|
+
* WebSocket server transport adapter.
|
|
13
|
+
*
|
|
14
|
+
* Provides persistent, bidirectional RPC over WebSocket.
|
|
15
|
+
* Perfect for real-time updates and streaming responses.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* import { createServer } from "http";
|
|
20
|
+
* const httpServer = createServer();
|
|
21
|
+
*
|
|
22
|
+
* const server = new Server();
|
|
23
|
+
* const wsTransport = new WebSocketServerTransport(server, {
|
|
24
|
+
* server: httpServer,
|
|
25
|
+
* path: "/ws",
|
|
26
|
+
* authenticate: async (req) => {
|
|
27
|
+
* // Verify token from query string or headers
|
|
28
|
+
* return true;
|
|
29
|
+
* }
|
|
30
|
+
* });
|
|
31
|
+
*
|
|
32
|
+
* await wsTransport.start();
|
|
33
|
+
* httpServer.listen(3000);
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
10
36
|
export declare class WebSocketServerTransport implements ServerTransport {
|
|
11
37
|
readonly name = "websocket";
|
|
12
38
|
private wss;
|
|
13
39
|
private options;
|
|
14
40
|
private server;
|
|
15
41
|
private connections;
|
|
42
|
+
/** The time until the first frame of a call to a client, in milliseconds (R24) */
|
|
43
|
+
private readonly reverseRequestTimeoutMs;
|
|
44
|
+
/** The heartbeat of the server, or undefined when it is off (roadmap R3) */
|
|
45
|
+
private readonly heartbeat;
|
|
46
|
+
private heartbeatTimer;
|
|
47
|
+
/** The pings without a pong, one after the other, of each connection */
|
|
48
|
+
private readonly missedPongs;
|
|
16
49
|
private trackedConnections;
|
|
17
|
-
private pendingRequests;
|
|
18
50
|
private connectionCounter;
|
|
19
|
-
|
|
20
|
-
|
|
51
|
+
/**
|
|
52
|
+
* The calls of each connection in the two directions (roadmap R24): the calls that the client
|
|
53
|
+
* sends (served by the server) and the calls that the server sends to the client.
|
|
54
|
+
*/
|
|
55
|
+
private readonly channels;
|
|
21
56
|
/** The browser checks of each connection (see `server/browser-guard.ts`) */
|
|
22
57
|
private readonly guard;
|
|
23
58
|
private connectHandlers;
|
|
24
59
|
private disconnectHandlers;
|
|
25
|
-
constructor(server:
|
|
60
|
+
constructor(server: RequestHandler, options: WebSocketServerTransportOptions);
|
|
61
|
+
/**
|
|
62
|
+
* One beat of the heartbeat: a connection that missed too many pongs closes at once (its close
|
|
63
|
+
* event aborts its requests), and each other connection gets a ping.
|
|
64
|
+
*/
|
|
65
|
+
private beat;
|
|
26
66
|
start(): Promise<void>;
|
|
27
67
|
stop(): Promise<void>;
|
|
28
68
|
isRunning(): boolean;
|
|
@@ -31,32 +71,20 @@ export declare class WebSocketServerTransport implements ServerTransport {
|
|
|
31
71
|
*/
|
|
32
72
|
private handleConnection;
|
|
33
73
|
/**
|
|
34
|
-
*
|
|
35
|
-
*
|
|
74
|
+
* The server request of a `request` frame of a connection: the metadata of the frame and of the
|
|
75
|
+
* connection, the signal of the call, and the credentials of the upgrade (roadmap R18).
|
|
36
76
|
*/
|
|
37
|
-
private
|
|
38
|
-
private rejectPendingFor;
|
|
77
|
+
private requestOf;
|
|
39
78
|
/**
|
|
40
|
-
* Handle WebSocket message
|
|
79
|
+
* Handle WebSocket message: a heartbeat, a frame of a call that the server sent (a response,
|
|
80
|
+
* an error, a stream), or a frame of a call of the client (a request, a cancel, a credit).
|
|
41
81
|
*/
|
|
42
82
|
private handleMessage;
|
|
43
|
-
/**
|
|
44
|
-
* Send a stream response (BUGS-2026-07 H5): one "stream" frame for each item, then a frame
|
|
45
|
-
* with `stream.done`. An error of the stream ends it with an "error" frame. When the signal
|
|
46
|
-
* aborts (a cancel message, a closed connection), the loop stops, and the stream's handler
|
|
47
|
-
* gets return().
|
|
48
|
-
*
|
|
49
|
-
* Flow control (deep dive TRN-3): the stream takes its next item only when the client has
|
|
50
|
-
* credit for it (when the request carried credit), and waits while the connection's send
|
|
51
|
-
* buffer holds more than `highWaterMark` bytes.
|
|
52
|
-
*/
|
|
53
|
-
private sendStream;
|
|
54
83
|
/**
|
|
55
84
|
* Send a frame. When the connection's send buffer is past the high-water mark, wait until
|
|
56
85
|
* the socket has written this frame, or the signal aborts.
|
|
57
86
|
*/
|
|
58
87
|
private sendWithBackpressure;
|
|
59
|
-
private sendResponse;
|
|
60
88
|
/**
|
|
61
89
|
* Send error to client.
|
|
62
90
|
*/
|
|
@@ -86,11 +114,24 @@ export declare class WebSocketServerTransport implements ServerTransport {
|
|
|
86
114
|
*/
|
|
87
115
|
sendToConnection(connectionId: string, message: WebSocketMessage): void;
|
|
88
116
|
/**
|
|
89
|
-
*
|
|
90
|
-
*
|
|
117
|
+
* Send a call to a client (roadmap R24): the same frames as the calls of the client, with
|
|
118
|
+
* streaming, credit, cancel, the signal and the remaining time of the call. The client serves it
|
|
119
|
+
* with its own handler (the `serve` option of `WebSocketTransport`). An unknown connection gives a
|
|
120
|
+
* `CONNECTION_NOT_FOUND` error item.
|
|
121
|
+
*/
|
|
122
|
+
callConnection<TReq, TRes>(connectionId: string, message: Message<TReq>): AsyncIterable<ResponseItem<TRes>>;
|
|
123
|
+
/**
|
|
124
|
+
* A transport to one client: a `Client` over it calls the procedures that the client serves,
|
|
125
|
+
* with each client middleware (retry, timeouts) of the caller (roadmap R24).
|
|
126
|
+
*/
|
|
127
|
+
transportFor(connectionId: string): Transport;
|
|
128
|
+
/**
|
|
129
|
+
* Call a procedure on a specific client (server-to-client RPC). It gives the value of the
|
|
130
|
+
* call, and fails with its error. It is a wrapper of `callConnection` (roadmap R24).
|
|
91
131
|
*/
|
|
92
132
|
callClient(connectionId: string, path: string[], input: unknown, timeout?: number): Promise<unknown>;
|
|
93
133
|
/**
|
|
134
|
+
* Register a handler for new connections. /**
|
|
94
135
|
* Register a handler for new connections.
|
|
95
136
|
* Returns a function to unregister the handler.
|
|
96
137
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../../../src/adapters/websocket/server/transport.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../../../src/adapters/websocket/server/transport.ts"],"names":[],"mappings":"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"}
|