diff --git a/extension/manifest.json b/extension/manifest.json index 3eb1ce1..d45f954 100644 --- a/extension/manifest.json +++ b/extension/manifest.json @@ -1,7 +1,7 @@ { "name": "nos2x", "description": "Nostr Signer Extension", - "version": "1.4.1", + "version": "1.5.0", "homepage_url": "https://github.com/fiatjaf/nos2x", "manifest_version": 3, "icons": { diff --git a/extension/popup.jsx b/extension/popup.jsx index fd1ed68..a3c2683 100644 --- a/extension/popup.jsx +++ b/extension/popup.jsx @@ -1,15 +1,26 @@ import browser from 'webextension-polyfill' import {render} from 'react-dom' import {getPublicKey} from 'nostr-tools' -import React, {useState, useEffect} from 'react' +import {bech32} from 'bech32' +import React, {useState, useRef, useEffect} from 'react' function Popup() { let [key, setKey] = useState('') + let keys = useRef([]) useEffect(() => { browser.storage.local.get('private_key').then(results => { if (results.private_key) { - setKey(getPublicKey(results.private_key)) + let hexKey = getPublicKey(results.private_key) + let npubKey = bech32.encode( + 'npub', + bech32.toWords(Buffer.from(hexKey, 'hex')) + ) + + setKey(npubKey) + + keys.current.push(hexKey) + keys.current.push(npubKey) } else { setKey(null) } @@ -25,7 +36,9 @@ function Popup() {

) : ( <> -

your public key:

+

+ ↩️ your public key: +

   )
+
+  function toggleKeyType(e) {
+    e.preventDefault()
+    let nextKeyType =
+      keys.current[(keys.current.indexOf(key) + 1) % keys.current.length]
+    setKey(nextKeyType)
+  }
 }
 
 render(, document.getElementById('main'))
diff --git a/package.json b/package.json
index b6bfc2f..c625ce3 100644
--- a/package.json
+++ b/package.json
@@ -2,6 +2,7 @@
   "dependencies": {
     "@esbuild-plugins/node-globals-polyfill": "^0.1.1",
     "async-mutex": "^0.3.2",
+    "bech32": "^2.0.0",
     "esbuild": "^0.14.11",
     "esbuild-plugin-alias": "^0.2.1",
     "eslint": "^8.6.0",
diff --git a/yarn.lock b/yarn.lock
index 52151bf..9b73ab8 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -130,6 +130,11 @@ base64-js@^1.3.1:
   resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
   integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
 
+bech32@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/bech32/-/bech32-2.0.0.tgz#078d3686535075c8c79709f054b1b226a133b355"
+  integrity sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==
+
 brace-expansion@^1.1.7:
   version "1.1.11"
   resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"