xypriss 2.0.0 → 2.1.1

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