jerkjs 2.1.1 → 2.1.2

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.
Files changed (170) hide show
  1. package/CHANGELOG.md +3 -2
  2. package/README.md +1 -1
  3. package/examples.arj +0 -0
  4. package/index.js +1 -1
  5. package/lib/middleware/compressor.js +34 -18
  6. package/package.json +1 -1
  7. package/standard/CompressionTestController.js +38 -0
  8. package/standard/HealthController.js +16 -0
  9. package/standard/HomeController.js +12 -0
  10. package/standard/ProductController.js +18 -0
  11. package/standard/README.md +47 -0
  12. package/standard/UserController.js +23 -0
  13. package/standard/package.json +22 -0
  14. package/standard/routes.json +58 -0
  15. package/standard/server.js +140 -0
  16. package/cookies.txt +0 -5
  17. package/examples/advanced/controllers/productController.js +0 -64
  18. package/examples/advanced/controllers/userController.js +0 -85
  19. package/examples/advanced/routes.json +0 -51
  20. package/examples/advanced_example.js +0 -93
  21. package/examples/basic/controllers/userController.js +0 -85
  22. package/examples/basic_example.js +0 -72
  23. package/examples/frontend/README.md +0 -71
  24. package/examples/frontend/app.js +0 -71
  25. package/examples/frontend/controllers/apiController.js +0 -39
  26. package/examples/frontend/controllers/authController.js +0 -220
  27. package/examples/frontend/controllers/formController.js +0 -47
  28. package/examples/frontend/controllers/messageController.js +0 -96
  29. package/examples/frontend/controllers/pageController.js +0 -178
  30. package/examples/frontend/controllers/staticController.js +0 -167
  31. package/examples/frontend/routes.json +0 -90
  32. package/examples/hooks/app.js +0 -136
  33. package/examples/hooks/controllers/authController.js +0 -54
  34. package/examples/hooks/controllers/mainController.js +0 -41
  35. package/examples/hooks/controllers/productController.js +0 -39
  36. package/examples/hooks/controllers/userController.js +0 -69
  37. package/examples/hooks/routes.json +0 -51
  38. package/examples/hooks/views/home.html +0 -50
  39. package/examples/mvc_example/app.js +0 -138
  40. package/examples/mvc_example/views/home/index.html +0 -26
  41. package/examples/mvc_example/views/home/simple.html +0 -3
  42. package/examples/mvc_example/views/layout.html +0 -23
  43. package/examples/mvc_example/views/test.html +0 -3
  44. package/examples/mvc_example/views/user/invalid.html +0 -6
  45. package/examples/mvc_example/views/user/list.html +0 -36
  46. package/examples/mvc_example/views/user/notfound.html +0 -6
  47. package/examples/mvc_example/views/user/profile.html +0 -11
  48. package/examples/mvc_routes_example/app.js +0 -34
  49. package/examples/mvc_routes_example/controllers/mainController.js +0 -27
  50. package/examples/mvc_routes_example/controllers/productController.js +0 -47
  51. package/examples/mvc_routes_example/controllers/userController.js +0 -76
  52. package/examples/mvc_routes_example/routes.json +0 -30
  53. package/examples/mvc_routes_example/views/layout.html +0 -31
  54. package/examples/mvc_routes_example/views/main/index.html +0 -11
  55. package/examples/mvc_routes_example/views/product/catalog.html +0 -24
  56. package/examples/mvc_routes_example/views/user/invalid.html +0 -6
  57. package/examples/mvc_routes_example/views/user/list.html +0 -40
  58. package/examples/mvc_routes_example/views/user/notfound.html +0 -6
  59. package/examples/mvc_routes_example/views/user/profile.html +0 -18
  60. package/examples/mvc_welcome/README.md +0 -34
  61. package/examples/mvc_welcome/app.js +0 -50
  62. package/examples/mvc_welcome/controllers/welcomeController.js +0 -41
  63. package/examples/mvc_welcome/package.json +0 -26
  64. package/examples/mvc_welcome/views/home/welcome.html +0 -82
  65. package/examples/performance_demo/app.js +0 -172
  66. package/examples/performance_demo_with_hooks/README.md +0 -52
  67. package/examples/performance_demo_with_hooks/app.js +0 -290
  68. package/examples/public/README.md +0 -92
  69. package/examples/public/app.js +0 -72
  70. package/examples/public/controllers/healthController.js +0 -20
  71. package/examples/public/controllers/mainController.js +0 -22
  72. package/examples/public/controllers/userController.js +0 -139
  73. package/examples/public/routes.json +0 -51
  74. package/examples/v2/README.md +0 -72
  75. package/examples/v2/app.js +0 -74
  76. package/examples/v2/app_fixed.js +0 -74
  77. package/examples/v2/controllers/authController.js +0 -64
  78. package/examples/v2/controllers/mainController.js +0 -24
  79. package/examples/v2/controllers/protectedController.js +0 -12
  80. package/examples/v2/controllers/userController.js +0 -16
  81. package/examples/v2/package.json +0 -27
  82. package/examples/v2/routes.json +0 -30
  83. package/examples/v2/test_api.sh +0 -47
  84. package/examples/v2/tokens_example.sqlite +0 -0
  85. package/examples/v2.1_firewall_demo/README.md +0 -113
  86. package/examples/v2.1_firewall_demo/app.js +0 -182
  87. package/examples/v2.1_firewall_demo/package.json +0 -27
  88. package/examples/v2.1_hooks_demo/README.md +0 -85
  89. package/examples/v2.1_hooks_demo/app.js +0 -101
  90. package/examples/v2.1_hooks_demo/controllers/hooksController.js +0 -29
  91. package/examples/v2.1_hooks_demo/controllers/mainController.js +0 -18
  92. package/examples/v2.1_hooks_demo/package.json +0 -27
  93. package/examples/v2.1_hooks_demo/routes.json +0 -16
  94. package/examples/v2.1_openapi_demo/README.md +0 -82
  95. package/examples/v2.1_openapi_demo/app.js +0 -296
  96. package/examples/v2.1_openapi_demo/package.json +0 -26
  97. package/examples/v2_cors/README.md +0 -82
  98. package/examples/v2_cors/app.js +0 -108
  99. package/examples/v2_cors/package.json +0 -23
  100. package/examples/v2_json_auth/README.md +0 -83
  101. package/examples/v2_json_auth/app.js +0 -72
  102. package/examples/v2_json_auth/controllers/authController.js +0 -67
  103. package/examples/v2_json_auth/controllers/mainController.js +0 -16
  104. package/examples/v2_json_auth/controllers/protectedController.js +0 -12
  105. package/examples/v2_json_auth/controllers/tokenController.js +0 -28
  106. package/examples/v2_json_auth/controllers/userController.js +0 -15
  107. package/examples/v2_json_auth/package.json +0 -26
  108. package/examples/v2_json_auth/routes.json +0 -37
  109. package/examples/v2_json_auth/tokens.json +0 -20
  110. package/examples/v2_mariadb_auth/README.md +0 -94
  111. package/examples/v2_mariadb_auth/app.js +0 -81
  112. package/examples/v2_mariadb_auth/controllers/authController.js +0 -95
  113. package/examples/v2_mariadb_auth/controllers/mainController.js +0 -31
  114. package/examples/v2_mariadb_auth/controllers/protectedController.js +0 -12
  115. package/examples/v2_mariadb_auth/controllers/userController.js +0 -17
  116. package/examples/v2_mariadb_auth/package.json +0 -27
  117. package/examples/v2_mariadb_auth/routes.json +0 -37
  118. package/examples/v2_no_auth/README.md +0 -75
  119. package/examples/v2_no_auth/app.js +0 -72
  120. package/examples/v2_no_auth/controllers/healthController.js +0 -14
  121. package/examples/v2_no_auth/controllers/mainController.js +0 -19
  122. package/examples/v2_no_auth/controllers/productController.js +0 -31
  123. package/examples/v2_no_auth/controllers/publicController.js +0 -16
  124. package/examples/v2_no_auth/package.json +0 -22
  125. package/examples/v2_no_auth/routes.json +0 -37
  126. package/examples/v2_oauth/README.md +0 -70
  127. package/examples/v2_oauth/app.js +0 -90
  128. package/examples/v2_oauth/controllers/mainController.js +0 -45
  129. package/examples/v2_oauth/controllers/oauthController.js +0 -247
  130. package/examples/v2_oauth/controllers/protectedController.js +0 -13
  131. package/examples/v2_oauth/controllers/userController.js +0 -17
  132. package/examples/v2_oauth/package.json +0 -26
  133. package/examples/v2_oauth/routes.json +0 -44
  134. package/examples/v2_openapi/README.md +0 -77
  135. package/examples/v2_openapi/app.js +0 -222
  136. package/examples/v2_openapi/controllers/authController.js +0 -52
  137. package/examples/v2_openapi/controllers/mainController.js +0 -26
  138. package/examples/v2_openapi/controllers/productController.js +0 -17
  139. package/examples/v2_openapi/controllers/userController.js +0 -27
  140. package/examples/v2_openapi/package.json +0 -26
  141. package/examples/v2_openapi/routes.json +0 -37
  142. package/v2examplle/v2_json_auth/README.md +0 -83
  143. package/v2examplle/v2_json_auth/app.js +0 -72
  144. package/v2examplle/v2_json_auth/controllers/authController.js +0 -67
  145. package/v2examplle/v2_json_auth/controllers/mainController.js +0 -16
  146. package/v2examplle/v2_json_auth/controllers/protectedController.js +0 -12
  147. package/v2examplle/v2_json_auth/controllers/tokenController.js +0 -28
  148. package/v2examplle/v2_json_auth/controllers/userController.js +0 -15
  149. package/v2examplle/v2_json_auth/package.json +0 -26
  150. package/v2examplle/v2_json_auth/routes.json +0 -37
  151. package/v2examplle/v2_json_auth/tokens.json +0 -20
  152. package/v2examplle/v2_mariadb_auth/README.md +0 -94
  153. package/v2examplle/v2_mariadb_auth/app.js +0 -81
  154. package/v2examplle/v2_mariadb_auth/controllers/authController.js +0 -95
  155. package/v2examplle/v2_mariadb_auth/controllers/mainController.js +0 -31
  156. package/v2examplle/v2_mariadb_auth/controllers/protectedController.js +0 -12
  157. package/v2examplle/v2_mariadb_auth/controllers/userController.js +0 -17
  158. package/v2examplle/v2_mariadb_auth/package.json +0 -27
  159. package/v2examplle/v2_mariadb_auth/routes.json +0 -37
  160. package/v2examplle/v2_sqlite_auth/README.md +0 -72
  161. package/v2examplle/v2_sqlite_auth/app.js +0 -74
  162. package/v2examplle/v2_sqlite_auth/app_fixed.js +0 -74
  163. package/v2examplle/v2_sqlite_auth/controllers/authController.js +0 -64
  164. package/v2examplle/v2_sqlite_auth/controllers/mainController.js +0 -24
  165. package/v2examplle/v2_sqlite_auth/controllers/protectedController.js +0 -12
  166. package/v2examplle/v2_sqlite_auth/controllers/userController.js +0 -16
  167. package/v2examplle/v2_sqlite_auth/package.json +0 -27
  168. package/v2examplle/v2_sqlite_auth/routes.json +0 -30
  169. package/v2examplle/v2_sqlite_auth/test_api.sh +0 -47
  170. package/v2examplle/v2_sqlite_auth/tokens_example.sqlite +0 -0
