Skip to content

Commit f08b85d

Browse files
authored
[injected-v2.2.2-alpha.1] : Fix - Add functionality to MM getInterface to check provider against all other provider flags (#1258)
* Add function to MM getInterface to check provider against all other provider flags * Refactor function that retrieves provider from providers array * Added provider identity check for MM * Rename function for checking for other provider flags
1 parent dba164e commit f08b85d

File tree

2 files changed

+27
-5
lines changed

2 files changed

+27
-5
lines changed

packages/injected/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@web3-onboard/injected-wallets",
3-
"version": "2.2.2-alpha.1",
3+
"version": "2.2.2-alpha.2",
44
"description": "Injected wallet module for connecting browser extension and mobile wallets to Web3-Onboard. Web3-Onboard makes it simple to connect Ethereum hardware and software wallets to your dapp. Features standardised spec compliant web3 providers for all supported wallets, framework agnostic modern javascript UI with code splitting, CSS customization, multi-chain and multi-account support, reactive wallet state subscriptions and real-time transaction state change notifications.",
55
"keywords": [
66
"Ethereum",

packages/injected/src/wallets.ts

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,23 +23,45 @@ declare const window: CustomWindow
2323
const UNSUPPORTED_METHOD = null
2424

2525
function getInjectedInterface(
26-
identity: string
26+
identity: string,
27+
checkOtherProviderFlags?: boolean
2728
): () => Promise<{ provider: EIP1193Provider }> {
2829
return async () => ({
2930
provider: (window.ethereum.providers &&
3031
Array.isArray(window.ethereum.providers)
31-
? window.ethereum.providers.find(provider => !!provider[identity])
32+
? getInterfaceFromProvidersArray(identity, checkOtherProviderFlags)
3233
: window.ethereum) as EIP1193Provider
3334
})
3435
}
3536

37+
function getInterfaceFromProvidersArray(
38+
identity: string,
39+
checkOtherProviderFlags?: boolean
40+
) {
41+
return window.ethereum.providers.find(provider => {
42+
return checkOtherProviderFlags
43+
? !!provider[identity] &&
44+
!otherProviderFlagsExist(identity, provider)
45+
: !!provider[identity]
46+
})
47+
}
48+
49+
function otherProviderFlagsExist(identity: string, provider: any): boolean {
50+
const otherProviderFlags = Object.values(ProviderIdentityFlag).filter(
51+
id => id !== identity && id !== ProviderIdentityFlag.Detected
52+
)
53+
return otherProviderFlags.some(id => !!provider[id])
54+
}
55+
3656
const metamask: InjectedWalletModule = {
3757
label: ProviderLabel.MetaMask,
3858
injectedNamespace: InjectedNameSpace.Ethereum,
3959
checkProviderIdentity: ({ provider }) =>
40-
!!provider && !!provider[ProviderIdentityFlag.MetaMask],
60+
!!provider &&
61+
!!provider[ProviderIdentityFlag.MetaMask] &&
62+
!otherProviderFlagsExist(ProviderIdentityFlag.MetaMask, provider),
4163
getIcon: async () => (await import('./icons/metamask.js')).default,
42-
getInterface: getInjectedInterface(ProviderIdentityFlag.MetaMask),
64+
getInterface: getInjectedInterface(ProviderIdentityFlag.MetaMask, true),
4365
platforms: ['all']
4466
}
4567

0 commit comments

Comments
 (0)