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
package/CHANGELOG.md ADDED
@@ -0,0 +1,664 @@
1
+ # Changelog
2
+
3
+ All notable changes to BlackCoffee will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [2.1.0] - 2026-02-18
9
+
10
+ ### 🔐 Sistema de Autenticación para Dashboard Admin
11
+
12
+ #### Added
13
+ - **Autenticación basada en sesiones** para el dashboard de administración
14
+ - **SQLite Database** para almacenamiento de usuarios administradores
15
+ - Tabla `admin_users` con campos: id, username, password_hash, email, role, active, created_at, updated_at, last_login
16
+ - Hash de contraseñas usando PBKDF2 con salt aleatorio
17
+ - Base de datos: `data/blackcoffee_admin.db`
18
+
19
+ - **SessionManager** de Insitu Framework
20
+ - Cookies HttpOnly para seguridad
21
+ - Timeout de sesión configurable (1 hora por defecto)
22
+ - Middleware de autenticación para proteger rutas
23
+
24
+ - **Controlador de Autenticación** (`controllers/admin/AuthController.js`)
25
+ - `POST /api/admin/auth/login` - Inicio de sesión
26
+ - `POST /api/admin/auth/logout` - Cierre de sesión
27
+ - `GET /api/admin/auth/verify` - Verificar sesión activa
28
+ - `GET /api/admin/auth/me` - Obtener usuario actual
29
+ - `POST /api/admin/auth/change-password` - Cambiar contraseña
30
+
31
+ - **Controlador de Vistas Admin** (`controllers/admin/AdminViewController.js`)
32
+ - `GET /admin` - Dashboard principal (ruta dinámica)
33
+ - `GET /admin/login` - Página de login
34
+ - `GET /admin/database` - Database Pools Manager (ruta dinámica)
35
+
36
+ - **Modelo de Usuario Admin** (`models/AdminUserModel.js`)
37
+ - Extiende ModelBase de Insitu
38
+ - Métodos: findByUsername, findByCredentials, findById, createWithPassword, changePassword
39
+ - Verificación de contraseñas con hash
40
+
41
+ - **CLI para gestión de usuarios** (`cli/admin-users.js`)
42
+ - `create <username> <password> [email]` - Crear usuario admin
43
+ - `list` - Listar usuarios
44
+ - `delete <username>` - Eliminar usuario
45
+ - `reset-password <username> <password>` - Resetear contraseña
46
+
47
+ - **Página de Login** (`public/admin/login.html`)
48
+ - UI moderna con diseño responsive
49
+ - Formulario de autenticación
50
+ - Credenciales por defecto visibles (admin/bl4ckc0ff33)
51
+ - Redirección automática después del login
52
+
53
+ - **Middleware de Autenticación** (`includes/adminAuth.js`)
54
+ - Protege rutas `/admin`, `/admin/database`, `/api/admin/*`
55
+ - Excepciones: `/admin/login`, `/admin/css/*`, `/admin/js/*`, `/api/admin/auth/*`
56
+ - Redirección a login para rutas web no autenticadas
57
+ - Respuesta 401 JSON para rutas API no autenticadas
58
+
59
+ - **Inicialización de Base de Datos** (`includes/initAdminDb.js`)
60
+ - Creación automática de tabla al iniciar
61
+ - Usuario admin por defecto (password: bl4ckc0ff33)
62
+
63
+ #### Changed
64
+ - **Rutas del dashboard ahora son dinámicas** (antes estáticas)
65
+ - `/admin` y `/admin/database` ahora usan controladores
66
+ - Permite autenticación antes de servir las vistas
67
+ - Archivos HTML se sirven desde el controlador
68
+
69
+ - **server.js refactorizado**
70
+ - Autenticación y rutas admin movidas a `includes/adminAuth.js`
71
+ - Server.js más limpio y mantenible
72
+
73
+ - **Configuración de database pools**
74
+ - Nuevo pool `admin-db` para base de datos de administración
75
+ - Separado del pool `default` de aplicaciones
76
+
77
+ #### Security
78
+ - ✅ Contraseñas hasheadas con PBKDF2 (1000 iteraciones, salt aleatorio)
79
+ - ✅ Cookies HttpOnly (no accesibles desde JavaScript)
80
+ - ✅ Middleware de autenticación protege todas las rutas admin
81
+ - ✅ Verificación de sesión en cada solicitud protegida
82
+
83
+ #### Files Added
84
+ - `controllers/admin/AuthController.js`
85
+ - `controllers/admin/AdminViewController.js`
86
+ - `models/AdminUserModel.js`
87
+ - `cli/admin-users.js`
88
+ - `includes/adminAuth.js`
89
+ - `includes/initAdminDb.js`
90
+ - `routes/auth.json`
91
+ - `routes/admin-views.json`
92
+ - `public/admin/login.html`
93
+ - `data/migrations/001_create_admin_users.sql`
94
+
95
+ #### Files Modified
96
+ - `server.js` - Refactorizado para usar adminAuth.js
97
+ - `public/admin/index.html` - Agregado user-info con logout
98
+ - `public/admin/js/app.js` - Verificación de autenticación al cargar
99
+ - `public/admin/css/styles.css` - Estilos para user-info y logout
100
+ - `config/database.json` - Agregado pool admin-db
101
+
102
+ #### Usage
103
+ ```bash
104
+ # Iniciar sesión en el dashboard
105
+ POST https://localhost:9791/api/admin/auth/login
106
+ {
107
+ "username": "admin",
108
+ "password": "bl4ckc0ff33"
109
+ }
110
+
111
+ # Crear nuevo usuario admin
112
+ node cli/admin-users.js create miusuario mipassword email@ejemplo.com
113
+
114
+ # Listar usuarios
115
+ node cli/admin-users.js list
116
+
117
+ # Resetear contraseña
118
+ node cli/admin-users.js reset-password admin nuevopassword
119
+ ```
120
+
121
+ #### Default Credentials
122
+ - **Username:** `admin`
123
+ - **Password:** `bl4ckc0ff33`
124
+ - ⚠️ **Importante:** Cambiar la contraseña por defecto en producción
125
+
126
+ #### Migration
127
+ Para actualizar aplicaciones existentes:
128
+ 1. Reiniciar el servidor para inicializar la base de datos admin
129
+ 2. Las rutas `/admin` y `/admin/database` ahora requieren autenticación
130
+ 3. Acceder primero a `/admin/login` para obtener sesión
131
+
132
+ ## [2.0.3] - 2026-02-17
133
+
134
+ ### 📝 Manifiesto de Aplicaciones: manifest.json
135
+
136
+ #### Changed
137
+ - **Nombre del archivo de manifiesto** - `package.json` → `manifest.json`
138
+ - Las aplicaciones BlackCoffee ahora usan `manifest.json` en lugar de `package.json`
139
+ - Permite separar configuración de BlackCoffee de dependencias de Node.js
140
+ - Las apps pueden tener ambos archivos si necesitan dependencias npm
141
+
142
+ #### Updated Files
143
+ - **core/appLoader.js**
144
+ - `findPackageJson()` → `findManifestJson()`
145
+ - Busca `manifest.json` en directorios de apps desplegadas
146
+
147
+ - **core/hotReload.js**
148
+ - Verifica existencia de `manifest.json` para detectar nuevas apps
149
+ - Lee `manifest.json` para obtener configuración de la app
150
+
151
+ - **controllers/admin/AdminController.js**
152
+ - `findPackageJson()` → `findManifestJson()`
153
+ - Lee `manifest.json` para listar apps y mostrar información
154
+
155
+ - **cli/commands/app.js**
156
+ - `findPackageJson()` → `findManifestJson()`
157
+ - `app:create` genera `manifest.json` en lugar de `package.json`
158
+ - Mensajes de ayuda actualizados
159
+
160
+ - **apps/*/controllers/**
161
+ - `UsersAppController.js` - Lee `manifest.json` para configuración de pool
162
+ - `EventsController.js` - Lee `manifest.json` para configuración de pool
163
+
164
+ #### Migration
165
+ Para migrar aplicaciones existentes:
166
+ ```bash
167
+ cd apps/mi-app/1.0.0/
168
+ mv package.json manifest.json
169
+ ```
170
+
171
+ #### Technical Details
172
+ - **Archivos modificados:** 11
173
+ - **Líneas cambiadas:** +92, -162
174
+ - **Apps renombradas:** events-app, users-app, mvc-demo, test-app, demo-deploy
175
+
176
+ ---
177
+
178
+ ## [2.0.2] - 2026-02-17
179
+
180
+ ### 🔧 CLI Bug Fixes y Mejoras
181
+
182
+ #### Fixed
183
+ - **db:pool:* commands** - Parser de comandos arreglado
184
+ - Bug: `command.split(':')[1]` solo obtenía "pool" en lugar de "pool:list"
185
+ - Fix: `command.split(':').slice(1).join(':')` para obtener el subcomando completo
186
+ - Todos los comandos db:pool:* ahora funcionan correctamente
187
+
188
+ - **db.js path de configuración** - Path corregido para database.json
189
+ - Bug: Buscaba en `cli/config/database.json` (incorrecto)
190
+ - Fix: `path.join(__dirname, '..', '..')` para obtener root del proyecto
191
+ - Ahora encuentra correctamente `config/database.json`
192
+
193
+ - **server:status** - Path de package.json corregido
194
+ - Bug: Buscaba en `cli/package.json` (no existe)
195
+ - Fix: `path.join(__dirname, '..', '..')` para obtener root del proyecto
196
+ - Ahora muestra versión de BlackCoffee, Node.js e Insitu Framework correctamente
197
+
198
+ - **server:restart** - Detección de PIDs mejorada
199
+ - Bug: Decía "No hay procesos corriendo" incorrectamente
200
+ - Fix: Verifica PIDs ANTES de matar procesos, muestra lista de PIDs detenidos
201
+ - Agrega espera de 2 segundos para liberación del puerto
202
+ - Verifica que el servidor inició correctamente después de restart
203
+
204
+ - **server:logs** - Documentado en help (ya estaba implementado)
205
+ - Agregado `server:logs [--tail=N]` al help de `bin/blackcoffee`
206
+ - Soporta `--follow` o `-f` para tiempo real
207
+
208
+ - **app:logs** - Implementación real con filtro por app
209
+ - Antes: Solo decía "revisa debug.log"
210
+ - Ahora: Filtra logs por nombre de app usando grep
211
+ - Soporta `--tail=N` para número de líneas
212
+ - Soporta `--follow` o `-f` para tiempo real con filtro
213
+ - Si no encuentra logs específicos, muestra últimas líneas del log general
214
+
215
+ #### Changed
216
+ - **bin/blackcoffee** - Help actualizado
217
+ - Agregado `server:logs [--tail=N]` a la lista de comandos
218
+
219
+ #### Technical Details
220
+ - **Archivos modificados:**
221
+ - `cli/commands/db.js` - Fix parser + fix path config
222
+ - `cli/commands/server.js` - Fix paths + mejora restart + logs documentado
223
+ - `cli/commands/app.js` - Implementación real de app:logs
224
+ - `bin/blackcoffee` - Help actualizado
225
+
226
+ - **Líneas cambiadas:** +88, -24
227
+
228
+ ---
229
+
230
+ ## [2.0.1] - 2026-02-17
231
+
232
+ ### 🗄️ Normalización de Pools y events-app
233
+
234
+ #### Added
235
+ - **SQLiteAdapter** (`core/SQLiteAdapter.js`) - Nuevo adaptador SQLite genérico para BlackCoffee
236
+ - Soporte completo para consultas SQL con parámetros
237
+ - Métodos: `query()`, `connect()`, `disconnect()`, `transaction()`
238
+ - Compatible con el sistema de pools de BlackCoffee
239
+ - Reemplaza a SQLiteTokenAdapter para uso general
240
+
241
+ - **events-app** (`apps/events-app/1.0.0/`) - Nueva aplicación de ejemplo
242
+ - Consulta la tabla `events_no_finish` de `otrack_db` en MariaDB
243
+ - 6 endpoints API REST
244
+ - UI Web con tabla de eventos y estadísticas
245
+ - Configurada para usar pool `MySQL-MariaDB`
246
+ - Serialización automática de BigInt y Date
247
+
248
+ - **Hot Reload para Nuevas Apps**
249
+ - Detección automática de nuevas aplicaciones en `apps/{name}/{version}/`
250
+ - Watch del directorio `apps/` para detectar directorios nuevos
251
+ - Carga automática de rutas sin reiniciar servidor
252
+ - Activación automática de watch para la nueva app
253
+
254
+ #### Changed
255
+ - **DatabasePoolManager** - Ahora usa SQLiteAdapter en lugar de SQLiteTokenAdapter
256
+ - **server.js** - `global.dbPoolManager` se expone ANTES de cargar las apps
257
+ - Permite que los controladores accedan al pool durante la inicialización
258
+ - Soluciona problema de "Database no disponible" en apps
259
+
260
+ - **UsersAppController** - Lazy loading del modelo
261
+ - El modelo se inicializa bajo demanda en cada request
262
+ - Lee el nombre del pool desde el manifest (`blackcoffee.database.pool`)
263
+ - Soporta múltiples pools dinámicamente
264
+
265
+ - **UserModel** - Acepta poolName como parámetro
266
+ - Constructor: `new UserModel(dbPoolManager, poolName)`
267
+ - Permite reutilizar el modelo con diferentes pools
268
+
269
+ #### Fixed
270
+ - **BigInt Serialization** - Los valores bigint de MariaDB se convierten a string automáticamente
271
+ - **Date Serialization** - Las fechas se serializan correctamente a ISO 8601
272
+ - **Hot Reload** - Ahora detecta y carga aplicaciones desplegadas dinámicamente
273
+
274
+ #### Technical Details
275
+ - **serializeBigInt()** - Función helper para serializar objetos con BigInt/Date
276
+ - **Configuración de pools** - Campo `connected` removido del config (se maneja en runtime)
277
+ - **EventsModel** - Modelo optimizado para consultas en MariaDB con BigInt
278
+
279
+ #### Documentation
280
+ - **docs/EVENTS_APP_MANUAL.md** - Manual completo de events-app
281
+ - Estructura de la aplicación
282
+ - Endpoints API
283
+ - Ejemplos de uso
284
+ - Configuración del pool MariaDB
285
+
286
+ ---
287
+
288
+ ## [2.0.0] - 2026-02-17
289
+
290
+ ### 🚀 BlackCoffee App Server - Initial Release
291
+
292
+ #### Added
293
+ - **App Server Architecture** - Sistema completo para desplegar múltiples aplicaciones
294
+ - **AppLoader** (`core/appLoader.js`) - Cargador dinámico de aplicaciones desde `apps/{name}/{version}/`
295
+ - **Auto-deploy al startup** - Las aplicaciones se cargan automáticamente al iniciar
296
+ - **Prefijo automático de rutas** - `/app-name/version/` para cada app
297
+ - **Paths absolutos configurables** - Placeholder `__APP_DIR__` en routes.json
298
+ - **13 Hooks nuevos para gestión de apps:**
299
+ - `app_deploying`, `app_deployed`
300
+ - `app_undeploying`, `app_undeployed`
301
+ - `app_starting`, `app_started`
302
+ - `app_stopping`, `app_stopped`
303
+ - `app_restarting`, `app_restarted`
304
+ - `app_manifest_validating`, `app_manifest_validated`
305
+ - `before_app_routes_register`, `after_app_routes_register`
306
+ - `app_dependencies_checking`, `app_dependencies_installed`
307
+ - `app_config_loading`, `app_config_loaded`
308
+
309
+ #### CLI (Command Line Interface)
310
+ - **`bin/blackcoffee`** - Ejecutable CLI
311
+ - **Comandos de Aplicaciones:**
312
+ - `app:deploy <archivo.tar.gz>` - Desplegar aplicación
313
+ - `app:list` - Listar aplicaciones desplegadas
314
+ - `app:status <app> [version]` - Ver estado de aplicación
315
+ - `app:start/stop/restart <app>` - Control de aplicaciones
316
+ - `app:undeploy <app> [version]` - Eliminar aplicación
317
+ - `app:logs <app>` - Ver logs de aplicación
318
+ - `app:create <nombre>` - Crear template de aplicación
319
+ - **Comandos de Base de Datos:**
320
+ - `db:pool:create <nombre> <tipo>` - Crear pool de base de datos
321
+ - `db:pool:list` - Listar pools
322
+ - `db:pool:remove <nombre>` - Eliminar pool
323
+ - `db:pool:connect <nombre>` - Conectar pool
324
+ - `db:pool:disconnect <nombre>` - Desconectar pool
325
+ - `db:pool:stats` - Mostrar estadísticas
326
+ - **Comandos de Configuración:**
327
+ - `config:list` - Listar configuración
328
+ - `config:get <key>` - Obtener valor
329
+ - `config:set <key> <value>` - Establecer valor
330
+ - **Comandos de Servidor:**
331
+ - `server:status` - Estado del servidor
332
+ - `server:restart` - Reiniciar servidor
333
+ - `server:logs [--tail=N]` - Ver logs
334
+
335
+ #### Management Console Web (Fase 3 ✅)
336
+ - **`/admin`** - Dashboard de administración
337
+ - **`/admin/database`** - Database Pools Manager UI
338
+ - **Deploy desde UI Web** - Drag & drop de archivos .tar.gz
339
+ - **Multipart/form-data parser** - Soporte para uploads desde navegador
340
+ - **Binary Upload Support** - req.rawBody como Buffer
341
+ - **Undeploy con confirmación** - DELETE /api/admin/apps/:name/:version
342
+ - **Restart de aplicaciones** - POST /api/admin/apps/:name/:version/restart
343
+ - **Estadísticas en tiempo real** - GET /api/admin/stats
344
+ - **Lista de aplicaciones** - GET /api/admin/apps
345
+ - **Configuración del servidor** - GET /api/admin/config
346
+
347
+ #### Database Pools Manager (Fase 5 ✅)
348
+ - **DatabasePoolManager** - Gestor centralizado de pools de conexiones
349
+ - **Hot Reload** - Detección automática de cambios en config/database.json
350
+ - **Auto-recarga** - Nuevos pools se cargan sin reiniciar servidor
351
+ - **Auto-connect** - Conexión automática de nuevos pools
352
+ - **Auto-remove** - Eliminación de pools removidos de config
353
+ - **Soporte múltiple** - SQLite, MariaDB, MySQL, Memory
354
+ - **ModelManager** - Integración con Insitu ModelManager
355
+
356
+ #### API Endpoints
357
+ | Método | Endpoint | Descripción |
358
+ |--------|----------|-------------|
359
+ | GET | `/api/admin/apps` | Listar aplicaciones |
360
+ | GET | `/api/admin/apps/:name/:version` | Info de app |
361
+ | POST | `/api/admin/apps/deploy` | Deploy (multipart/form-data) |
362
+ | DELETE | `/api/admin/apps/:name/:version` | Undeploy |
363
+ | POST | `/api/admin/apps/:name/:version/restart` | Restart |
364
+ | GET | `/api/admin/stats` | Estadísticas |
365
+ | GET | `/api/admin/config` | Configuración |
366
+ | GET | `/api/admin/database/pools` | Listar pools |
367
+ | POST | `/api/admin/database/pools` | Crear pool |
368
+ | DELETE | `/api/admin/database/pools/:name` | Eliminar pool |
369
+ | POST | `/api/admin/database/pools/:name/connect` | Conectar pool |
370
+ | POST | `/api/admin/database/pools/:name/disconnect` | Desconectar pool |
371
+
372
+ #### App Structure
373
+ ```
374
+ apps/{app-name}/{version}/
375
+ ├── package.json # Manifest con configuración blackcoffee
376
+ ├── routes/
377
+ │ └── static.json # Rutas de la app (soporta __APP_DIR__)
378
+ ├── controllers/ # Controladores
379
+ ├── models/ # Modelos
380
+ ├── views/ # Vistas
381
+ └── public/ # Archivos estáticos
382
+ ├── index.html
383
+ └── assets/
384
+ ```
385
+
386
+ #### Features
387
+ - **Deploy automático desde .tar.gz:**
388
+ - Extracción automática
389
+ - Búsqueda y validación de package.json
390
+ - Instalación de dependencias (npm install)
391
+ - Movimiento a `apps/{name}/{version}/`
392
+ - Detección de versiones duplicadas
393
+ - Validación de magic number (gzip)
394
+ - Multipart parser para uploads desde navegador
395
+ - **Undeploy limpio:**
396
+ - Eliminación por nombre y versión
397
+ - Limpieza de directorios vacíos
398
+ - Validación de existencia
399
+ - **Instalación de dependencias** - `npm install --production` automático
400
+ - **Auto-start** - Carga apps al iniciar (configurable)
401
+ - **Aislamiento lógico** - Cada app en su directorio
402
+ - **Múltiples versiones** - Coexistencia de versiones
403
+ - **Enlaces relativos automáticos** - URLs generadas dinámicamente en controladores
404
+
405
+ #### Demo Apps Incluidas
406
+ - **Test App** (`/test/1.0.0/`) - App estática de prueba
407
+ - **Demo Deploy** (`/demo-deploy/1.0.0/`) - Demo de deploy automático
408
+ - **MVC Demo** (`/mvc-demo/1.0.0/`) - App con controladores y vistas
409
+ - Controladores: ExampleController.js
410
+ - Vistas HTML dinámicas
411
+ - APIs JSON (users, products)
412
+ - Path parameters (:id)
413
+ - POST con body JSON
414
+ - Assets estáticos (CSS)
415
+ - Enlaces relativos automáticos
416
+ - **test-app** (`/test-app/1.0.0/`) - App de prueba deployada desde UI
417
+
418
+ #### Technical Details
419
+ - Hooks usan `acceptedArgs=3` para filtros de rutas
420
+ - `__APP_DIR__` se reemplaza con ruta absoluta de la app
421
+ - Rutas estáticas resuelven contra directorio de cada app
422
+ - Rutas con controladores usan `RouteLoader` de Insitu
423
+ - Admin console muestra rutas registradas por app
424
+ - Enlaces en vistas HTML usan `baseUrl` dinámico
425
+ - **`req.rawBody`** disponible como Buffer para binary uploads
426
+ - Multipart/form-data parsing para uploads desde navegadores
427
+
428
+ #### Modified Dependencies
429
+ - **insitu-js**: ^1.2.1
430
+ - Modificado: `lib/core/server.js` - Binary Upload Support
431
+ - Agregado: `req.rawBody` como Buffer
432
+
433
+ ---
434
+ - **Aislamiento lógico** - Cada app en su directorio
435
+ - **Múltiples versiones** - Coexistencia de versiones
436
+ - **Enlaces relativos automáticos** - URLs generadas dinámicamente en controladores
437
+
438
+ #### Demo Apps Incluidas
439
+ - **Test App** (`/test/1.0.0/`) - App estática de prueba
440
+ - **Demo Deploy** (`/demo-deploy/1.0.0/`) - Demo de deploy automático
441
+ - **MVC Demo** (`/mvc-demo/1.0.0/`) - App con controladores y vistas
442
+ - Controladores: `ExampleController.js`
443
+ - Vistas HTML dinámicas
444
+ - APIs JSON (users, products)
445
+ - Path parameters (`:id`)
446
+ - POST con body JSON
447
+ - Assets estáticos (CSS)
448
+ - Enlaces relativos automáticos
449
+
450
+ #### Technical Details
451
+ - Hooks usan `acceptedArgs=3` para filtros de rutas
452
+ - `__APP_DIR__` se reemplaza con ruta absoluta de la app
453
+ - Rutas estáticas resuelven contra directorio de cada app
454
+ - Rutas con controladores usan `RouteLoader` de Insitu
455
+ - Admin console muestra rutas registradas por app
456
+ - Enlaces en vistas HTML usan `baseUrl` dinámico
457
+
458
+ #### Updated Dependencies
459
+ - **insitu-js**: ^1.2.1 (desde ^1.2.0)
460
+ - Incluye `app-hooks-handler.js` oficial
461
+ - Soporte mejorado para controladores
462
+
463
+ ---
464
+
465
+ ## [1.2.3] - 2026-02-16
466
+
467
+ ### 🛡️ WAF Activado por Defecto
468
+
469
+ #### Added
470
+ - **WAF (Web Application Firewall)** activado por defecto en el servidor
471
+ - **Reglas de protección incluidas:**
472
+ - SQL Injection detection (`SELECT FROM`, `INSERT INTO`, `UPDATE SET`, `DELETE FROM`, `DROP TABLE`)
473
+ - XSS Attack detection (`<script>`, `javascript:`, `onerror=`, `onload=`)
474
+ - **Configuración de seguridad:**
475
+ - Máximo 5 intentos fallidos antes de bloquear IP
476
+ - Bloqueo automático por 15 minutos
477
+ - Whitelist y blacklist configurables
478
+ - **Logging de seguridad:**
479
+ - Todos los ataques bloqueados se registran en `debug.log`
480
+ - Estadísticas de ataques disponibles en consola administrativa
481
+
482
+ #### Commands (Admin Console)
483
+ | Command | Description |
484
+ |---------|-------------|
485
+ | `waf-status` | WAF status overview |
486
+ | `waf-stats` | Attack statistics |
487
+ | `waf-blocked` | Blocked IPs list |
488
+ | `waf-block-ip <ip>` | Manually block an IP |
489
+ | `waf-unblock-ip <ip>` | Unblock an IP |
490
+ | `waf-whitelist` | View whitelist |
491
+ | `waf-blacklist` | View blacklist |
492
+ | `waf-monitored` | Monitored requests |
493
+ | `waf-logs` | WAF logs |
494
+
495
+ #### Technical Details
496
+ - Firewall middleware applied to all incoming requests
497
+ - Rules evaluated on URL patterns
498
+ - Blocked requests return 403 with JSON error response
499
+ - Attack statistics tracked in `globalWAFStats`
500
+
501
+ ---
502
+
503
+ ## [1.2.2] - 2026-02-16
504
+
505
+ ### 🎮 Controller System
506
+
507
+ #### Added
508
+ - **Controller directory** (`controllers/`) for organizing MVC controllers
509
+ - **Example Controller** (`controllers/ExampleController.js`)
510
+ - `hello()` - Greeting endpoint
511
+ - `getUsers()` - List users endpoint
512
+ - `getUserById(:id)` - Get user by ID with path parameter
513
+ - `createUser()` - Create user with POST body
514
+ - `info()` - Controller information and endpoint list
515
+ - **API Example Routes** (`routes/api-example.json`)
516
+ - 5 routes configured for ExampleController
517
+ - Demonstrates controller-based routing vs programmatic routing
518
+ - Supports path parameters (`:id`)
519
+ - Supports JSON body parsing via `req.body`
520
+
521
+ #### Endpoints Added
522
+ | Method | Endpoint | Description |
523
+ |--------|----------|-------------|
524
+ | GET | `/api/example/hello` | Greeting message |
525
+ | GET | `/api/example/users` | List of users |
526
+ | GET | `/api/example/users/:id` | User by ID |
527
+ | POST | `/api/example/users` | Create user |
528
+ | GET | `/api/example/info` | Controller info |
529
+
530
+ #### Technical Details
531
+ - Controllers use static methods for handlers
532
+ - Route loader automatically resolves controller paths
533
+ - Path parameters accessible via `req.params`
534
+ - JSON body accessible via `req.body` (parsed by Insitu)
535
+ - Total routes: 7 (2 static + 5 API)
536
+
537
+ ---
538
+
539
+ ## [1.2.1] - 2026-02-16
540
+
541
+ ### 🔧 Updated Dependencies
542
+
543
+ #### Changed
544
+ - **insitu-js**: Updated from v1.1.0 to v1.2.0
545
+ - Custom 404 template modifications preserved in Insitu v1.2.0
546
+
547
+ #### Technical Details
548
+ - All `customize_static_404_response` hooks remain functional
549
+ - 5 hook points confirmed in `node_modules/insitu-js/lib/core/server.js`
550
+
551
+ ---
552
+
553
+ ## [1.2.0] - 2026-02-16
554
+
555
+ ### 🎨 Custom 404 HTML Templates
556
+
557
+ #### Added
558
+ - **Custom 404 HTML template system** for routes and static files
559
+ - Beautiful animated coffee cup design
560
+ - Dynamic error information (type, path, method, timestamp)
561
+ - Responsive layout with gradient backgrounds
562
+ - "Back to Home" button
563
+ - Template location: `public/templates/404.html`
564
+
565
+ - **404 Hooks System** (`includes/404-hooks.js`)
566
+ - `custom_404_message` filter - Customize error messages
567
+ - `customize_404_response` filter - Serve HTML template for route 404s
568
+ - `customize_static_404_response` filter - Serve HTML template for file 404s
569
+ - `route_not_found` action - Log 404 errors to stdout with IP, method, user-agent
570
+ - `static_file_not_found` action - Log static file 404s to stdout
571
+ - `static_file_access_denied` action - Log 403 errors for path traversal attempts
572
+ - Built-in metrics system for tracking 404 errors
573
+
574
+ - **Insitu Framework modifications** (`node_modules/insitu-js/lib/core/server.js`)
575
+ - Added `customize_static_404_response` filter hook in 4 locations:
576
+ - File not found (ENOENT error handler)
577
+ - Directory not found
578
+ - File not found (stat error)
579
+ - Directory without index file
580
+ - Allows filters to override default JSON 404 response with custom HTML
581
+
582
+ - **Debug logging**
583
+ - Server stdout redirected to `debug.log`
584
+ - All 404 errors logged with detailed information
585
+ - Metrics tracking for 404 count by type (route/file)
586
+
587
+ #### Changed
588
+ - **404 Response Format**: Changed from JSON-only to HTML template for better UX
589
+ - **Error Logging**: Enhanced stdout logging with IP addresses and timestamps
590
+
591
+ #### Technical Details
592
+ - Template caching for performance (loaded once, reused)
593
+ - Filter priority set to 5 (high priority) to execute before default response
594
+ - Graceful fallback to JSON if template is unavailable
595
+
596
+ ---
597
+
598
+ ## [1.1.0] - 2026-02-16
599
+
600
+ ### 🎉 Initial Release
601
+
602
+ #### Added
603
+ - **HTTPS Server** built with Insitu Framework
604
+ - **Self-signed SSL certificates** with multiple key lengths (1024, 2048, 4096 bits)
605
+ - **Static file serving** for landing page from `public/` directory
606
+ - **Dynamic route loading** from `routes/` directory using JSON configuration
607
+ - **Health check endpoint** at `/api/health`
608
+ - **Graceful shutdown** handling (SIGTERM, SIGINT)
609
+ - **Landing page** with modern responsive design
610
+ - Hero section with animated coffee cup
611
+ - Features grid
612
+ - API documentation section
613
+ - Contact section
614
+ - **Asset management** with organized directory structure
615
+ - CSS styles with CSS variables and animations
616
+ - JavaScript with smooth scroll and intersection observer
617
+ - **Configuration via environment variables**
618
+ - `PORT` - Server port (default: 9791)
619
+ - `HOST` - Server host (default: localhost)
620
+ - `SSL_KEY` - SSL private key file
621
+ - `SSL_CERT` - SSL certificate file
622
+ - **Route loader module** in `includes/routeLoader.js`
623
+ - **Documentation**
624
+ - README.md with setup instructions
625
+ - LICENSE (Apache 2.0)
626
+ - NOTICE file with attributions
627
+ - .gitignore and .npmignore
628
+
629
+ #### Changed
630
+ - Project name established as **BlackCoffee**
631
+
632
+ #### Technical Details
633
+ - **Framework**: Insitu Framework v1.1.0
634
+ - **Node.js**: Compatible with v22+
635
+ - **Default Port**: 9791 (HTTPS)
636
+ - **License**: Apache License 2.0
637
+
638
+ #### Author
639
+ - Benjamin Sanchez Cardenas <bytedogssyndicate@gmail.com>
640
+
641
+ ---
642
+
643
+ ## [Unreleased]
644
+
645
+ ### Planned Features (Post-2.0.0)
646
+ - [ ] CLI para deploy de aplicaciones (`blackcoffee app:deploy`)
647
+ - [ ] Management Console Web (UI)
648
+ - [ ] Hot reload de aplicaciones
649
+ - [ ] Database integration (MariaDB/SQLite)
650
+ - [ ] User authentication system
651
+ - [ ] API versioning
652
+ - [ ] Rate limiting middleware
653
+ - [ ] Docker support
654
+ - [ ] Unit and integration tests
655
+
656
+ ### Under Consideration
657
+ - WebSocket support
658
+ - GraphQL endpoint
659
+ - Multi-language support (i18n)
660
+ - Theme system for landing pages
661
+
662
+ ---
663
+
664
+ **Repository**: https://gitlab.com/bytedogssyndicate1/bc2