From 17cfa887fb902434e1f1ce63f2eea760b81aeaae Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 15 Jan 2026 15:17:45 +0000 Subject: [PATCH] Add relay hints when opening file events for download Pass relay hints from the release event's seen relays when opening file metadata events (kind 1063) for download. This ensures the event loader knows where to fetch the file event from. Also adds relay hints to the ReleaseItem component for both opening the release detail and the download file. --- .../nostr/kinds/ZapstoreAppDetailRenderer.tsx | 23 ++++++++++++++++--- .../nostr/kinds/ZapstoreAppRenderer.tsx | 12 ++++++++-- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/src/components/nostr/kinds/ZapstoreAppDetailRenderer.tsx b/src/components/nostr/kinds/ZapstoreAppDetailRenderer.tsx index 93b4e2b..5b66c5d 100644 --- a/src/components/nostr/kinds/ZapstoreAppDetailRenderer.tsx +++ b/src/components/nostr/kinds/ZapstoreAppDetailRenderer.tsx @@ -44,12 +44,19 @@ function ReleaseItem({ release }: { release: NostrEvent }) { const version = getReleaseVersion(release); const fileEventId = getReleaseFileEventId(release); + // Get relay hints from the release event + const releaseSeenRelays = getSeenRelays(release); + const relayHints = releaseSeenRelays + ? Array.from(releaseSeenRelays).slice(0, 3) + : []; + const handleClick = () => { addWindow("open", { pointer: { kind: release.kind, pubkey: release.pubkey, identifier: release.tags.find((t) => t[0] === "d")?.[1] || "", + relays: relayHints, }, }); }; @@ -57,7 +64,9 @@ function ReleaseItem({ release }: { release: NostrEvent }) { const handleDownload = (e: React.MouseEvent) => { e.stopPropagation(); if (fileEventId) { - addWindow("open", { pointer: { id: fileEventId } }); + addWindow("open", { + pointer: { id: fileEventId, relays: relayHints }, + }); } }; @@ -231,8 +240,16 @@ export function ZapstoreAppDetailRenderer({ const latestVersion = latestRelease ? getReleaseVersion(latestRelease) : null; const handleDownloadLatest = () => { - if (latestFileEventId) { - addWindow("open", { pointer: { id: latestFileEventId } }); + if (latestFileEventId && latestRelease) { + // Get relay hints from the release event (where we found it) + const releaseSeenRelays = getSeenRelays(latestRelease); + const relayHints = releaseSeenRelays + ? Array.from(releaseSeenRelays).slice(0, 3) + : relays.slice(0, 3); + + addWindow("open", { + pointer: { id: latestFileEventId, relays: relayHints }, + }); } }; diff --git a/src/components/nostr/kinds/ZapstoreAppRenderer.tsx b/src/components/nostr/kinds/ZapstoreAppRenderer.tsx index 3b34863..dcfccf3 100644 --- a/src/components/nostr/kinds/ZapstoreAppRenderer.tsx +++ b/src/components/nostr/kinds/ZapstoreAppRenderer.tsx @@ -101,8 +101,16 @@ export function ZapstoreAppRenderer({ event }: BaseEventProps) { const handleDownload = (e: React.MouseEvent) => { e.stopPropagation(); - if (latestFileEventId) { - addWindow("open", { pointer: { id: latestFileEventId } }); + if (latestFileEventId && latestRelease) { + // Get relay hints from the release event (where we found it) + const releaseSeenRelays = getSeenRelays(latestRelease); + const relayHints = releaseSeenRelays + ? Array.from(releaseSeenRelays).slice(0, 3) + : relays.slice(0, 3); + + addWindow("open", { + pointer: { id: latestFileEventId, relays: relayHints }, + }); } };