xypriss 1.3.8 → 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 (221) hide show
  1. package/README.md +232 -254
  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 -74
  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 -4
  15. package/dist/cjs/mods/security/src/index.js.map +1 -1
  16. package/dist/cjs/shared/logger/Logger.js +374 -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/index.js +55 -61
  41. package/dist/cjs/src/index.js.map +1 -1
  42. package/dist/cjs/src/middleware/XyPrissMiddlewareAPI.js +281 -0
  43. package/dist/cjs/src/middleware/XyPrissMiddlewareAPI.js.map +1 -0
  44. package/dist/cjs/src/middleware/built-in/index.js +325 -0
  45. package/dist/cjs/src/middleware/built-in/index.js.map +1 -0
  46. package/dist/cjs/src/middleware/built-in/sqlInjection.js +335 -0
  47. package/dist/cjs/src/middleware/built-in/sqlInjection.js.map +1 -0
  48. package/dist/cjs/src/middleware/safe-json-middleware.js +1 -1
  49. package/dist/cjs/src/middleware/safe-json-middleware.js.map +1 -1
  50. package/dist/cjs/src/middleware/security-middleware.js +447 -332
  51. package/dist/cjs/src/middleware/security-middleware.js.map +1 -1
  52. package/dist/cjs/src/plugins/modules/builtin/ResponseTimePlugin.js +1 -1
  53. package/dist/cjs/src/plugins/modules/builtin/ResponseTimePlugin.js.map +1 -1
  54. package/dist/cjs/src/plugins/modules/index.js +9 -3
  55. package/dist/cjs/src/plugins/modules/index.js.map +1 -1
  56. package/dist/cjs/src/quick-start.js +0 -4
  57. package/dist/cjs/src/quick-start.js.map +1 -1
  58. package/dist/cjs/src/server/FastServer.js +94 -412
  59. package/dist/cjs/src/server/FastServer.js.map +1 -1
  60. package/dist/cjs/src/server/ServerFactory.js +69 -64
  61. package/dist/cjs/src/server/ServerFactory.js.map +1 -1
  62. package/dist/cjs/src/server/components/fastapi/ClusterManagerComponent.js +31 -5
  63. package/dist/cjs/src/server/components/fastapi/ClusterManagerComponent.js.map +1 -1
  64. package/dist/cjs/src/server/components/fastapi/PerformanceManager.js +1 -1
  65. package/dist/cjs/src/server/components/fastapi/PerformanceManager.js.map +1 -1
  66. package/dist/cjs/src/server/components/fastapi/RouteManager.js +0 -82
  67. package/dist/cjs/src/server/components/fastapi/RouteManager.js.map +1 -1
  68. package/dist/cjs/src/server/components/fastapi/WorkerPoolComponent.js +206 -0
  69. package/dist/cjs/src/server/components/fastapi/WorkerPoolComponent.js.map +1 -0
  70. package/dist/cjs/src/server/components/fastapi/console/ConsoleInterceptor.js +3 -28
  71. package/dist/cjs/src/server/components/fastapi/console/ConsoleInterceptor.js.map +1 -1
  72. package/dist/cjs/src/server/components/fastapi/modules/UFRP/WorkerPoolManager.js +265 -0
  73. package/dist/cjs/src/server/components/fastapi/modules/UFRP/WorkerPoolManager.js.map +1 -0
  74. package/dist/cjs/src/server/components/fastapi/modules/UFRP/workers/Logger.js +236 -0
  75. package/dist/cjs/src/server/components/fastapi/modules/UFRP/workers/cpu-tasks.js +294 -0
  76. package/dist/cjs/src/server/components/fastapi/modules/UFRP/workers/enhanced-cpu-worker.js +433 -0
  77. package/dist/cjs/src/server/components/fastapi/modules/UFRP/workers/io-worker.js +1615 -0
  78. package/dist/cjs/src/server/components/lifecycle/ServerLifecycleManager.js +503 -0
  79. package/dist/cjs/src/server/components/lifecycle/ServerLifecycleManager.js.map +1 -0
  80. package/dist/cjs/src/server/const/default.js +23 -17
  81. package/dist/cjs/src/server/const/default.js.map +1 -1
  82. package/dist/cjs/src/server/core/HttpServer.js +500 -0
  83. package/dist/cjs/src/server/core/HttpServer.js.map +1 -0
  84. package/dist/cjs/src/server/core/XyprissApp.js +679 -0
  85. package/dist/cjs/src/server/core/XyprissApp.js.map +1 -0
  86. package/dist/cjs/src/server/handlers/NotFoundHandler.js +1 -1
  87. package/dist/cjs/src/server/handlers/NotFoundHandler.js.map +1 -1
  88. package/dist/cjs/src/server/middleware/MiddlewareManager.js +191 -0
  89. package/dist/cjs/src/server/middleware/MiddlewareManager.js.map +1 -0
  90. package/dist/cjs/src/server/routing/Router.js +341 -0
  91. package/dist/cjs/src/server/routing/Router.js.map +1 -0
  92. package/dist/cjs/src/server/utils/PortManager.js +1 -0
  93. package/dist/cjs/src/server/utils/PortManager.js.map +1 -1
  94. package/dist/cjs/src/server/utils/forceClosePort.js +294 -88
  95. package/dist/cjs/src/server/utils/forceClosePort.js.map +1 -1
  96. package/dist/esm/mods/security/src/algorithms/hash-algorithms.js +10 -0
  97. package/dist/esm/mods/security/src/algorithms/hash-algorithms.js.map +1 -1
  98. package/dist/esm/mods/security/src/components/cache/cacheSys.utils.js +10 -0
  99. package/dist/esm/mods/security/src/components/cache/cacheSys.utils.js.map +1 -1
  100. package/dist/esm/mods/security/src/components/cache/index.js +11 -72
  101. package/dist/esm/mods/security/src/components/cache/index.js.map +1 -1
  102. package/dist/esm/mods/security/src/components/fortified-function/index.js +9 -0
  103. package/dist/esm/mods/security/src/components/fortified-function/index.js.map +1 -1
  104. package/dist/esm/mods/security/src/components/fortified-function/security/security-handler.js +10 -0
  105. package/dist/esm/mods/security/src/components/fortified-function/security/security-handler.js.map +1 -1
  106. package/dist/esm/mods/security/src/core/crypto.js +14 -0
  107. package/dist/esm/mods/security/src/core/crypto.js.map +1 -1
  108. package/dist/esm/mods/security/src/index.js +11 -2
  109. package/dist/esm/mods/security/src/index.js.map +1 -1
  110. package/dist/esm/shared/logger/Logger.js +374 -29
  111. package/dist/esm/shared/logger/Logger.js.map +1 -1
  112. package/dist/esm/src/cluster/bun-cluster-manager.js +91 -1
  113. package/dist/esm/src/cluster/bun-cluster-manager.js.map +1 -1
  114. package/dist/esm/src/cluster/cluster-manager.js +15 -3
  115. package/dist/esm/src/cluster/cluster-manager.js.map +1 -1
  116. package/dist/esm/src/cluster/modules/AutoScaler.js +4 -4
  117. package/dist/esm/src/cluster/modules/AutoScaler.js.map +1 -1
  118. package/dist/esm/src/cluster/modules/CrossPlatformMemory.js +2 -2
  119. package/dist/esm/src/cluster/modules/CrossPlatformMemory.js.map +1 -1
  120. package/dist/esm/src/cluster/modules/EventLoopMonitor.js +268 -0
  121. package/dist/esm/src/cluster/modules/EventLoopMonitor.js.map +1 -0
  122. package/dist/esm/src/cluster/modules/GCStatsTracker.js +198 -0
  123. package/dist/esm/src/cluster/modules/GCStatsTracker.js.map +1 -0
  124. package/dist/esm/src/cluster/modules/HeapStatsCollector.js +109 -0
  125. package/dist/esm/src/cluster/modules/HeapStatsCollector.js.map +1 -0
  126. package/dist/esm/src/cluster/modules/NetworkTracker.js +160 -0
  127. package/dist/esm/src/cluster/modules/NetworkTracker.js.map +1 -0
  128. package/dist/esm/src/cluster/modules/ThroughputCalculator.js +184 -0
  129. package/dist/esm/src/cluster/modules/ThroughputCalculator.js.map +1 -0
  130. package/dist/esm/src/cluster/modules/WorkerManager.js +14 -14
  131. package/dist/esm/src/cluster/modules/WorkerManager.js.map +1 -1
  132. package/dist/esm/src/cluster/modules/{LoadBalancer.js → strategy/LoadBalancer.js} +1 -1
  133. package/dist/esm/src/cluster/modules/strategy/LoadBalancer.js.map +1 -0
  134. package/dist/esm/src/index.js +41 -11
  135. package/dist/esm/src/index.js.map +1 -1
  136. package/dist/esm/src/middleware/XyPrissMiddlewareAPI.js +279 -0
  137. package/dist/esm/src/middleware/XyPrissMiddlewareAPI.js.map +1 -0
  138. package/dist/esm/src/middleware/built-in/index.js +323 -0
  139. package/dist/esm/src/middleware/built-in/index.js.map +1 -0
  140. package/dist/esm/src/middleware/built-in/sqlInjection.js +333 -0
  141. package/dist/esm/src/middleware/built-in/sqlInjection.js.map +1 -0
  142. package/dist/esm/src/middleware/safe-json-middleware.js +1 -1
  143. package/dist/esm/src/middleware/safe-json-middleware.js.map +1 -1
  144. package/dist/esm/src/middleware/security-middleware.js +447 -332
  145. package/dist/esm/src/middleware/security-middleware.js.map +1 -1
  146. package/dist/esm/src/plugins/modules/builtin/ResponseTimePlugin.js +1 -1
  147. package/dist/esm/src/plugins/modules/builtin/ResponseTimePlugin.js.map +1 -1
  148. package/dist/esm/src/plugins/modules/index.js +9 -3
  149. package/dist/esm/src/plugins/modules/index.js.map +1 -1
  150. package/dist/esm/src/quick-start.js +0 -4
  151. package/dist/esm/src/quick-start.js.map +1 -1
  152. package/dist/esm/src/server/FastServer.js +94 -412
  153. package/dist/esm/src/server/FastServer.js.map +1 -1
  154. package/dist/esm/src/server/ServerFactory.js +70 -61
  155. package/dist/esm/src/server/ServerFactory.js.map +1 -1
  156. package/dist/esm/src/server/components/fastapi/ClusterManagerComponent.js +31 -5
  157. package/dist/esm/src/server/components/fastapi/ClusterManagerComponent.js.map +1 -1
  158. package/dist/esm/src/server/components/fastapi/PerformanceManager.js +1 -1
  159. package/dist/esm/src/server/components/fastapi/PerformanceManager.js.map +1 -1
  160. package/dist/esm/src/server/components/fastapi/RouteManager.js +0 -82
  161. package/dist/esm/src/server/components/fastapi/RouteManager.js.map +1 -1
  162. package/dist/esm/src/server/components/fastapi/WorkerPoolComponent.js +204 -0
  163. package/dist/esm/src/server/components/fastapi/WorkerPoolComponent.js.map +1 -0
  164. package/dist/esm/src/server/components/fastapi/console/ConsoleInterceptor.js +2 -27
  165. package/dist/esm/src/server/components/fastapi/console/ConsoleInterceptor.js.map +1 -1
  166. package/dist/esm/src/server/components/fastapi/modules/UFRP/WorkerPoolManager.js +263 -0
  167. package/dist/esm/src/server/components/fastapi/modules/UFRP/WorkerPoolManager.js.map +1 -0
  168. package/dist/esm/src/server/components/fastapi/modules/UFRP/workers/Logger.js +236 -0
  169. package/dist/esm/src/server/components/fastapi/modules/UFRP/workers/cpu-tasks.js +294 -0
  170. package/dist/esm/src/server/components/fastapi/modules/UFRP/workers/enhanced-cpu-worker.js +433 -0
  171. package/dist/esm/src/server/components/fastapi/modules/UFRP/workers/io-worker.js +1615 -0
  172. package/dist/esm/src/server/components/lifecycle/ServerLifecycleManager.js +501 -0
  173. package/dist/esm/src/server/components/lifecycle/ServerLifecycleManager.js.map +1 -0
  174. package/dist/esm/src/server/const/default.js +23 -17
  175. package/dist/esm/src/server/const/default.js.map +1 -1
  176. package/dist/esm/src/server/core/HttpServer.js +498 -0
  177. package/dist/esm/src/server/core/HttpServer.js.map +1 -0
  178. package/dist/esm/src/server/core/XyprissApp.js +677 -0
  179. package/dist/esm/src/server/core/XyprissApp.js.map +1 -0
  180. package/dist/esm/src/server/handlers/NotFoundHandler.js +1 -1
  181. package/dist/esm/src/server/handlers/NotFoundHandler.js.map +1 -1
  182. package/dist/esm/src/server/middleware/MiddlewareManager.js +189 -0
  183. package/dist/esm/src/server/middleware/MiddlewareManager.js.map +1 -0
  184. package/dist/esm/src/server/routing/Router.js +339 -0
  185. package/dist/esm/src/server/routing/Router.js.map +1 -0
  186. package/dist/esm/src/server/utils/PortManager.js +1 -0
  187. package/dist/esm/src/server/utils/PortManager.js.map +1 -1
  188. package/dist/esm/src/server/utils/forceClosePort.js +294 -88
  189. package/dist/esm/src/server/utils/forceClosePort.js.map +1 -1
  190. package/dist/index.d.ts +3363 -5311
  191. package/package.json +39 -28
  192. package/dist/cjs/src/cluster/index.js +0 -361
  193. package/dist/cjs/src/cluster/index.js.map +0 -1
  194. package/dist/cjs/src/cluster/modules/ClusterFactory.js +0 -539
  195. package/dist/cjs/src/cluster/modules/ClusterFactory.js.map +0 -1
  196. package/dist/cjs/src/cluster/modules/LoadBalancer.js.map +0 -1
  197. package/dist/cjs/src/server/components/fastapi/UltraFastRequestProcessor.js +0 -668
  198. package/dist/cjs/src/server/components/fastapi/UltraFastRequestProcessor.js.map +0 -1
  199. package/dist/cjs/src/server/components/fastapi/middlewares/MiddlewareAPI.js +0 -347
  200. package/dist/cjs/src/server/components/fastapi/middlewares/MiddlewareAPI.js.map +0 -1
  201. package/dist/cjs/src/server/components/fastapi/middlewares/MiddlewareMethodsManager.js +0 -204
  202. package/dist/cjs/src/server/components/fastapi/middlewares/MiddlewareMethodsManager.js.map +0 -1
  203. package/dist/cjs/src/server/components/fastapi/middlewares/middlewareManager.js +0 -953
  204. package/dist/cjs/src/server/components/fastapi/middlewares/middlewareManager.js.map +0 -1
  205. package/dist/cjs/src/server/components/fastapi/modules/UFRP/WorkerPool.js +0 -56
  206. package/dist/cjs/src/server/components/fastapi/modules/UFRP/WorkerPool.js.map +0 -1
  207. package/dist/esm/src/cluster/index.js +0 -339
  208. package/dist/esm/src/cluster/index.js.map +0 -1
  209. package/dist/esm/src/cluster/modules/ClusterFactory.js +0 -511
  210. package/dist/esm/src/cluster/modules/ClusterFactory.js.map +0 -1
  211. package/dist/esm/src/cluster/modules/LoadBalancer.js.map +0 -1
  212. package/dist/esm/src/server/components/fastapi/UltraFastRequestProcessor.js +0 -647
  213. package/dist/esm/src/server/components/fastapi/UltraFastRequestProcessor.js.map +0 -1
  214. package/dist/esm/src/server/components/fastapi/middlewares/MiddlewareAPI.js +0 -345
  215. package/dist/esm/src/server/components/fastapi/middlewares/MiddlewareAPI.js.map +0 -1
  216. package/dist/esm/src/server/components/fastapi/middlewares/MiddlewareMethodsManager.js +0 -202
  217. package/dist/esm/src/server/components/fastapi/middlewares/MiddlewareMethodsManager.js.map +0 -1
  218. package/dist/esm/src/server/components/fastapi/middlewares/middlewareManager.js +0 -951
  219. package/dist/esm/src/server/components/fastapi/middlewares/middlewareManager.js.map +0 -1
  220. package/dist/esm/src/server/components/fastapi/modules/UFRP/WorkerPool.js +0 -54
  221. package/dist/esm/src/server/components/fastapi/modules/UFRP/WorkerPool.js.map +0 -1
