diff --git a/extension/background.js b/extension/background.js index ef26af2..bd18738 100644 --- a/extension/background.js +++ b/extension/background.js @@ -58,6 +58,10 @@ async function handleContentScriptMessage({type, params, host}) { case 'getPublicKey': { return Buffer.from(getPublicKey(sk)).toString('hex') } + case 'getRelays': { + let results = await browser.storage.local.get('relays') + return results.relays || {} + } case 'signEvent': { let {event} = params diff --git a/extension/common.js b/extension/common.js index 06882e2..ff3ba1e 100644 --- a/extension/common.js +++ b/extension/common.js @@ -2,6 +2,7 @@ import browser from 'webextension-polyfill' export const PERMISSIONS_REQUIRED = { getPublicKey: 1, + getRelays: 5, signEvent: 10, 'nip04.encrypt': 20, 'nip04.decrypt': 20 @@ -9,6 +10,7 @@ export const PERMISSIONS_REQUIRED = { const ORDERED_PERMISSIONS = [ [1, ['getPublicKey']], + [5, ['getRelays']], [10, ['signEvent']], [20, ['nip04.encrypt']], [20, ['nip04.decrypt']] @@ -16,6 +18,7 @@ const ORDERED_PERMISSIONS = [ const PERMISSION_NAMES = { getPublicKey: 'read your public key', + getRelays: 'read your list of preferred relays', signEvent: 'sign events using your private key', 'nip04.encrypt': 'encrypt messages to peers', 'nip04.decrypt': 'decrypt messages from peers' diff --git a/extension/manifest.json b/extension/manifest.json index a7dd177..2f4daf4 100644 --- a/extension/manifest.json +++ b/extension/manifest.json @@ -1,7 +1,7 @@ { "name": "nos2x", "description": "Nostr Signer Extension", - "version": "1.3.0", + "version": "1.4.0", "homepage_url": "https://github.com/fiatjaf/nos2x", "manifest_version": 3, "icons": { diff --git a/extension/nostr-provider.js b/extension/nostr-provider.js index 332d2d3..f3df130 100644 --- a/extension/nostr-provider.js +++ b/extension/nostr-provider.js @@ -12,6 +12,20 @@ window.nostr = { return this._call('signEvent', {event}) }, + async getRelays() { + return this._call('getRelays', {}) + }, + + nip04: { + async encrypt(peer, plaintext) { + return window.nostr._call('nip04.encrypt', {peer, plaintext}) + }, + + async decrypt(peer, ciphertext) { + return window.nostr._call('nip04.decrypt', {peer, ciphertext}) + } + }, + _call(type, params) { return new Promise((resolve, reject) => { let id = Math.random().toString().slice(4) @@ -26,16 +40,6 @@ window.nostr = { '*' ) }) - }, - - nip04: { - encrypt(peer, plaintext) { - return window.nostr._call('nip04.encrypt', {peer, plaintext}) - }, - - decrypt(peer, ciphertext) { - return window.nostr._call('nip04.decrypt', {peer, ciphertext}) - } } }