From d49a3e800f273c6bc189e9641165991e0437530e Mon Sep 17 00:00:00 2001 From: Laan Tungir Date: Fri, 26 Jun 2026 10:11:55 -0400 Subject: [PATCH] Add debug logging to getDiscoveredRelays handler to diagnose why Serving/Sample Follows columns are empty --- www/js/version.json | 6 +++--- www/ndk-worker.js | 34 ++++++++++++++++++++++++++++++++-- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/www/js/version.json b/www/js/version.json index c5c450f..2f3dca6 100644 --- a/www/js/version.json +++ b/www/js/version.json @@ -1,5 +1,5 @@ { - "VERSION": "v0.7.45", - "VERSION_NUMBER": "0.7.45", - "BUILD_DATE": "2026-06-26T14:08:13.927Z" + "VERSION": "v0.7.46", + "VERSION_NUMBER": "0.7.46", + "BUILD_DATE": "2026-06-26T14:11:55.621Z" } diff --git a/www/ndk-worker.js b/www/ndk-worker.js index 2af225f..a66948c 100644 --- a/www/ndk-worker.js +++ b/www/ndk-worker.js @@ -6470,11 +6470,22 @@ async function handleGetDiscoveredRelays(requestId, port) { try { const trackerData = ndk?.outboxTracker?.data; if (trackerData) { + // Debug: log what the LRU cache looks like + const trackerKeys = typeof trackerData.keys === 'function' ? Array.from(trackerData.keys()) : + (trackerData instanceof Map ? Array.from(trackerData.keys()) : []); + console.log('[Worker] getDiscoveredRelays: tracker has', trackerKeys.length, 'entries'); + + let pubkeysProcessed = 0; + let pubkeysWithWriteRelays = 0; + const collectForPubkey = (pubkey) => { + pubkeysProcessed++; try { const outboxItem = trackerData.get(pubkey); - const writeRelays = outboxItem?.writeRelays; - if (!writeRelays) return; + if (!outboxItem) return; + const writeRelays = outboxItem.writeRelays; + if (!writeRelays || writeRelays.size === 0) return; + pubkeysWithWriteRelays++; for (const r of writeRelays) { const rUrl = r?.url ? normalizeRelayUrl(r.url) : (typeof r === 'string' ? normalizeRelayUrl(r) : null); if (!rUrl) continue; @@ -6516,7 +6527,26 @@ async function handleGetDiscoveredRelays(requestId, port) { for (const pubkey of trackerData.keys()) { collectForPubkey(pubkey); } + iterated = true; } + + // Strategy 4: try internal storage if LRU cache has it + if (!iterated) { + try { + // Some LRU caches store entries in an internal Map or object + const internal = trackerData._map || trackerData.cache || trackerData._cache; + if (internal instanceof Map) { + for (const [pubkey] of internal) { + collectForPubkey(pubkey); + } + iterated = true; + } + } catch (_) {} + } + + console.log('[Worker] getDiscoveredRelays: processed', pubkeysProcessed, 'pubkeys,', pubkeysWithWriteRelays, 'with write relays, iterated:', iterated, ', relayServesPubkeys size:', relayServesPubkeys.size); + } else { + console.log('[Worker] getDiscoveredRelays: no outbox tracker data available'); } } catch (err) { console.warn('[Worker] getDiscoveredRelays: outbox tracker inversion failed:', err?.message || err);