import BaseLayout from '@layouts/base'; import { RelayContext } from '@components/relaysProvider'; import { createAccount } from '@utils/storage'; import { ArrowLeftIcon, EyeClosedIcon, EyeOpenIcon } from '@radix-ui/react-icons'; import Image from 'next/image'; import { useRouter } from 'next/router'; import { generatePrivateKey, getEventHash, getPublicKey, nip19, signEvent } from 'nostr-tools'; import { JSXElementConstructor, ReactElement, ReactFragment, ReactPortal, useContext, useMemo, useState } from 'react'; import { Config, names, uniqueNamesGenerator } from 'unique-names-generator'; const config: Config = { dictionaries: [names], }; export default function Page() { const router = useRouter(); const [pool, relays]: any = useContext(RelayContext); const [type, setType] = useState('password'); const [loading, setLoading] = useState(false); const [privKey] = useState(() => generatePrivateKey()); const [name] = useState(() => uniqueNamesGenerator(config).toString()); const pubKey = getPublicKey(privKey); const npub = nip19.npubEncode(pubKey); const nsec = nip19.nsecEncode(privKey); const goBack = () => { router.back(); }; // auto-generated profile metadata const metadata = useMemo( () => ({ display_name: name, name: name, username: name.toLowerCase(), picture: 'https://void.cat/d/KmypFh2fBdYCEvyJrPiN89', }), [name] ); // build profile const data = useMemo( () => ({ pubkey: pubKey, privkey: privKey, npub: npub, nsec: nsec, metadata: metadata, }), [metadata, npub, nsec, privKey, pubKey] ); // toggle privatek key const showPrivateKey = () => { if (type === 'password') { setType('text'); } else { setType('password'); } }; // create account and broadcast to all relays const submit = () => { setLoading(true); // build event const event: any = { content: JSON.stringify(metadata), created_at: Math.floor(Date.now() / 1000), kind: 0, pubkey: pubKey, tags: [], }; event.id = getEventHash(event); event.sig = signEvent(event, privKey); // insert to database then broadcast createAccount(data) .then(() => { pool.publish(event, relays); router.push({ pathname: '/onboarding/create/step-2', query: { id: pubKey, privkey: privKey }, }); }) .catch(console.error); }; return (
{metadata.display_name}
@{metadata.username}