zcash-grant-system/frontend/client/lib/getWeb3.ts

44 lines
1.3 KiB
TypeScript
Raw Normal View History

2018-09-10 09:55:26 -07:00
import Web3 from 'web3';
interface Web3Window extends Window {
web3?: Web3;
}
const resolveWeb3 = (resolve: (web3: Web3) => void, reject: (err: Error) => void) => {
2018-09-11 10:18:57 -07:00
if (typeof window === 'undefined') {
return reject(new Error('No global window variable'));
}
let { web3 } = window as Web3Window;
2018-09-10 09:55:26 -07:00
const localProvider = `http://localhost:8545`;
// To test what it's like to not have web3, uncomment the reject. Otherwise
// localProvider will always kick in.
// return reject(new Error('No web3 instance available'));
if (typeof web3 !== 'undefined') {
2018-09-10 09:55:26 -07:00
console.info(`Injected web3 detected.`);
web3 = new Web3(web3.currentProvider);
} else if (process.env.NODE_ENV !== 'production') {
console.info(`No web3 instance injected, using Local web3.`);
const provider = new Web3.providers.HttpProvider(localProvider);
web3 = new Web3(provider);
} else {
return reject(new Error('No web3 instance available'));
}
resolve(web3);
};
export default () =>
new Promise((resolve, reject) => {
// Wait for loading completion to avoid race conditions with web3 injection timing.
window.addEventListener(`load`, () => {
resolveWeb3(resolve, reject);
});
// If document has loaded already, try to get Web3 immediately.
if (document.readyState === `complete`) {
resolveWeb3(resolve, reject);
}
});