diff options
| author | Christophe Besson <cbesson@gmail.com> | 2026-08-20 08:56:23 +0200 |
|---|---|---|
| committer | Christophe Besson <cbesson@gmail.com> | 2026-08-20 08:56:23 +0200 |
| commit | c8af746c846b5dbc792f7e4f0d806647d513cc5c (patch) | |
| tree | 56c54ec5c703ec042589697b22b53e42451a61e4 /packages/meshbay-hub/src/meshbay_hub/static/locales | |
| parent | 90c3c6a01f46c9b29c5d92702d7383f32e8951d7 (diff) | |
| download | meshbay-c8af746c846b5dbc792f7e4f0d806647d513cc5c.tar.gz | |
feat(node): full Node admin panel — CLI parity, hot-reload, group lifecycle
Node admin panel (NodePage) now covers every CLI operation over MNP:
group attach/detach, roster, member unpin, GEK rotate, denylist, reload.
Daemon hot-loads new groups and tears down removed ones on config reload
instead of requiring a full restart. Group attach/detach via MNP or
local API triggers an automatic reload so the group is live immediately.
Fixed GroupPage hang on first visit to a newly created group: the JWT
issued at login didn't include the new group, the node rejected with
not_a_member, and the token-refresh path returned without re-triggering
the connect effect (Boolean(token) didn't change). Now bumps retryKey
after a successful refresh so the effect re-runs with the fresh token.
NodePage marks groups hosted by the node but absent from the hub with a
"not on hub" badge so stale groups are visible and easy to remove.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Diffstat (limited to 'packages/meshbay-hub/src/meshbay_hub/static/locales')
| -rw-r--r-- | packages/meshbay-hub/src/meshbay_hub/static/locales/en.js | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/packages/meshbay-hub/src/meshbay_hub/static/locales/en.js b/packages/meshbay-hub/src/meshbay_hub/static/locales/en.js index cb4b349..4193f00 100644 --- a/packages/meshbay-hub/src/meshbay_hub/static/locales/en.js +++ b/packages/meshbay-hub/src/meshbay_hub/static/locales/en.js @@ -442,6 +442,63 @@ export default { 'group.leave_confirm': 'Leave “{name}”? You will lose access to its files and chat. Files you uploaded stay on the node, and the node keeps the identity it pinned for you until its operator removes it.', 'group.mute': 'Mute notifications', 'group.unmute': 'Unmute notifications', + 'group.retry': 'Retry', 'profile.title': 'Profile', 'usermenu.profile': 'Profile', + + // Node management (D5) + 'sidebar.node': 'Node', + 'node.title': 'Node', + 'node.offline': 'Node is offline', + 'node.no_groups': 'No groups configured on this node.', + 'node.retry': 'Retry', + 'node.files': { one: '1 file', other: '{n} files' }, + 'node.peers': { one: '1 peer', other: '{n} peers' }, + 'node.no_gek': 'No group key', + 'node.roots': 'Directories', + 'node.upload_root': 'uploads', + 'node.unavailable': 'unavailable', + 'node.add_root': 'Add directory', + 'node.remove_root': 'Remove', + 'node.root_added': 'Directory added.', + 'node.root_removed': 'Directory removed. Restart recommended to update the index.', + 'node.root_remove_confirm': 'Remove "{name}" from this group?', + 'node.not_operator': 'Could not reach your node. Make sure it is running.', + 'node.gek': 'Group key', + 'node.gek_rotate': 'Rotate group key', + 'node.gek_rotate_confirm': 'Rotate the group key? Connected members will receive the new key automatically. Content already downloaded is unaffected.', + 'node.gek_rotated': 'Group key rotated.', + 'node.gek_init_hint': 'No group key yet. Run GEK init from the CLI to set one up.', + 'node.roster': 'Roster', + 'node.roster_load': 'Load roster', + 'node.roster_empty': 'No members pinned yet.', + 'node.roster_user': 'User', + 'node.roster_role': 'Role', + 'node.roster_status': 'Status', + 'node.roster_via': 'Pinned via', + 'node.roster_invites': { one: '1 pending invite', other: '{n} pending invites' }, + 'node.unpin': 'Unpin', + 'node.unpin_confirm': 'Unpin "{name}"? They will need to pair again.', + 'node.unpin_done': 'Identity unpinned.', + 'node.denylist': 'Denylist', + 'node.denylist_load': 'Load denylist', + 'node.denylist_empty': 'Denylist is empty.', + 'node.denylist_count': { one: '1 entry', other: '{n} entries' }, + 'node.denylist_remove': 'Remove', + 'node.denylist_clear_all': 'Clear all', + 'node.denylist_clear_confirm': 'Remove "{subject}" from the denylist?', + 'node.denylist_cleared': 'Denylist entry removed.', + 'node.reload': 'Reload config', + 'node.reloaded': 'Config reloaded. Root changes on existing groups are now active.', + 'node.attach_group': 'Add group', + 'node.attach_pick': 'Group to host', + 'node.attach_dir': 'Shared directory', + 'node.attach_upload_label': 'Upload directory (for file uploads and chat attachments)', + 'node.attach_upload_dir': 'Upload directory', + 'node.attached': 'Group added and loaded. Run meshbay-node gek-init --group {name} if not done yet.', + 'node.restart_needed': 'After adding: initialise the group key (meshbay-node gek-init --group <name>).', + 'node.detach_group': 'Remove group', + 'node.detach_confirm': 'Remove "{name}" from this node?', + 'node.detached': 'Group removed.', + 'node.stale': 'not on hub', }; |