trpc-uwebsockets 11.0.4 → 11.1.2
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/README.md +1 -1
- package/dist/___testHelpers.js +234 -0
- package/dist/___testHelpers.js.map +1 -0
- package/dist/websockets.js +2 -3
- package/dist/websockets.js.map +1 -1
- package/package.json +3 -3
- package/src/___testHelpers.ts +312 -0
- package/src/readme.spec.ts +1 -1
- package/src/server.spec.ts +279 -599
- package/src/websockets.ts +21 -21
- package/types/___testHelpers.d.ts +44 -0
- package/types/websockets.d.ts +18 -17
package/src/websockets.ts
CHANGED
|
@@ -84,6 +84,24 @@ export type WSConnectionHandlerOptions<TRouter extends AnyRouter> =
|
|
|
84
84
|
CreateWSSContextFn<TRouter>
|
|
85
85
|
>;
|
|
86
86
|
|
|
87
|
+
export type WebsocketsKeepAlive = {
|
|
88
|
+
/**
|
|
89
|
+
* Enable heartbeat messages
|
|
90
|
+
* @default false
|
|
91
|
+
*/
|
|
92
|
+
enabled: boolean;
|
|
93
|
+
/**
|
|
94
|
+
* Heartbeat interval in milliseconds
|
|
95
|
+
* @default 30_000
|
|
96
|
+
*/
|
|
97
|
+
pingMs?: number | undefined;
|
|
98
|
+
/**
|
|
99
|
+
* Terminate the WebSocket if no pong is received after this many milliseconds
|
|
100
|
+
* @default 5_000
|
|
101
|
+
*/
|
|
102
|
+
pongWaitMs?: number | undefined;
|
|
103
|
+
};
|
|
104
|
+
|
|
87
105
|
/**
|
|
88
106
|
* WebSockets handler definition
|
|
89
107
|
*/
|
|
@@ -99,25 +117,7 @@ export type WebsocketsHandlerOptions<TRouter extends AnyRouter> =
|
|
|
99
117
|
* @default false
|
|
100
118
|
*/
|
|
101
119
|
ssl?: boolean | undefined;
|
|
102
|
-
keepAlive?:
|
|
103
|
-
| {
|
|
104
|
-
/**
|
|
105
|
-
* Enable heartbeat messages
|
|
106
|
-
* @default false
|
|
107
|
-
*/
|
|
108
|
-
enabled: boolean;
|
|
109
|
-
/**
|
|
110
|
-
* Heartbeat interval in milliseconds
|
|
111
|
-
* @default 30_000
|
|
112
|
-
*/
|
|
113
|
-
pingMs?: number | undefined;
|
|
114
|
-
/**
|
|
115
|
-
* Terminate the WebSocket if no pong is received after this many milliseconds
|
|
116
|
-
* @default 5_000
|
|
117
|
-
*/
|
|
118
|
-
pongWaitMs?: number | undefined;
|
|
119
|
-
}
|
|
120
|
-
| undefined;
|
|
120
|
+
keepAlive?: WebsocketsKeepAlive | undefined;
|
|
121
121
|
/**
|
|
122
122
|
* Disable responding to ping messages from the client
|
|
123
123
|
* **Not recommended** - this is mainly used for testing
|
|
@@ -504,7 +504,7 @@ export function getWSConnectionHandler<TRouter extends AnyRouter>(
|
|
|
504
504
|
data.ctxCompleter = createCompleter();
|
|
505
505
|
|
|
506
506
|
const useConnectionParams =
|
|
507
|
-
|
|
507
|
+
data.url.searchParams.get('connectionParams') === '1';
|
|
508
508
|
|
|
509
509
|
try {
|
|
510
510
|
data.ctx = await createContext?.({
|
|
@@ -520,7 +520,7 @@ export function getWSConnectionHandler<TRouter extends AnyRouter>(
|
|
|
520
520
|
accept: null,
|
|
521
521
|
type: 'unknown',
|
|
522
522
|
signal: data.abortController.signal,
|
|
523
|
-
url: data.url,
|
|
523
|
+
url: data.url,
|
|
524
524
|
},
|
|
525
525
|
});
|
|
526
526
|
data.ctxCompleter.resolve();
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { AnyTRPCRouter } from '@trpc/server';
|
|
2
|
+
import { WebSocketBehaviorOptions, WebsocketsKeepAlive } from './websockets';
|
|
3
|
+
import uWs from 'uWebSockets.js';
|
|
4
|
+
import { CreateContextOptions } from './requestHandler';
|
|
5
|
+
import type { HTTPHeaders, WebSocketClientOptions } from '@trpc/client';
|
|
6
|
+
export interface ServerOptions<AppRouter extends AnyTRPCRouter> {
|
|
7
|
+
appRouter: AppRouter;
|
|
8
|
+
prefix?: string;
|
|
9
|
+
createContext?: (opts: CreateContextOptions) => Promise<any>;
|
|
10
|
+
uWsBehaviorOptions?: WebSocketBehaviorOptions;
|
|
11
|
+
keepAlive?: WebsocketsKeepAlive;
|
|
12
|
+
}
|
|
13
|
+
interface ClientOptions {
|
|
14
|
+
prefix?: string;
|
|
15
|
+
wsClientOptions?: Omit<WebSocketClientOptions, 'url'> | undefined;
|
|
16
|
+
queryParams?: Record<string, string> | undefined;
|
|
17
|
+
headers?: HTTPHeaders | undefined;
|
|
18
|
+
port: number;
|
|
19
|
+
}
|
|
20
|
+
export declare function testFactory<AppRouter extends AnyTRPCRouter>(serverOptions: ServerOptions<AppRouter>): {
|
|
21
|
+
server: uWs.TemplatedApp;
|
|
22
|
+
stop: () => void;
|
|
23
|
+
onServerErrorSpy: import("vitest").Mock<(...args: any[]) => any>;
|
|
24
|
+
port: number;
|
|
25
|
+
opts: ServerOptions<AppRouter>;
|
|
26
|
+
fetch(path: string, opts: RequestInit): Promise<Response>;
|
|
27
|
+
clientBatchStream(clientOptions?: Partial<ClientOptions> | undefined): {
|
|
28
|
+
client: import("@trpc/client").TRPCClient<AppRouter>;
|
|
29
|
+
orderedResults: number[];
|
|
30
|
+
};
|
|
31
|
+
clientBatch(clientOptions?: Partial<ClientOptions> | undefined): {
|
|
32
|
+
client: import("@trpc/client").TRPCClient<AppRouter>;
|
|
33
|
+
};
|
|
34
|
+
clientSse(clientOptions?: Partial<ClientOptions> | undefined): {
|
|
35
|
+
client: import("@trpc/client").TRPCClient<AppRouter>;
|
|
36
|
+
orderedResults: number[];
|
|
37
|
+
};
|
|
38
|
+
clientWs(clientOptions?: Partial<ClientOptions> | undefined): {
|
|
39
|
+
client: import("@trpc/client").TRPCClient<AppRouter>;
|
|
40
|
+
wsClient: import("@trpc/client/dist/links/wsLink/wsClient/wsClient").WsClient;
|
|
41
|
+
orderedResults: number[];
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
export {};
|
package/types/websockets.d.ts
CHANGED
|
@@ -21,6 +21,23 @@ export type CreateWSSContextFnOptions = NodeHTTPCreateContextFnOptions<Request,
|
|
|
21
21
|
};
|
|
22
22
|
export type CreateWSSContextFn<TRouter extends AnyRouter> = (opts: CreateWSSContextFnOptions) => MaybePromise<inferRouterContext<TRouter>>;
|
|
23
23
|
export type WSConnectionHandlerOptions<TRouter extends AnyRouter> = BaseHandlerOptions<TRouter, Request> & CreateContextCallback<inferRouterContext<TRouter>, CreateWSSContextFn<TRouter>>;
|
|
24
|
+
export type WebsocketsKeepAlive = {
|
|
25
|
+
/**
|
|
26
|
+
* Enable heartbeat messages
|
|
27
|
+
* @default false
|
|
28
|
+
*/
|
|
29
|
+
enabled: boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Heartbeat interval in milliseconds
|
|
32
|
+
* @default 30_000
|
|
33
|
+
*/
|
|
34
|
+
pingMs?: number | undefined;
|
|
35
|
+
/**
|
|
36
|
+
* Terminate the WebSocket if no pong is received after this many milliseconds
|
|
37
|
+
* @default 5_000
|
|
38
|
+
*/
|
|
39
|
+
pongWaitMs?: number | undefined;
|
|
40
|
+
};
|
|
24
41
|
/**
|
|
25
42
|
* WebSockets handler definition
|
|
26
43
|
*/
|
|
@@ -35,23 +52,7 @@ export type WebsocketsHandlerOptions<TRouter extends AnyRouter> = WSConnectionHa
|
|
|
35
52
|
* @default false
|
|
36
53
|
*/
|
|
37
54
|
ssl?: boolean | undefined;
|
|
38
|
-
keepAlive?:
|
|
39
|
-
/**
|
|
40
|
-
* Enable heartbeat messages
|
|
41
|
-
* @default false
|
|
42
|
-
*/
|
|
43
|
-
enabled: boolean;
|
|
44
|
-
/**
|
|
45
|
-
* Heartbeat interval in milliseconds
|
|
46
|
-
* @default 30_000
|
|
47
|
-
*/
|
|
48
|
-
pingMs?: number | undefined;
|
|
49
|
-
/**
|
|
50
|
-
* Terminate the WebSocket if no pong is received after this many milliseconds
|
|
51
|
-
* @default 5_000
|
|
52
|
-
*/
|
|
53
|
-
pongWaitMs?: number | undefined;
|
|
54
|
-
} | undefined;
|
|
55
|
+
keepAlive?: WebsocketsKeepAlive | undefined;
|
|
55
56
|
/**
|
|
56
57
|
* Disable responding to ping messages from the client
|
|
57
58
|
* **Not recommended** - this is mainly used for testing
|