From 37d023659a51583d105777de1b4bb70a980e3a9c Mon Sep 17 00:00:00 2001 From: Dmitrii Iurco Date: Fri, 1 May 2026 12:25:12 -0400 Subject: [PATCH] fix(ui): parse getPeerStatuses dict response correctly in CellNetwork The /api/wireguard/peers/statuses endpoint returns {pubkey: {online,...}} not {peers: [{public_key,...}]}. The status mapping loop was always producing an empty statusByKey, making every connected cell show Offline. Co-Authored-By: Claude Sonnet 4.6 --- webui/src/pages/CellNetwork.jsx | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/webui/src/pages/CellNetwork.jsx b/webui/src/pages/CellNetwork.jsx index 774eac0..cd2f9f8 100644 --- a/webui/src/pages/CellNetwork.jsx +++ b/webui/src/pages/CellNetwork.jsx @@ -311,9 +311,12 @@ export default function CellNetwork() { try { const { wireguardAPI } = await import('../services/api'); const sr = await wireguardAPI.getPeerStatuses(); - (sr.data?.peers || []).forEach(p => { - if (p.public_key) statusByKey[p.public_key] = p; - }); + // API returns {pubkey: {online, last_handshake, ...}} — no .peers wrapper + const raw = sr.data || {}; + const entries = Array.isArray(raw.peers) + ? raw.peers.map(p => [p.public_key, p]) + : Object.entries(raw); + entries.forEach(([pk, info]) => { if (pk) statusByKey[pk] = info; }); } catch { // Status enrichment is best-effort; continue without it }