blackcoffee2 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (170) hide show
  1. package/CHANGELOG.md +664 -0
  2. package/LICENSE +201 -0
  3. package/NOTICE +25 -0
  4. package/README.md +246 -0
  5. package/apps.zip +0 -0
  6. package/bin/adminclient +105 -0
  7. package/bin/blackcoffee +133 -0
  8. package/cli/admin-users.js +282 -0
  9. package/cli/commands/app.js +561 -0
  10. package/cli/commands/config.js +182 -0
  11. package/cli/commands/db.js +257 -0
  12. package/cli/commands/server.js +200 -0
  13. package/config/applications.json +5 -0
  14. package/config/database.json +28 -0
  15. package/config/database.json.example +23 -0
  16. package/config/server.json +32 -0
  17. package/controllers/admin/AdminController.js +529 -0
  18. package/controllers/admin/AdminViewController.js +90 -0
  19. package/controllers/admin/AuthController.js +293 -0
  20. package/controllers/admin/DatabaseAdminController.js +218 -0
  21. package/core/SQLiteAdapter.js +333 -0
  22. package/core/appLoader.js +385 -0
  23. package/core/databasePoolManager.js +431 -0
  24. package/core/hotReload.js +363 -0
  25. package/data/ADMIN-README.md +145 -0
  26. package/data/CHANGELOG.md +48 -0
  27. package/data/GTK3-NODE-PROPOSALS.md +410 -0
  28. package/data/admin-db.js +150 -0
  29. package/data/admin-gui.js +452 -0
  30. package/data/blackcoffee_admin.db-shm +0 -0
  31. package/data/blackcoffee_admin.db-wal +0 -0
  32. package/data/migrations/001_create_admin_users.sql +33 -0
  33. package/docs/APP_HOOKS_HANDLER.md +432 -0
  34. package/docs/APP_HOOKS_REQUIREMENTS.md +588 -0
  35. package/docs/ARCHITECTURE.md +435 -0
  36. package/docs/CREAR_APP_Y_USAR_POOLS.md +1595 -0
  37. package/docs/EVENTS_APP_MANUAL.md +289 -0
  38. package/docs/INSITU_BINARY_UPLOAD_PROPOSAL.md +186 -0
  39. package/docs/INSITU_FIREWALL_EXCEPTION.md +187 -0
  40. package/docs/ROADMAP.md +242 -0
  41. package/docs/ROADMAP.md.backup +243 -0
  42. package/includes/404-hooks.js +423 -0
  43. package/includes/adminAuth.js +214 -0
  44. package/includes/adminExtension.js +53 -0
  45. package/includes/appHooks.js +302 -0
  46. package/includes/initAdminDb.js +115 -0
  47. package/includes/routeLoader.js +67 -0
  48. package/includes/sessions.js +223 -0
  49. package/issues/001-duplicate-module-loading.md +92 -0
  50. package/manuales/ADMIN_EXTENSION_COMMANDS_MANUAL.md +261 -0
  51. package/manuales/ADMIN_EXTENSION_HOOK_EXAMPLE.md +28 -0
  52. package/manuales/ADMIN_EXTENSION_INTEGRATION_MANUAL.md +232 -0
  53. package/manuales/CACHE_REGEX_COMMANDS.md +136 -0
  54. package/manuales/CACHE_SYSTEM_MAP.md +206 -0
  55. package/manuales/CREACION_DE_CONTROLADORES_INSITU.md +383 -0
  56. package/manuales/QUEUE_CLI_MODULE_MANUAL.md +289 -0
  57. package/manuales/QUEUE_SYSTEM_MANUAL.md +320 -0
  58. package/manuales/ROUTE_CACHE_MODULE_MANUAL.md +205 -0
  59. package/manuales/SESSION_MANAGER_GUIDE.md +529 -0
  60. package/manuales/SESSION_SECURITY_FLAGS.md +174 -0
  61. package/manuales/WAF_MODULE_MANUAL.md +229 -0
  62. package/manuales/after_route_handler_filter_example.md +116 -0
  63. package/manuales/after_route_handler_usage.md +130 -0
  64. package/manuales/an/303/241lisis-completo-insitu-framework.md +213 -0
  65. package/manuales/async_hooks_promises_guide.md +325 -0
  66. package/manuales/before_route_handler_filter_example.md +97 -0
  67. package/manuales/before_route_handler_usage.md +122 -0
  68. package/manuales/hooks_chaining_conditions_guide.md +261 -0
  69. package/manuales/hooks_filters_documentation.md +493 -0
  70. package/manuales/hooks_filters_documentation_en.md +493 -0
  71. package/manuales/hooks_vs_middlewares_comparison.md +87 -0
  72. package/manuales/manual-mvc-completo.md +934 -0
  73. package/manuales/modulos_administracion.md +89 -0
  74. package/manuales/router_execution_points.md +74 -0
  75. package/manuales/static_file_hooks_usage.md +222 -0
  76. package/models/AdminUserModel.js +132 -0
  77. package/package.json +45 -0
  78. package/programatically/PRoutes.js +89 -0
  79. package/programatically/initFlow.js +211 -0
  80. package/public/admin/css/db-pools.css +336 -0
  81. package/public/admin/css/styles.css +310 -0
  82. package/public/admin/database.html +312 -0
  83. package/public/admin/index.html +116 -0
  84. package/public/admin/js/app.js +470 -0
  85. package/public/admin/js/db-pools.js +253 -0
  86. package/public/admin/login.html +278 -0
  87. package/public/assets/css/styles.css +477 -0
  88. package/public/assets/js/main.js +89 -0
  89. package/public/index.html +136 -0
  90. package/public/templates/404.html +158 -0
  91. package/routes/admin-views.json +20 -0
  92. package/routes/admin.json +38 -0
  93. package/routes/auth.json +32 -0
  94. package/routes/static.json +18 -0
  95. package/server.js +299 -0
  96. package/test-aplicacion.con-logisession/BlackCoffee.js +226 -0
  97. package/test-aplicacion.con-logisession/SSL_SETUP.md +53 -0
  98. package/test-aplicacion.con-logisession/certs/ca-certificate.pem +32 -0
  99. package/test-aplicacion.con-logisession/certs/ca-private-key.pem +52 -0
  100. package/test-aplicacion.con-logisession/certs/certificate-2048.pem +22 -0
  101. package/test-aplicacion.con-logisession/certs/certificate.pem +32 -0
  102. package/test-aplicacion.con-logisession/certs/private-key-2048.pem +28 -0
  103. package/test-aplicacion.con-logisession/certs/private-key.pem +52 -0
  104. package/test-aplicacion.con-logisession/config/iaQueueSetup.js +84 -0
  105. package/test-aplicacion.con-logisession/config/qwen-rules.json +39 -0
  106. package/test-aplicacion.con-logisession/controllers/analyticsController.js +117 -0
  107. package/test-aplicacion.con-logisession/controllers/auth/AdminAuthController.js +142 -0
  108. package/test-aplicacion.con-logisession/controllers/auth/AuthController.js +439 -0
  109. package/test-aplicacion.con-logisession/controllers/auth/AuthViewController.js +223 -0
  110. package/test-aplicacion.con-logisession/controllers/endpointController.js +66 -0
  111. package/test-aplicacion.con-logisession/controllers/example.js +183 -0
  112. package/test-aplicacion.con-logisession/controllers/iaQueueController.js +367 -0
  113. package/test-aplicacion.con-logisession/controllers/queueController.js +206 -0
  114. package/test-aplicacion.con-logisession/controllers/qwenQueueController.js +197 -0
  115. package/test-aplicacion.con-logisession/controllers/test.js +0 -0
  116. package/test-aplicacion.con-logisession/controllers/tracking/EventsNoFinishController.js +78 -0
  117. package/test-aplicacion.con-logisession/controllers/tracking/TrackingController.js +412 -0
  118. package/test-aplicacion.con-logisession/controllers/tracking/TrackingControllerWithLoadModel.js +437 -0
  119. package/test-aplicacion.con-logisession/hooks/admin-hooks.js +20 -0
  120. package/test-aplicacion.con-logisession/hooks/general-hooks.js +97 -0
  121. package/test-aplicacion.con-logisession/hooks/queue-hooks.js +64 -0
  122. package/test-aplicacion.con-logisession/hooks/route-directory-hooks.js +38 -0
  123. package/test-aplicacion.con-logisession/hooks/security-hooks.js +24 -0
  124. package/test-aplicacion.con-logisession/insitu-admin-client/README.md +69 -0
  125. package/test-aplicacion.con-logisession/insitu-admin-client/package.json +23 -0
  126. package/test-aplicacion.con-logisession/insitu-admin-client.js +257 -0
  127. package/test-aplicacion.con-logisession/models/ExampleModel.js +88 -0
  128. package/test-aplicacion.con-logisession/models/QueueJobModel.js +263 -0
  129. package/test-aplicacion.con-logisession/models/TokenModel.js +207 -0
  130. package/test-aplicacion.con-logisession/models/auth/AuthModel.js +66 -0
  131. package/test-aplicacion.con-logisession/models/auth/UserModel.js +189 -0
  132. package/test-aplicacion.con-logisession/models/tracking/CompletedCartModel.js +213 -0
  133. package/test-aplicacion.con-logisession/models/tracking/EventModel.js +366 -0
  134. package/test-aplicacion.con-logisession/models/tracking/EventsNoFinishModel.js +131 -0
  135. package/test-aplicacion.con-logisession/models/tracking/SessionModel.js +360 -0
  136. package/test-aplicacion.con-logisession/models/tracking/SiteFlowModel.js +286 -0
  137. package/test-aplicacion.con-logisession/models/tracking/TokenModel.js +207 -0
  138. package/test-aplicacion.con-logisession/package-lock.json +3313 -0
  139. package/test-aplicacion.con-logisession/package.json +32 -0
  140. package/test-aplicacion.con-logisession/public/blackcoffee-welcome/index.html +1339 -0
  141. package/test-aplicacion.con-logisession/public/css/style.css +64 -0
  142. package/test-aplicacion.con-logisession/public/ejemplo-estatica/index.html +18 -0
  143. package/test-aplicacion.con-logisession/public/ejemplo-estatica/script.js +16 -0
  144. package/test-aplicacion.con-logisession/public/ejemplo-estatica/styles.css +43 -0
  145. package/test-aplicacion.con-logisession/public/images/logo.svg +7 -0
  146. package/test-aplicacion.con-logisession/public/js/main.js +67 -0
  147. package/test-aplicacion.con-logisession/routes/analytics-routes.json +8 -0
  148. package/test-aplicacion.con-logisession/routes/auth-routes.json +98 -0
  149. package/test-aplicacion.con-logisession/routes/blackcoffee-welcome-routes.json +20 -0
  150. package/test-aplicacion.con-logisession/routes/duplicate-test-routes.json.disabled +16 -0
  151. package/test-aplicacion.con-logisession/routes/ejemplo-estatica-routes.json +11 -0
  152. package/test-aplicacion.con-logisession/routes/endpoints-routes.json +8 -0
  153. package/test-aplicacion.con-logisession/routes/ia-queue-routes.json +26 -0
  154. package/test-aplicacion.con-logisession/routes/product-routes.json.disabled +20 -0
  155. package/test-aplicacion.con-logisession/routes/queue-routes.json +32 -0
  156. package/test-aplicacion.con-logisession/routes/qwen-routes.json +14 -0
  157. package/test-aplicacion.con-logisession/routes/static-routes.json +29 -0
  158. package/test-aplicacion.con-logisession/routes/tracking-routes.json +58 -0
  159. package/test-aplicacion.con-logisession/routes/tracking-with-loadmodel-routes.json +51 -0
  160. package/test-aplicacion.con-logisession/utils/dbAdapter.js +88 -0
  161. package/test-aplicacion.con-logisession/utils/qbWrapper.js +4 -0
  162. package/test-aplicacion.con-logisession/utils/queueProcessor.js +305 -0
  163. package/test-aplicacion.con-logisession/utils/qwenRulesService.js +131 -0
  164. package/test-aplicacion.con-logisession/utils/tokenHelper.js +22 -0
  165. package/test-aplicacion.con-logisession/views/auth/dashboard.html +443 -0
  166. package/test-aplicacion.con-logisession/views/auth/forgot-password.html +200 -0
  167. package/test-aplicacion.con-logisession/views/auth/login.html +213 -0
  168. package/test-aplicacion.con-logisession/views/auth/register.html +294 -0
  169. package/test-aplicacion.con-logisession/views/contact/form.html +47 -0
  170. package/test-aplicacion.con-logisession/views/products/index.html +39 -0
