Skip to content

Commit

Permalink
feat: find free port for app
Browse files Browse the repository at this point in the history
feat: find free port for app
  • Loading branch information
Cafe137 authored Mar 31, 2022
2 parents f3d55dd + befec02 commit 9639279
Show file tree
Hide file tree
Showing 20 changed files with 82 additions and 35 deletions.
20 changes: 13 additions & 7 deletions index.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,19 @@
const { shell } = require('electron')
const { runElectronTray } = require('./src/electron')
const { runLauncher } = require('./src/launcher')
const { port, runServer } = require('./src/server')
const { findFreePort, port } = require('./src/port')
const { runServer } = require('./src/server')
const { getStatus } = require('./src/status')

if (getStatus().status === 2) {
runLauncher()
} else {
shell.openExternal(`http://localhost:${port}/installer/`)
async function main() {
await findFreePort()
if (getStatus().status === 2) {
runLauncher()
} else {
shell.openExternal(`http://localhost:${port.value}/installer/`)
}
runElectronTray()
runServer()
}
runElectronTray()
runServer()

main()
6 changes: 3 additions & 3 deletions src/electron.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
const { app, Tray, Menu, shell } = require('electron')
const { runLauncher } = require('./launcher')
const { BeeManager } = require('./lifecycle')
const { port } = require('./server')
const { port } = require('./port')
const { getStatus } = require('./status')

let tray
Expand All @@ -12,7 +12,7 @@ function rebuildElectronTray() {
}
if (getStatus().status !== 2) {
const contextMenu = Menu.buildFromTemplate([
{ label: 'Open Installer', click: () => shell.openExternal(`http://localhost:${port}/installer/`) },
{ label: 'Open Installer', click: () => shell.openExternal(`http://localhost:${port.value}/installer/`) },
{ type: 'separator' },
{
label: 'Exit',
Expand All @@ -36,7 +36,7 @@ function rebuildElectronTray() {
}
},
{ type: 'separator' },
{ label: 'Open Web UI', click: () => shell.openExternal(`http://localhost:${port}/dashboard/#/`) },
{ label: 'Open Web UI', click: () => shell.openExternal(`http://localhost:${port.value}/dashboard/#/`) },
{ type: 'separator' },
{
label: 'Exit',
Expand Down
7 changes: 6 additions & 1 deletion src/launcher.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ const { BeeManager } = require('./lifecycle')

async function createConfigFileAndAddress() {
writeFileSync('config.yaml', createStubConfiguration())
await launchBee().catch(() => {})
await initializeBee()
}

async function createInitialTransaction() {
Expand Down Expand Up @@ -83,6 +83,11 @@ transaction: ${transaction}
block-hash: ${blockHash}`
}

async function initializeBee() {
const configPath = resolve('config.yaml')
return runProcess(resolve('bee'), ['init', `--config=${configPath}`], onStdout, onStderr, new AbortController())
}

async function launchBee(abortController) {
if (!abortController) {
abortController = new AbortController()
Expand Down
37 changes: 37 additions & 0 deletions src/port.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
const net = require('net')

const port = {
value: -1
}

async function findFreePort() {
console.log('Finding free port...')
for (let i = 3000; i < 5000; i++) {
const free = await testPort(i)
if (free) {
port.value = i
console.log(`Found free port: ${i}`)
return
}
}
}

async function testPort(port) {
return new Promise(resolve => {
const server = net.createServer()
server.once('error', () => {
server.close()
resolve(false)
})
server.once('listening', () => {
server.close()
resolve(true)
})
server.listen(port)
})
}

module.exports = {
port,
findFreePort
}
9 changes: 4 additions & 5 deletions src/server.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,14 @@ const serve = require('koa-static')
const { writeConfigYaml, readConfigYaml } = require('./config-yaml')
const { createInitialTransaction, createConfigFileAndAddress, runLauncher } = require('./launcher')
const { BeeManager } = require('./lifecycle')
const { port } = require('./port')
const { getStatus } = require('./status')

const port = 5000

function runServer() {
const app = new Koa()
app.use(serve('static'))
app.use(async (context, next) => {
context.set('Access-Control-Allow-Origin', '*')
context.set('Access-Control-Allow-Origin', `http://localhost:${port.value}`)
context.set('Access-Control-Allow-Credentials', 'true')
context.set(
'Access-Control-Allow-Headers',
Expand Down Expand Up @@ -49,7 +48,7 @@ function runServer() {
})
app.use(router.routes())
app.use(router.allowedMethods())
app.listen(port)
app.listen(port.value)
}

module.exports = { runServer, port }
module.exports = { runServer }
6 changes: 3 additions & 3 deletions static/dashboard/asset-manifest.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
{
"files": {
"main.css": "./static/css/main.59b0af6f.chunk.css",
"main.js": "./static/js/main.637f9634.chunk.js",
"main.js.map": "./static/js/main.637f9634.chunk.js.map",
"main.js": "./static/js/main.16628c3e.chunk.js",
"main.js.map": "./static/js/main.16628c3e.chunk.js.map",
"runtime-main.js": "./static/js/runtime-main.fb7b86cd.js",
"runtime-main.js.map": "./static/js/runtime-main.fb7b86cd.js.map",
"static/js/2.b42b2095.chunk.js": "./static/js/2.b42b2095.chunk.js",
Expand All @@ -19,6 +19,6 @@
"static/js/runtime-main.fb7b86cd.js",
"static/js/2.b42b2095.chunk.js",
"static/css/main.59b0af6f.chunk.css",
"static/js/main.637f9634.chunk.js"
"static/js/main.16628c3e.chunk.js"
]
}
2 changes: 1 addition & 1 deletion static/dashboard/index.html
Original file line number Diff line number Diff line change
@@ -1 +1 @@
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="./favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Bee Dashboard"/><link rel="apple-touch-icon" href="./logo192.png"/><link rel="manifest" href="./manifest.json"/><title>Bee Dashboard</title><link href="./static/css/main.59b0af6f.chunk.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><script>!function(e){function r(r){for(var n,a,i=r[0],c=r[1],l=r[2],f=0,p=[];f<i.length;f++)a=i[f],Object.prototype.hasOwnProperty.call(o,a)&&o[a]&&p.push(o[a][0]),o[a]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(s&&s(r);p.length;)p.shift()();return u.push.apply(u,l||[]),t()}function t(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,i=1;i<t.length;i++){var c=t[i];0!==o[c]&&(n=!1)}n&&(u.splice(r--,1),e=a(a.s=t[0]))}return e}var n={},o={1:0},u=[];function a(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,a),t.l=!0,t.exports}a.e=function(e){var r=[],t=o[e];if(0!==t)if(t)r.push(t[2]);else{var n=new Promise((function(r,n){t=o[e]=[r,n]}));r.push(t[2]=n);var u,i=document.createElement("script");i.charset="utf-8",i.timeout=120,a.nc&&i.setAttribute("nonce",a.nc),i.src=function(e){return a.p+"static/js/"+({}[e]||e)+"."+{3:"d87d34cb"}[e]+".chunk.js"}(e);var c=new Error;u=function(r){i.onerror=i.onload=null,clearTimeout(l);var t=o[e];if(0!==t){if(t){var n=r&&("load"===r.type?"missing":r.type),u=r&&r.target&&r.target.src;c.message="Loading chunk "+e+" failed.\n("+n+": "+u+")",c.name="ChunkLoadError",c.type=n,c.request=u,t[1](c)}o[e]=void 0}};var l=setTimeout((function(){u({type:"timeout",target:i})}),12e4);i.onerror=i.onload=u,document.head.appendChild(i)}return Promise.all(r)},a.m=e,a.c=n,a.d=function(e,r,t){a.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},a.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.t=function(e,r){if(1&r&&(e=a(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(a.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)a.d(t,n,function(r){return e[r]}.bind(null,n));return t},a.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(r,"a",r),r},a.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},a.p="./",a.oe=function(e){throw console.error(e),e};var i=this["webpackJsonp@ethersphere/bee-dashboard"]=this["webpackJsonp@ethersphere/bee-dashboard"]||[],c=i.push.bind(i);i.push=r,i=i.slice();for(var l=0;l<i.length;l++)r(i[l]);var s=c;t()}([])</script><script src="./static/js/2.b42b2095.chunk.js"></script><script src="./static/js/main.637f9634.chunk.js"></script></body></html>
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="./favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Bee Dashboard"/><link rel="apple-touch-icon" href="./logo192.png"/><link rel="manifest" href="./manifest.json"/><title>Bee Dashboard</title><link href="./static/css/main.59b0af6f.chunk.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><script>!function(e){function r(r){for(var n,a,i=r[0],c=r[1],l=r[2],f=0,p=[];f<i.length;f++)a=i[f],Object.prototype.hasOwnProperty.call(o,a)&&o[a]&&p.push(o[a][0]),o[a]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(s&&s(r);p.length;)p.shift()();return u.push.apply(u,l||[]),t()}function t(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,i=1;i<t.length;i++){var c=t[i];0!==o[c]&&(n=!1)}n&&(u.splice(r--,1),e=a(a.s=t[0]))}return e}var n={},o={1:0},u=[];function a(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,a),t.l=!0,t.exports}a.e=function(e){var r=[],t=o[e];if(0!==t)if(t)r.push(t[2]);else{var n=new Promise((function(r,n){t=o[e]=[r,n]}));r.push(t[2]=n);var u,i=document.createElement("script");i.charset="utf-8",i.timeout=120,a.nc&&i.setAttribute("nonce",a.nc),i.src=function(e){return a.p+"static/js/"+({}[e]||e)+"."+{3:"d87d34cb"}[e]+".chunk.js"}(e);var c=new Error;u=function(r){i.onerror=i.onload=null,clearTimeout(l);var t=o[e];if(0!==t){if(t){var n=r&&("load"===r.type?"missing":r.type),u=r&&r.target&&r.target.src;c.message="Loading chunk "+e+" failed.\n("+n+": "+u+")",c.name="ChunkLoadError",c.type=n,c.request=u,t[1](c)}o[e]=void 0}};var l=setTimeout((function(){u({type:"timeout",target:i})}),12e4);i.onerror=i.onload=u,document.head.appendChild(i)}return Promise.all(r)},a.m=e,a.c=n,a.d=function(e,r,t){a.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},a.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.t=function(e,r){if(1&r&&(e=a(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(a.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)a.d(t,n,function(r){return e[r]}.bind(null,n));return t},a.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(r,"a",r),r},a.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},a.p="./",a.oe=function(e){throw console.error(e),e};var i=this["webpackJsonp@ethersphere/bee-dashboard"]=this["webpackJsonp@ethersphere/bee-dashboard"]||[],c=i.push.bind(i);i.push=r,i=i.slice();for(var l=0;l<i.length;l++)r(i[l]);var s=c;t()}([])</script><script src="./static/js/2.b42b2095.chunk.js"></script><script src="./static/js/main.16628c3e.chunk.js"></script></body></html>

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions static/dashboard/static/js/main.16628c3e.chunk.js.map

Large diffs are not rendered by default.

1 change: 0 additions & 1 deletion static/dashboard/static/js/main.637f9634.chunk.js.map

This file was deleted.

6 changes: 3 additions & 3 deletions static/installer/asset-manifest.json
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
{
"files": {
"main.css": "/installer/static/css/main.cfed29a4.css",
"main.js": "/installer/static/js/main.9e0567e8.js",
"main.js": "/installer/static/js/main.443fc15b.js",
"index.html": "/installer/index.html",
"main.cfed29a4.css.map": "/installer/static/css/main.cfed29a4.css.map",
"main.9e0567e8.js.map": "/installer/static/js/main.9e0567e8.js.map"
"main.443fc15b.js.map": "/installer/static/js/main.443fc15b.js.map"
},
"entrypoints": [
"static/css/main.cfed29a4.css",
"static/js/main.9e0567e8.js"
"static/js/main.443fc15b.js"
]
}
2 changes: 1 addition & 1 deletion static/installer/index.html
Original file line number Diff line number Diff line change
@@ -1 +1 @@
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/installer/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Web site created using create-react-app"/><link rel="apple-touch-icon" href="/installer/logo192.png"/><link rel="manifest" href="/installer/manifest.json"/><title>React App</title><script defer="defer" src="/installer/static/js/main.9e0567e8.js"></script><link href="/installer/static/css/main.cfed29a4.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/installer/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Web site created using create-react-app"/><link rel="apple-touch-icon" href="/installer/logo192.png"/><link rel="manifest" href="/installer/manifest.json"/><title>React App</title><script defer="defer" src="/installer/static/js/main.443fc15b.js"></script><link href="/installer/static/css/main.cfed29a4.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions static/installer/js/main.443fc15b.js.map

Large diffs are not rendered by default.

1 change: 0 additions & 1 deletion static/installer/js/main.9e0567e8.js.map

This file was deleted.

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions static/installer/static/js/main.443fc15b.js.map

Large diffs are not rendered by default.

1 change: 0 additions & 1 deletion static/installer/static/js/main.9e0567e8.js.map

This file was deleted.

0 comments on commit 9639279

Please sign in to comment.