95 lines
2.4 KiB
JavaScript
95 lines
2.4 KiB
JavaScript
import browser from 'webextension-polyfill'
|
|
import {render} from 'react-dom'
|
|
import {getPublicKey, nip19} from 'nostr-tools'
|
|
import React, {useState, useRef, useEffect} from 'react'
|
|
import QRCode from 'react-qr-code'
|
|
|
|
function Popup() {
|
|
let [pubKey, setPubKey] = useState('')
|
|
let keys = useRef([])
|
|
|
|
useEffect(() => {
|
|
browser.storage.local.get(['private_key', 'relays']).then(results => {
|
|
if (results.private_key) {
|
|
let hexKey = getPublicKey(results.private_key)
|
|
let npubKey = nip19.npubEncode(hexKey)
|
|
|
|
setPubKey(npubKey)
|
|
|
|
keys.current.push(npubKey)
|
|
keys.current.push(hexKey)
|
|
|
|
if (results.relays) {
|
|
let relaysList = []
|
|
for (let url in results.relays) {
|
|
if (results.relays[url].write) {
|
|
relaysList.push(url)
|
|
if (relaysList.length >= 3) break
|
|
}
|
|
}
|
|
if (relaysList.length) {
|
|
let nprofileKey = nip19.nprofileEncode({
|
|
pubkey: hexKey,
|
|
relays: relaysList
|
|
})
|
|
keys.current.push(nprofileKey)
|
|
}
|
|
}
|
|
} else {
|
|
setPubKey(null)
|
|
}
|
|
})
|
|
}, [])
|
|
|
|
return (
|
|
<>
|
|
<h2>nos2x</h2>
|
|
{pubKey === null ? (
|
|
<p style={{width: '150px'}}>
|
|
you don't have a private key set. use the options page to set one.
|
|
</p>
|
|
) : (
|
|
<>
|
|
<p>
|
|
<a onClick={toggleKeyType}>↩️</a> your public key:
|
|
</p>
|
|
<pre
|
|
style={{
|
|
whiteSpace: 'pre-wrap',
|
|
wordBreak: 'break-all',
|
|
width: '200px'
|
|
}}
|
|
>
|
|
<code>{pubKey}</code>
|
|
</pre>
|
|
|
|
<div
|
|
style={{
|
|
height: 'auto',
|
|
margin: '0 auto',
|
|
maxWidth: 256,
|
|
width: '100%'
|
|
}}
|
|
>
|
|
<QRCode
|
|
size={256}
|
|
style={{height: 'auto', maxWidth: '100%', width: '100%'}}
|
|
value={pubKey.startsWith('n') ? pubKey.toUpperCase() : pubKey}
|
|
viewBox={`0 0 256 256`}
|
|
/>
|
|
</div>
|
|
</>
|
|
)}
|
|
</>
|
|
)
|
|
|
|
function toggleKeyType(e) {
|
|
e.preventDefault()
|
|
let nextKeyType =
|
|
keys.current[(keys.current.indexOf(pubKey) + 1) % keys.current.length]
|
|
setPubKey(nextKeyType)
|
|
}
|
|
}
|
|
|
|
render(<Popup />, document.getElementById('main'))
|