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; const storage = browser.storage.local;
@@ -53,6 +53,14 @@ browser.runtime.onMessage.addListener(async (message, _sender, sendResponse) =>
let event = await signEvent_(message.payload); let event = await signEvent_(message.payload);
sendResponse(event); sendResponse(event);
break; 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: default:
break; break;
} }
@@ -145,3 +153,13 @@ async function signEvent_(event) {
event.sig = signEvent(event, privKey); event.sig = signEvent(event, privKey);
return event; 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); document.body.appendChild(script);
window.addEventListener('message', async (message) => { window.addEventListener('message', async (message) => {
const validEvents = ['getPubKey', 'signEvent', 'nip04.encrypt', 'nip04.decrypt'];
let {kind, reqId, payload} = message.data; let {kind, reqId, payload} = message.data;
if (kind !== 'getPubKey' && kind !== 'signEvent') if (!validEvents.includes(kind))
return; return;
console.log(`Event ${reqId}: Content script received message kind ${kind}, payload: `, payload); 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); console.log(`Event ${reqId}: ${kind}, payload: `, payload);
window.postMessage({kind, reqId, 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) => { window.addEventListener('message', (message) => {
const validEvents = ['getPubKey', 'signEvent', 'nip04.encrypt', 'nip04.decrypt'].map(e => `return_${e}`);
let {kind, reqId, payload} = message.data; let {kind, reqId, payload} = message.data;
if (kind !== 'return_getPubKey' && kind !== 'return_signEvent') if (!validEvents.includes(kind))
return; return;
console.log(`Event ${reqId}: Received payload:`, payload); console.log(`Event ${reqId}: Received payload:`, payload);