quantum-flow 1.20.7 → 2.0.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 +13 -12
- package/dist/app/aws/lambda.js +22 -26
- package/dist/app/aws/lambda.js.map +1 -1
- package/dist/app/aws/utils/request.d.ts +3 -1
- package/dist/app/aws/utils/request.js +5 -2
- package/dist/app/aws/utils/request.js.map +1 -1
- package/dist/app/aws/utils/response.d.ts +2 -0
- package/dist/app/aws/utils/response.js +4 -0
- package/dist/app/aws/utils/response.js.map +1 -1
- package/dist/app/http/Application.d.ts +2 -3
- package/dist/app/http/Application.js +73 -107
- package/dist/app/http/Application.js.map +1 -1
- package/dist/app/http/index.d.ts +0 -1
- package/dist/app/http/index.js.map +1 -1
- package/dist/app/plugin.js +2 -2
- package/dist/app/plugin.js.map +1 -1
- package/dist/core/Controller.d.ts +10 -5
- package/dist/core/Controller.js +33 -121
- package/dist/core/Controller.js.map +1 -1
- package/dist/core/index.d.ts +1 -1
- package/dist/core/index.js.map +1 -1
- package/dist/types/common.d.ts +15 -50
- package/dist/types/common.js.map +1 -1
- package/dist/types/controller.d.ts +4 -2
- package/dist/types/error.d.ts +73 -0
- package/dist/types/error.js +19 -0
- package/dist/types/error.js.map +1 -0
- package/dist/types/http.d.ts +7 -9
- package/dist/types/index.d.ts +3 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/lambda.d.ts +7 -2
- package/dist/types/plugins.d.ts +4 -3
- package/dist/types/request.d.ts +65 -0
- package/dist/types/request.js +3 -0
- package/dist/types/request.js.map +1 -0
- package/dist/types/response.d.ts +49 -0
- package/dist/types/response.js +3 -0
- package/dist/types/response.js.map +1 -0
- package/dist/utils/controller.d.ts +6 -7
- package/dist/utils/controller.js +11 -13
- package/dist/utils/controller.js.map +1 -1
- package/dist/utils/cors.d.ts +2 -2
- package/dist/utils/cors.js.map +1 -1
- package/dist/utils/error/apperror.d.ts +30 -0
- package/dist/utils/error/apperror.js +131 -0
- package/dist/utils/error/apperror.js.map +1 -0
- package/dist/utils/error/authorizations.d.ts +7 -0
- package/dist/utils/error/authorizations.js +17 -0
- package/dist/utils/error/authorizations.js.map +1 -0
- package/dist/utils/error/base.d.ts +20 -0
- package/dist/utils/error/base.js +52 -0
- package/dist/utils/error/base.js.map +1 -0
- package/dist/utils/error/dependencyFailed.d.ts +7 -0
- package/dist/utils/error/dependencyFailed.js +17 -0
- package/dist/utils/error/dependencyFailed.js.map +1 -0
- package/dist/utils/error/duplicateEntry.d.ts +7 -0
- package/dist/utils/error/duplicateEntry.js +17 -0
- package/dist/utils/error/duplicateEntry.js.map +1 -0
- package/dist/utils/error/forbidden.d.ts +7 -0
- package/dist/utils/error/forbidden.js +17 -0
- package/dist/utils/error/forbidden.js.map +1 -0
- package/dist/utils/error/helpers.d.ts +8 -0
- package/dist/utils/{error.js → error/helpers.js} +35 -7
- package/dist/utils/error/helpers.js.map +1 -0
- package/dist/utils/error/index.d.ts +12 -0
- package/dist/utils/error/index.js +29 -0
- package/dist/utils/error/index.js.map +1 -0
- package/dist/utils/error/invalidState.d.ts +7 -0
- package/dist/utils/error/invalidState.js +17 -0
- package/dist/utils/error/invalidState.js.map +1 -0
- package/dist/utils/error/notfound.d.ts +7 -0
- package/dist/utils/error/notfound.js +18 -0
- package/dist/utils/error/notfound.js.map +1 -0
- package/dist/utils/error/rateLimit.d.ts +7 -0
- package/dist/utils/error/rateLimit.js +17 -0
- package/dist/utils/error/rateLimit.js.map +1 -0
- package/dist/utils/error/serviceUnavailable.d.ts +7 -0
- package/dist/utils/error/serviceUnavailable.js +17 -0
- package/dist/utils/error/serviceUnavailable.js.map +1 -0
- package/dist/utils/error/validation.d.ts +10 -0
- package/dist/utils/error/validation.js +20 -0
- package/dist/utils/error/validation.js.map +1 -0
- package/dist/utils/headers.d.ts +2 -2
- package/dist/utils/headers.js.map +1 -1
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.js +3 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/lambda.d.ts +2 -1
- package/dist/utils/lambda.js +28 -48
- package/dist/utils/lambda.js.map +1 -1
- package/dist/utils/parsers.d.ts +3 -1
- package/dist/utils/parsers.js +106 -23
- package/dist/utils/parsers.js.map +1 -1
- package/dist/utils/request/factory.d.ts +18 -0
- package/dist/utils/request/factory.js +141 -0
- package/dist/utils/request/factory.js.map +1 -0
- package/dist/utils/request/helpers.d.ts +3 -0
- package/dist/utils/request/helpers.js +35 -0
- package/dist/utils/request/helpers.js.map +1 -0
- package/dist/utils/request/index.d.ts +2 -0
- package/dist/utils/request/index.js +19 -0
- package/dist/utils/request/index.js.map +1 -0
- package/dist/utils/request/request.d.ts +103 -0
- package/dist/utils/request/request.js +218 -0
- package/dist/utils/request/request.js.map +1 -0
- package/dist/utils/response/factory.d.ts +13 -0
- package/dist/utils/response/factory.js +20 -0
- package/dist/utils/response/factory.js.map +1 -0
- package/dist/utils/response/index.d.ts +2 -0
- package/dist/utils/response/index.js +19 -0
- package/dist/utils/response/index.js.map +1 -0
- package/dist/utils/response/response.d.ts +46 -0
- package/dist/utils/response/response.js +269 -0
- package/dist/utils/response/response.js.map +1 -0
- package/dist/utils/routeWalker.d.ts +2 -0
- package/dist/utils/routeWalker.js +115 -0
- package/dist/utils/routeWalker.js.map +1 -0
- package/dist/utils/sanitize.d.ts +2 -2
- package/dist/utils/sanitize.js.map +1 -1
- package/dist/ws/server.js +0 -3
- package/dist/ws/server.js.map +1 -1
- package/package.json +5 -2
- package/dist/utils/error.d.ts +0 -18
- package/dist/utils/error.js.map +0 -1
package/README.md
CHANGED
|
@@ -45,6 +45,8 @@ import {
|
|
|
45
45
|
Response,
|
|
46
46
|
Status,
|
|
47
47
|
ANY,
|
|
48
|
+
IRequest,
|
|
49
|
+
IResponse
|
|
48
50
|
} from 'quantum-flow/core';
|
|
49
51
|
import {IsString} from 'class-validator'
|
|
50
52
|
import { Catch, Cors, Sanitize, Use, SANITIZER } from 'quantum-flow/middlewares';
|
|
@@ -81,8 +83,8 @@ export class User {
|
|
|
81
83
|
@Query() query: Record<string, string | string[]>,
|
|
82
84
|
@Headers() headers: Record<string, string | string[]>,
|
|
83
85
|
@Params(ParamDTO, 'param') params: string,
|
|
84
|
-
@Request() req:
|
|
85
|
-
@Response() resp:
|
|
86
|
+
@Request() req: IResponse,
|
|
87
|
+
@Response() resp: IRequest,
|
|
86
88
|
@InjectWS() ws: IWebSocketService,
|
|
87
89
|
) {}
|
|
88
90
|
|
|
@@ -148,7 +150,7 @@ Use `LambdaAdapter` to convert API Gateway events to requests and responses. Cre
|
|
|
148
150
|
```typescript
|
|
149
151
|
Example Lambda handler creation
|
|
150
152
|
import { LambdaAdapter, LambdaRequest, LambdaResponse } from 'quantum-flow/aws';
|
|
151
|
-
import { Request, Query, Headers, Params, Response } from 'quantum-flow/core'
|
|
153
|
+
import { Request, Query, Headers, Params, Response, IResponse, IRequest } from 'quantum-flow/core'
|
|
152
154
|
|
|
153
155
|
@Controller({ prefix: 'user' })
|
|
154
156
|
class UserController {
|
|
@@ -156,8 +158,8 @@ class UserController {
|
|
|
156
158
|
@Query() query: Record<string, string | string[]>,
|
|
157
159
|
@Headers() headers: Record<string, string | string[]>,
|
|
158
160
|
@Params(ParamDTO, 'param') params: string,
|
|
159
|
-
@Request() req:
|
|
160
|
-
@Response() res:
|
|
161
|
+
@Request() req: IRequest,
|
|
162
|
+
@Response() res: IResponse
|
|
161
163
|
) { }
|
|
162
164
|
}
|
|
163
165
|
const lambdaAdapter = new LambdaAdapter(UserController);
|
|
@@ -175,12 +177,12 @@ Enable WebSocket in the server configuration and register WebSocket controllers.
|
|
|
175
177
|
|
|
176
178
|
## Enabling WebSocket Support in Server
|
|
177
179
|
|
|
178
|
-
To enable WS support, configure your HTTP server with the `
|
|
180
|
+
To enable WS support, configure your HTTP server with the `path: string` option and register controllers that use SSE.
|
|
179
181
|
|
|
180
182
|
Example server setup:
|
|
181
183
|
|
|
182
184
|
```typescript
|
|
183
|
-
@Server( {
|
|
185
|
+
@Server( { websocket: { path:'/ws' } })
|
|
184
186
|
```
|
|
185
187
|
|
|
186
188
|
## Injecting WebSocket events in Controller
|
|
@@ -308,19 +310,19 @@ import { OnSSEConnection, OnSSEError, OnSSEClose } from 'quantum-flow/sse';
|
|
|
308
310
|
@Controller('user')
|
|
309
311
|
export class User {
|
|
310
312
|
@OnSSEConnection()
|
|
311
|
-
async onsseconnection(@Request() req
|
|
313
|
+
async onsseconnection(@Request() req, @Response() res) {
|
|
312
314
|
console.log('SSE connection established');
|
|
313
315
|
return req.body;
|
|
314
316
|
}
|
|
315
317
|
|
|
316
318
|
@OnSSEError()
|
|
317
|
-
async onsseerror(@Request() req
|
|
319
|
+
async onsseerror(@Request() req, @Response() res) {
|
|
318
320
|
console.log('SSE error occurred');
|
|
319
321
|
return req.body;
|
|
320
322
|
}
|
|
321
323
|
|
|
322
324
|
@OnSSEClose()
|
|
323
|
-
async onsseclose(@Request() req
|
|
325
|
+
async onsseclose(@Request() req, @Response() res) {
|
|
324
326
|
console.log('SSE connection closed');
|
|
325
327
|
return req.body;
|
|
326
328
|
}
|
|
@@ -455,9 +457,8 @@ yarn add type-graphql graphql graphql-yoga @graphql-yoga/subscriptions
|
|
|
455
457
|
```typescript
|
|
456
458
|
@Server({
|
|
457
459
|
controllers: [/* your REST controllers */],
|
|
458
|
-
websocketPath:'/ws', //GraphQL subscriptions uses same ws server as main application
|
|
459
460
|
graphql: { // GraphQL endpoint (default: '/graphql')
|
|
460
|
-
|
|
461
|
+
path: '/graphql', // Enable GraphQL Playground
|
|
461
462
|
resolvers: [UserResolver, MessageResolver], // Your resolver classes
|
|
462
463
|
pubSub: pubSub, // Your PubSub instance (required for subscriptions)
|
|
463
464
|
},
|
package/dist/app/aws/lambda.js
CHANGED
|
@@ -4,7 +4,6 @@ exports.LambdaAdapter = void 0;
|
|
|
4
4
|
const _constants_1 = require("../../constants.js");
|
|
5
5
|
const _utils_1 = require("../../utils/index.js");
|
|
6
6
|
const plugin_1 = require("../plugin");
|
|
7
|
-
const utils_1 = require("./utils");
|
|
8
7
|
class LambdaAdapter extends plugin_1.Plugin {
|
|
9
8
|
handler;
|
|
10
9
|
controllers = [];
|
|
@@ -12,15 +11,14 @@ class LambdaAdapter extends plugin_1.Plugin {
|
|
|
12
11
|
constructor(Controller) {
|
|
13
12
|
super();
|
|
14
13
|
this.controllers.push(Controller);
|
|
15
|
-
this.handler = this.createHandler(
|
|
14
|
+
this.handler = this.createHandler();
|
|
16
15
|
}
|
|
17
|
-
createHandler(
|
|
16
|
+
createHandler() {
|
|
18
17
|
return async (event, context) => {
|
|
19
|
-
this.controllers.push(Controller);
|
|
20
18
|
await this.callPluginHook('beforeRequest', event, context);
|
|
21
|
-
const eventType = (0,
|
|
22
|
-
const request =
|
|
23
|
-
const response =
|
|
19
|
+
const eventType = (0, _utils_1.getEventType)(event);
|
|
20
|
+
const request = _utils_1.RequestFactory.fromLambda(event, context);
|
|
21
|
+
const response = _utils_1.ResponseFactory.forLambda(request);
|
|
24
22
|
return this.runControllers({
|
|
25
23
|
context,
|
|
26
24
|
event,
|
|
@@ -52,25 +50,20 @@ class LambdaAdapter extends plugin_1.Plugin {
|
|
|
52
50
|
}
|
|
53
51
|
await this.callPluginHook('beforeRoute', request, response);
|
|
54
52
|
processed = await instance.handleRequest(request, response);
|
|
55
|
-
if (processed
|
|
53
|
+
if (processed)
|
|
56
54
|
break;
|
|
57
55
|
}
|
|
58
56
|
catch (error) {
|
|
59
|
-
return this.handleError(error,
|
|
57
|
+
return this.handleError(error, request);
|
|
60
58
|
}
|
|
61
59
|
}
|
|
62
|
-
if (
|
|
63
|
-
|
|
64
|
-
return this.toLambdaResponse({ data: 'Route not found' }, request, response, eventType);
|
|
60
|
+
if ((0, _utils_1.getErrorType)(response?.data).isError) {
|
|
61
|
+
return this.handleError(processed?.data, request);
|
|
65
62
|
}
|
|
66
|
-
if ((0, _utils_1.getErrorType)(processed?.data).isError) {
|
|
67
|
-
return this.handleError(processed?.data, event, context);
|
|
68
|
-
}
|
|
69
|
-
console.log(processed);
|
|
70
63
|
return this.toLambdaResponse(processed?.data, request, response, eventType);
|
|
71
64
|
}
|
|
72
65
|
toLambdaResponse(data, request, response, eventType) {
|
|
73
|
-
const statusCode = data?.status ?? response?.
|
|
66
|
+
const statusCode = data?.status ?? response?.status ?? 200;
|
|
74
67
|
const headers = {
|
|
75
68
|
'Content-Type': 'application/json',
|
|
76
69
|
'X-Request-Id': request.requestId,
|
|
@@ -126,18 +119,21 @@ class LambdaAdapter extends plugin_1.Plugin {
|
|
|
126
119
|
return { statusCode, headers, body };
|
|
127
120
|
}
|
|
128
121
|
}
|
|
129
|
-
handleError(error,
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
122
|
+
handleError(error, request) {
|
|
123
|
+
const config = {
|
|
124
|
+
includeStack: process.env.NODE_ENV !== 'production',
|
|
125
|
+
logErrors: true,
|
|
126
|
+
};
|
|
127
|
+
let serialized = new _utils_1.ApplicationError(error, {
|
|
128
|
+
meta: request,
|
|
129
|
+
config,
|
|
137
130
|
});
|
|
131
|
+
const eventType = (0, _utils_1.getEventType)(request.getLambdaEvent());
|
|
132
|
+
const statusCode = serialized.status || 500;
|
|
133
|
+
const body = JSON.stringify(serialized);
|
|
138
134
|
const headers = {
|
|
139
135
|
'Content-Type': 'application/json',
|
|
140
|
-
'X-Request-Id':
|
|
136
|
+
'X-Request-Id': request.requestId,
|
|
141
137
|
'Access-Control-Allow-Origin': '*',
|
|
142
138
|
'Access-Control-Allow-Credentials': 'true',
|
|
143
139
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lambda.js","sourceRoot":"","sources":["../../../src/app/aws/lambda.ts"],"names":[],"mappings":";;;AAAA,2CAA2C;
|
|
1
|
+
{"version":3,"file":"lambda.js","sourceRoot":"","sources":["../../../src/app/aws/lambda.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,9 +17,11 @@ export declare class LRequest implements LambdaRequest {
|
|
|
17
17
|
requestId: string;
|
|
18
18
|
stage?: string;
|
|
19
19
|
userAgent: string;
|
|
20
|
-
sourceIp: string;
|
|
21
20
|
event: LambdaEvent;
|
|
22
21
|
context: Context;
|
|
22
|
+
id: string;
|
|
23
|
+
ip: string;
|
|
23
24
|
constructor(lambdaEvent: LambdaEvent, context: Context);
|
|
25
|
+
sourceIp: string;
|
|
24
26
|
end(): void;
|
|
25
27
|
}
|
|
@@ -19,9 +19,10 @@ class LRequest {
|
|
|
19
19
|
requestId;
|
|
20
20
|
stage;
|
|
21
21
|
userAgent;
|
|
22
|
-
sourceIp;
|
|
23
22
|
event;
|
|
24
23
|
context;
|
|
24
|
+
id;
|
|
25
|
+
ip;
|
|
25
26
|
constructor(lambdaEvent, context) {
|
|
26
27
|
const event = (0, helpers_1.normalizeEvent)(lambdaEvent, (0, helpers_1.getEventType)(lambdaEvent));
|
|
27
28
|
const query = {};
|
|
@@ -88,12 +89,14 @@ class LRequest {
|
|
|
88
89
|
this.requestId = context.awsRequestId;
|
|
89
90
|
this.requestUrl = url;
|
|
90
91
|
this.stage = event.requestContext?.stage || '$default';
|
|
91
|
-
this.
|
|
92
|
+
this.ip = (0, helpers_1.getSourceIp)(event);
|
|
93
|
+
this.id = context.awsRequestId;
|
|
92
94
|
this.userAgent =
|
|
93
95
|
typeof event.headers['user-agent'] === 'string'
|
|
94
96
|
? event.headers['user-agent']
|
|
95
97
|
: event.headers['user-agent']?.[0] || 'unknown';
|
|
96
98
|
}
|
|
99
|
+
sourceIp;
|
|
97
100
|
end() {
|
|
98
101
|
console.log('NOT implemented for lambda');
|
|
99
102
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request.js","sourceRoot":"","sources":["../../../../src/app/aws/utils/request.ts"],"names":[],"mappings":";;;AAEA,uCAAsE;AAEtE,MAAa,QAAQ;IACnB,UAAU,CAAM;IAChB,MAAM,CAAe;IACrB,IAAI,CAAU;IACd,OAAO,CAAoC;IAC3C,KAAK,CAAqC;IAC1C,MAAM,CAA0B;IAChC,IAAI,CAAM;IACV,OAAO,CAA0B;IACjC,eAAe,CAAW;IAC1B,OAAO,CAAyB;IAChC,SAAS,CAAmD;IAC5D,UAAU,CAAS;IACnB,GAAG,CAAS;IACZ,SAAS,CAAS;IAClB,KAAK,CAAU;IACf,SAAS,CAAS;IAClB,
|
|
1
|
+
{"version":3,"file":"request.js","sourceRoot":"","sources":["../../../../src/app/aws/utils/request.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { CookieOptions, LambdaResponse } from '../../../types/index.js';
|
|
2
2
|
export declare class LResponse implements LambdaResponse {
|
|
3
|
+
cookies?: string[] | undefined;
|
|
3
4
|
private _statusCode;
|
|
4
5
|
private _headers;
|
|
5
6
|
body: any;
|
|
@@ -15,6 +16,7 @@ export declare class LResponse implements LambdaResponse {
|
|
|
15
16
|
private _updateCookieHeader;
|
|
16
17
|
setHeader(name: string, value: string): void;
|
|
17
18
|
set statusCode(code: number);
|
|
19
|
+
set status(code: number);
|
|
18
20
|
get statusCode(): number;
|
|
19
21
|
get headers(): Record<string, string>;
|
|
20
22
|
}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.LResponse = void 0;
|
|
4
4
|
class LResponse {
|
|
5
|
+
cookies;
|
|
5
6
|
_statusCode = 200;
|
|
6
7
|
_headers = {};
|
|
7
8
|
body = null;
|
|
@@ -58,6 +59,9 @@ class LResponse {
|
|
|
58
59
|
set statusCode(code) {
|
|
59
60
|
this._statusCode = code;
|
|
60
61
|
}
|
|
62
|
+
set status(code) {
|
|
63
|
+
this._statusCode = code;
|
|
64
|
+
}
|
|
61
65
|
get statusCode() {
|
|
62
66
|
return this._statusCode;
|
|
63
67
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"response.js","sourceRoot":"","sources":["../../../../src/app/aws/utils/response.ts"],"names":[],"mappings":";;;AAEA,MAAa,SAAS;
|
|
1
|
+
{"version":3,"file":"response.js","sourceRoot":"","sources":["../../../../src/app/aws/utils/response.ts"],"names":[],"mappings":";;;AAEA,MAAa,SAAS;IACpB,OAAO,CAAwB;IACvB,WAAW,GAAW,GAAG,CAAC;IAC1B,QAAQ,GAA2B,EAAE,CAAC;IAC9C,IAAI,GAAQ,IAAI,CAAC;IACjB,eAAe,CAAW;IAC1B,QAAQ,CAAW;IAEnB,SAAS,CAAC,IAAY,EAAE,KAAa,EAAE,OAAuB;QAC5D,IAAI,MAAM,GAAG,GAAG,IAAI,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;QAEpD,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,OAAO,CAAC,MAAM;gBAAE,MAAM,IAAI,aAAa,OAAO,CAAC,MAAM,EAAE,CAAC;YAC5D,IAAI,OAAO,CAAC,OAAO;gBAAE,MAAM,IAAI,aAAa,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;YAC5E,IAAI,OAAO,CAAC,MAAM;gBAAE,MAAM,IAAI,YAAY,OAAO,CAAC,MAAM,EAAE,CAAC;YAC3D,IAAI,OAAO,CAAC,IAAI;gBAAE,MAAM,IAAI,UAAU,OAAO,CAAC,IAAI,EAAE,CAAC;YACrD,IAAI,OAAO,CAAC,MAAM;gBAAE,MAAM,IAAI,UAAU,CAAC;YACzC,IAAI,OAAO,CAAC,QAAQ;gBAAE,MAAM,IAAI,YAAY,CAAC;YAC7C,IAAI,OAAO,CAAC,QAAQ;gBAAE,MAAM,IAAI,cAAc,OAAO,CAAC,QAAQ,EAAE,CAAC;YACjE,IAAI,OAAO,CAAC,QAAQ;gBAAE,MAAM,IAAI,cAAc,OAAO,CAAC,QAAQ,EAAE,CAAC;YACjE,IAAI,OAAO,CAAC,WAAW;gBAAE,MAAM,IAAI,eAAe,CAAC;QACrD,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3B,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC7B,CAAC;IAED,WAAW,CAAC,IAAY,EAAE,OAA4C;QACpE,MAAM,MAAM,GAAG,GAAG,IAAI,yBAAyB,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GACtE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,UAAU,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAC7C,GAAG,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,YAAY,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAEzD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3B,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC7B,CAAC;IAED,UAAU;QACR,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAED,eAAe;QACb,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IACrC,CAAC;IAEO,mBAAmB;QACzB,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzD,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,SAAS,CAAC,IAAY,EAAE,KAAa;QACnC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;IAC9B,CAAC;IAED,IAAI,UAAU,CAAC,IAAY;QACzB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC1B,CAAC;IACD,IAAI,MAAM,CAAC,IAAY;QACrB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC1B,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,IAAI,OAAO;QACT,OAAO,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC9B,CAAC;CACF;AAvED,8BAuEC"}
|
|
@@ -6,13 +6,14 @@ export declare class HttpServer extends Plugin implements IHttpServer {
|
|
|
6
6
|
private isRunning;
|
|
7
7
|
private sse?;
|
|
8
8
|
private websocket?;
|
|
9
|
-
private websocketPath;
|
|
10
9
|
controllers: ControllerType[];
|
|
11
10
|
middlewares: MiddlewareCB[];
|
|
12
11
|
app: http.Server;
|
|
13
12
|
plugins: HttpPlugin[];
|
|
14
13
|
allContriollers: ControllerType[];
|
|
14
|
+
staticMiddlewares: any;
|
|
15
15
|
constructor(configOrClass: new (...args: any[]) => any);
|
|
16
|
+
setUpWebsocket(): void;
|
|
16
17
|
private collectControllers;
|
|
17
18
|
private logConfig;
|
|
18
19
|
listen(port?: number, host?: string): Promise<http.Server>;
|
|
@@ -22,11 +23,9 @@ export declare class HttpServer extends Plugin implements IHttpServer {
|
|
|
22
23
|
config: ServerConfig;
|
|
23
24
|
};
|
|
24
25
|
private requestHandler;
|
|
25
|
-
private createRequest;
|
|
26
26
|
private beforeRequest;
|
|
27
27
|
private runController;
|
|
28
28
|
private sendResponse;
|
|
29
|
-
private handleError;
|
|
30
29
|
private setupGraphQL;
|
|
31
30
|
use(middleware: MiddlewareCB): this;
|
|
32
31
|
}
|
|
@@ -20,31 +20,29 @@ class HttpServer extends plugin_1.Plugin {
|
|
|
20
20
|
isRunning = false;
|
|
21
21
|
sse;
|
|
22
22
|
websocket;
|
|
23
|
-
websocketPath = '/ws';
|
|
24
23
|
controllers = [];
|
|
25
24
|
middlewares = [];
|
|
26
25
|
app;
|
|
27
26
|
plugins = [];
|
|
28
27
|
allContriollers = [];
|
|
28
|
+
staticMiddlewares = [];
|
|
29
29
|
constructor(configOrClass) {
|
|
30
30
|
super();
|
|
31
31
|
this.config = (0, _utils_1.resolveConfig)(configOrClass);
|
|
32
|
-
if (this.config.websocketPath) {
|
|
33
|
-
this.websocketPath = this.config.websocketPath;
|
|
34
|
-
}
|
|
35
32
|
this.middlewares = this.middlewares.concat(this.config.middlewares ?? []);
|
|
36
33
|
this.controllers = this.collectControllers(this.config.controllers ?? []);
|
|
37
|
-
|
|
34
|
+
this.app = http_1.default.createServer(this.requestHandler.bind(this));
|
|
38
35
|
for (const st of this.config.statics ?? []) {
|
|
39
36
|
const staticMw = (0, _utils_1.staticMiddleware)(st.path, st.options);
|
|
40
|
-
this.
|
|
37
|
+
this.staticMiddlewares.push(staticMw);
|
|
38
|
+
}
|
|
39
|
+
if (this.config.websocket && this.config.graphql) {
|
|
40
|
+
throw new Error(`You cant't use custom websocket with graphql`);
|
|
41
41
|
}
|
|
42
|
-
if (this.config.websocket
|
|
43
|
-
this.
|
|
44
|
-
this.websocket.registerControllers(this.controllers);
|
|
45
|
-
service_2.WebSocketService.getInstance().initialize(this.websocket);
|
|
42
|
+
if (this.config.websocket) {
|
|
43
|
+
this.setUpWebsocket();
|
|
46
44
|
}
|
|
47
|
-
if (this.config.graphql
|
|
45
|
+
if (this.config.graphql) {
|
|
48
46
|
this.setupGraphQL();
|
|
49
47
|
}
|
|
50
48
|
if (this.config.sse?.enabled) {
|
|
@@ -52,9 +50,13 @@ class HttpServer extends plugin_1.Plugin {
|
|
|
52
50
|
this.sse.registerControllers(this.controllers);
|
|
53
51
|
service_1.SSEService.getInstance().initialize(this.sse);
|
|
54
52
|
}
|
|
55
|
-
this.app = app;
|
|
56
53
|
this.logConfig();
|
|
57
54
|
}
|
|
55
|
+
setUpWebsocket() {
|
|
56
|
+
this.websocket = new server_2.WebSocketServer(this.app, { path: this.config.websocket?.path ?? '/ws' });
|
|
57
|
+
this.websocket.registerControllers(this.controllers);
|
|
58
|
+
service_2.WebSocketService.getInstance().initialize(this.websocket);
|
|
59
|
+
}
|
|
58
60
|
collectControllers(controllers = []) {
|
|
59
61
|
const result = [];
|
|
60
62
|
for (const ControllerClass of controllers) {
|
|
@@ -84,7 +86,7 @@ class HttpServer extends plugin_1.Plugin {
|
|
|
84
86
|
║ 📍 Host: ${this.config.host}
|
|
85
87
|
║ 🔌 Port: ${this.config.port}
|
|
86
88
|
║ 🔌 Websocket: ${!!this.config.websocket && this.config.graphql?.pubSub}
|
|
87
|
-
║ 🔌 Websocket path prefix: ${this.config.
|
|
89
|
+
║ 🔌 Websocket path prefix: ${this.config.websocket?.path ?? '/ws'}
|
|
88
90
|
║ 🔧 Global Middlewares: ${this.middlewares?.length || 0}
|
|
89
91
|
║ 🔧 Error handler: ${!this.config.errorHandler}
|
|
90
92
|
║ 🎯 Global Interceptors: ${!!this.config.interceptor?.length}
|
|
@@ -142,135 +144,95 @@ class HttpServer extends plugin_1.Plugin {
|
|
|
142
144
|
});
|
|
143
145
|
}
|
|
144
146
|
status() {
|
|
145
|
-
return {
|
|
146
|
-
running: this.isRunning,
|
|
147
|
-
config: this.config,
|
|
148
|
-
};
|
|
147
|
+
return { running: this.isRunning, config: this.config };
|
|
149
148
|
}
|
|
150
|
-
async requestHandler(req,
|
|
149
|
+
async requestHandler(req, res) {
|
|
151
150
|
const startTime = Date.now();
|
|
152
|
-
|
|
151
|
+
const request = await _utils_1.RequestFactory.fromHttp(req);
|
|
152
|
+
const response = _utils_1.ResponseFactory.forHttp(res, request);
|
|
153
153
|
try {
|
|
154
154
|
await this.callPluginHook('beforeRequest', req);
|
|
155
155
|
}
|
|
156
|
-
catch (
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
request = await this.createRequest(req);
|
|
161
|
-
}
|
|
162
|
-
catch (err) {
|
|
163
|
-
return this.sendResponse(response, { status: 500, data: err.message }, startTime);
|
|
156
|
+
catch (error) {
|
|
157
|
+
response.status = 500;
|
|
158
|
+
response.data = error;
|
|
159
|
+
return this.sendResponse(request, response, startTime);
|
|
164
160
|
}
|
|
161
|
+
if (response.headersSent)
|
|
162
|
+
return;
|
|
165
163
|
try {
|
|
166
|
-
let handledCors =
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
}
|
|
164
|
+
let handledCors = this.config.cors
|
|
165
|
+
? (0, _utils_1.handleCORS)(request, response, this.config.cors)
|
|
166
|
+
: { permitted: true, continue: true };
|
|
170
167
|
if (!handledCors.permitted) {
|
|
171
|
-
|
|
168
|
+
response.status = 403;
|
|
169
|
+
response.data = 'CORS: Origin not allowed';
|
|
170
|
+
return this.sendResponse(request, response, startTime);
|
|
172
171
|
}
|
|
173
172
|
if (!handledCors.continue && handledCors.permitted) {
|
|
174
|
-
|
|
173
|
+
response.status = 204;
|
|
174
|
+
return this.sendResponse(request, response, startTime);
|
|
175
175
|
}
|
|
176
176
|
await this.beforeRequest(request, response);
|
|
177
|
-
if (response.headersSent)
|
|
177
|
+
if (response.headersSent)
|
|
178
178
|
return;
|
|
179
|
-
}
|
|
180
179
|
await this.callPluginHook('beforeRoute', request, response);
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
const isError = (0, _utils_1.getErrorType)(controllerResponse.data).isError || !_constants_1.OK_STATUSES.includes(response.statusCode);
|
|
186
|
-
if (isError) {
|
|
187
|
-
return this.handleError(controllerResponse.data, request, response, startTime);
|
|
188
|
-
}
|
|
189
|
-
if (this.config.interceptor && controllerResponse) {
|
|
190
|
-
controllerResponse.data = await this.config.interceptor(controllerResponse, request, response);
|
|
191
|
-
}
|
|
192
|
-
return this.sendResponse(response, { status: response.statusCode ?? 200, data: controllerResponse.data }, startTime, request);
|
|
180
|
+
if (response.headersSent)
|
|
181
|
+
return;
|
|
182
|
+
await this.runController(request, response);
|
|
183
|
+
return this.sendResponse(request, response, startTime);
|
|
193
184
|
}
|
|
194
185
|
catch (error) {
|
|
195
|
-
|
|
186
|
+
response.error(error);
|
|
187
|
+
return this.sendResponse(request, response, startTime);
|
|
196
188
|
}
|
|
197
189
|
}
|
|
198
|
-
async createRequest(req) {
|
|
199
|
-
const rawBody = await (0, _utils_1.collectRawBody)(req);
|
|
200
|
-
const parseRequest = {
|
|
201
|
-
body: rawBody,
|
|
202
|
-
headers: req.headers,
|
|
203
|
-
isBase64Encoded: false,
|
|
204
|
-
};
|
|
205
|
-
const parsedBody = (0, _utils_1.ParseBody)(parseRequest);
|
|
206
|
-
const protocol = req.headers['x-forwarded-proto'] || 'http';
|
|
207
|
-
const host = req.headers.host || 'localhost';
|
|
208
|
-
const fullUrl = `${protocol}://${host}${req.url}`;
|
|
209
|
-
const requestUrl = new URL(fullUrl);
|
|
210
|
-
const parsedRequest = {
|
|
211
|
-
method: req.method?.toUpperCase(),
|
|
212
|
-
requestUrl,
|
|
213
|
-
headers: req.headers,
|
|
214
|
-
body: parsedBody,
|
|
215
|
-
rawBody: rawBody,
|
|
216
|
-
query: (0, _utils_1.ParseQuery)(requestUrl),
|
|
217
|
-
params: {},
|
|
218
|
-
cookies: (0, _utils_1.ParseCookies)(req),
|
|
219
|
-
isBase64Encoded: false,
|
|
220
|
-
_startTime: Date.now(),
|
|
221
|
-
};
|
|
222
|
-
Object.assign(req, parsedRequest);
|
|
223
|
-
return req;
|
|
224
|
-
}
|
|
225
190
|
async beforeRequest(request, response) {
|
|
226
191
|
(0, _utils_1.sanitizeRequest)(request, this.config.sanitizers ?? []);
|
|
192
|
+
for (const middleware of this.staticMiddlewares) {
|
|
193
|
+
await middleware(request.raw, response.raw, _utils_1.NextFunction);
|
|
194
|
+
}
|
|
195
|
+
if (response.raw.headersSent) {
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
227
198
|
for (const middleware of this.middlewares?.reverse() || []) {
|
|
228
|
-
await middleware(request, response, _utils_1.
|
|
199
|
+
await middleware(request, response, _utils_1.NextFunction);
|
|
229
200
|
}
|
|
230
201
|
}
|
|
231
202
|
async runController(request, response) {
|
|
232
203
|
for (const ControllerClass of this.controllers ?? []) {
|
|
233
204
|
const instance = new ControllerClass();
|
|
234
205
|
if (typeof instance.handleRequest === 'function') {
|
|
235
|
-
const
|
|
236
|
-
if (
|
|
237
|
-
|
|
206
|
+
const done = await instance.handleRequest(request, response);
|
|
207
|
+
if (done) {
|
|
208
|
+
break;
|
|
238
209
|
}
|
|
239
210
|
}
|
|
240
211
|
}
|
|
241
|
-
return {};
|
|
242
212
|
}
|
|
243
|
-
async sendResponse(
|
|
244
|
-
if (
|
|
213
|
+
async sendResponse(request, response, startTime) {
|
|
214
|
+
if (response.headersSent)
|
|
245
215
|
return;
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
res.setHeader('Content-Type', 'application/json');
|
|
249
|
-
}
|
|
250
|
-
res.setHeader('X-Response-Time', `${Date.now() - startTime}ms`);
|
|
251
|
-
res.statusCode = status ?? data.status ?? 200;
|
|
252
|
-
res.end(JSON.stringify(data));
|
|
253
|
-
await this.callPluginHook('afterResponse', appRequest, res);
|
|
254
|
-
}
|
|
255
|
-
async handleError(error, request, response, startTime) {
|
|
256
|
-
let serialized = (0, _utils_1.serializeError)(error);
|
|
257
|
-
if (!this.config.errorHandler) {
|
|
258
|
-
return this.sendResponse(response, { data: serialized }, startTime);
|
|
216
|
+
if (!response.getHeader('Content-Type')) {
|
|
217
|
+
response.setHeader('Content-Type', 'application/json');
|
|
259
218
|
}
|
|
219
|
+
response.setHeader('X-Response-Time', `${Date.now() - startTime}ms`);
|
|
260
220
|
try {
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
221
|
+
response.end(response.data);
|
|
222
|
+
await this.callPluginHook('afterResponse', request, response);
|
|
223
|
+
}
|
|
224
|
+
catch (err) {
|
|
225
|
+
response.status = 500;
|
|
226
|
+
response.error(err);
|
|
227
|
+
response.end(err);
|
|
267
228
|
}
|
|
268
|
-
catch (cathed) { }
|
|
269
|
-
return this.sendResponse(response, { data: serialized }, startTime, request);
|
|
270
229
|
}
|
|
271
230
|
async setupGraphQL() {
|
|
272
231
|
if (!this.config.graphql || !this.config.graphql?.resolvers?.length)
|
|
273
232
|
return;
|
|
233
|
+
const graphqlWsServer = new server_2.WebSocketServer(this.app, {
|
|
234
|
+
path: this.config.graphql.path ?? '/graphql',
|
|
235
|
+
});
|
|
274
236
|
const schemaConfig = {
|
|
275
237
|
resolvers: this.config.graphql?.resolvers,
|
|
276
238
|
validate: true,
|
|
@@ -283,15 +245,19 @@ class HttpServer extends plugin_1.Plugin {
|
|
|
283
245
|
schema,
|
|
284
246
|
context: (ctx) => {
|
|
285
247
|
const req = ctx.request ?? ctx.req;
|
|
286
|
-
return {
|
|
248
|
+
return {
|
|
249
|
+
request: req.raw,
|
|
250
|
+
headers: req?.headers,
|
|
251
|
+
pubSub: this.config.graphql?.pubSub ?? (0, graphql_yoga_1.createPubSub)(),
|
|
252
|
+
};
|
|
287
253
|
},
|
|
288
254
|
graphiql: !!this.config.graphql?.playground,
|
|
289
255
|
});
|
|
290
256
|
if (this.config.graphql.pubSub) {
|
|
291
|
-
(0, ws_1.useServer)({ schema, context: () => ({ pubSub: this.config.graphql?.pubSub }) },
|
|
257
|
+
(0, ws_1.useServer)({ schema, context: () => ({ pubSub: this.config.graphql?.pubSub }) }, graphqlWsServer.wss);
|
|
292
258
|
this.use(async (req, res) => {
|
|
293
|
-
if (req.requestUrl.pathname?.startsWith(
|
|
294
|
-
|
|
259
|
+
if (req.requestUrl.pathname?.startsWith('/graphql')) {
|
|
260
|
+
await yoga(req.raw, res.raw);
|
|
295
261
|
}
|
|
296
262
|
});
|
|
297
263
|
}
|