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.
Files changed (177) hide show
  1. package/LICENSE +200 -0
  2. package/README.md +171 -0
  3. package/doc/EXTENSION_MANUAL.md +958 -0
  4. package/doc/FIREWALL_MANUAL.md +419 -0
  5. package/doc/HOOKS_REFERENCE_IMPROVED.md +599 -0
  6. package/doc/MANUAL_API_SDK.md +539 -0
  7. package/doc/MANUAL_MVC.md +397 -0
  8. package/doc/MARIADB_TOKENS_IMPLEMENTATION.md +113 -0
  9. package/doc/MIDDLEWARE_MANUAL.md +521 -0
  10. package/doc/OAUTH2_GOOGLE_MANUAL.md +408 -0
  11. package/doc/frontend-and-sessions.md +356 -0
  12. package/examples/advanced/controllers/productController.js +64 -0
  13. package/examples/advanced/controllers/userController.js +85 -0
  14. package/examples/advanced/routes.json +51 -0
  15. package/examples/advanced_example.js +93 -0
  16. package/examples/basic/controllers/userController.js +85 -0
  17. package/examples/basic_example.js +72 -0
  18. package/examples/frontend/README.md +71 -0
  19. package/examples/frontend/app.js +71 -0
  20. package/examples/frontend/controllers/apiController.js +39 -0
  21. package/examples/frontend/controllers/authController.js +220 -0
  22. package/examples/frontend/controllers/formController.js +47 -0
  23. package/examples/frontend/controllers/messageController.js +96 -0
  24. package/examples/frontend/controllers/pageController.js +178 -0
  25. package/examples/frontend/controllers/staticController.js +167 -0
  26. package/examples/frontend/routes.json +90 -0
  27. package/examples/mvc_example/app.js +138 -0
  28. package/examples/mvc_example/views/home/index.html +26 -0
  29. package/examples/mvc_example/views/home/simple.html +3 -0
  30. package/examples/mvc_example/views/layout.html +23 -0
  31. package/examples/mvc_example/views/test.html +3 -0
  32. package/examples/mvc_example/views/user/invalid.html +6 -0
  33. package/examples/mvc_example/views/user/list.html +36 -0
  34. package/examples/mvc_example/views/user/notfound.html +6 -0
  35. package/examples/mvc_example/views/user/profile.html +11 -0
  36. package/examples/mvc_routes_example/app.js +34 -0
  37. package/examples/mvc_routes_example/controllers/mainController.js +27 -0
  38. package/examples/mvc_routes_example/controllers/productController.js +47 -0
  39. package/examples/mvc_routes_example/controllers/userController.js +76 -0
  40. package/examples/mvc_routes_example/routes.json +30 -0
  41. package/examples/mvc_routes_example/views/layout.html +31 -0
  42. package/examples/mvc_routes_example/views/main/index.html +11 -0
  43. package/examples/mvc_routes_example/views/product/catalog.html +24 -0
  44. package/examples/mvc_routes_example/views/user/invalid.html +6 -0
  45. package/examples/mvc_routes_example/views/user/list.html +40 -0
  46. package/examples/mvc_routes_example/views/user/notfound.html +6 -0
  47. package/examples/mvc_routes_example/views/user/profile.html +18 -0
  48. package/examples/public/README.md +92 -0
  49. package/examples/public/app.js +72 -0
  50. package/examples/public/controllers/healthController.js +20 -0
  51. package/examples/public/controllers/mainController.js +22 -0
  52. package/examples/public/controllers/userController.js +139 -0
  53. package/examples/public/routes.json +51 -0
  54. package/examples/v2/README.md +72 -0
  55. package/examples/v2/app.js +74 -0
  56. package/examples/v2/app_fixed.js +74 -0
  57. package/examples/v2/controllers/authController.js +64 -0
  58. package/examples/v2/controllers/mainController.js +24 -0
  59. package/examples/v2/controllers/protectedController.js +12 -0
  60. package/examples/v2/controllers/userController.js +16 -0
  61. package/examples/v2/package.json +27 -0
  62. package/examples/v2/routes.json +30 -0
  63. package/examples/v2/test_api.sh +47 -0
  64. package/examples/v2/tokens_example.sqlite +0 -0
  65. package/examples/v2.1_firewall_demo/README.md +113 -0
  66. package/examples/v2.1_firewall_demo/app.js +182 -0
  67. package/examples/v2.1_firewall_demo/package.json +27 -0
  68. package/examples/v2.1_hooks_demo/README.md +85 -0
  69. package/examples/v2.1_hooks_demo/app.js +101 -0
  70. package/examples/v2.1_hooks_demo/controllers/hooksController.js +29 -0
  71. package/examples/v2.1_hooks_demo/controllers/mainController.js +18 -0
  72. package/examples/v2.1_hooks_demo/package.json +27 -0
  73. package/examples/v2.1_hooks_demo/routes.json +16 -0
  74. package/examples/v2.1_openapi_demo/README.md +82 -0
  75. package/examples/v2.1_openapi_demo/app.js +296 -0
  76. package/examples/v2.1_openapi_demo/package.json +26 -0
  77. package/examples/v2_cors/README.md +82 -0
  78. package/examples/v2_cors/app.js +108 -0
  79. package/examples/v2_cors/package.json +23 -0
  80. package/examples/v2_json_auth/README.md +83 -0
  81. package/examples/v2_json_auth/app.js +72 -0
  82. package/examples/v2_json_auth/controllers/authController.js +67 -0
  83. package/examples/v2_json_auth/controllers/mainController.js +16 -0
  84. package/examples/v2_json_auth/controllers/protectedController.js +12 -0
  85. package/examples/v2_json_auth/controllers/tokenController.js +28 -0
  86. package/examples/v2_json_auth/controllers/userController.js +15 -0
  87. package/examples/v2_json_auth/package.json +26 -0
  88. package/examples/v2_json_auth/routes.json +37 -0
  89. package/examples/v2_json_auth/tokens.json +20 -0
  90. package/examples/v2_mariadb_auth/README.md +94 -0
  91. package/examples/v2_mariadb_auth/app.js +81 -0
  92. package/examples/v2_mariadb_auth/controllers/authController.js +95 -0
  93. package/examples/v2_mariadb_auth/controllers/mainController.js +31 -0
  94. package/examples/v2_mariadb_auth/controllers/protectedController.js +12 -0
  95. package/examples/v2_mariadb_auth/controllers/userController.js +17 -0
  96. package/examples/v2_mariadb_auth/package.json +27 -0
  97. package/examples/v2_mariadb_auth/routes.json +37 -0
  98. package/examples/v2_no_auth/README.md +75 -0
  99. package/examples/v2_no_auth/app.js +72 -0
  100. package/examples/v2_no_auth/controllers/healthController.js +14 -0
  101. package/examples/v2_no_auth/controllers/mainController.js +19 -0
  102. package/examples/v2_no_auth/controllers/productController.js +31 -0
  103. package/examples/v2_no_auth/controllers/publicController.js +16 -0
  104. package/examples/v2_no_auth/package.json +22 -0
  105. package/examples/v2_no_auth/routes.json +37 -0
  106. package/examples/v2_oauth/README.md +70 -0
  107. package/examples/v2_oauth/app.js +90 -0
  108. package/examples/v2_oauth/controllers/mainController.js +45 -0
  109. package/examples/v2_oauth/controllers/oauthController.js +247 -0
  110. package/examples/v2_oauth/controllers/protectedController.js +13 -0
  111. package/examples/v2_oauth/controllers/userController.js +17 -0
  112. package/examples/v2_oauth/package.json +26 -0
  113. package/examples/v2_oauth/routes.json +44 -0
  114. package/examples/v2_openapi/README.md +77 -0
  115. package/examples/v2_openapi/app.js +222 -0
  116. package/examples/v2_openapi/controllers/authController.js +52 -0
  117. package/examples/v2_openapi/controllers/mainController.js +26 -0
  118. package/examples/v2_openapi/controllers/productController.js +17 -0
  119. package/examples/v2_openapi/controllers/userController.js +27 -0
  120. package/examples/v2_openapi/package.json +26 -0
  121. package/examples/v2_openapi/routes.json +37 -0
  122. package/generate_token.js +10 -0
  123. package/index.js +85 -0
  124. package/jerk.jpg +0 -0
  125. package/lib/core/handler.js +86 -0
  126. package/lib/core/hooks.js +224 -0
  127. package/lib/core/router.js +204 -0
  128. package/lib/core/securityEnhancedServer.js +752 -0
  129. package/lib/core/server.js +369 -0
  130. package/lib/loader/controllerLoader.js +175 -0
  131. package/lib/loader/routeLoader.js +341 -0
  132. package/lib/middleware/auditLogger.js +208 -0
  133. package/lib/middleware/authenticator.js +565 -0
  134. package/lib/middleware/compressor.js +218 -0
  135. package/lib/middleware/cors.js +135 -0
  136. package/lib/middleware/firewall.js +443 -0
  137. package/lib/middleware/rateLimiter.js +210 -0
  138. package/lib/middleware/session.js +301 -0
  139. package/lib/middleware/validator.js +193 -0
  140. package/lib/mvc/controllerBase.js +207 -0
  141. package/lib/mvc/viewEngine.js +752 -0
  142. package/lib/utils/configParser.js +223 -0
  143. package/lib/utils/logger.js +145 -0
  144. package/lib/utils/mariadbTokenAdapter.js +226 -0
  145. package/lib/utils/openapiGenerator.js +140 -0
  146. package/lib/utils/sqliteTokenAdapter.js +224 -0
  147. package/lib/utils/tokenManager.js +254 -0
  148. package/package.json +47 -0
  149. package/v2examplle/v2_json_auth/README.md +83 -0
  150. package/v2examplle/v2_json_auth/app.js +72 -0
  151. package/v2examplle/v2_json_auth/controllers/authController.js +67 -0
  152. package/v2examplle/v2_json_auth/controllers/mainController.js +16 -0
  153. package/v2examplle/v2_json_auth/controllers/protectedController.js +12 -0
  154. package/v2examplle/v2_json_auth/controllers/tokenController.js +28 -0
  155. package/v2examplle/v2_json_auth/controllers/userController.js +15 -0
  156. package/v2examplle/v2_json_auth/package.json +26 -0
  157. package/v2examplle/v2_json_auth/routes.json +37 -0
  158. package/v2examplle/v2_json_auth/tokens.json +20 -0
  159. package/v2examplle/v2_mariadb_auth/README.md +94 -0
  160. package/v2examplle/v2_mariadb_auth/app.js +81 -0
  161. package/v2examplle/v2_mariadb_auth/controllers/authController.js +95 -0
  162. package/v2examplle/v2_mariadb_auth/controllers/mainController.js +31 -0
  163. package/v2examplle/v2_mariadb_auth/controllers/protectedController.js +12 -0
  164. package/v2examplle/v2_mariadb_auth/controllers/userController.js +17 -0
  165. package/v2examplle/v2_mariadb_auth/package.json +27 -0
  166. package/v2examplle/v2_mariadb_auth/routes.json +37 -0
  167. package/v2examplle/v2_sqlite_auth/README.md +72 -0
  168. package/v2examplle/v2_sqlite_auth/app.js +74 -0
  169. package/v2examplle/v2_sqlite_auth/app_fixed.js +74 -0
  170. package/v2examplle/v2_sqlite_auth/controllers/authController.js +64 -0
  171. package/v2examplle/v2_sqlite_auth/controllers/mainController.js +24 -0
  172. package/v2examplle/v2_sqlite_auth/controllers/protectedController.js +12 -0
  173. package/v2examplle/v2_sqlite_auth/controllers/userController.js +16 -0
  174. package/v2examplle/v2_sqlite_auth/package.json +27 -0
  175. package/v2examplle/v2_sqlite_auth/routes.json +30 -0
  176. package/v2examplle/v2_sqlite_auth/test_api.sh +47 -0
  177. package/v2examplle/v2_sqlite_auth/tokens_example.sqlite +0 -0
