jerkjs 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/LICENSE +200 -0
- package/README.md +171 -0
- package/doc/EXTENSION_MANUAL.md +958 -0
- package/doc/FIREWALL_MANUAL.md +419 -0
- package/doc/HOOKS_REFERENCE_IMPROVED.md +599 -0
- package/doc/MANUAL_API_SDK.md +539 -0
- package/doc/MANUAL_MVC.md +397 -0
- package/doc/MARIADB_TOKENS_IMPLEMENTATION.md +113 -0
- package/doc/MIDDLEWARE_MANUAL.md +521 -0
- package/doc/OAUTH2_GOOGLE_MANUAL.md +408 -0
- package/doc/frontend-and-sessions.md +356 -0
- package/examples/advanced/controllers/productController.js +64 -0
- package/examples/advanced/controllers/userController.js +85 -0
- package/examples/advanced/routes.json +51 -0
- package/examples/advanced_example.js +93 -0
- package/examples/basic/controllers/userController.js +85 -0
- package/examples/basic_example.js +72 -0
- package/examples/frontend/README.md +71 -0
- package/examples/frontend/app.js +71 -0
- package/examples/frontend/controllers/apiController.js +39 -0
- package/examples/frontend/controllers/authController.js +220 -0
- package/examples/frontend/controllers/formController.js +47 -0
- package/examples/frontend/controllers/messageController.js +96 -0
- package/examples/frontend/controllers/pageController.js +178 -0
- package/examples/frontend/controllers/staticController.js +167 -0
- package/examples/frontend/routes.json +90 -0
- package/examples/mvc_example/app.js +138 -0
- package/examples/mvc_example/views/home/index.html +26 -0
- package/examples/mvc_example/views/home/simple.html +3 -0
- package/examples/mvc_example/views/layout.html +23 -0
- package/examples/mvc_example/views/test.html +3 -0
- package/examples/mvc_example/views/user/invalid.html +6 -0
- package/examples/mvc_example/views/user/list.html +36 -0
- package/examples/mvc_example/views/user/notfound.html +6 -0
- package/examples/mvc_example/views/user/profile.html +11 -0
- package/examples/mvc_routes_example/app.js +34 -0
- package/examples/mvc_routes_example/controllers/mainController.js +27 -0
- package/examples/mvc_routes_example/controllers/productController.js +47 -0
- package/examples/mvc_routes_example/controllers/userController.js +76 -0
- package/examples/mvc_routes_example/routes.json +30 -0
- package/examples/mvc_routes_example/views/layout.html +31 -0
- package/examples/mvc_routes_example/views/main/index.html +11 -0
- package/examples/mvc_routes_example/views/product/catalog.html +24 -0
- package/examples/mvc_routes_example/views/user/invalid.html +6 -0
- package/examples/mvc_routes_example/views/user/list.html +40 -0
- package/examples/mvc_routes_example/views/user/notfound.html +6 -0
- package/examples/mvc_routes_example/views/user/profile.html +18 -0
- package/examples/public/README.md +92 -0
- package/examples/public/app.js +72 -0
- package/examples/public/controllers/healthController.js +20 -0
- package/examples/public/controllers/mainController.js +22 -0
- package/examples/public/controllers/userController.js +139 -0
- package/examples/public/routes.json +51 -0
- package/examples/v2/README.md +72 -0
- package/examples/v2/app.js +74 -0
- package/examples/v2/app_fixed.js +74 -0
- package/examples/v2/controllers/authController.js +64 -0
- package/examples/v2/controllers/mainController.js +24 -0
- package/examples/v2/controllers/protectedController.js +12 -0
- package/examples/v2/controllers/userController.js +16 -0
- package/examples/v2/package.json +27 -0
- package/examples/v2/routes.json +30 -0
- package/examples/v2/test_api.sh +47 -0
- package/examples/v2/tokens_example.sqlite +0 -0
- package/examples/v2.1_firewall_demo/README.md +113 -0
- package/examples/v2.1_firewall_demo/app.js +182 -0
- package/examples/v2.1_firewall_demo/package.json +27 -0
- package/examples/v2.1_hooks_demo/README.md +85 -0
- package/examples/v2.1_hooks_demo/app.js +101 -0
- package/examples/v2.1_hooks_demo/controllers/hooksController.js +29 -0
- package/examples/v2.1_hooks_demo/controllers/mainController.js +18 -0
- package/examples/v2.1_hooks_demo/package.json +27 -0
- package/examples/v2.1_hooks_demo/routes.json +16 -0
- package/examples/v2.1_openapi_demo/README.md +82 -0
- package/examples/v2.1_openapi_demo/app.js +296 -0
- package/examples/v2.1_openapi_demo/package.json +26 -0
- package/examples/v2_cors/README.md +82 -0
- package/examples/v2_cors/app.js +108 -0
- package/examples/v2_cors/package.json +23 -0
- package/examples/v2_json_auth/README.md +83 -0
- package/examples/v2_json_auth/app.js +72 -0
- package/examples/v2_json_auth/controllers/authController.js +67 -0
- package/examples/v2_json_auth/controllers/mainController.js +16 -0
- package/examples/v2_json_auth/controllers/protectedController.js +12 -0
- package/examples/v2_json_auth/controllers/tokenController.js +28 -0
- package/examples/v2_json_auth/controllers/userController.js +15 -0
- package/examples/v2_json_auth/package.json +26 -0
- package/examples/v2_json_auth/routes.json +37 -0
- package/examples/v2_json_auth/tokens.json +20 -0
- package/examples/v2_mariadb_auth/README.md +94 -0
- package/examples/v2_mariadb_auth/app.js +81 -0
- package/examples/v2_mariadb_auth/controllers/authController.js +95 -0
- package/examples/v2_mariadb_auth/controllers/mainController.js +31 -0
- package/examples/v2_mariadb_auth/controllers/protectedController.js +12 -0
- package/examples/v2_mariadb_auth/controllers/userController.js +17 -0
- package/examples/v2_mariadb_auth/package.json +27 -0
- package/examples/v2_mariadb_auth/routes.json +37 -0
- package/examples/v2_no_auth/README.md +75 -0
- package/examples/v2_no_auth/app.js +72 -0
- package/examples/v2_no_auth/controllers/healthController.js +14 -0
- package/examples/v2_no_auth/controllers/mainController.js +19 -0
- package/examples/v2_no_auth/controllers/productController.js +31 -0
- package/examples/v2_no_auth/controllers/publicController.js +16 -0
- package/examples/v2_no_auth/package.json +22 -0
- package/examples/v2_no_auth/routes.json +37 -0
- package/examples/v2_oauth/README.md +70 -0
- package/examples/v2_oauth/app.js +90 -0
- package/examples/v2_oauth/controllers/mainController.js +45 -0
- package/examples/v2_oauth/controllers/oauthController.js +247 -0
- package/examples/v2_oauth/controllers/protectedController.js +13 -0
- package/examples/v2_oauth/controllers/userController.js +17 -0
- package/examples/v2_oauth/package.json +26 -0
- package/examples/v2_oauth/routes.json +44 -0
- package/examples/v2_openapi/README.md +77 -0
- package/examples/v2_openapi/app.js +222 -0
- package/examples/v2_openapi/controllers/authController.js +52 -0
- package/examples/v2_openapi/controllers/mainController.js +26 -0
- package/examples/v2_openapi/controllers/productController.js +17 -0
- package/examples/v2_openapi/controllers/userController.js +27 -0
- package/examples/v2_openapi/package.json +26 -0
- package/examples/v2_openapi/routes.json +37 -0
- package/generate_token.js +10 -0
- package/index.js +85 -0
- package/jerk.jpg +0 -0
- package/lib/core/handler.js +86 -0
- package/lib/core/hooks.js +224 -0
- package/lib/core/router.js +204 -0
- package/lib/core/securityEnhancedServer.js +752 -0
- package/lib/core/server.js +369 -0
- package/lib/loader/controllerLoader.js +175 -0
- package/lib/loader/routeLoader.js +341 -0
- package/lib/middleware/auditLogger.js +208 -0
- package/lib/middleware/authenticator.js +565 -0
- package/lib/middleware/compressor.js +218 -0
- package/lib/middleware/cors.js +135 -0
- package/lib/middleware/firewall.js +443 -0
- package/lib/middleware/rateLimiter.js +210 -0
- package/lib/middleware/session.js +301 -0
- package/lib/middleware/validator.js +193 -0
- package/lib/mvc/controllerBase.js +207 -0
- package/lib/mvc/viewEngine.js +752 -0
- package/lib/utils/configParser.js +223 -0
- package/lib/utils/logger.js +145 -0
- package/lib/utils/mariadbTokenAdapter.js +226 -0
- package/lib/utils/openapiGenerator.js +140 -0
- package/lib/utils/sqliteTokenAdapter.js +224 -0
- package/lib/utils/tokenManager.js +254 -0
- package/package.json +47 -0
- package/v2examplle/v2_json_auth/README.md +83 -0
- package/v2examplle/v2_json_auth/app.js +72 -0
- package/v2examplle/v2_json_auth/controllers/authController.js +67 -0
- package/v2examplle/v2_json_auth/controllers/mainController.js +16 -0
- package/v2examplle/v2_json_auth/controllers/protectedController.js +12 -0
- package/v2examplle/v2_json_auth/controllers/tokenController.js +28 -0
- package/v2examplle/v2_json_auth/controllers/userController.js +15 -0
- package/v2examplle/v2_json_auth/package.json +26 -0
- package/v2examplle/v2_json_auth/routes.json +37 -0
- package/v2examplle/v2_json_auth/tokens.json +20 -0
- package/v2examplle/v2_mariadb_auth/README.md +94 -0
- package/v2examplle/v2_mariadb_auth/app.js +81 -0
- package/v2examplle/v2_mariadb_auth/controllers/authController.js +95 -0
- package/v2examplle/v2_mariadb_auth/controllers/mainController.js +31 -0
- package/v2examplle/v2_mariadb_auth/controllers/protectedController.js +12 -0
- package/v2examplle/v2_mariadb_auth/controllers/userController.js +17 -0
- package/v2examplle/v2_mariadb_auth/package.json +27 -0
- package/v2examplle/v2_mariadb_auth/routes.json +37 -0
- package/v2examplle/v2_sqlite_auth/README.md +72 -0
- package/v2examplle/v2_sqlite_auth/app.js +74 -0
- package/v2examplle/v2_sqlite_auth/app_fixed.js +74 -0
- package/v2examplle/v2_sqlite_auth/controllers/authController.js +64 -0
- package/v2examplle/v2_sqlite_auth/controllers/mainController.js +24 -0
- package/v2examplle/v2_sqlite_auth/controllers/protectedController.js +12 -0
- package/v2examplle/v2_sqlite_auth/controllers/userController.js +16 -0
- package/v2examplle/v2_sqlite_auth/package.json +27 -0
- package/v2examplle/v2_sqlite_auth/routes.json +30 -0
- package/v2examplle/v2_sqlite_auth/test_api.sh +47 -0
- package/v2examplle/v2_sqlite_auth/tokens_example.sqlite +0 -0
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sistema de enrutamiento avanzado para el framework API SDK
|
|
3
|
+
* Implementación extendida del componente core/router.js
|
|
4
|
+
* Incluye soporte para rutas anidadas y otras mejoras
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
class Router {
|
|
8
|
+
/**
|
|
9
|
+
* Constructor del router
|
|
10
|
+
* @param {Object} options - Opciones de configuración
|
|
11
|
+
* @param {string} options.prefix - Prefijo común para todas las rutas del router
|
|
12
|
+
*/
|
|
13
|
+
constructor(options = {}) {
|
|
14
|
+
this.routes = [];
|
|
15
|
+
this.nestedRouters = [];
|
|
16
|
+
this.prefix = options.prefix || '';
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Método para agregar una ruta GET
|
|
21
|
+
* @param {string} path - Ruta del endpoint
|
|
22
|
+
* @param {Function} handler - Función manejadora de la ruta
|
|
23
|
+
*/
|
|
24
|
+
get(path, handler) {
|
|
25
|
+
this.addRoute('GET', path, handler);
|
|
26
|
+
return this;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Método para agregar una ruta POST
|
|
31
|
+
* @param {string} path - Ruta del endpoint
|
|
32
|
+
* @param {Function} handler - Función manejadora de la ruta
|
|
33
|
+
*/
|
|
34
|
+
post(path, handler) {
|
|
35
|
+
this.addRoute('POST', path, handler);
|
|
36
|
+
return this;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Método para agregar una ruta PUT
|
|
41
|
+
* @param {string} path - Ruta del endpoint
|
|
42
|
+
* @param {Function} handler - Función manejadora de la ruta
|
|
43
|
+
*/
|
|
44
|
+
put(path, handler) {
|
|
45
|
+
this.addRoute('PUT', path, handler);
|
|
46
|
+
return this;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Método para agregar una ruta DELETE
|
|
51
|
+
* @param {string} path - Ruta del endpoint
|
|
52
|
+
* @param {Function} handler - Función manejadora de la ruta
|
|
53
|
+
*/
|
|
54
|
+
delete(path, handler) {
|
|
55
|
+
this.addRoute('DELETE', path, handler);
|
|
56
|
+
return this;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Método para agregar una ruta PATCH
|
|
61
|
+
* @param {string} path - Ruta del endpoint
|
|
62
|
+
* @param {Function} handler - Función manejadora de la ruta
|
|
63
|
+
*/
|
|
64
|
+
patch(path, handler) {
|
|
65
|
+
this.addRoute('PATCH', path, handler);
|
|
66
|
+
return this;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Método para agregar una ruta genérica
|
|
71
|
+
* @param {string} method - Método HTTP
|
|
72
|
+
* @param {string} path - Ruta del endpoint
|
|
73
|
+
* @param {Function} handler - Función manejadora de la ruta
|
|
74
|
+
*/
|
|
75
|
+
addRoute(method, path, handler) {
|
|
76
|
+
// Si hay un prefijo, combinarlo con la ruta
|
|
77
|
+
const fullPath = this.prefix ? `${this.prefix}${path}` : path;
|
|
78
|
+
|
|
79
|
+
this.routes.push({
|
|
80
|
+
method: method.toUpperCase(),
|
|
81
|
+
path: fullPath,
|
|
82
|
+
handler
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Método para agregar un router anidado
|
|
88
|
+
* @param {string} prefix - Prefijo para las rutas anidadas
|
|
89
|
+
* @param {Router} router - Router a anidar
|
|
90
|
+
*/
|
|
91
|
+
addNestedRouter(prefix, router) {
|
|
92
|
+
// Agregar prefijo al router anidado
|
|
93
|
+
const nestedRouterWithPrefix = {
|
|
94
|
+
prefix,
|
|
95
|
+
router
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
this.nestedRouters.push(nestedRouterWithPrefix);
|
|
99
|
+
|
|
100
|
+
// También agregar las rutas directamente para facilitar la búsqueda
|
|
101
|
+
const nestedRoutes = router.getRoutes();
|
|
102
|
+
for (const route of nestedRoutes) {
|
|
103
|
+
const prefixedPath = `${prefix}${route.path}`;
|
|
104
|
+
this.routes.push({
|
|
105
|
+
method: route.method,
|
|
106
|
+
path: prefixedPath,
|
|
107
|
+
handler: route.handler
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Método para obtener todas las rutas
|
|
114
|
+
* @returns {Array} - Array con todas las rutas registradas
|
|
115
|
+
*/
|
|
116
|
+
getRoutes() {
|
|
117
|
+
return this.routes;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Método para combinar rutas de otro router
|
|
122
|
+
* @param {Router} router - Otro objeto Router
|
|
123
|
+
*/
|
|
124
|
+
merge(router) {
|
|
125
|
+
if (router instanceof Router) {
|
|
126
|
+
this.routes = this.routes.concat(router.getRoutes());
|
|
127
|
+
|
|
128
|
+
// Copiar también los routers anidados
|
|
129
|
+
if (router.nestedRouters) {
|
|
130
|
+
this.nestedRouters = this.nestedRouters.concat(router.nestedRouters);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Método para aplicar prefijo a todas las rutas
|
|
137
|
+
* @param {string} prefix - Prefijo a aplicar
|
|
138
|
+
*/
|
|
139
|
+
setPrefix(prefix) {
|
|
140
|
+
this.prefix = prefix;
|
|
141
|
+
|
|
142
|
+
// Actualizar todas las rutas existentes con el nuevo prefijo
|
|
143
|
+
for (let i = 0; i < this.routes.length; i++) {
|
|
144
|
+
// Remover el prefijo anterior si existe
|
|
145
|
+
if (this.routes[i].originalPath) {
|
|
146
|
+
this.routes[i].path = `${prefix}${this.routes[i].originalPath}`;
|
|
147
|
+
} else {
|
|
148
|
+
// Guardar la ruta original antes de aplicar el prefijo
|
|
149
|
+
const originalPathWithoutCurrentPrefix = this.routes[i].path.replace(/^\/?[^\/]+\/?/, '');
|
|
150
|
+
this.routes[i].originalPath = originalPathWithoutCurrentPrefix;
|
|
151
|
+
this.routes[i].path = `${prefix}${originalPathWithoutCurrentPrefix}`;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Método para definir middleware específico para ciertas rutas
|
|
158
|
+
* @param {string|Array} path - Ruta(s) a las que aplicar el middleware
|
|
159
|
+
* @param {Function} middleware - Función de middleware
|
|
160
|
+
*/
|
|
161
|
+
use(path, middleware) {
|
|
162
|
+
// Si el segundo parámetro es una función, es un middleware para todas las rutas
|
|
163
|
+
if (typeof path === 'function') {
|
|
164
|
+
middleware = path;
|
|
165
|
+
path = '/*'; // Aplicar a todas las rutas
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
// Crear un handler especial que ejecuta el middleware y luego el handler original
|
|
169
|
+
const middlewareHandler = (req, res, next) => {
|
|
170
|
+
return new Promise((resolve, reject) => {
|
|
171
|
+
const wrappedNext = (err) => {
|
|
172
|
+
if (err) {
|
|
173
|
+
reject(err);
|
|
174
|
+
} else {
|
|
175
|
+
if (next) next();
|
|
176
|
+
resolve();
|
|
177
|
+
}
|
|
178
|
+
};
|
|
179
|
+
|
|
180
|
+
// Ejecutar middleware
|
|
181
|
+
const result = middleware(req, res, wrappedNext);
|
|
182
|
+
|
|
183
|
+
// Si el middleware devuelve una promesa, esperarla
|
|
184
|
+
if (result && typeof result.then === 'function') {
|
|
185
|
+
result.then(() => {
|
|
186
|
+
if (next) next();
|
|
187
|
+
resolve();
|
|
188
|
+
}).catch(reject);
|
|
189
|
+
}
|
|
190
|
+
});
|
|
191
|
+
};
|
|
192
|
+
|
|
193
|
+
// Si path es un array, aplicar a todas las rutas del array
|
|
194
|
+
if (Array.isArray(path)) {
|
|
195
|
+
for (const singlePath of path) {
|
|
196
|
+
this.addRoute('USE', singlePath, middlewareHandler);
|
|
197
|
+
}
|
|
198
|
+
} else {
|
|
199
|
+
this.addRoute('USE', path, middlewareHandler);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
module.exports = Router;
|