vite-garden
Version:
Vite Garden -- a part of the threed.ai family of JavaScript-friendly food-growing libraries
81 lines (74 loc) • 2.56 kB
JavaScript
;
import Web3 from "web3";
import store from "../../store/";
import { ACTION_TYPES, APPROVED_NETWORK_ID } from "../../util/constants.js";
const monitorWeb3 = function(state) {
let networkId = state && state.web3 ? state.web3.networkId : "";
let coinbase = state && state.web3 ? state.web3.coinbase : "";
let web3 = window.web3;
let isLocalWeb3 = false;
// Checking if browser is Web3-injected (Mist/MetaMask)
if (typeof web3 !== "undefined" && web3) {
// Use Mist/MetaMask's provider
web3 = new Web3(window.ethereum);
window.ethereum.enable();
} else {
console.log("monitorWeb3: No web3 in browser");
web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8547"));
isLocalWeb3 = true;
}
if (web3) {
/* eslint-disable no-unused-vars */
web3.eth.subscribe("newBlockHeaders", function(error, result) {
if (!error) {
// console.log(result);
}
});
}
setInterval(() => {
if (web3 && !isLocalWeb3) {
web3.eth.net.getId((err, newNetworkId) => {
newNetworkId = !err && newNetworkId ? newNetworkId.toString() : "";
if (
(!err &&
newNetworkId &&
newNetworkId !== "" &&
newNetworkId !== networkId) ||
(!newNetworkId && networkId)
) {
store.dispatch(ACTION_TYPES.LOGOUT);
window.location.reload();
} else {
web3.eth.getCoinbase((err, newCoinbase) => {
newCoinbase = !err && newCoinbase ? newCoinbase.toString() : "";
const approvedNetworkId = APPROVED_NETWORK_ID || newNetworkId;
if (
(!err &&
newCoinbase &&
newCoinbase !== "" &&
newCoinbase !== coinbase &&
approvedNetworkId &&
newNetworkId === approvedNetworkId) ||
(!newCoinbase && coinbase)
) {
store.dispatch(ACTION_TYPES.LOGOUT);
window.location.reload();
} else if (
!err &&
newCoinbase &&
newCoinbase !== "" &&
newCoinbase !== coinbase
) {
coinbase = newCoinbase;
store.dispatch(ACTION_TYPES.UPDATE_WEB3_PROPERTIES, {
properties: ["coinbase"],
values: [newCoinbase]
});
}
});
}
});
}
}, 666);
};
export default monitorWeb3;