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.
This commit is contained in:
Jeff Emmett 2026-04-16 16:29:32 -04:00
parent 14ffee4101
commit f388812927
1 changed files with 17 additions and 1 deletions

View File

@ -749,11 +749,27 @@ spaces.get("/:slug/members", async (c) => {
return c.json({ error: "Access denied" }, 403); return c.json({ error: "Access denied" }, 403);
} }
const members = Object.values(data.members || {}).map((m) => ({ const rawMembers = Object.values(data.members || {}).map((m) => ({
...m, ...m,
isOwner: m.did === data.meta.ownerDID, 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 }); return c.json({ members });
}); });