From ffbf59ad175ab41f1e0ab16271fd241e2bf8d71c Mon Sep 17 00:00:00 2001 From: Ryan Breen Date: Mon, 16 Jan 2023 23:11:51 -0500 Subject: [PATCH] sign events working! --- Shared (Extension)/Resources/background.js | 19 ++++++++++------ Shared (Extension)/Resources/content.js | 13 ++++++----- Shared (Extension)/Resources/nostr.js | 26 ++++++++++++---------- 3 files changed, 33 insertions(+), 25 deletions(-) diff --git a/Shared (Extension)/Resources/background.js b/Shared (Extension)/Resources/background.js index f9322a2..ff6914f 100644 --- a/Shared (Extension)/Resources/background.js +++ b/Shared (Extension)/Resources/background.js @@ -1,13 +1,7 @@ -import { generatePrivateKey, getPublicKey } from "nostr-tools"; +import { generatePrivateKey, getPublicKey, signEvent } from "nostr-tools"; 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) => { console.log(message); @@ -55,6 +49,10 @@ browser.runtime.onMessage.addListener(async (message, _sender, sendResponse) => case 'deleteProfile': await deleteProfile(); break; + case 'signEvent': + let event = await signEvent_(message.payload); + sendResponse(event); + break; default: break; } @@ -139,4 +137,11 @@ async function deleteProfile() { profiles.splice(index, 1); let profileIndex = Math.max(index - 1, 0); await storage.set({profiles, profileIndex}); +} + +async function signEvent_(event) { + event = {...event}; + let privKey = await getPrivKey(); + event.sig = signEvent(event, privKey); + return event; } \ No newline at end of file diff --git a/Shared (Extension)/Resources/content.js b/Shared (Extension)/Resources/content.js index 86456d9..3ed06ed 100644 --- a/Shared (Extension)/Resources/content.js +++ b/Shared (Extension)/Resources/content.js @@ -3,13 +3,14 @@ script.setAttribute('src', browser.runtime.getURL('nostr.build.js')); document.body.appendChild(script); window.addEventListener('message', async (message) => { - let {kind, reqId} = message.data; - if (kind !== 'getPublicKey') + let {kind, reqId, payload} = message.data; + if (kind !== 'getPubKey' && kind !== 'signEvent') return; - console.log(`Event ${reqId}: Content script received message kind ${kind}`); - let publicKey = await browser.runtime.sendMessage({kind: 'getPubKey'}); - console.log(`Event ${reqId}: Public key retrieved; ${publicKey}`); + console.log(`Event ${reqId}: Content script received message kind ${kind}, payload: `, payload); + payload = await browser.runtime.sendMessage({kind, payload}); - window.postMessage({kind: 'publicKey', reqId, payload: publicKey}, '*'); + kind = `return_${kind}`; + + window.postMessage({kind, reqId, payload}, '*'); }); \ No newline at end of file diff --git a/Shared (Extension)/Resources/nostr.js b/Shared (Extension)/Resources/nostr.js index 8a552bb..80bbefc 100644 --- a/Shared (Extension)/Resources/nostr.js +++ b/Shared (Extension)/Resources/nostr.js @@ -1,29 +1,31 @@ window.nostr = { requests: {}, - getPublicKey() { - let reqId = Math.random().toString(); - return new Promise((resolve, _reject) => { - this.requests[reqId] = resolve; - console.log(`Event ${reqId}: Requesting public key.`); - window.postMessage({kind: 'getPublicKey', reqId}, '*'); - }); + async getPublicKey() { + return await this.broadcast('getPubKey'); }, async signEvent(event) { - console.log("Signing event"); - console.log(event); - return "signed event"; + return await this.broadcast('signEvent', 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) => { let {kind, reqId, payload} = message.data; - if (kind !== 'publicKey') + if (kind !== 'return_getPubKey' && kind !== 'return_signEvent') return; - console.log(`Event ${reqId}: Received public key ${payload}.`); + console.log(`Event ${reqId}: Received payload:`, payload); window.nostr.requests[reqId](payload); delete window.nostr.requests[reqId]; }); \ No newline at end of file