@@ -1,5 +1,4 @@
1
- import express from 'express';
2
- import rateLimit from 'express-rate-limit';
1
+ import { XyprissApp } from './core/XyprissApp.js';
3
2
  import { PluginManager } from './components/fastapi/PluginManager.js';
4
3
  import { PluginManager as PluginManager$1 } from '../plugins/plugin-manager.js';
5
4
  import '../plugins/modules/core/SecurityPlugin.js';
@@ -38,6 +37,7 @@ import '../../mods/security/src/core/keys/keys-types.js';
38
37
  import '../../mods/security/src/core/keys/keys-logger.js';
39
38
  import '../../mods/security/src/core/keys/keys-utils.js';
40
39
  import '../../mods/security/src/core/keys/algorithms/mods/PBKDF2Algo.js';
40
+ import { SecurityMiddleware } from '../middleware/security-middleware.js';
41
41
  import '../../mods/security/src/core/password/index.js';
42
42
  import 'systeminformation';
43
43
  import 'pidusage';
@@ -54,22 +54,15 @@ import { Port } from './utils/forceClosePort.js';
54
54
  import { ConfigLoader } from './utils/ConfigLoader.js';
55
55
  import { DEFAULT_OPTIONS } from './const/default.js';
56
56
  import { CacheManager } from './components/fastapi/CacheManager.js';
