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
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Request = void 0;
|
|
4
|
+
const url_1 = require("url");
|
|
5
|
+
class Request {
|
|
6
|
+
method;
|
|
7
|
+
path;
|
|
8
|
+
requestUrl;
|
|
9
|
+
url;
|
|
10
|
+
headers;
|
|
11
|
+
query;
|
|
12
|
+
body;
|
|
13
|
+
rawBody;
|
|
14
|
+
params;
|
|
15
|
+
cookies;
|
|
16
|
+
sourceIp;
|
|
17
|
+
userAgent;
|
|
18
|
+
requestId;
|
|
19
|
+
stage;
|
|
20
|
+
timestamp;
|
|
21
|
+
source;
|
|
22
|
+
raw;
|
|
23
|
+
context;
|
|
24
|
+
isBase64Encoded;
|
|
25
|
+
startTime;
|
|
26
|
+
_state = new Map();
|
|
27
|
+
constructor(options) {
|
|
28
|
+
this.method = options.method.toUpperCase();
|
|
29
|
+
this.path = options.path;
|
|
30
|
+
this.url = options.path;
|
|
31
|
+
this.requestUrl = new url_1.URL(options.path, `http://${options.headers?.host || 'localhost'}`);
|
|
32
|
+
this.headers = options.headers || {};
|
|
33
|
+
this.query = options.query || {};
|
|
34
|
+
this.body = options.body;
|
|
35
|
+
this.params = options.params || {};
|
|
36
|
+
this.cookies = options.cookies || {};
|
|
37
|
+
this.sourceIp = options.sourceIp || '0.0.0.0';
|
|
38
|
+
this.userAgent = options.userAgent || 'unknown';
|
|
39
|
+
this.requestId = options.requestId;
|
|
40
|
+
this.stage = options.stage || 'dev';
|
|
41
|
+
this.timestamp = options.timestamp || new Date();
|
|
42
|
+
this.source = options.source;
|
|
43
|
+
this.raw = options.raw ?? options.event;
|
|
44
|
+
this.context = options.context;
|
|
45
|
+
this.url = options.url;
|
|
46
|
+
this.rawBody = options.rawBody;
|
|
47
|
+
this.raw = options.raw;
|
|
48
|
+
this.isBase64Encoded = options.isBase64Encoded ?? this.base64Encoded();
|
|
49
|
+
this.startTime = Date.now();
|
|
50
|
+
}
|
|
51
|
+
base64Encoded() {
|
|
52
|
+
if (this.isLambda() && this.raw?.isBase64Encoded) {
|
|
53
|
+
return this.raw.isBase64Encoded;
|
|
54
|
+
}
|
|
55
|
+
const encoding = this.getHeader('content-encoding');
|
|
56
|
+
if (encoding === 'base64') {
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
const transferEncoding = this.getHeader('transfer-encoding');
|
|
60
|
+
if (transferEncoding === 'base64') {
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Get header value (case-insensitive)
|
|
67
|
+
*/
|
|
68
|
+
getHeader(name) {
|
|
69
|
+
const lowerName = name.toLowerCase();
|
|
70
|
+
const entry = Object.entries(this.headers).find(([key]) => key.toLowerCase() === lowerName);
|
|
71
|
+
return entry ? entry[1] : undefined;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Get cookie value
|
|
75
|
+
*/
|
|
76
|
+
getCookie(name) {
|
|
77
|
+
return this.cookies[name];
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Get query parameter
|
|
81
|
+
*/
|
|
82
|
+
getQuery(name) {
|
|
83
|
+
return this.query[name];
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Get path parameter
|
|
87
|
+
*/
|
|
88
|
+
getParam(name) {
|
|
89
|
+
return this.params[name];
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Check if request is from HTTP server
|
|
93
|
+
*/
|
|
94
|
+
isHttp() {
|
|
95
|
+
return this.source === 'http';
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Check if request is from Lambda
|
|
99
|
+
*/
|
|
100
|
+
isLambda() {
|
|
101
|
+
return this.source === 'lambda';
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Get Lambda event (if from Lambda)
|
|
105
|
+
*/
|
|
106
|
+
getLambdaEvent() {
|
|
107
|
+
return this.isLambda() ? this.raw : undefined;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Get Lambda context (if from Lambda)
|
|
111
|
+
*/
|
|
112
|
+
getLambdaContext() {
|
|
113
|
+
return this.isLambda() ? this.context : undefined;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Get HTTP IncomingMessage (if from HTTP)
|
|
117
|
+
*/
|
|
118
|
+
getHttpRequest() {
|
|
119
|
+
return this.isHttp() ? this.raw : undefined;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Store arbitrary data in request state
|
|
123
|
+
*/
|
|
124
|
+
setState(key, value) {
|
|
125
|
+
this._state.set(key, value);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Get stored state data
|
|
129
|
+
*/
|
|
130
|
+
getState(key) {
|
|
131
|
+
return this._state.get(key);
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Get all stored state
|
|
135
|
+
*/
|
|
136
|
+
getAllState() {
|
|
137
|
+
return new Map(this._state);
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Check if request is secure (HTTPS)
|
|
141
|
+
*/
|
|
142
|
+
isSecure() {
|
|
143
|
+
const proto = this.getHeader('x-forwarded-proto') || this.requestUrl.protocol.replace(':', '');
|
|
144
|
+
return proto === 'https';
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Get client IP (considering proxies)
|
|
148
|
+
*/
|
|
149
|
+
getClientIp() {
|
|
150
|
+
const forwarded = this.getHeader('x-forwarded-for');
|
|
151
|
+
if (forwarded) {
|
|
152
|
+
const ips = Array.isArray(forwarded) ? forwarded : forwarded.split(',');
|
|
153
|
+
return ips[0].trim();
|
|
154
|
+
}
|
|
155
|
+
return this.sourceIp;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Get request host
|
|
159
|
+
*/
|
|
160
|
+
getHost() {
|
|
161
|
+
return this.getHeader('host') || 'localhost';
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Get full URL
|
|
165
|
+
*/
|
|
166
|
+
getFullUrl() {
|
|
167
|
+
const protocol = this.isSecure() ? 'https' : 'http';
|
|
168
|
+
return `${protocol}://${this.getHost()}${this.path}`;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Clone request with modifications
|
|
172
|
+
*/
|
|
173
|
+
clone(overrides) {
|
|
174
|
+
return new Request({
|
|
175
|
+
method: overrides?.method || this.method,
|
|
176
|
+
path: overrides?.path || this.path,
|
|
177
|
+
headers: overrides?.headers || this.headers,
|
|
178
|
+
query: overrides?.query || this.query,
|
|
179
|
+
body: overrides?.body !== undefined ? overrides.body : this.body,
|
|
180
|
+
params: overrides?.params || this.params,
|
|
181
|
+
cookies: overrides?.cookies || this.cookies,
|
|
182
|
+
sourceIp: overrides?.sourceIp || this.sourceIp,
|
|
183
|
+
userAgent: overrides?.userAgent || this.userAgent,
|
|
184
|
+
requestId: overrides?.requestId || this.requestId,
|
|
185
|
+
stage: overrides?.stage || this.stage,
|
|
186
|
+
timestamp: overrides?.timestamp || this.timestamp,
|
|
187
|
+
source: this.source,
|
|
188
|
+
raw: this.raw,
|
|
189
|
+
context: this.context,
|
|
190
|
+
url: this.url,
|
|
191
|
+
isBase64Encoded: false,
|
|
192
|
+
requestUrl: this.requestUrl,
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Convert to plain object
|
|
197
|
+
*/
|
|
198
|
+
toJSON() {
|
|
199
|
+
return {
|
|
200
|
+
method: this.method,
|
|
201
|
+
path: this.path,
|
|
202
|
+
url: this.url.toString(),
|
|
203
|
+
headers: this.headers,
|
|
204
|
+
query: this.query,
|
|
205
|
+
body: this.body,
|
|
206
|
+
params: this.params,
|
|
207
|
+
cookies: this.cookies,
|
|
208
|
+
sourceIp: this.sourceIp,
|
|
209
|
+
userAgent: this.userAgent,
|
|
210
|
+
requestId: this.requestId,
|
|
211
|
+
stage: this.stage,
|
|
212
|
+
timestamp: this.timestamp.toISOString(),
|
|
213
|
+
source: this.source,
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
exports.Request = Request;
|
|
218
|
+
//# sourceMappingURL=request.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request.js","sourceRoot":"","sources":["../../../src/utils/request/request.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Meta } from '../../types/index.js';
|
|
2
|
+
import { ServerResponse } from 'http';
|
|
3
|
+
import { Response } from './response';
|
|
4
|
+
export declare class ResponseFactory {
|
|
5
|
+
/**
|
|
6
|
+
* Create Response for HTTP server
|
|
7
|
+
*/
|
|
8
|
+
static forHttp(res: ServerResponse, meta: Meta): Response;
|
|
9
|
+
/**
|
|
10
|
+
* Create Response for Lambda
|
|
11
|
+
*/
|
|
12
|
+
static forLambda(meta: Meta): Response;
|
|
13
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ResponseFactory = void 0;
|
|
4
|
+
const response_1 = require("./response");
|
|
5
|
+
class ResponseFactory {
|
|
6
|
+
/**
|
|
7
|
+
* Create Response for HTTP server
|
|
8
|
+
*/
|
|
9
|
+
static forHttp(res, meta) {
|
|
10
|
+
return new response_1.Response('http', meta, res);
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Create Response for Lambda
|
|
14
|
+
*/
|
|
15
|
+
static forLambda(meta) {
|
|
16
|
+
return new response_1.Response('lambda', meta);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.ResponseFactory = ResponseFactory;
|
|
20
|
+
//# sourceMappingURL=factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../../src/utils/response/factory.ts"],"names":[],"mappings":";;;AAGA,yCAAsC;AAEtC,MAAa,eAAe;IAC1B;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,GAAmB,EAAE,IAAU;QAC5C,OAAO,IAAI,mBAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,IAAU;QACzB,OAAO,IAAI,mBAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACtC,CAAC;CACF;AAdD,0CAcC"}
|
|
@@ -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("./response"), exports);
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/response/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4CAA0B;AAC1B,6CAA2B"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { CookieOptions, IResponse, Meta, ResponseSource } from '../../types/index.js';
|
|
2
|
+
export declare class Response implements IResponse {
|
|
3
|
+
private _status;
|
|
4
|
+
private _headers;
|
|
5
|
+
private _data;
|
|
6
|
+
private _cookies;
|
|
7
|
+
private _isBase64Encoded;
|
|
8
|
+
private _headersSent;
|
|
9
|
+
private _source;
|
|
10
|
+
private _raw;
|
|
11
|
+
meta: Meta;
|
|
12
|
+
constructor(source: ResponseSource | undefined, meta: Meta, raw?: any);
|
|
13
|
+
requestId: string;
|
|
14
|
+
get headers(): Record<string, string | string[]>;
|
|
15
|
+
get ok(): boolean;
|
|
16
|
+
get data(): any;
|
|
17
|
+
set data(data: any);
|
|
18
|
+
get raw(): any;
|
|
19
|
+
get cookies(): string[];
|
|
20
|
+
get isBase64Encoded(): boolean;
|
|
21
|
+
get source(): ResponseSource;
|
|
22
|
+
get headersSent(): boolean;
|
|
23
|
+
set status(code: number);
|
|
24
|
+
get status(): number;
|
|
25
|
+
getStatus(): number;
|
|
26
|
+
setHeader(name: string, value: string | string[]): this;
|
|
27
|
+
getHeader(name: string): string | string[] | undefined;
|
|
28
|
+
hasHeader(name: string): boolean;
|
|
29
|
+
removeHeader(name: string): this;
|
|
30
|
+
setHeaders(headers: Record<string, string | string[]>): this;
|
|
31
|
+
setCookie(name: string, value: string, options?: CookieOptions): this;
|
|
32
|
+
clearCookie(name: string, options?: CookieOptions): this;
|
|
33
|
+
getCookies(): string[];
|
|
34
|
+
send(body: any): this;
|
|
35
|
+
json(data: any): this;
|
|
36
|
+
text(text: string): this;
|
|
37
|
+
html(html: string): this;
|
|
38
|
+
buffer(data: Buffer, contentType?: string): this;
|
|
39
|
+
stream(readable: NodeJS.ReadableStream, contentType?: string): this;
|
|
40
|
+
end(data: unknown): any;
|
|
41
|
+
redirect(url: string, statusCode?: number): this;
|
|
42
|
+
notFound(message?: string): this;
|
|
43
|
+
reset(): this;
|
|
44
|
+
toJSON(): Record<string, any>;
|
|
45
|
+
error(error: any): this;
|
|
46
|
+
}
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Response = void 0;
|
|
4
|
+
const _constants_1 = require("../../constants.js");
|
|
5
|
+
const error_1 = require("../error");
|
|
6
|
+
class Response {
|
|
7
|
+
_status = 200;
|
|
8
|
+
_headers = {};
|
|
9
|
+
_data;
|
|
10
|
+
_cookies = [];
|
|
11
|
+
_isBase64Encoded = false;
|
|
12
|
+
_headersSent = false;
|
|
13
|
+
_source;
|
|
14
|
+
_raw;
|
|
15
|
+
meta;
|
|
16
|
+
constructor(source = 'unknown', meta, raw) {
|
|
17
|
+
this._source = source;
|
|
18
|
+
this._raw = raw;
|
|
19
|
+
this.meta = {
|
|
20
|
+
requestUrl: meta.requestUrl,
|
|
21
|
+
method: meta.method,
|
|
22
|
+
requestId: meta.requestId,
|
|
23
|
+
sourceIp: meta.sourceIp,
|
|
24
|
+
userAgent: meta.userAgent,
|
|
25
|
+
startTime: meta.startTime,
|
|
26
|
+
};
|
|
27
|
+
if (!this.getHeader('Content-Type')) {
|
|
28
|
+
this.setHeader('Content-Type', 'application/json');
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
requestId;
|
|
32
|
+
get headers() {
|
|
33
|
+
return { ...this._headers };
|
|
34
|
+
}
|
|
35
|
+
get ok() {
|
|
36
|
+
return _constants_1.OK_STATUSES.includes(this._status);
|
|
37
|
+
}
|
|
38
|
+
get data() {
|
|
39
|
+
return this._data;
|
|
40
|
+
}
|
|
41
|
+
set data(data) {
|
|
42
|
+
if (data instanceof Error) {
|
|
43
|
+
let serialized = new error_1.ApplicationError(data, {
|
|
44
|
+
meta: this.meta,
|
|
45
|
+
config: {
|
|
46
|
+
includeStack: process.env.NODE_ENV !== 'production',
|
|
47
|
+
logErrors: !!process.env.LOG_ERRORS,
|
|
48
|
+
},
|
|
49
|
+
});
|
|
50
|
+
if (this.ok) {
|
|
51
|
+
this.status = serialized.status ?? 500;
|
|
52
|
+
}
|
|
53
|
+
this._data = serialized.toJSON();
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
this._data = data;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
get raw() {
|
|
60
|
+
return this._raw;
|
|
61
|
+
}
|
|
62
|
+
get cookies() {
|
|
63
|
+
return [...this._cookies];
|
|
64
|
+
}
|
|
65
|
+
get isBase64Encoded() {
|
|
66
|
+
return this._isBase64Encoded;
|
|
67
|
+
}
|
|
68
|
+
get source() {
|
|
69
|
+
return this._source;
|
|
70
|
+
}
|
|
71
|
+
get headersSent() {
|
|
72
|
+
return this.raw.headersSent ?? this._headersSent;
|
|
73
|
+
}
|
|
74
|
+
// ==================== Status Methods ====================
|
|
75
|
+
set status(code) {
|
|
76
|
+
this._status = code;
|
|
77
|
+
if (this.raw.statusCode) {
|
|
78
|
+
this.raw.statusCode = code;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
get status() {
|
|
82
|
+
return this._status;
|
|
83
|
+
}
|
|
84
|
+
getStatus() {
|
|
85
|
+
return this._status;
|
|
86
|
+
}
|
|
87
|
+
// ==================== Header Methods ====================
|
|
88
|
+
setHeader(name, value) {
|
|
89
|
+
this._headers[name.toLowerCase()] = value;
|
|
90
|
+
if (this.raw.headers) {
|
|
91
|
+
this.raw.headers[name.toLowerCase()] = value;
|
|
92
|
+
}
|
|
93
|
+
return this;
|
|
94
|
+
}
|
|
95
|
+
getHeader(name) {
|
|
96
|
+
return this._headers[name.toLowerCase()];
|
|
97
|
+
}
|
|
98
|
+
hasHeader(name) {
|
|
99
|
+
return name.toLowerCase() in this._headers;
|
|
100
|
+
}
|
|
101
|
+
removeHeader(name) {
|
|
102
|
+
delete this._headers[name.toLowerCase()];
|
|
103
|
+
if (this.raw.headers) {
|
|
104
|
+
delete this.raw.headers[name.toLowerCase()];
|
|
105
|
+
}
|
|
106
|
+
return this;
|
|
107
|
+
}
|
|
108
|
+
setHeaders(headers) {
|
|
109
|
+
Object.entries(headers).forEach(([key, value]) => {
|
|
110
|
+
this.setHeader(key, value);
|
|
111
|
+
});
|
|
112
|
+
return this;
|
|
113
|
+
}
|
|
114
|
+
// ==================== Cookie Methods ====================
|
|
115
|
+
setCookie(name, value, options = {}) {
|
|
116
|
+
const cookieValue = encodeURIComponent(value);
|
|
117
|
+
const parts = [`${name}=${cookieValue}`];
|
|
118
|
+
if (options.maxAge !== undefined) {
|
|
119
|
+
parts.push(`Max-Age=${options.maxAge}`);
|
|
120
|
+
}
|
|
121
|
+
if (options.expires) {
|
|
122
|
+
parts.push(`Expires=${options.expires.toUTCString()}`);
|
|
123
|
+
}
|
|
124
|
+
if (options.path) {
|
|
125
|
+
parts.push(`Path=${options.path}`);
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
parts.push('Path=/');
|
|
129
|
+
}
|
|
130
|
+
if (options.domain) {
|
|
131
|
+
parts.push(`Domain=${options.domain}`);
|
|
132
|
+
}
|
|
133
|
+
if (options.secure) {
|
|
134
|
+
parts.push('Secure');
|
|
135
|
+
}
|
|
136
|
+
if (options.httpOnly) {
|
|
137
|
+
parts.push('HttpOnly');
|
|
138
|
+
}
|
|
139
|
+
if (options.sameSite) {
|
|
140
|
+
parts.push(`SameSite=${options.sameSite}`);
|
|
141
|
+
}
|
|
142
|
+
if (options.priority) {
|
|
143
|
+
parts.push(`Priority=${options.priority}`);
|
|
144
|
+
}
|
|
145
|
+
if (options.partitioned) {
|
|
146
|
+
parts.push('Partitioned');
|
|
147
|
+
}
|
|
148
|
+
this._cookies.push(parts.join('; '));
|
|
149
|
+
if (this.raw.cookies) {
|
|
150
|
+
this.raw.cookies = this._cookies;
|
|
151
|
+
}
|
|
152
|
+
return this;
|
|
153
|
+
}
|
|
154
|
+
clearCookie(name, options = {}) {
|
|
155
|
+
return this.setCookie(name, '', {
|
|
156
|
+
...options,
|
|
157
|
+
maxAge: 0,
|
|
158
|
+
expires: new Date(0),
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
getCookies() {
|
|
162
|
+
return [...this._cookies];
|
|
163
|
+
}
|
|
164
|
+
// ==================== Body Methods ====================
|
|
165
|
+
send(body) {
|
|
166
|
+
this._data = body;
|
|
167
|
+
this._headersSent = true;
|
|
168
|
+
this.end(this._data);
|
|
169
|
+
return this;
|
|
170
|
+
}
|
|
171
|
+
json(data) {
|
|
172
|
+
this.setHeader('content-type', 'application/json');
|
|
173
|
+
this._data = data;
|
|
174
|
+
this._headersSent = true;
|
|
175
|
+
this.end(this._data);
|
|
176
|
+
return this;
|
|
177
|
+
}
|
|
178
|
+
text(text) {
|
|
179
|
+
this.setHeader('content-type', 'text/plain');
|
|
180
|
+
this._data = text;
|
|
181
|
+
this._headersSent = true;
|
|
182
|
+
this.send(this._data);
|
|
183
|
+
return this;
|
|
184
|
+
}
|
|
185
|
+
html(html) {
|
|
186
|
+
this.setHeader('content-type', 'text/html');
|
|
187
|
+
this._data = html;
|
|
188
|
+
this._headersSent = true;
|
|
189
|
+
this.send(this._data);
|
|
190
|
+
return this;
|
|
191
|
+
}
|
|
192
|
+
buffer(data, contentType) {
|
|
193
|
+
if (contentType) {
|
|
194
|
+
this.setHeader('content-type', contentType);
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
this.setHeader('content-type', 'application/octet-stream');
|
|
198
|
+
}
|
|
199
|
+
this._data = data;
|
|
200
|
+
this._isBase64Encoded = this._source === 'lambda';
|
|
201
|
+
this._headersSent = true;
|
|
202
|
+
this.send(this._data);
|
|
203
|
+
return this;
|
|
204
|
+
}
|
|
205
|
+
stream(readable, contentType) {
|
|
206
|
+
if (this._source !== 'http')
|
|
207
|
+
throw Error('Not implemented');
|
|
208
|
+
if (contentType) {
|
|
209
|
+
this.setHeader('content-type', contentType);
|
|
210
|
+
}
|
|
211
|
+
this._data = readable;
|
|
212
|
+
this.send(this._data);
|
|
213
|
+
return this;
|
|
214
|
+
}
|
|
215
|
+
end(data) {
|
|
216
|
+
const serialized = typeof data === 'object' ? JSON.stringify(data) : data;
|
|
217
|
+
this._headersSent = true;
|
|
218
|
+
if (typeof this.raw.end !== 'function') {
|
|
219
|
+
console.log('Method not implemented');
|
|
220
|
+
}
|
|
221
|
+
this.setHeader('X-Response-Time', `${Date.now() - this.meta.startTime}ms`);
|
|
222
|
+
return this.raw.end(serialized);
|
|
223
|
+
}
|
|
224
|
+
// ==================== Response Methods ====================
|
|
225
|
+
redirect(url, statusCode = 302) {
|
|
226
|
+
this._status = statusCode;
|
|
227
|
+
this.setHeader('location', url);
|
|
228
|
+
return this;
|
|
229
|
+
}
|
|
230
|
+
notFound(message = 'Not Found') {
|
|
231
|
+
this._status = 404;
|
|
232
|
+
this.json({ error: message });
|
|
233
|
+
return this;
|
|
234
|
+
}
|
|
235
|
+
reset() {
|
|
236
|
+
this._status = 200;
|
|
237
|
+
this._headers = {};
|
|
238
|
+
this._data = null;
|
|
239
|
+
this._cookies = [];
|
|
240
|
+
this._isBase64Encoded = false;
|
|
241
|
+
this._headersSent = false;
|
|
242
|
+
return this;
|
|
243
|
+
}
|
|
244
|
+
toJSON() {
|
|
245
|
+
return {
|
|
246
|
+
statusCode: this._status,
|
|
247
|
+
headers: this._headers,
|
|
248
|
+
cookies: this._cookies,
|
|
249
|
+
isBase64Encoded: this._isBase64Encoded,
|
|
250
|
+
data: this._data,
|
|
251
|
+
source: this._source,
|
|
252
|
+
meta: this.meta,
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
error(error) {
|
|
256
|
+
const config = {
|
|
257
|
+
includeStack: process.env.NODE_ENV !== 'production',
|
|
258
|
+
logErrors: !!process.env.LOG_ERRORS,
|
|
259
|
+
};
|
|
260
|
+
let serialized = new error_1.ApplicationError(error, { meta: this.meta, config });
|
|
261
|
+
if (this.ok) {
|
|
262
|
+
this.status = serialized.status ?? 500;
|
|
263
|
+
}
|
|
264
|
+
this.data = serialized;
|
|
265
|
+
return this;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
exports.Response = Response;
|
|
269
|
+
//# sourceMappingURL=response.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response.js","sourceRoot":"","sources":["../../../src/utils/response/response.ts"],"names":[],"mappings":"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"}
|