diff --git a/server/src/routes/operators.ts b/server/src/routes/operators.ts index e064c88..b3e2928 100644 --- a/server/src/routes/operators.ts +++ b/server/src/routes/operators.ts @@ -81,12 +81,19 @@ export function registerOperatorRoutes( // ---- admin management ---------------------------------------------------- app.get("/api/operators", { preHandler: requireAuth }, async () => { - const rows = db.prepare("SELECT * FROM operators ORDER BY added_at").all() as OperatorRow[]; + // avatar comes along for admins that are accounts on this PDS + const rows = db + .prepare( + `SELECT o.*, a.avatar FROM operators o + LEFT JOIN accounts a ON a.did = o.did ORDER BY o.added_at`, + ) + .all() as (OperatorRow & { avatar: string | null })[]; const count = db.prepare("SELECT COUNT(*) AS n FROM passkeys WHERE operator_did = ?"); return { operators: rows.map((r) => ({ did: r.did, handle: r.handle, + avatar: r.avatar ?? undefined, addedAt: r.added_at, enrolledAt: r.enrolled_at, passkeys: (count.get(r.did) as { n: number }).n, diff --git a/web/src/OperatorsPanel.tsx b/web/src/OperatorsPanel.tsx index 29be52d..d98d348 100644 --- a/web/src/OperatorsPanel.tsx +++ b/web/src/OperatorsPanel.tsx @@ -4,6 +4,7 @@ import { api } from "./api.js"; interface Operator { did: string; handle: string; + avatar?: string; addedAt: number; enrolledAt: number | null; passkeys: number; @@ -65,9 +66,14 @@ export function OperatorsPanel() { )} {operators.map((o) => (