@heliosjs/http 1.0.1
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 +540 -0
- package/dist/Application.d.ts +32 -0
- package/dist/Application.js +269 -0
- package/dist/Application.js.map +1 -0
- package/dist/constants.d.ts +25 -0
- package/dist/constants.js +34 -0
- package/dist/constants.js.map +1 -0
- package/dist/decorators.d.ts +43 -0
- package/dist/decorators.js +81 -0
- package/dist/decorators.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/socket/decorators.d.ts +77 -0
- package/dist/socket/decorators.js +112 -0
- package/dist/socket/decorators.js.map +1 -0
- package/dist/socket/index.d.ts +1 -0
- package/dist/socket/index.js +18 -0
- package/dist/socket/index.js.map +1 -0
- package/dist/sse/decorators.d.ts +52 -0
- package/dist/sse/decorators.js +76 -0
- package/dist/sse/decorators.js.map +1 -0
- package/dist/sse/index.d.ts +1 -0
- package/dist/sse/index.js +18 -0
- package/dist/sse/index.js.map +1 -0
- package/dist/types/core/common.d.ts +44 -0
- package/dist/types/core/common.js +15 -0
- package/dist/types/core/common.js.map +1 -0
- package/dist/types/core/controller.d.ts +78 -0
- package/dist/types/core/controller.js +3 -0
- package/dist/types/core/controller.js.map +1 -0
- package/dist/types/core/cors.d.ts +10 -0
- package/dist/types/core/cors.js +3 -0
- package/dist/types/core/cors.js.map +1 -0
- package/dist/types/core/error.d.ts +72 -0
- package/dist/types/core/error.js +19 -0
- package/dist/types/core/error.js.map +1 -0
- package/dist/types/core/index.d.ts +9 -0
- package/dist/types/core/index.js +26 -0
- package/dist/types/core/index.js.map +1 -0
- package/dist/types/core/multipart.d.ts +8 -0
- package/dist/types/core/multipart.js +3 -0
- package/dist/types/core/multipart.js.map +1 -0
- package/dist/types/core/request.d.ts +65 -0
- package/dist/types/core/request.js +3 -0
- package/dist/types/core/request.js.map +1 -0
- package/dist/types/core/response.d.ts +49 -0
- package/dist/types/core/response.js +3 -0
- package/dist/types/core/response.js.map +1 -0
- package/dist/types/core/sanitize.d.ts +8 -0
- package/dist/types/core/sanitize.js +3 -0
- package/dist/types/core/sanitize.js.map +1 -0
- package/dist/types/core/sse.d.ts +37 -0
- package/dist/types/core/sse.js +3 -0
- package/dist/types/core/sse.js.map +1 -0
- package/dist/types/http/http.d.ts +111 -0
- package/dist/types/http/http.js +3 -0
- package/dist/types/http/http.js.map +1 -0
- package/dist/types/http/index.d.ts +3 -0
- package/dist/types/http/index.js +20 -0
- package/dist/types/http/index.js.map +1 -0
- package/dist/types/http/plugin.d.ts +18 -0
- package/dist/types/http/plugin.js +3 -0
- package/dist/types/http/plugin.js.map +1 -0
- package/dist/types/http/static.d.ts +24 -0
- package/dist/types/http/static.js +3 -0
- package/dist/types/http/static.js.map +1 -0
- package/dist/types/ws/index.d.ts +50 -0
- package/dist/types/ws/index.js +3 -0
- package/dist/types/ws/index.js.map +1 -0
- package/dist/utils/core/controller.d.ts +25 -0
- package/dist/utils/core/controller.js +219 -0
- package/dist/utils/core/controller.js.map +1 -0
- package/dist/utils/core/cors.d.ts +8 -0
- package/dist/utils/core/cors.js +128 -0
- package/dist/utils/core/cors.js.map +1 -0
- package/dist/utils/core/endpoint.d.ts +3 -0
- package/dist/utils/core/endpoint.js +28 -0
- package/dist/utils/core/endpoint.js.map +1 -0
- package/dist/utils/core/error/apperror.d.ts +31 -0
- package/dist/utils/core/error/apperror.js +131 -0
- package/dist/utils/core/error/apperror.js.map +1 -0
- package/dist/utils/core/error/authorizations.d.ts +7 -0
- package/dist/utils/core/error/authorizations.js +17 -0
- package/dist/utils/core/error/authorizations.js.map +1 -0
- package/dist/utils/core/error/base.d.ts +20 -0
- package/dist/utils/core/error/base.js +52 -0
- package/dist/utils/core/error/base.js.map +1 -0
- package/dist/utils/core/error/dependencyFailed.d.ts +7 -0
- package/dist/utils/core/error/dependencyFailed.js +17 -0
- package/dist/utils/core/error/dependencyFailed.js.map +1 -0
- package/dist/utils/core/error/duplicateEntry.d.ts +7 -0
- package/dist/utils/core/error/duplicateEntry.js +17 -0
- package/dist/utils/core/error/duplicateEntry.js.map +1 -0
- package/dist/utils/core/error/forbidden.d.ts +7 -0
- package/dist/utils/core/error/forbidden.js +17 -0
- package/dist/utils/core/error/forbidden.js.map +1 -0
- package/dist/utils/core/error/helpers.d.ts +8 -0
- package/dist/utils/core/error/helpers.js +144 -0
- package/dist/utils/core/error/helpers.js.map +1 -0
- package/dist/utils/core/error/index.d.ts +12 -0
- package/dist/utils/core/error/index.js +29 -0
- package/dist/utils/core/error/index.js.map +1 -0
- package/dist/utils/core/error/invalidState.d.ts +7 -0
- package/dist/utils/core/error/invalidState.js +17 -0
- package/dist/utils/core/error/invalidState.js.map +1 -0
- package/dist/utils/core/error/notfound.d.ts +7 -0
- package/dist/utils/core/error/notfound.js +18 -0
- package/dist/utils/core/error/notfound.js.map +1 -0
- package/dist/utils/core/error/rateLimit.d.ts +7 -0
- package/dist/utils/core/error/rateLimit.js +17 -0
- package/dist/utils/core/error/rateLimit.js.map +1 -0
- package/dist/utils/core/error/serviceUnavailable.d.ts +7 -0
- package/dist/utils/core/error/serviceUnavailable.js +17 -0
- package/dist/utils/core/error/serviceUnavailable.js.map +1 -0
- package/dist/utils/core/error/validation.d.ts +10 -0
- package/dist/utils/core/error/validation.js +20 -0
- package/dist/utils/core/error/validation.js.map +1 -0
- package/dist/utils/core/headers.d.ts +2 -0
- package/dist/utils/core/headers.js +10 -0
- package/dist/utils/core/headers.js.map +1 -0
- package/dist/utils/core/helper.d.ts +6 -0
- package/dist/utils/core/helper.js +66 -0
- package/dist/utils/core/helper.js.map +1 -0
- package/dist/utils/core/index.d.ts +10 -0
- package/dist/utils/core/index.js +27 -0
- package/dist/utils/core/index.js.map +1 -0
- package/dist/utils/core/multipart.d.ts +9 -0
- package/dist/utils/core/multipart.js +207 -0
- package/dist/utils/core/multipart.js.map +1 -0
- package/dist/utils/core/request.d.ts +100 -0
- package/dist/utils/core/request.js +218 -0
- package/dist/utils/core/request.js.map +1 -0
- package/dist/utils/core/response.d.ts +48 -0
- package/dist/utils/core/response.js +269 -0
- package/dist/utils/core/response.js.map +1 -0
- package/dist/utils/core/routeWalker.d.ts +2 -0
- package/dist/utils/core/routeWalker.js +115 -0
- package/dist/utils/core/routeWalker.js.map +1 -0
- package/dist/utils/core/sanitize.d.ts +30 -0
- package/dist/utils/core/sanitize.js +134 -0
- package/dist/utils/core/sanitize.js.map +1 -0
- package/dist/utils/http/index.d.ts +5 -0
- package/dist/utils/http/index.js +22 -0
- package/dist/utils/http/index.js.map +1 -0
- package/dist/utils/http/plugin.d.ts +9 -0
- package/dist/utils/http/plugin.js +43 -0
- package/dist/utils/http/plugin.js.map +1 -0
- package/dist/utils/http/request.factory.d.ts +8 -0
- package/dist/utils/http/request.factory.js +55 -0
- package/dist/utils/http/request.factory.js.map +1 -0
- package/dist/utils/http/response.factory.d.ts +9 -0
- package/dist/utils/http/response.factory.js +14 -0
- package/dist/utils/http/response.factory.js.map +1 -0
- package/dist/utils/http/server.d.ts +18 -0
- package/dist/utils/http/server.js +58 -0
- package/dist/utils/http/server.js.map +1 -0
- package/dist/utils/http/static.d.ts +3 -0
- package/dist/utils/http/static.js +151 -0
- package/dist/utils/http/static.js.map +1 -0
- package/dist/utils/shared/index.d.ts +2 -0
- package/dist/utils/shared/index.js +19 -0
- package/dist/utils/shared/index.js.map +1 -0
- package/dist/utils/shared/parsers.d.ts +11 -0
- package/dist/utils/shared/parsers.js +133 -0
- package/dist/utils/shared/parsers.js.map +1 -0
- package/dist/utils/shared/validate.d.ts +1 -0
- package/dist/utils/shared/validate.js +41 -0
- package/dist/utils/shared/validate.js.map +1 -0
- package/dist/utils/socket/index.d.ts +3 -0
- package/dist/utils/socket/index.js +20 -0
- package/dist/utils/socket/index.js.map +1 -0
- package/dist/utils/socket/server.d.ts +33 -0
- package/dist/utils/socket/server.js +218 -0
- package/dist/utils/socket/server.js.map +1 -0
- package/dist/utils/socket/service.d.ts +20 -0
- package/dist/utils/socket/service.js +42 -0
- package/dist/utils/socket/service.js.map +1 -0
- package/dist/utils/socket/socket.d.ts +16 -0
- package/dist/utils/socket/socket.js +33 -0
- package/dist/utils/socket/socket.js.map +1 -0
- package/dist/utils/sse/index.d.ts +2 -0
- package/dist/utils/sse/index.js +19 -0
- package/dist/utils/sse/index.js.map +1 -0
- package/dist/utils/sse/server.d.ts +14 -0
- package/dist/utils/sse/server.js +85 -0
- package/dist/utils/sse/server.js.map +1 -0
- package/dist/utils/sse/service.d.ts +17 -0
- package/dist/utils/sse/service.js +40 -0
- package/dist/utils/sse/service.js.map +1 -0
- package/package.json +38 -0
|
@@ -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");
|
|
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/core/response.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.routeWalker = void 0;
|
|
4
|
+
const constants_1 = require("../../constants");
|
|
5
|
+
const controller_1 = require("./controller");
|
|
6
|
+
const cors_1 = require("./cors");
|
|
7
|
+
const endpoint_1 = require("./endpoint");
|
|
8
|
+
const routeWalker = async (context, request, response) => {
|
|
9
|
+
const { controllerInstance, controllerMeta, path, method, subPath } = context;
|
|
10
|
+
for (const SubController of controllerMeta.subControllers) {
|
|
11
|
+
const subInstance = new SubController();
|
|
12
|
+
const middlewares = []
|
|
13
|
+
.concat(Reflect.getMetadata(constants_1.MIDDLEWARES, SubController.prototype))
|
|
14
|
+
.concat(Reflect.getMetadata(constants_1.USE_MIDDLEWARE, SubController))
|
|
15
|
+
.filter((el) => !!el);
|
|
16
|
+
const sanitizers = []
|
|
17
|
+
.concat(Reflect.getMetadata(constants_1.SANITIZE, SubController.prototype))
|
|
18
|
+
.concat(Reflect.getMetadata(constants_1.SANITIZE, SubController))
|
|
19
|
+
.filter((el) => !!el);
|
|
20
|
+
const subMeta = {
|
|
21
|
+
routePrefix: Reflect.getMetadata(constants_1.ROUTE_PREFIX, SubController.prototype) || '',
|
|
22
|
+
middlewares,
|
|
23
|
+
interceptor: Reflect.getMetadata(constants_1.INTERCEPTOR, SubController.prototype),
|
|
24
|
+
errorHandler: Reflect.getMetadata(constants_1.CATCH, SubController),
|
|
25
|
+
subControllers: Reflect.getMetadata(constants_1.CONTROLLERS, SubController.prototype) || [],
|
|
26
|
+
cors: Reflect.getMetadata(constants_1.CORS_METADATA, SubController.prototype) || [],
|
|
27
|
+
sanitizers,
|
|
28
|
+
};
|
|
29
|
+
const fullSubPath = [subPath, subMeta.routePrefix]
|
|
30
|
+
.filter(Boolean)
|
|
31
|
+
.join('/')
|
|
32
|
+
.replace(/\/+/g, '/');
|
|
33
|
+
if ((0, endpoint_1.pathStartsWithPrefix)(path, fullSubPath)) {
|
|
34
|
+
const walkerData = {
|
|
35
|
+
...context,
|
|
36
|
+
subPath: fullSubPath,
|
|
37
|
+
controllerInstance: subInstance,
|
|
38
|
+
controllerMeta: subMeta,
|
|
39
|
+
path,
|
|
40
|
+
middlewareChain: [...context.middlewareChain, ...controllerMeta.middlewares],
|
|
41
|
+
sanitizersChain: [...context.sanitizersChain, ...controllerMeta.sanitizers],
|
|
42
|
+
errorHandlerChain: [...context.errorHandlerChain, subMeta.errorHandler].filter((el) => !!el),
|
|
43
|
+
interceptorChain: [...context.interceptorChain, controllerMeta.interceptor].filter((el) => !!el),
|
|
44
|
+
corsChain: [...context.corsChain, subMeta.cors].filter((el) => !!el),
|
|
45
|
+
};
|
|
46
|
+
return (0, exports.routeWalker)(walkerData, request, response);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
const routeMatch = (0, controller_1.findRouteInController)(controllerInstance, subPath, path, method);
|
|
50
|
+
if (!routeMatch) {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
try {
|
|
54
|
+
const { name, pathParams, middlewares, cors, sanitizers } = routeMatch;
|
|
55
|
+
Object.assign(request, { params: pathParams });
|
|
56
|
+
const handledCors = context.corsChain
|
|
57
|
+
.concat(cors ?? [])
|
|
58
|
+
.flat()
|
|
59
|
+
.filter((el) => !!el)
|
|
60
|
+
.reduce((acc, conf) => {
|
|
61
|
+
const cors = (0, cors_1.handleCORS)(request, response, conf);
|
|
62
|
+
return {
|
|
63
|
+
permitted: acc.permitted && cors.permitted,
|
|
64
|
+
continue: acc.continue && cors.continue,
|
|
65
|
+
};
|
|
66
|
+
}, { permitted: true, continue: true });
|
|
67
|
+
if (!handledCors.permitted) {
|
|
68
|
+
response.status = 403;
|
|
69
|
+
response.data = 'Cors not pemitted';
|
|
70
|
+
return true;
|
|
71
|
+
}
|
|
72
|
+
if (!handledCors.continue && handledCors.permitted) {
|
|
73
|
+
response.status = 204;
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
const controllerMiddlewares = [...context.middlewareChain, ...controllerMeta.middlewares];
|
|
77
|
+
const controllerSanitizers = [...context.sanitizersChain, ...controllerMeta.sanitizers].filter((el) => !!el);
|
|
78
|
+
await (0, controller_1.applyMiddlewaresVsSanitizers)(request, response, {
|
|
79
|
+
sanitizers: [controllerSanitizers, sanitizers],
|
|
80
|
+
middlewares: [controllerMiddlewares, middlewares],
|
|
81
|
+
});
|
|
82
|
+
const data = await (0, controller_1.getResponse)({
|
|
83
|
+
interceptors: [...context.interceptorChain, controllerMeta.interceptor].filter((el) => !!el),
|
|
84
|
+
controllerInstance,
|
|
85
|
+
name,
|
|
86
|
+
response: response,
|
|
87
|
+
request: request,
|
|
88
|
+
});
|
|
89
|
+
if (response.data instanceof Error) {
|
|
90
|
+
throw data;
|
|
91
|
+
}
|
|
92
|
+
response.data = data;
|
|
93
|
+
return true;
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
let catched = error;
|
|
97
|
+
let statusCode = error.status ?? error.statusCode ?? 500;
|
|
98
|
+
catched.status = statusCode;
|
|
99
|
+
response.error(error);
|
|
100
|
+
for (const handler of context.errorHandlerChain?.reverse() || []) {
|
|
101
|
+
try {
|
|
102
|
+
catched = await handler(catched, request, response);
|
|
103
|
+
response.status = 200;
|
|
104
|
+
response.data = catched;
|
|
105
|
+
}
|
|
106
|
+
catch (errs) {
|
|
107
|
+
response.status = errs.status ?? errs.statusCode ?? statusCode;
|
|
108
|
+
response.error(new Error(errs));
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return true;
|
|
113
|
+
};
|
|
114
|
+
exports.routeWalker = routeWalker;
|
|
115
|
+
//# sourceMappingURL=routeWalker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routeWalker.js","sourceRoot":"","sources":["../../../src/utils/core/routeWalker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import * as Joi from 'joi';
|
|
2
|
+
import { IRequest, SanitizerConfig } from '../../types/core';
|
|
3
|
+
export declare const SANITIZER: {
|
|
4
|
+
string: {
|
|
5
|
+
trim: () => Joi.StringSchema<string>;
|
|
6
|
+
email: () => Joi.StringSchema<string>;
|
|
7
|
+
name: () => Joi.StringSchema<string>;
|
|
8
|
+
slug: () => Joi.StringSchema<string>;
|
|
9
|
+
phone: () => Joi.StringSchema<string>;
|
|
10
|
+
};
|
|
11
|
+
number: {
|
|
12
|
+
integer: () => Joi.NumberSchema<number>;
|
|
13
|
+
positive: () => Joi.NumberSchema<number>;
|
|
14
|
+
range: (min: number, max: number) => Joi.NumberSchema<number>;
|
|
15
|
+
};
|
|
16
|
+
object: {
|
|
17
|
+
stripUnknown: (schema: Joi.Schema) => Joi.ObjectSchema<any>;
|
|
18
|
+
withDefaults: (schema: Joi.Schema) => Joi.ObjectSchema<any>;
|
|
19
|
+
};
|
|
20
|
+
date: {
|
|
21
|
+
iso: () => Joi.DateSchema<Date>;
|
|
22
|
+
timestamp: () => Joi.DateSchema<Date>;
|
|
23
|
+
};
|
|
24
|
+
xss: () => Joi.StringSchema<string>;
|
|
25
|
+
};
|
|
26
|
+
export declare function applyJoiSanitization(value: any, config: SanitizerConfig): {
|
|
27
|
+
value: any;
|
|
28
|
+
error?: Joi.ValidationError;
|
|
29
|
+
};
|
|
30
|
+
export declare const sanitizeRequest: (request: IRequest, config: SanitizerConfig[]) => void;
|
|
@@ -0,0 +1,134 @@
|
|
|
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.sanitizeRequest = exports.SANITIZER = void 0;
|
|
37
|
+
exports.applyJoiSanitization = applyJoiSanitization;
|
|
38
|
+
const Joi = __importStar(require("joi"));
|
|
39
|
+
exports.SANITIZER = {
|
|
40
|
+
string: {
|
|
41
|
+
trim: () => Joi.string().trim(),
|
|
42
|
+
email: () => Joi.string().email().trim().lowercase(),
|
|
43
|
+
name: () => Joi.string()
|
|
44
|
+
.trim()
|
|
45
|
+
.min(2)
|
|
46
|
+
.max(50)
|
|
47
|
+
.pattern(/^[a-zA-Z\s-]+$/),
|
|
48
|
+
slug: () => Joi.string()
|
|
49
|
+
.trim()
|
|
50
|
+
.lowercase()
|
|
51
|
+
.pattern(/^[a-z0-9-]+$/),
|
|
52
|
+
phone: () => Joi.string()
|
|
53
|
+
.trim()
|
|
54
|
+
.pattern(/^[\d\s\+\-\(\)]+$/),
|
|
55
|
+
},
|
|
56
|
+
number: {
|
|
57
|
+
integer: () => Joi.number().integer(),
|
|
58
|
+
positive: () => Joi.number().positive(),
|
|
59
|
+
range: (min, max) => Joi.number().min(min).max(max),
|
|
60
|
+
},
|
|
61
|
+
object: {
|
|
62
|
+
stripUnknown: (schema) => Joi.object(schema).unknown(false),
|
|
63
|
+
withDefaults: (schema) => Joi.object(schema).options({ stripUnknown: true }),
|
|
64
|
+
},
|
|
65
|
+
date: {
|
|
66
|
+
iso: () => Joi.date().iso(),
|
|
67
|
+
timestamp: () => Joi.date().timestamp(),
|
|
68
|
+
},
|
|
69
|
+
xss: () => Joi.string().custom((value, helpers) => {
|
|
70
|
+
if (typeof value !== 'string')
|
|
71
|
+
return value;
|
|
72
|
+
const sanitized = value
|
|
73
|
+
.replace(/javascript:/gi, '')
|
|
74
|
+
.replace(/on\w+=/gi, '')
|
|
75
|
+
.replace(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, '')
|
|
76
|
+
.replace(/data:/gi, '');
|
|
77
|
+
return sanitized;
|
|
78
|
+
}, 'XSS sanitization'),
|
|
79
|
+
};
|
|
80
|
+
function applyJoiSanitization(value, config) {
|
|
81
|
+
if (!['headers', 'body', 'params', 'query'].includes(config.type)) {
|
|
82
|
+
return { value };
|
|
83
|
+
}
|
|
84
|
+
if (value === null || value === undefined) {
|
|
85
|
+
return { value };
|
|
86
|
+
}
|
|
87
|
+
const action = config.action || 'both';
|
|
88
|
+
const options = {
|
|
89
|
+
convert: true,
|
|
90
|
+
stripUnknown: config.stripUnknown ?? true,
|
|
91
|
+
abortEarly: false,
|
|
92
|
+
...config.options,
|
|
93
|
+
};
|
|
94
|
+
try {
|
|
95
|
+
let result;
|
|
96
|
+
switch (action) {
|
|
97
|
+
case 'validate':
|
|
98
|
+
result = config.schema.validate(value, { ...options, convert: false, noDefaults: true });
|
|
99
|
+
break;
|
|
100
|
+
case 'sanitize':
|
|
101
|
+
result = config.schema.validate(value, {
|
|
102
|
+
...options,
|
|
103
|
+
convert: true,
|
|
104
|
+
presence: 'optional',
|
|
105
|
+
noDefaults: false,
|
|
106
|
+
});
|
|
107
|
+
break;
|
|
108
|
+
case 'both':
|
|
109
|
+
default:
|
|
110
|
+
result = config.schema.validate(value, options);
|
|
111
|
+
break;
|
|
112
|
+
}
|
|
113
|
+
return {
|
|
114
|
+
value: result.value,
|
|
115
|
+
error: result.error,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
return {
|
|
120
|
+
value,
|
|
121
|
+
error: error,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
const sanitizeRequest = (request, config) => {
|
|
126
|
+
config.forEach((conf) => {
|
|
127
|
+
const { value, error } = applyJoiSanitization(request[conf.type], conf);
|
|
128
|
+
if (error)
|
|
129
|
+
throw error;
|
|
130
|
+
request[conf.type] = value;
|
|
131
|
+
});
|
|
132
|
+
};
|
|
133
|
+
exports.sanitizeRequest = sanitizeRequest;
|
|
134
|
+
//# sourceMappingURL=sanitize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitize.js","sourceRoot":"","sources":["../../../src/utils/core/sanitize.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
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("./plugin"), exports);
|
|
18
|
+
__exportStar(require("./request.factory"), exports);
|
|
19
|
+
__exportStar(require("./response.factory"), exports);
|
|
20
|
+
__exportStar(require("./server"), exports);
|
|
21
|
+
__exportStar(require("./static"), exports);
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/http/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,oDAAkC;AAClC,qDAAmC;AACnC,2CAAyB;AACzB,2CAAyB"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { MiddlewareCB } from '../../types/core';
|
|
2
|
+
import { Plugin as HttpPlgin, PluginHookKeys, PluginKeys } from '../../types/http';
|
|
3
|
+
export declare class Plugin {
|
|
4
|
+
plugins: HttpPlgin[];
|
|
5
|
+
middlewares: MiddlewareCB[];
|
|
6
|
+
protected callPluginHook<K extends PluginHookKeys>(hookName: K, ...args: any): Promise<void>;
|
|
7
|
+
protected callPluginMethod<K extends PluginKeys>(hookName: PluginKeys, ...args: any): Promise<void>;
|
|
8
|
+
usePlugin(plugin: any): this;
|
|
9
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Plugin = void 0;
|
|
4
|
+
class Plugin {
|
|
5
|
+
plugins = [];
|
|
6
|
+
middlewares = [];
|
|
7
|
+
async callPluginHook(hookName, ...args) {
|
|
8
|
+
for (const plugin of this.plugins) {
|
|
9
|
+
const hook = plugin.hooks?.[hookName];
|
|
10
|
+
if (hook) {
|
|
11
|
+
try {
|
|
12
|
+
await hook(...args);
|
|
13
|
+
}
|
|
14
|
+
catch (error) {
|
|
15
|
+
console.error(`Plugin ${plugin.name} hook ${hookName} error:`, error);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
async callPluginMethod(hookName, ...args) {
|
|
21
|
+
for (const plugin of this.plugins) {
|
|
22
|
+
const hook = plugin?.[hookName];
|
|
23
|
+
if (hook) {
|
|
24
|
+
try {
|
|
25
|
+
await hook(...args);
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
console.error(`Plugin ${plugin.name} hook ${hookName} error:`, error);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
usePlugin(plugin) {
|
|
34
|
+
this.plugins.push(plugin);
|
|
35
|
+
plugin.onInit?.(this);
|
|
36
|
+
if (plugin.middleware) {
|
|
37
|
+
this.middlewares?.unshift(plugin.middleware);
|
|
38
|
+
}
|
|
39
|
+
return this;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
exports.Plugin = Plugin;
|
|
43
|
+
//# sourceMappingURL=plugin.js.map
|