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.
- package/README.md +219 -31
- package/dist/cjs/mods/security/src/components/cache/index.js +0 -72
- package/dist/cjs/mods/security/src/components/cache/index.js.map +1 -1
- package/dist/cjs/mods/security/src/index.js +0 -3
- package/dist/cjs/mods/security/src/index.js.map +1 -1
- package/dist/cjs/shared/logger/Logger.js +2 -0
- package/dist/cjs/shared/logger/Logger.js.map +1 -1
- 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/plugins/modules/builtin/ResponseTimePlugin.js +1 -1
- package/dist/cjs/src/plugins/modules/builtin/ResponseTimePlugin.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 +53 -411
- package/dist/cjs/src/server/FastServer.js.map +1 -1
- package/dist/cjs/src/server/ServerFactory.js +7 -62
- package/dist/cjs/src/server/ServerFactory.js.map +1 -1
- package/dist/cjs/src/server/components/fastapi/ClusterManagerComponent.js +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/lifecycle/ServerLifecycleManager.js +384 -0
- package/dist/cjs/src/server/components/lifecycle/ServerLifecycleManager.js.map +1 -0
- package/dist/cjs/src/server/const/default.js +0 -8
- 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 +412 -0
- package/dist/cjs/src/server/core/XyprissApp.js.map +1 -0
- package/dist/cjs/src/server/middleware/MiddlewareManager.js +146 -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/es_modules.js +3 -2
- package/dist/cjs/src/server/utils/es_modules.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/components/cache/index.js +1 -70
- package/dist/esm/mods/security/src/components/cache/index.js.map +1 -1
- package/dist/esm/mods/security/src/index.js +1 -1
- package/dist/esm/shared/logger/Logger.js +2 -0
- package/dist/esm/shared/logger/Logger.js.map +1 -1
- 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/plugins/modules/builtin/ResponseTimePlugin.js +1 -1
- package/dist/esm/src/plugins/modules/builtin/ResponseTimePlugin.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 +53 -411
- package/dist/esm/src/server/FastServer.js.map +1 -1
- package/dist/esm/src/server/ServerFactory.js +8 -59
- package/dist/esm/src/server/ServerFactory.js.map +1 -1
- package/dist/esm/src/server/components/fastapi/ClusterManagerComponent.js +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/lifecycle/ServerLifecycleManager.js +382 -0
- package/dist/esm/src/server/components/lifecycle/ServerLifecycleManager.js.map +1 -0
- package/dist/esm/src/server/const/default.js +0 -8
- 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 +410 -0
- package/dist/esm/src/server/core/XyprissApp.js.map +1 -0
- package/dist/esm/src/server/middleware/MiddlewareManager.js +144 -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/es_modules.js +3 -3
- package/dist/esm/src/server/utils/es_modules.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 +2166 -4273
- package/package.json +31 -19
|
@@ -1,123 +1,329 @@
|
|
|
1
1
|
import { Logger } from '../../../shared/logger/Logger.js';
|
|
2
|
+
import { exec } from 'child_process';
|
|
3
|
+
import { promisify } from 'util';
|
|
2
4
|
|
|
3
5
|
class Port {
|
|
4
6
|
constructor(port) {
|
|
5
|
-
this.
|
|
7
|
+
this.MAX_RETRIES = 3;
|
|
8
|
+
this.RETRY_DELAY = 500;
|
|
9
|
+
this.PORT_FREE_WAIT = 1000;
|
|
10
|
+
this.port = this._validatePort(port);
|
|
6
11
|
this.logger = Logger.getInstance();
|
|
12
|
+
this.execAsync = promisify(exec);
|
|
7
13
|
}
|
|
8
14
|
/**
|
|
9
15
|
* Attempt to forcefully close/free up the specified port
|
|
10
|
-
* @param port - The port number to force close
|
|
11
16
|
* @returns Promise<boolean> - true if successful, false if failed
|
|
12
17
|
*/
|
|
13
18
|
async forceClosePort() {
|
|
14
19
|
try {
|
|
15
20
|
this.logger.debug("server", `Attempting to force close port ${this.port}...`);
|
|
16
|
-
//
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
21
|
+
// Check if port is actually in use
|
|
22
|
+
const portCheck = await this._checkPortStatus();
|
|
23
|
+
if (!portCheck.isInUse) {
|
|
24
|
+
this.logger.info("server", `Port ${this.port} is already free`);
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
// Kill processes using the port
|
|
28
|
+
const success = await this._killPortProcesses(portCheck.processes);
|
|
29
|
+
if (!success) {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
// Wait for port to be freed
|
|
33
|
+
await this._waitForPortFree();
|
|
34
|
+
// Final verification
|
|
35
|
+
const finalCheck = await this._verifyPortIsFree();
|
|
36
|
+
if (finalCheck) {
|
|
37
|
+
this.logger.info("server", `Port ${this.port} is now free`);
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
this.logger.warn("server", `Port ${this.port} may still be in use after cleanup attempt`);
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
this.logger.error("server", `Error force closing port ${this.port}:`, error.message);
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Validates that the port number is within valid range
|
|
52
|
+
* @param port - The port number to validate
|
|
53
|
+
* @returns The validated port number
|
|
54
|
+
* @throws Error if port is invalid
|
|
55
|
+
*/
|
|
56
|
+
_validatePort(port) {
|
|
57
|
+
if (!Number.isInteger(port) || port < 1 || port > 65535) {
|
|
58
|
+
throw new Error(`Invalid port number: ${port}. Port must be between 1 and 65535.`);
|
|
59
|
+
}
|
|
60
|
+
return port;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Checks the current status of the port
|
|
64
|
+
* @returns Promise<PortCheckResult> - Information about port usage
|
|
65
|
+
*/
|
|
66
|
+
async _checkPortStatus() {
|
|
67
|
+
try {
|
|
68
|
+
const processes = await this._getPortProcesses();
|
|
69
|
+
return {
|
|
70
|
+
isInUse: processes.length > 0,
|
|
71
|
+
processes,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
this.logger.debug("server", `Error checking port status: ${error.message}`);
|
|
76
|
+
return { isInUse: false, processes: [] };
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Gets list of processes using the port
|
|
81
|
+
* @returns Promise<PortProcess[]> - Array of processes using the port
|
|
82
|
+
*/
|
|
83
|
+
async _getPortProcesses() {
|
|
84
|
+
if (process.platform === "win32") {
|
|
85
|
+
return this._getWindowsPortProcesses();
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
return this._getUnixPortProcesses();
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Gets processes using the port on Windows
|
|
93
|
+
* @returns Promise<PortProcess[]> - Array of Windows processes
|
|
94
|
+
*/
|
|
95
|
+
async _getWindowsPortProcesses() {
|
|
96
|
+
const processes = [];
|
|
97
|
+
try {
|
|
98
|
+
const { stdout } = await this._executeWithRetry(`netstat -ano | findstr :${this.port}`);
|
|
99
|
+
const lines = stdout.split("\n").filter((line) => line.trim());
|
|
100
|
+
for (const line of lines) {
|
|
101
|
+
const parts = line.trim().split(/\s+/);
|
|
102
|
+
if (parts.length >= 5) {
|
|
103
|
+
const localAddress = parts[1];
|
|
104
|
+
const protocol = parts[0];
|
|
105
|
+
const state = parts[3];
|
|
106
|
+
const pid = parts[4];
|
|
107
|
+
// Ensure this is exactly our port (not a port that contains our port number)
|
|
108
|
+
if (this._isExactPortMatch(localAddress, this.port) &&
|
|
109
|
+
pid &&
|
|
110
|
+
pid !== "0") {
|
|
111
|
+
processes.push({ pid, protocol, state });
|
|
50
112
|
}
|
|
51
113
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
this.logger.debug("server", `Windows netstat command failed: ${error.message}`);
|
|
118
|
+
}
|
|
119
|
+
return processes;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Gets processes using the port on Unix-like systems
|
|
123
|
+
* @returns Promise<PortProcess[]> - Array of Unix processes
|
|
124
|
+
*/
|
|
125
|
+
async _getUnixPortProcesses() {
|
|
126
|
+
const processes = [];
|
|
127
|
+
try {
|
|
128
|
+
const { stdout } = await this._executeWithRetry(`lsof -ti:${this.port}`);
|
|
129
|
+
const pids = stdout
|
|
130
|
+
.trim()
|
|
131
|
+
.split("\n")
|
|
132
|
+
.filter((pid) => pid && pid.trim());
|
|
133
|
+
for (const pid of pids) {
|
|
134
|
+
if (pid.trim()) {
|
|
135
|
+
// Get additional process info
|
|
136
|
+
try {
|
|
137
|
+
const { stdout: processInfo } = await this.execAsync(`lsof -p ${pid.trim()} | grep :${this.port}`);
|
|
138
|
+
const protocol = this._extractProtocolFromLsof(processInfo);
|
|
139
|
+
processes.push({ pid: pid.trim(), protocol });
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
// Fallback if detailed info fails
|
|
143
|
+
processes.push({
|
|
144
|
+
pid: pid.trim(),
|
|
145
|
+
protocol: "unknown",
|
|
146
|
+
});
|
|
147
|
+
}
|
|
55
148
|
}
|
|
56
149
|
}
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
this.logger.debug("server", `Unix lsof command failed: ${error.message}`);
|
|
153
|
+
}
|
|
154
|
+
return processes;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Kills all processes using the port
|
|
158
|
+
* @param processes - Array of processes to kill
|
|
159
|
+
* @returns Promise<boolean> - true if all processes were handled successfully
|
|
160
|
+
*/
|
|
161
|
+
async _killPortProcesses(processes) {
|
|
162
|
+
let allSuccessful = true;
|
|
163
|
+
for (const process of processes) {
|
|
164
|
+
const success = await this._killSingleProcess(process);
|
|
165
|
+
if (!success) {
|
|
166
|
+
allSuccessful = false;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
return allSuccessful;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Kills a single process
|
|
173
|
+
* @param process - The process to kill
|
|
174
|
+
* @returns Promise<boolean> - true if successful or process no longer exists
|
|
175
|
+
*/
|
|
176
|
+
async _killSingleProcess(process) {
|
|
177
|
+
try {
|
|
178
|
+
this.logger.debug("server", `Attempting to kill process ${process.pid} (${process.protocol}) using port ${this.port}`);
|
|
179
|
+
if (globalThis.process.platform === "win32") {
|
|
180
|
+
await this._executeWithRetry(`taskkill /F /PID ${process.pid}`);
|
|
181
|
+
}
|
|
57
182
|
else {
|
|
58
|
-
//
|
|
183
|
+
// Try graceful kill first, then force kill
|
|
59
184
|
try {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
if (pid) {
|
|
67
|
-
try {
|
|
68
|
-
await execAsync(`kill -9 ${pid}`);
|
|
69
|
-
this.logger.info("server", `Forcefully closed process ${pid} using port ${this.port}`);
|
|
70
|
-
}
|
|
71
|
-
catch (killError) {
|
|
72
|
-
// Handle race condition - process may have already exited
|
|
73
|
-
if (killError.message.includes("No such process") ||
|
|
74
|
-
killError.message.includes("Operation not permitted")) {
|
|
75
|
-
this.logger.info("server", `Process ${pid} using port ${this.port} had already exited or is protected`);
|
|
76
|
-
}
|
|
77
|
-
else {
|
|
78
|
-
this.logger.warn("server", `Failed to kill process ${pid}: ${killError.message}`);
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
}
|
|
185
|
+
await this._executeWithRetry(`kill ${process.pid}`);
|
|
186
|
+
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
187
|
+
// Check if process still exists
|
|
188
|
+
const stillExists = await this._processExists(process.pid);
|
|
189
|
+
if (stillExists) {
|
|
190
|
+
await this._executeWithRetry(`kill -9 ${process.pid}`);
|
|
82
191
|
}
|
|
83
192
|
}
|
|
84
|
-
catch
|
|
85
|
-
|
|
86
|
-
|
|
193
|
+
catch {
|
|
194
|
+
// Fallback to force kill
|
|
195
|
+
await this._executeWithRetry(`kill -9 ${process.pid}`);
|
|
87
196
|
}
|
|
88
197
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
198
|
+
this.logger.info("server", `Successfully killed process ${process.pid} using port ${this.port}`);
|
|
199
|
+
return true;
|
|
200
|
+
}
|
|
201
|
+
catch (error) {
|
|
202
|
+
// Handle common scenarios where process is already gone or protected
|
|
203
|
+
if (this._isProcessAlreadyGoneError(error.message)) {
|
|
204
|
+
this.logger.info("server", `Process ${process.pid} using port ${this.port} had already exited`);
|
|
205
|
+
return true;
|
|
206
|
+
}
|
|
207
|
+
else if (this._isProcessProtectedError(error.message)) {
|
|
208
|
+
this.logger.warn("server", `Process ${process.pid} is protected and cannot be killed`);
|
|
209
|
+
return false;
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
this.logger.warn("server", `Failed to kill process ${process.pid}: ${error.message}`);
|
|
213
|
+
return false;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Executes a command with retry logic
|
|
219
|
+
* @param command - Command to execute
|
|
220
|
+
* @returns Promise with command result
|
|
221
|
+
*/
|
|
222
|
+
async _executeWithRetry(command) {
|
|
223
|
+
let lastError;
|
|
224
|
+
for (let attempt = 1; attempt <= this.MAX_RETRIES; attempt++) {
|
|
92
225
|
try {
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
else {
|
|
101
|
-
const { stdout } = await execAsync(`lsof -ti:${this.port}`);
|
|
102
|
-
if (!stdout.trim()) {
|
|
103
|
-
this.logger.info("server", `Port ${this.port} is now free`);
|
|
104
|
-
return true;
|
|
105
|
-
}
|
|
226
|
+
return await this.execAsync(command);
|
|
227
|
+
}
|
|
228
|
+
catch (error) {
|
|
229
|
+
lastError = error;
|
|
230
|
+
if (attempt < this.MAX_RETRIES) {
|
|
231
|
+
this.logger.debug("server", `Command failed (attempt ${attempt}/${this.MAX_RETRIES}), retrying: ${command}`);
|
|
232
|
+
await new Promise((resolve) => setTimeout(resolve, this.RETRY_DELAY));
|
|
106
233
|
}
|
|
107
234
|
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
235
|
+
}
|
|
236
|
+
throw lastError;
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Waits for the port to be freed
|
|
240
|
+
*/
|
|
241
|
+
async _waitForPortFree() {
|
|
242
|
+
await new Promise((resolve) => setTimeout(resolve, this.PORT_FREE_WAIT));
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Verifies that the port is now free
|
|
246
|
+
* @returns Promise<boolean> - true if port is free
|
|
247
|
+
*/
|
|
248
|
+
async _verifyPortIsFree() {
|
|
249
|
+
try {
|
|
250
|
+
const portCheck = await this._checkPortStatus();
|
|
251
|
+
return !portCheck.isInUse;
|
|
252
|
+
}
|
|
253
|
+
catch (error) {
|
|
254
|
+
// If check fails, assume port is free (commands typically fail when nothing is using the port)
|
|
255
|
+
return true;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Checks if a process still exists
|
|
260
|
+
* @param pid - Process ID to check
|
|
261
|
+
* @returns Promise<boolean> - true if process exists
|
|
262
|
+
*/
|
|
263
|
+
async _processExists(pid) {
|
|
264
|
+
try {
|
|
265
|
+
if (process.platform === "win32") {
|
|
266
|
+
await this.execAsync(`tasklist /FI "PID eq ${pid}" | findstr ${pid}`);
|
|
267
|
+
}
|
|
268
|
+
else {
|
|
269
|
+
await this.execAsync(`kill -0 ${pid}`);
|
|
112
270
|
}
|
|
113
|
-
this.logger.info("server", `Successfully processed port ${this.port} closure request`);
|
|
114
271
|
return true;
|
|
115
272
|
}
|
|
116
|
-
catch
|
|
117
|
-
this.logger.error("server", `Error force closing port ${this.port}:`, error.message);
|
|
273
|
+
catch {
|
|
118
274
|
return false;
|
|
119
275
|
}
|
|
120
276
|
}
|
|
277
|
+
/**
|
|
278
|
+
* Checks if the address exactly matches our port
|
|
279
|
+
* @param address - Network address string (e.g., "0.0.0.0:3000")
|
|
280
|
+
* @param port - Port number to match
|
|
281
|
+
* @returns boolean - true if exact match
|
|
282
|
+
*/
|
|
283
|
+
_isExactPortMatch(address, port) {
|
|
284
|
+
const portPattern = new RegExp(`:${port}$`);
|
|
285
|
+
return portPattern.test(address);
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* Extracts protocol information from lsof output
|
|
289
|
+
* @param lsofOutput - Output from lsof command
|
|
290
|
+
* @returns string - Protocol type
|
|
291
|
+
*/
|
|
292
|
+
_extractProtocolFromLsof(lsofOutput) {
|
|
293
|
+
if (lsofOutput.includes("TCP"))
|
|
294
|
+
return "TCP";
|
|
295
|
+
if (lsofOutput.includes("UDP"))
|
|
296
|
+
return "UDP";
|
|
297
|
+
return "unknown";
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Determines if error indicates process is already gone
|
|
301
|
+
* @param errorMessage - Error message to check
|
|
302
|
+
* @returns boolean - true if process no longer exists
|
|
303
|
+
*/
|
|
304
|
+
_isProcessAlreadyGoneError(errorMessage) {
|
|
305
|
+
const goneIndicators = [
|
|
306
|
+
"n'a pas pu être arrêté",
|
|
307
|
+
"could not be terminated",
|
|
308
|
+
"No such process",
|
|
309
|
+
"not found",
|
|
310
|
+
"ERROR: The process",
|
|
311
|
+
];
|
|
312
|
+
return goneIndicators.some((indicator) => errorMessage.toLowerCase().includes(indicator.toLowerCase()));
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Determines if error indicates process is protected
|
|
316
|
+
* @param errorMessage - Error message to check
|
|
317
|
+
* @returns boolean - true if process is protected
|
|
318
|
+
*/
|
|
319
|
+
_isProcessProtectedError(errorMessage) {
|
|
320
|
+
const protectedIndicators = [
|
|
321
|
+
"Operation not permitted",
|
|
322
|
+
"Access denied",
|
|
323
|
+
"insufficient privilege",
|
|
324
|
+
];
|
|
325
|
+
return protectedIndicators.some((indicator) => errorMessage.toLowerCase().includes(indicator.toLowerCase()));
|
|
326
|
+
}
|
|
121
327
|
}
|
|
122
328
|
|
|
123
329
|
export { Port };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"forceClosePort.js","sources":["../../../../../src/server/utils/forceClosePort.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"forceClosePort.js","sources":["../../../../../src/server/utils/forceClosePort.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|