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.
- package/CHANGELOG.md +664 -0
- package/LICENSE +201 -0
- package/NOTICE +25 -0
- package/README.md +246 -0
- package/apps.zip +0 -0
- package/bin/adminclient +105 -0
- package/bin/blackcoffee +133 -0
- package/cli/admin-users.js +282 -0
- package/cli/commands/app.js +561 -0
- package/cli/commands/config.js +182 -0
- package/cli/commands/db.js +257 -0
- package/cli/commands/server.js +200 -0
- package/config/applications.json +5 -0
- package/config/database.json +28 -0
- package/config/database.json.example +23 -0
- package/config/server.json +32 -0
- package/controllers/admin/AdminController.js +529 -0
- package/controllers/admin/AdminViewController.js +90 -0
- package/controllers/admin/AuthController.js +293 -0
- package/controllers/admin/DatabaseAdminController.js +218 -0
- package/core/SQLiteAdapter.js +333 -0
- package/core/appLoader.js +385 -0
- package/core/databasePoolManager.js +431 -0
- package/core/hotReload.js +363 -0
- package/data/ADMIN-README.md +145 -0
- package/data/CHANGELOG.md +48 -0
- package/data/GTK3-NODE-PROPOSALS.md +410 -0
- package/data/admin-db.js +150 -0
- package/data/admin-gui.js +452 -0
- package/data/blackcoffee_admin.db-shm +0 -0
- package/data/blackcoffee_admin.db-wal +0 -0
- package/data/migrations/001_create_admin_users.sql +33 -0
- package/docs/APP_HOOKS_HANDLER.md +432 -0
- package/docs/APP_HOOKS_REQUIREMENTS.md +588 -0
- package/docs/ARCHITECTURE.md +435 -0
- package/docs/CREAR_APP_Y_USAR_POOLS.md +1595 -0
- package/docs/EVENTS_APP_MANUAL.md +289 -0
- package/docs/INSITU_BINARY_UPLOAD_PROPOSAL.md +186 -0
- package/docs/INSITU_FIREWALL_EXCEPTION.md +187 -0
- package/docs/ROADMAP.md +242 -0
- package/docs/ROADMAP.md.backup +243 -0
- package/includes/404-hooks.js +423 -0
- package/includes/adminAuth.js +214 -0
- package/includes/adminExtension.js +53 -0
- package/includes/appHooks.js +302 -0
- package/includes/initAdminDb.js +115 -0
- package/includes/routeLoader.js +67 -0
- package/includes/sessions.js +223 -0
- package/issues/001-duplicate-module-loading.md +92 -0
- package/manuales/ADMIN_EXTENSION_COMMANDS_MANUAL.md +261 -0
- package/manuales/ADMIN_EXTENSION_HOOK_EXAMPLE.md +28 -0
- package/manuales/ADMIN_EXTENSION_INTEGRATION_MANUAL.md +232 -0
- package/manuales/CACHE_REGEX_COMMANDS.md +136 -0
- package/manuales/CACHE_SYSTEM_MAP.md +206 -0
- package/manuales/CREACION_DE_CONTROLADORES_INSITU.md +383 -0
- package/manuales/QUEUE_CLI_MODULE_MANUAL.md +289 -0
- package/manuales/QUEUE_SYSTEM_MANUAL.md +320 -0
- package/manuales/ROUTE_CACHE_MODULE_MANUAL.md +205 -0
- package/manuales/SESSION_MANAGER_GUIDE.md +529 -0
- package/manuales/SESSION_SECURITY_FLAGS.md +174 -0
- package/manuales/WAF_MODULE_MANUAL.md +229 -0
- package/manuales/after_route_handler_filter_example.md +116 -0
- package/manuales/after_route_handler_usage.md +130 -0
- package/manuales/an/303/241lisis-completo-insitu-framework.md +213 -0
- package/manuales/async_hooks_promises_guide.md +325 -0
- package/manuales/before_route_handler_filter_example.md +97 -0
- package/manuales/before_route_handler_usage.md +122 -0
- package/manuales/hooks_chaining_conditions_guide.md +261 -0
- package/manuales/hooks_filters_documentation.md +493 -0
- package/manuales/hooks_filters_documentation_en.md +493 -0
- package/manuales/hooks_vs_middlewares_comparison.md +87 -0
- package/manuales/manual-mvc-completo.md +934 -0
- package/manuales/modulos_administracion.md +89 -0
- package/manuales/router_execution_points.md +74 -0
- package/manuales/static_file_hooks_usage.md +222 -0
- package/models/AdminUserModel.js +132 -0
- package/package.json +45 -0
- package/programatically/PRoutes.js +89 -0
- package/programatically/initFlow.js +211 -0
- package/public/admin/css/db-pools.css +336 -0
- package/public/admin/css/styles.css +310 -0
- package/public/admin/database.html +312 -0
- package/public/admin/index.html +116 -0
- package/public/admin/js/app.js +470 -0
- package/public/admin/js/db-pools.js +253 -0
- package/public/admin/login.html +278 -0
- package/public/assets/css/styles.css +477 -0
- package/public/assets/js/main.js +89 -0
- package/public/index.html +136 -0
- package/public/templates/404.html +158 -0
- package/routes/admin-views.json +20 -0
- package/routes/admin.json +38 -0
- package/routes/auth.json +32 -0
- package/routes/static.json +18 -0
- package/server.js +299 -0
- package/test-aplicacion.con-logisession/BlackCoffee.js +226 -0
- package/test-aplicacion.con-logisession/SSL_SETUP.md +53 -0
- package/test-aplicacion.con-logisession/certs/ca-certificate.pem +32 -0
- package/test-aplicacion.con-logisession/certs/ca-private-key.pem +52 -0
- package/test-aplicacion.con-logisession/certs/certificate-2048.pem +22 -0
- package/test-aplicacion.con-logisession/certs/certificate.pem +32 -0
- package/test-aplicacion.con-logisession/certs/private-key-2048.pem +28 -0
- package/test-aplicacion.con-logisession/certs/private-key.pem +52 -0
- package/test-aplicacion.con-logisession/config/iaQueueSetup.js +84 -0
- package/test-aplicacion.con-logisession/config/qwen-rules.json +39 -0
- package/test-aplicacion.con-logisession/controllers/analyticsController.js +117 -0
- package/test-aplicacion.con-logisession/controllers/auth/AdminAuthController.js +142 -0
- package/test-aplicacion.con-logisession/controllers/auth/AuthController.js +439 -0
- package/test-aplicacion.con-logisession/controllers/auth/AuthViewController.js +223 -0
- package/test-aplicacion.con-logisession/controllers/endpointController.js +66 -0
- package/test-aplicacion.con-logisession/controllers/example.js +183 -0
- package/test-aplicacion.con-logisession/controllers/iaQueueController.js +367 -0
- package/test-aplicacion.con-logisession/controllers/queueController.js +206 -0
- package/test-aplicacion.con-logisession/controllers/qwenQueueController.js +197 -0
- package/test-aplicacion.con-logisession/controllers/test.js +0 -0
- package/test-aplicacion.con-logisession/controllers/tracking/EventsNoFinishController.js +78 -0
- package/test-aplicacion.con-logisession/controllers/tracking/TrackingController.js +412 -0
- package/test-aplicacion.con-logisession/controllers/tracking/TrackingControllerWithLoadModel.js +437 -0
- package/test-aplicacion.con-logisession/hooks/admin-hooks.js +20 -0
- package/test-aplicacion.con-logisession/hooks/general-hooks.js +97 -0
- package/test-aplicacion.con-logisession/hooks/queue-hooks.js +64 -0
- package/test-aplicacion.con-logisession/hooks/route-directory-hooks.js +38 -0
- package/test-aplicacion.con-logisession/hooks/security-hooks.js +24 -0
- package/test-aplicacion.con-logisession/insitu-admin-client/README.md +69 -0
- package/test-aplicacion.con-logisession/insitu-admin-client/package.json +23 -0
- package/test-aplicacion.con-logisession/insitu-admin-client.js +257 -0
- package/test-aplicacion.con-logisession/models/ExampleModel.js +88 -0
- package/test-aplicacion.con-logisession/models/QueueJobModel.js +263 -0
- package/test-aplicacion.con-logisession/models/TokenModel.js +207 -0
- package/test-aplicacion.con-logisession/models/auth/AuthModel.js +66 -0
- package/test-aplicacion.con-logisession/models/auth/UserModel.js +189 -0
- package/test-aplicacion.con-logisession/models/tracking/CompletedCartModel.js +213 -0
- package/test-aplicacion.con-logisession/models/tracking/EventModel.js +366 -0
- package/test-aplicacion.con-logisession/models/tracking/EventsNoFinishModel.js +131 -0
- package/test-aplicacion.con-logisession/models/tracking/SessionModel.js +360 -0
- package/test-aplicacion.con-logisession/models/tracking/SiteFlowModel.js +286 -0
- package/test-aplicacion.con-logisession/models/tracking/TokenModel.js +207 -0
- package/test-aplicacion.con-logisession/package-lock.json +3313 -0
- package/test-aplicacion.con-logisession/package.json +32 -0
- package/test-aplicacion.con-logisession/public/blackcoffee-welcome/index.html +1339 -0
- package/test-aplicacion.con-logisession/public/css/style.css +64 -0
- package/test-aplicacion.con-logisession/public/ejemplo-estatica/index.html +18 -0
- package/test-aplicacion.con-logisession/public/ejemplo-estatica/script.js +16 -0
- package/test-aplicacion.con-logisession/public/ejemplo-estatica/styles.css +43 -0
- package/test-aplicacion.con-logisession/public/images/logo.svg +7 -0
- package/test-aplicacion.con-logisession/public/js/main.js +67 -0
- package/test-aplicacion.con-logisession/routes/analytics-routes.json +8 -0
- package/test-aplicacion.con-logisession/routes/auth-routes.json +98 -0
- package/test-aplicacion.con-logisession/routes/blackcoffee-welcome-routes.json +20 -0
- package/test-aplicacion.con-logisession/routes/duplicate-test-routes.json.disabled +16 -0
- package/test-aplicacion.con-logisession/routes/ejemplo-estatica-routes.json +11 -0
- package/test-aplicacion.con-logisession/routes/endpoints-routes.json +8 -0
- package/test-aplicacion.con-logisession/routes/ia-queue-routes.json +26 -0
- package/test-aplicacion.con-logisession/routes/product-routes.json.disabled +20 -0
- package/test-aplicacion.con-logisession/routes/queue-routes.json +32 -0
- package/test-aplicacion.con-logisession/routes/qwen-routes.json +14 -0
- package/test-aplicacion.con-logisession/routes/static-routes.json +29 -0
- package/test-aplicacion.con-logisession/routes/tracking-routes.json +58 -0
- package/test-aplicacion.con-logisession/routes/tracking-with-loadmodel-routes.json +51 -0
- package/test-aplicacion.con-logisession/utils/dbAdapter.js +88 -0
- package/test-aplicacion.con-logisession/utils/qbWrapper.js +4 -0
- package/test-aplicacion.con-logisession/utils/queueProcessor.js +305 -0
- package/test-aplicacion.con-logisession/utils/qwenRulesService.js +131 -0
- package/test-aplicacion.con-logisession/utils/tokenHelper.js +22 -0
- package/test-aplicacion.con-logisession/views/auth/dashboard.html +443 -0
- package/test-aplicacion.con-logisession/views/auth/forgot-password.html +200 -0
- package/test-aplicacion.con-logisession/views/auth/login.html +213 -0
- package/test-aplicacion.con-logisession/views/auth/register.html +294 -0
- package/test-aplicacion.con-logisession/views/contact/form.html +47 -0
- 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
|