import { useMemo, useState } from "react"; import { FormattedMessage } from "react-intl"; import { unixNowMs } from "@snort/shared"; import { randomSample } from "SnortUtils"; import Relay from "Element/Relay"; import useEventPublisher from "Feed/EventPublisher"; import { System } from "index"; import useLogin from "Hooks/useLogin"; import { setRelays } from "Login"; import messages from "./messages"; const RelaySettingsPage = () => { const publisher = useEventPublisher(); const login = useLogin(); const relays = login.relays; const [newRelay, setNewRelay] = useState(); const otherConnections = useMemo(() => { return System.Sockets.filter(a => relays.item[a.address] === undefined); }, [relays]); async function saveRelays() { if (publisher) { const ev = await publisher.contactList(login.follows.item, login.relays.item); System.BroadcastEvent(ev); try { const onlineRelays = await fetch("https://api.nostr.watch/v1/online").then(r => r.json()); const relayList = await publisher.relayList(login.relays.item); const rs = Object.keys(relays.item).concat(randomSample(onlineRelays, 20)); rs.forEach(r => { System.WriteOnceToRelay(r, relayList); }); } catch (error) { console.error(error); } } } const handleNewRelayChange = (event: React.ChangeEvent) => { const inputValue = event.target.value; const protocol = window.location.protocol; if ((protocol === "https:" && inputValue.startsWith("wss://")) || protocol === "http:") { setNewRelay(inputValue); } }; function addRelay() { return ( <>

); } function addNewRelay() { if ((newRelay?.length ?? 0) > 0) { const parsed = new URL(newRelay ?? ""); const payload = { ...relays.item, [parsed.toString()]: { read: true, write: true }, }; setRelays(login, payload, unixNowMs()); } } return ( <>

{Object.keys(relays.item || {}).map(a => ( ))}
{addRelay()}

{otherConnections.map(a => ( ))}
); }; export default RelaySettingsPage;