get rid of polyfill since this is just chrome anyway.
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"root": true,
|
"root": true,
|
||||||
|
|
||||||
"parserOptions": {
|
"parserOptions": {
|
||||||
"ecmaVersion": 2020,
|
"ecmaVersion": 2020,
|
||||||
"ecmaFeatures": {
|
"ecmaFeatures": {
|
||||||
@@ -14,12 +15,10 @@
|
|||||||
"node": true
|
"node": true
|
||||||
},
|
},
|
||||||
|
|
||||||
"plugins": [
|
"plugins": ["react", "babel"],
|
||||||
"react",
|
|
||||||
"babel"
|
|
||||||
],
|
|
||||||
|
|
||||||
"globals": {
|
"globals": {
|
||||||
|
"chrome": false,
|
||||||
"document": false,
|
"document": false,
|
||||||
"navigator": false,
|
"navigator": false,
|
||||||
"window": false,
|
"window": false,
|
||||||
@@ -121,14 +120,25 @@
|
|||||||
"no-unexpected-multiline": 2,
|
"no-unexpected-multiline": 2,
|
||||||
"no-unneeded-ternary": [2, {"defaultAssignment": false}],
|
"no-unneeded-ternary": [2, {"defaultAssignment": false}],
|
||||||
"no-unreachable": 2,
|
"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-call": 2,
|
||||||
"no-useless-constructor": 2,
|
"no-useless-constructor": 2,
|
||||||
"no-with": 2,
|
"no-with": 2,
|
||||||
"one-var": [0, {"initialized": "never"}],
|
"one-var": [0, {"initialized": "never"}],
|
||||||
"operator-linebreak": [2, "after", { "overrides": { "?": "before", ":": "before" } }],
|
"operator-linebreak": [
|
||||||
|
2,
|
||||||
|
"after",
|
||||||
|
{"overrides": {"?": "before", ":": "before"}}
|
||||||
|
],
|
||||||
"padded-blocks": [2, "never"],
|
"padded-blocks": [2, "never"],
|
||||||
"quotes": [2, "single", { "avoidEscape": true, "allowTemplateLiterals": true }],
|
"quotes": [
|
||||||
|
2,
|
||||||
|
"single",
|
||||||
|
{"avoidEscape": true, "allowTemplateLiterals": true}
|
||||||
|
],
|
||||||
"semi": [2, "never"],
|
"semi": [2, "never"],
|
||||||
"semi-spacing": [2, {"before": false, "after": true}],
|
"semi-spacing": [2, {"before": false, "after": true}],
|
||||||
"space-before-blocks": [2, "always"],
|
"space-before-blocks": [2, "always"],
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
import browser from 'webextension-polyfill'
|
|
||||||
import {validateEvent, signEvent, getEventHash, getPublicKey} from 'nostr-tools'
|
import {validateEvent, signEvent, getEventHash, getPublicKey} from 'nostr-tools'
|
||||||
import {encrypt, decrypt} from 'nostr-tools/nip04'
|
import {encrypt, decrypt} from 'nostr-tools/nip04'
|
||||||
import {Mutex} from 'async-mutex'
|
import {Mutex} from 'async-mutex'
|
||||||
@@ -13,11 +12,11 @@ let openPrompt = null
|
|||||||
let promptMutex = new Mutex()
|
let promptMutex = new Mutex()
|
||||||
let releasePromptMutex = () => {}
|
let releasePromptMutex = () => {}
|
||||||
|
|
||||||
browser.runtime.onInstalled.addListener((_, __, reason) => {
|
chrome.runtime.onInstalled.addListener((_, __, reason) => {
|
||||||
if (reason === 'install') browser.runtime.openOptionsPage()
|
if (reason === 'install') chrome.runtime.openOptionsPage()
|
||||||
})
|
})
|
||||||
|
|
||||||
browser.runtime.onMessage.addListener(async (req, sender) => {
|
chrome.runtime.onMessage.addListener(async (req, sender) => {
|
||||||
let {prompt} = req
|
let {prompt} = req
|
||||||
|
|
||||||
if (prompt) {
|
if (prompt) {
|
||||||
@@ -27,14 +26,14 @@ browser.runtime.onMessage.addListener(async (req, sender) => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
browser.runtime.onMessageExternal.addListener(
|
chrome.runtime.onMessageExternal.addListener(
|
||||||
async ({type, params}, sender) => {
|
async ({type, params}, sender) => {
|
||||||
let extensionId = new URL(sender.url).host
|
let extensionId = new URL(sender.url).host
|
||||||
return handleContentScriptMessage({type, params, host: extensionId})
|
return handleContentScriptMessage({type, params, host: extensionId})
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
browser.windows.onRemoved.addListener(windowId => {
|
chrome.windows.onRemoved.addListener(windowId => {
|
||||||
if (openPrompt) {
|
if (openPrompt) {
|
||||||
handlePromptMessage({condition: 'no'}, null)
|
handlePromptMessage({condition: 'no'}, null)
|
||||||
}
|
}
|
||||||
@@ -58,7 +57,7 @@ async function handleContentScriptMessage({type, params, host}) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let results = await browser.storage.local.get('private_key')
|
let results = await chrome.storage.local.get('private_key')
|
||||||
if (!results || !results.private_key) {
|
if (!results || !results.private_key) {
|
||||||
return {error: 'no private key found'}
|
return {error: 'no private key found'}
|
||||||
}
|
}
|
||||||
@@ -71,7 +70,7 @@ async function handleContentScriptMessage({type, params, host}) {
|
|||||||
return getPublicKey(sk)
|
return getPublicKey(sk)
|
||||||
}
|
}
|
||||||
case 'getRelays': {
|
case 'getRelays': {
|
||||||
let results = await browser.storage.local.get('relays')
|
let results = await chrome.storage.local.get('relays')
|
||||||
return results.relays || {}
|
return results.relays || {}
|
||||||
}
|
}
|
||||||
case 'signEvent': {
|
case 'signEvent': {
|
||||||
@@ -120,7 +119,7 @@ function handlePromptMessage({id, condition, host, level}, sender) {
|
|||||||
releasePromptMutex()
|
releasePromptMutex()
|
||||||
|
|
||||||
if (sender) {
|
if (sender) {
|
||||||
browser.windows.remove(sender.tab.windowId)
|
chrome.windows.remove(sender.tab.windowId)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -138,8 +137,8 @@ async function promptPermission(host, level, params) {
|
|||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
openPrompt = {resolve, reject}
|
openPrompt = {resolve, reject}
|
||||||
|
|
||||||
browser.windows.create({
|
chrome.windows.create({
|
||||||
url: `${browser.runtime.getURL('prompt.html')}?${qs.toString()}`,
|
url: `${chrome.runtime.getURL('prompt.html')}?${qs.toString()}`,
|
||||||
type: 'popup',
|
type: 'popup',
|
||||||
width: 340,
|
width: 340,
|
||||||
height: 330
|
height: 330
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
import browser from 'webextension-polyfill'
|
|
||||||
|
|
||||||
export const PERMISSIONS_REQUIRED = {
|
export const PERMISSIONS_REQUIRED = {
|
||||||
getPublicKey: 1,
|
getPublicKey: 1,
|
||||||
@@ -51,7 +50,7 @@ export function getPermissionsString(permission) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function readPermissions() {
|
export async function readPermissions() {
|
||||||
let {permissions = {}} = await browser.storage.local.get('permissions')
|
let {permissions = {}} = await chrome.storage.local.get('permissions')
|
||||||
|
|
||||||
// delete expired
|
// delete expired
|
||||||
var needsUpdate = false
|
var needsUpdate = false
|
||||||
@@ -64,7 +63,7 @@ export async function readPermissions() {
|
|||||||
needsUpdate = true
|
needsUpdate = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (needsUpdate) browser.storage.local.set({permissions})
|
if (needsUpdate) chrome.storage.local.set({permissions})
|
||||||
|
|
||||||
return permissions
|
return permissions
|
||||||
}
|
}
|
||||||
@@ -74,10 +73,10 @@ export async function readPermissionLevel(host) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function updatePermission(host, permission) {
|
export async function updatePermission(host, permission) {
|
||||||
let {permissions = {}} = await browser.storage.local.get('permissions')
|
let {permissions = {}} = await chrome.storage.local.get('permissions')
|
||||||
permissions[host] = {
|
permissions[host] = {
|
||||||
...permission,
|
...permission,
|
||||||
created_at: Math.round(Date.now() / 1000)
|
created_at: Math.round(Date.now() / 1000)
|
||||||
}
|
}
|
||||||
browser.storage.local.set({permissions})
|
chrome.storage.local.set({permissions})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,9 @@
|
|||||||
import browser from 'webextension-polyfill'
|
|
||||||
|
|
||||||
// inject the script that will provide window.nostr
|
// inject the script that will provide window.nostr
|
||||||
let script = document.createElement('script')
|
let script = document.createElement('script')
|
||||||
script.setAttribute('async', 'false')
|
script.setAttribute('async', 'false')
|
||||||
script.setAttribute('type', 'text/javascript')
|
script.setAttribute('type', 'text/javascript')
|
||||||
script.setAttribute('src', browser.runtime.getURL('nostr-provider.js'))
|
script.setAttribute('src', chrome.runtime.getURL('nostr-provider.js'))
|
||||||
document.head.appendChild(script)
|
document.head.appendChild(script)
|
||||||
|
|
||||||
// listen for messages from that script
|
// listen for messages from that script
|
||||||
@@ -17,7 +16,7 @@ window.addEventListener('message', async message => {
|
|||||||
// pass on to background
|
// pass on to background
|
||||||
var response
|
var response
|
||||||
try {
|
try {
|
||||||
response = await browser.runtime.sendMessage({
|
response = await chrome.runtime.sendMessage({
|
||||||
type: message.data.type,
|
type: message.data.type,
|
||||||
params: message.data.params,
|
params: message.data.params,
|
||||||
host: location.host
|
host: location.host
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
import browser from 'webextension-polyfill'
|
|
||||||
import React, {useState, useCallback, useEffect} from 'react'
|
import React, {useState, useCallback, useEffect} from 'react'
|
||||||
import {render} from 'react-dom'
|
import {render} from 'react-dom'
|
||||||
import {normalizeRelayURL} from 'nostr-tools/relay'
|
import {normalizeRelayURL} from 'nostr-tools/relay'
|
||||||
@@ -19,7 +18,7 @@ function Options() {
|
|||||||
})
|
})
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
browser.storage.local.get(['private_key', 'relays']).then(results => {
|
chrome.storage.local.get(['private_key', 'relays']).then(results => {
|
||||||
if (results.private_key) setKey(results.private_key)
|
if (results.private_key) setKey(results.private_key)
|
||||||
if (results.relays) {
|
if (results.relays) {
|
||||||
let relaysList = []
|
let relaysList = []
|
||||||
@@ -161,7 +160,7 @@ function Options() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function saveKey() {
|
async function saveKey() {
|
||||||
await browser.storage.local.set({
|
await chrome.storage.local.set({
|
||||||
private_key: key
|
private_key: key
|
||||||
})
|
})
|
||||||
showMessage('saved private key!')
|
showMessage('saved private key!')
|
||||||
@@ -196,7 +195,7 @@ function Options() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function saveRelays() {
|
async function saveRelays() {
|
||||||
await browser.storage.local.set({
|
await chrome.storage.local.set({
|
||||||
relays: Object.fromEntries(
|
relays: Object.fromEntries(
|
||||||
relays
|
relays
|
||||||
.filter(({url}) => url.trim() !== '')
|
.filter(({url}) => url.trim() !== '')
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
import browser from 'webextension-polyfill'
|
|
||||||
import {render} from 'react-dom'
|
import {render} from 'react-dom'
|
||||||
import {getPublicKey} from 'nostr-tools'
|
import {getPublicKey} from 'nostr-tools'
|
||||||
import {bech32} from 'bech32'
|
import {bech32} from 'bech32'
|
||||||
@@ -9,7 +8,7 @@ function Popup() {
|
|||||||
let keys = useRef([])
|
let keys = useRef([])
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
browser.storage.local.get('private_key').then(results => {
|
chrome.storage.local.get('private_key').then(results => {
|
||||||
if (results.private_key) {
|
if (results.private_key) {
|
||||||
let hexKey = getPublicKey(results.private_key)
|
let hexKey = getPublicKey(results.private_key)
|
||||||
let npubKey = bech32.encode(
|
let npubKey = bech32.encode(
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
import browser from 'webextension-polyfill'
|
|
||||||
import {render} from 'react-dom'
|
import {render} from 'react-dom'
|
||||||
import React from 'react'
|
import React from 'react'
|
||||||
|
|
||||||
@@ -72,7 +71,7 @@ function Prompt() {
|
|||||||
function authorizeHandler(condition) {
|
function authorizeHandler(condition) {
|
||||||
return function (ev) {
|
return function (ev) {
|
||||||
ev.preventDefault()
|
ev.preventDefault()
|
||||||
browser.runtime.sendMessage({
|
chrome.runtime.sendMessage({
|
||||||
prompt: true,
|
prompt: true,
|
||||||
id,
|
id,
|
||||||
host,
|
host,
|
||||||
|
|||||||
@@ -14,8 +14,7 @@
|
|||||||
"react": "^17.0.2",
|
"react": "^17.0.2",
|
||||||
"react-dom": "^17.0.2",
|
"react-dom": "^17.0.2",
|
||||||
"use-boolean-state": "^1.0.2",
|
"use-boolean-state": "^1.0.2",
|
||||||
"use-debounce": "^7.0.1",
|
"use-debounce": "^7.0.1"
|
||||||
"webextension-polyfill": "^0.8.0"
|
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "./build.js prod",
|
"build": "./build.js prod",
|
||||||
|
|||||||
@@ -1499,11 +1499,6 @@ v8-compile-cache@^2.0.3:
|
|||||||
resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee"
|
resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee"
|
||||||
integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==
|
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:
|
webidl-conversions@^3.0.0:
|
||||||
version "3.0.1"
|
version "3.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
|
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
|
||||||
|
|||||||
Reference in New Issue
Block a user