Files
2026-04-12 01:06:31 +07:00

49 lines
1.1 KiB
JavaScript

/**
* Port finder utility - finds available port in range
* Used by markdown-novel-viewer server
*/
const net = require('net');
const DEFAULT_PORT = 3456;
const PORT_RANGE_END = 3500;
/**
* Check if a port is available
* @param {number} port - Port to check
* @returns {Promise<boolean>} - True if available
*/
function isPortAvailable(port) {
return new Promise((resolve) => {
const server = net.createServer();
server.once('error', () => resolve(false));
server.once('listening', () => {
server.close();
resolve(true);
});
server.listen(port);
});
}
/**
* Find first available port in range
* @param {number} startPort - Starting port (default: 3456)
* @returns {Promise<number>} - Available port
* @throws {Error} - If no port available in range
*/
async function findAvailablePort(startPort = DEFAULT_PORT) {
for (let port = startPort; port <= PORT_RANGE_END; port++) {
if (await isPortAvailable(port)) {
return port;
}
}
throw new Error(`No available port in range ${startPort}-${PORT_RANGE_END}`);
}
module.exports = {
isPortAvailable,
findAvailablePort,
DEFAULT_PORT,
PORT_RANGE_END
};