xypriss 2.0.0 → 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 (185) hide show
  1. package/README.md +170 -380
  2. package/dist/cjs/mods/security/src/algorithms/hash-algorithms.js +10 -0
  3. package/dist/cjs/mods/security/src/algorithms/hash-algorithms.js.map +1 -1
  4. package/dist/cjs/mods/security/src/components/cache/cacheSys.utils.js +10 -0
  5. package/dist/cjs/mods/security/src/components/cache/cacheSys.utils.js.map +1 -1
  6. package/dist/cjs/mods/security/src/components/cache/index.js +10 -2
  7. package/dist/cjs/mods/security/src/components/cache/index.js.map +1 -1
  8. package/dist/cjs/mods/security/src/components/fortified-function/index.js +9 -0
  9. package/dist/cjs/mods/security/src/components/fortified-function/index.js.map +1 -1
  10. package/dist/cjs/mods/security/src/components/fortified-function/security/security-handler.js +10 -0
  11. package/dist/cjs/mods/security/src/components/fortified-function/security/security-handler.js.map +1 -1
  12. package/dist/cjs/mods/security/src/core/crypto.js +14 -0
  13. package/dist/cjs/mods/security/src/core/crypto.js.map +1 -1
  14. package/dist/cjs/mods/security/src/index.js +10 -1
  15. package/dist/cjs/mods/security/src/index.js.map +1 -1
  16. package/dist/cjs/shared/logger/Logger.js +372 -29
  17. package/dist/cjs/shared/logger/Logger.js.map +1 -1
  18. package/dist/cjs/src/cluster/bun-cluster-manager.js +91 -1
  19. package/dist/cjs/src/cluster/bun-cluster-manager.js.map +1 -1
  20. package/dist/cjs/src/cluster/cluster-manager.js +15 -3
  21. package/dist/cjs/src/cluster/cluster-manager.js.map +1 -1
  22. package/dist/cjs/src/cluster/modules/AutoScaler.js +4 -4
  23. package/dist/cjs/src/cluster/modules/AutoScaler.js.map +1 -1
  24. package/dist/cjs/src/cluster/modules/CrossPlatformMemory.js +2 -2
  25. package/dist/cjs/src/cluster/modules/CrossPlatformMemory.js.map +1 -1
  26. package/dist/cjs/src/cluster/modules/EventLoopMonitor.js +270 -0
  27. package/dist/cjs/src/cluster/modules/EventLoopMonitor.js.map +1 -0
  28. package/dist/cjs/src/cluster/modules/GCStatsTracker.js +200 -0
  29. package/dist/cjs/src/cluster/modules/GCStatsTracker.js.map +1 -0
  30. package/dist/cjs/src/cluster/modules/HeapStatsCollector.js +111 -0
  31. package/dist/cjs/src/cluster/modules/HeapStatsCollector.js.map +1 -0
  32. package/dist/cjs/src/cluster/modules/NetworkTracker.js +162 -0
  33. package/dist/cjs/src/cluster/modules/NetworkTracker.js.map +1 -0
  34. package/dist/cjs/src/cluster/modules/ThroughputCalculator.js +186 -0
  35. package/dist/cjs/src/cluster/modules/ThroughputCalculator.js.map +1 -0
  36. package/dist/cjs/src/cluster/modules/WorkerManager.js +14 -15
  37. package/dist/cjs/src/cluster/modules/WorkerManager.js.map +1 -1
  38. package/dist/cjs/src/cluster/modules/{LoadBalancer.js → strategy/LoadBalancer.js} +1 -1
  39. package/dist/cjs/src/cluster/modules/strategy/LoadBalancer.js.map +1 -0
  40. package/dist/cjs/src/middleware/built-in/sqlInjection.js +335 -0
  41. package/dist/cjs/src/middleware/built-in/sqlInjection.js.map +1 -0
  42. package/dist/cjs/src/middleware/safe-json-middleware.js +1 -1
  43. package/dist/cjs/src/middleware/safe-json-middleware.js.map +1 -1
  44. package/dist/cjs/src/middleware/security-middleware.js +447 -332
  45. package/dist/cjs/src/middleware/security-middleware.js.map +1 -1
  46. package/dist/cjs/src/plugins/modules/index.js +9 -3
  47. package/dist/cjs/src/plugins/modules/index.js.map +1 -1
  48. package/dist/cjs/src/server/FastServer.js +41 -1
  49. package/dist/cjs/src/server/FastServer.js.map +1 -1
  50. package/dist/cjs/src/server/ServerFactory.js +62 -2
  51. package/dist/cjs/src/server/ServerFactory.js.map +1 -1
  52. package/dist/cjs/src/server/components/fastapi/ClusterManagerComponent.js +32 -6
  53. package/dist/cjs/src/server/components/fastapi/ClusterManagerComponent.js.map +1 -1
  54. package/dist/cjs/src/server/components/fastapi/WorkerPoolComponent.js +206 -0
  55. package/dist/cjs/src/server/components/fastapi/WorkerPoolComponent.js.map +1 -0
  56. package/dist/cjs/src/server/components/fastapi/console/ConsoleInterceptor.js +3 -28
  57. package/dist/cjs/src/server/components/fastapi/console/ConsoleInterceptor.js.map +1 -1
  58. package/dist/cjs/src/server/components/fastapi/modules/UFRP/WorkerPoolManager.js +265 -0
  59. package/dist/cjs/src/server/components/fastapi/modules/UFRP/WorkerPoolManager.js.map +1 -0
  60. package/dist/cjs/src/server/components/fastapi/modules/UFRP/workers/Logger.js +236 -0
  61. package/dist/cjs/src/server/components/fastapi/modules/UFRP/workers/cpu-tasks.js +294 -0
  62. package/dist/cjs/src/server/components/fastapi/modules/UFRP/workers/enhanced-cpu-worker.js +433 -0
  63. package/dist/cjs/src/server/components/fastapi/modules/UFRP/workers/io-worker.js +1615 -0
  64. package/dist/cjs/src/server/components/lifecycle/ServerLifecycleManager.js +143 -24
  65. package/dist/cjs/src/server/components/lifecycle/ServerLifecycleManager.js.map +1 -1
  66. package/dist/cjs/src/server/const/default.js +23 -9
  67. package/dist/cjs/src/server/const/default.js.map +1 -1
  68. package/dist/cjs/src/server/core/HttpServer.js +8 -8
  69. package/dist/cjs/src/server/core/HttpServer.js.map +1 -1
  70. package/dist/cjs/src/server/core/XyprissApp.js +284 -17
  71. package/dist/cjs/src/server/core/XyprissApp.js.map +1 -1
  72. package/dist/cjs/src/server/handlers/NotFoundHandler.js +1 -1
  73. package/dist/cjs/src/server/handlers/NotFoundHandler.js.map +1 -1
  74. package/dist/cjs/src/server/middleware/MiddlewareManager.js +57 -12
  75. package/dist/cjs/src/server/middleware/MiddlewareManager.js.map +1 -1
  76. package/dist/cjs/src/server/utils/forceClosePort.js +1 -1
  77. package/dist/cjs/src/server/utils/forceClosePort.js.map +1 -1
  78. package/dist/esm/mods/security/src/algorithms/hash-algorithms.js +10 -0
  79. package/dist/esm/mods/security/src/algorithms/hash-algorithms.js.map +1 -1
  80. package/dist/esm/mods/security/src/components/cache/cacheSys.utils.js +10 -0
  81. package/dist/esm/mods/security/src/components/cache/cacheSys.utils.js.map +1 -1
  82. package/dist/esm/mods/security/src/components/cache/index.js +10 -2
  83. package/dist/esm/mods/security/src/components/cache/index.js.map +1 -1
  84. package/dist/esm/mods/security/src/components/fortified-function/index.js +9 -0
  85. package/dist/esm/mods/security/src/components/fortified-function/index.js.map +1 -1
  86. package/dist/esm/mods/security/src/components/fortified-function/security/security-handler.js +10 -0
  87. package/dist/esm/mods/security/src/components/fortified-function/security/security-handler.js.map +1 -1
  88. package/dist/esm/mods/security/src/core/crypto.js +14 -0
  89. package/dist/esm/mods/security/src/core/crypto.js.map +1 -1
  90. package/dist/esm/mods/security/src/index.js +10 -1
  91. package/dist/esm/mods/security/src/index.js.map +1 -1
  92. package/dist/esm/shared/logger/Logger.js +372 -29
  93. package/dist/esm/shared/logger/Logger.js.map +1 -1
  94. package/dist/esm/src/cluster/bun-cluster-manager.js +91 -1
  95. package/dist/esm/src/cluster/bun-cluster-manager.js.map +1 -1
  96. package/dist/esm/src/cluster/cluster-manager.js +15 -3
  97. package/dist/esm/src/cluster/cluster-manager.js.map +1 -1
  98. package/dist/esm/src/cluster/modules/AutoScaler.js +4 -4
  99. package/dist/esm/src/cluster/modules/AutoScaler.js.map +1 -1
  100. package/dist/esm/src/cluster/modules/CrossPlatformMemory.js +2 -2
  101. package/dist/esm/src/cluster/modules/CrossPlatformMemory.js.map +1 -1
  102. package/dist/esm/src/cluster/modules/EventLoopMonitor.js +268 -0
  103. package/dist/esm/src/cluster/modules/EventLoopMonitor.js.map +1 -0
  104. package/dist/esm/src/cluster/modules/GCStatsTracker.js +198 -0
  105. package/dist/esm/src/cluster/modules/GCStatsTracker.js.map +1 -0
  106. package/dist/esm/src/cluster/modules/HeapStatsCollector.js +109 -0
  107. package/dist/esm/src/cluster/modules/HeapStatsCollector.js.map +1 -0
  108. package/dist/esm/src/cluster/modules/NetworkTracker.js +160 -0
  109. package/dist/esm/src/cluster/modules/NetworkTracker.js.map +1 -0
  110. package/dist/esm/src/cluster/modules/ThroughputCalculator.js +184 -0
  111. package/dist/esm/src/cluster/modules/ThroughputCalculator.js.map +1 -0
  112. package/dist/esm/src/cluster/modules/WorkerManager.js +14 -14
  113. package/dist/esm/src/cluster/modules/WorkerManager.js.map +1 -1
  114. package/dist/esm/src/cluster/modules/{LoadBalancer.js → strategy/LoadBalancer.js} +1 -1
  115. package/dist/esm/src/cluster/modules/strategy/LoadBalancer.js.map +1 -0
  116. package/dist/esm/src/middleware/built-in/sqlInjection.js +333 -0
  117. package/dist/esm/src/middleware/built-in/sqlInjection.js.map +1 -0
  118. package/dist/esm/src/middleware/safe-json-middleware.js +1 -1
  119. package/dist/esm/src/middleware/safe-json-middleware.js.map +1 -1
  120. package/dist/esm/src/middleware/security-middleware.js +447 -332
  121. package/dist/esm/src/middleware/security-middleware.js.map +1 -1
  122. package/dist/esm/src/plugins/modules/index.js +9 -3
  123. package/dist/esm/src/plugins/modules/index.js.map +1 -1
  124. package/dist/esm/src/server/FastServer.js +41 -1
  125. package/dist/esm/src/server/FastServer.js.map +1 -1
  126. package/dist/esm/src/server/ServerFactory.js +62 -2
  127. package/dist/esm/src/server/ServerFactory.js.map +1 -1
  128. package/dist/esm/src/server/components/fastapi/ClusterManagerComponent.js +32 -6
  129. package/dist/esm/src/server/components/fastapi/ClusterManagerComponent.js.map +1 -1
  130. package/dist/esm/src/server/components/fastapi/WorkerPoolComponent.js +204 -0
  131. package/dist/esm/src/server/components/fastapi/WorkerPoolComponent.js.map +1 -0
  132. package/dist/esm/src/server/components/fastapi/console/ConsoleInterceptor.js +2 -27
  133. package/dist/esm/src/server/components/fastapi/console/ConsoleInterceptor.js.map +1 -1
  134. package/dist/esm/src/server/components/fastapi/modules/UFRP/WorkerPoolManager.js +263 -0
  135. package/dist/esm/src/server/components/fastapi/modules/UFRP/WorkerPoolManager.js.map +1 -0
  136. package/dist/esm/src/server/components/fastapi/modules/UFRP/workers/Logger.js +236 -0
  137. package/dist/esm/src/server/components/fastapi/modules/UFRP/workers/cpu-tasks.js +294 -0
  138. package/dist/esm/src/server/components/fastapi/modules/UFRP/workers/enhanced-cpu-worker.js +433 -0
  139. package/dist/esm/src/server/components/fastapi/modules/UFRP/workers/io-worker.js +1615 -0
  140. package/dist/esm/src/server/components/lifecycle/ServerLifecycleManager.js +143 -24
  141. package/dist/esm/src/server/components/lifecycle/ServerLifecycleManager.js.map +1 -1
  142. package/dist/esm/src/server/const/default.js +23 -9
  143. package/dist/esm/src/server/const/default.js.map +1 -1
  144. package/dist/esm/src/server/core/HttpServer.js +8 -8
  145. package/dist/esm/src/server/core/HttpServer.js.map +1 -1
  146. package/dist/esm/src/server/core/XyprissApp.js +284 -17
  147. package/dist/esm/src/server/core/XyprissApp.js.map +1 -1
  148. package/dist/esm/src/server/handlers/NotFoundHandler.js +1 -1
  149. package/dist/esm/src/server/handlers/NotFoundHandler.js.map +1 -1
  150. package/dist/esm/src/server/middleware/MiddlewareManager.js +57 -12
  151. package/dist/esm/src/server/middleware/MiddlewareManager.js.map +1 -1
  152. package/dist/esm/src/server/utils/forceClosePort.js +1 -1
  153. package/dist/esm/src/server/utils/forceClosePort.js.map +1 -1
  154. package/dist/index.d.ts +675 -516
  155. package/package.json +10 -11
  156. package/dist/cjs/src/cluster/index.js +0 -361
  157. package/dist/cjs/src/cluster/index.js.map +0 -1
  158. package/dist/cjs/src/cluster/modules/ClusterFactory.js +0 -539
  159. package/dist/cjs/src/cluster/modules/ClusterFactory.js.map +0 -1
  160. package/dist/cjs/src/cluster/modules/LoadBalancer.js.map +0 -1
  161. package/dist/cjs/src/server/components/fastapi/UltraFastRequestProcessor.js +0 -668
  162. package/dist/cjs/src/server/components/fastapi/UltraFastRequestProcessor.js.map +0 -1
  163. package/dist/cjs/src/server/components/fastapi/middlewares/MiddlewareAPI.js +0 -347
  164. package/dist/cjs/src/server/components/fastapi/middlewares/MiddlewareAPI.js.map +0 -1
  165. package/dist/cjs/src/server/components/fastapi/middlewares/MiddlewareMethodsManager.js +0 -204
  166. package/dist/cjs/src/server/components/fastapi/middlewares/MiddlewareMethodsManager.js.map +0 -1
  167. package/dist/cjs/src/server/components/fastapi/middlewares/middlewareManager.js +0 -953
  168. package/dist/cjs/src/server/components/fastapi/middlewares/middlewareManager.js.map +0 -1
  169. package/dist/cjs/src/server/components/fastapi/modules/UFRP/WorkerPool.js +0 -56
  170. package/dist/cjs/src/server/components/fastapi/modules/UFRP/WorkerPool.js.map +0 -1
  171. package/dist/esm/src/cluster/index.js +0 -339
  172. package/dist/esm/src/cluster/index.js.map +0 -1
  173. package/dist/esm/src/cluster/modules/ClusterFactory.js +0 -511
  174. package/dist/esm/src/cluster/modules/ClusterFactory.js.map +0 -1
  175. package/dist/esm/src/cluster/modules/LoadBalancer.js.map +0 -1
  176. package/dist/esm/src/server/components/fastapi/UltraFastRequestProcessor.js +0 -647
  177. package/dist/esm/src/server/components/fastapi/UltraFastRequestProcessor.js.map +0 -1
  178. package/dist/esm/src/server/components/fastapi/middlewares/MiddlewareAPI.js +0 -345
  179. package/dist/esm/src/server/components/fastapi/middlewares/MiddlewareAPI.js.map +0 -1
  180. package/dist/esm/src/server/components/fastapi/middlewares/MiddlewareMethodsManager.js +0 -202
  181. package/dist/esm/src/server/components/fastapi/middlewares/MiddlewareMethodsManager.js.map +0 -1
  182. package/dist/esm/src/server/components/fastapi/middlewares/middlewareManager.js +0 -951
  183. package/dist/esm/src/server/components/fastapi/middlewares/middlewareManager.js.map +0 -1
  184. package/dist/esm/src/server/components/fastapi/modules/UFRP/WorkerPool.js +0 -54
  185. package/dist/esm/src/server/components/fastapi/modules/UFRP/WorkerPool.js.map +0 -1
