From 6911f4b25be719f033cbdfb72f7f0b50c85c52c8 Mon Sep 17 00:00:00 2001 From: fiatjaf Date: Sun, 18 Dec 2022 14:42:18 -0300 Subject: [PATCH] Revert "get rid of polyfill since this is just chrome anyway." This reverts commit a935a8c026a0d174d66dbd9d83a3648d034e924d. --- .eslintrc.json | 50 +++++++++++++++---------------------- extension/background.js | 21 ++++++++-------- extension/common.js | 9 ++++--- extension/content-script.js | 5 ++-- extension/manifest.json | 2 +- extension/options.jsx | 7 +++--- extension/popup.jsx | 3 ++- extension/prompt.jsx | 3 ++- package.json | 3 ++- yarn.lock | 5 ++++ 10 files changed, 55 insertions(+), 53 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index 8663e71..79ea442 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,6 +1,5 @@ { "root": true, - "parserOptions": { "ecmaVersion": 2020, "ecmaFeatures": { @@ -15,10 +14,12 @@ "node": true }, - "plugins": ["react", "babel"], + "plugins": [ + "react", + "babel" + ], "globals": { - "chrome": false, "document": false, "navigator": false, "window": false, @@ -36,23 +37,23 @@ "react/jsx-no-undef": 2, "react/jsx-uses-react": 2, "accessor-pairs": 2, - "arrow-spacing": [2, {"before": true, "after": true}], + "arrow-spacing": [2, { "before": true, "after": true }], "block-spacing": [2, "always"], - "brace-style": [2, "1tbs", {"allowSingleLine": true}], + "brace-style": [2, "1tbs", { "allowSingleLine": true }], "comma-dangle": 0, - "comma-spacing": [2, {"before": false, "after": true}], + "comma-spacing": [2, { "before": false, "after": true }], "comma-style": [2, "last"], "constructor-super": 2, "curly": [0, "multi-line"], "dot-location": [2, "property"], "eol-last": 2, "eqeqeq": [2, "allow-null"], - "generator-star-spacing": [2, {"before": true, "after": true}], - "handle-callback-err": [2, "^(err|error)$"], + "generator-star-spacing": [2, { "before": true, "after": true }], + "handle-callback-err": [2, "^(err|error)$" ], "indent": 0, "jsx-quotes": [2, "prefer-double"], - "key-spacing": [2, {"beforeColon": false, "afterColon": true}], - "keyword-spacing": [2, {"before": true, "after": true}], + "key-spacing": [2, { "beforeColon": false, "afterColon": true }], + "keyword-spacing": [2, { "before": true, "after": true }], "new-cap": 0, "new-parens": 0, "no-array-constructor": 2, @@ -84,12 +85,12 @@ "no-irregular-whitespace": 2, "no-iterator": 2, "no-label-var": 2, - "no-labels": [2, {"allowLoop": false, "allowSwitch": false}], + "no-labels": [2, { "allowLoop": false, "allowSwitch": false }], "no-lone-blocks": 2, "no-mixed-spaces-and-tabs": 2, "no-multi-spaces": 2, "no-multi-str": 2, - "no-multiple-empty-lines": [2, {"max": 2}], + "no-multiple-empty-lines": [2, { "max": 2 }], "no-native-reassign": 2, "no-negated-in-lhs": 2, "no-new": 0, @@ -118,34 +119,23 @@ "no-undef": 2, "no-undef-init": 2, "no-unexpected-multiline": 2, - "no-unneeded-ternary": [2, {"defaultAssignment": false}], + "no-unneeded-ternary": [2, { "defaultAssignment": false }], "no-unreachable": 2, - "no-unused-vars": [ - 2, - {"vars": "local", "args": "none", "varsIgnorePattern": "^_"} - ], + "no-unused-vars": [2, { "vars": "local", "args": "none", "varsIgnorePattern": "^_"}], "no-useless-call": 2, "no-useless-constructor": 2, "no-with": 2, - "one-var": [0, {"initialized": "never"}], - "operator-linebreak": [ - 2, - "after", - {"overrides": {"?": "before", ":": "before"}} - ], + "one-var": [0, { "initialized": "never" }], + "operator-linebreak": [2, "after", { "overrides": { "?": "before", ":": "before" } }], "padded-blocks": [2, "never"], - "quotes": [ - 2, - "single", - {"avoidEscape": true, "allowTemplateLiterals": true} - ], + "quotes": [2, "single", { "avoidEscape": true, "allowTemplateLiterals": true }], "semi": [2, "never"], - "semi-spacing": [2, {"before": false, "after": true}], + "semi-spacing": [2, { "before": false, "after": true }], "space-before-blocks": [2, "always"], "space-before-function-paren": 0, "space-in-parens": [2, "never"], "space-infix-ops": 2, - "space-unary-ops": [2, {"words": true, "nonwords": false}], + "space-unary-ops": [2, { "words": true, "nonwords": false }], "spaced-comment": 0, "template-curly-spacing": [2, "never"], "use-isnan": 2, diff --git a/extension/background.js b/extension/background.js index 4b0db98..9750a18 100644 --- a/extension/background.js +++ b/extension/background.js @@ -1,3 +1,4 @@ +import browser from 'webextension-polyfill' import {validateEvent, signEvent, getEventHash, getPublicKey} from 'nostr-tools' import {encrypt, decrypt} from 'nostr-tools/nip04' import {Mutex} from 'async-mutex' @@ -12,11 +13,11 @@ let openPrompt = null let promptMutex = new Mutex() let releasePromptMutex = () => {} -chrome.runtime.onInstalled.addListener((_, __, reason) => { - if (reason === 'install') chrome.runtime.openOptionsPage() +browser.runtime.onInstalled.addListener((_, __, reason) => { + if (reason === 'install') browser.runtime.openOptionsPage() }) -chrome.runtime.onMessage.addListener(async (req, sender) => { +browser.runtime.onMessage.addListener(async (req, sender) => { let {prompt} = req if (prompt) { @@ -26,14 +27,14 @@ chrome.runtime.onMessage.addListener(async (req, sender) => { } }) -chrome.runtime.onMessageExternal.addListener( +browser.runtime.onMessageExternal.addListener( async ({type, params}, sender) => { let extensionId = new URL(sender.url).host return handleContentScriptMessage({type, params, host: extensionId}) } ) -chrome.windows.onRemoved.addListener(windowId => { +browser.windows.onRemoved.addListener(windowId => { if (openPrompt) { handlePromptMessage({condition: 'no'}, null) } @@ -57,7 +58,7 @@ async function handleContentScriptMessage({type, params, host}) { } } - let results = await chrome.storage.local.get('private_key') + let results = await browser.storage.local.get('private_key') if (!results || !results.private_key) { return {error: 'no private key found'} } @@ -70,7 +71,7 @@ async function handleContentScriptMessage({type, params, host}) { return getPublicKey(sk) } case 'getRelays': { - let results = await chrome.storage.local.get('relays') + let results = await browser.storage.local.get('relays') return results.relays || {} } case 'signEvent': { @@ -119,7 +120,7 @@ function handlePromptMessage({id, condition, host, level}, sender) { releasePromptMutex() if (sender) { - chrome.windows.remove(sender.tab.windowId) + browser.windows.remove(sender.tab.windowId) } } @@ -137,8 +138,8 @@ async function promptPermission(host, level, params) { return new Promise((resolve, reject) => { openPrompt = {resolve, reject} - chrome.windows.create({ - url: `${chrome.runtime.getURL('prompt.html')}?${qs.toString()}`, + browser.windows.create({ + url: `${browser.runtime.getURL('prompt.html')}?${qs.toString()}`, type: 'popup', width: 340, height: 330 diff --git a/extension/common.js b/extension/common.js index 8531eff..0c87043 100644 --- a/extension/common.js +++ b/extension/common.js @@ -1,3 +1,4 @@ +import browser from 'webextension-polyfill' export const PERMISSIONS_REQUIRED = { getPublicKey: 1, @@ -50,7 +51,7 @@ export function getPermissionsString(permission) { } export async function readPermissions() { - let {permissions = {}} = await chrome.storage.local.get('permissions') + let {permissions = {}} = await browser.storage.local.get('permissions') // delete expired var needsUpdate = false @@ -63,7 +64,7 @@ export async function readPermissions() { needsUpdate = true } } - if (needsUpdate) chrome.storage.local.set({permissions}) + if (needsUpdate) browser.storage.local.set({permissions}) return permissions } @@ -73,10 +74,10 @@ export async function readPermissionLevel(host) { } export async function updatePermission(host, permission) { - let {permissions = {}} = await chrome.storage.local.get('permissions') + let {permissions = {}} = await browser.storage.local.get('permissions') permissions[host] = { ...permission, created_at: Math.round(Date.now() / 1000) } - chrome.storage.local.set({permissions}) + browser.storage.local.set({permissions}) } diff --git a/extension/content-script.js b/extension/content-script.js index 2a454e3..ebfbd46 100644 --- a/extension/content-script.js +++ b/extension/content-script.js @@ -1,9 +1,10 @@ +import browser from 'webextension-polyfill' // inject the script that will provide window.nostr let script = document.createElement('script') script.setAttribute('async', 'false') script.setAttribute('type', 'text/javascript') -script.setAttribute('src', chrome.runtime.getURL('nostr-provider.js')) +script.setAttribute('src', browser.runtime.getURL('nostr-provider.js')) document.head.appendChild(script) // listen for messages from that script @@ -16,7 +17,7 @@ window.addEventListener('message', async message => { // pass on to background var response try { - response = await chrome.runtime.sendMessage({ + response = await browser.runtime.sendMessage({ type: message.data.type, params: message.data.params, host: location.host diff --git a/extension/manifest.json b/extension/manifest.json index 128b4db..79f4844 100644 --- a/extension/manifest.json +++ b/extension/manifest.json @@ -1,7 +1,7 @@ { "name": "nos2x", "description": "Nostr Signer Extension", - "version": "1.6.0", + "version": "1.6.1", "homepage_url": "https://github.com/fiatjaf/nos2x", "manifest_version": 3, "icons": { diff --git a/extension/options.jsx b/extension/options.jsx index 4e15e8d..22c1902 100644 --- a/extension/options.jsx +++ b/extension/options.jsx @@ -1,3 +1,4 @@ +import browser from 'webextension-polyfill' import React, {useState, useCallback, useEffect} from 'react' import {render} from 'react-dom' import {normalizeRelayURL} from 'nostr-tools/relay' @@ -18,7 +19,7 @@ function Options() { }) useEffect(() => { - chrome.storage.local.get(['private_key', 'relays']).then(results => { + browser.storage.local.get(['private_key', 'relays']).then(results => { if (results.private_key) setKey(results.private_key) if (results.relays) { let relaysList = [] @@ -160,7 +161,7 @@ function Options() { } async function saveKey() { - await chrome.storage.local.set({ + await browser.storage.local.set({ private_key: key }) showMessage('saved private key!') @@ -195,7 +196,7 @@ function Options() { } async function saveRelays() { - await chrome.storage.local.set({ + await browser.storage.local.set({ relays: Object.fromEntries( relays .filter(({url}) => url.trim() !== '') diff --git a/extension/popup.jsx b/extension/popup.jsx index b2f5e38..a3c2683 100644 --- a/extension/popup.jsx +++ b/extension/popup.jsx @@ -1,3 +1,4 @@ +import browser from 'webextension-polyfill' import {render} from 'react-dom' import {getPublicKey} from 'nostr-tools' import {bech32} from 'bech32' @@ -8,7 +9,7 @@ function Popup() { let keys = useRef([]) useEffect(() => { - chrome.storage.local.get('private_key').then(results => { + browser.storage.local.get('private_key').then(results => { if (results.private_key) { let hexKey = getPublicKey(results.private_key) let npubKey = bech32.encode( diff --git a/extension/prompt.jsx b/extension/prompt.jsx index 9b35347..c3739a7 100644 --- a/extension/prompt.jsx +++ b/extension/prompt.jsx @@ -1,3 +1,4 @@ +import browser from 'webextension-polyfill' import {render} from 'react-dom' import React from 'react' @@ -71,7 +72,7 @@ function Prompt() { function authorizeHandler(condition) { return function (ev) { ev.preventDefault() - chrome.runtime.sendMessage({ + browser.runtime.sendMessage({ prompt: true, id, host, diff --git a/package.json b/package.json index 17e7e46..c625ce3 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,8 @@ "react": "^17.0.2", "react-dom": "^17.0.2", "use-boolean-state": "^1.0.2", - "use-debounce": "^7.0.1" + "use-debounce": "^7.0.1", + "webextension-polyfill": "^0.8.0" }, "scripts": { "build": "./build.js prod", diff --git a/yarn.lock b/yarn.lock index 970302a..9b73ab8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1499,6 +1499,11 @@ v8-compile-cache@^2.0.3: resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== +webextension-polyfill@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/webextension-polyfill/-/webextension-polyfill-0.8.0.tgz#f80e9f4b7f81820c420abd6ffbebfa838c60e041" + integrity sha512-a19+DzlT6Kp9/UI+mF9XQopeZ+n2ussjhxHJ4/pmIGge9ijCDz7Gn93mNnjpZAk95T4Tae8iHZ6sSf869txqiQ== + webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"