Use priority relays if configured

This commit is contained in:
Bojan Mojsilovic 2023-07-20 17:48:07 +02:00
parent 407dc83e2c
commit 5e59f7b699
4 changed files with 26 additions and 12 deletions

1
.env Normal file
View File

@ -0,0 +1 @@
PRIMAL_PRIORITY_RELAYS = "wss://relay.primal.net"

View File

@ -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(() => {

View File

@ -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 } }),
{},
);
};

View File

@ -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();
}