57
- import { MiddlewareMethodsManager } from './components/fastapi/middlewares/MiddlewareMethodsManager.js';
58
- import { RequestProcessor } from './components/fastapi/RequestProcessor.js';
59
- import { RouteManager } from './components/fastapi/RouteManager.js';
60
57
  import { PerformanceManager } from './components/fastapi/PerformanceManager.js';
61
- import { MonitoringManager } from './components/fastapi/MonitoringManager.js';
62
58
  import { ClusterManagerComponent } from './components/fastapi/ClusterManagerComponent.js';
63
59
  import { FileWatcherManager } from './components/fastapi/FileWatcherManager.js';
64
- import { MiddlewareManager } from './components/fastapi/middlewares/middlewareManager.js';
65
- import { RedirectManager } from './components/fastapi/RedirectManager.js';
66
- import { ConsoleInterceptor } from './components/fastapi/console/ConsoleInterceptor.js';
67
- import { UltraFastRequestProcessor } from './components/fastapi/UltraFastRequestProcessor.js';
60
+ import { WorkerPoolComponent } from './components/fastapi/WorkerPoolComponent.js';
68
61
  import { createSafeJsonMiddleware } from '../middleware/safe-json-middleware.js';
69
62
  import { netConfig } from './conf/networkConnectionConf.js';
