Web3 Improvements (#740)
* increase timeout for web3 auto-login; don't attempt login when web3 is unavailable * only auto-login when metamask available * combine multiple imports
This commit is contained in:
parent
897fc3f9b3
commit
92d8ecf353
|
@ -31,7 +31,7 @@ import {
|
||||||
WalletButton
|
WalletButton
|
||||||
} from './components';
|
} from './components';
|
||||||
import { AppState } from 'reducers';
|
import { AppState } from 'reducers';
|
||||||
import { knowledgeBaseURL } from 'config/data';
|
import { knowledgeBaseURL, isWeb3NodeAvailable } from 'config/data';
|
||||||
import { IWallet } from 'libs/wallet';
|
import { IWallet } from 'libs/wallet';
|
||||||
import DigitalBitboxIcon from 'assets/images/wallets/digital-bitbox.svg';
|
import DigitalBitboxIcon from 'assets/images/wallets/digital-bitbox.svg';
|
||||||
import LedgerIcon from 'assets/images/wallets/ledger.svg';
|
import LedgerIcon from 'assets/images/wallets/ledger.svg';
|
||||||
|
@ -39,7 +39,6 @@ import MetamaskIcon from 'assets/images/wallets/metamask.svg';
|
||||||
import MistIcon from 'assets/images/wallets/mist.svg';
|
import MistIcon from 'assets/images/wallets/mist.svg';
|
||||||
import TrezorIcon from 'assets/images/wallets/trezor.svg';
|
import TrezorIcon from 'assets/images/wallets/trezor.svg';
|
||||||
import './WalletDecrypt.scss';
|
import './WalletDecrypt.scss';
|
||||||
|
|
||||||
type UnlockParams = {} | PrivateKeyValue;
|
type UnlockParams = {} | PrivateKeyValue;
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
|
@ -277,16 +276,18 @@ export class WalletDecrypt extends Component<Props, State> {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public handleWalletChoice = (walletType: string) => {
|
public handleWalletChoice = async (walletType: string) => {
|
||||||
const wallet = this.WALLETS[walletType];
|
const wallet = this.WALLETS[walletType];
|
||||||
if (!wallet) {
|
if (!wallet) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
let timeout = 0;
|
let timeout = 0;
|
||||||
|
const web3Available = await isWeb3NodeAvailable();
|
||||||
if (wallet.attemptUnlock) {
|
if (wallet.attemptUnlock && web3Available) {
|
||||||
timeout = 250;
|
// timeout is only the maximum wait time before secondary view is shown
|
||||||
|
// send view will be shown immediately on web3 resolve
|
||||||
|
timeout = 1000;
|
||||||
wallet.unlock();
|
wallet.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -278,7 +278,12 @@ export const NODES: { [key: string]: NodeConfig } = {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
export async function initWeb3Node(): Promise<void> {
|
interface Web3NodeInfo {
|
||||||
|
networkId: string;
|
||||||
|
lib: Web3Node;
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function setupWeb3Node(): Promise<Web3NodeInfo> {
|
||||||
const { web3 } = window as any;
|
const { web3 } = window as any;
|
||||||
|
|
||||||
if (!web3 || !web3.currentProvider || !web3.currentProvider.sendAsync) {
|
if (!web3 || !web3.currentProvider || !web3.currentProvider.sendAsync) {
|
||||||
|
@ -299,6 +304,20 @@ export async function initWeb3Node(): Promise<void> {
|
||||||
throw new Error('MetaMask / Mist is still loading. Please refresh the page and try again.');
|
throw new Error('MetaMask / Mist is still loading. Please refresh the page and try again.');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return { networkId, lib };
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function isWeb3NodeAvailable(): Promise<boolean> {
|
||||||
|
try {
|
||||||
|
await setupWeb3Node();
|
||||||
|
return true;
|
||||||
|
} catch (e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function initWeb3Node(): Promise<void> {
|
||||||
|
const { networkId, lib } = await setupWeb3Node();
|
||||||
NODES.web3 = {
|
NODES.web3 = {
|
||||||
network: networkIdToName(networkId),
|
network: networkIdToName(networkId),
|
||||||
service: 'MetaMask / Mist',
|
service: 'MetaMask / Mist',
|
||||||
|
|
Loading…
Reference in New Issue