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
|
@@ -0,0 +1,435 @@
|
|
|
1
|
+
# BlackCoffee App Server - Arquitectura v2.0.0
|
|
2
|
+
|
|
3
|
+
## 📁 Estructura de Directorios
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
blackcoffee/
|
|
7
|
+
├── server.js # Entry point del servidor
|
|
8
|
+
├── bin/
|
|
9
|
+
│ ├── adminclient # Cliente administrativo TCP (existente)
|
|
10
|
+
│ └── blackcoffee # CLI de administración (nuevo)
|
|
11
|
+
│
|
|
12
|
+
├── core/ # Núcleo del App Server
|
|
13
|
+
│ ├── appLoader.js # Carga y gestión de aplicaciones
|
|
14
|
+
│ ├── appManager.js # Manager de ciclo de vida (start/stop/restart)
|
|
15
|
+
│ ├── configLoader.js # Carga de configuración
|
|
16
|
+
│ ├── manifestValidator.js # Validación de manifests
|
|
17
|
+
│ └── routeRegistrar.js # Registro de rutas con prefijos
|
|
18
|
+
│
|
|
19
|
+
├── includes/ # Utilidades y hooks
|
|
20
|
+
│ ├── sessions.js # Session manager (opcional)
|
|
21
|
+
│ ├── routeLoader.js # Cargador de rutas (existente)
|
|
22
|
+
│ ├── adminExtension.js # Consola administrativa (existente)
|
|
23
|
+
│ ├── 404-hooks.js # Manejo de errores 404 (existente)
|
|
24
|
+
│ └── appHooks.js # Hooks específicos para apps (nuevo)
|
|
25
|
+
│
|
|
26
|
+
├── apps/ # Aplicaciones desplegadas
|
|
27
|
+
│ └── {app-name}/
|
|
28
|
+
│ └── {version}/
|
|
29
|
+
│ ├── package.json # Manifest + dependencias
|
|
30
|
+
│ ├── app.js # Entry point opcional (inicialización)
|
|
31
|
+
│ ├── routes/ # Rutas en JSON
|
|
32
|
+
│ │ └── static.json
|
|
33
|
+
│ ├── controllers/ # Controladores de la app
|
|
34
|
+
│ ├── models/ # Modelos de la app
|
|
35
|
+
│ ├── views/ # Vistas de la app
|
|
36
|
+
│ ├── public/ # Archivos estáticos de la app
|
|
37
|
+
│ │ ├── assets/
|
|
38
|
+
│ │ └── index.html
|
|
39
|
+
│ └── node_modules/ # Dependencias específicas (opcional)
|
|
40
|
+
│
|
|
41
|
+
├── config/ # Configuración del servidor
|
|
42
|
+
│ ├── server.json # Configuración principal
|
|
43
|
+
│ ├── applications.json # Estado de aplicaciones desplegadas
|
|
44
|
+
│ └── security.json # Configuración de seguridad
|
|
45
|
+
│
|
|
46
|
+
├── public/ # Archivos estáticos globales
|
|
47
|
+
│ ├── index.html # Landing page del servidor
|
|
48
|
+
│ └── assets/
|
|
49
|
+
│
|
|
50
|
+
├── routes/ # Rutas globales (core)
|
|
51
|
+
│ └── static.json
|
|
52
|
+
│
|
|
53
|
+
├── programatically/ # Rutas programáticas del núcleo
|
|
54
|
+
│ ├── initFlow.js # Inicialización de componentes
|
|
55
|
+
│ └── PRoutes.js # Rutas del núcleo (vacío por defecto)
|
|
56
|
+
│
|
|
57
|
+
├── docs/ # Documentación
|
|
58
|
+
│ ├── APP_HOOKS_REQUIREMENTS.md
|
|
59
|
+
│ ├── ARCHITECTURE.md
|
|
60
|
+
│ └── CLI_COMMANDS.md
|
|
61
|
+
│
|
|
62
|
+
├── deployeds/ # DEPRECATED - Migrar a apps/
|
|
63
|
+
│
|
|
64
|
+
├── certs/ # Certificados SSL
|
|
65
|
+
├── issues/ # Reporte de bugs
|
|
66
|
+
├── package.json
|
|
67
|
+
├── README.md
|
|
68
|
+
└── CHANGELOG.md
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## 📦 Manifest de Aplicación (package.json)
|
|
74
|
+
|
|
75
|
+
```json
|
|
76
|
+
{
|
|
77
|
+
"name": "mi-app",
|
|
78
|
+
"version": "1.0.0",
|
|
79
|
+
"description": "Descripción de mi aplicación",
|
|
80
|
+
"author": "Tu Nombre <tu@email.com>",
|
|
81
|
+
"license": "MIT",
|
|
82
|
+
|
|
83
|
+
"blackcoffee": {
|
|
84
|
+
"displayName": "Mi Aplicación",
|
|
85
|
+
"description": "Descripción larga para la UI Web",
|
|
86
|
+
"entryPoint": "routes/static.json",
|
|
87
|
+
"autoStart": true,
|
|
88
|
+
"minBlackCoffeeVersion": "2.0.0",
|
|
89
|
+
"routePrefix": null,
|
|
90
|
+
"category": "web",
|
|
91
|
+
"tags": ["ejemplo", "demo"],
|
|
92
|
+
"icon": "/public/icon.png"
|
|
93
|
+
},
|
|
94
|
+
|
|
95
|
+
"dependencies": {
|
|
96
|
+
"lodash": "^4.17.21",
|
|
97
|
+
"axios": "^1.4.0"
|
|
98
|
+
},
|
|
99
|
+
|
|
100
|
+
"scripts": {
|
|
101
|
+
"start": "node app.js",
|
|
102
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### Campos del Manifest
|
|
108
|
+
|
|
109
|
+
| Campo | Requerido | Tipo | Descripción |
|
|
110
|
+
|-------|-----------|------|-------------|
|
|
111
|
+
| `name` | ✅ | string | Nombre único de la aplicación |
|
|
112
|
+
| `version` | ✅ | string | Versión (semver) |
|
|
113
|
+
| `blackcoffee.displayName` | ✅ | string | Nombre para mostrar en UI |
|
|
114
|
+
| `blackcoffee.entryPoint` | ✅ | string | Ruta al archivo de rutas principal |
|
|
115
|
+
| `blackcoffee.autoStart` | ⚠️ | boolean | Iniciar automáticamente al deploy |
|
|
116
|
+
| `blackcoffee.minBlackCoffeeVersion` | ⚠️ | string | Versión mínima requerida |
|
|
117
|
+
| `blackcoffee.routePrefix` | ⚠️ | string\|null | Prefijo custom (null = auto) |
|
|
118
|
+
| `dependencies` | ⚠️ | object | Dependencias de npm |
|
|
119
|
+
| `scripts` | ⚠️ | object | Scripts custom (start, test, etc.) |
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## 🎯 Flujo de Deploy
|
|
124
|
+
|
|
125
|
+
```
|
|
126
|
+
1. blackcoffee deploy ./mi-app-1.0.0.tar.gz
|
|
127
|
+
↓
|
|
128
|
+
2. Extraer a apps/mi-app/1.0.0/
|
|
129
|
+
↓
|
|
130
|
+
3. Validar package.json (manifestValidator.js)
|
|
131
|
+
↓
|
|
132
|
+
4. hooks.doAction('app_deploying', manifest, tempPath)
|
|
133
|
+
↓
|
|
134
|
+
5. hooks.applyFilters('app_manifest_validating', ...)
|
|
135
|
+
↓
|
|
136
|
+
6. Instalar dependencias (npm install en apps/mi-app/1.0.0/)
|
|
137
|
+
↓
|
|
138
|
+
7. hooks.doAction('app_dependencies_installed', ...)
|
|
139
|
+
↓
|
|
140
|
+
8. Cargar routes desde entryPoint
|
|
141
|
+
↓
|
|
142
|
+
9. Para cada ruta:
|
|
143
|
+
hooks.applyFilters('before_app_routes_register', routeConfig, appName, version)
|
|
144
|
+
server.addRoute(modifiedRoute)
|
|
145
|
+
↓
|
|
146
|
+
10. hooks.doAction('after_app_routes_register', routes, appName, version)
|
|
147
|
+
↓
|
|
148
|
+
11. hooks.doAction('app_deployed', manifest, tempPath, deployedPath)
|
|
149
|
+
↓
|
|
150
|
+
12. Si autoStart=true: appManager.start(appName, version)
|
|
151
|
+
↓
|
|
152
|
+
13. Actualizar config/applications.json
|
|
153
|
+
↓
|
|
154
|
+
14. ✅ Deploy completado
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
## 🔧 Hooks Nuevos Requeridos (Insitu Framework)
|
|
160
|
+
|
|
161
|
+
### Application Lifecycle Hooks
|
|
162
|
+
|
|
163
|
+
| Hook | Tipo | Parámetros | Descripción |
|
|
164
|
+
|------|------|------------|-------------|
|
|
165
|
+
| `app_deploying` | Action | `(manifest, tempPath)` | Antes de desplegar |
|
|
166
|
+
| `app_deployed` | Action | `(manifest, tempPath, deployedPath)` | Después de desplegar |
|
|
167
|
+
| `app_undeploying` | Action | `(appName, version)` | Antes de remover |
|
|
168
|
+
| `app_undeployed` | Action | `(appName, version, removedPath)` | Después de remover |
|
|
169
|
+
| `app_starting` | Action | `(appName, version)` | Antes de iniciar |
|
|
170
|
+
| `app_started` | Action | `(appName, version)` | Después de iniciar |
|
|
171
|
+
| `app_stopping` | Action | `(appName, version)` | Antes de detener |
|
|
172
|
+
| `app_stopped` | Action | `(appName, version)` | Después de detener |
|
|
173
|
+
| `app_restarting` | Action | `(appName, version)` | Antes de reiniciar |
|
|
174
|
+
| `app_restarted` | Action | `(appName, version)` | Después de reiniciar |
|
|
175
|
+
|
|
176
|
+
### Route Registration Hooks
|
|
177
|
+
|
|
178
|
+
| Hook | Tipo | Parámetros | Descripción |
|
|
179
|
+
|------|------|------------|-------------|
|
|
180
|
+
| `before_app_routes_register` | Filter | `(routeConfig, appName, version)` | Antes de registrar ruta |
|
|
181
|
+
| `after_app_routes_register` | Action | `(routes, appName, version)` | Después de registrar rutas |
|
|
182
|
+
|
|
183
|
+
### Manifest Validation Hooks
|
|
184
|
+
|
|
185
|
+
| Hook | Tipo | Parámetros | Descripción |
|
|
186
|
+
|------|------|------------|-------------|
|
|
187
|
+
| `app_manifest_validating` | Filter | `(isValid, manifest, errors)` | Durante validación |
|
|
188
|
+
| `app_manifest_validated` | Action | `(manifest, isValid, errors)` | Después de validar |
|
|
189
|
+
|
|
190
|
+
### Dependency Management Hooks
|
|
191
|
+
|
|
192
|
+
| Hook | Tipo | Parámetros | Descripción |
|
|
193
|
+
|------|------|------------|-------------|
|
|
194
|
+
| `app_dependencies_checking` | Action | `(dependencies, appName, version)` | Antes de instalar deps |
|
|
195
|
+
| `app_dependencies_installed` | Action | `(appName, version, success)` | Después de instalar deps |
|
|
196
|
+
|
|
197
|
+
### Configuration Hooks
|
|
198
|
+
|
|
199
|
+
| Hook | Tipo | Parámetros | Descripción |
|
|
200
|
+
|------|------|------------|-------------|
|
|
201
|
+
| `app_config_loading` | Filter | `(config, appName, version)` | Antes de cargar config |
|
|
202
|
+
| `app_config_loaded` | Action | `(config, appName, version)` | Después de cargar config |
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
## 📊 Modificaciones a Insitu Framework
|
|
207
|
+
|
|
208
|
+
### Archivo: `lib/core/hooks-handlers/server-start-hooks-handler.js`
|
|
209
|
+
|
|
210
|
+
**Agregar:** Documentación de hooks de aplicación (solo documentación)
|
|
211
|
+
|
|
212
|
+
### Archivo: `lib/admin/modules/QueueManagementModule.js`
|
|
213
|
+
|
|
214
|
+
**Agregar:** Módulo `AppManagementModule` para administrar apps desde consola TCP
|
|
215
|
+
|
|
216
|
+
### Nuevo Archivo: `lib/admin/modules/AppManagementModule.js`
|
|
217
|
+
|
|
218
|
+
```javascript
|
|
219
|
+
/**
|
|
220
|
+
* Módulo de Administración de Aplicaciones para BlackCoffee
|
|
221
|
+
* Permite gestionar aplicaciones desplegadas desde la consola TCP
|
|
222
|
+
*/
|
|
223
|
+
|
|
224
|
+
class AppManagementModule {
|
|
225
|
+
constructor(adminExtension) {
|
|
226
|
+
this.adminExtension = adminExtension;
|
|
227
|
+
this.name = 'App Management Module';
|
|
228
|
+
this.description = 'Gestión de aplicaciones desplegadas';
|
|
229
|
+
this.commands = [
|
|
230
|
+
'apps-list',
|
|
231
|
+
'apps-deploy',
|
|
232
|
+
'apps-undeploy',
|
|
233
|
+
'apps-start',
|
|
234
|
+
'apps-stop',
|
|
235
|
+
'apps-restart',
|
|
236
|
+
'apps-status',
|
|
237
|
+
'apps-info'
|
|
238
|
+
];
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
handleCommand(command, socket) {
|
|
242
|
+
const parts = command.split(' ');
|
|
243
|
+
const subCommand = parts[0];
|
|
244
|
+
|
|
245
|
+
switch (subCommand) {
|
|
246
|
+
case 'apps-list':
|
|
247
|
+
this.listApps(socket);
|
|
248
|
+
break;
|
|
249
|
+
case 'apps-deploy':
|
|
250
|
+
this.deployApp(socket, parts.slice(1).join(' '));
|
|
251
|
+
break;
|
|
252
|
+
// ... más comandos
|
|
253
|
+
default:
|
|
254
|
+
socket.write(`Comando desconocido: ${subCommand}\n`);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
listApps(socket) {
|
|
259
|
+
const apps = this.adminExtension.frameworkInstance.appManager?.getApps() || [];
|
|
260
|
+
socket.write(`\nAplicaciones desplegadas: ${apps.length}\n\n`);
|
|
261
|
+
|
|
262
|
+
apps.forEach(app => {
|
|
263
|
+
const status = app.running ? '▶️' : '⏹️';
|
|
264
|
+
socket.write(` ${status} ${app.name} v${app.version}\n`);
|
|
265
|
+
});
|
|
266
|
+
|
|
267
|
+
socket.write(`\n> `);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
module.exports = AppManagementModule;
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
---
|
|
275
|
+
|
|
276
|
+
## 🖥️ CLI Commands (Roadmap)
|
|
277
|
+
|
|
278
|
+
### Comandos Básicos
|
|
279
|
+
|
|
280
|
+
```bash
|
|
281
|
+
# Deploy de aplicación
|
|
282
|
+
blackcoffee app:deploy ./mi-app-1.0.0.tar.gz
|
|
283
|
+
|
|
284
|
+
# Listar aplicaciones
|
|
285
|
+
blackcoffee app:list
|
|
286
|
+
|
|
287
|
+
# Ver estado de una app
|
|
288
|
+
blackcoffee app:status mi-app
|
|
289
|
+
|
|
290
|
+
# Iniciar aplicación
|
|
291
|
+
blackcoffee app:start mi-app 1.0.0
|
|
292
|
+
|
|
293
|
+
# Detener aplicación
|
|
294
|
+
blackcoffee app:stop mi-app 1.0.0
|
|
295
|
+
|
|
296
|
+
# Reiniciar aplicación
|
|
297
|
+
blackcoffee app:restart mi-app 1.0.0
|
|
298
|
+
|
|
299
|
+
# Undeploy
|
|
300
|
+
blackcoffee app:undeploy mi-app 1.0.0
|
|
301
|
+
|
|
302
|
+
# Ver logs
|
|
303
|
+
blackcoffee app:logs mi-app --tail=100
|
|
304
|
+
|
|
305
|
+
# Ver información detallada
|
|
306
|
+
blackcoffee app:info mi-app 1.0.0
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
### Comandos de Configuración
|
|
310
|
+
|
|
311
|
+
```bash
|
|
312
|
+
# Listar configuraciones
|
|
313
|
+
blackcoffee config:list
|
|
314
|
+
|
|
315
|
+
# Obtener configuración
|
|
316
|
+
blackcoffee config:get server.port
|
|
317
|
+
|
|
318
|
+
# Establecer configuración
|
|
319
|
+
blackcoffee config:set server.port 9791
|
|
320
|
+
|
|
321
|
+
# Reiniciar servidor
|
|
322
|
+
blackcoffee server:restart
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
---
|
|
326
|
+
|
|
327
|
+
## 🌐 UI Web - Consideraciones Futuras
|
|
328
|
+
|
|
329
|
+
### API Endpoints para UI
|
|
330
|
+
|
|
331
|
+
```javascript
|
|
332
|
+
// GET /api/admin/apps
|
|
333
|
+
// Lista todas las aplicaciones desplegadas
|
|
334
|
+
|
|
335
|
+
// GET /api/admin/apps/:name/:version
|
|
336
|
+
// Información detallada de una app
|
|
337
|
+
|
|
338
|
+
// POST /api/admin/apps/deploy
|
|
339
|
+
// Deploy de nueva aplicación (multipart/form-data)
|
|
340
|
+
|
|
341
|
+
// POST /api/admin/apps/:name/:version/start
|
|
342
|
+
// Iniciar aplicación
|
|
343
|
+
|
|
344
|
+
// POST /api/admin/apps/:name/:version/stop
|
|
345
|
+
// Detener aplicación
|
|
346
|
+
|
|
347
|
+
// DELETE /api/admin/apps/:name/:version
|
|
348
|
+
// Undeploy de aplicación
|
|
349
|
+
|
|
350
|
+
// GET /api/admin/apps/:name/:version/logs
|
|
351
|
+
// Logs de la aplicación
|
|
352
|
+
|
|
353
|
+
// GET /api/admin/stats
|
|
354
|
+
// Estadísticas del servidor
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
### Estructura de Respuesta API
|
|
358
|
+
|
|
359
|
+
```json
|
|
360
|
+
{
|
|
361
|
+
"success": true,
|
|
362
|
+
"data": {
|
|
363
|
+
"apps": [
|
|
364
|
+
{
|
|
365
|
+
"name": "mi-app",
|
|
366
|
+
"version": "1.0.0",
|
|
367
|
+
"displayName": "Mi Aplicación",
|
|
368
|
+
"status": "running",
|
|
369
|
+
"deployedAt": "2026-02-16T12:00:00.000Z",
|
|
370
|
+
"startedAt": "2026-02-16T12:01:00.000Z",
|
|
371
|
+
"routes": 5,
|
|
372
|
+
"dependencies": {
|
|
373
|
+
"lodash": "^4.17.21"
|
|
374
|
+
},
|
|
375
|
+
"metrics": {
|
|
376
|
+
"requests": 1234,
|
|
377
|
+
"errors": 5,
|
|
378
|
+
"avgResponseTime": 45
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
]
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
```
|
|
385
|
+
|
|
386
|
+
---
|
|
387
|
+
|
|
388
|
+
## 📝 Archivos a Crear
|
|
389
|
+
|
|
390
|
+
### Fase 1: Núcleo
|
|
391
|
+
|
|
392
|
+
- [ ] `core/appLoader.js` - Carga de aplicaciones
|
|
393
|
+
- [ ] `core/appManager.js` - Manager de ciclo de vida
|
|
394
|
+
- [ ] `core/configLoader.js` - Carga de configuración
|
|
395
|
+
- [ ] `core/manifestValidator.js` - Validación de manifests
|
|
396
|
+
- [ ] `core/routeRegistrar.js` - Registro de rutas
|
|
397
|
+
- [ ] `includes/appHooks.js` - Hooks específicos para apps
|
|
398
|
+
- [ ] `config/server.json` - Configuración principal
|
|
399
|
+
- [ ] `config/applications.json` - Estado de apps
|
|
400
|
+
|
|
401
|
+
### Fase 2: CLI
|
|
402
|
+
|
|
403
|
+
- [ ] `bin/blackcoffee` - CLI ejecutable
|
|
404
|
+
- [ ] `cli/commands/app.js` - Comandos de aplicaciones
|
|
405
|
+
- [ ] `cli/commands/config.js` - Comandos de configuración
|
|
406
|
+
- [ ] `cli/commands/server.js` - Comandos de servidor
|
|
407
|
+
- [ ] `cli/utils/deployer.js` - Utilidades de deploy
|
|
408
|
+
- [ ] `cli/utils/validator.js` - Validaciones
|
|
409
|
+
|
|
410
|
+
### Fase 3: Insitu Modifications
|
|
411
|
+
|
|
412
|
+
- [ ] `lib/admin/modules/AppManagementModule.js` - Módulo admin TCP
|
|
413
|
+
- [ ] `lib/core/hooks-handlers/app-hooks-handler.js` - Handlers oficiales
|
|
414
|
+
- [ ] Documentación en `hooks_filters_documentation.md`
|
|
415
|
+
|
|
416
|
+
### Fase 4: UI Web (Futuro)
|
|
417
|
+
|
|
418
|
+
- [ ] `routes/admin.json` - Rutas de administración
|
|
419
|
+
- [ ] `controllers/AdminController.js` - Controlador admin
|
|
420
|
+
- [ ] `public/admin/` - UI Web estática
|
|
421
|
+
|
|
422
|
+
---
|
|
423
|
+
|
|
424
|
+
## ✅ Próximo Paso
|
|
425
|
+
|
|
426
|
+
Implementar **Fase 1: Núcleo** comenzando por:
|
|
427
|
+
1. `includes/appHooks.js` - Todos los hooks
|
|
428
|
+
2. `core/appLoader.js` - Carga de aplicaciones
|
|
429
|
+
3. `core/manifestValidator.js` - Validación
|
|
430
|
+
|
|
431
|
+
---
|
|
432
|
+
|
|
433
|
+
**Documento creado:** 2026-02-16
|
|
434
|
+
**Versión:** 1.0
|
|
435
|
+
**BlackCoffee:** v2.0.0-app-server
|