Repository: reown-com/appkit
Pull request #4100: feat: createAppkit option to override universal provider config
Author: login: KannuSingh
Created: 2025-03-28T05:55:11Z | Merged: 2025-03-28T10:53:09Z

# Description

Adds support for customizing Universal Provider namespace configuration via the new `universalProviderConfigOverride` option in OptionsController.
This change enables:
- Custom RPC methods for different namespaces (e.g., EVM, Solana)
- Override for namespace chains, events, and RPC endpoints

## Type of change

- [ ] Chore (non-breaking change that addresses non-functional tasks, maintenance, or code quality improvements)
- [ ] Bug fix (non-breaking change which fixes an issue)
- [x] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)

# Associated Issues

For Linear issues: Closes APKT-xxx
For GH issues: closes #...

# Showcase (Optional)

If there is a UI change include the screenshots with before and after state.
If new feature is being introduced, include the link to demo recording.

# Checklist

- [x] Code in this PR is covered by automated tests (Unit tests, E2E tests)
- [x] My changes generate no new warnings
- [x] I have reviewed my own code
- [ ] I have filled out all required sections
- [ ] I have tested my changes on the preview link
- [ ] Approver of this PR confirms that the changes are tested on the preview link



Diff:
diff --git a/.changeset/bitter-days-talk.md b/.changeset/bitter-days-talk.md
new file mode 100644
index 0000000000..eff897de55
--- /dev/null
+++ b/.changeset/bitter-days-talk.md
@@ -0,0 +1,24 @@
+---
+'@reown/appkit-adapter-wagmi': patch
+'@reown/appkit-controllers': patch
+'@reown/appkit': patch
+'@reown/appkit-adapter-bitcoin': patch
+'@reown/appkit-adapter-ethers': patch
+'@reown/appkit-adapter-ethers5': patch
+'@reown/appkit-adapter-solana': patch
+'@reown/appkit-utils': patch
+'@reown/appkit-cdn': patch
+'@reown/appkit-cli': patch
+'@reown/appkit-common': patch
+'@reown/appkit-core': patch
+'@reown/appkit-experimental': patch
+'@reown/appkit-polyfills': patch
+'@reown/appkit-scaffold-ui': patch
+'@reown/appkit-siwe': patch
+'@reown/appkit-siwx': patch
+'@reown/appkit-ui': patch
+'@reown/appkit-wallet': patch
+'@reown/appkit-wallet-button': patch
+---
+
+adds support for customizing universal provider configuration via a new universalProviderConfigOverride option
diff --git a/packages/adapters/wagmi/src/connectors/UniversalConnector.ts b/packages/adapters/wagmi/src/connectors/UniversalConnector.ts
index b2fa929829..6519247942 100644
--- a/packages/adapters/wagmi/src/connectors/UniversalConnector.ts
+++ b/packages/adapters/wagmi/src/connectors/UniversalConnector.ts
@@ -24,7 +24,7 @@ import type { AppKitOptions } from '@reown/appkit'
 import type { AppKit } from '@reown/appkit'
 import { ConstantsUtil } from '@reown/appkit-common'
 import type { CaipNetwork, ChainNamespace } from '@reown/appkit-common'