@@ -1,182 +0,0 @@
1
- /**
2
- * Ejemplo de API con funcionalidades de firewall avanzado (v2.1.0)
3
- * Demostrando el uso del sistema de firewall con el sistema de hooks
4
- */
5
-
6
- const {
7
- APIServer,
8
- Authenticator,
9
- RateLimiter,
10
- Logger,
11
- HookSystem,
12
- Firewall
13
- } = require('../../index.js');
14
-
15
- async function startServer() {
16
- // Crear instancia del servidor
17
- const server = new APIServer({
18
- port: 8097,
19
- host: 'localhost'
20
- });
21
-
22
- // Crear instancia del logger
23
- const logger = new Logger({ level: 'info' });
24
-
25
- // Crear instancia del sistema de hooks
26
- const hooks = new HookSystem();
27
-
28
- // Crear instancia del firewall
29
- const firewall = new Firewall({
30
- maxAttempts: 3,
31
- blockDuration: 300000, // 5 minutos para pruebas
32
- whitelist: ['127.0.0.1', '::1'], // IPs locales
33
- blacklist: [], // Ninguna IP bloqueada por defecto
34
- rules: [
35
- {
36
- name: 'large_payload',
37
- condition: (req) => {
38
- // Bloquear solicitudes con cuerpo muy grande
39
- const contentLength = req.headers['content-length'];
40
- return contentLength && parseInt(contentLength) > 1024 * 100; // 100KB
41
- },
42
- action: 'block',
43
- reason: 'Solicitud con payload excesivamente grande'
44
- },
45
- {
46
- name: 'suspicious_user_agent',
47
- condition: (req) => {
48
- const userAgent = req.headers['user-agent'] || '';
49
- // Detectar user agents sospechosos
50
- const suspiciousAgents = [
51
- /sqlmap/i,
52
- /nikto/i,
53
- /nessus/i,
54
- /nmap/i,
55
- /dirbuster/i
56
- ];
57
-
58
- return suspiciousAgents.some(agent => agent.test(userAgent));
59
- },
60
- action: 'block',
61
- reason: 'User agent sospechoso detectado'
62
- }
63
- ],
64
- logger
65
- });
66
-
67
- try {
68
- // Registrar hooks para eventos de firewall
69
- hooks.addAction('firewall_rule_triggered', (rule, clientIP, req) => {
70
- logger.info(`[[FIREWALL-HOOK]] Regla activada: ${rule.name} para IP: ${clientIP}`);
71
- });
72
-
73
- hooks.addAction('firewall_ip_blocked', (ip, reason) => {
74
- logger.warn(`[[FIREWALL-HOOK]] IP bloqueada: ${ip} por razón: ${reason}`);
75
- });
76
-
77
- hooks.addAction('firewall_security_event', (event, details) => {
78
- logger.info(`[[FIREWALL-HOOK]] Evento de seguridad: ${event}`, details);
79
- });
80
-
81
- // Aplicar middleware de firewall al servidor
82
- server.use(firewall.middleware());
83
-
84
- // Ruta pública
85
- server.addRoute('GET', '/', (req, res) => {
86
- res.writeHead(200, { 'Content-Type': 'application/json' });
87
- res.end(JSON.stringify({
88
- message: 'API con funcionalidades de firewall avanzado (v2.1.0)',
89
- features: [
90
- 'Detección de patrones de ataque (SQL Injection, XSS, Path Traversal)',
91
- 'Bloqueo de IPs tras intentos fallidos',
92
- 'Listas blancas y negras de IPs',
93
- 'Reglas personalizadas de firewall',
94
- 'Sistema de hooks para eventos de seguridad',
95
- 'Monitoreo de solicitudes sospechosas'
96
- ],
97
- firewallStatus: firewall.getStatus(),
98
- timestamp: new Date().toISOString()
99
- }));
100
- });
101
-
102
- // Ruta para probar diferentes tipos de ataques
103
- server.addRoute('GET', '/test-attacks', (req, res) => {
104
- // Disparar un hook personalizado para demostrar el sistema
105
- hooks.doAction('firewall_security_event', 'attack_test_requested', {
106
- clientIP: firewall.getClientIP(req),
107
- userAgent: req.headers['user-agent'],
108
- timestamp: new Date().toISOString()
109
- });
110
-
111
- res.writeHead(200, { 'Content-Type': 'application/json' });
112
- res.end(JSON.stringify({
113
- message: 'Prueba de ataques completada',
114
- clientIP: firewall.getClientIP(req),
115
- securityLevel: 'monitored',
116
- timestamp: new Date().toISOString()
117
- }));
118
- });
119
-
120
- // Ruta para probar SQL injection (esta debería ser bloqueada)
121
- server.addRoute('GET', '/test-sql-injection', (req, res) => {
122
- // Esta ruta no debería ser accesible si se detecta SQL injection en la URL
123
- res.writeHead(200, { 'Content-Type': 'application/json' });
124
- res.end(JSON.stringify({
125
- message: '¡Esto no debería verse si se detectó SQL injection!',
126
- status: 'compromised',
127
- timestamp: new Date().toISOString()
128
- }));
129
- });
130
-
131
- // Ruta para probar XSS (esta debería ser bloqueada)
132
- server.addRoute('GET', '/test-xss', (req, res) => {
133
- // Esta ruta no debería ser accesible si se detecta XSS en la URL
134
- res.writeHead(200, { 'Content-Type': 'application/json' });
135
- res.end(JSON.stringify({
136
- message: '¡Esto no debería verse si se detectó XSS!',
137
- status: 'compromised',
138
- timestamp: new Date().toISOString()
139
- }));
140
- });
141
-
142
- // Ruta para probar path traversal (esta debería ser bloqueada)
143
- server.addRoute('GET', '/test-path-traversal', (req, res) => {
144
- // Esta ruta no debería ser accesible si se detecta path traversal
145
- res.writeHead(200, { 'Content-Type': 'application/json' });
146
- res.end(JSON.stringify({
147
- message: '¡Esto no debería verse si se detectó path traversal!',
148
- status: 'compromised',
149
- timestamp: new Date().toISOString()
150
- }));
151
- });
152
-
153
- // Ruta para verificar estado del firewall
154
- server.addRoute('GET', '/firewall-status', (req, res) => {
155
- res.writeHead(200, { 'Content-Type': 'application/json' });
156
- res.end(JSON.stringify({
157
- firewall: firewall.getStatus(),
158
- timestamp: new Date().toISOString()
159
- }));
160
- });
161
-
162
- // Iniciar el servidor
163
- server.start();
164
-
165
- logger.info('Servidor con firewall avanzado iniciado en http://localhost:8097');
166
- logger.info('Endpoints disponibles:');
167
- logger.info('- GET / - Página de inicio con información de firewall');
168
- logger.info('- GET /test-attacks - Prueba de detección de ataques');
169
- logger.info('- GET /test-sql-injection - Prueba de detección de SQL injection (será bloqueada)');
170
- logger.info('- GET /test-xss - Prueba de detección de XSS (será bloqueada)');
171
- logger.info('- GET /test-path-traversal - Prueba de detección de path traversal (será bloqueada)');
172
- logger.info('- GET /firewall-status - Estado actual del firewall');
173
- } catch (error) {
174
- logger.error('Error iniciando el servidor:', error.message);
175
- process.exit(1);
176
- }
177
- }
178
-
179
- // Iniciar el servidor
180
- startServer();
181
-
182
- module.exports = { startServer };
@@ -1,27 +0,0 @@
1
- {
2
- "name": "jerk-firewall-demo",
3
- "version": "1.0.0",
4
- "description": "Ejemplo de API con funcionalidades de firewall avanzado usando el Framework JERK",
5
- "main": "app.js",
6
- "scripts": {
7
- "start": "node app.js",
8
- "dev": "nodemon app.js"
9
- },
10
- "keywords": [
11
- "api",
12
- "sdk",
13
- "firewall",
14
- "security",
15
- "advanced",
16
- "protection",
17
- "framework"
18
- ],
19
- "author": "JERK Framework",
20
- "license": "MIT",
21
- "dependencies": {
22
- "jsonwebtoken": "^9.0.0"
23
- },
24
- "devDependencies": {
25
- "nodemon": "^3.0.0"
26
- }
27
- }
@@ -1,85 +0,0 @@
1
- # Ejemplo de Sistema de Hooks en Framework JERK
2
-
3
- Este ejemplo demuestra cómo usar el sistema de hooks como el core de WordPress para extender la funcionalidad del Framework JERK en diferentes puntos del ciclo de vida.
4
-
5
- ## Características del Sistema de Hooks
6
-
7
- - **Acciones (Actions)**: Puntos de extensión donde se pueden ejecutar funciones
8
- - **Filtros (Filters)**: Puntos donde se pueden modificar datos antes de ser procesados
9
- - **Extensibilidad**: Capacidad para agregar funcionalidades en múltiples puntos del ciclo de vida
10
- - **Ciclo de Vida**: Hooks disponibles en diferentes etapas del proceso
11
-
12
- ## Hooks Disponibles
13
-
14
- ### Hooks de Servidor
15
- - `framework_init`: Se ejecuta cuando se inicializa el framework
16
- - `pre_server_start`: Antes de iniciar el servidor
17
- - `post_server_start`: Después de iniciar el servidor
18
-
19
- ### Hooks de Carga de Rutas
20
- - `pre_route_load`: Antes de cargar rutas desde archivo
21
- - `post_route_load`: Después de cargar rutas desde archivo
22
-
23
- ### Hooks de Carga de Controladores
24
- - `pre_controller_load`: Antes de cargar un controlador
25
- - `post_controller_load`: Después de cargar un controlador
26
-
27
- ## Configuración
28
-
29
- No se requieren dependencias adicionales más allá del Framework JERK.
30
-
31
- ## Uso
32
-
33
- 1. Inicia el servidor:
34
- ```bash
35
- node app.js
36
- ```
37
-
38
- 2. El servidor escuchará en `http://localhost:8096`
39
-
40
- ## Endpoints
41
-
42
- - `GET /` - Página de inicio con información del sistema de hooks
43
- - `GET /hooks-info` - Información sobre el sistema de hooks
44
-
45
- ## Ejemplo de uso de Hooks
46
-
47
- ```javascript
48
- const { hooks } = require('jerkjs');
49
-
50
- // Registrar una acción
51
- hooks.addAction('nombre_del_hook', (param1, param2) => {
52
- console.log('Hook ejecutado con:', param1, param2);
53
- });
54
-
55
- // Registrar un filtro
56
- hooks.addFilter('nombre_del_filtro', (valor, parametroAdicional) => {
57
- return valor + parametroAdicional;
58
- });
59
-
60
- // Ejecutar una acción
61
- hooks.doAction('nombre_del_hook', 'dato1', 'dato2');
62
-
63
- // Aplicar un filtro
64
- const resultado = hooks.applyFilters('nombre_del_filtro', 'valorInicial', 'datoAdicional');
65
- ```
66
-
67
- ## Estructura del proyecto
68
-
69
- ```
70
- examples/v2.1_hooks_demo/
71
- ├── app.js # Punto de entrada de la aplicación con hooks
72
- ├── routes.json # Definición de rutas
73
- ├── controllers/ # Controladores de las rutas
74
- │ ├── mainController.js
75
- │ └── hooksController.js
76
- └── README.md
77
- ```
78
-
79
- ## Beneficios del Sistema de Hooks
80
-
81
- 1. **Extensibilidad**: Permite extender la funcionalidad sin modificar el código base
82
- 2. **Modularidad**: Módulos pueden añadir funcionalidades sin interferir entre sí
83
- 3. **Flexibilidad**: Hooks disponibles en múltiples puntos del ciclo de vida
84
- 4. **Personalización**: Capacidad para modificar comportamientos predeterminados
85
- 5. **Integración**: Fácil integración con sistemas de terceros
@@ -1,101 +0,0 @@
1
- /**
2
- * Ejemplo de uso del sistema de hooks en el Framework JERK
3
- * Demostrando extensibilidad en diferentes puntos del ciclo de vida
4
- */
5
-
6
- const jerk = require('../../index.js');
7
- const {
8
- APIServer,
9
- Logger
10
- } = jerk;
11
- const RouteLoader = require('../../lib/loader/routeLoader.js');
12
- const ControllerLoader = require('../../lib/loader/controllerLoader.js');
13
- const hooks = jerk.hooks;
14
-
15
- async function startServer() {
16
- // Crear instancia del servidor
17
- const server = new APIServer({
18
- port: 8096,
19
- host: 'localhost'
20
- });
21
-
22
- // Crear instancia del logger
23
- const logger = new Logger({ level: 'info' });
24
-
25
- try {
26
- // Registrar hooks para diferentes eventos del ciclo de vida
27
-
28
- // Hook que se ejecuta cuando se inicializa el framework
29
- hooks.addAction('framework_init', () => {
30
- logger.info('[[FRAMEWORK]] - El framework ha sido inicializado');
31
- });
32
-
33
- // Hook que se ejecuta antes de iniciar el servidor
34
- hooks.addAction('pre_server_start', (serverInstance) => {
35
- logger.info('[[HOOK]] - Antes de iniciar el servidor');
36
- logger.info('[[HOOK]] - Puerto configurado:', serverInstance.port);
37
- });
38
-
39
- // Hook que se ejecuta después de iniciar el servidor
40
- hooks.addAction('post_server_start', (serverInstance) => {
41
- logger.info('[[HOOK]] - Servidor iniciado exitosamente');
42
- logger.info('[[HOOK]] - Escuchando en:', `http://${serverInstance.host}:${serverInstance.port}`);
43
- });
44
-
45
- // Hook que se ejecuta antes de cargar rutas
46
- hooks.addAction('pre_route_load', (filePath, serverInstance) => {
47
- logger.info('[[HOOK]] - A punto de cargar rutas desde:', filePath);
48
- });
49
-
50
- // Hook que se ejecuta después de cargar rutas
51
- hooks.addAction('post_route_load', (routes, serverInstance) => {
52
- logger.info('[[HOOK]] - Rutas cargadas exitosamente:', routes.length, 'rutas');
53
- routes.forEach((route, index) => {
54
- logger.info(`[[HOOK]] - Ruta ${index + 1}: ${route.method} ${route.path}`);
55
- });
56
- });
57
-
58
- // Hook que se ejecuta antes de cargar un controlador
59
- hooks.addAction('pre_controller_load', (controllerPath) => {
60
- logger.info('[[HOOK]] - A punto de cargar controlador:', controllerPath);
61
- });
62
-
63
- // Hook que se ejecuta después de cargar un controlador
64
- hooks.addAction('post_controller_load', (controllerModule, absolutePath) => {
65
- logger.info('[[HOOK]] - Controlador cargado exitosamente:', absolutePath);
66
- // Podríamos inspeccionar las funciones disponibles en el módulo
67
- const availableHandlers = Object.keys(controllerModule).filter(key =>
68
- typeof controllerModule[key] === 'function'
69
- );
70
- logger.info('[[HOOK]] - Handlers disponibles en el controlador:', availableHandlers);
71
- });
72
-
73
- // Ejemplo de uso de filtros
74
- hooks.addFilter('modify_response_data', (data, endpoint) => {
75
- // Añadir información de auditoría a todas las respuestas
76
- return {
77
- ...data,
78
- _hook_processed: true,
79
- _timestamp: new Date().toISOString(),
80
- _endpoint: endpoint
81
- };
82
- });
83
-
84
- // Cargar rutas desde archivo JSON
85
- const routeLoader = new RouteLoader();
86
- await routeLoader.loadRoutes(server, './routes.json');
87
-
88
- // Iniciar el servidor
89
- server.start();
90
-
91
- logger.info('Servidor iniciado con sistema de hooks activo');
92
- } catch (error) {
93
- logger.error('Error iniciando el servidor:', error.message);
94
- process.exit(1);
95
- }
96
- }
97
-
98
- // Iniciar el servidor
99
- startServer();
100
-
101
- module.exports = { startServer };
@@ -1,29 +0,0 @@
1
- const jerk = require('../../../index.js');
2
- const hooks = jerk.hooks;
3
-
4
- const hooksController = {
5
- getHooksInfo: (req, res) => {
6
- res.writeHead(200, { 'Content-Type': 'application/json' });
7
- res.end(JSON.stringify({
8
- message: 'Información sobre el sistema de hooks',
9
- hooksSystem: {
10
- 'actionsRegistradas': hooks.actions ? hooks.actions.size : 0,
11
- 'filtersRegistrados': hooks.filters ? hooks.filters.size : 0,
12
- 'accionesDisponibles': [
13
- 'framework_init',
14
- 'pre_server_start',
15
- 'post_server_start',
16
- 'pre_route_load',
17
- 'post_route_load',
18
- 'pre_controller_load',
19
- 'post_controller_load'
20
- ],
21
- 'ejemploUso': 'hooks.addAction(nombreHook, funcionCallback)',
22
- 'ejemploFiltro': 'hooks.addFilter(nombreFiltro, funcionCallback)'
23
- },
24
- timestamp: new Date().toISOString()
25
- }));
26
- }
27
- };
28
-
29
- module.exports = hooksController;
@@ -1,18 +0,0 @@
1
- const mainController = {
2
- home: (req, res) => {
3
- res.writeHead(200, { 'Content-Type': 'application/json' });
4
- res.end(JSON.stringify({
5
- message: 'API con sistema de hooks activo',
6
- features: [
7
- 'Pre/Post hooks para carga de rutas',
8
- 'Pre/Post hooks para carga de controladores',
9
- 'Pre/Post hooks para inicio de servidor',
10
- 'Filtros para modificar datos de respuesta',
11
- 'Extensibilidad en múltiples puntos del ciclo de vida'
12
- ],
13
- timestamp: new Date().toISOString()
14
- }));
15
- }
16
- };
17
-
18
- module.exports = mainController;
@@ -1,27 +0,0 @@
1
- {
2
- "name": "jerk-hooks-demo",
3
- "version": "1.0.0",
4
- "description": "Ejemplo de API con sistema de hooks para extensibilidad usando el Framework JERK",
5
- "main": "app.js",
6
- "scripts": {
7
- "start": "node app.js",
8
- "dev": "nodemon app.js"
9
- },
10
- "keywords": [
11
- "api",
12
- "sdk",
13
- "hooks",
14
- "filters",
15
- "extensibility",
16
- "wordpress",
17
- "framework"
18
- ],
19
- "author": "JERK Framework",
20
- "license": "MIT",
21
- "dependencies": {
22
- "jsonwebtoken": "^9.0.0"
23
- },
24
- "devDependencies": {
25
- "nodemon": "^3.0.0"
26
- }
27
- }
@@ -1,16 +0,0 @@
1
- [
2
- {
3
- "path": "/",
4
- "method": "GET",
5
- "controller": "./controllers/mainController.js",
6
- "handler": "home",
7
- "auth": "none"
8
- },
9
- {
10
- "path": "/hooks-info",
11
- "method": "GET",
12
- "controller": "./controllers/hooksController.js",
13
- "handler": "getHooksInfo",
14
- "auth": "none"
15
- }
16
- ]
@@ -1,82 +0,0 @@
1
- # Ejemplo API con Funcionalidades OpenAPI (v2.1.0)
2
-
3
- Este ejemplo demuestra cómo crear una API con funcionalidades OpenAPI integradas utilizando el Framework JERK.
4
-
5
- ## Características de OpenAPI
6
-
7
- - **Generación automática de documentación OpenAPI 3.0**
8
- - **Interfaz Swagger UI interactiva**
9
- - **Definición de esquemas de datos**
10
- - **Documentación de seguridad y autenticación**
11
- - **Especificación de endpoints, parámetros y respuestas**
12
- - **Soporte para diferentes formatos de contenido**
13
- - **Validación de peticiones y respuestas**
14
-
15
- ## Configuración
16
-
17
- No se requieren dependencias adicionales más allá del Framework JERK.
18
-
19
- ## Uso
20
-
21
- 1. Inicia el servidor:
22
- ```bash
23
- node app.js
24
- ```
25
-
26
- 2. El servidor escuchará en `http://localhost:8096`
27
-
28
- ## Endpoints
29
-
30
- - `GET /` - Página de inicio con información de OpenAPI
31
- - `POST /login` - Iniciar sesión y obtener token
32
- - `GET /users` - Lista de usuarios (requiere token)
33
- - `GET /products` - Lista de productos (requiere token)
34
- - `GET /docs` - Documentación interactiva OpenAPI/Swagger
35
- - `GET /openapi.json` - Especificación OpenAPI
36
-
37
- ## Ejemplo de uso
38
-
39
- 1. Iniciar sesión:
40
- ```bash
41
- curl -X POST http://localhost:8096/login \
42
- -H "Content-Type: application/json" \
43
- -d '{"username": "admin", "password": "password"}'
44
- ```
45
-
46
- 2. Acceder a usuarios con el token:
47
- ```bash
48
- curl -X GET http://localhost:8096/users \
49
- -H "Authorization: Bearer TU_TOKEN_AQUI"
50
- ```
51
-
52
- 3. Ver documentación interactiva:
53
- Visita `http://localhost:8096/docs` en tu navegador
54
-
55
- 4. Obtener especificación OpenAPI:
56
- ```bash
57
- curl -X GET http://localhost:8096/openapi.json
58
- ```
59
-
60
- ## Estructura del proyecto
61
-
62
- ```
63
- examples/v2.1_openapi_demo/
64
- ├── app.js # Punto de entrada de la aplicación
65
- ├── controllers/ # Controladores de las rutas
66
- │ ├── mainController.js
67
- │ ├── authController.js
68
- │ ├── userController.js
69
- │ └── productController.js
70
- └── README.md
71
- ```
72
-
73
- ## Documentación OpenAPI
74
-
75
- El framework genera automáticamente:
76
-
77
- - Una especificación OpenAPI 3.0 en `/openapi.json`
78
- - Una interfaz Swagger UI interactiva en `/docs`
79
- - Esquemas de datos definidos para reutilización
80
- - Documentación detallada de endpoints, parámetros y respuestas
81
- - Soporte para diferentes códigos de respuesta HTTP
82
- - Definición de esquemas de seguridad