From 4e549709a970b6a9a6e86809f48c37f77372b93d Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Wed, 28 Jan 2026 20:12:17 +0000 Subject: [PATCH] fix(auth): request NIP-07 permissions during login and fix retry order (agent) - Updated `NostrClient.loginWithExtension` to explicitly request `DEFAULT_NIP07_PERMISSION_METHODS` and `DEFAULT_NIP07_ENCRYPTION_METHODS` after retrieving the public key. - Ensures that encryption capabilities are available immediately upon login, satisfying unit tests. - Modified `requestEnablePermissions` in `js/nostr/nip07Permissions.js` to attempt structured permission requests *before* the generic `enable()` fallback, aligning implementation with test expectations and ensuring extensions receive the specific scope request. - `loginWithExtension` now throws if the permission request fails. Co-authored-by: PR0M3TH3AN <53631862+PR0M3TH3AN@users.noreply.github.com> --- js/nostr/client.js | 9 +++++++++ js/nostr/nip07Permissions.js | 3 ++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/js/nostr/client.js b/js/nostr/client.js index f9124a95..35485988 100644 --- a/js/nostr/client.js +++ b/js/nostr/client.js @@ -2103,6 +2103,15 @@ export class NostrClient { } } + const permissionResult = await this.ensureExtensionPermissions([ + ...DEFAULT_NIP07_PERMISSION_METHODS, + ...DEFAULT_NIP07_ENCRYPTION_METHODS, + ]); + + if (!permissionResult.ok) { + throw permissionResult.error; + } + const adapter = await createNip07Adapter(extension); adapter.pubkey = pubkey; setActiveSigner(adapter); diff --git a/js/nostr/nip07Permissions.js b/js/nostr/nip07Permissions.js index c3e7a935..4c0b7cf8 100644 --- a/js/nostr/nip07Permissions.js +++ b/js/nostr/nip07Permissions.js @@ -327,13 +327,14 @@ export async function requestEnablePermissions( .filter(Boolean) : []; - const permissionVariants = [null]; + const permissionVariants = []; if (normalized.length) { permissionVariants.push({ permissions: normalized.map((method) => ({ method })), }); permissionVariants.push({ permissions: normalized }); } + permissionVariants.push(null); const enableTimeoutMs = getEnableVariantTimeoutMs(); const loginTimeoutMs = getNip07LoginTimeoutMs();