blackcoffee2 2.1.0 → 2.1.2

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 (89) hide show
  1. package/.env.example +67 -0
  2. package/CHANGELOG.md +167 -0
  3. package/README.md +1 -3
  4. package/config/database.json +11 -0
  5. package/controllers/admin/AuthController.js +2 -1
  6. package/core/ViewHelper.js +75 -0
  7. package/core/hotReload.js +1 -1
  8. package/data/blackcoffee_admin.db-shm +0 -0
  9. package/data/blackcoffee_admin.db-wal +0 -0
  10. package/includes/adminAuth.js +5 -3
  11. package/includes/sessions.js +1 -1
  12. package/otrack.tar.gz +0 -0
  13. package/package.json +4 -2
  14. package/programatically/initFlow.js +2 -2
  15. package/test-aplicacion.con-logisession/BlackCoffee.js +0 -226
  16. package/test-aplicacion.con-logisession/SSL_SETUP.md +0 -53
  17. package/test-aplicacion.con-logisession/certs/ca-certificate.pem +0 -32
  18. package/test-aplicacion.con-logisession/certs/ca-private-key.pem +0 -52
  19. package/test-aplicacion.con-logisession/certs/certificate-2048.pem +0 -22
  20. package/test-aplicacion.con-logisession/certs/certificate.pem +0 -32
  21. package/test-aplicacion.con-logisession/certs/private-key-2048.pem +0 -28
  22. package/test-aplicacion.con-logisession/certs/private-key.pem +0 -52
  23. package/test-aplicacion.con-logisession/config/iaQueueSetup.js +0 -84
  24. package/test-aplicacion.con-logisession/config/qwen-rules.json +0 -39
  25. package/test-aplicacion.con-logisession/controllers/analyticsController.js +0 -117
  26. package/test-aplicacion.con-logisession/controllers/auth/AdminAuthController.js +0 -142
  27. package/test-aplicacion.con-logisession/controllers/auth/AuthController.js +0 -439
  28. package/test-aplicacion.con-logisession/controllers/auth/AuthViewController.js +0 -223
  29. package/test-aplicacion.con-logisession/controllers/endpointController.js +0 -66
  30. package/test-aplicacion.con-logisession/controllers/example.js +0 -183
  31. package/test-aplicacion.con-logisession/controllers/iaQueueController.js +0 -367
  32. package/test-aplicacion.con-logisession/controllers/queueController.js +0 -206
  33. package/test-aplicacion.con-logisession/controllers/qwenQueueController.js +0 -197
  34. package/test-aplicacion.con-logisession/controllers/test.js +0 -0
  35. package/test-aplicacion.con-logisession/controllers/tracking/EventsNoFinishController.js +0 -78
  36. package/test-aplicacion.con-logisession/controllers/tracking/TrackingController.js +0 -412
  37. package/test-aplicacion.con-logisession/controllers/tracking/TrackingControllerWithLoadModel.js +0 -437
  38. package/test-aplicacion.con-logisession/hooks/admin-hooks.js +0 -20
  39. package/test-aplicacion.con-logisession/hooks/general-hooks.js +0 -97
  40. package/test-aplicacion.con-logisession/hooks/queue-hooks.js +0 -64
  41. package/test-aplicacion.con-logisession/hooks/route-directory-hooks.js +0 -38
  42. package/test-aplicacion.con-logisession/hooks/security-hooks.js +0 -24
  43. package/test-aplicacion.con-logisession/insitu-admin-client/README.md +0 -69
  44. package/test-aplicacion.con-logisession/insitu-admin-client/package.json +0 -23
  45. package/test-aplicacion.con-logisession/insitu-admin-client.js +0 -257
  46. package/test-aplicacion.con-logisession/models/ExampleModel.js +0 -88
  47. package/test-aplicacion.con-logisession/models/QueueJobModel.js +0 -263
  48. package/test-aplicacion.con-logisession/models/TokenModel.js +0 -207
  49. package/test-aplicacion.con-logisession/models/auth/AuthModel.js +0 -66
  50. package/test-aplicacion.con-logisession/models/auth/UserModel.js +0 -189
  51. package/test-aplicacion.con-logisession/models/tracking/CompletedCartModel.js +0 -213
  52. package/test-aplicacion.con-logisession/models/tracking/EventModel.js +0 -366
  53. package/test-aplicacion.con-logisession/models/tracking/EventsNoFinishModel.js +0 -131
  54. package/test-aplicacion.con-logisession/models/tracking/SessionModel.js +0 -360
  55. package/test-aplicacion.con-logisession/models/tracking/SiteFlowModel.js +0 -286
  56. package/test-aplicacion.con-logisession/models/tracking/TokenModel.js +0 -207
  57. package/test-aplicacion.con-logisession/package-lock.json +0 -3313
  58. package/test-aplicacion.con-logisession/package.json +0 -32
  59. package/test-aplicacion.con-logisession/public/blackcoffee-welcome/index.html +0 -1339
  60. package/test-aplicacion.con-logisession/public/css/style.css +0 -64
  61. package/test-aplicacion.con-logisession/public/ejemplo-estatica/index.html +0 -18
  62. package/test-aplicacion.con-logisession/public/ejemplo-estatica/script.js +0 -16
  63. package/test-aplicacion.con-logisession/public/ejemplo-estatica/styles.css +0 -43
  64. package/test-aplicacion.con-logisession/public/images/logo.svg +0 -7
  65. package/test-aplicacion.con-logisession/public/js/main.js +0 -67
  66. package/test-aplicacion.con-logisession/routes/analytics-routes.json +0 -8
  67. package/test-aplicacion.con-logisession/routes/auth-routes.json +0 -98
  68. package/test-aplicacion.con-logisession/routes/blackcoffee-welcome-routes.json +0 -20
  69. package/test-aplicacion.con-logisession/routes/duplicate-test-routes.json.disabled +0 -16
  70. package/test-aplicacion.con-logisession/routes/ejemplo-estatica-routes.json +0 -11
  71. package/test-aplicacion.con-logisession/routes/endpoints-routes.json +0 -8
  72. package/test-aplicacion.con-logisession/routes/ia-queue-routes.json +0 -26
  73. package/test-aplicacion.con-logisession/routes/product-routes.json.disabled +0 -20
  74. package/test-aplicacion.con-logisession/routes/queue-routes.json +0 -32
  75. package/test-aplicacion.con-logisession/routes/qwen-routes.json +0 -14
  76. package/test-aplicacion.con-logisession/routes/static-routes.json +0 -29
  77. package/test-aplicacion.con-logisession/routes/tracking-routes.json +0 -58
  78. package/test-aplicacion.con-logisession/routes/tracking-with-loadmodel-routes.json +0 -51
  79. package/test-aplicacion.con-logisession/utils/dbAdapter.js +0 -88
  80. package/test-aplicacion.con-logisession/utils/qbWrapper.js +0 -4
  81. package/test-aplicacion.con-logisession/utils/queueProcessor.js +0 -305
  82. package/test-aplicacion.con-logisession/utils/qwenRulesService.js +0 -131
  83. package/test-aplicacion.con-logisession/utils/tokenHelper.js +0 -22
  84. package/test-aplicacion.con-logisession/views/auth/dashboard.html +0 -443
  85. package/test-aplicacion.con-logisession/views/auth/forgot-password.html +0 -200
  86. package/test-aplicacion.con-logisession/views/auth/login.html +0 -213
  87. package/test-aplicacion.con-logisession/views/auth/register.html +0 -294
  88. package/test-aplicacion.con-logisession/views/contact/form.html +0 -47
  89. package/test-aplicacion.con-logisession/views/products/index.html +0 -39