@@ -0,0 +1,64 @@
1
+ /* Estilos generales para la aplicación */
2
+ body {
3
+ font-family: Arial, sans-serif;
4
+ margin: 0;
5
+ padding: 20px;
6
+ background-color: #f5f5f5;
7
+ }
8
+
9
+ .header {
10
+ background-color: #333;
11
+ color: white;
12
+ padding: 1rem;
13
+ text-align: center;
14
+ border-radius: 5px;
15
+ margin-bottom: 20px;
16
+ }
17
+
18
+ .content {
19
+ background-color: white;
20
+ padding: 20px;
21
+ border-radius: 5px;
22
+ box-shadow: 0 2px 5px rgba(0,0,0,0.1);
23
+ }
24
+
25
+ .footer {
26
+ text-align: center;
27
+ margin-top: 20px;
28
+ padding: 10px;
29
+ color: #666;
30
+ font-size: 0.9em;
31
+ }
32
+
33
+ .button {
34
+ background-color: #4CAF50;
35
+ border: none;
36
+ color: white;
37
+ padding: 10px 20px;
38
+ text-align: center;
39
+ text-decoration: none;
40
+ display: inline-block;
41
+ font-size: 16px;
42
+ margin: 4px 2px;
43
+ cursor: pointer;
44
+ border-radius: 4px;
45
+ }
46
+
47
+ .button:hover {
48
+ background-color: #45a049;
49
+ }
50
+
51
+ .product-card {
52
+ border: 1px solid #ddd;
53
+ padding: 15px;
54
+ margin: 10px 0;
55
+ border-radius: 5px;
56
+ background-color: #f9f9f9;
57
+ }
58
+
59
+ .product-image {
60
+ width: 100%;
61
+ max-width: 200px;
62
+ height: auto;
63
+ border-radius: 5px;
64
+ }
@@ -0,0 +1,18 @@
1
+ <!DOCTYPE html>
2
+ <html lang="es">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Ejemplo de Ruta Estática</title>
7
+ <link rel="stylesheet" href="/ejemplo-estatica/styles.css">
8
+ </head>
9
+ <body>
10
+ <div class="container">
11
+ <h1>Ejemplo de Ruta Estática</h1>
12
+ <p>Esta página está siendo servida desde una ruta estática.</p>
13
+ <button id="botonEjemplo">Haz clic aquí</button>
14
+ <div id="resultado"></div>
15
+ </div>
16
+ <script src="/ejemplo-estatica/script.js"></script>
17
+ </body>
18
+ </html>
@@ -0,0 +1,16 @@
1
+ document.addEventListener('DOMContentLoaded', function() {
2
+ const boton = document.getElementById('botonEjemplo');
3
+ const resultado = document.getElementById('resultado');
4
+
5
+ boton.addEventListener('click', function() {
6
+ const fecha = new Date().toLocaleString();
7
+ resultado.innerHTML = `<p>Botón clickeado en: ${fecha}</p>`;
8
+ resultado.style.display = 'block';
9
+
10
+ // Cambiar el color del botón temporalmente
11
+ boton.style.backgroundColor = '#f44336';
12
+ setTimeout(function() {
13
+ boton.style.backgroundColor = '#4CAF50';
14
+ }, 500);
15
+ });
16
+ });
@@ -0,0 +1,43 @@
1
+ body {
2
+ font-family: Arial, sans-serif;
3
+ margin: 0;
4
+ padding: 20px;
5
+ background-color: #f5f5f5;
6
+ }
7
+
8
+ .container {
9
+ max-width: 800px;
10
+ margin: 0 auto;
11
+ background-color: white;
12
+ padding: 30px;
13
+ border-radius: 8px;
14
+ box-shadow: 0 2px 10px rgba(0,0,0,0.1);
15
+ }
16
+
17
+ h1 {
18
+ color: #333;
19
+ text-align: center;
20
+ }
21
+
22
+ button {
23
+ background-color: #4CAF50;
24
+ color: white;
25
+ padding: 10px 20px;
26
+ border: none;
27
+ border-radius: 4px;
28
+ cursor: pointer;
29
+ font-size: 16px;
30
+ margin: 10px 0;
31
+ }
32
+
33
+ button:hover {
34
+ background-color: #45a049;
35
+ }
36
+
37
+ #resultado {
38
+ margin-top: 20px;
39
+ padding: 10px;
40
+ background-color: #e7f3ff;
41
+ border-radius: 4px;
42
+ display: none;
43
+ }
@@ -0,0 +1,7 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg width="200" height="200" viewBox="0 0 200 200" xmlns="http://www.w3.org/2000/svg">
3
+ <rect width="200" height="200" fill="#3498db"/>
4
+ <circle cx="100" cy="100" r="60" fill="#e74c3c"/>
5
+ <rect x="50" y="50" width="100" height="100" fill="#f1c40f" opacity="0.7"/>
6
+ <polygon points="100,30 40,170 160,170" fill="#2ecc71" opacity="0.8"/>
7
+ </svg>
@@ -0,0 +1,67 @@
1
+ // Script principal para la aplicación
2
+ document.addEventListener('DOMContentLoaded', function() {
3
+ console.log('Aplicación JERK cargada correctamente');
4
+
5
+ // Función para cargar productos dinámicamente
6
+ async function loadProducts() {
7
+ try {
8
+ const response = await fetch('/api/products');
9
+ const products = await response.json();
10
+
11
+ // Verificar que products sea un array antes de usar forEach
12
+ if (!Array.isArray(products)) {
13
+ console.error('La respuesta no es un array:', products);
14
+ return;
15
+ }
16
+
17
+ const productList = document.getElementById('product-list');
18
+ productList.innerHTML = '';
19
+
20
+ products.forEach(product => {
21
+ const productCard = document.createElement('div');
22
+ productCard.className = 'product-card';
23
+ productCard.innerHTML = `
24
+ <h3>${product.name}</h3>
25
+ <p>${product.description}</p>
26
+ <p><strong>Precio:</strong> $${product.price}</p>
27
+ <p><strong>Categoría:</strong> ${product.category}</p>
28
+ `;
29
+ productList.appendChild(productCard);
30
+ });
31
+ } catch (error) {
32
+ console.error('Error al cargar productos:', error);
33
+ }
34
+ }
35
+
36
+ // Cargar productos si existe el elemento correspondiente
37
+ if (document.getElementById('product-list')) {
38
+ loadProducts();
39
+ }
40
+
41
+ // Función para manejar el formulario de contacto
42
+ const contactForm = document.getElementById('contact-form');
43
+ if (contactForm) {
44
+ contactForm.addEventListener('submit', function(e) {
45
+ e.preventDefault();
46
+
47
+ const formData = new FormData(contactForm);
48
+ const data = Object.fromEntries(formData);
49
+
50
+ fetch('/api/contact', {
51
+ method: 'POST',
52
+ headers: {
53
+ 'Content-Type': 'application/json'
54
+ },
55
+ body: JSON.stringify(data)
56
+ })
57
+ .then(response => response.json())
58
+ .then(result => {
59
+ alert(result.success ? 'Mensaje enviado correctamente' : 'Error al enviar el mensaje');
60
+ })
61
+ .catch(error => {
62
+ console.error('Error:', error);
63
+ alert('Error al enviar el mensaje');
64
+ });
65
+ });
66
+ }
67
+ });
@@ -0,0 +1,8 @@
1
+ [
2
+ {
3
+ "path": "/api/analytics",
4
+ "method": "POST",
5
+ "controller": "./controllers/analyticsController.js",
6
+ "handler": "processAnalytics"
7
+ }
8
+ ]
@@ -0,0 +1,98 @@
1
+ [
2
+ {
3
+ "path": "/api/auth/login",
4
+ "method": "POST",
5
+ "controller": "./controllers/auth/AuthController.js",
6
+ "handler": "login"
7
+ },
8
+ {
9
+ "path": "/api/auth/register",
10
+ "method": "POST",
11
+ "controller": "./controllers/auth/AuthController.js",
12
+ "handler": "register"
13
+ },
14
+ {
15
+ "path": "/api/auth/profile",
16
+ "method": "GET",
17
+ "controller": "./controllers/auth/AuthController.js",
18
+ "handler": "profile",
19
+ "auth": "token"
20
+ },
21
+ {
22
+ "path": "/api/auth/logout",
23
+ "method": "POST",
24
+ "controller": "./controllers/auth/AuthController.js",
25
+ "handler": "logout"
26
+ },
27
+ {
28
+ "path": "/api/auth/check-role",
29
+ "method": "GET",
30
+ "controller": "./controllers/auth/AuthController.js",
31
+ "handler": "checkRole",
32
+ "auth": "token"
33
+ },
34
+ {
35
+ "path": "/api/auth/check-capability",
36
+ "method": "GET",
37
+ "controller": "./controllers/auth/AuthController.js",
38
+ "handler": "checkCapability",
39
+ "auth": "token"
40
+ },
41
+ {
42
+ "path": "/login",
43
+ "method": "GET",
44
+ "controller": "./controllers/auth/AuthViewController.js",
45
+ "handler": "showLogin"
46
+ },
47
+ {
48
+ "path": "/register",
49
+ "method": "GET",
50
+ "controller": "./controllers/auth/AuthViewController.js",
51
+ "handler": "showRegister"
52
+ },
53
+ {
54
+ "path": "/forgot-password",
55
+ "method": "GET",
56
+ "controller": "./controllers/auth/AuthViewController.js",
57
+ "handler": "showForgotPassword"
58
+ },
59
+ {
60
+ "path": "/dashboard",
61
+ "method": "GET",
62
+ "controller": "./controllers/auth/AuthViewController.js",
63
+ "handler": "showDashboard",
64
+ "auth": "token"
65
+ },
66
+ {
67
+ "path": "/api/admin/roles",
68
+ "method": "POST",
69
+ "controller": "./controllers/auth/AdminAuthController.js",
70
+ "handler": "createRole",
71
+ "auth": "token",
72
+ "middleware": ["requireAdmin"]
73
+ },
74
+ {
75
+ "path": "/api/admin/roles",
76
+ "method": "GET",
77
+ "controller": "./controllers/auth/AdminAuthController.js",
78
+ "handler": "getRoles",
79
+ "auth": "token",
80
+ "middleware": ["requireAdmin"]
81
+ },
82
+ {
83
+ "path": "/api/admin/capabilities",
84
+ "method": "POST",
85
+ "controller": "./controllers/auth/AdminAuthController.js",
86
+ "handler": "createCapability",
87
+ "auth": "token",
88
+ "middleware": ["requireAdmin"]
89
+ },
90
+ {
91
+ "path": "/api/admin/capabilities",
92
+ "method": "GET",
93
+ "controller": "./controllers/auth/AdminAuthController.js",
94
+ "handler": "getCapabilities",
95
+ "auth": "token",
96
+ "middleware": ["requireAdmin"]
97
+ }
98
+ ]
@@ -0,0 +1,20 @@
1
+ [
2
+ {
3
+ "path": "/",
4
+ "method": "GET",
5
+ "static": {
6
+ "dir": "./public/blackcoffee-welcome",
7
+ "index": ["index.html"],
8
+ "cacheControl": "public, max-age=3600"
9
+ }
10
+ },
11
+ {
12
+ "path": "/dist/*",
13
+ "method": "GET",
14
+ "static": {
15
+ "dir": "./public/blackcoffee-welcome/dist",
16
+ "index": [],
17
+ "cacheControl": "public, max-age=3600"
18
+ }
19
+ }
20
+ ]
@@ -0,0 +1,16 @@
1
+ [
2
+ {
3
+ "path": "/api/products",
4
+ "method": "GET",
5
+ "controller": "./controllers/example.js",
6
+ "handler": "getAllProducts",
7
+ "description": "Ruta duplicada para probar detección de rutas duplicadas"
8
+ },
9
+ {
10
+ "path": "/admin/dashboard",
11
+ "method": "GET",
12
+ "controller": "./controllers/example.js",
13
+ "handler": "index",
14
+ "contentType": "text/html"
15
+ }
16
+ ]
@@ -0,0 +1,11 @@
1
+ [
2
+ {
3
+ "path": "/ejemplo-estatica",
4
+ "method": "GET",
5
+ "static": {
6
+ "dir": "./public/ejemplo-estatica",
7
+ "index": ["index.html"],
8
+ "cacheControl": "public, max-age=3600"
9
+ }
10
+ }
11
+ ]
@@ -0,0 +1,8 @@
1
+ [
2
+ {
3
+ "path": "/api/endpoints",
4
+ "method": "GET",
5
+ "controller": "./controllers/endpointController.js",
6
+ "handler": "listEndpoints"
7
+ }
8
+ ]
@@ -0,0 +1,26 @@
1
+ [
2
+ {
3
+ "path": "/api/ia-queue/process",
4
+ "method": "POST",
5
+ "controller": "./controllers/iaQueueController.js",
6
+ "handler": "processWithIAQueue"
7
+ },
8
+ {
9
+ "path": "/api/ia-queue/result/:id",
10
+ "method": "GET",
11
+ "controller": "./controllers/iaQueueController.js",
12
+ "handler": "getIAQueueResult"
13
+ },
14
+ {
15
+ "path": "/api/ia-queue/history",
16
+ "method": "GET",
17
+ "controller": "./controllers/iaQueueController.js",
18
+ "handler": "getIAQueueHistory"
19
+ },
20
+ {
21
+ "path": "/api/ia-queue/stats",
22
+ "method": "GET",
23
+ "controller": "./controllers/iaQueueController.js",
24
+ "handler": "getIAQueueStats"
25
+ }
26
+ ]
@@ -0,0 +1,20 @@
1
+ [
2
+ {
3
+ "path": "/api/products",
4
+ "method": "GET",
5
+ "controller": "./controllers/example.js",
6
+ "handler": "getAllProducts"
7
+ },
8
+ {
9
+ "path": "/api/products/:id",
10
+ "method": "GET",
11
+ "controller": "./controllers/example.js",
12
+ "handler": "getProductById"
13
+ },
14
+ {
15
+ "path": "/api/products",
16
+ "method": "POST",
17
+ "controller": "./controllers/example.js",
18
+ "handler": "createProduct"
19
+ }
20
+ ]
@@ -0,0 +1,32 @@
1
+ [
2
+ {
3
+ "path": "/api/queue/add",
4
+ "method": "POST",
5
+ "controller": "./controllers/queueController.js",
6
+ "handler": "addToQueue"
7
+ },
8
+ {
9
+ "path": "/api/queue/status/:id",
10
+ "method": "GET",
11
+ "controller": "./controllers/queueController.js",
12
+ "handler": "getJobStatus"
13
+ },
14
+ {
15
+ "path": "/api/queue/stats",
16
+ "method": "GET",
17
+ "controller": "./controllers/queueController.js",
18
+ "handler": "getQueueStats"
19
+ },
20
+ {
21
+ "path": "/api/queue/jobs/:status",
22
+ "method": "GET",
23
+ "controller": "./controllers/queueController.js",
24
+ "handler": "getJobsByStatus"
25
+ },
26
+ {
27
+ "path": "/api/queue/restart",
28
+ "method": "POST",
29
+ "controller": "./controllers/queueController.js",
30
+ "handler": "restartQueueProcessor"
31
+ }
32
+ ]
@@ -0,0 +1,14 @@
1
+ [
2
+ {
3
+ "path": "/api/qwen/queue",
4
+ "method": "POST",
5
+ "controller": "./controllers/qwenQueueController.js",
6
+ "handler": "processWithQwenQueue"
7
+ },
8
+ {
9
+ "path": "/api/qwen/result/:id",
10
+ "method": "GET",
11
+ "controller": "./controllers/qwenQueueController.js",
12
+ "handler": "getQwenResult"
13
+ }
14
+ ]
@@ -0,0 +1,29 @@
1
+ [
2
+ {
3
+ "path": "/static",
4
+ "method": "GET",
5
+ "static": {
6
+ "dir": "./public",
7
+ "index": [],
8
+ "cacheControl": "public, max-age=3600"
9
+ }
10
+ },
11
+ {
12
+ "path": "/welcome",
13
+ "method": "GET",
14
+ "controller": "./controllers/example.js",
15
+ "handler": "index"
16
+ },
17
+ {
18
+ "path": "/contact",
19
+ "method": "GET",
20
+ "controller": "./controllers/example.js",
21
+ "handler": "showContact"
22
+ },
23
+ {
24
+ "path": "/api/contact",
25
+ "method": "POST",
26
+ "controller": "./controllers/example.js",
27
+ "handler": "handleContact"
28
+ }
29
+ ]
@@ -0,0 +1,58 @@
1
+ [
2
+ {
3
+ "path": "/api/tracking/sessions",
4
+ "method": "POST",
5
+ "controller": "./controllers/tracking/TrackingController.js",
6
+ "handler": "registerSession",
7
+ "auth": "token"
8
+ },
9
+ {
10
+ "path": "/api/tracking/events",
11
+ "method": "POST",
12
+ "controller": "./controllers/tracking/TrackingController.js",
13
+ "handler": "registerEventA",
14
+ "auth": "token"
15
+ },
16
+ {
17
+ "path": "/api/tracking/site-flow",
18
+ "method": "POST",
19
+ "controller": "./controllers/tracking/TrackingController.js",
20
+ "handler": "insertSiteFlow",
21
+ "auth": "token"
22
+ },
23
+ {
24
+ "path": "/api/tracking/sessions",
25
+ "method": "GET",
26
+ "controller": "./controllers/tracking/TrackingController.js",
27
+ "handler": "getSessions",
28
+ "auth": "token"
29
+ },
30
+ {
31
+ "path": "/api/tracking/events",
32
+ "method": "GET",
33
+ "controller": "./controllers/tracking/TrackingController.js",
34
+ "handler": "getEvents",
35
+ "auth": "token"
36
+ },
37
+ {
38
+ "path": "/api/tracking/site-flow",
39
+ "method": "GET",
40
+ "controller": "./controllers/tracking/TrackingController.js",
41
+ "handler": "getSiteFlow",
42
+ "auth": "token"
43
+ },
44
+ {
45
+ "path": "/api/tracking/completed-carts",
46
+ "method": "GET",
47
+ "controller": "./controllers/tracking/TrackingController.js",
48
+ "handler": "getCompletedCarts",
49
+ "auth": "token"
50
+ },
51
+ {
52
+ "path": "/api/events-no-finish/sessions",
53
+ "method": "GET",
54
+ "controller": "./controllers/tracking/EventsNoFinishController.js",
55
+ "handler": "getUniqueSessions",
56
+ "auth": "token"
57
+ }
58
+ ]
@@ -0,0 +1,51 @@
1
+ [
2
+ {
3
+ "path": "/api/tracking-with-loadmodel/sessions",
4
+ "method": "POST",
5
+ "controller": "./controllers/tracking/TrackingControllerWithLoadModel.js",
6
+ "handler": "registerSession",
7
+ "auth": "token"
8
+ },
9
+ {
10
+ "path": "/api/tracking-with-loadmodel/events",
11
+ "method": "POST",
12
+ "controller": "./controllers/tracking/TrackingControllerWithLoadModel.js",
13
+ "handler": "registerEventA",
14
+ "auth": "token"
15
+ },
16
+ {
17
+ "path": "/api/tracking-with-loadmodel/site-flow",
18
+ "method": "POST",
19
+ "controller": "./controllers/tracking/TrackingControllerWithLoadModel.js",
20
+ "handler": "insertSiteFlow",
21
+ "auth": "token"
22
+ },
23
+ {
24
+ "path": "/api/tracking-with-loadmodel/sessions",
25
+ "method": "GET",
26
+ "controller": "./controllers/tracking/TrackingControllerWithLoadModel.js",
27
+ "handler": "getSessions",
28
+ "auth": "token"
29
+ },
30
+ {
31
+ "path": "/api/tracking-with-loadmodel/events",
32
+ "method": "GET",
33
+ "controller": "./controllers/tracking/TrackingControllerWithLoadModel.js",
34
+ "handler": "getEvents",
35
+ "auth": "token"
36
+ },
37
+ {
38
+ "path": "/api/tracking-with-loadmodel/site-flow",
39
+ "method": "GET",
40
+ "controller": "./controllers/tracking/TrackingControllerWithLoadModel.js",
41
+ "handler": "getSiteFlow",
42
+ "auth": "token"
43
+ },
44
+ {
45
+ "path": "/api/tracking-with-loadmodel/completed-carts",
46
+ "method": "GET",
47
+ "controller": "./controllers/tracking/TrackingControllerWithLoadModel.js",
48
+ "handler": "getCompletedCarts",
49
+ "auth": "token"
50
+ }
51
+ ]