trpc-uwebsockets 0.8.0 → 0.8.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 +23 -12
- package/dist/index.js +25 -6
- package/dist/index.js.map +1 -1
- package/dist/types.js +2 -1
- package/dist/utils.js +7 -3
- package/dist/utils.js.map +1 -1
- package/package.json +9 -4
- package/src/index.ts +1 -0
- package/src/types.ts +2 -1
- package/types/types.d.ts +2 -1
package/README.md
CHANGED
|
@@ -4,12 +4,6 @@
|
|
|
4
4
|
|
|
5
5
|
# Installation
|
|
6
6
|
|
|
7
|
-
```bash
|
|
8
|
-
yarn install trpc-uwebsockets
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
or
|
|
12
|
-
|
|
13
7
|
```bash
|
|
14
8
|
yarn add trpc-uwebsockets
|
|
15
9
|
```
|
|
@@ -32,12 +26,11 @@ type Context = {
|
|
|
32
26
|
} | null;
|
|
33
27
|
};
|
|
34
28
|
|
|
35
|
-
const createContext
|
|
29
|
+
const createContext = (opts: UWebSocketsContextOptions): Context => {
|
|
36
30
|
const getUser = () => {
|
|
37
|
-
if (opts
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
};
|
|
31
|
+
if (opts?.req.headers.authorization) {
|
|
32
|
+
// const user = await decodeJwtToken(req.headers.authorization.split(' ')[1])
|
|
33
|
+
// return user;
|
|
41
34
|
}
|
|
42
35
|
return null;
|
|
43
36
|
};
|
|
@@ -72,10 +65,28 @@ createUWebSocketsHandler(app, '/trpc', {
|
|
|
72
65
|
});
|
|
73
66
|
|
|
74
67
|
app.listen('0.0.0.0', 8000, () => {
|
|
75
|
-
console.log('
|
|
68
|
+
console.log('Server listening on http://localhost:8000');
|
|
76
69
|
});
|
|
77
70
|
```
|
|
78
71
|
|
|
72
|
+
# API
|
|
73
|
+
|
|
74
|
+
Create context options
|
|
75
|
+
|
|
76
|
+
```typescript
|
|
77
|
+
type UWebSocketsCreateContextOptions = {
|
|
78
|
+
/* read-only request information */
|
|
79
|
+
req: {
|
|
80
|
+
headers: Record<string, string>;
|
|
81
|
+
method: 'POST' | 'GET';
|
|
82
|
+
query: URLSearchParams;
|
|
83
|
+
path: string;
|
|
84
|
+
};
|
|
85
|
+
/* instance of the uWebSockets server */
|
|
86
|
+
uWs: TemplatedApp;
|
|
87
|
+
};
|
|
88
|
+
```
|
|
89
|
+
|
|
79
90
|
# Testing
|
|
80
91
|
|
|
81
92
|
```bash
|
package/dist/index.js
CHANGED
|
@@ -1,13 +1,30 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.createUWebSocketsHandler = void 0;
|
|
18
|
+
const server_1 = require("@trpc/server");
|
|
19
|
+
const utils_1 = require("./utils");
|
|
20
|
+
__exportStar(require("./types"), exports);
|
|
4
21
|
/**
|
|
5
22
|
*
|
|
6
23
|
* @param uWsApp uWebsockets server instance
|
|
7
24
|
* @param pathPrefix The path to endpoint without trailing slash (ex: "/trpc")
|
|
8
25
|
* @param opts router and createContext functions
|
|
9
26
|
*/
|
|
10
|
-
|
|
27
|
+
function createUWebSocketsHandler(uWsApp, pathPrefix, opts) {
|
|
11
28
|
const prefixTrimLength = pathPrefix.length + 1; // remove /* from url
|
|
12
29
|
const handler = async (res, req) => {
|
|
13
30
|
const method = req.getMethod().toUpperCase();
|
|
@@ -31,12 +48,13 @@ export function createUWebSocketsHandler(uWsApp, pathPrefix, opts) {
|
|
|
31
48
|
query,
|
|
32
49
|
path,
|
|
33
50
|
};
|
|
34
|
-
const bodyResult = await readPostBody(method, res);
|
|
51
|
+
const bodyResult = await (0, utils_1.readPostBody)(method, res);
|
|
35
52
|
// req is no longer available!
|
|
36
53
|
const createContext = async function _() {
|
|
37
54
|
//res could be proxied here
|
|
38
55
|
return await opts.createContext?.({
|
|
39
56
|
// res,
|
|
57
|
+
uWs: uWsApp,
|
|
40
58
|
req: requestObj,
|
|
41
59
|
});
|
|
42
60
|
};
|
|
@@ -48,7 +66,7 @@ export function createUWebSocketsHandler(uWsApp, pathPrefix, opts) {
|
|
|
48
66
|
};
|
|
49
67
|
// TODO batching, onError options need implementation.
|
|
50
68
|
// responseMeta is not applicable?
|
|
51
|
-
const result = await resolveHTTPResponse({
|
|
69
|
+
const result = await (0, server_1.resolveHTTPResponse)({
|
|
52
70
|
path,
|
|
53
71
|
createContext,
|
|
54
72
|
router: opts.router,
|
|
@@ -89,4 +107,5 @@ export function createUWebSocketsHandler(uWsApp, pathPrefix, opts) {
|
|
|
89
107
|
};
|
|
90
108
|
uWsApp.any(pathPrefix + '/*', handler);
|
|
91
109
|
}
|
|
110
|
+
exports.createUWebSocketsHandler = createUWebSocketsHandler;
|
|
92
111
|
//# 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":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,yCAIsB;AAOtB,mCAAuC;AACvC,0CAAwB;AAExB;;;;;GAKG;AACH,SAAgB,wBAAwB,CACtC,MAAwB,EACxB,UAAkB,EAClB,IAAiD;IAEjD,MAAM,gBAAgB,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,qBAAqB;IAErE,MAAM,OAAO,GAAG,KAAK,EAAE,GAAqB,EAAE,GAAoB,EAAE,EAAE;QACpE,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC,WAAW,EAAE,CAAC;QAC7C,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM,EAAE;YACzC,oDAAoD;YACpD,8CAA8C;YAC9C,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACnB,OAAO;SACR;QACD,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QACtD,MAAM,KAAK,GAAG,IAAI,eAAe,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAEtE,MAAM,OAAO,GAA2B,EAAE,CAAC;QAC3C,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;YACzB,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,yDAAyD;QACzD,wEAAwE;QACxE,MAAM,UAAU,GAA6B;YAC3C,OAAO;YACP,MAAM;YACN,KAAK;YACL,IAAI;SACL,CAAC;QAEF,MAAM,UAAU,GAAG,MAAM,IAAA,oBAAY,EAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAEnD,8BAA8B;QAE9B,MAAM,aAAa,GAAG,KAAK,UAAU,CAAC;YAGpC,2BAA2B;YAC3B,OAAO,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;gBAChC,OAAO;gBACP,GAAG,EAAE,MAAM;gBACX,GAAG,EAAE,UAAU;aAChB,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,MAAM,aAAa,GAAgB;YACjC,MAAM;YACN,OAAO;YACP,KAAK;YACL,IAAI,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;SAClD,CAAC;QAEF,sDAAsD;QACtD,kCAAkC;QAClC,MAAM,MAAM,GAAG,MAAM,IAAA,4BAAmB,EAAC;YACvC,IAAI;YACJ,aAAa;YACb,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,GAAG,EAAE,aAAa;YAClB,KAAK,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK;SAC/C,CAAC,CAAC;QAEH,IAAI,QAAQ,IAAI,MAAM,EAAE;YACtB,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,MAAM;SAClD;aAAM;YACL,kDAAkD;YAClD,gFAAgF;YAChF,oEAAoE;YACpE,mCAAmC;YAEnC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE;gBACZ,GAAG,CAAC,WAAW,CAAC,2BAA2B,CAAC,CAAC;gBAC7C,GAAG,CAAC,GAAG,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;YACH,OAAO;SACR;QAED,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE;YAC/D,IAAI,OAAO,KAAK,KAAK,WAAW,EAAE;gBAChC,SAAS;aACV;YACD,sEAAsE;YACtE,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;gBACtB,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;oBACvB,GAAG,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;gBAC/B,CAAC,CAAC,CAAC;;gBACA,GAAG,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;SAClC;QAED,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE;YACZ,IAAI,MAAM,CAAC,IAAI;gBAAE,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACxC,GAAG,CAAC,GAAG,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,CAAC,GAAG,CAAC,UAAU,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;AACzC,CAAC;AAlGD,4DAkGC"}
|
package/dist/types.js
CHANGED
package/dist/utils.js
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.readPostBody = void 0;
|
|
4
|
+
const server_1 = require("@trpc/server");
|
|
5
|
+
function readPostBody(method, res) {
|
|
3
6
|
return new Promise((resolve) => {
|
|
4
7
|
if (method == 'GET') {
|
|
5
8
|
// no body in get request
|
|
@@ -39,9 +42,10 @@ export function readPostBody(method, res) {
|
|
|
39
42
|
res.onAborted(() => {
|
|
40
43
|
resolve({
|
|
41
44
|
ok: false,
|
|
42
|
-
error: new TRPCError({ code: 'CLIENT_CLOSED_REQUEST' }),
|
|
45
|
+
error: new server_1.TRPCError({ code: 'CLIENT_CLOSED_REQUEST' }),
|
|
43
46
|
});
|
|
44
47
|
});
|
|
45
48
|
});
|
|
46
49
|
}
|
|
50
|
+
exports.readPostBody = readPostBody;
|
|
47
51
|
//# 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":"AAAA,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;;AAAA,yCAAyC;AAGzC,SAAgB,YAAY,CAAC,MAAc,EAAE,GAAiB;IAC5D,OAAO,IAAI,OAAO,CAEhB,CAAC,OAAO,EAAE,EAAE;QACZ,IAAI,MAAM,IAAI,KAAK,EAAE;YACnB,yBAAyB;YACzB,OAAO,CAAC;gBACN,EAAE,EAAE,IAAI;gBACR,IAAI,EAAE,SAAS;aAChB,CAAC,CAAC;SACJ;QAED,IAAI,MAAc,CAAC;QACnB,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE;YACxB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAE9B,IAAI,MAAM,EAAE;gBACV,IAAI,MAAM,EAAE;oBACV,sCAAsC;oBACtC,OAAO,CAAC;wBACN,EAAE,EAAE,IAAI;wBACR,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,kBAAkB;qBAC5C,CAAC,CAAC;iBACJ;qBAAM;oBACL,mCAAmC;oBACnC,OAAO,CAAC;wBACN,EAAE,EAAE,IAAI;wBACR,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE;qBACvB,CAAC,CAAC;iBACJ;aACF;iBAAM;gBACL,IAAI,MAAM,EAAE;oBACV,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;iBACzC;qBAAM;oBACL,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;iBACjC;aACF;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;AA9CD,oCA8CC"}
|
package/package.json
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"private": false,
|
|
3
3
|
"name": "trpc-uwebsockets",
|
|
4
|
-
"description": "
|
|
5
|
-
"version": "0.8.
|
|
6
|
-
"
|
|
4
|
+
"description": "tRPC adapter for uWebSockets.js server",
|
|
5
|
+
"version": "0.8.3",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"type": "commonjs",
|
|
7
8
|
"types": "./types/index.d.ts",
|
|
8
9
|
"scripts": {
|
|
9
10
|
"start": "jest --watch",
|
|
@@ -62,7 +63,11 @@
|
|
|
62
63
|
"test"
|
|
63
64
|
],
|
|
64
65
|
"license": "MIT",
|
|
65
|
-
"keywords": [
|
|
66
|
+
"keywords": [
|
|
67
|
+
"trpc",
|
|
68
|
+
"uwebsockets",
|
|
69
|
+
"trpc adapter"
|
|
70
|
+
],
|
|
66
71
|
"repository": {
|
|
67
72
|
"type": "git",
|
|
68
73
|
"url": "https://github.com/romanzy-1612/trpc-uwebsockets.git"
|
package/src/index.ts
CHANGED
package/src/types.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AnyRouter, inferRouterContext } from '@trpc/server';
|
|
2
|
-
import { HttpResponse } from 'uWebSockets.js';
|
|
2
|
+
import { HttpResponse, TemplatedApp } from 'uWebSockets.js';
|
|
3
3
|
|
|
4
4
|
export type UWebSocketsRegisterEndpointOptions<TRouter extends AnyRouter> = {
|
|
5
5
|
router: TRouter;
|
|
@@ -20,5 +20,6 @@ export type UWebSocketsResponseObject = HttpResponse;
|
|
|
20
20
|
|
|
21
21
|
export type UWebSocketsCreateContextOptions = {
|
|
22
22
|
req: UWebSocketsRequestObject;
|
|
23
|
+
uWs: TemplatedApp;
|
|
23
24
|
// res: UWebSocketsResponseObject;
|
|
24
25
|
};
|
package/types/types.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AnyRouter, inferRouterContext } from '@trpc/server';
|
|
2
|
-
import { HttpResponse } from 'uWebSockets.js';
|
|
2
|
+
import { HttpResponse, TemplatedApp } from 'uWebSockets.js';
|
|
3
3
|
export declare type UWebSocketsRegisterEndpointOptions<TRouter extends AnyRouter> = {
|
|
4
4
|
router: TRouter;
|
|
5
5
|
createContext?: (opts: UWebSocketsCreateContextOptions) => Promise<inferRouterContext<TRouter>> | inferRouterContext<TRouter>;
|
|
@@ -13,4 +13,5 @@ export declare type UWebSocketsRequestObject = {
|
|
|
13
13
|
export declare type UWebSocketsResponseObject = HttpResponse;
|
|
14
14
|
export declare type UWebSocketsCreateContextOptions = {
|
|
15
15
|
req: UWebSocketsRequestObject;
|
|
16
|
+
uWs: TemplatedApp;
|
|
16
17
|
};
|