quantum-flow 1.21.0 → 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 +15 -18
- package/dist/app/aws/lambda.js.map +1 -1
- package/dist/app/http/Application.d.ts +2 -3
- package/dist/app/http/Application.js +70 -118
- 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 -120
- 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 -52
- package/dist/types/common.js.map +1 -1
- package/dist/types/controller.d.ts +3 -2
- package/dist/types/error.d.ts +4 -0
- package/dist/types/error.js.map +1 -1
- package/dist/types/http.d.ts +6 -11
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/lambda.d.ts +2 -1
- 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 +5 -6
- package/dist/utils/controller.js +7 -9
- 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 +4 -7
- package/dist/utils/error/apperror.js +10 -13
- package/dist/utils/error/apperror.js.map +1 -1
- 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/index.d.ts +6 -0
- package/dist/utils/error/index.js +6 -0
- package/dist/utils/error/index.js.map +1 -1
- 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/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/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/package.json +1 -1
package/dist/utils/lambda.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lambda.js","sourceRoot":"","sources":["../../src/utils/lambda.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"lambda.js","sourceRoot":"","sources":["../../src/utils/lambda.ts"],"names":[],"mappings":";;;AAEO,MAAM,YAAY,GAAG,CAAC,KAAU,EAA2B,EAAE;IAClE,IAAI,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACvC,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK,IAAI,KAAK,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC;QAC1D,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC;QAClE,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAXW,QAAA,YAAY,gBAWvB;AAEK,MAAM,WAAW,GAAG,CAAC,KAAsB,EAAU,EAAE;IAC5D,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACtD,IAAI,YAAY,EAAE,CAAC;QACjB,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;YAChC,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9C,CAAC;QACD,OAAO,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3C,CAAC;IAED,IAAI,KAAK,CAAC,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;QAC7C,OAAO,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAChD,CAAC;IAED,IAAI,KAAK,CAAC,cAAc,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QACzC,OAAO,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC5C,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAlBW,QAAA,WAAW,eAkBtB"}
|
package/dist/utils/parsers.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import { NormalizedEvent } from '../types/index.js';
|
|
1
2
|
import http from 'http';
|
|
2
3
|
export declare const ParseQuery: (url: URL) => Record<string, string | string[]>;
|
|
3
|
-
export declare const
|
|
4
|
+
export declare const parceBody: (request: any) => any;
|
|
4
5
|
export declare const ParseCookies: (req: http.IncomingMessage) => Record<string, string>;
|
|
6
|
+
export declare const normalizeLambdaEvent: (event: any, type: string) => NormalizedEvent;
|
package/dist/utils/parsers.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ParseCookies = exports.
|
|
3
|
+
exports.normalizeLambdaEvent = exports.ParseCookies = exports.parceBody = exports.ParseQuery = void 0;
|
|
4
4
|
const ParseQuery = (url) => {
|
|
5
5
|
const params = url.searchParams;
|
|
6
6
|
const query = {};
|
|
@@ -11,7 +11,7 @@ const ParseQuery = (url) => {
|
|
|
11
11
|
return query;
|
|
12
12
|
};
|
|
13
13
|
exports.ParseQuery = ParseQuery;
|
|
14
|
-
const
|
|
14
|
+
const parceBody = (request) => {
|
|
15
15
|
if (request.body && typeof request.body === 'object' && !Buffer.isBuffer(request.body)) {
|
|
16
16
|
return request.body;
|
|
17
17
|
}
|
|
@@ -19,48 +19,81 @@ const ParseBody = (request) => {
|
|
|
19
19
|
if (!body) {
|
|
20
20
|
return {};
|
|
21
21
|
}
|
|
22
|
+
let processedBody = body;
|
|
23
|
+
if (isBase64Encoded && typeof body === 'string') {
|
|
24
|
+
try {
|
|
25
|
+
processedBody = Buffer.from(body, 'base64');
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
console.error('Failed to decode base64 body:', error);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
22
31
|
let contentType = headers['content-type'] ?? headers['Content-Type'] ?? '';
|
|
23
32
|
if (Array.isArray(contentType)) {
|
|
24
33
|
contentType = contentType[0];
|
|
25
34
|
}
|
|
26
35
|
const cleanContentType = contentType.split(';')[0].trim().toLowerCase();
|
|
36
|
+
const getString = (data) => {
|
|
37
|
+
if (Buffer.isBuffer(data)) {
|
|
38
|
+
return data.toString('utf8');
|
|
39
|
+
}
|
|
40
|
+
if (typeof data === 'string') {
|
|
41
|
+
return data;
|
|
42
|
+
}
|
|
43
|
+
return String(data);
|
|
44
|
+
};
|
|
27
45
|
if (cleanContentType === 'application/json') {
|
|
28
46
|
try {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
}
|
|
32
|
-
if (Buffer.isBuffer(body)) {
|
|
33
|
-
return JSON.parse(body.toString('utf8'));
|
|
34
|
-
}
|
|
47
|
+
const str = getString(processedBody);
|
|
48
|
+
return JSON.parse(str);
|
|
35
49
|
}
|
|
36
50
|
catch (error) {
|
|
37
|
-
|
|
38
|
-
throw error;
|
|
51
|
+
return { text: getString(processedBody), parseError: true };
|
|
39
52
|
}
|
|
40
53
|
}
|
|
41
54
|
if (cleanContentType.startsWith('text/')) {
|
|
42
|
-
|
|
43
|
-
return { text: body.toString('utf8') };
|
|
44
|
-
}
|
|
45
|
-
return { text: body };
|
|
55
|
+
return { text: getString(processedBody) };
|
|
46
56
|
}
|
|
47
57
|
if (cleanContentType === 'application/x-www-form-urlencoded') {
|
|
48
|
-
|
|
49
|
-
const text =
|
|
58
|
+
try {
|
|
59
|
+
const text = getString(processedBody);
|
|
50
60
|
const params = new URLSearchParams(text);
|
|
51
61
|
const result = {};
|
|
52
|
-
params.
|
|
53
|
-
result[key]
|
|
54
|
-
|
|
62
|
+
for (const [key, value] of params.entries()) {
|
|
63
|
+
if (result[key] !== undefined) {
|
|
64
|
+
if (Array.isArray(result[key])) {
|
|
65
|
+
result[key].push(value);
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
result[key] = [result[key], value];
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
result[key] = value;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
55
75
|
return result;
|
|
56
76
|
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
return { raw: getString(processedBody) };
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
if (cleanContentType === 'application/xml' || cleanContentType === 'text/xml') {
|
|
82
|
+
return { xml: getString(processedBody) };
|
|
57
83
|
}
|
|
58
|
-
if (
|
|
59
|
-
return {
|
|
84
|
+
if (cleanContentType.startsWith('multipart/')) {
|
|
85
|
+
return {
|
|
86
|
+
multipart: true,
|
|
87
|
+
contentType,
|
|
88
|
+
body: processedBody,
|
|
89
|
+
};
|
|
60
90
|
}
|
|
61
|
-
|
|
91
|
+
if (Buffer.isBuffer(processedBody)) {
|
|
92
|
+
return { raw: processedBody.toString('utf8') };
|
|
93
|
+
}
|
|
94
|
+
return processedBody;
|
|
62
95
|
};
|
|
63
|
-
exports.
|
|
96
|
+
exports.parceBody = parceBody;
|
|
64
97
|
const ParseCookies = (req) => {
|
|
65
98
|
const cookieHeader = req.headers.cookie;
|
|
66
99
|
if (!cookieHeader)
|
|
@@ -74,4 +107,54 @@ const ParseCookies = (req) => {
|
|
|
74
107
|
}, {});
|
|
75
108
|
};
|
|
76
109
|
exports.ParseCookies = ParseCookies;
|
|
110
|
+
const parseLambdaQueryString = (queryString) => {
|
|
111
|
+
const params = {};
|
|
112
|
+
if (!queryString)
|
|
113
|
+
return params;
|
|
114
|
+
new URLSearchParams(queryString).forEach((value, key) => {
|
|
115
|
+
params[key] = value;
|
|
116
|
+
});
|
|
117
|
+
return params;
|
|
118
|
+
};
|
|
119
|
+
const normalizeLambdaEvent = (event, type) => {
|
|
120
|
+
const base = {
|
|
121
|
+
headers: event.headers || {},
|
|
122
|
+
body: event.body || null,
|
|
123
|
+
isBase64Encoded: event.isBase64Encoded || false,
|
|
124
|
+
requestContext: event.requestContext,
|
|
125
|
+
};
|
|
126
|
+
switch (type) {
|
|
127
|
+
case 'rest':
|
|
128
|
+
return {
|
|
129
|
+
...base,
|
|
130
|
+
httpMethod: event.httpMethod,
|
|
131
|
+
path: event.path,
|
|
132
|
+
queryStringParameters: event.queryStringParameters || {},
|
|
133
|
+
multiValueQueryStringParameters: event.multiValueQueryStringParameters,
|
|
134
|
+
pathParameters: event.pathParameters || {},
|
|
135
|
+
cookies: event.headers?.Cookie ? [event.headers.Cookie] : [],
|
|
136
|
+
};
|
|
137
|
+
case 'http':
|
|
138
|
+
return {
|
|
139
|
+
...base,
|
|
140
|
+
httpMethod: event.requestContext?.http?.method || 'GET',
|
|
141
|
+
path: event.rawPath,
|
|
142
|
+
queryStringParameters: event.queryStringParameters || {},
|
|
143
|
+
pathParameters: event.pathParameters || {},
|
|
144
|
+
cookies: event.cookies || [],
|
|
145
|
+
};
|
|
146
|
+
case 'url':
|
|
147
|
+
return {
|
|
148
|
+
...base,
|
|
149
|
+
httpMethod: event.requestContext?.http?.method || 'GET',
|
|
150
|
+
path: event.rawPath,
|
|
151
|
+
queryStringParameters: parseLambdaQueryString(event.rawQueryString),
|
|
152
|
+
pathParameters: {},
|
|
153
|
+
cookies: [],
|
|
154
|
+
};
|
|
155
|
+
default:
|
|
156
|
+
throw new Error(`Unsupported event type: ${type}`);
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
exports.normalizeLambdaEvent = normalizeLambdaEvent;
|
|
77
160
|
//# sourceMappingURL=parsers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parsers.js","sourceRoot":"","sources":["../../src/utils/parsers.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"parsers.js","sourceRoot":"","sources":["../../src/utils/parsers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Context } from 'aws-lambda';
|
|
2
|
+
import { LambdaEvent } from '../../types/index.js';
|
|
3
|
+
import { IncomingMessage } from 'http';
|
|
4
|
+
import { Request } from './request';
|
|
5
|
+
export declare class RequestFactory {
|
|
6
|
+
/**
|
|
7
|
+
* Create Request from HTTP IncomingMessage
|
|
8
|
+
*/
|
|
9
|
+
static fromHttp(req: IncomingMessage): Promise<Request>;
|
|
10
|
+
/**
|
|
11
|
+
* Create Request from Lambda event
|
|
12
|
+
*/
|
|
13
|
+
static fromLambda(event: LambdaEvent, context: Context): Request;
|
|
14
|
+
/**
|
|
15
|
+
* Create Request from generic object
|
|
16
|
+
*/
|
|
17
|
+
static fromObject(obj: Record<string, any>): Request;
|
|
18
|
+
}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RequestFactory = void 0;
|
|
4
|
+
const uuid_1 = require("uuid");
|
|
5
|
+
const lambda_1 = require("../lambda");
|
|
6
|
+
const parsers_1 = require("../parsers");
|
|
7
|
+
const server_1 = require("../server");
|
|
8
|
+
const helpers_1 = require("./helpers");
|
|
9
|
+
const request_1 = require("./request");
|
|
10
|
+
class RequestFactory {
|
|
11
|
+
/**
|
|
12
|
+
* Create Request from HTTP IncomingMessage
|
|
13
|
+
*/
|
|
14
|
+
static async fromHttp(req) {
|
|
15
|
+
const protocol = req.headers['x-forwarded-proto'] || 'http';
|
|
16
|
+
const host = req.headers.host || 'localhost';
|
|
17
|
+
const fullUrl = `${protocol}://${host}${req.url}`;
|
|
18
|
+
const requestUrl = new URL(fullUrl);
|
|
19
|
+
const cookies = (0, helpers_1.parseRequestCookie)('http', req.headers?.cookie);
|
|
20
|
+
const query = (0, helpers_1.parseQuesry)(requestUrl);
|
|
21
|
+
const forwardedFor = req.headers['x-forwarded-for'];
|
|
22
|
+
const sourceIp = forwardedFor?.split(',')[0]?.trim() ??
|
|
23
|
+
req.socket.remoteAddress ??
|
|
24
|
+
req.socket.remoteAddress ??
|
|
25
|
+
'0.0.0.0';
|
|
26
|
+
const rawBody = await (0, server_1.collectRawBody)(req);
|
|
27
|
+
const body = (0, parsers_1.parceBody)({
|
|
28
|
+
body: rawBody,
|
|
29
|
+
headers: req.headers,
|
|
30
|
+
isBase64Encoded: false,
|
|
31
|
+
});
|
|
32
|
+
Object.assign(req, { body });
|
|
33
|
+
return new request_1.Request({
|
|
34
|
+
url: req.url ?? '/',
|
|
35
|
+
requestUrl,
|
|
36
|
+
source: 'http',
|
|
37
|
+
method: req.method || 'GET',
|
|
38
|
+
path: requestUrl.pathname || '/',
|
|
39
|
+
headers: req.headers,
|
|
40
|
+
query,
|
|
41
|
+
body,
|
|
42
|
+
params: {},
|
|
43
|
+
cookies,
|
|
44
|
+
sourceIp,
|
|
45
|
+
userAgent: req.headers['user-agent'] || 'unknown',
|
|
46
|
+
requestId: (0, uuid_1.v4)(),
|
|
47
|
+
stage: 'http',
|
|
48
|
+
timestamp: new Date(),
|
|
49
|
+
raw: req,
|
|
50
|
+
context: req.socket,
|
|
51
|
+
rawBody,
|
|
52
|
+
isBase64Encoded: false,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Create Request from Lambda event
|
|
57
|
+
*/
|
|
58
|
+
static fromLambda(event, context) {
|
|
59
|
+
const normalized = (0, parsers_1.normalizeLambdaEvent)(event, (0, lambda_1.getEventType)(event));
|
|
60
|
+
const query = {};
|
|
61
|
+
if (normalized.multiValueQueryStringParameters) {
|
|
62
|
+
Object.entries(normalized.multiValueQueryStringParameters).forEach(([key, value]) => {
|
|
63
|
+
query[key] = value;
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
Object.entries(normalized.queryStringParameters).forEach(([key, value]) => {
|
|
68
|
+
query[key] = value;
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
const cookieHeader = event.headers?.Cookie || event.headers?.cookie || event.headers?.cookies;
|
|
72
|
+
const cookies = (0, helpers_1.parseRequestCookie)('lambda', cookieHeader);
|
|
73
|
+
let rawBody = Buffer.from(event.body ?? '', 'base64');
|
|
74
|
+
const body = (0, parsers_1.parceBody)({
|
|
75
|
+
body: rawBody,
|
|
76
|
+
headers: event.headers,
|
|
77
|
+
isBase64Encoded: event.isBase64Encoded,
|
|
78
|
+
});
|
|
79
|
+
const xForvarded = Array.isArray(event.headers['x-forwarded-proto'])
|
|
80
|
+
? event.headers['x-forwarded-proto']?.[0]
|
|
81
|
+
: event.headers['x-forwarded-proto'];
|
|
82
|
+
const xhost = Array.isArray(event.headers['host'])
|
|
83
|
+
? event.headers['host']?.[0]
|
|
84
|
+
: event.headers['host'];
|
|
85
|
+
let userAgent = typeof event.headers['user-agent'] === 'string'
|
|
86
|
+
? event.headers['user-agent']
|
|
87
|
+
: event.headers['user-agent']?.[0] || 'unknown';
|
|
88
|
+
const protocol = xForvarded || 'https';
|
|
89
|
+
const host = xhost || 'localhost:3000';
|
|
90
|
+
const fullUrl = `${protocol}://${host}${normalized.path}`;
|
|
91
|
+
const requestUrl = new URL(fullUrl);
|
|
92
|
+
return new request_1.Request({
|
|
93
|
+
source: 'lambda',
|
|
94
|
+
requestUrl,
|
|
95
|
+
url: normalized.path,
|
|
96
|
+
method: normalized.httpMethod,
|
|
97
|
+
path: normalized.path,
|
|
98
|
+
headers: normalized.headers || {},
|
|
99
|
+
query,
|
|
100
|
+
body,
|
|
101
|
+
params: normalized.pathParameters,
|
|
102
|
+
cookies,
|
|
103
|
+
sourceIp: (0, lambda_1.getSourceIp)(normalized),
|
|
104
|
+
userAgent,
|
|
105
|
+
requestId: context.awsRequestId,
|
|
106
|
+
stage: normalized.requestContext?.stage || '$default',
|
|
107
|
+
timestamp: new Date(),
|
|
108
|
+
raw: event,
|
|
109
|
+
context,
|
|
110
|
+
rawBody,
|
|
111
|
+
isBase64Encoded: !!event.isBase64Encoded,
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Create Request from generic object
|
|
116
|
+
*/
|
|
117
|
+
static fromObject(obj) {
|
|
118
|
+
return new request_1.Request({
|
|
119
|
+
requestUrl: new URL(obj.path),
|
|
120
|
+
url: obj.path,
|
|
121
|
+
source: obj.source || 'unknown',
|
|
122
|
+
method: obj.method || 'GET',
|
|
123
|
+
path: obj.path || '/',
|
|
124
|
+
headers: obj.headers || {},
|
|
125
|
+
query: obj.query || {},
|
|
126
|
+
body: obj.body,
|
|
127
|
+
params: obj.params || {},
|
|
128
|
+
cookies: obj.cookies || {},
|
|
129
|
+
sourceIp: obj.sourceIp || '0.0.0.0',
|
|
130
|
+
userAgent: obj.userAgent || 'unknown',
|
|
131
|
+
requestId: obj.requestId,
|
|
132
|
+
stage: obj.stage || 'dev',
|
|
133
|
+
timestamp: obj.timestamp ? new Date(obj.timestamp) : new Date(),
|
|
134
|
+
raw: obj.raw,
|
|
135
|
+
context: obj.context,
|
|
136
|
+
isBase64Encoded: false,
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
exports.RequestFactory = RequestFactory;
|
|
141
|
+
//# sourceMappingURL=factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../../src/utils/request/factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseQuesry = exports.parseRequestCookie = void 0;
|
|
4
|
+
const parseCookie = (cookies) => {
|
|
5
|
+
return cookies.split(';').reduce((acc, cookie) => {
|
|
6
|
+
const [name, value] = cookie.trim().split('=');
|
|
7
|
+
if (name && value) {
|
|
8
|
+
acc[name] = decodeURIComponent(value);
|
|
9
|
+
}
|
|
10
|
+
return acc;
|
|
11
|
+
}, {});
|
|
12
|
+
};
|
|
13
|
+
const parseRequestCookie = (source, cookies) => {
|
|
14
|
+
if (!cookies || source === 'unknown')
|
|
15
|
+
return {};
|
|
16
|
+
const values = Array.isArray(cookies) ? cookies : [cookies];
|
|
17
|
+
return values.reduce((acc, cookie) => {
|
|
18
|
+
return {
|
|
19
|
+
...acc,
|
|
20
|
+
...parseCookie(cookie),
|
|
21
|
+
};
|
|
22
|
+
}, {});
|
|
23
|
+
};
|
|
24
|
+
exports.parseRequestCookie = parseRequestCookie;
|
|
25
|
+
const parseQuesry = (url) => {
|
|
26
|
+
const params = url.searchParams;
|
|
27
|
+
const query = {};
|
|
28
|
+
for (const key of params.keys()) {
|
|
29
|
+
const values = params.getAll(key);
|
|
30
|
+
query[key] = values.length > 1 ? values : values[0];
|
|
31
|
+
}
|
|
32
|
+
return query;
|
|
33
|
+
};
|
|
34
|
+
exports.parseQuesry = parseQuesry;
|
|
35
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/utils/request/helpers.ts"],"names":[],"mappings":";;;AAEA,MAAM,WAAW,GAAG,CAAC,OAAe,EAAE,EAAE;IACtC,OAAQ,OAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAC1C,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;QACd,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/C,IAAI,IAAI,IAAI,KAAK,EAAE,CAAC;YAClB,GAAG,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACxC,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,EACD,EAA4B,CAC7B,CAAC;AACJ,CAAC,CAAC;AAEK,MAAM,kBAAkB,GAAG,CAChC,MAAqB,EACrB,OAA2B,EACH,EAAE;IAC1B,IAAI,CAAC,OAAO,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IAEhD,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC5D,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;QACnC,OAAO;YACL,GAAG,GAAG;YACN,GAAG,WAAW,CAAC,MAAM,CAAC;SACvB,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;AACT,CAAC,CAAC;AAbW,QAAA,kBAAkB,sBAa7B;AAEK,MAAM,WAAW,GAAG,CAAC,GAAQ,EAAE,EAAE;IACtC,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC;IAChC,MAAM,KAAK,GAAsC,EAAE,CAAC;IAEpD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAElC,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAXW,QAAA,WAAW,eAWtB"}
|
|
@@ -0,0 +1,19 @@
|
|
|
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
|
+
__exportStar(require("./factory"), exports);
|
|
18
|
+
__exportStar(require("./request"), exports);
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/request/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4CAA0B;AAC1B,4CAA0B"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { IRequest, RequestOptions, RequestSource } from '../../types/index.js';
|
|
2
|
+
import { APIGatewayProxyEvent, Context } from 'aws-lambda';
|
|
3
|
+
import { IncomingHttpHeaders } from 'http';
|
|
4
|
+
import { URL } from 'url';
|
|
5
|
+
export declare class Request implements IRequest {
|
|
6
|
+
method: string;
|
|
7
|
+
path: string;
|
|
8
|
+
requestUrl: URL;
|
|
9
|
+
url: string;
|
|
10
|
+
headers: Record<string, string | string[]>;
|
|
11
|
+
query: Record<string, string | string[]>;
|
|
12
|
+
body: any;
|
|
13
|
+
rawBody: any;
|
|
14
|
+
params: Record<string, string>;
|
|
15
|
+
cookies: Record<string, string>;
|
|
16
|
+
sourceIp: string;
|
|
17
|
+
userAgent: string;
|
|
18
|
+
requestId: string;
|
|
19
|
+
stage: string;
|
|
20
|
+
timestamp: Date;
|
|
21
|
+
source: RequestSource;
|
|
22
|
+
raw: any;
|
|
23
|
+
context: any;
|
|
24
|
+
isBase64Encoded: boolean;
|
|
25
|
+
startTime: number;
|
|
26
|
+
private _state;
|
|
27
|
+
constructor(options: RequestOptions & {
|
|
28
|
+
source: RequestSource;
|
|
29
|
+
});
|
|
30
|
+
base64Encoded(): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Get header value (case-insensitive)
|
|
33
|
+
*/
|
|
34
|
+
getHeader(name: string): string | string[] | undefined;
|
|
35
|
+
/**
|
|
36
|
+
* Get cookie value
|
|
37
|
+
*/
|
|
38
|
+
getCookie(name: string): string | undefined;
|
|
39
|
+
/**
|
|
40
|
+
* Get query parameter
|
|
41
|
+
*/
|
|
42
|
+
getQuery(name: string): string | string[] | undefined;
|
|
43
|
+
/**
|
|
44
|
+
* Get path parameter
|
|
45
|
+
*/
|
|
46
|
+
getParam(name: string): string | undefined;
|
|
47
|
+
/**
|
|
48
|
+
* Check if request is from HTTP server
|
|
49
|
+
*/
|
|
50
|
+
isHttp(): boolean;
|
|
51
|
+
/**
|
|
52
|
+
* Check if request is from Lambda
|
|
53
|
+
*/
|
|
54
|
+
isLambda(): boolean;
|
|
55
|
+
/**
|
|
56
|
+
* Get Lambda event (if from Lambda)
|
|
57
|
+
*/
|
|
58
|
+
getLambdaEvent(): APIGatewayProxyEvent | undefined;
|
|
59
|
+
/**
|
|
60
|
+
* Get Lambda context (if from Lambda)
|
|
61
|
+
*/
|
|
62
|
+
getLambdaContext(): Context | undefined;
|
|
63
|
+
/**
|
|
64
|
+
* Get HTTP IncomingMessage (if from HTTP)
|
|
65
|
+
*/
|
|
66
|
+
getHttpRequest(): IncomingHttpHeaders | undefined;
|
|
67
|
+
/**
|
|
68
|
+
* Store arbitrary data in request state
|
|
69
|
+
*/
|
|
70
|
+
setState(key: string, value: any): void;
|
|
71
|
+
/**
|
|
72
|
+
* Get stored state data
|
|
73
|
+
*/
|
|
74
|
+
getState<T = any>(key: string): T | undefined;
|
|
75
|
+
/**
|
|
76
|
+
* Get all stored state
|
|
77
|
+
*/
|
|
78
|
+
getAllState(): Map<string, any>;
|
|
79
|
+
/**
|
|
80
|
+
* Check if request is secure (HTTPS)
|
|
81
|
+
*/
|
|
82
|
+
isSecure(): boolean;
|
|
83
|
+
/**
|
|
84
|
+
* Get client IP (considering proxies)
|
|
85
|
+
*/
|
|
86
|
+
getClientIp(): string;
|
|
87
|
+
/**
|
|
88
|
+
* Get request host
|
|
89
|
+
*/
|
|
90
|
+
getHost(): string;
|
|
91
|
+
/**
|
|
92
|
+
* Get full URL
|
|
93
|
+
*/
|
|
94
|
+
getFullUrl(): string;
|
|
95
|
+
/**
|
|
96
|
+
* Clone request with modifications
|
|
97
|
+
*/
|
|
98
|
+
clone(overrides?: Partial<RequestOptions>): Request;
|
|
99
|
+
/**
|
|
100
|
+
* Convert to plain object
|
|
101
|
+
*/
|
|
102
|
+
toJSON(): Record<string, any>;
|
|
103
|
+
}
|