import { EventPublisher, Nip46Signer, Nip7Signer, PrivateKeySigner, } from "@snort/system"; import { AsyncButton } from "../components/button"; import { useContext, useState } from "react"; import { bech32ToHex, hexToBech32 } from "@snort/shared"; import { openFile } from "../utils"; import { SnortContext } from "@snort/system-react"; import { Blossom } from "../blossom"; import { useNavigate } from "react-router-dom"; import { LoginState } from "../login"; export default function SignUpPage() { const [name, setName] = useState(""); const [keyIn, setKeyIn] = useState(""); const [error, setError] = useState(""); const [file, setFile] = useState(); const [key, setKey] = useState(); const system = useContext(SnortContext); const navigate = useNavigate(); async function uploadImage() { const f = await openFile(); setFile(f); } async function spawnAccount() { if (!key) return; setError(""); const pub = new EventPublisher(key, key.getPubKey()); let pic = undefined; if (file) { // upload picture const b = new Blossom("https://nostr.download", pub); const up = await b.upload(file); if (up.url) { pic = up.url; } else { setError("Upload filed"); return; } } const ev = await pub.metadata({ name: name, picture: pic, }); system.BroadcastEvent(ev); LoginState.loginPrivateKey(key.privateKey); navigate("/"); } async function loginKey() { setError(""); try { if (keyIn.startsWith("nsec1")) { LoginState.loginPrivateKey(bech32ToHex(keyIn)); navigate("/"); } else if (keyIn.startsWith("bunker://")) { const signer = new Nip46Signer(keyIn); await signer.init(); const pubkey = await signer.getPubKey(); LoginState.loginBunker(keyIn, signer.privateKey!, pubkey); navigate("/"); } } catch (e) { if (e instanceof Error) { setError(e.message); } } } return (
{error && {error}}

Login

setKeyIn(e.target.value)} /> Login {window.nostr && (
Browser Extension: { const pk = await new Nip7Signer().getPubKey(); LoginState.login(pk); navigate("/"); }} > Nostr Extension
)}
OR

Create Account

LNVPS uses nostr accounts,{" "} what is nostr?

Avatar
Upload
{file && ( )}
Name
setName(e.target.value)} />
{ setKey(PrivateKeySigner.random()); }} > Create Account {key && ( <>

Your new key:

{hexToBech32("nsec", key.privateKey)}
Please save this key, it CANNOT be recovered
Login )}
); }