70
63
  import { rateLimitConfig } from './conf/rateLimitConfig.js';
71
64
  import { proxyConfig } from './conf/proxyConfig.js';
72
- import { createNotFoundHandler } from './handlers/NotFoundHandler.js';
65
+ import { ServerLifecycleManager } from './components/lifecycle/ServerLifecycleManager.js';
73
66
 
74
67
  /**
75
68
  * XyPrissJS - Fast and Secure Express Server
@@ -86,7 +79,6 @@ class XyPrissServer {
86
79
  }) {
87
80
  this.ready = false;
88
81
  this.initPromise = Promise.resolve();
89
- this.currentPort = 0; // Track the actual running port
90
82
  // Load configuration from file system if available
91
83
  const fileConfig = ConfigLoader.loadConfig();
92
84
  // Merge configurations: defaults < file config < user options
@@ -94,37 +86,34 @@ class XyPrissServer {
94
86
  // Initialize logger with user configuration
95
87
  this.logger = initializeLogger(this.options.logging);
96
88
  this.logger.startup("server", "Creating server...");
97
- // Create Express app immediately
98
- this.app = express();
89
+ // Create custom HTTP server app (Express-free)
90
+ this.app = new XyprissApp(this.logger);
99
91
  // Expose logger on app object for debugging
100
92
  this.app.logger = this.logger;
101
- // Add start method immediately so it's available right away
102
- this.addStartMethod();
103
- // Add basic middleware methods immediately for developer-friendly API
104
- this.addImmediateMiddlewareMethods();
105
- // Initialize ultra-fast processor first (using legacy config for backward compatibility)
106
- this.ultraFastProcessor = new UltraFastRequestProcessor({
107
- cpuWorkers: this.options.performance?.workers?.cpu || 4,
108
- ioWorkers: this.options.performance?.workers?.io || 2,
109
- maxCacheSize: this.options.cache?.maxSize || 1000,
110
- enablePrediction: true,
111
- enableCompression: true,
112
- maxConcurrentTasks: 100,
113
- });
93
+ // Initialize lifecycle manager
94
+ this.initializeLifecycleManager();
114
95
  // Add automatic JSON and URL-encoded body parsing (unless disabled)
115
96
  if (this.options.server?.autoParseJson !== false) {
116
97
  this.addBodyParsingMiddleware();
117
98
  }
118
99
  // Add safe JSON middleware to handle circular references
119
100
  this.addSafeJsonMiddleware();
120
- // Add ultra-fast middleware with type coercion
121
- this.app.use((req, res, next) => {
122
- const handler = this.ultraFastProcessor.middleware();
123
- handler(req, res, next, "", {}).catch(next);
124
- });
125
101
  // Initialize other components asynchronously
126
102
  this.initPromise = this.initializeComponentsAsync();
127
- this.logger.debug("server", "Ultra-fast Express server created with optimized request processing");
103
+ this.logger.debug("server", "XyPriss server created with optimized request processing");
104
+ }
105
+ /**
106
+ * Initialize the ServerLifecycleManager
107
+ */
108
+ initializeLifecycleManager() {
109
+ const dependencies = {
110
+ app: this.app,
111
+ options: this.options,
112
+ logger: this.logger,
113
+ };
114
+ this.lifecycleManager = new ServerLifecycleManager(dependencies);
115
+ // Add start method immediately so it's available right away
116
+ this.lifecycleManager.addStartMethod(() => this.waitForReady());
128
117
  }
129
118
  async initializeComponentsAsync() {
130
119
  // Initialize components in parallel for faster startup
@@ -134,6 +123,8 @@ class XyPrissServer {
134
123
  this.initializePlugins(),
135
124
  this.initializeCluster(),
136
125
  this.initializeFileWatcher(),
126
+ this.initializeWorkerPool(),
127
+ this.initializeSecurity(),
137
128
  ]);
138
129
  // Initialize components that depend on others
139
130
  await this.initializeDependentComponents();