@@ -0,0 +1,599 @@
1
+ # Sistema de Hooks, Filters y Actions del Framework API SDK JS
2
+
3
+ Visita nuestra página web: https://jerk.page.gd/
4
+ Repositorio oficial: https://gitlab.com/bytedogssyndicate1/jerk/
5
+
6
+ ## Índice
7
+ 1. [Introducción](#introducción)
8
+ 2. [Glosario de Términos](#glosario-de-términos)
9
+ 3. [Referencia Rápida de Hooks](#referencia-rápida-de-hooks)
10
+ 4. [Hooks del Firewall](#hooks-del-firewall)
11
+ 5. [Hooks del Servidor](#hooks-del-servidor)
12
+ 6. [Hooks del Sistema de Carga](#hooks-del-sistema-de-carga)
13
+ 7. [Hooks del Sistema de Seguridad](#hooks-del-sistema-de-seguridad)
14
+ 8. [Hooks del Sistema de Rutas](#hooks-del-sistema-de-rutas)
15
+ 9. [Ejemplos Prácticos](#ejemplos-prácticos)
16
+ 10. [Compatibilidad y Versionado](#compatibilidad-y-versionado)
17
+
18
+ ## Introducción
19
+
20
+ El framework API SDK JS implementa un sistema de Hooks y Filters similar al sistema de WordPress, permitiendo extender y modificar el comportamiento del framework sin alterar su código base. Este documento enumera todos los hooks disponibles, clasificados por funcionalidad, con información sobre compatibilidad, ejemplos y orden de ejecución.
21
+
22
+ ### Tipos de Hooks
23
+
24
+ - **Action**: Permite ejecutar código en puntos específicos del flujo de ejecución
25
+ - **Filter**: Permite modificar datos antes de que sean utilizados por otros componentes
26
+
27
+ ## Glosario de Términos
28
+
29
+ - **Fingerprint de cliente**: Conjunto de datos únicos que identifican a un cliente, incluyendo IP, user agent, headers, etc.
30
+ - **Rate limiting**: Sistema para limitar la cantidad de solicitudes que un cliente puede hacer en un periodo determinado
31
+ - **Auditoría de seguridad**: Registro de eventos de seguridad para monitoreo y análisis
32
+ - **Hook**: Punto de extensión en el código donde se puede insertar lógica personalizada
33
+ - **Action**: Tipo de hook que permite ejecutar código sin modificar valores
34
+ - **Filter**: Tipo de hook que permite modificar valores antes de que sean utilizados
35
+
36
+ ## Referencia Rápida de Hooks
37
+
38
+ | Nombre | Tipo | Versión | Descripción Corta |
39
+ |--------|------|---------|-------------------|
40
+ | `framework_init` | Action | 2.1.0 | Inicialización del framework |
41
+ | `pre_server_start` | Action | 1.0.0 | Antes de iniciar el servidor |
42
+ | `post_server_start` | Action | 1.0.0 | Después de iniciar el servidor |
43
+ | `pre_route_load` | Action | 1.0.0 | Antes de cargar rutas |
44
+ | `pre_controller_load` | Action | 1.0.0 | Antes de cargar controladores |
45
+ | `firewall_request_received` | Action | 2.2.0 | Recibida solicitud antes de firewall |
46
+ | `firewall_ip_blocked` | Action | 2.2.0 | IP bloqueada por firewall |
47
+ | `firewall_rule_triggered` | Action | 2.2.0 | Activada regla de firewall |
48
+ | `firewall_request_blocked` | Action | 2.2.0 | Solicitud bloqueada por firewall |
49
+ | `firewall_request_monitored` | Action | 2.2.0 | Solicitud monitoreada por firewall |
50
+ | `firewall_request_allowed` | Action | 2.2.0 | Solicitud permitida por firewall |
51
+ | `firewall_whitelist_updated` | Action | 2.2.0 | Actualizada lista blanca |
52
+ | `firewall_blacklist_updated` | Action | 2.2.0 | Actualizada lista negra |
53
+ | `before_request_processing` | Action | 2.1.0 | Antes de procesar solicitud |
54
+ | `request_validation` | Action | 2.1.0 | Validación de solicitud |
55
+ | `apply_rate_limiting` | Action | 2.1.0 | Aplicar limitación de tasa |
56
+ | `security_audit` | Action | 2.1.0 | Auditoría de seguridad |
57
+ | `security_attack_detected` | Action | 2.1.0 | Ataque detectado |
58
+ | `security_ip_blocked` | Action | 2.1.0 | IP bloqueada por seguridad |
59
+ | `security_log_recorded` | Action | 2.1.0 | Registro de seguridad |
60
+ | `rate_limit_exceeded` | Action | 2.1.0 | Límite de tasa excedido |
61
+ | `client_fingerprint` | Filter | 2.1.0 | Huella digital del cliente |
62
+ | `enhanced_client_fingerprint` | Filter | 2.1.0 | Huella digital mejorada |
63
+ | `modify_rate_limit_behavior` | Filter | 2.1.0 | Comportamiento de limitación |
64
+ | `post_request_processing` | Action | 2.1.0 | Después de procesar solicitud |
65
+
66
+ ---
67
+
68
+ ## Hooks del Firewall
69
+
70
+ ### `firewall_request_received`
71
+ - **Tipo**: Action
72
+ - **Versión**: 2.2.0+
73
+ - **Descripción**: Se ejecuta cuando se recibe una solicitud antes de cualquier procesamiento de firewall
74
+ - **Parámetros**: `(req, res)`
75
+ - `req`: Objeto de solicitud HTTP
76
+ - `res`: Objeto de respuesta HTTP
77
+ - **Respuesta**: Ninguna
78
+ - **Localización**: `lib/middleware/firewall.js` (línea ~280)
79
+
80
+ ### `firewall_ip_blocked`
81
+ - **Tipo**: Action
82
+ - **Versión**: 2.2.0+
83
+ - **Descripción**: Se ejecuta cuando una IP es bloqueada por el firewall
84
+ - **Parámetros**: `(ip, reason, req, res)`
85
+ - `ip`: Dirección IP bloqueada
86
+ - `reason`: Razón del bloqueo
87
+ - `req`: Objeto de solicitud HTTP
88
+ - `res`: Objeto de respuesta HTTP
89
+ - **Respuesta**: Ninguna
90
+ - **Localización**: `lib/middleware/firewall.js` (línea ~293)
91
+
92
+ ### `firewall_rule_triggered`
93
+ - **Tipo**: Action
94
+ - **Versión**: 2.2.0+
95
+ - **Descripción**: Se ejecuta cuando se activa una regla de firewall
96
+ - **Parámetros**: `(rule, clientIP, req)`
97
+ - `rule`: Objeto con información de la regla activada
98
+ - `clientIP`: IP del cliente que activó la regla
99
+ - `req`: Objeto de solicitud HTTP
100
+ - **Respuesta**: Ninguna
101
+ - **Localización**: `lib/middleware/firewall.js` (línea ~301)
102
+
103
+ ### `firewall_request_blocked`
104
+ - **Tipo**: Action
105
+ - **Versión**: 2.2.0+
106
+ - **Descripción**: Se ejecuta cuando una solicitud es bloqueada por una regla de firewall
107
+ - **Parámetros**: `(rule, clientIP, req, res)`
108
+ - `rule`: Objeto con información de la regla que bloqueó la solicitud
109
+ - `clientIP`: IP del cliente cuya solicitud fue bloqueada
110
+ - `req`: Objeto de solicitud HTTP
111
+ - `res`: Objeto de respuesta HTTP
112
+ - **Respuesta**: Ninguna
113
+ - **Localización**: `lib/middleware/firewall.js` (línea ~312)
114
+
115
+ ### `firewall_request_monitored`
116
+ - **Tipo**: Action
117
+ - **Versión**: 2.2.0+
118
+ - **Descripción**: Se ejecuta cuando una solicitud es monitoreada por una regla de firewall
119
+ - **Parámetros**: `(rule, clientIP, req)`
120
+ - `rule`: Objeto con información de la regla que monitorea la solicitud
121
+ - `clientIP`: IP del cliente cuya solicitud es monitoreada
122
+ - `req`: Objeto de solicitud HTTP
123
+ - **Respuesta**: Ninguna
124
+ - **Localización**: `lib/middleware/firewall.js` (línea ~323)
125
+
126
+ ### `firewall_request_allowed`
127
+ - **Tipo**: Action
128
+ - **Versión**: 2.2.0+
129
+ - **Descripción**: Se ejecuta cuando una solicitud pasa todas las verificaciones de firewall y es permitida
130
+ - **Parámetros**: `(req, res)`
131
+ - `req`: Objeto de solicitud HTTP
132
+ - `res`: Objeto de respuesta HTTP
133
+ - **Respuesta**: Ninguna
134
+ - **Localización**: `lib/middleware/firewall.js` (línea ~329)
135
+
136
+ ### `firewall_whitelist_updated`
137
+ - **Tipo**: Action
138
+ - **Versión**: 2.2.0+
139
+ - **Descripción**: Se ejecuta cuando se actualiza la lista blanca (whitelist) de IPs
140
+ - **Parámetros**: `(ip, action, whitelist)`
141
+ - `ip`: IP que se agregó/removió
142
+ - `action`: Acción realizada ('added' o 'removed')
143
+ - `whitelist`: Array actualizado de IPs en la whitelist
144
+ - **Respuesta**: Ninguna
145
+ - **Localización**: `lib/middleware/firewall.js` (línea ~357)
146
+
147
+ ### `firewall_blacklist_updated`
148
+ - **Tipo**: Action
149
+ - **Versión**: 2.2.0+
150
+ - **Descripción**: Se ejecuta cuando se actualiza la lista negra (blacklist) de IPs
151
+ - **Parámetros**: `(ip, action, blacklist)`
152
+ - `ip`: IP que se agregó/removió
153
+ - `action`: Acción realizada ('added' o 'removed')
154
+ - `blacklist`: Array actualizado de IPs en la blacklist
155
+ - **Respuesta**: Ninguna
156
+ - **Localización**: `lib/middleware/firewall.js` (línea ~370)
157
+
158
+ ---
159
+
160
+ ## Hooks del Servidor
161
+
162
+ ### `framework_init`
163
+ - **Tipo**: Action
164
+ - **Versión**: 2.1.0+
165
+ - **Descripción**: Se ejecuta cuando se inicializa el framework
166
+ - **Parámetros**: Ninguno
167
+ - **Respuesta**: Ninguna
168
+ - **Localización**: `index.js` (línea ~69)
169
+
170
+ ### `pre_server_start`
171
+ - **Tipo**: Action
172
+ - **Versión**: 1.0.0+
173
+ - **Descripción**: Se ejecuta antes de iniciar el servidor
174
+ - **Parámetros**: `(server)`
175
+ - `server`: Instancia del servidor que va a iniciarse
176
+ - **Respuesta**: Ninguna
177
+ - **Localización**: `lib/core/server.js` (línea ~164) y `lib/core/securityEnhancedServer.js` (línea ~501)
178
+
179
+ ### `post_server_start`
180
+ - **Tipo**: Action
181
+ - **Versión**: 1.0.0+
182
+ - **Descripción**: Se ejecuta después de iniciar el servidor
183
+ - **Parámetros**: `(server)`
184
+ - `server`: Instancia del servidor que acaba de iniciarse
185
+ - **Respuesta**: Ninguna
186
+ - **Localización**: `lib/core/server.js` (línea ~176) y `lib/core/securityEnhancedServer.js` (línea ~507)
187
+
188
+ ---
189
+
190
+ ## Hooks del Sistema de Carga
191
+
192
+ ### `pre_route_load`
193
+ - **Tipo**: Action
194
+ - **Versión**: 1.0.0+
195
+ - **Descripción**: Se ejecuta antes de cargar rutas desde un archivo
196
+ - **Parámetros**: `(filePath, server)`
197
+ - `filePath`: Ruta al archivo de rutas que se va a cargar
198
+ - `server`: Instancia del servidor al que se van a cargar las rutas
199
+ - **Respuesta**: Ninguna
200
+ - **Localización**: `lib/loader/routeLoader.js` (línea ~26)
201
+
202
+ ### `pre_controller_load`
203
+ - **Tipo**: Action
204
+ - **Versión**: 1.0.0+
205
+ - **Descripción**: Se ejecuta antes de cargar un controlador desde un archivo
206
+ - **Parámetros**: `(controllerPath)`
207
+ - `controllerPath`: Ruta al archivo del controlador que se va a cargar
208
+ - **Respuesta**: Ninguna
209
+ - **Localización**: `lib/loader/controllerLoader.js` (línea ~26)
210
+
211
+ ---
212
+
213
+ ## Hooks del Sistema de Seguridad
214
+
215
+ ### `before_request_processing`
216
+ - **Tipo**: Action
217
+ - **Versión**: 2.1.0+
218
+ - **Descripción**: Se ejecuta antes de procesar una solicitud, para detección de posibles ataques. Este hook también puede usarse como filter para modificar el resultado del procesamiento.
219
+ - **Parámetros**: `(req, res)`
220
+ - `req`: Objeto de solicitud HTTP
221
+ - `res`: Objeto de respuesta HTTP
222
+ - **Respuesta**: Booleano que indica si continuar el procesamiento
223
+ - **Localización**: `lib/core/securityEnhancedServer.js` (línea ~44)
224
+
225
+ ### `request_validation`
226
+ - **Tipo**: Action
227
+ - **Versión**: 2.1.0+
228
+ - **Descripción**: Se ejecuta para aplicar validaciones de seguridad a la solicitud
229
+ - **Parámetros**: `(req, res)`
230
+ - `req`: Objeto de solicitud HTTP
231
+ - `res`: Objeto de respuesta HTTP
232
+ - **Respuesta**: Booleano que indica si la solicitud pasó la validación
233
+ - **Localización**: `lib/core/securityEnhancedServer.js` (línea ~86)
234
+
235
+ ### `apply_rate_limiting`
236
+ - **Tipo**: Action
237
+ - **Versión**: 2.1.0+
238
+ - **Descripción**: Se ejecuta para aplicar limitación de tasa basada en huella digital
239
+ - **Parámetros**: `(req, res, next)`
240
+ - `req`: Objeto de solicitud HTTP
241
+ - `res`: Objeto de respuesta HTTP
242
+ - `next`: Función next para continuar con el middleware
243
+ - **Respuesta**: Ninguna
244
+ - **Localización**: `lib/core/securityEnhancedServer.js` (línea ~113)
245
+
246
+ ### `security_audit`
247
+ - **Tipo**: Action
248
+ - **Versión**: 2.1.0+
249
+ - **Descripción**: Se ejecuta para auditoría de seguridad
250
+ - **Parámetros**: `(req, res, action, details)`
251
+ - `req`: Objeto de solicitud HTTP
252
+ - `res`: Objeto de respuesta HTTP
253
+ - `action`: Acción de seguridad realizada
254
+ - `details`: Detalles adicionales sobre el evento de seguridad
255
+ - **Respuesta**: Ninguna
256
+ - **Localización**: `lib/core/securityEnhancedServer.js` (línea ~128)
257
+
258
+ ### `security_attack_detected`
259
+ - **Tipo**: Action
260
+ - **Versión**: 2.1.0+
261
+ - **Descripción**: Se ejecuta cuando se detecta un posible ataque
262
+ - **Parámetros**: `(attackResult, req, res)`
263
+ - `attackResult`: Resultado de la detección del ataque
264
+ - `req`: Objeto de solicitud HTTP
265
+ - `res`: Objeto de respuesta HTTP
266
+ - **Respuesta**: Ninguna
267
+ - **Localización**: `lib/core/securityEnhancedServer.js` (línea ~50)
268
+
269
+ ### `security_ip_blocked`
270
+ - **Tipo**: Action
271
+ - **Versión**: 2.1.0+
272
+ - **Descripción**: Se ejecuta cuando una IP es bloqueada por razones de seguridad
273
+ - **Parámetros**: `(clientIP, blockInfo, req, res)`
274
+ - `clientIP`: IP que fue bloqueada
275
+ - `blockInfo`: Información sobre el bloqueo
276
+ - `req`: Objeto de solicitud HTTP
277
+ - `res`: Objeto de respuesta HTTP
278
+ - **Respuesta**: Ninguna
279
+ - **Localización**: `lib/core/securityEnhancedServer.js` (línea ~94)
280
+
281
+ ### `security_log_recorded`
282
+ - **Tipo**: Action
283
+ - **Versión**: 2.1.0+
284
+ - **Descripción**: Se ejecuta cuando se registra un evento de seguridad
285
+ - **Parámetros**: `(auditLog)`
286
+ - `auditLog`: Objeto con información del evento de auditoría
287
+ - **Respuesta**: Ninguna
288
+ - **Localización**: `lib/core/securityEnhancedServer.js` (línea ~138)
289
+
290
+ ### `rate_limit_exceeded`
291
+ - **Tipo**: Action
292
+ - **Versión**: 2.1.0+
293
+ - **Descripción**: Se ejecuta cuando se excede el límite de tasa
294
+ - **Parámetros**: `(clientId, req, res)`
295
+ - `clientId`: ID del cliente que excedió el límite
296
+ - `req`: Objeto de solicitud HTTP
297
+ - `res`: Objeto de respuesta HTTP
298
+ - **Respuesta**: Ninguna
299
+ - **Localización**: `lib/core/securityEnhancedServer.js` (línea ~176)
300
+
301
+ ---
302
+
303
+ ## Hooks del Sistema de Rutas
304
+
305
+ ### `client_fingerprint`
306
+ - **Tipo**: Filter
307
+ - **Versión**: 2.1.0+
308
+ - **Descripción**: Permite modificar la huella digital del cliente
309
+ - **Parámetros**: `(fingerprint, req)`
310
+ - `fingerprint`: Objeto con la huella digital actual del cliente
311
+ - `req`: Objeto de solicitud HTTP
312
+ - **Respuesta**: Objeto con la huella digital modificada
313
+ - **Localización**: `lib/core/securityEnhancedServer.js` (línea ~59)
314
+
315
+ ### `enhanced_client_fingerprint`
316
+ - **Tipo**: Filter
317
+ - **Versión**: 2.1.0+
318
+ - **Descripción**: Permite modificar la huella digital mejorada del cliente
319
+ - **Parámetros**: `(enhancedFingerprint, req)`
320
+ - `enhancedFingerprint`: Objeto con la huella digital mejorada actual
321
+ - `req`: Objeto de solicitud HTTP
322
+ - **Respuesta**: Objeto con la huella digital mejorada modificada
323
+ - **Localización**: `lib/core/securityEnhancedServer.js` (línea ~82)
324
+
325
+ ### `modify_rate_limit_behavior`
326
+ - **Tipo**: Filter
327
+ - **Versión**: 2.1.0+
328
+ - **Descripción**: Permite modificar el comportamiento de limitación de tasa
329
+ - **Parámetros**: `(rateLimitConfig, req)`
330
+ - `rateLimitConfig`: Objeto con la configuración actual de limitación de tasa
331
+ - `req`: Objeto de solicitud HTTP
332
+ - **Respuesta**: Objeto con la configuración modificada de limitación de tasa
333
+ - **Localización**: `lib/core/securityEnhancedServer.js` (línea ~162)
334
+
335
+ ### `before_request_processing` (como Filter)
336
+ - **Tipo**: Filter
337
+ - **Versión**: 2.1.0+
338
+ - **Descripción**: Permite modificar el resultado del procesamiento previo de solicitud
339
+ - **Parámetros**: `(continueProcessing, req, res)`
340
+ - `continueProcessing`: Booleano que indica si continuar el procesamiento
341
+ - `req`: Objeto de solicitud HTTP
342
+ - `res`: Objeto de respuesta HTTP
343
+ - **Respuesta**: Booleano que indica si continuar el procesamiento
344
+ - **Localización**: `lib/core/securityEnhancedServer.js` (línea ~430)
345
+
346
+ ### `post_request_processing`
347
+ - **Tipo**: Action
348
+ - **Versión**: 2.1.0+
349
+ - **Descripción**: Se ejecuta después de procesar una solicitud
350
+ - **Parámetros**: `(req, res)`
351
+ - `req`: Objeto de solicitud HTTP
352
+ - `res`: Objeto de respuesta HTTP
353
+ - **Respuesta**: Ninguna
354
+ - **Localización**: `lib/core/securityEnhancedServer.js` (línea ~444)
355
+
356
+ ---
357
+
358
+ ## Hooks del Sistema MVC
359
+
360
+ ### `template_pre_process`
361
+ - **Tipo**: Filter
362
+ - **Versión**: 2.3.0+
363
+ - **Descripción**: Se ejecuta antes de procesar un template de vista
364
+ - **Parámetros**: `(template, data)`
365
+ - `template`: Cadena con el contenido del template antes de procesar
366
+ - `data`: Objeto con los datos que se pasarán al template
367
+ - **Respuesta**: Cadena con el template modificado antes de procesar
368
+ - **Localización**: `lib/mvc/viewEngine.js` (línea ~178)
369
+
370
+ ### `template_post_process`
371
+ - **Tipo**: Filter
372
+ - **Versión**: 2.3.0+
373
+ - **Descripción**: Se ejecuta después de procesar un template de vista
374
+ - **Parámetros**: `(template, data)`
375
+ - `template`: Cadena con el contenido del template después de procesar
376
+ - `data`: Objeto con los datos que se usaron en el template
377
+ - **Respuesta**: Cadena con el template modificado después de procesar
378
+ - **Localización**: `lib/mvc/viewEngine.js` (línea ~184)
379
+
380
+ ---
381
+
382
+ ## Ejemplos Prácticos
383
+
384
+ ### Ejemplo de Uso de Actions
385
+
386
+ ```javascript
387
+ const { HookSystem } = require('jerk');
388
+ const hooks = new HookSystem();
389
+
390
+ // Registrar un action para registrar solicitudes bloqueadas
391
+ hooks.addAction('firewall_ip_blocked', (ip, reason, req, res) => {
392
+ console.log(`IP bloqueada: ${ip} - Razón: ${reason}`);
393
+ // Aquí puedes añadir lógica adicional como enviar alertas
394
+ });
395
+
396
+ // Registrar un action para auditar solicitudes permitidas
397
+ hooks.addAction('firewall_request_allowed', (req, res) => {
398
+ console.log(`Solicitud permitida: ${req.method} ${req.url}`);
399
+ });
400
+ ```
401
+
402
+ ### Ejemplo de Uso de Filters
403
+
404
+ ```javascript
405
+ const { HookSystem } = require('jerk');
406
+ const hooks = new HookSystem();
407
+
408
+ // Registrar un filter para modificar la huella digital del cliente
409
+ hooks.addFilter('client_fingerprint', (fingerprint, req) => {
410
+ // Añadir información adicional a la huella digital
411
+ return {
412
+ ...fingerprint,
413
+ customField: req.headers['x-custom-header'] || 'unknown',
414
+ processingTime: Date.now()
415
+ };
416
+ });
417
+
418
+ // Registrar un filter para modificar el comportamiento de limitación de tasa
419
+ hooks.addFilter('modify_rate_limit_behavior', (rateLimitConfig, req) => {
420
+ // Ajustar límites para ciertos clientes
421
+ if (req.headers['x-trusted-client']) {
422
+ return {
423
+ ...rateLimitConfig,
424
+ maxRequests: rateLimitConfig.maxRequests * 2 // Duplicar límite para clientes confiables
425
+ };
426
+ }
427
+ return rateLimitConfig;
428
+ });
429
+ ```
430
+
431
+ ### Ejemplo Integrado de Múltiples Hooks
432
+
433
+ ```javascript
434
+ const { APIServer, Firewall, HookSystem, Logger } = require('jerk');
435
+
436
+ async function startSecureAPIWithHooks() {
437
+ const server = new APIServer({ port: 3000 });
438
+ const logger = new Logger({ level: 'info' });
439
+ const hooks = new HookSystem();
440
+ const firewall = new Firewall({ logger });
441
+
442
+ // Configurar hooks para monitoreo y alertas
443
+ hooks.addAction('firewall_request_blocked', (rule, clientIP, req, res) => {
444
+ logger.warn(`Solicitud bloqueada: ${rule.name} para IP: ${clientIP}`);
445
+ // Enviar alerta si es un ataque grave
446
+ if (rule.name === 'sql_injection') {
447
+ sendSecurityAlert('Ataque de SQL Injection detectado', { ip: clientIP, url: req.url });
448
+ }
449
+ });
450
+
451
+ hooks.addAction('firewall_rule_triggered', (rule, clientIP, req) => {
452
+ logger.info(`Regla activada: ${rule.name} para IP: ${clientIP}`);
453
+ // Incrementar puntuación de amenaza
454
+ incrementThreatScore(clientIP);
455
+ });
456
+
457
+ hooks.addAction('firewall_ip_blocked', (ip, reason, req, res) => {
458
+ logger.error(`IP bloqueada: ${ip} - ${reason}`);
459
+ // Registrar en sistema de seguridad externo
460
+ logSecurityIncident({
461
+ type: 'IP_BLOCKED',
462
+ ip,
463
+ reason,
464
+ timestamp: new Date()
465
+ });
466
+ });
467
+
468
+ // Aplicar firewall al servidor
469
+ server.use(firewall.middleware());
470
+
471
+ server.start();
472
+ }
473
+
474
+ // Funciones auxiliares
475
+ function sendSecurityAlert(message, details) {
476
+ // Lógica para enviar alerta de seguridad
477
+ console.log(`SECURITY ALERT: ${message}`, details);
478
+ }
479
+
480
+ function incrementThreatScore(ip) {
481
+ // Lógica para incrementar puntuación de amenaza
482
+ console.log(`Incrementando puntuación de amenaza para IP: ${ip}`);
483
+ }
484
+
485
+ function logSecurityIncident(incident) {
486
+ // Lógica para registrar incidente de seguridad
487
+ console.log('Incidente de seguridad registrado:', incident);
488
+ }
489
+
490
+ startSecureAPIWithHooks();
491
+ ```
492
+
493
+ ### Ejemplo de Uso de Hooks en el Sistema MVC
494
+
495
+ ```javascript
496
+ const { APIServer, Router, ControllerBase, ViewEngine, HookSystem } = require('jerk');
497
+
498
+ // Crear instancia del sistema de hooks
499
+ const hooks = new HookSystem();
500
+
501
+ // Crear ViewEngine con hooks
502
+ const viewEngine = new ViewEngine({
503
+ viewsPath: './views',
504
+ cacheEnabled: true,
505
+ hooks: hooks // Pasar la instancia de hooks al ViewEngine
506
+ });
507
+
508
+ // Ejemplo de uso de hooks para manipular templates
509
+ hooks.addFilter('template_pre_process', (template, data) => {
510
+ // Añadir información global a todos los templates
511
+ const globalData = {
512
+ siteName: 'Mi Aplicación',
513
+ version: '2.3.0',
514
+ year: new Date().getFullYear()
515
+ };
516
+
517
+ // Inyectar variables globales en el template
518
+ let processedTemplate = template;
519
+ for (const [key, value] of Object.entries(globalData)) {
520
+ const regex = new RegExp(`\\{\\{\\s*${key}\\s*\\}\\}`, 'g');
521
+ processedTemplate = processedTemplate.replace(regex, String(value));
522
+ }
523
+
524
+ return processedTemplate;
525
+ });
526
+
527
+ hooks.addFilter('template_post_process', (template, data) => {
528
+ // Añadir pie de página estándar a todas las vistas procesadas
529
+ return template + `\n<footer>Versión ${data.version || 'desconocida'} - ${new Date().getFullYear()}</footer>`;
530
+ });
531
+
532
+ // Controlador con ejemplo de uso del sistema MVC
533
+ class HomeController extends ControllerBase {
534
+ constructor(options = {}) {
535
+ super({ ...options, viewEngine }); // Usar el ViewEngine con hooks
536
+ }
537
+
538
+ index(req, res) {
539
+ this.set('title', 'Página de Inicio');
540
+ this.set('message', '¡Bienvenido al sistema MVC!');
541
+ this.set('version', '2.3.0');
542
+
543
+ this.render(res, 'home/index');
544
+ }
545
+ }
546
+
547
+ // Configurar servidor
548
+ const server = new APIServer({ port: 3000 });
549
+ const router = new Router();
550
+ const homeController = new HomeController({ viewsPath: './views' });
551
+
552
+ router.get('/', (req, res) => {
553
+ homeController.setRequestResponse(req, res);
554
+ homeController.index(req, res);
555
+ });
556
+
557
+ server.use(router);
558
+ server.start();
559
+ ```
560
+
561
+ ---
562
+
563
+ ## Compatibilidad y Versionado
564
+
565
+ ### Flujo de Ejecución de Hooks
566
+
567
+ 1. **Inicialización del Framework**
568
+ - `framework_init` (v2.1.0+)
569
+
570
+ 2. **Antes de Iniciar el Servidor**
571
+ - `pre_server_start` (v1.0.0+)
572
+
573
+ 3. **Durante el Procesamiento de Solicitudes**
574
+ - `firewall_request_received` (v2.2.0+)
575
+ - `before_request_processing` (v2.1.0+) - Action
576
+ - `before_request_processing` (v2.1.0+) - Filter
577
+ - `request_validation` (v2.1.0+)
578
+ - `apply_rate_limiting` (v2.1.0+)
579
+ - `post_request_processing` (v2.1.0+)
580
+
581
+ 4. **Después de Iniciar el Servidor**
582
+ - `post_server_start` (v1.0.0+)
583
+
584
+ ### Compatibilidad por Versión
585
+
586
+ - **v1.0.0**: Hooks básicos del servidor (`pre_server_start`, `post_server_start`)
587
+ - **v1.0.1**: Hooks del sistema de carga (`pre_route_load`, `pre_controller_load`)
588
+ - **v2.0.0**: No añade nuevos hooks
589
+ - **v2.1.0**: Sistema completo de hooks de seguridad y rutas
590
+ - **v2.2.0**: Hooks específicos del firewall
591
+ - **v2.3.0**: Hooks del sistema MVC (`template_pre_process`, `template_post_process`)
592
+
593
+ ### Notas de Compatibilidad
594
+
595
+ - Los hooks introducidos en versiones posteriores a v2.1.0 dependen del sistema de hooks completo
596
+ - Algunos hooks pueden tener comportamientos diferentes en versiones anteriores
597
+ - Se recomienda verificar la versión del framework antes de usar hooks específicos
598
+ - Los hooks de firewall requieren la versión 2.2.0 o superior del framework
599
+ - Los hooks del sistema MVC requieren la versión 2.3.0 o superior del framework