sign events working!

This commit is contained in:
Ryan Breen
2023-01-16 23:11:51 -05:00
parent 495cea8560
commit ffbf59ad17
3 changed files with 33 additions and 25 deletions

View File

@@ -1,13 +1,7 @@
import { generatePrivateKey, getPublicKey } from "nostr-tools"; import { generatePrivateKey, getPublicKey, signEvent } from "nostr-tools";
const storage = browser.storage.local; const storage = browser.storage.local;
browser.runtime.onMessageExternal.addListener(async (message, sender, sendResponse) => {
console.log('External message: ', message);
console.log('External sender: ', sender);
sendResponse('Goodbye!');
});
browser.runtime.onMessage.addListener(async (message, _sender, sendResponse) => { browser.runtime.onMessage.addListener(async (message, _sender, sendResponse) => {
console.log(message); console.log(message);
@@ -55,6 +49,10 @@ browser.runtime.onMessage.addListener(async (message, _sender, sendResponse) =>
case 'deleteProfile': case 'deleteProfile':
await deleteProfile(); await deleteProfile();
break; break;
case 'signEvent':
let event = await signEvent_(message.payload);
sendResponse(event);
break;
default: default:
break; break;
} }
@@ -140,3 +138,10 @@ async function deleteProfile() {
let profileIndex = Math.max(index - 1, 0); let profileIndex = Math.max(index - 1, 0);
await storage.set({profiles, profileIndex}); await storage.set({profiles, profileIndex});
} }
async function signEvent_(event) {
event = {...event};
let privKey = await getPrivKey();
event.sig = signEvent(event, privKey);
return event;
}

View File

@@ -3,13 +3,14 @@ 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) => {
let {kind, reqId} = message.data; let {kind, reqId, payload} = message.data;
if (kind !== 'getPublicKey') if (kind !== 'getPubKey' && kind !== 'signEvent')
return; return;
console.log(`Event ${reqId}: Content script received message kind ${kind}`); console.log(`Event ${reqId}: Content script received message kind ${kind}, payload: `, payload);
let publicKey = await browser.runtime.sendMessage({kind: 'getPubKey'}); payload = await browser.runtime.sendMessage({kind, payload});
console.log(`Event ${reqId}: Public key retrieved; ${publicKey}`);
window.postMessage({kind: 'publicKey', reqId, payload: publicKey}, '*'); kind = `return_${kind}`;
window.postMessage({kind, reqId, payload}, '*');
}); });

View File

@@ -1,29 +1,31 @@
window.nostr = { window.nostr = {
requests: {}, requests: {},
getPublicKey() { async getPublicKey() {
let reqId = Math.random().toString(); return await this.broadcast('getPubKey');
return new Promise((resolve, _reject) => {
this.requests[reqId] = resolve;
console.log(`Event ${reqId}: Requesting public key.`);
window.postMessage({kind: 'getPublicKey', reqId}, '*');
});
}, },
async signEvent(event) { async signEvent(event) {
console.log("Signing event"); return await this.broadcast('signEvent', event);
console.log(event); },
return "signed event";
broadcast(kind, payload) {
let reqId = Math.random().toString();
return new Promise((resolve, _reject) => {
this.requests[reqId] = resolve;
console.log(`Event ${reqId}: ${kind}, payload: `, payload);
window.postMessage({kind, reqId, payload}, '*');
});
} }
} }
window.addEventListener('message', (message) => { window.addEventListener('message', (message) => {
let {kind, reqId, payload} = message.data; let {kind, reqId, payload} = message.data;
if (kind !== 'publicKey') if (kind !== 'return_getPubKey' && kind !== 'return_signEvent')
return; return;
console.log(`Event ${reqId}: Received public key ${payload}.`); console.log(`Event ${reqId}: Received payload:`, payload);
window.nostr.requests[reqId](payload); window.nostr.requests[reqId](payload);
delete window.nostr.requests[reqId]; delete window.nostr.requests[reqId];
}); });