UNPKG

sensai

Version:

Because even AI needs a master

52 lines (51 loc) 1.6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "default", { enumerable: true, get: function() { return _default; } }); const _nodenet = /*#__PURE__*/ _interop_require_default(require("node:net")); function _interop_require_default(obj) { return obj && obj.__esModule ? obj : { default: obj }; } // Define port range const MIN_PORT = 1024; const MAX_PORT = 65535; /** * Finds first avaible port within the range [1024, 65535] * * @param end use to stop the recursive loop * @throws Will throw an error if no available port is found within the specified range. */ const getPort = async (port, end = port - 1)=>{ if (port > MAX_PORT || port < MIN_PORT) port = MIN_PORT; if (end < MIN_PORT || end > MAX_PORT) end = MAX_PORT; if (port === end) throw new Error('NoAvailablePort') // TODO throw proper error ; const isAvailable = await isPortAvailable(port); if (isAvailable) return port; return getPort(port === MAX_PORT ? MIN_PORT : port + 1, end); }; const _default = getPort; /** * Checks the availability of a specified port. * Resolves to `true` if the port is available, `false` otherwise. */ const isPortAvailable = async (port)=>{ const server = _nodenet.default.createServer(); return new Promise((resolve)=>{ server.listen(port, ()=>{ server.once('close', ()=>{ resolve(true); }); server.close(); }); server.on('error', ()=>{ resolve(false); }); }); };