diff --git a/src/index.ts b/src/index.ts index 2141c3e..5d08b97 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,5 +1,6 @@ interface MetaMaskEthereumProvider { isMetaMask?: boolean; + isBraveWallet?: boolean; once(eventName: string | symbol, listener: (...args: any[]) => void): this; on(eventName: string | symbol, listener: (...args: any[]) => void): this; off(eventName: string | symbol, listener: (...args: any[]) => void): this; @@ -69,7 +70,7 @@ function detectEthereumProvider({ const { ethereum } = window as Window; - if (ethereum && (!mustBeMetaMask || ethereum.isMetaMask)) { + if (ethereum && (!mustBeMetaMask || (ethereum.isMetaMask && !ethereum.isBraveWallet))) { resolve(ethereum as unknown as T); } else { diff --git a/test/spec.js b/test/spec.js index 7489cf9..d979966 100644 --- a/test/spec.js +++ b/test/spec.js @@ -21,6 +21,11 @@ const mockGlobalProps = (ethereum) => { const providerWithMetaMask = { isMetaMask: true, } +const providerWithBrave = { + isMetaMask: true, + isBraveWallet: true, +} + const providerNoMetaMask = {} const noProvider = null @@ -48,6 +53,17 @@ test('detectProvider: mustBeMetamask with ethereum already set', async function t.end() }) +test('detectProvider: mustBeMetamask with Brave ethereum already set', async function (t) { + + mockGlobalProps(providerWithBrave) + + const result = await detectProvider({ timeout: 1, mustBeMetaMask: true }) + t.equal(result, null, 'promise should have resolved null') + t.ok(window.addEventListener.notCalled, 'addEventListener should not have been called') + t.ok(window.removeEventListener.calledOnce, 'removeEventListener called once') + t.end() +}) + test('detectProvider: mustBeMetamask with non-MetaMask ethereum already set', async function (t) { mockGlobalProps(providerNoMetaMask)