diff --git a/extension/background.js b/extension/background.js index 85109c7..cc10fc3 100644 --- a/extension/background.js +++ b/extension/background.js @@ -101,9 +101,44 @@ async function handleContentScriptMessage({type, params, host}) { if (allowed === true) { // authorized, proceed releasePromptMutex() + browser.notifications + .create(undefined, { + type: 'basic', + title: `${type} allowed for ${host}`, + message: JSON.stringify( + params?.event + ? { + kind: params.event.kind, + content: params.event.content, + tags: params.event.tags + } + : params, + null, + 2 + ), + iconUrl: 'icons/denied48.png' + }) + .then(console.log) + .catch(console.log) } else if (allowed === false) { // denied, just refuse immediately releasePromptMutex() + browser.notifications.create(undefined, { + type: 'basic', + title: `${type} denied for ${host}`, + message: JSON.stringify( + params?.event + ? { + kind: params.event.kind, + content: params.event.content, + tags: params.event.tags + } + : params, + null, + 2 + ), + iconUrl: 'icons/denied48.png' + }) return { error: 'denied' } diff --git a/extension/icons/denied48.png b/extension/icons/denied48.png new file mode 100644 index 0000000..6b3da86 Binary files /dev/null and b/extension/icons/denied48.png differ diff --git a/extension/manifest.json b/extension/manifest.json index 9913bfa..210e4be 100644 --- a/extension/manifest.json +++ b/extension/manifest.json @@ -26,6 +26,7 @@ } ], "permissions": ["storage"], + "optional_permissions": ["notifications"], "web_accessible_resources": [ { "resources": ["nostr-provider.js"], diff --git a/extension/options.jsx b/extension/options.jsx index 181c61c..c4be03e 100644 --- a/extension/options.jsx +++ b/extension/options.jsx @@ -13,6 +13,7 @@ function Options() { let [policies, setPermissions] = useState() let [protocolHandler, setProtocolHandler] = useState(null) let [hidingPrivateKey, hidePrivateKey] = useState(true) + let [showNotifications, setNotifications] = useState(false) let [message, setMessage] = useState('') const showMessage = useCallback(msg => { @@ -22,7 +23,7 @@ function Options() { useEffect(() => { browser.storage.local - .get(['private_key', 'relays', 'protocol_handler']) + .get(['private_key', 'relays', 'protocol_handler', 'notifications']) .then(results => { if (results.private_key) { setPrivKey(nip19.nsecEncode(results.private_key)) @@ -40,6 +41,9 @@ function Options() { if (results.protocol_handler) { setProtocolHandler(results.protocol_handler) } + if (results.notifications) { + setNotifications(true) + } }) }, []) @@ -156,7 +160,23 @@ function Options() { {policies?.length > 0 && ( <> -