import browser from 'webextension-polyfill' import React, {useState, useCallback, useEffect} from 'react' import {render} from 'react-dom' import {generatePrivateKey, nip19} from 'nostr-tools' import { getPermissionsString, readPermissions, removePermissions } from './common' function Options() { let [key, setKey] = useState('') let [relays, setRelays] = useState([]) let [newRelayURL, setNewRelayURL] = useState('') let [permissions, setPermissions] = useState() let [protocolHandler, setProtocolHandler] = useState(null) let [hidingPrivateKey, hidePrivateKey] = useState(true) let [message, setMessage] = useState('') const showMessage = useCallback(msg => { setMessage(msg) setTimeout(setMessage, 3000) }) useEffect(() => { browser.storage.local .get(['private_key', 'relays', 'protocol_handler']) .then(results => { if (results.private_key) setKey(nip19.nsecEncode(results.private_key)) if (results.relays) { let relaysList = [] for (let url in results.relays) { relaysList.push({ url, policy: results.relays[url] }) } setRelays(relaysList) } if (results.protocol_handler) { setProtocolHandler(results.protocol_handler) } }) }, []) useEffect(() => { loadPermissions() }, []) function loadPermissions() { readPermissions().then(permissions => { setPermissions( Object.entries(permissions).map( ([host, {level, condition, created_at}]) => ({ host, level, condition, created_at }) ) ) }) } return ( <>
nostr signer extension
| domain | permissions | condition | since | |
|---|---|---|---|---|
| {host} | {getPermissionsString(level)} | {condition} | {new Date(created_at * 1000) .toISOString() .split('.')[0] .split('T') .join(' ')} |
{`
{hex} = hex pubkey for npub or nprofile, hex event id for note or nevent
{p_or_e} = "p" for npub or nprofile, "e" for note or nevent
{u_or_n} = "u" for npub or nprofile, "n" for note or nevent
{relay0} = first relay in a nprofile or nevent
{relay1} = second relay in a nprofile or nevent
{relay2} = third relay in a nprofile or nevent
{raw} = anything after the colon, i.e. the full nip19 bech32 string
{hrp} = human-readable prefix of the nip19 string
examples:
- https://nostr.guru/{p_or_e}/{hex}
- https://brb.io/{u_or_n}/{hex}
- https://notes.blockcore.net/{p_or_e}/{hex}
`}