From f66a2e5245333ccfd036427390ebde483c083199 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Mon, 26 Jan 2026 14:34:02 +0000 Subject: [PATCH] fix(nostr): retry NIP-07 detection on timeout Increases the robustness of NIP-07 extension detection by implementing a retry loop in `NostrClient.login`. If the initial detection (default 5s) times out, the client will retry up to 3 times with a 1-second delay between attempts, effectively handling slower injection scenarios or race conditions during page load. - Modified `js/nostr/client.js` to wrap `waitForNip07Extension` in a retry loop. - Validated with a reproduction test case simulating late injection. --- js/nostr/client.js | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/js/nostr/client.js b/js/nostr/client.js index 6e87e9dc..ff0495a5 100644 --- a/js/nostr/client.js +++ b/js/nostr/client.js @@ -3959,13 +3959,36 @@ export class NostrClient { */ async login(options = {}) { try { - try { - await waitForNip07Extension(); - } catch (waitError) { - devLogger.log("Timed out waiting for extension injection:", waitError); + let extension = null; + let attempts = 0; + const maxAttempts = 3; + + while (!extension && attempts < maxAttempts) { + try { + await waitForNip07Extension(); + extension = window.nostr; + } catch (waitError) { + devLogger.log( + `Timed out waiting for extension injection (attempt ${ + attempts + 1 + }/${maxAttempts}):`, + waitError, + ); + } + + if (extension) { + break; + } + + attempts++; + if (attempts < maxAttempts) { + devLogger.log("Retrying NIP-07 detection..."); + await new Promise((resolve) => setTimeout(resolve, 1000)); + } } - const extension = window.nostr; + extension = window.nostr; + if (!extension) { devLogger.log("No Nostr extension found"); throw new Error(