From 2fc4719b8a8e8cd1bab25625c462e5b6426ae5c6 Mon Sep 17 00:00:00 2001 From: Sam Samskies Date: Mon, 20 Feb 2023 11:44:24 -0600 Subject: [PATCH 1/6] ignore WebStore configs --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index c2658d7d..9cf6fffa 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ node_modules/ +.idea From 32c2e663a9ec94aa1b33e2bd8839603de8baceeb Mon Sep 17 00:00:00 2001 From: Sam Samskies Date: Mon, 20 Feb 2023 14:22:07 -0600 Subject: [PATCH 2/6] 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 d5ad641c..4a77f2d8 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 2394b9a3..3592324d 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() { From eddba6257516ac6ff87061261950bbe67190867e Mon Sep 17 00:00:00 2001 From: Sam Samskies Date: Mon, 20 Feb 2023 15:42:48 -0600 Subject: [PATCH 3/6] Revert "fix stale relays bug" This reverts commit 32c2e663a9ec94aa1b33e2bd8839603de8baceeb. --- packages/app/src/Feed/EventPublisher.ts | 21 ++++++++------- packages/app/src/Pages/settings/Relays.tsx | 30 +++++----------------- 2 files changed, 19 insertions(+), 32 deletions(-) diff --git a/packages/app/src/Feed/EventPublisher.ts b/packages/app/src/Feed/EventPublisher.ts index 4a77f2d8..d5ad641c 100644 --- a/packages/app/src/Feed/EventPublisher.ts +++ b/packages/app/src/Feed/EventPublisher.ts @@ -116,15 +116,6 @@ 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); @@ -260,6 +251,18 @@ 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 3592324d..2394b9a3 100644 --- a/packages/app/src/Pages/settings/Relays.tsx +++ b/packages/app/src/Pages/settings/Relays.tsx @@ -18,33 +18,17 @@ const RelaySettingsPage = () => { const [newRelay, setNewRelay] = useState(); async function saveRelays() { - const updatedRelaysEvent = await publisher.saveRelaysSettings(); - let wasBlastrBrodcastSuccessful: boolean; - + const ev = await publisher.saveRelays(); + publisher.broadcast(ev); + publisher.broadcastForBootstrap(ev); try { - publisher.broadcast(updatedRelaysEvent); - publisher.broadcastForBootstrap(updatedRelaysEvent); + 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); } 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() { From 6254149c2a9d3b33838a6dfd2563a87daaa4adf7 Mon Sep 17 00:00:00 2001 From: Sam Samskies Date: Mon, 20 Feb 2023 16:52:03 -0600 Subject: [PATCH 4/6] fix stale relays bug Pulling data from kind 3 event instead of kind 65 since it's more widely supported. Also, turned off the cache to try to ensure that most recent relay data is displayed. --- packages/app/src/Feed/RelaysFeed.tsx | 37 +++++++++++++--------------- 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/packages/app/src/Feed/RelaysFeed.tsx b/packages/app/src/Feed/RelaysFeed.tsx index a54e7c43..26171c89 100644 --- a/packages/app/src/Feed/RelaysFeed.tsx +++ b/packages/app/src/Feed/RelaysFeed.tsx @@ -7,29 +7,26 @@ export default function useRelaysFeed(pubkey: HexKey) { const sub = useMemo(() => { const x = new Subscriptions(); x.Id = `relays:${pubkey.slice(0, 12)}`; - x.Kinds = new Set([EventKind.Relays]); + x.Kinds = new Set([EventKind.ContactList]); x.Authors = new Set([pubkey]); x.Limit = 1; return x; }, [pubkey]); - const relays = useSubscription(sub, { leaveOpen: false, cache: true }); - const notes = relays.store.notes; - const tags = notes.slice(-1)[0]?.tags || []; - return tags.reduce((rs, tag) => { - const [t, url, ...settings] = tag; - if (t === "r") { - return [ - ...rs, - { - url, - settings: { - read: settings.length === 0 || settings.includes("read"), - write: settings.length === 0 || settings.includes("write"), - }, - }, - ]; - } - return rs; - }, [] as FullRelaySettings[]); + const relays = useSubscription(sub, { leaveOpen: false, cache: false }); + const eventContent = relays.store.notes[0]?.content; + + if (!eventContent) { + return [] as FullRelaySettings[]; + } + + try { + return Object.entries(JSON.parse(eventContent)).map(([url, settings]) => ({ + url, + settings, + })) as FullRelaySettings[]; + } catch (error) { + console.error(error); + return [] as FullRelaySettings[]; + } } From 7b3092edec4b199a4457046ee03025951cfdb2c8 Mon Sep 17 00:00:00 2001 From: Sam Samskies Date: Mon, 20 Feb 2023 16:53:08 -0600 Subject: [PATCH 5/6] add missing keys --- packages/app/src/Element/RelaysMetadata.tsx | 2 +- packages/app/src/Pages/settings/RelayInfo.tsx | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/app/src/Element/RelaysMetadata.tsx b/packages/app/src/Element/RelaysMetadata.tsx index 91b59810..313bb13b 100644 --- a/packages/app/src/Element/RelaysMetadata.tsx +++ b/packages/app/src/Element/RelaysMetadata.tsx @@ -24,7 +24,7 @@ const RelaysMetadata = ({ relays }: RelaysMetadataProps) => {
{relays?.map(({ url, settings }) => { return ( -
+
{url}
diff --git a/packages/app/src/Pages/settings/RelayInfo.tsx b/packages/app/src/Pages/settings/RelayInfo.tsx index d17bd0c4..d8a0d26c 100644 --- a/packages/app/src/Pages/settings/RelayInfo.tsx +++ b/packages/app/src/Pages/settings/RelayInfo.tsx @@ -76,6 +76,7 @@ const RelayInfo = () => {
{stats.info.supported_nips.map(a => ( navigate(`https://github.com/nostr-protocol/nips/blob/master/${a.toString().padStart(2, "0")}.md`) From 28ced65b2ebe322b2ff3959123f419e91b813486 Mon Sep 17 00:00:00 2001 From: Sam Samskies Date: Mon, 20 Feb 2023 16:55:01 -0600 Subject: [PATCH 6/6] add missing alt attribute --- packages/app/src/Element/RelaysMetadata.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/app/src/Element/RelaysMetadata.tsx b/packages/app/src/Element/RelaysMetadata.tsx index 313bb13b..6e632794 100644 --- a/packages/app/src/Element/RelaysMetadata.tsx +++ b/packages/app/src/Element/RelaysMetadata.tsx @@ -12,7 +12,9 @@ const RelayFavicon = ({ url }: { url: string }) => { .replace(/^ws:\/\//, "http://") .replace(/\/$/, ""); const [faviconUrl, setFaviconUrl] = useState(`${cleanUrl}/favicon.ico`); - return setFaviconUrl(Nostrich)} />; + return ( + setFaviconUrl(Nostrich)} alt={`favicon for ${url}`} /> + ); }; interface RelaysMetadataProps {