From 5e59f7b699a5006c8adbed16d42b76909f80b6bc Mon Sep 17 00:00:00 2001 From: Bojan Mojsilovic Date: Thu, 20 Jul 2023 17:48:07 +0200 Subject: [PATCH] Use priority relays if configured --- .env | 1 + src/contexts/AccountContext.tsx | 23 +++++++++++++++-------- src/lib/relays.ts | 10 ++++++++++ src/utils.ts | 4 ---- 4 files changed, 26 insertions(+), 12 deletions(-) create mode 100644 .env diff --git a/.env b/.env new file mode 100644 index 0000000..4e75ab0 --- /dev/null +++ b/.env @@ -0,0 +1 @@ +PRIMAL_PRIORITY_RELAYS = "wss://relay.primal.net" diff --git a/src/contexts/AccountContext.tsx b/src/contexts/AccountContext.tsx index 8cc049c..1d8f75a 100644 --- a/src/contexts/AccountContext.tsx +++ b/src/contexts/AccountContext.tsx @@ -16,7 +16,7 @@ import { PrimalNote, PrimalUser, } from '../types/primal'; -import { Kind } from "../constants"; +import { Kind, relayConnectingTimeout } from "../constants"; import { isConnected, refreshSocketListeners, removeSocketListeners, socket, subscribeTo } from "../sockets"; import { sendContacts, sendLike } from "../lib/notes"; // @ts-ignore Bad types in nostr-tools @@ -24,7 +24,7 @@ import { Relay } from "nostr-tools"; import { APP_ID } from "../App"; import { getLikes, getProfileContactList, getUserProfiles } from "../lib/profile"; import { getStorage, saveFollowing, saveLikes, saveRelaySettings } from "../lib/localStore"; -import { closeRelays, connectRelays } from "../lib/relays"; +import { closeRelays, connectRelays, getPreConfiguredRelays } from "../lib/relays"; export type AccountContextStore = { likes: string[], @@ -79,24 +79,33 @@ export function AccountProvider(props: { children: number | boolean | Node | JSX saveRelaySettings(store.publicKey, settings) } + const attachDefaultRelays = (relaySettings: NostrRelays) => { + const defaultRelays = getPreConfiguredRelays(); + + return { ...relaySettings, ...defaultRelays }; + + }; + let connecting = false; const connectToRelays = (relaySettings: NostrRelays) => { if (connecting) { + setTimeout(() => { connectToRelays(relaySettings) }, relayConnectingTimeout); return; } - connecting = true; + connecting = true + + const relaysToConnect = attachDefaultRelays(relaySettings); closeRelays(store.relays, () => { - connectRelays(relaySettings, (connected) => { + connectRelays(relaysToConnect, (connected) => { updateStore('relays', () => [ ...connected ]); console.log('Connected relays: ', connected); connecting = false; }); - }, () => { console.log('Failed to close all relays'); @@ -329,9 +338,7 @@ export function AccountProvider(props: { children: number | boolean | Node | JSX }); createEffect(() => { - if (Object.keys(store.relaySettings).length > 0) { - connectToRelays(store.relaySettings); - } + connectToRelays(store.relaySettings); }); onCleanup(() => { diff --git a/src/lib/relays.ts b/src/lib/relays.ts index 58e6d65..d3eb832 100644 --- a/src/lib/relays.ts +++ b/src/lib/relays.ts @@ -83,3 +83,13 @@ export const connectRelays = async ( onConnect(connected); }; + +export const getPreConfiguredRelays = () => { + const rels: string[] = import.meta.env.PRIMAL_PRIORITY_RELAYS?.split(',') || []; + + return rels.reduce( + (acc: NostrRelays, r: string) => + ({ ...acc, [r]: { read: true, write: true } }), + {}, + ); +}; diff --git a/src/utils.ts b/src/utils.ts index e298ec3..0a52ea2 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -22,10 +22,6 @@ export const uuidv4 = () => { ); } -export const getPreConfiguredRelays = () => { - return 'ws://relay.primal.net'; -}; - export const titleCase = (text: string) => { return text[0].toUpperCase() + text.slice(1).toLowerCase(); }