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.
- package/README.md +232 -254
- package/dist/cjs/mods/security/src/algorithms/hash-algorithms.js +10 -0
- package/dist/cjs/mods/security/src/algorithms/hash-algorithms.js.map +1 -1
- package/dist/cjs/mods/security/src/components/cache/cacheSys.utils.js +10 -0
- package/dist/cjs/mods/security/src/components/cache/cacheSys.utils.js.map +1 -1
- package/dist/cjs/mods/security/src/components/cache/index.js +10 -74
- package/dist/cjs/mods/security/src/components/cache/index.js.map +1 -1
- package/dist/cjs/mods/security/src/components/fortified-function/index.js +9 -0
- package/dist/cjs/mods/security/src/components/fortified-function/index.js.map +1 -1
- package/dist/cjs/mods/security/src/components/fortified-function/security/security-handler.js +10 -0
- package/dist/cjs/mods/security/src/components/fortified-function/security/security-handler.js.map +1 -1
- package/dist/cjs/mods/security/src/core/crypto.js +14 -0
- package/dist/cjs/mods/security/src/core/crypto.js.map +1 -1
- package/dist/cjs/mods/security/src/index.js +10 -4
- package/dist/cjs/mods/security/src/index.js.map +1 -1
- package/dist/cjs/shared/logger/Logger.js +374 -29
- package/dist/cjs/shared/logger/Logger.js.map +1 -1
- package/dist/cjs/src/cluster/bun-cluster-manager.js +91 -1
- package/dist/cjs/src/cluster/bun-cluster-manager.js.map +1 -1
- package/dist/cjs/src/cluster/cluster-manager.js +15 -3
- package/dist/cjs/src/cluster/cluster-manager.js.map +1 -1
- package/dist/cjs/src/cluster/modules/AutoScaler.js +4 -4
- package/dist/cjs/src/cluster/modules/AutoScaler.js.map +1 -1
- package/dist/cjs/src/cluster/modules/CrossPlatformMemory.js +2 -2
- package/dist/cjs/src/cluster/modules/CrossPlatformMemory.js.map +1 -1
- package/dist/cjs/src/cluster/modules/EventLoopMonitor.js +270 -0
- package/dist/cjs/src/cluster/modules/EventLoopMonitor.js.map +1 -0
- package/dist/cjs/src/cluster/modules/GCStatsTracker.js +200 -0
- package/dist/cjs/src/cluster/modules/GCStatsTracker.js.map +1 -0
- package/dist/cjs/src/cluster/modules/HeapStatsCollector.js +111 -0
- package/dist/cjs/src/cluster/modules/HeapStatsCollector.js.map +1 -0
- package/dist/cjs/src/cluster/modules/NetworkTracker.js +162 -0
- package/dist/cjs/src/cluster/modules/NetworkTracker.js.map +1 -0
- package/dist/cjs/src/cluster/modules/ThroughputCalculator.js +186 -0
- package/dist/cjs/src/cluster/modules/ThroughputCalculator.js.map +1 -0
- package/dist/cjs/src/cluster/modules/WorkerManager.js +14 -15
- package/dist/cjs/src/cluster/modules/WorkerManager.js.map +1 -1
- package/dist/cjs/src/cluster/modules/{LoadBalancer.js → strategy/LoadBalancer.js} +1 -1
- package/dist/cjs/src/cluster/modules/strategy/LoadBalancer.js.map +1 -0
- package/dist/cjs/src/index.js +55 -61
- package/dist/cjs/src/index.js.map +1 -1
- package/dist/cjs/src/middleware/XyPrissMiddlewareAPI.js +281 -0
- package/dist/cjs/src/middleware/XyPrissMiddlewareAPI.js.map +1 -0
- package/dist/cjs/src/middleware/built-in/index.js +325 -0
- package/dist/cjs/src/middleware/built-in/index.js.map +1 -0
- package/dist/cjs/src/middleware/built-in/sqlInjection.js +335 -0
- package/dist/cjs/src/middleware/built-in/sqlInjection.js.map +1 -0
- package/dist/cjs/src/middleware/safe-json-middleware.js +1 -1
- package/dist/cjs/src/middleware/safe-json-middleware.js.map +1 -1
- package/dist/cjs/src/middleware/security-middleware.js +447 -332
- package/dist/cjs/src/middleware/security-middleware.js.map +1 -1
- package/dist/cjs/src/plugins/modules/builtin/ResponseTimePlugin.js +1 -1
- package/dist/cjs/src/plugins/modules/builtin/ResponseTimePlugin.js.map +1 -1
- package/dist/cjs/src/plugins/modules/index.js +9 -3
- package/dist/cjs/src/plugins/modules/index.js.map +1 -1
- package/dist/cjs/src/quick-start.js +0 -4
- package/dist/cjs/src/quick-start.js.map +1 -1
- package/dist/cjs/src/server/FastServer.js +94 -412
- package/dist/cjs/src/server/FastServer.js.map +1 -1
- package/dist/cjs/src/server/ServerFactory.js +69 -64
- package/dist/cjs/src/server/ServerFactory.js.map +1 -1
- package/dist/cjs/src/server/components/fastapi/ClusterManagerComponent.js +31 -5
- package/dist/cjs/src/server/components/fastapi/ClusterManagerComponent.js.map +1 -1
- package/dist/cjs/src/server/components/fastapi/PerformanceManager.js +1 -1
- package/dist/cjs/src/server/components/fastapi/PerformanceManager.js.map +1 -1
- package/dist/cjs/src/server/components/fastapi/RouteManager.js +0 -82
- package/dist/cjs/src/server/components/fastapi/RouteManager.js.map +1 -1
- package/dist/cjs/src/server/components/fastapi/WorkerPoolComponent.js +206 -0
- package/dist/cjs/src/server/components/fastapi/WorkerPoolComponent.js.map +1 -0
- package/dist/cjs/src/server/components/fastapi/console/ConsoleInterceptor.js +3 -28
- package/dist/cjs/src/server/components/fastapi/console/ConsoleInterceptor.js.map +1 -1
- package/dist/cjs/src/server/components/fastapi/modules/UFRP/WorkerPoolManager.js +265 -0
- package/dist/cjs/src/server/components/fastapi/modules/UFRP/WorkerPoolManager.js.map +1 -0
- package/dist/cjs/src/server/components/fastapi/modules/UFRP/workers/Logger.js +236 -0
- package/dist/cjs/src/server/components/fastapi/modules/UFRP/workers/cpu-tasks.js +294 -0
- package/dist/cjs/src/server/components/fastapi/modules/UFRP/workers/enhanced-cpu-worker.js +433 -0
- package/dist/cjs/src/server/components/fastapi/modules/UFRP/workers/io-worker.js +1615 -0
- package/dist/cjs/src/server/components/lifecycle/ServerLifecycleManager.js +503 -0
- package/dist/cjs/src/server/components/lifecycle/ServerLifecycleManager.js.map +1 -0
- package/dist/cjs/src/server/const/default.js +23 -17
- package/dist/cjs/src/server/const/default.js.map +1 -1
- package/dist/cjs/src/server/core/HttpServer.js +500 -0
- package/dist/cjs/src/server/core/HttpServer.js.map +1 -0
- package/dist/cjs/src/server/core/XyprissApp.js +679 -0
- package/dist/cjs/src/server/core/XyprissApp.js.map +1 -0
- package/dist/cjs/src/server/handlers/NotFoundHandler.js +1 -1
- package/dist/cjs/src/server/handlers/NotFoundHandler.js.map +1 -1
- package/dist/cjs/src/server/middleware/MiddlewareManager.js +191 -0
- package/dist/cjs/src/server/middleware/MiddlewareManager.js.map +1 -0
- package/dist/cjs/src/server/routing/Router.js +341 -0
- package/dist/cjs/src/server/routing/Router.js.map +1 -0
- package/dist/cjs/src/server/utils/PortManager.js +1 -0
- package/dist/cjs/src/server/utils/PortManager.js.map +1 -1
- package/dist/cjs/src/server/utils/forceClosePort.js +294 -88
- package/dist/cjs/src/server/utils/forceClosePort.js.map +1 -1
- package/dist/esm/mods/security/src/algorithms/hash-algorithms.js +10 -0
- package/dist/esm/mods/security/src/algorithms/hash-algorithms.js.map +1 -1
- package/dist/esm/mods/security/src/components/cache/cacheSys.utils.js +10 -0
- package/dist/esm/mods/security/src/components/cache/cacheSys.utils.js.map +1 -1
- package/dist/esm/mods/security/src/components/cache/index.js +11 -72
- package/dist/esm/mods/security/src/components/cache/index.js.map +1 -1
- package/dist/esm/mods/security/src/components/fortified-function/index.js +9 -0
- package/dist/esm/mods/security/src/components/fortified-function/index.js.map +1 -1
- package/dist/esm/mods/security/src/components/fortified-function/security/security-handler.js +10 -0
- package/dist/esm/mods/security/src/components/fortified-function/security/security-handler.js.map +1 -1
- package/dist/esm/mods/security/src/core/crypto.js +14 -0
- package/dist/esm/mods/security/src/core/crypto.js.map +1 -1
- package/dist/esm/mods/security/src/index.js +11 -2
- package/dist/esm/mods/security/src/index.js.map +1 -1
- package/dist/esm/shared/logger/Logger.js +374 -29
- package/dist/esm/shared/logger/Logger.js.map +1 -1
- package/dist/esm/src/cluster/bun-cluster-manager.js +91 -1
- package/dist/esm/src/cluster/bun-cluster-manager.js.map +1 -1
- package/dist/esm/src/cluster/cluster-manager.js +15 -3
- package/dist/esm/src/cluster/cluster-manager.js.map +1 -1
- package/dist/esm/src/cluster/modules/AutoScaler.js +4 -4
- package/dist/esm/src/cluster/modules/AutoScaler.js.map +1 -1
- package/dist/esm/src/cluster/modules/CrossPlatformMemory.js +2 -2
- package/dist/esm/src/cluster/modules/CrossPlatformMemory.js.map +1 -1
- package/dist/esm/src/cluster/modules/EventLoopMonitor.js +268 -0
- package/dist/esm/src/cluster/modules/EventLoopMonitor.js.map +1 -0
- package/dist/esm/src/cluster/modules/GCStatsTracker.js +198 -0
- package/dist/esm/src/cluster/modules/GCStatsTracker.js.map +1 -0
- package/dist/esm/src/cluster/modules/HeapStatsCollector.js +109 -0
- package/dist/esm/src/cluster/modules/HeapStatsCollector.js.map +1 -0
- package/dist/esm/src/cluster/modules/NetworkTracker.js +160 -0
- package/dist/esm/src/cluster/modules/NetworkTracker.js.map +1 -0
- package/dist/esm/src/cluster/modules/ThroughputCalculator.js +184 -0
- package/dist/esm/src/cluster/modules/ThroughputCalculator.js.map +1 -0
- package/dist/esm/src/cluster/modules/WorkerManager.js +14 -14
- package/dist/esm/src/cluster/modules/WorkerManager.js.map +1 -1
- package/dist/esm/src/cluster/modules/{LoadBalancer.js → strategy/LoadBalancer.js} +1 -1
- package/dist/esm/src/cluster/modules/strategy/LoadBalancer.js.map +1 -0
- package/dist/esm/src/index.js +41 -11
- package/dist/esm/src/index.js.map +1 -1
- package/dist/esm/src/middleware/XyPrissMiddlewareAPI.js +279 -0
- package/dist/esm/src/middleware/XyPrissMiddlewareAPI.js.map +1 -0
- package/dist/esm/src/middleware/built-in/index.js +323 -0
- package/dist/esm/src/middleware/built-in/index.js.map +1 -0
- package/dist/esm/src/middleware/built-in/sqlInjection.js +333 -0
- package/dist/esm/src/middleware/built-in/sqlInjection.js.map +1 -0
- package/dist/esm/src/middleware/safe-json-middleware.js +1 -1
- package/dist/esm/src/middleware/safe-json-middleware.js.map +1 -1
- package/dist/esm/src/middleware/security-middleware.js +447 -332
- package/dist/esm/src/middleware/security-middleware.js.map +1 -1
- package/dist/esm/src/plugins/modules/builtin/ResponseTimePlugin.js +1 -1
- package/dist/esm/src/plugins/modules/builtin/ResponseTimePlugin.js.map +1 -1
- package/dist/esm/src/plugins/modules/index.js +9 -3
- package/dist/esm/src/plugins/modules/index.js.map +1 -1
- package/dist/esm/src/quick-start.js +0 -4
- package/dist/esm/src/quick-start.js.map +1 -1
- package/dist/esm/src/server/FastServer.js +94 -412
- package/dist/esm/src/server/FastServer.js.map +1 -1
- package/dist/esm/src/server/ServerFactory.js +70 -61
- package/dist/esm/src/server/ServerFactory.js.map +1 -1
- package/dist/esm/src/server/components/fastapi/ClusterManagerComponent.js +31 -5
- package/dist/esm/src/server/components/fastapi/ClusterManagerComponent.js.map +1 -1
- package/dist/esm/src/server/components/fastapi/PerformanceManager.js +1 -1
- package/dist/esm/src/server/components/fastapi/PerformanceManager.js.map +1 -1
- package/dist/esm/src/server/components/fastapi/RouteManager.js +0 -82
- package/dist/esm/src/server/components/fastapi/RouteManager.js.map +1 -1
- package/dist/esm/src/server/components/fastapi/WorkerPoolComponent.js +204 -0
- package/dist/esm/src/server/components/fastapi/WorkerPoolComponent.js.map +1 -0
- package/dist/esm/src/server/components/fastapi/console/ConsoleInterceptor.js +2 -27
- package/dist/esm/src/server/components/fastapi/console/ConsoleInterceptor.js.map +1 -1
- package/dist/esm/src/server/components/fastapi/modules/UFRP/WorkerPoolManager.js +263 -0
- package/dist/esm/src/server/components/fastapi/modules/UFRP/WorkerPoolManager.js.map +1 -0
- package/dist/esm/src/server/components/fastapi/modules/UFRP/workers/Logger.js +236 -0
- package/dist/esm/src/server/components/fastapi/modules/UFRP/workers/cpu-tasks.js +294 -0
- package/dist/esm/src/server/components/fastapi/modules/UFRP/workers/enhanced-cpu-worker.js +433 -0
- package/dist/esm/src/server/components/fastapi/modules/UFRP/workers/io-worker.js +1615 -0
- package/dist/esm/src/server/components/lifecycle/ServerLifecycleManager.js +501 -0
- package/dist/esm/src/server/components/lifecycle/ServerLifecycleManager.js.map +1 -0
- package/dist/esm/src/server/const/default.js +23 -17
- package/dist/esm/src/server/const/default.js.map +1 -1
- package/dist/esm/src/server/core/HttpServer.js +498 -0
- package/dist/esm/src/server/core/HttpServer.js.map +1 -0
- package/dist/esm/src/server/core/XyprissApp.js +677 -0
- package/dist/esm/src/server/core/XyprissApp.js.map +1 -0
- package/dist/esm/src/server/handlers/NotFoundHandler.js +1 -1
- package/dist/esm/src/server/handlers/NotFoundHandler.js.map +1 -1
- package/dist/esm/src/server/middleware/MiddlewareManager.js +189 -0
- package/dist/esm/src/server/middleware/MiddlewareManager.js.map +1 -0
- package/dist/esm/src/server/routing/Router.js +339 -0
- package/dist/esm/src/server/routing/Router.js.map +1 -0
- package/dist/esm/src/server/utils/PortManager.js +1 -0
- package/dist/esm/src/server/utils/PortManager.js.map +1 -1
- package/dist/esm/src/server/utils/forceClosePort.js +294 -88
- package/dist/esm/src/server/utils/forceClosePort.js.map +1 -1
- package/dist/index.d.ts +3363 -5311
- package/package.json +39 -28
- package/dist/cjs/src/cluster/index.js +0 -361
- package/dist/cjs/src/cluster/index.js.map +0 -1
- package/dist/cjs/src/cluster/modules/ClusterFactory.js +0 -539
- package/dist/cjs/src/cluster/modules/ClusterFactory.js.map +0 -1
- package/dist/cjs/src/cluster/modules/LoadBalancer.js.map +0 -1
- package/dist/cjs/src/server/components/fastapi/UltraFastRequestProcessor.js +0 -668
- package/dist/cjs/src/server/components/fastapi/UltraFastRequestProcessor.js.map +0 -1
- package/dist/cjs/src/server/components/fastapi/middlewares/MiddlewareAPI.js +0 -347
- package/dist/cjs/src/server/components/fastapi/middlewares/MiddlewareAPI.js.map +0 -1
- package/dist/cjs/src/server/components/fastapi/middlewares/MiddlewareMethodsManager.js +0 -204
- package/dist/cjs/src/server/components/fastapi/middlewares/MiddlewareMethodsManager.js.map +0 -1
- package/dist/cjs/src/server/components/fastapi/middlewares/middlewareManager.js +0 -953
- package/dist/cjs/src/server/components/fastapi/middlewares/middlewareManager.js.map +0 -1
- package/dist/cjs/src/server/components/fastapi/modules/UFRP/WorkerPool.js +0 -56
- package/dist/cjs/src/server/components/fastapi/modules/UFRP/WorkerPool.js.map +0 -1
- package/dist/esm/src/cluster/index.js +0 -339
- package/dist/esm/src/cluster/index.js.map +0 -1
- package/dist/esm/src/cluster/modules/ClusterFactory.js +0 -511
- package/dist/esm/src/cluster/modules/ClusterFactory.js.map +0 -1
- package/dist/esm/src/cluster/modules/LoadBalancer.js.map +0 -1
- package/dist/esm/src/server/components/fastapi/UltraFastRequestProcessor.js +0 -647
- package/dist/esm/src/server/components/fastapi/UltraFastRequestProcessor.js.map +0 -1
- package/dist/esm/src/server/components/fastapi/middlewares/MiddlewareAPI.js +0 -345
- package/dist/esm/src/server/components/fastapi/middlewares/MiddlewareAPI.js.map +0 -1
- package/dist/esm/src/server/components/fastapi/middlewares/MiddlewareMethodsManager.js +0 -202
- package/dist/esm/src/server/components/fastapi/middlewares/MiddlewareMethodsManager.js.map +0 -1
- package/dist/esm/src/server/components/fastapi/middlewares/middlewareManager.js +0 -951
- package/dist/esm/src/server/components/fastapi/middlewares/middlewareManager.js.map +0 -1
- package/dist/esm/src/server/components/fastapi/modules/UFRP/WorkerPool.js +0 -54
- package/dist/esm/src/server/components/fastapi/modules/UFRP/WorkerPool.js.map +0 -1
|
@@ -0,0 +1,503 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var PortManager = require('../../utils/PortManager.js');
|
|
4
|
+
var RequestProcessor = require('../fastapi/RequestProcessor.js');
|
|
5
|
+
var RouteManager = require('../fastapi/RouteManager.js');
|
|
6
|
+
var MonitoringManager = require('../fastapi/MonitoringManager.js');
|
|
7
|
+
var RedirectManager = require('../fastapi/RedirectManager.js');
|
|
8
|
+
var ConsoleInterceptor = require('../fastapi/console/ConsoleInterceptor.js');
|
|
9
|
+
var NotFoundHandler = require('../../handlers/NotFoundHandler.js');
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* ServerLifecycleManager - Modular server lifecycle management
|
|
13
|
+
*
|
|
14
|
+
* This module handles server initialization, startup, and lifecycle management
|
|
15
|
+
* in a modular way, extracted from the main FastServer class for better
|
|
16
|
+
* separation of concerns and maintainability.
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* ServerLifecycleManager - Handles server initialization and startup lifecycle
|
|
20
|
+
*/
|
|
21
|
+
class ServerLifecycleManager {
|
|
22
|
+
constructor(dependencies) {
|
|
23
|
+
this.dependencies = dependencies;
|
|
24
|
+
this.state = {
|
|
25
|
+
ready: false,
|
|
26
|
+
currentPort: 0,
|
|
27
|
+
initPromise: Promise.resolve(),
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Initialize all dependent components
|
|
32
|
+
*/
|
|
33
|
+
async initializeDependentComponents() {
|
|
34
|
+
const { app, options, logger } = this.dependencies;
|
|
35
|
+
// Ensure required components are available
|
|
36
|
+
if (!this.dependencies.cacheManager ||
|
|
37
|
+
!this.dependencies.performanceManager ||
|
|
38
|
+
!this.dependencies.pluginManager) {
|
|
39
|
+
throw new Error("Required components (cacheManager, performanceManager, pluginManager) must be initialized before dependent components");
|
|
40
|
+
}
|
|
41
|
+
logger.debug("lifecycle", "Initializing dependent components...");
|
|
42
|
+
// Initialize components that depend on others
|
|
43
|
+
this.dependencies.requestProcessor = new RequestProcessor.RequestProcessor({
|
|
44
|
+
performanceProfiler: this.dependencies.performanceManager.getPerformanceProfiler(),
|
|
45
|
+
executionPredictor: this.dependencies.performanceManager.getExecutionPredictor(),
|
|
46
|
+
requestPreCompiler: this.dependencies.performanceManager.getRequestPreCompiler(),
|
|
47
|
+
pluginEngine: this.dependencies.pluginManager.getPluginEngine(),
|
|
48
|
+
cacheManager: this.dependencies.cacheManager,
|
|
49
|
+
});
|
|
50
|
+
this.dependencies.routeManager = new RouteManager.RouteManager({
|
|
51
|
+
app,
|
|
52
|
+
cacheManager: this.dependencies.cacheManager,
|
|
53
|
+
middlewareManager: this.dependencies.middlewareManager,
|
|
54
|
+
ultraFastOptimizer: this.dependencies.performanceManager.getUltraFastOptimizer(),
|
|
55
|
+
});
|
|
56
|
+
this.dependencies.monitoringManager = new MonitoringManager.MonitoringManager({
|
|
57
|
+
monitoring: options.monitoring,
|
|
58
|
+
}, {
|
|
59
|
+
app,
|
|
60
|
+
cacheManager: this.dependencies.cacheManager,
|
|
61
|
+
performanceManager: this.dependencies.performanceManager,
|
|
62
|
+
});
|
|
63
|
+
// Initialize other components
|
|
64
|
+
this.dependencies.redirectManager = new RedirectManager.RedirectManager(logger);
|
|
65
|
+
this.dependencies.consoleInterceptor = new ConsoleInterceptor.ConsoleInterceptor(logger, options.logging);
|
|
66
|
+
this.dependencies.notFoundHandler = NotFoundHandler.createNotFoundHandler(options);
|
|
67
|
+
if (options.logging?.consoleInterception?.enabled) {
|
|
68
|
+
this.dependencies.consoleInterceptor.start();
|
|
69
|
+
logger.info("console", "Console interception system activated");
|
|
70
|
+
}
|
|
71
|
+
logger.debug("lifecycle", "Dependent components initialized successfully");
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Start server with error handling and port switching
|
|
75
|
+
*/
|
|
76
|
+
async startServerWithPortHandling(port, host, callback) {
|
|
77
|
+
const { app, options, logger } = this.dependencies;
|
|
78
|
+
try {
|
|
79
|
+
// Check port availability first when auto port switch is enabled
|
|
80
|
+
if (options.server?.autoPortSwitch?.enabled) {
|
|
81
|
+
const portManager = new PortManager.PortManager(port, options.server?.autoPortSwitch);
|
|
82
|
+
const result = await portManager.findAvailablePort(host);
|
|
83
|
+
if (!result.success) {
|
|
84
|
+
throw new Error(`Failed to find an available port after ${options.server?.autoPortSwitch?.maxAttempts || 10} attempts`);
|
|
85
|
+
}
|
|
86
|
+
if (result.switched) {
|
|
87
|
+
logger.portSwitching("server", `🔄 Port ${port} was in use, switched to port ${result.port}`);
|
|
88
|
+
port = result.port; // Use the switched port
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
// When auto port switch is disabled, check if port is available first
|
|
93
|
+
const portManager = new PortManager.PortManager(port, { enabled: false });
|
|
94
|
+
const result = await portManager.findAvailablePort(host);
|
|
95
|
+
if (!result.success) {
|
|
96
|
+
throw new Error(`Failed to start server. Port ${port} is already in use. ` +
|
|
97
|
+
`Enable autoPortSwitch in server config to automatically find an available port.`);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// Try to start server on the requested port
|
|
101
|
+
return new Promise((resolve, reject) => {
|
|
102
|
+
logger.debug("server", `ServerLifecycleManager: Starting server on ${host}:${port} using app.listen()`);
|
|
103
|
+
const server = app.listen(port, host, () => {
|
|
104
|
+
this.state.currentPort = port; // Track the actual running port
|
|
105
|
+
logger.info("server", `Server running on ${host}:${port}`);
|
|
106
|
+
logger.debug("server", `State: ${this.state.ready ? "Ready" : "Initializing..."}`);
|
|
107
|
+
if (callback)
|
|
108
|
+
callback();
|
|
109
|
+
resolve(server);
|
|
110
|
+
});
|
|
111
|
+
server.on("error", async (error) => {
|
|
112
|
+
logger.debug("server", `Server error on port ${port}: ${error.code} - ${error.message}`);
|
|
113
|
+
if (error.code === "EADDRINUSE") {
|
|
114
|
+
// Port is in use, try auto-switching if enabled
|
|
115
|
+
if (options.server?.autoPortSwitch?.enabled) {
|
|
116
|
+
logger.info("server", `🔄 Port ${port} is in use, attempting auto port switch...`);
|
|
117
|
+
try {
|
|
118
|
+
const result = await this.handlePortSwitching(port, host);
|
|
119
|
+
logger.info("server", `✅ Found available port: ${result.port}`);
|
|
120
|
+
// Recursively try with the new port
|
|
121
|
+
const newServer = await this.startServerWithPortHandling(result.port, host, callback);
|
|
122
|
+
resolve(newServer);
|
|
123
|
+
}
|
|
124
|
+
catch (switchError) {
|
|
125
|
+
logger.error("server", `❌ Port switching failed: ${switchError}`);
|
|
126
|
+
reject(switchError);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
reject(new Error(`Failed to start server. Port ${port} is already in use. ` +
|
|
131
|
+
`Enable autoPortSwitch in server config to automatically find an available port.`));
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
reject(error);
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
throw error;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Handle automatic port switching when port is in use
|
|
146
|
+
*/
|
|
147
|
+
async handlePortSwitching(requestedPort, host = "localhost") {
|
|
148
|
+
const { options, logger } = this.dependencies;
|
|
149
|
+
const portManager = new PortManager.PortManager(requestedPort, options.server?.autoPortSwitch);
|
|
150
|
+
const result = await portManager.findAvailablePort(host);
|
|
151
|
+
if (result.switched) {
|
|
152
|
+
logger.portSwitching("server", `🔄 Port ${requestedPort} was in use, switched to port ${result.port}`);
|
|
153
|
+
logger.portSwitching("server", ` Attempts: ${result.attempts}, Strategy: ${portManager.getConfig()?.strategy || "increment"}`);
|
|
154
|
+
}
|
|
155
|
+
if (!result.success) {
|
|
156
|
+
const maxAttempts = options.server?.autoPortSwitch?.maxAttempts || 10;
|
|
157
|
+
throw new Error(`Failed to find an available port after ${maxAttempts} attempts. ` +
|
|
158
|
+
`Original port: ${requestedPort}, Last attempted: ${result.port}`);
|
|
159
|
+
}
|
|
160
|
+
return result;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Get the current server state
|
|
164
|
+
*/
|
|
165
|
+
getState() {
|
|
166
|
+
return { ...this.state };
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Update the server state
|
|
170
|
+
*/
|
|
171
|
+
updateState(updates) {
|
|
172
|
+
this.state = { ...this.state, ...updates };
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Get the current running port
|
|
176
|
+
*/
|
|
177
|
+
getCurrentPort() {
|
|
178
|
+
return this.state.currentPort;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Set the HTTP server instance
|
|
182
|
+
*/
|
|
183
|
+
setHttpServer(server) {
|
|
184
|
+
this.state.httpServer = server;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Get the HTTP server instance
|
|
188
|
+
*/
|
|
189
|
+
getHttpServer() {
|
|
190
|
+
return this.state.httpServer;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Mark the server as ready
|
|
194
|
+
*/
|
|
195
|
+
markReady() {
|
|
196
|
+
this.state.ready = true;
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Check if the server is ready
|
|
200
|
+
*/
|
|
201
|
+
isReady() {
|
|
202
|
+
return this.state.ready;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Add start method to app with cluster support
|
|
206
|
+
*/
|
|
207
|
+
addStartMethod(waitForReady) {
|
|
208
|
+
const { app, options, logger } = this.dependencies;
|
|
209
|
+
const start = async (port, callback) => {
|
|
210
|
+
// Wait for server to be ready before starting
|
|
211
|
+
if (!this.state.ready) {
|
|
212
|
+
logger.debug("server", "Waiting for initialization to complete...");
|
|
213
|
+
await waitForReady();
|
|
214
|
+
logger.info("server", "Initialization complete, starting server...");
|
|
215
|
+
}
|
|
216
|
+
const serverPort = port || options.server?.port || 3000;
|
|
217
|
+
const host = options.server?.host || "localhost";
|
|
218
|
+
// Handle different startup modes (hot reload, cluster, single process)
|
|
219
|
+
return await this.handleServerStartup(serverPort, host, callback);
|
|
220
|
+
};
|
|
221
|
+
// Add the start method to the app
|
|
222
|
+
app.start = start;
|
|
223
|
+
app.waitForReady = waitForReady;
|
|
224
|
+
// Add port management methods
|
|
225
|
+
app.getPort = () => this.getCurrentPort();
|
|
226
|
+
app.forceClosePort = async (port) => {
|
|
227
|
+
const { Port } = await Promise.resolve().then(function () { return require('../../utils/forceClosePort.js'); });
|
|
228
|
+
return await new Port(port).forceClosePort();
|
|
229
|
+
};
|
|
230
|
+
// Add redirect management methods if redirectManager is available
|
|
231
|
+
if (this.dependencies.redirectManager) {
|
|
232
|
+
app.redirectFromPort = (fromPort, toPort, options) => this.dependencies.redirectManager.redirectFromPort(fromPort, toPort, options);
|
|
233
|
+
app.getRedirectInstance = (fromPort) => this.dependencies.redirectManager.getRedirectInstance(fromPort);
|
|
234
|
+
app.getAllRedirectInstances = () => this.dependencies.redirectManager.getAllRedirectInstances();
|
|
235
|
+
app.disconnectRedirect = (fromPort) => this.dependencies.redirectManager.disconnectRedirect(fromPort);
|
|
236
|
+
app.disconnectAllRedirects = () => this.dependencies.redirectManager.disconnectAllRedirects();
|
|
237
|
+
app.getRedirectStats = (fromPort) => this.dependencies.redirectManager.getRedirectStats(fromPort);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Handle different server startup modes
|
|
242
|
+
*/
|
|
243
|
+
async handleServerStartup(serverPort, host, callback) {
|
|
244
|
+
const { logger } = this.dependencies;
|
|
245
|
+
// Check for hot reload mode
|
|
246
|
+
if (this.dependencies.fileWatcherManager?.isInMainProcess() &&
|
|
247
|
+
this.dependencies.fileWatcherManager?.getHotReloader()) {
|
|
248
|
+
return await this.handleHotReloadStartup(serverPort, host, callback);
|
|
249
|
+
}
|
|
250
|
+
// Check for cluster mode
|
|
251
|
+
if (this.dependencies.clusterManager?.isClusterEnabled()) {
|
|
252
|
+
return await this.handleClusterStartup(serverPort, host, callback);
|
|
253
|
+
}
|
|
254
|
+
// Default single process mode
|
|
255
|
+
logger.debug("server", "Taking single process mode path");
|
|
256
|
+
return await this.handleSingleProcessStartup(serverPort, host, callback);
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Handle hot reload startup
|
|
260
|
+
*/
|
|
261
|
+
async handleHotReloadStartup(serverPort, host, callback) {
|
|
262
|
+
const { logger } = this.dependencies;
|
|
263
|
+
logger.debug("server", "Taking hot reload mode path");
|
|
264
|
+
logger.startup("fileWatcher", "Starting with hot reload support...");
|
|
265
|
+
try {
|
|
266
|
+
// Start the hot reloader (which will spawn child process)
|
|
267
|
+
await this.dependencies
|
|
268
|
+
.fileWatcherManager.getHotReloader()
|
|
269
|
+
.start();
|
|
270
|
+
// Start file watcher in main process to monitor changes
|
|
271
|
+
if (this.dependencies.fileWatcherManager.getFileWatcher()) {
|
|
272
|
+
await this.dependencies.fileWatcherManager.startFileWatcherWithHotReload();
|
|
273
|
+
}
|
|
274
|
+
// Start the actual HTTP server in the main process too
|
|
275
|
+
this.state.httpServer = await this.startServerWithPortHandling(serverPort, host, async () => {
|
|
276
|
+
this.dependencies.fileWatcherManager.setHttpServer(this.state.httpServer);
|
|
277
|
+
if (callback)
|
|
278
|
+
callback();
|
|
279
|
+
});
|
|
280
|
+
return this.state.httpServer;
|
|
281
|
+
}
|
|
282
|
+
catch (error) {
|
|
283
|
+
logger.error("fileWatcher", "Hot reload startup failed:", error.message);
|
|
284
|
+
// Fall through to regular startup
|
|
285
|
+
return await this.handleSingleProcessStartup(serverPort, host, callback);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Handle cluster startup
|
|
290
|
+
*/
|
|
291
|
+
async handleClusterStartup(serverPort, host, callback) {
|
|
292
|
+
const { logger } = this.dependencies;
|
|
293
|
+
logger.debug("server", "Taking cluster mode path");
|
|
294
|
+
try {
|
|
295
|
+
// Start cluster manager
|
|
296
|
+
await this.dependencies.clusterManager.startCluster();
|
|
297
|
+
// Check if we're in master or worker process
|
|
298
|
+
// Use cluster.isMaster/isPrimary to detect master vs worker
|
|
299
|
+
const clusterModule = require("cluster");
|
|
300
|
+
if (clusterModule.isMaster || clusterModule.isPrimary) {
|
|
301
|
+
return await this.handleClusterMasterStartup(serverPort, host, callback);
|
|
302
|
+
}
|
|
303
|
+
else {
|
|
304
|
+
return await this.handleClusterWorkerStartup(serverPort, host, callback);
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
catch (error) {
|
|
308
|
+
const clusterModule = require("cluster");
|
|
309
|
+
// Only master process should fall back to single-process mode
|
|
310
|
+
if (clusterModule.isMaster || clusterModule.isPrimary) {
|
|
311
|
+
logger.error("cluster", "Failed to start cluster:", error.message);
|
|
312
|
+
logger.info("cluster", "Falling back to single process mode");
|
|
313
|
+
return await this.handleSingleProcessStartup(serverPort, host, callback);
|
|
314
|
+
}
|
|
315
|
+
else {
|
|
316
|
+
// Worker processes should fail fast and let cluster manager restart them
|
|
317
|
+
logger.error("cluster", `Worker ${process.pid} failed to start:`, error.message);
|
|
318
|
+
logger.info("cluster", "Worker will be restarted by cluster manager");
|
|
319
|
+
throw error; // Let the worker process exit and be restarted
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Handle cluster master startup
|
|
325
|
+
*/
|
|
326
|
+
async handleClusterMasterStartup(serverPort, host, callback) {
|
|
327
|
+
const { logger } = this.dependencies;
|
|
328
|
+
logger.startup("cluster", "Starting as cluster master process");
|
|
329
|
+
// Setup cluster event handlers
|
|
330
|
+
this.dependencies.clusterManager.setupClusterEventHandlers();
|
|
331
|
+
// Start load balancer proxy on the main port
|
|
332
|
+
const proxyServer = await this.startLoadBalancerProxy(serverPort, host);
|
|
333
|
+
logger.info("cluster", `Master process started load balancer on ${host}:${serverPort} - distributing requests to worker processes`);
|
|
334
|
+
const clusterStats = await this.dependencies.clusterManager.getClusterStats();
|
|
335
|
+
logger.debug("cluster", `Cluster master started with ${clusterStats.workers?.total || 0} workers`);
|
|
336
|
+
// Start file watcher if enabled
|
|
337
|
+
if (this.dependencies.fileWatcherManager.getFileWatcher()) {
|
|
338
|
+
if (this.dependencies.fileWatcherManager.isInMainProcess()) {
|
|
339
|
+
await this.dependencies.fileWatcherManager.startFileWatcherWithHotReload();
|
|
340
|
+
}
|
|
341
|
+
else {
|
|
342
|
+
await this.dependencies.fileWatcherManager.startFileWatcher();
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
if (callback)
|
|
346
|
+
callback();
|
|
347
|
+
return proxyServer;
|
|
348
|
+
}
|
|
349
|
+
/**
|
|
350
|
+
* Start load balancer proxy server on master process
|
|
351
|
+
*/
|
|
352
|
+
async startLoadBalancerProxy(port, host) {
|
|
353
|
+
const { logger, clusterManager } = this.dependencies;
|
|
354
|
+
const http = require("http");
|
|
355
|
+
// Create HTTP server for load balancing
|
|
356
|
+
const server = http.createServer(async (req, res) => {
|
|
357
|
+
try {
|
|
358
|
+
// Get available workers from the actual cluster manager
|
|
359
|
+
let allWorkers = [];
|
|
360
|
+
// Check if we have a Bun cluster manager
|
|
361
|
+
const bunCluster = clusterManager.getBunCluster();
|
|
362
|
+
if (bunCluster) {
|
|
363
|
+
allWorkers = bunCluster.getAllWorkers();
|
|
364
|
+
}
|
|
365
|
+
else {
|
|
366
|
+
// Check if we have a Node.js cluster manager
|
|
367
|
+
const nodeCluster = clusterManager.getCluster();
|
|
368
|
+
if (nodeCluster) {
|
|
369
|
+
allWorkers = nodeCluster.getAllWorkers();
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
const workers = allWorkers.filter((w) => w.status === "running");
|
|
373
|
+
if (workers.length === 0) {
|
|
374
|
+
res.writeHead(503, { "Content-Type": "application/json" });
|
|
375
|
+
res.end(JSON.stringify({
|
|
376
|
+
error: "Service Unavailable",
|
|
377
|
+
message: "No workers available",
|
|
378
|
+
}));
|
|
379
|
+
return;
|
|
380
|
+
}
|
|
381
|
+
// Simple round-robin load balancing for now
|
|
382
|
+
const selectedWorkerIndex = Math.floor(Math.random() * workers.length);
|
|
383
|
+
const selectedWorker = workers[selectedWorkerIndex];
|
|
384
|
+
if (!selectedWorker || !selectedWorker.port) {
|
|
385
|
+
res.writeHead(503, { "Content-Type": "application/json" });
|
|
386
|
+
res.end(JSON.stringify({
|
|
387
|
+
error: "Service Unavailable",
|
|
388
|
+
message: "Selected worker not available",
|
|
389
|
+
}));
|
|
390
|
+
return;
|
|
391
|
+
}
|
|
392
|
+
// Forward request to selected worker
|
|
393
|
+
const target = `http://${host}:${selectedWorker.port}`;
|
|
394
|
+
logger.debug("cluster", `Proxying ${req.method} ${req.url} to worker ${selectedWorker.id} on port ${selectedWorker.port}`);
|
|
395
|
+
// Simple HTTP proxy implementation
|
|
396
|
+
await this.forwardRequest(req, res, target, selectedWorker.id);
|
|
397
|
+
}
|
|
398
|
+
catch (error) {
|
|
399
|
+
logger.error("cluster", "Load balancer error:", error);
|
|
400
|
+
if (!res.headersSent) {
|
|
401
|
+
res.writeHead(500, { "Content-Type": "application/json" });
|
|
402
|
+
res.end(JSON.stringify({
|
|
403
|
+
error: "Internal Server Error",
|
|
404
|
+
message: "Load balancer error",
|
|
405
|
+
}));
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
});
|
|
409
|
+
// Start server
|
|
410
|
+
return new Promise((resolve, reject) => {
|
|
411
|
+
server.listen(port, host, () => {
|
|
412
|
+
logger.info("cluster", `Load balancer proxy started on ${host}:${port}`);
|
|
413
|
+
resolve(server);
|
|
414
|
+
});
|
|
415
|
+
server.on("error", (error) => {
|
|
416
|
+
logger.error("cluster", `Load balancer proxy error:`, error);
|
|
417
|
+
reject(error);
|
|
418
|
+
});
|
|
419
|
+
});
|
|
420
|
+
}
|
|
421
|
+
/**
|
|
422
|
+
* Forward HTTP request to worker
|
|
423
|
+
*/
|
|
424
|
+
async forwardRequest(req, res, target, workerId) {
|
|
425
|
+
const { logger } = this.dependencies;
|
|
426
|
+
const http = require("http");
|
|
427
|
+
require("url");
|
|
428
|
+
const targetUrl = new URL(target);
|
|
429
|
+
const options = {
|
|
430
|
+
hostname: targetUrl.hostname,
|
|
431
|
+
port: targetUrl.port,
|
|
432
|
+
path: req.url,
|
|
433
|
+
method: req.method,
|
|
434
|
+
headers: {
|
|
435
|
+
...req.headers,
|
|
436
|
+
"x-forwarded-for": req.connection?.remoteAddress || req.socket?.remoteAddress,
|
|
437
|
+
"x-forwarded-proto": "http",
|
|
438
|
+
"x-worker-id": workerId,
|
|
439
|
+
},
|
|
440
|
+
};
|
|
441
|
+
const proxyReq = http.request(options, (proxyRes) => {
|
|
442
|
+
// Forward response headers
|
|
443
|
+
res.writeHead(proxyRes.statusCode, proxyRes.headers);
|
|
444
|
+
// Forward response body
|
|
445
|
+
proxyRes.pipe(res);
|
|
446
|
+
});
|
|
447
|
+
proxyReq.on("error", (error) => {
|
|
448
|
+
logger.error("cluster", `Proxy request error for worker ${workerId}:`, error);
|
|
449
|
+
if (!res.headersSent) {
|
|
450
|
+
res.writeHead(502, { "Content-Type": "application/json" });
|
|
451
|
+
res.end(JSON.stringify({
|
|
452
|
+
error: "Bad Gateway",
|
|
453
|
+
message: "Worker unavailable",
|
|
454
|
+
}));
|
|
455
|
+
}
|
|
456
|
+
});
|
|
457
|
+
// Forward request body
|
|
458
|
+
req.pipe(proxyReq);
|
|
459
|
+
}
|
|
460
|
+
/**
|
|
461
|
+
* Handle cluster worker startup
|
|
462
|
+
*/
|
|
463
|
+
async handleClusterWorkerStartup(serverPort, host, callback) {
|
|
464
|
+
const { logger } = this.dependencies;
|
|
465
|
+
logger.startup("cluster", `Worker ${process.pid} started`);
|
|
466
|
+
// In cluster mode, workers DO start HTTP servers on the same port
|
|
467
|
+
// The Node.js cluster module handles load balancing automatically
|
|
468
|
+
logger.info("cluster", `Worker ${process.pid} starting HTTP server on shared port ${serverPort}`);
|
|
469
|
+
// Start the HTTP server for this worker
|
|
470
|
+
const httpServer = await this.startServerWithPortHandling(serverPort, host, () => {
|
|
471
|
+
logger.info("cluster", `Worker ${process.pid} listening on ${host}:${serverPort}`);
|
|
472
|
+
if (callback)
|
|
473
|
+
callback();
|
|
474
|
+
});
|
|
475
|
+
return httpServer;
|
|
476
|
+
}
|
|
477
|
+
/**
|
|
478
|
+
* Handle single process startup
|
|
479
|
+
*/
|
|
480
|
+
async handleSingleProcessStartup(serverPort, host, callback) {
|
|
481
|
+
this.state.httpServer = await this.startServerWithPortHandling(serverPort, host, async () => {
|
|
482
|
+
// Set HTTP server reference for file watcher restarts
|
|
483
|
+
if (this.dependencies.fileWatcherManager) {
|
|
484
|
+
this.dependencies.fileWatcherManager.setHttpServer(this.state.httpServer);
|
|
485
|
+
// Start file watcher if enabled
|
|
486
|
+
if (this.dependencies.fileWatcherManager.getFileWatcher()) {
|
|
487
|
+
if (this.dependencies.fileWatcherManager.isInMainProcess()) {
|
|
488
|
+
await this.dependencies.fileWatcherManager.startFileWatcherWithHotReload();
|
|
489
|
+
}
|
|
490
|
+
else {
|
|
491
|
+
await this.dependencies.fileWatcherManager.startFileWatcher();
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
if (callback)
|
|
496
|
+
callback();
|
|
497
|
+
});
|
|
498
|
+
return this.state.httpServer;
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
exports.ServerLifecycleManager = ServerLifecycleManager;
|
|
503
|
+
//# sourceMappingURL=ServerLifecycleManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ServerLifecycleManager.js","sources":["../../../../../../src/server/components/lifecycle/ServerLifecycleManager.ts"],"sourcesContent":[null],"names":["RequestProcessor","RouteManager","MonitoringManager","RedirectManager","ConsoleInterceptor","createNotFoundHandler","PortManager"],"mappings":"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"}
|
|
@@ -11,23 +11,6 @@ var Cluster_config = require('./Cluster.config.js');
|
|
|
11
11
|
*/
|
|
12
12
|
// Default configuration
|
|
13
13
|
const DEFAULT_OPTIONS = {
|
|
14
|
-
cache: {
|
|
15
|
-
strategy: "memory", // Use memory-only by default to avoid Redis dependency
|
|
16
|
-
ttl: 300000, // 5 minutes
|
|
17
|
-
enabled: true,
|
|
18
|
-
memory: {
|
|
19
|
-
maxSize: 100,
|
|
20
|
-
algorithm: "lru",
|
|
21
|
-
},
|
|
22
|
-
},
|
|
23
|
-
security: {
|
|
24
|
-
encryption: true,
|
|
25
|
-
accessMonitoring: true,
|
|
26
|
-
sanitization: true,
|
|
27
|
-
auditLogging: false,
|
|
28
|
-
cors: true,
|
|
29
|
-
helmet: true,
|
|
30
|
-
},
|
|
31
14
|
performance: {
|
|
32
15
|
compression: true,
|
|
33
16
|
batchSize: 100,
|
|
@@ -131,6 +114,29 @@ const DEFAULT_OPTIONS = {
|
|
|
131
114
|
enabled: false, // Disabled by default for single-process mode
|
|
132
115
|
config: Cluster_config.DEFAULT_CLUSTER_CONFIGS,
|
|
133
116
|
},
|
|
117
|
+
cache: {
|
|
118
|
+
strategy: "memory", // Use memory-only cache
|
|
119
|
+
maxSize: 500 * 1024 * 1024, // 500MB memory cache
|
|
120
|
+
ttl: 300000, // 5 minutes TTL
|
|
121
|
+
enabled: true,
|
|
122
|
+
memory: {
|
|
123
|
+
maxSize: 100, // Max entries
|
|
124
|
+
algorithm: "lru", // Least Recently Used
|
|
125
|
+
},
|
|
126
|
+
},
|
|
127
|
+
security: {
|
|
128
|
+
enabled: true,
|
|
129
|
+
level: "maximum",
|
|
130
|
+
csrf: true,
|
|
131
|
+
helmet: true,
|
|
132
|
+
xss: true,
|
|
133
|
+
sqlInjection: true,
|
|
134
|
+
bruteForce: true,
|
|
135
|
+
encryption: {
|
|
136
|
+
algorithm: "AES-256-GCM",
|
|
137
|
+
keySize: 32,
|
|
138
|
+
},
|
|
139
|
+
},
|
|
134
140
|
};
|
|
135
141
|
|
|
136
142
|
exports.DEFAULT_OPTIONS = DEFAULT_OPTIONS;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default.js","sources":["../../../../../src/server/const/default.ts"],"sourcesContent":[null],"names":["DEFAULT_FW_CONFIG","DEFAULT_CONSOLE_CONFIG","DEFAULT_CLUSTER_CONFIGS"],"mappings":";;;;;;AAAA;;;;AAIG;AAOH;AACa,MAAA,eAAe,GAAkB;AAC1C,IAAA,
|
|
1
|
+
{"version":3,"file":"default.js","sources":["../../../../../src/server/const/default.ts"],"sourcesContent":[null],"names":["DEFAULT_FW_CONFIG","DEFAULT_CONSOLE_CONFIG","DEFAULT_CLUSTER_CONFIGS"],"mappings":"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"}
|