trpc-uwebsockets 11.0.2 → 11.0.4
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/dist/fetchCompat.js +35 -23
- package/dist/fetchCompat.js.map +1 -1
- package/dist/websockets.js +89 -94
- package/dist/websockets.js.map +1 -1
- package/package.json +7 -7
- package/src/fetchCompat.ts +44 -30
- package/src/fetchRequest.spec.ts +92 -11
- package/src/server.spec.ts +22 -12
- package/src/websockets.ts +116 -111
- package/types/fetchCompat.d.ts +1 -0
- package/types/websockets.d.ts +13 -3
package/dist/fetchCompat.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.decorateHttpResponse = decorateHttpResponse;
|
|
4
|
+
exports.uWsToRequestNoBody = uWsToRequestNoBody;
|
|
4
5
|
exports.uWsToRequest = uWsToRequest;
|
|
5
6
|
exports.createURL = createURL;
|
|
6
7
|
exports.uWsSendResponse = uWsSendResponse;
|
|
@@ -12,6 +13,18 @@ function decorateHttpResponse(res, ssl = false) {
|
|
|
12
13
|
resDecorated.ssl = ssl;
|
|
13
14
|
return resDecorated;
|
|
14
15
|
}
|
|
16
|
+
function uWsToRequestNoBody(req, res) {
|
|
17
|
+
const headers = createHeaders(req);
|
|
18
|
+
const method = req.getCaseSensitiveMethod().toUpperCase();
|
|
19
|
+
const isSsl = res.ssl;
|
|
20
|
+
const url = createURL(req, isSsl ? 'https' : 'http');
|
|
21
|
+
const init = {
|
|
22
|
+
headers: headers,
|
|
23
|
+
method: method,
|
|
24
|
+
};
|
|
25
|
+
const request = new Request(url, init);
|
|
26
|
+
return request;
|
|
27
|
+
}
|
|
15
28
|
function uWsToRequest(req, res, opts) {
|
|
16
29
|
const ac = new AbortController();
|
|
17
30
|
const onAbort = () => {
|
|
@@ -74,37 +87,36 @@ function createBody(res, opts) {
|
|
|
74
87
|
let hasClosed = false;
|
|
75
88
|
return new ReadableStream({
|
|
76
89
|
start(controller) {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
if (size == 0 && ab.byteLength == 0 && isLast) {
|
|
80
|
-
onEnd();
|
|
90
|
+
res.onData((tempChunk, isLast) => {
|
|
91
|
+
if (hasClosed)
|
|
81
92
|
return;
|
|
82
|
-
|
|
83
|
-
|
|
93
|
+
// This copies the buffer *immediately* and avoids using a detached buffer
|
|
94
|
+
const chunk = new Uint8Array(tempChunk.byteLength);
|
|
95
|
+
chunk.set(new Uint8Array(tempChunk)); // must be done before enqueue
|
|
96
|
+
size += chunk.byteLength;
|
|
84
97
|
if (!opts.maxBodySize || size <= opts.maxBodySize) {
|
|
85
|
-
controller.enqueue(
|
|
98
|
+
controller.enqueue(chunk);
|
|
86
99
|
if (isLast) {
|
|
87
|
-
|
|
100
|
+
hasClosed = true;
|
|
101
|
+
controller.close();
|
|
88
102
|
}
|
|
89
|
-
return;
|
|
90
103
|
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
hasClosed = true;
|
|
95
|
-
};
|
|
96
|
-
const onEnd = () => {
|
|
97
|
-
if (hasClosed) {
|
|
98
|
-
return;
|
|
104
|
+
else {
|
|
105
|
+
hasClosed = true;
|
|
106
|
+
controller.error(new server_1.TRPCError({ code: 'PAYLOAD_TOO_LARGE' }));
|
|
99
107
|
}
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
108
|
+
});
|
|
109
|
+
res.onAborted(() => {
|
|
110
|
+
if (!hasClosed) {
|
|
111
|
+
hasClosed = true;
|
|
112
|
+
controller.error(new server_1.TRPCError({ code: 'CLIENT_CLOSED_REQUEST' }));
|
|
113
|
+
}
|
|
114
|
+
});
|
|
105
115
|
},
|
|
106
116
|
cancel() {
|
|
107
|
-
res.
|
|
117
|
+
res.cork(() => {
|
|
118
|
+
res.close();
|
|
119
|
+
});
|
|
108
120
|
},
|
|
109
121
|
});
|
|
110
122
|
}
|
package/dist/fetchCompat.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetchCompat.js","sourceRoot":"","sources":["../src/fetchCompat.ts"],"names":[],"mappings":";;AAaA,oDASC;AAED,oCAsCC;AAoBD,8BAkBC;
|
|
1
|
+
{"version":3,"file":"fetchCompat.js","sourceRoot":"","sources":["../src/fetchCompat.ts"],"names":[],"mappings":"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"}
|
package/dist/websockets.js
CHANGED
|
@@ -62,6 +62,19 @@ const rpc_1 = require("@trpc/server/rpc");
|
|
|
62
62
|
const unstable_core_do_not_import_1 = require("@trpc/server/unstable-core-do-not-import");
|
|
63
63
|
const url_1 = require("url");
|
|
64
64
|
const fetchCompat_1 = require("./fetchCompat");
|
|
65
|
+
function createCompleter() {
|
|
66
|
+
let resolve;
|
|
67
|
+
let reject;
|
|
68
|
+
const promise = new Promise((res, rej) => {
|
|
69
|
+
resolve = res;
|
|
70
|
+
reject = rej;
|
|
71
|
+
});
|
|
72
|
+
return {
|
|
73
|
+
promise,
|
|
74
|
+
resolve: resolve,
|
|
75
|
+
reject: reject,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
65
78
|
function getWSConnectionHandler(opts, allClients) {
|
|
66
79
|
const { createContext, router } = opts;
|
|
67
80
|
const { transformer } = router._def._config;
|
|
@@ -75,62 +88,23 @@ function getWSConnectionHandler(opts, allClients) {
|
|
|
75
88
|
// and server is sending keepalive messages
|
|
76
89
|
}
|
|
77
90
|
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
// it returns false if context threw, and execution must be halted.
|
|
81
|
-
// this function will cleanup the connection
|
|
82
|
-
async function tryResolveContext(client, getConnectionParams) {
|
|
83
|
-
const data = client.getUserData();
|
|
84
|
-
data.contextResolveAttempted = true;
|
|
91
|
+
function getConnectionParams(msgStr) {
|
|
92
|
+
let msg;
|
|
85
93
|
try {
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
res: undefined,
|
|
91
|
-
client,
|
|
92
|
-
info: {
|
|
93
|
-
connectionParams: getConnectionParams(),
|
|
94
|
-
calls: [],
|
|
95
|
-
isBatchCall: false,
|
|
96
|
-
accept: null,
|
|
97
|
-
type: 'unknown',
|
|
98
|
-
signal: data.abortController.signal,
|
|
99
|
-
url: data.url,
|
|
100
|
-
},
|
|
101
|
-
});
|
|
102
|
-
return true;
|
|
94
|
+
msg = JSON.parse(msgStr);
|
|
95
|
+
if (!(0, unstable_core_do_not_import_1.isObject)(msg)) {
|
|
96
|
+
throw new Error('Message was not an object');
|
|
97
|
+
}
|
|
103
98
|
}
|
|
104
99
|
catch (cause) {
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
path: undefined,
|
|
110
|
-
type: 'unknown',
|
|
111
|
-
ctx: data.ctx,
|
|
112
|
-
req: data.req,
|
|
113
|
-
input: undefined,
|
|
114
|
-
});
|
|
115
|
-
respond(client, {
|
|
116
|
-
id: null,
|
|
117
|
-
error: (0, server_1.getErrorShape)({
|
|
118
|
-
config: router._def._config,
|
|
119
|
-
error,
|
|
120
|
-
type: 'unknown',
|
|
121
|
-
path: undefined,
|
|
122
|
-
input: undefined,
|
|
123
|
-
ctx: data.ctx,
|
|
124
|
-
}),
|
|
125
|
-
});
|
|
126
|
-
setTimeout(() => {
|
|
127
|
-
// trpc wierd behavior:
|
|
128
|
-
// no mater whats the websocket close status code, trpc websocket still attemps to reconnect indefinitely
|
|
129
|
-
// I chose 1008 as due to https://datatracker.ietf.org/doc/html/rfc6455#section-7.4
|
|
130
|
-
client.end(1008, 'bad context');
|
|
100
|
+
throw new server_1.TRPCError({
|
|
101
|
+
code: 'PARSE_ERROR',
|
|
102
|
+
message: `Malformed TRPCConnectionParamsMessage`,
|
|
103
|
+
cause,
|
|
131
104
|
});
|
|
132
|
-
return false;
|
|
133
105
|
}
|
|
106
|
+
const connectionParams = (0, http_1.parseConnectionParamsFromUnknown)(msg.data);
|
|
107
|
+
return connectionParams;
|
|
134
108
|
}
|
|
135
109
|
async function handleRequest(client, msg) {
|
|
136
110
|
const { clientSubscriptions, ctx, req } = client.getUserData();
|
|
@@ -223,10 +197,6 @@ function getWSConnectionHandler(opts, allClients) {
|
|
|
223
197
|
let next;
|
|
224
198
|
let result;
|
|
225
199
|
while (true) {
|
|
226
|
-
// using the Promise.race could introduce memory leaks?
|
|
227
|
-
// more on this here: https://github.com/cefn/watchable/tree/main/packages/unpromise
|
|
228
|
-
// the trpc used Unpromise to accomplish this
|
|
229
|
-
// next = await Unpromise.race([
|
|
230
200
|
next = await unstable_core_do_not_import_1.Unpromise.race([
|
|
231
201
|
iterator.next().catch(server_1.getTRPCErrorFromUnknown),
|
|
232
202
|
abortPromise,
|
|
@@ -346,14 +316,12 @@ function getWSConnectionHandler(opts, allClients) {
|
|
|
346
316
|
maxPayloadLength: opts.uWsBehaviorOptions?.maxPayloadLength,
|
|
347
317
|
maxLifetime: opts.uWsBehaviorOptions?.maxLifetime,
|
|
348
318
|
idleTimeout: opts.uWsBehaviorOptions?.idleTimeout,
|
|
349
|
-
|
|
319
|
+
upgrade(res, req, context) {
|
|
350
320
|
const resDecorated = (0, fetchCompat_1.decorateHttpResponse)(res);
|
|
351
321
|
res.onAborted(() => {
|
|
352
322
|
resDecorated.aborted = true;
|
|
353
323
|
});
|
|
354
|
-
const reqFetch = (0, fetchCompat_1.
|
|
355
|
-
maxBodySize: null,
|
|
356
|
-
});
|
|
324
|
+
const reqFetch = (0, fetchCompat_1.uWsToRequestNoBody)(req, resDecorated);
|
|
357
325
|
const secWebSocketKey = req.getHeader('sec-websocket-key');
|
|
358
326
|
const secWebSocketProtocol = req.getHeader('sec-websocket-protocol');
|
|
359
327
|
const secWebSocketExtensions = req.getHeader('sec-websocket-extensions');
|
|
@@ -363,9 +331,8 @@ function getWSConnectionHandler(opts, allClients) {
|
|
|
363
331
|
clientSubscriptions,
|
|
364
332
|
abortController,
|
|
365
333
|
req: reqFetch,
|
|
366
|
-
ctx:
|
|
367
|
-
|
|
368
|
-
useConnectionParams: false,
|
|
334
|
+
ctx: undefined,
|
|
335
|
+
ctxCompleter: null,
|
|
369
336
|
keepAlive: null,
|
|
370
337
|
url: (0, fetchCompat_1.createURL)(req, resDecorated.sll ? 'wss' : 'ws'),
|
|
371
338
|
};
|
|
@@ -373,16 +340,9 @@ function getWSConnectionHandler(opts, allClients) {
|
|
|
373
340
|
},
|
|
374
341
|
async open(client) {
|
|
375
342
|
allClients.add(client);
|
|
376
|
-
const data = client.getUserData();
|
|
377
|
-
data.useConnectionParams =
|
|
378
|
-
new url_1.URL(data.req.url).searchParams.get('connectionParams') === '1';
|
|
379
|
-
if (!data.useConnectionParams) {
|
|
380
|
-
const ok = await tryResolveContext(client, () => null);
|
|
381
|
-
if (!ok)
|
|
382
|
-
return;
|
|
383
|
-
}
|
|
384
343
|
if (opts.keepAlive?.enabled) {
|
|
385
344
|
const { pingMs, pongWaitMs } = opts.keepAlive;
|
|
345
|
+
const data = client.getUserData();
|
|
386
346
|
data.keepAlive = handleKeepAlive(client, pingMs, pongWaitMs);
|
|
387
347
|
}
|
|
388
348
|
},
|
|
@@ -391,7 +351,6 @@ function getWSConnectionHandler(opts, allClients) {
|
|
|
391
351
|
if (data.keepAlive) {
|
|
392
352
|
data.keepAlive.onMessage();
|
|
393
353
|
}
|
|
394
|
-
// const msgStr = rawMsg.toString(); // or could do this ;
|
|
395
354
|
const msgStr = Buffer.from(rawMsg).toString();
|
|
396
355
|
if (msgStr === 'PONG') {
|
|
397
356
|
return;
|
|
@@ -402,31 +361,67 @@ function getWSConnectionHandler(opts, allClients) {
|
|
|
402
361
|
}
|
|
403
362
|
return;
|
|
404
363
|
}
|
|
405
|
-
if (data.
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
364
|
+
if (data.ctxCompleter == null) {
|
|
365
|
+
data.ctxCompleter = createCompleter();
|
|
366
|
+
const useConnectionParams = new url_1.URL(data.req.url).searchParams.get('connectionParams') === '1';
|
|
367
|
+
try {
|
|
368
|
+
data.ctx = await createContext?.({
|
|
369
|
+
req: data.req,
|
|
370
|
+
res: client,
|
|
371
|
+
client: client,
|
|
372
|
+
info: {
|
|
373
|
+
connectionParams: useConnectionParams
|
|
374
|
+
? getConnectionParams(msgStr)
|
|
375
|
+
: null,
|
|
376
|
+
calls: [],
|
|
377
|
+
isBatchCall: false,
|
|
378
|
+
accept: null,
|
|
379
|
+
type: 'unknown',
|
|
380
|
+
signal: data.abortController.signal,
|
|
381
|
+
url: data.url, // was null
|
|
382
|
+
},
|
|
383
|
+
});
|
|
384
|
+
data.ctxCompleter.resolve();
|
|
409
385
|
}
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
386
|
+
catch (cause) {
|
|
387
|
+
const error = (0, server_1.getTRPCErrorFromUnknown)(cause);
|
|
388
|
+
opts.onError?.({
|
|
389
|
+
ctx: data.ctx,
|
|
390
|
+
error: error,
|
|
391
|
+
input: undefined,
|
|
392
|
+
path: undefined,
|
|
393
|
+
type: 'unknown',
|
|
394
|
+
req: data.req,
|
|
395
|
+
});
|
|
396
|
+
respond(client, {
|
|
397
|
+
id: null,
|
|
398
|
+
error: (0, server_1.getErrorShape)({
|
|
399
|
+
config: router._def._config,
|
|
400
|
+
error,
|
|
401
|
+
type: 'unknown',
|
|
402
|
+
path: undefined,
|
|
403
|
+
input: undefined,
|
|
404
|
+
ctx: data.ctx,
|
|
405
|
+
}),
|
|
406
|
+
});
|
|
407
|
+
data.ctxCompleter.reject(error);
|
|
408
|
+
// close in next tick
|
|
409
|
+
(globalThis.setImmediate ?? globalThis.setTimeout)(() => {
|
|
410
|
+
client.end(1008);
|
|
411
|
+
});
|
|
412
|
+
}
|
|
413
|
+
if (useConnectionParams) {
|
|
414
|
+
// fully consume first message
|
|
429
415
|
return;
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
try {
|
|
419
|
+
await data.ctxCompleter.promise;
|
|
420
|
+
}
|
|
421
|
+
catch {
|
|
422
|
+
// stop execution of pending requests when context could not be resolved
|
|
423
|
+
// single error message will be sent
|
|
424
|
+
return;
|
|
430
425
|
}
|
|
431
426
|
try {
|
|
432
427
|
const msgJSON = JSON.parse(msgStr);
|
package/dist/websockets.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websockets.js","sourceRoot":"","sources":["../src/websockets.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"websockets.js","sourceRoot":"","sources":["../src/websockets.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "trpc-uwebsockets",
|
|
3
3
|
"description": "tRPC adapter for uWebSockets.js server",
|
|
4
|
-
"version": "11.0.
|
|
4
|
+
"version": "11.0.4",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"type": "commonjs",
|
|
7
7
|
"types": "./types/index.d.ts",
|
|
@@ -17,8 +17,8 @@
|
|
|
17
17
|
"test:watch": "vitest",
|
|
18
18
|
"test:coverage": "vitest --coverage",
|
|
19
19
|
"test:publish": "yarn test && yarn build && yarn pack",
|
|
20
|
-
"publish:main": "
|
|
21
|
-
"publish:
|
|
20
|
+
"publish:main": "yarn npm publish",
|
|
21
|
+
"publish:canary": "yarn npm publish --tag canary",
|
|
22
22
|
"prepack": "yarn build",
|
|
23
23
|
"prepublish": "yarn clean && yarn prettier && yarn lint && yarn test",
|
|
24
24
|
"clean": "rimraf -rf ./dist && rimraf -rf ./types && rimraf -rf ./coverage && rimraf -rf ./package.tgz",
|
|
@@ -29,18 +29,18 @@
|
|
|
29
29
|
"prettier:dry": "prettier src/**/*.ts --config .prettierrc"
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@trpc/server": "^11.0.
|
|
32
|
+
"@trpc/server": "^11.0.4",
|
|
33
33
|
"uWebSockets.js": "uNetworking/uWebSockets.js#v20.51.0"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
36
|
"@eslint/eslintrc": "^3.3.1",
|
|
37
37
|
"@eslint/js": "^9.24.0",
|
|
38
|
-
"@trpc/client": "^11.0.
|
|
38
|
+
"@trpc/client": "^11.0.4",
|
|
39
39
|
"@types/node": "^20.11.5",
|
|
40
40
|
"@types/node-fetch": "^2.6.12",
|
|
41
41
|
"@types/ws": "^8.5.10",
|
|
42
|
-
"@typescript-eslint/eslint-plugin": "^8.29.
|
|
43
|
-
"@typescript-eslint/parser": "^8.29.
|
|
42
|
+
"@typescript-eslint/eslint-plugin": "^8.29.1",
|
|
43
|
+
"@typescript-eslint/parser": "^8.29.1",
|
|
44
44
|
"@vitest/coverage-istanbul": "^3.1.1",
|
|
45
45
|
"abort-controller": "^3.0.0",
|
|
46
46
|
"eslint": "^9.24.0",
|
package/src/fetchCompat.ts
CHANGED
|
@@ -22,6 +22,26 @@ export function decorateHttpResponse(
|
|
|
22
22
|
return resDecorated;
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
+
export function uWsToRequestNoBody(
|
|
26
|
+
req: HttpRequest,
|
|
27
|
+
res: HttpResponseDecorated
|
|
28
|
+
): Request {
|
|
29
|
+
const headers = createHeaders(req);
|
|
30
|
+
const method = req.getCaseSensitiveMethod().toUpperCase();
|
|
31
|
+
const isSsl = res.ssl;
|
|
32
|
+
|
|
33
|
+
const url = createURL(req, isSsl ? 'https' : 'http');
|
|
34
|
+
|
|
35
|
+
const init: RequestInit = {
|
|
36
|
+
headers: headers,
|
|
37
|
+
method: method,
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
const request = new Request(url, init);
|
|
41
|
+
|
|
42
|
+
return request;
|
|
43
|
+
}
|
|
44
|
+
|
|
25
45
|
export function uWsToRequest(
|
|
26
46
|
req: HttpRequest,
|
|
27
47
|
res: HttpResponseDecorated,
|
|
@@ -109,46 +129,40 @@ function createBody(
|
|
|
109
129
|
let size = 0;
|
|
110
130
|
let hasClosed = false;
|
|
111
131
|
|
|
112
|
-
return new ReadableStream({
|
|
132
|
+
return new ReadableStream<Uint8Array>({
|
|
113
133
|
start(controller) {
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
134
|
+
res.onData((tempChunk, isLast) => {
|
|
135
|
+
if (hasClosed) return;
|
|
136
|
+
|
|
137
|
+
// This copies the buffer *immediately* and avoids using a detached buffer
|
|
138
|
+
const chunk = new Uint8Array(tempChunk.byteLength);
|
|
139
|
+
chunk.set(new Uint8Array(tempChunk)); // must be done before enqueue
|
|
140
|
+
size += chunk.byteLength;
|
|
120
141
|
|
|
121
|
-
size += ab.byteLength;
|
|
122
142
|
if (!opts.maxBodySize || size <= opts.maxBodySize) {
|
|
123
|
-
controller.enqueue(
|
|
143
|
+
controller.enqueue(chunk);
|
|
124
144
|
|
|
125
145
|
if (isLast) {
|
|
126
|
-
|
|
146
|
+
hasClosed = true;
|
|
147
|
+
controller.close();
|
|
127
148
|
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
controller.error(
|
|
132
|
-
new TRPCError({
|
|
133
|
-
code: 'PAYLOAD_TOO_LARGE',
|
|
134
|
-
})
|
|
135
|
-
);
|
|
136
|
-
hasClosed = true;
|
|
137
|
-
};
|
|
138
|
-
|
|
139
|
-
const onEnd = () => {
|
|
140
|
-
if (hasClosed) {
|
|
141
|
-
return;
|
|
149
|
+
} else {
|
|
150
|
+
hasClosed = true;
|
|
151
|
+
controller.error(new TRPCError({ code: 'PAYLOAD_TOO_LARGE' }));
|
|
142
152
|
}
|
|
143
|
-
|
|
144
|
-
controller.close();
|
|
145
|
-
};
|
|
153
|
+
});
|
|
146
154
|
|
|
147
|
-
res.
|
|
148
|
-
|
|
155
|
+
res.onAborted(() => {
|
|
156
|
+
if (!hasClosed) {
|
|
157
|
+
hasClosed = true;
|
|
158
|
+
controller.error(new TRPCError({ code: 'CLIENT_CLOSED_REQUEST' }));
|
|
159
|
+
}
|
|
160
|
+
});
|
|
149
161
|
},
|
|
150
162
|
cancel() {
|
|
151
|
-
res.
|
|
163
|
+
res.cork(() => {
|
|
164
|
+
res.close();
|
|
165
|
+
});
|
|
152
166
|
},
|
|
153
167
|
});
|
|
154
168
|
}
|
package/src/fetchRequest.spec.ts
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import uWs from 'uWebSockets.js';
|
|
2
2
|
import { describe, expect, test } from 'vitest';
|
|
3
3
|
|
|
4
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
decorateHttpResponse,
|
|
6
|
+
uWsSendResponseStreamed,
|
|
7
|
+
uWsToRequest,
|
|
8
|
+
} from './fetchCompat';
|
|
5
9
|
// source: packages/server/src/adapters/node-http/incomingMessageToRequest.test.ts
|
|
6
10
|
|
|
7
11
|
function createServer(opts: { maxBodySize: number | null }) {
|
|
@@ -13,7 +17,7 @@ function createServer(opts: { maxBodySize: number | null }) {
|
|
|
13
17
|
|
|
14
18
|
const app = uWs.App();
|
|
15
19
|
|
|
16
|
-
app.any('
|
|
20
|
+
app.any('/handle', async (res, req) => {
|
|
17
21
|
const resDecorated = decorateHttpResponse(res);
|
|
18
22
|
|
|
19
23
|
const request = uWsToRequest(req, resDecorated, opts);
|
|
@@ -23,6 +27,20 @@ function createServer(opts: { maxBodySize: number | null }) {
|
|
|
23
27
|
});
|
|
24
28
|
});
|
|
25
29
|
|
|
30
|
+
app.any('/stream', async (res, req) => {
|
|
31
|
+
const resDecorated = decorateHttpResponse(res);
|
|
32
|
+
|
|
33
|
+
const request = uWsToRequest(req, resDecorated, opts);
|
|
34
|
+
const bytes = await request.bytes();
|
|
35
|
+
|
|
36
|
+
const resFetch = new Response('hello world', {
|
|
37
|
+
status: 200,
|
|
38
|
+
statusText: '200 OK',
|
|
39
|
+
headers: { 'request-size': bytes.length.toString() },
|
|
40
|
+
});
|
|
41
|
+
await uWsSendResponseStreamed(resFetch, resDecorated);
|
|
42
|
+
});
|
|
43
|
+
|
|
26
44
|
let socket: uWs.us_listen_socket | false | null = null;
|
|
27
45
|
|
|
28
46
|
app.listen('0.0.0.0', 0, (token) => {
|
|
@@ -46,7 +64,7 @@ function createServer(opts: { maxBodySize: number | null }) {
|
|
|
46
64
|
},
|
|
47
65
|
fetch: async (
|
|
48
66
|
opts: RequestInit & {
|
|
49
|
-
path
|
|
67
|
+
path: string;
|
|
50
68
|
},
|
|
51
69
|
_handle: (request: Request) => Promise<void>
|
|
52
70
|
) => {
|
|
@@ -57,20 +75,60 @@ function createServer(opts: { maxBodySize: number | null }) {
|
|
|
57
75
|
rejectHandler = reject;
|
|
58
76
|
});
|
|
59
77
|
|
|
60
|
-
await fetch(`http://localhost:${port}${opts.path ?? ''}`, {
|
|
78
|
+
await fetch(`http://localhost:${port}${opts.path ?? '/'}`, {
|
|
61
79
|
...opts,
|
|
62
80
|
});
|
|
63
81
|
await promise;
|
|
64
82
|
},
|
|
83
|
+
fetchWithResponse: async (
|
|
84
|
+
opts: RequestInit & {
|
|
85
|
+
path?: string;
|
|
86
|
+
}
|
|
87
|
+
) => {
|
|
88
|
+
return await fetch(`http://localhost:${port}${opts.path ?? ''}`, {
|
|
89
|
+
...opts,
|
|
90
|
+
});
|
|
91
|
+
},
|
|
65
92
|
};
|
|
66
93
|
}
|
|
67
94
|
|
|
95
|
+
function slowReadableStream(
|
|
96
|
+
size: number,
|
|
97
|
+
count: number,
|
|
98
|
+
sleepMs: number
|
|
99
|
+
): ReadableStream {
|
|
100
|
+
const body = '0'.repeat(size);
|
|
101
|
+
|
|
102
|
+
return new ReadableStream({
|
|
103
|
+
start(controller) {
|
|
104
|
+
let i = 0;
|
|
105
|
+
function pump() {
|
|
106
|
+
if (i >= count) {
|
|
107
|
+
controller.close();
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
setTimeout(() => {
|
|
111
|
+
controller.enqueue(body);
|
|
112
|
+
i++;
|
|
113
|
+
pump();
|
|
114
|
+
}, sleepMs);
|
|
115
|
+
}
|
|
116
|
+
pump();
|
|
117
|
+
},
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
|
|
68
121
|
describe('request', () => {
|
|
69
122
|
test('basic GET', async () => {
|
|
70
123
|
const server = createServer({ maxBodySize: null });
|
|
71
|
-
await server.fetch(
|
|
72
|
-
|
|
73
|
-
|
|
124
|
+
await server.fetch(
|
|
125
|
+
{
|
|
126
|
+
path: '/handle',
|
|
127
|
+
},
|
|
128
|
+
async (request) => {
|
|
129
|
+
expect(request.method).toBe('GET');
|
|
130
|
+
}
|
|
131
|
+
);
|
|
74
132
|
await server.close();
|
|
75
133
|
});
|
|
76
134
|
|
|
@@ -79,6 +137,7 @@ describe('request', () => {
|
|
|
79
137
|
|
|
80
138
|
await server.fetch(
|
|
81
139
|
{
|
|
140
|
+
path: '/handle',
|
|
82
141
|
method: 'POST',
|
|
83
142
|
},
|
|
84
143
|
async (request) => {
|
|
@@ -97,6 +156,7 @@ describe('request', () => {
|
|
|
97
156
|
|
|
98
157
|
await server.fetch(
|
|
99
158
|
{
|
|
159
|
+
path: '/handle',
|
|
100
160
|
method: 'POST',
|
|
101
161
|
body: JSON.stringify({ hello: 'world' }),
|
|
102
162
|
headers: {
|
|
@@ -117,6 +177,7 @@ describe('request', () => {
|
|
|
117
177
|
|
|
118
178
|
await server.fetch(
|
|
119
179
|
{
|
|
180
|
+
path: '/handle',
|
|
120
181
|
method: 'POST',
|
|
121
182
|
body,
|
|
122
183
|
},
|
|
@@ -137,6 +198,7 @@ describe('request', () => {
|
|
|
137
198
|
|
|
138
199
|
await server.fetch(
|
|
139
200
|
{
|
|
201
|
+
path: '/handle',
|
|
140
202
|
method: 'POST',
|
|
141
203
|
body: '0'.repeat(11),
|
|
142
204
|
},
|
|
@@ -155,6 +217,7 @@ describe('request', () => {
|
|
|
155
217
|
|
|
156
218
|
await server.fetch(
|
|
157
219
|
{
|
|
220
|
+
path: '/handle',
|
|
158
221
|
method: 'POST',
|
|
159
222
|
body: '0'.repeat(9),
|
|
160
223
|
},
|
|
@@ -177,11 +240,11 @@ describe('request', () => {
|
|
|
177
240
|
await server.fetch(
|
|
178
241
|
{
|
|
179
242
|
method: 'GET',
|
|
180
|
-
path: '
|
|
243
|
+
path: '/handle?hello=world',
|
|
181
244
|
},
|
|
182
245
|
async (request) => {
|
|
183
246
|
const url = new URL(request.url);
|
|
184
|
-
expect(url.pathname).toBe('/');
|
|
247
|
+
expect(url.pathname).toBe('/handle');
|
|
185
248
|
expect(url.searchParams.get('hello')).toBe('world');
|
|
186
249
|
// expect(url.searchParams.size).toBe(1);
|
|
187
250
|
}
|
|
@@ -194,11 +257,11 @@ describe('request', () => {
|
|
|
194
257
|
await server.fetch(
|
|
195
258
|
{
|
|
196
259
|
method: 'GET',
|
|
197
|
-
path: '/',
|
|
260
|
+
path: '/handle',
|
|
198
261
|
},
|
|
199
262
|
async (request) => {
|
|
200
263
|
const url = new URL(request.url);
|
|
201
|
-
expect(url.pathname).toBe('/');
|
|
264
|
+
expect(url.pathname).toBe('/handle');
|
|
202
265
|
expect(url.searchParams.size).toBe(0);
|
|
203
266
|
}
|
|
204
267
|
);
|
|
@@ -206,6 +269,22 @@ describe('request', () => {
|
|
|
206
269
|
await server.close();
|
|
207
270
|
});
|
|
208
271
|
|
|
272
|
+
test('slow requests are handled', async () => {
|
|
273
|
+
const server = createServer({ maxBodySize: null });
|
|
274
|
+
|
|
275
|
+
const readableStream = slowReadableStream(100, 3, 50);
|
|
276
|
+
const res = await server.fetchWithResponse({
|
|
277
|
+
path: '/stream',
|
|
278
|
+
method: 'POST',
|
|
279
|
+
body: readableStream,
|
|
280
|
+
// @ts-expect-error needed for using the stream
|
|
281
|
+
duplex: 'half',
|
|
282
|
+
});
|
|
283
|
+
|
|
284
|
+
expect(res.ok).equals(true);
|
|
285
|
+
expect(res.headers.get('request-size')).equals('300');
|
|
286
|
+
});
|
|
287
|
+
|
|
209
288
|
// testing aborts without mocks...is painful...
|
|
210
289
|
// TODO: recreate the slow request in a same way as is done with slow response
|
|
211
290
|
test('aborted requests are handled', async () => {
|
|
@@ -220,6 +299,7 @@ describe('request', () => {
|
|
|
220
299
|
try {
|
|
221
300
|
await server.fetch(
|
|
222
301
|
{
|
|
302
|
+
path: '/handle',
|
|
223
303
|
method: 'POST',
|
|
224
304
|
body,
|
|
225
305
|
signal: controller.signal,
|
|
@@ -254,6 +334,7 @@ describe('request', () => {
|
|
|
254
334
|
}, 5);
|
|
255
335
|
await server.fetch(
|
|
256
336
|
{
|
|
337
|
+
path: '/handle',
|
|
257
338
|
method: 'POST',
|
|
258
339
|
body,
|
|
259
340
|
signal: controller.signal,
|
package/src/server.spec.ts
CHANGED
|
@@ -40,9 +40,11 @@ const config = {
|
|
|
40
40
|
prefix: '/trpc',
|
|
41
41
|
};
|
|
42
42
|
|
|
43
|
-
function createContext({ req, res, info, client }: CreateContextOptions) {
|
|
43
|
+
async function createContext({ req, res, info, client }: CreateContextOptions) {
|
|
44
44
|
const user = { name: req.headers.get('username') || 'anonymous' };
|
|
45
45
|
|
|
46
|
+
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
47
|
+
|
|
46
48
|
if (req.headers.has('throw')) {
|
|
47
49
|
throw new TRPCError({
|
|
48
50
|
code: 'BAD_REQUEST',
|
|
@@ -68,10 +70,11 @@ function createContext({ req, res, info, client }: CreateContextOptions) {
|
|
|
68
70
|
});
|
|
69
71
|
}
|
|
70
72
|
|
|
71
|
-
//
|
|
72
|
-
// but really, responseMeta should be used instead!
|
|
73
|
+
// test writing headers inside the context
|
|
73
74
|
if (info.type === 'query') {
|
|
74
|
-
res.
|
|
75
|
+
res.cork(() => {
|
|
76
|
+
res.writeHeader('x-test', 'true');
|
|
77
|
+
});
|
|
75
78
|
}
|
|
76
79
|
return { req, res, user, info, client };
|
|
77
80
|
}
|
|
@@ -548,7 +551,6 @@ describe('server', () => {
|
|
|
548
551
|
}
|
|
549
552
|
`);
|
|
550
553
|
}
|
|
551
|
-
|
|
552
554
|
{
|
|
553
555
|
// batch
|
|
554
556
|
const { client } = app.getClient('batch');
|
|
@@ -820,16 +822,24 @@ describe('websocket', () => {
|
|
|
820
822
|
onClose(cause) {
|
|
821
823
|
closeCode = cause?.code;
|
|
822
824
|
},
|
|
825
|
+
onError(cause) {
|
|
826
|
+
console.warn('on error called', cause);
|
|
827
|
+
},
|
|
823
828
|
},
|
|
824
829
|
});
|
|
825
830
|
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
831
|
+
try {
|
|
832
|
+
await client.echo.query('hi');
|
|
833
|
+
} catch (err) {
|
|
834
|
+
//
|
|
835
|
+
}
|
|
836
|
+
// client.count.subscribe(
|
|
837
|
+
// {
|
|
838
|
+
// from: 0,
|
|
839
|
+
// count: 10,
|
|
840
|
+
// },
|
|
841
|
+
// {}
|
|
842
|
+
// );
|
|
833
843
|
|
|
834
844
|
await vi.waitFor(() => {
|
|
835
845
|
expect(closeCode).toEqual(1008);
|
package/src/websockets.ts
CHANGED
|
@@ -46,7 +46,7 @@ import {
|
|
|
46
46
|
createURL,
|
|
47
47
|
decorateHttpResponse,
|
|
48
48
|
HttpResponseDecorated,
|
|
49
|
-
|
|
49
|
+
uWsToRequestNoBody,
|
|
50
50
|
} from './fetchCompat';
|
|
51
51
|
|
|
52
52
|
type RemoveFunctions<T> = {
|
|
@@ -58,16 +58,17 @@ type RemoveFunctions<T> = {
|
|
|
58
58
|
*/
|
|
59
59
|
export type WebSocketBehaviorOptions = RemoveFunctions<WebSocketBehavior<any>>;
|
|
60
60
|
|
|
61
|
-
// copying over packages/server/src/adapters/ws.ts
|
|
62
|
-
|
|
63
61
|
export type WebSocketConnection = WebSocket<WebsocketData>;
|
|
64
62
|
|
|
63
|
+
// following packages/server/src/adapters/ws.ts
|
|
64
|
+
|
|
65
65
|
/**
|
|
66
66
|
* @public
|
|
67
67
|
*/
|
|
68
68
|
export type CreateWSSContextFnOptions = NodeHTTPCreateContextFnOptions<
|
|
69
69
|
Request,
|
|
70
|
-
HttpResponseDecorated
|
|
70
|
+
HttpResponseDecorated
|
|
71
|
+
// WebSocketConnection
|
|
71
72
|
> & {
|
|
72
73
|
client: WebSocketConnection;
|
|
73
74
|
};
|
|
@@ -129,14 +130,39 @@ export type WebsocketsHandlerOptions<TRouter extends AnyRouter> =
|
|
|
129
130
|
uWsBehaviorOptions?: WebSocketBehaviorOptions | undefined;
|
|
130
131
|
};
|
|
131
132
|
|
|
133
|
+
interface Completer {
|
|
134
|
+
promise: Promise<void>;
|
|
135
|
+
resolve: () => void;
|
|
136
|
+
reject: (error: Error) => void;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
function createCompleter(): Completer {
|
|
140
|
+
let resolve: () => void;
|
|
141
|
+
let reject: (error: Error) => void;
|
|
142
|
+
const promise = new Promise<void>((res, rej) => {
|
|
143
|
+
resolve = res;
|
|
144
|
+
reject = rej;
|
|
145
|
+
});
|
|
146
|
+
return {
|
|
147
|
+
promise,
|
|
148
|
+
resolve: resolve!,
|
|
149
|
+
reject: reject!,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
|
|
132
153
|
// data bound internally on each client
|
|
133
154
|
type WebsocketData = {
|
|
134
155
|
req: Request;
|
|
135
156
|
clientSubscriptions: Map<number | string, AbortController>;
|
|
136
157
|
abortController: AbortController;
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
158
|
+
ctx: inferRouterContext<AnyRouter> | undefined;
|
|
159
|
+
/**
|
|
160
|
+
* inside-out promise that resolves when context is ready.
|
|
161
|
+
*
|
|
162
|
+
* - when this is null, the context resolution will be started
|
|
163
|
+
* - otherwise all requests must await context resolution
|
|
164
|
+
*/
|
|
165
|
+
ctxCompleter: Completer | null;
|
|
140
166
|
keepAlive: KeepAliver | null;
|
|
141
167
|
url: URL;
|
|
142
168
|
};
|
|
@@ -165,67 +191,27 @@ export function getWSConnectionHandler<TRouter extends AnyRouter>(
|
|
|
165
191
|
}
|
|
166
192
|
}
|
|
167
193
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
async function tryResolveContext(
|
|
173
|
-
client: WebSocket<WebsocketData>,
|
|
174
|
-
getConnectionParams: () => TRPCRequestInfo['connectionParams']
|
|
175
|
-
): Promise<boolean> {
|
|
176
|
-
const data = client.getUserData();
|
|
177
|
-
data.contextResolveAttempted = true;
|
|
178
|
-
|
|
194
|
+
function getConnectionParams(
|
|
195
|
+
msgStr: string
|
|
196
|
+
): TRPCRequestInfo['connectionParams'] {
|
|
197
|
+
let msg;
|
|
179
198
|
try {
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
client,
|
|
186
|
-
info: {
|
|
187
|
-
connectionParams: getConnectionParams(),
|
|
188
|
-
calls: [],
|
|
189
|
-
isBatchCall: false,
|
|
190
|
-
accept: null,
|
|
191
|
-
type: 'unknown',
|
|
192
|
-
signal: data.abortController.signal,
|
|
193
|
-
url: data.url,
|
|
194
|
-
},
|
|
195
|
-
});
|
|
196
|
-
return true;
|
|
199
|
+
msg = JSON.parse(msgStr) as TRPCConnectionParamsMessage;
|
|
200
|
+
|
|
201
|
+
if (!isObject(msg)) {
|
|
202
|
+
throw new Error('Message was not an object');
|
|
203
|
+
}
|
|
197
204
|
} catch (cause) {
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
path: undefined,
|
|
203
|
-
type: 'unknown',
|
|
204
|
-
ctx: data.ctx,
|
|
205
|
-
req: data.req,
|
|
206
|
-
input: undefined,
|
|
207
|
-
});
|
|
208
|
-
respond(client, {
|
|
209
|
-
id: null,
|
|
210
|
-
error: getErrorShape({
|
|
211
|
-
config: router._def._config,
|
|
212
|
-
error,
|
|
213
|
-
type: 'unknown',
|
|
214
|
-
path: undefined,
|
|
215
|
-
input: undefined,
|
|
216
|
-
ctx: data.ctx,
|
|
217
|
-
}),
|
|
205
|
+
throw new TRPCError({
|
|
206
|
+
code: 'PARSE_ERROR',
|
|
207
|
+
message: `Malformed TRPCConnectionParamsMessage`,
|
|
208
|
+
cause,
|
|
218
209
|
});
|
|
210
|
+
}
|
|
219
211
|
|
|
220
|
-
|
|
221
|
-
// trpc wierd behavior:
|
|
222
|
-
// no mater whats the websocket close status code, trpc websocket still attemps to reconnect indefinitely
|
|
223
|
-
// I chose 1008 as due to https://datatracker.ietf.org/doc/html/rfc6455#section-7.4
|
|
224
|
-
client.end(1008, 'bad context');
|
|
225
|
-
});
|
|
212
|
+
const connectionParams = parseConnectionParamsFromUnknown(msg.data);
|
|
226
213
|
|
|
227
|
-
|
|
228
|
-
}
|
|
214
|
+
return connectionParams;
|
|
229
215
|
}
|
|
230
216
|
|
|
231
217
|
async function handleRequest(
|
|
@@ -337,10 +323,6 @@ export function getWSConnectionHandler<TRouter extends AnyRouter>(
|
|
|
337
323
|
let result: null | TRPCResultMessage<unknown>['result'];
|
|
338
324
|
|
|
339
325
|
while (true) {
|
|
340
|
-
// using the Promise.race could introduce memory leaks?
|
|
341
|
-
// more on this here: https://github.com/cefn/watchable/tree/main/packages/unpromise
|
|
342
|
-
// the trpc used Unpromise to accomplish this
|
|
343
|
-
// next = await Unpromise.race([
|
|
344
326
|
next = await Unpromise.race([
|
|
345
327
|
iterator.next().catch(getTRPCErrorFromUnknown),
|
|
346
328
|
abortPromise,
|
|
@@ -457,15 +439,13 @@ export function getWSConnectionHandler<TRouter extends AnyRouter>(
|
|
|
457
439
|
maxPayloadLength: opts.uWsBehaviorOptions?.maxPayloadLength,
|
|
458
440
|
maxLifetime: opts.uWsBehaviorOptions?.maxLifetime,
|
|
459
441
|
idleTimeout: opts.uWsBehaviorOptions?.idleTimeout,
|
|
460
|
-
|
|
442
|
+
upgrade(res, req, context) {
|
|
461
443
|
const resDecorated = decorateHttpResponse(res);
|
|
462
444
|
|
|
463
445
|
res.onAborted(() => {
|
|
464
446
|
resDecorated.aborted = true;
|
|
465
447
|
});
|
|
466
|
-
const reqFetch =
|
|
467
|
-
maxBodySize: null,
|
|
468
|
-
});
|
|
448
|
+
const reqFetch = uWsToRequestNoBody(req, resDecorated);
|
|
469
449
|
|
|
470
450
|
const secWebSocketKey = req.getHeader('sec-websocket-key');
|
|
471
451
|
const secWebSocketProtocol = req.getHeader('sec-websocket-protocol');
|
|
@@ -478,9 +458,8 @@ export function getWSConnectionHandler<TRouter extends AnyRouter>(
|
|
|
478
458
|
clientSubscriptions,
|
|
479
459
|
abortController,
|
|
480
460
|
req: reqFetch,
|
|
481
|
-
ctx:
|
|
482
|
-
|
|
483
|
-
useConnectionParams: false,
|
|
461
|
+
ctx: undefined,
|
|
462
|
+
ctxCompleter: null,
|
|
484
463
|
keepAlive: null,
|
|
485
464
|
url: createURL(req, resDecorated.sll ? 'wss' : 'ws'),
|
|
486
465
|
};
|
|
@@ -496,19 +475,9 @@ export function getWSConnectionHandler<TRouter extends AnyRouter>(
|
|
|
496
475
|
async open(client) {
|
|
497
476
|
allClients.add(client);
|
|
498
477
|
|
|
499
|
-
const data = client.getUserData();
|
|
500
|
-
|
|
501
|
-
data.useConnectionParams =
|
|
502
|
-
new URL(data.req.url).searchParams.get('connectionParams') === '1';
|
|
503
|
-
|
|
504
|
-
if (!data.useConnectionParams) {
|
|
505
|
-
const ok = await tryResolveContext(client, () => null);
|
|
506
|
-
|
|
507
|
-
if (!ok) return;
|
|
508
|
-
}
|
|
509
|
-
|
|
510
478
|
if (opts.keepAlive?.enabled) {
|
|
511
479
|
const { pingMs, pongWaitMs } = opts.keepAlive;
|
|
480
|
+
const data = client.getUserData();
|
|
512
481
|
data.keepAlive = handleKeepAlive(client, pingMs, pongWaitMs);
|
|
513
482
|
}
|
|
514
483
|
},
|
|
@@ -519,7 +488,6 @@ export function getWSConnectionHandler<TRouter extends AnyRouter>(
|
|
|
519
488
|
data.keepAlive.onMessage();
|
|
520
489
|
}
|
|
521
490
|
|
|
522
|
-
// const msgStr = rawMsg.toString(); // or could do this ;
|
|
523
491
|
const msgStr = Buffer.from(rawMsg).toString();
|
|
524
492
|
|
|
525
493
|
if (msgStr === 'PONG') {
|
|
@@ -532,34 +500,71 @@ export function getWSConnectionHandler<TRouter extends AnyRouter>(
|
|
|
532
500
|
return;
|
|
533
501
|
}
|
|
534
502
|
|
|
535
|
-
if (data.
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
503
|
+
if (data.ctxCompleter == null) {
|
|
504
|
+
data.ctxCompleter = createCompleter();
|
|
505
|
+
|
|
506
|
+
const useConnectionParams =
|
|
507
|
+
new URL(data.req.url).searchParams.get('connectionParams') === '1';
|
|
508
|
+
|
|
509
|
+
try {
|
|
510
|
+
data.ctx = await createContext?.({
|
|
511
|
+
req: data.req,
|
|
512
|
+
res: client as unknown as HttpResponseDecorated,
|
|
513
|
+
client: client,
|
|
514
|
+
info: {
|
|
515
|
+
connectionParams: useConnectionParams
|
|
516
|
+
? getConnectionParams(msgStr)
|
|
517
|
+
: null,
|
|
518
|
+
calls: [],
|
|
519
|
+
isBatchCall: false,
|
|
520
|
+
accept: null,
|
|
521
|
+
type: 'unknown',
|
|
522
|
+
signal: data.abortController.signal,
|
|
523
|
+
url: data.url, // was null
|
|
524
|
+
},
|
|
525
|
+
});
|
|
526
|
+
data.ctxCompleter.resolve();
|
|
527
|
+
} catch (cause) {
|
|
528
|
+
const error = getTRPCErrorFromUnknown(cause);
|
|
529
|
+
opts.onError?.({
|
|
530
|
+
ctx: data.ctx,
|
|
531
|
+
error: error,
|
|
532
|
+
input: undefined,
|
|
533
|
+
path: undefined,
|
|
534
|
+
type: 'unknown',
|
|
535
|
+
req: data.req,
|
|
536
|
+
});
|
|
537
|
+
respond(client, {
|
|
538
|
+
id: null,
|
|
539
|
+
error: getErrorShape({
|
|
540
|
+
config: router._def._config,
|
|
541
|
+
error,
|
|
542
|
+
type: 'unknown',
|
|
543
|
+
path: undefined,
|
|
544
|
+
input: undefined,
|
|
545
|
+
ctx: data.ctx,
|
|
546
|
+
}),
|
|
547
|
+
});
|
|
548
|
+
data.ctxCompleter.reject(error);
|
|
556
549
|
|
|
557
|
-
|
|
550
|
+
// close in next tick
|
|
551
|
+
(globalThis.setImmediate ?? globalThis.setTimeout)(() => {
|
|
552
|
+
client.end(1008);
|
|
553
|
+
});
|
|
554
|
+
}
|
|
558
555
|
|
|
559
|
-
|
|
560
|
-
|
|
556
|
+
if (useConnectionParams) {
|
|
557
|
+
// fully consume first message
|
|
558
|
+
return;
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
561
|
|
|
562
|
-
|
|
562
|
+
try {
|
|
563
|
+
await data.ctxCompleter.promise;
|
|
564
|
+
} catch {
|
|
565
|
+
// stop execution of pending requests when context could not be resolved
|
|
566
|
+
// single error message will be sent
|
|
567
|
+
return;
|
|
563
568
|
}
|
|
564
569
|
|
|
565
570
|
try {
|
package/types/fetchCompat.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ export type HttpResponseDecorated = HttpResponse & {
|
|
|
4
4
|
ssl: boolean;
|
|
5
5
|
};
|
|
6
6
|
export declare function decorateHttpResponse(res: HttpResponse, ssl?: boolean): HttpResponseDecorated;
|
|
7
|
+
export declare function uWsToRequestNoBody(req: HttpRequest, res: HttpResponseDecorated): Request;
|
|
7
8
|
export declare function uWsToRequest(req: HttpRequest, res: HttpResponseDecorated, opts: {
|
|
8
9
|
/**
|
|
9
10
|
* Max body size in bytes. If the body is larger than this, the request will be aborted
|
package/types/websockets.d.ts
CHANGED
|
@@ -63,13 +63,23 @@ export type WebsocketsHandlerOptions<TRouter extends AnyRouter> = WSConnectionHa
|
|
|
63
63
|
*/
|
|
64
64
|
uWsBehaviorOptions?: WebSocketBehaviorOptions | undefined;
|
|
65
65
|
};
|
|
66
|
+
interface Completer {
|
|
67
|
+
promise: Promise<void>;
|
|
68
|
+
resolve: () => void;
|
|
69
|
+
reject: (error: Error) => void;
|
|
70
|
+
}
|
|
66
71
|
type WebsocketData = {
|
|
67
72
|
req: Request;
|
|
68
73
|
clientSubscriptions: Map<number | string, AbortController>;
|
|
69
74
|
abortController: AbortController;
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
75
|
+
ctx: inferRouterContext<AnyRouter> | undefined;
|
|
76
|
+
/**
|
|
77
|
+
* inside-out promise that resolves when context is ready.
|
|
78
|
+
*
|
|
79
|
+
* - when this is null, the context resolution will be started
|
|
80
|
+
* - otherwise all requests must await context resolution
|
|
81
|
+
*/
|
|
82
|
+
ctxCompleter: Completer | null;
|
|
73
83
|
keepAlive: KeepAliver | null;
|
|
74
84
|
url: URL;
|
|
75
85
|
};
|