Last active
October 30, 2018 04:04
-
-
Save soundyogi/cc049c3fe8bb045510e5925e2de196c9 to your computer and use it in GitHub Desktop.
avoid race conditions with web3 and be ready for new ethereum provider system ( provider.enable() ) 2nd. nov 2018
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* global window */ | |
// originally from: https://github.com/adrianmcli | |
// adapted by me | |
import Web3 from 'web3' | |
const fallback = 'wss://mainnet.infura.io/ws' | |
function resolveWeb3(resolve, reject){ | |
// Modern dapp browsers... | |
if (window.ethereum) { | |
console.log('web3, using ethereum provider') | |
window.web3 = new Web3(window.ethereum); | |
window.ethereum | |
.enable() | |
.then( _ => { | |
resolve(window.web3) | |
}) | |
.catch( err => { | |
console.warn('access denied by user', err) | |
reject() | |
}) | |
} | |
// Legacy dapp browsers... | |
else if (window.web3) { | |
console.log('web3, using legacy provider') | |
window.web3 = new Web3(window.web3.currentProvider); | |
resolve(window.web3) | |
} | |
// fallback provider | |
else if (typeof window.web3 === undefined) { | |
console.log('web3, using fallback provider') | |
window.web3 = new Web3(fallback); | |
window.metamask = false; | |
resolve(window.web3) | |
} | |
// Non-dapp browsers... | |
else { | |
console.warn('Non-Ethereum browser detected. You should consider trying MetaMask!'); | |
reject() | |
} | |
} | |
export function web3resolver(){ | |
return new Promise((resolve, reject) => { | |
// Wait for loading completion to avoid race conditions with web3 injection timing. | |
window.addEventListener(`load`, () => resolveWeb3(resolve, reject) ) | |
// resolve immediatly | |
if (document.readyState === `complete`) resolveWeb3(resolve, reject) | |
}) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment