import { RelayContext } from '@lume/shared/relayProvider'; import { DEFAULT_AVATAR, READONLY_RELAYS } from '@lume/stores/constants'; import { onboardingAtom } from '@lume/stores/onboarding'; import { shortenKey } from '@lume/utils/shortenKey'; import { createAccount, createPleb } from '@lume/utils/storage'; import { useAtom } from 'jotai'; import { getPublicKey } from 'nostr-tools'; import { useContext, useMemo, useState } from 'react'; import useSWRSubscription from 'swr/subscription'; import { navigate } from 'vite-plugin-ssr/client/router'; export function Page() { const pool: any = useContext(RelayContext); const [loading, setLoading] = useState(false); const [onboarding, setOnboarding] = useAtom(onboardingAtom); const pubkey = useMemo(() => (onboarding.privkey ? getPublicKey(onboarding.privkey) : ''), [onboarding.privkey]); const { data, error } = useSWRSubscription(pubkey ? pubkey : null, (key, { next }) => { const unsubscribe = pool.subscribe( [ { kinds: [0, 3], authors: [key], }, ], READONLY_RELAYS, (event: any) => { switch (event.kind) { case 0: // update state next(null, JSON.parse(event.content)); // create account setOnboarding((prev) => ({ ...prev, metadata: event.content })); break; case 3: setOnboarding((prev) => ({ ...prev, follows: event.tags })); break; default: break; } } ); return () => { unsubscribe(); }; }); const submit = () => { // show loading indicator setLoading(true); const follows = onboarding.follows.concat([['p', pubkey]]); // insert to database createAccount(pubkey, onboarding.privkey, onboarding.metadata, follows, 1) .then((res) => { if (res) { for (const tag of onboarding.follows) { fetch(`https://us.rbr.bio/${tag[1]}/metadata.json`) .then((data) => data.json()) .then((data) => createPleb(tag[1], data ?? '')); } setTimeout(() => navigate('/', { overwriteLastHistoryEntry: true }), 2000); } else { console.error(); } }) .catch(console.error); }; return (

{loading ? 'Creating...' : 'Continue with'}

{error &&
Failed to load profile
} {!data ? (

) : (
{pubkey}

{data.display_name || data.name}

{data.nip05 || shortenKey(pubkey)}

)}
); }