Remove web3Factory.create and remove dev-tools dependency on sol-cov
This commit is contained in:
		@@ -2,8 +2,7 @@ import { devConstants, web3Factory } from '@0xproject/dev-utils';
 | 
				
			|||||||
import { Provider } from '@0xproject/types';
 | 
					import { Provider } from '@0xproject/types';
 | 
				
			||||||
import { Web3Wrapper } from '@0xproject/web3-wrapper';
 | 
					import { Web3Wrapper } from '@0xproject/web3-wrapper';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const web3 = web3Factory.create({ shouldUseInProcessGanache: true });
 | 
					const provider: Provider = web3Factory.getRpcProvider({ shouldUseInProcessGanache: true });
 | 
				
			||||||
const provider: Provider = web3.currentProvider;
 | 
					const web3Wrapper = new Web3Wrapper(provider);
 | 
				
			||||||
const web3Wrapper = new Web3Wrapper(web3.currentProvider);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
export { provider, web3Wrapper };
 | 
					export { provider, web3Wrapper };
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@ const TIMEOUT = 10000;
 | 
				
			|||||||
describe('Artifacts', () => {
 | 
					describe('Artifacts', () => {
 | 
				
			||||||
    describe('contracts are deployed on kovan', () => {
 | 
					    describe('contracts are deployed on kovan', () => {
 | 
				
			||||||
        const kovanRpcUrl = constants.KOVAN_RPC_URL;
 | 
					        const kovanRpcUrl = constants.KOVAN_RPC_URL;
 | 
				
			||||||
        const provider = web3Factory.create({ rpcUrl: kovanRpcUrl }).currentProvider;
 | 
					        const provider = web3Factory.getRpcProvider({ rpcUrl: kovanRpcUrl });
 | 
				
			||||||
        const config = {
 | 
					        const config = {
 | 
				
			||||||
            networkId: constants.KOVAN_NETWORK_ID,
 | 
					            networkId: constants.KOVAN_NETWORK_ID,
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
@@ -32,7 +32,7 @@ describe('Artifacts', () => {
 | 
				
			|||||||
    });
 | 
					    });
 | 
				
			||||||
    describe('contracts are deployed on ropsten', () => {
 | 
					    describe('contracts are deployed on ropsten', () => {
 | 
				
			||||||
        const ropstenRpcUrl = constants.ROPSTEN_RPC_URL;
 | 
					        const ropstenRpcUrl = constants.ROPSTEN_RPC_URL;
 | 
				
			||||||
        const provider = web3Factory.create({ rpcUrl: ropstenRpcUrl }).currentProvider;
 | 
					        const provider = web3Factory.getRpcProvider({ rpcUrl: ropstenRpcUrl });
 | 
				
			||||||
        const config = {
 | 
					        const config = {
 | 
				
			||||||
            networkId: constants.ROPSTEN_NETWORK_ID,
 | 
					            networkId: constants.ROPSTEN_NETWORK_ID,
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,8 +2,7 @@ import { devConstants, web3Factory } from '@0xproject/dev-utils';
 | 
				
			|||||||
import { Provider } from '@0xproject/types';
 | 
					import { Provider } from '@0xproject/types';
 | 
				
			||||||
import { Web3Wrapper } from '@0xproject/web3-wrapper';
 | 
					import { Web3Wrapper } from '@0xproject/web3-wrapper';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const web3 = web3Factory.create({ shouldUseInProcessGanache: true });
 | 
					const provider: Provider = web3Factory.getRpcProvider({ shouldUseInProcessGanache: true });
 | 
				
			||||||
const provider: Provider = web3.currentProvider;
 | 
					const web3Wrapper = new Web3Wrapper(provider);
 | 
				
			||||||
const web3Wrapper = new Web3Wrapper(web3.currentProvider);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
export { provider, web3Wrapper };
 | 
					export { provider, web3Wrapper };
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -44,6 +44,8 @@
 | 
				
			|||||||
    "devDependencies": {
 | 
					    "devDependencies": {
 | 
				
			||||||
        "@0xproject/abi-gen": "^0.2.13",
 | 
					        "@0xproject/abi-gen": "^0.2.13",
 | 
				
			||||||
        "@0xproject/dev-utils": "^0.4.1",
 | 
					        "@0xproject/dev-utils": "^0.4.1",
 | 
				
			||||||
 | 
					        "@0xproject/subproviders": "^0.10.1",
 | 
				
			||||||
 | 
					        "@0xproject/sol-cov": "^0.0.10",
 | 
				
			||||||
        "@0xproject/tslint-config": "^0.4.17",
 | 
					        "@0xproject/tslint-config": "^0.4.17",
 | 
				
			||||||
        "@types/lodash": "4.14.104",
 | 
					        "@types/lodash": "4.14.104",
 | 
				
			||||||
        "@types/node": "^8.0.53",
 | 
					        "@types/node": "^8.0.53",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,12 +1,18 @@
 | 
				
			|||||||
import { devConstants, web3Factory } from '@0xproject/dev-utils';
 | 
					import { devConstants, env, EnvVars, web3Factory } from '@0xproject/dev-utils';
 | 
				
			||||||
 | 
					import { prependSubprovider } from '@0xproject/subproviders';
 | 
				
			||||||
import { Provider } from '@0xproject/types';
 | 
					import { Provider } from '@0xproject/types';
 | 
				
			||||||
import { Web3Wrapper } from '@0xproject/web3-wrapper';
 | 
					import { Web3Wrapper } from '@0xproject/web3-wrapper';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import { coverage } from './coverage';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const txDefaults = {
 | 
					export const txDefaults = {
 | 
				
			||||||
    from: devConstants.TESTRPC_FIRST_ADDRESS,
 | 
					    from: devConstants.TESTRPC_FIRST_ADDRESS,
 | 
				
			||||||
    gas: devConstants.GAS_ESTIMATE,
 | 
					    gas: devConstants.GAS_ESTIMATE,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
const providerConfigs = { shouldUseInProcessGanache: true };
 | 
					const providerConfigs = { shouldUseInProcessGanache: true };
 | 
				
			||||||
export const web3 = web3Factory.create(providerConfigs);
 | 
					export const provider = web3Factory.getRpcProvider(providerConfigs);
 | 
				
			||||||
export const provider = web3.currentProvider;
 | 
					const isCoverageEnabled = env.parseBoolean(EnvVars.SolidityCoverage);
 | 
				
			||||||
 | 
					if (isCoverageEnabled) {
 | 
				
			||||||
 | 
					    prependSubprovider(provider, coverage.getCoverageSubproviderSingleton());
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
export const web3Wrapper = new Web3Wrapper(provider);
 | 
					export const web3Wrapper = new Web3Wrapper(provider);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,6 @@
 | 
				
			|||||||
import { coverage, env, EnvVars } from '@0xproject/dev-utils';
 | 
					import { env, EnvVars } from '@0xproject/dev-utils';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import { coverage } from './utils/coverage';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
after('generate coverage report', async () => {
 | 
					after('generate coverage report', async () => {
 | 
				
			||||||
    if (env.parseBoolean(EnvVars.SolidityCoverage)) {
 | 
					    if (env.parseBoolean(EnvVars.SolidityCoverage)) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,8 +1,8 @@
 | 
				
			|||||||
 | 
					import { devConstants } from '@0xproject/dev-utils';
 | 
				
			||||||
import { CoverageSubprovider, ZeroExArtifactAdapter } from '@0xproject/sol-cov';
 | 
					import { CoverageSubprovider, ZeroExArtifactAdapter } from '@0xproject/sol-cov';
 | 
				
			||||||
 | 
					import * as fs from 'fs';
 | 
				
			||||||
import * as _ from 'lodash';
 | 
					import * as _ from 'lodash';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { constants } from './constants';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
let coverageSubprovider: CoverageSubprovider;
 | 
					let coverageSubprovider: CoverageSubprovider;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const coverage = {
 | 
					export const coverage = {
 | 
				
			||||||
@@ -13,10 +13,9 @@ export const coverage = {
 | 
				
			|||||||
        return coverageSubprovider;
 | 
					        return coverageSubprovider;
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    _getCoverageSubprovider(): CoverageSubprovider {
 | 
					    _getCoverageSubprovider(): CoverageSubprovider {
 | 
				
			||||||
        const artifactsPath = '../migrations/artifacts/1.0.0';
 | 
					        const defaultFromAddress = devConstants.TESTRPC_FIRST_ADDRESS;
 | 
				
			||||||
        const contractsPath = 'src/contracts';
 | 
					        const config = JSON.parse(fs.readFileSync('compiler.json').toString());
 | 
				
			||||||
        const defaultFromAddress = constants.TESTRPC_FIRST_ADDRESS;
 | 
					        const zeroExArtifactsAdapter = new ZeroExArtifactAdapter(config.artifactsDir, config.contractsDir);
 | 
				
			||||||
        const zeroExArtifactsAdapter = new ZeroExArtifactAdapter(artifactsPath, contractsPath);
 | 
					 | 
				
			||||||
        return new CoverageSubprovider(zeroExArtifactsAdapter, defaultFromAddress);
 | 
					        return new CoverageSubprovider(zeroExArtifactsAdapter, defaultFromAddress);
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
@@ -44,7 +44,6 @@
 | 
				
			|||||||
        "typescript": "2.7.1"
 | 
					        "typescript": "2.7.1"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "dependencies": {
 | 
					    "dependencies": {
 | 
				
			||||||
        "@0xproject/sol-cov": "^0.0.10",
 | 
					 | 
				
			||||||
        "@0xproject/subproviders": "^0.10.1",
 | 
					        "@0xproject/subproviders": "^0.10.1",
 | 
				
			||||||
        "@0xproject/types": "^0.6.3",
 | 
					        "@0xproject/types": "^0.6.3",
 | 
				
			||||||
        "@0xproject/typescript-typings": "^0.3.1",
 | 
					        "@0xproject/typescript-typings": "^0.3.1",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,5 @@
 | 
				
			|||||||
export { BlockchainLifecycle } from './blockchain_lifecycle';
 | 
					export { BlockchainLifecycle } from './blockchain_lifecycle';
 | 
				
			||||||
export { web3Factory } from './web3_factory';
 | 
					export { web3Factory } from './web3_factory';
 | 
				
			||||||
export { constants as devConstants } from './constants';
 | 
					export { constants as devConstants } from './constants';
 | 
				
			||||||
export { coverage } from './coverage';
 | 
					 | 
				
			||||||
export { env, EnvVars } from './env';
 | 
					export { env, EnvVars } from './env';
 | 
				
			||||||
export { callbackErrorReporter } from './callback_error_reporter';
 | 
					export { callbackErrorReporter } from './callback_error_reporter';
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,16 +13,8 @@ import * as _ from 'lodash';
 | 
				
			|||||||
import * as process from 'process';
 | 
					import * as process from 'process';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { constants } from './constants';
 | 
					import { constants } from './constants';
 | 
				
			||||||
import { coverage } from './coverage';
 | 
					 | 
				
			||||||
import { env, EnvVars } from './env';
 | 
					import { env, EnvVars } from './env';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 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 interface Web3Config {
 | 
					export interface Web3Config {
 | 
				
			||||||
    hasAddresses?: boolean; // default: true
 | 
					    hasAddresses?: boolean; // default: true
 | 
				
			||||||
    shouldUseInProcessGanache?: boolean; // default: false
 | 
					    shouldUseInProcessGanache?: boolean; // default: false
 | 
				
			||||||
@@ -30,18 +22,8 @@ export interface Web3Config {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const web3Factory = {
 | 
					export const web3Factory = {
 | 
				
			||||||
    create(config: Web3Config = {}): Web3 {
 | 
					    getRpcProvider(config: Web3Config = {}): ProviderEngine {
 | 
				
			||||||
        const provider = this.getRpcProvider(config);
 | 
					 | 
				
			||||||
        const web3 = new Web3();
 | 
					 | 
				
			||||||
        web3.setProvider(provider);
 | 
					 | 
				
			||||||
        return web3;
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    getRpcProvider(config: Web3Config = {}): Provider {
 | 
					 | 
				
			||||||
        const provider = new ProviderEngine();
 | 
					        const provider = new ProviderEngine();
 | 
				
			||||||
        const isCoverageEnabled = env.parseBoolean(EnvVars.SolidityCoverage);
 | 
					 | 
				
			||||||
        if (isCoverageEnabled) {
 | 
					 | 
				
			||||||
            provider.addProvider(coverage.getCoverageSubproviderSingleton());
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        const hasAddresses = _.isUndefined(config.hasAddresses) || config.hasAddresses;
 | 
					        const hasAddresses = _.isUndefined(config.hasAddresses) || config.hasAddresses;
 | 
				
			||||||
        if (!hasAddresses) {
 | 
					        if (!hasAddresses) {
 | 
				
			||||||
            provider.addProvider(new EmptyWalletSubprovider());
 | 
					            provider.addProvider(new EmptyWalletSubprovider());
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
import { env, EnvVars } from '@0xproject/dev-utils';
 | 
					import { env, EnvVars } from '@0xproject/dev-utils';
 | 
				
			||||||
import { GanacheSubprovider } from '@0xproject/subproviders';
 | 
					import { GanacheSubprovider, prependSubprovider } from '@0xproject/subproviders';
 | 
				
			||||||
import { Web3Wrapper } from '@0xproject/web3-wrapper';
 | 
					import { Web3Wrapper } from '@0xproject/web3-wrapper';
 | 
				
			||||||
import * as fs from 'fs';
 | 
					import * as fs from 'fs';
 | 
				
			||||||
import * as _ from 'lodash';
 | 
					import * as _ from 'lodash';
 | 
				
			||||||
@@ -9,10 +9,6 @@ import { config } from './config';
 | 
				
			|||||||
import { coverage } from './coverage';
 | 
					import { coverage } from './coverage';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const provider = new ProviderEngine();
 | 
					export const provider = new ProviderEngine();
 | 
				
			||||||
const isCoverageEnabled = env.parseBoolean(EnvVars.SolidityCoverage);
 | 
					 | 
				
			||||||
if (isCoverageEnabled) {
 | 
					 | 
				
			||||||
    provider.addProvider(coverage.getCoverageSubproviderSingleton());
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
provider.addProvider(
 | 
					provider.addProvider(
 | 
				
			||||||
    new GanacheSubprovider({
 | 
					    new GanacheSubprovider({
 | 
				
			||||||
        logger: {
 | 
					        logger: {
 | 
				
			||||||
@@ -27,4 +23,9 @@ provider.addProvider(
 | 
				
			|||||||
);
 | 
					);
 | 
				
			||||||
provider.start();
 | 
					provider.start();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const isCoverageEnabled = env.parseBoolean(EnvVars.SolidityCoverage);
 | 
				
			||||||
 | 
					if (isCoverageEnabled) {
 | 
				
			||||||
 | 
					    prependSubprovider(provider, coverage.getCoverageSubproviderSingleton());
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const web3Wrapper = new Web3Wrapper(provider);
 | 
					export const web3Wrapper = new Web3Wrapper(provider);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,7 +9,7 @@
 | 
				
			|||||||
    "types": "lib/index.d.ts",
 | 
					    "types": "lib/index.d.ts",
 | 
				
			||||||
    "scripts": {
 | 
					    "scripts": {
 | 
				
			||||||
        "watch": "tsc -w",
 | 
					        "watch": "tsc -w",
 | 
				
			||||||
        "prebuild": "run-s clean compile copy_artifacts generate_contract_wrappers",
 | 
					        "prebuild": "run-s clean copy_artifacts generate_contract_wrappers",
 | 
				
			||||||
        "copy_artifacts": "copyfiles 'artifacts/1.0.0/**/*' ./lib",
 | 
					        "copy_artifacts": "copyfiles 'artifacts/1.0.0/**/*' ./lib",
 | 
				
			||||||
        "build": "tsc",
 | 
					        "build": "tsc",
 | 
				
			||||||
        "clean": "shx rm -rf lib src/contract_wrappers",
 | 
					        "clean": "shx rm -rf lib src/contract_wrappers",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,8 +11,7 @@ import { runMigrationsAsync } from './migration';
 | 
				
			|||||||
        from: devConstants.TESTRPC_FIRST_ADDRESS,
 | 
					        from: devConstants.TESTRPC_FIRST_ADDRESS,
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
    const providerConfigs = { shouldUseInProcessGanache: false };
 | 
					    const providerConfigs = { shouldUseInProcessGanache: false };
 | 
				
			||||||
    const web3 = web3Factory.create(providerConfigs);
 | 
					    const provider: Provider = web3Factory.getRpcProvider(providerConfigs);
 | 
				
			||||||
    const provider = web3.currentProvider;
 | 
					 | 
				
			||||||
    const artifactsDir = 'artifacts/1.0.0';
 | 
					    const artifactsDir = 'artifacts/1.0.0';
 | 
				
			||||||
    await runMigrationsAsync(provider, artifactsDir, txDefaults);
 | 
					    await runMigrationsAsync(provider, artifactsDir, txDefaults);
 | 
				
			||||||
    process.exit(0);
 | 
					    process.exit(0);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,8 +2,7 @@ import { devConstants, web3Factory } from '@0xproject/dev-utils';
 | 
				
			|||||||
import { Provider } from '@0xproject/types';
 | 
					import { Provider } from '@0xproject/types';
 | 
				
			||||||
import { Web3Wrapper } from '@0xproject/web3-wrapper';
 | 
					import { Web3Wrapper } from '@0xproject/web3-wrapper';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const web3 = web3Factory.create({ shouldUseInProcessGanache: true });
 | 
					const provider: Provider = web3Factory.getRpcProvider({ shouldUseInProcessGanache: true });
 | 
				
			||||||
const provider: Provider = web3.currentProvider;
 | 
					const web3Wrapper = new Web3Wrapper(provider);
 | 
				
			||||||
const web3Wrapper = new Web3Wrapper(web3.currentProvider);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
export { provider, web3Wrapper };
 | 
					export { provider, web3Wrapper };
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,8 +2,7 @@ import { devConstants, web3Factory } from '@0xproject/dev-utils';
 | 
				
			|||||||
import { Provider } from '@0xproject/types';
 | 
					import { Provider } from '@0xproject/types';
 | 
				
			||||||
import { Web3Wrapper } from '@0xproject/web3-wrapper';
 | 
					import { Web3Wrapper } from '@0xproject/web3-wrapper';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const web3 = web3Factory.create({ shouldUseInProcessGanache: true });
 | 
					const provider: Provider = web3Factory.getRpcProvider({ shouldUseInProcessGanache: true });
 | 
				
			||||||
const provider: Provider = web3.currentProvider;
 | 
					const web3Wrapper = new Web3Wrapper(provider);
 | 
				
			||||||
const web3Wrapper = new Web3Wrapper(web3.currentProvider);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
export { provider, web3Wrapper };
 | 
					export { provider, web3Wrapper };
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,7 +3,6 @@ import { Provider } from '@0xproject/types';
 | 
				
			|||||||
import * as Web3 from 'web3';
 | 
					import * as Web3 from 'web3';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const providerConfigs = { shouldUseInProcessGanache: true };
 | 
					const providerConfigs = { shouldUseInProcessGanache: true };
 | 
				
			||||||
const web3Instance = web3Factory.create(providerConfigs);
 | 
					const provider: Provider = web3Factory.getRpcProvider(providerConfigs);
 | 
				
			||||||
const provider: Provider = web3Instance.currentProvider;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
export { provider };
 | 
					export { provider };
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -118,7 +118,7 @@ export class CoverageSubprovider extends Subprovider {
 | 
				
			|||||||
    private async _recordTxTraceAsync(address: string, data: string | undefined, txHash: string): Promise<void> {
 | 
					    private async _recordTxTraceAsync(address: string, data: string | undefined, txHash: string): Promise<void> {
 | 
				
			||||||
        let payload = {
 | 
					        let payload = {
 | 
				
			||||||
            method: 'debug_traceTransaction',
 | 
					            method: 'debug_traceTransaction',
 | 
				
			||||||
            params: [txHash, { disableMemory: true, disableStack: true, disableStorage: true }], // TODO For now testrpc just ignores those parameters https://github.com/trufflesuite/ganache-cli/issues/489
 | 
					            params: [txHash, { disableMemory: true, disableStack: false, disableStorage: true }],
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
        const jsonRPCResponsePayload = await this.emitPayloadAsync(payload);
 | 
					        const jsonRPCResponsePayload = await this.emitPayloadAsync(payload);
 | 
				
			||||||
        const trace: TransactionTrace = jsonRPCResponsePayload.result;
 | 
					        const trace: TransactionTrace = jsonRPCResponsePayload.result;
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										3227
									
								
								packages/sol-cov/src/trace.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3227
									
								
								packages/sol-cov/src/trace.json
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -7,7 +7,7 @@ import * as _ from 'lodash';
 | 
				
			|||||||
export interface TraceByContractAddress {
 | 
					export interface TraceByContractAddress {
 | 
				
			||||||
    [contractAddress: string]: StructLog[];
 | 
					    [contractAddress: string]: StructLog[];
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
function padZeros(address: string) {
 | 
					function padZeros(address: string): string {
 | 
				
			||||||
    return addHexPrefix(_.padStart(stripHexPrefix(address), 40, '0'));
 | 
					    return addHexPrefix(_.padStart(stripHexPrefix(address), 40, '0'));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,7 +32,7 @@ describe('Trace', () => {
 | 
				
			|||||||
            const trace = [
 | 
					            const trace = [
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    op: OpCode.DelegateCall,
 | 
					                    op: OpCode.DelegateCall,
 | 
				
			||||||
                    stack: ['0x', '0x', delegateCallAddress],
 | 
					                    stack: ['0x', '0x', '0x', '0x', delegateCallAddress],
 | 
				
			||||||
                    depth: 0,
 | 
					                    depth: 0,
 | 
				
			||||||
                },
 | 
					                },
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,6 +4,7 @@ export { ECSignature } from '@0xproject/types';
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import { LedgerEthereumClient } from './types';
 | 
					import { LedgerEthereumClient } from './types';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export { prependSubprovider } from './utils/subprovider_utils';
 | 
				
			||||||
export { EmptyWalletSubprovider } from './subproviders/empty_wallet_subprovider';
 | 
					export { EmptyWalletSubprovider } from './subproviders/empty_wallet_subprovider';
 | 
				
			||||||
export { FakeGasEstimateSubprovider } from './subproviders/fake_gas_estimate_subprovider';
 | 
					export { FakeGasEstimateSubprovider } from './subproviders/fake_gas_estimate_subprovider';
 | 
				
			||||||
export { InjectedWeb3Subprovider } from './subproviders/injected_web3';
 | 
					export { InjectedWeb3Subprovider } from './subproviders/injected_web3';
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										13
									
								
								packages/subproviders/src/utils/subprovider_utils.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								packages/subproviders/src/utils/subprovider_utils.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					import ProviderEngine = require('web3-provider-engine');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import { Subprovider } from '../subproviders/subprovider';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Prepends a subprovider to a provider
 | 
				
			||||||
 | 
					 * @param provider    Given provider
 | 
				
			||||||
 | 
					 * @param subprovider Subprovider to prepend
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					export function prependSubprovider(provider: ProviderEngine, subprovider: Subprovider): void {
 | 
				
			||||||
 | 
					    subprovider.setEngine(provider);
 | 
				
			||||||
 | 
					    (provider as any)._providers = [subprovider, ...(provider as any)._providers];
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -1,780 +0,0 @@
 | 
				
			|||||||
require("source-map-support").install();
 | 
					 | 
				
			||||||
/******/ (function(modules) { // webpackBootstrap
 | 
					 | 
				
			||||||
/******/ 	// The module cache
 | 
					 | 
				
			||||||
/******/ 	var installedModules = {};
 | 
					 | 
				
			||||||
/******/
 | 
					 | 
				
			||||||
/******/ 	// The require function
 | 
					 | 
				
			||||||
/******/ 	function __webpack_require__(moduleId) {
 | 
					 | 
				
			||||||
/******/
 | 
					 | 
				
			||||||
/******/ 		// Check if module is in cache
 | 
					 | 
				
			||||||
/******/ 		if(installedModules[moduleId]) {
 | 
					 | 
				
			||||||
/******/ 			return installedModules[moduleId].exports;
 | 
					 | 
				
			||||||
/******/ 		}
 | 
					 | 
				
			||||||
/******/ 		// Create a new module (and put it into the cache)
 | 
					 | 
				
			||||||
/******/ 		var module = installedModules[moduleId] = {
 | 
					 | 
				
			||||||
/******/ 			i: moduleId,
 | 
					 | 
				
			||||||
/******/ 			l: false,
 | 
					 | 
				
			||||||
/******/ 			exports: {}
 | 
					 | 
				
			||||||
/******/ 		};
 | 
					 | 
				
			||||||
/******/
 | 
					 | 
				
			||||||
/******/ 		// Execute the module function
 | 
					 | 
				
			||||||
/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
 | 
					 | 
				
			||||||
/******/
 | 
					 | 
				
			||||||
/******/ 		// Flag the module as loaded
 | 
					 | 
				
			||||||
/******/ 		module.l = true;
 | 
					 | 
				
			||||||
/******/
 | 
					 | 
				
			||||||
/******/ 		// Return the exports of the module
 | 
					 | 
				
			||||||
/******/ 		return module.exports;
 | 
					 | 
				
			||||||
/******/ 	}
 | 
					 | 
				
			||||||
/******/
 | 
					 | 
				
			||||||
/******/
 | 
					 | 
				
			||||||
/******/ 	// expose the modules object (__webpack_modules__)
 | 
					 | 
				
			||||||
/******/ 	__webpack_require__.m = modules;
 | 
					 | 
				
			||||||
/******/
 | 
					 | 
				
			||||||
/******/ 	// expose the module cache
 | 
					 | 
				
			||||||
/******/ 	__webpack_require__.c = installedModules;
 | 
					 | 
				
			||||||
/******/
 | 
					 | 
				
			||||||
/******/ 	// define getter function for harmony exports
 | 
					 | 
				
			||||||
/******/ 	__webpack_require__.d = function(exports, name, getter) {
 | 
					 | 
				
			||||||
/******/ 		if(!__webpack_require__.o(exports, name)) {
 | 
					 | 
				
			||||||
/******/ 			Object.defineProperty(exports, name, {
 | 
					 | 
				
			||||||
/******/ 				configurable: false,
 | 
					 | 
				
			||||||
/******/ 				enumerable: true,
 | 
					 | 
				
			||||||
/******/ 				get: getter
 | 
					 | 
				
			||||||
/******/ 			});
 | 
					 | 
				
			||||||
/******/ 		}
 | 
					 | 
				
			||||||
/******/ 	};
 | 
					 | 
				
			||||||
/******/
 | 
					 | 
				
			||||||
/******/ 	// getDefaultExport function for compatibility with non-harmony modules
 | 
					 | 
				
			||||||
/******/ 	__webpack_require__.n = function(module) {
 | 
					 | 
				
			||||||
/******/ 		var getter = module && module.__esModule ?
 | 
					 | 
				
			||||||
/******/ 			function getDefault() { return module['default']; } :
 | 
					 | 
				
			||||||
/******/ 			function getModuleExports() { return module; };
 | 
					 | 
				
			||||||
/******/ 		__webpack_require__.d(getter, 'a', getter);
 | 
					 | 
				
			||||||
/******/ 		return getter;
 | 
					 | 
				
			||||||
/******/ 	};
 | 
					 | 
				
			||||||
/******/
 | 
					 | 
				
			||||||
/******/ 	// Object.prototype.hasOwnProperty.call
 | 
					 | 
				
			||||||
/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
 | 
					 | 
				
			||||||
/******/
 | 
					 | 
				
			||||||
/******/ 	// __webpack_public_path__
 | 
					 | 
				
			||||||
/******/ 	__webpack_require__.p = "";
 | 
					 | 
				
			||||||
/******/
 | 
					 | 
				
			||||||
/******/ 	// Load entry module and return exports
 | 
					 | 
				
			||||||
/******/ 	return __webpack_require__(__webpack_require__.s = 6);
 | 
					 | 
				
			||||||
/******/ })
 | 
					 | 
				
			||||||
/************************************************************************/
 | 
					 | 
				
			||||||
/******/ ([
 | 
					 | 
				
			||||||
/* 0 */
 | 
					 | 
				
			||||||
/***/ (function(module, exports) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
module.exports = require("@0xproject/utils");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/***/ }),
 | 
					 | 
				
			||||||
/* 1 */
 | 
					 | 
				
			||||||
/***/ (function(module, exports, __webpack_require__) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
"use strict";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Object.defineProperty(exports, "__esModule", { value: true });
 | 
					 | 
				
			||||||
exports.configs = {
 | 
					 | 
				
			||||||
    DISPENSER_ADDRESS: process.env.DISPENSER_ADDRESS.toLowerCase(),
 | 
					 | 
				
			||||||
    DISPENSER_PRIVATE_KEY: process.env.DISPENSER_PRIVATE_KEY,
 | 
					 | 
				
			||||||
    ENVIRONMENT: process.env.FAUCET_ENVIRONMENT,
 | 
					 | 
				
			||||||
    INFURA_API_KEY: process.env.INFURA_API_KEY,
 | 
					 | 
				
			||||||
    ROLLBAR_ACCESS_KEY: process.env.FAUCET_ROLLBAR_ACCESS_KEY,
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/***/ }),
 | 
					 | 
				
			||||||
/* 2 */
 | 
					 | 
				
			||||||
/***/ (function(module, exports) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
module.exports = require("lodash");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/***/ }),
 | 
					 | 
				
			||||||
/* 3 */
 | 
					 | 
				
			||||||
/***/ (function(module, exports, __webpack_require__) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
"use strict";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
 | 
					 | 
				
			||||||
    return new (P || (P = Promise))(function (resolve, reject) {
 | 
					 | 
				
			||||||
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
 | 
					 | 
				
			||||||
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
 | 
					 | 
				
			||||||
        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
 | 
					 | 
				
			||||||
        step((generator = generator.apply(thisArg, _arguments || [])).next());
 | 
					 | 
				
			||||||
    });
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
var __generator = (this && this.__generator) || function (thisArg, body) {
 | 
					 | 
				
			||||||
    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
 | 
					 | 
				
			||||||
    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
 | 
					 | 
				
			||||||
    function verb(n) { return function (v) { return step([n, v]); }; }
 | 
					 | 
				
			||||||
    function step(op) {
 | 
					 | 
				
			||||||
        if (f) throw new TypeError("Generator is already executing.");
 | 
					 | 
				
			||||||
        while (_) try {
 | 
					 | 
				
			||||||
            if (f = 1, y && (t = y[op[0] & 2 ? "return" : op[0] ? "throw" : "next"]) && !(t = t.call(y, op[1])).done) return t;
 | 
					 | 
				
			||||||
            if (y = 0, t) op = [0, t.value];
 | 
					 | 
				
			||||||
            switch (op[0]) {
 | 
					 | 
				
			||||||
                case 0: case 1: t = op; break;
 | 
					 | 
				
			||||||
                case 4: _.label++; return { value: op[1], done: false };
 | 
					 | 
				
			||||||
                case 5: _.label++; y = op[1]; op = [0]; continue;
 | 
					 | 
				
			||||||
                case 7: op = _.ops.pop(); _.trys.pop(); continue;
 | 
					 | 
				
			||||||
                default:
 | 
					 | 
				
			||||||
                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
 | 
					 | 
				
			||||||
                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
 | 
					 | 
				
			||||||
                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
 | 
					 | 
				
			||||||
                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
 | 
					 | 
				
			||||||
                    if (t[2]) _.ops.pop();
 | 
					 | 
				
			||||||
                    _.trys.pop(); continue;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            op = body.call(thisArg, _);
 | 
					 | 
				
			||||||
        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
 | 
					 | 
				
			||||||
        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
Object.defineProperty(exports, "__esModule", { value: true });
 | 
					 | 
				
			||||||
var utils_1 = __webpack_require__(0);
 | 
					 | 
				
			||||||
var rollbar = __webpack_require__(10);
 | 
					 | 
				
			||||||
var configs_1 = __webpack_require__(1);
 | 
					 | 
				
			||||||
exports.errorReporter = {
 | 
					 | 
				
			||||||
    setup: function () {
 | 
					 | 
				
			||||||
        var _this = this;
 | 
					 | 
				
			||||||
        rollbar.init(configs_1.configs.ROLLBAR_ACCESS_KEY, {
 | 
					 | 
				
			||||||
            environment: configs_1.configs.ENVIRONMENT,
 | 
					 | 
				
			||||||
        });
 | 
					 | 
				
			||||||
        rollbar.handleUncaughtExceptions(configs_1.configs.ROLLBAR_ACCESS_KEY);
 | 
					 | 
				
			||||||
        process.on('unhandledRejection', function (err) { return __awaiter(_this, void 0, void 0, function () {
 | 
					 | 
				
			||||||
            return __generator(this, function (_a) {
 | 
					 | 
				
			||||||
                switch (_a.label) {
 | 
					 | 
				
			||||||
                    case 0:
 | 
					 | 
				
			||||||
                        utils_1.logUtils.log("Uncaught exception " + err + ". Stack: " + err.stack);
 | 
					 | 
				
			||||||
                        return [4 /*yield*/, this.reportAsync(err)];
 | 
					 | 
				
			||||||
                    case 1:
 | 
					 | 
				
			||||||
                        _a.sent();
 | 
					 | 
				
			||||||
                        process.exit(1);
 | 
					 | 
				
			||||||
                        return [2 /*return*/];
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            });
 | 
					 | 
				
			||||||
        }); });
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    reportAsync: function (err, req) {
 | 
					 | 
				
			||||||
        return __awaiter(this, void 0, void 0, function () {
 | 
					 | 
				
			||||||
            return __generator(this, function (_a) {
 | 
					 | 
				
			||||||
                if (configs_1.configs.ENVIRONMENT === 'development') {
 | 
					 | 
				
			||||||
                    return [2 /*return*/]; // Do not log development environment errors
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                return [2 /*return*/, new Promise(function (resolve, reject) {
 | 
					 | 
				
			||||||
                        rollbar.handleError(err, req, function (rollbarErr) {
 | 
					 | 
				
			||||||
                            if (rollbarErr) {
 | 
					 | 
				
			||||||
                                utils_1.logUtils.log("Error reporting to rollbar, ignoring: " + rollbarErr);
 | 
					 | 
				
			||||||
                                reject(rollbarErr);
 | 
					 | 
				
			||||||
                            }
 | 
					 | 
				
			||||||
                            else {
 | 
					 | 
				
			||||||
                                resolve();
 | 
					 | 
				
			||||||
                            }
 | 
					 | 
				
			||||||
                        });
 | 
					 | 
				
			||||||
                    })];
 | 
					 | 
				
			||||||
            });
 | 
					 | 
				
			||||||
        });
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    errorHandler: function () {
 | 
					 | 
				
			||||||
        return rollbar.errorHandler(configs_1.configs.ROLLBAR_ACCESS_KEY);
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/***/ }),
 | 
					 | 
				
			||||||
/* 4 */
 | 
					 | 
				
			||||||
/***/ (function(module, exports) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
module.exports = require("0x.js");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/***/ }),
 | 
					 | 
				
			||||||
/* 5 */
 | 
					 | 
				
			||||||
/***/ (function(module, exports, __webpack_require__) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
"use strict";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Object.defineProperty(exports, "__esModule", { value: true });
 | 
					 | 
				
			||||||
var configs_1 = __webpack_require__(1);
 | 
					 | 
				
			||||||
var productionRpcUrls = {
 | 
					 | 
				
			||||||
    '3': "https://ropsten.infura.io/" + configs_1.configs.INFURA_API_KEY,
 | 
					 | 
				
			||||||
    '4': "https://rinkeby.infura.io/" + configs_1.configs.INFURA_API_KEY,
 | 
					 | 
				
			||||||
    '42': "https://kovan.infura.io/" + configs_1.configs.INFURA_API_KEY,
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
var developmentRpcUrls = {
 | 
					 | 
				
			||||||
    '50': 'http://127.0.0.1:8545',
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
exports.rpcUrls = configs_1.configs.ENVIRONMENT === 'development' ? developmentRpcUrls : productionRpcUrls;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/***/ }),
 | 
					 | 
				
			||||||
/* 6 */
 | 
					 | 
				
			||||||
/***/ (function(module, exports, __webpack_require__) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
module.exports = __webpack_require__(7);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/***/ }),
 | 
					 | 
				
			||||||
/* 7 */
 | 
					 | 
				
			||||||
/***/ (function(module, exports, __webpack_require__) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
"use strict";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Object.defineProperty(exports, "__esModule", { value: true });
 | 
					 | 
				
			||||||
var bodyParser = __webpack_require__(8);
 | 
					 | 
				
			||||||
var express = __webpack_require__(9);
 | 
					 | 
				
			||||||
var error_reporter_1 = __webpack_require__(3);
 | 
					 | 
				
			||||||
var handler_1 = __webpack_require__(11);
 | 
					 | 
				
			||||||
var parameter_transformer_1 = __webpack_require__(18);
 | 
					 | 
				
			||||||
// Setup the errorReporter to catch uncaught exceptions and unhandled rejections
 | 
					 | 
				
			||||||
error_reporter_1.errorReporter.setup();
 | 
					 | 
				
			||||||
var app = express();
 | 
					 | 
				
			||||||
app.use(bodyParser.json()); // for parsing application/json
 | 
					 | 
				
			||||||
app.use(function (req, res, next) {
 | 
					 | 
				
			||||||
    res.header('Access-Control-Allow-Origin', '*');
 | 
					 | 
				
			||||||
    res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');
 | 
					 | 
				
			||||||
    next();
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
var handler = new handler_1.Handler();
 | 
					 | 
				
			||||||
app.get('/ping', function (req, res) {
 | 
					 | 
				
			||||||
    res.status(200).send('pong');
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
app.get('/info', handler.getQueueInfo.bind(handler));
 | 
					 | 
				
			||||||
app.get('/ether/:recipient', parameter_transformer_1.parameterTransformer.transform, handler.dispenseEther.bind(handler));
 | 
					 | 
				
			||||||
app.get('/zrx/:recipient', parameter_transformer_1.parameterTransformer.transform, handler.dispenseZRX.bind(handler));
 | 
					 | 
				
			||||||
app.get('/order/weth/:recipient', parameter_transformer_1.parameterTransformer.transform, handler.dispenseWETHOrder.bind(handler));
 | 
					 | 
				
			||||||
app.get('/order/zrx/:recipient', parameter_transformer_1.parameterTransformer.transform, handler.dispenseZRXOrder.bind(handler));
 | 
					 | 
				
			||||||
// Log to rollbar any errors unhandled by handlers
 | 
					 | 
				
			||||||
app.use(error_reporter_1.errorReporter.errorHandler());
 | 
					 | 
				
			||||||
var port = process.env.PORT || 3000;
 | 
					 | 
				
			||||||
app.listen(port);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/***/ }),
 | 
					 | 
				
			||||||
/* 8 */
 | 
					 | 
				
			||||||
/***/ (function(module, exports) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
module.exports = require("body-parser");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/***/ }),
 | 
					 | 
				
			||||||
/* 9 */
 | 
					 | 
				
			||||||
/***/ (function(module, exports) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
module.exports = require("express");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/***/ }),
 | 
					 | 
				
			||||||
/* 10 */
 | 
					 | 
				
			||||||
/***/ (function(module, exports) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
module.exports = require("rollbar");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/***/ }),
 | 
					 | 
				
			||||||
/* 11 */
 | 
					 | 
				
			||||||
/***/ (function(module, exports, __webpack_require__) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
"use strict";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
var __assign = (this && this.__assign) || Object.assign || function(t) {
 | 
					 | 
				
			||||||
    for (var s, i = 1, n = arguments.length; i < n; i++) {
 | 
					 | 
				
			||||||
        s = arguments[i];
 | 
					 | 
				
			||||||
        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
 | 
					 | 
				
			||||||
            t[p] = s[p];
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return t;
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
 | 
					 | 
				
			||||||
    return new (P || (P = Promise))(function (resolve, reject) {
 | 
					 | 
				
			||||||
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
 | 
					 | 
				
			||||||
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
 | 
					 | 
				
			||||||
        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
 | 
					 | 
				
			||||||
        step((generator = generator.apply(thisArg, _arguments || [])).next());
 | 
					 | 
				
			||||||
    });
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
var __generator = (this && this.__generator) || function (thisArg, body) {
 | 
					 | 
				
			||||||
    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
 | 
					 | 
				
			||||||
    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
 | 
					 | 
				
			||||||
    function verb(n) { return function (v) { return step([n, v]); }; }
 | 
					 | 
				
			||||||
    function step(op) {
 | 
					 | 
				
			||||||
        if (f) throw new TypeError("Generator is already executing.");
 | 
					 | 
				
			||||||
        while (_) try {
 | 
					 | 
				
			||||||
            if (f = 1, y && (t = y[op[0] & 2 ? "return" : op[0] ? "throw" : "next"]) && !(t = t.call(y, op[1])).done) return t;
 | 
					 | 
				
			||||||
            if (y = 0, t) op = [0, t.value];
 | 
					 | 
				
			||||||
            switch (op[0]) {
 | 
					 | 
				
			||||||
                case 0: case 1: t = op; break;
 | 
					 | 
				
			||||||
                case 4: _.label++; return { value: op[1], done: false };
 | 
					 | 
				
			||||||
                case 5: _.label++; y = op[1]; op = [0]; continue;
 | 
					 | 
				
			||||||
                case 7: op = _.ops.pop(); _.trys.pop(); continue;
 | 
					 | 
				
			||||||
                default:
 | 
					 | 
				
			||||||
                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
 | 
					 | 
				
			||||||
                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
 | 
					 | 
				
			||||||
                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
 | 
					 | 
				
			||||||
                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
 | 
					 | 
				
			||||||
                    if (t[2]) _.ops.pop();
 | 
					 | 
				
			||||||
                    _.trys.pop(); continue;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            op = body.call(thisArg, _);
 | 
					 | 
				
			||||||
        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
 | 
					 | 
				
			||||||
        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
Object.defineProperty(exports, "__esModule", { value: true });
 | 
					 | 
				
			||||||
var _0x_js_1 = __webpack_require__(4);
 | 
					 | 
				
			||||||
var utils_1 = __webpack_require__(0);
 | 
					 | 
				
			||||||
var _ = __webpack_require__(2);
 | 
					 | 
				
			||||||
var Web3 = __webpack_require__(12);
 | 
					 | 
				
			||||||
// 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.XMLHttpRequest = undefined;
 | 
					 | 
				
			||||||
var subproviders_1 = __webpack_require__(13);
 | 
					 | 
				
			||||||
var ProviderEngine = __webpack_require__(14);
 | 
					 | 
				
			||||||
var RpcSubprovider = __webpack_require__(15);
 | 
					 | 
				
			||||||
var configs_1 = __webpack_require__(1);
 | 
					 | 
				
			||||||
var dispatch_queue_1 = __webpack_require__(16);
 | 
					 | 
				
			||||||
var dispense_asset_tasks_1 = __webpack_require__(17);
 | 
					 | 
				
			||||||
var rpc_urls_1 = __webpack_require__(5);
 | 
					 | 
				
			||||||
var RequestedAssetType;
 | 
					 | 
				
			||||||
(function (RequestedAssetType) {
 | 
					 | 
				
			||||||
    RequestedAssetType["ETH"] = "ETH";
 | 
					 | 
				
			||||||
    RequestedAssetType["WETH"] = "WETH";
 | 
					 | 
				
			||||||
    RequestedAssetType["ZRX"] = "ZRX";
 | 
					 | 
				
			||||||
})(RequestedAssetType || (RequestedAssetType = {}));
 | 
					 | 
				
			||||||
var FIVE_DAYS_IN_MS = 4.32e8; // TODO: make this configurable
 | 
					 | 
				
			||||||
var Handler = /** @class */ (function () {
 | 
					 | 
				
			||||||
    function Handler() {
 | 
					 | 
				
			||||||
        var _this = this;
 | 
					 | 
				
			||||||
        this._networkConfigByNetworkId = {};
 | 
					 | 
				
			||||||
        _.forIn(rpc_urls_1.rpcUrls, function (rpcUrl, networkId) {
 | 
					 | 
				
			||||||
            var providerObj = Handler._createProviderEngine(rpcUrl);
 | 
					 | 
				
			||||||
            var web3 = new Web3(providerObj);
 | 
					 | 
				
			||||||
            var zeroExConfig = {
 | 
					 | 
				
			||||||
                networkId: +networkId,
 | 
					 | 
				
			||||||
            };
 | 
					 | 
				
			||||||
            var zeroEx = new _0x_js_1.ZeroEx(web3.currentProvider, zeroExConfig);
 | 
					 | 
				
			||||||
            var dispatchQueue = new dispatch_queue_1.DispatchQueue();
 | 
					 | 
				
			||||||
            _this._networkConfigByNetworkId[networkId] = {
 | 
					 | 
				
			||||||
                dispatchQueue: dispatchQueue,
 | 
					 | 
				
			||||||
                web3: web3,
 | 
					 | 
				
			||||||
                zeroEx: zeroEx,
 | 
					 | 
				
			||||||
            };
 | 
					 | 
				
			||||||
        });
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    Handler._createProviderEngine = function (rpcUrl) {
 | 
					 | 
				
			||||||
        if (_.isUndefined(configs_1.configs.DISPENSER_PRIVATE_KEY)) {
 | 
					 | 
				
			||||||
            throw new Error('Dispenser Private key not found');
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        var engine = new ProviderEngine();
 | 
					 | 
				
			||||||
        engine.addProvider(new subproviders_1.NonceTrackerSubprovider());
 | 
					 | 
				
			||||||
        engine.addProvider(new subproviders_1.PrivateKeyWalletSubprovider(configs_1.configs.DISPENSER_PRIVATE_KEY));
 | 
					 | 
				
			||||||
        engine.addProvider(new RpcSubprovider({
 | 
					 | 
				
			||||||
            rpcUrl: rpcUrl,
 | 
					 | 
				
			||||||
        }));
 | 
					 | 
				
			||||||
        engine.start();
 | 
					 | 
				
			||||||
        return engine;
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
    Handler.prototype.getQueueInfo = function (req, res) {
 | 
					 | 
				
			||||||
        var _this = this;
 | 
					 | 
				
			||||||
        res.setHeader('Content-Type', 'application/json');
 | 
					 | 
				
			||||||
        var queueInfo = _.mapValues(rpc_urls_1.rpcUrls, function (rpcUrl, networkId) {
 | 
					 | 
				
			||||||
            var dispatchQueue = _this._networkConfigByNetworkId[networkId].dispatchQueue;
 | 
					 | 
				
			||||||
            return {
 | 
					 | 
				
			||||||
                full: dispatchQueue.isFull(),
 | 
					 | 
				
			||||||
                size: dispatchQueue.size(),
 | 
					 | 
				
			||||||
            };
 | 
					 | 
				
			||||||
        });
 | 
					 | 
				
			||||||
        var payload = JSON.stringify(queueInfo);
 | 
					 | 
				
			||||||
        res.status(200).send(payload);
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
    Handler.prototype.dispenseEther = function (req, res) {
 | 
					 | 
				
			||||||
        this._dispenseAsset(req, res, RequestedAssetType.ETH);
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
    Handler.prototype.dispenseZRX = function (req, res) {
 | 
					 | 
				
			||||||
        this._dispenseAsset(req, res, RequestedAssetType.ZRX);
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
    Handler.prototype.dispenseWETHOrder = function (req, res) {
 | 
					 | 
				
			||||||
        return __awaiter(this, void 0, void 0, function () {
 | 
					 | 
				
			||||||
            return __generator(this, function (_a) {
 | 
					 | 
				
			||||||
                switch (_a.label) {
 | 
					 | 
				
			||||||
                    case 0: return [4 /*yield*/, this._dispenseOrder(req, res, RequestedAssetType.WETH)];
 | 
					 | 
				
			||||||
                    case 1:
 | 
					 | 
				
			||||||
                        _a.sent();
 | 
					 | 
				
			||||||
                        return [2 /*return*/];
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            });
 | 
					 | 
				
			||||||
        });
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
    Handler.prototype.dispenseZRXOrder = function (req, res, next) {
 | 
					 | 
				
			||||||
        return __awaiter(this, void 0, void 0, function () {
 | 
					 | 
				
			||||||
            return __generator(this, function (_a) {
 | 
					 | 
				
			||||||
                switch (_a.label) {
 | 
					 | 
				
			||||||
                    case 0: return [4 /*yield*/, this._dispenseOrder(req, res, RequestedAssetType.ZRX)];
 | 
					 | 
				
			||||||
                    case 1:
 | 
					 | 
				
			||||||
                        _a.sent();
 | 
					 | 
				
			||||||
                        return [2 /*return*/];
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            });
 | 
					 | 
				
			||||||
        });
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
    Handler.prototype._dispenseAsset = function (req, res, requestedAssetType) {
 | 
					 | 
				
			||||||
        var networkId = req.params.networkId;
 | 
					 | 
				
			||||||
        var recipient = req.params.recipient;
 | 
					 | 
				
			||||||
        var networkConfig = this._networkConfigByNetworkId[networkId];
 | 
					 | 
				
			||||||
        var dispenserTask;
 | 
					 | 
				
			||||||
        switch (requestedAssetType) {
 | 
					 | 
				
			||||||
            case RequestedAssetType.ETH:
 | 
					 | 
				
			||||||
                dispenserTask = dispense_asset_tasks_1.dispenseAssetTasks.dispenseEtherTask(recipient, networkConfig.web3);
 | 
					 | 
				
			||||||
                break;
 | 
					 | 
				
			||||||
            case RequestedAssetType.WETH:
 | 
					 | 
				
			||||||
            case RequestedAssetType.ZRX:
 | 
					 | 
				
			||||||
                dispenserTask = dispense_asset_tasks_1.dispenseAssetTasks.dispenseTokenTask(recipient, requestedAssetType, networkConfig.zeroEx);
 | 
					 | 
				
			||||||
                break;
 | 
					 | 
				
			||||||
            default:
 | 
					 | 
				
			||||||
                throw new Error("Unsupported asset type: " + requestedAssetType);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        var didAddToQueue = networkConfig.dispatchQueue.add(dispenserTask);
 | 
					 | 
				
			||||||
        if (!didAddToQueue) {
 | 
					 | 
				
			||||||
            res.status(503).send('QUEUE_IS_FULL');
 | 
					 | 
				
			||||||
            return;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        utils_1.logUtils.log("Added " + recipient + " to queue: " + requestedAssetType + " networkId: " + networkId);
 | 
					 | 
				
			||||||
        res.status(200).end();
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
    Handler.prototype._dispenseOrder = function (req, res, requestedAssetType) {
 | 
					 | 
				
			||||||
        return __awaiter(this, void 0, void 0, function () {
 | 
					 | 
				
			||||||
            var networkConfig, zeroEx, makerToken, takerTokenSymbol, takerToken, makerTokenAmount, takerTokenAmount, order, orderHash, signature, signedOrder, signedOrderHash, payload;
 | 
					 | 
				
			||||||
            return __generator(this, function (_a) {
 | 
					 | 
				
			||||||
                switch (_a.label) {
 | 
					 | 
				
			||||||
                    case 0:
 | 
					 | 
				
			||||||
                        networkConfig = _.get(this._networkConfigByNetworkId, req.params.networkId);
 | 
					 | 
				
			||||||
                        if (_.isUndefined(networkConfig)) {
 | 
					 | 
				
			||||||
                            res.status(400).send('UNSUPPORTED_NETWORK_ID');
 | 
					 | 
				
			||||||
                            return [2 /*return*/];
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                        zeroEx = networkConfig.zeroEx;
 | 
					 | 
				
			||||||
                        res.setHeader('Content-Type', 'application/json');
 | 
					 | 
				
			||||||
                        return [4 /*yield*/, zeroEx.tokenRegistry.getTokenBySymbolIfExistsAsync(requestedAssetType)];
 | 
					 | 
				
			||||||
                    case 1:
 | 
					 | 
				
			||||||
                        makerToken = _a.sent();
 | 
					 | 
				
			||||||
                        if (_.isUndefined(makerToken)) {
 | 
					 | 
				
			||||||
                            throw new Error("Unsupported asset type: " + requestedAssetType);
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                        takerTokenSymbol = requestedAssetType === RequestedAssetType.WETH ? RequestedAssetType.ZRX : RequestedAssetType.WETH;
 | 
					 | 
				
			||||||
                        return [4 /*yield*/, zeroEx.tokenRegistry.getTokenBySymbolIfExistsAsync(takerTokenSymbol)];
 | 
					 | 
				
			||||||
                    case 2:
 | 
					 | 
				
			||||||
                        takerToken = _a.sent();
 | 
					 | 
				
			||||||
                        if (_.isUndefined(takerToken)) {
 | 
					 | 
				
			||||||
                            throw new Error("Unsupported asset type: " + requestedAssetType);
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                        makerTokenAmount = _0x_js_1.ZeroEx.toBaseUnitAmount(new utils_1.BigNumber(0.1), makerToken.decimals);
 | 
					 | 
				
			||||||
                        takerTokenAmount = _0x_js_1.ZeroEx.toBaseUnitAmount(new utils_1.BigNumber(0.1), takerToken.decimals);
 | 
					 | 
				
			||||||
                        order = {
 | 
					 | 
				
			||||||
                            maker: configs_1.configs.DISPENSER_ADDRESS,
 | 
					 | 
				
			||||||
                            taker: req.params.recipient,
 | 
					 | 
				
			||||||
                            makerFee: new utils_1.BigNumber(0),
 | 
					 | 
				
			||||||
                            takerFee: new utils_1.BigNumber(0),
 | 
					 | 
				
			||||||
                            makerTokenAmount: makerTokenAmount,
 | 
					 | 
				
			||||||
                            takerTokenAmount: takerTokenAmount,
 | 
					 | 
				
			||||||
                            makerTokenAddress: makerToken.address,
 | 
					 | 
				
			||||||
                            takerTokenAddress: takerToken.address,
 | 
					 | 
				
			||||||
                            salt: _0x_js_1.ZeroEx.generatePseudoRandomSalt(),
 | 
					 | 
				
			||||||
                            exchangeContractAddress: zeroEx.exchange.getContractAddress(),
 | 
					 | 
				
			||||||
                            feeRecipient: _0x_js_1.ZeroEx.NULL_ADDRESS,
 | 
					 | 
				
			||||||
                            expirationUnixTimestampSec: new utils_1.BigNumber(Date.now() + FIVE_DAYS_IN_MS),
 | 
					 | 
				
			||||||
                        };
 | 
					 | 
				
			||||||
                        orderHash = _0x_js_1.ZeroEx.getOrderHashHex(order);
 | 
					 | 
				
			||||||
                        return [4 /*yield*/, zeroEx.signOrderHashAsync(orderHash, configs_1.configs.DISPENSER_ADDRESS, false)];
 | 
					 | 
				
			||||||
                    case 3:
 | 
					 | 
				
			||||||
                        signature = _a.sent();
 | 
					 | 
				
			||||||
                        signedOrder = __assign({}, order, { ecSignature: signature });
 | 
					 | 
				
			||||||
                        signedOrderHash = _0x_js_1.ZeroEx.getOrderHashHex(signedOrder);
 | 
					 | 
				
			||||||
                        payload = JSON.stringify(signedOrder);
 | 
					 | 
				
			||||||
                        utils_1.logUtils.log("Dispensed signed order: " + payload);
 | 
					 | 
				
			||||||
                        res.status(200).send(payload);
 | 
					 | 
				
			||||||
                        return [2 /*return*/];
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            });
 | 
					 | 
				
			||||||
        });
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
    return Handler;
 | 
					 | 
				
			||||||
}());
 | 
					 | 
				
			||||||
exports.Handler = Handler;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/***/ }),
 | 
					 | 
				
			||||||
/* 12 */
 | 
					 | 
				
			||||||
/***/ (function(module, exports) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
module.exports = require("web3");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/***/ }),
 | 
					 | 
				
			||||||
/* 13 */
 | 
					 | 
				
			||||||
/***/ (function(module, exports) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
module.exports = require("@0xproject/subproviders");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/***/ }),
 | 
					 | 
				
			||||||
/* 14 */
 | 
					 | 
				
			||||||
/***/ (function(module, exports) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
module.exports = require("web3-provider-engine");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/***/ }),
 | 
					 | 
				
			||||||
/* 15 */
 | 
					 | 
				
			||||||
/***/ (function(module, exports) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
module.exports = require("web3-provider-engine/subproviders/rpc");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/***/ }),
 | 
					 | 
				
			||||||
/* 16 */
 | 
					 | 
				
			||||||
/***/ (function(module, exports, __webpack_require__) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
"use strict";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
 | 
					 | 
				
			||||||
    return new (P || (P = Promise))(function (resolve, reject) {
 | 
					 | 
				
			||||||
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
 | 
					 | 
				
			||||||
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
 | 
					 | 
				
			||||||
        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
 | 
					 | 
				
			||||||
        step((generator = generator.apply(thisArg, _arguments || [])).next());
 | 
					 | 
				
			||||||
    });
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
var __generator = (this && this.__generator) || function (thisArg, body) {
 | 
					 | 
				
			||||||
    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
 | 
					 | 
				
			||||||
    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
 | 
					 | 
				
			||||||
    function verb(n) { return function (v) { return step([n, v]); }; }
 | 
					 | 
				
			||||||
    function step(op) {
 | 
					 | 
				
			||||||
        if (f) throw new TypeError("Generator is already executing.");
 | 
					 | 
				
			||||||
        while (_) try {
 | 
					 | 
				
			||||||
            if (f = 1, y && (t = y[op[0] & 2 ? "return" : op[0] ? "throw" : "next"]) && !(t = t.call(y, op[1])).done) return t;
 | 
					 | 
				
			||||||
            if (y = 0, t) op = [0, t.value];
 | 
					 | 
				
			||||||
            switch (op[0]) {
 | 
					 | 
				
			||||||
                case 0: case 1: t = op; break;
 | 
					 | 
				
			||||||
                case 4: _.label++; return { value: op[1], done: false };
 | 
					 | 
				
			||||||
                case 5: _.label++; y = op[1]; op = [0]; continue;
 | 
					 | 
				
			||||||
                case 7: op = _.ops.pop(); _.trys.pop(); continue;
 | 
					 | 
				
			||||||
                default:
 | 
					 | 
				
			||||||
                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
 | 
					 | 
				
			||||||
                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
 | 
					 | 
				
			||||||
                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
 | 
					 | 
				
			||||||
                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
 | 
					 | 
				
			||||||
                    if (t[2]) _.ops.pop();
 | 
					 | 
				
			||||||
                    _.trys.pop(); continue;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            op = body.call(thisArg, _);
 | 
					 | 
				
			||||||
        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
 | 
					 | 
				
			||||||
        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
Object.defineProperty(exports, "__esModule", { value: true });
 | 
					 | 
				
			||||||
var utils_1 = __webpack_require__(0);
 | 
					 | 
				
			||||||
var _ = __webpack_require__(2);
 | 
					 | 
				
			||||||
var error_reporter_1 = __webpack_require__(3);
 | 
					 | 
				
			||||||
var MAX_QUEUE_SIZE = 500;
 | 
					 | 
				
			||||||
var DEFAULT_QUEUE_INTERVAL_MS = 1000;
 | 
					 | 
				
			||||||
var DispatchQueue = /** @class */ (function () {
 | 
					 | 
				
			||||||
    function DispatchQueue() {
 | 
					 | 
				
			||||||
        this._queueIntervalMs = DEFAULT_QUEUE_INTERVAL_MS;
 | 
					 | 
				
			||||||
        this._queue = [];
 | 
					 | 
				
			||||||
        this._start();
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    DispatchQueue.prototype.add = function (taskAsync) {
 | 
					 | 
				
			||||||
        if (this.isFull()) {
 | 
					 | 
				
			||||||
            return false;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        this._queue.push(taskAsync);
 | 
					 | 
				
			||||||
        return true;
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
    DispatchQueue.prototype.size = function () {
 | 
					 | 
				
			||||||
        return this._queue.length;
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
    DispatchQueue.prototype.isFull = function () {
 | 
					 | 
				
			||||||
        return this.size() >= MAX_QUEUE_SIZE;
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
    DispatchQueue.prototype.stop = function () {
 | 
					 | 
				
			||||||
        if (!_.isUndefined(this._queueIntervalIdIfExists)) {
 | 
					 | 
				
			||||||
            utils_1.intervalUtils.clearAsyncExcludingInterval(this._queueIntervalIdIfExists);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
    DispatchQueue.prototype._start = function () {
 | 
					 | 
				
			||||||
        var _this = this;
 | 
					 | 
				
			||||||
        this._queueIntervalIdIfExists = utils_1.intervalUtils.setAsyncExcludingInterval(function () { return __awaiter(_this, void 0, void 0, function () {
 | 
					 | 
				
			||||||
            var taskAsync;
 | 
					 | 
				
			||||||
            return __generator(this, function (_a) {
 | 
					 | 
				
			||||||
                switch (_a.label) {
 | 
					 | 
				
			||||||
                    case 0:
 | 
					 | 
				
			||||||
                        taskAsync = this._queue.shift();
 | 
					 | 
				
			||||||
                        if (_.isUndefined(taskAsync)) {
 | 
					 | 
				
			||||||
                            return [2 /*return*/, Promise.resolve()];
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                        return [4 /*yield*/, taskAsync()];
 | 
					 | 
				
			||||||
                    case 1:
 | 
					 | 
				
			||||||
                        _a.sent();
 | 
					 | 
				
			||||||
                        return [2 /*return*/];
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            });
 | 
					 | 
				
			||||||
        }); }, this._queueIntervalMs, function (err) {
 | 
					 | 
				
			||||||
            utils_1.logUtils.log("Unexpected err: " + err + " - " + JSON.stringify(err));
 | 
					 | 
				
			||||||
            // tslint:disable-next-line:no-floating-promises
 | 
					 | 
				
			||||||
            error_reporter_1.errorReporter.reportAsync(err);
 | 
					 | 
				
			||||||
        });
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
    return DispatchQueue;
 | 
					 | 
				
			||||||
}());
 | 
					 | 
				
			||||||
exports.DispatchQueue = DispatchQueue;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/***/ }),
 | 
					 | 
				
			||||||
/* 17 */
 | 
					 | 
				
			||||||
/***/ (function(module, exports, __webpack_require__) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
"use strict";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
 | 
					 | 
				
			||||||
    return new (P || (P = Promise))(function (resolve, reject) {
 | 
					 | 
				
			||||||
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
 | 
					 | 
				
			||||||
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
 | 
					 | 
				
			||||||
        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
 | 
					 | 
				
			||||||
        step((generator = generator.apply(thisArg, _arguments || [])).next());
 | 
					 | 
				
			||||||
    });
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
var __generator = (this && this.__generator) || function (thisArg, body) {
 | 
					 | 
				
			||||||
    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
 | 
					 | 
				
			||||||
    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
 | 
					 | 
				
			||||||
    function verb(n) { return function (v) { return step([n, v]); }; }
 | 
					 | 
				
			||||||
    function step(op) {
 | 
					 | 
				
			||||||
        if (f) throw new TypeError("Generator is already executing.");
 | 
					 | 
				
			||||||
        while (_) try {
 | 
					 | 
				
			||||||
            if (f = 1, y && (t = y[op[0] & 2 ? "return" : op[0] ? "throw" : "next"]) && !(t = t.call(y, op[1])).done) return t;
 | 
					 | 
				
			||||||
            if (y = 0, t) op = [0, t.value];
 | 
					 | 
				
			||||||
            switch (op[0]) {
 | 
					 | 
				
			||||||
                case 0: case 1: t = op; break;
 | 
					 | 
				
			||||||
                case 4: _.label++; return { value: op[1], done: false };
 | 
					 | 
				
			||||||
                case 5: _.label++; y = op[1]; op = [0]; continue;
 | 
					 | 
				
			||||||
                case 7: op = _.ops.pop(); _.trys.pop(); continue;
 | 
					 | 
				
			||||||
                default:
 | 
					 | 
				
			||||||
                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
 | 
					 | 
				
			||||||
                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
 | 
					 | 
				
			||||||
                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
 | 
					 | 
				
			||||||
                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
 | 
					 | 
				
			||||||
                    if (t[2]) _.ops.pop();
 | 
					 | 
				
			||||||
                    _.trys.pop(); continue;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            op = body.call(thisArg, _);
 | 
					 | 
				
			||||||
        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
 | 
					 | 
				
			||||||
        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
Object.defineProperty(exports, "__esModule", { value: true });
 | 
					 | 
				
			||||||
var _0x_js_1 = __webpack_require__(4);
 | 
					 | 
				
			||||||
var utils_1 = __webpack_require__(0);
 | 
					 | 
				
			||||||
var _ = __webpack_require__(2);
 | 
					 | 
				
			||||||
var configs_1 = __webpack_require__(1);
 | 
					 | 
				
			||||||
var DISPENSE_AMOUNT_ETHER = 0.1;
 | 
					 | 
				
			||||||
var DISPENSE_AMOUNT_TOKEN = 0.1;
 | 
					 | 
				
			||||||
var DISPENSE_MAX_AMOUNT_TOKEN = 2;
 | 
					 | 
				
			||||||
var DISPENSE_MAX_AMOUNT_ETHER = 2;
 | 
					 | 
				
			||||||
exports.dispenseAssetTasks = {
 | 
					 | 
				
			||||||
    dispenseEtherTask: function (recipientAddress, web3) {
 | 
					 | 
				
			||||||
        var _this = this;
 | 
					 | 
				
			||||||
        return function () { return __awaiter(_this, void 0, void 0, function () {
 | 
					 | 
				
			||||||
            var userBalance, maxAmountInWei, sendTransactionAsync, txHash;
 | 
					 | 
				
			||||||
            return __generator(this, function (_a) {
 | 
					 | 
				
			||||||
                switch (_a.label) {
 | 
					 | 
				
			||||||
                    case 0:
 | 
					 | 
				
			||||||
                        utils_1.logUtils.log("Processing ETH " + recipientAddress);
 | 
					 | 
				
			||||||
                        return [4 /*yield*/, utils_1.promisify(web3.eth.getBalance)(recipientAddress)];
 | 
					 | 
				
			||||||
                    case 1:
 | 
					 | 
				
			||||||
                        userBalance = _a.sent();
 | 
					 | 
				
			||||||
                        maxAmountInWei = new utils_1.BigNumber(web3.toWei(DISPENSE_MAX_AMOUNT_ETHER, 'ether'));
 | 
					 | 
				
			||||||
                        if (userBalance.greaterThanOrEqualTo(maxAmountInWei)) {
 | 
					 | 
				
			||||||
                            utils_1.logUtils.log("User exceeded ETH balance maximum (" + maxAmountInWei + ") " + recipientAddress + " " + userBalance + " ");
 | 
					 | 
				
			||||||
                            return [2 /*return*/];
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                        sendTransactionAsync = utils_1.promisify(web3.eth.sendTransaction);
 | 
					 | 
				
			||||||
                        return [4 /*yield*/, sendTransactionAsync({
 | 
					 | 
				
			||||||
                                from: configs_1.configs.DISPENSER_ADDRESS,
 | 
					 | 
				
			||||||
                                to: recipientAddress,
 | 
					 | 
				
			||||||
                                value: web3.toWei(DISPENSE_AMOUNT_ETHER, 'ether'),
 | 
					 | 
				
			||||||
                            })];
 | 
					 | 
				
			||||||
                    case 2:
 | 
					 | 
				
			||||||
                        txHash = _a.sent();
 | 
					 | 
				
			||||||
                        utils_1.logUtils.log("Sent " + DISPENSE_AMOUNT_ETHER + " ETH to " + recipientAddress + " tx: " + txHash);
 | 
					 | 
				
			||||||
                        return [2 /*return*/];
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            });
 | 
					 | 
				
			||||||
        }); };
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    dispenseTokenTask: function (recipientAddress, tokenSymbol, zeroEx) {
 | 
					 | 
				
			||||||
        var _this = this;
 | 
					 | 
				
			||||||
        return function () { return __awaiter(_this, void 0, void 0, function () {
 | 
					 | 
				
			||||||
            var amountToDispense, token, baseUnitAmount, userBalanceBaseUnits, maxAmountBaseUnits, txHash;
 | 
					 | 
				
			||||||
            return __generator(this, function (_a) {
 | 
					 | 
				
			||||||
                switch (_a.label) {
 | 
					 | 
				
			||||||
                    case 0:
 | 
					 | 
				
			||||||
                        utils_1.logUtils.log("Processing " + tokenSymbol + " " + recipientAddress);
 | 
					 | 
				
			||||||
                        amountToDispense = new utils_1.BigNumber(DISPENSE_AMOUNT_TOKEN);
 | 
					 | 
				
			||||||
                        return [4 /*yield*/, zeroEx.tokenRegistry.getTokenBySymbolIfExistsAsync(tokenSymbol)];
 | 
					 | 
				
			||||||
                    case 1:
 | 
					 | 
				
			||||||
                        token = _a.sent();
 | 
					 | 
				
			||||||
                        if (_.isUndefined(token)) {
 | 
					 | 
				
			||||||
                            throw new Error("Unsupported asset type: " + tokenSymbol);
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                        baseUnitAmount = _0x_js_1.ZeroEx.toBaseUnitAmount(amountToDispense, token.decimals);
 | 
					 | 
				
			||||||
                        return [4 /*yield*/, zeroEx.token.getBalanceAsync(token.address, recipientAddress)];
 | 
					 | 
				
			||||||
                    case 2:
 | 
					 | 
				
			||||||
                        userBalanceBaseUnits = _a.sent();
 | 
					 | 
				
			||||||
                        maxAmountBaseUnits = _0x_js_1.ZeroEx.toBaseUnitAmount(new utils_1.BigNumber(DISPENSE_MAX_AMOUNT_TOKEN), token.decimals);
 | 
					 | 
				
			||||||
                        if (userBalanceBaseUnits.greaterThanOrEqualTo(maxAmountBaseUnits)) {
 | 
					 | 
				
			||||||
                            utils_1.logUtils.log("User exceeded token balance maximum (" + maxAmountBaseUnits + ") " + recipientAddress + " " + userBalanceBaseUnits + " ");
 | 
					 | 
				
			||||||
                            return [2 /*return*/];
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                        return [4 /*yield*/, zeroEx.token.transferAsync(token.address, configs_1.configs.DISPENSER_ADDRESS, recipientAddress, baseUnitAmount)];
 | 
					 | 
				
			||||||
                    case 3:
 | 
					 | 
				
			||||||
                        txHash = _a.sent();
 | 
					 | 
				
			||||||
                        utils_1.logUtils.log("Sent " + amountToDispense + " ZRX to " + recipientAddress + " tx: " + txHash);
 | 
					 | 
				
			||||||
                        return [2 /*return*/];
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            });
 | 
					 | 
				
			||||||
        }); };
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/***/ }),
 | 
					 | 
				
			||||||
/* 18 */
 | 
					 | 
				
			||||||
/***/ (function(module, exports, __webpack_require__) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
"use strict";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Object.defineProperty(exports, "__esModule", { value: true });
 | 
					 | 
				
			||||||
var utils_1 = __webpack_require__(0);
 | 
					 | 
				
			||||||
var _ = __webpack_require__(2);
 | 
					 | 
				
			||||||
var rpc_urls_1 = __webpack_require__(5);
 | 
					 | 
				
			||||||
var DEFAULT_NETWORK_ID = 42; // kovan
 | 
					 | 
				
			||||||
exports.parameterTransformer = {
 | 
					 | 
				
			||||||
    transform: function (req, res, next) {
 | 
					 | 
				
			||||||
        var recipientAddress = req.params.recipient;
 | 
					 | 
				
			||||||
        if (_.isUndefined(recipientAddress) || !utils_1.addressUtils.isAddress(recipientAddress)) {
 | 
					 | 
				
			||||||
            res.status(400).send('INVALID_RECIPIENT_ADDRESS');
 | 
					 | 
				
			||||||
            return;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        var lowerCaseRecipientAddress = recipientAddress.toLowerCase();
 | 
					 | 
				
			||||||
        req.params.recipient = lowerCaseRecipientAddress;
 | 
					 | 
				
			||||||
        var networkId = _.get(req.query, 'networkId', DEFAULT_NETWORK_ID);
 | 
					 | 
				
			||||||
        var rpcUrlIfExists = _.get(rpc_urls_1.rpcUrls, networkId);
 | 
					 | 
				
			||||||
        if (_.isUndefined(rpcUrlIfExists)) {
 | 
					 | 
				
			||||||
            res.status(400).send('UNSUPPORTED_NETWORK_ID');
 | 
					 | 
				
			||||||
            return;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        req.params.networkId = networkId;
 | 
					 | 
				
			||||||
        next();
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/***/ })
 | 
					 | 
				
			||||||
/******/ ]);
 | 
					 | 
				
			||||||
//# sourceMappingURL=server.js.map
 | 
					 | 
				
			||||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							@@ -1,8 +1,12 @@
 | 
				
			|||||||
declare module 'web3-provider-engine' {
 | 
					declare module 'web3-provider-engine' {
 | 
				
			||||||
    class Web3ProviderEngine {
 | 
					    import { Provider, JSONRPCRequestPayload, JSONRPCResponsePayload } from '@0xproject/types';
 | 
				
			||||||
 | 
					    class Web3ProviderEngine implements Provider {
 | 
				
			||||||
        public on(event: string, handler: () => void): void;
 | 
					        public on(event: string, handler: () => void): void;
 | 
				
			||||||
        public send(payload: any): void;
 | 
					        public send(payload: JSONRPCRequestPayload): void;
 | 
				
			||||||
        public sendAsync(payload: any, callback: (error: any, response: any) => void): void;
 | 
					        public sendAsync(
 | 
				
			||||||
 | 
					            payload: JSONRPCRequestPayload,
 | 
				
			||||||
 | 
					            callback: (error: null | Error, response: JSONRPCResponsePayload) => void,
 | 
				
			||||||
 | 
					        ): void;
 | 
				
			||||||
        public addProvider(provider: any): void;
 | 
					        public addProvider(provider: any): void;
 | 
				
			||||||
        public start(): void;
 | 
					        public start(): void;
 | 
				
			||||||
        public stop(): void;
 | 
					        public stop(): void;
 | 
				
			||||||
@@ -19,13 +23,13 @@ declare module 'web3-provider-engine/subproviders/subprovider' {
 | 
				
			|||||||
    export = Subprovider;
 | 
					    export = Subprovider;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
declare module 'web3-provider-engine/subproviders/rpc' {
 | 
					declare module 'web3-provider-engine/subproviders/rpc' {
 | 
				
			||||||
    import { JSONRPCRequestPayload } from '@0xproject/types';
 | 
					    import { JSONRPCRequestPayload, JSONRPCResponsePayload } from '@0xproject/types';
 | 
				
			||||||
    class RpcSubprovider {
 | 
					    class RpcSubprovider {
 | 
				
			||||||
        constructor(options: { rpcUrl: string });
 | 
					        constructor(options: { rpcUrl: string });
 | 
				
			||||||
        public handleRequest(
 | 
					        public handleRequest(
 | 
				
			||||||
            payload: JSONRPCRequestPayload,
 | 
					            payload: JSONRPCRequestPayload,
 | 
				
			||||||
            next: () => void,
 | 
					            next: () => void,
 | 
				
			||||||
            end: (err: Error | null, data?: any) => void,
 | 
					            end: (err: Error | null, data?: JSONRPCResponsePayload) => void,
 | 
				
			||||||
        ): void;
 | 
					        ): void;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    export = RpcSubprovider;
 | 
					    export = RpcSubprovider;
 | 
				
			||||||
@@ -37,13 +41,13 @@ declare module 'web3-provider-engine/util/rpc-cache-utils' {
 | 
				
			|||||||
    export = ProviderEngineRpcUtils;
 | 
					    export = ProviderEngineRpcUtils;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
declare module 'web3-provider-engine/subproviders/fixture' {
 | 
					declare module 'web3-provider-engine/subproviders/fixture' {
 | 
				
			||||||
    import { JSONRPCRequestPayload } from '@0xproject/types';
 | 
					    import { JSONRPCRequestPayload, JSONRPCResponsePayload } from '@0xproject/types';
 | 
				
			||||||
    class FixtureSubprovider {
 | 
					    class FixtureSubprovider {
 | 
				
			||||||
        constructor(staticResponses: any);
 | 
					        constructor(staticResponses: any);
 | 
				
			||||||
        public handleRequest(
 | 
					        public handleRequest(
 | 
				
			||||||
            payload: JSONRPCRequestPayload,
 | 
					            payload: JSONRPCRequestPayload,
 | 
				
			||||||
            next: () => void,
 | 
					            next: () => void,
 | 
				
			||||||
            end: (err: Error | null, data?: any) => void,
 | 
					            end: (err: Error | null, data?: JSONRPCResponsePayload) => void,
 | 
				
			||||||
        ): void;
 | 
					        ): void;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    export = FixtureSubprovider;
 | 
					    export = FixtureSubprovider;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user