import browser from 'webextension-polyfill' import { render } from 'react-dom' import { getPublicKey, nip19 } from 'nostr-tools' import { useState, useMemo, useEffect } from 'react' import QRCode from 'react-qr-code' import { SettingsIcon } from './icons' import { minidenticon } from 'minidenticons' import * as Tabs from '@radix-ui/react-tabs' import { hexToBytes } from 'nostr-tools/utils' function Popup() { const [keys, setKeys] = useState(null) const avatarURI = useMemo( () => keys ? 'data:image/svg+xml;utf8,' + encodeURIComponent(minidenticon(keys.npub, 90, 30)) : null, [keys] ) const gotoSettings = () => { browser.tabs.create({ url: browser.runtime.getURL('/options.html') }) } useEffect(() => { browser.storage.local.get(['private_key', 'relays']).then((results) => { if (results.private_key) { const hexKey = getPublicKey(hexToBytes(results.private_key)) const npub = nip19.npubEncode(hexKey) setKeys({ npub: npub, hex: hexKey }) if (results.relays) { const relaysList = [] for (const url in results.relays) { if (results.relays[url].write) { relaysList.push(url) if (relaysList.length >= 3) break } } if (relaysList.length) { const nprofileKey = nip19.nprofileEncode({ pubkey: hexKey, relays: relaysList }) setKeys((prev) => ({ ...prev, nprofile: nprofileKey })) } } } else { setKeys(null) } }) }, []) return (
{!keys ? (

Click here to enter or create
your first identity

) : (
{avatarURI ? ( Avatar ) : (
)}

Account

npub hex {keys.nprofile ? ( nprofile ) : null}