From 9f53a059c7a06571d4a1a3c3b01ecb6fb2fa85bf Mon Sep 17 00:00:00 2001 From: you Date: Sat, 21 Mar 2026 05:48:54 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20regional=20filters=20=E2=80=94=20proper?= =?UTF-8?q?=20indexed=20queries=20+=20frontend=20integration?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes Kpa-clawbot/meshcore-analyzer#111 --- server.js | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/server.js b/server.js index bc78cf79..b9dffca1 100644 --- a/server.js +++ b/server.js @@ -1026,15 +1026,17 @@ app.get('/api/nodes', (req, res) => { const regionObsIds = getObserverIdsForRegions(region); let regionNodeKeys = null; if (regionObsIds) { + // Collect all packet hashes seen by regional observers (using byObserver index) + const regionalHashes = new Set(); + for (const obsId of regionObsIds) { + const obs = pktStore.byObserver.get(obsId); + if (obs) for (const o of obs) regionalHashes.add(o.hash); + } + // Find node pubkeys that have at least one packet in the regional set (using _nodeHashIndex) regionNodeKeys = new Set(); - for (const pkt of pktStore.packets) { - if (regionObsIds.has(pkt.observer_id)) { - try { - const d = JSON.parse(pkt.decoded_json || '{}'); - const pk = d.pubKey || d.public_key; - if (pk) regionNodeKeys.add(pk); - if (d.sender_key) regionNodeKeys.add(d.sender_key); - } catch {} + for (const [pubkey, hashes] of pktStore._nodeHashIndex) { + for (const h of hashes) { + if (regionalHashes.has(h)) { regionNodeKeys.add(pubkey); break; } } } }