trpc-uwebsockets 10.38.3 → 10.40.0-beta.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/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
- Npm
12
+
13
+ Or install beta version with subscription support
14
+
13
15
  ```bash
14
- npm i trpc-uwebsockets
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 router
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: string;
102
+ query: URLSearchParams;
99
103
  path: string;
100
104
  };
101
- /* minimal response interface, useful for setting cookies */
105
+ /* see https://unetworking.github.io/uWebSockets.js/generated/interfaces/HttpResponse.html */
102
106
  res: {
103
- setStatus(status: number): void;
104
- setHeader(name: string, value: string): void;
107
+ writeStatus(status: RecognizedString): HttpResponse;
108
+ writeHeader(key: RecognizedString, value: RecognizedString): HttpResponse;
105
109
  };
106
110
  };
107
111
  ```
108
112
 
109
- # Testing
113
+ # Enabling subscrptions
110
114
 
111
- ```bash
112
- yarn t
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
- or
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
- ```bash
118
- yarn test:watch
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
- # Todo
141
+ ## example of subscrption client
122
142
 
123
- - [ ] Various improvements (res.tryEnd + reading multiple headers /w same key)
124
- - [ ] Subscription support with websockets
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,347 @@
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
+ // close in next tick
286
+ // FIXME check if this is okay?
287
+ (global.setImmediate ?? global.setTimeout)(() => {
288
+ client.close();
289
+ });
290
+ }
291
+ }
292
+ await createContextAsync();
293
+ allClients.add(client);
294
+ },
295
+ async message(client, rawMsg) {
296
+ try {
297
+ const stringMsg = Buffer.from(rawMsg).toString();
298
+ // eslint-disable-next-line @typescript-eslint/no-base-to-string
299
+ const msgJSON = JSON.parse(stringMsg);
300
+ const msgs = Array.isArray(msgJSON) ? msgJSON : [msgJSON];
301
+ const promises = msgs
302
+ .map((raw) => parseMessage(raw, transformer))
303
+ .map((value) => handleRequest(client, value));
304
+ await Promise.all(promises);
305
+ }
306
+ catch (cause) {
307
+ const error = new server_1.TRPCError({
308
+ code: 'PARSE_ERROR',
309
+ cause,
310
+ });
311
+ respond(client, {
312
+ id: null,
313
+ error: (0, shared_1.getErrorShape)({
314
+ config: router._def._config,
315
+ error,
316
+ type: 'unknown',
317
+ path: undefined,
318
+ input: undefined,
319
+ ctx: undefined,
320
+ }),
321
+ });
322
+ }
323
+ },
324
+ close(client) {
325
+ const data = client.getUserData();
326
+ for (const sub of data.clientSubscriptions.values()) {
327
+ sub.unsubscribe();
328
+ }
329
+ data.clientSubscriptions.clear();
330
+ allClients.delete(client);
331
+ },
332
+ });
333
+ return {
334
+ broadcastReconnectNotification: () => {
335
+ const response = {
336
+ id: null,
337
+ method: 'reconnect',
338
+ };
339
+ const data = JSON.stringify(response);
340
+ allClients.forEach((v) => {
341
+ v.send(data);
342
+ });
343
+ },
344
+ };
345
+ }
346
+ exports.applyWSHandler = applyWSHandler;
347
+ //# 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 method = req.getMethod().toUpperCase();
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":";;;;;;;;;;;;;;;;;AAGA,qDAAyD;AAIzD,0CAAwB;AAKxB;;;;GAIG;AACH,SAAgB,wBAAwB,CACtC,MAAoB,EACpB,MAAc,EACd,IAAuC;AACvC,0DAA0D;;IAE1D,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,qBAAqB;IAEjE,MAAM,OAAO,GAAG,CAAC,GAAiB,EAAE,GAAgB,EAAE,EAAE;QACtD,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC,WAAW,EAAoB,CAAC;QAC/D,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QACrD,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;QAE7B,MAAM,OAAO,GAA2B,EAAE,CAAC;QAC3C,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;YACzB,yDAAyD;YACzD,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,yDAAyD;QACzD,wEAAwE;QACxE,MAAM,UAAU,GAAuB;YACrC,OAAO;YACP,MAAM;YACN,KAAK;YACL,GAAG;SACJ,CAAC;QAEF,IAAA,sCAAqB,EAAC;YACpB,GAAG,EAAE,UAAU;YACf,GAAG,EAAE,GAAG;YACR,IAAI,EAAE,GAAG;YACT,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;AACtC,CAAC;AArCD,4DAqCC"}
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"}
@@ -43,10 +43,10 @@ async function uWsHTTPRequestHandler(opts) {
43
43
  },
44
44
  });
45
45
  if (aborted) {
46
- // TODO check this behavior
47
46
  return;
48
47
  }
49
48
  res.cork(() => {
49
+ res.writeStatus(result.status.toString()); // is this okay?
50
50
  // oldschool way of writing headers
51
51
  for (const [key, value] of Object.entries(result.headers ?? {})) {
52
52
  if (typeof value === 'undefined') {
@@ -59,7 +59,7 @@ async function uWsHTTPRequestHandler(opts) {
59
59
  else
60
60
  res.writeHeader(key, value);
61
61
  }
62
- (0, utils_1.sendResponse)(res, result.body);
62
+ res.end(result.body);
63
63
  });
64
64
  });
65
65
  }
@@ -1 +1 @@
1
- {"version":3,"file":"requestHandler.js","sourceRoot":"","sources":["../src/requestHandler.ts"],"names":[],"mappings":"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"}
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.sendResponse = exports.getPostBody = void 0;
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
- // FIXME buffer the output with tryEnd instead
56
- // https://github.com/uNetworking/uWebSockets.js/blob/master/examples/VideoStreamer.js
57
- function sendResponse(res, payload) {
58
- res.end(payload);
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.sendResponse = sendResponse;
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;AAEzC,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,8CAA8C;AAC9C,sFAAsF;AACtF,SAAgB,YAAY,CAAC,GAAiB,EAAE,OAAgB;IAC9D,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACnB,CAAC;AAFD,oCAEC"}
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"}