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/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
- new URL(data.req.url).searchParams.get('connectionParams') === '1';
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, // was null
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 {};
@@ -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