From 87d76bb4a8adc382542f86b9a790872e272faf1c Mon Sep 17 00:00:00 2001 From: woikos Date: Tue, 23 Dec 2025 12:44:14 +0100 Subject: [PATCH] Release v1.1.1 - Add permission prompt queue system and batch actions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add single-active-prompt queue to prevent permission window spam - Implement request deduplication using hash-based matching - Add 30-second timeout for unanswered prompts with cleanup - Add window close event handling for orphaned prompts - Add queue size limit (100 requests max) - Add "All Queued" row with Reject All/Approve All buttons - Hide batch buttons when queue size is 1 or less - Add 'reject-all' and 'approve-all' response types to PromptResponse Files modified: - package.json - projects/chrome/public/prompt.html - projects/chrome/src/background-common.ts - projects/chrome/src/background.ts - projects/chrome/src/prompt.ts - projects/firefox/public/prompt.html - projects/firefox/src/background-common.ts - projects/firefox/src/background.ts - projects/firefox/src/prompt.ts - releases/plebeian-signer-chrome-v1.1.1.zip - releases/plebeian-signer-firefox-v1.1.1.zip 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- package.json | 6 +- projects/chrome/public/manifest.json | 2 +- projects/chrome/public/prompt.html | 7 + projects/chrome/src/background-common.ts | 4 +- projects/chrome/src/background.ts | 265 +++++++++++++++--- projects/chrome/src/prompt.ts | 17 ++ projects/firefox/public/manifest.json | 2 +- projects/firefox/public/prompt.html | 7 + projects/firefox/src/background-common.ts | 4 +- projects/firefox/src/background.ts | 265 +++++++++++++++--- projects/firefox/src/prompt.ts | 17 ++ ....zip => plebeian-signer-chrome-v1.1.1.zip} | Bin 1099858 -> 1100671 bytes ...zip => plebeian-signer-firefox-v1.1.1.zip} | Bin 1101037 -> 1101861 bytes 13 files changed, 515 insertions(+), 81 deletions(-) rename releases/{plebeian-signer-chrome-v1.1.0.zip => plebeian-signer-chrome-v1.1.1.zip} (86%) rename releases/{plebeian-signer-firefox-v1.1.0.zip => plebeian-signer-firefox-v1.1.1.zip} (84%) diff --git a/package.json b/package.json index 5abce00..600b91d 100644 --- a/package.json +++ b/package.json @@ -1,12 +1,12 @@ { "name": "plebeian-signer", - "version": "v1.1.0", + "version": "v1.1.1", "custom": { "chrome": { - "version": "v1.1.0" + "version": "v1.1.1" }, "firefox": { - "version": "v1.1.0" + "version": "v1.1.1" } }, "scripts": { diff --git a/projects/chrome/public/manifest.json b/projects/chrome/public/manifest.json index 541d415..925a430 100644 --- a/projects/chrome/public/manifest.json +++ b/projects/chrome/public/manifest.json @@ -2,7 +2,7 @@ "manifest_version": 3, "name": "Plebeian Signer - Nostr Identity Manager & Signer", "description": "Manage and switch between multiple identities while interacting with Nostr apps", - "version": "1.1.0", + "version": "1.1.1", "homepage_url": "https://github.com/PlebeianApp/plebeian-signer", "options_page": "options.html", "permissions": [ diff --git a/projects/chrome/public/prompt.html b/projects/chrome/public/prompt.html index 24ee65f..fbbb0ab 100644 --- a/projects/chrome/public/prompt.html +++ b/projects/chrome/public/prompt.html @@ -278,6 +278,13 @@ +
+ All Queued +
+ + +
+
diff --git a/projects/chrome/src/background-common.ts b/projects/chrome/src/background-common.ts index 0dbb4ef..104197c 100644 --- a/projects/chrome/src/background-common.ts +++ b/projects/chrome/src/background-common.ts @@ -48,8 +48,10 @@ export const debug = function (message: any) { export type PromptResponse = | 'reject' | 'reject-once' + | 'reject-all' // P2: Reject all requests of this type from this host | 'approve' - | 'approve-once'; + | 'approve-once' + | 'approve-all'; // P2: Approve all requests of this type from this host export interface PromptResponseMessage { id: string; diff --git a/projects/chrome/src/background.ts b/projects/chrome/src/background.ts index 104b1d9..2fbaba4 100644 --- a/projects/chrome/src/background.ts +++ b/projects/chrome/src/background.ts @@ -105,11 +105,24 @@ function parseInvoiceAmount(invoice: string): number | undefined { type Relays = Record; +// ========================================== +// Permission Prompt Queue System (P0) +// ========================================== + +// Timeout for permission prompts (30 seconds) +const PROMPT_TIMEOUT_MS = 30000; + +// Maximum number of queued permission requests (prevent DoS) +const MAX_PERMISSION_QUEUE_SIZE = 100; + +// Track open prompts with metadata for cleanup const openPrompts = new Map< string, { resolve: (response: PromptResponse) => void; reject: (reason?: any) => void; + windowId?: number; + timeoutId?: ReturnType; } >(); @@ -123,6 +136,170 @@ const pendingRequests: { reject: (error: any) => void; }[] = []; +// Queue for permission requests (only one prompt shown at a time) +interface PermissionQueueItem { + id: string; + url: string; + width: number; + height: number; + resolve: (response: PromptResponse) => void; + reject: (reason?: any) => void; +} + +const permissionQueue: PermissionQueueItem[] = []; +let activePromptId: string | null = null; + +/** + * Show the next permission prompt from the queue + */ +async function showNextPermissionPrompt(): Promise { + if (activePromptId || permissionQueue.length === 0) { + return; + } + + const next = permissionQueue[0]; + activePromptId = next.id; + + const { top, left } = await getPosition(next.width, next.height); + + try { + const window = await browser.windows.create({ + type: 'popup', + url: next.url, + height: next.height, + width: next.width, + top, + left, + }); + + const promptData = openPrompts.get(next.id); + if (promptData && window.id) { + promptData.windowId = window.id; + promptData.timeoutId = setTimeout(() => { + debug(`Prompt ${next.id} timed out after ${PROMPT_TIMEOUT_MS}ms`); + cleanupPrompt(next.id, 'timeout'); + }, PROMPT_TIMEOUT_MS); + } + } catch (error) { + debug(`Failed to create prompt window: ${error}`); + cleanupPrompt(next.id, 'error'); + } +} + +/** + * Clean up a prompt and process the next one in queue + */ +function cleanupPrompt(promptId: string, reason: 'response' | 'timeout' | 'closed' | 'error'): void { + const promptData = openPrompts.get(promptId); + + if (promptData) { + if (promptData.timeoutId) { + clearTimeout(promptData.timeoutId); + } + if (reason !== 'response') { + promptData.reject(new Error(`Permission prompt ${reason}`)); + } + openPrompts.delete(promptId); + } + + const queueIndex = permissionQueue.findIndex(item => item.id === promptId); + if (queueIndex !== -1) { + permissionQueue.splice(queueIndex, 1); + } + + if (activePromptId === promptId) { + activePromptId = null; + } + + showNextPermissionPrompt(); +} + +/** + * Queue a permission prompt request + */ +function queuePermissionPrompt( + urlWithoutId: string, + width: number, + height: number +): Promise { + return new Promise((resolve, reject) => { + if (permissionQueue.length >= MAX_PERMISSION_QUEUE_SIZE) { + reject(new Error('Too many pending permission requests. Please try again later.')); + return; + } + + const id = crypto.randomUUID(); + const separator = urlWithoutId.includes('?') ? '&' : '?'; + const url = `${urlWithoutId}${separator}id=${id}`; + + openPrompts.set(id, { resolve, reject }); + permissionQueue.push({ id, url, width, height, resolve, reject }); + + debug(`Queued permission prompt ${id}. Queue size: ${permissionQueue.length}`); + showNextPermissionPrompt(); + }); +} + +// Listen for window close events to clean up orphaned prompts +browser.windows.onRemoved.addListener((windowId: number) => { + for (const [promptId, promptData] of openPrompts.entries()) { + if (promptData.windowId === windowId) { + debug(`Prompt window ${windowId} closed without response`); + cleanupPrompt(promptId, 'closed'); + break; + } + } +}); + +// ========================================== +// Request Deduplication (P1) +// ========================================== + +const pendingRequestPromises = new Map>(); + +/** + * Generate a hash key for request deduplication + */ +function getRequestHash(host: string, method: string, params: any): string { + if (method === 'signEvent' && params?.kind !== undefined) { + return `${host}:${method}:kind${params.kind}`; + } + if ((method.includes('encrypt') || method.includes('decrypt')) && params?.peerPubkey) { + return `${host}:${method}:${params.peerPubkey}`; + } + return `${host}:${method}`; +} + +/** + * Queue a permission prompt with deduplication + */ +function queuePermissionPromptDeduped( + host: string, + method: string, + params: any, + urlWithoutId: string, + width: number, + height: number +): Promise { + const hash = getRequestHash(host, method, params); + + const existingPromise = pendingRequestPromises.get(hash); + if (existingPromise) { + debug(`Deduplicating request: ${hash}`); + return existingPromise; + } + + const promise = queuePermissionPrompt(urlWithoutId, width, height) + .finally(() => { + pendingRequestPromises.delete(hash); + }); + + pendingRequestPromises.set(hash, promise); + debug(`New permission request: ${hash}`); + + return promise; +} + browser.runtime.onMessage.addListener(async (message /*, sender*/) => { debug('Message received'); @@ -164,13 +341,12 @@ browser.runtime.onMessage.addListener(async (message /*, sender*/) => { const promptResponse = request as PromptResponseMessage; const openPrompt = openPrompts.get(promptResponse.id); if (!openPrompt) { - throw new Error( - 'Prompt response could not be matched to any previous request.' - ); + debug('Prompt response could not be matched (may have timed out)'); + return; } openPrompt.resolve(promptResponse.response); - openPrompts.delete(promptResponse.id); + cleanupPrompt(promptResponse.id, 'response'); return; } @@ -239,29 +415,23 @@ async function processNip07Request(req: BackgroundRequestMessage): Promise } if (permissionState === undefined) { - // Ask user for permission. + // Ask user for permission (queued + deduplicated) const width = 375; const height = 600; - const { top, left } = await getPosition(width, height); const base64Event = Buffer.from( JSON.stringify(req.params ?? {}, undefined, 2) ).toString('base64'); - const response = await new Promise((resolve, reject) => { - const id = crypto.randomUUID(); - openPrompts.set(id, { resolve, reject }); - browser.windows.create({ - type: 'popup', - url: `prompt.html?method=${req.method}&host=${req.host}&id=${id}&nick=${currentIdentity.nick}&event=${base64Event}`, - height, - width, - top, - left, - }); - }); + // Include queue info for user awareness + const queueSize = permissionQueue.length; + const promptUrl = `prompt.html?method=${req.method}&host=${req.host}&nick=${encodeURIComponent(currentIdentity.nick)}&event=${base64Event}&queue=${queueSize}`; + const response = await queuePermissionPromptDeduped(req.host, req.method, req.params, promptUrl, width, height); debug(response); + + // Handle permission storage based on response type if (response === 'approve' || response === 'reject') { + // Store permission for this specific kind (if signEvent) or method const policy = response === 'approve' ? 'allow' : 'deny'; await storePermission( browserSessionData, @@ -271,15 +441,34 @@ async function processNip07Request(req: BackgroundRequestMessage): Promise policy, req.params?.kind ); - await backgroundLogPermissionStored( + await backgroundLogPermissionStored(req.host, req.method, policy, req.params?.kind); + } else if (response === 'approve-all') { + // P2: Store permission for ALL kinds/uses of this method from this host + await storePermission( + browserSessionData, + currentIdentity, req.host, req.method, - policy, - req.params?.kind + 'allow', + undefined // undefined kind = allow all kinds for signEvent ); + await backgroundLogPermissionStored(req.host, req.method, 'allow', undefined); + debug(`Stored approve-all permission for ${req.method} from ${req.host}`); + } else if (response === 'reject-all') { + // P2: Store deny permission for ALL uses of this method from this host + await storePermission( + browserSessionData, + currentIdentity, + req.host, + req.method, + 'deny', + undefined + ); + await backgroundLogPermissionStored(req.host, req.method, 'deny', undefined); + debug(`Stored reject-all permission for ${req.method} from ${req.host}`); } - if (['reject', 'reject-once'].includes(response)) { + if (['reject', 'reject-once', 'reject-all'].includes(response)) { await backgroundLogNip07Action(req.method, req.host, false, false, { kind: req.params?.kind, peerPubkey: req.params?.peerPubkey, @@ -404,10 +593,9 @@ async function processWeblnRequest(req: BackgroundRequestMessage): Promise } if (permissionState === undefined) { - // Ask user for permission + // Ask user for permission (queued + deduplicated) const width = 375; const height = 600; - const { top, left } = await getPosition(width, height); // For sendPayment, include the invoice amount in the prompt data let promptParams = req.params ?? {}; @@ -420,18 +608,10 @@ async function processWeblnRequest(req: BackgroundRequestMessage): Promise JSON.stringify(promptParams, undefined, 2) ).toString('base64'); - const response = await new Promise((resolve, reject) => { - const id = crypto.randomUUID(); - openPrompts.set(id, { resolve, reject }); - browser.windows.create({ - type: 'popup', - url: `prompt.html?method=${method}&host=${req.host}&id=${id}&nick=WebLN&event=${base64Event}`, - height, - width, - top, - left, - }); - }); + // Include queue info for user awareness + const queueSize = permissionQueue.length; + const promptUrl = `prompt.html?method=${method}&host=${req.host}&nick=WebLN&event=${base64Event}&queue=${queueSize}`; + const response = await queuePermissionPromptDeduped(req.host, method, req.params, promptUrl, width, height); debug(response); @@ -446,9 +626,20 @@ async function processWeblnRequest(req: BackgroundRequestMessage): Promise policy ); await backgroundLogPermissionStored(req.host, method, policy); + } else if (response === 'approve-all' && method !== 'webln.sendPayment' && method !== 'webln.keysend') { + // P2: Store permission for all uses of this WebLN method + await storePermission( + browserSessionData, + null, + req.host, + method, + 'allow' + ); + await backgroundLogPermissionStored(req.host, method, 'allow'); + debug(`Stored approve-all permission for ${method} from ${req.host}`); } - if (['reject', 'reject-once'].includes(response)) { + if (['reject', 'reject-once', 'reject-all'].includes(response)) { throw new Error('Permission denied'); } } diff --git a/projects/chrome/src/prompt.ts b/projects/chrome/src/prompt.ts index 99ace62..94a0072 100644 --- a/projects/chrome/src/prompt.ts +++ b/projects/chrome/src/prompt.ts @@ -302,4 +302,21 @@ document.addEventListener('DOMContentLoaded', function () { approveAlwaysButton?.addEventListener('click', () => { deliver('approve'); }); + + const rejectAllButton = document.getElementById('rejectAllButton'); + rejectAllButton?.addEventListener('click', () => { + deliver('reject-all'); + }); + + const approveAllButton = document.getElementById('approveAllButton'); + approveAllButton?.addEventListener('click', () => { + deliver('approve-all'); + }); + + // Show/hide "All Queued" row based on queue size + const queueSize = parseInt(params.get('queueSize') || '0', 10); + const allQueuedRow = document.getElementById('allQueuedRow'); + if (allQueuedRow && queueSize <= 1) { + allQueuedRow.style.display = 'none'; + } }); diff --git a/projects/firefox/public/manifest.json b/projects/firefox/public/manifest.json index 0059cb2..8d4a494 100644 --- a/projects/firefox/public/manifest.json +++ b/projects/firefox/public/manifest.json @@ -2,7 +2,7 @@ "manifest_version": 3, "name": "Plebeian Signer", "description": "Nostr Identity Manager & Signer", - "version": "1.1.0", + "version": "1.1.1", "homepage_url": "https://github.com/PlebeianApp/plebeian-signer", "options_page": "options.html", "permissions": [ diff --git a/projects/firefox/public/prompt.html b/projects/firefox/public/prompt.html index 24ee65f..fbbb0ab 100644 --- a/projects/firefox/public/prompt.html +++ b/projects/firefox/public/prompt.html @@ -278,6 +278,13 @@ +
+ All Queued +
+ + +
+
diff --git a/projects/firefox/src/background-common.ts b/projects/firefox/src/background-common.ts index f2138c9..68d89a2 100644 --- a/projects/firefox/src/background-common.ts +++ b/projects/firefox/src/background-common.ts @@ -49,8 +49,10 @@ export const debug = function (message: any) { export type PromptResponse = | 'reject' | 'reject-once' + | 'reject-all' // P2: Reject all requests of this type from this host | 'approve' - | 'approve-once'; + | 'approve-once' + | 'approve-all'; // P2: Approve all requests of this type from this host export interface PromptResponseMessage { id: string; diff --git a/projects/firefox/src/background.ts b/projects/firefox/src/background.ts index 104b1d9..2fbaba4 100644 --- a/projects/firefox/src/background.ts +++ b/projects/firefox/src/background.ts @@ -105,11 +105,24 @@ function parseInvoiceAmount(invoice: string): number | undefined { type Relays = Record; +// ========================================== +// Permission Prompt Queue System (P0) +// ========================================== + +// Timeout for permission prompts (30 seconds) +const PROMPT_TIMEOUT_MS = 30000; + +// Maximum number of queued permission requests (prevent DoS) +const MAX_PERMISSION_QUEUE_SIZE = 100; + +// Track open prompts with metadata for cleanup const openPrompts = new Map< string, { resolve: (response: PromptResponse) => void; reject: (reason?: any) => void; + windowId?: number; + timeoutId?: ReturnType; } >(); @@ -123,6 +136,170 @@ const pendingRequests: { reject: (error: any) => void; }[] = []; +// Queue for permission requests (only one prompt shown at a time) +interface PermissionQueueItem { + id: string; + url: string; + width: number; + height: number; + resolve: (response: PromptResponse) => void; + reject: (reason?: any) => void; +} + +const permissionQueue: PermissionQueueItem[] = []; +let activePromptId: string | null = null; + +/** + * Show the next permission prompt from the queue + */ +async function showNextPermissionPrompt(): Promise { + if (activePromptId || permissionQueue.length === 0) { + return; + } + + const next = permissionQueue[0]; + activePromptId = next.id; + + const { top, left } = await getPosition(next.width, next.height); + + try { + const window = await browser.windows.create({ + type: 'popup', + url: next.url, + height: next.height, + width: next.width, + top, + left, + }); + + const promptData = openPrompts.get(next.id); + if (promptData && window.id) { + promptData.windowId = window.id; + promptData.timeoutId = setTimeout(() => { + debug(`Prompt ${next.id} timed out after ${PROMPT_TIMEOUT_MS}ms`); + cleanupPrompt(next.id, 'timeout'); + }, PROMPT_TIMEOUT_MS); + } + } catch (error) { + debug(`Failed to create prompt window: ${error}`); + cleanupPrompt(next.id, 'error'); + } +} + +/** + * Clean up a prompt and process the next one in queue + */ +function cleanupPrompt(promptId: string, reason: 'response' | 'timeout' | 'closed' | 'error'): void { + const promptData = openPrompts.get(promptId); + + if (promptData) { + if (promptData.timeoutId) { + clearTimeout(promptData.timeoutId); + } + if (reason !== 'response') { + promptData.reject(new Error(`Permission prompt ${reason}`)); + } + openPrompts.delete(promptId); + } + + const queueIndex = permissionQueue.findIndex(item => item.id === promptId); + if (queueIndex !== -1) { + permissionQueue.splice(queueIndex, 1); + } + + if (activePromptId === promptId) { + activePromptId = null; + } + + showNextPermissionPrompt(); +} + +/** + * Queue a permission prompt request + */ +function queuePermissionPrompt( + urlWithoutId: string, + width: number, + height: number +): Promise { + return new Promise((resolve, reject) => { + if (permissionQueue.length >= MAX_PERMISSION_QUEUE_SIZE) { + reject(new Error('Too many pending permission requests. Please try again later.')); + return; + } + + const id = crypto.randomUUID(); + const separator = urlWithoutId.includes('?') ? '&' : '?'; + const url = `${urlWithoutId}${separator}id=${id}`; + + openPrompts.set(id, { resolve, reject }); + permissionQueue.push({ id, url, width, height, resolve, reject }); + + debug(`Queued permission prompt ${id}. Queue size: ${permissionQueue.length}`); + showNextPermissionPrompt(); + }); +} + +// Listen for window close events to clean up orphaned prompts +browser.windows.onRemoved.addListener((windowId: number) => { + for (const [promptId, promptData] of openPrompts.entries()) { + if (promptData.windowId === windowId) { + debug(`Prompt window ${windowId} closed without response`); + cleanupPrompt(promptId, 'closed'); + break; + } + } +}); + +// ========================================== +// Request Deduplication (P1) +// ========================================== + +const pendingRequestPromises = new Map>(); + +/** + * Generate a hash key for request deduplication + */ +function getRequestHash(host: string, method: string, params: any): string { + if (method === 'signEvent' && params?.kind !== undefined) { + return `${host}:${method}:kind${params.kind}`; + } + if ((method.includes('encrypt') || method.includes('decrypt')) && params?.peerPubkey) { + return `${host}:${method}:${params.peerPubkey}`; + } + return `${host}:${method}`; +} + +/** + * Queue a permission prompt with deduplication + */ +function queuePermissionPromptDeduped( + host: string, + method: string, + params: any, + urlWithoutId: string, + width: number, + height: number +): Promise { + const hash = getRequestHash(host, method, params); + + const existingPromise = pendingRequestPromises.get(hash); + if (existingPromise) { + debug(`Deduplicating request: ${hash}`); + return existingPromise; + } + + const promise = queuePermissionPrompt(urlWithoutId, width, height) + .finally(() => { + pendingRequestPromises.delete(hash); + }); + + pendingRequestPromises.set(hash, promise); + debug(`New permission request: ${hash}`); + + return promise; +} + browser.runtime.onMessage.addListener(async (message /*, sender*/) => { debug('Message received'); @@ -164,13 +341,12 @@ browser.runtime.onMessage.addListener(async (message /*, sender*/) => { const promptResponse = request as PromptResponseMessage; const openPrompt = openPrompts.get(promptResponse.id); if (!openPrompt) { - throw new Error( - 'Prompt response could not be matched to any previous request.' - ); + debug('Prompt response could not be matched (may have timed out)'); + return; } openPrompt.resolve(promptResponse.response); - openPrompts.delete(promptResponse.id); + cleanupPrompt(promptResponse.id, 'response'); return; } @@ -239,29 +415,23 @@ async function processNip07Request(req: BackgroundRequestMessage): Promise } if (permissionState === undefined) { - // Ask user for permission. + // Ask user for permission (queued + deduplicated) const width = 375; const height = 600; - const { top, left } = await getPosition(width, height); const base64Event = Buffer.from( JSON.stringify(req.params ?? {}, undefined, 2) ).toString('base64'); - const response = await new Promise((resolve, reject) => { - const id = crypto.randomUUID(); - openPrompts.set(id, { resolve, reject }); - browser.windows.create({ - type: 'popup', - url: `prompt.html?method=${req.method}&host=${req.host}&id=${id}&nick=${currentIdentity.nick}&event=${base64Event}`, - height, - width, - top, - left, - }); - }); + // Include queue info for user awareness + const queueSize = permissionQueue.length; + const promptUrl = `prompt.html?method=${req.method}&host=${req.host}&nick=${encodeURIComponent(currentIdentity.nick)}&event=${base64Event}&queue=${queueSize}`; + const response = await queuePermissionPromptDeduped(req.host, req.method, req.params, promptUrl, width, height); debug(response); + + // Handle permission storage based on response type if (response === 'approve' || response === 'reject') { + // Store permission for this specific kind (if signEvent) or method const policy = response === 'approve' ? 'allow' : 'deny'; await storePermission( browserSessionData, @@ -271,15 +441,34 @@ async function processNip07Request(req: BackgroundRequestMessage): Promise policy, req.params?.kind ); - await backgroundLogPermissionStored( + await backgroundLogPermissionStored(req.host, req.method, policy, req.params?.kind); + } else if (response === 'approve-all') { + // P2: Store permission for ALL kinds/uses of this method from this host + await storePermission( + browserSessionData, + currentIdentity, req.host, req.method, - policy, - req.params?.kind + 'allow', + undefined // undefined kind = allow all kinds for signEvent ); + await backgroundLogPermissionStored(req.host, req.method, 'allow', undefined); + debug(`Stored approve-all permission for ${req.method} from ${req.host}`); + } else if (response === 'reject-all') { + // P2: Store deny permission for ALL uses of this method from this host + await storePermission( + browserSessionData, + currentIdentity, + req.host, + req.method, + 'deny', + undefined + ); + await backgroundLogPermissionStored(req.host, req.method, 'deny', undefined); + debug(`Stored reject-all permission for ${req.method} from ${req.host}`); } - if (['reject', 'reject-once'].includes(response)) { + if (['reject', 'reject-once', 'reject-all'].includes(response)) { await backgroundLogNip07Action(req.method, req.host, false, false, { kind: req.params?.kind, peerPubkey: req.params?.peerPubkey, @@ -404,10 +593,9 @@ async function processWeblnRequest(req: BackgroundRequestMessage): Promise } if (permissionState === undefined) { - // Ask user for permission + // Ask user for permission (queued + deduplicated) const width = 375; const height = 600; - const { top, left } = await getPosition(width, height); // For sendPayment, include the invoice amount in the prompt data let promptParams = req.params ?? {}; @@ -420,18 +608,10 @@ async function processWeblnRequest(req: BackgroundRequestMessage): Promise JSON.stringify(promptParams, undefined, 2) ).toString('base64'); - const response = await new Promise((resolve, reject) => { - const id = crypto.randomUUID(); - openPrompts.set(id, { resolve, reject }); - browser.windows.create({ - type: 'popup', - url: `prompt.html?method=${method}&host=${req.host}&id=${id}&nick=WebLN&event=${base64Event}`, - height, - width, - top, - left, - }); - }); + // Include queue info for user awareness + const queueSize = permissionQueue.length; + const promptUrl = `prompt.html?method=${method}&host=${req.host}&nick=WebLN&event=${base64Event}&queue=${queueSize}`; + const response = await queuePermissionPromptDeduped(req.host, method, req.params, promptUrl, width, height); debug(response); @@ -446,9 +626,20 @@ async function processWeblnRequest(req: BackgroundRequestMessage): Promise policy ); await backgroundLogPermissionStored(req.host, method, policy); + } else if (response === 'approve-all' && method !== 'webln.sendPayment' && method !== 'webln.keysend') { + // P2: Store permission for all uses of this WebLN method + await storePermission( + browserSessionData, + null, + req.host, + method, + 'allow' + ); + await backgroundLogPermissionStored(req.host, method, 'allow'); + debug(`Stored approve-all permission for ${method} from ${req.host}`); } - if (['reject', 'reject-once'].includes(response)) { + if (['reject', 'reject-once', 'reject-all'].includes(response)) { throw new Error('Permission denied'); } } diff --git a/projects/firefox/src/prompt.ts b/projects/firefox/src/prompt.ts index 33f148f..3745e6f 100644 --- a/projects/firefox/src/prompt.ts +++ b/projects/firefox/src/prompt.ts @@ -303,4 +303,21 @@ document.addEventListener('DOMContentLoaded', function () { approveAlwaysButton?.addEventListener('click', () => { deliver('approve'); }); + + const rejectAllButton = document.getElementById('rejectAllButton'); + rejectAllButton?.addEventListener('click', () => { + deliver('reject-all'); + }); + + const approveAllButton = document.getElementById('approveAllButton'); + approveAllButton?.addEventListener('click', () => { + deliver('approve-all'); + }); + + // Show/hide "All Queued" row based on queue size + const queueSize = parseInt(params.get('queueSize') || '0', 10); + const allQueuedRow = document.getElementById('allQueuedRow'); + if (allQueuedRow && queueSize <= 1) { + allQueuedRow.style.display = 'none'; + } }); diff --git a/releases/plebeian-signer-chrome-v1.1.0.zip b/releases/plebeian-signer-chrome-v1.1.1.zip similarity index 86% rename from releases/plebeian-signer-chrome-v1.1.0.zip rename to releases/plebeian-signer-chrome-v1.1.1.zip index fb33c22809d1ae92daf09a3c958865914d1c1110..8730ec8e4a4ccab637ac58bdfbabcc5b25dadb97 100644 GIT binary patch delta 151366 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