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