/** * Assigns a unique unsused port to be used for web traffic * @param {string} serviceId Id to consume the port * @return {int} open port assigned */ const generateServicePort = async (serviceId, start = 8101, thisLock = false) => { let newPort; if (portLock && !thisLock) { await setTimeoutPromise(Math.floor(Math.random() * 300)); newPort = await generateServicePort(serviceId, newPort); return newPort; } portLock = true; newPort = await portscanner.findAPortNotInUse(start, 49151, '127.0.0.1'); if (portBlackList.has(newPort)) { newPort = await generateServicePort(serviceId, newPort + 1, true); portBlackList.add(newPort); portLock = false; services[serviceId].port = newPort; return newPort; } portBlackList.add(newPort); portLock = false; services[serviceId].port = newPort; return newPort; }