on master help sign in
metamask: detect presence through official package
8ad8a74Hunter Miller
package-lock.json+5
@@ -4720,6 +4720,11 @@
4720 "resolved": "https://registry.npmjs.org/@ledgerhq/logs/-/logs-6.2.0.tgz",
4720 "resolved": "https://registry.npmjs.org/@ledgerhq/logs/-/logs-6.2.0.tgz",
4721 "integrity": "sha512-SLyFyD7ElMhgKWPYedFGCT/ilcbGPgL5hXXYHxOM79Fs5fWi0zaUpt5oGqGMsOAAFaMa9/rbun0pokzPhEFz8A=="
4721 "integrity": "sha512-SLyFyD7ElMhgKWPYedFGCT/ilcbGPgL5hXXYHxOM79Fs5fWi0zaUpt5oGqGMsOAAFaMa9/rbun0pokzPhEFz8A=="
4722 },
4722 },
4723+ "@metamask/detect-provider": {
4724+ "version": "1.2.0",
4725+ "resolved": "https://registry.npmjs.org/@metamask/detect-provider/-/detect-provider-1.2.0.tgz",
4726+ "integrity": "sha512-ocA76vt+8D0thgXZ7LxFPyqw3H7988qblgzddTDA6B8a/yU0uKV42QR/DhA+Jh11rJjxW0jKvwb5htA6krNZDQ=="
4727+ },
4723 "@microsoft/fetch-event-source": {
4728 "@microsoft/fetch-event-source": {
4724 "version": "2.0.1",
4729 "version": "2.0.1",
4725 "resolved": "https://registry.npmjs.org/@microsoft/fetch-event-source/-/fetch-event-source-2.0.1.tgz",
4730 "resolved": "https://registry.npmjs.org/@microsoft/fetch-event-source/-/fetch-event-source-2.0.1.tgz",
package.json+1
@@ -18,6 +18,7 @@
18 "@ethereumjs/tx": "^3.3.0",
18 "@ethereumjs/tx": "^3.3.0",
19 "@ledgerhq/hw-app-eth": "^6.5.0",
19 "@ledgerhq/hw-app-eth": "^6.5.0",
20 "@ledgerhq/hw-transport-u2f": "^5.36.0-deprecated",
20 "@ledgerhq/hw-transport-u2f": "^5.36.0-deprecated",
21+ "@metamask/detect-provider": "^1.2.0",
21 "@reach/disclosure": "^0.15.0",
22 "@reach/disclosure": "^0.15.0",
22 "@reach/menu-button": "^0.15.1",
23 "@reach/menu-button": "^0.15.1",
23 "@reach/tabs": "^0.15.0",
24 "@reach/tabs": "^0.15.0",
src/store/lib/useControlledPointsStore.js+3−3
@@ -10,7 +10,7 @@ import { useNetwork } from '../network';
10import { ONE_MINUTE } from 'lib/constants';
10import { ONE_MINUTE } from 'lib/constants';
11
11
12export default function useControlledPointsStore() {
12export default function useControlledPointsStore() {
13− const { contracts } = useNetwork();
13+ const { contracts, web3 } = useNetwork();
14 const { wallet } = useWallet();
14 const { wallet } = useWallet();
15 const { getPoints, getPointsDetails } = useRoller();
15 const { getPoints, getPointsDetails } = useRoller();
16
16
@@ -19,7 +19,7 @@ export default function useControlledPointsStore() {
19 const syncControlledPoints = useCallback(async () => {
19 const syncControlledPoints = useCallback(async () => {
20 const _contracts = contracts.getOrElse(null);
20 const _contracts = contracts.getOrElse(null);
21 const _wallet = wallet.getOrElse(null);
21 const _wallet = wallet.getOrElse(null);
22− if (!_contracts || !_wallet) {
22+ if ((!web3 && Nothing.HasInstance(web3)) || !_contracts || !_wallet) {
23 return;
23 return;
24 }
24 }
25
25
@@ -115,7 +115,7 @@ export default function useControlledPointsStore() {
115 console.error('failed to fetch controlled points', error);
115 console.error('failed to fetch controlled points', error);
116 _setControlledPoints(Just(Result.Error(JSON.stringify(error))));
116 _setControlledPoints(Just(Result.Error(JSON.stringify(error))));
117 }
117 }
118− }, [contracts, wallet, getPoints, getPointsDetails]);
118+ }, [web3, contracts, wallet, getPoints, getPointsDetails]);
119
119
120 // sync controlled points whenever wallet or contracts changes
120 // sync controlled points whenever wallet or contracts changes
121 useEffect(() => {
121 useEffect(() => {
src/store/network.js+3−1
@@ -16,6 +16,7 @@ import { isDevelopment } from '../lib/flags';
16import { Grid } from 'indigo-react';
16import { Grid } from 'indigo-react';
17import View from 'components/View';
17import View from 'components/View';
18import Blinky from 'components/Blinky';
18import Blinky from 'components/Blinky';
19+import detectEthereumProvider from '@metamask/detect-provider';
19
20
20function _useNetwork(initialNetworkType = null) {
21function _useNetwork(initialNetworkType = null) {
21 const [networkType, setNetworkType] = useState(initialNetworkType);
22 const [networkType, setNetworkType] = useState(initialNetworkType);
@@ -26,7 +27,8 @@ function _useNetwork(initialNetworkType = null) {
26
27
27 useEffect(() => {
28 useEffect(() => {
28 (async () => {
29 (async () => {
29− if (window.ethereum) {
30+ const provider = await detectEthereumProvider();
31+ if (provider) {
30 try {
32 try {
31 setMetamask(true);
33 setMetamask(true);
32 setNetworkType(chainIdToNetworkType(window.ethereum.chainId));
34 setNetworkType(chainIdToNetworkType(window.ethereum.chainId));