@@ -1,53 +0,0 @@
1
- # Configuración SSL para BlackCoffee
2
-
3
- Este documento explica cómo configurar BlackCoffee para que funcione con SSL/TLS.
4
-
5
- ## Variables de Entorno
6
-
7
- Para habilitar SSL en BlackCoffee, configure las siguientes variables de entorno:
8
-
9
- - `ENABLE_SSL`: Establezca en `true` para habilitar SSL (por defecto es `false`)
10
- - `SSL_KEY_PATH`: Ruta al archivo de clave privada SSL
11
- - `SSL_CERT_PATH`: Ruta al archivo de certificado SSL
12
- - `SSL_CA_PATH`: (Opcional) Ruta al archivo de certificado de autoridad (CA)
13
-
14
- ## Configuración de Ejemplo
15
-
16
- En su archivo `.env`, puede configurar SSL de la siguiente manera:
17
-
18
- ```env
19
- # Deshabilitar SSL (por defecto)
20
- ENABLE_SSL=false
21
-
22
- # O habilitar SSL
23
- ENABLE_SSL=true
24
- SSL_KEY_PATH=./certs/private-key.pem
25
- SSL_CERT_PATH=./certs/certificate.pem
26
- SSL_CA_PATH=./certs/ca-certificate.pem
27
- ```
28
-
29
- ## Generación de Certificados
30
-
31
- Si necesita certificados autofirmados para desarrollo, puede generarlos con OpenSSL:
32
-
33
- ```bash
34
- # Crear directorio para certificados
35
- mkdir -p certs
36
-
37
- # Generar clave privada y certificado autofirmado
38
- openssl req -x509 -newkey rsa:4096 -keyout certs/private-key.pem -out certs/certificate.pem -days 365 -nodes -subj "/C=US/ST=State/L=City/O=Organization/CN=localhost"
39
- ```
40
-
41
- ## Producción
42
-
43
- Para entornos de producción, asegúrese de:
44
-
45
- 1. Utilizar certificados válidos emitidos por una Autoridad de Certificación (CA) confiable
46
- 2. Proteger adecuadamente los archivos de clave privada
47
- 3. Mantener actualizados los certificados antes de su vencimiento
48
-
49
- ## Notas Adicionales
50
-
51
- - Cuando SSL está habilitado, el servidor escuchará en el puerto configurado usando HTTPS
52
- - El valor predeterminado sigue siendo HTTP para compatibilidad hacia atrás
53
- - Si `ENABLE_SSL` está establecido en `true` pero faltan `SSL_KEY_PATH` o `SSL_CERT_PATH`, el servidor mostrará un error y se cerrará
@@ -1,32 +0,0 @@
1
- -----BEGIN CERTIFICATE-----
2
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- +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
- rhfdxfrlTZe64XaVedP2VjufU5Km+JBtFue6n2x1NECwe8teuUSvOL6aV9pupUCX
15
- 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
- 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
- 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
- 2c34VLxF7RyupehcUAjn+aZXhX09H6Wynh5v6fRPWymwLQp5TxbyaIbL+ZHKnCBr
19
- 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
- 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
- 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
- +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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
32
- -----END CERTIFICATE-----
@@ -1,52 +0,0 @@
1
- -----BEGIN PRIVATE KEY-----
2
- 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
- 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
- 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
- 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
- 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
- XO/11Anfbqx67+nBg1sdSB8IfI1I+UTk9wGaRy9kiJp2mhXj5UnbVPm2HpmFysGJ
8
- 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
- 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
- zadP6p2jgUf+1kfjlnkQHc5PV8uIyUbuZPKJJEUwvJhr3RaCX7HrAf7vwJnkUKk5
11
- QUaMkwI1gMfvIiiPPAttGfTpdZGHfylx43ZwRb+7CrjY/OjMc62sJrY8fIe8WnnH
12
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- lAuk5qesTTQpM0TnrCguGC3foG0zQdviEHf8/Oi2TpWjxVY3wskaQmlwAl79ZlHk
20
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- MlGn/65qF8PVBbAMG8tCIclLatC1LT93VFMPN7jTBtRdWR3TjNQKIeDpXG2hyOF5
40
- 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
- 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
- D/VrwV92HDpmLUjdXXi7eZoGcrfIQPJSX1sLmYHjImn5SinRHNDnyvenSp3Yyk6u
43
- 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
- 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
- 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
- 32ECggEBAJx+2Geq1p7X6sBBEbpezi0K6luDf6hPGfhlOB0Kla5E1wXxwAcTPVoL
47
- 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
- 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
- 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
- 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
51
- n3kP2JSr6Y7hpD0t/0f75+RdnCog+GQ=
52
- -----END PRIVATE KEY-----
@@ -1,22 +0,0 @@
1
- -----BEGIN CERTIFICATE-----
2
- MIIDjzCCAnegAwIBAgIUTuUu2F+FkfM5v+yLPfKvNZzLz+YwDQYJKoZIhvcNAQEL
3
- BQAwVzELMAkGA1UEBhMCVVMxDjAMBgNVBAgMBVN0YXRlMQ0wCwYDVQQHDARDaXR5
4
- MRUwEwYDVQQKDAxPcmdhbml6YXRpb24xEjAQBgNVBAMMCWxvY2FsaG9zdDAeFw0y
5
- NjAyMTQwMDIzMDRaFw0yNzAyMTQwMDIzMDRaMFcxCzAJBgNVBAYTAlVTMQ4wDAYD
6
- VQQIDAVTdGF0ZTENMAsGA1UEBwwEQ2l0eTEVMBMGA1UECgwMT3JnYW5pemF0aW9u
7
- MRIwEAYDVQQDDAlsb2NhbGhvc3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
8
- AoIBAQC8q2hknxipLvS7uSsLURP3vUxg+TACP4g0WVjyk2eTLK7NX+JmA5dv+AaN
9
- P4ZBOnAV2/QwR+BlrlxH2mRPUJcRk3dK7jKfgidbSm7sqXZxav1Ej59ph9vjqBdb
10
- X7NfpKfh+AEnWmi8C3VIyAOFb60y9SjuUlUzzBeToPh3iJ0gw0zT84XdLl+wnV47
11
- KjzsLHqRAmBSUct1XGCej0WLeqLwm8i+6685VY2yH4LrYUCmAUV9fxrPGJSkgPgT
12
- faMK/5bC3TytzVSU9iUTP0OiEhJOrJcZMG2ybGPdpSlgp4v5eZA96TFqsKO/TJoy
13
- VzGmRqSqtStmV86accmPsvlCt2RhAgMBAAGjUzBRMB0GA1UdDgQWBBSf/HSRcBqE
14
- Oi9zeDmu0BE8w/M6MzAfBgNVHSMEGDAWgBSf/HSRcBqEOi9zeDmu0BE8w/M6MzAP
15
- BgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQC0mfIAGGA1XaKrLIpK
16
- A+sWqmcyI4dwVyP00CRVy3M9jnwNIOnw3YxdSfKeClX93yRYrRpjPRRqH8JA4ys2
17
- NS8kyvkH899urPU2hZXnuzEk/FHM+0ETxo/qBxavMbzLoDPj+pEj8emI9muoAzBR
18
- wlyD0wbRgvspC2A4lZ+AUIqZHU86u+yrPWPon/y0U6W3h03NA3Xej7pE++wTN9xT
19
- /RHrmJWzSQzPXhxMSX0m9hL6WQvv+3kh9KneXt33xJ4YCAj1ogje/nMzU6yaAXXV
20
- bAJlngUgodn6dEKd3eGbfQBR095/CMk7kjHbnrr/MIrXjoMCIBxzVebVHX/5yIdT
21
- agQm
22
- -----END CERTIFICATE-----
@@ -1,32 +0,0 @@
1
- -----BEGIN CERTIFICATE-----
2
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- C9B+J9SmTWR5bgpurWFpf5u0tVUOhYVPgB2JQ9OXzw+WRlzLYR70CvglqieVpIzv
14
- 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
- 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
- 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
- TfloSLgkjKU5TIqoxCUmvDjjbiDiJh2Ye2sEDVH9XcwuwnlQN+DwL2r3ckZBAgSM
18
- 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
- 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
- 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
- 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
- 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
- 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
- GnAi2nX4N72h//ALh2aKFhbVik7OGwFyR3saFdT5KwogKTpwyVYZAKZ/SEifSGW4
25
- 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
- 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
- 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
- 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
- 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
- 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
- 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
32
- -----END CERTIFICATE-----
@@ -1,28 +0,0 @@
1
- -----BEGIN PRIVATE KEY-----
2
- MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC8q2hknxipLvS7
3
- uSsLURP3vUxg+TACP4g0WVjyk2eTLK7NX+JmA5dv+AaNP4ZBOnAV2/QwR+BlrlxH
4
- 2mRPUJcRk3dK7jKfgidbSm7sqXZxav1Ej59ph9vjqBdbX7NfpKfh+AEnWmi8C3VI
5
- yAOFb60y9SjuUlUzzBeToPh3iJ0gw0zT84XdLl+wnV47KjzsLHqRAmBSUct1XGCe
6
- j0WLeqLwm8i+6685VY2yH4LrYUCmAUV9fxrPGJSkgPgTfaMK/5bC3TytzVSU9iUT
7
- P0OiEhJOrJcZMG2ybGPdpSlgp4v5eZA96TFqsKO/TJoyVzGmRqSqtStmV86accmP
8
- svlCt2RhAgMBAAECggEAHI3pqQ7uJc7iQdYaxmXxOnW3LVcRdcmlRNz/6gi2rI7e
9
- 7tzT8EIbZZoZbb+/QziDtb86JCOAugrrUwGh3GIzVvjlXV0TItKJP9cSVjWopC4/
10
- 4iRFiWyDMl+il1Ty2icatIe7LvhPMSSfzdHdvJCEG1oA5Z7m38XEDLcYW8j8lPRP
11
- RT7OIbE2BhDEZHdnubvSTjM2pISxJxKMWnbiMK0byvVwUsldmN9ZuMPDzwv9Y5qp
12
- MbLC1TTjv2irSkV3yggqjZjIG5rzdoVYNxOYT7RLjwSui0bR1wGtS4ZFnUaE6bAU
13
- FZ7TnHo+Y6xQ3Bdzv4VSUGgRLn+9l5TmNvIe3i7DRQKBgQDsZEDHeq5kMm2YeMIv
14
- F1O0OmSIbkoK1n9Gu4vkAJfqkCNfyVEYeC4X4fQ+sK/PkCwDV+H4Qfx0qaSMtPI6
15
- DKbfqs0yKlYS6JvxCk8z/bTalELTqmvD/WopKUYMF+DMiAvXfH2+L7DH73MMr5Qo
16
- vDykLwjri+IP+8xgb6gsGJ46FQKBgQDMUchmtZKQ9nIkqyaTiPcMbI3o7pwt+3uq
17
- OiqdPsp5CcAOkWfc59TSUZD5Zh3gXISgrBIT80CiSREKTpgOKamvPA79kQIKPb5O
18
- ep8ZVRLv4Pd1As9LI2ptnzZZ0DJJGam1lraiXtiu1Y4O/NB5EIUAlj87wR3nxyKl
19
- A533emOQHQKBgQCiew4jjmmLqTW3VVlzcL8x4+jx9YyjAmgdQA+ZOecxbL1Du2Yo
20
- QYK9G6v74woUyu3VpnRFZWWW8nuN01mjGMsidY3w6zSabpOxC/sAq2PB0aJVRpAn
21
- +GkdvabN7SOwsdoh1QnAzZre8fDMSWq2zRuJZmLlNBLAFbyWlGitVoZ7OQKBgHID
22
- tRuzeO1RyNIze5xaktmo/eucsyRpsFGGkd8beerfCQBYHahE6hrPD2JMnKFln1D1
23
- lETzuf6VXV/uCaXlk93IWukecQ/78mViwcNmGOIpHI18GuboBWzUqoSlzFnEa1J8
24
- nr+uw6WUX+h3JXJZSI7SSMj0c9ax5eBFS3IdJs/1AoGAOEsheOU783soNhLYbsNz
25
- g+WuWYFm33aaDcAB0Bwr0FQt4nXAdaAJW7JouyTtnsmYq0DTz2RBouxpiigt5qg1
26
- qE1HETdfdO282QiI2IkxH5c7gTrvc0XrxKYCpUuOnobABVsQeRiitTHQvp3FcwQW
27
- Kkl1ouq9cAlbKAJ1VTEHVsk=
28
- -----END PRIVATE KEY-----
@@ -1,52 +0,0 @@
1
- -----BEGIN PRIVATE KEY-----
2
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 38U4rfA6apDnejMlQ0zxAoIBAQD8x232H3me9nW/53Zjd+HW0OQabbJWkZPi3zgq
25
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- kkflVz1GbHl4hbACZCAJyc19k8ZD1mus5qE/NCOzmTJiSt/tIKFjhCzzMBR+cF2r
50
- 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
51
- wAaKuo3SY0hW6Y3Jc8hf3Xz8qfSbXA==
52
- -----END PRIVATE KEY-----
@@ -1,84 +0,0 @@
1
- // Configuración del sistema de colas de IA siguiendo el patrón del ejemplo test-app
2
-
3
- const { HookSystem } = require('insitu-js');
4
-
5
- // Verificar que el sistema de colas global esté disponible
6
- if (global.queueIntegration) {
7
- // Crear sistema de hooks para la cola de IA
8
- const iaHooks = new HookSystem();
9
-
10
- // Hook para personalizar la lógica de procesamiento
11
- iaHooks.addAction('queue_execute_task', (task, queueName, taskObj) => {
12
- console.log(`[IA_QUEUE] Preparando para procesar tarea: ${taskObj.id}`);
13
-
14
- // Envolver la tarea original con lógica adicional
15
- const wrappedTask = async (datos, taskObj) => {
16
- console.log(`[IA_QUEUE] Iniciando procesamiento de IA: ${taskObj.id}`);
17
- try {
18
- const result = await task(datos, taskObj);
19
- console.log(`[IA_QUEUE] Procesamiento completado: ${taskObj.id}`);
20
- return result;
21
- } catch (error) {
22
- console.log(`[IA_QUEUE] Error procesando tarea: ${taskObj.id} - ${error.message}`);
23
- throw error;
24
- }
25
- };
26
-
27
- return wrappedTask;
28
- });
29
-
30
- // Hook para manejar la lógica de fallback
31
- iaHooks.addAction('queue_task_fallback', (queueName, task, error) => {
32
- console.log(`[IA_QUEUE] Ejecutando fallback para tarea:`, error.message);
33
- // Lógica personalizada para manejar tareas que fallan definitivamente
34
- });
35
-
36
- // Hook para registrar tareas completadas
37
- iaHooks.addAction('queue_task_completed', async (queueName, task) => {
38
- // El hook queue_task_completed se llama con (queueName, task) según el código del sistema de colas
39
- // El resultado no se pasa directamente en este hook, sino que se maneja de otra manera
40
- console.log(`[IA_QUEUE] Hook queue_task_completed recibió:`, { queueName, task });
41
-
42
- // Extraer el ID de la tarea del objeto
43
- let taskId;
44
- if (task && typeof task === 'object' && task.id) {
45
- taskId = task.id;
46
- } else if (typeof task === 'string') {
47
- taskId = task; // Si es un string, asumimos que es el ID
48
- } else {
49
- console.error(`[IA_QUEUE] No se pudo obtener ID de la tarea completada:`, { task });
50
- return;
51
- }
52
-
53
- console.log(`[IA_QUEUE] Tarea completada en cola ${queueName}:`, taskId);
54
-
55
- // En este hook no tenemos acceso directo al resultado de la tarea
56
- // El resultado debe ser manejado de otra manera, posiblemente almacenado temporalmente
57
- // durante la ejecución de la tarea y luego recuperado aquí
58
-
59
- // Para este ejemplo, vamos a asumir que el resultado ya está disponible en algún lugar
60
- // o que se manejará de forma diferente
61
- console.log(`[IA_QUEUE] Tarea ${taskId} completada, pero el resultado debe manejarse de otra manera`);
62
- });
63
-
64
- // Hook para registrar tareas fallidas
65
- iaHooks.addAction('queue_task_failed', (queueName, taskObj, error) => {
66
- if (!taskObj || !taskObj.id) {
67
- console.error(`[IA_QUEUE] Tarea fallida sin ID válido:`, { taskObj, error });
68
- return;
69
- }
70
-
71
- console.log(`[IA_QUEUE] Tarea fallida en cola ${queueName}:`, taskObj.id, error.message);
72
- });
73
-
74
- // Crear la cola de IA con hooks personalizados
75
- global.queueIntegration.createQueue('ia-processing', {
76
- concurrency: 2, // Máximo 2 tareas de IA ejecutándose simultáneamente
77
- retryAttempts: 3, // Reintentar hasta 3 veces si falla
78
- retryDelay: 2000 // Esperar 2 segundos entre reintentos
79
- }, iaHooks);
80
-
81
- console.log('[IA_QUEUE] Cola de IA configurada correctamente');
82
- } else {
83
- console.error('[IA_QUEUE] El sistema de colas global no está disponible');
84
- }
@@ -1,39 +0,0 @@
1
- {
2
- "qwenRules": {
3
- "restrictSystemInfo": true,
4
- "preventDataLeakage": true,
5
- "allowExternalContext": false,
6
- "maxResponseTokens": 2000,
7
- "responseFormat": "json",
8
- "prohibitedTopics": [
9
- "sistema de archivos",
10
- "estructura de directorios",
11
- "archivos del sistema",
12
- "información interna",
13
- "código fuente del sistema",
14
- "configuración interna"
15
- ],
16
- "requiredTopics": [
17
- "datos proporcionados",
18
- "análisis de información",
19
- "recomendaciones basadas en datos"
20
- ],
21
- "customInstructions": [
22
- "Solo responde sobre los datos que se te proporcionan explícitamente",
23
- "No hagas suposiciones sobre la estructura interna del sistema",
24
- "Si se te pregunta sobre archivos o estructura del sistema, redirige a los datos proporcionados",
25
- "Mantén el enfoque en el análisis de los datos proporcionados"
26
- ]
27
- },
28
- "queueSettings": {
29
- "defaultPriority": 0,
30
- "maxRetries": 3,
31
- "processingTimeout": 60000,
32
- "maxPayloadSize": 1048576
33
- },
34
- "security": {
35
- "sanitizeInputs": true,
36
- "validateOutputs": true,
37
- "blockSuspiciousPatterns": true
38
- }
39
- }
@@ -1,117 +0,0 @@
1
- const { ControllerBase } = require('insitu-js');
2
- const { spawn, exec } = require('child_process');
3
-
4
- class AnalyticsController extends ControllerBase {
5
- constructor(options = {}) {
6
- super(options);
7
- }
8
-
9
- // Método para procesar datos de métricas y prompt con Qwen
10
- async processAnalytics(req, res) {
11
- try {
12
- // Obtener el cuerpo de la solicitud
13
- let requestData = {};
14
-
15
- // Parsear el cuerpo de la solicitud
16
- if (req.body) {
17
- if (typeof req.body === 'string') {
18
- requestData = JSON.parse(req.body);
19
- } else {
20
- requestData = req.body;
21
- }
22
- } else {
23
- // Si no está en req.body, intentar parsear desde raw body si está disponible
24
- if (req.rawBody) {
25
- requestData = JSON.parse(req.rawBody);
26
- } else {
27
- // Para casos donde necesitamos leer directamente del stream
28
- let body = '';
29
- for await (const chunk of req) {
30
- body += chunk.toString();
31
- }
32
- requestData = JSON.parse(body);
33
- }
34
- }
35
-
36
- // Extraer las secciones del JSON
37
- const { metrics, prompt } = requestData;
38
-
39
- // Validar que ambas secciones existan
40
- if (!metrics) {
41
- return this.json(res, {
42
- success: false,
43
- error: 'Missing metrics section in request'
44
- }, 400);
45
- }
46
-
47
- if (!prompt) {
48
- return this.json(res, {
49
- success: false,
50
- error: 'Missing prompt section in request'
51
- }, 400);
52
- }
53
-
54
- // Convertir los datos de métricas a string para el comando y escapar comillas
55
- const metricsString = JSON.stringify(metrics).replace(/"/g, '\\"');
56
-
57
- // Construir el comando para Qwen usando la bandera -p para modo no interactivo
58
- const qwenCommand = `qwen -p "${prompt} ${metricsString}"`;
59
-
60
- // Ejecutar el comando de Qwen y esperar la respuesta
61
- const qwenResult = await this.executeQwenSync(qwenCommand);
62
-
63
- // Devolver la respuesta completa incluyendo la respuesta de Qwen
64
- this.json(res, {
65
- success: true,
66
- data: {
67
- originalRequest: { metrics, prompt },
68
- qwenResponse: qwenResult.stdout,
69
- commandUsed: qwenCommand,
70
- error: qwenResult.stderr || null
71
- }
72
- });
73
-
74
- } catch (error) {
75
- // Manejar errores de parsing u otros
76
- this.json(res, {
77
- success: false,
78
- error: error.message
79
- }, 500);
80
- }
81
- }
82
-
83
- // Método para ejecutar Qwen de forma síncrona (esperando la respuesta)
84
- async executeQwenSync(command) {
85
- const { exec } = require('child_process');
86
- const util = require('util');
87
- const execAsync = util.promisify(exec);
88
-
89
- try {
90
- // Ejecutar el comando usando exec en lugar de spawn para manejar correctamente las comillas
91
- const result = await execAsync(command);
92
- return {
93
- stdout: result.stdout,
94
- stderr: result.stderr,
95
- code: 0
96
- };
97
- } catch (error) {
98
- // En caso de error, devolver el error con formato consistente
99
- return {
100
- stdout: error.stdout || '',
101
- stderr: error.stderr || error.message,
102
- code: error.code || 1
103
- };
104
- }
105
- }
106
- }
107
-
108
- // Instanciar el controlador
109
- const controllerInstance = new AnalyticsController();
110
-
111
- // Exportar métodos individualmente para que RouteLoader pueda acceder a ellos
112
- module.exports = {
113
- processAnalytics: (req, res) => {
114
- controllerInstance.setRequestResponse(req, res);
115
- controllerInstance.processAnalytics(req, res);
116
- }
117
- };
@@ -1,142 +0,0 @@
1
- /**
2
- * Controlador de autenticación de administración simplificado (sin roles y capacidades)
3
- * AdminAuthController.js
4
- */
5
-
6
- const { ControllerBase } = require('insitu-js');
7
-
8
- class AdminAuthController extends ControllerBase {
9
- constructor(options = {}) {
10
- super(options);
11
- }
12
-
13
- /**
14
- * Verifica si el usuario tiene rol de administrador
15
- * @param {Object} req - Objeto de solicitud
16
- * @returns {Promise<boolean>} - True si es admin
17
- */
18
- async checkAdminRole(req) {
19
- // En esta versión simplificada, todos los usuarios autenticados pueden acceder
20
- // a funciones de administrador (en un entorno real, se verificaría un rol específico)
21
- if (req.session && req.session.data && req.session.data.authenticated) {
22
- return true;
23
- }
24
- return false;
25
- }
26
-
27
- /**
28
- * Crea un nuevo rol
29
- * POST /api/admin/roles
30
- */
31
- async createRole(req, res) {
32
- // En esta versión simplificada, no se soporta la creación de roles
33
- this.json(res, {
34
- success: false,
35
- error: 'Funcionalidad de roles y capacidades deshabilitada en esta versión'
36
- }, 501);
37
- }
38
-
39
- /**
40
- * Obtiene todos los roles
41
- * GET /api/admin/roles
42
- */
43
- async getRoles(req, res) {
44
- // En esta versión simplificada, devolvemos una lista vacía
45
- this.json(res, {
46
- success: true,
47
- roles: []
48
- });
49
- }
50
-
51
- /**
52
- * Crea una nueva capability
53
- * POST /api/admin/capabilities
54
- */
55
- async createCapability(req, res) {
56
- // En esta versión simplificada, no se soporta la creación de capabilities
57
- this.json(res, {
58
- success: false,
59
- error: 'Funcionalidad de roles y capacidades deshabilitada en esta versión'
60
- }, 501);
61
- }
62
-
63
- /**
64
- * Obtiene todas las capabilities
65
- * GET /api/admin/capabilities
66
- */
67
- async getCapabilities(req, res) {
68
- // En esta versión simplificada, devolvemos una lista vacía
69
- this.json(res, {
70
- success: true,
71
- capabilities: []
72
- });
73
- }
74
-
75
- /**
76
- * Asigna un rol a un usuario
77
- * POST /api/admin/users/:userId/assign-role
78
- */
79
- async assignRoleToUser(req, res) {
80
- // En esta versión simplificada, no se soporta la asignación de roles
81
- this.json(res, {
82
- success: false,
83
- error: 'Funcionalidad de roles y capacidades deshabilitada en esta versión'
84
- }, 501);
85
- }
86
-
87
- /**
88
- * Asigna una capability a un usuario
89
- * POST /api/admin/users/:userId/assign-capability
90
- */
91
- async assignCapabilityToUser(req, res) {
92
- // En esta versión simplificada, no se soporta la asignación de capabilities
93
- this.json(res, {
94
- success: false,
95
- error: 'Funcionalidad de roles y capacidades deshabilitada en esta versión'
96
- }, 501);
97
- }
98
-
99
- /**
100
- * Método para validar token
101
- */
102
- async validateToken(token) {
103
- try {
104
- const { validateToken } = require('../../utils/tokenHelper');
105
- const isValid = await validateToken(token);
106
- return isValid;
107
- } catch (error) {
108
- console.error('Error validando token:', error);
109
- return false;
110
- }
111
- }
112
- }
113
-
114
- // Exportar métodos individualmente para que RouteLoader pueda acceder a ellos
115
- const controllerInstance = new AdminAuthController();
116
-
117
- module.exports = {
118
- createRole: (req, res) => {
119
- controllerInstance.setRequestResponse(req, res);
120
- controllerInstance.createRole(req, res);
121
- },
122
- getRoles: (req, res) => {
123
- controllerInstance.setRequestResponse(req, res);
124
- controllerInstance.getRoles(req, res);
125
- },
126
- createCapability: (req, res) => {
127
- controllerInstance.setRequestResponse(req, res);
128
- controllerInstance.createCapability(req, res);
129
- },
130
- getCapabilities: (req, res) => {
131
- controllerInstance.setRequestResponse(req, res);
132
- controllerInstance.getCapabilities(req, res);
133
- },
134
- assignRoleToUser: (req, res) => {
135
- controllerInstance.setRequestResponse(req, res);
136
- controllerInstance.assignRoleToUser(req, res);
137
- },
138
- assignCapabilityToUser: (req, res) => {
139
- controllerInstance.setRequestResponse(req, res);
140
- controllerInstance.assignCapabilityToUser(req, res);
141
- }
142
- };