blackcoffee2 2.1.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 (170) hide show
  1. package/CHANGELOG.md +664 -0
  2. package/LICENSE +201 -0
  3. package/NOTICE +25 -0
  4. package/README.md +246 -0
  5. package/apps.zip +0 -0
  6. package/bin/adminclient +105 -0
  7. package/bin/blackcoffee +133 -0
  8. package/cli/admin-users.js +282 -0
  9. package/cli/commands/app.js +561 -0
  10. package/cli/commands/config.js +182 -0
  11. package/cli/commands/db.js +257 -0
  12. package/cli/commands/server.js +200 -0
  13. package/config/applications.json +5 -0
  14. package/config/database.json +28 -0
  15. package/config/database.json.example +23 -0
  16. package/config/server.json +32 -0
  17. package/controllers/admin/AdminController.js +529 -0
  18. package/controllers/admin/AdminViewController.js +90 -0
  19. package/controllers/admin/AuthController.js +293 -0
  20. package/controllers/admin/DatabaseAdminController.js +218 -0
  21. package/core/SQLiteAdapter.js +333 -0
  22. package/core/appLoader.js +385 -0
  23. package/core/databasePoolManager.js +431 -0
  24. package/core/hotReload.js +363 -0
  25. package/data/ADMIN-README.md +145 -0
  26. package/data/CHANGELOG.md +48 -0
  27. package/data/GTK3-NODE-PROPOSALS.md +410 -0
  28. package/data/admin-db.js +150 -0
  29. package/data/admin-gui.js +452 -0
  30. package/data/blackcoffee_admin.db-shm +0 -0
  31. package/data/blackcoffee_admin.db-wal +0 -0
  32. package/data/migrations/001_create_admin_users.sql +33 -0
  33. package/docs/APP_HOOKS_HANDLER.md +432 -0
  34. package/docs/APP_HOOKS_REQUIREMENTS.md +588 -0
  35. package/docs/ARCHITECTURE.md +435 -0
  36. package/docs/CREAR_APP_Y_USAR_POOLS.md +1595 -0
  37. package/docs/EVENTS_APP_MANUAL.md +289 -0
  38. package/docs/INSITU_BINARY_UPLOAD_PROPOSAL.md +186 -0
  39. package/docs/INSITU_FIREWALL_EXCEPTION.md +187 -0
  40. package/docs/ROADMAP.md +242 -0
  41. package/docs/ROADMAP.md.backup +243 -0
  42. package/includes/404-hooks.js +423 -0
  43. package/includes/adminAuth.js +214 -0
  44. package/includes/adminExtension.js +53 -0
  45. package/includes/appHooks.js +302 -0
  46. package/includes/initAdminDb.js +115 -0
  47. package/includes/routeLoader.js +67 -0
  48. package/includes/sessions.js +223 -0
  49. package/issues/001-duplicate-module-loading.md +92 -0
  50. package/manuales/ADMIN_EXTENSION_COMMANDS_MANUAL.md +261 -0
  51. package/manuales/ADMIN_EXTENSION_HOOK_EXAMPLE.md +28 -0
  52. package/manuales/ADMIN_EXTENSION_INTEGRATION_MANUAL.md +232 -0
  53. package/manuales/CACHE_REGEX_COMMANDS.md +136 -0
  54. package/manuales/CACHE_SYSTEM_MAP.md +206 -0
  55. package/manuales/CREACION_DE_CONTROLADORES_INSITU.md +383 -0
  56. package/manuales/QUEUE_CLI_MODULE_MANUAL.md +289 -0
  57. package/manuales/QUEUE_SYSTEM_MANUAL.md +320 -0
  58. package/manuales/ROUTE_CACHE_MODULE_MANUAL.md +205 -0
  59. package/manuales/SESSION_MANAGER_GUIDE.md +529 -0
  60. package/manuales/SESSION_SECURITY_FLAGS.md +174 -0
  61. package/manuales/WAF_MODULE_MANUAL.md +229 -0
  62. package/manuales/after_route_handler_filter_example.md +116 -0
  63. package/manuales/after_route_handler_usage.md +130 -0
  64. package/manuales/an/303/241lisis-completo-insitu-framework.md +213 -0
  65. package/manuales/async_hooks_promises_guide.md +325 -0
  66. package/manuales/before_route_handler_filter_example.md +97 -0
  67. package/manuales/before_route_handler_usage.md +122 -0
  68. package/manuales/hooks_chaining_conditions_guide.md +261 -0
  69. package/manuales/hooks_filters_documentation.md +493 -0
  70. package/manuales/hooks_filters_documentation_en.md +493 -0
  71. package/manuales/hooks_vs_middlewares_comparison.md +87 -0
  72. package/manuales/manual-mvc-completo.md +934 -0
  73. package/manuales/modulos_administracion.md +89 -0
  74. package/manuales/router_execution_points.md +74 -0
  75. package/manuales/static_file_hooks_usage.md +222 -0
  76. package/models/AdminUserModel.js +132 -0
  77. package/package.json +45 -0
  78. package/programatically/PRoutes.js +89 -0
  79. package/programatically/initFlow.js +211 -0
  80. package/public/admin/css/db-pools.css +336 -0
  81. package/public/admin/css/styles.css +310 -0
  82. package/public/admin/database.html +312 -0
  83. package/public/admin/index.html +116 -0
  84. package/public/admin/js/app.js +470 -0
  85. package/public/admin/js/db-pools.js +253 -0
  86. package/public/admin/login.html +278 -0
  87. package/public/assets/css/styles.css +477 -0
  88. package/public/assets/js/main.js +89 -0
  89. package/public/index.html +136 -0
  90. package/public/templates/404.html +158 -0
  91. package/routes/admin-views.json +20 -0
  92. package/routes/admin.json +38 -0
  93. package/routes/auth.json +32 -0
  94. package/routes/static.json +18 -0
  95. package/server.js +299 -0
  96. package/test-aplicacion.con-logisession/BlackCoffee.js +226 -0
  97. package/test-aplicacion.con-logisession/SSL_SETUP.md +53 -0
  98. package/test-aplicacion.con-logisession/certs/ca-certificate.pem +32 -0
  99. package/test-aplicacion.con-logisession/certs/ca-private-key.pem +52 -0
  100. package/test-aplicacion.con-logisession/certs/certificate-2048.pem +22 -0
  101. package/test-aplicacion.con-logisession/certs/certificate.pem +32 -0
  102. package/test-aplicacion.con-logisession/certs/private-key-2048.pem +28 -0
  103. package/test-aplicacion.con-logisession/certs/private-key.pem +52 -0
  104. package/test-aplicacion.con-logisession/config/iaQueueSetup.js +84 -0
  105. package/test-aplicacion.con-logisession/config/qwen-rules.json +39 -0
  106. package/test-aplicacion.con-logisession/controllers/analyticsController.js +117 -0
  107. package/test-aplicacion.con-logisession/controllers/auth/AdminAuthController.js +142 -0
  108. package/test-aplicacion.con-logisession/controllers/auth/AuthController.js +439 -0
  109. package/test-aplicacion.con-logisession/controllers/auth/AuthViewController.js +223 -0
  110. package/test-aplicacion.con-logisession/controllers/endpointController.js +66 -0
  111. package/test-aplicacion.con-logisession/controllers/example.js +183 -0
  112. package/test-aplicacion.con-logisession/controllers/iaQueueController.js +367 -0
  113. package/test-aplicacion.con-logisession/controllers/queueController.js +206 -0
  114. package/test-aplicacion.con-logisession/controllers/qwenQueueController.js +197 -0
  115. package/test-aplicacion.con-logisession/controllers/test.js +0 -0
  116. package/test-aplicacion.con-logisession/controllers/tracking/EventsNoFinishController.js +78 -0
  117. package/test-aplicacion.con-logisession/controllers/tracking/TrackingController.js +412 -0
  118. package/test-aplicacion.con-logisession/controllers/tracking/TrackingControllerWithLoadModel.js +437 -0
  119. package/test-aplicacion.con-logisession/hooks/admin-hooks.js +20 -0
  120. package/test-aplicacion.con-logisession/hooks/general-hooks.js +97 -0
  121. package/test-aplicacion.con-logisession/hooks/queue-hooks.js +64 -0
  122. package/test-aplicacion.con-logisession/hooks/route-directory-hooks.js +38 -0
  123. package/test-aplicacion.con-logisession/hooks/security-hooks.js +24 -0
  124. package/test-aplicacion.con-logisession/insitu-admin-client/README.md +69 -0
  125. package/test-aplicacion.con-logisession/insitu-admin-client/package.json +23 -0
  126. package/test-aplicacion.con-logisession/insitu-admin-client.js +257 -0
  127. package/test-aplicacion.con-logisession/models/ExampleModel.js +88 -0
  128. package/test-aplicacion.con-logisession/models/QueueJobModel.js +263 -0
  129. package/test-aplicacion.con-logisession/models/TokenModel.js +207 -0
  130. package/test-aplicacion.con-logisession/models/auth/AuthModel.js +66 -0
  131. package/test-aplicacion.con-logisession/models/auth/UserModel.js +189 -0
  132. package/test-aplicacion.con-logisession/models/tracking/CompletedCartModel.js +213 -0
  133. package/test-aplicacion.con-logisession/models/tracking/EventModel.js +366 -0
  134. package/test-aplicacion.con-logisession/models/tracking/EventsNoFinishModel.js +131 -0
  135. package/test-aplicacion.con-logisession/models/tracking/SessionModel.js +360 -0
  136. package/test-aplicacion.con-logisession/models/tracking/SiteFlowModel.js +286 -0
  137. package/test-aplicacion.con-logisession/models/tracking/TokenModel.js +207 -0
  138. package/test-aplicacion.con-logisession/package-lock.json +3313 -0
  139. package/test-aplicacion.con-logisession/package.json +32 -0
  140. package/test-aplicacion.con-logisession/public/blackcoffee-welcome/index.html +1339 -0
  141. package/test-aplicacion.con-logisession/public/css/style.css +64 -0
  142. package/test-aplicacion.con-logisession/public/ejemplo-estatica/index.html +18 -0
  143. package/test-aplicacion.con-logisession/public/ejemplo-estatica/script.js +16 -0
  144. package/test-aplicacion.con-logisession/public/ejemplo-estatica/styles.css +43 -0
  145. package/test-aplicacion.con-logisession/public/images/logo.svg +7 -0
  146. package/test-aplicacion.con-logisession/public/js/main.js +67 -0
  147. package/test-aplicacion.con-logisession/routes/analytics-routes.json +8 -0
  148. package/test-aplicacion.con-logisession/routes/auth-routes.json +98 -0
  149. package/test-aplicacion.con-logisession/routes/blackcoffee-welcome-routes.json +20 -0
  150. package/test-aplicacion.con-logisession/routes/duplicate-test-routes.json.disabled +16 -0
  151. package/test-aplicacion.con-logisession/routes/ejemplo-estatica-routes.json +11 -0
  152. package/test-aplicacion.con-logisession/routes/endpoints-routes.json +8 -0
  153. package/test-aplicacion.con-logisession/routes/ia-queue-routes.json +26 -0
  154. package/test-aplicacion.con-logisession/routes/product-routes.json.disabled +20 -0
  155. package/test-aplicacion.con-logisession/routes/queue-routes.json +32 -0
  156. package/test-aplicacion.con-logisession/routes/qwen-routes.json +14 -0
  157. package/test-aplicacion.con-logisession/routes/static-routes.json +29 -0
  158. package/test-aplicacion.con-logisession/routes/tracking-routes.json +58 -0
  159. package/test-aplicacion.con-logisession/routes/tracking-with-loadmodel-routes.json +51 -0
  160. package/test-aplicacion.con-logisession/utils/dbAdapter.js +88 -0
  161. package/test-aplicacion.con-logisession/utils/qbWrapper.js +4 -0
  162. package/test-aplicacion.con-logisession/utils/queueProcessor.js +305 -0
  163. package/test-aplicacion.con-logisession/utils/qwenRulesService.js +131 -0
  164. package/test-aplicacion.con-logisession/utils/tokenHelper.js +22 -0
  165. package/test-aplicacion.con-logisession/views/auth/dashboard.html +443 -0
  166. package/test-aplicacion.con-logisession/views/auth/forgot-password.html +200 -0
  167. package/test-aplicacion.con-logisession/views/auth/login.html +213 -0
  168. package/test-aplicacion.con-logisession/views/auth/register.html +294 -0
  169. package/test-aplicacion.con-logisession/views/contact/form.html +47 -0
  170. package/test-aplicacion.con-logisession/views/products/index.html +39 -0
