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,668 +0,0 @@
1
- 'use strict';
2
-
3
- var os = require('os');
4
- var crypto = require('crypto');
5
- var index = require('../../../../mods/security/src/components/cache/index.js');
6
- var performanceMonitor = require('../../optimization/performance-monitor.js');
7
- var WorkerPool = require('./modules/UFRP/WorkerPool.js');
8
-
9
- function _interopNamespaceDefault(e) {
10
- var n = Object.create(null);
11
- if (e) {
12
- Object.keys(e).forEach(function (k) {
13
- if (k !== 'default') {
14
- var d = Object.getOwnPropertyDescriptor(e, k);
15
- Object.defineProperty(n, k, d.get ? d : {
16
- enumerable: true,
17
- get: function () { return e[k]; }
18
- });
19
- }
20
- });
21
- }
22
- n.default = e;
23
- return Object.freeze(n);
24
- }
25
-
26
- var os__namespace = /*#__PURE__*/_interopNamespaceDefault(os);
27
-
28
- /**
29
- * XyPrissJS - Ultra-Fast Request Processor (Optimized Production Version)
30
- * High-performance request processing using existing XyPrissJS components
31
- */
32
- class UltraFastRequestProcessor {
33
- constructor(config) {
34
- this.requestPatterns = new Map();
35
- this.activeRequests = new Map();
36
- this.circuitBreaker = new Map();
37
- this.stats = {
38
- cacheHits: 0,
39
- cacheMisses: 0,
40
- totalRequests: 0,
41
- successfulRequests: 0,
42
- failedRequests: 0,
43
- avgResponseTime: 0,
44
- totalResponseTime: 0,
45
- peakConcurrency: 0,
46
- currentConcurrency: 0,
47
- };
48
- this.intervals = [];
49
- this.isShuttingDown = false;
50
- this.config = this.createFinalConfig(config);
51
- this.maxConcurrency = this.config.workers?.maxConcurrentTasks || 1000;
52
- // Initialize optimized worker pool
53
- this.workerPool = new WorkerPool.WorkerPool({
54
- cpu: this.config.workers?.cpu ||
55
- Math.max(2, Math.floor(os__namespace.cpus().length * 0.8)),
56
- io: this.config.workers?.io ||
57
- Math.max(4, Math.floor(os__namespace.cpus().length * 0.6)),
58
- maxConcurrentTasks: this.maxConcurrency,
59
- });
60
- // Initialize performance monitor with optimized settings
61
- this.performanceMonitor = new performanceMonitor.PerformanceMonitor({
62
- ...this.config.performance,
63
- // Note: bufferSize and sampleRate are handled internally by PerformanceMonitor
64
- });
65
- // Start optimized pattern analysis
66
- if (this.config.prediction?.enabled) {
67
- this.startOptimizedPatternAnalysis();
68
- }
69
- // Start cleanup processes
70
- this.startCleanupProcesses();
71
- }
72
- createFinalConfig(config) {
73
- const isLegacy = config && ("cpuWorkers" in config || "ioWorkers" in config);
74
- if (isLegacy) {
75
- return this.convertLegacyConfig(config);
76
- }
77
- return this.createDefaultConfig(config);
78
- }
79
- convertLegacyConfig(legacy) {
80
- return {
81
- cache: {
82
- maxSize: legacy.maxCacheSize || 50000,
83
- defaultTTL: legacy.cacheTTL || 300000,
84
- enableCompression: legacy.enableCompression ?? true,
85
- compressionThreshold: 1024,
86
- },
87
- performance: {
88
- enabled: true,
89
- metrics: [
90
- "cpu",
91
- "memory",
92
- "responseTime",
93
- "requests",
94
- "errors",
95
- ],
96
- interval: 10000, // Reduced frequency for production
97
- alerts: [],
98
- },
99
- workers: {
100
- cpu: legacy.cpuWorkers ||
101
- Math.max(2, Math.floor(os__namespace.cpus().length * 0.8)),
102
- io: legacy.ioWorkers ||
103
- Math.max(4, Math.floor(os__namespace.cpus().length * 0.6)),
104
- maxConcurrentTasks: legacy.maxConcurrentTasks || 1000,
105
- },
106
- prediction: {
107
- enabled: legacy.enablePrediction ?? true,
108
- patternRetentionTime: 1800000, // 30 minutes
109
- analysisInterval: 300000, // 5 minutes
110
- hotPatternThreshold: 50, // Increased threshold
111
- },
112
- };
113
- }
114
- createDefaultConfig(override) {
115
- const cpuCount = os__namespace.cpus().length;
116
- const defaults = {
117
- cache: {
118
- maxSize: 50000,
119
- defaultTTL: 300000,
120
- enableCompression: true,
121
- compressionThreshold: 1024,
122
- },
123
- performance: {
124
- enabled: true,
125
- metrics: [
126
- "cpu",
127
- "memory",
128
- "responseTime",
129
- "requests",
130
- "errors",
131
- ],
132
- interval: 10000,
133
- alerts: [],
134
- },
135
- workers: {
136
- cpu: Math.max(2, Math.floor(cpuCount * 0.8)),
137
- io: Math.max(4, Math.floor(cpuCount * 0.6)),
138
- maxConcurrentTasks: 1000,
139
- },
140
- prediction: {
141
- enabled: true,
142
- patternRetentionTime: 1800000,
143
- analysisInterval: 300000,
144
- hotPatternThreshold: 50,
145
- },
146
- };
147
- return this.deepMerge(defaults, override || {});
148
- }
149
- deepMerge(target, source) {
150
- const result = { ...target };
151
- for (const key in source) {
152
- if (source[key] &&
153
- typeof source[key] === "object" &&
154
- !Array.isArray(source[key])) {
155
- result[key] = this.deepMerge(target[key] || {}, source[key]);
156
- }
157
- else {
158
- result[key] = source[key];
159
- }
160
- }
161
- return result;
162
- }
163
- startOptimizedPatternAnalysis() {
164
- const interval = setInterval(() => {
165
- if (!this.isShuttingDown) {
166
- this.analyzeRequestPatterns();
167
- this.updateCircuitBreakers();
168
- }
169
- }, this.config.prediction?.analysisInterval || 300000);
170
- this.intervals.push(interval);
171
- }
172
- startCleanupProcesses() {
173
- // Pattern cleanup
174
- const patternCleanup = setInterval(() => {
175
- if (!this.isShuttingDown) {
176
- this.cleanupOldPatterns();
177
- }
178
- }, 600000); // Every 10 minutes
179
- // Active requests cleanup (for orphaned requests)
180
- const requestCleanup = setInterval(() => {
181
- if (!this.isShuttingDown) {
182
- this.cleanupOrphanedRequests();
183
- }
184
- }, 60000); // Every minute
185
- this.intervals.push(patternCleanup, requestCleanup);
186
- }
187
- analyzeRequestPatterns() {
188
- const now = Date.now();
189
- const patterns = Array.from(this.requestPatterns.entries());
190
- for (const [patternKey, pattern] of patterns) {
191
- const timeSpan = Math.max(1, (now - pattern.lastSeen) / 60000);
192
- pattern.frequency = pattern.count / timeSpan;
193
- pattern.priority = this.calculateOptimizedPriority(pattern);
194
- // Update success rate
195
- pattern.successRate =
196
- pattern.count > 0
197
- ? ((pattern.count - pattern.errorCount) / pattern.count) *
198
- 100
199
- : 100;
200
- }
201
- // Prune low-priority patterns to manage memory
202
- this.prunePatterns(patterns);
203
- }
204
- calculateOptimizedPriority(pattern) {
205
- const now = Date.now();
206
- const recency = Math.max(1, (now - pattern.lastSeen) / 60000);
207
- const frequency = pattern.frequency || 1;
208
- const speed = 1000 / Math.max(pattern.avgResponseTime, 1);
209
- const reliability = pattern.successRate / 100;
210
- const resourceEfficiency = 1 /
211
- Math.max(pattern.resourceUsage.cpu + pattern.resourceUsage.memory, 1);
212
- return ((pattern.count *
213
- frequency *
214
- speed *
215
- reliability *
216
- resourceEfficiency) /
217
- recency);
218
- }
219
- prunePatterns(patterns) {
220
- const maxPatterns = 10000; // Limit memory usage
221
- if (patterns.length <= maxPatterns)
222
- return;
223
- // Sort by priority (ascending) and remove lowest priority patterns
224
- patterns.sort((a, b) => a[1].priority - b[1].priority);
225
- const toRemove = patterns.slice(0, patterns.length - maxPatterns);
226
- for (const [key] of toRemove) {
227
- this.requestPatterns.delete(key);
228
- }
229
- }
230
- updateCircuitBreakers() {
231
- const now = Date.now();
232
- const resetTime = 60000; // 1 minute
233
- for (const [pattern, breaker] of this.circuitBreaker.entries()) {
234
- if (breaker.isOpen && now - breaker.lastFailure > resetTime) {
235
- breaker.isOpen = false;
236
- breaker.failures = 0;
237
- }
238
- }
239
- }
240
- cleanupOldPatterns() {
241
- const now = Date.now();
242
- const retentionTime = this.config.prediction?.patternRetentionTime || 1800000;
243
- for (const [patternKey, pattern] of this.requestPatterns.entries()) {
244
- if (now - pattern.lastSeen > retentionTime) {
245
- this.requestPatterns.delete(patternKey);
246
- }
247
- }
248
- // Also cleanup circuit breakers
249
- for (const [pattern, breaker] of this.circuitBreaker.entries()) {
250
- if (now - breaker.lastFailure > retentionTime) {
251
- this.circuitBreaker.delete(pattern);
252
- }
253
- }
254
- }
255
- cleanupOrphanedRequests() {
256
- const now = Date.now();
257
- const maxAge = 300000; // 5 minutes
258
- for (const [reqId, context] of this.activeRequests.entries()) {
259
- if (now - context.startTime > maxAge) {
260
- this.activeRequests.delete(reqId);
261
- this.stats.currentConcurrency = Math.max(0, this.stats.currentConcurrency - 1);
262
- }
263
- }
264
- }
265
- middleware() {
266
- return async (req, res, next) => {
267
- if (this.isShuttingDown) {
268
- res.status(503).json({ error: "Service shutting down" });
269
- return;
270
- }
271
- // Check concurrency limit
272
- if (this.stats.currentConcurrency >= this.maxConcurrency) {
273
- res.status(429).json({ error: "Too many concurrent requests" });
274
- return;
275
- }
276
- const requestId = this.generateRequestId();
277
- const startTime = Date.now();
278
- const context = {
279
- startTime,
280
- cacheKey: this.generateOptimizedCacheKey(req),
281
- pattern: this.generatePattern(req),
282
- priority: this.calculateRequestPriority(req),
283
- workerType: this.determineWorkerType(req),
284
- taskType: this.determineTaskType(req),
285
- };
286
- this.activeRequests.set(requestId, context);
287
- this.stats.currentConcurrency++;
288
- this.stats.totalRequests++;
289
- this.stats.peakConcurrency = Math.max(this.stats.peakConcurrency, this.stats.currentConcurrency);
290
- try {
291
- // Check circuit breaker
292
- if (this.isCircuitOpen(context.pattern)) {
293
- throw new Error("Circuit breaker open");
294
- }
295
- // Try cache first
296
- const cachedResult = await this.tryCache(context.cacheKey);
297
- if (cachedResult) {
298
- await this.sendCachedResponse(res, cachedResult, requestId, context);
299
- return;
300
- }
301
- // Process request
302
- const result = await this.processOptimizedRequest(req, context);
303
- // Cache result if successful
304
- if (result && !res.headersSent) {
305
- await this.cacheResult(context.cacheKey, result);
306
- await this.sendProcessedResponse(res, result, requestId, context);
307
- }
308
- else if (!res.headersSent) {
309
- // If we couldn't process the request, pass it to the next middleware
310
- next();
311
- return;
312
- }
313
- this.recordSuccess(context, Date.now() - startTime);
314
- }
315
- catch (error) {
316
- this.recordFailure(context, error, Date.now() - startTime);
317
- if (!res.headersSent) {
318
- this.sendErrorResponse(res, error, requestId);
319
- }
320
- }
321
- finally {
322
- this.activeRequests.delete(requestId);
323
- this.stats.currentConcurrency = Math.max(0, this.stats.currentConcurrency - 1);
324
- }
325
- };
326
- }
327
- generateRequestId() {
328
- return `req_${Date.now()}_${Math.random()
329
- .toString(36)
330
- .substring(2, 11)}`;
331
- }
332
- generateOptimizedCacheKey(req) {
333
- // More efficient cache key generation
334
- const keyParts = [
335
- req.method,
336
- req.path,
337
- req.headers["content-type"] || "",
338
- ];
339
- // Only include query params for GET requests
340
- if (req.method === "GET" && Object.keys(req.query).length > 0) {
341
- keyParts.push(JSON.stringify(req.query));
342
- }
343
- return crypto.createHash("sha256")
344
- .update(keyParts.join("|"))
345
- .digest("base64url"); // More URL-safe encoding
346
- }
347
- async tryCache(cacheKey) {
348
- try {
349
- const result = await index.readCache(cacheKey);
350
- if (result &&
351
- typeof result === "object" &&
352
- Object.keys(result).length > 0) {
353
- this.stats.cacheHits++;
354
- return result;
355
- }
356
- }
357
- catch (error) {
358
- // Cache miss or error, continue with processing
359
- }
360
- this.stats.cacheMisses++;
361
- return null;
362
- }
363
- async processOptimizedRequest(req, context) {
364
- ({
365
- id: this.generateRequestId(),
366
- type: context.taskType,
367
- priority: context.priority,
368
- workerType: context.workerType,
369
- createdAt: Date.now(),
370
- data: {
371
- method: req.method,
372
- path: req.path,
373
- query: req.query,
374
- body: req.body,
375
- headers: this.sanitizeHeaders(req.headers),
376
- },
377
- });
378
- // TODO: Implement actual request processing logic
379
- // For now, return null to pass control to next middleware
380
- return null;
381
- }
382
- createTimeoutPromise(ms) {
383
- return new Promise((_, reject) => {
384
- setTimeout(() => reject(new Error("Request timeout")), ms);
385
- });
386
- }
387
- async cacheResult(cacheKey, result) {
388
- try {
389
- await index.writeCache(cacheKey, result, {
390
- ttl: this.config.cache?.defaultTTL || 300000,
391
- });
392
- }
393
- catch (error) {
394
- // Log cache write errors but don't fail the request
395
- console.warn("Cache write failed:", error);
396
- }
397
- }
398
- async sendCachedResponse(res, result, requestId, context) {
399
- const responseTime = Date.now() - context.startTime;
400
- res.setHeader("X-Cache", "HIT");
401
- res.setHeader("X-Response-Time", `${responseTime}ms`);
402
- res.setHeader("X-Request-ID", requestId);
403
- res.json(result);
404
- }
405
- async sendProcessedResponse(res, result, requestId, context) {
406
- const responseTime = Date.now() - context.startTime;
407
- res.setHeader("X-Cache", "MISS");
408
- res.setHeader("X-Response-Time", `${responseTime}ms`);
409
- res.setHeader("X-Request-ID", requestId);
410
- res.json(result);
411
- }
412
- sendErrorResponse(res, error, requestId) {
413
- const statusCode = error.statusCode || 500;
414
- res.status(statusCode).json({
415
- error: error.message || "Internal server error",
416
- requestId,
417
- timestamp: Date.now(),
418
- });
419
- }
420
- isCircuitOpen(pattern) {
421
- const breaker = this.circuitBreaker.get(pattern);
422
- return breaker?.isOpen || false;
423
- }
424
- recordSuccess(context, responseTime) {
425
- this.stats.successfulRequests++;
426
- this.stats.totalResponseTime += responseTime;
427
- this.stats.avgResponseTime =
428
- this.stats.totalResponseTime / this.stats.totalRequests;
429
- this.updateRequestPattern(context, responseTime, true);
430
- }
431
- recordFailure(context, error, responseTime) {
432
- this.stats.failedRequests++;
433
- this.stats.totalResponseTime += responseTime;
434
- this.stats.avgResponseTime =
435
- this.stats.totalResponseTime / this.stats.totalRequests;
436
- this.updateRequestPattern(context, responseTime, false);
437
- this.updateCircuitBreaker(context.pattern);
438
- }
439
- updateRequestPattern(context, responseTime, success) {
440
- const pattern = this.requestPatterns.get(context.pattern) ||
441
- this.createNewPattern(context);
442
- pattern.count++;
443
- pattern.lastSeen = Date.now();
444
- pattern.avgResponseTime = this.updateAverage(pattern.avgResponseTime, responseTime, pattern.count);
445
- if (!success) {
446
- pattern.errorCount++;
447
- pattern.lastErrorTime = Date.now();
448
- }
449
- pattern.successRate =
450
- ((pattern.count - pattern.errorCount) / pattern.count) * 100;
451
- pattern.priority = this.calculateOptimizedPriority(pattern);
452
- this.requestPatterns.set(context.pattern, pattern);
453
- }
454
- createNewPattern(context) {
455
- return {
456
- count: 0,
457
- lastSeen: 0,
458
- avgResponseTime: 0,
459
- priority: 0,
460
- method: context.pattern.split(":")[0],
461
- path: context.pattern.split(":")[1],
462
- frequency: 0,
463
- trend: "stable",
464
- successRate: 100,
465
- errorCount: 0,
466
- peakUsage: 0,
467
- resourceUsage: { cpu: 0, memory: 0 },
468
- };
469
- }
470
- updateCircuitBreaker(pattern) {
471
- const breaker = this.circuitBreaker.get(pattern) || {
472
- failures: 0,
473
- lastFailure: 0,
474
- isOpen: false,
475
- };
476
- breaker.failures++;
477
- breaker.lastFailure = Date.now();
478
- if (breaker.failures >= 5) {
479
- // Open circuit after 5 failures
480
- breaker.isOpen = true;
481
- }
482
- this.circuitBreaker.set(pattern, breaker);
483
- }
484
- determineTaskType(req) {
485
- if (req.path.includes("/validate") || req.path.includes("/verify"))
486
- return "validate";
487
- switch (req.method) {
488
- case "GET":
489
- case "HEAD":
490
- return "read";
491
- case "POST":
492
- case "PUT":
493
- case "PATCH":
494
- return "write";
495
- case "DELETE":
496
- return "delete";
497
- default:
498
- return "process";
499
- }
500
- }
501
- calculateRequestPriority(req) {
502
- let priority = 5; // Default priority
503
- // Critical paths get highest priority
504
- if (req.path.includes("/health") || req.path.includes("/status")) {
505
- priority = 0;
506
- }
507
- else if (req.path.includes("/auth") || req.path.includes("/login")) {
508
- priority = 1;
509
- }
510
- else if (req.path.includes("/api/admin")) {
511
- priority = 2;
512
- }
513
- else if (req.method === "GET") {
514
- priority = 3;
515
- }
516
- else if (req.method === "POST" || req.method === "PUT") {
517
- priority = 4;
518
- }
519
- // Adjust based on content type
520
- if (req.headers["content-type"]?.includes("application/json")) {
521
- priority = Math.max(0, priority - 1);
522
- }
523
- return priority;
524
- }
525
- determineWorkerType(req) {
526
- // CPU-intensive operations
527
- const cpuPaths = [
528
- "/validate",
529
- "/compute",
530
- "/transform",
531
- "/encrypt",
532
- "/hash",
533
- "/compress",
534
- ];
535
- if (cpuPaths.some((path) => req.path.includes(path))) {
536
- return "cpu";
537
- }
538
- // Default to I/O for database, file system, network operations
539
- return "io";
540
- }
541
- generatePattern(req) {
542
- return [
543
- req.method,
544
- req.route?.path || req.path,
545
- req.headers["content-type"] || "",
546
- ].join(":");
547
- }
548
- updateAverage(currentAvg, newValue, count) {
549
- return (currentAvg * (count - 1) + newValue) / count;
550
- }
551
- sanitizeHeaders(headers) {
552
- const sanitized = {};
553
- const allowedHeaders = [
554
- "content-type",
555
- "accept",
556
- "authorization",
557
- "user-agent",
558
- "x-forwarded-for",
559
- "x-real-ip",
560
- "accept-encoding",
561
- ];
562
- for (const key of allowedHeaders) {
563
- if (headers[key]) {
564
- sanitized[key] = String(headers[key]);
565
- }
566
- }
567
- return sanitized;
568
- }
569
- getStats() {
570
- const performanceMetrics = this.performanceMonitor.getMetrics();
571
- const patternStats = this.getOptimizedPatternStats();
572
- const workerPoolStats = this.workerPool.getStats();
573
- const cacheStats = index.getCacheStats();
574
- return {
575
- cache: {
576
- hits: this.stats.cacheHits,
577
- misses: this.stats.cacheMisses,
578
- hitRate: this.stats.totalRequests > 0
579
- ? (this.stats.cacheHits / this.stats.totalRequests) *
580
- 100
581
- : 0,
582
- stats: cacheStats,
583
- },
584
- requests: {
585
- total: this.stats.totalRequests,
586
- successful: this.stats.successfulRequests,
587
- failed: this.stats.failedRequests,
588
- successRate: this.stats.totalRequests > 0
589
- ? (this.stats.successfulRequests /
590
- this.stats.totalRequests) *
591
- 100
592
- : 0,
593
- avgResponseTime: this.stats.avgResponseTime,
594
- currentConcurrency: this.stats.currentConcurrency,
595
- peakConcurrency: this.stats.peakConcurrency,
596
- },
597
- patterns: patternStats,
598
- performance: performanceMetrics,
599
- workerPool: workerPoolStats,
600
- circuitBreakers: {
601
- total: this.circuitBreaker.size,
602
- open: Array.from(this.circuitBreaker.values()).filter((b) => b.isOpen).length,
603
- },
604
- memory: {
605
- activeRequests: this.activeRequests.size,
606
- patterns: this.requestPatterns.size,
607
- circuitBreakers: this.circuitBreaker.size,
608
- },
609
- };
610
- }
611
- getOptimizedPatternStats() {
612
- const now = Date.now();
613
- const activePatterns = Array.from(this.requestPatterns.values()).filter((pattern) => now - pattern.lastSeen < 600000);
614
- const hotPatterns = activePatterns.filter((p) => p.priority > (this.config.prediction?.hotPatternThreshold || 50));
615
- return {
616
- totalPatterns: this.requestPatterns.size,
617
- activePatterns: activePatterns.length,
618
- hotPatterns: hotPatterns.length,
619
- avgSuccessRate: activePatterns.length > 0
620
- ? activePatterns.reduce((sum, p) => sum + p.successRate, 0) / activePatterns.length
621
- : 100,
622
- avgResponseTime: activePatterns.length > 0
623
- ? activePatterns.reduce((sum, p) => sum + p.avgResponseTime, 0) / activePatterns.length
624
- : 0,
625
- topPatterns: hotPatterns
626
- .sort((a, b) => b.priority - a.priority)
627
- .slice(0, 10)
628
- .map((p) => ({
629
- method: p.method,
630
- path: p.path,
631
- priority: p.priority,
632
- successRate: p.successRate,
633
- avgResponseTime: p.avgResponseTime,
634
- frequency: p.frequency,
635
- })),
636
- };
637
- }
638
- async destroy() {
639
- this.isShuttingDown = true;
640
- try {
641
- // Wait for active requests to complete (with timeout)
642
- const maxWaitTime = 30000; // 30 seconds
643
- const checkInterval = 100;
644
- let waited = 0;
645
- while (this.activeRequests.size > 0 && waited < maxWaitTime) {
646
- await new Promise((resolve) => setTimeout(resolve, checkInterval));
647
- waited += checkInterval;
648
- }
649
- // Clear all intervals
650
- this.intervals.forEach((interval) => clearInterval(interval));
651
- this.intervals = [];
652
- // Stop performance monitor
653
- this.performanceMonitor.stop();
654
- // Note: WorkerPool doesn't require explicit shutdown as it doesn't create actual worker threads
655
- // Clear all maps
656
- this.requestPatterns.clear();
657
- this.activeRequests.clear();
658
- this.circuitBreaker.clear();
659
- console.log("UltraFastRequestProcessor shutdown complete");
660
- }
661
- catch (error) {
662
- console.error("Error during shutdown:", error);
663
- }
664
- }
665
- }
666
-
667
- exports.UltraFastRequestProcessor = UltraFastRequestProcessor;
668
- //# sourceMappingURL=UltraFastRequestProcessor.js.map