vortez 4.1.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 +13 -0
- package/LICENSE +201 -0
- package/Notes.md +12 -0
- package/README.md +372 -0
- package/build/Beta/JwtManager.d.ts +114 -0
- package/build/Beta/JwtManager.js +249 -0
- package/build/Beta/JwtManager.js.map +1 -0
- package/build/Beta/Mail.d.ts +60 -0
- package/build/Beta/Mail.js +192 -0
- package/build/Beta/Mail.js.map +1 -0
- package/build/Config.d.ts +39 -0
- package/build/Config.js +33 -0
- package/build/Config.js.map +1 -0
- package/build/ConsoleUI.d.ts +57 -0
- package/build/ConsoleUI.js +110 -0
- package/build/ConsoleUI.js.map +1 -0
- package/build/Debug.d.ts +154 -0
- package/build/Debug.js +256 -0
- package/build/Debug.js.map +1 -0
- package/build/LoggerManager/Logger.d.ts +23 -0
- package/build/LoggerManager/Logger.js +23 -0
- package/build/LoggerManager/Logger.js.map +1 -0
- package/build/LoggerManager/LoggerManager.d.ts +18 -0
- package/build/LoggerManager/LoggerManager.js +30 -0
- package/build/LoggerManager/LoggerManager.js.map +1 -0
- package/build/Server/BodyParser.d.ts +125 -0
- package/build/Server/BodyParser.js +162 -0
- package/build/Server/BodyParser.js.map +1 -0
- package/build/Server/Cookie.d.ts +72 -0
- package/build/Server/Cookie.js +102 -0
- package/build/Server/Cookie.js.map +1 -0
- package/build/Server/Request.d.ts +61 -0
- package/build/Server/Request.js +79 -0
- package/build/Server/Request.js.map +1 -0
- package/build/Server/Response.d.ts +90 -0
- package/build/Server/Response.js +241 -0
- package/build/Server/Response.js.map +1 -0
- package/build/Server/Rule.d.ts +81 -0
- package/build/Server/Rule.js +146 -0
- package/build/Server/Rule.js.map +1 -0
- package/build/Server/Server.d.ts +157 -0
- package/build/Server/Server.js +330 -0
- package/build/Server/Server.js.map +1 -0
- package/build/Server/Session.d.ts +66 -0
- package/build/Server/Session.js +97 -0
- package/build/Server/Session.js.map +1 -0
- package/build/Server/WebSocket/Chunk.d.ts +36 -0
- package/build/Server/WebSocket/Chunk.js +81 -0
- package/build/Server/WebSocket/Chunk.js.map +1 -0
- package/build/Server/WebSocket/WebSocket.d.ts +70 -0
- package/build/Server/WebSocket/WebSocket.js +184 -0
- package/build/Server/WebSocket/WebSocket.js.map +1 -0
- package/build/Template.d.ts +32 -0
- package/build/Template.js +69 -0
- package/build/Template.js.map +1 -0
- package/build/Utilities/Env.d.ts +75 -0
- package/build/Utilities/Env.js +123 -0
- package/build/Utilities/Env.js.map +1 -0
- package/build/Utilities/Path.d.ts +18 -0
- package/build/Utilities/Path.js +27 -0
- package/build/Utilities/Path.js.map +1 -0
- package/build/Utilities/Utilities.d.ts +147 -0
- package/build/Utilities/Utilities.js +110 -0
- package/build/Utilities/Utilities.js.map +1 -0
- package/build/Vortez.d.ts +20 -0
- package/build/Vortez.js +22 -0
- package/build/Vortez.js.map +1 -0
- package/changes.md +89 -0
- package/examples/in-docs.js +96 -0
- package/global/Source/Logo_960.png +0 -0
- package/global/Source/Logo_SM_960.png +0 -0
- package/global/Style/Template/Error.css +30 -0
- package/global/Style/Template/Folder.css +77 -0
- package/global/Style/Template/Template.css +128 -0
- package/global/Template/Error.vhtml +29 -0
- package/global/Template/Folder.vhtml +41 -0
- package/package.json +47 -0
- package/tests/Template/template.js +18 -0
- package/tests/Template/template.txt +13 -0
- package/tests/Template/template.vhtml +23 -0
- package/tests/debug.js +28 -0
- package/tests/jwtManager/jwtManager.js +110 -0
- package/tests/test.js +129 -0
- package/tests/test.vhtml +14 -0
- package/tests/utilities.js +28 -0
- package/tests/websocket.vhtml +86 -0
package/tests/test.js
ADDED
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
//@ts-check
|
|
2
|
+
|
|
3
|
+
import Rule from "../build/Server/Rule.js";
|
|
4
|
+
import Vortez, { Debug, Utilities } from "../build/Vortez.js";
|
|
5
|
+
import "./debug.js";
|
|
6
|
+
import "./utilities.js";
|
|
7
|
+
|
|
8
|
+
/* | HABILITAR VISTA EN CONSOLA DE LOS DEBUGS DE Vortez | */
|
|
9
|
+
Debug.showAll = true;
|
|
10
|
+
/* | CREANDO UN DEBUG PARA LA SALIDA DE LOS TESTS | */
|
|
11
|
+
const $Test = Debug.getInstance('Test');
|
|
12
|
+
|
|
13
|
+
/* | CARGANDO VARIABLES DE ENTORNO DE PRUEBA | */
|
|
14
|
+
|
|
15
|
+
await Utilities.Env.load('tests/test.env');
|
|
16
|
+
|
|
17
|
+
const HOST = process.env.HOST;
|
|
18
|
+
const PORT = process.env.PORT ?
|
|
19
|
+
Number(process.env.PORT)
|
|
20
|
+
? Number(process.env.PORT)
|
|
21
|
+
: 5050 : 5050;
|
|
22
|
+
const WEBSOCKET_URL = process.env['REMOTE-WS'] ?? `ws://${HOST ?? 'localhost'}:${PORT}`;
|
|
23
|
+
|
|
24
|
+
/* | INICIANDO SERVIDOR | */
|
|
25
|
+
const server = new Vortez({ port: 3000 });
|
|
26
|
+
|
|
27
|
+
/* | PRUEBAS DE REGLAS FILE | */
|
|
28
|
+
server.addFile('/File', 'changes.md')
|
|
29
|
+
server.addFile('/favicon.ico', 'Global/Source/Logo_SM_960.png');
|
|
30
|
+
|
|
31
|
+
/* | PRUEBAS DE REGLAS FILE usando AUTH | */
|
|
32
|
+
server.addFile('/FileWA', 'changes.md',
|
|
33
|
+
(Request) => (Request.searchParams.Auth != null && Request.searchParams.Auth == 'AuthYes')
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
/* | CREANDO REGLAS CON EL CONSTRUCTOR Rule | */
|
|
37
|
+
server.addRules(
|
|
38
|
+
new Vortez.Rule('File', 'GET', '/MyFile/*', 'Test/Test.js', () => true)
|
|
39
|
+
);
|
|
40
|
+
|
|
41
|
+
/* | PRUEBAS DE REGLAS FOLDER | */
|
|
42
|
+
server.addFolder('/Folder', '.debug');
|
|
43
|
+
|
|
44
|
+
/* | PRUEBAS DE REGLAS ACTION | */
|
|
45
|
+
server.addAction('ALL', '/', (Rq, Rs) => {
|
|
46
|
+
Rs.sendTemplate('tests/test.vhtml', {
|
|
47
|
+
Tittle: '[NetFeez-Labs] · Tests',
|
|
48
|
+
Sources: {
|
|
49
|
+
File: '/File',
|
|
50
|
+
FileWithAuthFunction_NoAuth: '/FileWA',
|
|
51
|
+
FileWithAuthFunction_Auth: '/FileWA?Auth=AuthYes',
|
|
52
|
+
Folder: '/Folder',
|
|
53
|
+
RuleParams: '/RuleParams/algo1/otro2/nose3/XD',
|
|
54
|
+
WebSocket: '/WebSocket'
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
/* | PRUEBAS DE URL PARAMS | */
|
|
60
|
+
server.addAction('ALL', '/RuleParams/$?param1/$?b/$?c/*', (Rq, Rs) => {
|
|
61
|
+
Rs.sendJson({
|
|
62
|
+
Url: Rq.url,
|
|
63
|
+
RuleParams: Rq.ruleParams
|
|
64
|
+
})
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
/* | PRUEBAS DE REGLAS WEB-SOCKET | */
|
|
68
|
+
/**
|
|
69
|
+
* @typedef {import('../build/Server/WebSocket/WebSocket.js').WebSocket} WebSocket
|
|
70
|
+
*/
|
|
71
|
+
/** @type {Set<WebSocket>} */
|
|
72
|
+
const clients = new Set();
|
|
73
|
+
/** @type {Set<string>} */
|
|
74
|
+
const usernames = new Set();
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
*
|
|
78
|
+
* @param {string | Buffer} message
|
|
79
|
+
* @param {WebSocket | null | undefined} exclude
|
|
80
|
+
*/
|
|
81
|
+
function broadCast(message, exclude = null) {
|
|
82
|
+
clients.forEach(client => {
|
|
83
|
+
if (!exclude || client !== exclude) client.send(message)
|
|
84
|
+
})
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
server.addAction('ALL', 'WebSocket', (Rq, Rs) => {
|
|
88
|
+
Rs.sendTemplate('tests/websocket.vhtml', {
|
|
89
|
+
Host: `${WEBSOCKET_URL}/WebSocket`
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
server.addWebSocket('/WebSocket/$?username', (request, socket) => {
|
|
94
|
+
const username = request.ruleParams.username;
|
|
95
|
+
if (!username) {
|
|
96
|
+
socket.send('error: no username');
|
|
97
|
+
socket.end();
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
if (usernames.has(username)) {
|
|
101
|
+
socket.send('error: username already in use');
|
|
102
|
+
socket.end();
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
usernames.add(username)
|
|
106
|
+
clients.add(socket);
|
|
107
|
+
$Test.log("[WebSocket]", "new client", username);
|
|
108
|
+
|
|
109
|
+
socket.send("server: hallo");
|
|
110
|
+
broadCast('server: nuevo cliente: ' + username, socket);
|
|
111
|
+
|
|
112
|
+
socket.on('message', (data, info) => {
|
|
113
|
+
if (info.opCode !== 0x1) return;
|
|
114
|
+
const message = username + ': ' + data.toString();
|
|
115
|
+
$Test.log(['[WebSocket]', message]);
|
|
116
|
+
broadCast(message, socket);
|
|
117
|
+
});
|
|
118
|
+
socket.on('error', (Error) => {
|
|
119
|
+
$Test.log('[WebSocket-Error]: ' + Error.message);
|
|
120
|
+
});
|
|
121
|
+
socket.on('finish', () => {
|
|
122
|
+
clients.delete(socket);
|
|
123
|
+
usernames.delete(username);
|
|
124
|
+
broadCast('server: cliente desconectado: ' + username);
|
|
125
|
+
$Test.log('[WebSocket-Finish]: client disconnected')
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
server.start();
|
|
129
|
+
// new Rule('Action', 'POST', '/a/b/c/d/e/$f/*', () => {});
|
package/tests/test.vhtml
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="es-CO">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>${Tittle}</title>
|
|
7
|
+
</head>
|
|
8
|
+
<body>
|
|
9
|
+
<h1>${Tittle}</h1>
|
|
10
|
+
$(Sources, text, url) {
|
|
11
|
+
<a href="%url%">%text%</a><br>
|
|
12
|
+
}
|
|
13
|
+
</body>
|
|
14
|
+
</html>
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
//@ts-check
|
|
2
|
+
import Utilities from "../build/Utilities/Utilities.js";
|
|
3
|
+
|
|
4
|
+
try {
|
|
5
|
+
const toFlatten = {
|
|
6
|
+
a: { b: {
|
|
7
|
+
c: "a.b.c",
|
|
8
|
+
d: "a.b.c.d",
|
|
9
|
+
f: {g:{h:{i:{j:{j:{k:{l:"a.b.c.d.f.g.h.i.j.j.k.l"}}}}}}},
|
|
10
|
+
z: {g:{h:{i:{j:{j:{k:{l2:"a.b.z.d.f.g.h.i.j.j.k.l2"}}}}}}}
|
|
11
|
+
},
|
|
12
|
+
null: null,
|
|
13
|
+
undefined: undefined
|
|
14
|
+
},
|
|
15
|
+
e: { f: "e.f" },
|
|
16
|
+
arr: [1,2,3,4]
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
const flattened = Utilities.flattenObject(toFlatten, 9);
|
|
20
|
+
const unFlattened = Utilities.unFlattenObject(flattened);
|
|
21
|
+
if (!Utilities.deepEqual(toFlatten, unFlattened)) {
|
|
22
|
+
throw new Error("Flatten test fail: toFlatten != unFlattened");
|
|
23
|
+
} else {
|
|
24
|
+
console.log("Flatten test success");
|
|
25
|
+
}
|
|
26
|
+
} catch (error) {
|
|
27
|
+
console.error(error);
|
|
28
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="es-CO">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>[NetFeez-Labs · WebSocket]</title>
|
|
7
|
+
</head>
|
|
8
|
+
<body>
|
|
9
|
+
<h1>[NetFeez-Labs · WebSocket]</h1>
|
|
10
|
+
<input id="username" type="text" placeholder="Username"/>
|
|
11
|
+
<button id="Connect">Conectar</button>
|
|
12
|
+
<button id="Disconnect">Desconectar</button>
|
|
13
|
+
<br/>
|
|
14
|
+
<input id="InMessage" type="text" placeholder="Message/Command"/>
|
|
15
|
+
<button id="Send">Enviar</button>
|
|
16
|
+
<div id="Log"></div>
|
|
17
|
+
<script>
|
|
18
|
+
window.host = "${Host}";
|
|
19
|
+
const BtnConnect = document.querySelector('#Connect');
|
|
20
|
+
const BtnDisconnect = document.querySelector('#Disconnect');
|
|
21
|
+
const BtnSend = document.querySelector('#Send');
|
|
22
|
+
|
|
23
|
+
const inUsername = document.querySelector('#username');
|
|
24
|
+
const InMessage = document.querySelector('#InMessage');
|
|
25
|
+
const OutLog = document.querySelector('#Log');
|
|
26
|
+
|
|
27
|
+
let Connected = false;
|
|
28
|
+
/** @type {WebSocket} */
|
|
29
|
+
let Connection = null;
|
|
30
|
+
|
|
31
|
+
/** @param {string} Message */
|
|
32
|
+
const Log = (Message, Prefix = 'WS') => {
|
|
33
|
+
console.log(`[${Prefix}]:`, Message);
|
|
34
|
+
let Element = document.createElement('p');
|
|
35
|
+
Element.innerText = `[${Prefix}]: ` + Message;
|
|
36
|
+
if (OutLog.firstChild) {
|
|
37
|
+
OutLog.insertBefore(Element, OutLog.firstChild);
|
|
38
|
+
} else {
|
|
39
|
+
OutLog.appendChild(Element);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const Connect = () => {
|
|
44
|
+
if (Connected) {
|
|
45
|
+
Log('Ya estas conectado');
|
|
46
|
+
} else {
|
|
47
|
+
const username = inUsername.value;
|
|
48
|
+
Log('Conectando...');
|
|
49
|
+
Connection = new WebSocket(`${Host}/${username}`);
|
|
50
|
+
Connection.onerror = () => {
|
|
51
|
+
Log('fallo en la conexión', 'ER');
|
|
52
|
+
}
|
|
53
|
+
Connection.onclose = () => {
|
|
54
|
+
Connected = false;
|
|
55
|
+
Connection = null;
|
|
56
|
+
}
|
|
57
|
+
Connection.onopen = () => {
|
|
58
|
+
Connected = true;
|
|
59
|
+
Log('Conectado');
|
|
60
|
+
}
|
|
61
|
+
Connection.onmessage = (Ev) => {
|
|
62
|
+
Log(Ev.data, '<');
|
|
63
|
+
console.log(Ev.data);
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
const Disconnect = () => {
|
|
68
|
+
Connection.close();
|
|
69
|
+
}
|
|
70
|
+
const Send = () => {
|
|
71
|
+
if (Connected) {
|
|
72
|
+
let Message = InMessage.value;
|
|
73
|
+
InMessage.value = '';
|
|
74
|
+
Connection.send(Message);
|
|
75
|
+
Log(Message, '>');
|
|
76
|
+
} else {
|
|
77
|
+
Log('Debes conectarte primero');
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
BtnConnect.addEventListener('click', () => Connect());
|
|
82
|
+
BtnDisconnect.addEventListener('click', () => Disconnect());
|
|
83
|
+
BtnSend.addEventListener('click', () => Send());
|
|
84
|
+
</script>
|
|
85
|
+
</body>
|
|
86
|
+
</html>
|