aboutsummaryrefslogtreecommitdiffstats
path: root/packages/meshbay-node/src/meshbay_node
diff options
context:
space:
mode:
authorChristophe Besson <cbesson@gmail.com>2026-08-11 15:39:09 +0200
committerChristophe Besson <cbesson@gmail.com>2026-08-11 15:39:09 +0200
commit3ee7f817d532208df1d95ecd86def12e5bd53a18 (patch)
tree2778dc1a64220e75662b9aceeafe4e8e384cf06b /packages/meshbay-node/src/meshbay_node
parentcc90dc943fcd0e7bbf52674fb3f95ff097026f4a (diff)
downloadmeshbay-3ee7f817d532208df1d95ecd86def12e5bd53a18.tar.gz
fix(ui): group creation error, chat UUIDs, file preview, action menu
Bug fixes: - Group creation "[object Object]" error: removed dead pkcs8 import code that threw before GEK wrapping, added array detail handling in hubFetch - Chat shows usernames instead of UUIDs (sender_name passed through node) - Join button: navigate to group on "Already a member" instead of error UI improvements: - Loading spinner animation for async states (connecting, fetching) - File action menu (3-dot dropdown: View, Download, Play) - Click filename to preview inline (images, text/code files) - FilePreview overlay for images and text files - Chat file attachment button (upload to node + structured message) - Chat attachment display (icon, filename, size) - Member panel: "Group admin" badge instead of plain "Admin" text Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Diffstat (limited to 'packages/meshbay-node/src/meshbay_node')
-rw-r--r--packages/meshbay-node/src/meshbay_node/transport/webrtc_server.py6
1 files changed, 6 insertions, 0 deletions
diff --git a/packages/meshbay-node/src/meshbay_node/transport/webrtc_server.py b/packages/meshbay-node/src/meshbay_node/transport/webrtc_server.py
index 94d9b04..07ceed3 100644
--- a/packages/meshbay-node/src/meshbay_node/transport/webrtc_server.py
+++ b/packages/meshbay-node/src/meshbay_node/transport/webrtc_server.py
@@ -266,6 +266,9 @@ class WebRTCPeerSession:
def _do_chat_message(self, msg: dict) -> None:
chat_store = self._ctx.get("chat_store")
payload = msg.get("payload", "")
+ sender_name = msg.get("sender_name", "")
+ if sender_name:
+ self._ctx.setdefault("_user_names", {})[self._user_id] = sender_name
if chat_store:
raw = payload.encode() if isinstance(payload, str) else payload
asyncio.ensure_future(chat_store.save_message(
@@ -280,6 +283,7 @@ class WebRTCPeerSession:
"type": MNP.CHAT_MESSAGE,
"v": MNP_VERSION,
"sender_id": msg.get("sender_id", self._user_id),
+ "sender_name": sender_name,
"payload": payload,
"thread_id": msg.get("thread_id"),
"timestamp": __import__("time").time(),
@@ -309,6 +313,7 @@ class WebRTCPeerSession:
async def _send_chat_history(self, chat_store, since: float, limit: int) -> None:
msgs = await chat_store.get_messages(since=since, limit=limit)
+ names = self._ctx.get("_user_names", {})
self._send({
"type": MNP.CHAT_HISTORY_RESPONSE,
"v": MNP_VERSION,
@@ -316,6 +321,7 @@ class WebRTCPeerSession:
{
"id": m.id,
"sender_id": m.sender_id,
+ "sender_name": names.get(m.sender_id, ""),
"payload": m.payload.decode("utf-8", errors="replace")
if isinstance(m.payload, bytes) else m.payload,
"timestamp": m.timestamp,