@@ -1,953 +0,0 @@
1
- 'use strict';
2
-
3
- var express = require('express');
4
- var helmet = require('helmet');
5
- var cors = require('cors');
6
- var compression = require('compression');
7
- var rateLimit = require('express-rate-limit');
8
- var Logger = require('../../../../../shared/logger/Logger.js');
9
- var nehoid = require('nehoid');
10
-
11
- /**
12
- * MiddlewareManager - Advanced middleware system with optimization, caching, and performance tracking
13
- * Provides comprehensive middleware management withXyPriss FastXyPrissServer (FFS)performance enhancements
14
- */
15
- class MiddlewareManager {
16
- constructor(options, dependencies) {
17
- // Middleware registry and management
18
- this.middlewareRegistry = new Map();
19
- this.middlewareCache = new Map();
20
- this.executionOrder = [];
21
- // Performance tracking
22
- this.performanceMetrics = {
23
- totalRequests: 0,
24
- totalExecutionTime: 0,
25
- averageExecutionTime: 0,
26
- fastestExecution: Infinity,
27
- slowestExecution: 0,
28
- cacheHitRate: 0,
29
- errorRate: 0,
30
- throughput: 0,
31
- optimizationGain: 0,
32
- };
33
- // Configuration
34
- this.optimizationConfig = {
35
- enableCaching: true,
36
- enableBatching: true,
37
- enablePrioritization: true,
38
- enablePerformanceTracking: true,
39
- cacheWarming: true,
40
- optimizationThreshold: 10,
41
- maxCacheSize: 1000,
42
- defaultTTL: 300000, // 5 minutes
43
- };
44
- this.initialized = false;
45
- this.options = options;
46
- this.dependencies = dependencies;
47
- }
48
- /**
49
- * Initialize the middleware manager
50
- */
51
- async initialize() {
52
- if (this.initialized)
53
- return;
54
- Logger.logger.debug("middleware", "Initializing Middleware Manager...");
55
- // Configure built-in middleware
56
- this.configureBuiltInMiddleware();
57
- // Configure optimization middleware
58
- this.configureOptimizationMiddleware();
59
- // Configure request processing middleware
60
- this.configureRequestProcessingMiddleware();
61
- // Warm up cache if enabled
62
- if (this.optimizationConfig.cacheWarming) {
63
- await this.warmCache();
64
- }
65
- this.initialized = true;
66
- Logger.logger.debug("middleware", " Middleware Manager initialized");
67
- }
68
- /**
69
- * Register custom middleware
70
- */
71
- register(middleware, options) {
72
- const id = nehoid.NehoID.generate({ prefix: "ufs.middleware", size: 16 });
73
- const name = options?.name || `middleware-${id.slice(0, 8)}`;
74
- let handler;
75
- let priority = options?.priority || "normal";
76
- let routes = options?.routes;
77
- let cacheable = options?.cacheable === true; // Only cache if explicitly set to true
78
- let ttl = options?.ttl || this.optimizationConfig.defaultTTL;
79
- if (typeof middleware === "function") {
80
- handler = middleware;
81
- }
82
- else {
83
- handler = middleware.handler;
84
- priority = middleware.priority || priority;
85
- routes = middleware.routes || routes;
86
- cacheable = middleware.cacheable || cacheable;
87
- ttl = middleware.ttl || ttl;
88
- }
89
- const entry = {
90
- id,
91
- name,
92
- handler: this.wrapMiddleware(handler, name),
93
- priority,
94
- order: this.calculateOrder(priority),
95
- routes,
96
- enabled: true,
97
- cacheable,
98
- ttl,
99
- metadata: {},
100
- stats: {
101
- executionCount: 0,
102
- totalExecutionTime: 0,
103
- averageExecutionTime: 0,
104
- cacheHits: 0,
105
- cacheMisses: 0,
106
- errors: 0,
107
- },
108
- };
109
- this.middlewareRegistry.set(id, entry);
110
- this.updateExecutionOrder();
111
- // Apply middleware to Express app immediately
112
- this.applyMiddlewareToApp(entry);
113
- Logger.logger.debug("middleware", `Registered middleware: ${name} (${id})`);
114
- return id;
115
- }
116
- /**
117
- * Unregister middleware
118
- */
119
- unregister(id) {
120
- const entry = this.middlewareRegistry.get(id);
121
- if (!entry)
122
- return false;
123
- this.middlewareRegistry.delete(id);
124
- this.updateExecutionOrder();
125
- Logger.logger.debug("middleware", `Unregistered middleware: ${entry.name} (${id})`);
126
- return true;
127
- }
128
- /**
129
- * Enable middleware
130
- */
131
- enable(id) {
132
- const entry = this.middlewareRegistry.get(id);
133
- if (!entry)
134
- return false;
135
- entry.enabled = true;
136
- this.updateExecutionOrder();
137
- Logger.logger.debug("middleware", `Enabled middleware: ${entry.name} (${id})`);
138
- return true;
139
- }
140
- /**
141
- * Disable middleware
142
- */
143
- disable(id) {
144
- const entry = this.middlewareRegistry.get(id);
145
- if (!entry)
146
- return false;
147
- entry.enabled = false;
148
- this.updateExecutionOrder();
149
- Logger.logger.debug("middleware", `Disabled middleware: ${entry.name} (${id})`);
150
- return true;
151
- }
152
- /**
153
- * Enable security middleware
154
- */
155
- enableSecurity(options) {
156
- if (this.options.security?.helmet !== false) {
157
- try {
158
- this.dependencies.app.use(helmet(options?.helmet));
159
- Logger.logger.debug("middleware", "Security headers (Helmet) enabled");
160
- }
161
- catch (error) {
162
- Logger.logger.warn("middleware", "Helmet not available, skipping security headers");
163
- }
164
- }
165
- if (this.options.security?.cors !== false) {
166
- try {
167
- this.dependencies.app.use(cors(options?.cors));
168
- Logger.logger.debug("middleware", "CORS enabled");
169
- }
170
- catch (error) {
171
- Logger.logger.warn("middleware", "CORS not available, skipping CORS headers");
172
- }
173
- }
174
- }
175
- /**
176
- * Enable compression middleware
177
- */
178
- enableCompression(options) {
179
- if (this.options.performance?.compression !== false) {
180
- try {
181
- this.dependencies.app.use(compression(options));
182
- Logger.logger.debug("middleware", "Compression enabled");
183
- }
184
- catch (error) {
185
- Logger.logger.warn("middleware", "Compression not available, skipping compression");
186
- }
187
- }
188
- }
189
- /**
190
- * Enable rate limiting middleware
191
- */
192
- enableRateLimit(options) {
193
- if (this.options.security?.rateLimit !== false) {
194
- try {
195
- const rateLimitOptions = {
196
- windowMs: 15 * 60 * 1000, // 15 minutes
197
- max: 100, // limit each IP to 100 requests per windowMs
198
- standardHeaders: true,
199
- legacyHeaders: false,
200
- ...options,
201
- };
202
- this.dependencies.app.use(rateLimit(rateLimitOptions));
203
- Logger.logger.debug("middleware", "Rate limiting enabled");
204
- }
205
- catch (error) {
206
- Logger.logger.warn("middleware", "Rate limiting not available, skipping rate limiting");
207
- }
208
- }
209
- }
210
- /**
211
- * Apply immediate middleware configuration during server initialization
212
- * This method provides basic middleware functionality before the full system is initialized
213
- */
214
- applyImmediateMiddleware(config) {
215
- // console.log("Applying immediate middleware configuration...");
216
- Logger.logger.debug("middleware", "Applying immediate middleware configuration...");
217
- // console.log("conf: ", config);
218
- // Apply rate limiting if configured
219
- if (config?.rateLimit && config.rateLimit !== true) {
220
- try {
221
- const rateLimitConfig = config.rateLimit;
222
- const limiter = rateLimit({
223
- windowMs: rateLimitConfig.windowMs || 15 * 60 * 1000,
224
- max: rateLimitConfig.max || 100,
225
- message: "Too many requests from this IP, please try again later (msg2).",
226
- standardHeaders: true,
227
- legacyHeaders: false,
228
- });
229
- this.dependencies.app.use(limiter);
230
- Logger.logger.debug("middleware", "Rate limiting applied immediately");
231
- }
232
- catch (error) {
233
- Logger.logger.warn("middleware", "Failed to apply rate limiting:", error);
234
- }
235
- }
236
- // Apply CORS if configured
237
- if (config?.cors && config.cors !== true) {
238
- try {
239
- const corsConfig = config.cors;
240
- const corsOptions = {
241
- origin: corsConfig.origin || "*",
242
- methods: corsConfig.methods || [
243
- "GET",
244
- "POST",
245
- "PUT",
246
- "DELETE",
247
- "OPTIONS",
248
- ],
249
- allowedHeaders: corsConfig.allowedHeaders || [
250
- "Origin",
251
- "X-Requested-With",
252
- "Content-Type",
253
- "Accept",
254
- "Authorization",
255
- ],
256
- credentials: corsConfig.credentials !== false,
257
- };
258
- this.dependencies.app.use(cors(corsOptions));
259
- Logger.logger.debug("middleware", "CORS applied immediately");
260
- }
261
- catch (error) {
262
- Logger.logger.warn("middleware", "Failed to apply CORS:", error);
263
- }
264
- }
265
- // Apply security headers if configured
266
- if (config?.security && config.security !== true) {
267
- try {
268
- this.dependencies.app.use(helmet());
269
- Logger.logger.debug("middleware", "Helmet security headers applied immediately");
270
- }
271
- catch (error) {
272
- Logger.logger.warn("middleware", "Failed to apply helmet:", error);
273
- }
274
- }
275
- // Apply compression if configured
276
- if (config?.compression && config.compression !== true) {
277
- try {
278
- this.dependencies.app.use(compression());
279
- Logger.logger.debug("middleware", "Compression applied immediately");
280
- }
281
- catch (error) {
282
- Logger.logger.warn("middleware", "Failed to apply compression:", error);
283
- }
284
- }
285
- Logger.logger.debug("middleware", "Immediate middleware configuration completed");
286
- }
287
- /**
288
- * Enable CORS middleware
289
- */
290
- enableCors(options) {
291
- try {
292
- // Transform XyPrissJS CORS config to standard cors package config
293
- const corsConfig = this.transformCorsConfig(options);
294
- this.dependencies.app.use(cors(corsConfig));
295
- Logger.logger.debug("middleware", "CORS enabled with config:", corsConfig);
296
- }
297
- catch (error) {
298
- Logger.logger.warn("middleware", "CORS not available, skipping CORS headers");
299
- }
300
- }
301
- /**
302
- * Transform XyPrissJS CORS configuration to standard cors package configuration
303
- */
304
- transformCorsConfig(XyPrissConfig) {
305
- if (!XyPrissConfig)
306
- return {};
307
- const corsConfig = {};
308
- // Map XyPrissJS config to standard cors config
309
- if (XyPrissConfig.origin !== undefined) {
310
- corsConfig.origin = XyPrissConfig.origin;
311
- }
312
- if (XyPrissConfig.methods !== undefined) {
313
- corsConfig.methods = XyPrissConfig.methods;
314
- }
315
- if (XyPrissConfig.allowedHeaders !== undefined) {
316
- corsConfig.allowedHeaders = XyPrissConfig.allowedHeaders;
317
- }
318
- if (XyPrissConfig.credentials !== undefined) {
319
- corsConfig.credentials = XyPrissConfig.credentials;
320
- }
321
- if (XyPrissConfig.maxAge !== undefined) {
322
- corsConfig.maxAge = XyPrissConfig.maxAge;
323
- }
324
- if (XyPrissConfig.preflightContinue !== undefined) {
325
- corsConfig.preflightContinue = XyPrissConfig.preflightContinue;
326
- }
327
- if (XyPrissConfig.optionsSuccessStatus !== undefined) {
328
- corsConfig.optionsSuccessStatus =
329
- XyPrissConfig.optionsSuccessStatus;
330
- }
331
- // Don't pass the 'enabled' property to cors package
332
- // Remove any other XyPrissJS-specific properties
333
- return corsConfig;
334
- }
335
- /**
336
- * Get middleware information
337
- */
338
- getInfo(id) {
339
- if (id) {
340
- const entry = this.middlewareRegistry.get(id);
341
- if (!entry)
342
- throw new Error(`Middleware not found: ${id}`);
343
- return this.entryToInfo(entry);
344
- }
345
- return Array.from(this.middlewareRegistry.values()).map((entry) => this.entryToInfo(entry));
346
- }
347
- /**
348
- * Get middleware statistics
349
- */
350
- getStats() {
351
- const entries = Array.from(this.middlewareRegistry.values());
352
- const enabledCount = entries.filter((e) => e.enabled).length;
353
- const byPriority = entries.reduce((acc, entry) => {
354
- acc[entry.priority] = (acc[entry.priority] || 0) + 1;
355
- return acc;
356
- }, {});
357
- const byType = entries.reduce((acc, entry) => {
358
- acc[entry.name] = this.entryToInfo(entry);
359
- return acc;
360
- }, {});
361
- return {
362
- totalMiddleware: entries.length,
363
- enabledMiddleware: enabledCount,
364
- totalExecutions: this.performanceMetrics.totalRequests,
365
- averageExecutionTime: this.performanceMetrics.averageExecutionTime,
366
- cacheHitRate: this.performanceMetrics.cacheHitRate,
367
- optimizationRate: this.performanceMetrics.optimizationGain,
368
- byPriority,
369
- byType,
370
- performance: {
371
- fastestMiddleware: this.findFastestMiddleware(),
372
- slowestMiddleware: this.findSlowestMiddleware(),
373
- mostUsedMiddleware: this.findMostUsedMiddleware(),
374
- cacheEfficiency: this.calculateCacheEfficiency(),
375
- },
376
- };
377
- }
378
- /**
379
- * Get performance metrics
380
- */
381
- getPerformanceMetrics() {
382
- return { ...this.performanceMetrics };
383
- }
384
- /**
385
- * Optimize middleware execution
386
- */
387
- async optimize() {
388
- Logger.logger.debug("middleware", "Optimizing middleware execution...");
389
- // Reorder middleware based on performance data
390
- this.optimizeExecutionOrder();
391
- // Clean up cache
392
- this.cleanupCache();
393
- // Update optimization metrics
394
- this.updateOptimizationMetrics();
395
- Logger.logger.debug("middleware", "Middleware optimization completed");
396
- }
397
- /**
398
- * Warm up middleware cache
399
- */
400
- async warmCache() {
401
- Logger.logger.debug("middleware", "Warming up middleware cache...");
402
- // Pre-cache common middleware results
403
- const commonPaths = ["/health", "/ping", "/status"];
404
- const commonMethods = ["GET", "POST"];
405
- for (const path of commonPaths) {
406
- for (const method of commonMethods) {
407
- const cacheKey = `${method}:${path}`;
408
- // Pre-populate cache with empty results for faster lookup
409
- this.middlewareCache.set(cacheKey, {
410
- result: null,
411
- timestamp: Date.now(),
412
- ttl: this.optimizationConfig.defaultTTL,
413
- hits: 0,
414
- middleware: "warmup",
415
- });
416
- }
417
- }
418
- Logger.logger.debug("middleware", "Middleware cache warmed up");
419
- }
420
- /**
421
- * Clear middleware cache
422
- */
423
- clearCache() {
424
- this.middlewareCache.clear();
425
- Logger.logger.debug("middleware", "Middleware cache cleared");
426
- }
427
- /**
428
- * Execute middleware chain
429
- */
430
- async executeMiddleware(req, res, next) {
431
- const startTime = performance.now();
432
- try {
433
- // Get applicable middleware for this request
434
- const applicableMiddleware = this.matchRoute(req.path, req.method);
435
- // Execute middleware in priority order
436
- for (const entry of applicableMiddleware) {
437
- if (!entry.enabled)
438
- continue;
439
- const middlewareStartTime = performance.now();
440
- try {
441
- await this.executeMiddlewareEntry(entry, req, res, next);
442
- const executionTime = performance.now() - middlewareStartTime;
443
- this.updateMiddlewareStats(entry, executionTime, false);
444
- }
445
- catch (error) {
446
- const executionTime = performance.now() - middlewareStartTime;
447
- this.updateMiddlewareStats(entry, executionTime, true);
448
- throw error;
449
- }
450
- }
451
- const totalExecutionTime = performance.now() - startTime;
452
- this.updatePerformanceMetrics(totalExecutionTime, false);
453
- }
454
- catch (error) {
455
- const totalExecutionTime = performance.now() - startTime;
456
- this.updatePerformanceMetrics(totalExecutionTime, true);
457
- throw error;
458
- }
459
- }
460
- /**
461
- * Match middleware to route
462
- */
463
- matchRoute(path, method) {
464
- return this.executionOrder
465
- .map((id) => this.middlewareRegistry.get(id))
466
- .filter((entry) => {
467
- if (!entry || !entry.enabled)
468
- return false;
469
- // If no routes specified, apply to all routes
470
- if (!entry.routes || entry.routes.length === 0)
471
- return true;
472
- // Check if path matches any of the specified routes
473
- return entry.routes.some((route) => {
474
- if (typeof route === "string") {
475
- return path === route || path.startsWith(route);
476
- }
477
- return false;
478
- });
479
- });
480
- }
481
- /**
482
- * Configure middleware
483
- */
484
- configure(config) {
485
- this.options.middleware = { ...this.options.middleware, ...config };
486
- // Apply configuration changes
487
- if (config.enableOptimization !== undefined) {
488
- this.optimizationConfig.enableCaching = config.enableOptimization;
489
- }
490
- if (config.enableCaching !== undefined) {
491
- this.optimizationConfig.enableCaching = config.enableCaching;
492
- }
493
- if (config.enablePerformanceTracking !== undefined) {
494
- this.optimizationConfig.enablePerformanceTracking =
495
- config.enablePerformanceTracking;
496
- }
497
- Logger.logger.debug("middleware", "Middleware configuration updated");
498
- }
499
- /**
500
- * Get current configuration
501
- */
502
- getConfiguration() {
503
- return { ...this.options.middleware };
504
- }
505
- /**
506
- * Clear all middleware
507
- */
508
- clear() {
509
- this.middlewareRegistry.clear();
510
- this.middlewareCache.clear();
511
- this.executionOrder = [];
512
- Logger.logger.debug("middleware", "All middleware cleared");
513
- }
514
- /**
515
- * Create cache middleware for route optimization
516
- */
517
- createCacheMiddleware(options) {
518
- const ttl = options?.ttl || this.optimizationConfig.defaultTTL;
519
- const keyGenerator = options?.keyGenerator ||
520
- ((req) => `${req.method}:${req.path}`);
521
- return (req, res, next) => {
522
- const cacheKey = keyGenerator(req);
523
- const cached = this.middlewareCache.get(cacheKey);
524
- if (cached && this.isCacheValid(cached)) {
525
- cached.hits++;
526
- Logger.logger.debug("middleware", `Cache hit for route: ${cacheKey}`);
527
- return next();
528
- }
529
- // Cache miss - continue with normal processing
530
- const originalSend = res.send;
531
- const self = this;
532
- res.send = function (body) {
533
- // Cache the response
534
- self.middlewareCache.set(cacheKey, {
535
- result: body,
536
- timestamp: Date.now(),
537
- ttl,
538
- hits: 0,
539
- middleware: "route-cache",
540
- });
541
- return originalSend.call(this, body);
542
- };
543
- next();
544
- };
545
- }
546
- /**
547
- * Shutdown middleware manager
548
- */
549
- async shutdown() {
550
- Logger.logger.debug("middleware", "Shutting down Middleware Manager...");
551
- this.middlewareRegistry.clear();
552
- this.middlewareCache.clear();
553
- this.executionOrder = [];
554
- this.initialized = false;
555
- Logger.logger.debug("middleware", " Middleware Manager shut down");
556
- }
557
- // ===== PRIVATE METHODS =====
558
- /**
559
- * Apply middleware to Express app
560
- */
561
- applyMiddlewareToApp(entry) {
562
- if (!entry.enabled)
563
- return;
564
- // If routes are specified, apply middleware only to those routes
565
- if (entry.routes && entry.routes.length > 0) {
566
- entry.routes.forEach((route) => {
567
- this.dependencies.app.use(route, entry.handler);
568
- Logger.logger.debug("middleware", `Applied middleware "${entry.name}" to route: ${route}`);
569
- });
570
- }
571
- else {
572
- // Apply to all routes
573
- this.dependencies.app.use(entry.handler);
574
- Logger.logger.debug("middleware", `Applied middleware "${entry.name}" globally`);
575
- }
576
- }
577
- /**
578
- * Configure built-in middleware
579
- */
580
- configureBuiltInMiddleware() {
581
- Logger.logger.debug("middleware", "Configuring built-in middleware...");
582
- this.configureTrustProxy();
583
- this.configureSecurityMiddleware();
584
- this.configurePerformanceMiddleware();
585
- this.configureBodyParsing();
586
- Logger.logger.debug("middleware", "Built-in middleware configured");
587
- }
588
- /**
589
- * Configure trust proxy settings
590
- */
591
- configureTrustProxy() {
592
- if (this.options.server?.trustProxy) {
593
- this.dependencies.app.set("trust proxy", true);
594
- }
595
- }
596
- /**
597
- * Configure security middleware
598
- */
599
- configureSecurityMiddleware() {
600
- if (this.options.security?.helmet) {
601
- this.enableSecurity();
602
- }
603
- }
604
- /**
605
- * Configure performance middleware
606
- */
607
- configurePerformanceMiddleware() {
608
- if (this.options.performance?.compression) {
609
- this.enableCompression();
610
- }
611
- }
612
- /**
613
- * Configure body parsing middleware
614
- */
615
- configureBodyParsing() {
616
- this.dependencies.app.use(express.json({
617
- limit: this.options.server?.jsonLimit,
618
- }));
619
- this.dependencies.app.use(express.urlencoded({
620
- extended: true,
621
- limit: this.options.server?.urlEncodedLimit,
622
- }));
623
- }
624
- /**
625
- * Configure optimization middleware
626
- */
627
- configureOptimizationMiddleware() {
628
- // This will be handled by the existing MiddlewareManager for now
629
- // to maintain backward compatibility
630
- }
631
- /**
632
- * Configure request processing middleware
633
- */
634
- configureRequestProcessingMiddleware() {
635
- this.dependencies.app.use(async (req, res, next) => {
636
- // Start performance measurement
637
- const requestId = this.dependencies.performanceProfiler.startMeasurement(req);
638
- req.requestId = requestId;
639
- req.startTime = performance.now();
640
- try {
641
- // Execute middleware chain
642
- await this.executeMiddleware(req, res, next);
643
- // Classify request for optimal execution path
644
- const classification = this.dependencies.executionPredictor.classify(req);
645
- this.dependencies.performanceProfiler.setRequestType(requestId, classification.type, classification.executionPath);
646
- // Update optimization stats
647
- this.dependencies.optimizationStats.totalRequests++;
648
- if (classification.type === "ultra-fast") {
649
- this.dependencies.optimizationStats.ultraFastRequests++;
650
- }
651
- else if (classification.type === "fast") {
652
- this.dependencies.optimizationStats.fastRequests++;
653
- }
654
- else {
655
- this.dependencies.optimizationStats.standardRequests++;
656
- }
657
- // Route to appropriate execution path
658
- if (classification.type === "ultra-fast" &&
659
- this.dependencies.optimizationEnabled) {
660
- return await this.dependencies.handleUltraFastPath(req, res, next, requestId, classification);
661
- }
662
- else if (classification.type === "fast" &&
663
- this.dependencies.optimizationEnabled) {
664
- return await this.dependencies.handleFastPath(req, res, next, requestId, classification);
665
- }
666
- else {
667
- return await this.dependencies.handleStandardPath(req, res, next, requestId, classification);
668
- }
669
- }
670
- catch (optimizationError) {
671
- // Graceful fallback to standard path on optimization failure
672
- Logger.logger.warn("middleware", `Optimization failed for ${req.method} ${req.path}:`, optimizationError.message);
673
- this.dependencies.optimizationStats.optimizationFailures++;
674
- return await this.dependencies.handleStandardPath(req, res, next, requestId, {
675
- type: "standard",
676
- confidence: 1.0,
677
- executionPath: "fallback",
678
- cacheStrategy: "standard",
679
- skipMiddleware: [],
680
- reason: "Optimization failure fallback",
681
- overhead: 0,
682
- });
683
- }
684
- });
685
- }
686
- /**
687
- * Wrap middleware with performance tracking and caching
688
- */
689
- wrapMiddleware(handler, name) {
690
- return async (req, res, next) => {
691
- const startTime = performance.now();
692
- try {
693
- // Check cache if middleware is cacheable AND the specific middleware entry allows caching
694
- const cacheKey = this.generateCacheKey(req, name);
695
- const middlewareEntry = Array.from(this.middlewareRegistry.values()).find((entry) => entry.name === name);
696
- if (this.optimizationConfig.enableCaching &&
697
- middlewareEntry?.cacheable === true) {
698
- const cached = this.middlewareCache.get(cacheKey);
699
- if (cached && this.isCacheValid(cached)) {
700
- cached.hits++;
701
- const executionTime = performance.now() - startTime;
702
- Logger.logger.debug("middleware", `Cache hit for ${name}: ${executionTime}ms`);
703
- return next();
704
- }
705
- }
706
- // Execute middleware (Express middleware uses callbacks, not promises)
707
- handler(req, res, (error) => {
708
- const executionTime = performance.now() - startTime;
709
- if (error) {
710
- Logger.logger.error("middleware", `Error in ${name}: ${error} (${executionTime}ms)`);
711
- return next(error);
712
- }
713
- // Cache result if applicable
714
- if (this.optimizationConfig.enableCaching &&
715
- executionTime < 10) {
716
- this.middlewareCache.set(cacheKey, {
717
- result: null,
718
- timestamp: Date.now(),
719
- ttl: this.optimizationConfig.defaultTTL,
720
- hits: 0,
721
- middleware: name,
722
- });
723
- }
724
- Logger.logger.debug("middleware", `Executed ${name}: ${executionTime}ms`);
725
- next();
726
- });
727
- }
728
- catch (error) {
729
- const executionTime = performance.now() - startTime;
730
- Logger.logger.error("middleware", `Error in ${name}: ${error} (${executionTime}ms)`);
731
- next(error);
732
- }
733
- };
734
- }
735
- /**
736
- * Calculate execution order based on priority
737
- */
738
- calculateOrder(priority) {
739
- const priorityOrder = {
740
- critical: 1000,
741
- high: 800,
742
- normal: 500,
743
- low: 200,
744
- };
745
- return priorityOrder[priority] + Math.random() * 100; // Add randomness for same priority
746
- }
747
- /**
748
- * Update execution order based on priority and performance
749
- */
750
- updateExecutionOrder() {
751
- this.executionOrder = Array.from(this.middlewareRegistry.entries())
752
- .filter(([_, entry]) => entry.enabled)
753
- .sort(([_, a], [__, b]) => b.order - a.order)
754
- .map(([id, _]) => id);
755
- }
756
- /**
757
- * Execute a single middleware entry
758
- */
759
- async executeMiddlewareEntry(entry, req, res, next) {
760
- return new Promise((resolve, reject) => {
761
- try {
762
- entry.handler(req, res, (error) => {
763
- if (error) {
764
- reject(error);
765
- }
766
- else {
767
- resolve();
768
- }
769
- });
770
- }
771
- catch (error) {
772
- reject(error);
773
- }
774
- });
775
- }
776
- /**
777
- * Update middleware statistics
778
- */
779
- updateMiddlewareStats(entry, executionTime, hasError) {
780
- entry.stats.executionCount++;
781
- entry.stats.totalExecutionTime += executionTime;
782
- entry.stats.averageExecutionTime =
783
- entry.stats.totalExecutionTime / entry.stats.executionCount;
784
- entry.stats.lastExecuted = new Date();
785
- if (hasError) {
786
- entry.stats.errors++;
787
- }
788
- }
789
- /**
790
- * Update performance metrics
791
- */
792
- updatePerformanceMetrics(executionTime, hasError) {
793
- this.performanceMetrics.totalRequests++;
794
- this.performanceMetrics.totalExecutionTime += executionTime;
795
- this.performanceMetrics.averageExecutionTime =
796
- this.performanceMetrics.totalExecutionTime /
797
- this.performanceMetrics.totalRequests;
798
- if (executionTime < this.performanceMetrics.fastestExecution) {
799
- this.performanceMetrics.fastestExecution = executionTime;
800
- }
801
- if (executionTime > this.performanceMetrics.slowestExecution) {
802
- this.performanceMetrics.slowestExecution = executionTime;
803
- }
804
- if (hasError) {
805
- this.performanceMetrics.errorRate =
806
- (this.performanceMetrics.errorRate *
807
- (this.performanceMetrics.totalRequests - 1) +
808
- 1) /
809
- this.performanceMetrics.totalRequests;
810
- }
811
- // Calculate cache hit rate
812
- const totalCacheAttempts = Array.from(this.middlewareCache.values()).reduce((sum, entry) => sum + entry.hits, 0);
813
- this.performanceMetrics.cacheHitRate =
814
- totalCacheAttempts / this.performanceMetrics.totalRequests;
815
- // Calculate throughput (requests per second)
816
- const now = Date.now();
817
- this.performanceMetrics.throughput =
818
- this.performanceMetrics.totalRequests /
819
- ((now - (now - this.performanceMetrics.totalExecutionTime)) / 1000);
820
- }
821
- /**
822
- * Convert registry entry to middleware info
823
- */
824
- entryToInfo(entry) {
825
- return {
826
- name: entry.name,
827
- priority: entry.priority,
828
- enabled: entry.enabled,
829
- order: entry.order,
830
- routes: entry.routes,
831
- executionCount: entry.stats.executionCount,
832
- averageExecutionTime: entry.stats.averageExecutionTime,
833
- lastExecuted: entry.stats.lastExecuted,
834
- cacheEnabled: entry.cacheable,
835
- optimized: entry.stats.averageExecutionTime < 5, // Consider optimized if < 5ms
836
- };
837
- }
838
- /**
839
- * Generate cache key for middleware
840
- */
841
- generateCacheKey(req, middlewareName) {
842
- return `middleware:${middlewareName}:${req.method}:${req.path}`;
843
- }
844
- /**
845
- * Check if cache entry is valid
846
- */
847
- isCacheValid(entry) {
848
- return Date.now() - entry.timestamp < entry.ttl;
849
- }
850
- /**
851
- * Optimize execution order based on performance data
852
- */
853
- optimizeExecutionOrder() {
854
- // Sort by average execution time (fastest first) within same priority
855
- this.executionOrder = Array.from(this.middlewareRegistry.entries())
856
- .filter(([_, entry]) => entry.enabled)
857
- .sort(([_, a], [__, b]) => {
858
- // First by priority
859
- if (a.priority !== b.priority) {
860
- return b.order - a.order;
861
- }
862
- // Then by performance (faster first)
863
- return (a.stats.averageExecutionTime - b.stats.averageExecutionTime);
864
- })
865
- .map(([id, _]) => id);
866
- }
867
- /**
868
- * Clean up expired cache entries
869
- */
870
- cleanupCache() {
871
- const now = Date.now();
872
- for (const [key, entry] of this.middlewareCache.entries()) {
873
- if (now - entry.timestamp > entry.ttl) {
874
- this.middlewareCache.delete(key);
875
- }
876
- }
877
- // Limit cache size
878
- if (this.middlewareCache.size > this.optimizationConfig.maxCacheSize) {
879
- const entries = Array.from(this.middlewareCache.entries()).sort(([_, a], [__, b]) => a.hits - b.hits); // Remove least used first
880
- const toRemove = this.middlewareCache.size -
881
- this.optimizationConfig.maxCacheSize;
882
- for (let i = 0; i < toRemove; i++) {
883
- this.middlewareCache.delete(entries[i][0]);
884
- }
885
- }
886
- }
887
- /**
888
- * Update optimization metrics
889
- */
890
- updateOptimizationMetrics() {
891
- const totalMiddleware = this.middlewareRegistry.size;
892
- const optimizedMiddleware = Array.from(this.middlewareRegistry.values()).filter((entry) => entry.stats.averageExecutionTime < 5).length;
893
- this.performanceMetrics.optimizationGain =
894
- totalMiddleware > 0
895
- ? (optimizedMiddleware / totalMiddleware) * 100
896
- : 0;
897
- }
898
- /**
899
- * Find fastest middleware
900
- */
901
- findFastestMiddleware() {
902
- let fastest = "";
903
- let fastestTime = Infinity;
904
- for (const entry of this.middlewareRegistry.values()) {
905
- if (entry.stats.averageExecutionTime < fastestTime) {
906
- fastestTime = entry.stats.averageExecutionTime;
907
- fastest = entry.name;
908
- }
909
- }
910
- return fastest;
911
- }
912
- /**
913
- * Find slowest middleware
914
- */
915
- findSlowestMiddleware() {
916
- let slowest = "";
917
- let slowestTime = 0;
918
- for (const entry of this.middlewareRegistry.values()) {
919
- if (entry.stats.averageExecutionTime > slowestTime) {
920
- slowestTime = entry.stats.averageExecutionTime;
921
- slowest = entry.name;
922
- }
923
- }
924
- return slowest;
925
- }
926
- /**
927
- * Find most used middleware
928
- */
929
- findMostUsedMiddleware() {
930
- let mostUsed = "";
931
- let mostUsedCount = 0;
932
- for (const entry of this.middlewareRegistry.values()) {
933
- if (entry.stats.executionCount > mostUsedCount) {
934
- mostUsedCount = entry.stats.executionCount;
935
- mostUsed = entry.name;
936
- }
937
- }
938
- return mostUsed;
939
- }
940
- /**
941
- * Calculate cache efficiency
942
- */
943
- calculateCacheEfficiency() {
944
- const totalCacheAttempts = Array.from(this.middlewareCache.values()).reduce((sum, entry) => sum + entry.hits, 0);
945
- const totalRequests = this.performanceMetrics.totalRequests;
946
- return totalRequests > 0
947
- ? (totalCacheAttempts / totalRequests) * 100
948
- : 0;
949
- }
950
- }
951
-
952
- exports.MiddlewareManager = MiddlewareManager;
953
- //# sourceMappingURL=middlewareManager.js.map