-import { StorageUtil } from '@reown/appkit-controllers'
+import { OptionsController, StorageUtil } from '@reown/appkit-controllers'
 
 type UniversalConnector = Connector & {
   onDisplayUri(uri: string): void
@@ -108,9 +108,14 @@ export function walletConnect(
         if (provider.session && isChainsStale) {
           await provider.disconnect()
         }
+        const universalProviderConfigOverride =
+          OptionsController.state.universalProviderConfigOverride
         // If there isn't an active session or chains are stale, connect.
         if (!provider.session || isChainsStale) {
-          const namespaces = WcHelpersUtil.createNamespaces(caipNetworks)
+          const namespaces = WcHelpersUtil.createNamespaces(
+            caipNetworks,
+            universalProviderConfigOverride
+          )
           await provider.connect({
             optionalNamespaces: namespaces,
             ...('pairingTopic' in rest ? { pairingTopic: rest.pairingTopic } : {})
@@ -147,8 +152,8 @@ export function walletConnect(
           sessionDelete = this.onSessionDelete.bind(this)
           provider.on('session_delete', sessionDelete)
         }
-
-        provider.setDefaultChain(`eip155:${currentChainId}`)
+        const defaultChain = universalProviderConfigOverride?.defaultChain
+        provider.setDefaultChain(defaultChain ?? `eip155:${currentChainId}`)
 
         return { accounts, chainId: currentChainId }
       } catch (error) {
diff --git a/packages/appkit/src/client/appkit-base-client.ts b/packages/appkit/src/client/appkit-base-client.ts
index 9b15a12fe2..8f4fda4fc8 100644
--- a/packages/appkit/src/client/appkit-base-client.ts
+++ b/packages/appkit/src/client/appkit-base-client.ts
@@ -213,6 +213,7 @@ export abstract class AppKitBaseClient {
     OptionsController.setFeatures(options.features)
     OptionsController.setAllowUnsupportedChain(options.allowUnsupportedChain)
     OptionsController.setDefaultAccountTypes(options.defaultAccountTypes)
+    OptionsController.setUniversalProviderConfigOverride(options.universalProviderConfigOverride)
 
     const defaultMetaData = this.getDefaultMetaData()
     if (!options.metadata && defaultMetaData) {
diff --git a/packages/appkit/src/connectors/WalletConnectConnector.ts b/packages/appkit/src/connectors/WalletConnectConnector.ts
index 934e63ccbf..76361b122c 100644
--- a/packages/appkit/src/connectors/WalletConnectConnector.ts
+++ b/packages/appkit/src/connectors/WalletConnectConnector.ts
@@ -2,7 +2,7 @@ import type { SessionTypes } from '@walletconnect/types'
 import UniversalProvider from '@walletconnect/universal-provider'
 
 import { type CaipNetwork, type ChainNamespace, ConstantsUtil } from '@reown/appkit-common'
-import { SIWXUtil } from '@reown/appkit-controllers'
+import { OptionsController, SIWXUtil } from '@reown/appkit-controllers'
 import { PresetsUtil } from '@reown/appkit-utils'
 
 import type { ChainAdapterConnector } from '../adapters/ChainAdapterConnector.js'
@@ -37,8 +37,14 @@ export class WalletConnectConnector<Namespace extends ChainNamespace = ChainName
     const isAuthenticated = await this.authenticate()
 
     if (!isAuthenticated) {
+      const universalProviderConfigOverride =
+        OptionsController.state.universalProviderConfigOverride
+      const namespaces = WcHelpersUtil.createNamespaces(
+        this.caipNetworks,
+        universalProviderConfigOverride
+      )
       await this.provider.connect({
-        optionalNamespaces: WcHelpersUtil.createNamespaces(this.caipNetworks)
+        optionalNamespaces: namespaces
       })
     }
 
diff --git a/packages/appkit/src/utils/HelpersUtil.ts b/packages/appkit/src/utils/HelpersUtil.ts
index 9c7cd504c7..b361edafb4 100644
--- a/packages/appkit/src/utils/HelpersUtil.ts
+++ b/packages/appkit/src/utils/HelpersUtil.ts
@@ -2,73 +2,162 @@ import type { SessionTypes } from '@walletconnect/types'
 import type { Namespace, NamespaceConfig } from '@walletconnect/universal-provider'
 
 import type { CaipNetwork, CaipNetworkId, ChainNamespace } from '@reown/appkit-common'
-import { EnsController } from '@reown/appkit-controllers'
+import { EnsController, type OptionsControllerState } from '@reown/appkit-controllers'
 
 import { solana, solanaDevnet } from '../networks/index.js'
 
+export const DEFAULT_METHODS = {
+  solana: [
+    'solana_signMessage',
+    'solana_signTransaction',
+    'solana_requestAccounts',
+    'solana_getAccounts',
+    'solana_signAllTransactions',
+    'solana_signAndSendTransaction'
+  ],
+  eip155: [
+    'eth_accounts',
+    'eth_requestAccounts',
+    'eth_sendRawTransaction',
+    'eth_sign',
+    'eth_signTransaction',
+    'eth_signTypedData',
+    'eth_signTypedData_v3',
+    'eth_signTypedData_v4',
+    'eth_sendTransaction',
+    'personal_sign',
+    'wallet_switchEthereumChain',
+    'wallet_addEthereumChain',
+    'wallet_getPermissions',
+    'wallet_requestPermissions',
+    'wallet_registerOnboarding',
+    'wallet_watchAsset',
+    'wallet_scanQRCode',
+    // EIP-5792
+    'wallet_getCallsStatus',
+    'wallet_showCallsStatus',
+    'wallet_sendCalls',
+    'wallet_getCapabilities',
+    // EIP-7715
+    'wallet_grantPermissions',
+    'wallet_revokePermissions',
+    //EIP-7811
+    'wallet_getAssets'
+  ],
+  bip122: ['sendTransfer', 'signMessage', 'signPsbt', 'getAccountAddresses']
+}
+
 export const WcHelpersUtil = {
   getMethodsByChainNamespace(chainNamespace: ChainNamespace): string[] {
-    switch (chainNamespace) {
-      case 'solana':
-        return [
-          'solana_signMessage',
-          'solana_signTransaction',
-          'solana_requestAccounts',
-          'solana_getAccounts',
-          'solana_signAllTransactions',
-          'solana_signAndSendTransaction'
-        ]
-      case 'eip155':
-        return [
-          'eth_accounts',
-          'eth_requestAccounts',
-          'eth_sendRawTransaction',
-          'eth_sign',
-          'eth_signTransaction',
-          'eth_signTypedData',
-          'eth_signTypedData_v3',
-          'eth_signTypedData_v4',
-          'eth_sendTransaction',
-          'personal_sign',
-          'wallet_switchEthereumChain',
-          'wallet_addEthereumChain',
-          'wallet_getPermissions',
-          'wallet_requestPermissions',
-          'wallet_registerOnboarding',
-          'wallet_watchAsset',
-          'wallet_scanQRCode',
-          // EIP-5792
-          'wallet_getCallsStatus',
-          'wallet_showCallsStatus',
-          'wallet_sendCalls',
-          'wallet_getCapabilities',
-          // EIP-7715
-          'wallet_grantPermissions',
-          'wallet_revokePermissions',
-          //EIP-7811
-          'wallet_getAssets'
-        ]
-      case 'bip122':
-        return ['sendTransfer', 'signMessage', 'signPsbt', 'getAccountAddresses']
-      default:
-        return []
+    return DEFAULT_METHODS[chainNamespace as keyof typeof DEFAULT_METHODS] || []
+  },
+  createDefaultNamespace(chainNamespace: ChainNamespace): Namespace {
+    return {
+      methods: this.getMethodsByChainNamespace(chainNamespace),
+      events: ['accountsChanged', 'chainChanged'],
+      chains: [],
+      rpcMap: {}
     }
   },
 
-  createNamespaces(caipNetworks: CaipNetwork[]): NamespaceConfig {
-    return caipNetworks.reduce<NamespaceConfig>((acc, chain) => {
+  applyNamespaceOverrides(
+    baseNamespaces: NamespaceConfig,
+    overrides?: OptionsControllerState['universalProviderConfigOverride']
+  ): NamespaceConfig {
+    if (!overrides) {
+      return { ...baseNamespaces }
+    }
+
+    const result = { ...baseNamespaces }
+
+    const namespacesToOverride = new Set<string>()
+
+    if (overrides.methods) {
+      Object.keys(overrides.methods).forEach(ns => namespacesToOverride.add(ns))
+    }
+
+    if (overrides.chains) {
+      Object.keys(overrides.chains).forEach(ns => namespacesToOverride.add(ns))
+    }
+
+    if (overrides.events) {
+      Object.keys(overrides.events).forEach(ns => namespacesToOverride.add(ns))
+    }
+
+    if (overrides.rpcMap) {
+      Object.keys(overrides.rpcMap).forEach(chainId => {
+        const [ns] = chainId.split(':')
+        if (ns) {
+          namespacesToOverride.add(ns)
+        }
+      })
+    }
+
+    namespacesToOverride.forEach(ns => {
+      if (!result[ns]) {
+        result[ns] = this.createDefaultNamespace(ns as ChainNamespace)
+      }
+    })
+
+    if (overrides.methods) {
+      Object.entries(overrides.methods).forEach(([ns, methods]) => {
+        if (result[ns]) {
+          result[ns].methods = methods
+        }
+      })
+    }
+
+    if (overrides.chains) {
+      Object.entries(overrides.chains).forEach(([ns, chains]) => {
+        if (result[ns]) {
+          result[ns].chains = chains
+        }
+      })
+    }
+
+    if (overrides.events) {
+      Object.entries(overrides.events).forEach(([ns, events]) => {
+        if (result[ns]) {
+          result[ns].events = events
+        }
+      })
+    }
+
+    if (overrides.rpcMap) {
+      const processedNamespaces = new Set<string>()
+
+      Object.entries(overrides.rpcMap).forEach(([chainId, rpcUrl]) => {
+        const [ns, id] = chainId.split(':')
+        if (!ns || !id || !result[ns]) {
+          return
+        }
+
+        if (!result[ns].rpcMap) {
+          result[ns].rpcMap = {}
+        }
+
+        if (!processedNamespaces.has(ns)) {
+          result[ns].rpcMap = {}
+          processedNamespaces.add(ns)
+        }
+
+        result[ns].rpcMap[id] = rpcUrl
+      })
+    }
+
+    return result
+  },
+
+  createNamespaces(
+    caipNetworks: CaipNetwork[],
+    configOverride?: OptionsControllerState['universalProviderConfigOverride']
+  ): NamespaceConfig {
+    const defaultNamespaces = caipNetworks.reduce<NamespaceConfig>((acc, chain) => {
       const { id, chainNamespace, rpcUrls } = chain
       const rpcUrl = rpcUrls.default.http[0]
 
-      const methods = this.getMethodsByChainNamespace(chainNamespace)
-
       if (!acc[chainNamespace]) {
-        acc[chainNamespace] = {
-          methods,
-          events: ['accountsChanged', 'chainChanged'],
-          chains: [],
-          rpcMap: {}
-        } satisfies Namespace
+        acc[chainNamespace] = this.createDefaultNamespace(chainNamespace)
       }
 
       const caipNetworkId = `${chainNamespace}:${id}`
@@ -95,6 +184,8 @@ export const WcHelpersUtil = {
 
       return acc
     }, {})
+
+    return this.applyNamespaceOverrides(defaultNamespaces, configOverride)
   },
 
   resolveReownName: async (name: string) => {
diff --git a/packages/appkit/tests/utils/HelpersUtil.test.ts b/packages/appkit/tests/utils/HelpersUtil.test.ts
index 5b68b8c568..fd31fc17bc 100644
--- a/packages/appkit/tests/utils/HelpersUtil.test.ts
+++ b/packages/appkit/tests/utils/HelpersUtil.test.ts
@@ -242,4 +242,219 @@ describe('WcHelpersUtil', () => {
       expect(WcHelpersUtil.isSessionEventData(data)).toBe(expected)
     })
   })
+
+  describe('createDefaultNamespace', () => {
+    test('creates correct namespace structure for solana', () => {
+      const namespace = WcHelpersUtil.createDefaultNamespace('solana')
+      expect(namespace).toEqual({
+        methods: [
+          'solana_signMessage',
+          'solana_signTransaction',
+          'solana_requestAccounts',
+          'solana_getAccounts',
+          'solana_signAllTransactions',
+          'solana_signAndSendTransaction'
+        ],
+        events: ['accountsChanged', 'chainChanged'],
+        chains: [],
+        rpcMap: {}
+      })
+    })
+
+    test('creates correct namespace structure for eip155', () => {
+      const namespace = WcHelpersUtil.createDefaultNamespace('eip155')
+      expect(namespace).toEqual({
+        methods: expect.arrayContaining([
+          'personal_sign',
+          'eth_sign',
+          'eth_signTransaction',
+          'eth_signTypedData',
+          'eth_sendTransaction',
+          'wallet_switchEthereumChain'
+        ]),
+        events: ['accountsChanged', 'chainChanged'],
+        chains: [],
+        rpcMap: {}
+      })
+    })
+
+    test('creates namespace with empty methods for unknown chain namespace', () => {
+      const namespace = WcHelpersUtil.createDefaultNamespace('unknown' as any)
+      expect(namespace).toEqual({
+        methods: [],
+        events: ['accountsChanged', 'chainChanged'],
+        chains: [],
+        rpcMap: {}
+      })
+    })
+  })
+
+  describe('applyNamespaceOverrides', () => {
+    test('returns a copy of baseNamespaces when overrides is undefined', () => {
+      const baseNamespaces = {
+        eip155: {
+          methods: ['eth_sign'],
+          events: ['accountsChanged'],
+          chains: ['eip155:1'],
+          rpcMap: { '1': 'https://ethereum.rpc.com' }
+        }
+      }
+
+      const result = WcHelpersUtil.applyNamespaceOverrides(baseNamespaces, undefined)
+
+      // Should return a copy, not the original object
+      expect(result).not.toBe(baseNamespaces)
+      expect(result).toEqual(baseNamespaces)
+    })
+
+    test('handles empty overrides object', () => {
+      const baseNamespaces = {
+        eip155: {
+          methods: ['eth_sign'],
+          events: ['accountsChanged'],
+          chains: ['eip155:1'],
+          rpcMap: { '1': 'https://ethereum.rpc.com' }
+        }
+      }
+
+      const result = WcHelpersUtil.applyNamespaceOverrides(baseNamespaces, {})
+
+      expect(result).toEqual(baseNamespaces)
+    })
+
+    test('creates new namespace that does not exist in base when referenced in multiple override types', () => {
+      const baseNamespaces = {
+        eip155: {
+          methods: ['eth_sign'],
+          events: ['accountsChanged'],
+          chains: ['eip155:1'],
+          rpcMap: { '1': 'https://ethereum.rpc.com' }
+        }
+      }
+
+      const result = WcHelpersUtil.applyNamespaceOverrides(baseNamespaces, {
+        methods: { cosmos: ['cosmos_method'] },
+        chains: { cosmos: ['cosmos:cosmoshub-4'] },
+        events: { cosmos: ['cosmos_event'] },
+        rpcMap: { 'cosmos:cosmoshub-4': 'https://cosmos-hub.rpc.com' }
+      })
+
+      expect(result['cosmos']).toBeDefined()
+      expect(result['cosmos']?.methods).toEqual(['cosmos_method'])
+      expect(result['cosmos']?.chains).toEqual(['cosmos:cosmoshub-4'])
+      expect(result['cosmos']?.events).toEqual(['cosmos_event'])
+      expect(result['cosmos']?.rpcMap).toEqual({ 'cosmoshub-4': 'https://cosmos-hub.rpc.com' })
+
+      // Original namespace should remain unchanged
+      expect(result['eip155']).toEqual(baseNamespaces['eip155'])
+    })
+
+    test('handles missing rpcMap in base namespace when applying rpcMap overrides', () => {
+      const baseNamespaces = {
+        eip155: {
+          methods: ['eth_sign'],
+          events: ['accountsChanged'],
+          chains: ['eip155:1']
+        }
+      }
+
+      const result = WcHelpersUtil.applyNamespaceOverrides(baseNamespaces, {
+        rpcMap: { 'eip155:42': 'https://kovan.rpc.com' }
+      })
+
+      expect(result['eip155']?.rpcMap).toEqual({ '42': 'https://kovan.rpc.com' })
+    })
+
+    test('applies method overrides for existing namespace', () => {
+      const baseNamespaces = {
+        eip155: {
+          methods: ['eth_sign', 'personal_sign'],
+          events: ['accountsChanged', 'chainChanged'],
+          chains: ['eip155:1'],
+          rpcMap: { '1': 'https://ethereum.rpc.com' }
+        }
+      }
+
+      const result = WcHelpersUtil.applyNamespaceOverrides(baseNamespaces, {
+        methods: { eip155: ['new_method1', 'new_method2'] }
+      })
+
+      expect(result['eip155']?.methods).toEqual(['new_method1', 'new_method2'])
+      // Other properties should remain unchanged
+      expect(result['eip155']?.events).toEqual(['accountsChanged', 'chainChanged'])
+      expect(result['eip155']?.chains).toEqual(['eip155:1'])
+      expect(result['eip155']?.rpcMap).toEqual({ '1': 'https://ethereum.rpc.com' })
+    })
+
+    test('applies chain overrides for existing namespace', () => {
+      const baseNamespaces = {
+        eip155: {
+          methods: ['eth_sign', 'personal_sign'],
+          events: ['accountsChanged', 'chainChanged'],
+          chains: ['eip155:1'],
+          rpcMap: { '1': 'https://ethereum.rpc.com' }
+        }
+      }
+
+      const result = WcHelpersUtil.applyNamespaceOverrides(baseNamespaces, {
+        chains: { eip155: ['eip155:42', 'eip155:56'] }
+      })
+
+      expect(result['eip155']?.chains).toEqual(['eip155:42', 'eip155:56'])
+      // Other properties should remain unchanged
+      expect(result['eip155']?.methods).toEqual(['eth_sign', 'personal_sign'])
+      expect(result['eip155']?.events).toEqual(['accountsChanged', 'chainChanged'])
+      expect(result['eip155']?.rpcMap).toEqual({ '1': 'https://ethereum.rpc.com' })
+    })
+
+    test('applies event overrides for existing namespace', () => {
+      const baseNamespaces = {
+        eip155: {
+          methods: ['eth_sign', 'personal_sign'],
+          events: ['accountsChanged', 'chainChanged'],
+          chains: ['eip155:1'],
+          rpcMap: { '1': 'https://ethereum.rpc.com' }
+        }
+      }
+
+      const result = WcHelpersUtil.applyNamespaceOverrides(baseNamespaces, {
+        events: { eip155: ['newEvent1', 'newEvent2'] }
+      })
+
+      expect(result['eip155']?.events).toEqual(['newEvent1', 'newEvent2'])
+      // Other properties should remain unchanged
+      expect(result['eip155']?.methods).toEqual(['eth_sign', 'personal_sign'])
+      expect(result['eip155']?.chains).toEqual(['eip155:1'])
+      expect(result['eip155']?.rpcMap).toEqual({ '1': 'https://ethereum.rpc.com' })
+    })
+
+    test('handles multiple types of overrides simultaneously', () => {
+      const baseNamespaces = {
+        eip155: {
+          methods: ['eth_sign', 'personal_sign'],
+          events: ['accountsChanged', 'chainChanged'],
+          chains: ['eip155:1'],
+          rpcMap: { '1': 'https://ethereum.rpc.com' }
+        }
+      }
+
+      const result = WcHelpersUtil.applyNamespaceOverrides(baseNamespaces, {
+        methods: { eip155: ['method1', 'method2'] },
+        chains: { eip155: ['eip155:42'] },
+        events: { eip155: ['event1'] },
+        rpcMap: { 'eip155:42': 'https://kovan.rpc.com' }
+      })
+
+      expect(result).toEqual({
+        eip155: {
+          methods: ['method1', 'method2'],
+          events: ['event1'],
+          chains: ['eip155:42'],
+          rpcMap: {
+            '42': 'https://kovan.rpc.com'
+          }
+        }
+      })
+    })
+  })
 })
diff --git a/packages/controllers/src/controllers/OptionsController.ts b/packages/controllers/src/controllers/OptionsController.ts
index 2ed8bb12e3..e359b2b765 100644
--- a/packages/controllers/src/controllers/OptionsController.ts
+++ b/packages/controllers/src/controllers/OptionsController.ts
@@ -162,6 +162,22 @@ export interface OptionsControllerStatePublic {
    * @see https://docs.reown.com/appkit/react/core/options#manualwccontrol
    */
   manualWCControl?: boolean
+  /**
+   * Custom Universal Provider configuration to override the default one.
+   * If `methods` is provided, it will override the default methods.
+   * If `chains` is provided, it will override the default chains.
+   * If `events` is provided, it will override the default events.
+   * If `rpcMap` is provided, it will override the default rpcMap.
+   * If `defaultChain` is provided, it will override the default defaultChain.
+   * @default undefined
+   */
+  universalProviderConfigOverride?: {
+    methods?: Record<string, string[]>
+    chains?: Record<string, string[]>
+    events?: Record<string, string[]>
+    rpcMap?: Record<string, string>
+    defaultChain?: string
+  }
 }
 
 export interface OptionsControllerStateInternal {
@@ -356,6 +372,16 @@ export const OptionsController = {
     })
   },
 
+  setUniversalProviderConfigOverride(
+    universalProviderConfigOverride: OptionsControllerState['universalProviderConfigOverride']
+  ) {
+    state.universalProviderConfigOverride = universalProviderConfigOverride
+  },
+
+  getUniversalProviderConfigOverride() {
+    return state.universalProviderConfigOverride
+  },
+
   getSnapshot() {
     return snapshot(state)
   }


Reviews:
user: login: tomiir
state: COMMENTED
author_association: COLLABORATOR
submitted_at: 2025-03-28T06:25:28Z
user: login: KannuSingh
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-28T06:54:48Z
user: login: tomiir
state: APPROVED
author_association: COLLABORATOR
submitted_at: 2025-03-28T10:50:20Z

Review comments:
diff_hunk: @@ -2,73 +2,152 @@ import type { SessionTypes } from '@walletconnect/types'
 import type { Namespace, NamespaceConfig } from '@walletconnect/universal-provider'
 
 import type { CaipNetwork, CaipNetworkId, ChainNamespace } from '@reown/appkit-common'
-import { EnsController } from '@reown/appkit-controllers'
+import { EnsController, type OptionsControllerState } from '@reown/appkit-controllers'
 
 import { solana, solanaDevnet } from '../networks/index.js'
 
+export const DEFAULT_METHODS = {
+  solana: [
+    'solana_signMessage',
+    'solana_signTransaction',
+    'solana_requestAccounts',
+    'solana_getAccounts',
+    'solana_signAllTransactions',
+    'solana_signAndSendTransaction'
+  ],
+  eip155: [
+    'eth_accounts',
+    'eth_requestAccounts',
+    'eth_sendRawTransaction',
+    'eth_sign',
+    'eth_signTransaction',
+    'eth_signTypedData',
+    'eth_signTypedData_v3',
+    'eth_signTypedData_v4',
+    'eth_sendTransaction',
+    'personal_sign',
+    'wallet_switchEthereumChain',
+    'wallet_addEthereumChain',
+    'wallet_getPermissions',
+    'wallet_requestPermissions',
+    'wallet_registerOnboarding',
+    'wallet_watchAsset',
+    'wallet_scanQRCode',
+    // EIP-5792
+    'wallet_getCallsStatus',
+    'wallet_showCallsStatus',
+    'wallet_sendCalls',
+    'wallet_getCapabilities',
+    // EIP-7715
+    'wallet_grantPermissions',
+    'wallet_revokePermissions',
+    //EIP-7811
+    'wallet_getAssets'
+  ],
+  bip122: ['sendTransfer', 'signMessage', 'signPsbt', 'getAccountAddresses']
+}
+
 export const WcHelpersUtil = {
   getMethodsByChainNamespace(chainNamespace: ChainNamespace): string[] {
-    switch (chainNamespace) {
-      case 'solana':
-        return [
-          'solana_signMessage',
-          'solana_signTransaction',
-          'solana_requestAccounts',
-          'solana_getAccounts',
-          'solana_signAllTransactions',
-          'solana_signAndSendTransaction'
-        ]
-      case 'eip155':
-        return [
-          'eth_accounts',
-          'eth_requestAccounts',
-          'eth_sendRawTransaction',
-          'eth_sign',
-          'eth_signTransaction',
-          'eth_signTypedData',
-          'eth_signTypedData_v3',
-          'eth_signTypedData_v4',
-          'eth_sendTransaction',
-          'personal_sign',
-          'wallet_switchEthereumChain',
-          'wallet_addEthereumChain',
-          'wallet_getPermissions',
-          'wallet_requestPermissions',
-          'wallet_registerOnboarding',
-          'wallet_watchAsset',
-          'wallet_scanQRCode',
-          // EIP-5792
-          'wallet_getCallsStatus',
-          'wallet_showCallsStatus',
-          'wallet_sendCalls',
-          'wallet_getCapabilities',
-          // EIP-7715
-          'wallet_grantPermissions',
-          'wallet_revokePermissions',
-          //EIP-7811
-          'wallet_getAssets'
-        ]
-      case 'bip122':
-        return ['sendTransfer', 'signMessage', 'signPsbt', 'getAccountAddresses']
-      default:
-        return []
+    return DEFAULT_METHODS[chainNamespace as keyof typeof DEFAULT_METHODS] || []
+  },
+  createDefaultNamespace(chainNamespace: ChainNamespace): Namespace {
+    return {
+      methods: this.getMethodsByChainNamespace(chainNamespace),
+      events: ['accountsChanged', 'chainChanged'],
+      chains: [],
+      rpcMap: {}
+    }
+  },
+
+  applyNamespaceOverrides(
+    baseNamespaces: NamespaceConfig,
+    overrides: OptionsControllerState['universalProviderConfigOverride']
+  ): NamespaceConfig {
+    const result = { ...baseNamespaces }
+    if (!overrides) {
+      return baseNamespaces
+    }
+
+    // Apply complete namespace overrides
+    if (overrides.namespaces) {
+      Object.entries(overrides.namespaces).forEach(([key, namespace]) => {
+        result[key] = namespace
+      })
+    }
+
+    // Apply method overrides
+    if (overrides.methods) {
+      Object.entries(overrides.methods).forEach(([namespace, methods]) => {
+        if (!result[namespace]) {
+          result[namespace] = this.createDefaultNamespace(namespace as ChainNamespace)
+        }
path: packages/appkit/src/utils/HelpersUtil.ts
user: login: tomiir
body: you are doing this every time you don't find a specific override. I think we should create a default namespace with default everything and add the overrides to it instead. 

1. Is full namespace override? => Use it
2. Construct default namespace
3. Override methods, override chains, override events, etc

At least we should be calliong `createDefaultNamespace` once for namespace only


created_at: 2025-03-28T06:25:28Z
author_association: COLLABORATOR
diff_hunk: @@ -2,73 +2,152 @@ import type { SessionTypes } from '@walletconnect/types'
 import type { Namespace, NamespaceConfig } from '@walletconnect/universal-provider'
 
 import type { CaipNetwork, CaipNetworkId, ChainNamespace } from '@reown/appkit-common'
-import { EnsController } from '@reown/appkit-controllers'
+import { EnsController, type OptionsControllerState } from '@reown/appkit-controllers'
 
 import { solana, solanaDevnet } from '../networks/index.js'
 
+export const DEFAULT_METHODS = {
+  solana: [
+    'solana_signMessage',
+    'solana_signTransaction',
+    'solana_requestAccounts',
+    'solana_getAccounts',
+    'solana_signAllTransactions',
+    'solana_signAndSendTransaction'
+  ],
+  eip155: [
+    'eth_accounts',
+    'eth_requestAccounts',
+    'eth_sendRawTransaction',
+    'eth_sign',
+    'eth_signTransaction',
+    'eth_signTypedData',
+    'eth_signTypedData_v3',
+    'eth_signTypedData_v4',
+    'eth_sendTransaction',
+    'personal_sign',
+    'wallet_switchEthereumChain',
+    'wallet_addEthereumChain',
+    'wallet_getPermissions',
+    'wallet_requestPermissions',
+    'wallet_registerOnboarding',
+    'wallet_watchAsset',
+    'wallet_scanQRCode',
+    // EIP-5792
+    'wallet_getCallsStatus',
+    'wallet_showCallsStatus',
+    'wallet_sendCalls',
+    'wallet_getCapabilities',
+    // EIP-7715
+    'wallet_grantPermissions',
+    'wallet_revokePermissions',
+    //EIP-7811
+    'wallet_getAssets'
+  ],
+  bip122: ['sendTransfer', 'signMessage', 'signPsbt', 'getAccountAddresses']
+}
+
 export const WcHelpersUtil = {
   getMethodsByChainNamespace(chainNamespace: ChainNamespace): string[] {
-    switch (chainNamespace) {
-      case 'solana':
-        return [
-          'solana_signMessage',
-          'solana_signTransaction',
-          'solana_requestAccounts',
-          'solana_getAccounts',
-          'solana_signAllTransactions',
-          'solana_signAndSendTransaction'
-        ]
-      case 'eip155':
-        return [
-          'eth_accounts',
-          'eth_requestAccounts',
-          'eth_sendRawTransaction',
-          'eth_sign',
-          'eth_signTransaction',
-          'eth_signTypedData',
-          'eth_signTypedData_v3',
-          'eth_signTypedData_v4',
-          'eth_sendTransaction',
-          'personal_sign',
-          'wallet_switchEthereumChain',
-          'wallet_addEthereumChain',
-          'wallet_getPermissions',
-          'wallet_requestPermissions',
-          'wallet_registerOnboarding',
-          'wallet_watchAsset',
-          'wallet_scanQRCode',
-          // EIP-5792
-          'wallet_getCallsStatus',
-          'wallet_showCallsStatus',
-          'wallet_sendCalls',
-          'wallet_getCapabilities',
-          // EIP-7715
-          'wallet_grantPermissions',
-          'wallet_revokePermissions',
-          //EIP-7811
-          'wallet_getAssets'
-        ]
-      case 'bip122':
-        return ['sendTransfer', 'signMessage', 'signPsbt', 'getAccountAddresses']
-      default:
-        return []
+    return DEFAULT_METHODS[chainNamespace as keyof typeof DEFAULT_METHODS] || []
+  },
+  createDefaultNamespace(chainNamespace: ChainNamespace): Namespace {
+    return {
+      methods: this.getMethodsByChainNamespace(chainNamespace),
+      events: ['accountsChanged', 'chainChanged'],
+      chains: [],
+      rpcMap: {}
+    }
+  },
+
+  applyNamespaceOverrides(
+    baseNamespaces: NamespaceConfig,
+    overrides: OptionsControllerState['universalProviderConfigOverride']
+  ): NamespaceConfig {
+    const result = { ...baseNamespaces }
+    if (!overrides) {
+      return baseNamespaces
+    }
+
+    // Apply complete namespace overrides
+    if (overrides.namespaces) {
+      Object.entries(overrides.namespaces).forEach(([key, namespace]) => {
+        result[key] = namespace
+      })
+    }
+
+    // Apply method overrides
+    if (overrides.methods) {
+      Object.entries(overrides.methods).forEach(([namespace, methods]) => {
+        if (!result[namespace]) {
+          result[namespace] = this.createDefaultNamespace(namespace as ChainNamespace)
+        }
path: packages/appkit/src/utils/HelpersUtil.ts
user: login: KannuSingh
body: @tomiir does complete namespace override should take precedence over individual overrides if both present?
created_at: 2025-03-28T06:54:48Z
author_association: CONTRIBUTOR

PR comments:
user: login: changeset-bot[bot]
created_at: 2025-03-28T05:55:14Z
body: ###  🦋  Changeset detected

Latest commit: 309043aeeecca9b46e464720968216e9a9c072b4

**The changes in this PR will be included in the next version bump.**

<details><summary>This PR includes changesets to release 20 packages</summary>

  | Name                          | Type  |
| ----------------------------- | ----- |
| @reown/appkit-adapter-wagmi   | Patch |
| @reown/appkit-controllers     | Patch |
| @reown/appkit                 | Patch |
| @reown/appkit-adapter-bitcoin | Patch |
| @reown/appkit-adapter-ethers  | Patch |
| @reown/appkit-adapter-ethers5 | Patch |
| @reown/appkit-adapter-solana  | Patch |
| @reown/appkit-utils           | Patch |
| @reown/appkit-cdn             | Patch |
| @reown/appkit-cli             | Patch |
| @reown/appkit-common          | Patch |
| @reown/appkit-core            | Patch |
| @reown/appkit-experimental    | Patch |
| @reown/appkit-polyfills       | Patch |
| @reown/appkit-scaffold-ui     | Patch |
| @reown/appkit-siwe            | Patch |
| @reown/appkit-siwx            | Patch |
| @reown/appkit-ui              | Patch |
| @reown/appkit-wallet          | Patch |
| @reown/appkit-wallet-button   | Patch |

</details>

Not sure what this means? [Click here  to learn what changesets are](https://github.com/changesets/changesets/blob/main/docs/adding-a-changeset.md).

[Click here if you're a maintainer who wants to add another changeset to this PR](https://github.com/reown-com/appkit/new/feat/universal-provider-config?filename=.changeset/hungry-gorillas-shout.md&value=---%0A%22%40reown%2Fappkit-adapter-wagmi%22%3A%20patch%0A%22%40reown%2Fappkit%22%3A%20patch%0A%22%40reown%2Fappkit-controllers%22%3A%20patch%0A---%0A%0Afeat%3A%20createAppkit%20option%20to%20override%20universal%20provider%20config%0A)


author_association: NONE
user: login: vercel[bot]
created_at: 2025-03-28T05:55:15Z
body: [vc]: #CS2kwJ3FaQeLMdP0gIvRipucxnDUaIoFrGmOxLgyiNk=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJhcHBraXQtbGFib3JhdG9yeSIsInJvb3REaXJlY3RvcnkiOm51bGwsImluc3BlY3RvclVybCI6Imh0dHBzOi8vdmVyY2VsLmNvbS9yZW93bi1jb20vYXBwa2l0LWxhYm9yYXRvcnkvRnBQMkJha3o3ZVhDb3J2S3Baelp1RWhGcm9tQyIsInByZXZpZXdVcmwiOiJhcHBraXQtbGFib3JhdG9yeS1naXQtZmVhdC11bml2ZXJzYWwtcHJvdmlkZXItY29uZmlnLXJlb3duLWNvbS52ZXJjZWwuYXBwIiwibmV4dENvbW1pdFN0YXR1cyI6IkRFUExPWUVEIiwibGl2ZUZlZWRiYWNrIjp7InJlc29sdmVkIjowLCJ1bnJlc29sdmVkIjowLCJ0b3RhbCI6MCwibGluayI6ImFwcGtpdC1sYWJvcmF0b3J5LWdpdC1mZWF0LXVuaXZlcnNhbC1wcm92aWRlci1jb25maWctcmVvd24tY29tLnZlcmNlbC5hcHAifX0seyJuYW1lIjoiYXBwa2l0LXdhZ21pLWNkbi1leGFtcGxlIiwicm9vdERpcmVjdG9yeSI6bnVsbCwibGl2ZUZlZWRiYWNrIjp7InJlc29sdmVkIjowLCJ1bnJlc29sdmVkIjowLCJ0b3RhbCI6MCwibGluayI6IiJ9LCJpbnNwZWN0b3JVcmwiOiJodHRwczovL3ZlcmNlbC5jb20vcmVvd24tY29tL2FwcGtpdC13YWdtaS1jZG4tZXhhbXBsZS81ZDlDN1BMRkdDSkZ2cGRnVjFqbjY3Q05oS05vIiwibmV4dENvbW1pdFN0YXR1cyI6IklHTk9SRUQifSx7Im5hbWUiOiJ2dWUtd2FnbWktZXhhbXBsZSIsInJvb3REaXJlY3RvcnkiOm51bGwsImxpdmVGZWVkYmFjayI6eyJyZXNvbHZlZCI6MCwidW5yZXNvbHZlZCI6MCwidG90YWwiOjAsImxpbmsiOiIifSwiaW5zcGVjdG9yVXJsIjoiaHR0cHM6Ly92ZXJjZWwuY29tL3Jlb3duLWNvbS92dWUtd2FnbWktZXhhbXBsZS9IY0xjd0xobTF3RzhFUEFhdVozNW9HWW1RODJhIiwibmV4dENvbW1pdFN0YXR1cyI6IklHTk9SRUQifSx7Im5hbWUiOiJhcHBraXQtdnVlLXNvbGFuYSIsInJvb3REaXJlY3RvcnkiOm51bGwsImxpdmVGZWVkYmFjayI6eyJyZXNvbHZlZCI6MCwidW5yZXNvbHZlZCI6MCwidG90YWwiOjAsImxpbmsiOiIifSwiaW5zcGVjdG9yVXJsIjoiaHR0cHM6Ly92ZXJjZWwuY29tL3Jlb3duLWNvbS9hcHBraXQtdnVlLXNvbGFuYS8yaUp2ZGhOb1haR25laDRIRVNvSnhqQllmNVNnIiwibmV4dENvbW1pdFN0YXR1cyI6IklHTk9SRUQifSx7Im5hbWUiOiJhcHBraXQtZGVtbyIsInJvb3REaXJlY3RvcnkiOm51bGwsImluc3BlY3RvclVybCI6Imh0dHBzOi8vdmVyY2VsLmNvbS9yZW93bi1jb20vYXBwa2l0LWRlbW8vRDRlMjFYSDVnRU1hMUR4NmZvZlZYbzVvUlo5cCIsInByZXZpZXdVcmwiOiJhcHBraXQtZGVtby1naXQtZmVhdC11bml2ZXJzYWwtcHJvdmlkZXItY29uZmlnLXJlb3duLWNvbS52ZXJjZWwuYXBwIiwibmV4dENvbW1pdFN0YXR1cyI6IkRFUExPWUVEIiwibGl2ZUZlZWRiYWNrIjp7InJlc29sdmVkIjowLCJ1bnJlc29sdmVkIjowLCJ0b3RhbCI6MCwibGluayI6ImFwcGtpdC1kZW1vLWdpdC1mZWF0LXVuaXZlcnNhbC1wcm92aWRlci1jb25maWctcmVvd24tY29tLnZlcmNlbC5hcHAifX0seyJuYW1lIjoiZXRoZXJldW0tcHJvdmlkZXItd2FnbWktZXhhbXBsZSIsInJvb3REaXJlY3RvcnkiOm51bGwsImxpdmVGZWVkYmFjayI6eyJyZXNvbHZlZCI6MCwidW5yZXNvbHZlZCI6MCwidG90YWwiOjAsImxpbmsiOiIifSwiaW5zcGVjdG9yVXJsIjoiaHR0cHM6Ly92ZXJjZWwuY29tL3Jlb3duLWNvbS9ldGhlcmV1bS1wcm92aWRlci13YWdtaS1leGFtcGxlLzdobm0xMUdTblhKS2VaRExUbW1wRzJYb2NUWmciLCJuZXh0Q29tbWl0U3RhdHVzIjoiSUdOT1JFRCIsInByZXZpZXdVcmwiOiJldGhlcmV1bS1wcm92aWRlci13YWdtaS1leGFtcGxlLWdpdC1mZWF0LXVuaXZlLTMyN2E3Zi1yZW93bi1jb20udmVyY2VsLmFwcCJ9LHsibmFtZSI6ImFwcGtpdC1iYXNpYy1leGFtcGxlIiwicm9vdERpcmVjdG9yeSI6ImV4YW1wbGVzL2h0bWwtYWstYmFzaWMiLCJsaXZlRmVlZGJhY2siOnsicmVzb2x2ZWQiOjAsInVucmVzb2x2ZWQiOjAsInRvdGFsIjowLCJsaW5rIjoiIn0sImluc3BlY3RvclVybCI6Imh0dHBzOi8vdmVyY2VsLmNvbS9yZW93bi1jb20vYXBwa2l0LWJhc2ljLWV4YW1wbGUvSGltSHZMQjlTeFFOZTFobmhaZ0dyRm93TXNKeCIsIm5leHRDb21taXRTdGF0dXMiOiJJR05PUkVEIn0seyJuYW1lIjoiYXBwa2l0LWJhc2ljLXVwLWV4YW1wbGUiLCJyb290RGlyZWN0b3J5IjoiZXhhbXBsZXMvaHRtbC1hay1iYXNpYy11cCIsImxpdmVGZWVkYmFjayI6eyJyZXNvbHZlZCI6MCwidW5yZXNvbHZlZCI6MCwidG90YWwiOjAsImxpbmsiOiIifSwiaW5zcGVjdG9yVXJsIjoiaHR0cHM6Ly92ZXJjZWwuY29tL3Jlb3duLWNvbS9hcHBraXQtYmFzaWMtdXAtZXhhbXBsZS9DbzI0MjNleEplUUdFVGtMTWdnU3FUa21QdDlDIiwibmV4dENvbW1pdFN0YXR1cyI6IklHTk9SRUQifSx7Im5hbWUiOiJhcHBraXQtYmFzaWMtc2lnbi1jbGllbnQtZXhhbXBsZSIsInJvb3REaXJlY3RvcnkiOiJleGFtcGxlcy9odG1sLWFrLWJhc2ljLXNpZ24tY2xpZW50IiwibGl2ZUZlZWRiYWNrIjp7InJlc29sdmVkIjowLCJ1bnJlc29sdmVkIjowLCJ0b3RhbCI6MCwibGluayI6IiJ9LCJpbnNwZWN0b3JVcmwiOiJodHRwczovL3ZlcmNlbC5jb20vcmVvd24tY29tL2FwcGtpdC1iYXNpYy1zaWduLWNsaWVudC1leGFtcGxlLzZZZVJGWm9NbzFVQUZUVFpRMkNKa2k2Z0JDN3UiLCJuZXh0Q29tbWl0U3RhdHVzIjoiSUdOT1JFRCJ9LHsibmFtZSI6ImFwcGtpdC1iYXNpYy1lcC1leGFtcGxlIiwicm9vdERpcmVjdG9yeSI6ImV4YW1wbGVzL2h0bWwtZXAiLCJsaXZlRmVlZGJhY2siOnsicmVzb2x2ZWQiOjAsInVucmVzb2x2ZWQiOjAsInRvdGFsIjowLCJsaW5rIjoiIn0sImluc3BlY3RvclVybCI6Imh0dHBzOi8vdmVyY2VsLmNvbS9yZW93bi1jb20vYXBwa2l0LWJhc2ljLWVwLWV4YW1wbGUvRkZ1OUF2OExzTXpSd2pNWWlxZnlFeEdCSk1VZyIsIm5leHRDb21taXRTdGF0dXMiOiJJR05PUkVEIn0seyJuYW1lIjoiYXBwa2l0LWJhc2ljLWVwIiwicm9vdERpcmVjdG9yeSI6ImV4YW1wbGVzL2h0bWwtZXAiLCJsaXZlRmVlZGJhY2siOnsicmVzb2x2ZWQiOjAsInVucmVzb2x2ZWQiOjAsInRvdGFsIjowLCJsaW5rIjoiIn0sImluc3BlY3RvclVybCI6Imh0dHBzOi8vdmVyY2VsLmNvbS9yZW93bi1jb20vYXBwa2l0LWJhc2ljLWVwLzlZOXRoUXpzVDd1Z1hNODllZkZvOFN3OXE3V1MiLCJuZXh0Q29tbWl0U3RhdHVzIjoiSUdOT1JFRCJ9LHsibmFtZSI6ImFwcGtpdC1ldGhlcnM1LWJlcmEiLCJyb290RGlyZWN0b3J5IjpudWxsLCJsaXZlRmVlZGJhY2siOnsicmVzb2x2ZWQiOjAsInVucmVzb2x2ZWQiOjAsInRvdGFsIjowLCJsaW5rIjoiIn0sImluc3BlY3RvclVybCI6Imh0dHBzOi8vdmVyY2VsLmNvbS9yZW93bi1jb20vYXBwa2l0LWV0aGVyczUtYmVyYS9HVExOWDJha0syVVpFSmc0alhBeTdxVjFuOUxLIiwibmV4dENvbW1pdFN0YXR1cyI6IklHTk9SRUQifSx7Im5hbWUiOiJuZXh0LXdhZ21pLXNvbGFuYS1iaXRjb2luLWV4YW1wbGUiLCJyb290RGlyZWN0b3J5IjpudWxsLCJsaXZlRmVlZGJhY2siOnsicmVzb2x2ZWQiOjAsInVucmVzb2x2ZWQiOjAsInRvdGFsIjowLCJsaW5rIjoiIn0sImluc3BlY3RvclVybCI6Imh0dHBzOi8vdmVyY2VsLmNvbS9yZW93bi1jb20vbmV4dC13YWdtaS1zb2xhbmEtYml0Y29pbi1leGFtcGxlLzhiNjNONThFV01Gd0NhdGhHNWp5WkxRbXJlRGQiLCJuZXh0Q29tbWl0U3RhdHVzIjoiSUdOT1JFRCJ9LHsibmFtZSI6ImFwcGtpdC1uYW5zZW4tZGVtbyIsInJvb3REaXJlY3RvcnkiOiJleGFtcGxlcy9hcHBraXQtY29yZS9kZW1vcy9uYW5zZW4iLCJsaXZlRmVlZGJhY2siOnsicmVzb2x2ZWQiOjAsInVucmVzb2x2ZWQiOjAsInRvdGFsIjowLCJsaW5rIjoiIn0sImluc3BlY3RvclVybCI6Imh0dHBzOi8vdmVyY2VsLmNvbS9yZW93bi1jb20vYXBwa2l0LW5hbnNlbi1kZW1vL0djREJvNFh4MnE3d0tLdHI1M2Z6YUpyamlZZEEiLCJuZXh0Q29tbWl0U3RhdHVzIjoiSUdOT1JFRCJ9XX0=
**The latest updates on your projects**. Learn more about [Vercel for Git ↗︎](https://vercel.link/github-learn-more)

| Name | Status | Preview | Comments | Updated (UTC) |
| :--- | :----- | :------ | :------- | :------ |
| **appkit-demo** | ✅ Ready ([Inspect](https://vercel.com/reown-com/appkit-demo/D4e21XH5gEMa1Dx6fofVXo5oRZ9p)) | [Visit Preview](https://appkit-demo-git-feat-universal-provider-config-reown-com.vercel.app) | 💬 [**Add feedback**](https://vercel.live/open-feedback/appkit-demo-git-feat-universal-provider-config-reown-com.vercel.app?via=pr-comment-feedback-link) | Mar 28, 2025 9:52am |
| **appkit-laboratory** | ✅ Ready ([Inspect](https://vercel.com/reown-com/appkit-laboratory/FpP2Bakz7eXCorvKpZzZuEhFromC)) | [Visit Preview](https://appkit-laboratory-git-feat-universal-provider-config-reown-com.vercel.app) | 💬 [**Add feedback**](https://vercel.live/open-feedback/appkit-laboratory-git-feat-universal-provider-config-reown-com.vercel.app?via=pr-comment-feedback-link) | Mar 28, 2025 9:52am |

<details><summary>12 Skipped Deployments</summary>

| Name | Status | Preview | Comments | Updated (UTC) |
| :--- | :----- | :------ | :------- | :------ |
| **appkit-basic-ep** | ⬜️ Ignored ([Inspect](https://vercel.com/reown-com/appkit-basic-ep/9Y9thQzsT7ugXM89efFo8Sw9q7WS)) |  |  | Mar 28, 2025 9:52am |
| **appkit-basic-ep-example** | ⬜️ Ignored ([Inspect](https://vercel.com/reown-com/appkit-basic-ep-example/FFu9Av8LsMzRwjMYiqfyExGBJMUg)) |  |  | Mar 28, 2025 9:52am |
| **appkit-basic-example** | ⬜️ Ignored ([Inspect](https://vercel.com/reown-com/appkit-basic-example/HimHvLB9SxQNe1hnhZgGrFowMsJx)) |  |  | Mar 28, 2025 9:52am |
| **appkit-basic-sign-client-example** | ⬜️ Ignored ([Inspect](https://vercel.com/reown-com/appkit-basic-sign-client-example/6YeRFZoMo1UAFTTZQ2CJki6gBC7u)) |  |  | Mar 28, 2025 9:52am |
| **appkit-basic-up-example** | ⬜️ Ignored ([Inspect](https://vercel.com/reown-com/appkit-basic-up-example/Co2423exJeQGETkLMggSqTkmPt9C)) |  |  | Mar 28, 2025 9:52am |
| **appkit-ethers5-bera** | ⬜️ Ignored ([Inspect](https://vercel.com/reown-com/appkit-ethers5-bera/GTLNX2akK2UZEJg4jXAy7qV1n9LK)) |  |  | Mar 28, 2025 9:52am |
| **appkit-nansen-demo** | ⬜️ Ignored ([Inspect](https://vercel.com/reown-com/appkit-nansen-demo/GcDBo4Xx2q7wKKtr53fzaJrjiYdA)) |  |  | Mar 28, 2025 9:52am |
| **appkit-vue-solana** | ⬜️ Ignored ([Inspect](https://vercel.com/reown-com/appkit-vue-solana/2iJvdhNoXZGneh4HESoJxjBYf5Sg)) |  |  | Mar 28, 2025 9:52am |
| **appkit-wagmi-cdn-example** | ⬜️ Ignored ([Inspect](https://vercel.com/reown-com/appkit-wagmi-cdn-example/5d9C7PLFGCJFvpdgV1jn67CNhKNo)) |  |  | Mar 28, 2025 9:52am |
| **ethereum-provider-wagmi-example** | ⬜️ Ignored ([Inspect](https://vercel.com/reown-com/ethereum-provider-wagmi-example/7hnm11GSnXJKeZDLTmmpG2XocTZg)) | [Visit Preview](https://ethereum-provider-wagmi-example-git-feat-unive-327a7f-reown-com.vercel.app) |  | Mar 28, 2025 9:52am |
| **next-wagmi-solana-bitcoin-example** | ⬜️ Ignored ([Inspect](https://vercel.com/reown-com/next-wagmi-solana-bitcoin-example/8b63N58EWMFwCathG5jyZLQmreDd)) |  |  | Mar 28, 2025 9:52am |
| **vue-wagmi-example** | ⬜️ Ignored ([Inspect](https://vercel.com/reown-com/vue-wagmi-example/HcLcwLhm1wG8EPAauZ35oGYmQ82a)) |  |  | Mar 28, 2025 9:52am |
</details>















author_association: NONE
user: login: github-actions[bot]
created_at: 2025-03-28T05:58:22Z
body: 
<!--
  0 failure: 
  4 warning:  File packages/ada..., File packages/app..., File packages/app..., File packages/con...
  
  
  DangerID: danger-id-Danger;
-->


<table>
  <thead>
    <tr>
      <th width="50"></th>
      <th width="100%" data-danger-table="true">Warnings</th>
    </tr>
  </thead>
  <tbody><tr>
      <td>:warning:</td>
      <td>File packages/adapters/wagmi/src/connectors/UniversalConnector.ts contains a KEY or SECRET</td>
    </tr>
  
<tr>
      <td>:warning:</td>
      <td>File packages/appkit/src/client/appkit-base-client.ts contains a KEY or SECRET</td>
    </tr>
  
<tr>
      <td>:warning:</td>
      <td>File packages/appkit/src/utils/HelpersUtil.ts contains a KEY or SECRET</td>
    </tr>
  
<tr>
      <td>:warning:</td>
      <td>File packages/controllers/src/controllers/OptionsController.ts contains a KEY or SECRET</td>
    </tr>
  </tbody>
</table>



<p align="right">
  Generated by :no_entry_sign: <a href="https://danger.systems/js">dangerJS</a> against 309043aeeecca9b46e464720968216e9a9c072b4
</p>

author_association: CONTRIBUTOR
user: login: github-actions[bot]
created_at: 2025-03-28T06:00:31Z
body: <h2>Coverage Report</h2>
<table> <thead> <tr> <th align="center">Status</th> <th align="left">Category</th> <th align="right">Percentage</th> <th align="right">Covered / Total</th> </tr> </thead> <tbody> <tr> <td align="center">🔵</td> <td align="left">Lines</td> <td align="right">75.17%</td> <td align="right">24847 / 33051</td> </tr> <tr> <td align="center">🔵</td> <td align="left">Statements</td> <td align="right">75.17%</td> <td align="right">24847 / 33051</td> </tr> <tr> <td align="center">🔵</td> <td align="left">Functions</td> <td align="right">66.32%</td> <td align="right">2098 / 3163</td> </tr> <tr> <td align="center">🔵</td> <td align="left">Branches</td> <td align="right">82.85%</td> <td align="right">4735 / 5715</td> </tr> </tbody> </table><details><summary>File Coverage</summary><table> <thead> <tr> <th align="left">File</th> <th align="right">Stmts</th> <th align="right">Branches</th> <th align="right">Functions</th> <th align="right">Lines</th> <th align="left">Uncovered Lines</th> </tr> </thead> <tbody> <tr> <td align="left" colspan="6"><b>Changed Files</b></td> </tr> <tr> <td align="left"><a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/adapters/wagmi/src/connectors/UniversalConnector.ts">packages/adapters/wagmi/src/connectors/UniversalConnector.ts</a></td> <td align="right">59.3%</td> <td align="right">46.93%</td> <td align="right">55%</td> <td align="right">59.3%</td> <td align="left"><a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/adapters/wagmi/src/connectors/UniversalConnector.ts#L81-L93" class="text-red">81-93</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/adapters/wagmi/src/connectors/UniversalConnector.ts#L99-L100" class="text-red">99-100</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/adapters/wagmi/src/connectors/UniversalConnector.ts#L109-L110" class="text-red">109-110</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/adapters/wagmi/src/connectors/UniversalConnector.ts#L115-L125" class="text-red">115-125</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/adapters/wagmi/src/connectors/UniversalConnector.ts#L136-L138" class="text-red">136-138</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/adapters/wagmi/src/connectors/UniversalConnector.ts#L160-L167" class="text-red">160-167</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/adapters/wagmi/src/connectors/UniversalConnector.ts#L175-L177" class="text-red">175-177</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/adapters/wagmi/src/connectors/UniversalConnector.ts#L226-L233" class="text-red">226-233</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/adapters/wagmi/src/connectors/UniversalConnector.ts#L245" class="text-red">245</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/adapters/wagmi/src/connectors/UniversalConnector.ts#L253-L274" class="text-red">253-274</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/adapters/wagmi/src/connectors/UniversalConnector.ts#L278-L279" class="text-red">278-279</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/adapters/wagmi/src/connectors/UniversalConnector.ts#L284-L285" class="text-red">284-285</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/adapters/wagmi/src/connectors/UniversalConnector.ts#L294-L295" class="text-red">294-295</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/adapters/wagmi/src/connectors/UniversalConnector.ts#L306-L307" class="text-red">306-307</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/adapters/wagmi/src/connectors/UniversalConnector.ts#L313" class="text-red">313</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/adapters/wagmi/src/connectors/UniversalConnector.ts#L317" class="text-red">317</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/adapters/wagmi/src/connectors/UniversalConnector.ts#L342-L343" class="text-red">342-343</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/adapters/wagmi/src/connectors/UniversalConnector.ts#L347-L354" class="text-red">347-354</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/adapters/wagmi/src/connectors/UniversalConnector.ts#L356-L359" class="text-red">356-359</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/adapters/wagmi/src/connectors/UniversalConnector.ts#L361-L362" class="text-red">361-362</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/adapters/wagmi/src/connectors/UniversalConnector.ts#L364-L388" class="text-red">364-388</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/adapters/wagmi/src/connectors/UniversalConnector.ts#L390-L391" class="text-red">390-391</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/adapters/wagmi/src/connectors/UniversalConnector.ts#L393-L394" class="text-red">393-394</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/adapters/wagmi/src/connectors/UniversalConnector.ts#L396-L406" class="text-red">396-406</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/adapters/wagmi/src/connectors/UniversalConnector.ts#L429-L431" class="text-red">429-431</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/adapters/wagmi/src/connectors/UniversalConnector.ts#L434-L439" class="text-red">434-439</a></td> </tr> <tr> <td align="left"><a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts">packages/appkit/src/client/appkit-base-client.ts</a></td> <td align="right">73.42%</td> <td align="right">86.72%</td> <td align="right">76.96%</td> <td align="right">73.42%</td> <td align="left"><a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L163-L164" class="text-red">163-164</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L166-L167" class="text-red">166-167</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L172-L173" class="text-red">172-173</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L241-L242" class="text-red">241-242</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L303" class="text-red">303</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L307-L308" class="text-red">307-308</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L318-L324" class="text-red">318-324</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L353-L372" class="text-red">353-372</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L375-L413" class="text-red">375-413</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L416-L421" class="text-red">416-421</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L437-L441" class="text-red">437-441</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L454-L465" class="text-red">454-465</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L490-L496" class="text-red">490-496</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L499-L509" class="text-red">499-509</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L512-L524" class="text-red">512-524</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L527-L529" class="text-red">527-529</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L532-L534" class="text-red">532-534</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L537-L539" class="text-red">537-539</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L542-L544" class="text-red">542-544</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L547-L553" class="text-red">547-553</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L556-L559" class="text-red">556-559</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L575-L587" class="text-red">575-587</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L593-L626" class="text-red">593-626</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L629-L639" class="text-red">629-639</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L693-L694" class="text-red">693-694</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L700" class="text-red">700</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L711-L725" class="text-red">711-725</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L731-L738" class="text-red">731-738</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L751-L755" class="text-red">751-755</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L795-L796" class="text-red">795-796</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L837-L841" class="text-red">837-841</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L847-L848" class="text-red">847-848</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L860" class="text-red">860</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L883-L888" class="text-red">883-888</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L954" class="text-red">954</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L975-L976" class="text-red">975-976</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L982" class="text-red">982</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L984-L1000" class="text-red">984-1000</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L1005" class="text-red">1005</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L1043-L1044" class="text-red">1043-1044</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L1060-L1061" class="text-red">1060-1061</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L1066-L1067" class="text-red">1066-1067</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L1100-L1107" class="text-red">1100-1107</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L1152-L1156" class="text-red">1152-1156</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L1185-L1188" class="text-red">1185-1188</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L1192" class="text-red">1192</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L1208-L1218" class="text-red">1208-1218</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L1240-L1241" class="text-red">1240-1241</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L1270-L1271" class="text-red">1270-1271</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L1278-L1279" class="text-red">1278-1279</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L1283-L1284" class="text-red">1283-1284</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L1451-L1452" class="text-red">1451-1452</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L1472-L1473" class="text-red">1472-1473</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L1476-L1477" class="text-red">1476-1477</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L1492-L1495" class="text-red">1492-1495</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L1498-L1499" class="text-red">1498-1499</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L1519-L1520" class="text-red">1519-1520</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L1523-L1524" class="text-red">1523-1524</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L1544-L1545" class="text-red">1544-1545</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L1558" class="text-red">1558</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L1562" class="text-red">1562</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L1567-L1586" class="text-red">1567-1586</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L1589-L1598" class="text-red">1589-1598</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L1613-L1614" class="text-red">1613-1614</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L1657-L1660" class="text-red">1657-1660</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L1663-L1664" class="text-red">1663-1664</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L1752-L1753" class="text-red">1752-1753</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L1756-L1759" class="text-red">1756-1759</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L1762-L1763" class="text-red">1762-1763</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L1766-L1767" class="text-red">1766-1767</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L1770-L1771" class="text-red">1770-1771</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L1774-L1775" class="text-red">1774-1775</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L1778-L1782" class="text-red">1778-1782</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L1847-L1858" class="text-red">1847-1858</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L1867-L1889" class="text-red">1867-1889</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/client/appkit-base-client.ts#L1569-L1590" class="text-red">1569-1590</a></td> </tr> <tr> <td align="left"><a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/connectors/WalletConnectConnector.ts">packages/appkit/src/connectors/WalletConnectConnector.ts</a></td> <td align="right">100%</td> <td align="right">100%</td> <td align="right">100%</td> <td align="right">100%</td> <td align="left"></td> </tr> <tr> <td align="left"><a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/utils/HelpersUtil.ts">packages/appkit/src/utils/HelpersUtil.ts</a></td> <td align="right">96.77%</td> <td align="right">98.46%</td> <td align="right">84.61%</td> <td align="right">96.77%</td> <td align="left"><a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/utils/HelpersUtil.ts#L132-L133" class="text-red">132-133</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/utils/HelpersUtil.ts#L192-L195" class="text-red">192-195</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/appkit/src/utils/HelpersUtil.ts#L224" class="text-red">224</a></td> </tr> <tr> <td align="left"><a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/controllers/src/controllers/OptionsController.ts">packages/controllers/src/controllers/OptionsController.ts</a></td> <td align="right">85.16%</td> <td align="right">97.77%</td> <td align="right">52.05%</td> <td align="right">85.16%</td> <td align="left"><a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/controllers/src/controllers/OptionsController.ts#L212" class="text-red">212</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/controllers/src/controllers/OptionsController.ts#L221-L222" class="text-red">221-222</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/controllers/src/controllers/OptionsController.ts#L273" class="text-red">273</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/controllers/src/controllers/OptionsController.ts#L277" class="text-red">277</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/controllers/src/controllers/OptionsController.ts#L325-L328" class="text-red">325-328</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/controllers/src/controllers/OptionsController.ts#L332-L335" class="text-red">332-335</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/controllers/src/controllers/OptionsController.ts#L339-L342" class="text-red">339-342</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/controllers/src/controllers/OptionsController.ts#L346-L349" class="text-red">346-349</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/controllers/src/controllers/OptionsController.ts#L382" class="text-red">382</a>, <a href="https://github.com/reown-com/appkit/blob/309043aeeecca9b46e464720968216e9a9c072b4/packages/controllers/src/controllers/OptionsController.ts#L377" class="text-red">377</a></td> </tr> </tbody> </table></details>
<em>Generated in workflow <a href=https://github.com/reown-com/appkit/actions/runs/14126257181>#10521</a> for commit <a href="https://github.com/reown-com/appkit/commit/309043aeeecca9b46e464720968216e9a9c072b4">309043a</a> by the <a href="https://github.com/davelosert/vitest-coverage-report-action">Vitest Coverage Report Action</a></em>

<!-- vitest-coverage-report-marker-root -->
author_association: CONTRIBUTOR