nip04 support!

This commit is contained in:
Ryan Breen
2023-01-17 22:00:52 -05:00
parent 270b25e90a
commit 5987674c65
3 changed files with 34 additions and 3 deletions

View File

@@ -1,4 +1,4 @@
import { generatePrivateKey, getPublicKey, signEvent } from "nostr-tools";
import { generatePrivateKey, getPublicKey, signEvent, nip04 } from "nostr-tools";
const storage = browser.storage.local;
@@ -53,6 +53,14 @@ browser.runtime.onMessage.addListener(async (message, _sender, sendResponse) =>
let event = await signEvent_(message.payload);
sendResponse(event);
break;
case 'nip04.encrypt':
let cipherText = await nip04Encrypt(message.payload);
sendResponse(cipherText);
break;
case 'nip04.decrypt':
let plainText = await nip04Decrypt(message.payload);
sendResponse(plainText);
break;
default:
break;
}
@@ -145,3 +153,13 @@ async function signEvent_(event) {
event.sig = signEvent(event, privKey);
return event;
}
async function nip04Encrypt({pubKey, plainText}) {
let privKey = await getPrivKey();
return nip04.encrypt(privKey, pubKey, plainText);
}
async function nip04Decrypt({pubKey, cipherText}) {
let privKey = await getPrivKey();
return nip04.decrypt(privKey, pubKey, cipherText);
}

View File

@@ -3,8 +3,9 @@ script.setAttribute('src', browser.runtime.getURL('nostr.build.js'));
document.body.appendChild(script);
window.addEventListener('message', async (message) => {
const validEvents = ['getPubKey', 'signEvent', 'nip04.encrypt', 'nip04.decrypt'];
let {kind, reqId, payload} = message.data;
if (kind !== 'getPubKey' && kind !== 'signEvent')
if (!validEvents.includes(kind))
return;
console.log(`Event ${reqId}: Content script received message kind ${kind}, payload: `, payload);

View File

@@ -16,13 +16,25 @@ window.nostr = {
console.log(`Event ${reqId}: ${kind}, payload: `, payload);
window.postMessage({kind, reqId, payload}, '*');
});
},
nip04: {
async encrypt(pubKey, plainText) {
return await window.nostr.broadcast('nip04.encrypt', {pubKey, plainText});
},
async decrypt(pubKey, cipherText) {
return await window.nostr.broadcast('nip04.decrypt', {pubKey, cipherText});
}
}
}
window.addEventListener('message', (message) => {
const validEvents = ['getPubKey', 'signEvent', 'nip04.encrypt', 'nip04.decrypt'].map(e => `return_${e}`);
let {kind, reqId, payload} = message.data;
if (kind !== 'return_getPubKey' && kind !== 'return_signEvent')
if (!validEvents.includes(kind))
return;
console.log(`Event ${reqId}: Received payload:`, payload);