trpc-uwebsockets 0.9.0 → 0.9.3

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
@@ -65,6 +65,12 @@ createUWebSocketsHandler(app, '/trpc', {
65
65
  createContext,
66
66
  });
67
67
 
68
+ /* dont crash on unknown request */
69
+ app.any('/*', (res) => {
70
+ res.writeStatus('404 NOT FOUND');
71
+ res.end();
72
+ });
73
+
68
74
  app.listen('0.0.0.0', 8000, () => {
69
75
  console.log('Server listening on http://localhost:8000');
70
76
  });
@@ -72,6 +78,37 @@ app.listen('0.0.0.0', 8000, () => {
72
78
 
73
79
  # API
74
80
 
81
+ Create uWebSockets handler options
82
+
83
+ ```typescript
84
+ function createUWebSocketsHandler<TRouter extends AnyRouter>(
85
+ /* instance of the uWebSockets server */
86
+ uWsApp: TemplatedApp,
87
+ /* Path to trpc without trailing slash (ex: "/trpc") */
88
+ pathPrefix: string,
89
+ /* Handler options */
90
+ opts: UWebSocketsCreateHandlerOptions<TRouter>
91
+ );
92
+ ```
93
+
94
+ Handler options
95
+
96
+ ```typescript
97
+ type UWebSocketsCreateHandlerOptions<TRouter extends AnyRouter> = {
98
+ /* trpc router */
99
+ router: TRouter;
100
+ /* optional create context */
101
+ createContext?: (
102
+ opts: UWebSocketsCreateContextOptions
103
+ ) => Promise<inferRouterContext<TRouter>> | inferRouterContext<TRouter>;
104
+ /* optional pre-request handler. Useful for dealing with CORS, or sending extra headers */
105
+ onRequest?: (
106
+ req: UWebSocketsRequestObject,
107
+ res: UWebSocketsResponseObject
108
+ ) => void;
109
+ };
110
+ ```
111
+
75
112
  Create context options
76
113
 
77
114
  ```typescript
@@ -84,7 +121,7 @@ type UWebSocketsCreateContextOptions = {
84
121
  path: string;
85
122
  getCookies: (opts?: CookieParseOptions) => Record<string, string>;
86
123
  };
87
- /* */
124
+ /* minimal response interface */
88
125
  res: {
89
126
  setStatus(status: number): void;
90
127
  setHeader(key: string, value: string): void;
package/dist/index.js CHANGED
@@ -23,10 +23,9 @@ const utils_1 = require("./utils");
23
23
  const cookie_1 = __importDefault(require("cookie"));
24
24
  __exportStar(require("./types"), exports);
25
25
  /**
26
- *
27
26
  * @param uWsApp uWebsockets server instance
28
- * @param pathPrefix The path to endpoint without trailing slash (ex: "/trpc")
29
- * @param opts router and createContext options
27
+ * @param pathPrefix The path to trpc without trailing slash (ex: "/trpc")
28
+ * @param opts handler options
30
29
  */
31
30
  function createUWebSocketsHandler(uWsApp, pathPrefix, opts) {
32
31
  const prefixTrimLength = pathPrefix.length + 1; // remove /* from url
@@ -109,6 +108,8 @@ function createUWebSocketsHandler(uWsApp, pathPrefix, opts) {
109
108
  // res.end();
110
109
  // return;
111
110
  }
111
+ if (opts.onRequest)
112
+ opts.onRequest(request, response);
112
113
  //send all cookies
113
114
  resOverride.cookies.forEach((value) => {
114
115
  res.writeHeader('Set-Cookie', value);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "private": false,
3
3
  "name": "trpc-uwebsockets",
4
4
  "description": "tRPC adapter for uWebSockets.js server",
5
- "version": "0.9.0",
5
+ "version": "0.9.3",
6
6
  "main": "./dist/index.js",
7
7
  "type": "commonjs",
8
8
  "types": "./types/index.d.ts",
package/src/index.ts CHANGED
@@ -4,15 +4,10 @@ import {
4
4
  resolveHTTPResponse,
5
5
  } from '@trpc/server';
6
6
  import { HTTPRequest } from '@trpc/server/dist/declarations/src/http/internals/types';
7
- import { CookieParseOptions, CookieSerializeOptions } from 'cookie';
8
- import type {
9
- HttpRequest,
10
- HttpResponse,
11
- RecognizedString,
12
- TemplatedApp,
13
- } from 'uWebSockets.js';
7
+ import { CookieSerializeOptions } from 'cookie';
8
+ import type { HttpRequest, HttpResponse, TemplatedApp } from 'uWebSockets.js';
14
9
  import {
15
- UWebSocketsRegisterEndpointOptions as UWebSocketsCreateHandlerOptions,
10
+ UWebSocketsCreateHandlerOptions,
16
11
  UWebSocketsRequestObject,
17
12
  UWebSocketsResponseObject,
18
13
  } from './types';
@@ -21,10 +16,9 @@ import cookie from 'cookie';
21
16
  export * from './types';
22
17
 
23
18
  /**
24
- *
25
19
  * @param uWsApp uWebsockets server instance
26
- * @param pathPrefix The path to endpoint without trailing slash (ex: "/trpc")
27
- * @param opts router and createContext options
20
+ * @param pathPrefix The path to trpc without trailing slash (ex: "/trpc")
21
+ * @param opts handler options
28
22
  */
29
23
  export function createUWebSocketsHandler<TRouter extends AnyRouter>(
30
24
  uWsApp: TemplatedApp,
@@ -41,6 +35,7 @@ export function createUWebSocketsHandler<TRouter extends AnyRouter>(
41
35
  req.setYield(true);
42
36
  return;
43
37
  }
38
+
44
39
  const path = req.getUrl().substring(prefixTrimLength);
45
40
  const query = new URLSearchParams(decodeURIComponent(req.getQuery()));
46
41
 
@@ -128,6 +123,8 @@ export function createUWebSocketsHandler<TRouter extends AnyRouter>(
128
123
  // return;
129
124
  }
130
125
 
126
+ if (opts.onRequest) opts.onRequest(request, response);
127
+
131
128
  //send all cookies
132
129
  resOverride.cookies.forEach((value) => {
133
130
  res.writeHeader('Set-Cookie', value);
package/src/types.ts CHANGED
@@ -1,11 +1,19 @@
1
1
  import { AnyRouter, inferRouterContext } from '@trpc/server';
2
- import { TemplatedApp } from 'uWebSockets.js';
2
+ import { HttpRequest, HttpResponse, TemplatedApp } from 'uWebSockets.js';
3
3
  import { CookieParseOptions, CookieSerializeOptions } from 'cookie';
4
- export type UWebSocketsRegisterEndpointOptions<TRouter extends AnyRouter> = {
4
+
5
+ export type UWebSocketsCreateHandlerOptions<TRouter extends AnyRouter> = {
6
+ /* trpc router */
5
7
  router: TRouter;
8
+ /* optional create context */
6
9
  createContext?: (
7
10
  opts: UWebSocketsCreateContextOptions
8
11
  ) => Promise<inferRouterContext<TRouter>> | inferRouterContext<TRouter>;
12
+ /* optional pre-request handler. Useful for dealing with CORS */
13
+ onRequest?: (
14
+ req: UWebSocketsRequestObject,
15
+ res: UWebSocketsResponseObject
16
+ ) => void;
9
17
  };
10
18
 
11
19
  export type UWebSocketsRequestObject = {
@@ -114,6 +114,11 @@ async function startServer() {
114
114
  // need to register everything on the app object,
115
115
  // as uWebSockets does not have middleware
116
116
  createUWebSocketsHandler(app, '/trpc', {
117
+ onRequest: (req, res) => {
118
+ // allows for prerequest handling
119
+ const origin = req.headers.origin ?? '*';
120
+ res.setHeader('Access-Control-Allow-Origin', origin);
121
+ },
117
122
  router: makeRouter(),
118
123
  createContext: makeContext(),
119
124
  });
@@ -123,6 +128,11 @@ async function startServer() {
123
128
  res.end();
124
129
  });
125
130
 
131
+ app.any('/*', (res) => {
132
+ res.writeStatus('404 NOT FOUND');
133
+ res.end();
134
+ });
135
+
126
136
  const { socket } = await new Promise<{
127
137
  socket: uWs.us_listen_socket;
128
138
  }>((resolve) => {
@@ -225,7 +235,9 @@ test('setting cookies and headers', async () => {
225
235
  'one=nom, two=nom%20nom'
226
236
  );
227
237
  expect(monsterRes.headers.get('x-spooked')).toEqual('true');
238
+ });
228
239
 
240
+ test('error handling', async () => {
229
241
  const indexRes = await fetch(`http://localhost:${testPort}`);
230
242
  expect(indexRes.status).toEqual(200);
231
243
 
@@ -239,4 +251,13 @@ test('setting cookies and headers', async () => {
239
251
  `http://localhost:${testPort}/trpc/hello?input=${badInput}`
240
252
  );
241
253
  expect(badRes.status).toEqual(400);
254
+
255
+ const badPath = await fetch(
256
+ `http://localhost:${testPort}/trpc/nonexisting?input=${badInput}`
257
+ );
258
+ expect(badPath.status).toEqual(400);
259
+
260
+ const uncaught = await fetch(`http://localhost:${testPort}/badurl`);
261
+
262
+ expect(uncaught.status).toEqual(404);
242
263
  });
package/types/index.d.ts CHANGED
@@ -1,11 +1,10 @@
1
1
  import { AnyRouter } from '@trpc/server';
2
2
  import type { TemplatedApp } from 'uWebSockets.js';
3
- import { UWebSocketsRegisterEndpointOptions as UWebSocketsCreateHandlerOptions } from './types';
3
+ import { UWebSocketsCreateHandlerOptions } from './types';
4
4
  export * from './types';
5
5
  /**
6
- *
7
6
  * @param uWsApp uWebsockets server instance
8
- * @param pathPrefix The path to endpoint without trailing slash (ex: "/trpc")
9
- * @param opts router and createContext options
7
+ * @param pathPrefix The path to trpc without trailing slash (ex: "/trpc")
8
+ * @param opts handler options
10
9
  */
11
10
  export declare function createUWebSocketsHandler<TRouter extends AnyRouter>(uWsApp: TemplatedApp, pathPrefix: string, opts: UWebSocketsCreateHandlerOptions<TRouter>): void;
package/types/types.d.ts CHANGED
@@ -1,9 +1,10 @@
1
1
  import { AnyRouter, inferRouterContext } from '@trpc/server';
2
2
  import { TemplatedApp } from 'uWebSockets.js';
3
3
  import { CookieParseOptions, CookieSerializeOptions } from 'cookie';
4
- export declare type UWebSocketsRegisterEndpointOptions<TRouter extends AnyRouter> = {
4
+ export declare type UWebSocketsCreateHandlerOptions<TRouter extends AnyRouter> = {
5
5
  router: TRouter;
6
6
  createContext?: (opts: UWebSocketsCreateContextOptions) => Promise<inferRouterContext<TRouter>> | inferRouterContext<TRouter>;
7
+ onRequest?: (req: UWebSocketsRequestObject, res: UWebSocketsResponseObject) => void;
7
8
  };
8
9
  export declare type UWebSocketsRequestObject = {
9
10
  headers: Record<string, string>;