summaryrefslogtreecommitdiffstats
path: root/packages/meshbay-client
diff options
context:
space:
mode:
Diffstat (limited to 'packages/meshbay-client')
-rw-r--r--packages/meshbay-client/src/main.js25
1 files changed, 17 insertions, 8 deletions
diff --git a/packages/meshbay-client/src/main.js b/packages/meshbay-client/src/main.js
index 8dcc2ae..bfa9b48 100644
--- a/packages/meshbay-client/src/main.js
+++ b/packages/meshbay-client/src/main.js
@@ -714,15 +714,28 @@ function registerBridge() {
}
});
+ function findNodeBinary() {
+ const local = path.join(os.homedir(), '.local', 'bin', 'meshbay-node');
+ if (fs.existsSync(local)) return local;
+ return new Promise((resolve) => {
+ execFile('which', ['meshbay-node'], (err, stdout) => {
+ resolve(err ? null : stdout.trim());
+ });
+ });
+ }
+
ipcMain.handle('node:installed', async () => {
if (process.platform !== 'linux') return { installed: false };
- return new Promise((resolve) => {
+ const unit = await new Promise((resolve) => {
execFile('systemctl', ['--user', 'show', 'meshbay-node.service',
'--property=LoadState'], (err, stdout) => {
- if (err) return resolve({ installed: false });
- resolve({ installed: stdout.trim() === 'LoadState=loaded' });
+ if (err) return resolve(false);
+ resolve(stdout.trim() === 'LoadState=loaded');
});
});
+ if (unit) return { installed: true };
+ const bin = await findNodeBinary();
+ return { installed: Boolean(bin) };
});
async function probeNode() {
@@ -826,11 +839,7 @@ function registerBridge() {
// Fallback: start the binary directly (dev mode, or no unit installed).
if (!launched) {
- const binPath = await new Promise((resolve) => {
- execFile('which', ['meshbay-node'], (err, stdout) => {
- resolve(err ? null : stdout.trim());
- });
- });
+ const binPath = await findNodeBinary();
if (!binPath) {
throw new Error(
'meshbay-node is not installed');