@@ -0,0 +1,432 @@
1
+ # App Hooks Handler - Documentación Técnica
2
+
3
+ ## 📋 Descripción General
4
+
5
+ Este documento explica la función y carga del sistema de hooks para aplicaciones en BlackCoffee App Server.
6
+
7
+ ---
8
+
9
+ ## 🗂️ Archivos Relacionados
10
+
11
+ En BlackCoffee existen **DOS** archivos relacionados con los hooks de aplicaciones:
12
+
13
+ ### 1. `includes/appHooks.js` - EL QUE SE USA ACTUALMENTE
14
+
15
+ **Ubicación:** `/home/bds/blackcoffeeRC/includes/appHooks.js`
16
+
17
+ **Estado:** ✅ Activo y en uso
18
+
19
+ **Función:** Registrar los 13 hooks para el ciclo de vida de aplicaciones.
20
+
21
+ ### 2. `app-hooks-handler.js` - Handler Oficial de Insitu
22
+
23
+ **Ubicación:** `node_modules/insitu-js/lib/core/hooks-handlers/app-hooks-handler.js`
24
+
25
+ **Estado:** ❌ Creado pero NO usado aún
26
+
27
+ **Función:** Centralizar el manejo de hooks de aplicaciones en Insitu Framework.
28
+
29
+ ---
30
+
31
+ ## 🔧 `includes/appHooks.js` - Implementación Actual
32
+
33
+ ### Función Principal
34
+
35
+ Registrar todos los hooks necesarios para la gestión de aplicaciones en BlackCoffee App Server.
36
+
37
+ ### Los 13 Hooks Registrados
38
+
39
+ #### 1. Application Lifecycle (6 hooks)
40
+
41
+ ```javascript
42
+ hooks.addAction('app_deploying', (manifest, tempPath) => {
43
+ console.log(`📦 [APP] Desplegando ${manifest.name} v${manifest.version}`);
44
+ });
45
+
46
+ hooks.addAction('app_deployed', (manifest, tempPath, deployedPath) => {
47
+ console.log(`✅ [APP] ${manifest.name} v${manifest.version} desplegado en ${deployedPath}`);
48
+ });
49
+
50
+ hooks.addAction('app_undeploying', (appName, version) => {
51
+ console.log(`🗑️ [APP] Removiendo ${appName} v${version}`);
52
+ });
53
+
54
+ hooks.addAction('app_undeployed', (appName, version, removedPath) => {
55
+ console.log(`❌ [APP] ${appName} v${version} removido de ${removedPath}`);
56
+ });
57
+
58
+ hooks.addAction('app_starting', (appName, version) => {
59
+ console.log(`▶️ [APP] Iniciando ${appName} v${version}`);
60
+ });
61
+
62
+ hooks.addAction('app_started', (appName, version) => {
63
+ console.log(`✅ [APP] ${appName} v${version} iniciada correctamente`);
64
+ });
65
+
66
+ hooks.addAction('app_stopping', (appName, version) => {
67
+ console.log(`⏹️ [APP] Deteniendo ${appName} v${version}`);
68
+ });
69
+
70
+ hooks.addAction('app_stopped', (appName, version) => {
71
+ console.log(`⏹️ [APP] ${appName} v${version} detenida`);
72
+ });
73
+
74
+ hooks.addAction('app_restarting', (appName, version) => {
75
+ console.log(`🔄 [APP] Reiniciando ${appName} v${version}`);
76
+ });
77
+
78
+ hooks.addAction('app_restarted', (appName, version) => {
79
+ console.log(`✅ [APP] ${appName} v${version} reiniciada`);
80
+ });
81
+ ```
82
+
83
+ #### 2. Manifest Validation (2 hooks)
84
+
85
+ ```javascript
86
+ hooks.addFilter('app_manifest_validating', (isValid, manifest, errors) => {
87
+ // Validaciones obligatorias básicas
88
+ const requiredFields = ['name', 'version'];
89
+
90
+ for (const field of requiredFields) {
91
+ if (!manifest[field]) {
92
+ errors.push(`Campo requerido faltante: ${field}`);
93
+ return false;
94
+ }
95
+ }
96
+
97
+ // Validar que name sea un string válido para URL
98
+ if (!/^[a-z0-9][a-z0-9-]*[a-z0-9]$|^[a-z0-9]$/.test(manifest.name)) {
99
+ errors.push('El nombre de la app debe ser alfanumérico (minúsculas)');
100
+ return false;
101
+ }
102
+
103
+ return isValid;
104
+ }, 10);
105
+
106
+ hooks.addAction('app_manifest_validated', (manifest, isValid, errors) => {
107
+ if (!isValid) {
108
+ console.error(`❌ [MANIFEST] ${manifest.name}: ${errors.join(', ')}`);
109
+ } else {
110
+ console.log(`✅ [MANIFEST] ${manifest.name} v${manifest.version} validado correctamente`);
111
+ }
112
+ });
113
+ ```
114
+
115
+ #### 3. Route Registration (2 hooks)
116
+
117
+ ```javascript
118
+ hooks.addFilter('before_app_routes_register', (routeConfig, appName, version) => {
119
+ // Validar que appName y version sean strings válidos
120
+ if (!appName || appName === 'unknown' || !version || version === 'unknown') {
121
+ console.warn(`[HOOK] Warning: appName o version no válidos`);
122
+ return routeConfig;
123
+ }
124
+
125
+ // Obtener prefijo del manifest o generar automático
126
+ const prefix = `/${appName}/${version}`;
127
+
128
+ // Evitar doble prefijo
129
+ if (!routeConfig.path.startsWith(prefix)) {
130
+ routeConfig.path = `${prefix}${routeConfig.path}`;
131
+ }
132
+
133
+ // Agregar metadata de la app a la ruta
134
+ routeConfig.app = {
135
+ name: appName,
136
+ version: version,
137
+ deployedAt: new Date().toISOString()
138
+ };
139
+
140
+ return routeConfig;
141
+ }, 10, 3); // priority=10, acceptedArgs=3
142
+
143
+ hooks.addAction('after_app_routes_register', (routes, appName, version) => {
144
+ console.log(`📍 [ROUTES] ${routes.length} rutas registradas para ${appName} v${version}`);
145
+ });
146
+ ```
147
+
148
+ #### 4. Dependency Management (2 hooks)
149
+
150
+ ```javascript
151
+ hooks.addAction('app_dependencies_checking', (dependencies, appName, version) => {
152
+ if (dependencies && Object.keys(dependencies).length > 0) {
153
+ console.log(`📦 [DEPS] Verificando dependencias para ${appName} v${version}`);
154
+ }
155
+ });
156
+
157
+ hooks.addAction('app_dependencies_installed', (appName, version, success) => {
158
+ if (success) {
159
+ console.log(`✅ [DEPS] Dependencias instaladas para ${appName} v${version}`);
160
+ } else {
161
+ console.warn(`⚠️ [DEPS] Error instalando dependencias para ${appName} v${version}`);
162
+ }
163
+ });
164
+ ```
165
+
166
+ #### 5. Configuration (2 hooks)
167
+
168
+ ```javascript
169
+ hooks.addFilter('app_config_loading', (config, appName, version) => {
170
+ // Aquí se puede fusionar con configuración global si existe
171
+ return config;
172
+ }, 10);
173
+
174
+ hooks.addAction('app_config_loaded', (config, appName, version) => {
175
+ console.log(`⚙️ [CONFIG] Configuración cargada para ${appName} v${version}`);
176
+ });
177
+ ```
178
+
179
+ ---
180
+
181
+ ## 📥 ¿Cómo se Carga en BlackCoffee?
182
+
183
+ ### Archivo: `server.js`
184
+
185
+ #### Paso 1: Import (Línea 13)
186
+
187
+ ```javascript
188
+ const { registerAppHooks } = require('./includes/appHooks');
189
+ ```
190
+
191
+ #### Paso 2: Registro (Líneas 50-53)
192
+
193
+ ```javascript
194
+ // Crear instancia del servidor
195
+ const server = new APIServer(config);
196
+
197
+ // Registrar hooks de App Server
198
+ registerAppHooks(server.hooks);
199
+
200
+ // Inicializar AppLoader y exponer globalmente
201
+ const appLoader = new AppLoader(server);
202
+ global.appLoader = appLoader;
203
+ server.appLoader = appLoader;
204
+
205
+ console.log('📦 AppLoader inicializado\n');
206
+ ```
207
+
208
+ ---
209
+
210
+ ## 🔄 Flujo de Carga Completo
211
+
212
+ ```
213
+ 1. server.js se ejecuta
214
+
215
+ 2. Importa registerAppHooks desde includes/appHooks.js
216
+
217
+ 3. Crea instancia de APIServer (Insitu Framework)
218
+
219
+ 4. Llama registerAppHooks(server.hooks)
220
+
221
+ 5. registerAppHooks registra los 13 hooks en el HookSystem de Insitu
222
+
223
+ 6. Hooks quedan disponibles para todo el servidor
224
+
225
+ 7. appLoader.js usa los hooks cuando carga aplicaciones:
226
+ - hooks.applyFilters('before_app_routes_register', ...)
227
+ - hooks.doAction('after_app_routes_register', ...)
228
+ - hooks.doAction('app_deploying', ...)
229
+ - hooks.doAction('app_manifest_validated', ...)
230
+ - etc.
231
+ ```
232
+
233
+ ---
234
+
235
+ ## 📊 Ejemplo de Uso en appLoader.js
236
+
237
+ ### Archivo: `core/appLoader.js`
238
+
239
+ ```javascript
240
+ async loadAppRoutes(routesPath, appName, version) {
241
+ const hooks = this.hooks;
242
+ const appPath = path.join(this.appsDir, appName, version);
243
+
244
+ try {
245
+ let routesData = fs.readFileSync(routesPath, 'utf8');
246
+
247
+ // Reemplazar __APP_DIR__ con la ruta real de la aplicación
248
+ routesData = routesData.replace(/__APP_DIR__/g, appPath);
249
+
250
+ const routes = JSON.parse(routesData);
251
+
252
+ if (!Array.isArray(routes)) {
253
+ throw new Error('El archivo de rutas debe contener un array');
254
+ }
255
+
256
+ console.log(`📍 Cargando ${routes.length} rutas para ${appName} v${version}...`);
257
+
258
+ for (const route of routes) {
259
+ // Crear ruta modificada con prefijo
260
+ const modifiedRoute = { ...route };
261
+ const prefix = `/${appName}/${version}`;
262
+
263
+ // Evitar doble prefijo
264
+ if (!modifiedRoute.path.startsWith(prefix)) {
265
+ modifiedRoute.path = `${prefix}${modifiedRoute.path}`;
266
+ }
267
+
268
+ // Agregar metadata de la app a la ruta
269
+ modifiedRoute.app = {
270
+ name: appName,
271
+ version: version,
272
+ deployedAt: new Date().toISOString()
273
+ };
274
+
275
+ // Disparar hook filter para permitir modificaciones adicionales
276
+ // applyFilters(hookName, value, ...additionalArgs)
277
+ // acceptedArgs debe ser 3 (routeConfig, appName, version)
278
+ const finalRoute = hooks.applyFilters(
279
+ 'before_app_routes_register',
280
+ modifiedRoute,
281
+ appName,
282
+ version
283
+ );
284
+
285
+ console.log(` Registrando: ${finalRoute.method} ${finalRoute.path}`);
286
+
287
+ // Registrar ruta en el servidor
288
+ this.server.addRoute(finalRoute);
289
+ }
290
+
291
+ // Disparar hook after_app_routes_register
292
+ hooks.doAction('after_app_routes_register', routes, appName, version);
293
+
294
+ } catch (error) {
295
+ console.error(`❌ Error cargando rutas: ${error.message}`);
296
+ throw error;
297
+ }
298
+ }
299
+ ```
300
+
301
+ ---
302
+
303
+ ## 🆚 Comparación: appHooks.js vs app-hooks-handler.js
304
+
305
+ | Aspecto | `includes/appHooks.js` | `app-hooks-handler.js` (Insitu) |
306
+ |---------|----------------------|--------------------------------|
307
+ | **Ubicación** | BlackCoffee local | Insitu Framework |
308
+ | **Estado** | ✅ Activo y en uso | ❌ Creado pero NO usado |
309
+ | **Propósito** | Registrar hooks específicos | Centralizar handlers |
310
+ | **Carga** | `server.js` línea 13 | No importado |
311
+ | **Hooks** | 13 hooks registrados | 3 métodos handler |
312
+ | **Dependencia** | Ninguna | Requiere Insitu v1.2.1+ |
313
+
314
+ ---
315
+
316
+ ## 🎯 Handler Oficial de Insitu (NO USADO)
317
+
318
+ ### Archivo: `node_modules/insitu-js/lib/core/hooks-handlers/app-hooks-handler.js`
319
+
320
+ ### Métodos Disponibles
321
+
322
+ ```javascript
323
+ class AppHooksHandler {
324
+ /**
325
+ * Dispara el hook antes de registrar las rutas de una aplicación
326
+ */
327
+ static handleBeforeAppRouteRegister(server, routeConfig, appName, version) {
328
+ if (server.hooks) {
329
+ return server.hooks.applyFilters(
330
+ 'before_app_routes_register',
331
+ routeConfig,
332
+ appName,
333
+ version
334
+ );
335
+ }
336
+ return routeConfig;
337
+ }
338
+
339
+ /**
340
+ * Dispara el hook después de registrar las rutas de una aplicación
341
+ */
342
+ static handleAfterAppRoutesRegister(server, routes, appName, version) {
343
+ if (server.hooks) {
344
+ server.hooks.doAction('after_app_routes_register', routes, appName, version);
345
+ }
346
+ }
347
+
348
+ /**
349
+ * Dispara el hook cuando una ruta de aplicación es registrada
350
+ */
351
+ static handleAppRouteRegistered(server, route, appName, version) {
352
+ if (server.hooks) {
353
+ server.hooks.doAction('app_route_registered', route, appName, version);
354
+ }
355
+ }
356
+ }
357
+
358
+ module.exports = AppHooksHandler;
359
+ ```
360
+
361
+ ### ¿Cómo Integrarlo en el Futuro?
362
+
363
+ **Paso 1:** Importar en `server.js`
364
+
365
+ ```javascript
366
+ const AppHooksHandler = require('insitu-js/lib/core/hooks-handlers/app-hooks-handler');
367
+ ```
368
+
369
+ **Paso 2:** Usar en `core/appLoader.js`
370
+
371
+ ```javascript
372
+ const AppHooksHandler = require('insitu-js/lib/core/hooks-handlers/app-hooks-handler');
373
+
374
+ // Reemplazar:
375
+ const finalRoute = hooks.applyFilters('before_app_routes_register', ...);
376
+
377
+ // Por:
378
+ const finalRoute = AppHooksHandler.handleBeforeAppRouteRegister(
379
+ this.server,
380
+ modifiedRoute,
381
+ appName,
382
+ version
383
+ );
384
+
385
+ // Y:
386
+ hooks.doAction('after_app_routes_register', routes, appName, version);
387
+
388
+ // Por:
389
+ AppHooksHandler.handleAfterAppRoutesRegister(
390
+ this.server,
391
+ routes,
392
+ appName,
393
+ version
394
+ );
395
+ ```
396
+
397
+ **Paso 3:** Mantener `includes/appHooks.js` para hooks específicos de BlackCoffee que Insitu no tiene.
398
+
399
+ ---
400
+
401
+ ## 📝 Resumen
402
+
403
+ ### Estado Actual
404
+
405
+ - ✅ `includes/appHooks.js` - **SE USA** - Registra 13 hooks en BlackCoffee
406
+ - ❌ `app-hooks-handler.js` (Insitu) - **NO SE USA** - Handler oficial creado pero no integrado
407
+
408
+ ### Carga Actual
409
+
410
+ ```javascript
411
+ // server.js línea 13
412
+ const { registerAppHooks } = require('./includes/appHooks');
413
+
414
+ // server.js línea 50
415
+ registerAppHooks(server.hooks);
416
+ ```
417
+
418
+ ### Hooks en Uso
419
+
420
+ 1. **Application Lifecycle:** 6 hooks (deploy, undeploy, start, stop, restart)
421
+ 2. **Manifest Validation:** 2 hooks (validating, validated)
422
+ 3. **Route Registration:** 2 hooks (before, after)
423
+ 4. **Dependency Management:** 2 hooks (checking, installed)
424
+ 5. **Configuration:** 2 hooks (loading, loaded)
425
+
426
+ **Total:** 13 hooks operativos
427
+
428
+ ---
429
+
430
+ **Documento creado:** 2026-02-16
431
+ **BlackCoffee:** v2.0.0
432
+ **Insitu Framework:** v1.2.1