@@ -141,8 +132,10 @@ class XyPrissServer {
141
132
  this.routeManager.addMethods();
142
133
  this.monitoringManager.addMonitoringEndpoints();
143
134
  this.addConsoleInterceptionMethods();
144
- // Add custom 404 handler as the last middleware
145
- this.app.use(this.notFoundHandler.handler);
135
+ // Note: 404 handler is now handled properly in HttpServer.handleRequest()
136
+ // after route matching fails, not as middleware
137
+ // Mark lifecycle manager as ready
138
+ this.lifecycleManager.markReady();
146
139
  this.ready = true;
147
140
  }
148
141
  async initializeCache() {
@@ -196,83 +189,71 @@ class XyPrissServer {
196
189
  clusterManager: this.clusterManager,
197
190
  });
198
191
  }
192
+ async initializeWorkerPool() {
193
+ // Only initialize worker pool if it's explicitly configured and enabled
194
+ if (this.options.workerPool?.enabled) {
195
+ this.workerPoolComponent = new WorkerPoolComponent({
196
+ workerPool: this.options.workerPool,
197
+ }, {
198
+ app: this.app,
199
+ serverOptions: this.options,
200
+ });
201
+ }
202
+ }
203
+ async initializeSecurity() {
204
+ // Initialize security middleware if security is configured and enabled
205
+ if (this.options.security?.enabled) {
206
+ this.logger.debug("server", "Initializing security middleware...");
207
+ // Create security middleware with the provided configuration
208
+ // The SecurityMiddleware class implements all SecurityConfig options
209
+ this.securityMiddleware = new SecurityMiddleware(this.options.security, this.logger);
210
+ // Apply the comprehensive security middleware stack
211
+ // This handles all security features based on configuration
212
+ this.app.use(this.securityMiddleware.getMiddleware());
213
+ this.logger.debug("server", "Security middleware initialized successfully");
214
+ this.logger.debug("server", `Security level: ${this.options.security.level || "enhanced"}`);
215
+ }
216
+ else {
217
+ this.logger.debug("server", "Security middleware disabled or not configured");
218
+ }
219
+ }
199
220
  async initializeDependentComponents() {
200
- // Initialize components that depend on others
201
- this.requestProcessor = new RequestProcessor({
202
- performanceProfiler: this.performanceManager.getPerformanceProfiler(),
203
- executionPredictor: this.performanceManager.getExecutionPredictor(),
204
- requestPreCompiler: this.performanceManager.getRequestPreCompiler(),
205
- pluginEngine: this.pluginManager.getPluginEngine(),
206
- cacheManager: this.cacheManager,
207
- });
208
- this.middlewareManager = new MiddlewareManager({
209
- server: this.options.server,
210
- security: this.options.security,
211
- performance: this.options.performance,
212
- middleware: this.options.middleware,
213
- }, {
214
- app: this.app,
215
- cache: this.cacheManager.getCache(),
216
- performanceProfiler: this.performanceManager.getPerformanceProfiler(),
217
- executionPredictor: this.performanceManager.getExecutionPredictor(),
218
- optimizationEnabled: this.performanceManager.isOptimizationEnabled(),
219
- optimizationStats: this.performanceManager.getOptimizationStats(),
220
- handleUltraFastPath: this.ultraFastProcessor
221
- .middleware()
222
- .bind(this.ultraFastProcessor),
223
- handleFastPath: this.requestProcessor.handleFastPath.bind(this.requestProcessor),
224
- handleStandardPath: this.requestProcessor.handleStandardPath.bind(this.requestProcessor),
225
- });
226
- // Initialize remaining components
227
- this.middlewareMethodsManager = new MiddlewareMethodsManager({
228
- app: this.app,
229
- middlewareManager: this.middlewareManager,
230
- });
231
- // Add middleware methods to the app (this will upgrade the immediate methods)
232
- this.middlewareMethodsManager.addMiddlewareMethods();
233
- // Process any middleware that was queued during immediate usage
234
- this.processQueuedMiddleware();
221
+ // Update lifecycle manager with initialized components
222
+ this.lifecycleManager.dependencies.cacheManager = this.cacheManager;
223
+ this.lifecycleManager.dependencies.performanceManager =
224
+ this.performanceManager;
225
+ this.lifecycleManager.dependencies.pluginManager = this.pluginManager;
226
+ this.lifecycleManager.dependencies.clusterManager = this.clusterManager;
227
+ this.lifecycleManager.dependencies.fileWatcherManager =
228
+ this.fileWatcherManager;
229
+ this.lifecycleManager.dependencies.workerPoolComponent =
230
+ this.workerPoolComponent;
231
+ // Use lifecycle manager to initialize dependent components
232
+ await this.lifecycleManager.initializeDependentComponents();
233
+ // Get the initialized components from lifecycle manager
234
+ this.routeManager = this.lifecycleManager.dependencies.routeManager;
235
+ this.monitoringManager =
236
+ this.lifecycleManager.dependencies.monitoringManager;
237
+ this.consoleInterceptor =
238
+ this.lifecycleManager.dependencies.consoleInterceptor;
239
+ this.notFoundHandler =
240
+ this.lifecycleManager.dependencies.notFoundHandler;
241
+ // FastRouteHandler is now available through lifecycle manager
242
+ // Access it via: this.lifecycleManager.dependencies.fastRouteHandler
235
243
  // Process any configs queued before middlewareManager was ready
236
244
  const appAny = this.app;
237
245
  if (appAny._immediateMiddlewareConfigs &&
238
246
  Array.isArray(appAny._immediateMiddlewareConfigs)) {
239
247
  appAny._immediateMiddlewareConfigs.forEach((config) => {
240
- try {
241
- this.middlewareManager.applyImmediateMiddleware(config);
242
- }
243
- catch (error) {
244
- this.logger.warn("middleware", `Failed to apply queued middleware config: ${error}`);
245
- }
246
248
  });
247
249
  appAny._immediateMiddlewareConfigs = [];
248
250
  }
249
- this.routeManager = new RouteManager({
250
- app: this.app,
251
- cacheManager: this.cacheManager,
252
- middlewareManager: this.middlewareManager,
253
- ultraFastOptimizer: this.performanceManager.getUltraFastOptimizer(),
254
- });
255
- this.monitoringManager = new MonitoringManager({
256
- monitoring: this.options.monitoring,
257
- }, {
258
- app: this.app,
259
- cacheManager: this.cacheManager,
260
- performanceManager: this.performanceManager,
261
- });
262
251
  // Initialize request management middleware
263
252
  this.initializeRequestManagement();
264
253
  // Initialize server plugins
265
254
  this.initializeServerPlugins();
266
255
  // Initialize network plugins automatically
267
256
  await this.initializeNetworkPlugins();
268
- this.redirectManager = new RedirectManager(this.logger);
269
- this.consoleInterceptor = new ConsoleInterceptor(this.logger, this.options.logging);
270
- // Initialize custom 404 handler
271
- this.notFoundHandler = createNotFoundHandler(this.options);
272
- if (this.options.logging?.consoleInterception?.enabled) {
273
- this.consoleInterceptor.start();
274
- this.logger.info("console", "Console interception system activated");
275
- }
276
257
  if (this.options.fileWatcher?.enabled) {
277
258
  this.fileWatcherManager.addFileWatcherMonitoringEndpoints("/XyPriss");
278
259
  }
@@ -283,6 +264,12 @@ class XyPrissServer {
283
264
  getApp() {
284
265
  return this.app;
285
266
  }
267
+ /**
268
+ * Get the security middleware instance
269
+ */
270
+ getSecurityMiddleware() {
271
+ return this.securityMiddleware;
272
+ }
286
273
  /**
287
274
  * Get the server plugin manager
288
275
  */
@@ -346,6 +333,7 @@ class XyPrissServer {
346
333
  }
347
334
  /**
348
335
  * Start server with error handling and port switching
336
+ * @deprecated - Now handled by ServerLifecycleManager
349
337
  */
350
338
  async startServerWithPortHandling(port, host, callback) {
351
339
  try {
@@ -374,7 +362,7 @@ class XyPrissServer {
374
362
  // Try to start server on the requested port
375
363
  return new Promise((resolve, reject) => {
376
364
  const server = this.app.listen(port, host, () => {
377
- this.currentPort = port; // Track the actual running port
365
+ this.lifecycleManager.updateState({ currentPort: port }); // Track the actual running port
378
366
  this.logger.info("server", `Server running on ${host}:${port}`);
379
367
  this.logger.debug("server", `State: ${this.ready ? "Ready" : "Initializing..."}`);
380
368
  if (callback)
@@ -418,16 +406,13 @@ class XyPrissServer {
418
406
  * Add automatic body parsing middleware for JSON and URL-encoded data
419
407
  */
420
408
  addBodyParsingMiddleware() {
421
- // JSON body parsing
422
- this.app.use(express.json({
423
- limit: this.options.server?.jsonLimit || "10mb",
424
- }));
425
- // URL-encoded body parsing
426
- this.app.use(express.urlencoded({
427
- extended: true,
428
- limit: this.options.server?.urlEncodedLimit || "10mb",
429
- }));
430
- this.logger.debug("middleware", "Automatic body parsing middleware added (JSON and URL-encoded)");
409
+ // Custom JSON body parsing middleware (replaces express.json)
410
+ this.app.use((_req, _res, next) => {
411
+ // Body parsing is already handled in CustomHttpServer
412
+ // This middleware is kept for compatibility
413
+ next();
414
+ });
415
+ this.logger.debug("middleware", "Custom body parsing middleware added (JSON and URL-encoded handled by CustomHttpServer)");
431
416
  }
432
417
  /**
433
418
  * Add safe JSON middleware to handle circular references
@@ -442,153 +427,6 @@ class XyPrissServer {
442
427
  this.app.use(createSafeJsonMiddleware(safeJsonOptions));
443
428
  this.logger.debug("middleware", "Safe JSON middleware added for circular reference handling");
444
429
  }
445
- /**
446
- * Apply middleware directly when MiddlewareManager is not available
447
- * Fallback method for immediate middleware application
448
- */
449
- applyMiddlewareDirectly(config) {
450
- // Apply rate limiting if configured
451
- if (config?.rateLimit && config.rateLimit !== true) {
452
- try {
453
- // const rateLimit = require("express-rate-limit");
454
- const rateLimitConfig = config.rateLimit;
455
- const limiter = rateLimit({
456
- windowMs: rateLimitConfig.windowMs || 15 * 60 * 1000,
457
- max: rateLimitConfig.max || 100,
458
- message: rateLimitConfig.message ||
459
- "Too many requests from this IP, please try again later.",
460
- standardHeaders: rateLimitConfig.standardHeaders || true,
461
- legacyHeaders: rateLimitConfig.legacyHeaders || false,
462
- handler: rateLimitConfig.onLimitReached,
463
- });
464
- this.app.use(limiter);
465
- }
466
- catch (error) { }
467
- }
468
- // Apply CORS if configured
469
- if (config?.cors && config.cors !== true) {
470
- try {
471
- const cors = require("cors");
472
- const corsConfig = config.cors;
473
- const corsOptions = {
474
- origin: corsConfig.origin || "*",
475
- methods: corsConfig.methods || [
476
- "GET",
477
- "POST",
478
- "PUT",
479
- "DELETE",
480
- "OPTIONS",
481
- ],
482
- allowedHeaders: corsConfig.allowedHeaders || [
483
- "Origin",
484
- "X-Requested-With",
485
- "Content-Type",
486
- "Accept",
487
- "Authorization",
488
- ],
489
- credentials: corsConfig.credentials !== false,
490
- };
491
- this.app.use(cors(corsOptions));
492
- }
493
- catch (error) { }
494
- }
495
- // Apply security headers if configured
496
- if (config?.security && config.security !== true) {
497
- try {
498
- const helmet = require("helmet");
499
- this.app.use(helmet());
500
- }
501
- catch (error) { }
502
- }
503
- // Apply compression if configured
504
- if (config?.compression && config.compression !== true) {
505
- try {
506
- const compression = require("compression");
507
- this.app.use(compression());
508
- }
509
- catch (error) {
510
- this.logger.error("server", "Failed to apply compression:", error);
511
- }
512
- }
513
- }
514
- /**
515
- * Add immediate middleware methods for developer-friendly API
516
- * These work immediately without waiting for async initialization
517
- */
518
- addImmediateMiddlewareMethods() {
519
- // Create a simple middleware queue for immediate use
520
- const middlewareQueue = [];
521
- // Add immediate middleware() method that implements MiddlewareAPIInterface
522
- this.app.middleware = (config) => {
523
- // Always queue or apply middleware depending on initialization state
524
- if (config) {
525
- if (this.middlewareManager) {
526
- // MiddlewareManager is ready, apply immediately
527
- // console.log("using builtin class");
528
- this.middlewareManager.applyImmediateMiddleware(config);
529
- }
530
- else {
531
- // console.log("using dirrect msg");
532
- // MiddlewareManager not ready, queue for later processing
533
- this.logger.debug("server", "MiddlewareManager not available, queuing for later processing");
534
- // Store config for later application
535
- if (!this.app._immediateMiddlewareConfigs) {
536
- this.app._immediateMiddlewareConfigs = [];
537
- }
538
- this.app._immediateMiddlewareConfigs.push(config);
539
- this.applyMiddlewareDirectly(config);
540
- }
541
- }
542
- return {
543
- register: (handler, options) => {
544
- // Store middleware for later registration
545
- middlewareQueue.push({ handler, options });
546
- // Also add it immediately to Express for basic functionality
547
- this.app.use(handler);
548
- return this; // Return for chaining
549
- },
550
- enable: (_id) => this,
551
- disable: (_id) => this,
552
- getInfo: () => [],
553
- getStats: () => ({}),
554
- unregister: (_id) => this,
555
- getConfig: () => config || {},
556
- clear: () => this,
557
- optimize: async () => this,
558
- };
559
- };
560
- // Store the queue for later processing
561
- this.app._middlewareQueue = middlewareQueue;
562
- // Add basic convenience methods
563
- this.app.enableSecurity = (_options) => {
564
- // Basic security headers immediately
565
- this.app.use((_req, res, next) => {
566
- res.setHeader("X-Content-Type-Options", "nosniff");
567
- res.setHeader("X-Frame-Options", "DENY");
568
- res.setHeader("X-XSS-Protection", "1; mode=block");
569
- next();
570
- });
571
- return this.app;
572
- };
573
- this.app.enableCors = (_options) => {
574
- // Basic CORS immediately
575
- this.app.use((_req, res, next) => {
576
- res.setHeader("Access-Control-Allow-Origin", "*");
577
- res.setHeader("Access-Control-Allow-Methods", "GET,POST,PUT,DELETE,OPTIONS");
578
- res.setHeader("Access-Control-Allow-Headers", "Content-Type,Authorization");
579
- next();
580
- });
581
- return this.app;
582
- };
583
- this.app.enableCompression = (_options) => {
584
- // Basic compression will be added when full middleware manager is ready
585
- return this.app;
586
- };
587
- this.app.enableRateLimit = (_options) => {
588
- // Basic rate limiting will be added when full middleware manager is ready
589
- return this.app;
590
- };
591
- }
592
430
  /**
593
431
  * Initialize request management middleware for timeouts, network quality, and concurrency control
594
432
  */
@@ -752,160 +590,6 @@ class XyPrissServer {
752
590
  this.logger.error("server", "Failed to initialize network plugins:", error.message);
753
591
  }
754
592
  }
755
- /**
756
- * Process middleware that was queued during immediate usage
757
- */
758
- processQueuedMiddleware() {
759
- const queue = this.app._middlewareQueue;
760
- if (queue && Array.isArray(queue)) {
761
- // Process each queued middleware with the full middleware manager
762
- queue.forEach(({ handler, options }) => {
763
- try {
764
- this.middlewareManager.register(handler, options);
765
- }
766
- catch (error) {
767
- this.logger.warn("middleware", `Failed to register queued middleware: ${error}`);
768
- }
769
- });
770
- // Clear the queue
771
- this.app._middlewareQueue = [];
772
- }
773
- }
774
- /**
775
- * Add start method to app with cluster support (full version)
776
- */
777
- addStartMethod() {
778
- const start = async (port, callback) => {
779
- // **INTERNAL HANDLING**: Wait for server to be ready before starting
780
- // This ensures developers don't need to handle async initialization timing
781
- if (!this.ready) {
782
- this.logger.debug("server", "Waiting for initialization to complete...");
783
- await this.waitForReady();
784
- this.logger.info("server", "Initialization complete, starting server...");
785
- }
786
- const serverPort = port || this.options.server?.port || 3000;
787
- const host = this.options.server?.host || "localhost";
788
- // If we're in main process and hot reloader is enabled, start it first
789
- if (this.fileWatcherManager.isInMainProcess() &&
790
- this.fileWatcherManager.getHotReloader()) {
791
- this.logger.debug("server", "Taking hot reload mode path");
792
- this.logger.startup("fileWatcher", "Starting with hot reload support...");
793
- try {
794
- // Start the hot reloader (which will spawn child process)
795
- await this.fileWatcherManager.getHotReloader().start();
796
- // Start file watcher in main process to monitor changes
797
- if (this.fileWatcherManager.getFileWatcher()) {
798
- await this.fileWatcherManager.startFileWatcherWithHotReload();
799
- }
800
- // Start the actual HTTP server in the main process too
801
- this.httpServer = await this.startServerWithPortHandling(serverPort, host, async () => {
802
- this.fileWatcherManager.setHttpServer(this.httpServer);
803
- if (callback)
804
- callback();
805
- });
806
- return this.httpServer;
807
- }
808
- catch (error) {
809
- this.logger.error("fileWatcher", "Hot reload startup failed:", error.message);
810
- // Fall through to regular startup
811
- }
812
- }
813
- // Regular startup (child process or hot reload disabled)
814
- // If cluster is enabled, use cluster manager
815
- if (this.clusterManager?.isClusterEnabled()) {
816
- // Double-check we're not in worker mode
817
- if (process.env.CLUSTER_MODE === "true" ||
818
- process.env.NODE_ENV === "worker") {
819
- this.logger.debug("server", "Worker mode detected - falling back to single process");
820
- // Fall through to single process mode
821
- }
822
- else {
823
- this.logger.debug("server", "Taking cluster mode path");
824
- // console.log("Starting cluster...");
825
- try {
826
- // Start cluster manager
827
- await this.clusterManager.startCluster();
828
- // Check if we're in master or worker process
829
- if (process.env.NODE_ENV !== "worker") {
830
- this.logger.startup("cluster", "Starting as cluster master process");
831
- // Setup cluster event handlers
832
- this.clusterManager.setupClusterEventHandlers();
833
- // Start HTTP server in master process
834
- this.httpServer =
835
- await this.startServerWithPortHandling(serverPort, host, async () => {
836
- // Set HTTP server reference for file watcher restarts
837
- this.fileWatcherManager.setHttpServer(this.httpServer);
838
- const clusterStats = await this.clusterManager.getClusterStats();
839
- this.logger.debug("cluster", `Cluster master started with ${clusterStats.workers?.total || 0} workers`);
840
- // Start file watcher if enabled
841
- if (this.fileWatcherManager.getFileWatcher()) {
842
- if (this.fileWatcherManager.isInMainProcess()) {
843
- // Main process: start with hot reload
844
- await this.fileWatcherManager.startFileWatcherWithHotReload();
845
- }
846
- else {
847
- // Child process: start regular file watcher
848
- await this.fileWatcherManager.startFileWatcher();
849
- }
850
- }
851
- if (callback)
852
- callback();
853
- });
854
- return this.httpServer;
855
- }
856
- else {
857
- // Worker process
858
- this.logger.startup("cluster", `Worker ${process.pid} started`);
859
- const httpServer = await this.startServerWithPortHandling(serverPort, host, () => {
860
- this.logger.info("cluster", `Worker ${process.pid} listening on ${host}:${serverPort}`);
861
- if (callback)
862
- callback();
863
- });
864
- return httpServer;
865
- }
866
- }
867
- catch (error) {
868
- this.logger.error("cluster", "Failed to start cluster:", error.message);
869
- // Fallback to single process
870
- this.logger.info("cluster", "Falling back to single process mode");
871
- }
872
- }
873
- }
874
- // Single process mode (default)
875
- this.logger.debug("server", "Taking single process mode path");
876
- this.httpServer = await this.startServerWithPortHandling(serverPort, host, async () => {
877
- // Set HTTP server reference for file watcher restarts
878
- this.fileWatcherManager.setHttpServer(this.httpServer);
879
- // Start file watcher if enabled
880
- if (this.fileWatcherManager.getFileWatcher()) {
881
- if (this.fileWatcherManager.isInMainProcess()) {
882
- // Main process: start with hot reload
883
- await this.fileWatcherManager.startFileWatcherWithHotReload();
884
- }
885
- else {
886
- // Child process: start regular file watcher
887
- await this.fileWatcherManager.startFileWatcher();
888
- }
889
- }
890
- if (callback)
891
- callback();
892
- });
893
- return this.httpServer;
894
- };
895
- this.app.start = start;
896
- this.app.waitForReady = () => this.waitForReady();
897
- // Add port management methods
898
- this.app.getPort = () => this.getPort();
899
- this.app.forceClosePort = (port) => this.forceClosePort(port);
900
- this.app.redirectFromPort = (fromPort, toPort, options) => this.redirectManager.redirectFromPort(fromPort, toPort, options);
901
- // Add advanced redirect management methods
902
- this.app.getRedirectInstance = (fromPort) => this.redirectManager.getRedirectInstance(fromPort);
903
- this.app.getAllRedirectInstances = () => this.redirectManager.getAllRedirectInstances();
904
- this.app.disconnectRedirect = (fromPort) => this.redirectManager.disconnectRedirect(fromPort);
905
- this.app.disconnectAllRedirects = () => this.redirectManager.disconnectAllRedirects();
906
- this.app.getRedirectStats = (fromPort) => this.redirectManager.getRedirectStats(fromPort);
907
- // Cluster methods are already added in constructor if cluster is enabled
908
- }
909
593
  // File watcher functionality now handled by FileWatcherManager component
910
594
  /**
911
595
  * Stop file watcher
@@ -1108,7 +792,7 @@ class XyPrissServer {
1108
792
  * @returns The current port the server is running on
1109
793
  */
1110
794
  getPort() {
1111
- return this.currentPort;
795
+ return this.lifecycleManager.getCurrentPort();
1112
796
  }
1113
797
  /**
1114
798
  * Attempt to forcefully close/free up the specified port
@@ -1119,8 +803,6 @@ class XyPrissServer {
1119
803
  return await new Port(port).forceClosePort();
1120
804
  }
1121
805
  async stop() {
1122
- // Cleanup ultra-fast processor
1123
- this.ultraFastProcessor.destroy();
1124
806
  // Stop other components
1125
807
  if (this.httpServer) {
1126
808
  await new Promise((resolve) => {