From f388812927e92e209ef3902cb1a43b10c5db882c Mon Sep 17 00:00:00 2001 From: Jeff Emmett Date: Thu, 16 Apr 2026 16:29:32 -0400 Subject: [PATCH] fix(spaces): show username instead of truncated DID in members list GET /api/spaces/:slug/members now enriches entries missing displayName by looking up the username from EncryptID (/api/internal/user-email). Old member records (particularly owners created before displayName was passed to setMember) were showing as 'jAV6y4tg8UbKJEkN0npv...' in the space settings Members tab. --- server/spaces.ts | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/server/spaces.ts b/server/spaces.ts index 17c8b6ed..a1dbc8be 100644 --- a/server/spaces.ts +++ b/server/spaces.ts @@ -749,11 +749,27 @@ spaces.get("/:slug/members", async (c) => { return c.json({ error: "Access denied" }, 403); } - const members = Object.values(data.members || {}).map((m) => ({ + const rawMembers = Object.values(data.members || {}).map((m) => ({ ...m, isOwner: m.did === data.meta.ownerDID, })); + // Enrich members missing displayName by looking up username from EncryptID. + // Historical records (esp. owners) didn't store it; without this the UI falls + // back to a truncated DID. + const members = await Promise.all(rawMembers.map(async (m) => { + if (m.displayName) return m; + try { + const r = await fetch(`${ENCRYPTID_URL}/api/internal/user-email/${encodeURIComponent(m.did)}`); + if (!r.ok) return m; + const info = await r.json() as { username?: string | null; displayName?: string | null }; + const name = info.displayName || info.username; + return name ? { ...m, displayName: name } : m; + } catch { + return m; + } + })); + return c.json({ members }); });