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
@@ -0,0 +1,500 @@
1
+ 'use strict';
2
+
3
+ var http = require('http');
4
+ var url = require('url');
5
+ var querystring = require('querystring');
6
+ var MiddlewareManager = require('../middleware/MiddlewareManager.js');
7
+ var NotFoundHandler = require('../handlers/NotFoundHandler.js');
8
+
9
+ /**
10
+ * XyPrisHttpServer - Express-free HTTP server implementation
11
+ *
12
+ * This module provides a XyPris HTTP server that replaces Express with
13
+ * direct Node.js HTTP handling for maximum performance and control.
14
+ * It maintains API compatibility while removing Express overhead.
15
+ */
16
+ /**
17
+ * XyPrissHttpServer - XPris HTTP server implementation
18
+ */
19
+ class XyPrissHttpServer {
20
+ constructor(logger) {
21
+ this.routes = [];
22
+ this.logger = logger;
23
+ this.middlewareManager = new MiddlewareManager.MiddlewareManager(logger);
24
+ this.notFoundHandler = new NotFoundHandler.NotFoundHandler();
25
+ this.server = http.createServer(this.handleRequest.bind(this));
26
+ this.setupDefaultErrorHandler();
27
+ this.logger.debug("server", "[XyPrissHttpServer] Created new HTTP server with middleware manager");
28
+ }
29
+ use(pathOrMiddleware, middleware) {
30
+ if (typeof pathOrMiddleware === "function") {
31
+ this.middlewareManager.use(pathOrMiddleware);
32
+ }
33
+ else if (middleware) {
34
+ // Path-specific middleware - wrap it to check path
35
+ const pathMiddleware = (req, res, next) => {
36
+ if (req.path.startsWith(pathOrMiddleware)) {
37
+ return middleware(req, res, next);
38
+ }
39
+ next?.();
40
+ };
41
+ this.middlewareManager.use(pathMiddleware, {
42
+ name: `path_middleware_${pathOrMiddleware}`,
43
+ description: `Path-specific middleware for ${pathOrMiddleware}`,
44
+ });
45
+ }
46
+ }
47
+ /**
48
+ * Add HTTP method routes
49
+ */
50
+ get(path, ...handlers) {
51
+ this.addRoute("GET", path, handlers);
52
+ }
53
+ post(path, ...handlers) {
54
+ this.addRoute("POST", path, handlers);
55
+ }
56
+ put(path, ...handlers) {
57
+ this.addRoute("PUT", path, handlers);
58
+ }
59
+ delete(path, ...handlers) {
60
+ this.addRoute("DELETE", path, handlers);
61
+ }
62
+ patch(path, ...handlers) {
63
+ this.addRoute("PATCH", path, handlers);
64
+ }
65
+ options(path, ...handlers) {
66
+ this.addRoute("OPTIONS", path, handlers);
67
+ }
68
+ head(path, ...handlers) {
69
+ this.addRoute("HEAD", path, handlers);
70
+ }
71
+ /**
72
+ * Add a route with middleware and handler
73
+ */
74
+ addRoute(method, path, handlers) {
75
+ const middleware = handlers.slice(0, -1);
76
+ const handler = handlers[handlers.length - 1];
77
+ this.routes.push({
78
+ method,
79
+ path,
80
+ handler,
81
+ middleware,
82
+ });
83
+ // Debug logging
84
+ this.logger.debug("server", `Route registered: ${method} ${path} (Total routes: ${this.routes.length})`);
85
+ }
86
+ /**
87
+ * Add a route with parameter names (for RegExp routes from router)
88
+ */
89
+ addRouteWithParams(method, path, paramNames, handlers) {
90
+ const middleware = handlers.slice(0, -1);
91
+ const handler = handlers[handlers.length - 1];
92
+ this.routes.push({
93
+ method,
94
+ path,
95
+ handler,
96
+ middleware,
97
+ paramNames,
98
+ });
99
+ // Debug logging
100
+ this.logger.debug("server", `Route registered with params: ${method} ${path} (params: ${paramNames.join(", ")}) (Total routes: ${this.routes.length})`);
101
+ }
102
+ /**
103
+ * Start the server
104
+ */
105
+ listen(port, host, callback) {
106
+ this.logger.debug("server", `listen() called: ${host}:${port}`);
107
+ return this.server.listen(port, host, callback);
108
+ }
109
+ /**
110
+ * Handle incoming HTTP requests
111
+ */
112
+ async handleRequest(req, res) {
113
+ this.logger.debug("server", `===== HANDLING REQUEST: ${req.method} ${req.url} =====`);
114
+ const XyPrisReq = this.enhanceRequest(req);
115
+ const XyPrisRes = this.enhanceResponse(res);
116
+ try {
117
+ // Parse request body for POST/PUT/PATCH requests
118
+ if (["POST", "PUT", "PATCH"].includes(XyPrisReq.method)) {
119
+ await this.parseBody(XyPrisReq);
120
+ }
121
+ // Execute middleware chain using MiddlewareManager
122
+ this.logger.debug("server", `Executing middleware chain...`);
123
+ const middlewareChainCompleted = await this.middlewareManager.execute(XyPrisReq, XyPrisRes);
124
+ if (!middlewareChainCompleted) {
125
+ this.logger.debug("server", `Middleware chain was stopped - not executing route handler`);
126
+ return; // Stop processing if middleware chain was stopped
127
+ }
128
+ this.logger.debug("server", `Middleware chain completed, looking for routes...`);
129
+ // Find and execute matching route
130
+ const route = this.findRoute(XyPrisReq.method, XyPrisReq.path, XyPrisReq);
131
+ this.logger.debug("server", `Route found:`, route ? `${route.method} ${route.path}` : "null");
132
+ if (route) {
133
+ // Execute route-specific middleware
134
+ for (const middleware of route.middleware) {
135
+ await this.executeMiddlewareFunction(middleware, XyPrisReq, XyPrisRes);
136
+ }
137
+ // Execute route handler
138
+ await route.handler(XyPrisReq, XyPrisRes);
139
+ }
140
+ else {
141
+ // No route found - 404
142
+ this.send404(XyPrisReq, XyPrisRes);
143
+ }
144
+ }
145
+ catch (error) {
146
+ this.handleError(error, XyPrisReq, XyPrisRes);
147
+ }
148
+ }
149
+ /**
150
+ * Enhance the request object with Express-like properties
151
+ */
152
+ enhanceRequest(req) {
153
+ const parsedUrl = url.parse(req.url || "", true);
154
+ const XyPrisReq = req;
155
+ XyPrisReq.params = {};
156
+ XyPrisReq.query = parsedUrl.query || {};
157
+ XyPrisReq.body = {};
158
+ XyPrisReq.path = parsedUrl.pathname || "/";
159
+ XyPrisReq.originalUrl = req.url || "";
160
+ XyPrisReq.baseUrl = "";
161
+ XyPrisReq.method = req.method || "GET";
162
+ // Express compatibility properties
163
+ XyPrisReq.ip = this.getClientIP(req);
164
+ XyPrisReq.ips = [XyPrisReq.ip];
165
+ XyPrisReq.cookies = this.parseCookies(req.headers.cookie || "");
166
+ XyPrisReq.app = {
167
+ get: (key) => {
168
+ // Simple app settings storage
169
+ const settings = {
170
+ "trust proxy": false,
171
+ "x-powered-by": false,
172
+ };
173
+ return settings[key];
174
+ },
175
+ set: (key, value) => {
176
+ // Simple app settings storage (could be enhanced)
177
+ this.logger.debug("server", `App setting: ${key} = ${value}`);
178
+ },
179
+ };
180
+ // Additional Express-like properties
181
+ XyPrisReq.protocol =
182
+ req.headers["x-forwarded-proto"] || "http";
183
+ XyPrisReq.secure = XyPrisReq.protocol === "https";
184
+ XyPrisReq.hostname = req.headers.host?.split(":")[0] || "localhost";
185
+ XyPrisReq.subdomains = XyPrisReq.hostname.split(".").slice(0, -2);
186
+ XyPrisReq.fresh = false; // Could be implemented based on cache headers
187
+ XyPrisReq.stale = true;
188
+ XyPrisReq.xhr = req.headers["x-requested-with"] === "XMLHttpRequest";
189
+ return XyPrisReq;
190
+ }
191
+ /**
192
+ * Get client IP address from request
193
+ */
194
+ getClientIP(req) {
195
+ // Check for forwarded headers first
196
+ const forwarded = req.headers["x-forwarded-for"];
197
+ if (forwarded) {
198
+ return forwarded.split(",")[0].trim();
199
+ }
200
+ const realIP = req.headers["x-real-ip"];
201
+ if (realIP) {
202
+ return realIP;
203
+ }
204
+ // Fallback to socket remote address
205
+ return req.socket.remoteAddress || "127.0.0.1";
206
+ }
207
+ /**
208
+ * Parse cookies from cookie header
209
+ */
210
+ parseCookies(cookieHeader) {
211
+ const cookies = {};
212
+ if (!cookieHeader) {
213
+ return cookies;
214
+ }
215
+ cookieHeader.split(";").forEach((cookie) => {
216
+ const [name, ...rest] = cookie.trim().split("=");
217
+ if (name && rest.length > 0) {
218
+ cookies[name] = rest.join("=");
219
+ }
220
+ });
221
+ return cookies;
222
+ }
223
+ /**
224
+ * Enhance the response object with Express-like methods
225
+ */
226
+ enhanceResponse(res) {
227
+ const XyPrisRes = res;
228
+ XyPrisRes.locals = {};
229
+ // JSON response method
230
+ XyPrisRes.json = (data) => {
231
+ XyPrisRes.setHeader("Content-Type", "application/json");
232
+ XyPrisRes.end(JSON.stringify(data));
233
+ };
234
+ // Send method
235
+ XyPrisRes.send = (data) => {
236
+ if (typeof data === "object") {
237
+ XyPrisRes.json(data);
238
+ }
239
+ else {
240
+ // XyPrisRes.setHeader("Content-Type", "text/plain");
241
+ XyPrisRes.end(String(data));
242
+ }
243
+ };
244
+ // Status method
245
+ XyPrisRes.status = (code) => {
246
+ XyPrisRes.statusCode = code;
247
+ return XyPrisRes;
248
+ };
249
+ // Enhanced setHeader that returns this
250
+ const originalSetHeader = XyPrisRes.setHeader.bind(XyPrisRes);
251
+ XyPrisRes.setHeader = (name, value) => {
252
+ originalSetHeader(name, value);
253
+ return XyPrisRes;
254
+ };
255
+ // Set method (Express-compatible)
256
+ XyPrisRes.set = (field, value) => {
257
+ if (typeof field === "string" && value !== undefined) {
258
+ XyPrisRes.setHeader(field, value);
259
+ }
260
+ else if (typeof field === "object") {
261
+ Object.entries(field).forEach(([key, val]) => {
262
+ XyPrisRes.setHeader(key, val);
263
+ });
264
+ }
265
+ return XyPrisRes;
266
+ };
267
+ // Redirect method
268
+ XyPrisRes.redirect = (statusOrUrl, url) => {
269
+ if (typeof statusOrUrl === "number" && url) {
270
+ XyPrisRes.statusCode = statusOrUrl;
271
+ XyPrisRes.setHeader("Location", url);
272
+ }
273
+ else {
274
+ XyPrisRes.statusCode = 302;
275
+ XyPrisRes.setHeader("Location", statusOrUrl);
276
+ }
277
+ XyPrisRes.end();
278
+ };
279
+ // Cookie methods (basic implementation)
280
+ XyPrisRes.cookie = (name, value, options = {}) => {
281
+ let cookieString = `${name}=${value}`;
282
+ if (options.maxAge)
283
+ cookieString += `; Max-Age=${options.maxAge}`;
284
+ if (options.httpOnly)
285
+ cookieString += "; HttpOnly";
286
+ if (options.secure)
287
+ cookieString += "; Secure";
288
+ if (options.sameSite)
289
+ cookieString += `; SameSite=${options.sameSite}`;
290
+ const existingCookies = XyPrisRes.getHeader("Set-Cookie") || [];
291
+ existingCookies.push(cookieString);
292
+ XyPrisRes.setHeader("Set-Cookie", existingCookies);
293
+ };
294
+ XyPrisRes.clearCookie = (name, options = {}) => {
295
+ XyPrisRes.cookie(name, "", { ...options, maxAge: 0 });
296
+ };
297
+ return XyPrisRes;
298
+ }
299
+ /**
300
+ * Parse request body
301
+ */
302
+ async parseBody(req) {
303
+ return new Promise((resolve, reject) => {
304
+ let body = "";
305
+ req.on("data", (chunk) => {
306
+ body += chunk.toString();
307
+ });
308
+ req.on("end", () => {
309
+ try {
310
+ const contentType = req.headers["content-type"] || "";
311
+ if (contentType.includes("application/json")) {
312
+ req.body = body ? JSON.parse(body) : {};
313
+ }
314
+ else if (contentType.includes("application/x-www-form-urlencoded")) {
315
+ req.body = querystring.parse(body);
316
+ }
317
+ else {
318
+ req.body = body;
319
+ }
320
+ resolve();
321
+ }
322
+ catch (error) {
323
+ reject(error);
324
+ }
325
+ });
326
+ req.on("error", reject);
327
+ });
328
+ }
329
+ /**
330
+ * Execute a single middleware function
331
+ */
332
+ async executeMiddlewareFunction(middleware, req, res) {
333
+ return new Promise((resolve, reject) => {
334
+ let nextCalled = false;
335
+ const next = (error) => {
336
+ if (nextCalled)
337
+ return;
338
+ nextCalled = true;
339
+ if (error) {
340
+ reject(error);
341
+ }
342
+ else {
343
+ resolve();
344
+ }
345
+ };
346
+ try {
347
+ const result = middleware(req, res, next);
348
+ if (result instanceof Promise) {
349
+ result.catch(reject);
350
+ }
351
+ }
352
+ catch (error) {
353
+ reject(error);
354
+ }
355
+ });
356
+ }
357
+ /**
358
+ * Find matching route
359
+ */
360
+ findRoute(method, path, req) {
361
+ this.logger.debug("server", `Looking for route: ${method} ${path} (${this.routes.length} routes available)`);
362
+ for (const route of this.routes) {
363
+ this.logger.debug("server", `Checking route: ${route.method} ${route.path} (type: ${typeof route.path})`);
364
+ if (route.method !== method)
365
+ continue;
366
+ if (typeof route.path === "string") {
367
+ const params = this.matchPath(route.path, path);
368
+ if (params !== null) {
369
+ // Add extracted parameters to request
370
+ req.params = { ...req.params, ...params };
371
+ this.logger.debug("server", `Route matched: ${method} ${route.path}`);
372
+ return route;
373
+ }
374
+ }
375
+ else if (route.path instanceof RegExp) {
376
+ this.logger.debug("server", `Testing RegExp: ${route.path} against ${path}`);
377
+ const match = route.path.exec(path);
378
+ this.logger.debug("server", `RegExp match result:`, match);
379
+ if (match) {
380
+ // Extract parameters from regex groups using parameter names if available
381
+ const params = {};
382
+ // If there are capture groups, add them as parameters
383
+ if (match.length > 1 && route.paramNames) {
384
+ // Use parameter names from route definition
385
+ for (let i = 1; i < match.length; i++) {
386
+ if (match[i] !== undefined && route.paramNames[i - 1]) {
387
+ const paramName = route.paramNames[i - 1];
388
+ params[paramName] = match[i];
389
+ this.logger.debug("server", `Extracted param: ${paramName} = ${match[i]}`);
390
+ }
391
+ }
392
+ }
393
+ else if (match.length > 1) {
394
+ // Fallback to generic parameter names if no paramNames available
395
+ if (match[1] !== undefined) {
396
+ params["*"] = match[1];
397
+ }
398
+ // Add other captured groups as numbered parameters
399
+ for (let i = 2; i < match.length; i++) {
400
+ if (match[i] !== undefined) {
401
+ params[`param${i - 1}`] = match[i];
402
+ }
403
+ }
404
+ }
405
+ // Add extracted parameters to request
406
+ req.params = { ...req.params, ...params };
407
+ this.logger.debug("routing", `Route matched (regex): ${method} ${route.path} with params: ${JSON.stringify(params)}`);
408
+ return route;
409
+ }
410
+ }
411
+ }
412
+ this.logger.debug("server", `No route found for: ${method} ${path}`);
413
+ return null;
414
+ }
415
+ /**
416
+ * Match path with parameters
417
+ */
418
+ matchPath(routePath, requestPath) {
419
+ // Simple path matching - exact match
420
+ if (routePath === requestPath)
421
+ return {};
422
+ this.logger.debug("server", "[HttpServer] matchPath:", routePath, requestPath);
423
+ // Handle parameters (:param)
424
+ const routeParts = routePath.split("/");
425
+ const requestParts = requestPath.split("/");
426
+ if (routeParts.length !== requestParts.length)
427
+ return null;
428
+ const params = {};
429
+ for (let i = 0; i < routeParts.length; i++) {
430
+ const routePart = routeParts[i];
431
+ const requestPart = requestParts[i];
432
+ if (routePart.startsWith(":")) {
433
+ this.logger.debug("server", `[HttpServer] matchPath: Found parameter ${routePart} with value ${requestPart}`);
434
+ // Parameter - extract value
435
+ const paramName = routePart.substring(1);
436
+ params[paramName] = requestPart;
437
+ }
438
+ else if (routePart !== requestPart) {
439
+ return null;
440
+ }
441
+ }
442
+ return params;
443
+ }
444
+ /**
445
+ * Send 404 response using NotFoundHandler
446
+ */
447
+ send404(req, res) {
448
+ // Use the NotFoundHandler to send a beautiful 404 page
449
+ this.notFoundHandler.handler(req, res);
450
+ }
451
+ /**
452
+ * Handle errors
453
+ */
454
+ handleError(error, req, res) {
455
+ this.logger.error("server", `Request error: ${error.message}`);
456
+ if (this.errorHandler) {
457
+ this.errorHandler(error, req, res, () => { });
458
+ }
459
+ else {
460
+ if (!res.headersSent) {
461
+ res.status(500).json({ error: "Internal Server Error" });
462
+ }
463
+ }
464
+ }
465
+ /**
466
+ * Set error handler
467
+ */
468
+ setErrorHandler(handler) {
469
+ this.errorHandler = handler;
470
+ }
471
+ /**
472
+ * Setup default error handler
473
+ */
474
+ setupDefaultErrorHandler() {
475
+ this.server.on("error", (error) => {
476
+ this.logger.error("server", `Server error: ${error.message}`);
477
+ });
478
+ }
479
+ /**
480
+ * Get the underlying HTTP server
481
+ */
482
+ getServer() {
483
+ return this.server;
484
+ }
485
+ /**
486
+ * Close the server
487
+ */
488
+ close(callback) {
489
+ this.server.close(callback);
490
+ }
491
+ /**
492
+ * Get server address
493
+ */
494
+ address() {
495
+ return this.server.address();
496
+ }
497
+ }
498
+
499
+ exports.XyPrissHttpServer = XyPrissHttpServer;
500
+ //# sourceMappingURL=HttpServer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HttpServer.js","sources":["../../../../../src/server/core/HttpServer.ts"],"sourcesContent":[null],"names":["MiddlewareManager","NotFoundHandler","createHttpServer","parseUrl","parseQuery"],"mappings":"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"}