From 32c2e663a9ec94aa1b33e2bd8839603de8baceeb Mon Sep 17 00:00:00 2001 From: Sam Samskies Date: Mon, 20 Feb 2023 14:22:07 -0600 Subject: [PATCH] fix stale relays bug Also, attempts to send updated relays to all online relays using Blastr. If that fails, it falls back to broadcasting to 20 random online relays. --- packages/app/src/Feed/EventPublisher.ts | 21 +++++++-------- packages/app/src/Pages/settings/Relays.tsx | 30 +++++++++++++++++----- 2 files changed, 32 insertions(+), 19 deletions(-) diff --git a/packages/app/src/Feed/EventPublisher.ts b/packages/app/src/Feed/EventPublisher.ts index d5ad641..4a77f2d 100644 --- a/packages/app/src/Feed/EventPublisher.ts +++ b/packages/app/src/Feed/EventPublisher.ts @@ -116,6 +116,15 @@ export default function useEventPublisher() { } } }, + /** + * Write to every online relay using Blastr. + * https://github.com/MutinyWallet/blastr + */ + broadcastWithBlastr: (ev: NEvent | undefined) => { + if (ev) { + System.WriteOnceToRelay("wss://nostr.mutinywallet.com", ev); + } + }, muted: async (keys: HexKey[], priv: HexKey[]) => { if (pubKey) { const ev = NEvent.ForPubKey(pubKey); @@ -251,18 +260,6 @@ export default function useEventPublisher() { return await signEvent(ev); } }, - saveRelays: async () => { - if (pubKey) { - const ev = NEvent.ForPubKey(pubKey); - ev.Kind = EventKind.ContactList; - ev.Content = JSON.stringify(relays); - for (const pk of follows) { - ev.Tags.push(new Tag(["p", pk], ev.Tags.length)); - } - - return await signEvent(ev); - } - }, saveRelaysSettings: async () => { if (pubKey) { const ev = NEvent.ForPubKey(pubKey); diff --git a/packages/app/src/Pages/settings/Relays.tsx b/packages/app/src/Pages/settings/Relays.tsx index 2394b9a..3592324 100644 --- a/packages/app/src/Pages/settings/Relays.tsx +++ b/packages/app/src/Pages/settings/Relays.tsx @@ -18,17 +18,33 @@ const RelaySettingsPage = () => { const [newRelay, setNewRelay] = useState(); async function saveRelays() { - const ev = await publisher.saveRelays(); - publisher.broadcast(ev); - publisher.broadcastForBootstrap(ev); + const updatedRelaysEvent = await publisher.saveRelaysSettings(); + let wasBlastrBrodcastSuccessful: boolean; + try { - const onlineRelays = await fetch("https://api.nostr.watch/v1/online").then(r => r.json()); - const settingsEv = await publisher.saveRelaysSettings(); - const rs = Object.keys(relays).concat(randomSample(onlineRelays, 20)); - publisher.broadcastAll(settingsEv, rs); + publisher.broadcast(updatedRelaysEvent); + publisher.broadcastForBootstrap(updatedRelaysEvent); } catch (error) { console.error(error); } + + try { + publisher.broadcastWithBlastr(updatedRelaysEvent); + wasBlastrBrodcastSuccessful = true; + } catch (error) { + console.error(error); + wasBlastrBrodcastSuccessful = false; + } + + if (!wasBlastrBrodcastSuccessful) { + try { + const onlineRelays = await fetch("https://api.nostr.watch/v1/online").then(r => r.json()); + const rs = Object.keys(relays).concat(randomSample(onlineRelays, 20)); + publisher.broadcastAll(updatedRelaysEvent, rs); + } catch (error) { + console.error(error); + } + } } function addRelay() {