43 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
// HACK: web3 injects XMLHttpRequest into the global scope and ProviderEngine checks XMLHttpRequest
 | 
						|
// to know whether it is running in a browser or node environment. We need it to be undefined since
 | 
						|
// we are not running in a browser env.
 | 
						|
// Filed issue: https://github.com/ethereum/web3.js/issues/844
 | 
						|
(global as any).XMLHttpRequest = undefined;
 | 
						|
import ProviderEngine = require('web3-provider-engine');
 | 
						|
import RpcSubprovider = require('web3-provider-engine/subproviders/rpc');
 | 
						|
 | 
						|
import { EmptyWalletSubprovider } from './subproviders/empty_wallet_subprovider';
 | 
						|
import { FakeGasEstimateSubprovider } from './subproviders/fake_gas_estimate_subprovider';
 | 
						|
 | 
						|
import { constants } from './constants';
 | 
						|
 | 
						|
// HACK: web3 leaks XMLHttpRequest into the global scope and causes requests to hang
 | 
						|
// because they are using the wrong XHR package.
 | 
						|
// importing web3 after subproviders fixes this issue
 | 
						|
// Filed issue: https://github.com/ethereum/web3.js/issues/844
 | 
						|
// tslint:disable-next-line:ordered-imports
 | 
						|
import * as Web3 from 'web3';
 | 
						|
 | 
						|
export const web3Factory = {
 | 
						|
    create(hasAddresses: boolean = true): Web3 {
 | 
						|
        const provider = this.getRpcProvider(hasAddresses);
 | 
						|
        const web3 = new Web3();
 | 
						|
        web3.setProvider(provider);
 | 
						|
        return web3;
 | 
						|
    },
 | 
						|
    getRpcProvider(hasAddresses: boolean = true): Web3.Provider {
 | 
						|
        const provider = new ProviderEngine();
 | 
						|
        if (!hasAddresses) {
 | 
						|
            provider.addProvider(new EmptyWalletSubprovider());
 | 
						|
        }
 | 
						|
        provider.addProvider(new FakeGasEstimateSubprovider(constants.GAS_ESTIMATE));
 | 
						|
        provider.addProvider(
 | 
						|
            new RpcSubprovider({
 | 
						|
                rpcUrl: constants.RPC_URL,
 | 
						|
            }),
 | 
						|
        );
 | 
						|
        provider.start();
 | 
						|
        return provider;
 | 
						|
    },
 | 
						|
};
 |