aboutsummaryrefslogtreecommitdiffstats
path: root/packages/meshbay-hub/src/meshbay_hub/static/platform.js
diff options
context:
space:
mode:
authorChristophe Besson <cbesson@gmail.com>2026-09-05 09:28:03 +0200
committerChristophe Besson <cbesson@gmail.com>2026-09-05 09:28:03 +0200
commit7601991ccb1d75637c055062c38b1852eeef9700 (patch)
tree022d6ce76e632d005417c82e92e0277614a92689 /packages/meshbay-hub/src/meshbay_hub/static/platform.js
parent301c8998bfdcac80ad3302e2d2ebe853e2ea6de1 (diff)
downloadmeshbay-7601991ccb1d75637c055062c38b1852eeef9700.tar.gz
feat(client): a Node-page toggle to switch into/out of service mode
The installer's own mode question is effectively one-shot: customInstall skips it entirely once the firewall rules already exist, for any reason -- and per-user mode sets those up on its own, with no Scheduled Task involved. So declining once (or the rules existing from something unrelated, as happened on a dev machine this session) was a dead end: no reinstall, repair, or uninstall/reinstall cycle could ever bring the question back, since uninstall defaults to leaving both alone. Add the other door in (and out): a checkbox on the Node page, next to the existing per-user autostart toggle, wired main.js -> preload.js -> platform.js -> node-page.js. It runs packaging/win/service-mode.ps1 -- the exact script installer.nsh already runs -- via one Start-Process -Verb RunAs elevation, so the two paths can never disagree about what service mode means. The elevation helper writes a tiny param()-based .ps1 to %TEMP% so the target script path and its arguments bind through real PowerShell parameters instead of nested string-quoting. Also fixes a real pre-existing gap found while checking this: 8 of the 10 locale catalogues (all but en/fr) were missing the autostart/service-mode keys added in an earlier commit this session (b782886) -- test_locales.py's key-set-parity check uses a for-loop with an inline assert, so it stopped at the first mismatch (fr) and never actually reached the other eight. Backfilled all five keys (three pre-existing, two new) in de/es/it/ja/nl/pl/pt-BR/zh-CN. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Diffstat (limited to 'packages/meshbay-hub/src/meshbay_hub/static/platform.js')
-rw-r--r--packages/meshbay-hub/src/meshbay_hub/static/platform.js21
1 files changed, 21 insertions, 0 deletions
diff --git a/packages/meshbay-hub/src/meshbay_hub/static/platform.js b/packages/meshbay-hub/src/meshbay_hub/static/platform.js
index b1025c5..8f5d484 100644
--- a/packages/meshbay-hub/src/meshbay_hub/static/platform.js
+++ b/packages/meshbay-hub/src/meshbay_hub/static/platform.js
@@ -282,6 +282,27 @@ export const node = {
return bridge.node.autostart('remove');
},
},
+ /**
+ * Windows only: switch INTO or OUT OF service mode after install — the
+ * installer's own choice is effectively one-shot (build/installer.nsh skips
+ * it once the firewall rules exist for any reason, and per-user mode sets
+ * those up on its own with no Scheduled Task), so this is the only way back
+ * in if it was declined, or out if it was chosen and no longer wanted. One
+ * elevation, task + firewall together — same script the installer runs.
+ */
+ serviceMode: {
+ available: Boolean(bridge && bridge.node && bridge.node.serviceMode),
+ async install() {
+ if (!bridge || !bridge.node || !bridge.node.serviceMode)
+ throw new Error('Node bridge not available');
+ return bridge.node.serviceMode('install');
+ },
+ async remove() {
+ if (!bridge || !bridge.node || !bridge.node.serviceMode)
+ throw new Error('Node bridge not available');
+ return bridge.node.serviceMode('remove');
+ },
+ },
};
/**