Fix: per-observer hop resolution for WS live packets too

New packets arriving via WebSocket were only getting global
resolution. Now ambiguous hops in WS batches also get per-observer
server-side resolution before rendering.
This commit is contained in:
you
2026-03-23 00:11:01 +00:00
parent 5149bb3295
commit ca3ba6d04e
2 changed files with 26 additions and 2 deletions
+1 -1
View File
@@ -86,7 +86,7 @@
<script src="hop-display.js?v=1774221932"></script>
<script src="app.js?v=1774126708"></script>
<script src="home.js?v=1774042199"></script>
<script src="packets.js?v=1774224521"></script>
<script src="packets.js?v=1774224661"></script>
<script src="map.js?v=1774220756" onerror="console.error('Failed to load:', this.src)"></script>
<script src="channels.js?v=1774331200" onerror="console.error('Failed to load:', this.src)"></script>
<script src="nodes.js?v=1774221131" onerror="console.error('Failed to load:', this.src)"></script>
+25 -1
View File
@@ -293,7 +293,31 @@
for (const p of filtered) {
try { JSON.parse(p.path_json || '[]').forEach(h => { if (!(h in hopNameCache)) newHops.add(h); }); } catch {}
}
(newHops.size ? resolveHops([...newHops]) : Promise.resolve()).then(() => {
(newHops.size ? resolveHops([...newHops]) : Promise.resolve()).then(async () => {
// Per-observer resolve for ambiguous hops in this batch
const batchByObs = {};
for (const p of filtered) {
if (!p.observer_id) continue;
try {
const path = JSON.parse(p.path_json || '[]');
const ambig = path.filter(h => hopNameCache[h]?.ambiguous && !hopNameCache[h + ':' + p.observer_id]);
if (ambig.length) {
if (!batchByObs[p.observer_id]) batchByObs[p.observer_id] = new Set();
ambig.forEach(h => batchByObs[p.observer_id].add(h));
}
} catch {}
}
await Promise.all(Object.entries(batchByObs).map(async ([obsId, hopsSet]) => {
try {
const result = await api(`/resolve-hops?hops=${[...hopsSet].join(',')}&observer=${obsId}`);
if (result?.resolved) {
for (const [k, v] of Object.entries(result.resolved)) {
hopNameCache[k + ':' + obsId] = v;
}
}
} catch {}
}));
if (groupByHash) {
// Update existing groups or create new ones
for (const p of filtered) {