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