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