From e1ae09e8623f4cb8c7582addfe249a1ce2d3f2c8 Mon Sep 17 00:00:00 2001 From: Haris Chaniotakis Date: Tue, 10 Dec 2024 12:50:17 +0200 Subject: [PATCH] fix(clerk-js): Always invoke an injected Web3 Wallet provider When the requested Web3 provider cannot be found, use any other available injected Web3 Wallet provider, instead of blocking the sign-in/sign-up flow --- .changeset/nine-penguins-grab.md | 5 +++++ .../clerk-js/src/utils/injectedWeb3Providers.ts | 14 ++++++++------ 2 files changed, 13 insertions(+), 6 deletions(-) create mode 100644 .changeset/nine-penguins-grab.md diff --git a/.changeset/nine-penguins-grab.md b/.changeset/nine-penguins-grab.md new file mode 100644 index 00000000000..f1659583319 --- /dev/null +++ b/.changeset/nine-penguins-grab.md @@ -0,0 +1,5 @@ +--- +'@clerk/clerk-js': patch +--- + +Bug fix: When the requested Web3 provider cannot be found, use any other available injected Web3 Wallet provider, instead of blocking the sign-in/sign-up flow. diff --git a/packages/clerk-js/src/utils/injectedWeb3Providers.ts b/packages/clerk-js/src/utils/injectedWeb3Providers.ts index cd91072a55e..f61b113d34d 100644 --- a/packages/clerk-js/src/utils/injectedWeb3Providers.ts +++ b/packages/clerk-js/src/utils/injectedWeb3Providers.ts @@ -53,13 +53,15 @@ class InjectedWeb3Providers { } get = (provider: InjectedWeb3Provider) => { - // In case there is a single injected provider, use that directly. - // This is needed in order to support other compatible Web3 Wallets (e.g. Rabby Wallet) - // and maintain the previous behavior - if (this.#providers.length === 1) { - return this.#providers[0].provider; + const ethProvider = this.#providers.find(p => p.info.name === this.#providerIdMap[provider])?.provider; + if (ethProvider !== undefined) { + return ethProvider; } - return this.#providers.find(p => p.info.name === this.#providerIdMap[provider])?.provider; + + // In case we weren't able to find the requested provider, fallback to the + // global injected provider instead, if any, to allow the user to continue + // the flow rather than blocking it + return window.ethereum; }; #onAnnouncement = (event: EIP6963AnnounceProviderEvent) => {