trpc-uwebsockets 10.38.3 → 10.40.0-beta.1
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 +62 -18
- package/dist/applyWsHandler.js +352 -0
- package/dist/applyWsHandler.js.map +1 -0
- package/dist/index.js +10 -21
- package/dist/index.js.map +1 -1
- package/dist/requestHandler.js +9 -7
- package/dist/requestHandler.js.map +1 -1
- package/dist/utils.js +16 -6
- package/dist/utils.js.map +1 -1
- package/package.json +13 -15
- package/src/applyWsHandler.ts +467 -0
- package/src/index.ts +13 -30
- package/src/requestHandler.ts +13 -11
- package/src/types.ts +6 -7
- package/src/utils.ts +21 -5
- package/test/index.spec.ts +342 -77
- package/types/applyWsHandler.d.ts +31 -0
- package/types/index.d.ts +3 -3
- package/types/types.d.ts +5 -4
- package/types/utils.d.ts +3 -2
package/README.md
CHANGED
|
@@ -4,16 +4,20 @@
|
|
|
4
4
|
|
|
5
5
|
# Installation
|
|
6
6
|
|
|
7
|
+
Latest stable version
|
|
7
8
|
|
|
8
|
-
Yarn
|
|
9
9
|
```bash
|
|
10
|
-
yarn add trpc-uwebsockets
|
|
10
|
+
yarn add trpc-uwebsockets@latest
|
|
11
11
|
```
|
|
12
|
-
|
|
12
|
+
|
|
13
|
+
Or install beta version with subscription support
|
|
14
|
+
|
|
13
15
|
```bash
|
|
14
|
-
|
|
16
|
+
yarn add trpc-uwebsockets@beta
|
|
15
17
|
```
|
|
16
18
|
|
|
19
|
+
##
|
|
20
|
+
|
|
17
21
|
# Usage
|
|
18
22
|
|
|
19
23
|
Import needed packages
|
|
@@ -64,7 +68,7 @@ const router = t.router({
|
|
|
64
68
|
});
|
|
65
69
|
```
|
|
66
70
|
|
|
67
|
-
Initialize uWebsockets server and attach tRPC
|
|
71
|
+
Initialize uWebsockets server and attach tRPC
|
|
68
72
|
|
|
69
73
|
```typescript
|
|
70
74
|
const app = App();
|
|
@@ -95,30 +99,70 @@ type CreateContextOptions = {
|
|
|
95
99
|
req: {
|
|
96
100
|
headers: Record<string, string>;
|
|
97
101
|
method: 'POST' | 'GET';
|
|
98
|
-
query:
|
|
102
|
+
query: URLSearchParams;
|
|
99
103
|
path: string;
|
|
100
104
|
};
|
|
101
|
-
/*
|
|
105
|
+
/* see https://unetworking.github.io/uWebSockets.js/generated/interfaces/HttpResponse.html */
|
|
102
106
|
res: {
|
|
103
|
-
|
|
104
|
-
|
|
107
|
+
writeStatus(status: RecognizedString): HttpResponse;
|
|
108
|
+
writeHeader(key: RecognizedString, value: RecognizedString): HttpResponse;
|
|
105
109
|
};
|
|
106
110
|
};
|
|
107
111
|
```
|
|
108
112
|
|
|
109
|
-
#
|
|
113
|
+
# Enabling subscrptions
|
|
110
114
|
|
|
111
|
-
|
|
112
|
-
|
|
115
|
+
Simple method: enable subscriptions when creating the main handler.
|
|
116
|
+
|
|
117
|
+
```typescript
|
|
118
|
+
createUWebSocketsHandler(app, '/trpc', {
|
|
119
|
+
router,
|
|
120
|
+
createContext,
|
|
121
|
+
enableSubscriptions: true,
|
|
122
|
+
});
|
|
113
123
|
```
|
|
114
124
|
|
|
115
|
-
|
|
125
|
+
Recommended method: enable subscriptions after registering main request handler.
|
|
126
|
+
<!-- For example, cookies are not accessible inside WSHandler createContext, so in order to implement auth query string param with jwt needs to be implemented. -->
|
|
127
|
+
```typescript
|
|
128
|
+
const app = App();
|
|
116
129
|
|
|
117
|
-
|
|
118
|
-
|
|
130
|
+
createUWebSocketsHandler(app, '/trpc', {
|
|
131
|
+
router,
|
|
132
|
+
createContext: ({ req, res }) => {},
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
applyWSHandler(app, '/trpc', {
|
|
136
|
+
router,
|
|
137
|
+
createContext: ({ req, res }) => {},
|
|
138
|
+
});
|
|
119
139
|
```
|
|
120
140
|
|
|
121
|
-
|
|
141
|
+
## example of subscrption client
|
|
122
142
|
|
|
123
|
-
|
|
124
|
-
|
|
143
|
+
```typescript
|
|
144
|
+
import {
|
|
145
|
+
createTRPCProxyClient,
|
|
146
|
+
createWSClient,
|
|
147
|
+
httpBatchLink,
|
|
148
|
+
splitLink,
|
|
149
|
+
wsLink,
|
|
150
|
+
} from '@trpc/client';
|
|
151
|
+
|
|
152
|
+
const host = `localhost:8080/trpc`;
|
|
153
|
+
const wsClient = createWSClient({ url: `ws://${host}` });
|
|
154
|
+
const client = createTRPCProxyClient<AppRouter>({
|
|
155
|
+
links: [
|
|
156
|
+
splitLink({
|
|
157
|
+
condition(op) {
|
|
158
|
+
return op.type === 'subscription';
|
|
159
|
+
},
|
|
160
|
+
true: wsLink({ client: wsClient }),
|
|
161
|
+
false: httpBatchLink({
|
|
162
|
+
url: `http://${host}`,
|
|
163
|
+
headers: headers,
|
|
164
|
+
}),
|
|
165
|
+
}),
|
|
166
|
+
],
|
|
167
|
+
});
|
|
168
|
+
```
|
|
@@ -0,0 +1,352 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.applyWSHandler = void 0;
|
|
4
|
+
const server_1 = require("@trpc/server");
|
|
5
|
+
const observable_1 = require("@trpc/server/observable");
|
|
6
|
+
// import { transformTRPCResponse } from '../shared/transformTRPCResponse';
|
|
7
|
+
const shared_1 = require("@trpc/server/shared");
|
|
8
|
+
const utils_1 = require("./utils");
|
|
9
|
+
/* istanbul ignore next -- @preserve */
|
|
10
|
+
function assertIsObject(obj) {
|
|
11
|
+
if (typeof obj !== 'object' || Array.isArray(obj) || !obj) {
|
|
12
|
+
throw new Error('Not an object');
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
/* istanbul ignore next -- @preserve */
|
|
16
|
+
function assertIsProcedureType(obj) {
|
|
17
|
+
if (obj !== 'query' && obj !== 'subscription' && obj !== 'mutation') {
|
|
18
|
+
throw new Error('Invalid procedure type');
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/* istanbul ignore next -- @preserve */
|
|
22
|
+
function assertIsRequestId(obj) {
|
|
23
|
+
if (obj !== null &&
|
|
24
|
+
typeof obj === 'number' &&
|
|
25
|
+
isNaN(obj) &&
|
|
26
|
+
typeof obj !== 'string') {
|
|
27
|
+
throw new Error('Invalid request id');
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/* istanbul ignore next -- @preserve */
|
|
31
|
+
function assertIsString(obj) {
|
|
32
|
+
if (typeof obj !== 'string') {
|
|
33
|
+
throw new Error('Invalid string');
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/* istanbul ignore next -- @preserve */
|
|
37
|
+
function assertIsJSONRPC2OrUndefined(obj) {
|
|
38
|
+
if (typeof obj !== 'undefined' && obj !== '2.0') {
|
|
39
|
+
throw new Error('Must be JSONRPC 2.0');
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function parseMessage(obj, transformer) {
|
|
43
|
+
assertIsObject(obj);
|
|
44
|
+
const { method, params, id, jsonrpc } = obj;
|
|
45
|
+
assertIsRequestId(id);
|
|
46
|
+
assertIsJSONRPC2OrUndefined(jsonrpc);
|
|
47
|
+
if (method === 'subscription.stop') {
|
|
48
|
+
return {
|
|
49
|
+
id,
|
|
50
|
+
jsonrpc,
|
|
51
|
+
method,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
assertIsProcedureType(method);
|
|
55
|
+
assertIsObject(params);
|
|
56
|
+
const { input: rawInput, path } = params;
|
|
57
|
+
assertIsString(path);
|
|
58
|
+
const input = transformer.input.deserialize(rawInput);
|
|
59
|
+
return {
|
|
60
|
+
id,
|
|
61
|
+
jsonrpc,
|
|
62
|
+
method,
|
|
63
|
+
params: {
|
|
64
|
+
input,
|
|
65
|
+
path,
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
function applyWSHandler(app, prefix, opts) {
|
|
70
|
+
const { createContext, router } = opts;
|
|
71
|
+
const { transformer } = router._def._config;
|
|
72
|
+
// instead of putting data on the client, can put it here in a global map
|
|
73
|
+
// const globals = new Map<WebSocket<any>, Decoration>();
|
|
74
|
+
// doing above can eliminate allClients for reconnection notification
|
|
75
|
+
const allClients = new Set();
|
|
76
|
+
function respond(client, untransformedJSON) {
|
|
77
|
+
client.send(JSON.stringify((0, shared_1.transformTRPCResponse)(router._def._config, untransformedJSON)));
|
|
78
|
+
}
|
|
79
|
+
function stopSubscription(client, subscription, { id, jsonrpc }) {
|
|
80
|
+
subscription.unsubscribe();
|
|
81
|
+
respond(client, {
|
|
82
|
+
id,
|
|
83
|
+
jsonrpc,
|
|
84
|
+
result: {
|
|
85
|
+
type: 'stopped',
|
|
86
|
+
},
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
async function handleRequest(client, msg) {
|
|
90
|
+
const data = client.getUserData();
|
|
91
|
+
const clientSubscriptions = data.clientSubscriptions;
|
|
92
|
+
const { id, jsonrpc } = msg;
|
|
93
|
+
/* istanbul ignore next -- @preserve */
|
|
94
|
+
if (id === null) {
|
|
95
|
+
throw new server_1.TRPCError({
|
|
96
|
+
code: 'BAD_REQUEST',
|
|
97
|
+
message: '`id` is required',
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
if (msg.method === 'subscription.stop') {
|
|
101
|
+
const sub = clientSubscriptions.get(id);
|
|
102
|
+
if (sub) {
|
|
103
|
+
stopSubscription(client, sub, { id, jsonrpc });
|
|
104
|
+
}
|
|
105
|
+
clientSubscriptions.delete(id);
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
const { path, input } = msg.params;
|
|
109
|
+
const type = msg.method;
|
|
110
|
+
try {
|
|
111
|
+
await data.ctxPromise; // asserts context has been set
|
|
112
|
+
const result = await (0, server_1.callProcedure)({
|
|
113
|
+
procedures: router._def.procedures,
|
|
114
|
+
path,
|
|
115
|
+
rawInput: input,
|
|
116
|
+
ctx: data.ctx,
|
|
117
|
+
type,
|
|
118
|
+
});
|
|
119
|
+
if (type === 'subscription') {
|
|
120
|
+
if (!(0, observable_1.isObservable)(result)) {
|
|
121
|
+
throw new server_1.TRPCError({
|
|
122
|
+
message: `Subscription ${path} did not return an observable`,
|
|
123
|
+
code: 'INTERNAL_SERVER_ERROR',
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
// send the value as data if the method is not a subscription
|
|
129
|
+
respond(client, {
|
|
130
|
+
id,
|
|
131
|
+
jsonrpc,
|
|
132
|
+
result: {
|
|
133
|
+
type: 'data',
|
|
134
|
+
data: result,
|
|
135
|
+
},
|
|
136
|
+
});
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
const observable = result;
|
|
140
|
+
const sub = observable.subscribe({
|
|
141
|
+
next(data) {
|
|
142
|
+
respond(client, {
|
|
143
|
+
id,
|
|
144
|
+
jsonrpc,
|
|
145
|
+
result: {
|
|
146
|
+
type: 'data',
|
|
147
|
+
data,
|
|
148
|
+
},
|
|
149
|
+
});
|
|
150
|
+
},
|
|
151
|
+
error(err) {
|
|
152
|
+
const error = (0, server_1.getTRPCErrorFromUnknown)(err);
|
|
153
|
+
opts.onError?.({
|
|
154
|
+
error,
|
|
155
|
+
path,
|
|
156
|
+
type,
|
|
157
|
+
ctx: data.ctx,
|
|
158
|
+
req: data.req,
|
|
159
|
+
input,
|
|
160
|
+
});
|
|
161
|
+
respond(client, {
|
|
162
|
+
id,
|
|
163
|
+
jsonrpc,
|
|
164
|
+
error: (0, shared_1.getErrorShape)({
|
|
165
|
+
config: router._def._config,
|
|
166
|
+
error,
|
|
167
|
+
type,
|
|
168
|
+
path,
|
|
169
|
+
input,
|
|
170
|
+
ctx: data.ctx,
|
|
171
|
+
}),
|
|
172
|
+
});
|
|
173
|
+
},
|
|
174
|
+
complete() {
|
|
175
|
+
respond(client, {
|
|
176
|
+
id,
|
|
177
|
+
jsonrpc,
|
|
178
|
+
result: {
|
|
179
|
+
type: 'stopped',
|
|
180
|
+
},
|
|
181
|
+
});
|
|
182
|
+
},
|
|
183
|
+
});
|
|
184
|
+
/* istanbul ignore next -- @preserve */
|
|
185
|
+
// FIXME handle these edge cases
|
|
186
|
+
// if (client.readyState !== client.OPEN) {
|
|
187
|
+
// // if the client got disconnected whilst initializing the subscription
|
|
188
|
+
// // no need to send stopped message if the client is disconnected
|
|
189
|
+
// sub.unsubscribe();
|
|
190
|
+
// return;
|
|
191
|
+
// }
|
|
192
|
+
/* istanbul ignore next -- @preserve */
|
|
193
|
+
if (clientSubscriptions.has(id)) {
|
|
194
|
+
// duplicate request ids for client
|
|
195
|
+
stopSubscription(client, sub, { id, jsonrpc });
|
|
196
|
+
throw new server_1.TRPCError({
|
|
197
|
+
message: `Duplicate id ${id}`,
|
|
198
|
+
code: 'BAD_REQUEST',
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
clientSubscriptions.set(id, sub);
|
|
202
|
+
respond(client, {
|
|
203
|
+
id,
|
|
204
|
+
jsonrpc,
|
|
205
|
+
result: {
|
|
206
|
+
type: 'started',
|
|
207
|
+
},
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
catch (cause) /* istanbul ignore next -- @preserve */ {
|
|
211
|
+
// procedure threw an error
|
|
212
|
+
const error = (0, server_1.getTRPCErrorFromUnknown)(cause);
|
|
213
|
+
opts.onError?.({
|
|
214
|
+
error,
|
|
215
|
+
path,
|
|
216
|
+
type,
|
|
217
|
+
ctx: data.ctx,
|
|
218
|
+
req: data.req,
|
|
219
|
+
input,
|
|
220
|
+
});
|
|
221
|
+
respond(client, {
|
|
222
|
+
id,
|
|
223
|
+
jsonrpc,
|
|
224
|
+
error: (0, shared_1.getErrorShape)({
|
|
225
|
+
config: router._def._config,
|
|
226
|
+
error,
|
|
227
|
+
type,
|
|
228
|
+
path,
|
|
229
|
+
input,
|
|
230
|
+
ctx: data.ctx,
|
|
231
|
+
}),
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
app.ws(prefix, {
|
|
236
|
+
sendPingsAutomatically: opts.sendPingsAutomatically,
|
|
237
|
+
closeOnBackpressureLimit: opts.closeOnBackpressureLimit,
|
|
238
|
+
compression: opts.compression,
|
|
239
|
+
maxBackpressure: opts.maxBackpressure,
|
|
240
|
+
maxPayloadLength: opts.maxPayloadLength,
|
|
241
|
+
maxLifetime: opts.maxLifetime,
|
|
242
|
+
idleTimeout: opts.idleTimeout,
|
|
243
|
+
upgrade: (res, req, context) => {
|
|
244
|
+
const wrappedReq = (0, utils_1.extractAndWrapHttpRequest)(prefix, req);
|
|
245
|
+
const secWebSocketKey = wrappedReq.headers['sec-websocket-key'];
|
|
246
|
+
const secWebSocketProtocol = wrappedReq.headers['sec-websocket-protocol'];
|
|
247
|
+
const secWebSocketExtensions = wrappedReq.headers['sec-websocket-extensions'];
|
|
248
|
+
const data = {
|
|
249
|
+
clientSubscriptions: new Map(),
|
|
250
|
+
req: wrappedReq,
|
|
251
|
+
ctx: undefined,
|
|
252
|
+
ctxPromise: createContext?.({ req: wrappedReq, res }), // this cannot use RES!
|
|
253
|
+
};
|
|
254
|
+
res.upgrade(data,
|
|
255
|
+
/* Spell these correctly */
|
|
256
|
+
secWebSocketKey, secWebSocketProtocol, secWebSocketExtensions, context);
|
|
257
|
+
},
|
|
258
|
+
async open(client) {
|
|
259
|
+
async function createContextAsync() {
|
|
260
|
+
const data = client.getUserData();
|
|
261
|
+
try {
|
|
262
|
+
data.ctx = await data.ctxPromise;
|
|
263
|
+
}
|
|
264
|
+
catch (cause) {
|
|
265
|
+
const error = (0, server_1.getTRPCErrorFromUnknown)(cause);
|
|
266
|
+
opts.onError?.({
|
|
267
|
+
error,
|
|
268
|
+
path: undefined,
|
|
269
|
+
type: 'unknown',
|
|
270
|
+
ctx: data.ctx,
|
|
271
|
+
req: data.req,
|
|
272
|
+
input: undefined,
|
|
273
|
+
});
|
|
274
|
+
respond(client, {
|
|
275
|
+
id: null,
|
|
276
|
+
error: (0, shared_1.getErrorShape)({
|
|
277
|
+
config: router._def._config,
|
|
278
|
+
error,
|
|
279
|
+
type: 'unknown',
|
|
280
|
+
path: undefined,
|
|
281
|
+
input: undefined,
|
|
282
|
+
ctx: data.ctx,
|
|
283
|
+
}),
|
|
284
|
+
});
|
|
285
|
+
// large timeout is needed in order for response above to reach the client
|
|
286
|
+
// otherwise it tries to reconnect over and over again, even though the context throws
|
|
287
|
+
// this is a rouch edge of uWs
|
|
288
|
+
setTimeout(() => {
|
|
289
|
+
client.end();
|
|
290
|
+
}, 1000);
|
|
291
|
+
// original code
|
|
292
|
+
// (global.setImmediate ?? global.setTimeout)(() => {
|
|
293
|
+
// client.end()
|
|
294
|
+
// });
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
await createContextAsync();
|
|
298
|
+
allClients.add(client);
|
|
299
|
+
},
|
|
300
|
+
async message(client, rawMsg) {
|
|
301
|
+
try {
|
|
302
|
+
const stringMsg = Buffer.from(rawMsg).toString();
|
|
303
|
+
// eslint-disable-next-line @typescript-eslint/no-base-to-string
|
|
304
|
+
const msgJSON = JSON.parse(stringMsg);
|
|
305
|
+
const msgs = Array.isArray(msgJSON) ? msgJSON : [msgJSON];
|
|
306
|
+
const promises = msgs
|
|
307
|
+
.map((raw) => parseMessage(raw, transformer))
|
|
308
|
+
.map((value) => handleRequest(client, value));
|
|
309
|
+
await Promise.all(promises);
|
|
310
|
+
}
|
|
311
|
+
catch (cause) {
|
|
312
|
+
const error = new server_1.TRPCError({
|
|
313
|
+
code: 'PARSE_ERROR',
|
|
314
|
+
cause,
|
|
315
|
+
});
|
|
316
|
+
respond(client, {
|
|
317
|
+
id: null,
|
|
318
|
+
error: (0, shared_1.getErrorShape)({
|
|
319
|
+
config: router._def._config,
|
|
320
|
+
error,
|
|
321
|
+
type: 'unknown',
|
|
322
|
+
path: undefined,
|
|
323
|
+
input: undefined,
|
|
324
|
+
ctx: undefined,
|
|
325
|
+
}),
|
|
326
|
+
});
|
|
327
|
+
}
|
|
328
|
+
},
|
|
329
|
+
close(client) {
|
|
330
|
+
const data = client.getUserData();
|
|
331
|
+
for (const sub of data.clientSubscriptions.values()) {
|
|
332
|
+
sub.unsubscribe();
|
|
333
|
+
}
|
|
334
|
+
data.clientSubscriptions.clear();
|
|
335
|
+
allClients.delete(client);
|
|
336
|
+
},
|
|
337
|
+
});
|
|
338
|
+
return {
|
|
339
|
+
broadcastReconnectNotification: () => {
|
|
340
|
+
const response = {
|
|
341
|
+
id: null,
|
|
342
|
+
method: 'reconnect',
|
|
343
|
+
};
|
|
344
|
+
const data = JSON.stringify(response);
|
|
345
|
+
allClients.forEach((v) => {
|
|
346
|
+
v.send(data);
|
|
347
|
+
});
|
|
348
|
+
},
|
|
349
|
+
};
|
|
350
|
+
}
|
|
351
|
+
exports.applyWSHandler = applyWSHandler;
|
|
352
|
+
//# sourceMappingURL=applyWsHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"applyWsHandler.js","sourceRoot":"","sources":["../src/applyWsHandler.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -16,42 +16,31 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
exports.createUWebSocketsHandler = void 0;
|
|
18
18
|
const requestHandler_1 = require("./requestHandler");
|
|
19
|
+
const utils_1 = require("./utils");
|
|
20
|
+
const applyWsHandler_1 = require("./applyWsHandler");
|
|
19
21
|
__exportStar(require("./types"), exports);
|
|
22
|
+
__exportStar(require("./applyWsHandler"), exports);
|
|
20
23
|
/**
|
|
21
24
|
* @param uWsApp uWebsockets server instance
|
|
22
25
|
* @param prefix The path to trpc without trailing slash (ex: "/trpc")
|
|
23
26
|
* @param opts handler options
|
|
24
27
|
*/
|
|
25
|
-
function createUWebSocketsHandler(uWsApp, prefix, opts
|
|
26
|
-
// opts: uHTTPHandlerOptions<TRouter, TRequest, TResponse>
|
|
27
|
-
) {
|
|
28
|
-
const prefixTrimLength = prefix.length + 1; // remove /* from url
|
|
28
|
+
function createUWebSocketsHandler(uWsApp, prefix, opts) {
|
|
29
29
|
const handler = (res, req) => {
|
|
30
|
-
const
|
|
31
|
-
const url = req.getUrl().substring(prefixTrimLength);
|
|
32
|
-
const query = req.getQuery();
|
|
33
|
-
const headers = {};
|
|
34
|
-
req.forEach((key, value) => {
|
|
35
|
-
// TODO handle headers with the same key, potential issue
|
|
36
|
-
headers[key] = value;
|
|
37
|
-
});
|
|
38
|
-
// new request object needs to be created, because socket
|
|
39
|
-
// can only be accessed synchronously, after await it cannot be accessed
|
|
40
|
-
const wrappedReq = {
|
|
41
|
-
headers,
|
|
42
|
-
method,
|
|
43
|
-
query,
|
|
44
|
-
url,
|
|
45
|
-
};
|
|
30
|
+
const wrappedReq = (0, utils_1.extractAndWrapHttpRequest)(prefix, req);
|
|
46
31
|
(0, requestHandler_1.uWsHTTPRequestHandler)({
|
|
47
32
|
req: wrappedReq,
|
|
48
33
|
res: res,
|
|
49
|
-
path: url,
|
|
34
|
+
path: wrappedReq.url,
|
|
50
35
|
...opts,
|
|
51
36
|
});
|
|
52
37
|
};
|
|
53
38
|
uWsApp.get(prefix + '/*', handler);
|
|
54
39
|
uWsApp.post(prefix + '/*', handler);
|
|
40
|
+
if (opts.enableSubscriptions) {
|
|
41
|
+
opts.router;
|
|
42
|
+
(0, applyWsHandler_1.applyWSHandler)(uWsApp, prefix, opts);
|
|
43
|
+
}
|
|
55
44
|
}
|
|
56
45
|
exports.createUWebSocketsHandler = createUWebSocketsHandler;
|
|
57
46
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AACA,qDAAyD;AACzD,mCAAoD;AACpD,qDAAqE;AAIrE,0CAAwB;AACxB,mDAAiC;AAEjC;;;;GAIG;AACH,SAAgB,wBAAwB,CACtC,MAAoB,EACpB,MAAc,EACd,IAAoE;IAEpE,MAAM,OAAO,GAAG,CAAC,GAAiB,EAAE,GAAgB,EAAE,EAAE;QACtD,MAAM,UAAU,GAAG,IAAA,iCAAyB,EAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAE1D,IAAA,sCAAqB,EAAC;YACpB,GAAG,EAAE,UAAU;YACf,GAAG,EAAE,GAAG;YACR,IAAI,EAAE,UAAU,CAAC,GAAG;YACpB,GAAG,IAAI;SACR,CAAC,CAAC;IACL,CAAC,CAAC;IACF,MAAM,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;IACnC,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;IAEpC,IAAI,IAAI,CAAC,mBAAmB,EAAE;QAC5B,IAAI,CAAC,MAAM,CAAC;QACZ,IAAA,+BAAc,EAAC,MAAM,EAAE,MAAM,EAAE,IAAkC,CAAC,CAAC;KACpE;AACH,CAAC;AAtBD,4DAsBC"}
|
package/dist/requestHandler.js
CHANGED
|
@@ -5,6 +5,11 @@ const utils_1 = require("./utils");
|
|
|
5
5
|
const http_1 = require("@trpc/server/http");
|
|
6
6
|
async function uWsHTTPRequestHandler(opts) {
|
|
7
7
|
const handleViaMiddleware = opts.middleware ?? ((_req, _res, next) => next());
|
|
8
|
+
let aborted = false;
|
|
9
|
+
opts.res.onAborted(() => {
|
|
10
|
+
// console.log('request was aborted');
|
|
11
|
+
aborted = true;
|
|
12
|
+
});
|
|
8
13
|
return handleViaMiddleware(opts.req, opts.res, async (err) => {
|
|
9
14
|
if (err)
|
|
10
15
|
throw err;
|
|
@@ -14,11 +19,8 @@ async function uWsHTTPRequestHandler(opts) {
|
|
|
14
19
|
// this may not be needed
|
|
15
20
|
const query = new URLSearchParams(opts.req.query);
|
|
16
21
|
const { res, req } = opts;
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
// console.log('request was aborted');
|
|
20
|
-
aborted = true;
|
|
21
|
-
});
|
|
22
|
+
if (aborted)
|
|
23
|
+
return;
|
|
22
24
|
const bodyResult = await (0, utils_1.getPostBody)(req.method, res, opts.maxBodySize);
|
|
23
25
|
const reqObj = {
|
|
24
26
|
method: opts.req.method,
|
|
@@ -43,10 +45,10 @@ async function uWsHTTPRequestHandler(opts) {
|
|
|
43
45
|
},
|
|
44
46
|
});
|
|
45
47
|
if (aborted) {
|
|
46
|
-
// TODO check this behavior
|
|
47
48
|
return;
|
|
48
49
|
}
|
|
49
50
|
res.cork(() => {
|
|
51
|
+
res.writeStatus(result.status.toString()); // is this okay?
|
|
50
52
|
// oldschool way of writing headers
|
|
51
53
|
for (const [key, value] of Object.entries(result.headers ?? {})) {
|
|
52
54
|
if (typeof value === 'undefined') {
|
|
@@ -59,7 +61,7 @@ async function uWsHTTPRequestHandler(opts) {
|
|
|
59
61
|
else
|
|
60
62
|
res.writeHeader(key, value);
|
|
61
63
|
}
|
|
62
|
-
|
|
64
|
+
res.end(result.body);
|
|
63
65
|
});
|
|
64
66
|
});
|
|
65
67
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requestHandler.js","sourceRoot":"","sources":["../src/requestHandler.ts"],"names":[],"mappings":";;;AACA,
|
|
1
|
+
{"version":3,"file":"requestHandler.js","sourceRoot":"","sources":["../src/requestHandler.ts"],"names":[],"mappings":"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"}
|
package/dist/utils.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.extractAndWrapHttpRequest = exports.getPostBody = void 0;
|
|
4
4
|
const server_1 = require("@trpc/server");
|
|
5
5
|
function getPostBody(method, res, maxBodySize) {
|
|
6
6
|
return new Promise((resolve) => {
|
|
@@ -52,10 +52,20 @@ function getPostBody(method, res, maxBodySize) {
|
|
|
52
52
|
});
|
|
53
53
|
}
|
|
54
54
|
exports.getPostBody = getPostBody;
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
55
|
+
function extractAndWrapHttpRequest(prefix, req) {
|
|
56
|
+
const method = req.getMethod().toUpperCase();
|
|
57
|
+
const url = req.getUrl().substring(prefix.length + 1);
|
|
58
|
+
const query = new URLSearchParams(req.getQuery());
|
|
59
|
+
const headers = {};
|
|
60
|
+
req.forEach((key, value) => {
|
|
61
|
+
headers[key] = value;
|
|
62
|
+
});
|
|
63
|
+
return {
|
|
64
|
+
headers,
|
|
65
|
+
method,
|
|
66
|
+
query,
|
|
67
|
+
url,
|
|
68
|
+
};
|
|
59
69
|
}
|
|
60
|
-
exports.
|
|
70
|
+
exports.extractAndWrapHttpRequest = extractAndWrapHttpRequest;
|
|
61
71
|
//# sourceMappingURL=utils.js.map
|
package/dist/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;;AAEA,yCAAyC;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;;AAEA,yCAAyC;AAGzC,SAAgB,WAAW,CAAC,MAAM,EAAE,GAAiB,EAAE,WAAoB;IACzE,OAAO,IAAI,OAAO,CAGhB,CAAC,OAAO,EAAE,EAAE;QACZ,IAAI,MAAM,IAAI,KAAK,EAAE;YACnB,yBAAyB;YACzB,OAAO,CAAC;gBACN,EAAE,EAAE,IAAI;gBACR,IAAI,EAAE,SAAS;gBACf,YAAY,EAAE,KAAK;aACpB,CAAC,CAAC;SACJ;QAED,IAAI,MAAc,CAAC;QAEnB,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE;YACxB,+CAA+C;YAC/C,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,EAAE;gBAClC,OAAO,CAAC;oBACN,EAAE,EAAE,IAAI;oBACR,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;oBAChC,YAAY,EAAE,KAAK;iBACpB,CAAC,CAAC;gBACH,OAAO;aACR;YAED,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAE9B,IAAI,WAAW,IAAI,MAAM,CAAC,MAAM,IAAI,WAAW,EAAE;gBAC/C,OAAO,CAAC;oBACN,EAAE,EAAE,KAAK;oBACT,KAAK,EAAE,IAAI,kBAAS,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC;iBACpD,CAAC,CAAC;aACJ;YACD,IAAI,MAAM;gBACR,iBAAiB;gBACjB,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;;gBACrC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YAErC,IAAI,MAAM,EAAE;gBACV,OAAO,CAAC;oBACN,EAAE,EAAE,IAAI;oBACR,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE;oBACvB,YAAY,EAAE,KAAK;iBACpB,CAAC,CAAC;aACJ;QACH,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;YACjB,OAAO,CAAC;gBACN,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,IAAI,kBAAS,CAAC,EAAE,IAAI,EAAE,uBAAuB,EAAE,CAAC;aACxD,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAxDD,kCAwDC;AAED,SAAgB,yBAAyB,CACvC,MAAc,EACd,GAAgB;IAEhB,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC,WAAW,EAAoB,CAAC;IAC/D,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IAElD,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;QACzB,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,OAAO;QACP,MAAM;QACN,KAAK;QACL,GAAG;KACJ,CAAC;AACJ,CAAC;AAnBD,8DAmBC"}
|