vortez 5.0.0-dev.19 → 5.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/.gitignore +2 -0
- package/README.md +33 -9
- package/build/Template/Compiler.d.ts +70 -0
- package/build/Template/Compiler.js +135 -0
- package/build/Template/Compiler.js.map +1 -0
- package/build/Template/StreamCompiler.d.ts +16 -0
- package/build/Template/StreamCompiler.js +54 -0
- package/build/Template/StreamCompiler.js.map +1 -0
- package/build/Template/Template.d.ts +49 -0
- package/build/Template/Template.js +77 -0
- package/build/Template/Template.js.map +1 -0
- package/build/Vortez.d.ts +1 -1
- package/build/Vortez.js +1 -1
- package/build/Vortez.js.map +1 -1
- package/build/beta/JwtManager/JwtError.d.ts +8 -0
- package/build/beta/JwtManager/JwtError.js +10 -0
- package/build/beta/JwtManager/JwtError.js.map +1 -0
- package/build/beta/JwtManager/JwtManager.d.ts +4 -0
- package/build/beta/JwtManager/JwtManager.js +27 -7
- package/build/beta/JwtManager/JwtManager.js.map +1 -1
- package/build/server/BodyParser.d.ts +6 -0
- package/build/server/BodyParser.js +18 -3
- package/build/server/BodyParser.js.map +1 -1
- package/build/server/Request.d.ts +6 -4
- package/build/server/Request.js +15 -10
- package/build/server/Request.js.map +1 -1
- package/build/server/Response.d.ts +56 -10
- package/build/server/Response.js +204 -92
- package/build/server/Response.js.map +1 -1
- package/build/server/Server.js +29 -6
- package/build/server/Server.js.map +1 -1
- package/build/server/config/Config.d.ts +15 -13
- package/build/server/config/Config.js +8 -6
- package/build/server/config/Config.js.map +1 -1
- package/build/server/config/Loader.js +1 -1
- package/build/server/config/Loader.js.map +1 -1
- package/build/server/router/Router.d.ts +1 -1
- package/build/server/router/Router.js +4 -4
- package/build/server/router/Router.js.map +1 -1
- package/build/server/router/middleware/HttpMiddleware.js +5 -5
- package/build/server/router/middleware/HttpMiddleware.js.map +1 -1
- package/build/server/router/middleware/WsMiddleware.js +1 -1
- package/build/server/router/middleware/WsMiddleware.js.map +1 -1
- package/build/server/security/PathSecurity.d.ts +45 -0
- package/build/server/security/PathSecurity.js +108 -0
- package/build/server/security/PathSecurity.js.map +1 -0
- package/build/server/websocket/Websocket.js +4 -1
- package/build/server/websocket/Websocket.js.map +1 -1
- package/build/utilities/ConsoleUI.d.ts +2 -1
- package/build/utilities/ConsoleUI.js +2 -1
- package/build/utilities/ConsoleUI.js.map +1 -1
- package/build/utilities/DebugUI.d.ts +1 -1
- package/build/utilities/DebugUI.js +1 -1
- package/build/utilities/Encoding.d.ts +22 -0
- package/build/utilities/Encoding.js +26 -0
- package/build/utilities/Encoding.js.map +1 -0
- package/build/utilities/Env.js +7 -2
- package/build/utilities/Env.js.map +1 -1
- package/build/utilities/File.d.ts +10 -0
- package/build/utilities/File.js +19 -0
- package/build/utilities/File.js.map +1 -0
- package/build/utilities/Flatten.d.ts +18 -1
- package/build/utilities/Flatten.js +18 -1
- package/build/utilities/Flatten.js.map +1 -1
- package/build/utilities/Object.d.ts +16 -0
- package/build/utilities/Object.js +48 -0
- package/build/utilities/Object.js.map +1 -0
- package/build/utilities/Path.d.ts +31 -11
- package/build/utilities/Path.js +48 -15
- package/build/utilities/Path.js.map +1 -1
- package/build/utilities/Time.d.ts +21 -0
- package/build/utilities/Time.js +25 -0
- package/build/utilities/Time.js.map +1 -0
- package/build/utilities/Utilities.d.ts +43 -34
- package/build/utilities/Utilities.js +48 -38
- package/build/utilities/Utilities.js.map +1 -1
- package/changes.md +5 -0
- package/docs/ARCHITECTURE.md +142 -0
- package/global/style/template/error.css +29 -0
- package/global/style/template/folder.css +79 -0
- package/global/{Style/Template/Template.css → style/template/template.css} +60 -68
- package/global/template/error.vhtml +29 -0
- package/global/template/folder.vhtml +54 -0
- package/package.json +2 -2
- package/build/Template.d.ts +0 -46
- package/build/Template.js +0 -81
- package/build/Template.js.map +0 -1
- package/global/Style/Template/Error.css +0 -30
- package/global/Style/Template/Folder.css +0 -77
- package/global/Template/Error.vhtml +0 -29
- package/global/Template/Folder.vhtml +0 -41
- package/tests/Template/template.js +0 -18
- package/tests/Template/template.txt +0 -13
- package/tests/Template/template.vhtml +0 -23
- package/tests/config/config.js +0 -233
- package/tests/debug.js +0 -34
- package/tests/jwtManager/jwtManager.js +0 -342
- package/tests/router.js +0 -596
- package/tests/schema/schema.js +0 -368
- package/tests/test.env +0 -0
- package/tests/test.js +0 -131
- package/tests/test.vhtml +0 -14
- package/tests/utilities.js +0 -28
- package/tests/websocket.vhtml +0 -86
- /package/global/{Source/Logo_960.png → source/logo_960.png} +0 -0
- /package/global/{Source/Logo_SM_960.png → source/logo_SM_960.png} +0 -0
package/build/server/Response.js
CHANGED
|
@@ -5,11 +5,33 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import FS from 'fs';
|
|
7
7
|
import PATH from 'path';
|
|
8
|
+
import { Readable } from 'stream';
|
|
9
|
+
import { pipeline } from 'stream/promises';
|
|
8
10
|
import Logger from '../logger/Logger.js';
|
|
9
11
|
import Utilities from '../utilities/Utilities.js';
|
|
10
|
-
import Template from '../Template.js';
|
|
12
|
+
import Template from '../Template/Template.js';
|
|
13
|
+
import PathSecurity from './security/PathSecurity.js';
|
|
11
14
|
const logger = new Logger({ prefix: 'Response' });
|
|
12
15
|
export class Response {
|
|
16
|
+
static contentTypeMap = {
|
|
17
|
+
'html': 'text/html',
|
|
18
|
+
'js': 'text/javascript',
|
|
19
|
+
'css': 'text/css',
|
|
20
|
+
'json': 'application/json',
|
|
21
|
+
'xml': 'application/xml',
|
|
22
|
+
'txt': 'text/plain',
|
|
23
|
+
'svg': 'image/svg+xml',
|
|
24
|
+
'png': 'image/png',
|
|
25
|
+
'jpg': 'image/jpeg',
|
|
26
|
+
'jpeg': 'image/jpeg',
|
|
27
|
+
'mp3': 'audio/mpeg',
|
|
28
|
+
'wav': 'audio/x-wav',
|
|
29
|
+
'mp4': 'video/mp4',
|
|
30
|
+
};
|
|
31
|
+
static acceptRangeFormats = [
|
|
32
|
+
'svg', 'png', 'jpg', 'jpeg', 'mp3', 'wav', 'mp4'
|
|
33
|
+
];
|
|
34
|
+
static version = Response.loadVersion();
|
|
13
35
|
/** Contains the request received by the server. */
|
|
14
36
|
request;
|
|
15
37
|
/** Contains the list of server response templates. */
|
|
@@ -28,10 +50,10 @@ export class Response {
|
|
|
28
50
|
this.templates = templates;
|
|
29
51
|
this.httpResponse = httpResponse;
|
|
30
52
|
this.httpResponse.setHeader('X-Powered-By', 'MyNetFeez-Labs Vortez');
|
|
31
|
-
this.httpResponse.setHeader('X-Version',
|
|
53
|
+
this.httpResponse.setHeader('X-Version', Response.version);
|
|
32
54
|
}
|
|
33
55
|
/** Checks if the response has been sent. */
|
|
34
|
-
get
|
|
56
|
+
get isSent() { return this._isSended || this.httpResponse.writableEnded || this.httpResponse.headersSent; }
|
|
35
57
|
/**
|
|
36
58
|
* Generates headers for supported file types.
|
|
37
59
|
* More types will be supported over time.
|
|
@@ -41,28 +63,10 @@ export class Response {
|
|
|
41
63
|
extension = extension.startsWith('.') ? extension.slice(1) : extension;
|
|
42
64
|
extension = extension.toLowerCase();
|
|
43
65
|
const headers = {};
|
|
44
|
-
const
|
|
45
|
-
'html': 'text/html',
|
|
46
|
-
'js': 'text/javascript',
|
|
47
|
-
'css': 'text/css',
|
|
48
|
-
'json': 'application/json',
|
|
49
|
-
'xml': 'application/xml',
|
|
50
|
-
'txt': 'text/plain',
|
|
51
|
-
'svg': 'image/svg+xml',
|
|
52
|
-
'png': 'image/png',
|
|
53
|
-
'jpg': 'image/jpeg',
|
|
54
|
-
'jpeg': 'image/jpeg',
|
|
55
|
-
'mp3': 'audio/mpeg',
|
|
56
|
-
'wav': 'audio/x-wav',
|
|
57
|
-
'mp4': 'video/mp4',
|
|
58
|
-
};
|
|
59
|
-
const acceptRangeFormats = [
|
|
60
|
-
'svg', 'png', 'jpg', 'jpeg', 'mp3', 'wav', 'mp4'
|
|
61
|
-
];
|
|
62
|
-
const type = contentTypeMap[extension];
|
|
66
|
+
const type = Response.contentTypeMap[extension];
|
|
63
67
|
if (type)
|
|
64
|
-
headers['Content-Type'] = type;
|
|
65
|
-
if (acceptRangeFormats.includes(extension)) {
|
|
68
|
+
headers['Content-Type'] = type ?? 'application/octet-stream';
|
|
69
|
+
if (Response.acceptRangeFormats.includes(extension)) {
|
|
66
70
|
headers['Accept-Ranges'] = 'bytes';
|
|
67
71
|
}
|
|
68
72
|
return headers;
|
|
@@ -83,15 +87,43 @@ export class Response {
|
|
|
83
87
|
* @param data - The data to be sent.
|
|
84
88
|
* @param encode - The encoding used for the response.
|
|
85
89
|
*/
|
|
86
|
-
send(data, options = {}) {
|
|
87
|
-
|
|
90
|
+
async send(data, options = {}) {
|
|
91
|
+
if (data instanceof Readable)
|
|
92
|
+
return await this.sendReadable(data, options);
|
|
88
93
|
const status = options.status ?? 200;
|
|
89
94
|
const encode = options.encode || 'utf-8';
|
|
90
95
|
const headers = options.headers || this.generateHeaders('txt');
|
|
91
96
|
this.sendHeaders(status, headers);
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
97
|
+
this._isSended = true;
|
|
98
|
+
try {
|
|
99
|
+
await this.httpResponse.end(data, encode);
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
logger.error(`&C1Error &C6sending data &C1${this.request.session.id}`, error);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Sends a readable stream as a response.
|
|
107
|
+
* @param data - The readable stream to be sent.
|
|
108
|
+
* @param options - The response options.
|
|
109
|
+
* @throws If an error occurs while sending the stream.
|
|
110
|
+
* @returns A promise that resolves when the stream has been sent.
|
|
111
|
+
* @remarks This method is used for sending large data, such as files or templates, without loading them entirely into memory.
|
|
112
|
+
* It handles backpressure and ensures efficient streaming of data to the client.
|
|
113
|
+
*/
|
|
114
|
+
async sendReadable(data, options) {
|
|
115
|
+
const status = options.status ?? 200;
|
|
116
|
+
const headers = options.headers || this.generateHeaders('txt');
|
|
117
|
+
this.sendHeaders(status, headers);
|
|
118
|
+
this._isSended = true;
|
|
119
|
+
try {
|
|
120
|
+
await pipeline(data, this.httpResponse);
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
if (this.isClientAbortError(error))
|
|
124
|
+
return;
|
|
125
|
+
logger.error(`&C1error &C6sending stream &C1${this.request.session.id}`, error);
|
|
126
|
+
}
|
|
95
127
|
}
|
|
96
128
|
/**
|
|
97
129
|
* Sends a file as a response.
|
|
@@ -104,77 +136,101 @@ export class Response {
|
|
|
104
136
|
try {
|
|
105
137
|
const details = await FS.promises.stat(path);
|
|
106
138
|
if (!details.isFile())
|
|
107
|
-
return this.sendError(500, '[Response Error] - Provided path is not a file.');
|
|
139
|
+
return await this.sendError(500, '[Response Error] - Provided path is not a file.');
|
|
108
140
|
if (!this.request.headers.range) {
|
|
109
141
|
const stream = FS.createReadStream(path);
|
|
110
142
|
const headers = this.generateHeaders(PATH.extname(path));
|
|
111
143
|
headers['content-length'] = details.size.toString();
|
|
112
|
-
this.send(stream, { status: 200, headers });
|
|
144
|
+
await this.send(stream, { status: 200, headers });
|
|
113
145
|
}
|
|
114
146
|
else {
|
|
115
|
-
const
|
|
147
|
+
const rangeHeader = this.request.headers.range;
|
|
148
|
+
const info = /^bytes=(\d*)-(\d*)$/i.exec(rangeHeader);
|
|
116
149
|
if (!info)
|
|
117
|
-
return this.sendError(416, 'Requested range exceeds file size');
|
|
118
|
-
const [startString, endString] = info
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
150
|
+
return await this.sendError(416, 'Requested range exceeds file size');
|
|
151
|
+
const [, startString, endString] = info;
|
|
152
|
+
let start;
|
|
153
|
+
let end;
|
|
154
|
+
if (startString && endString) {
|
|
155
|
+
start = Number(startString);
|
|
156
|
+
end = Number(endString);
|
|
157
|
+
}
|
|
158
|
+
else if (startString) {
|
|
159
|
+
start = Number(startString);
|
|
160
|
+
const maxSize = start + 1024 * 1000;
|
|
161
|
+
end = maxSize >= details.size ? details.size - 1 : maxSize;
|
|
162
|
+
}
|
|
163
|
+
else if (endString) {
|
|
164
|
+
const suffixSize = Number(endString);
|
|
165
|
+
if (!Number.isInteger(suffixSize) || suffixSize <= 0) {
|
|
166
|
+
return await this.sendError(416, 'Requested range exceeds file size');
|
|
167
|
+
}
|
|
168
|
+
start = Math.max(details.size - suffixSize, 0);
|
|
169
|
+
end = details.size - 1;
|
|
170
|
+
}
|
|
171
|
+
else
|
|
172
|
+
return await this.sendError(416, 'Requested range exceeds file size');
|
|
173
|
+
if (!Number.isInteger(start) ||
|
|
174
|
+
!Number.isInteger(end) ||
|
|
175
|
+
start < 0 ||
|
|
176
|
+
end < start ||
|
|
177
|
+
start >= details.size ||
|
|
178
|
+
end >= details.size)
|
|
179
|
+
return await this.sendError(416, 'Requested range exceeds file size');
|
|
130
180
|
const size = end - start + 1;
|
|
131
181
|
const stream = FS.createReadStream(path, { start, end });
|
|
132
182
|
const headers = this.generateHeaders(PATH.extname(path));
|
|
133
183
|
headers['content-length'] = size.toString();
|
|
134
184
|
headers['content-range'] = `bytes ${start}-${end}/${details.size}`;
|
|
135
|
-
this.send(stream, { status: 206, headers });
|
|
185
|
+
await this.send(stream, { status: 206, headers });
|
|
136
186
|
}
|
|
137
187
|
}
|
|
138
188
|
catch (error) {
|
|
139
|
-
this.
|
|
140
|
-
logger.error(`error sending file ${this.request.session.id}`, error);
|
|
189
|
+
await this.catchError(error, 'sending file');
|
|
141
190
|
}
|
|
142
191
|
}
|
|
143
192
|
/**
|
|
144
193
|
* Sends the listing of a folder as a response.
|
|
145
|
-
* @param
|
|
146
|
-
* @param
|
|
194
|
+
* @param base - The routing rule base path.
|
|
195
|
+
* @param plus - The relative path received in the request.
|
|
147
196
|
* @throws If the folder does not exist or is invalid.
|
|
148
197
|
*/
|
|
149
|
-
async sendFolder(
|
|
150
|
-
basePath =
|
|
151
|
-
|
|
152
|
-
|
|
198
|
+
async sendFolder(base, plus = '') {
|
|
199
|
+
const basePath = Utilities.Path.resolve(base || Utilities.Path.rootDir);
|
|
200
|
+
const path = await PathSecurity.resolveInsideBase(basePath, plus);
|
|
201
|
+
if (!path) {
|
|
202
|
+
logger.warn(`&C2[Vortez Security] &C3Intento de Path Traversal bloqueado:`);
|
|
203
|
+
logger.warn(` &C3- IP: &C6${this.request.ip}`);
|
|
204
|
+
logger.warn(` &C3- Session ID: &C6${this.request.session.id}`);
|
|
205
|
+
logger.warn(` &C3- URL: &C6${this.request.url}`);
|
|
206
|
+
logger.warn(` &C3- Base: &C6${basePath}`);
|
|
207
|
+
logger.warn(` &C3- Intento: &C6${plus}`);
|
|
208
|
+
return void await this.sendError(403, 'Forbidden: Outside of sandbox');
|
|
209
|
+
}
|
|
153
210
|
try {
|
|
154
|
-
if (!await
|
|
155
|
-
return void this.sendError(404, 'The requested URL was not
|
|
211
|
+
if (!await Utilities.File.exists(path))
|
|
212
|
+
return void await this.sendError(404, 'The requested URL was not found');
|
|
156
213
|
const details = await FS.promises.stat(path);
|
|
157
214
|
if (details.isFile())
|
|
158
|
-
return this.sendFile(path);
|
|
215
|
+
return await this.sendFile(path);
|
|
159
216
|
if (!details.isDirectory())
|
|
160
|
-
return this.sendError(404, 'The requested URL was not
|
|
217
|
+
return await this.sendError(404, 'The requested URL was not found');
|
|
161
218
|
const folder = await FS.promises.readdir(path);
|
|
162
219
|
if (this.templates.folder) {
|
|
163
|
-
this.sendTemplate(this.templates.folder, {
|
|
220
|
+
await this.sendTemplate(this.templates.folder, {
|
|
164
221
|
Url: this.request.url,
|
|
165
222
|
folder
|
|
166
223
|
});
|
|
167
224
|
}
|
|
168
225
|
else {
|
|
169
|
-
this.sendTemplate(Utilities.Path.
|
|
226
|
+
await this.sendTemplate(Utilities.Path.module('global/template/folder.vhtml'), {
|
|
170
227
|
Url: this.request.url,
|
|
171
228
|
folder
|
|
172
229
|
});
|
|
173
230
|
}
|
|
174
231
|
}
|
|
175
232
|
catch (error) {
|
|
176
|
-
this.
|
|
177
|
-
logger.error(`error sending folder ${this.request.session.id}`, error);
|
|
233
|
+
await this.catchError(error, 'sending folder');
|
|
178
234
|
}
|
|
179
235
|
}
|
|
180
236
|
/**
|
|
@@ -187,14 +243,13 @@ export class Response {
|
|
|
187
243
|
async sendTemplate(path, data, options = {}) {
|
|
188
244
|
path = Utilities.Path.normalize(path);
|
|
189
245
|
try {
|
|
190
|
-
const template = await Template.
|
|
246
|
+
const template = await Template.stream(path, data);
|
|
191
247
|
const status = options.status ?? 200;
|
|
192
248
|
const headers = options.headers || this.generateHeaders('html');
|
|
193
|
-
this.send(template, { status, headers });
|
|
249
|
+
await this.send(template, { status, headers, encode: options.encode });
|
|
194
250
|
}
|
|
195
251
|
catch (error) {
|
|
196
|
-
this.
|
|
197
|
-
logger.error(`error sending template ${this.request.session.id}`, error);
|
|
252
|
+
await this.catchError(error, 'sending template');
|
|
198
253
|
}
|
|
199
254
|
}
|
|
200
255
|
/**
|
|
@@ -202,16 +257,15 @@ export class Response {
|
|
|
202
257
|
* @param data - The data to send.
|
|
203
258
|
* @param options - The response options.
|
|
204
259
|
*/
|
|
205
|
-
sendJson(data, options = {}) {
|
|
260
|
+
async sendJson(data, options = {}) {
|
|
206
261
|
try {
|
|
207
262
|
const json = JSON.stringify(data);
|
|
208
263
|
const status = options.status ?? 200;
|
|
209
264
|
const headers = options.headers || this.generateHeaders('json');
|
|
210
|
-
this.send(json, { status, headers });
|
|
265
|
+
await this.send(json, { status, headers });
|
|
211
266
|
}
|
|
212
267
|
catch (error) {
|
|
213
|
-
this.
|
|
214
|
-
logger.error(`error sending json ${this.request.session.id}`, error);
|
|
268
|
+
await this.catchError(error, 'sending JSON');
|
|
215
269
|
}
|
|
216
270
|
}
|
|
217
271
|
/**
|
|
@@ -221,36 +275,94 @@ export class Response {
|
|
|
221
275
|
*/
|
|
222
276
|
async sendError(status, message) {
|
|
223
277
|
try {
|
|
224
|
-
if (this.templates.error)
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
});
|
|
228
|
-
const headers = this.generateHeaders('html');
|
|
229
|
-
this.send(template, { status: status, headers });
|
|
230
|
-
}
|
|
231
|
-
else {
|
|
232
|
-
const template = await Template.load(Utilities.Path.relative('./global/Template/Error.vhtml'), {
|
|
233
|
-
status, message
|
|
234
|
-
});
|
|
235
|
-
const headers = this.generateHeaders('html');
|
|
236
|
-
this.send(template, { status: status, headers });
|
|
237
|
-
}
|
|
278
|
+
if (this.templates.error)
|
|
279
|
+
return await this.sendTemplate(this.templates.error, { status, message }, { status });
|
|
280
|
+
else
|
|
281
|
+
await this.sendTemplate(Utilities.Path.module('global/template/error.vhtml'), { status, message }, { status });
|
|
238
282
|
}
|
|
239
283
|
catch (error) {
|
|
240
|
-
console.error(error);
|
|
241
|
-
const headers = this.generateHeaders('txt');
|
|
242
|
-
this.send(`Error: ${status} -> ${message}`, { status: status, headers });
|
|
243
284
|
logger.error(`error sending error: ${this.request.session.id}`, error);
|
|
285
|
+
const headers = this.generateHeaders('txt');
|
|
286
|
+
await this.send(`Error: ${status} -> ${message}`, { status: status, headers });
|
|
244
287
|
}
|
|
245
288
|
}
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
289
|
+
/**
|
|
290
|
+
* Handles errors that occur during file sending operations.
|
|
291
|
+
* @param error - The error that occurred.
|
|
292
|
+
* @param doing - A description of the operation being performed when the error occurred (e.g., "sending file", "sending folder").
|
|
293
|
+
* @returns A promise that resolves when the error response has been sent.
|
|
294
|
+
* @remarks This method logs the error and sends an appropriate error response to the client based on the type of error encountered.
|
|
295
|
+
* It uses the `getErrorStatus` and `getErrorMessage` methods to determine the correct HTTP status code and error message to send in the response.
|
|
296
|
+
*/
|
|
297
|
+
async catchError(error, doing) {
|
|
298
|
+
if (this.isClientAbortError(error))
|
|
299
|
+
return;
|
|
300
|
+
logger.error(`&C1Error &C6${doing} &C1${this.request.session.id}`, error);
|
|
301
|
+
if (this.isSent)
|
|
302
|
+
return;
|
|
303
|
+
const status = Response.getErrorStatus(error);
|
|
304
|
+
const message = Response.getErrorMessage(status);
|
|
305
|
+
await this.sendError(status, message);
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Determines the appropriate HTTP status code based on a filesystem error.
|
|
309
|
+
* @param error - The error object to evaluate.
|
|
310
|
+
* @returns The corresponding HTTP status code for the error.
|
|
311
|
+
* @remarks This method checks for common filesystem error codes such as 'ENOENT' (file not found), 'ENOTDIR' (not a directory), 'EACCES' (permission denied), and 'EPERM' (operation not permitted).
|
|
312
|
+
* It returns 404 for not found errors, 403 for permission errors, and defaults to 500 for other types of errors.
|
|
313
|
+
*/
|
|
314
|
+
static getErrorStatus(error) {
|
|
315
|
+
if (!(error instanceof Error))
|
|
316
|
+
return 500;
|
|
317
|
+
if (!('code' in error) || typeof error.code !== 'string')
|
|
318
|
+
return 500;
|
|
319
|
+
if (error.code === 'ENOENT' || error.code === 'ENOTDIR')
|
|
320
|
+
return 404;
|
|
321
|
+
if (error.code === 'EACCES' || error.code === 'EPERM')
|
|
322
|
+
return 403;
|
|
323
|
+
return 500;
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* Returns a user-friendly error message based on the HTTP status code.
|
|
327
|
+
* @param status - The HTTP status code for which to get the error message.
|
|
328
|
+
* @returns A string containing the error message corresponding to the provided status code.
|
|
329
|
+
* @remarks This method provides specific messages for common error codes such as 403 (Forbidden) and 404 (Not Found), while returning a generic message for other unexpected errors.
|
|
330
|
+
*/
|
|
331
|
+
static getErrorMessage(status) {
|
|
332
|
+
switch (status) {
|
|
333
|
+
case 403: return 'Access denied to requested resource';
|
|
334
|
+
case 404: return 'The requested URL was not found';
|
|
335
|
+
default: return 'An unexpected error occurred';
|
|
250
336
|
}
|
|
251
|
-
|
|
337
|
+
}
|
|
338
|
+
isClientAbortError(error) {
|
|
339
|
+
if (!(error instanceof Error))
|
|
252
340
|
return false;
|
|
341
|
+
if ('code' in error && typeof error.code === 'string') {
|
|
342
|
+
return error.code === 'ERR_STREAM_PREMATURE_CLOSE' || error.code === 'ECONNRESET' || error.code === 'EPIPE' || error.code === 'ABORT_ERR';
|
|
343
|
+
}
|
|
344
|
+
return error.name === 'AbortError';
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* Loads the server version from the environment variable or `package.json` file.
|
|
348
|
+
* @returns The server version as a string.
|
|
349
|
+
* @remarks This method first checks for the `npm_package_version` environment variable, which is automatically set by npm when running scripts.
|
|
350
|
+
* If it's not available, it attempts to read the `package.json` file to extract the version.
|
|
351
|
+
* If both methods fail, it returns 'unknown'.
|
|
352
|
+
*/
|
|
353
|
+
static loadVersion() {
|
|
354
|
+
const envVersion = process.env.npm_package_version;
|
|
355
|
+
if (envVersion)
|
|
356
|
+
return envVersion;
|
|
357
|
+
try {
|
|
358
|
+
const packagePath = Utilities.Path.module('package.json');
|
|
359
|
+
const raw = FS.readFileSync(packagePath, 'utf8');
|
|
360
|
+
const data = JSON.parse(raw);
|
|
361
|
+
if (typeof data.version === 'string' && data.version.length > 0)
|
|
362
|
+
return data.version;
|
|
253
363
|
}
|
|
364
|
+
catch { }
|
|
365
|
+
return 'unknown';
|
|
254
366
|
}
|
|
255
367
|
}
|
|
256
368
|
export default Response;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Response.js","sourceRoot":"","sources":["../../src/server/Response.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Response.js","sourceRoot":"","sources":["../../src/server/Response.ts"],"names":[],"mappings":"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"}
|
package/build/server/Server.js
CHANGED
|
@@ -48,7 +48,7 @@ export class Server {
|
|
|
48
48
|
this.HttpsServer = null;
|
|
49
49
|
this.protocol = null;
|
|
50
50
|
this.logger = _LoggerManager.getInstance();
|
|
51
|
-
this.router.addFolder('/
|
|
51
|
+
this.router.addFolder('/vortez:global', Utilities.Path.module('global'));
|
|
52
52
|
}
|
|
53
53
|
/**
|
|
54
54
|
* Starts the server.
|
|
@@ -81,7 +81,7 @@ export class Server {
|
|
|
81
81
|
catch (error) {
|
|
82
82
|
logger.error(`&C(255,180,220)│ &C1✖ Error starting server: &R&C6${error instanceof Error ? error.message : error}`);
|
|
83
83
|
logger.info('&C(255,180,220)╰─────────────────────────────────────────────');
|
|
84
|
-
this.stop();
|
|
84
|
+
await this.stop();
|
|
85
85
|
}
|
|
86
86
|
}
|
|
87
87
|
/**
|
|
@@ -91,8 +91,11 @@ export class Server {
|
|
|
91
91
|
try {
|
|
92
92
|
logger.info('&C(255,180,220)╭─────────────────────────────');
|
|
93
93
|
logger.info('&C(255,180,220)│ &C1Stopping server...');
|
|
94
|
-
if (!this.HttpServer && !this.HttpsServer)
|
|
95
|
-
|
|
94
|
+
if (!this.HttpServer && !this.HttpsServer) {
|
|
95
|
+
logger.info('&C(255,180,220)│ &C3No active servers to stop');
|
|
96
|
+
logger.info('&C(255,180,220)╰─────────────────────────────');
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
96
99
|
if (this.HttpServer) {
|
|
97
100
|
await this.stopHTTP();
|
|
98
101
|
this.HttpServer = null;
|
|
@@ -150,7 +153,17 @@ export class Server {
|
|
|
150
153
|
const http = HTTP.createServer();
|
|
151
154
|
http.on('request', this.router.requestManager.bind(this.router));
|
|
152
155
|
http.on('upgrade', this.router.upgradeManager.bind(this.router));
|
|
153
|
-
return new Promise((resolve
|
|
156
|
+
return new Promise((resolve, reject) => {
|
|
157
|
+
const errorHandler = (error) => {
|
|
158
|
+
http.off('error', errorHandler);
|
|
159
|
+
reject(error);
|
|
160
|
+
};
|
|
161
|
+
http.once('error', errorHandler);
|
|
162
|
+
http.listen(port, host, () => {
|
|
163
|
+
http.off('error', errorHandler);
|
|
164
|
+
resolve(http);
|
|
165
|
+
});
|
|
166
|
+
});
|
|
154
167
|
}
|
|
155
168
|
/**
|
|
156
169
|
* Initializes the HTTPS server.
|
|
@@ -164,7 +177,17 @@ export class Server {
|
|
|
164
177
|
const https = HTTPS.createServer(cert);
|
|
165
178
|
https.on('request', this.router.requestManager.bind(this.router));
|
|
166
179
|
https.on('upgrade', this.router.upgradeManager.bind(this.router));
|
|
167
|
-
return new Promise((resolve
|
|
180
|
+
return new Promise((resolve, reject) => {
|
|
181
|
+
const errorHandler = (error) => {
|
|
182
|
+
https.off('error', errorHandler);
|
|
183
|
+
reject(error);
|
|
184
|
+
};
|
|
185
|
+
https.once('error', errorHandler);
|
|
186
|
+
https.listen(port, host, () => {
|
|
187
|
+
https.off('error', errorHandler);
|
|
188
|
+
resolve(https);
|
|
189
|
+
});
|
|
190
|
+
});
|
|
168
191
|
}
|
|
169
192
|
/**
|
|
170
193
|
* Defines default `.vhtml` templates for the server.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Server.js","sourceRoot":"","sources":["../../src/server/Server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,SAAS,MAAM,2BAA2B,CAAC;AAClD,OAAO,cAAc,MAAM,oBAAoB,CAAC;AAChD,OAAO,YAAY,MAAM,kBAAkB,CAAC;AAC5C,OAAO,OAAO,MAAM,oBAAoB,CAAC;AACzC,OAAO,QAAQ,MAAM,cAAc,CAAC;AACpC,OAAO,SAAS,MAAM,eAAe,CAAC;AACtC,OAAO,QAAQ,MAAM,cAAc,CAAC;AACpC,OAAO,OAAO,MAAM,aAAa,CAAC;AAClC,OAAO,UAAU,MAAM,0BAA0B,CAAC;AAClD,OAAO,OAAO,MAAM,oBAAoB,CAAC;AACzC,OAAO,YAAY,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,SAAS,IAAI,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,MAAM,GAAG,cAAc,CAAC,WAAW,EAAE,CAAC;AAE5C,MAAM,OAAO,MAAM;IACV,QAAQ,CAAyB;IACjC,UAAU,CAAqB;IAC/B,WAAW,CAAqB;IACjC,MAAM,CAAgB;IACtB,MAAM,CAAgB;IACtB,MAAM,CAAuB;IACpC;;;;;OAKG;IACH,YAAmB,SAAkD,EAAE;QACtE,IAAI,CAAC,MAAM,GAAG,MAAM,YAAY,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACnF,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC7C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,cAAc,CAAC,WAAW,EAAE,CAAC;QAC3C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"Server.js","sourceRoot":"","sources":["../../src/server/Server.ts"],"names":[],"mappings":"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"}
|