From 7f66f7dd8e8b52b24f34e72033b9d45c920f8a4c Mon Sep 17 00:00:00 2001 From: Alexander Khramov Date: Wed, 19 Jun 2024 17:42:34 +0300 Subject: [PATCH 1/3] fix: add withTimeout for wallet_revokePermissions request during disconnect --- packages/core/src/connectors/injected.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/core/src/connectors/injected.ts b/packages/core/src/connectors/injected.ts index 897bda6cd9..7214e59249 100644 --- a/packages/core/src/connectors/injected.ts +++ b/packages/core/src/connectors/injected.ts @@ -11,6 +11,7 @@ import { getAddress, numberToHex, withRetry, + withTimeout, } from 'viem' import type { Connector } from '../createConfig.js' @@ -268,7 +269,7 @@ export function injected(parameters: InjectedParameters = {}) { // https://github.com/MetaMask/metamask-improvement-proposals/blob/main/MIPs/mip-2.md try { // TODO: Remove explicit type for viem@3 - await provider.request<{ + await withTimeout(() => provider.request<{ Method: 'wallet_revokePermissions' Parameters: [permissions: { eth_accounts: Record }] ReturnType: null @@ -276,7 +277,7 @@ export function injected(parameters: InjectedParameters = {}) { // `'wallet_revokePermissions'` added in `viem@2.10.3` method: 'wallet_revokePermissions', params: [{ eth_accounts: {} }], - }) + }), { timeout: 10 }) } catch {} // Add shim signalling connector is disconnected From 02078996aeea8db3642ff60f8e95408a874c4e16 Mon Sep 17 00:00:00 2001 From: Alexander Khramov Date: Wed, 19 Jun 2024 17:53:35 +0300 Subject: [PATCH 2/3] chore: add changeset --- .changeset/neat-cups-rhyme.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/neat-cups-rhyme.md diff --git a/.changeset/neat-cups-rhyme.md b/.changeset/neat-cups-rhyme.md new file mode 100644 index 0000000000..566024bfc7 --- /dev/null +++ b/.changeset/neat-cups-rhyme.md @@ -0,0 +1,5 @@ +--- +"@wagmi/core": minor +--- + +Added withTimeout for wallet_revokePermissions request during disconnect From 30641706b4905e96572e2b222d1c68dd9fda5b9a Mon Sep 17 00:00:00 2001 From: Tom Meagher Date: Wed, 19 Jun 2024 11:33:18 -0400 Subject: [PATCH 3/3] refactor: tweaks --- .changeset/neat-cups-rhyme.md | 4 ++-- packages/core/src/connectors/injected.ts | 26 +++++++++++++++--------- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/.changeset/neat-cups-rhyme.md b/.changeset/neat-cups-rhyme.md index 566024bfc7..dc845ab979 100644 --- a/.changeset/neat-cups-rhyme.md +++ b/.changeset/neat-cups-rhyme.md @@ -1,5 +1,5 @@ --- -"@wagmi/core": minor +"@wagmi/core": patch --- -Added withTimeout for wallet_revokePermissions request during disconnect +Added timeout to internal call of `'wallet_revokePermissions'` request during `injected#disconnect` as some wallets that do not support this method hang. diff --git a/packages/core/src/connectors/injected.ts b/packages/core/src/connectors/injected.ts index 7214e59249..ab08033a22 100644 --- a/packages/core/src/connectors/injected.ts +++ b/packages/core/src/connectors/injected.ts @@ -268,16 +268,22 @@ export function injected(parameters: InjectedParameters = {}) { // Experimental support for MetaMask disconnect // https://github.com/MetaMask/metamask-improvement-proposals/blob/main/MIPs/mip-2.md try { - // TODO: Remove explicit type for viem@3 - await withTimeout(() => provider.request<{ - Method: 'wallet_revokePermissions' - Parameters: [permissions: { eth_accounts: Record }] - ReturnType: null - }>({ - // `'wallet_revokePermissions'` added in `viem@2.10.3` - method: 'wallet_revokePermissions', - params: [{ eth_accounts: {} }], - }), { timeout: 10 }) + // Adding timeout as not all wallets support this method and can hang + // https://github.com/wevm/wagmi/issues/4064 + await withTimeout( + () => + // TODO: Remove explicit type for viem@3 + provider.request<{ + Method: 'wallet_revokePermissions' + Parameters: [permissions: { eth_accounts: Record }] + ReturnType: null + }>({ + // `'wallet_revokePermissions'` added in `viem@2.10.3` + method: 'wallet_revokePermissions', + params: [{ eth_accounts: {} }], + }), + { timeout: 100 }, + ) } catch {} // Add shim signalling connector is disconnected