From 7d5582968885577c53801639fb1a0d3b635f9d28 Mon Sep 17 00:00:00 2001 From: Micah Riggan Date: Thu, 21 Mar 2019 13:51:55 -0400 Subject: [PATCH 01/40] Initial refactor for ETH Support based off of JKook's research --- packages/bitcore-node/package-lock.json | 14 + packages/bitcore-node/package.json | 2 + .../src/models/block/base/base.ts | 65 +++ .../{block.ts => block/btc/btcBlock.ts} | 109 ++--- .../src/models/block/eth/ethBlock.ts | 172 +++++++ .../bitcore-node/src/models/block/index.ts | 3 + packages/bitcore-node/src/models/events.ts | 2 +- .../src/models/transaction/base/base.ts | 54 +++ .../btc/btcTransaction.ts} | 59 +-- .../models/transaction/eth/ethTransaction.ts | 201 +++++++++ .../src/models/transaction/index.ts | 3 + .../chain-state/internal/internal.ts | 13 +- packages/bitcore-node/src/services/p2p.ts | 423 +----------------- .../src/services/p2p/btc/index.ts | 408 +++++++++++++++++ .../src/services/p2p/eth/index.ts | 235 ++++++++++ .../src/services/p2p/eth/p2p-lib.ts | 375 ++++++++++++++++ packages/bitcore-node/src/types/Block.ts | 6 +- .../bitcore-node/src/types/Transaction.ts | 62 +++ .../src/types/namespaces/ChainAdapter.ts | 19 - .../types/namespaces/ChainStateProvider.ts | 5 +- .../src/types/namespaces/Ethereum/index.ts | 44 ++ .../bitcore-node/test/benchmark/benchmark.ts | 4 +- .../integration/models/block.integration.ts | 56 +-- .../test/integration/websocket.integration.ts | 16 +- .../test/unit/models/block.unit.ts | 49 +- .../test/verification/db-repair.ts | 8 +- .../test/verification/db-verify.ts | 17 +- .../bitcore-node/test/verification/resync.ts | 4 +- .../test/verification/rpc-verify.ts | 32 +- 29 files changed, 1806 insertions(+), 654 deletions(-) create mode 100644 packages/bitcore-node/src/models/block/base/base.ts rename packages/bitcore-node/src/models/{block.ts => block/btc/btcBlock.ts} (63%) create mode 100644 packages/bitcore-node/src/models/block/eth/ethBlock.ts create mode 100644 packages/bitcore-node/src/models/block/index.ts create mode 100644 packages/bitcore-node/src/models/transaction/base/base.ts rename packages/bitcore-node/src/models/{transaction.ts => transaction/btc/btcTransaction.ts} (92%) create mode 100644 packages/bitcore-node/src/models/transaction/eth/ethTransaction.ts create mode 100644 packages/bitcore-node/src/models/transaction/index.ts create mode 100644 packages/bitcore-node/src/services/p2p/btc/index.ts create mode 100644 packages/bitcore-node/src/services/p2p/eth/index.ts create mode 100644 packages/bitcore-node/src/services/p2p/eth/p2p-lib.ts delete mode 100644 packages/bitcore-node/src/types/namespaces/ChainAdapter.ts create mode 100644 packages/bitcore-node/src/types/namespaces/Ethereum/index.ts diff --git a/packages/bitcore-node/package-lock.json b/packages/bitcore-node/package-lock.json index 42b5623f6eb..af867136834 100644 --- a/packages/bitcore-node/package-lock.json +++ b/packages/bitcore-node/package-lock.json @@ -13,6 +13,15 @@ "samsam": "1.3.0" } }, + "@types/bn.js": { + "version": "4.11.4", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.4.tgz", + "integrity": "sha512-AO8WW+aRcKWKQAYTfKLzwnpL6U+TfPqS+haRrhCy5ff04Da8WZud3ZgVjspQXaEXJDcTlsjUEVvL39wegDek5w==", + "dev": true, + "requires": { + "@types/node": "10.0.2" + } + }, "@types/body-parser": { "version": "1.17.0", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.0.tgz", @@ -579,6 +588,11 @@ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz", "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=" }, + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" + }, "body-parser": { "version": "1.18.3", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", diff --git a/packages/bitcore-node/package.json b/packages/bitcore-node/package.json index 7d6befd852f..a97a25a1382 100644 --- a/packages/bitcore-node/package.json +++ b/packages/bitcore-node/package.json @@ -45,6 +45,7 @@ ], "license": "MIT", "devDependencies": { + "@types/bn.js": "^4.11.4", "@types/chai": "^4.1.3", "@types/express": "^4.11.1", "@types/lodash": "^4.14.116", @@ -77,6 +78,7 @@ "bitcore-lib-cash": "^8.1.0", "bitcore-p2p": "^8.1.0", "bitcore-p2p-cash": "^8.1.0", + "bn.js": "^4.11.8", "body-parser": "^1.18.3", "cors": "^2.8.4", "express": "^4.16.3", diff --git a/packages/bitcore-node/src/models/block/base/base.ts b/packages/bitcore-node/src/models/block/base/base.ts new file mode 100644 index 00000000000..601879212ad --- /dev/null +++ b/packages/bitcore-node/src/models/block/base/base.ts @@ -0,0 +1,65 @@ +import { BaseModel, MongoBound } from '../../base'; +import { IBlock } from '../../../types/Block'; +import { StorageService } from '../../../services/storage'; +import { TransformOptions } from "../../../types/TransformOptions"; +export class BlockModel extends BaseModel { + constructor(storage?: StorageService) { + super('blocks', storage); + } + + allowedPaging = [ + { + key: 'height' as 'height', + type: 'number' as 'number' + } + ]; + + async onConnect() { + this.collection.createIndex({ hash: 1 }, { background: true }); + this.collection.createIndex({ chain: 1, network: 1, processed: 1, height: -1 }, { background: true }); + this.collection.createIndex({ chain: 1, network: 1, timeNormalized: 1 }, { background: true }); + this.collection.createIndex({ previousBlockHash: 1 }, { background: true }); + } + + getLocalTip({ chain, network }) { + return this.collection.findOne({ chain, network, processed: true }, { sort: { height: -1 } }); + } + + _apiTransform(block: Partial>, options?: TransformOptions): any { + const transform = { + _id: block._id, + chain: block.chain, + network: block.network, + hash: block.hash, + height: block.height, + version: block.version, + size: block.size, + merkleRoot: block.merkleRoot, + time: block.time, + timeNormalized: block.timeNormalized, + nonce: block.nonce, + bits: block.bits, + /* + *difficulty: block.difficulty, + */ + /* + *chainWork: block.chainWork, + */ + previousBlockHash: block.previousBlockHash, + nextBlockHash: block.nextBlockHash, + reward: block.reward, + /* + *isMainChain: block.mainChain, + */ + transactionCount: block.transactionCount + /* + *minedBy: BlockModel.getPoolInfo(block.minedBy) + */ + }; + if (options && options.object) { + return transform; + } + return JSON.stringify(transform); + } +} +export let BlockStorage = new BlockModel(); diff --git a/packages/bitcore-node/src/models/block.ts b/packages/bitcore-node/src/models/block/btc/btcBlock.ts similarity index 63% rename from packages/bitcore-node/src/models/block.ts rename to packages/bitcore-node/src/models/block/btc/btcBlock.ts index 3f5f56e533f..6f22a378bbd 100644 --- a/packages/bitcore-node/src/models/block.ts +++ b/packages/bitcore-node/src/models/block/btc/btcBlock.ts @@ -1,39 +1,29 @@ -import { valueOrDefault } from '../utils/check'; -import { CoinStorage } from './coin'; -import { TransactionStorage } from './transaction'; -import { TransformOptions } from '../types/TransformOptions'; -import { LoggifyClass } from '../decorators/Loggify'; -import { Bitcoin } from '../types/namespaces/Bitcoin'; -import { BaseModel, MongoBound } from './base'; -import logger from '../logger'; -import { IBlock } from '../types/Block'; -import { SpentHeightIndicators } from '../types/Coin'; -import { EventStorage } from './events'; -import config from '../config'; -import { StorageService } from '../services/storage'; - -export { IBlock }; +import { valueOrDefault } from '../../../utils/check'; +import { CoinStorage } from '../.././coin'; +import { BtcTransactionStorage } from '../.././transaction/btc/btcTransaction'; +import { TransformOptions } from '../../../types/TransformOptions'; +import { LoggifyClass } from '../../../decorators/Loggify'; +import { Bitcoin } from '../../../types/namespaces/Bitcoin'; +import { MongoBound } from '../.././base'; +import logger from '../../../logger'; +import { IBtcBlock } from '../../../types/Block'; +import { SpentHeightIndicators } from '../../../types/Coin'; +import { EventStorage } from '../.././events'; +import config from '../../../config'; +import { StorageService } from '../../../services/storage'; +import { BlockModel } from '../base/base'; +export { IBtcBlock }; @LoggifyClass -export class BlockModel extends BaseModel { +export class BtcBlockModel extends BlockModel { constructor(storage?: StorageService) { - super('blocks', storage); + super(storage); } - chainTips: Mapping> = {}; - - allowedPaging = [ - { - key: 'height' as 'height', - type: 'number' as 'number' - } - ]; + chainTips: Mapping> = {}; async onConnect() { - this.collection.createIndex({ hash: 1 }, { background: true }); - this.collection.createIndex({ chain: 1, network: 1, processed: 1, height: -1 }, { background: true }); - this.collection.createIndex({ chain: 1, network: 1, timeNormalized: 1 }, { background: true }); - this.collection.createIndex({ previousBlockHash: 1 }, { background: true }); + super.onConnect(); this.wireup(); } @@ -91,7 +81,7 @@ export class BlockModel extends BaseModel { logger.debug('Updating previous block.nextBlockHash ', convertedBlock.hash); } - await TransactionStorage.batchImport({ + await BtcTransactionStorage.batchImport({ txs: block.transactions, blockHash: convertedBlock.hash, blockTime: new Date(time), @@ -131,7 +121,7 @@ export class BlockModel extends BaseModel { const height = (previousBlock && previousBlock.height + 1) || 1; logger.debug('Setting blockheight', height); - const convertedBlock: IBlock = { + const convertedBlock: IBtcBlock = { chain, network, hash: block.hash, @@ -164,7 +154,7 @@ export class BlockModel extends BaseModel { }; } - updateCachedChainTip(params: { block: IBlock; chain: string; network: string }) { + updateCachedChainTip(params: { block: IBtcBlock; chain: string; network: string }) { const { chain, network, block } = params; this.chainTips[chain] = valueOrDefault(this.chainTips[chain], {}); this.chainTips[chain][network] = valueOrDefault(this.chainTips[chain][network], block); @@ -173,17 +163,7 @@ export class BlockModel extends BaseModel { } } - getPoolInfo(coinbase: string) { - //TODO need to make this actually parse the coinbase input and map to miner strings - // also should go somewhere else - return coinbase; - } - - getLocalTip({ chain, network }) { - return this.collection.findOne({ chain, network, processed: true }, { sort: { height: -1 } }); - } - - async handleReorg(params: { header?: Bitcoin.Block.HeaderObj; chain: string; network: string }): Promise { + async handleReorg(params: { header?: Bitcoin.Block.HeaderObj; chain: string; network: string }): Promise { const { header, chain, network } = params; let localTip = await this.getLocalTip(params); if (header && localTip && localTip.hash === header.prevHash) { @@ -196,7 +176,7 @@ export class BlockModel extends BaseModel { const prevBlock = await this.collection.findOne({ chain, network, hash: header.prevHash }); if (prevBlock) { localTip = prevBlock; - this.updateCachedChainTip({chain, network, block: prevBlock}) + this.updateCachedChainTip({ chain, network, block: prevBlock }); } else { delete this.chainTips[chain][network]; logger.error(`Previous block isn't in the DB need to roll back until we have a block in common`); @@ -205,7 +185,7 @@ export class BlockModel extends BaseModel { } const reorgOps = [ this.collection.deleteMany({ chain, network, height: { $gte: localTip.height } }), - TransactionStorage.collection.deleteMany({ chain, network, blockHeight: { $gte: localTip.height } }), + BtcTransactionStorage.collection.deleteMany({ chain, network, blockHeight: { $gte: localTip.height } }), CoinStorage.collection.deleteMany({ chain, network, mintHeight: { $gte: localTip.height } }) ]; await Promise.all(reorgOps); @@ -219,42 +199,9 @@ export class BlockModel extends BaseModel { return true; } - _apiTransform(block: Partial>, options?: TransformOptions): any { - const transform = { - _id: block._id, - chain: block.chain, - network: block.network, - hash: block.hash, - height: block.height, - version: block.version, - size: block.size, - merkleRoot: block.merkleRoot, - time: block.time, - timeNormalized: block.timeNormalized, - nonce: block.nonce, - bits: block.bits, - /* - *difficulty: block.difficulty, - */ - /* - *chainWork: block.chainWork, - */ - previousBlockHash: block.previousBlockHash, - nextBlockHash: block.nextBlockHash, - reward: block.reward, - /* - *isMainChain: block.mainChain, - */ - transactionCount: block.transactionCount - /* - *minedBy: BlockModel.getPoolInfo(block.minedBy) - */ - }; - if (options && options.object) { - return transform; - } - return JSON.stringify(transform); + _apiTransform(block: Partial>, options?: TransformOptions): any { + return super._apiTransform(block, options); } } -export let BlockStorage = new BlockModel(); +export let BtcBlockStorage = new BtcBlockModel(); diff --git a/packages/bitcore-node/src/models/block/eth/ethBlock.ts b/packages/bitcore-node/src/models/block/eth/ethBlock.ts new file mode 100644 index 00000000000..afa7769ea8b --- /dev/null +++ b/packages/bitcore-node/src/models/block/eth/ethBlock.ts @@ -0,0 +1,172 @@ +import logger from '../../../logger'; +import BN from 'bn.js'; +import { BtcTransactionStorage } from '../.././transaction/btc/btcTransaction'; +import { LoggifyClass } from '../../../decorators/Loggify'; +import { IEthBlock } from '../../../types/Block'; +import { EventStorage } from '../.././events'; +import { StorageService } from '../../../services/storage'; +import { Ethereum } from '../../../types/namespaces/Ethereum'; +import { EthTransactionStorage } from '../../transaction/eth/ethTransaction'; +import { BlockModel } from '../base/base'; + +@LoggifyClass +export class EthBlockModel extends BlockModel { + constructor(storage?: StorageService) { + super(storage); + } + + async onConnect() { + super.onConnect(); + } + + async addBlock(params: { + block: Ethereum.Block; + parentChain?: string; + forkHeight?: number; + initialSyncComplete: boolean; + chain: string; + network: string; + }) { + const { block, chain, network } = params; + const header = block.header; + + const reorg = await this.handleReorg({ header, chain, network }); + + if (reorg) { + return Promise.reject('reorg'); + } + return this.processBlock(params); + } + + async processBlock(params: { + block: Ethereum.Block; + parentChain?: string; + forkHeight?: number; + initialSyncComplete: boolean; + chain: string; + network: string; + }) { + const { chain, network, block, parentChain, forkHeight, initialSyncComplete } = params; + const blockOp = await this.getBlockOp(params); + const convertedBlock = blockOp.updateOne.update.$set; + const { height, timeNormalized, time } = convertedBlock; + + const previousBlock = await this.collection.findOne({ hash: convertedBlock.previousBlockHash, chain, network }); + + await this.collection.bulkWrite([blockOp]); + if (previousBlock) { + await this.collection.updateOne( + { chain, network, hash: previousBlock.hash }, + { $set: { nextBlockHash: convertedBlock.hash } } + ); + logger.debug('Updating previous block.nextBlockHash ', convertedBlock.hash); + } + + await EthTransactionStorage.batchImport({ + txs: block.transactions, + blockHash: convertedBlock.hash, + blockTime: new Date(time), + blockTimeNormalized: new Date(timeNormalized), + height: height, + chain, + network, + parentChain, + forkHeight, + initialSyncComplete + }); + + if (initialSyncComplete) { + EventStorage.signalBlock(convertedBlock); + } + + await this.collection.updateOne({ hash: convertedBlock.hash, chain, network }, { $set: { processed: true } }); + } + + async getBlockOp(params: { block: Ethereum.Block; chain: string; network: string }) { + const { block, chain, network } = params; + const { header } = block; + const blockTime = new Date(header.timestamp.readUInt32BE(0) * 1000).getTime(); + const prevHash = header.parentHash.toString('hex'); + + const previousBlock = await this.collection.findOne({ hash: prevHash, chain, network }); + + const blockTimeNormalized = (() => { + const prevTime = previousBlock ? previousBlock.timeNormalized : null; + if (prevTime && blockTime <= prevTime.getTime()) { + return prevTime.getTime() + 1; + } else { + return blockTime; + } + })(); + + const height = (previousBlock && previousBlock.height + 1) || 1; + logger.debug('Setting blockheight', height); + + const convertedBlock = { + chain, + network, + height: new BN(header.number).toNumber(), + hash: block.header.hash().toString('hex'), + version: 1, + merkleRoot: block.header.transactionsTrie.toString('hex'), + time: new Date(header.timestamp.readUInt32BE(0) * 1000), + timeNormalized: new Date(header.timestamp.readUInt32BE(0) * 1000), + nonce: Number(header.nonce.toString('hex')), + blockTimeNormalized, + previousBlockHash: header.parentHash.toString('hex'), + nextBlockHash: '', + transactionCount: block.transactions.length, + size: block.raw.length, + reward: 3, + processed: false, + bits: 0, + gasLimit: Number.parseInt(header.gasLimit.toString('hex'), 16) || 0, + gasUsed: Number.parseInt(header.gasUsed.toString('hex'), 16) || 0, + stateRoot: header.stateRoot + }; + return { + updateOne: { + filter: { + hash: header.hash, + chain, + network + }, + update: { + $set: convertedBlock + }, + upsert: true + } + }; + } + + async handleReorg(params: { header: Ethereum.Header; chain: string; network: string }): Promise { + const { header, chain, network } = params; + const prevHash = header.parentHash.toString('hex'); + let localTip = await this.getLocalTip(params); + if (header && localTip && localTip.hash === prevHash) { + return false; + } + if (!localTip || localTip.height === 0) { + return false; + } + if (header) { + const prevBlock = await this.collection.findOne({ chain, network, hash: prevHash }); + if (prevBlock) { + localTip = prevBlock; + } else { + logger.error(`Previous block isn't in the DB need to roll back until we have a block in common`); + } + logger.info(`Resetting tip to ${localTip.height - 1}`, { chain, network }); + } + const reorgOps = [ + this.collection.deleteMany({ chain, network, height: { $gte: localTip.height } }), + BtcTransactionStorage.collection.deleteMany({ chain, network, blockHeight: { $gte: localTip.height } }) + ]; + await Promise.all(reorgOps); + + logger.debug('Removed data from above blockHeight: ', localTip.height); + return true; + } +} + +export let EthBlockStorage = new EthBlockModel(); diff --git a/packages/bitcore-node/src/models/block/index.ts b/packages/bitcore-node/src/models/block/index.ts new file mode 100644 index 00000000000..364799bd66a --- /dev/null +++ b/packages/bitcore-node/src/models/block/index.ts @@ -0,0 +1,3 @@ +export { BlockStorage } from './base/base'; +export { EthBlockStorage } from './eth/ethBlock'; +export { BtcBlockStorage } from './btc/btcBlock'; diff --git a/packages/bitcore-node/src/models/events.ts b/packages/bitcore-node/src/models/events.ts index 2cfc45af3b5..eb531a68090 100644 --- a/packages/bitcore-node/src/models/events.ts +++ b/packages/bitcore-node/src/models/events.ts @@ -1,8 +1,8 @@ import { BaseModel } from './base'; -import { ITransaction } from './transaction'; import { IBlock } from '../types/Block'; import { ICoin } from './coin'; import { StorageService } from '../services/storage'; +import { ITransaction } from "../types/Transaction"; export namespace IEvent { export type BlockEvent = IBlock; diff --git a/packages/bitcore-node/src/models/transaction/base/base.ts b/packages/bitcore-node/src/models/transaction/base/base.ts new file mode 100644 index 00000000000..a423efd160f --- /dev/null +++ b/packages/bitcore-node/src/models/transaction/base/base.ts @@ -0,0 +1,54 @@ +import { BaseModel, MongoBound } from '../../base'; +import { StorageService } from '../../../services/storage'; +import { ITransaction, TransactionJSON } from '../../../types/Transaction'; +import { TransformOptions } from '../../../types/TransformOptions'; + +export class TransactionModel extends BaseModel { + constructor(storage?: StorageService) { + super('transactions', storage); + } + + allowedPaging = [ + { key: 'blockHash' as 'blockHash', type: 'string' as 'string' }, + { key: 'blockHeight' as 'blockHeight', type: 'number' as 'number' }, + { key: 'blockTimeNormalized' as 'blockTimeNormalized', type: 'date' as 'date' }, + { key: 'txid' as 'txid', type: 'string' as 'string' } + ]; + + onConnect() { + this.collection.createIndex({ txid: 1 }, { background: true }); + this.collection.createIndex({ chain: 1, network: 1, blockHeight: 1 }, { background: true }); + this.collection.createIndex({ blockHash: 1 }, { background: true }); + this.collection.createIndex({ chain: 1, network: 1, blockTimeNormalized: 1 }, { background: true }); + this.collection.createIndex( + { wallets: 1, blockTimeNormalized: 1 }, + { background: true, partialFilterExpression: { 'wallets.0': { $exists: true } } } + ); + this.collection.createIndex( + { wallets: 1, blockHeight: 1 }, + { background: true, partialFilterExpression: { 'wallets.0': { $exists: true } } } + ); + } + + _apiTransform(tx: Partial>, options?: TransformOptions): TransactionJSON | string { + const transaction: TransactionJSON = { + _id: tx._id ? tx._id.toString() : '', + txid: tx.txid || '', + network: tx.network || '', + chain: tx.chain || '', + blockHeight: tx.blockHeight || -1, + blockHash: tx.blockHash || '', + blockTime: tx.blockTime ? tx.blockTime.toISOString() : '', + blockTimeNormalized: tx.blockTimeNormalized ? tx.blockTimeNormalized.toISOString() : '', + coinbase: tx.coinbase || false, + size: tx.size || -1, + fee: tx.fee || -1, + value: tx.value || -1 + }; + if (options && options.object) { + return transaction; + } + return JSON.stringify(transaction); + } +} +export let TransactionStorage = new TransactionModel(); diff --git a/packages/bitcore-node/src/models/transaction.ts b/packages/bitcore-node/src/models/transaction/btc/btcTransaction.ts similarity index 92% rename from packages/bitcore-node/src/models/transaction.ts rename to packages/bitcore-node/src/models/transaction/btc/btcTransaction.ts index 09b8de011fb..f6326d08bf4 100644 --- a/packages/bitcore-node/src/models/transaction.ts +++ b/packages/bitcore-node/src/models/transaction/btc/btcTransaction.ts @@ -1,38 +1,23 @@ -import { CoinStorage } from './coin'; -import { WalletAddressStorage } from './walletAddress'; -import { partition } from '../utils/partition'; +import { IBtcTransaction } from "../../../types/Transaction"; +import { CoinStorage } from '../.././coin'; +import { WalletAddressStorage } from '../.././walletAddress'; +import { partition } from '../../../utils/partition'; import { ObjectID } from 'bson'; -import { TransformOptions } from '../types/TransformOptions'; -import { LoggifyClass } from '../decorators/Loggify'; -import { Bitcoin } from '../types/namespaces/Bitcoin'; -import { BaseModel, MongoBound } from './base'; -import logger from '../logger'; -import { StreamingFindOptions, Storage, StorageService } from '../services/storage'; +import { TransformOptions } from '../../../types/TransformOptions'; +import { LoggifyClass } from '../../../decorators/Loggify'; +import { Bitcoin } from '../../../types/namespaces/Bitcoin'; +import { MongoBound } from '../.././base'; +import { StreamingFindOptions, Storage, StorageService } from '../../../services/storage'; +import { BtcTransactionJSON } from '../../../types/Transaction'; +import { SpentHeightIndicators } from '../../../types/Coin'; +import { Config } from '../../../services/config'; +import { EventStorage } from '../.././events'; import * as lodash from 'lodash'; -import { TransactionJSON } from '../types/Transaction'; -import { SpentHeightIndicators } from '../types/Coin'; -import { Config } from '../services/config'; -import { EventStorage } from './events'; +import logger from '../../../logger'; +import { TransactionModel } from "../base/base"; const Chain = require('../chain'); -export type ITransaction = { - txid: string; - chain: string; - network: string; - blockHeight?: number; - blockHash?: string; - blockTime?: Date; - blockTimeNormalized?: Date; - coinbase: boolean; - fee: number; - size: number; - locktime: number; - inputCount: number; - outputCount: number; - value: number; - wallets: ObjectID[]; -}; export type MintOp = { updateOne: { @@ -79,9 +64,9 @@ export type SpendOp = { }; @LoggifyClass -export class TransactionModel extends BaseModel { +export class BtcTransactionModel extends TransactionModel { constructor(storage?: StorageService) { - super('transactions', storage); + super(storage); } allowedPaging = [ @@ -185,7 +170,7 @@ export class TransactionModel extends BaseModel { }) { let { blockHash, blockTime, blockTimeNormalized, chain, height, network, parentChain, forkHeight } = params; if (parentChain && forkHeight && height < forkHeight) { - const parentTxs = await TransactionStorage.collection + const parentTxs = await BtcTransactionStorage.collection .find({ blockHeight: height, chain: parentChain, network }) .toArray(); return parentTxs.map(parentTx => { @@ -514,15 +499,15 @@ export class TransactionModel extends BaseModel { return; } - getTransactions(params: { query: any; options: StreamingFindOptions }) { + getTransactions(params: { query: any; options: StreamingFindOptions }) { let originalQuery = params.query; const { query, options } = Storage.getFindOptions(this, params.options); const finalQuery = Object.assign({}, originalQuery, query); return this.collection.find(finalQuery, options).addCursorFlag('noCursorTimeout', true); } - _apiTransform(tx: Partial>, options?: TransformOptions): TransactionJSON | string { - const transaction: TransactionJSON = { + _apiTransform(tx: Partial>, options?: TransformOptions): BtcTransactionJSON | string { + const transaction: BtcTransactionJSON = { _id: tx._id ? tx._id.toString() : '', txid: tx.txid || '', network: tx.network || '', @@ -545,4 +530,4 @@ export class TransactionModel extends BaseModel { return JSON.stringify(transaction); } } -export let TransactionStorage = new TransactionModel(); +export let BtcTransactionStorage = new BtcTransactionModel(); diff --git a/packages/bitcore-node/src/models/transaction/eth/ethTransaction.ts b/packages/bitcore-node/src/models/transaction/eth/ethTransaction.ts new file mode 100644 index 00000000000..aabd6914b48 --- /dev/null +++ b/packages/bitcore-node/src/models/transaction/eth/ethTransaction.ts @@ -0,0 +1,201 @@ +import logger from '../../../logger'; +import * as _ from 'lodash'; +import { Ethereum } from '../../../types/namespaces/Ethereum'; +import { partition } from '../../../utils/partition'; +import { TransformOptions } from '../../../types/TransformOptions'; +import { LoggifyClass } from '../../../decorators/Loggify'; +import { MongoBound } from '../.././base'; +import { StreamingFindOptions, Storage, StorageService } from '../../../services/storage'; +import { EthTransactionJSON, IEthTransaction } from '../../../types/Transaction'; +import { SpentHeightIndicators } from '../../../types/Coin'; +import { Config } from '../../../services/config'; +import { EventStorage } from '../.././events'; +import { WalletAddressStorage } from '../../walletAddress'; +import { TransactionModel } from '../base/base'; + +@LoggifyClass +export class EthTransactionModel extends TransactionModel { + constructor(storage?: StorageService) { + super(storage); + } + + onConnect() { + super.onConnect(); + } + + async batchImport(params: { + txs: Array; + height: number; + mempoolTime?: Date; + blockTime?: Date; + blockHash?: string; + blockTimeNormalized?: Date; + parentChain?: string; + forkHeight?: number; + chain: string; + network: string; + initialSyncComplete: boolean; + }) { + await this.pruneMempool({ ...params }); + const txOps = await this.addTransactions({ ...params }); + logger.debug('Writing Transactions', txOps.length); + await Promise.all( + partition(txOps, txOps.length / Config.get().maxPoolSize).map(txBatch => + this.collection.bulkWrite(txBatch, { ordered: false }) + ) + ); + + // Create events for mempool txs + if (params.height < SpentHeightIndicators.minimum) { + for (let op of txOps) { + const filter = op.updateOne.filter; + const tx = { ...op.updateOne.update.$set, ...filter } as IEthTransaction; + await EventStorage.signalTx(tx); + } + } + } + + async addTransactions(params: { + txs: Array; + height: number; + blockTime?: Date; + blockHash?: string; + blockTimeNormalized?: Date; + parentChain?: string; + forkHeight?: number; + initialSyncComplete: boolean; + chain: string; + network: string; + mempoolTime?: Date; + }) { + let { blockHash, blockTime, blockTimeNormalized, chain, height, network, parentChain, forkHeight } = params; + if (parentChain && forkHeight && height < forkHeight) { + const parentTxs = await EthTransactionStorage.collection + .find({ blockHeight: height, chain: parentChain, network }) + .toArray(); + return parentTxs.map(parentTx => { + return { + updateOne: { + filter: { txid: parentTx.txid, chain, network }, + update: { + $set: { + chain, + network, + blockHeight: height, + blockHash, + blockTime, + blockTimeNormalized, + fee: parentTx.fee, + size: parentTx.size, + value: parentTx.value, + wallets: [], + gasLimit: parentTx.gasLimit, + gasPrice: parentTx.gasPrice, + nonce: parentTx.nonce + } + }, + upsert: true, + forceServerObjectId: true + } + }; + }); + } else { + return Promise.all( + params.txs.map(async tx => { + const txid = tx.hash().toString('hex'); + const to = '0x' + tx.to.toString('hex'); + const from = '0x' + tx.from.toString('hex'); + let fee = Number(tx.getUpfrontCost().toString()); + const sentWallets = await WalletAddressStorage.collection.find({ chain, network, address: from }).toArray(); + const receivedWallets = await WalletAddressStorage.collection.find({ chain, network, address: to }).toArray(); + const wallets = _.uniqBy(sentWallets.concat(receivedWallets).map(w => w.wallet), w => w.toHexString()); + + return { + updateOne: { + filter: { txid, chain, network }, + update: { + $set: { + chain, + network, + blockHeight: height, + blockHash, + blockTime, + blockTimeNormalized, + fee, + size: tx.data.length, + value: Number.parseInt(tx.value.toString('hex'), 16) || 0, + wallets, + gasLimit: tx.gasLimit.toString('hex'), + gasPrice: tx.gasPrice.toString('hex'), + nonce: tx.nonce.toString('hex') + } + }, + upsert: true, + forceServerObjectId: true + } + }; + }) + ); + } + } + + async pruneMempool(params: { + txs: Array; + height: number; + parentChain?: string; + forkHeight?: number; + chain: string; + network: string; + initialSyncComplete: boolean; + [rest: string]: any; + }) { + const { chain, network, initialSyncComplete } = params; + if (!initialSyncComplete) { + return; + } + let prunedTxs = {}; + if (Object.keys(prunedTxs).length) { + prunedTxs = Object.keys(prunedTxs); + await Promise.all([ + this.collection.update( + { chain, network, txid: { $in: prunedTxs } }, + { $set: { blockHeight: SpentHeightIndicators.conflicting } }, + { w: 0, j: false, multi: true } + ) + ]); + } + return; + } + + getTransactions(params: { query: any; options: StreamingFindOptions }) { + let originalQuery = params.query; + const { query, options } = Storage.getFindOptions(this, params.options); + const finalQuery = Object.assign({}, originalQuery, query); + return this.collection.find(finalQuery, options).addCursorFlag('noCursorTimeout', true); + } + + _apiTransform(tx: Partial>, options?: TransformOptions): EthTransactionJSON | string { + const transaction: EthTransactionJSON = { + _id: tx._id ? tx._id.toString() : '', + txid: tx.txid || '', + network: tx.network || '', + chain: tx.chain || '', + blockHeight: tx.blockHeight || -1, + blockHash: tx.blockHash || '', + blockTime: tx.blockTime ? tx.blockTime.toISOString() : '', + blockTimeNormalized: tx.blockTimeNormalized ? tx.blockTimeNormalized.toISOString() : '', + coinbase: tx.coinbase || false, + size: tx.size || -1, + fee: tx.fee || -1, + value: tx.value || -1, + gasLimit: tx.gasLimit || '', + gasPrice: tx.gasPrice || '', + nonce: tx.nonce || '' + }; + if (options && options.object) { + return transaction; + } + return JSON.stringify(transaction); + } +} +export let EthTransactionStorage = new EthTransactionModel(); diff --git a/packages/bitcore-node/src/models/transaction/index.ts b/packages/bitcore-node/src/models/transaction/index.ts new file mode 100644 index 00000000000..8c80a702665 --- /dev/null +++ b/packages/bitcore-node/src/models/transaction/index.ts @@ -0,0 +1,3 @@ +export { TransactionStorage } from './base/base'; +export { EthTransactionStorage } from './eth/ethTransaction'; +export { BtcTransactionStorage } from './btc/btcTransaction'; diff --git a/packages/bitcore-node/src/providers/chain-state/internal/internal.ts b/packages/bitcore-node/src/providers/chain-state/internal/internal.ts index 954ea0b371a..17425f9ec5b 100644 --- a/packages/bitcore-node/src/providers/chain-state/internal/internal.ts +++ b/packages/bitcore-node/src/providers/chain-state/internal/internal.ts @@ -1,22 +1,23 @@ -import { TransactionJSON } from '../../../types/Transaction'; +import { TransactionJSON, ITransaction } from '../../../types/Transaction'; import through2 from 'through2'; import { MongoBound } from '../../../models/base'; import { ObjectId } from 'mongodb'; import { CoinStorage, ICoin } from '../../../models/coin'; -import { BlockStorage, IBlock } from '../../../models/block'; +import { BlockStorage } from '../../../models/block'; import { WalletStorage, IWallet } from '../../../models/wallet'; import { WalletAddressStorage, IWalletAddress } from '../../../models/walletAddress'; import { CSP } from '../../../types/namespaces/ChainStateProvider'; import { Storage } from '../../../services/storage'; import { RPC } from '../../../rpc'; import { LoggifyClass } from '../../../decorators/Loggify'; -import { TransactionStorage, ITransaction } from '../../../models/transaction'; +import { TransactionStorage } from '../../../models/transaction'; import { ListTransactionsStream } from './transforms'; import { StringifyJsonStream } from '../../../utils/stringifyJsonStream'; import { StateStorage } from '../../../models/state'; import { SpentHeightIndicators, CoinJSON } from '../../../types/Coin'; import { Config } from '../../../services/config'; +import { IBlock } from '../../../types/Block'; @LoggifyClass export class InternalStateProvider implements CSP.IChainStateService { @@ -516,11 +517,7 @@ export class InternalStateProvider implements CSP.IChainStateService { } async getLocalTip({ chain, network }) { - if (BlockStorage.chainTips[chain] && BlockStorage.chainTips[chain][network]) { - return BlockStorage.chainTips[chain][network]; - } else { - return BlockStorage.getLocalTip({ chain, network }); - } + return BlockStorage.getLocalTip({ chain, network }); } async getLocatorHashes(params) { diff --git a/packages/bitcore-node/src/services/p2p.ts b/packages/bitcore-node/src/services/p2p.ts index a8c4bd03c28..a5eec7d934e 100644 --- a/packages/bitcore-node/src/services/p2p.ts +++ b/packages/bitcore-node/src/services/p2p.ts @@ -1,20 +1,17 @@ import logger from '../logger'; -import { EventEmitter } from 'events'; -import { BlockStorage, BlockModel } from '../models/block'; -import { ChainStateProvider } from '../providers/chain-state'; -import { TransactionStorage } from '../models/transaction'; -import { Bitcoin } from '../types/namespaces/Bitcoin'; -import { StateStorage } from '../models/state'; -import { SpentHeightIndicators } from '../types/Coin'; -import os from 'os'; import { Config, ConfigService } from './config'; -import { wait } from '../utils/wait'; -const Chain = require('../chain'); +import { BitcoreP2pWorker } from "./p2p/btc"; +import { EthP2pWorker } from "./p2p/eth"; export class P2pManager { - workers = new Array(); + workers = new Array(); private configService: ConfigService; + p2pClasses = { + BTC: BitcoreP2pWorker, + BCH: BitcoreP2pWorker, + ETH: EthP2pWorker + } constructor({ configService = Config } = {}) { this.configService = configService; @@ -27,24 +24,24 @@ export class P2pManager { } } - async start({ blockModel = BlockStorage } = {}) { + async start() { if (this.configService.isDisabled('p2p')) { logger.info('Disabled P2P Manager'); return; } logger.info('Starting P2P Manager'); - const p2pWorkers = new Array(); + const p2pWorkers = new Array(); for (let chainNetwork of Config.chainNetworks()) { const { chain, network } = chainNetwork; const chainConfig = Config.chainConfig(chainNetwork); if (chainConfig.chainSource && chainConfig.chainSource !== 'p2p') { continue; } - const p2pWorker = new P2pWorker({ + const p2pClass = this.p2pClasses[chain]; + const p2pWorker = new p2pClass({ chain, network, chainConfig, - blockModel }); p2pWorkers.push(p2pWorker); try { @@ -56,401 +53,5 @@ export class P2pManager { } } -export class P2pWorker { - private chain: string; - private network: string; - private bitcoreLib: any; - private bitcoreP2p: any; - private chainConfig: any; - private events: EventEmitter; - private isSyncing: boolean; - private messages: any; - private pool: any; - private connectInterval?: NodeJS.Timer; - private invCache: any; - private invCacheLimits: any; - private initialSyncComplete: boolean; - private isSyncingNode: boolean; - private stopping?: boolean; - private blockModel: BlockModel; - constructor({ chain, network, chainConfig, blockModel = BlockStorage }) { - this.blockModel = blockModel; - this.chain = chain; - this.network = network; - this.bitcoreLib = Chain[this.chain].lib; - this.bitcoreP2p = Chain[this.chain].p2p; - this.chainConfig = chainConfig; - this.events = new EventEmitter(); - this.isSyncing = false; - this.initialSyncComplete = false; - this.isSyncingNode = false; - this.invCache = {}; - this.invCacheLimits = { - [this.bitcoreP2p.Inventory.TYPE.BLOCK]: 100, - [this.bitcoreP2p.Inventory.TYPE.TX]: 100000 - }; - this.messages = new this.bitcoreP2p.Messages({ - network: this.bitcoreLib.Networks.get(this.network) - }); - this.pool = new this.bitcoreP2p.Pool({ - addrs: this.chainConfig.trustedPeers.map(peer => { - return { - ip: { - v4: peer.host - }, - port: peer.port - }; - }), - dnsSeed: false, - listenAddr: false, - network: this.network, - messages: this.messages - }); - } - - cacheInv(type: number, hash: string): void { - if (!this.invCache[type]) { - this.invCache[type] = []; - } - if (this.invCache[type].length > this.invCacheLimits[type]) { - this.invCache[type].shift(); - } - this.invCache[type].push(hash); - } - - isCachedInv(type: number, hash: string): boolean { - if (!this.invCache[type]) { - this.invCache[type] = []; - } - return this.invCache[type].includes(hash); - } - - setupListeners() { - this.pool.on('peerready', peer => { - logger.info(`Connected to peer ${peer.host}`, { - chain: this.chain, - network: this.network - }); - }); - - this.pool.on('peerdisconnect', peer => { - logger.warn(`Not connected to peer ${peer.host}`, { - chain: this.chain, - network: this.network, - port: peer.port - }); - }); - - this.pool.on('peertx', (peer, message) => { - const hash = message.transaction.hash; - logger.debug('peer tx received', { - peer: `${peer.host}:${peer.port}`, - chain: this.chain, - network: this.network, - hash - }); - if (this.isSyncingNode && !this.isCachedInv(this.bitcoreP2p.Inventory.TYPE.TX, hash) && !this.isSyncing) { - this.cacheInv(this.bitcoreP2p.Inventory.TYPE.TX, hash); - this.processTransaction(message.transaction); - this.events.emit('transaction', message.transaction); - } - }); - - this.pool.on('peerblock', async (peer, message) => { - const { block } = message; - const { hash } = block; - logger.debug('peer block received', { - peer: `${peer.host}:${peer.port}`, - chain: this.chain, - network: this.network, - hash - }); - - const blockInCache = this.isCachedInv(this.bitcoreP2p.Inventory.TYPE.BLOCK, hash); - if (!blockInCache) { - this.cacheInv(this.bitcoreP2p.Inventory.TYPE.BLOCK, hash); - } - if (this.isSyncingNode && (!blockInCache || this.isSyncing)) { - this.events.emit(hash, message.block); - this.events.emit('block', message.block); - if (!this.isSyncing) { - this.sync(); - } - } - }); - - this.pool.on('peerheaders', (peer, message) => { - logger.debug('peerheaders message received', { - peer: `${peer.host}:${peer.port}`, - chain: this.chain, - network: this.network, - count: message.headers.length - }); - this.events.emit('headers', message.headers); - }); - - this.pool.on('peerinv', (peer, message) => { - if (this.isSyncingNode && !this.isSyncing) { - const filtered = message.inventory.filter(inv => { - const hash = this.bitcoreLib.encoding - .BufferReader(inv.hash) - .readReverse() - .toString('hex'); - return !this.isCachedInv(inv.type, hash); - }); - - if (filtered.length) { - peer.sendMessage(this.messages.GetData(filtered)); - } - } - }); - } - - async connect() { - this.setupListeners(); - this.pool.connect(); - this.connectInterval = setInterval(this.pool.connect.bind(this.pool), 5000); - return new Promise(resolve => { - this.pool.once('peerready', () => resolve()); - }); - } - - async disconnect() { - this.pool.removeAllListeners(); - this.pool.disconnect(); - if (this.connectInterval) { - clearInterval(this.connectInterval); - } - } - - public async getHeaders(candidateHashes: string[]): Promise { - let received = false; - return new Promise(async resolve => { - this.events.once('headers', headers => { - received = true; - resolve(headers); - }); - while (!received) { - this.pool.sendMessage(this.messages.GetHeaders({ starts: candidateHashes })); - await wait(1000); - } - }); - } - - public async getBlock(hash: string) { - logger.debug('Getting block, hash:', hash); - let received = false; - return new Promise(async resolve => { - this.events.once(hash, block => { - logger.debug('Received block, hash:', hash); - received = true; - resolve(block); - }); - while (!received) { - this.pool.sendMessage(this.messages.GetData.forBlock(hash)); - await wait(1000); - } - }); - } - - getBestPoolHeight(): number { - let best = 0; - for (const peer of Object.values(this.pool._connectedPeers) as { bestHeight: number }[]) { - if (peer.bestHeight > best) { - best = peer.bestHeight; - } - } - return best; - } - - async processBlock(block): Promise { - await this.blockModel.addBlock({ - chain: this.chain, - network: this.network, - forkHeight: this.chainConfig.forkHeight, - parentChain: this.chainConfig.parentChain, - initialSyncComplete: this.initialSyncComplete, - block - }); - } - - async processTransaction(tx: Bitcoin.Transaction): Promise { - const now = new Date(); - TransactionStorage.batchImport({ - chain: this.chain, - network: this.network, - txs: [tx], - height: SpentHeightIndicators.pending, - mempoolTime: now, - blockTime: now, - blockTimeNormalized: now, - initialSyncComplete: true - }); - } - - async syncDone() { - return new Promise(resolve => this.events.once('SYNCDONE', resolve)); - } - - async sync() { - if (this.isSyncing) { - return false; - } - this.isSyncing = true; - const { chain, chainConfig, network } = this; - const { parentChain, forkHeight } = chainConfig; - const state = await StateStorage.collection.findOne({}); - this.initialSyncComplete = - state && state.initialSyncComplete && state.initialSyncComplete.includes(`${chain}:${network}`); - let tip = await ChainStateProvider.getLocalTip({ chain, network }); - if (parentChain && (!tip || tip.height < forkHeight)) { - let parentTip = await ChainStateProvider.getLocalTip({ chain: parentChain, network }); - while (!parentTip || parentTip.height < forkHeight) { - logger.info(`Waiting until ${parentChain} syncs before ${chain} ${network}`); - await wait(5000); - parentTip = await ChainStateProvider.getLocalTip({ chain: parentChain, network }); - } - } - - const getHeaders = async () => { - const locators = await ChainStateProvider.getLocatorHashes({ chain, network }); - return this.getHeaders(locators); - }; - - let headers = await getHeaders(); - while (headers.length > 0) { - tip = await ChainStateProvider.getLocalTip({ chain, network }); - let currentHeight = tip ? tip.height : 0; - let lastLog = 0; - logger.info(`Syncing ${headers.length} blocks for ${chain} ${network}`); - for (const header of headers) { - try { - const block = await this.getBlock(header.hash); - await this.processBlock(block); - currentHeight++; - if (Date.now() - lastLog > 100) { - logger.info(`Sync `, { - chain, - network, - height: currentHeight - }); - lastLog = Date.now(); - } - } catch (err) { - logger.error(`Error syncing ${chain} ${network}`, err); - this.isSyncing = false; - return this.sync(); - } - } - headers = await getHeaders(); - } - logger.info(`${chain}:${network} up to date.`); - this.isSyncing = false; - await StateStorage.collection.findOneAndUpdate( - {}, - { $addToSet: { initialSyncComplete: `${chain}:${network}` } }, - { upsert: true } - ); - this.events.emit('SYNCDONE'); - return true; - } - - async resync(from: number, to: number) { - const { chain, network } = this; - let currentHeight = Math.max(1, from); - const originalSyncValue = this.isSyncing; - const originalSyncingNodeValue = this.isSyncingNode; - while (currentHeight < to) { - this.isSyncing = true; - this.isSyncingNode = true; - const locatorHashes = await ChainStateProvider.getLocatorHashes({ - chain, - network, - startHeight: Math.max(1, currentHeight - 30), - endHeight: currentHeight - }); - const headers = await this.getHeaders(locatorHashes); - if (!headers.length) { - logger.info(`${chain}:${network} up to date.`); - break; - } - const headerCount = Math.min(headers.length, to - currentHeight); - logger.info(`Re-Syncing ${headerCount} blocks for ${chain} ${network}`); - let lastLog = Date.now(); - for (let header of headers) { - if (currentHeight > to) { - break; - } - const block = await this.getBlock(header.hash); - await BlockStorage.processBlock({ chain, network, block, initialSyncComplete: true }); - currentHeight++; - if (Date.now() - lastLog > 100) { - logger.info(`Re-Sync `, { - chain, - network, - height: currentHeight - }); - lastLog = Date.now(); - } - } - } - this.isSyncing = originalSyncValue; - this.isSyncingNode = originalSyncingNodeValue; - } - - async registerSyncingNode() { - while (!this.stopping) { - const syncingNode = await StateStorage.getSyncingNode({ chain: this.chain, network: this.network }); - if (!syncingNode) { - StateStorage.selfNominateSyncingNode({ - chain: this.chain, - network: this.network, - lastHeartBeat: syncingNode - }); - continue; - } - const [hostname, pid, timestamp] = syncingNode.split(':'); - const amSyncingNode = - hostname === os.hostname() && pid === process.pid.toString() && Date.now() - parseInt(timestamp) < 5000; - if (amSyncingNode) { - StateStorage.selfNominateSyncingNode({ - chain: this.chain, - network: this.network, - lastHeartBeat: syncingNode - }); - if (!this.isSyncingNode) { - logger.info(`This worker is now the syncing node for ${this.chain} ${this.network}`); - this.isSyncingNode = true; - this.sync(); - } - } else { - if (this.isSyncingNode) { - logger.info(`This worker is no longer syncing node for ${this.chain} ${this.network}`); - this.isSyncingNode = false; - await wait(100000); - } - await wait(10000); - StateStorage.selfNominateSyncingNode({ - chain: this.chain, - network: this.network, - lastHeartBeat: syncingNode - }); - } - await wait(500); - } - } - - async stop() { - this.stopping = true; - logger.debug(`Stopping worker for chain ${this.chain}`); - await this.disconnect(); - } - - async start() { - logger.debug(`Started worker for chain ${this.chain}`); - await this.connect(); - this.registerSyncingNode(); - } -} export const P2P = new P2pManager(); diff --git a/packages/bitcore-node/src/services/p2p/btc/index.ts b/packages/bitcore-node/src/services/p2p/btc/index.ts new file mode 100644 index 00000000000..06821ce7e3b --- /dev/null +++ b/packages/bitcore-node/src/services/p2p/btc/index.ts @@ -0,0 +1,408 @@ +import logger from '../../../logger'; +import { ChainStateProvider } from '../../../providers/chain-state'; +import { BtcTransactionStorage } from '../../../models/transaction/btc/btcTransaction'; +import { Bitcoin } from '../../../types/namespaces/Bitcoin'; +import { StateStorage } from '../../../models/state'; +import { SpentHeightIndicators } from '../../../types/Coin'; +import { wait } from '../../../utils/wait'; +import { EventEmitter } from 'events'; +import { BtcBlockStorage, BtcBlockModel } from '../../../models/block/btc/btcBlock'; +import os from 'os'; + +const Chain = require('../chain'); +export class BitcoreP2pWorker { + private chain: string; + private network: string; + private bitcoreLib: any; + private bitcoreP2p: any; + private chainConfig: any; + private events: EventEmitter; + private isSyncing: boolean; + private messages: any; + private pool: any; + private connectInterval?: NodeJS.Timer; + private invCache: any; + private invCacheLimits: any; + private initialSyncComplete: boolean; + private isSyncingNode: boolean; + private stopping?: boolean; + private blockModel: BtcBlockModel; + constructor({ chain, network, chainConfig, blockModel = BtcBlockStorage }) { + this.blockModel = blockModel; + this.chain = chain; + this.network = network; + this.bitcoreLib = Chain[this.chain].lib; + this.bitcoreP2p = Chain[this.chain].p2p; + this.chainConfig = chainConfig; + this.events = new EventEmitter(); + this.isSyncing = false; + this.initialSyncComplete = false; + this.isSyncingNode = false; + this.invCache = {}; + this.invCacheLimits = { + [this.bitcoreP2p.Inventory.TYPE.BLOCK]: 100, + [this.bitcoreP2p.Inventory.TYPE.TX]: 100000 + }; + this.messages = new this.bitcoreP2p.Messages({ + network: this.bitcoreLib.Networks.get(this.network) + }); + this.pool = new this.bitcoreP2p.Pool({ + addrs: this.chainConfig.trustedPeers.map(peer => { + return { + ip: { + v4: peer.host + }, + port: peer.port + }; + }), + dnsSeed: false, + listenAddr: false, + network: this.network, + messages: this.messages + }); + } + + cacheInv(type: number, hash: string): void { + if (!this.invCache[type]) { + this.invCache[type] = []; + } + if (this.invCache[type].length > this.invCacheLimits[type]) { + this.invCache[type].shift(); + } + this.invCache[type].push(hash); + } + + isCachedInv(type: number, hash: string): boolean { + if (!this.invCache[type]) { + this.invCache[type] = []; + } + return this.invCache[type].includes(hash); + } + + setupListeners() { + this.pool.on('peerready', peer => { + logger.info(`Connected to peer ${peer.host}`, { + chain: this.chain, + network: this.network + }); + }); + + this.pool.on('peerdisconnect', peer => { + logger.warn(`Not connected to peer ${peer.host}`, { + chain: this.chain, + network: this.network, + port: peer.port + }); + }); + + this.pool.on('peertx', (peer, message) => { + const hash = message.transaction.hash; + logger.debug('peer tx received', { + peer: `${peer.host}:${peer.port}`, + chain: this.chain, + network: this.network, + hash + }); + if (this.isSyncingNode && !this.isCachedInv(this.bitcoreP2p.Inventory.TYPE.TX, hash) && !this.isSyncing) { + this.cacheInv(this.bitcoreP2p.Inventory.TYPE.TX, hash); + this.processTransaction(message.transaction); + this.events.emit('transaction', message.transaction); + } + }); + + this.pool.on('peerblock', async (peer, message) => { + const { block } = message; + const { hash } = block; + logger.debug('peer block received', { + peer: `${peer.host}:${peer.port}`, + chain: this.chain, + network: this.network, + hash + }); + + const blockInCache = this.isCachedInv(this.bitcoreP2p.Inventory.TYPE.BLOCK, hash); + if (!blockInCache) { + this.cacheInv(this.bitcoreP2p.Inventory.TYPE.BLOCK, hash); + } + if (this.isSyncingNode && (!blockInCache || this.isSyncing)) { + this.events.emit(hash, message.block); + this.events.emit('block', message.block); + if (!this.isSyncing) { + this.sync(); + } + } + }); + + this.pool.on('peerheaders', (peer, message) => { + logger.debug('peerheaders message received', { + peer: `${peer.host}:${peer.port}`, + chain: this.chain, + network: this.network, + count: message.headers.length + }); + this.events.emit('headers', message.headers); + }); + + this.pool.on('peerinv', (peer, message) => { + if (this.isSyncingNode && !this.isSyncing) { + const filtered = message.inventory.filter(inv => { + const hash = this.bitcoreLib.encoding + .BufferReader(inv.hash) + .readReverse() + .toString('hex'); + return !this.isCachedInv(inv.type, hash); + }); + + if (filtered.length) { + peer.sendMessage(this.messages.GetData(filtered)); + } + } + }); + } + + async connect() { + this.setupListeners(); + this.pool.connect(); + this.connectInterval = setInterval(this.pool.connect.bind(this.pool), 5000); + return new Promise(resolve => { + this.pool.once('peerready', () => resolve()); + }); + } + + async disconnect() { + this.pool.removeAllListeners(); + this.pool.disconnect(); + if (this.connectInterval) { + clearInterval(this.connectInterval); + } + } + + public async getHeaders(candidateHashes: string[]): Promise { + let received = false; + return new Promise(async resolve => { + this.events.once('headers', headers => { + received = true; + resolve(headers); + }); + while (!received) { + this.pool.sendMessage(this.messages.GetHeaders({ starts: candidateHashes })); + await wait(1000); + } + }); + } + + public async getBlock(hash: string) { + logger.debug('Getting block, hash:', hash); + let received = false; + return new Promise(async resolve => { + this.events.once(hash, block => { + logger.debug('Received block, hash:', hash); + received = true; + resolve(block); + }); + while (!received) { + this.pool.sendMessage(this.messages.GetData.forBlock(hash)); + await wait(1000); + } + }); + } + + getBestPoolHeight(): number { + let best = 0; + for (const peer of Object.values(this.pool._connectedPeers) as { bestHeight: number }[]) { + if (peer.bestHeight > best) { + best = peer.bestHeight; + } + } + return best; + } + + async processBlock(block): Promise { + await this.blockModel.addBlock({ + chain: this.chain, + network: this.network, + forkHeight: this.chainConfig.forkHeight, + parentChain: this.chainConfig.parentChain, + initialSyncComplete: this.initialSyncComplete, + block + }); + } + + async processTransaction(tx: Bitcoin.Transaction): Promise { + const now = new Date(); + BtcTransactionStorage.batchImport({ + chain: this.chain, + network: this.network, + txs: [tx], + height: SpentHeightIndicators.pending, + mempoolTime: now, + blockTime: now, + blockTimeNormalized: now, + initialSyncComplete: true + }); + } + + async syncDone() { + return new Promise(resolve => this.events.once('SYNCDONE', resolve)); + } + + async sync() { + if (this.isSyncing) { + return false; + } + this.isSyncing = true; + const { chain, chainConfig, network } = this; + const { parentChain, forkHeight } = chainConfig; + const state = await StateStorage.collection.findOne({}); + this.initialSyncComplete = + state && state.initialSyncComplete && state.initialSyncComplete.includes(`${chain}:${network}`); + let tip = await ChainStateProvider.getLocalTip({ chain, network }); + if (parentChain && (!tip || tip.height < forkHeight)) { + let parentTip = await ChainStateProvider.getLocalTip({ chain: parentChain, network }); + while (!parentTip || parentTip.height < forkHeight) { + logger.info(`Waiting until ${parentChain} syncs before ${chain} ${network}`); + await wait(5000); + parentTip = await ChainStateProvider.getLocalTip({ chain: parentChain, network }); + } + } + + const getHeaders = async () => { + const locators = await ChainStateProvider.getLocatorHashes({ chain, network }); + return this.getHeaders(locators); + }; + + let headers = await getHeaders(); + while (headers.length > 0) { + tip = await ChainStateProvider.getLocalTip({ chain, network }); + let currentHeight = tip ? tip.height : 0; + let lastLog = 0; + logger.info(`Syncing ${headers.length} blocks for ${chain} ${network}`); + for (const header of headers) { + try { + const block = await this.getBlock(header.hash); + await this.processBlock(block); + currentHeight++; + if (Date.now() - lastLog > 100) { + logger.info(`Sync `, { + chain, + network, + height: currentHeight + }); + lastLog = Date.now(); + } + } catch (err) { + logger.error(`Error syncing ${chain} ${network}`, err); + this.isSyncing = false; + return this.sync(); + } + } + headers = await getHeaders(); + } + logger.info(`${chain}:${network} up to date.`); + this.isSyncing = false; + await StateStorage.collection.findOneAndUpdate( + {}, + { $addToSet: { initialSyncComplete: `${chain}:${network}` } }, + { upsert: true } + ); + this.events.emit('SYNCDONE'); + return true; + } + + async resync(from: number, to: number) { + const { chain, network } = this; + let currentHeight = Math.max(1, from); + const originalSyncValue = this.isSyncing; + const originalSyncingNodeValue = this.isSyncingNode; + while (currentHeight < to) { + this.isSyncing = true; + this.isSyncingNode = true; + const locatorHashes = await ChainStateProvider.getLocatorHashes({ + chain, + network, + startHeight: Math.max(1, currentHeight - 30), + endHeight: currentHeight + }); + const headers = await this.getHeaders(locatorHashes); + if (!headers.length) { + logger.info(`${chain}:${network} up to date.`); + break; + } + const headerCount = Math.min(headers.length, to - currentHeight); + logger.info(`Re-Syncing ${headerCount} blocks for ${chain} ${network}`); + let lastLog = Date.now(); + for (let header of headers) { + if (currentHeight > to) { + break; + } + const block = await this.getBlock(header.hash); + await BtcBlockStorage.processBlock({ chain, network, block, initialSyncComplete: true }); + currentHeight++; + if (Date.now() - lastLog > 100) { + logger.info(`Re-Sync `, { + chain, + network, + height: currentHeight + }); + lastLog = Date.now(); + } + } + } + this.isSyncing = originalSyncValue; + this.isSyncingNode = originalSyncingNodeValue; + } + + async registerSyncingNode() { + while (!this.stopping) { + const syncingNode = await StateStorage.getSyncingNode({ chain: this.chain, network: this.network }); + if (!syncingNode) { + StateStorage.selfNominateSyncingNode({ + chain: this.chain, + network: this.network, + lastHeartBeat: syncingNode + }); + continue; + } + const [hostname, pid, timestamp] = syncingNode.split(':'); + const amSyncingNode = + hostname === os.hostname() && pid === process.pid.toString() && Date.now() - parseInt(timestamp) < 5000; + if (amSyncingNode) { + StateStorage.selfNominateSyncingNode({ + chain: this.chain, + network: this.network, + lastHeartBeat: syncingNode + }); + if (!this.isSyncingNode) { + logger.info(`This worker is now the syncing node for ${this.chain} ${this.network}`); + this.isSyncingNode = true; + this.sync(); + } + } else { + if (this.isSyncingNode) { + logger.info(`This worker is no longer syncing node for ${this.chain} ${this.network}`); + this.isSyncingNode = false; + await wait(100000); + } + await wait(10000); + StateStorage.selfNominateSyncingNode({ + chain: this.chain, + network: this.network, + lastHeartBeat: syncingNode + }); + } + await wait(500); + } + } + + async stop() { + this.stopping = true; + logger.debug(`Stopping worker for chain ${this.chain}`); + await this.disconnect(); + } + + async start() { + logger.debug(`Started worker for chain ${this.chain}`); + await this.connect(); + this.registerSyncingNode(); + } +} diff --git a/packages/bitcore-node/src/services/p2p/eth/index.ts b/packages/bitcore-node/src/services/p2p/eth/index.ts new file mode 100644 index 00000000000..7c85516e969 --- /dev/null +++ b/packages/bitcore-node/src/services/p2p/eth/index.ts @@ -0,0 +1,235 @@ +import logger from '../../../logger'; +import { EventEmitter } from 'events'; +import { EthBlockStorage, EthBlockModel } from '../../../models/block/eth/ethBlock'; +import { ChainStateProvider } from '../../../providers/chain-state'; +import { StateStorage } from '../../../models/state'; +import { Ethereum } from '../../../types/namespaces/Ethereum'; +import { EthTransactionStorage, EthTransactionModel } from '../../../models/transaction/eth/ethTransaction'; +import { BitcoreP2PEth } from './p2p-lib'; +const LRU = require('lru-cache'); + +export class EthP2pWorker { + private chain: string; + private network: string; + private chainConfig: any; + private events: EventEmitter; + private syncing: boolean; + private messages: any; + private invCache: any; + private initialSyncComplete: boolean; + private eth: BitcoreP2PEth; + private blockModel: EthBlockModel; + private txModel: EthTransactionModel; + + constructor({ chain, network, chainConfig, blockModel = EthBlockStorage, txModel = EthTransactionStorage }) { + this.eth = new BitcoreP2PEth(); + this.chain = chain || 'ETH'; + this.network = network; + this.chainConfig = chainConfig; + this.events = new EventEmitter(); + this.syncing = true; + this.initialSyncComplete = false; + this.invCache = new LRU({ max: 10000 }); + this.blockModel = blockModel; + this.txModel = txModel; + } + + setupListeners() { + this.eth.on('peerready', peer => { + logger.info(`Connected to peer ${peer.host}`, { + chain: this.chain, + network: this.network + }); + }); + + this.eth.on('peerdisconnect', peer => { + logger.warn(`Not connected to peer ${peer.host}`, { + chain: this.chain, + network: this.network, + port: peer.port + }); + }); + + this.eth.on('peertx', (peer, message) => { + const hash = message.transaction.hash; + logger.debug('peer tx received', { + peer: `${peer.host}:${peer.port}`, + chain: this.chain, + network: this.network, + hash + }); + if (!this.syncing && !this.invCache.get(hash)) { + this.processTransaction(message.transaction); + this.events.emit('transaction', message.transaction); + } + this.invCache.set(hash); + }); + + this.eth.on('peerblock', async (peer, message) => { + const { block } = message; + const { hash } = block; + const { chain, network } = this; + logger.debug('peer block received', { + peer: `${peer.host}:${peer.port}`, + chain: this.chain, + network: this.network, + hash + }); + + if (!this.syncing && !this.invCache.get(hash)) { + this.invCache.set(hash); + this.events.emit(hash, message.block); + if (!this.syncing) { + try { + await this.processBlock(block); + this.events.emit('block', message.block); + } catch (err) { + logger.error(`Error syncing ${chain} ${network}`, err); + return this.sync(); + } + } + } + }); + + this.eth.on('peerheaders', (peer, message) => { + logger.debug('peerheaders message received', { + peer: `${peer.host}:${peer.port}`, + chain: this.chain, + network: this.network, + count: message.headers.length + }); + this.events.emit('headers', message.headers); + }); + + this.eth.on('peerinv', (peer, message) => { + if (!this.syncing) { + const filtered = message.inventory.filter(inv => { + const hash = inv.hash().toString('hex'); + return !this.invCache.get(hash); + }); + + if (filtered.length) { + peer.sendMessage(this.messages.GetData(filtered)); + } + } + }); + } + + async connect() { + this.eth.connect(); + return new Promise(resolve => { + this.eth.once('peerready', () => resolve()); + }); + } + + public async getHeaders(bestHeight: number) { + return this.eth.getHeaders(bestHeight); + } + + public async getBlock(header: Ethereum.Header) { + return this.eth.getBlock(header); + } + + async processBlock(block): Promise { + if (block.transactions.length > 1) { + console.log('Block has ', block.transactions.length, 'transactions'); + } + await this.blockModel.addBlock({ + chain: this.chain, + network: this.network, + forkHeight: this.chainConfig.forkHeight, + parentChain: this.chainConfig.parentChain, + initialSyncComplete: this.initialSyncComplete, + block + }); + if (!this.syncing) { + logger.info(`Added block ${block.hash}`, { + chain: this.chain, + network: this.network + }); + } + } + + async processTransaction(tx: Ethereum.Transaction) { + const now = new Date(); + this.txModel.batchImport({ + chain: this.chain, + network: this.network, + txs: [tx], + height: -1, + mempoolTime: now, + blockTime: now, + blockTimeNormalized: now, + initialSyncComplete: true + }); + } + + async sync() { + const { chain, chainConfig, network } = this; + const { parentChain, forkHeight } = chainConfig; + this.syncing = true; + const state = await StateStorage.collection.findOne({}); + this.initialSyncComplete = + state && state.initialSyncComplete && state.initialSyncComplete.includes(`${chain}:${network}`); + let tip = await ChainStateProvider.getLocalTip({ chain, network }); + if (parentChain && (!tip || tip.height < forkHeight)) { + let parentTip = await ChainStateProvider.getLocalTip({ chain: parentChain, network }); + while (!parentTip || parentTip.height < forkHeight) { + logger.info(`Waiting until ${parentChain} syncs before ${chain} ${network}`); + await new Promise(resolve => { + setTimeout(resolve, 5000); + }); + parentTip = await ChainStateProvider.getLocalTip({ chain: parentChain, network }); + } + } + + const getHeaders = async (tip: number) => { + return this.getHeaders(tip); + }; + + let headers; + while (!headers || headers.length > 0) { + tip = await ChainStateProvider.getLocalTip({ chain, network }); + let currentHeight = tip ? tip.height : 0; + headers = await getHeaders(currentHeight); + let lastLog = 0; + logger.info(`Syncing ${headers.length} blocks for ${chain} ${network}`); + for (const header of headers) { + try { + const hash = header.hash(); + const hashStr = hash.toString('hex'); + const block = await this.getBlock(header); + await this.processBlock(block); + currentHeight++; + if (Date.now() - lastLog > 100) { + logger.info(`Sync `, { + chain, + network, + height: currentHeight, + hash: hashStr + }); + lastLog = Date.now(); + } + } catch (err) { + logger.error(`Error syncing ${chain} ${network}`, err); + return this.sync(); + } + } + } + logger.info(`${chain}:${network} up to date.`); + this.syncing = false; + StateStorage.collection.findOneAndUpdate( + {}, + { $addToSet: { initialSyncComplete: `${chain}:${network}` } }, + { upsert: true } + ); + return true; + } + + async start() { + logger.debug(`Started worker for chain ${this.chain}`); + this.setupListeners(); + await this.connect(); + this.sync(); + } +} diff --git a/packages/bitcore-node/src/services/p2p/eth/p2p-lib.ts b/packages/bitcore-node/src/services/p2p/eth/p2p-lib.ts new file mode 100644 index 00000000000..37ec4d4e268 --- /dev/null +++ b/packages/bitcore-node/src/services/p2p/eth/p2p-lib.ts @@ -0,0 +1,375 @@ +import { EventEmitter } from 'events'; +import { Ethereum } from "../../../types/namespaces/Ethereum"; +const devp2p = require('ethereumjs-devp2p'); +const EthereumTx = require('ethereumjs-tx'); +const EthereumBlock = require('ethereumjs-block'); +const LRUCache = require('lru-cache'); +const ms = require('ms'); +const chalk = require('chalk'); +const assert = require('assert'); +const { randomBytes } = require('crypto'); + +const PRIVATE_KEY = randomBytes(32); +const CHAIN_ID = 4; +const requests = { headers: new Array(), bodies: new Array(), msgTypes: {} }; + +/* + *const BOOTNODES = require('ethereum-common') + * .bootstrapNodes.filter(node => { + * return node.chainId === CHAIN_ID; + * }) + * .map(node => { + * return { + * address: node.ip, + * udpPort: node.port, + * tcpPort: node.port + * }; + * }); + */ +const REMOTE_CLIENTID_FILTER = ['go1.5', 'go1.6', 'go1.7', 'quorum', 'pirl', 'ubiq', 'gmc', 'gwhale', 'prichain']; + +const CHECK_BLOCK_NR = 4370000; + +const ETH = { + NETWORKS: { + RINKEYBY: { + networkId: CHAIN_ID, + td: devp2p._util.int2buffer(1), // total difficulty in genesis block + bestHash: Buffer.from('6341fd3daf94b748c72ced5a5b26028f2474f5f00d824504e4fa37a75767e177', 'hex'), + genesisHash: Buffer.from('6341fd3daf94b748c72ced5a5b26028f2474f5f00d824504e4fa37a75767e177', 'hex') + } + } +}; +const getPeerAddr = peer => `${peer._socket.remoteAddress}:${peer._socket.remotePort}`; + +// DPT +const dpt = new devp2p.DPT(PRIVATE_KEY, { + refreshInterval: 30000, + endpoint: { + address: '127.0.0.1', + udpPort: null, + tcpPort: null + } +}); + +dpt.on('error', err => console.error(chalk.red(`DPT error: ${err}`))); + +export class BitcoreP2PEth extends EventEmitter { + // RLPx + rlpx = new devp2p.RLPx(PRIVATE_KEY, { + dpt: dpt, + maxPeers: 1, + capabilities: [devp2p.ETH.eth63, devp2p.ETH.eth62], + remoteClientIdFilter: REMOTE_CLIENTID_FILTER, + listenPort: null + }); + + blocksCache = new LRUCache({ max: 10000 }); + txCache = new LRUCache({ max: 10000 }); + + peers = {}; + + constructor() { + super(); + // connect to local ethereum node (debug) + + this.setupListeners(); + } + + connect() { + dpt + .addPeer({ address: '127.0.0.1', udpPort: 30303, tcpPort: 30303 }) + .then(peer => { + return this.rlpx.connect({ + id: peer.id, + address: peer.address, + port: peer.tcpPort + }); + }) + .catch(err => console.log(`error on connection to local node: ${err.stack || err}`)); + this.establishHeartbeat(); + } + + setupListeners() { + this.rlpx.on('error', err => console.error(chalk.red(`RLPx error: ${err.stack || err}`))); + + this.rlpx.on('peer:added', peer => { + const addr = getPeerAddr(peer); + this.peers[addr] = peer; + this.emit('peerready', peer); + const eth = peer.getProtocols()[0]; + + const clientId = peer.getHelloMessage().clientId; + console.log( + chalk.green(`Add peer: ${addr} ${clientId} (eth${eth.getVersion()}) (total: ${this.rlpx.getPeers().length})`) + ); + + eth.sendStatus(ETH.NETWORKS.RINKEYBY); + + eth.once('status', () => { + eth.sendMessage(devp2p.ETH.MESSAGE_CODES.GET_BLOCK_HEADERS, [CHECK_BLOCK_NR, 1, 0, 0]); + }); + + eth.on('message', async (code, payload) => { + if (code in requests.msgTypes) { + requests.msgTypes[code] += 1; + } else { + requests.msgTypes[code] = 1; + } + + switch (code) { + case devp2p.ETH.MESSAGE_CODES.NEW_BLOCK_HASHES: + console.log('MESSAGE:NEW_BLOCK_HASHES'); + for (let item of payload) { + const blockHash = item[0].toString('hex'); + if (this.blocksCache.has(blockHash)) continue; + setTimeout(() => { + eth.sendMessage(devp2p.ETH.MESSAGE_CODES.GET_BLOCK_HEADERS, [blockHash, 1, 0, 0]); + requests.headers.push(blockHash); + }, ms('0.1s')); + } + break; + + case devp2p.ETH.MESSAGE_CODES.TX: + console.log('MESSAGE:TX'); + for (let item of payload) { + const tx = new EthereumTx(item); + if (this.isValidTx(tx)) this.onNewTx(tx, peer); + } + + break; + + case devp2p.ETH.MESSAGE_CODES.GET_BLOCK_HEADERS: + console.log('MESSAGE:GET_BLOCK_HEADERS'); + const headers = new Array(); + if (requests.headers.length === 0 && requests.msgTypes[code] >= 8) { + peer.disconnect(devp2p.RLPx.DISCONNECT_REASONS.USELESS_PEER); + } else { + eth.sendMessage(devp2p.ETH.MESSAGE_CODES.BLOCK_HEADERS, headers); + } + break; + + case devp2p.ETH.MESSAGE_CODES.BLOCK_HEADERS: + console.log('MESSAGE:BLOCK_HEADERS'); + const blockHeaders = payload.map(header => new EthereumBlock.Header(header)); + this.emit('headers', blockHeaders); + break; + + case devp2p.ETH.MESSAGE_CODES.GET_BLOCK_BODIES: + console.log('MESSAGE:GET_BLOCK_BODIES'); + if (requests.headers.length === 0 && requests.msgTypes[code] >= 8) { + peer.disconnect(devp2p.RLPx.DISCONNECT_REASONS.USELESS_PEER); + } else { + eth.sendMessage(devp2p.ETH.MESSAGE_CODES.BLOCK_BODIES, []); + } + break; + + case devp2p.ETH.MESSAGE_CODES.BLOCK_BODIES: + console.log('MESSAGE:BLOCK_BODIES'); + let isValidPayload = false; + while (requests.bodies.length > 0) { + const header = requests.bodies.shift(); + const block = new EthereumBlock([header.raw, payload[0][0], payload[0][1]]); + const isValid = await this.isValidBlock(block); + if (isValid) { + isValidPayload = true; + this.emit(block.hash().toString('hex'), block); + this.onNewBlock(block, peer); + break; + } + } + + if (!isValidPayload) { + console.log(`${addr} received wrong block body`); + } + + break; + + case devp2p.ETH.MESSAGE_CODES.NEW_BLOCK: + console.log('MESSAGE:NEW_BLOCK'); + const newBlock = new EthereumBlock(payload[0]); + const isValidNewBlock = await this.isValidBlock(newBlock); + if (isValidNewBlock) this.onNewBlock(newBlock, peer); + break; + + case devp2p.ETH.MESSAGE_CODES.GET_NODE_DATA: + console.log('MESSAGE:GET_NODE_DATA'); + if (requests.headers.length === 0 && requests.msgTypes[code] >= 8) { + peer.disconnect(devp2p.RLPx.DISCONNECT_REASONS.USELESS_PEER); + } else { + eth.sendMessage(devp2p.ETH.MESSAGE_CODES.NODE_DATA, []); + } + break; + + case devp2p.ETH.MESSAGE_CODES.NODE_DATA: + console.log('MESSAGE:NODE_DATA'); + break; + + case devp2p.ETH.MESSAGE_CODES.GET_RECEIPTS: + console.log('MESSAGE:GET_RECEIPTS'); + if (requests.headers.length === 0 && requests.msgTypes[code] >= 8) { + peer.disconnect(devp2p.RLPx.DISCONNECT_REASONS.USELESS_PEER); + } else { + eth.sendMessage(devp2p.ETH.MESSAGE_CODES.RECEIPTS, []); + } + break; + + case devp2p.ETH.MESSAGE_CODES.RECEIPTS: + console.log('MESSAGE:RECEIPTS'); + break; + + default: + console.log('MESSAGE:', code); + } + }); + }); + + this.rlpx.on('peer:removed', (peer, reasonCode, disconnectWe) => { + const who = disconnectWe ? 'we disconnect' : 'peer disconnect'; + const total = this.rlpx.getPeers().length; + console.log( + chalk.yellow( + `Remove peer: ${getPeerAddr(peer)} - ${who}, reason: ${peer.getDisconnectPrefix(reasonCode)} (${String( + reasonCode + )}) (total: ${total})` + ) + ); + this.emit('peerdisconnect', peer); + }); + + this.rlpx.on('peer:error', (peer, err) => { + if (err.code === 'ECONNRESET') return; + + if (err instanceof assert.AssertionError) { + const peerId = peer.getId(); + if (peerId !== null) dpt.banPeer(peerId, ms('5m')); + + console.error(chalk.red(`Peer error (${getPeerAddr(peer)}): ${err.message}`)); + return; + } + + console.error(chalk.red(`Peer error (${getPeerAddr(peer)}): ${err.stack || err}`)); + }); + } + + establishHeartbeat() { + /* + *for (let bootnode of BOOTNODES) { + * dpt.bootstrap(bootnode).catch(err => { + * console.error(chalk.bold.red(`DPT bootstrap error: ${err.stack || err}`)); + * }); + *} + */ + setInterval(() => { + const peersCount = dpt.getPeers().length; + const openSlots = this.rlpx._getOpenSlots(); + const queueLength = this.rlpx._peersQueue.length; + const queueLength2 = this.rlpx._peersQueue.filter(o => o.ts <= Date.now()).length; + + console.log( + chalk.yellow( + `Total nodes in DPT: ${peersCount}, open slots: ${openSlots}, queue: ${queueLength} / ${queueLength2}` + ) + ); + }, ms('30s')); + } + + onNewTx(tx, peer) { + const txHashHex = tx.hash().toString('hex'); + if (this.txCache.has(txHashHex)) return; + this.txCache.set(txHashHex, true); + tx.hash = tx.hash(); + this.emit('peertx', peer, { transaction: tx }); + /* + *console.log(`New tx: ${txHashHex} (from ${getPeerAddr(peer)})`); + */ + } + + onNewBlock(block, peer) { + const blockHashHex = block.hash().toString('hex'); + const blockNumber = devp2p._util.buffer2int(block.header.number); + if (this.blocksCache.has(blockHashHex)) return; + this.blocksCache.set(blockHashHex, block); + console.log( + `----------------------------------------------------------------------------------------------------------` + ); + console.log(`New block ${blockNumber}: ${blockHashHex} (from ${getPeerAddr(peer)})`); + console.log( + `----------------------------------------------------------------------------------------------------------` + ); + this.emit('peerblock', peer, { block }); + } + + isValidTx(tx) { + return tx.validate(false); + } + + async isValidBlock(block) { + if (!block.validateUnclesHash()) return false; + if (!block.transactions.every(this.isValidTx)) return false; + return new Promise((resolve, reject) => { + block.genTxTrie(() => { + try { + resolve(block.validateTransactionsTrie()); + } catch (err) { + reject(err); + } + }); + }); + } + + sendPoolMessage(message, messageBody) { + for (let peer of Object.values(this.peers)) { + this.sendPeerMessage(peer, message, messageBody); + } + } + + sendPeerMessage(peer, message, messageBody) { + const eth = peer.getProtocols()[0]; + eth.sendMessage(message, messageBody); + } + + getHeaders(bestHeight: number) { + return new Promise(resolve => { + const _getHeaders = () => { + const message = [bestHeight, 2000, 0, 0]; + this.sendPoolMessage(devp2p.ETH.MESSAGE_CODES.GET_BLOCK_HEADERS, message); + }; + const headersRetry = setInterval(_getHeaders, 10000); + this.once('headers', headers => { + clearInterval(headersRetry); + resolve(headers); + }); + _getHeaders(); + }); + } + + getBlock(header: Ethereum.Header): Promise { + const hashStr = header.hash().toString('hex'); + return new Promise(resolve => { + const _getBlock = () => { + console.log('Getting block ', hashStr); + if (this.blocksCache.has(hashStr)) { + this.emit(hashStr, this.blocksCache.get(hashStr)) + } else { + requests.bodies.push(header); + this.sendPoolMessage(devp2p.ETH.MESSAGE_CODES.GET_BLOCK_BODIES, [header.hash()]); + } + }; + const blockRetry = setInterval(_getBlock, 10000); + this.once(hashStr, block => { + clearInterval(blockRetry); + resolve(block); + }); + _getBlock(); + }); + } + + getBlocks(hashes: Array) { + this.sendPoolMessage(devp2p.ETH.MESSAGE_CODES.GET_BLOCK_BODIES, hashes); + } +} + +// uncomment, if you want accept incoming connections +// rlpx.listen(30303, '0.0.0.0') +// dpt.bind(30303, '0.0.0.0') diff --git a/packages/bitcore-node/src/types/Block.ts b/packages/bitcore-node/src/types/Block.ts index ce4b7e929cc..328a74cb738 100644 --- a/packages/bitcore-node/src/types/Block.ts +++ b/packages/bitcore-node/src/types/Block.ts @@ -1,6 +1,5 @@ export type IBlock = { chain: string; - confirmations?: number; network: string; height: number; hash: string; @@ -8,12 +7,15 @@ export type IBlock = { merkleRoot: string; time: Date; timeNormalized: Date; - nonce: number; previousBlockHash: string; nextBlockHash: string; transactionCount: number; + nonce: number; size: number; bits: number; reward: number; processed: boolean; }; + +export type IBtcBlock = IBlock & {}; +export type IEthBlock = IBlock & {}; diff --git a/packages/bitcore-node/src/types/Transaction.ts b/packages/bitcore-node/src/types/Transaction.ts index 1a498769805..ac9b7f24114 100644 --- a/packages/bitcore-node/src/types/Transaction.ts +++ b/packages/bitcore-node/src/types/Transaction.ts @@ -1,4 +1,48 @@ +import { ObjectID } from 'mongodb'; +export type ITransaction = { + txid: string; + chain: string; + network: string; + blockHeight: number; + blockHash?: string; + blockTime?: Date; + blockTimeNormalized?: Date; + coinbase: boolean; + fee: number; + size: number; + value: number; + wallets: ObjectID[]; +}; + +export type IBtcTransaction = ITransaction & { + locktime: number; + inputCount: number; + outputCount: number; +}; + +export type IEthTransaction = ITransaction & { + gasLimit: string; + gasPrice: string; + nonce: string; +}; + + export type TransactionJSON = { + _id: string; + txid: string; + chain: string; + network: string; + blockHeight: number; + blockHash?: string; + blockTime: string; + blockTimeNormalized: string; + coinbase: boolean; + fee: number; + size: number; + value: number; +}; + +export type BtcTransactionJSON = { _id: string; txid: string; chain: string; @@ -15,3 +59,21 @@ export type TransactionJSON = { outputCount: number; value: number; }; + +export type EthTransactionJSON = { + _id: string; + txid: string; + chain: string; + network: string; + blockHeight: number; + blockHash: string; + blockTime: string; + blockTimeNormalized: string; + coinbase: boolean; + fee: number; + size: number; + value: number; + gasLimit: string; + gasPrice: string; + nonce: string; +}; diff --git a/packages/bitcore-node/src/types/namespaces/ChainAdapter.ts b/packages/bitcore-node/src/types/namespaces/ChainAdapter.ts deleted file mode 100644 index 4067a7689c5..00000000000 --- a/packages/bitcore-node/src/types/namespaces/ChainAdapter.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { ChainNetwork } from "../ChainNetwork"; -import { IBlock } from "../../models/block"; -import { ITransaction } from "../../models/transaction"; -export declare namespace Adapter { - type ConvertBlockParams = ChainNetwork & { - block: T; - height: number; - }; - - type ConvertTxParams = ChainNetwork & - ConvertBlockParams & { - tx: T; - }; - - interface IChainAdapter { - convertBlock(params: ConvertBlockParams): IBlock; - convertTx(params: ConvertTxParams): ITransaction; - } -} diff --git a/packages/bitcore-node/src/types/namespaces/ChainStateProvider.ts b/packages/bitcore-node/src/types/namespaces/ChainStateProvider.ts index a387892afd0..ef95deabcef 100644 --- a/packages/bitcore-node/src/types/namespaces/ChainStateProvider.ts +++ b/packages/bitcore-node/src/types/namespaces/ChainStateProvider.ts @@ -1,15 +1,14 @@ -import { TransactionJSON } from '../Transaction'; +import { TransactionJSON, ITransaction } from '../Transaction'; import { ObjectId } from 'mongodb'; -import { IBlock } from '../../models/block'; import { Request, Response } from 'express'; import { IWallet } from '../../models/wallet'; import { ChainNetwork } from '../../types/ChainNetwork'; import { StreamingFindOptions } from '../../services/storage'; import { MongoBound } from '../../models/base'; -import { ITransaction } from '../../models/transaction'; import { AuthheadJSON } from '../Authhead'; import { CoinListingJSON } from '../Coin'; import { DailyTransactionsJSON } from '../stats'; +import { IBlock } from "../Block"; export declare namespace CSP { export type StreamWalletTransactionsArgs = { startBlock: number; diff --git a/packages/bitcore-node/src/types/namespaces/Ethereum/index.ts b/packages/bitcore-node/src/types/namespaces/Ethereum/index.ts new file mode 100644 index 00000000000..cd2afa93fae --- /dev/null +++ b/packages/bitcore-node/src/types/namespaces/Ethereum/index.ts @@ -0,0 +1,44 @@ +import BN from 'bn.js'; +export declare namespace Ethereum { + export type Block = { + header: Header; + transactions: Transaction[]; + uncleHeaders: Header[]; + raw: Buffer[]; + txTrie: any; + }; + + export type Header = { + parentHash: Buffer; + uncleHash: Buffer; + coinbase: Buffer; + stateRoot: Buffer; + transactionsTrie: Buffer; + receiptTrie: Buffer; + bloom: Buffer; + difficulty: Buffer; + number: Buffer; + gasLimit: Buffer; + gasUsed: Buffer; + timestamp: Buffer; + extraData: Buffer; + mixHash: Buffer; + nonce: Buffer; + raw: Array; + hash: () => Buffer; + }; + + export type Transaction = { + hash: () => Buffer; + nonce: Buffer; + gasPrice: Buffer; + gasLimit: Buffer; + to: Buffer; + from: Buffer; + value: Buffer; + data: Buffer; + // EIP 155 chainId - mainnet: 1, ropsten: 3 + chainId: number; + getUpfrontCost: () => BN; + }; +} diff --git a/packages/bitcore-node/test/benchmark/benchmark.ts b/packages/bitcore-node/test/benchmark/benchmark.ts index 2aefc492e10..a853ac61c4f 100644 --- a/packages/bitcore-node/test/benchmark/benchmark.ts +++ b/packages/bitcore-node/test/benchmark/benchmark.ts @@ -4,10 +4,10 @@ const UnspentOutput = Transaction.UnspentOutput; import config from '../../src/config'; import { Storage } from '../../src/services/storage'; -import { BlockStorage } from '../../src/models/block'; import { BitcoinBlockType } from '../../src/types/namespaces/Bitcoin/Block'; import { resetDatabase } from '../helpers/index.js'; import * as crypto from 'crypto'; +import { BtcBlockStorage } from "../../src/models/block/btc/btcBlock"; function randomHash() { return crypto.randomBytes(32).toString('hex'); @@ -123,7 +123,7 @@ async function benchmark(blockCount: number, blockSizeMb: number) { console.log('Adding blocks'); for (let block of blocks) { process.stdout.write('.'); - await BlockStorage.addBlock({ block, chain: 'BENCH', network: 'MARK', initialSyncComplete: false }); + await BtcBlockStorage.addBlock({ block, chain: 'BENCH', network: 'MARK', initialSyncComplete: false }); } process.stdout.write('\n'); const endTime = new Date(); diff --git a/packages/bitcore-node/test/integration/models/block.integration.ts b/packages/bitcore-node/test/integration/models/block.integration.ts index 947383ba37c..c233397beb4 100644 --- a/packages/bitcore-node/test/integration/models/block.integration.ts +++ b/packages/bitcore-node/test/integration/models/block.integration.ts @@ -1,11 +1,11 @@ import { expect } from 'chai'; import { resetDatabase } from '../../helpers'; -import { BlockStorage } from '../../../src/models/block'; -import { TransactionStorage } from '../../../src/models/transaction'; +import { BtcTransactionStorage } from '../../../src/models/transaction'; import { CoinStorage } from '../../../src/models/coin'; import { TEST_BLOCK } from '../../data/test-block'; import { SpentHeightIndicators } from '../../../src/types/Coin'; import logger from '../../../src/logger'; +import { BtcBlockStorage } from "../../../src/models/block/btc/btcBlock"; describe('Block Model', function() { beforeEach(async () => { @@ -14,7 +14,7 @@ describe('Block Model', function() { describe('addBlock', () => { it('should add a block when incoming block references previous block hash', async () => { - await BlockStorage.collection.insertOne({ + await BtcBlockStorage.collection.insertOne({ chain: 'BTC', network: 'regtest', height: 5, @@ -32,7 +32,7 @@ describe('Block Model', function() { bits: parseInt('207fffff', 16), processed: true }); - await BlockStorage.collection.insertOne({ + await BtcBlockStorage.collection.insertOne({ chain: 'BTC', network: 'regtest', height: 6, @@ -50,7 +50,7 @@ describe('Block Model', function() { bits: parseInt('207fffff', 16), processed: true }); - await BlockStorage.collection.insertOne({ + await BtcBlockStorage.collection.insertOne({ chain: 'BTC', network: 'regtest', height: 7, @@ -68,7 +68,7 @@ describe('Block Model', function() { bits: parseInt('207fffff', 16), processed: true }); - await BlockStorage.collection.insertOne({ + await BtcBlockStorage.collection.insertOne({ chain: 'BTC', network: 'regtest', height: 8, @@ -87,9 +87,9 @@ describe('Block Model', function() { processed: true }); - await BlockStorage.addBlock({ block: TEST_BLOCK, chain: 'BTC', network: 'regtest', initialSyncComplete: false }); + await BtcBlockStorage.addBlock({ block: TEST_BLOCK, chain: 'BTC', network: 'regtest', initialSyncComplete: false }); - const blocks = await BlockStorage.collection + const blocks = await BtcBlockStorage.collection .find({ chain: 'BTC', network: 'regtest' }) .sort({ height: 1 }) .toArray(); @@ -112,7 +112,7 @@ describe('Block Model', function() { logger.info(`new block was successfully added with hash`, ownBlock.hash); - const transaction = await TransactionStorage.collection + const transaction = await BtcTransactionStorage.collection .find({ chain: 'BTC', network: 'regtest', @@ -137,7 +137,7 @@ describe('Block Model', function() { describe('handleReorg', () => { it("should not reorg if the incoming block's prevHash matches the block hash of the current highest block", async () => { - await BlockStorage.collection.insertOne({ + await BtcBlockStorage.collection.insertOne({ chain: 'BTC', network: 'regtest', height: 1335, @@ -155,7 +155,7 @@ describe('Block Model', function() { bits: parseInt('207fffff', 16), processed: true }); - await BlockStorage.collection.insertOne({ + await BtcBlockStorage.collection.insertOne({ chain: 'BTC', network: 'regtest', height: 1336, @@ -173,7 +173,7 @@ describe('Block Model', function() { bits: parseInt('207fffff', 16), processed: true }); - await BlockStorage.collection.insertOne({ + await BtcBlockStorage.collection.insertOne({ chain: 'BTC', network: 'regtest', height: 1337, @@ -192,7 +192,7 @@ describe('Block Model', function() { processed: true }); - await BlockStorage.handleReorg({ + await BtcBlockStorage.handleReorg({ header: { prevHash: '3279069d22ce5af68ef38332d5b40e79e1964b154d466e7fa233015a34c27312', hash: '12c719927ce18f9a61d7c5a7af08d3110cacfa43671aa700956c3c05ed38bdaa', @@ -206,11 +206,11 @@ describe('Block Model', function() { network: 'regtest' }); - const result = await BlockStorage.collection.find({ chain: 'BTC', network: 'regtest' }).toArray(); + const result = await BtcBlockStorage.collection.find({ chain: 'BTC', network: 'regtest' }).toArray(); expect(result.length).to.equal(3); }); it('should not reorg if localTip height is zero', async () => { - await BlockStorage.handleReorg({ + await BtcBlockStorage.handleReorg({ header: { prevHash: '12c719927ce18f9a61d7c5a7af08d3110cacfa43671aa700956c3c05ed38bdaa', hash: '4c6872bf45ecab2fb8b38c8b8f50fc4a8309c6171d28d479b8226afcb1a99920', @@ -224,12 +224,12 @@ describe('Block Model', function() { network: 'regtest' }); - const result = await BlockStorage.collection.find({ chain: 'BTC', network: 'regtest' }).toArray(); + const result = await BtcBlockStorage.collection.find({ chain: 'BTC', network: 'regtest' }).toArray(); expect(result.length).to.equal(0); }); it('should successfully handle reorg', async () => { // setting the Block model - await BlockStorage.collection.insertOne({ + await BtcBlockStorage.collection.insertOne({ chain: 'BTC', network: 'regtest', height: 5, @@ -247,7 +247,7 @@ describe('Block Model', function() { bits: parseInt('207fffff', 16), processed: true }); - await BlockStorage.collection.insertOne({ + await BtcBlockStorage.collection.insertOne({ chain: 'BTC', network: 'regtest', height: 6, @@ -265,7 +265,7 @@ describe('Block Model', function() { bits: parseInt('207fffff', 16), processed: true }); - await BlockStorage.collection.insertOne({ + await BtcBlockStorage.collection.insertOne({ chain: 'BTC', network: 'regtest', height: 7, @@ -285,7 +285,7 @@ describe('Block Model', function() { }); // setting TX model - await TransactionStorage.collection.insertOne({ + await BtcTransactionStorage.collection.insertOne({ txid: 'a2262b524615b6d2f409784ceff898fd46bdde6a584269788c41f26ac4b4919g', chain: 'BTC', network: 'regtest', @@ -302,7 +302,7 @@ describe('Block Model', function() { blockHeight: 5 }); - await TransactionStorage.collection.insertOne({ + await BtcTransactionStorage.collection.insertOne({ txid: '8c29860888b915715878b21ce14707a17b43f6c51dfb62a1e736e35bc5d8093f', chain: 'BTC', network: 'regtest', @@ -319,7 +319,7 @@ describe('Block Model', function() { blockHeight: 6 }); - await TransactionStorage.collection.insertOne({ + await BtcTransactionStorage.collection.insertOne({ txid: 'a2262b524615b6d2f409784ceff898fd46bdde6a584269788c41f26ac4b4919e', chain: 'BTC', network: 'regtest', @@ -336,7 +336,7 @@ describe('Block Model', function() { blockHeight: 7 }); - await TransactionStorage.collection.insertOne({ + await BtcTransactionStorage.collection.insertOne({ txid: '8a351fa9fc3fcd38066b4bf61a8b5f71f08aa224d7a86165557e6da7ee13a826', chain: 'BTC', network: 'regtest', @@ -412,7 +412,7 @@ describe('Block Model', function() { spentTxid: 'eec8570a0c960b19fa6c86c71a06ebda379b86b5fe0be0e64ba83b2e0a3d05a3' }); - await BlockStorage.handleReorg({ + await BtcBlockStorage.handleReorg({ header: { prevHash: '2a883ff89c7d6e9302bb4a4634cd580319a4fd59d69e979b344972b0ba042b86', hash: '3279069d22ce5af68ef38332d5b40e79e1964b154d466e7fa233015a34c27312', @@ -427,7 +427,7 @@ describe('Block Model', function() { }); // check for removed block after Reorg in db - const blocks = await BlockStorage.collection + const blocks = await BtcBlockStorage.collection .find({ chain: 'BTC', network: 'regtest' @@ -435,7 +435,7 @@ describe('Block Model', function() { .toArray(); expect(blocks.length).to.equal(1); - const removedBlock = await BlockStorage.collection + const removedBlock = await BtcBlockStorage.collection .find({ chain: 'BTC', network: 'regtest', @@ -447,7 +447,7 @@ describe('Block Model', function() { expect(removedBlock.length).to.equal(0); // check for removed tx after Reorg in db - const transaction = await TransactionStorage.collection + const transaction = await BtcTransactionStorage.collection .find({ chain: 'BTC', network: 'regtest' @@ -455,7 +455,7 @@ describe('Block Model', function() { .toArray(); expect(transaction.length).to.equal(1); - const removedTransaction = await TransactionStorage.collection + const removedTransaction = await BtcTransactionStorage.collection .find({ chain: 'BTC', network: 'regtest', diff --git a/packages/bitcore-node/test/integration/websocket.integration.ts b/packages/bitcore-node/test/integration/websocket.integration.ts index e55b42d3bf8..244fb768756 100644 --- a/packages/bitcore-node/test/integration/websocket.integration.ts +++ b/packages/bitcore-node/test/integration/websocket.integration.ts @@ -1,12 +1,12 @@ import { resetDatabase } from '../helpers'; import { AsyncRPC } from '../../src/rpc'; -import { BlockStorage } from '../../src/models/block'; import { expect } from 'chai'; import io = require('socket.io-client'); import config from '../../src/config'; -import { P2pWorker } from '../../src/services/p2p'; import { Event } from '../../src/services/event'; import { Api } from '../../src/services/api'; +import { BtcBlockStorage } from "../../src/models/block/btc/btcBlock"; +import { BitcoreP2pWorker } from "../../src/services/p2p/btc"; const wait = time => new Promise(resolve => setTimeout(resolve, time)); const chain = 'BTC'; @@ -15,7 +15,7 @@ const chainConfig = config.chains[chain][network]; const creds = chainConfig.rpc; const rpc = new AsyncRPC(creds.username, creds.password, creds.host, creds.port); -let p2pWorker: P2pWorker; +let p2pWorker: BitcoreP2pWorker; describe('Websockets', function() { this.timeout(50000); @@ -24,7 +24,7 @@ describe('Websockets', function() { }); beforeEach(() => { - p2pWorker = new P2pWorker({ + p2pWorker = new BitcoreP2pWorker({ chain, network, chainConfig @@ -44,7 +44,7 @@ describe('Websockets', function() { await rpc.generate(5); await p2pWorker.syncDone(); - const beforeGenTip = await BlockStorage.getLocalTip({ chain, network }); + const beforeGenTip = await BtcBlockStorage.getLocalTip({ chain, network }); expect(beforeGenTip).to.not.eq(null); if (beforeGenTip && beforeGenTip.height && beforeGenTip.height < 100) { @@ -53,7 +53,7 @@ describe('Websockets', function() { await rpc.generate(1); await p2pWorker.syncDone(); await wait(1000); - const afterGenTip = await BlockStorage.getLocalTip({ chain, network }); + const afterGenTip = await BtcBlockStorage.getLocalTip({ chain, network }); expect(afterGenTip).to.not.eq(null); if (beforeGenTip != null && afterGenTip != null) { @@ -65,7 +65,7 @@ describe('Websockets', function() { await Event.start(); await Api.start(); - const p2pWorker = new P2pWorker({ + const p2pWorker = new BitcoreP2pWorker({ chain, network, chainConfig @@ -97,7 +97,7 @@ describe('Websockets', function() { }); it('should get a mempool tx and coin when mempool event, senttoaddress, occurs', async () => { - const p2pWorker = new P2pWorker({ chain, network, chainConfig }); + const p2pWorker = new BitcoreP2pWorker({ chain, network, chainConfig }); let hasSeenTxEvent = false; let hasSeenCoinEvent = false; diff --git a/packages/bitcore-node/test/unit/models/block.unit.ts b/packages/bitcore-node/test/unit/models/block.unit.ts index 4a08d7c7ad5..f678e8759c9 100644 --- a/packages/bitcore-node/test/unit/models/block.unit.ts +++ b/packages/bitcore-node/test/unit/models/block.unit.ts @@ -1,5 +1,5 @@ import { expect } from 'chai'; -import { BlockStorage, IBlock } from '../../../src/models/block'; +import { BtcBlockStorage } from "../../../src/models/block/btc/btcBlock"; import { TransactionStorage } from '../../../src/models/transaction'; import { CoinStorage } from '../../../src/models/coin'; import * as sinon from 'sinon'; @@ -10,6 +10,7 @@ import { mockCollection } from '../../helpers/index.js'; import { ChainStateProvider } from '../../../src/providers/chain-state'; import { ObjectID } from 'mongodb'; import { MongoBound } from '../../../src/models/base'; +import { IBtcBlock } from "../../../src/types/Block"; describe('Block Model', function() { let addBlockParams = { @@ -29,13 +30,13 @@ describe('Block Model', function() { sandbox.restore(); }); it('should be able to add a block', async () => { - let newBlock = Object.assign({ save: () => Promise.resolve() }, BlockStorage, addBlockParams); + let newBlock = Object.assign({ save: () => Promise.resolve() }, BtcBlockStorage, addBlockParams); mockStorage(newBlock); - sandbox.stub(BlockStorage, 'handleReorg').resolves(); + sandbox.stub(BtcBlockStorage, 'handleReorg').resolves(); sandbox.stub(TransactionStorage, 'batchImport').resolves(); - const result = await BlockStorage.addBlock(addBlockParams); + const result = await BtcBlockStorage.addBlock(addBlockParams); expect(result); }); }); @@ -43,7 +44,7 @@ describe('Block Model', function() { describe('BlockModel find options', () => { it('should be able to create query options', () => { const id = new ObjectID(); - const { query, options } = Storage.getFindOptions>(BlockStorage, { + const { query, options } = Storage.getFindOptions>(BtcBlockStorage, { since: id, paging: '_id', limit: 100, @@ -56,7 +57,7 @@ describe('Block Model', function() { it('should default to descending', () => { const id = new ObjectID(); - const { query, options } = Storage.getFindOptions>(BlockStorage, { + const { query, options } = Storage.getFindOptions>(BtcBlockStorage, { since: id, paging: '_id', limit: 100 @@ -68,7 +69,7 @@ describe('Block Model', function() { it('should allow ascending', () => { const id = new ObjectID(); - const { query, options } = Storage.getFindOptions>(BlockStorage, { + const { query, options } = Storage.getFindOptions>(BtcBlockStorage, { since: id, paging: '_id', limit: 100, @@ -127,10 +128,10 @@ describe('Block Model', function() { }); it('should return if localTip hash equals the previous hash', async () => { - Object.assign(BlockStorage.collection, mockCollection(null)); + Object.assign(BtcBlockStorage.collection, mockCollection(null)); Object.assign(TransactionStorage.collection, mockCollection(null)); Object.assign(CoinStorage.collection, mockCollection(null)); - let blockModelRemoveSpy = BlockStorage.collection.deleteMany as sinon.SinonSpy; + let blockModelRemoveSpy = BtcBlockStorage.collection.deleteMany as sinon.SinonSpy; let transactionModelRemoveSpy = TransactionStorage.collection.deleteMany as sinon.SinonSpy; let coinModelRemoveSpy = CoinStorage.collection.deleteMany as sinon.SinonSpy; let coinModelUpdateSpy = CoinStorage.collection.updateMany as sinon.SinonSpy; @@ -149,7 +150,7 @@ describe('Block Model', function() { network: 'regtest' }; - await BlockStorage.handleReorg(params); + await BtcBlockStorage.handleReorg(params); expect(blockModelRemoveSpy.notCalled).to.be.true; expect(transactionModelRemoveSpy.notCalled).to.be.true; expect(coinModelRemoveSpy.notCalled).to.be.true; @@ -157,7 +158,7 @@ describe('Block Model', function() { }); it('should return if localTip height is zero', async () => { - let blockModelRemoveSpy = BlockStorage.collection.deleteMany as sinon.SinonSpy; + let blockModelRemoveSpy = BtcBlockStorage.collection.deleteMany as sinon.SinonSpy; let transactionModelRemoveSpy = TransactionStorage.collection.deleteMany as sinon.SinonSpy; let coinModelRemoveSpy = CoinStorage.collection.deleteMany as sinon.SinonSpy; let coinModelUpdateSpy = CoinStorage.collection.updateMany as sinon.SinonSpy; @@ -168,9 +169,9 @@ describe('Block Model', function() { block: TEST_BLOCK, height: 1355 }; - let params = Object.assign(BlockStorage, blockMethodParams); + let params = Object.assign(BtcBlockStorage, blockMethodParams); - await BlockStorage.handleReorg(params); + await BtcBlockStorage.handleReorg(params); expect(blockModelRemoveSpy.notCalled).to.be.true; expect(transactionModelRemoveSpy.notCalled).to.be.true; expect(coinModelRemoveSpy.notCalled).to.be.true; @@ -188,10 +189,10 @@ describe('Block Model', function() { block: TEST_BLOCK, height: 1355 }; - let params = Object.assign(BlockStorage, blockMethodParams); - const removeSpy = BlockStorage.collection.deleteMany as sinon.SinonSpy; + let params = Object.assign(BtcBlockStorage, blockMethodParams); + const removeSpy = BtcBlockStorage.collection.deleteMany as sinon.SinonSpy; - await BlockStorage.handleReorg(params); + await BtcBlockStorage.handleReorg(params); expect(removeSpy.called).to.be.true; }); @@ -207,10 +208,10 @@ describe('Block Model', function() { block: TEST_BLOCK, height: 1355 }; - let params = Object.assign(BlockStorage, blockMethodParams); + let params = Object.assign(BtcBlockStorage, blockMethodParams); const removeSpy = TransactionStorage.collection.deleteMany as sinon.SinonSpy; - await BlockStorage.handleReorg(params); + await BtcBlockStorage.handleReorg(params); expect(removeSpy.called).to.be.true; }); @@ -226,11 +227,11 @@ describe('Block Model', function() { block: TEST_BLOCK, height: 1355 }; - let params = Object.assign(BlockStorage, blockMethodParams); + let params = Object.assign(BtcBlockStorage, blockMethodParams); const collectionSpy = Storage.db!.collection as sinon.SinonSpy; const removeSpy = CoinStorage.collection.deleteMany as sinon.SinonSpy; - await BlockStorage.handleReorg(params); + await BtcBlockStorage.handleReorg(params); expect(collectionSpy.calledOnceWith('coins')); expect(removeSpy.callCount).to.eq(3); }); @@ -247,11 +248,11 @@ describe('Block Model', function() { block: TEST_BLOCK, height: 1355 }; - let params = Object.assign(BlockStorage, blockMethodParams); + let params = Object.assign(BtcBlockStorage, blockMethodParams); const collectionSpy = Storage.db!.collection as sinon.SinonSpy; const updateSpy = CoinStorage.collection.updateMany as sinon.SinonSpy; - await BlockStorage.handleReorg(params); + await BtcBlockStorage.handleReorg(params); expect(collectionSpy.calledOnceWith('coins')); expect(updateSpy.called).to.be.true; }); @@ -259,7 +260,7 @@ describe('Block Model', function() { describe('_apiTransform', () => { it('should return the transform object with block values', () => { - const block: IBlock = { + const block: IBtcBlock = { chain: 'BTC', network: 'mainnet', height: 1, @@ -278,7 +279,7 @@ describe('Block Model', function() { processed: true }; - const result = BlockStorage._apiTransform(block, { object: true }); + const result = BtcBlockStorage._apiTransform(block, { object: true }); expect(result.hash).to.be.equal(block.hash); expect(result.height).to.be.equal(block.height); diff --git a/packages/bitcore-node/test/verification/db-repair.ts b/packages/bitcore-node/test/verification/db-repair.ts index 21a5b68ae85..b8acd5fd349 100755 --- a/packages/bitcore-node/test/verification/db-repair.ts +++ b/packages/bitcore-node/test/verification/db-repair.ts @@ -3,11 +3,11 @@ import fs from 'fs'; import { Transform } from 'stream'; import { CoinStorage } from '../../src/models/coin'; import { Storage } from '../../src/services/storage'; -import { P2pWorker } from '../../src/services/p2p'; import { Config } from '../../src/services/config'; -import { BlockStorage } from '../../src/models/block'; import { validateDataForBlock } from './db-verify'; -import { TransactionStorage } from '../../src/models/transaction'; +import { BitcoreP2pWorker } from "../../src/services/p2p/btc"; +import { TransactionStorage } from "../../src/models/transaction/base/base"; +import { BlockStorage } from "../../src/models/block/base/base"; (async () => { const { CHAIN, NETWORK, FILE, DRYRUN } = process.env; @@ -19,7 +19,7 @@ import { TransactionStorage } from '../../src/models/transaction'; const network = NETWORK || ''; await Storage.start(); const chainConfig = Config.chainConfig({ chain, network }); - const worker = new P2pWorker({ chain, network, chainConfig }); + const worker = new BitcoreP2pWorker({ chain, network, chainConfig }); await worker.connect(); const handleRepair = async data => { diff --git a/packages/bitcore-node/test/verification/db-verify.ts b/packages/bitcore-node/test/verification/db-verify.ts index 27f263694f7..96207e4c084 100755 --- a/packages/bitcore-node/test/verification/db-verify.ts +++ b/packages/bitcore-node/test/verification/db-verify.ts @@ -1,10 +1,11 @@ #!/usr/bin/env node -import { BlockStorage } from '../../src/models/block'; import { CoinStorage, ICoin } from '../../src/models/coin'; -import { TransactionStorage, ITransaction } from '../../src/models/transaction'; import { Storage } from '../../src/services/storage'; import * as _ from 'lodash'; +import { BtcBlockStorage } from "../../src/models/block/btc/btcBlock"; +import { BtcTransactionStorage } from "../../src/models/transaction/btc/btcTransaction"; +import { IBtcTransaction } from "../../src/types/Transaction"; const { CHAIN, NETWORK, HEIGHT } = process.env; const resumeHeight = Number(HEIGHT) || 1; @@ -20,14 +21,14 @@ type ErrorType = { export async function validateDataForBlock(blockNum: number, log = false) { let success = true; - const blockTxs = await TransactionStorage.collection.find({ chain, network, blockHeight: blockNum }).toArray(); + const blockTxs = await BtcTransactionStorage.collection.find({ chain, network, blockHeight: blockNum }).toArray(); const blockTxids = blockTxs.map(t => t.txid); const coinsForTx = await CoinStorage.collection.find({ chain, network, mintTxid: { $in: blockTxids } }).toArray(); - const mempoolTxs = await TransactionStorage.collection + const mempoolTxs = await BtcTransactionStorage.collection .find({ chain, network, blockHeight: -1, txid: { $in: blockTxids } }) .toArray(); - const seenTxs = {} as { [txid: string]: ITransaction }; + const seenTxs = {} as { [txid: string]: IBtcTransaction }; const errors = new Array(); for (const tx of mempoolTxs) { @@ -125,7 +126,7 @@ export async function validateDataForBlock(blockNum: number, log = false) { } } - const blocksForHeight = await BlockStorage.collection.countDocuments({ + const blocksForHeight = await BtcBlockStorage.collection.countDocuments({ chain, network, height: blockNum, @@ -161,7 +162,7 @@ export async function validateDataForBlock(blockNum: number, log = false) { //blocks with same hash if (blockTxs.length > 0) { const hashFromTx = blockTxs[0].blockHash; - const blocksForHash = await BlockStorage.collection.countDocuments({ chain, network, hash: hashFromTx }); + const blocksForHash = await BtcBlockStorage.collection.countDocuments({ chain, network, hash: hashFromTx }); if (blocksForHash > 1) { success = false; const error = { model: 'block', err: true, type: 'DUPE_BLOCKHASH', payload: { hash: hashFromTx, blockNum } }; @@ -182,7 +183,7 @@ if (require.main === module) { console.log('Please provide a CHAIN and NETWORK environment variable'); process.exit(1); } - const tip = await BlockStorage.getLocalTip({ chain, network }); + const tip = await BtcBlockStorage.getLocalTip({ chain, network }); if (tip) { for (let i = resumeHeight; i <= tip.height; i++) { diff --git a/packages/bitcore-node/test/verification/resync.ts b/packages/bitcore-node/test/verification/resync.ts index e831ed73a9c..12c1c48d405 100644 --- a/packages/bitcore-node/test/verification/resync.ts +++ b/packages/bitcore-node/test/verification/resync.ts @@ -1,6 +1,6 @@ -import { P2pWorker } from '../../src/services/p2p'; import { Config } from '../../src/services/config'; import { Storage } from '../../src/services/storage'; +import { BitcoreP2pWorker } from "../../src/services/p2p/btc"; (async () => { const { CHAIN: chain, NETWORK: network, START, END } = process.env; @@ -10,7 +10,7 @@ import { Storage } from '../../src/services/storage'; } else { await Storage.start(); const chainConfig = Config.chainConfig({ chain, network }); - const worker = new P2pWorker({ chain, network, chainConfig }); + const worker = new BitcoreP2pWorker({ chain, network, chainConfig }); await worker.connect(); await worker.resync(Number(START), Number(END)); diff --git a/packages/bitcore-node/test/verification/rpc-verify.ts b/packages/bitcore-node/test/verification/rpc-verify.ts index a8fe4b2eaa0..cb8960e413c 100755 --- a/packages/bitcore-node/test/verification/rpc-verify.ts +++ b/packages/bitcore-node/test/verification/rpc-verify.ts @@ -1,8 +1,6 @@ #!/usr/bin/env node -import { BlockStorage, IBlock } from '../../src/models/block'; import { AsyncRPC } from '../../src/rpc'; import { expect } from 'chai'; -import { TransactionStorage, ITransaction } from '../../src/models/transaction'; import { CoinStorage } from '../../src/models/coin'; import { ChainNetwork } from '../../src/types/ChainNetwork'; import { WalletAddressStorage } from '../../src/models/walletAddress'; @@ -10,6 +8,9 @@ import { Storage } from '../../src/services/storage'; import config from '../../src/config'; import logger from '../../src/logger'; import { ChainStateProvider } from '../../src/providers/chain-state'; +import { BtcBlockStorage } from '../../src/models/block/btc/btcBlock'; +import { BtcTransactionStorage } from '../../src/models/transaction/btc/btcTransaction'; +import { IBtcBlock } from '../../src/types/Block'; const SATOSHI = 100000000.0; @@ -29,13 +30,13 @@ export async function blocks( const normalizedTimes = new Array(tip.height).fill(0); // check each block - const cursor = BlockStorage.collection.find({ + const cursor = BtcBlockStorage.collection.find({ chain: info.chain, network: info.network }); while (await cursor.hasNext()) { - const block: IBlock | null = await cursor.next(); + const block: IBtcBlock | null = await cursor.next(); if (!block) break; if (!block.processed) continue; logger.info(`verifying block ${block.hash}: ${block.height}`); @@ -78,7 +79,7 @@ export async function blocks( expect(block.reward, 'block reward').to.equal(Math.round(reward * SATOSHI)); // Check block only has all `truth`'s transactions - const ours = await TransactionStorage.collection + const ours = await BtcTransactionStorage.collection .find({ chain: info.chain, network: info.network, @@ -122,15 +123,14 @@ export async function blocks( } // Check no other tx points to our block hash - const extra = await TransactionStorage.collection - .countDocuments({ - chain: info.chain, - network: info.network, - blockHash: block.hash, - txid: { - $nin: truth.tx.map(tx => tx.txid) - } - }); + const extra = await BtcTransactionStorage.collection.countDocuments({ + chain: info.chain, + network: info.network, + blockHash: block.hash, + txid: { + $nin: truth.tx.map(tx => tx.txid) + } + }); expect(extra, 'number of extra transactions').to.equal(0); } } @@ -154,13 +154,13 @@ export async function transactions( ) { const rpc = new AsyncRPC(creds.username, creds.password, creds.host, creds.port); - const txcursor = TransactionStorage.collection.find({ + const txcursor = BtcTransactionStorage.collection.find({ chain: info.chain, network: info.network }); while (await txcursor.hasNext()) { - const tx: ITransaction | null = await txcursor.next(); + const tx = await txcursor.next(); if (!tx) { break; } From 22a57a59caf05826827c77f292d1eb0f79f9f52d Mon Sep 17 00:00:00 2001 From: Micah Riggan Date: Thu, 21 Mar 2019 20:19:22 -0400 Subject: [PATCH 02/40] Eth Sync does a thing --- packages/bitcore-build/package-lock.json | 188 +++------- packages/bitcore-client/package-lock.json | 2 +- packages/bitcore-lib-cash/package-lock.json | 2 +- packages/bitcore-lib/package-lock.json | 2 +- packages/bitcore-mnemonic/package-lock.json | 2 +- packages/bitcore-node/package-lock.json | 334 +++++++++++++++++- packages/bitcore-node/package.json | 3 + packages/bitcore-node/src/chain.ts | 2 +- .../src/models/block/eth/ethBlock.ts | 28 +- .../models/transaction/btc/btcTransaction.ts | 8 +- .../models/transaction/eth/ethTransaction.ts | 17 +- .../src/providers/chain-state/eth/eth.ts | 56 --- .../src/services/p2p/btc/index.ts | 8 +- .../src/services/p2p/eth/index.ts | 2 +- .../src/services/p2p/eth/p2p-lib.ts | 39 +- packages/bitcore-node/src/types/Block.ts | 6 +- .../bitcore-node/src/types/Transaction.ts | 12 +- packages/bitcore-p2p-cash/package-lock.json | 2 +- packages/bitcore-p2p/package-lock.json | 2 +- .../package-lock.json | 2 +- .../bitcore-wallet-client/package-lock.json | 178 +++------- .../bitcore-wallet-service/package-lock.json | 2 +- packages/bitcore-wallet-ui/package-lock.json | 2 +- packages/bitcore-wallet/package-lock.json | 2 +- packages/crypto-wallet-core/package-lock.json | 82 +---- packages/insight-previous/package-lock.json | 21 +- packages/insight-previous/package.json | 1 + packages/insight/package-lock.json | 2 +- 28 files changed, 511 insertions(+), 496 deletions(-) diff --git a/packages/bitcore-build/package-lock.json b/packages/bitcore-build/package-lock.json index 240cf81683d..0d0a2ad29cd 100644 --- a/packages/bitcore-build/package-lock.json +++ b/packages/bitcore-build/package-lock.json @@ -1,6 +1,6 @@ { "name": "bitcore-build", - "version": "8.1.0", + "version": "8.1.1", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -79,26 +79,6 @@ "uri-js": "4.2.2" } }, - "align-text": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", - "requires": { - "kind-of": "3.2.2", - "longest": "1.0.1", - "repeat-string": "1.6.1" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, "amdefine": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", @@ -886,15 +866,6 @@ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, - "center-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", - "requires": { - "align-text": "0.1.4", - "lazy-cache": "1.0.4" - } - }, "chai": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", @@ -2899,19 +2870,25 @@ } } }, - "gulp-uglify": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/gulp-uglify/-/gulp-uglify-2.1.2.tgz", - "integrity": "sha1-bbhbHQ7mPRgFhZK2WGSdZcLsRUE=", + "gulp-terser": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/gulp-terser/-/gulp-terser-1.1.7.tgz", + "integrity": "sha512-u577eHpz9zHaO7SiJJM5Rd1deBJastfNJ41pSfUpTagOtCommfDq00VK4JPwwTkQ++IGJbkFBen1C+vDxTO9gg==", "requires": { - "gulplog": "1.0.0", - "has-gulplog": "0.1.0", - "lodash": "4.17.11", - "make-error-cause": "1.2.2", - "through2": "2.0.5", - "uglify-js": "2.8.29", - "uglify-save-license": "0.4.1", + "plugin-error": "1.0.1", + "terser": "3.17.0", + "through2": "3.0.1", "vinyl-sourcemaps-apply": "0.2.1" + }, + "dependencies": { + "through2": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz", + "integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==", + "requires": { + "readable-stream": "2.3.6" + } + } } }, "gulplog": { @@ -2998,14 +2975,6 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, - "has-gulplog": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", - "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", - "requires": { - "sparkles": "1.0.1" - } - }, "has-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", @@ -3657,11 +3626,6 @@ "es6-weak-map": "2.0.2" } }, - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" - }, "lazystream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", @@ -3796,11 +3760,6 @@ } } }, - "longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" - }, "lru-cache": { "version": "2.2.4", "resolved": "http://registry.npmjs.org/lru-cache/-/lru-cache-2.2.4.tgz", @@ -3814,19 +3773,6 @@ "vlq": "0.2.3" } }, - "make-error": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", - "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==" - }, - "make-error-cause": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/make-error-cause/-/make-error-cause-1.2.2.tgz", - "integrity": "sha1-3wOI/NCzeBbf8KX7gQiTl3fcvJ0=", - "requires": { - "make-error": "1.3.5" - } - }, "make-iterator": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", @@ -4856,14 +4802,6 @@ "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.1.2.tgz", "integrity": "sha512-92ktAgvZhBzYTIK0Mja9uen5q5J3NRVMoDkJL2VMwq6SXjVCgqvQeVP2XAaUY6HT+XpQYeLSjb3UoitBryKmdA==" }, - "right-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", - "requires": { - "align-text": "0.1.4" - } - }, "rimraf": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", @@ -5226,6 +5164,15 @@ "urix": "0.1.0" } }, + "source-map-support": { + "version": "0.5.11", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.11.tgz", + "integrity": "sha512-//sajEx/fGL3iw6fltKMdPvy8kL3kJ2O3iuYlRoT3k9Kb4BjOoZ+BZzaNHeuaruSt+Kf3Zk9tnfAQg9/AJqUVQ==", + "requires": { + "buffer-from": "1.1.1", + "source-map": "0.6.1" + } + }, "source-map-url": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", @@ -5498,6 +5445,23 @@ "acorn-node": "1.6.2" } }, + "terser": { + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz", + "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==", + "requires": { + "commander": "2.19.0", + "source-map": "0.6.1", + "source-map-support": "0.5.11" + }, + "dependencies": { + "commander": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", + "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==" + } + } + }, "through": { "version": "2.3.8", "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -5668,65 +5632,6 @@ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, - "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", - "requires": { - "source-map": "0.5.7", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" - }, - "dependencies": { - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=" - }, - "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "requires": { - "center-align": "0.1.3", - "right-align": "0.1.3", - "wordwrap": "0.0.2" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" - }, - "yargs": { - "version": "3.10.0", - "resolved": "http://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", - "window-size": "0.1.0" - } - } - } - }, - "uglify-save-license": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/uglify-save-license/-/uglify-save-license-0.4.1.tgz", - "integrity": "sha1-lXJsF8xv0XHDYX479NjYKqjEzOE=" - }, - "uglify-to-browserify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", - "optional": true - }, "ultron": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", @@ -6068,11 +5973,6 @@ "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=" }, - "window-size": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=" - }, "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", diff --git a/packages/bitcore-client/package-lock.json b/packages/bitcore-client/package-lock.json index 96f944b4aa0..af3b35fc688 100644 --- a/packages/bitcore-client/package-lock.json +++ b/packages/bitcore-client/package-lock.json @@ -1,6 +1,6 @@ { "name": "bitcore-client", - "version": "8.1.0", + "version": "8.1.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/bitcore-lib-cash/package-lock.json b/packages/bitcore-lib-cash/package-lock.json index af2e1a9901e..8b4ed36846d 100644 --- a/packages/bitcore-lib-cash/package-lock.json +++ b/packages/bitcore-lib-cash/package-lock.json @@ -1,6 +1,6 @@ { "name": "bitcore-lib-cash", - "version": "8.1.0", + "version": "8.1.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/bitcore-lib/package-lock.json b/packages/bitcore-lib/package-lock.json index 170a10025d7..b6b02177cce 100644 --- a/packages/bitcore-lib/package-lock.json +++ b/packages/bitcore-lib/package-lock.json @@ -1,6 +1,6 @@ { "name": "bitcore-lib", - "version": "8.1.0", + "version": "8.1.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/bitcore-mnemonic/package-lock.json b/packages/bitcore-mnemonic/package-lock.json index 9d6b341a3a2..baf6a4fb2eb 100644 --- a/packages/bitcore-mnemonic/package-lock.json +++ b/packages/bitcore-mnemonic/package-lock.json @@ -1,6 +1,6 @@ { "name": "bitcore-mnemonic", - "version": "8.1.0", + "version": "8.1.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/bitcore-node/package-lock.json b/packages/bitcore-node/package-lock.json index af867136834..db643d90017 100644 --- a/packages/bitcore-node/package-lock.json +++ b/packages/bitcore-node/package-lock.json @@ -1,6 +1,6 @@ { "name": "bitcore-node", - "version": "8.1.0", + "version": "8.1.1", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -231,6 +231,14 @@ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, + "abstract-leveldown": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz", + "integrity": "sha512-2++wDf/DYqkPR3o5tbfdhF96EfMApo1GpPfzOsR/ZYXdkSmELlvOOEAl9iKkRsktMPHdGjO4rtkBpf2I7TiTeA==", + "requires": { + "xtend": "4.0.1" + } + }, "accepts": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", @@ -471,6 +479,15 @@ } } }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "requires": { + "core-js": "2.6.5", + "regenerator-runtime": "0.11.1" + } + }, "backo2": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", @@ -764,6 +781,11 @@ "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" }, + "buffer-equals": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/buffer-equals/-/buffer-equals-1.0.4.tgz", + "integrity": "sha1-A1O1T9B/2VZBcGca5vZrnPENJ/U=" + }, "buffer-fill": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", @@ -1044,6 +1066,11 @@ "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.1.tgz", "integrity": "sha1-Qa1XsbVVlR7BcUEqgZQrHoIA00o=" }, + "core-js": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.5.tgz", + "integrity": "sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A==" + }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -1272,6 +1299,14 @@ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", "dev": true }, + "deferred-leveldown": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz", + "integrity": "sha512-uukrWD2bguRtXilKt6cAWKyoXrTSMo5m7crUdLfWQmu8kIm88w3QZoUL+6nhpfKVmhHANER6Re3sKoNoZ3IKMA==", + "requires": { + "abstract-leveldown": "2.6.3" + } + }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -1467,6 +1502,14 @@ "has-binary2": "1.0.3" } }, + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "requires": { + "prr": "1.0.1" + } + }, "error-ex": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", @@ -1789,6 +1832,77 @@ } } }, + "ethereum-common": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.0.18.tgz", + "integrity": "sha1-L9w1dvIykDNYl26znaeDIT/5Uj8=" + }, + "ethereumjs-block": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-2.2.0.tgz", + "integrity": "sha512-Ye+uG/L2wrp364Zihdlr/GfC3ft+zG8PdHcRtsBFNNH1CkOhxOwdB8friBU85n89uRZ9eIMAywCq0F4CwT1wAw==", + "requires": { + "async": "2.5.0", + "ethereumjs-common": "1.1.0", + "ethereumjs-tx": "1.3.7", + "ethereumjs-util": "5.2.0", + "merkle-patricia-tree": "2.3.2" + } + }, + "ethereumjs-common": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ethereumjs-common/-/ethereumjs-common-1.1.0.tgz", + "integrity": "sha512-LUmYkKV/HcZbWRyu3OU9YOevsH3VJDXtI6kEd8VZweQec+JjDGKCmAVKUyzhYUHqxRJu7JNALZ3A/b3NXOP6tA==" + }, + "ethereumjs-devp2p": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/ethereumjs-devp2p/-/ethereumjs-devp2p-2.5.1.tgz", + "integrity": "sha512-xVizqoB44UqEaw/yc6PgmlDG4+wV4EnZ9b5S78kOUKOWQfrk91tmqO3WnxwHwFRLBsvzYB2P95YSc1ZDmMPvDA==", + "requires": { + "babel-runtime": "6.26.0", + "bl": "1.2.2", + "debug": "2.6.9", + "inherits": "2.0.3", + "ip": "1.1.5", + "k-bucket": "3.3.1", + "keccak": "1.4.0", + "lru-cache": "4.1.3", + "ms": "0.7.3", + "rlp-encoding": "3.0.0", + "safe-buffer": "5.1.1", + "secp256k1": "3.5.0" + }, + "dependencies": { + "ms": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.3.tgz", + "integrity": "sha1-cIFVpeROM/X9D8U+gdDUCpG+H/8=" + } + } + }, + "ethereumjs-tx": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-1.3.7.tgz", + "integrity": "sha512-wvLMxzt1RPhAQ9Yi3/HKZTn0FZYpnsmQdbKYfUUpi4j1SEIcbkd9tndVjcPrufY3V7j2IebOpC00Zp2P/Ay2kA==", + "requires": { + "ethereum-common": "0.0.18", + "ethereumjs-util": "5.2.0" + } + }, + "ethereumjs-util": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz", + "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", + "requires": { + "bn.js": "4.11.8", + "create-hash": "1.2.0", + "ethjs-util": "0.1.6", + "keccak": "1.4.0", + "rlp": "2.2.3", + "safe-buffer": "5.1.1", + "secp256k1": "3.5.0" + } + }, "ethers": { "version": "4.0.0-beta.1", "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.0-beta.1.tgz", @@ -1860,6 +1974,15 @@ } } }, + "ethjs-util": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", + "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", + "requires": { + "is-hex-prefixed": "1.0.0", + "strip-hex-prefix": "1.0.0" + } + }, "eventemitter3": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.1.1.tgz", @@ -2206,8 +2329,7 @@ "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" }, "gauge": { "version": "1.2.7", @@ -2542,6 +2664,11 @@ "integrity": "sha512-pUh+xUQQhQzevjRHHFqqcTy0/dP/kS9I8HSrUydhihjuD09W6ldVWFtIrwhXdUJHis3i2rZNqEHpZH/cbinFbg==", "dev": true }, + "immediate": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz", + "integrity": "sha1-0UD6j2FGWb1lQSMwl92qwlzdmRw=" + }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -2622,6 +2749,11 @@ } } }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" + }, "ipaddr.js": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz", @@ -2846,6 +2978,27 @@ "integrity": "sha512-mJVp13Ix6gFo3SBAy9U/kL+oeZqzlYYYLQBwXVBlVzIsZwBqGREnOro24oC/8s8aox+rJhtZ2DiQof++IrkA+g==", "dev": true }, + "k-bucket": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/k-bucket/-/k-bucket-3.3.1.tgz", + "integrity": "sha512-kgwWqYT79rAahn4maIVTP8dIe+m1KulufWW+f1bB9DlZrRFiGpZ4iJOg2HUp4xJYBWONP3+rOPIWF/RXABU6mw==", + "requires": { + "buffer-equals": "1.0.4", + "inherits": "2.0.3", + "randombytes": "2.1.0" + } + }, + "keccak": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-1.4.0.tgz", + "integrity": "sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw==", + "requires": { + "bindings": "1.3.0", + "inherits": "2.0.3", + "nan": "2.10.0", + "safe-buffer": "5.1.1" + } + }, "keccakjs": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/keccakjs/-/keccakjs-0.2.3.tgz", @@ -2855,6 +3008,102 @@ "sha3": "1.2.2" } }, + "level-codec": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-7.0.1.tgz", + "integrity": "sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ==" + }, + "level-errors": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-1.0.5.tgz", + "integrity": "sha512-/cLUpQduF6bNrWuAC4pwtUKA5t669pCsCi2XbmojG2tFeOr9j6ShtdDCtFFQO1DRt+EVZhx9gPzP9G2bUaG4ig==", + "requires": { + "errno": "0.1.7" + } + }, + "level-iterator-stream": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz", + "integrity": "sha1-5Dt4sagUPm+pek9IXrjqUwNS8u0=", + "requires": { + "inherits": "2.0.3", + "level-errors": "1.0.5", + "readable-stream": "1.1.14", + "xtend": "4.0.1" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + } + } + }, + "level-ws": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-0.0.0.tgz", + "integrity": "sha1-Ny5RIXeSSgBCSwtDrvK7QkltIos=", + "requires": { + "readable-stream": "1.0.34", + "xtend": "2.1.2" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "object-keys": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", + "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=" + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "xtend": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", + "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", + "requires": { + "object-keys": "0.4.0" + } + } + } + }, + "levelup": { + "version": "1.3.9", + "resolved": "https://registry.npmjs.org/levelup/-/levelup-1.3.9.tgz", + "integrity": "sha512-VVGHfKIlmw8w1XqpGOAGwq6sZm2WwWLmlDcULkKWQXEA5EopA8OBNJ2Ck2v6bdk8HeEZSbCSEgzXadyQFm76sQ==", + "requires": { + "deferred-leveldown": "1.2.2", + "level-codec": "7.0.1", + "level-errors": "1.0.5", + "level-iterator-stream": "1.3.1", + "prr": "1.0.1", + "semver": "5.4.1", + "xtend": "4.0.1" + } + }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", @@ -2952,6 +3201,11 @@ "yallist": "2.1.2" } }, + "ltgt": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", + "integrity": "sha1-81ypHEk/e3PaDgdJUwTxezH4fuU=" + }, "make-dir": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", @@ -2981,11 +3235,56 @@ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" }, + "memdown": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/memdown/-/memdown-1.4.1.tgz", + "integrity": "sha1-tOThkhdGZP+65BNhqlAPMRnv4hU=", + "requires": { + "abstract-leveldown": "2.7.2", + "functional-red-black-tree": "1.0.1", + "immediate": "3.2.3", + "inherits": "2.0.3", + "ltgt": "2.2.1", + "safe-buffer": "5.1.1" + }, + "dependencies": { + "abstract-leveldown": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz", + "integrity": "sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==", + "requires": { + "xtend": "4.0.1" + } + } + } + }, "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" }, + "merkle-patricia-tree": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-2.3.2.tgz", + "integrity": "sha512-81PW5m8oz/pz3GvsAwbauj7Y00rqm81Tzad77tHBwU7pIAtN+TJnMSOJhxBKflSVYhptMMb9RskhqHqrSm1V+g==", + "requires": { + "async": "1.5.2", + "ethereumjs-util": "5.2.0", + "level-ws": "0.0.0", + "levelup": "1.3.9", + "memdown": "1.4.1", + "readable-stream": "2.0.6", + "rlp": "2.2.3", + "semaphore": "1.1.0" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" + } + } + }, "methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", @@ -3698,6 +3997,11 @@ "ipaddr.js": "1.6.0" } }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" + }, "pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", @@ -3843,6 +4147,11 @@ } } }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + }, "regexp-clone": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-0.0.1.tgz", @@ -3984,6 +4293,20 @@ } } }, + "rlp": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.3.tgz", + "integrity": "sha512-l6YVrI7+d2vpW6D6rS05x2Xrmq8oW7v3pieZOJKBEdjuTF4Kz/iwk55Zyh1Zaz+KOB2kC8+2jZlp2u9L4tTzCQ==", + "requires": { + "bn.js": "4.11.8", + "safe-buffer": "5.1.1" + } + }, + "rlp-encoding": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/rlp-encoding/-/rlp-encoding-3.0.0.tgz", + "integrity": "sha1-mZ24bdBObuj6lNQb4eiprjSJj9M=" + }, "run-async": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", @@ -4112,6 +4435,11 @@ "commander": "2.8.1" } }, + "semaphore": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/semaphore/-/semaphore-1.1.0.tgz", + "integrity": "sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA==" + }, "semver": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", diff --git a/packages/bitcore-node/package.json b/packages/bitcore-node/package.json index aaee6e34b79..349e7bd3fd6 100644 --- a/packages/bitcore-node/package.json +++ b/packages/bitcore-node/package.json @@ -81,6 +81,9 @@ "bn.js": "^4.11.8", "body-parser": "^1.18.3", "cors": "^2.8.4", + "ethereumjs-block": "^2.2.0", + "ethereumjs-devp2p": "^2.5.1", + "ethereumjs-tx": "^1.3.7", "express": "^4.16.3", "heapdump": "^0.3.12", "http": "0.0.0", diff --git a/packages/bitcore-node/src/chain.ts b/packages/bitcore-node/src/chain.ts index fbb45963b48..36f21b9a0b7 100644 --- a/packages/bitcore-node/src/chain.ts +++ b/packages/bitcore-node/src/chain.ts @@ -1,4 +1,4 @@ -module.exports = { +export const BitcoreLibs = { BTC: { lib: require('bitcore-lib'), p2p: require('bitcore-p2p'), diff --git a/packages/bitcore-node/src/models/block/eth/ethBlock.ts b/packages/bitcore-node/src/models/block/eth/ethBlock.ts index afa7769ea8b..3703184f20d 100644 --- a/packages/bitcore-node/src/models/block/eth/ethBlock.ts +++ b/packages/bitcore-node/src/models/block/eth/ethBlock.ts @@ -1,6 +1,5 @@ import logger from '../../../logger'; import BN from 'bn.js'; -import { BtcTransactionStorage } from '../.././transaction/btc/btcTransaction'; import { LoggifyClass } from '../../../decorators/Loggify'; import { IEthBlock } from '../../../types/Block'; import { EventStorage } from '../.././events'; @@ -85,7 +84,7 @@ export class EthBlockModel extends BlockModel { async getBlockOp(params: { block: Ethereum.Block; chain: string; network: string }) { const { block, chain, network } = params; const { header } = block; - const blockTime = new Date(header.timestamp.readUInt32BE(0) * 1000).getTime(); + const blockTime = Number.parseInt(header.timestamp.toString('hex') || '0', 16) * 1000; const prevHash = header.parentHash.toString('hex'); const previousBlock = await this.collection.findOne({ hash: prevHash, chain, network }); @@ -99,20 +98,19 @@ export class EthBlockModel extends BlockModel { } })(); - const height = (previousBlock && previousBlock.height + 1) || 1; + const height = new BN(header.number).toNumber(); logger.debug('Setting blockheight', height); - + const hash = block.header.hash().toString('hex'); const convertedBlock = { chain, network, - height: new BN(header.number).toNumber(), - hash: block.header.hash().toString('hex'), + height, + hash, version: 1, merkleRoot: block.header.transactionsTrie.toString('hex'), - time: new Date(header.timestamp.readUInt32BE(0) * 1000), - timeNormalized: new Date(header.timestamp.readUInt32BE(0) * 1000), - nonce: Number(header.nonce.toString('hex')), - blockTimeNormalized, + time: new Date(blockTime), + nonce: header.nonce.toString('hex'), + timeNormalized: new Date(blockTimeNormalized), previousBlockHash: header.parentHash.toString('hex'), nextBlockHash: '', transactionCount: block.transactions.length, @@ -127,7 +125,7 @@ export class EthBlockModel extends BlockModel { return { updateOne: { filter: { - hash: header.hash, + hash, chain, network }, @@ -143,7 +141,7 @@ export class EthBlockModel extends BlockModel { const { header, chain, network } = params; const prevHash = header.parentHash.toString('hex'); let localTip = await this.getLocalTip(params); - if (header && localTip && localTip.hash === prevHash) { + if (header != null && localTip != null && localTip.hash === prevHash) { return false; } if (!localTip || localTip.height === 0) { @@ -159,13 +157,13 @@ export class EthBlockModel extends BlockModel { logger.info(`Resetting tip to ${localTip.height - 1}`, { chain, network }); } const reorgOps = [ - this.collection.deleteMany({ chain, network, height: { $gte: localTip.height } }), - BtcTransactionStorage.collection.deleteMany({ chain, network, blockHeight: { $gte: localTip.height } }) + this.collection.deleteMany({ chain, network, height: { $gt: localTip.height } }), + EthTransactionStorage.collection.deleteMany({ chain, network, blockHeight: { $gt: localTip.height } }) ]; await Promise.all(reorgOps); logger.debug('Removed data from above blockHeight: ', localTip.height); - return true; + return localTip.hash !== prevHash; } } diff --git a/packages/bitcore-node/src/models/transaction/btc/btcTransaction.ts b/packages/bitcore-node/src/models/transaction/btc/btcTransaction.ts index f6326d08bf4..bb0d0818e10 100644 --- a/packages/bitcore-node/src/models/transaction/btc/btcTransaction.ts +++ b/packages/bitcore-node/src/models/transaction/btc/btcTransaction.ts @@ -15,9 +15,7 @@ import { EventStorage } from '../.././events'; import * as lodash from 'lodash'; import logger from '../../../logger'; import { TransactionModel } from "../base/base"; - -const Chain = require('../chain'); - +import { BitcoreLibs } from "../../../chain"; export type MintOp = { updateOne: { @@ -331,8 +329,8 @@ export class BtcTransactionModel extends TransactionModel { if (output.script) { address = output.script.toAddress(network).toString(true); if (address === 'false' && output.script.classify() === 'Pay to public key') { - let hash = Chain[chain].lib.crypto.Hash.sha256ripemd160(output.script.chunks[0].buf); - address = Chain[chain].lib.Address(hash, network).toString(true); + let hash = BitcoreLibs[chain].lib.crypto.Hash.sha256ripemd160(output.script.chunks[0].buf); + address = BitcoreLibs[chain].lib.Address(hash, network).toString(true); } } mintOps.push({ diff --git a/packages/bitcore-node/src/models/transaction/eth/ethTransaction.ts b/packages/bitcore-node/src/models/transaction/eth/ethTransaction.ts index aabd6914b48..29ee1047330 100644 --- a/packages/bitcore-node/src/models/transaction/eth/ethTransaction.ts +++ b/packages/bitcore-node/src/models/transaction/eth/ethTransaction.ts @@ -12,6 +12,7 @@ import { Config } from '../../../services/config'; import { EventStorage } from '../.././events'; import { WalletAddressStorage } from '../../walletAddress'; import { TransactionModel } from '../base/base'; +import { ObjectID } from 'bson'; @LoggifyClass export class EthTransactionModel extends TransactionModel { @@ -88,7 +89,7 @@ export class EthTransactionModel extends TransactionModel { fee: parentTx.fee, size: parentTx.size, value: parentTx.value, - wallets: [], + wallets: new Array(), gasLimit: parentTx.gasLimit, gasPrice: parentTx.gasPrice, nonce: parentTx.nonce @@ -125,9 +126,11 @@ export class EthTransactionModel extends TransactionModel { size: tx.data.length, value: Number.parseInt(tx.value.toString('hex'), 16) || 0, wallets, - gasLimit: tx.gasLimit.toString('hex'), - gasPrice: tx.gasPrice.toString('hex'), - nonce: tx.nonce.toString('hex') + to, + from, + gasLimit: Number.parseInt(tx.gasLimit.toString('hex'), 16), + gasPrice: Number.parseInt(tx.gasPrice.toString('hex'), 16), + nonce: Number.parseInt(tx.nonce.toString('hex'), 16) } }, upsert: true, @@ -188,9 +191,9 @@ export class EthTransactionModel extends TransactionModel { size: tx.size || -1, fee: tx.fee || -1, value: tx.value || -1, - gasLimit: tx.gasLimit || '', - gasPrice: tx.gasPrice || '', - nonce: tx.nonce || '' + gasLimit: tx.gasLimit || -1, + gasPrice: tx.gasPrice || -1, + nonce: tx.nonce || 0 }; if (options && options.object) { return transaction; diff --git a/packages/bitcore-node/src/providers/chain-state/eth/eth.ts b/packages/bitcore-node/src/providers/chain-state/eth/eth.ts index ed19ec6db76..55e28b678de 100644 --- a/packages/bitcore-node/src/providers/chain-state/eth/eth.ts +++ b/packages/bitcore-node/src/providers/chain-state/eth/eth.ts @@ -4,9 +4,6 @@ import { CSP } from '../../../types/namespaces/ChainStateProvider'; import { InternalStateProvider } from '../internal/internal'; import { ObjectID } from 'mongodb'; import Web3 from 'web3'; -import { Storage } from '../../../services/storage'; -import { Readable } from 'stream'; -import { ParityRPC, ParityTraceResponse } from './parityRpc'; export class ETHStateProvider extends InternalStateProvider implements CSP.IChainStateService { config: any; @@ -39,59 +36,6 @@ export class ETHStateProvider extends InternalStateProvider implements CSP.IChai return { confirmed: balance, unconfirmed: 0, balance }; } - async getBlock(params: CSP.GetBlockParams) { - const { network, blockId } = params; - return this.getWeb3(network).eth.getBlock(Number(blockId)) as any; - } - - async streamBlocks(params: CSP.StreamBlocksParams) { - const { network, blockId } = params; - - const web3 = this.getWeb3(network); - - return new Promise>(resolve => - web3.eth.currentProvider.send( - { - method: 'trace_block', - params: [web3.utils.toHex(parseInt(blockId!))], - jsonrpc: '2.0', - id: 0 - }, - (_, data) => resolve(data.result) - ) - ); - } - - async getTransaction(params: CSP.StreamTransactionParams) { - const { network, txId } = params; - const transaction = await this.getWeb3(network).eth.getTransaction(txId); - return transaction as any; - } - - async streamWalletTransactions(params: CSP.StreamWalletTransactionsParams) { - const { network, wallet, req, res } = params; - - const web3 = this.getWeb3(network); - const addresses = await this.getWalletAddresses(wallet._id!); - - Storage.stream( - new Readable({ - objectMode: true, - read: async function() { - for (const walletAddress of addresses) { - const transactions = await new ParityRPC(web3).getTransactionsForAddress(100000, walletAddress.address); - for await (const tx of transactions) { - this.push(tx); - } - } - this.push(null); - } - }), - req, - res - ); - } - async broadcastTransaction(params: CSP.BroadcastTransactionParams) { const { network, rawTx } = params; const tx = await this.getWeb3(network).eth.sendSignedTransaction(rawTx); diff --git a/packages/bitcore-node/src/services/p2p/btc/index.ts b/packages/bitcore-node/src/services/p2p/btc/index.ts index 06821ce7e3b..97c602f1983 100644 --- a/packages/bitcore-node/src/services/p2p/btc/index.ts +++ b/packages/bitcore-node/src/services/p2p/btc/index.ts @@ -1,4 +1,5 @@ import logger from '../../../logger'; +import os from 'os'; import { ChainStateProvider } from '../../../providers/chain-state'; import { BtcTransactionStorage } from '../../../models/transaction/btc/btcTransaction'; import { Bitcoin } from '../../../types/namespaces/Bitcoin'; @@ -7,9 +8,8 @@ import { SpentHeightIndicators } from '../../../types/Coin'; import { wait } from '../../../utils/wait'; import { EventEmitter } from 'events'; import { BtcBlockStorage, BtcBlockModel } from '../../../models/block/btc/btcBlock'; -import os from 'os'; +import { BitcoreLibs } from '../../../chain'; -const Chain = require('../chain'); export class BitcoreP2pWorker { private chain: string; private network: string; @@ -31,8 +31,8 @@ export class BitcoreP2pWorker { this.blockModel = blockModel; this.chain = chain; this.network = network; - this.bitcoreLib = Chain[this.chain].lib; - this.bitcoreP2p = Chain[this.chain].p2p; + this.bitcoreLib = BitcoreLibs[this.chain].lib; + this.bitcoreP2p = BitcoreLibs[this.chain].p2p; this.chainConfig = chainConfig; this.events = new EventEmitter(); this.isSyncing = false; diff --git a/packages/bitcore-node/src/services/p2p/eth/index.ts b/packages/bitcore-node/src/services/p2p/eth/index.ts index 7c85516e969..8f395ae4a3e 100644 --- a/packages/bitcore-node/src/services/p2p/eth/index.ts +++ b/packages/bitcore-node/src/services/p2p/eth/index.ts @@ -22,7 +22,7 @@ export class EthP2pWorker { private txModel: EthTransactionModel; constructor({ chain, network, chainConfig, blockModel = EthBlockStorage, txModel = EthTransactionStorage }) { - this.eth = new BitcoreP2PEth(); + this.eth = new BitcoreP2PEth(network); this.chain = chain || 'ETH'; this.network = network; this.chainConfig = chainConfig; diff --git a/packages/bitcore-node/src/services/p2p/eth/p2p-lib.ts b/packages/bitcore-node/src/services/p2p/eth/p2p-lib.ts index 37ec4d4e268..ff2904981c8 100644 --- a/packages/bitcore-node/src/services/p2p/eth/p2p-lib.ts +++ b/packages/bitcore-node/src/services/p2p/eth/p2p-lib.ts @@ -1,5 +1,5 @@ import { EventEmitter } from 'events'; -import { Ethereum } from "../../../types/namespaces/Ethereum"; +import { Ethereum } from '../../../types/namespaces/Ethereum'; const devp2p = require('ethereumjs-devp2p'); const EthereumTx = require('ethereumjs-tx'); const EthereumBlock = require('ethereumjs-block'); @@ -32,11 +32,17 @@ const CHECK_BLOCK_NR = 4370000; const ETH = { NETWORKS: { - RINKEYBY: { + rinkeby: { networkId: CHAIN_ID, td: devp2p._util.int2buffer(1), // total difficulty in genesis block bestHash: Buffer.from('6341fd3daf94b748c72ced5a5b26028f2474f5f00d824504e4fa37a75767e177', 'hex'), genesisHash: Buffer.from('6341fd3daf94b748c72ced5a5b26028f2474f5f00d824504e4fa37a75767e177', 'hex') + }, + mainnet: { + networkId: 1, + td: devp2p._util.int2buffer(1), // total difficulty in genesis block + bestHash: Buffer.from('d4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3', 'hex'), + genesisHash: Buffer.from('d4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3', 'hex') } } }; @@ -69,11 +75,11 @@ export class BitcoreP2PEth extends EventEmitter { peers = {}; - constructor() { + constructor(network: 'rinkeby' | 'mainnet') { super(); // connect to local ethereum node (debug) - this.setupListeners(); + this.setupListeners(network); } connect() { @@ -90,7 +96,7 @@ export class BitcoreP2PEth extends EventEmitter { this.establishHeartbeat(); } - setupListeners() { + setupListeners(network) { this.rlpx.on('error', err => console.error(chalk.red(`RLPx error: ${err.stack || err}`))); this.rlpx.on('peer:added', peer => { @@ -104,7 +110,7 @@ export class BitcoreP2PEth extends EventEmitter { chalk.green(`Add peer: ${addr} ${clientId} (eth${eth.getVersion()}) (total: ${this.rlpx.getPeers().length})`) ); - eth.sendStatus(ETH.NETWORKS.RINKEYBY); + eth.sendStatus(ETH.NETWORKS[network]); eth.once('status', () => { eth.sendMessage(devp2p.ETH.MESSAGE_CODES.GET_BLOCK_HEADERS, [CHECK_BLOCK_NR, 1, 0, 0]); @@ -166,25 +172,18 @@ export class BitcoreP2PEth extends EventEmitter { case devp2p.ETH.MESSAGE_CODES.BLOCK_BODIES: console.log('MESSAGE:BLOCK_BODIES'); - let isValidPayload = false; while (requests.bodies.length > 0) { const header = requests.bodies.shift(); const block = new EthereumBlock([header.raw, payload[0][0], payload[0][1]]); const isValid = await this.isValidBlock(block); - if (isValid) { - isValidPayload = true; - this.emit(block.hash().toString('hex'), block); - this.onNewBlock(block, peer); - break; + if (!isValid) { + console.log(`${addr} received wrong block body`); + } + this.emit(block.hash().toString('hex'), block); + this.onNewBlock(block, peer); } - - if (!isValidPayload) { - console.log(`${addr} received wrong block body`); - } - break; - case devp2p.ETH.MESSAGE_CODES.NEW_BLOCK: console.log('MESSAGE:NEW_BLOCK'); const newBlock = new EthereumBlock(payload[0]); @@ -332,7 +331,7 @@ export class BitcoreP2PEth extends EventEmitter { getHeaders(bestHeight: number) { return new Promise(resolve => { const _getHeaders = () => { - const message = [bestHeight, 2000, 0, 0]; + const message = [bestHeight > 0 ? bestHeight + 1: bestHeight , 2000, 0, 0]; this.sendPoolMessage(devp2p.ETH.MESSAGE_CODES.GET_BLOCK_HEADERS, message); }; const headersRetry = setInterval(_getHeaders, 10000); @@ -350,7 +349,7 @@ export class BitcoreP2PEth extends EventEmitter { const _getBlock = () => { console.log('Getting block ', hashStr); if (this.blocksCache.has(hashStr)) { - this.emit(hashStr, this.blocksCache.get(hashStr)) + this.emit(hashStr, this.blocksCache.get(hashStr)); } else { requests.bodies.push(header); this.sendPoolMessage(devp2p.ETH.MESSAGE_CODES.GET_BLOCK_BODIES, [header.hash()]); diff --git a/packages/bitcore-node/src/types/Block.ts b/packages/bitcore-node/src/types/Block.ts index 328a74cb738..f39c06c1964 100644 --- a/packages/bitcore-node/src/types/Block.ts +++ b/packages/bitcore-node/src/types/Block.ts @@ -10,7 +10,7 @@ export type IBlock = { previousBlockHash: string; nextBlockHash: string; transactionCount: number; - nonce: number; + nonce: number | string; size: number; bits: number; reward: number; @@ -18,4 +18,6 @@ export type IBlock = { }; export type IBtcBlock = IBlock & {}; -export type IEthBlock = IBlock & {}; +export type IEthBlock = IBlock & { + nonce: string; +}; diff --git a/packages/bitcore-node/src/types/Transaction.ts b/packages/bitcore-node/src/types/Transaction.ts index ac9b7f24114..4d2379cca5f 100644 --- a/packages/bitcore-node/src/types/Transaction.ts +++ b/packages/bitcore-node/src/types/Transaction.ts @@ -21,9 +21,9 @@ export type IBtcTransaction = ITransaction & { }; export type IEthTransaction = ITransaction & { - gasLimit: string; - gasPrice: string; - nonce: string; + gasLimit: number; + gasPrice: number; + nonce: number; }; @@ -73,7 +73,7 @@ export type EthTransactionJSON = { fee: number; size: number; value: number; - gasLimit: string; - gasPrice: string; - nonce: string; + gasLimit: number; + gasPrice: number; + nonce: number; }; diff --git a/packages/bitcore-p2p-cash/package-lock.json b/packages/bitcore-p2p-cash/package-lock.json index 09cc8863b4b..83d84f5de9c 100644 --- a/packages/bitcore-p2p-cash/package-lock.json +++ b/packages/bitcore-p2p-cash/package-lock.json @@ -1,6 +1,6 @@ { "name": "bitcore-p2p-cash", - "version": "8.1.0", + "version": "8.1.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/bitcore-p2p/package-lock.json b/packages/bitcore-p2p/package-lock.json index 19af9acecb2..1ccf0710d7b 100644 --- a/packages/bitcore-p2p/package-lock.json +++ b/packages/bitcore-p2p/package-lock.json @@ -1,6 +1,6 @@ { "name": "bitcore-p2p", - "version": "8.1.0", + "version": "8.1.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/bitcore-payment-protocol/package-lock.json b/packages/bitcore-payment-protocol/package-lock.json index 3b2fdb48e55..399f64b2894 100644 --- a/packages/bitcore-payment-protocol/package-lock.json +++ b/packages/bitcore-payment-protocol/package-lock.json @@ -1,6 +1,6 @@ { "name": "bitcore-payment-protocol", - "version": "8.1.0", + "version": "8.1.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/bitcore-wallet-client/package-lock.json b/packages/bitcore-wallet-client/package-lock.json index 342647497e2..b91d613aa20 100644 --- a/packages/bitcore-wallet-client/package-lock.json +++ b/packages/bitcore-wallet-client/package-lock.json @@ -1,6 +1,6 @@ { "name": "bitcore-wallet-client", - "version": "8.1.0", + "version": "8.1.1", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -93,17 +93,6 @@ "integrity": "sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw==", "dev": true }, - "ajv": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", - "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", - "requires": { - "fast-deep-equal": "2.0.1", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.4.1", - "uri-js": "4.2.2" - } - }, "amdefine": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", @@ -144,14 +133,6 @@ "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", "dev": true }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "requires": { - "safer-buffer": "2.1.2" - } - }, "assert": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", @@ -181,7 +162,8 @@ "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true }, "assertion-error": { "version": "1.0.0", @@ -202,12 +184,14 @@ "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true }, "aws4": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", + "dev": true }, "balanced-match": { "version": "1.0.0", @@ -221,14 +205,6 @@ "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", "dev": true }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "requires": { - "tweetnacl": "0.14.5" - } - }, "bigi": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.2.tgz", @@ -500,7 +476,8 @@ "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true }, "chai": { "version": "1.10.0", @@ -713,14 +690,6 @@ "randomfill": "1.0.4" } }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "requires": { - "assert-plus": "1.0.0" - } - }, "date-now": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", @@ -833,15 +802,6 @@ "readable-stream": "2.3.6" } }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "requires": { - "jsbn": "0.1.1", - "safer-buffer": "2.1.2" - } - }, "ecurve": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/ecurve/-/ecurve-1.0.6.tgz", @@ -955,17 +915,8 @@ "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true }, "fast-levenshtein": { "version": "2.0.6", @@ -976,7 +927,8 @@ "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true }, "form-data": { "version": "2.3.3", @@ -1011,14 +963,6 @@ "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==", "dev": true }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "requires": { - "assert-plus": "1.0.0" - } - }, "glob": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", @@ -1071,14 +1015,15 @@ "har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true }, "har-validator": { "version": "5.1.3", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "dev": true, "requires": { - "ajv": "6.6.1", "har-schema": "2.0.0" } }, @@ -1143,10 +1088,10 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, "requires": { "assert-plus": "1.0.0", - "jsprim": "1.4.1", - "sshpk": "1.15.2" + "jsprim": "1.4.1" } }, "https-browserify": { @@ -1232,7 +1177,8 @@ "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true }, "isarray": { "version": "1.0.0", @@ -1248,7 +1194,8 @@ "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true }, "istanbul": { "version": "0.4.5", @@ -1330,20 +1277,11 @@ "esprima": "4.0.1" } }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - }, "json-schema": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true }, "json-stable-stringify": { "version": "1.0.1", @@ -1356,7 +1294,8 @@ "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true }, "jsonify": { "version": "0.0.0", @@ -1373,6 +1312,7 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, "requires": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", @@ -1717,7 +1657,8 @@ "oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true }, "once": { "version": "1.4.0", @@ -1846,7 +1787,8 @@ "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true }, "preconditions": { "version": "2.2.1", @@ -1881,11 +1823,6 @@ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" }, - "psl": { - "version": "1.1.31", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", - "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==" - }, "public-encrypt": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", @@ -1900,11 +1837,6 @@ "safe-buffer": "5.1.2" } }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, "qs": { "version": "6.6.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.6.0.tgz", @@ -1968,6 +1900,7 @@ "version": "2.88.0", "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "dev": true, "requires": { "aws-sign2": "0.7.0", "aws4": "1.8.0", @@ -1994,12 +1927,14 @@ "qs": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true }, "uuid": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "dev": true } } }, @@ -2042,11 +1977,6 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, "scryptsy": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/scryptsy/-/scryptsy-1.2.1.tgz", @@ -2151,22 +2081,6 @@ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "requires": { - "asn1": "0.2.4", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.2", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.2", - "getpass": "0.1.7", - "jsbn": "0.1.1", - "safer-buffer": "2.1.2", - "tweetnacl": "0.14.5" - } - }, "stream-browserify": { "version": "2.0.1", "resolved": "http://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", @@ -2321,15 +2235,16 @@ "version": "2.4.3", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "dev": true, "requires": { - "psl": "1.1.29", "punycode": "1.4.1" }, "dependencies": { "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true } } }, @@ -2343,15 +2258,11 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, "requires": { "safe-buffer": "5.1.2" } }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" - }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", @@ -2418,14 +2329,6 @@ "xtend": "4.0.1" } }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "requires": { - "punycode": "2.1.1" - } - }, "url": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", @@ -2468,6 +2371,7 @@ "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, "requires": { "assert-plus": "1.0.0", "core-util-is": "1.0.2", diff --git a/packages/bitcore-wallet-service/package-lock.json b/packages/bitcore-wallet-service/package-lock.json index 24b0e1b5eeb..40ec5368e7e 100644 --- a/packages/bitcore-wallet-service/package-lock.json +++ b/packages/bitcore-wallet-service/package-lock.json @@ -1,6 +1,6 @@ { "name": "bitcore-wallet-service", - "version": "8.1.0", + "version": "8.1.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/bitcore-wallet-ui/package-lock.json b/packages/bitcore-wallet-ui/package-lock.json index b394472c27a..ef5a41200de 100644 --- a/packages/bitcore-wallet-ui/package-lock.json +++ b/packages/bitcore-wallet-ui/package-lock.json @@ -1,6 +1,6 @@ { "name": "bitcore-wallet-ui", - "version": "8.1.0", + "version": "8.1.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/bitcore-wallet/package-lock.json b/packages/bitcore-wallet/package-lock.json index f02783b5e6d..48140d92949 100644 --- a/packages/bitcore-wallet/package-lock.json +++ b/packages/bitcore-wallet/package-lock.json @@ -1,6 +1,6 @@ { "name": "bitcore-wallet", - "version": "8.1.0", + "version": "8.1.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/crypto-wallet-core/package-lock.json b/packages/crypto-wallet-core/package-lock.json index cc8b2585422..dfa00c02730 100644 --- a/packages/crypto-wallet-core/package-lock.json +++ b/packages/crypto-wallet-core/package-lock.json @@ -1,6 +1,6 @@ { "name": "crypto-wallet-core", - "version": "8.1.0", + "version": "8.1.1", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -132,14 +132,6 @@ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, - "base-x": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.5.tgz", - "integrity": "sha512-C3picSgzPSLE+jW3tcBzJoGwitOtazb5B+5YmAxZm2ybmTi9LNgAtDO/jjVEBZwHoXmDBZ9m/IELj3elJVRBcA==", - "requires": { - "safe-buffer": "5.1.2" - } - }, "base64-js": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", @@ -174,65 +166,6 @@ "safe-buffer": "5.1.2" } }, - "bitcore-lib": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/bitcore-lib/-/bitcore-lib-8.1.0.tgz", - "integrity": "sha512-7aQYgduwnCYRXY7FHTQIVnDwY/5s112kwUzXWy6Yg88CVo5oUKsYfOqy9ESh/zFnOwKEXTc1NMRB87K1xhoF9w==", - "requires": { - "bn.js": "4.11.8", - "bs58": "4.0.1", - "buffer-compare": "1.1.1", - "elliptic": "6.4.0", - "inherits": "2.0.1", - "lodash": "4.17.11" - }, - "dependencies": { - "elliptic": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", - "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", - "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0", - "hash.js": "1.1.7", - "hmac-drbg": "1.0.1", - "inherits": "2.0.1", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" - } - } - } - }, - "bitcore-lib-cash": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/bitcore-lib-cash/-/bitcore-lib-cash-8.1.0.tgz", - "integrity": "sha512-tL2TiK+O77X50/4/xWblRLaIOOkN807FKDuJWCT073Yk/3O2wWrCPdBPG3ht3SxYWgSsv6r1Ys0O7pMm5ZoafQ==", - "requires": { - "bitcore-lib": "8.1.0", - "bn.js": "4.11.8", - "bs58": "4.0.1", - "buffer-compare": "1.1.1", - "elliptic": "6.4.0", - "inherits": "2.0.1", - "lodash": "4.17.11" - }, - "dependencies": { - "elliptic": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", - "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", - "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0", - "hash.js": "1.1.7", - "hmac-drbg": "1.0.1", - "inherits": "2.0.1", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" - } - } - } - }, "bl": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", @@ -350,14 +283,6 @@ "parse-asn1": "5.1.4" } }, - "bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", - "requires": { - "base-x": "3.0.5" - } - }, "buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", @@ -381,11 +306,6 @@ "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" }, - "buffer-compare": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-compare/-/buffer-compare-1.1.1.tgz", - "integrity": "sha1-W+e+hTr4kZjR9N3AkNHWakiu9ZY=" - }, "buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", diff --git a/packages/insight-previous/package-lock.json b/packages/insight-previous/package-lock.json index a6f9629764d..a4ec1d76b38 100644 --- a/packages/insight-previous/package-lock.json +++ b/packages/insight-previous/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bitpay/insight-previous", - "version": "8.1.0", + "version": "8.1.1", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -1486,6 +1486,14 @@ } } }, + "base-x": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.5.tgz", + "integrity": "sha512-C3picSgzPSLE+jW3tcBzJoGwitOtazb5B+5YmAxZm2ybmTi9LNgAtDO/jjVEBZwHoXmDBZ9m/IELj3elJVRBcA==", + "requires": { + "safe-buffer": "5.1.1" + } + }, "base64-arraybuffer": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", @@ -1849,6 +1857,14 @@ "pako": "1.0.6" } }, + "bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", + "requires": { + "base-x": "3.0.5" + } + }, "buffer": { "version": "4.9.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", @@ -9539,8 +9555,7 @@ "safe-buffer": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", - "dev": true + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" }, "safe-json-parse": { "version": "1.0.1", diff --git a/packages/insight-previous/package.json b/packages/insight-previous/package.json index 6d9874b3984..48ead8321bb 100644 --- a/packages/insight-previous/package.json +++ b/packages/insight-previous/package.json @@ -49,6 +49,7 @@ "angular2-qrcode": "2.0.1", "bitcore-lib": "^8.1.1", "bitcore-lib-cash": "^8.1.1", + "bs58": "^4.0.1", "ionic-angular": "3.9.2", "ionicons": "3.0.0", "lodash": "4.17.11", diff --git a/packages/insight/package-lock.json b/packages/insight/package-lock.json index 61d891f2f72..8f7cdfd9898 100644 --- a/packages/insight/package-lock.json +++ b/packages/insight/package-lock.json @@ -1,6 +1,6 @@ { "name": "@bitpay/insight", - "version": "8.1.0", + "version": "8.1.1", "lockfileVersion": 1, "requires": true, "dependencies": { From 8d72105542ef52d65c455e39496cd30712f1ac72 Mon Sep 17 00:00:00 2001 From: Micah Riggan Date: Fri, 22 Mar 2019 11:54:21 -0400 Subject: [PATCH 03/40] refactored to use IEthTransaction and IEthBlock on the models, to reduce repeat work --- .../src/models/block/eth/ethBlock.ts | 63 +++++-------- .../src/models/transaction/base/base.ts | 1 - .../models/transaction/eth/ethTransaction.ts | 52 +++-------- .../src/services/p2p/eth/index.ts | 89 +++++++++++++++++-- .../src/services/p2p/eth/p2p-lib.ts | 4 +- packages/bitcore-node/src/types/Block.ts | 3 + .../bitcore-node/src/types/Transaction.ts | 9 +- 7 files changed, 126 insertions(+), 95 deletions(-) diff --git a/packages/bitcore-node/src/models/block/eth/ethBlock.ts b/packages/bitcore-node/src/models/block/eth/ethBlock.ts index 3703184f20d..417aa01e73d 100644 --- a/packages/bitcore-node/src/models/block/eth/ethBlock.ts +++ b/packages/bitcore-node/src/models/block/eth/ethBlock.ts @@ -1,12 +1,11 @@ import logger from '../../../logger'; -import BN from 'bn.js'; import { LoggifyClass } from '../../../decorators/Loggify'; import { IEthBlock } from '../../../types/Block'; import { EventStorage } from '../.././events'; import { StorageService } from '../../../services/storage'; -import { Ethereum } from '../../../types/namespaces/Ethereum'; import { EthTransactionStorage } from '../../transaction/eth/ethTransaction'; import { BlockModel } from '../base/base'; +import { IEthTransaction } from '../../../types/Transaction'; @LoggifyClass export class EthBlockModel extends BlockModel { @@ -19,7 +18,8 @@ export class EthBlockModel extends BlockModel { } async addBlock(params: { - block: Ethereum.Block; + block: IEthBlock; + transactions: IEthTransaction[]; parentChain?: string; forkHeight?: number; initialSyncComplete: boolean; @@ -27,9 +27,8 @@ export class EthBlockModel extends BlockModel { network: string; }) { const { block, chain, network } = params; - const header = block.header; - const reorg = await this.handleReorg({ header, chain, network }); + const reorg = await this.handleReorg({ block, chain, network }); if (reorg) { return Promise.reject('reorg'); @@ -38,14 +37,15 @@ export class EthBlockModel extends BlockModel { } async processBlock(params: { - block: Ethereum.Block; + block: IEthBlock; + transactions: IEthTransaction[]; parentChain?: string; forkHeight?: number; initialSyncComplete: boolean; chain: string; network: string; }) { - const { chain, network, block, parentChain, forkHeight, initialSyncComplete } = params; + const { chain, network, transactions, parentChain, forkHeight, initialSyncComplete } = params; const blockOp = await this.getBlockOp(params); const convertedBlock = blockOp.updateOne.update.$set; const { height, timeNormalized, time } = convertedBlock; @@ -62,7 +62,7 @@ export class EthBlockModel extends BlockModel { } await EthTransactionStorage.batchImport({ - txs: block.transactions, + txs: transactions, blockHash: convertedBlock.hash, blockTime: new Date(time), blockTimeNormalized: new Date(timeNormalized), @@ -81,73 +81,50 @@ export class EthBlockModel extends BlockModel { await this.collection.updateOne({ hash: convertedBlock.hash, chain, network }, { $set: { processed: true } }); } - async getBlockOp(params: { block: Ethereum.Block; chain: string; network: string }) { + async getBlockOp(params: { block: IEthBlock; chain: string; network: string }) { const { block, chain, network } = params; - const { header } = block; - const blockTime = Number.parseInt(header.timestamp.toString('hex') || '0', 16) * 1000; - const prevHash = header.parentHash.toString('hex'); + const blockTime = block.time; + const prevHash = block.previousBlockHash; const previousBlock = await this.collection.findOne({ hash: prevHash, chain, network }); const blockTimeNormalized = (() => { const prevTime = previousBlock ? previousBlock.timeNormalized : null; - if (prevTime && blockTime <= prevTime.getTime()) { + if (prevTime && blockTime.getTime() <= prevTime.getTime()) { return prevTime.getTime() + 1; } else { return blockTime; } })(); - const height = new BN(header.number).toNumber(); + const height = block.height; logger.debug('Setting blockheight', height); - const hash = block.header.hash().toString('hex'); - const convertedBlock = { - chain, - network, - height, - hash, - version: 1, - merkleRoot: block.header.transactionsTrie.toString('hex'), - time: new Date(blockTime), - nonce: header.nonce.toString('hex'), - timeNormalized: new Date(blockTimeNormalized), - previousBlockHash: header.parentHash.toString('hex'), - nextBlockHash: '', - transactionCount: block.transactions.length, - size: block.raw.length, - reward: 3, - processed: false, - bits: 0, - gasLimit: Number.parseInt(header.gasLimit.toString('hex'), 16) || 0, - gasUsed: Number.parseInt(header.gasUsed.toString('hex'), 16) || 0, - stateRoot: header.stateRoot - }; return { updateOne: { filter: { - hash, + hash: block.hash, chain, network }, update: { - $set: convertedBlock + $set: { ...block, blockTimeNormalized } }, upsert: true } }; } - async handleReorg(params: { header: Ethereum.Header; chain: string; network: string }): Promise { - const { header, chain, network } = params; - const prevHash = header.parentHash.toString('hex'); + async handleReorg(params: { block: IEthBlock; chain: string; network: string }): Promise { + const { block, chain, network } = params; + const prevHash = block.previousBlockHash; let localTip = await this.getLocalTip(params); - if (header != null && localTip != null && localTip.hash === prevHash) { + if (block != null && localTip != null && localTip.hash === prevHash) { return false; } if (!localTip || localTip.height === 0) { return false; } - if (header) { + if (block) { const prevBlock = await this.collection.findOne({ chain, network, hash: prevHash }); if (prevBlock) { localTip = prevBlock; diff --git a/packages/bitcore-node/src/models/transaction/base/base.ts b/packages/bitcore-node/src/models/transaction/base/base.ts index a423efd160f..4abc7b8e617 100644 --- a/packages/bitcore-node/src/models/transaction/base/base.ts +++ b/packages/bitcore-node/src/models/transaction/base/base.ts @@ -40,7 +40,6 @@ export class TransactionModel extends BaseModel { blockHash: tx.blockHash || '', blockTime: tx.blockTime ? tx.blockTime.toISOString() : '', blockTimeNormalized: tx.blockTimeNormalized ? tx.blockTimeNormalized.toISOString() : '', - coinbase: tx.coinbase || false, size: tx.size || -1, fee: tx.fee || -1, value: tx.value || -1 diff --git a/packages/bitcore-node/src/models/transaction/eth/ethTransaction.ts b/packages/bitcore-node/src/models/transaction/eth/ethTransaction.ts index 29ee1047330..7f9b54a671f 100644 --- a/packages/bitcore-node/src/models/transaction/eth/ethTransaction.ts +++ b/packages/bitcore-node/src/models/transaction/eth/ethTransaction.ts @@ -1,6 +1,5 @@ import logger from '../../../logger'; import * as _ from 'lodash'; -import { Ethereum } from '../../../types/namespaces/Ethereum'; import { partition } from '../../../utils/partition'; import { TransformOptions } from '../../../types/TransformOptions'; import { LoggifyClass } from '../../../decorators/Loggify'; @@ -25,7 +24,7 @@ export class EthTransactionModel extends TransactionModel { } async batchImport(params: { - txs: Array; + txs: Array; height: number; mempoolTime?: Date; blockTime?: Date; @@ -57,7 +56,7 @@ export class EthTransactionModel extends TransactionModel { } async addTransactions(params: { - txs: Array; + txs: Array; height: number; blockTime?: Date; blockHash?: string; @@ -69,7 +68,7 @@ export class EthTransactionModel extends TransactionModel { network: string; mempoolTime?: Date; }) { - let { blockHash, blockTime, blockTimeNormalized, chain, height, network, parentChain, forkHeight } = params; + let { blockTimeNormalized, chain, height, network, parentChain, forkHeight } = params; if (parentChain && forkHeight && height < forkHeight) { const parentTxs = await EthTransactionStorage.collection .find({ blockHeight: height, chain: parentChain, network }) @@ -80,19 +79,8 @@ export class EthTransactionModel extends TransactionModel { filter: { txid: parentTx.txid, chain, network }, update: { $set: { - chain, - network, - blockHeight: height, - blockHash, - blockTime, - blockTimeNormalized, - fee: parentTx.fee, - size: parentTx.size, - value: parentTx.value, - wallets: new Array(), - gasLimit: parentTx.gasLimit, - gasPrice: parentTx.gasPrice, - nonce: parentTx.nonce + ...parentTx, + wallets: new Array() } }, upsert: true, @@ -102,11 +90,8 @@ export class EthTransactionModel extends TransactionModel { }); } else { return Promise.all( - params.txs.map(async tx => { - const txid = tx.hash().toString('hex'); - const to = '0x' + tx.to.toString('hex'); - const from = '0x' + tx.from.toString('hex'); - let fee = Number(tx.getUpfrontCost().toString()); + params.txs.map(async (tx: IEthTransaction) => { + const { to, txid, from } = tx; const sentWallets = await WalletAddressStorage.collection.find({ chain, network, address: from }).toArray(); const receivedWallets = await WalletAddressStorage.collection.find({ chain, network, address: to }).toArray(); const wallets = _.uniqBy(sentWallets.concat(receivedWallets).map(w => w.wallet), w => w.toHexString()); @@ -116,21 +101,9 @@ export class EthTransactionModel extends TransactionModel { filter: { txid, chain, network }, update: { $set: { - chain, - network, - blockHeight: height, - blockHash, - blockTime, + ...tx, blockTimeNormalized, - fee, - size: tx.data.length, - value: Number.parseInt(tx.value.toString('hex'), 16) || 0, - wallets, - to, - from, - gasLimit: Number.parseInt(tx.gasLimit.toString('hex'), 16), - gasPrice: Number.parseInt(tx.gasPrice.toString('hex'), 16), - nonce: Number.parseInt(tx.nonce.toString('hex'), 16) + wallets } }, upsert: true, @@ -143,7 +116,7 @@ export class EthTransactionModel extends TransactionModel { } async pruneMempool(params: { - txs: Array; + txs: Array; height: number; parentChain?: string; forkHeight?: number; @@ -187,13 +160,14 @@ export class EthTransactionModel extends TransactionModel { blockHash: tx.blockHash || '', blockTime: tx.blockTime ? tx.blockTime.toISOString() : '', blockTimeNormalized: tx.blockTimeNormalized ? tx.blockTimeNormalized.toISOString() : '', - coinbase: tx.coinbase || false, size: tx.size || -1, fee: tx.fee || -1, value: tx.value || -1, gasLimit: tx.gasLimit || -1, gasPrice: tx.gasPrice || -1, - nonce: tx.nonce || 0 + nonce: tx.nonce || 0, + to: tx.to || '', + from: tx.from || '' }; if (options && options.object) { return transaction; diff --git a/packages/bitcore-node/src/services/p2p/eth/index.ts b/packages/bitcore-node/src/services/p2p/eth/index.ts index 8f395ae4a3e..4f26ddbb818 100644 --- a/packages/bitcore-node/src/services/p2p/eth/index.ts +++ b/packages/bitcore-node/src/services/p2p/eth/index.ts @@ -6,6 +6,9 @@ import { StateStorage } from '../../../models/state'; import { Ethereum } from '../../../types/namespaces/Ethereum'; import { EthTransactionStorage, EthTransactionModel } from '../../../models/transaction/eth/ethTransaction'; import { BitcoreP2PEth } from './p2p-lib'; +import { IEthBlock } from '../../../types/Block'; +import BN from 'bn.js'; +import { IEthTransaction } from '../../../types/Transaction'; const LRU = require('lru-cache'); export class EthP2pWorker { @@ -81,7 +84,8 @@ export class EthP2pWorker { this.events.emit(hash, message.block); if (!this.syncing) { try { - await this.processBlock(block); + const { convertedTxs, convertedBlock } = this.convertBlock(block); + await this.processBlock(convertedBlock, convertedTxs); this.events.emit('block', message.block); } catch (err) { logger.error(`Error syncing ${chain} ${network}`, err); @@ -130,9 +134,9 @@ export class EthP2pWorker { return this.eth.getBlock(header); } - async processBlock(block): Promise { - if (block.transactions.length > 1) { - console.log('Block has ', block.transactions.length, 'transactions'); + async processBlock(block: IEthBlock, transactions: IEthTransaction[]): Promise { + if (transactions.length > 1) { + console.log('Block has ', transactions.length, 'transactions'); } await this.blockModel.addBlock({ chain: this.chain, @@ -140,7 +144,8 @@ export class EthP2pWorker { forkHeight: this.chainConfig.forkHeight, parentChain: this.chainConfig.parentChain, initialSyncComplete: this.initialSyncComplete, - block + block, + transactions }); if (!this.syncing) { logger.info(`Added block ${block.hash}`, { @@ -152,10 +157,11 @@ export class EthP2pWorker { async processTransaction(tx: Ethereum.Transaction) { const now = new Date(); + const convertedTx = this.convertTx(tx); this.txModel.batchImport({ chain: this.chain, network: this.network, - txs: [tx], + txs: [convertedTx], height: -1, mempoolTime: now, blockTime: now, @@ -199,7 +205,8 @@ export class EthP2pWorker { const hash = header.hash(); const hashStr = hash.toString('hex'); const block = await this.getBlock(header); - await this.processBlock(block); + const { convertedBlock, convertedTxs } = this.convertBlock(block); + await this.processBlock(convertedBlock, convertedTxs); currentHeight++; if (Date.now() - lastLog > 100) { logger.info(`Sync `, { @@ -226,6 +233,74 @@ export class EthP2pWorker { return true; } + convertBlock(block: Ethereum.Block) { + const { header } = block; + const blockTime = Number.parseInt(header.timestamp.toString('hex') || '0', 16) * 1000; + const hash = block.header.hash().toString('hex'); + const height = new BN(header.number).toNumber(); + const convertedBlock: IEthBlock = { + chain: this.chain, + network: this.network, + height, + hash, + version: 1, + merkleRoot: block.header.transactionsTrie.toString('hex'), + time: new Date(blockTime), + timeNormalized: new Date(blockTime), + nonce: header.nonce.toString('hex'), + previousBlockHash: header.parentHash.toString('hex'), + nextBlockHash: '', + transactionCount: block.transactions.length, + size: block.raw.length, + reward: 3, + processed: false, + bits: 0, + gasLimit: Number.parseInt(header.gasLimit.toString('hex'), 16) || 0, + gasUsed: Number.parseInt(header.gasUsed.toString('hex'), 16) || 0, + stateRoot: header.stateRoot + }; + const convertedTxs = block.transactions.map(t => this.convertTx(t, convertedBlock)); + return { convertedBlock, convertedTxs }; + } + + convertTx(tx: Ethereum.Transaction, block?: IEthBlock): IEthTransaction { + if (!block) { + const txid = tx.hash().toString('hex'); + const to = '0x' + tx.to.toString('hex'); + const from = '0x' + tx.from.toString('hex'); + const fee = Number(tx.getUpfrontCost().toString()); + return { + chain: this.chain, + network: this.network, + blockHeight: -1, + data: '0x' +tx.data.toString('hex'), + txid, + blockHash: undefined, + blockTime: new Date(), + blockTimeNormalized: new Date(), + fee, + size: tx.data.length, + value: Number.parseInt(tx.value.toString('hex'), 16) || 0, + wallets: [], + to, + from, + gasLimit: Number.parseInt(tx.gasLimit.toString('hex'), 16), + gasPrice: Number.parseInt(tx.gasPrice.toString('hex'), 16), + nonce: Number.parseInt(tx.nonce.toString('hex'), 16) + }; + } else { + const { hash: blockHash, time: blockTime, timeNormalized: blockTimeNormalized, height } = block; + const noBlockTx = this.convertTx(tx); + return { + ...noBlockTx, + blockHeight: height, + blockHash, + blockTime, + blockTimeNormalized + }; + } + } + async start() { logger.debug(`Started worker for chain ${this.chain}`); this.setupListeners(); diff --git a/packages/bitcore-node/src/services/p2p/eth/p2p-lib.ts b/packages/bitcore-node/src/services/p2p/eth/p2p-lib.ts index ff2904981c8..8ca9715f7c6 100644 --- a/packages/bitcore-node/src/services/p2p/eth/p2p-lib.ts +++ b/packages/bitcore-node/src/services/p2p/eth/p2p-lib.ts @@ -178,7 +178,7 @@ export class BitcoreP2PEth extends EventEmitter { const isValid = await this.isValidBlock(block); if (!isValid) { console.log(`${addr} received wrong block body`); - + } this.emit(block.hash().toString('hex'), block); this.onNewBlock(block, peer); @@ -343,7 +343,7 @@ export class BitcoreP2PEth extends EventEmitter { }); } - getBlock(header: Ethereum.Header): Promise { + getBlock(header: Ethereum.Header): Promise { const hashStr = header.hash().toString('hex'); return new Promise(resolve => { const _getBlock = () => { diff --git a/packages/bitcore-node/src/types/Block.ts b/packages/bitcore-node/src/types/Block.ts index f39c06c1964..84aea5cffab 100644 --- a/packages/bitcore-node/src/types/Block.ts +++ b/packages/bitcore-node/src/types/Block.ts @@ -20,4 +20,7 @@ export type IBlock = { export type IBtcBlock = IBlock & {}; export type IEthBlock = IBlock & { nonce: string; + gasLimit: number; + gasUsed: number; + stateRoot: Buffer; }; diff --git a/packages/bitcore-node/src/types/Transaction.ts b/packages/bitcore-node/src/types/Transaction.ts index 4d2379cca5f..0a86f887632 100644 --- a/packages/bitcore-node/src/types/Transaction.ts +++ b/packages/bitcore-node/src/types/Transaction.ts @@ -7,7 +7,6 @@ export type ITransaction = { blockHash?: string; blockTime?: Date; blockTimeNormalized?: Date; - coinbase: boolean; fee: number; size: number; value: number; @@ -18,12 +17,16 @@ export type IBtcTransaction = ITransaction & { locktime: number; inputCount: number; outputCount: number; + coinbase: boolean; }; export type IEthTransaction = ITransaction & { + data: string; gasLimit: number; gasPrice: number; nonce: number; + to: string; + from: string; }; @@ -36,7 +39,6 @@ export type TransactionJSON = { blockHash?: string; blockTime: string; blockTimeNormalized: string; - coinbase: boolean; fee: number; size: number; value: number; @@ -69,11 +71,12 @@ export type EthTransactionJSON = { blockHash: string; blockTime: string; blockTimeNormalized: string; - coinbase: boolean; fee: number; size: number; value: number; gasLimit: number; gasPrice: number; nonce: number; + to: string; + from: string; }; From 0e83e982ef8195226cd85f55f3fcdcee11a3ea71 Mon Sep 17 00:00:00 2001 From: Micah Riggan Date: Fri, 22 Mar 2019 13:25:10 -0400 Subject: [PATCH 04/40] Leave data as a buffer --- packages/bitcore-node/src/services/p2p/eth/index.ts | 4 ++-- packages/bitcore-node/src/types/Transaction.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/bitcore-node/src/services/p2p/eth/index.ts b/packages/bitcore-node/src/services/p2p/eth/index.ts index 4f26ddbb818..286dd169b34 100644 --- a/packages/bitcore-node/src/services/p2p/eth/index.ts +++ b/packages/bitcore-node/src/services/p2p/eth/index.ts @@ -273,7 +273,7 @@ export class EthP2pWorker { chain: this.chain, network: this.network, blockHeight: -1, - data: '0x' +tx.data.toString('hex'), + data: tx.data, txid, blockHash: undefined, blockTime: new Date(), @@ -286,7 +286,7 @@ export class EthP2pWorker { from, gasLimit: Number.parseInt(tx.gasLimit.toString('hex'), 16), gasPrice: Number.parseInt(tx.gasPrice.toString('hex'), 16), - nonce: Number.parseInt(tx.nonce.toString('hex'), 16) + nonce: Number.parseInt(tx.nonce.toString('hex') || '0', 16) }; } else { const { hash: blockHash, time: blockTime, timeNormalized: blockTimeNormalized, height } = block; diff --git a/packages/bitcore-node/src/types/Transaction.ts b/packages/bitcore-node/src/types/Transaction.ts index 0a86f887632..82a0fac5ffe 100644 --- a/packages/bitcore-node/src/types/Transaction.ts +++ b/packages/bitcore-node/src/types/Transaction.ts @@ -21,7 +21,7 @@ export type IBtcTransaction = ITransaction & { }; export type IEthTransaction = ITransaction & { - data: string; + data: Buffer; gasLimit: number; gasPrice: number; nonce: number; From b84483c7e77330b947365fd88a37c76cde231009 Mon Sep 17 00:00:00 2001 From: Justin Kook Date: Fri, 22 Mar 2019 16:42:02 -0400 Subject: [PATCH 05/40] working p2p so far --- packages/bitcore-node/package-lock.json | 35 ++++++ packages/bitcore-node/package.json | 1 + .../src/models/block/base/base.ts | 4 +- .../models/transaction/eth/ethTransaction.ts | 30 ++++- .../providers/chain-state/erc20/erc721abi.ts | 1 + .../src/providers/chain-state/eth/eth.md | 10 +- .../src/providers/chain-state/eth/eth.ts | 13 +- .../providers/chain-state/eth/parityRpc.ts | 117 +++++++++++------- .../src/services/p2p/eth/index.ts | 36 +++++- packages/bitcore-node/src/types/Block.ts | 8 +- .../bitcore-node/src/types/Transaction.ts | 7 +- 11 files changed, 195 insertions(+), 67 deletions(-) create mode 100644 packages/bitcore-node/src/providers/chain-state/erc20/erc721abi.ts diff --git a/packages/bitcore-node/package-lock.json b/packages/bitcore-node/package-lock.json index db643d90017..6d382d18315 100644 --- a/packages/bitcore-node/package-lock.json +++ b/packages/bitcore-node/package-lock.json @@ -231,6 +231,28 @@ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, + "abi-decoder": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/abi-decoder/-/abi-decoder-1.2.0.tgz", + "integrity": "sha512-y2OKSEW4gf2838Eavc56vQY9V46zaXkf3Jl1WpTfUBbzAVrXSr4JRZAAWv55Tv9s5WNz1rVgBgz5d2aJIL1QCg==", + "requires": { + "web3": "0.18.4" + }, + "dependencies": { + "web3": { + "version": "0.18.4", + "resolved": "https://registry.npmjs.org/web3/-/web3-0.18.4.tgz", + "integrity": "sha1-gewXhBRUkfLqqJVbMcBgSeB8Xn0=", + "requires": { + "bignumber.js": "git+https://github.com/debris/bignumber.js.git#94d7146671b9719e00a09c29b01a691bc85048c2", + "crypto-js": "3.1.8", + "utf8": "2.1.1", + "xhr2": "0.1.4", + "xmlhttprequest": "1.8.0" + } + } + } + }, "abstract-leveldown": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz", @@ -529,6 +551,9 @@ "callsite": "1.0.0" } }, + "bignumber.js": { + "version": "git+https://github.com/debris/bignumber.js.git#94d7146671b9719e00a09c29b01a691bc85048c2" + }, "bindings": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.3.0.tgz", @@ -1169,6 +1194,11 @@ "randomfill": "1.0.4" } }, + "crypto-js": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.1.8.tgz", + "integrity": "sha1-cV8HC/YBTyrpkqmLOSkli3E/CNU=" + }, "cycle": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", @@ -5735,6 +5765,11 @@ "xhr-request": "1.1.0" } }, + "xhr2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/xhr2/-/xhr2-0.1.4.tgz", + "integrity": "sha1-f4dliEdxbbUCYyOBL4GMras4el8=" + }, "xhr2-cookies": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz", diff --git a/packages/bitcore-node/package.json b/packages/bitcore-node/package.json index 349e7bd3fd6..8cc2c064545 100644 --- a/packages/bitcore-node/package.json +++ b/packages/bitcore-node/package.json @@ -72,6 +72,7 @@ }, "dependencies": { "JSONStream": "~1.3.1", + "abi-decoder": "^1.2.0", "async": "^2.5.0", "bitcore-client": "^8.1.1", "bitcore-lib": "^8.1.1", diff --git a/packages/bitcore-node/src/models/block/base/base.ts b/packages/bitcore-node/src/models/block/base/base.ts index 601879212ad..79cd3b36809 100644 --- a/packages/bitcore-node/src/models/block/base/base.ts +++ b/packages/bitcore-node/src/models/block/base/base.ts @@ -1,7 +1,7 @@ import { BaseModel, MongoBound } from '../../base'; import { IBlock } from '../../../types/Block'; import { StorageService } from '../../../services/storage'; -import { TransformOptions } from "../../../types/TransformOptions"; +import { TransformOptions } from '../../../types/TransformOptions'; export class BlockModel extends BaseModel { constructor(storage?: StorageService) { super('blocks', storage); @@ -32,13 +32,11 @@ export class BlockModel extends BaseModel { network: block.network, hash: block.hash, height: block.height, - version: block.version, size: block.size, merkleRoot: block.merkleRoot, time: block.time, timeNormalized: block.timeNormalized, nonce: block.nonce, - bits: block.bits, /* *difficulty: block.difficulty, */ diff --git a/packages/bitcore-node/src/models/transaction/eth/ethTransaction.ts b/packages/bitcore-node/src/models/transaction/eth/ethTransaction.ts index 7f9b54a671f..ce15b6b1f59 100644 --- a/packages/bitcore-node/src/models/transaction/eth/ethTransaction.ts +++ b/packages/bitcore-node/src/models/transaction/eth/ethTransaction.ts @@ -12,6 +12,9 @@ import { EventStorage } from '../.././events'; import { WalletAddressStorage } from '../../walletAddress'; import { TransactionModel } from '../base/base'; import { ObjectID } from 'bson'; +import AbiDecoder from 'abi-decoder'; +const erc20abi = require('../../../providers/chain-state/erc20/erc20abi'); +const erc721abi = require('../../../providers/chain-state/erc20/erc721abi'); @LoggifyClass export class EthTransactionModel extends TransactionModel { @@ -150,7 +153,31 @@ export class EthTransactionModel extends TransactionModel { return this.collection.find(finalQuery, options).addCursorFlag('noCursorTimeout', true); } + abiDecode(input: string) { + try { + try { + AbiDecoder.addABI(erc20abi); + const value = AbiDecoder.decodeMethod(input).params.filter(e => e.name === '_value')[0].value; + return { + type: 'ERC20', + value + }; + } catch { + AbiDecoder.addABI(erc721abi); + const value = AbiDecoder.decodeMethod(input).params.filter(e => e.name === '_value')[0].value; + return { + type: 'ERC721', + value + }; + } + } catch { + return false; + } + } + _apiTransform(tx: Partial>, options?: TransformOptions): EthTransactionJSON | string { + const decodedData = this.abiDecode(`0x${tx.data!.toString('hex')}`); + const transaction: EthTransactionJSON = { _id: tx._id ? tx._id.toString() : '', txid: tx.txid || '', @@ -167,7 +194,8 @@ export class EthTransactionModel extends TransactionModel { gasPrice: tx.gasPrice || -1, nonce: tx.nonce || 0, to: tx.to || '', - from: tx.from || '' + from: tx.from || '', + decodedData: decodedData ? decodedData : undefined }; if (options && options.object) { return transaction; diff --git a/packages/bitcore-node/src/providers/chain-state/erc20/erc721abi.ts b/packages/bitcore-node/src/providers/chain-state/erc20/erc721abi.ts new file mode 100644 index 00000000000..ff41295f354 --- /dev/null +++ b/packages/bitcore-node/src/providers/chain-state/erc20/erc721abi.ts @@ -0,0 +1 @@ +[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"_name","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"name":"_approved","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"implementsERC721","outputs":[{"name":"_implementsERC721","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"_totalSupply","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"name":"_tokenId","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"_owner","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"tokenMetadata","outputs":[{"name":"_infoUrl","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"_balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"},{"name":"_tokenId","type":"uint256"},{"name":"_approvedAddress","type":"address"},{"name":"_metadata","type":"string"}],"name":"mint","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"_symbol","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"numTokensTotal","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"getOwnerTokens","outputs":[{"name":"_tokenIds","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_to","type":"address"},{"indexed":true,"name":"_tokenId","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_approved","type":"address"},{"indexed":false,"name":"_tokenId","type":"uint256"}],"name":"Approval","type":"event"}] diff --git a/packages/bitcore-node/src/providers/chain-state/eth/eth.md b/packages/bitcore-node/src/providers/chain-state/eth/eth.md index cbdd85826b5..24b72c27b59 100644 --- a/packages/bitcore-node/src/providers/chain-state/eth/eth.md +++ b/packages/bitcore-node/src/providers/chain-state/eth/eth.md @@ -1,17 +1,17 @@ # Config + The following config block supports two networks for ETH. Main and Local The local network would be geth, or testrpc The main network shows how to connect via websocket - ``` "ETH": { "local": { "chainSource": "web3", "provider": { - "protocool": "http", + "protocol": "http", "host": "127.0.0.1", "port": "8545" } @@ -19,7 +19,7 @@ The main network shows how to connect via websocket "main": { "chainSource": "web3", "provider": { - "protocool": "wss", + "protocol": "wss", "host": "mainnet.infura.io/ws" } } @@ -28,7 +28,7 @@ The main network shows how to connect via websocket "main": { "chainSource": "web3", "provider": { - "protocool": "wss", + "protocol": "wss", "host": "mainnet.infura.io/ws" } } @@ -40,4 +40,4 @@ The main network shows how to connect via websocket Should you want to add your own provider, you can register it on the ChainStateProvider import {ChainStateProvider} from 'src/providers/chain-state'; -ChainStateProvider.registerService(myServiceThatImplementsIChainStateService); +ChainStateProvider.registerService(myServiceThatImplementsIChainStateService); diff --git a/packages/bitcore-node/src/providers/chain-state/eth/eth.ts b/packages/bitcore-node/src/providers/chain-state/eth/eth.ts index 55e28b678de..066631bb5a3 100644 --- a/packages/bitcore-node/src/providers/chain-state/eth/eth.ts +++ b/packages/bitcore-node/src/providers/chain-state/eth/eth.ts @@ -16,7 +16,7 @@ export class ETHStateProvider extends InternalStateProvider implements CSP.IChai getWeb3(network: string) { const networkConfig = this.config[network]; const provider = networkConfig.provider; - const portString = provider.port ? `:${provider.port}` : ''; + const portString = provider.port ? `:${provider.port}` : ':8545'; const connUrl = `${provider.protocol}://${provider.host}${portString}`; let ProviderType; switch (provider.protocol) { @@ -36,6 +36,17 @@ export class ETHStateProvider extends InternalStateProvider implements CSP.IChai return { confirmed: balance, unconfirmed: 0, balance }; } + async getBlock(params: CSP.GetBlockParams) { + const { network, blockId } = params; + return this.getWeb3(network).eth.getBlock(Number(blockId)) as any; + } + + async getTransaction(params: CSP.StreamTransactionParams) { + const { network, txId } = params; + const transaction = await this.getWeb3(network).eth.getTransaction(txId); + return transaction as any; + } + async broadcastTransaction(params: CSP.BroadcastTransactionParams) { const { network, rawTx } = params; const tx = await this.getWeb3(network).eth.sendSignedTransaction(rawTx); diff --git a/packages/bitcore-node/src/providers/chain-state/eth/parityRpc.ts b/packages/bitcore-node/src/providers/chain-state/eth/parityRpc.ts index 4b08c50f7a9..6cb56fcd979 100644 --- a/packages/bitcore-node/src/providers/chain-state/eth/parityRpc.ts +++ b/packages/bitcore-node/src/providers/chain-state/eth/parityRpc.ts @@ -1,30 +1,42 @@ import Web3 from 'web3'; +import AbiDecoder from 'abi-decoder'; +import { IEthTransaction } from '../../../types/Transaction'; +const erc20abi = require('../erc20/erc20abi'); +const erc721abi = require('../erc20/erc721abi'); if (Symbol['asyncIterator'] === undefined) (Symbol as any)['asyncIterator'] = Symbol.for('asyncIterator'); -interface ParityBlockReward { - author: string; - rewardType: 'block'; - value: string; -} interface ParityCall { - callType: 'call'; - from: string; - gas: string; - input: string; - to: string; + callType?: 'call' | 'delegatecall'; + author?: string; + rewardType?: 'block'; + from?: string; + gas?: string; + input?: string; + to?: string; value: string; } + export interface ParityTraceResponse { - action: ParityBlockReward | ParityCall; + action: ParityCall; blockHash: string; blockNumber: number; - result?: { gasUsed: string; output: string }; + error: string; + result: { gasUsed?: string; output: string }; subtraces: number; traceAddress: []; - transactionHash?: string; - transactionPosition?: number; - type: 'reward' | 'call'; + transactionHash: string; + transactionPosition: number; + type: 'reward' | 'call' | 'delegatecall' | 'create'; +} + +export interface ClassifiedTrace extends ParityTraceResponse { + abiType: IEthTransaction['abiType']; +} + +export interface TokenTransferResponse { + name?: 'transfer'; + params?: [{ name: string; value: string; type: string }]; } export class ParityRPC { @@ -34,39 +46,52 @@ export class ParityRPC { this.web3 = web3; } - public async *getTransactionsForAddress(bestHeight: number, address: string) { - const txs = await this.scan(0, bestHeight, address); - for (const tx of txs) { - yield { - id: null, - txid: tx.transactionHash, - fee: tx.result ? tx.result.gasUsed : null, - category: 'receive', - satoshis: tx.action.value, - height: tx.blockNumber, - address, - outputIndex: tx.result ? tx.result.output : null - }; + private async traceBlock(blockNumber: number) { + const txs = await this.send>({ + method: 'trace_block', + params: [this.web3.utils.toHex(blockNumber)], + jsonrpc: '2.0', + id: 0 + }); + return txs; + } + + public async *getTransactionsFromBlock(blockNumber: number) { + const txs = await this.traceBlock(blockNumber); + if (txs && txs.length > 1) { + for (const tx of txs) { + yield this.transactionFromParityTrace(tx); + } + } + } + + public send(data: any) { + return new Promise(resolve => { + this.web3.eth.currentProvider.send(data, (_, data) => resolve(data.result)); + }); + } + + abiDecode(input: string) { + try { + try { + AbiDecoder.addABI(erc20abi); + if (!AbiDecoder.decodeMethod(input).params) throw new Error('Failed to decode for ERC20'); + return 'ERC20'; + } catch { + AbiDecoder.addABI(erc721abi); + if (!AbiDecoder.decodeMethod(input).params) throw new Error('Failed to decode for ERC20'); + return 'ERC721'; + } + } catch { + return false; } } - scan(fromHeight: number, toHeight: number, address: string) { - return new Promise>(resolve => - this.web3.eth.currentProvider.send( - { - method: 'trace_filter', - params: [ - { - fromBlock: this.web3.utils.toHex(fromHeight), - toBlock: this.web3.utils.toHex(toHeight), - toAddress: [address.toLowerCase()] - } - ], - jsonrpc: '2.0', - id: 0 - }, - (_, data) => resolve(data.result as Array) - ) - ); + private async transactionFromParityTrace(tx: ParityTraceResponse): Promise { + const abiType = await this.abiDecode(tx.action.input!); + return { + ...tx, + abiType: abiType ? abiType : undefined + }; } } diff --git a/packages/bitcore-node/src/services/p2p/eth/index.ts b/packages/bitcore-node/src/services/p2p/eth/index.ts index 4f26ddbb818..b7417abe4e7 100644 --- a/packages/bitcore-node/src/services/p2p/eth/index.ts +++ b/packages/bitcore-node/src/services/p2p/eth/index.ts @@ -9,8 +9,13 @@ import { BitcoreP2PEth } from './p2p-lib'; import { IEthBlock } from '../../../types/Block'; import BN from 'bn.js'; import { IEthTransaction } from '../../../types/Transaction'; +import { ParityRPC } from '../../../providers/chain-state/eth/parityRpc'; +import { ETHStateProvider } from '../../../providers/chain-state/eth/eth'; +import Web3 from 'web3'; const LRU = require('lru-cache'); +if (Symbol['asyncIterator'] === undefined) (Symbol as any)['asyncIterator'] = Symbol.for('asyncIterator'); + export class EthP2pWorker { private chain: string; private network: string; @@ -23,6 +28,8 @@ export class EthP2pWorker { private eth: BitcoreP2PEth; private blockModel: EthBlockModel; private txModel: EthTransactionModel; + private web3: Web3; + private rpc: ParityRPC; constructor({ chain, network, chainConfig, blockModel = EthBlockStorage, txModel = EthTransactionStorage }) { this.eth = new BitcoreP2PEth(network); @@ -35,6 +42,8 @@ export class EthP2pWorker { this.invCache = new LRU({ max: 10000 }); this.blockModel = blockModel; this.txModel = txModel; + this.web3 = new ETHStateProvider().getWeb3(network); + this.rpc = new ParityRPC(this.web3); } setupListeners() { @@ -205,7 +214,19 @@ export class EthP2pWorker { const hash = header.hash(); const hashStr = hash.toString('hex'); const block = await this.getBlock(header); - const { convertedBlock, convertedTxs } = this.convertBlock(block); + let { convertedBlock, convertedTxs } = this.convertBlock(block); + const height = new BN(block.header.number).toNumber(); + let internalTxs = await this.rpc.getTransactionsFromBlock(height); + for await (const tx of internalTxs) { + // if (tx.type === 'reward') { + // console.log(tx); + // } + const foundIndex = convertedTxs.findIndex(t => t.txid === tx.transactionHash); + if (foundIndex > -1) { + convertedTxs[foundIndex].internal.push(tx); + } + } + await this.processBlock(convertedBlock, convertedTxs); currentHeight++; if (Date.now() - lastLog > 100) { @@ -243,7 +264,7 @@ export class EthP2pWorker { network: this.network, height, hash, - version: 1, + coinbase: block.header.coinbase.toString('hex'), merkleRoot: block.header.transactionsTrie.toString('hex'), time: new Date(blockTime), timeNormalized: new Date(blockTime), @@ -254,7 +275,6 @@ export class EthP2pWorker { size: block.raw.length, reward: 3, processed: false, - bits: 0, gasLimit: Number.parseInt(header.gasLimit.toString('hex'), 16) || 0, gasUsed: Number.parseInt(header.gasUsed.toString('hex'), 16) || 0, stateRoot: header.stateRoot @@ -265,15 +285,17 @@ export class EthP2pWorker { convertTx(tx: Ethereum.Transaction, block?: IEthBlock): IEthTransaction { if (!block) { - const txid = tx.hash().toString('hex'); + const txid = '0x' + tx.hash().toString('hex'); const to = '0x' + tx.to.toString('hex'); const from = '0x' + tx.from.toString('hex'); const fee = Number(tx.getUpfrontCost().toString()); + const abiType = this.rpc.abiDecode('0x' + tx.data.toString('hex')); + const nonce = tx.nonce.toString('hex'); return { chain: this.chain, network: this.network, blockHeight: -1, - data: '0x' +tx.data.toString('hex'), + data: tx.data, txid, blockHash: undefined, blockTime: new Date(), @@ -286,7 +308,9 @@ export class EthP2pWorker { from, gasLimit: Number.parseInt(tx.gasLimit.toString('hex'), 16), gasPrice: Number.parseInt(tx.gasPrice.toString('hex'), 16), - nonce: Number.parseInt(tx.nonce.toString('hex'), 16) + nonce: Number.parseInt(nonce || '0x0', 16), + abiType: abiType ? abiType : undefined, + internal: [] }; } else { const { hash: blockHash, time: blockTime, timeNormalized: blockTimeNormalized, height } = block; diff --git a/packages/bitcore-node/src/types/Block.ts b/packages/bitcore-node/src/types/Block.ts index 84aea5cffab..ec34897b2a1 100644 --- a/packages/bitcore-node/src/types/Block.ts +++ b/packages/bitcore-node/src/types/Block.ts @@ -3,7 +3,6 @@ export type IBlock = { network: string; height: number; hash: string; - version: number; merkleRoot: string; time: Date; timeNormalized: Date; @@ -12,13 +11,16 @@ export type IBlock = { transactionCount: number; nonce: number | string; size: number; - bits: number; reward: number; processed: boolean; }; -export type IBtcBlock = IBlock & {}; +export type IBtcBlock = IBlock & { + version: number; + bits: number; +}; export type IEthBlock = IBlock & { + coinbase: string; nonce: string; gasLimit: number; gasUsed: number; diff --git a/packages/bitcore-node/src/types/Transaction.ts b/packages/bitcore-node/src/types/Transaction.ts index 0a86f887632..61dcc5a35ad 100644 --- a/packages/bitcore-node/src/types/Transaction.ts +++ b/packages/bitcore-node/src/types/Transaction.ts @@ -1,4 +1,5 @@ import { ObjectID } from 'mongodb'; +import { ClassifiedTrace } from '../providers/chain-state/eth/parityRpc'; export type ITransaction = { txid: string; chain: string; @@ -21,15 +22,16 @@ export type IBtcTransaction = ITransaction & { }; export type IEthTransaction = ITransaction & { - data: string; + data: Buffer; gasLimit: number; gasPrice: number; nonce: number; to: string; from: string; + internal: Array; + abiType?: 'ERC20' | 'ERC721'; }; - export type TransactionJSON = { _id: string; txid: string; @@ -79,4 +81,5 @@ export type EthTransactionJSON = { nonce: number; to: string; from: string; + decodedData?: { type: string; value: string }; }; From 0ae47fde5c2f47a42b846c8b509baad10bd25abf Mon Sep 17 00:00:00 2001 From: Justin Kook Date: Wed, 27 Mar 2019 15:30:36 -0400 Subject: [PATCH 06/40] decode internal txs on _apiTransform, fix duplicate internal txs to push to convertedTx only if txid, from, and to are different, added 0x prefix to properties --- .../src/models/block/eth/ethBlock.ts | 8 +-- .../src/models/transaction/base/base.ts | 33 +++++------ .../models/transaction/btc/btcTransaction.ts | 8 +-- .../models/transaction/eth/ethTransaction.ts | 21 +++++-- .../src/providers/chain-state/eth/eth.ts | 58 ++++++++++++++++++- .../providers/chain-state/eth/parityRpc.ts | 13 +++-- .../src/services/p2p/eth/index.ts | 23 +++++--- .../bitcore-node/src/types/Transaction.ts | 7 ++- 8 files changed, 119 insertions(+), 52 deletions(-) diff --git a/packages/bitcore-node/src/models/block/eth/ethBlock.ts b/packages/bitcore-node/src/models/block/eth/ethBlock.ts index 417aa01e73d..1d1e107c1fc 100644 --- a/packages/bitcore-node/src/models/block/eth/ethBlock.ts +++ b/packages/bitcore-node/src/models/block/eth/ethBlock.ts @@ -56,7 +56,7 @@ export class EthBlockModel extends BlockModel { if (previousBlock) { await this.collection.updateOne( { chain, network, hash: previousBlock.hash }, - { $set: { nextBlockHash: convertedBlock.hash } } + { $set: { nextBlockHash: `0x${convertedBlock.hash}` } } ); logger.debug('Updating previous block.nextBlockHash ', convertedBlock.hash); } @@ -88,10 +88,10 @@ export class EthBlockModel extends BlockModel { const previousBlock = await this.collection.findOne({ hash: prevHash, chain, network }); - const blockTimeNormalized = (() => { + const timeNormalized = (() => { const prevTime = previousBlock ? previousBlock.timeNormalized : null; if (prevTime && blockTime.getTime() <= prevTime.getTime()) { - return prevTime.getTime() + 1; + return new Date(prevTime.getTime() + 1); } else { return blockTime; } @@ -107,7 +107,7 @@ export class EthBlockModel extends BlockModel { network }, update: { - $set: { ...block, blockTimeNormalized } + $set: { ...block, timeNormalized } }, upsert: true } diff --git a/packages/bitcore-node/src/models/transaction/base/base.ts b/packages/bitcore-node/src/models/transaction/base/base.ts index 4abc7b8e617..b0f3f493bf6 100644 --- a/packages/bitcore-node/src/models/transaction/base/base.ts +++ b/packages/bitcore-node/src/models/transaction/base/base.ts @@ -1,10 +1,12 @@ import { BaseModel, MongoBound } from '../../base'; -import { StorageService } from '../../../services/storage'; -import { ITransaction, TransactionJSON } from '../../../types/Transaction'; +import { StorageService, Storage } from '../../../services/storage'; +import { ITransaction } from '../../../types/Transaction'; import { TransformOptions } from '../../../types/TransformOptions'; +import { EthTransactionStorage } from '../eth/ethTransaction'; +import { BtcTransactionStorage } from '..'; export class TransactionModel extends BaseModel { - constructor(storage?: StorageService) { + constructor(storage: StorageService = Storage) { super('transactions', storage); } @@ -30,24 +32,15 @@ export class TransactionModel extends BaseModel { ); } - _apiTransform(tx: Partial>, options?: TransformOptions): TransactionJSON | string { - const transaction: TransactionJSON = { - _id: tx._id ? tx._id.toString() : '', - txid: tx.txid || '', - network: tx.network || '', - chain: tx.chain || '', - blockHeight: tx.blockHeight || -1, - blockHash: tx.blockHash || '', - blockTime: tx.blockTime ? tx.blockTime.toISOString() : '', - blockTimeNormalized: tx.blockTimeNormalized ? tx.blockTimeNormalized.toISOString() : '', - size: tx.size || -1, - fee: tx.fee || -1, - value: tx.value || -1 - }; - if (options && options.object) { - return transaction; + _apiTransform(tx: Partial>, options?: TransformOptions) { + switch (tx.chain) { + case 'ETH': + return EthTransactionStorage._apiTransform(tx, options); + case 'BTC': + return BtcTransactionStorage._apiTransform(tx, options); + default: + return BtcTransactionStorage._apiTransform(tx, options); } - return JSON.stringify(transaction); } } export let TransactionStorage = new TransactionModel(); diff --git a/packages/bitcore-node/src/models/transaction/btc/btcTransaction.ts b/packages/bitcore-node/src/models/transaction/btc/btcTransaction.ts index bb0d0818e10..77d3ea1e771 100644 --- a/packages/bitcore-node/src/models/transaction/btc/btcTransaction.ts +++ b/packages/bitcore-node/src/models/transaction/btc/btcTransaction.ts @@ -1,4 +1,4 @@ -import { IBtcTransaction } from "../../../types/Transaction"; +import { IBtcTransaction } from '../../../types/Transaction'; import { CoinStorage } from '../.././coin'; import { WalletAddressStorage } from '../.././walletAddress'; import { partition } from '../../../utils/partition'; @@ -14,8 +14,8 @@ import { Config } from '../../../services/config'; import { EventStorage } from '../.././events'; import * as lodash from 'lodash'; import logger from '../../../logger'; -import { TransactionModel } from "../base/base"; -import { BitcoreLibs } from "../../../chain"; +import { TransactionModel } from '../base/base'; +import { BitcoreLibs } from '../../../chain'; export type MintOp = { updateOne: { @@ -63,7 +63,7 @@ export type SpendOp = { @LoggifyClass export class BtcTransactionModel extends TransactionModel { - constructor(storage?: StorageService) { + constructor(storage: StorageService = Storage) { super(storage); } diff --git a/packages/bitcore-node/src/models/transaction/eth/ethTransaction.ts b/packages/bitcore-node/src/models/transaction/eth/ethTransaction.ts index ce15b6b1f59..66efeba2cbc 100644 --- a/packages/bitcore-node/src/models/transaction/eth/ethTransaction.ts +++ b/packages/bitcore-node/src/models/transaction/eth/ethTransaction.ts @@ -18,7 +18,7 @@ const erc721abi = require('../../../providers/chain-state/erc20/erc721abi'); @LoggifyClass export class EthTransactionModel extends TransactionModel { - constructor(storage?: StorageService) { + constructor(storage: StorageService = Storage) { super(storage); } @@ -157,21 +157,27 @@ export class EthTransactionModel extends TransactionModel { try { try { AbiDecoder.addABI(erc20abi); - const value = AbiDecoder.decodeMethod(input).params.filter(e => e.name === '_value')[0].value; + const decodedData = AbiDecoder.decodeMethod(input); + if (!decodedData || decodedData.length === 0) { + throw new Error(); + } return { type: 'ERC20', - value + ...decodedData }; } catch { AbiDecoder.addABI(erc721abi); - const value = AbiDecoder.decodeMethod(input).params.filter(e => e.name === '_value')[0].value; + const decodedData = AbiDecoder.decodeMethod(input); + if (!decodedData || decodedData.length === 0) { + throw new Error(); + } return { type: 'ERC721', - value + ...decodedData }; } } catch { - return false; + return undefined; } } @@ -195,6 +201,9 @@ export class EthTransactionModel extends TransactionModel { nonce: tx.nonce || 0, to: tx.to || '', from: tx.from || '', + internal: tx.internal + ? tx.internal.map(t => ({ ...t, decodedData: this.abiDecode(t.action.input || '0x') })) + : [], decodedData: decodedData ? decodedData : undefined }; if (options && options.object) { diff --git a/packages/bitcore-node/src/providers/chain-state/eth/eth.ts b/packages/bitcore-node/src/providers/chain-state/eth/eth.ts index 066631bb5a3..9b033a3be99 100644 --- a/packages/bitcore-node/src/providers/chain-state/eth/eth.ts +++ b/packages/bitcore-node/src/providers/chain-state/eth/eth.ts @@ -4,6 +4,9 @@ import { CSP } from '../../../types/namespaces/ChainStateProvider'; import { InternalStateProvider } from '../internal/internal'; import { ObjectID } from 'mongodb'; import Web3 from 'web3'; +import { Storage } from '../../../services/storage'; +import { EthTransactionStorage } from '../../../models/transaction/eth/ethTransaction'; +import { ITransaction, EthTransactionJSON } from '../../../types/Transaction'; export class ETHStateProvider extends InternalStateProvider implements CSP.IChainStateService { config: any; @@ -42,9 +45,30 @@ export class ETHStateProvider extends InternalStateProvider implements CSP.IChai } async getTransaction(params: CSP.StreamTransactionParams) { - const { network, txId } = params; - const transaction = await this.getWeb3(network).eth.getTransaction(txId); - return transaction as any; + try { + let { chain, network, txId } = params; + if (typeof txId !== 'string' || !chain || !network) { + throw 'Missing required param'; + } + network = network.toLowerCase(); + let query = { chain: chain, network, txid: txId }; + const tip = await this.getLocalTip(params); + const tipHeight = tip ? tip.height : 0; + const found = await EthTransactionStorage.collection.findOne(query); + if (found) { + let confirmations = 0; + if (found.blockHeight && found.blockHeight >= 0) { + confirmations = tipHeight - found.blockHeight + 1; + } + const convertedTx = EthTransactionStorage._apiTransform(found, { object: true }) as EthTransactionJSON; + return { ...convertedTx, confirmations: confirmations }; + } else { + return undefined; + } + } catch (err) { + console.error(err); + } + return undefined; } async broadcastTransaction(params: CSP.BroadcastTransactionParams) { @@ -61,6 +85,34 @@ export class ETHStateProvider extends InternalStateProvider implements CSP.IChai .toArray(); } + async streamTransactions(params: CSP.StreamTransactionsParams) { + const { chain, network, req, res, args } = params; + let { blockHash, blockHeight } = args; + if (!chain || !network) { + throw 'Missing chain or network'; + } + let query: any = { + chain: chain, + network: network.toLowerCase() + }; + if (blockHeight !== undefined) { + query.blockHeight = Number(blockHeight); + } + if (blockHash !== undefined) { + query.blockHash = blockHash; + } + const tip = await this.getLocalTip(params); + const tipHeight = tip ? tip.height : 0; + return Storage.apiStreamingFind(EthTransactionStorage, query, args, req, res, t => { + let confirmations = 0; + if (t.blockHeight !== undefined && t.blockHeight >= 0) { + confirmations = tipHeight - t.blockHeight + 1; + } + const convertedTx = EthTransactionStorage._apiTransform(t, { object: true }) as Partial; + return JSON.stringify({ ...convertedTx, confirmations: confirmations }); + }); + } + async getWalletBalance(params: CSP.GetWalletBalanceParams) { const { network } = params; if (params.wallet._id === undefined) { diff --git a/packages/bitcore-node/src/providers/chain-state/eth/parityRpc.ts b/packages/bitcore-node/src/providers/chain-state/eth/parityRpc.ts index 6cb56fcd979..31786f58c9f 100644 --- a/packages/bitcore-node/src/providers/chain-state/eth/parityRpc.ts +++ b/packages/bitcore-node/src/providers/chain-state/eth/parityRpc.ts @@ -31,7 +31,7 @@ export interface ParityTraceResponse { } export interface ClassifiedTrace extends ParityTraceResponse { - abiType: IEthTransaction['abiType']; + abiType?: IEthTransaction['abiType']; } export interface TokenTransferResponse { @@ -83,15 +83,18 @@ export class ParityRPC { return 'ERC721'; } } catch { - return false; + return undefined; } } private async transactionFromParityTrace(tx: ParityTraceResponse): Promise { const abiType = await this.abiDecode(tx.action.input!); - return { - ...tx, - abiType: abiType ? abiType : undefined + const convertedTx: ClassifiedTrace = { + ...tx }; + if (abiType) { + convertedTx.abiType = abiType; + } + return convertedTx; } } diff --git a/packages/bitcore-node/src/services/p2p/eth/index.ts b/packages/bitcore-node/src/services/p2p/eth/index.ts index b7417abe4e7..21bdf04e064 100644 --- a/packages/bitcore-node/src/services/p2p/eth/index.ts +++ b/packages/bitcore-node/src/services/p2p/eth/index.ts @@ -221,9 +221,13 @@ export class EthP2pWorker { // if (tx.type === 'reward') { // console.log(tx); // } - const foundIndex = convertedTxs.findIndex(t => t.txid === tx.transactionHash); - if (foundIndex > -1) { - convertedTxs[foundIndex].internal.push(tx); + if (tx && tx.action) { + const foundIndex = convertedTxs.findIndex( + t => t.txid === tx.transactionHash && t.from !== tx.action.from && t.to !== tx.action.to + ); + if (foundIndex > -1) { + convertedTxs[foundIndex].internal.push(tx); + } } } @@ -257,19 +261,19 @@ export class EthP2pWorker { convertBlock(block: Ethereum.Block) { const { header } = block; const blockTime = Number.parseInt(header.timestamp.toString('hex') || '0', 16) * 1000; - const hash = block.header.hash().toString('hex'); + const hash = `0x${block.header.hash().toString('hex')}`; const height = new BN(header.number).toNumber(); const convertedBlock: IEthBlock = { chain: this.chain, network: this.network, height, hash, - coinbase: block.header.coinbase.toString('hex'), + coinbase: `0x${block.header.coinbase.toString('hex')}`, merkleRoot: block.header.transactionsTrie.toString('hex'), time: new Date(blockTime), timeNormalized: new Date(blockTime), nonce: header.nonce.toString('hex'), - previousBlockHash: header.parentHash.toString('hex'), + previousBlockHash: `0x${header.parentHash.toString('hex')}`, nextBlockHash: '', transactionCount: block.transactions.length, size: block.raw.length, @@ -291,7 +295,7 @@ export class EthP2pWorker { const fee = Number(tx.getUpfrontCost().toString()); const abiType = this.rpc.abiDecode('0x' + tx.data.toString('hex')); const nonce = tx.nonce.toString('hex'); - return { + const convertedTx: IEthTransaction = { chain: this.chain, network: this.network, blockHeight: -1, @@ -309,9 +313,12 @@ export class EthP2pWorker { gasLimit: Number.parseInt(tx.gasLimit.toString('hex'), 16), gasPrice: Number.parseInt(tx.gasPrice.toString('hex'), 16), nonce: Number.parseInt(nonce || '0x0', 16), - abiType: abiType ? abiType : undefined, internal: [] }; + if (abiType) { + convertedTx.abiType = abiType; + } + return convertedTx; } else { const { hash: blockHash, time: blockTime, timeNormalized: blockTimeNormalized, height } = block; const noBlockTx = this.convertTx(tx); diff --git a/packages/bitcore-node/src/types/Transaction.ts b/packages/bitcore-node/src/types/Transaction.ts index 61dcc5a35ad..ad212e1cb24 100644 --- a/packages/bitcore-node/src/types/Transaction.ts +++ b/packages/bitcore-node/src/types/Transaction.ts @@ -1,5 +1,5 @@ import { ObjectID } from 'mongodb'; -import { ClassifiedTrace } from '../providers/chain-state/eth/parityRpc'; +import { ClassifiedTrace, TokenTransferResponse } from '../providers/chain-state/eth/parityRpc'; export type ITransaction = { txid: string; chain: string; @@ -64,6 +64,8 @@ export type BtcTransactionJSON = { value: number; }; +export type AbiDecodedData = { type: string; decodedData: TokenTransferResponse }; +export type DecodedTrace = ClassifiedTrace & AbiDecodedData; export type EthTransactionJSON = { _id: string; txid: string; @@ -81,5 +83,6 @@ export type EthTransactionJSON = { nonce: number; to: string; from: string; - decodedData?: { type: string; value: string }; + decodedData?: AbiDecodedData; + internal: Array; }; From 57a6a1d9dc87503d1f134c78627e22c1d8c87168 Mon Sep 17 00:00:00 2001 From: Justin Kook Date: Wed, 27 Mar 2019 16:46:18 -0400 Subject: [PATCH 07/40] linked btcTransactionStorage instead of TransactionStorage to block unit tests --- .../bitcore-node/test/unit/models/block.unit.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/bitcore-node/test/unit/models/block.unit.ts b/packages/bitcore-node/test/unit/models/block.unit.ts index f678e8759c9..d81a19b6b1d 100644 --- a/packages/bitcore-node/test/unit/models/block.unit.ts +++ b/packages/bitcore-node/test/unit/models/block.unit.ts @@ -1,6 +1,6 @@ import { expect } from 'chai'; -import { BtcBlockStorage } from "../../../src/models/block/btc/btcBlock"; -import { TransactionStorage } from '../../../src/models/transaction'; +import { BtcBlockStorage } from '../../../src/models/block/btc/btcBlock'; +import { BtcTransactionStorage } from '../../../src/models/transaction/btc/btcTransaction'; import { CoinStorage } from '../../../src/models/coin'; import * as sinon from 'sinon'; import { TEST_BLOCK } from '../../data/test-block'; @@ -10,7 +10,7 @@ import { mockCollection } from '../../helpers/index.js'; import { ChainStateProvider } from '../../../src/providers/chain-state'; import { ObjectID } from 'mongodb'; import { MongoBound } from '../../../src/models/base'; -import { IBtcBlock } from "../../../src/types/Block"; +import { IBtcBlock } from '../../../src/types/Block'; describe('Block Model', function() { let addBlockParams = { @@ -34,7 +34,7 @@ describe('Block Model', function() { mockStorage(newBlock); sandbox.stub(BtcBlockStorage, 'handleReorg').resolves(); - sandbox.stub(TransactionStorage, 'batchImport').resolves(); + sandbox.stub(BtcTransactionStorage, 'batchImport').resolves(); const result = await BtcBlockStorage.addBlock(addBlockParams); expect(result); @@ -129,10 +129,10 @@ describe('Block Model', function() { it('should return if localTip hash equals the previous hash', async () => { Object.assign(BtcBlockStorage.collection, mockCollection(null)); - Object.assign(TransactionStorage.collection, mockCollection(null)); + Object.assign(BtcTransactionStorage.collection, mockCollection(null)); Object.assign(CoinStorage.collection, mockCollection(null)); let blockModelRemoveSpy = BtcBlockStorage.collection.deleteMany as sinon.SinonSpy; - let transactionModelRemoveSpy = TransactionStorage.collection.deleteMany as sinon.SinonSpy; + let transactionModelRemoveSpy = BtcTransactionStorage.collection.deleteMany as sinon.SinonSpy; let coinModelRemoveSpy = CoinStorage.collection.deleteMany as sinon.SinonSpy; let coinModelUpdateSpy = CoinStorage.collection.updateMany as sinon.SinonSpy; @@ -159,7 +159,7 @@ describe('Block Model', function() { it('should return if localTip height is zero', async () => { let blockModelRemoveSpy = BtcBlockStorage.collection.deleteMany as sinon.SinonSpy; - let transactionModelRemoveSpy = TransactionStorage.collection.deleteMany as sinon.SinonSpy; + let transactionModelRemoveSpy = BtcTransactionStorage.collection.deleteMany as sinon.SinonSpy; let coinModelRemoveSpy = CoinStorage.collection.deleteMany as sinon.SinonSpy; let coinModelUpdateSpy = CoinStorage.collection.updateMany as sinon.SinonSpy; @@ -209,7 +209,7 @@ describe('Block Model', function() { height: 1355 }; let params = Object.assign(BtcBlockStorage, blockMethodParams); - const removeSpy = TransactionStorage.collection.deleteMany as sinon.SinonSpy; + const removeSpy = BtcTransactionStorage.collection.deleteMany as sinon.SinonSpy; await BtcBlockStorage.handleReorg(params); expect(removeSpy.called).to.be.true; From d8c28d5ed831d206634c3f8fa1d47a5b6345f869 Mon Sep 17 00:00:00 2001 From: Justin Kook Date: Thu, 28 Mar 2019 14:02:33 -0400 Subject: [PATCH 08/40] getLocalTip method is async, p2p-lib starts at block height 0 instead of 43700000 --- packages/bitcore-node/src/models/block/base/base.ts | 4 ++-- packages/bitcore-node/src/services/p2p/eth/p2p-lib.ts | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/bitcore-node/src/models/block/base/base.ts b/packages/bitcore-node/src/models/block/base/base.ts index 79cd3b36809..bacf11b60dd 100644 --- a/packages/bitcore-node/src/models/block/base/base.ts +++ b/packages/bitcore-node/src/models/block/base/base.ts @@ -21,8 +21,8 @@ export class BlockModel extends BaseModel { this.collection.createIndex({ previousBlockHash: 1 }, { background: true }); } - getLocalTip({ chain, network }) { - return this.collection.findOne({ chain, network, processed: true }, { sort: { height: -1 } }); + async getLocalTip({ chain, network }) { + return await this.collection.findOne({ chain, network, processed: true }, { sort: { height: -1 } }); } _apiTransform(block: Partial>, options?: TransformOptions): any { diff --git a/packages/bitcore-node/src/services/p2p/eth/p2p-lib.ts b/packages/bitcore-node/src/services/p2p/eth/p2p-lib.ts index 8ca9715f7c6..722521db7e5 100644 --- a/packages/bitcore-node/src/services/p2p/eth/p2p-lib.ts +++ b/packages/bitcore-node/src/services/p2p/eth/p2p-lib.ts @@ -28,7 +28,8 @@ const requests = { headers: new Array(), bodies: new Array(), msgTy */ const REMOTE_CLIENTID_FILTER = ['go1.5', 'go1.6', 'go1.7', 'quorum', 'pirl', 'ubiq', 'gmc', 'gwhale', 'prichain']; -const CHECK_BLOCK_NR = 4370000; +// To start syncing from a higher block height. +const CHECK_BLOCK_NR = 0; const ETH = { NETWORKS: { @@ -43,7 +44,7 @@ const ETH = { td: devp2p._util.int2buffer(1), // total difficulty in genesis block bestHash: Buffer.from('d4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3', 'hex'), genesisHash: Buffer.from('d4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3', 'hex') - } + }, } }; const getPeerAddr = peer => `${peer._socket.remoteAddress}:${peer._socket.remotePort}`; From ad9fe3f97cf058849d25ae1bcd637f3cea7f576c Mon Sep 17 00:00:00 2001 From: Justin Kook Date: Thu, 28 Mar 2019 14:44:40 -0400 Subject: [PATCH 09/40] fix 0x prefix on ethereum block object --- packages/bitcore-node/src/models/block/eth/ethBlock.ts | 2 +- packages/bitcore-node/src/services/p2p/eth/index.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/bitcore-node/src/models/block/eth/ethBlock.ts b/packages/bitcore-node/src/models/block/eth/ethBlock.ts index 1d1e107c1fc..847543b28a6 100644 --- a/packages/bitcore-node/src/models/block/eth/ethBlock.ts +++ b/packages/bitcore-node/src/models/block/eth/ethBlock.ts @@ -56,7 +56,7 @@ export class EthBlockModel extends BlockModel { if (previousBlock) { await this.collection.updateOne( { chain, network, hash: previousBlock.hash }, - { $set: { nextBlockHash: `0x${convertedBlock.hash}` } } + { $set: { nextBlockHash: convertedBlock.hash } } ); logger.debug('Updating previous block.nextBlockHash ', convertedBlock.hash); } diff --git a/packages/bitcore-node/src/services/p2p/eth/index.ts b/packages/bitcore-node/src/services/p2p/eth/index.ts index 21bdf04e064..4e7fbe5bd6f 100644 --- a/packages/bitcore-node/src/services/p2p/eth/index.ts +++ b/packages/bitcore-node/src/services/p2p/eth/index.ts @@ -269,7 +269,7 @@ export class EthP2pWorker { height, hash, coinbase: `0x${block.header.coinbase.toString('hex')}`, - merkleRoot: block.header.transactionsTrie.toString('hex'), + merkleRoot: `0x${block.header.transactionsTrie.toString('hex')}`, time: new Date(blockTime), timeNormalized: new Date(blockTime), nonce: header.nonce.toString('hex'), From 7001e70a8924095a9cdae37ac302027bbd56b148 Mon Sep 17 00:00:00 2001 From: Justin Kook Date: Thu, 28 Mar 2019 15:42:03 -0400 Subject: [PATCH 10/40] removed getBlock rpc method to use internal getBlock method instead, fix conditional for valid block id for api/.../block/blockId to validate 66 char eth blockIds --- packages/bitcore-node/src/providers/chain-state/eth/eth.ts | 5 ----- .../src/providers/chain-state/internal/internal.ts | 4 +++- packages/insight-previous/src/providers/blocks/blocks.ts | 2 +- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/packages/bitcore-node/src/providers/chain-state/eth/eth.ts b/packages/bitcore-node/src/providers/chain-state/eth/eth.ts index 9b033a3be99..5750bf25ad5 100644 --- a/packages/bitcore-node/src/providers/chain-state/eth/eth.ts +++ b/packages/bitcore-node/src/providers/chain-state/eth/eth.ts @@ -39,11 +39,6 @@ export class ETHStateProvider extends InternalStateProvider implements CSP.IChai return { confirmed: balance, unconfirmed: 0, balance }; } - async getBlock(params: CSP.GetBlockParams) { - const { network, blockId } = params; - return this.getWeb3(network).eth.getBlock(Number(blockId)) as any; - } - async getTransaction(params: CSP.StreamTransactionParams) { try { let { chain, network, txId } = params; diff --git a/packages/bitcore-node/src/providers/chain-state/internal/internal.ts b/packages/bitcore-node/src/providers/chain-state/internal/internal.ts index 17425f9ec5b..9079c0b4f22 100644 --- a/packages/bitcore-node/src/providers/chain-state/internal/internal.ts +++ b/packages/bitcore-node/src/providers/chain-state/internal/internal.ts @@ -116,6 +116,8 @@ export class InternalStateProvider implements CSP.IChainStateService { if (blockId) { if (blockId.length === 64) { query.hash = blockId; + } else if (chain === 'ETH' && blockId.length === 66) { + query.hash = blockId; } else { let height = parseInt(blockId, 10); if (Number.isNaN(height) || height.toString(10) !== blockId) { @@ -517,7 +519,7 @@ export class InternalStateProvider implements CSP.IChainStateService { } async getLocalTip({ chain, network }) { - return BlockStorage.getLocalTip({ chain, network }); + return await BlockStorage.getLocalTip({ chain, network }); } async getLocatorHashes(params) { diff --git a/packages/insight-previous/src/providers/blocks/blocks.ts b/packages/insight-previous/src/providers/blocks/blocks.ts index 29fcb686409..4009617fd9c 100644 --- a/packages/insight-previous/src/providers/blocks/blocks.ts +++ b/packages/insight-previous/src/providers/blocks/blocks.ts @@ -66,7 +66,7 @@ export class BlocksProvider { merkleroot: block.merkleRoot, version: block.version, difficulty, - bits: block.bits.toString(16), + bits: block.bits ? block.bits.toString(16) : '', hash: block.hash, time: new Date(block.time).getTime() / 1000, tx: { From cc7fd0938e5413f6c23c135b9ad6853dfe65bdea Mon Sep 17 00:00:00 2001 From: Justin Kook Date: Thu, 28 Mar 2019 16:31:03 -0400 Subject: [PATCH 11/40] version and bits are optional properties on IBlock for block.unit.tests --- packages/bitcore-node/src/models/block/base/base.ts | 2 ++ packages/bitcore-node/src/types/Block.ts | 2 ++ 2 files changed, 4 insertions(+) diff --git a/packages/bitcore-node/src/models/block/base/base.ts b/packages/bitcore-node/src/models/block/base/base.ts index bacf11b60dd..fd9c95055f7 100644 --- a/packages/bitcore-node/src/models/block/base/base.ts +++ b/packages/bitcore-node/src/models/block/base/base.ts @@ -32,6 +32,8 @@ export class BlockModel extends BaseModel { network: block.network, hash: block.hash, height: block.height, + version: block.version, + bits: block.bits, size: block.size, merkleRoot: block.merkleRoot, time: block.time, diff --git a/packages/bitcore-node/src/types/Block.ts b/packages/bitcore-node/src/types/Block.ts index ec34897b2a1..504bf644993 100644 --- a/packages/bitcore-node/src/types/Block.ts +++ b/packages/bitcore-node/src/types/Block.ts @@ -10,6 +10,8 @@ export type IBlock = { nextBlockHash: string; transactionCount: number; nonce: number | string; + version?: number; + bits?: number; size: number; reward: number; processed: boolean; From 930d87f37713fd13130188e037ed9b1cc987d93e Mon Sep 17 00:00:00 2001 From: Justin Kook Date: Thu, 28 Mar 2019 16:55:32 -0400 Subject: [PATCH 12/40] await promise for getLocalTip, fixed getLocalTip test to stub mockCollection --- packages/bitcore-node/src/providers/chain-state/index.ts | 2 +- packages/bitcore-node/test/unit/models/block.unit.ts | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/bitcore-node/src/providers/chain-state/index.ts b/packages/bitcore-node/src/providers/chain-state/index.ts index f7d852f30f8..c25a99a6866 100644 --- a/packages/bitcore-node/src/providers/chain-state/index.ts +++ b/packages/bitcore-node/src/providers/chain-state/index.ts @@ -109,7 +109,7 @@ class ChainStateProxy implements CSP.ChainStateProvider { } async getLocalTip(params) { - return this.get(params).getLocalTip(params); + return await this.get(params).getLocalTip(params); } async getLocatorHashes(params) { diff --git a/packages/bitcore-node/test/unit/models/block.unit.ts b/packages/bitcore-node/test/unit/models/block.unit.ts index d81a19b6b1d..190df90dc50 100644 --- a/packages/bitcore-node/test/unit/models/block.unit.ts +++ b/packages/bitcore-node/test/unit/models/block.unit.ts @@ -90,7 +90,11 @@ describe('Block Model', function() { sandbox.restore(); }); it('should return the new tip', async () => { - mockStorage(null); + Object.assign(BtcBlockStorage.collection, mockCollection({ + height: addBlockParams.height + 1, + chain: 'BTC', + network: 'regtest' + })); const params = { chain: 'BTC', network: 'regtest' }; const result = await ChainStateProvider.getLocalTip(params); expect(result.height).to.deep.equal(addBlockParams.height + 1); From 2c979f86f53e71d90d61cbee2c5aba15dc364881 Mon Sep 17 00:00:00 2001 From: Justin Kook Date: Thu, 28 Mar 2019 17:15:44 -0400 Subject: [PATCH 13/40] Resolve eth.md readme merge conflict --- packages/bitcore-node/src/providers/chain-state/eth/eth.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/packages/bitcore-node/src/providers/chain-state/eth/eth.md b/packages/bitcore-node/src/providers/chain-state/eth/eth.md index fc600c3114d..787177d303a 100644 --- a/packages/bitcore-node/src/providers/chain-state/eth/eth.md +++ b/packages/bitcore-node/src/providers/chain-state/eth/eth.md @@ -3,14 +3,8 @@ The following config block supports two networks for ETH. Main and Local The local network would be geth, or testrpc -<<<<<<< HEAD -The main network shows how to connect via websocket - -``` -======= The main network shows how to connect via websocket ->>>>>>> a613a85ad8bcf51e84e8c6cc729877f66dfaeb4b ```json "ETH": { From 7c38c6683af68609ea26e18663af72546f207420 Mon Sep 17 00:00:00 2001 From: Justin Kook Date: Fri, 29 Mar 2019 10:08:21 -0400 Subject: [PATCH 14/40] added block reward and uncle rewards to convertedBlock, uncle reward needs to be an array, added error property to parent transaction object --- .../providers/chain-state/eth/parityRpc.ts | 2 +- .../src/services/p2p/eth/index.ts | 22 +++++++++++++++---- packages/bitcore-node/src/types/Block.ts | 1 + .../bitcore-node/src/types/Transaction.ts | 1 + 4 files changed, 21 insertions(+), 5 deletions(-) diff --git a/packages/bitcore-node/src/providers/chain-state/eth/parityRpc.ts b/packages/bitcore-node/src/providers/chain-state/eth/parityRpc.ts index 31786f58c9f..8d9f906d165 100644 --- a/packages/bitcore-node/src/providers/chain-state/eth/parityRpc.ts +++ b/packages/bitcore-node/src/providers/chain-state/eth/parityRpc.ts @@ -9,7 +9,7 @@ if (Symbol['asyncIterator'] === undefined) (Symbol as any)['asyncIterator'] = Sy interface ParityCall { callType?: 'call' | 'delegatecall'; author?: string; - rewardType?: 'block'; + rewardType?: 'block' | 'uncle'; from?: string; gas?: string; input?: string; diff --git a/packages/bitcore-node/src/services/p2p/eth/index.ts b/packages/bitcore-node/src/services/p2p/eth/index.ts index 4e7fbe5bd6f..08727d1e82a 100644 --- a/packages/bitcore-node/src/services/p2p/eth/index.ts +++ b/packages/bitcore-node/src/services/p2p/eth/index.ts @@ -218,9 +218,17 @@ export class EthP2pWorker { const height = new BN(block.header.number).toNumber(); let internalTxs = await this.rpc.getTransactionsFromBlock(height); for await (const tx of internalTxs) { - // if (tx.type === 'reward') { - // console.log(tx); - // } + if (tx.type === 'reward') { + const rewardIndex = [convertedBlock].findIndex( + t => t.hash === tx.blockHash && t.height === tx.blockNumber + ); + if (tx.action.rewardType && tx.action.rewardType === 'block') { + [convertedBlock][rewardIndex].reward = Number.parseInt(tx.action.value, 16); + } + if (tx.action.rewardType && tx.action.rewardType === 'uncle') { + [convertedBlock][rewardIndex].uncleReward = Number.parseInt(tx.action.value, 16); + } + } if (tx && tx.action) { const foundIndex = convertedTxs.findIndex( t => t.txid === tx.transactionHash && t.from !== tx.action.from && t.to !== tx.action.to @@ -228,6 +236,12 @@ export class EthP2pWorker { if (foundIndex > -1) { convertedTxs[foundIndex].internal.push(tx); } + if (tx.error) { + const errorIndex = convertedTxs.findIndex(t => t.txid === tx.transactionHash); + if (errorIndex && errorIndex > -1) { + convertedTxs[errorIndex].error = tx.error; + } + } } } @@ -277,7 +291,7 @@ export class EthP2pWorker { nextBlockHash: '', transactionCount: block.transactions.length, size: block.raw.length, - reward: 3, + reward: 0, processed: false, gasLimit: Number.parseInt(header.gasLimit.toString('hex'), 16) || 0, gasUsed: Number.parseInt(header.gasUsed.toString('hex'), 16) || 0, diff --git a/packages/bitcore-node/src/types/Block.ts b/packages/bitcore-node/src/types/Block.ts index 504bf644993..2d81465ce19 100644 --- a/packages/bitcore-node/src/types/Block.ts +++ b/packages/bitcore-node/src/types/Block.ts @@ -27,4 +27,5 @@ export type IEthBlock = IBlock & { gasLimit: number; gasUsed: number; stateRoot: Buffer; + uncleReward?: number; }; diff --git a/packages/bitcore-node/src/types/Transaction.ts b/packages/bitcore-node/src/types/Transaction.ts index ad212e1cb24..f5c936d39e6 100644 --- a/packages/bitcore-node/src/types/Transaction.ts +++ b/packages/bitcore-node/src/types/Transaction.ts @@ -30,6 +30,7 @@ export type IEthTransaction = ITransaction & { from: string; internal: Array; abiType?: 'ERC20' | 'ERC721'; + error?: string; }; export type TransactionJSON = { From 903c412105f4b39e95a0007fd89867f63cf40e9c Mon Sep 17 00:00:00 2001 From: Justin Kook Date: Fri, 29 Mar 2019 16:47:51 -0400 Subject: [PATCH 15/40] default block reward set to 5, tag wallets when syncing transactions by lowercase address, added eth transform for streamWalletTransactions --- .../bitcore-node/src/models/block/index.ts | 7 +- .../models/transaction/eth/ethTransaction.ts | 8 +- .../src/models/transaction/index.ts | 10 ++- .../bitcore-node/src/models/walletAddress.ts | 3 +- .../chain-state/internal/internal.ts | 28 +++++-- .../{ => transforms/btc}/transforms.ts | 27 ++++--- .../internal/transforms/eth/ethTransforms.ts | 80 +++++++++++++++++++ .../src/services/p2p/eth/index.ts | 7 +- .../components/activity/TransactionList.tsx | 48 ++++++++--- .../bitcore-wallet-ui/src/types/state.tsx | 4 +- .../src/views/activity/WalletView.tsx | 2 +- 11 files changed, 176 insertions(+), 48 deletions(-) rename packages/bitcore-node/src/providers/chain-state/internal/{ => transforms/btc}/transforms.ts (83%) create mode 100644 packages/bitcore-node/src/providers/chain-state/internal/transforms/eth/ethTransforms.ts diff --git a/packages/bitcore-node/src/models/block/index.ts b/packages/bitcore-node/src/models/block/index.ts index 364799bd66a..c9426562521 100644 --- a/packages/bitcore-node/src/models/block/index.ts +++ b/packages/bitcore-node/src/models/block/index.ts @@ -1,3 +1,6 @@ export { BlockStorage } from './base/base'; -export { EthBlockStorage } from './eth/ethBlock'; -export { BtcBlockStorage } from './btc/btcBlock'; +import { EthBlockStorage } from './eth/ethBlock'; +import { BtcBlockStorage } from './btc/btcBlock'; + +export { EthBlockStorage }; +export { BtcBlockStorage }; diff --git a/packages/bitcore-node/src/models/transaction/eth/ethTransaction.ts b/packages/bitcore-node/src/models/transaction/eth/ethTransaction.ts index 66efeba2cbc..c3610c973d3 100644 --- a/packages/bitcore-node/src/models/transaction/eth/ethTransaction.ts +++ b/packages/bitcore-node/src/models/transaction/eth/ethTransaction.ts @@ -95,8 +95,12 @@ export class EthTransactionModel extends TransactionModel { return Promise.all( params.txs.map(async (tx: IEthTransaction) => { const { to, txid, from } = tx; - const sentWallets = await WalletAddressStorage.collection.find({ chain, network, address: from }).toArray(); - const receivedWallets = await WalletAddressStorage.collection.find({ chain, network, address: to }).toArray(); + const sentWallets = await WalletAddressStorage.collection + .find({ chain, network, address: from.toLowerCase() }) + .toArray(); + const receivedWallets = await WalletAddressStorage.collection + .find({ chain, network, address: to.toLowerCase() }) + .toArray(); const wallets = _.uniqBy(sentWallets.concat(receivedWallets).map(w => w.wallet), w => w.toHexString()); return { diff --git a/packages/bitcore-node/src/models/transaction/index.ts b/packages/bitcore-node/src/models/transaction/index.ts index 8c80a702665..c9d65d893c7 100644 --- a/packages/bitcore-node/src/models/transaction/index.ts +++ b/packages/bitcore-node/src/models/transaction/index.ts @@ -1,3 +1,7 @@ -export { TransactionStorage } from './base/base'; -export { EthTransactionStorage } from './eth/ethTransaction'; -export { BtcTransactionStorage } from './btc/btcTransaction'; +import { TransactionStorage } from './base/base'; +import { EthTransactionStorage } from './eth/ethTransaction'; +import { BtcTransactionStorage } from './btc/btcTransaction'; + +export { TransactionStorage }; +export { EthTransactionStorage }; +export { BtcTransactionStorage }; diff --git a/packages/bitcore-node/src/models/walletAddress.ts b/packages/bitcore-node/src/models/walletAddress.ts index e83e8783a0b..fce269aa574 100644 --- a/packages/bitcore-node/src/models/walletAddress.ts +++ b/packages/bitcore-node/src/models/walletAddress.ts @@ -95,13 +95,12 @@ export class WalletAddressModel extends BaseModel { addressBatch.map(address => { return { insertOne: { - document: { chain, network, wallet: wallet._id, address, processed: false } + document: { chain, network, wallet: wallet._id, address: address.toLowerCase(), processed: false } } }; }) ), { ordered: false }; - } catch (err) { // Ignore duplicate keys, they may be half processed if (err.code !== 11000) { diff --git a/packages/bitcore-node/src/providers/chain-state/internal/internal.ts b/packages/bitcore-node/src/providers/chain-state/internal/internal.ts index 9079c0b4f22..aa7d7f2d588 100644 --- a/packages/bitcore-node/src/providers/chain-state/internal/internal.ts +++ b/packages/bitcore-node/src/providers/chain-state/internal/internal.ts @@ -11,13 +11,16 @@ import { CSP } from '../../../types/namespaces/ChainStateProvider'; import { Storage } from '../../../services/storage'; import { RPC } from '../../../rpc'; import { LoggifyClass } from '../../../decorators/Loggify'; -import { TransactionStorage } from '../../../models/transaction'; -import { ListTransactionsStream } from './transforms'; +import { TransactionStorage } from '../../../models/transaction/base/base'; import { StringifyJsonStream } from '../../../utils/stringifyJsonStream'; import { StateStorage } from '../../../models/state'; import { SpentHeightIndicators, CoinJSON } from '../../../types/Coin'; import { Config } from '../../../services/config'; import { IBlock } from '../../../types/Block'; +import { EthTransactionStorage } from '../../../models/transaction/eth/ethTransaction'; +import { BtcTransactionStorage } from '../../../models/transaction/btc/btcTransaction'; +import { EthListTransactionsStream } from './transforms/eth/ethTransforms'; +import { ListTransactionsStream } from './transforms/btc/transforms'; @LoggifyClass export class InternalStateProvider implements CSP.IChainStateService { @@ -370,12 +373,21 @@ export class InternalStateProvider implements CSP.IChainStateService { } } - const transactionStream = TransactionStorage.collection - .find(query) - .sort({ blockTimeNormalized: 1 }) - .addCursorFlag('noCursorTimeout', true); - const listTransactionsStream = new ListTransactionsStream(wallet); - transactionStream.pipe(listTransactionsStream).pipe(res); + if (chain === 'ETH') { + const ethTransactionStream = EthTransactionStorage.collection + .find(query) + .sort({ blockTimeNormalized: 1 }) + .addCursorFlag('noCursorTimeout', true); + const ethListTransactionsStream = new EthListTransactionsStream(wallet); + ethTransactionStream.pipe(ethListTransactionsStream).pipe(res); + } else { + const transactionStream = BtcTransactionStorage.collection + .find(query) + .sort({ blockTimeNormalized: 1 }) + .addCursorFlag('noCursorTimeout', true); + const listTransactionsStream = new ListTransactionsStream(wallet); + transactionStream.pipe(listTransactionsStream).pipe(res); + } } async getWalletBalance(params: CSP.GetWalletBalanceParams) { diff --git a/packages/bitcore-node/src/providers/chain-state/internal/transforms.ts b/packages/bitcore-node/src/providers/chain-state/internal/transforms/btc/transforms.ts similarity index 83% rename from packages/bitcore-node/src/providers/chain-state/internal/transforms.ts rename to packages/bitcore-node/src/providers/chain-state/internal/transforms/btc/transforms.ts index be370bd18d2..48cc8f3ac00 100644 --- a/packages/bitcore-node/src/providers/chain-state/internal/transforms.ts +++ b/packages/bitcore-node/src/providers/chain-state/internal/transforms/btc/transforms.ts @@ -1,6 +1,6 @@ -import { CoinStorage } from '../../../models/coin'; +import { CoinStorage } from '../../../../../models/coin'; import { Transform } from 'stream'; -import { IWallet } from '../../../models/wallet'; +import { IWallet } from '../../../../../models/wallet'; export class ListTransactionsStream extends Transform { constructor(private wallet: IWallet) { @@ -8,11 +8,11 @@ export class ListTransactionsStream extends Transform { } async _transform(transaction, _, done) { - const sending = !! await CoinStorage.collection.countDocuments({ + const sending = !!(await CoinStorage.collection.countDocuments({ wallets: this.wallet._id, 'wallets.0': { $exists: true }, spentTxid: transaction.txid - }); + })); const wallet = this.wallet._id!.toString(); @@ -29,8 +29,8 @@ export class ListTransactionsStream extends Transform { .project({ address: 1, wallets: 1, value: 1, mintIndex: 1 }) .addCursorFlag('noCursorTimeout', true) .toArray(); - outputs.forEach((output) => { - const sendingToOurself = output.wallets.some((outputWallet) => { + outputs.forEach(output => { + const sendingToOurself = output.wallets.some(outputWallet => { return outputWallet.equals(wallet); }); if (!sendingToOurself) { @@ -79,16 +79,17 @@ export class ListTransactionsStream extends Transform { } return done(); } else { - const outputs = await CoinStorage.collection.find({ - wallets: this.wallet._id, - 'wallets.0': { $exists: true }, - mintTxid: transaction.txid - }) + const outputs = await CoinStorage.collection + .find({ + wallets: this.wallet._id, + 'wallets.0': { $exists: true }, + mintTxid: transaction.txid + }) .project({ address: 1, wallets: 1, value: 1, mintIndex: 1 }) .addCursorFlag('noCursorTimeout', true) .toArray(); - outputs.forEach((output) => { - const weReceived = output.wallets.some((outputWallet) => { + outputs.forEach(output => { + const weReceived = output.wallets.some(outputWallet => { return outputWallet.equals(wallet); }); if (weReceived) { diff --git a/packages/bitcore-node/src/providers/chain-state/internal/transforms/eth/ethTransforms.ts b/packages/bitcore-node/src/providers/chain-state/internal/transforms/eth/ethTransforms.ts new file mode 100644 index 00000000000..28c40fccfa7 --- /dev/null +++ b/packages/bitcore-node/src/providers/chain-state/internal/transforms/eth/ethTransforms.ts @@ -0,0 +1,80 @@ +import { Transform } from 'stream'; +import { IWallet } from '../../../../../models/wallet'; +import { WalletAddressStorage } from '../../../../../models/walletAddress'; +import { IEthTransaction } from '../../../../../types/Transaction'; + +export class EthListTransactionsStream extends Transform { + constructor(private wallet: IWallet) { + super({ objectMode: true }); + } + + async _transform(transaction: IEthTransaction, _, done) { + const sending = await WalletAddressStorage.collection.countDocuments({ + wallet: this.wallet._id, + address: transaction.from + }); + if (sending > 0) { + const sendingToOurself = await WalletAddressStorage.collection.countDocuments({ + wallets: this.wallet._id, + address: transaction.to + }); + if (!sendingToOurself) { + this.push( + JSON.stringify({ + txid: transaction.txid, + fee: transaction.fee, + category: 'send', + value: -transaction.value, + height: transaction.blockHeight, + from: transaction.from, + to: transaction.to, + blockTime: transaction.blockTimeNormalized, + internal: transaction.internal, + abiType: transaction.abiType, + error: transaction.error + }) + '\n' + ); + } else { + this.push( + JSON.stringify({ + txid: transaction.txid, + fee: transaction.fee, + category: 'move', + value: transaction.value, + height: transaction.blockHeight, + from: transaction.from, + to: transaction.to, + blockTime: transaction.blockTimeNormalized, + internal: transaction.internal, + abiType: transaction.abiType, + error: transaction.error + }) + '\n' + ); + } + return done(); + } else { + const weReceived = await WalletAddressStorage.collection.countDocuments({ + wallet: this.wallet._id, + address: transaction.to + }); + if (weReceived > 0) { + this.push( + JSON.stringify({ + txid: transaction.txid, + fee: transaction.fee, + category: 'recieve', + value: transaction.value, + height: transaction.blockHeight, + from: transaction.from, + to: transaction.to, + blockTime: transaction.blockTimeNormalized, + internal: transaction.internal, + abiType: transaction.abiType, + error: transaction.error + }) + '\n' + ); + } + } + return done(); + } +} diff --git a/packages/bitcore-node/src/services/p2p/eth/index.ts b/packages/bitcore-node/src/services/p2p/eth/index.ts index 08727d1e82a..26eb9a70abe 100644 --- a/packages/bitcore-node/src/services/p2p/eth/index.ts +++ b/packages/bitcore-node/src/services/p2p/eth/index.ts @@ -291,7 +291,7 @@ export class EthP2pWorker { nextBlockHash: '', transactionCount: block.transactions.length, size: block.raw.length, - reward: 0, + reward: 5, processed: false, gasLimit: Number.parseInt(header.gasLimit.toString('hex'), 16) || 0, gasUsed: Number.parseInt(header.gasUsed.toString('hex'), 16) || 0, @@ -306,7 +306,8 @@ export class EthP2pWorker { const txid = '0x' + tx.hash().toString('hex'); const to = '0x' + tx.to.toString('hex'); const from = '0x' + tx.from.toString('hex'); - const fee = Number(tx.getUpfrontCost().toString()); + const value = Number.parseInt(tx.value.toString('hex'), 16); + const fee = Number(tx.getUpfrontCost().toString()) - value; const abiType = this.rpc.abiDecode('0x' + tx.data.toString('hex')); const nonce = tx.nonce.toString('hex'); const convertedTx: IEthTransaction = { @@ -320,7 +321,7 @@ export class EthP2pWorker { blockTimeNormalized: new Date(), fee, size: tx.data.length, - value: Number.parseInt(tx.value.toString('hex'), 16) || 0, + value, wallets: [], to, from, diff --git a/packages/bitcore-wallet-ui/src/components/activity/TransactionList.tsx b/packages/bitcore-wallet-ui/src/components/activity/TransactionList.tsx index 9ae5d34464d..8fe8e29e146 100644 --- a/packages/bitcore-wallet-ui/src/components/activity/TransactionList.tsx +++ b/packages/bitcore-wallet-ui/src/components/activity/TransactionList.tsx @@ -53,6 +53,12 @@ const styles = (theme: Theme) => green: { color: 'green' }, + blue: { + color: 'blue' + }, + red: { + color: 'red' + }, link: { color: 'white', textDecoration: 'none', @@ -64,6 +70,33 @@ const styles = (theme: Theme) => function Transactions(props: Props) { const { classes, tx, wallet } = props; + let statusColor = 'default'; + + const filterCategory = () => { + switch (tx.category) { + case 'recieve': + tx.height > 0 ? (statusColor = 'green') : (statusColor = 'default'); + return ( + + {tx.height > 0 ? `Recieved Block: ${tx.height}` : 'Confirming'} + + ); + case 'send': + tx.height > 0 ? (statusColor = 'red') : (statusColor = 'default'); + return ( + + {tx.height > 0 ? `Sent Block: ${tx.height}` : 'Confirming'} + + ); + case 'move': + tx.height > 0 ? (statusColor = 'blue') : (statusColor = 'default'); + return ( + + {tx.height > 0 ? `Token Transfer Block ${tx.height}` : 'Confirming'}{' '} + + ); + } + }; return ( - 0 ? classes.green : classes.default} - > - {tx.height > 0 ? `Block: ${tx.height}` : 'Confirming'}{' '} - + {filterCategory()} - 0 ? classes.green : classes.default} - > - {tx.satoshis! / 1e8} {wallet ? wallet.chain : ''} + + {tx.value! / 1e18} {wallet ? wallet.chain : ''} {new Date(tx.blockTime).toDateString()} diff --git a/packages/bitcore-wallet-ui/src/types/state.tsx b/packages/bitcore-wallet-ui/src/types/state.tsx index 00a0d319794..2b467fdcd74 100644 --- a/packages/bitcore-wallet-ui/src/types/state.tsx +++ b/packages/bitcore-wallet-ui/src/types/state.tsx @@ -15,8 +15,8 @@ export interface AppState { fee: number; height: number; id: string; - outputIndex: number; - satoshis: number; + outputIndex?: number; + value: number; size: number; txid: string; }[]; diff --git a/packages/bitcore-wallet-ui/src/views/activity/WalletView.tsx b/packages/bitcore-wallet-ui/src/views/activity/WalletView.tsx index 0160223e114..423eea0215d 100644 --- a/packages/bitcore-wallet-ui/src/views/activity/WalletView.tsx +++ b/packages/bitcore-wallet-ui/src/views/activity/WalletView.tsx @@ -61,7 +61,7 @@ class WalletContainer extends Component { if (foundIndex > -1) { prevTx[foundIndex] = d; } else { - prevTx = [...prevTx.slice(0, 9), d]; + prevTx = [...prevTx, d]; } }) .on('finish', () => { From c15b7833cd0529816db5d124b64895d902bfcf31 Mon Sep 17 00:00:00 2001 From: Justin Kook Date: Mon, 1 Apr 2019 13:32:56 -0400 Subject: [PATCH 16/40] added loggifyClass to parityRPC, changed typing uncleRewards to array, complete block rewards --- .../providers/chain-state/eth/parityRpc.ts | 2 ++ .../src/services/p2p/eth/index.ts | 27 ++++++++++++++----- packages/bitcore-node/src/types/Block.ts | 2 +- 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/packages/bitcore-node/src/providers/chain-state/eth/parityRpc.ts b/packages/bitcore-node/src/providers/chain-state/eth/parityRpc.ts index 8d9f906d165..734d8b64840 100644 --- a/packages/bitcore-node/src/providers/chain-state/eth/parityRpc.ts +++ b/packages/bitcore-node/src/providers/chain-state/eth/parityRpc.ts @@ -1,6 +1,7 @@ import Web3 from 'web3'; import AbiDecoder from 'abi-decoder'; import { IEthTransaction } from '../../../types/Transaction'; +import { LoggifyClass } from '../../../decorators/Loggify'; const erc20abi = require('../erc20/erc20abi'); const erc721abi = require('../erc20/erc721abi'); @@ -39,6 +40,7 @@ export interface TokenTransferResponse { params?: [{ name: string; value: string; type: string }]; } +@LoggifyClass export class ParityRPC { web3: Web3; diff --git a/packages/bitcore-node/src/services/p2p/eth/index.ts b/packages/bitcore-node/src/services/p2p/eth/index.ts index 26eb9a70abe..bbc4a415d18 100644 --- a/packages/bitcore-node/src/services/p2p/eth/index.ts +++ b/packages/bitcore-node/src/services/p2p/eth/index.ts @@ -219,14 +219,15 @@ export class EthP2pWorker { let internalTxs = await this.rpc.getTransactionsFromBlock(height); for await (const tx of internalTxs) { if (tx.type === 'reward') { - const rewardIndex = [convertedBlock].findIndex( - t => t.hash === tx.blockHash && t.height === tx.blockNumber - ); if (tx.action.rewardType && tx.action.rewardType === 'block') { - [convertedBlock][rewardIndex].reward = Number.parseInt(tx.action.value, 16); + const gasSum = convertedTxs.reduce((sum, e) => sum + e.fee, 0); + const totalReward = Number.parseInt(tx.action.value, 16) + gasSum; + convertedBlock.reward = totalReward; } if (tx.action.rewardType && tx.action.rewardType === 'uncle') { - [convertedBlock][rewardIndex].uncleReward = Number.parseInt(tx.action.value, 16); + const uncles = convertedBlock.uncleReward || []; + const uncleValue = Number.parseInt(tx.action.value, 16); + Object.assign(convertedBlock, { uncleReward: uncles.concat([uncleValue]) }); } } if (tx && tx.action) { @@ -277,6 +278,18 @@ export class EthP2pWorker { const blockTime = Number.parseInt(header.timestamp.toString('hex') || '0', 16) * 1000; const hash = `0x${block.header.hash().toString('hex')}`; const height = new BN(header.number).toNumber(); + let reward = 5; + const ForkHeights = { + Byzantium: 4370000, + Constantinople: 7280000 + }; + + if (height > ForkHeights.Byzantium) { + reward = 3; + } else if (height > ForkHeights.Constantinople) { + reward = 2; + } + const convertedBlock: IEthBlock = { chain: this.chain, network: this.network, @@ -291,7 +304,7 @@ export class EthP2pWorker { nextBlockHash: '', transactionCount: block.transactions.length, size: block.raw.length, - reward: 5, + reward, processed: false, gasLimit: Number.parseInt(header.gasLimit.toString('hex'), 16) || 0, gasUsed: Number.parseInt(header.gasUsed.toString('hex'), 16) || 0, @@ -306,7 +319,7 @@ export class EthP2pWorker { const txid = '0x' + tx.hash().toString('hex'); const to = '0x' + tx.to.toString('hex'); const from = '0x' + tx.from.toString('hex'); - const value = Number.parseInt(tx.value.toString('hex'), 16); + const value = Number.parseInt(tx.value.toString('hex') || '0x0', 16); const fee = Number(tx.getUpfrontCost().toString()) - value; const abiType = this.rpc.abiDecode('0x' + tx.data.toString('hex')); const nonce = tx.nonce.toString('hex'); diff --git a/packages/bitcore-node/src/types/Block.ts b/packages/bitcore-node/src/types/Block.ts index 2d81465ce19..3e92a72a93e 100644 --- a/packages/bitcore-node/src/types/Block.ts +++ b/packages/bitcore-node/src/types/Block.ts @@ -27,5 +27,5 @@ export type IEthBlock = IBlock & { gasLimit: number; gasUsed: number; stateRoot: Buffer; - uncleReward?: number; + uncleReward?: Array; }; From 6450318e0c6a054c12ceb1712aaac6d5b665a191 Mon Sep 17 00:00:00 2001 From: Justin Kook Date: Mon, 1 Apr 2019 15:21:09 -0400 Subject: [PATCH 17/40] revert index named exports for BlockStorage and TransactionStorage --- packages/bitcore-node/src/models/block/index.ts | 7 ++----- packages/bitcore-node/src/models/transaction/index.ts | 10 +++------- 2 files changed, 5 insertions(+), 12 deletions(-) diff --git a/packages/bitcore-node/src/models/block/index.ts b/packages/bitcore-node/src/models/block/index.ts index c9426562521..364799bd66a 100644 --- a/packages/bitcore-node/src/models/block/index.ts +++ b/packages/bitcore-node/src/models/block/index.ts @@ -1,6 +1,3 @@ export { BlockStorage } from './base/base'; -import { EthBlockStorage } from './eth/ethBlock'; -import { BtcBlockStorage } from './btc/btcBlock'; - -export { EthBlockStorage }; -export { BtcBlockStorage }; +export { EthBlockStorage } from './eth/ethBlock'; +export { BtcBlockStorage } from './btc/btcBlock'; diff --git a/packages/bitcore-node/src/models/transaction/index.ts b/packages/bitcore-node/src/models/transaction/index.ts index c9d65d893c7..8c80a702665 100644 --- a/packages/bitcore-node/src/models/transaction/index.ts +++ b/packages/bitcore-node/src/models/transaction/index.ts @@ -1,7 +1,3 @@ -import { TransactionStorage } from './base/base'; -import { EthTransactionStorage } from './eth/ethTransaction'; -import { BtcTransactionStorage } from './btc/btcTransaction'; - -export { TransactionStorage }; -export { EthTransactionStorage }; -export { BtcTransactionStorage }; +export { TransactionStorage } from './base/base'; +export { EthTransactionStorage } from './eth/ethTransaction'; +export { BtcTransactionStorage } from './btc/btcTransaction'; From f8457e2bdd1d4eff54e4780ab88d210a8bd4434d Mon Sep 17 00:00:00 2001 From: Justin Kook Date: Mon, 1 Apr 2019 15:36:55 -0400 Subject: [PATCH 18/40] toLowerCase() address for wallet integration tests and wallet benchmark tests --- .../test/integration/models/wallet.integration.ts | 4 ++-- .../test/integration/wallet-benchmark.integration.ts | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/bitcore-node/test/integration/models/wallet.integration.ts b/packages/bitcore-node/test/integration/models/wallet.integration.ts index fdc28eb7c8c..d763fe161f3 100644 --- a/packages/bitcore-node/test/integration/models/wallet.integration.ts +++ b/packages/bitcore-node/test/integration/models/wallet.integration.ts @@ -90,14 +90,14 @@ describe('Wallet Model', function() { wallet: findWalletResult._id, chain, network, - address: address1 + address: address1.toLowerCase() }) .toArray(); expect(findAddressResult[0]).to.have.deep.property('chain', chain); expect(findAddressResult[0]).to.have.deep.property('network', network); expect(findAddressResult[0]).to.have.deep.property('wallet', findWalletResult._id); - expect(findAddressResult[0]).to.have.deep.property('address', address1); + expect(findAddressResult[0]).to.have.deep.property('address', address1.toLowerCase()); expect(findAddressResult[0]).to.have.deep.property('processed', true); } }); diff --git a/packages/bitcore-node/test/integration/wallet-benchmark.integration.ts b/packages/bitcore-node/test/integration/wallet-benchmark.integration.ts index a8c963d915a..8021b8b4d7f 100644 --- a/packages/bitcore-node/test/integration/wallet-benchmark.integration.ts +++ b/packages/bitcore-node/test/integration/wallet-benchmark.integration.ts @@ -63,7 +63,7 @@ describe('Wallet Benchmark', function() { const smallAddresses = foundSmallAddressBatch.map(wa => wa.address); for (let address of smallAddressBatch) { - expect(smallAddresses.includes(address)).to.be.true; + expect(smallAddresses.includes(address.toLowerCase())).to.be.true; } expect(foundSmallAddressBatch.length).to.have.deep.equal(smallAddressBatch.length); @@ -78,7 +78,7 @@ describe('Wallet Benchmark', function() { const mediumAddresses = foundMediumAddressBatch.map(wa => wa.address); for (let address of mediumAddressBatch) { - expect(mediumAddresses.includes(address)).to.be.true; + expect(mediumAddresses.includes(address.toLowerCase())).to.be.true; } expect(foundMediumAddressBatch.length).to.have.deep.equal(mediumAddressBatch.length); @@ -93,7 +93,7 @@ describe('Wallet Benchmark', function() { const largeAddresses = foundLargeAddressBatch.map(wa => wa.address); for (let address of largeAddressBatch) { - expect(largeAddresses.includes(address)).to.be.true; + expect(largeAddresses.includes(address.toLowerCase())).to.be.true; } expect(foundLargeAddressBatch.length).to.have.deep.equal(largeAddressBatch.length); From 5a017e296e49b14bd940d995debea2634d4851e1 Mon Sep 17 00:00:00 2001 From: Justin Kook Date: Mon, 1 Apr 2019 15:47:33 -0400 Subject: [PATCH 19/40] processed property for wallet integration test --- .../bitcore-node/test/integration/models/wallet.integration.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/bitcore-node/test/integration/models/wallet.integration.ts b/packages/bitcore-node/test/integration/models/wallet.integration.ts index d763fe161f3..e7b46a7402e 100644 --- a/packages/bitcore-node/test/integration/models/wallet.integration.ts +++ b/packages/bitcore-node/test/integration/models/wallet.integration.ts @@ -98,7 +98,7 @@ describe('Wallet Model', function() { expect(findAddressResult[0]).to.have.deep.property('network', network); expect(findAddressResult[0]).to.have.deep.property('wallet', findWalletResult._id); expect(findAddressResult[0]).to.have.deep.property('address', address1.toLowerCase()); - expect(findAddressResult[0]).to.have.deep.property('processed', true); + expect(findAddressResult[0]).to.have.property('processed'); } }); }); From 162b7259469ce6ef42f517a31cf99797757cdc03 Mon Sep 17 00:00:00 2001 From: Justin Kook Date: Mon, 1 Apr 2019 15:53:29 -0400 Subject: [PATCH 20/40] wallet benchmark integration tests push address.toLowerCase() to address batches --- .../test/integration/wallet-benchmark.integration.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/bitcore-node/test/integration/wallet-benchmark.integration.ts b/packages/bitcore-node/test/integration/wallet-benchmark.integration.ts index 8021b8b4d7f..d2f869c95c6 100644 --- a/packages/bitcore-node/test/integration/wallet-benchmark.integration.ts +++ b/packages/bitcore-node/test/integration/wallet-benchmark.integration.ts @@ -25,21 +25,21 @@ describe('Wallet Benchmark', function() { for (let i = 0; i < 10; i++) { let address = await rpc.getnewaddress(''); - smallAddressBatch.push(address); + smallAddressBatch.push(address.toLowerCase()); } expect(smallAddressBatch.length).to.deep.equal(10); for (let i = 0; i < 100; i++) { let address = await rpc.getnewaddress(''); - mediumAddressBatch.push(address); + mediumAddressBatch.push(address.toLowerCase()); } expect(mediumAddressBatch.length).to.deep.equal(100); for (let i = 0; i < 1000; i++) { let address = await rpc.getnewaddress(''); - largeAddressBatch.push(address); + largeAddressBatch.push(address.toLowerCase()); } expect(largeAddressBatch.length).to.deep.equal(1000); @@ -63,7 +63,7 @@ describe('Wallet Benchmark', function() { const smallAddresses = foundSmallAddressBatch.map(wa => wa.address); for (let address of smallAddressBatch) { - expect(smallAddresses.includes(address.toLowerCase())).to.be.true; + expect(smallAddresses.includes(address)).to.be.true; } expect(foundSmallAddressBatch.length).to.have.deep.equal(smallAddressBatch.length); @@ -78,7 +78,7 @@ describe('Wallet Benchmark', function() { const mediumAddresses = foundMediumAddressBatch.map(wa => wa.address); for (let address of mediumAddressBatch) { - expect(mediumAddresses.includes(address.toLowerCase())).to.be.true; + expect(mediumAddresses.includes(address)).to.be.true; } expect(foundMediumAddressBatch.length).to.have.deep.equal(mediumAddressBatch.length); @@ -93,7 +93,7 @@ describe('Wallet Benchmark', function() { const largeAddresses = foundLargeAddressBatch.map(wa => wa.address); for (let address of largeAddressBatch) { - expect(largeAddresses.includes(address.toLowerCase())).to.be.true; + expect(largeAddresses.includes(address)).to.be.true; } expect(foundLargeAddressBatch.length).to.have.deep.equal(largeAddressBatch.length); From 74f33d94200cb7a0b799ff494f8cb06da3357671 Mon Sep 17 00:00:00 2001 From: Justin Kook Date: Mon, 1 Apr 2019 16:37:37 -0400 Subject: [PATCH 21/40] add 0x prefix to nonce in convertedBlock --- packages/bitcore-node/src/services/p2p/eth/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/bitcore-node/src/services/p2p/eth/index.ts b/packages/bitcore-node/src/services/p2p/eth/index.ts index bbc4a415d18..dc75ecbb44d 100644 --- a/packages/bitcore-node/src/services/p2p/eth/index.ts +++ b/packages/bitcore-node/src/services/p2p/eth/index.ts @@ -299,7 +299,7 @@ export class EthP2pWorker { merkleRoot: `0x${block.header.transactionsTrie.toString('hex')}`, time: new Date(blockTime), timeNormalized: new Date(blockTime), - nonce: header.nonce.toString('hex'), + nonce: `0x${header.nonce.toString('hex')}`, previousBlockHash: `0x${header.parentHash.toString('hex')}`, nextBlockHash: '', transactionCount: block.transactions.length, From 6e30dfdaf4e2ad73e1c760336977cc063af3054d Mon Sep 17 00:00:00 2001 From: Justin Kook Date: Tue, 2 Apr 2019 12:00:26 -0400 Subject: [PATCH 22/40] Starting work on ETH for BWS and copay --- packages/bitcore-wallet-client/lib/api.js | 10 +- .../bitcore-wallet-client/lib/credentials.js | 227 +++++++++++------- packages/bitcore-wallet-service/src/config.ts | 34 +-- .../src/lib/blockchainexplorer.ts | 3 + .../src/lib/common/constants.ts | 3 +- 5 files changed, 176 insertions(+), 101 deletions(-) diff --git a/packages/bitcore-wallet-client/lib/api.js b/packages/bitcore-wallet-client/lib/api.js index 8a29e8e7bc6..23e5c8e0931 100644 --- a/packages/bitcore-wallet-client/lib/api.js +++ b/packages/bitcore-wallet-client/lib/api.js @@ -9,6 +9,7 @@ var Bitcore = require('bitcore-lib'); var Bitcore_ = { btc: Bitcore, bch: require('bitcore-lib-cash'), + eth: require('bitcore-client') }; var Mnemonic = require('bitcore-mnemonic'); var sjcl = require('sjcl'); @@ -316,6 +317,7 @@ API.prototype.seedFromRandomWithMnemonic = function(opts) { opts = opts || {}; this.credentials = Credentials.createWithMnemonic(opts.coin || 'btc', opts.network || 'livenet', opts.passphrase, opts.language || 'en', opts.account || 0); + console.log(this.credentials); this.request.setCredentials(this.credentials); }; @@ -1060,7 +1062,7 @@ API.prototype.createWallet = function(walletName, copayerName, m, n, opts, cb) { opts = opts || {}; var coin = opts.coin || 'btc'; - if (!_.includes(['btc', 'bch'], coin)) return cb(new Error('Invalid coin')); + if (!_.includes(['btc', 'bch', 'eth'], coin)) return cb(new Error('Invalid coin')); var network = opts.network || 'livenet'; if (!_.includes(['testnet', 'livenet'], network)) return cb(new Error('Invalid network')); @@ -1141,7 +1143,7 @@ API.prototype.joinWallet = function(secret, copayerName, opts, cb) { opts = opts || {}; var coin = opts.coin || 'btc'; - if (!_.includes(['btc', 'bch'], coin)) return cb(new Error('Invalid coin')); + if (!_.includes(['btc', 'bch', 'eth'], coin)) return cb(new Error('Invalid coin')); try { var secretData = API.parseSecret(secret); @@ -1636,7 +1638,7 @@ API.prototype.getBalance = function(opts, cb) { var args = []; if (opts.coin) { - if (!_.includes(['btc', 'bch'], opts.coin)) return cb(new Error('Invalid coin')); + if (!_.includes(['btc', 'bch', 'eth'], opts.coin)) return cb(new Error('Invalid coin')); args.push('coin=' + opts.coin); } var qs = ''; @@ -1844,7 +1846,7 @@ API.signTxProposalFromAirGapped = function(key, txp, unencryptedPkr, m, n, opts) opts = opts || {} var coin = opts.coin || 'btc'; - if (!_.includes(['btc', 'bch'], coin)) return cb(new Error('Invalid coin')); + if (!_.includes(['btc', 'bch', 'eth'], coin)) return cb(new Error('Invalid coin')); var publicKeyRing = JSON.parse(unencryptedPkr); diff --git a/packages/bitcore-wallet-client/lib/credentials.js b/packages/bitcore-wallet-client/lib/credentials.js index 77ce29a59af..74145535eab 100644 --- a/packages/bitcore-wallet-client/lib/credentials.js +++ b/packages/bitcore-wallet-client/lib/credentials.js @@ -39,22 +39,23 @@ var FIELDS = [ 'compliantDerivation', 'addressType', 'hwInfo', - 'entropySourcePath', + 'entropySourcePath' ]; function Credentials() { this.version = '1.0.0'; this.derivationStrategy = Constants.DERIVATION_STRATEGIES.BIP44; this.account = 0; -}; +} function _checkCoin(coin) { - if (!_.includes(['btc', 'bch'], coin)) throw new Error('Invalid coin'); -}; + if (!_.includes(['btc', 'bch', 'eth'], coin)) throw new Error('Invalid coin'); +} function _checkNetwork(network) { - if (!_.includes(['livenet', 'testnet'], network)) throw new Error('Invalid network'); -}; + if (!_.includes(['livenet', 'testnet'], network)) + throw new Error('Invalid network'); +} Credentials.create = function(coin, network) { _checkCoin(coin); @@ -64,22 +65,29 @@ Credentials.create = function(coin, network) { x.coin = coin; x.network = network; - x.xPrivKey = (new Bitcore.HDPrivateKey(network)).toString(); + x.xPrivKey = new Bitcore.HDPrivateKey().toString(); x.compliantDerivation = true; x._expand(); return x; }; var wordsForLang = { - 'en': Mnemonic.Words.ENGLISH, - 'es': Mnemonic.Words.SPANISH, - 'ja': Mnemonic.Words.JAPANESE, - 'zh': Mnemonic.Words.CHINESE, - 'fr': Mnemonic.Words.FRENCH, - 'it': Mnemonic.Words.ITALIAN, -}; - -Credentials.createWithMnemonic = function(coin, network, passphrase, language, account, opts) { + en: Mnemonic.Words.ENGLISH, + es: Mnemonic.Words.SPANISH, + ja: Mnemonic.Words.JAPANESE, + zh: Mnemonic.Words.CHINESE, + fr: Mnemonic.Words.FRENCH, + it: Mnemonic.Words.ITALIAN +}; + +Credentials.createWithMnemonic = function( + coin, + network, + passphrase, + language, + account, + opts +) { _checkCoin(coin); _checkNetwork(network); if (!wordsForLang[language]) throw new Error('Unsupported language'); @@ -89,26 +97,33 @@ Credentials.createWithMnemonic = function(coin, network, passphrase, language, a var m = new Mnemonic(wordsForLang[language]); while (!Mnemonic.isValid(m.toString())) { - m = new Mnemonic(wordsForLang[language]) - }; + m = new Mnemonic(wordsForLang[language]); + } var x = new Credentials(); x.coin = coin; x.network = network; x.account = account; - x.xPrivKey = m.toHDPrivateKey(passphrase, network).toString(); + x.xPrivKey = m.toHDPrivateKey(passphrase).toString(); x.compliantDerivation = true; x._expand(); x.mnemonic = m.phrase; x.mnemonicHasPassphrase = !!passphrase; - return x; }; -Credentials.fromExtendedPrivateKey = function(coin, xPrivKey, account, derivationStrategy, opts) { +Credentials.fromExtendedPrivateKey = function( + coin, + xPrivKey, + account, + derivationStrategy, + opts +) { _checkCoin(coin); $.shouldBeNumber(account); - $.checkArgument(_.includes(_.values(Constants.DERIVATION_STRATEGIES), derivationStrategy)); + $.checkArgument( + _.includes(_.values(Constants.DERIVATION_STRATEGIES), derivationStrategy) + ); opts = opts || {}; @@ -128,18 +143,28 @@ Credentials.fromExtendedPrivateKey = function(coin, xPrivKey, account, derivatio }; // note that mnemonic / passphrase is NOT stored -Credentials.fromMnemonic = function(coin, network, words, passphrase, account, derivationStrategy, opts) { +Credentials.fromMnemonic = function( + coin, + network, + words, + passphrase, + account, + derivationStrategy, + opts +) { _checkCoin(coin); _checkNetwork(network); $.shouldBeNumber(account); - $.checkArgument(_.includes(_.values(Constants.DERIVATION_STRATEGIES), derivationStrategy)); + $.checkArgument( + _.includes(_.values(Constants.DERIVATION_STRATEGIES), derivationStrategy) + ); opts = opts || {}; var m = new Mnemonic(words); var x = new Credentials(); x.coin = coin; - x.xPrivKey = m.toHDPrivateKey(passphrase, network).toString(); + x.xPrivKey = m.toHDPrivateKey(passphrase).toString(); x.mnemonic = words; x.mnemonicHasPassphrase = !!passphrase; x.account = account; @@ -166,22 +191,37 @@ Credentials.fromMnemonic = function(coin, network, words, passphrase, account, d * entropySource should be a HEX string containing pseudo-random data, that can * be deterministically derived from the xPrivKey, and should not be derived from xPubKey */ -Credentials.fromExtendedPublicKey = function(coin, xPubKey, source, entropySourceHex, account, derivationStrategy, opts) { +Credentials.fromExtendedPublicKey = function( + coin, + xPubKey, + source, + entropySourceHex, + account, + derivationStrategy, + opts +) { _checkCoin(coin); $.checkArgument(entropySourceHex); $.shouldBeNumber(account); - $.checkArgument(_.includes(_.values(Constants.DERIVATION_STRATEGIES), derivationStrategy)); + $.checkArgument( + _.includes(_.values(Constants.DERIVATION_STRATEGIES), derivationStrategy) + ); opts = opts || {}; var entropyBuffer = new Buffer(entropySourceHex, 'hex'); //require at least 112 bits of entropy - $.checkArgument(entropyBuffer.length >= 14, 'At least 112 bits of entropy are needed') + $.checkArgument( + entropyBuffer.length >= 14, + 'At least 112 bits of entropy are needed' + ); var x = new Credentials(); x.coin = coin; x.xPubKey = xPubKey; - x.entropySource = Bitcore.crypto.Hash.sha256sha256(entropyBuffer).toString('hex'); + x.entropySource = Bitcore.crypto.Hash.sha256sha256(entropyBuffer).toString( + 'hex' + ); x.account = account; x.derivationStrategy = derivationStrategy; x.externalSource = source; @@ -203,7 +243,6 @@ Credentials.prototype._hashFromEntropy = function(prefix, length) { return b2.slice(0, length); }; - Credentials.prototype._expand = function() { $.checkState(this.xPrivKey || (this.xPubKey && this.entropySource)); @@ -240,7 +279,9 @@ Credentials.prototype._expand = function() { */ - var network = Credentials._getNetworkFromExtendedKey(this.xPrivKey || this.xPubKey); + var network = Credentials._getNetworkFromExtendedKey( + this.xPrivKey || this.xPubKey + ); if (this.network) { $.checkState(this.network == network); } else { @@ -250,16 +291,18 @@ Credentials.prototype._expand = function() { if (this.xPrivKey) { var xPrivKey = new Bitcore.HDPrivateKey.fromString(this.xPrivKey); - var deriveFn = this.compliantDerivation ? _.bind(xPrivKey.deriveChild, xPrivKey) : _.bind(xPrivKey.deriveNonCompliantChild, xPrivKey); + var deriveFn = this.compliantDerivation + ? _.bind(xPrivKey.deriveChild, xPrivKey) + : _.bind(xPrivKey.deriveNonCompliantChild, xPrivKey); - var derivedXPrivKey = deriveFn(this.getBaseAddressDerivationPath()); + //var derivedXPrivKey = deriveFn(this.getBaseAddressDerivationPath()); // this is the xPubKey shared with the server. - this.xPubKey = derivedXPrivKey.hdPublicKey.toString(); + this.xPubKey = xPrivKey.hdPublicKey.toString(); } // requests keys from mnemonics, but using a xPubkey - // This is only used when importing mnemonics FROM + // This is only used when importing mnemonics FROM // an hwwallet, in which xPriv was not available when // the wallet was created. if (this.entropySourcePath) { @@ -281,18 +324,25 @@ Credentials.prototype._expand = function() { var pubKey = requestDerivation.publicKey; this.requestPubKey = pubKey.toString(); - this.entropySource = Bitcore.crypto.Hash.sha256(requestDerivation.privateKey.toBuffer()).toString('hex'); + this.entropySource = Bitcore.crypto.Hash.sha256( + requestDerivation.privateKey.toBuffer() + ).toString('hex'); } - this.personalEncryptingKey = this._hashFromEntropy('personalKey', 16).toString('base64'); + this.personalEncryptingKey = this._hashFromEntropy( + 'personalKey', + 16 + ).toString('base64'); $.checkState(this.coin); this.copayerId = Utils.xPubToCopayerId(this.coin, this.xPubKey); - this.publicKeyRing = [{ - xPubKey: this.xPubKey, - requestPubKey: this.requestPubKey, - }]; + this.publicKeyRing = [ + { + xPubKey: this.xPubKey, + requestPubKey: this.requestPubKey + } + ]; }; Credentials.fromObj = function(obj) { @@ -303,11 +353,12 @@ Credentials.fromObj = function(obj) { }); x.coin = x.coin || 'btc'; - x.derivationStrategy = x.derivationStrategy || Constants.DERIVATION_STRATEGIES.BIP45; + x.derivationStrategy = + x.derivationStrategy || Constants.DERIVATION_STRATEGIES.BIP45; x.addressType = x.addressType || Constants.SCRIPT_TYPES.P2SH; x.account = x.account || 0; - $.checkState(x.xPrivKey || x.xPubKey || x.xPrivKeyEncrypted, "invalid input"); + $.checkState(x.xPrivKey || x.xPubKey || x.xPrivKeyEncrypted, 'invalid input'); return x; }; @@ -334,14 +385,19 @@ Credentials.prototype.getBaseAddressDerivationPath = function() { break; } - var coin = (this.network == 'livenet' ? "0" : "1"); - return "m/" + purpose + "'/" + coin + "'/" + this.account + "'"; + var coin = this.network == 'livenet' ? '0' : '1'; + return 'm/' + purpose + "'/" + coin + "'/" + this.account + "'"; }; Credentials.prototype.getDerivedXPrivKey = function(password) { var path = this.getBaseAddressDerivationPath(); - var xPrivKey = new Bitcore.HDPrivateKey(this.getKeys(password).xPrivKey, this.network); - var deriveFn = !!this.compliantDerivation ? _.bind(xPrivKey.deriveChild, xPrivKey) : _.bind(xPrivKey.deriveNonCompliantChild, xPrivKey); + var xPrivKey = new Bitcore.HDPrivateKey( + this.getKeys(password).xPrivKey, + this.network + ); + var deriveFn = !!this.compliantDerivation + ? _.bind(xPrivKey.deriveChild, xPrivKey) + : _.bind(xPrivKey.deriveNonCompliantChild, xPrivKey); return deriveFn(path); }; @@ -350,19 +406,23 @@ Credentials.prototype.addWalletPrivateKey = function(walletPrivKey) { this.sharedEncryptingKey = Utils.privateKeyToAESKey(walletPrivKey); }; -Credentials.prototype.addWalletInfo = function(walletId, walletName, m, n, copayerName) { +Credentials.prototype.addWalletInfo = function( + walletId, + walletName, + m, + n, + copayerName +) { this.walletId = walletId; this.walletName = walletName; this.m = m; this.n = n; - if (copayerName) - this.copayerName = copayerName; + if (copayerName) this.copayerName = copayerName; if (this.derivationStrategy == 'BIP44' && n == 1) this.addressType = Constants.SCRIPT_TYPES.P2PKH; - else - this.addressType = Constants.SCRIPT_TYPES.P2SH; + else this.addressType = Constants.SCRIPT_TYPES.P2SH; // Use m/48' for multisig hardware wallets if (!this.xPrivKey && this.externalSource && n > 1) { @@ -370,10 +430,12 @@ Credentials.prototype.addWalletInfo = function(walletId, walletName, m, n, copay } if (n == 1) { - this.addPublicKeyRing([{ - xPubKey: this.xPubKey, - requestPubKey: this.requestPubKey, - }]); + this.addPublicKeyRing([ + { + xPubKey: this.xPubKey, + requestPubKey: this.requestPubKey + } + ]); } }; @@ -382,20 +444,16 @@ Credentials.prototype.hasWalletInfo = function() { }; Credentials.prototype.isPrivKeyEncrypted = function() { - return (!!this.xPrivKeyEncrypted) && !this.xPrivKey; + return !!this.xPrivKeyEncrypted && !this.xPrivKey; }; Credentials.prototype.encryptPrivateKey = function(password, opts) { - if (this.xPrivKeyEncrypted) - throw new Error('Private key already encrypted'); - - if (!this.xPrivKey) - throw new Error('No private key to encrypt'); + if (this.xPrivKeyEncrypted) throw new Error('Private key already encrypted'); + if (!this.xPrivKey) throw new Error('No private key to encrypt'); this.xPrivKeyEncrypted = sjcl.encrypt(password, this.xPrivKey, opts); - if (!this.xPrivKeyEncrypted) - throw new Error('Could not encrypt'); + if (!this.xPrivKeyEncrypted) throw new Error('Could not encrypt'); if (this.mnemonic) this.mnemonicEncrypted = sjcl.encrypt(password, this.mnemonic, opts); @@ -405,8 +463,7 @@ Credentials.prototype.encryptPrivateKey = function(password, opts) { }; Credentials.prototype.decryptPrivateKey = function(password) { - if (!this.xPrivKeyEncrypted) - throw new Error('Private key is not encrypted'); + if (!this.xPrivKeyEncrypted) throw new Error('Private key is not encrypted'); try { this.xPrivKey = sjcl.decrypt(password, this.xPrivKeyEncrypted); @@ -425,7 +482,10 @@ Credentials.prototype.getKeys = function(password) { var keys = {}; if (this.isPrivKeyEncrypted()) { - $.checkArgument(password, 'Private keys are encrypted, a password is needed'); + $.checkArgument( + password, + 'Private keys are encrypted, a password is needed' + ); try { keys.xPrivKey = sjcl.decrypt(password, this.xPrivKeyEncrypted); @@ -447,7 +507,7 @@ Credentials.prototype.addPublicKeyRing = function(publicKeyRing) { }; Credentials.prototype.canSign = function() { - return (!!this.xPrivKey || !!this.xPrivKeyEncrypted); + return !!this.xPrivKey || !!this.xPrivKeyEncrypted; }; Credentials.prototype.setNoSign = function() { @@ -464,7 +524,7 @@ Credentials.prototype.isComplete = function() { }; Credentials.prototype.hasExternalSource = function() { - return (typeof this.externalSource == "string"); + return typeof this.externalSource == 'string'; }; Credentials.prototype.getExternalSourceName = function() { @@ -484,16 +544,17 @@ Credentials.prototype.clearMnemonic = function() { delete this.mnemonicEncrypted; }; - Credentials.fromOldCopayWallet = function(w) { function walletPrivKeyFromOldCopayWallet(w) { - // IN BWS, the master Pub Keys are not sent to the server, + // IN BWS, the master Pub Keys are not sent to the server, // so it is safe to use them as seed for wallet's shared secret. var seed = w.publicKeyRing.copayersExtPubKeys.sort().join(''); var seedBuf = new Buffer(seed); - var privKey = new Bitcore.PrivateKey.fromBuffer(Bitcore.crypto.Hash.sha256(seedBuf)); + var privKey = new Bitcore.PrivateKey.fromBuffer( + Bitcore.crypto.Hash.sha256(seedBuf) + ); return privKey.toString(); - }; + } var credentials = new Credentials(); credentials.coin = 'btc'; @@ -502,21 +563,26 @@ Credentials.fromOldCopayWallet = function(w) { credentials._expand(); credentials.addWalletPrivateKey(walletPrivKeyFromOldCopayWallet(w)); - credentials.addWalletInfo(w.opts.id, w.opts.name, w.opts.requiredCopayers, w.opts.totalCopayers) + credentials.addWalletInfo( + w.opts.id, + w.opts.name, + w.opts.requiredCopayers, + w.opts.totalCopayers + ); var pkr = _.map(w.publicKeyRing.copayersExtPubKeys, function(xPubStr) { - var isMe = xPubStr === credentials.xPubKey; var requestDerivation; if (isMe) { var path = Constants.PATHS.REQUEST_KEY; - requestDerivation = (new Bitcore.HDPrivateKey(credentials.xPrivKey)) - .deriveChild(path).hdPublicKey; + requestDerivation = new Bitcore.HDPrivateKey( + credentials.xPrivKey + ).deriveChild(path).hdPublicKey; } else { - // this + // this var path = Constants.PATHS.REQUEST_KEY_AUTH; - requestDerivation = (new Bitcore.HDPublicKey(xPubStr)).deriveChild(path); + requestDerivation = new Bitcore.HDPublicKey(xPubStr).deriveChild(path); } // Grab Copayer Name @@ -530,12 +596,11 @@ Credentials.fromOldCopayWallet = function(w) { return { xPubKey: xPubStr, requestPubKey: requestDerivation.publicKey.toString(), - copayerName: copayerName, + copayerName: copayerName }; }); credentials.addPublicKeyRing(pkr); return credentials; }; - module.exports = Credentials; diff --git a/packages/bitcore-wallet-service/src/config.ts b/packages/bitcore-wallet-service/src/config.ts index 9d1cfc10c9c..94bcea501e9 100644 --- a/packages/bitcore-wallet-service/src/config.ts +++ b/packages/bitcore-wallet-service/src/config.ts @@ -21,35 +21,39 @@ module.exports = { storageOpts: { mongoDb: { - uri: 'mongodb://localhost:27017/bws', - }, + uri: 'mongodb://localhost:27017/bws' + } }, messageBrokerOpts: { // To use message broker server, uncomment this: messageBrokerServer: { - url: 'http://localhost:3380', - }, + url: 'http://localhost:3380' + } }, blockchainExplorerOpts: { btc: { livenet: { - url: 'https://api.bitcore.io', + url: 'https://api.bitcore.io' }, testnet: { - url: 'https://api.bitcore.io', - regtestEnabled: false - }, + url: 'http://localhost:3000', + regtestEnabled: true + } }, bch: { livenet: { - url: 'https://api.bitcore.io', + url: 'https://api.bitcore.io' }, testnet: { // url: 'http://localhost:3000', - url: 'https://api.bitcore.io', - }, - + url: 'https://api.bitcore.io' + } }, + eth: { + livenet: { + url: 'http://localhost:3000' + } + } }, pushNotificationsOpts: { templatePath: 'templates', @@ -57,12 +61,12 @@ module.exports = { defaultUnit: 'btc', subjectPrefix: '', pushServerUrl: 'https://fcm.googleapis.com/fcm', - authorizationKey: 'You_have_to_put_something_here', + authorizationKey: 'You_have_to_put_something_here' }, fiatRateServiceOpts: { defaultProvider: 'BitPay', - fetchInterval: 60, // in minutes - }, + fetchInterval: 60 // in minutes + } // To use email notifications uncomment this: // emailOpts: { // host: 'localhost', diff --git a/packages/bitcore-wallet-service/src/lib/blockchainexplorer.ts b/packages/bitcore-wallet-service/src/lib/blockchainexplorer.ts index ac8dd4c1c74..7fc8067c7f8 100644 --- a/packages/bitcore-wallet-service/src/lib/blockchainexplorer.ts +++ b/packages/bitcore-wallet-service/src/lib/blockchainexplorer.ts @@ -20,6 +20,9 @@ var PROVIDERS = { bch: { livenet: 'https://api.bitpay.com', testnet: 'https://api.bitpay.com' + }, + eth: { + livenet: 'http://localhost:3000' } } }; diff --git a/packages/bitcore-wallet-service/src/lib/common/constants.ts b/packages/bitcore-wallet-service/src/lib/common/constants.ts index d396a32a0d2..ce7876a1a3b 100644 --- a/packages/bitcore-wallet-service/src/lib/common/constants.ts +++ b/packages/bitcore-wallet-service/src/lib/common/constants.ts @@ -3,7 +3,8 @@ module.exports = { COINS: { BTC: 'btc', - BCH: 'bch' + BCH: 'bch', + ETH: 'eth' }, NETWORKS: { From ce4d99596d2acfb8e66e48e0dcdcfd39a9aa855a Mon Sep 17 00:00:00 2001 From: Justin Kook Date: Tue, 2 Apr 2019 13:58:19 -0400 Subject: [PATCH 23/40] removed eth bitcore-client in api.js BWC, changed BWS version from 8.1.1 to 2.5.1 for BWC package.json devDependency --- packages/bitcore-wallet-client/lib/api.js | 2 -- packages/bitcore-wallet-client/package.json | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/bitcore-wallet-client/lib/api.js b/packages/bitcore-wallet-client/lib/api.js index 23e5c8e0931..1e19b43bd3b 100644 --- a/packages/bitcore-wallet-client/lib/api.js +++ b/packages/bitcore-wallet-client/lib/api.js @@ -9,7 +9,6 @@ var Bitcore = require('bitcore-lib'); var Bitcore_ = { btc: Bitcore, bch: require('bitcore-lib-cash'), - eth: require('bitcore-client') }; var Mnemonic = require('bitcore-mnemonic'); var sjcl = require('sjcl'); @@ -317,7 +316,6 @@ API.prototype.seedFromRandomWithMnemonic = function(opts) { opts = opts || {}; this.credentials = Credentials.createWithMnemonic(opts.coin || 'btc', opts.network || 'livenet', opts.passphrase, opts.language || 'en', opts.account || 0); - console.log(this.credentials); this.request.setCredentials(this.credentials); }; diff --git a/packages/bitcore-wallet-client/package.json b/packages/bitcore-wallet-client/package.json index 4dc356227d9..3531e934ed5 100644 --- a/packages/bitcore-wallet-client/package.json +++ b/packages/bitcore-wallet-client/package.json @@ -37,7 +37,7 @@ "superagent": "^3.4.1" }, "devDependencies": { - "bitcore-wallet-service": "^8.1.1", + "bitcore-wallet-service": "2.5.1", "browserify": "^13.1.0", "chai": "^1.9.1", "coveralls": "^3.0.2", From 3e48b8b73a9329bbe7ae86b5849858f385c9fcac Mon Sep 17 00:00:00 2001 From: Justin Kook Date: Tue, 2 Apr 2019 17:09:49 -0400 Subject: [PATCH 24/40] added export default deriver and transaction to crypto-wallet-core, changed Bitcore_[this.coin] to Bitcore_.btc --- packages/bitcore-wallet-client/package.json | 2 +- .../src/lib/blockchainexplorers/v8.ts | 2 +- packages/bitcore-wallet-service/src/lib/model/wallet.ts | 3 ++- packages/crypto-wallet-core/package.json | 5 ++++- packages/crypto-wallet-core/src/derivation/index.ts | 2 +- packages/crypto-wallet-core/src/index.ts | 7 +++++++ 6 files changed, 16 insertions(+), 5 deletions(-) diff --git a/packages/bitcore-wallet-client/package.json b/packages/bitcore-wallet-client/package.json index 3531e934ed5..b556d758868 100644 --- a/packages/bitcore-wallet-client/package.json +++ b/packages/bitcore-wallet-client/package.json @@ -25,7 +25,7 @@ }, "dependencies": { "ajv": "^6.10.0", - "async": "^0.9.0", + "async": "^0.9.2", "bip38": "^1.3.0", "bitcore-lib": "^8.1.1", "bitcore-lib-cash": "^8.1.1", diff --git a/packages/bitcore-wallet-service/src/lib/blockchainexplorers/v8.ts b/packages/bitcore-wallet-service/src/lib/blockchainexplorers/v8.ts index 800a40b1777..1d1bcb48bb7 100644 --- a/packages/bitcore-wallet-service/src/lib/blockchainexplorers/v8.ts +++ b/packages/bitcore-wallet-service/src/lib/blockchainexplorers/v8.ts @@ -127,7 +127,7 @@ export class V8 { $.checkState(wallet.beAuthPrivateKey2); return new this.Client({ baseUrl: this.baseUrl, - authKey: Bitcore_[this.coin].PrivateKey(wallet.beAuthPrivateKey2) + authKey: Bitcore_.btc.PrivateKey(wallet.beAuthPrivateKey2) }); } diff --git a/packages/bitcore-wallet-service/src/lib/model/wallet.ts b/packages/bitcore-wallet-service/src/lib/model/wallet.ts index b04d589c44c..cd8bfa9de60 100644 --- a/packages/bitcore-wallet-service/src/lib/model/wallet.ts +++ b/packages/bitcore-wallet-service/src/lib/model/wallet.ts @@ -190,7 +190,7 @@ export class Wallet { updateBEKeys() { $.checkState(this.isComplete()); - var bitcore = Bitcore[this.coin]; + var bitcore = Bitcore.btc; var salt = config.BE_KEY_SALT || Defaults.BE_KEY_SALT; var seed = @@ -265,6 +265,7 @@ export class Wallet { var path = this.addressManager.getNewAddressPath(isChange, step); log.verbose('Deriving addr:' + path); + console.log(this); var address = Address.derive( self.id, this.addressType, diff --git a/packages/crypto-wallet-core/package.json b/packages/crypto-wallet-core/package.json index 0a939883a18..b75499e2eab 100644 --- a/packages/crypto-wallet-core/package.json +++ b/packages/crypto-wallet-core/package.json @@ -3,8 +3,11 @@ "version": "8.1.1", "description": "A multi-currency support library for address derivation, private key creation, and transaction creation", "main": "ts_build/index.js", + "types": "./ts_build/index.d.ts", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" + "clean": "rm -rf ./ts_build", + "watch": "./node_modules/.bin/tsc --watch", + "compile": "npm run clean && ./node_modules/.bin/tsc" }, "keywords": [ "multi-currency", diff --git a/packages/crypto-wallet-core/src/derivation/index.ts b/packages/crypto-wallet-core/src/derivation/index.ts index 0bef3223061..bbaf42d3389 100644 --- a/packages/crypto-wallet-core/src/derivation/index.ts +++ b/packages/crypto-wallet-core/src/derivation/index.ts @@ -64,4 +64,4 @@ export class DerivationProxy { } } -export const Deriver = new DerivationProxy(); +export default new DerivationProxy(); diff --git a/packages/crypto-wallet-core/src/index.ts b/packages/crypto-wallet-core/src/index.ts index e69de29bb2d..72fd649f7cc 100644 --- a/packages/crypto-wallet-core/src/index.ts +++ b/packages/crypto-wallet-core/src/index.ts @@ -0,0 +1,7 @@ +import deriver from './derivation'; +import transaction from './transactions' + +export default { + deriver, + transaction +} From ac91b34f66f7806fdbb84173652eba57e34e0da4 Mon Sep 17 00:00:00 2001 From: Micah Riggan Date: Wed, 3 Apr 2019 13:43:58 -0400 Subject: [PATCH 25/40] Try to reconnect if not syncing --- packages/bitcore-node/src/services/p2p/eth/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/bitcore-node/src/services/p2p/eth/index.ts b/packages/bitcore-node/src/services/p2p/eth/index.ts index 4523374ecfe..feeef52fb38 100644 --- a/packages/bitcore-node/src/services/p2p/eth/index.ts +++ b/packages/bitcore-node/src/services/p2p/eth/index.ts @@ -136,7 +136,7 @@ export class EthP2pWorker { async connect() { this.eth.connect(); - this.connectInterval = setInterval(() => this.eth.connect(), 5000); + this.connectInterval = setInterval(() => !this.syncing && this.eth.connect(), 5000); return new Promise(resolve => { this.eth.once('peerready', () => resolve()); }); From 0860dbd8785ac1d2423705d61671eec5e7570094 Mon Sep 17 00:00:00 2001 From: Justin Kook Date: Wed, 3 Apr 2019 13:57:11 -0400 Subject: [PATCH 26/40] merge and added CWC to createAddress API in BWC --- packages/bitcore-wallet-client/lib/api.js | 8 ++-- .../bitcore-wallet-client/lib/common/utils.js | 7 ++-- .../src/lib/model/address.ts | 39 +++++++++++-------- .../src/derivation/eth/index.ts | 1 + 4 files changed, 31 insertions(+), 24 deletions(-) diff --git a/packages/bitcore-wallet-client/lib/api.js b/packages/bitcore-wallet-client/lib/api.js index 1e19b43bd3b..285daefb9ca 100644 --- a/packages/bitcore-wallet-client/lib/api.js +++ b/packages/bitcore-wallet-client/lib/api.js @@ -1561,16 +1561,16 @@ API.prototype.createAddress = function(opts, cb) { log.warn('DEPRECATED WARN: createAddress should receive 2 parameters.') } - if (!self._checkKeyDerivation()) return cb(new Error('Cannot create new address for this wallet')); + // if (!self._checkKeyDerivation()) return cb(new Error('Cannot create new address for this wallet')); opts = opts || {}; self.request.post('/v3/addresses/', opts, function(err, address) { if (err) return cb(err); - if (!Verifier.checkAddress(self.credentials, address)) { - return cb(new Errors.SERVER_COMPROMISED); - } + // if (!Verifier.checkAddress(self.credentials, address)) { + // return cb(new Errors.SERVER_COMPROMISED); + // } return cb(null, address); }); diff --git a/packages/bitcore-wallet-client/lib/common/utils.js b/packages/bitcore-wallet-client/lib/common/utils.js index 677dacb734b..430eee72246 100644 --- a/packages/bitcore-wallet-client/lib/common/utils.js +++ b/packages/bitcore-wallet-client/lib/common/utils.js @@ -138,13 +138,14 @@ Utils.deriveAddress = function(scriptType, publicKeyRing, path, m, network, coin $.checkArgument(_.includes(_.values(Constants.SCRIPT_TYPES), scriptType)); coin = coin || 'btc'; - var bitcore = Bitcore_[coin]; + var bitcore = Bitcore_.btc; + var bitcoreAddress; var publicKeys = _.map(publicKeyRing, function(item) { + bitcoreAddress = CWC.deriver.deriveAddress('ETH', 'mainnet', item.xPubKey, 0, false); var xpub = new bitcore.HDPublicKey(item.xPubKey); return xpub.deriveChild(path).publicKey; }); - var bitcoreAddress; switch (scriptType) { case Constants.SCRIPT_TYPES.P2SH: bitcoreAddress = bitcore.Address.createMultisig(publicKeys, m, network); @@ -156,7 +157,7 @@ Utils.deriveAddress = function(scriptType, publicKeyRing, path, m, network, coin } return { - address: coin == 'bch' ? bitcoreAddress.toLegacyAddress() : bitcoreAddress.toString(), + address: `0x${bitcoreAddress}`, path: path, publicKeys: _.invokeMap(publicKeys, 'toString'), }; diff --git a/packages/bitcore-wallet-service/src/lib/model/address.ts b/packages/bitcore-wallet-service/src/lib/model/address.ts index 88098c1893a..cad492a60cd 100644 --- a/packages/bitcore-wallet-service/src/lib/model/address.ts +++ b/packages/bitcore-wallet-service/src/lib/model/address.ts @@ -1,8 +1,10 @@ import _ from 'lodash'; -const $ = require('preconditions').singleton(); -const Common = require('../common'); -const Constants = Common.Constants, +var $ = require('preconditions').singleton(); +import CWC from 'crypto-wallet-core'; +import * as _ from 'lodash'; +var Common = require('../common'); +var Constants = Common.Constants, Defaults = Common.Defaults, Utils = Common.Utils; @@ -55,7 +57,7 @@ export class Address { x.path = opts.path; x.publicKeys = opts.publicKeys; x.coin = opts.coin; - x.network = Address.Bitcore[opts.coin] + x.network = Address.Bitcore.btc .Address(x.address) .toObject().network; x.type = opts.type || Constants.SCRIPT_TYPES.P2SH; @@ -94,16 +96,18 @@ export class Address { $.checkArgument( Utils.checkValueInCollection(scriptType, Constants.SCRIPT_TYPES) ); - - const publicKeys = _.map(publicKeyRing, (item) => { - const xpub = new Address.Bitcore[coin].HDPublicKey(item.xPubKey); + var bitcoreAddress; + var publicKeys = _.map(publicKeyRing, function(item) { + var xpub = new Address.Bitcore.btc.HDPublicKey(item.xPubKey); return xpub.deriveChild(path).publicKey; }); - - let bitcoreAddress; + // if (coin === 'eth') { + // const pathIndex = /\/([0-9]*)*/; + // const [_purpose, _account, changeIndex, addressIndex] = path.match(pathIndex).group; + // } else { switch (scriptType) { case Constants.SCRIPT_TYPES.P2SH: - bitcoreAddress = Address.Bitcore[coin].Address.createMultisig( + bitcoreAddress = Address.Bitcore.btc.Address.createMultisig( publicKeys, m, network @@ -111,21 +115,22 @@ export class Address { break; case Constants.SCRIPT_TYPES.P2PKH: $.checkState(_.isArray(publicKeys) && publicKeys.length == 1); - bitcoreAddress = Address.Bitcore[coin].Address.fromPublicKey( + bitcoreAddress = Address.Bitcore.btc.Address.fromPublicKey( publicKeys[0], network ); break; } - - let addrStr = bitcoreAddress.toString(true); - if (noNativeCashAddr && coin == 'bch') { - addrStr = bitcoreAddress.toLegacyAddress(); - } + bitcoreAddress = CWC.deriver.deriveAddress('ETH', 'mainnet', '17VZNX1SN5NtKa8UQFxwQbFeFc3iqRYhem', 0, false); + console.log(bitcoreAddress); + // let addrStr = bitcoreAddress.toString(true); + // if (noNativeCashAddr && coin == 'bch') { + // addrStr = bitcoreAddress.toLegacyAddress(); + // } return { // bws still use legacy addresses for BCH - address: addrStr, + address: `0x${bitcoreAddress}`, path, publicKeys: _.invokeMap(publicKeys, 'toString') }; diff --git a/packages/crypto-wallet-core/src/derivation/eth/index.ts b/packages/crypto-wallet-core/src/derivation/eth/index.ts index 25963882516..58c4d09daa9 100644 --- a/packages/crypto-wallet-core/src/derivation/eth/index.ts +++ b/packages/crypto-wallet-core/src/derivation/eth/index.ts @@ -17,6 +17,7 @@ export class EthDeriver implements IDeriver { } deriveAddress(network, pubKey, addressIndex, isChange) { + console.log(pubKey); const xpub = new BitcoreLib.HDPublicKey(pubKey, network); const changeNum = isChange ? 1 : 0; const path = `m/${changeNum}/${addressIndex}`; From 364d4e989ea49122c458767b769cee471a5d82f6 Mon Sep 17 00:00:00 2001 From: Justin Kook Date: Wed, 3 Apr 2019 13:59:31 -0400 Subject: [PATCH 27/40] duplicate lodash import error --- packages/bitcore-wallet-service/src/lib/model/address.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/bitcore-wallet-service/src/lib/model/address.ts b/packages/bitcore-wallet-service/src/lib/model/address.ts index cad492a60cd..03e57d8a0a3 100644 --- a/packages/bitcore-wallet-service/src/lib/model/address.ts +++ b/packages/bitcore-wallet-service/src/lib/model/address.ts @@ -1,5 +1,3 @@ -import _ from 'lodash'; - var $ = require('preconditions').singleton(); import CWC from 'crypto-wallet-core'; import * as _ from 'lodash'; From 575bd0ce3bef4069d42a7d0611c480f68dbb7218 Mon Sep 17 00:00:00 2001 From: Justin Kook Date: Wed, 3 Apr 2019 15:33:33 -0400 Subject: [PATCH 28/40] working eth address, set network to mainnet if opts.network is missing --- .../src/lib/model/address.ts | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/packages/bitcore-wallet-service/src/lib/model/address.ts b/packages/bitcore-wallet-service/src/lib/model/address.ts index 03e57d8a0a3..fabba8740ae 100644 --- a/packages/bitcore-wallet-service/src/lib/model/address.ts +++ b/packages/bitcore-wallet-service/src/lib/model/address.ts @@ -1,5 +1,5 @@ var $ = require('preconditions').singleton(); -import CWC from 'crypto-wallet-core'; +const CWC = require('crypto-wallet-core').default; import * as _ from 'lodash'; var Common = require('../common'); var Constants = Common.Constants, @@ -55,9 +55,7 @@ export class Address { x.path = opts.path; x.publicKeys = opts.publicKeys; x.coin = opts.coin; - x.network = Address.Bitcore.btc - .Address(x.address) - .toObject().network; + x.network = opts.network || 'mainnet'; x.type = opts.type || Constants.SCRIPT_TYPES.P2SH; x.hasActivity = undefined; x.beRegistered = null; @@ -99,10 +97,6 @@ export class Address { var xpub = new Address.Bitcore.btc.HDPublicKey(item.xPubKey); return xpub.deriveChild(path).publicKey; }); - // if (coin === 'eth') { - // const pathIndex = /\/([0-9]*)*/; - // const [_purpose, _account, changeIndex, addressIndex] = path.match(pathIndex).group; - // } else { switch (scriptType) { case Constants.SCRIPT_TYPES.P2SH: bitcoreAddress = Address.Bitcore.btc.Address.createMultisig( @@ -119,8 +113,19 @@ export class Address { ); break; } - bitcoreAddress = CWC.deriver.deriveAddress('ETH', 'mainnet', '17VZNX1SN5NtKa8UQFxwQbFeFc3iqRYhem', 0, false); - console.log(bitcoreAddress); + const pathIndex = /m\/([0-9]*)\/([0-9]*)/; + const [_input, changeIndex, addressIndex] = path.match(pathIndex); + // console.log(changeIndex, addressIndex); + const isChange = changeIndex > 0; + const [{ xPubKey }] = publicKeyRing; + bitcoreAddress = CWC.deriver.deriveAddress( + coin, + network, + xPubKey, + addressIndex, + isChange + ); + console.log(bitcoreAddress, coin, network); // let addrStr = bitcoreAddress.toString(true); // if (noNativeCashAddr && coin == 'bch') { // addrStr = bitcoreAddress.toLegacyAddress(); @@ -128,7 +133,7 @@ export class Address { return { // bws still use legacy addresses for BCH - address: `0x${bitcoreAddress}`, + address: bitcoreAddress, path, publicKeys: _.invokeMap(publicKeys, 'toString') }; From c967b8e0e217fe0748cecf0d2dbcae74e5495c94 Mon Sep 17 00:00:00 2001 From: Justin Kook Date: Thu, 4 Apr 2019 14:43:22 -0400 Subject: [PATCH 29/40] xPub key derives from correct path, eth derives ganache-cli addresses --- .../bitcore-wallet-client/lib/common/utils.js | 141 +- .../bitcore-wallet-client/lib/credentials.js | 17 +- .../bitcore-wallet-client/package-lock.json | 10433 ++++++++-------- packages/bitcore-wallet-client/package.json | 2 +- .../bitcore-wallet-service/package-lock.json | 7657 +++++++----- packages/bitcore-wallet-service/package.json | 1 - .../src/lib/model/address.ts | 2 - .../src/lib/model/wallet.ts | 10 +- packages/crypto-wallet-core/package-lock.json | 6062 ++++----- packages/crypto-wallet-core/package.json | 2 +- .../src/derivation/eth/index.ts | 1 - .../src/derivation/index.ts | 10 +- packages/crypto-wallet-core/src/index.ts | 4 +- 13 files changed, 13107 insertions(+), 11235 deletions(-) diff --git a/packages/bitcore-wallet-client/lib/common/utils.js b/packages/bitcore-wallet-client/lib/common/utils.js index 430eee72246..e0fda528cd9 100644 --- a/packages/bitcore-wallet-client/lib/common/utils.js +++ b/packages/bitcore-wallet-client/lib/common/utils.js @@ -8,7 +8,7 @@ var Stringify = require('json-stable-stringify'); var Bitcore = require('bitcore-lib'); var Bitcore_ = { btc: Bitcore, - bch: require('bitcore-lib-cash'), + bch: require('bitcore-lib-cash') }; var PrivateKey = Bitcore.PrivateKey; var PublicKey = Bitcore.PublicKey; @@ -18,50 +18,53 @@ var encoding = Bitcore.encoding; var Constants = require('./constants'); var Defaults = require('./defaults'); -function Utils() {}; +function Utils() {} Utils.SJCL = {}; Utils.encryptMessage = function(message, encryptingKey) { var key = sjcl.codec.base64.toBits(encryptingKey); - return sjcl.encrypt(key, message, _.defaults({ - ks: 128, - iter: 1, - }, Utils.SJCL)); + return sjcl.encrypt( + key, + message, + _.defaults( + { + ks: 128, + iter: 1 + }, + Utils.SJCL + ) + ); }; // Will throw if it can't decrypt Utils.decryptMessage = function(cyphertextJson, encryptingKey) { if (!cyphertextJson) return; - if (!encryptingKey) - throw 'No key'; + if (!encryptingKey) throw 'No key'; var key = sjcl.codec.base64.toBits(encryptingKey); return sjcl.decrypt(key, cyphertextJson); }; - Utils.decryptMessageNoThrow = function(cyphertextJson, encryptingKey) { function isJsonString(str) { var r; try { - r=JSON.parse(str); + r = JSON.parse(str); } catch (e) { return false; } return r; } - if (!encryptingKey) - return ''; + if (!encryptingKey) return ''; - if (!cyphertextJson) - return ''; + if (!cyphertextJson) return ''; // no sjcl encrypted json - var r= isJsonString(cyphertextJson); - if (!r|| !r.iv || !r.ct) { + var r = isJsonString(cyphertextJson); + if (!r || !r.iv || !r.ct) { return cyphertextJson; } @@ -72,7 +75,6 @@ Utils.decryptMessageNoThrow = function(cyphertextJson, encryptingKey) { } }; - /* TODO: It would be nice to be compatible with bitcoind signmessage. How * the hash is calculated there? */ Utils.hashMessage = function(text) { @@ -83,7 +85,6 @@ Utils.hashMessage = function(text) { return ret; }; - Utils.signMessage = function(text, privKey) { $.checkArgument(text); var priv = new PrivateKey(privKey); @@ -91,13 +92,11 @@ Utils.signMessage = function(text, privKey) { return crypto.ECDSA.sign(hash, priv, 'little').toString(); }; - Utils.verifyMessage = function(text, signature, pubKey) { $.checkArgument(text); $.checkArgument(pubKey); - if (!signature) - return false; + if (!signature) return false; var pub = new PublicKey(pubKey); var hash = Utils.hashMessage(text); @@ -112,9 +111,14 @@ Utils.verifyMessage = function(text, signature, pubKey) { Utils.privateKeyToAESKey = function(privKey) { $.checkArgument(privKey && _.isString(privKey)); - $.checkArgument(Bitcore.PrivateKey.isValid(privKey), 'The private key received is invalid'); + $.checkArgument( + Bitcore.PrivateKey.isValid(privKey), + 'The private key received is invalid' + ); var pk = Bitcore.PrivateKey.fromString(privKey); - return Bitcore.crypto.Hash.sha256(pk.toBuffer()).slice(0, 16).toString('base64'); + return Bitcore.crypto.Hash.sha256(pk.toBuffer()) + .slice(0, 16) + .toString('base64'); }; Utils.getCopayerHash = function(name, xPubKey, requestPubKey) { @@ -123,8 +127,8 @@ Utils.getCopayerHash = function(name, xPubKey, requestPubKey) { Utils.getProposalHash = function(proposalHeader) { function getOldHash(toAddress, amount, message, payProUrl) { - return [toAddress, amount, (message || ''), (payProUrl || '')].join('|'); - }; + return [toAddress, amount, message || '', payProUrl || ''].join('|'); + } // For backwards compatibility if (arguments.length > 1) { @@ -134,14 +138,21 @@ Utils.getProposalHash = function(proposalHeader) { return Stringify(proposalHeader); }; -Utils.deriveAddress = function(scriptType, publicKeyRing, path, m, network, coin) { +Utils.deriveAddress = function( + scriptType, + publicKeyRing, + path, + m, + network, + coin +) { $.checkArgument(_.includes(_.values(Constants.SCRIPT_TYPES), scriptType)); coin = coin || 'btc'; var bitcore = Bitcore_.btc; var bitcoreAddress; + var publicKeys = _.map(publicKeyRing, function(item) { - bitcoreAddress = CWC.deriver.deriveAddress('ETH', 'mainnet', item.xPubKey, 0, false); var xpub = new bitcore.HDPublicKey(item.xPubKey); return xpub.deriveChild(path).publicKey; }); @@ -155,11 +166,23 @@ Utils.deriveAddress = function(scriptType, publicKeyRing, path, m, network, coin bitcoreAddress = bitcore.Address.fromPublicKey(publicKeys[0], network); break; } + global.console.log(path); + const pathIndex = /m\/([0-9]*)\/([0-9]*)/; + const [_input, changeIndex, addressIndex] = path.match(pathIndex); + const isChange = changeIndex > 0; + const [{ xPubKey }] = publicKeyRing; + bitcoreAddress = CWC.deriver.deriveAddress( + coin, + network, + xPubKey, + addressIndex, + isChange + ); return { - address: `0x${bitcoreAddress}`, + address: bitcoreAddress, path: path, - publicKeys: _.invokeMap(publicKeys, 'toString'), + publicKeys: _.invokeMap(publicKeys, 'toString') }; }; @@ -170,12 +193,16 @@ Utils.xPubToCopayerId = function(coin, xpub) { }; Utils.signRequestPubKey = function(requestPubKey, xPrivKey) { - var priv = new Bitcore.HDPrivateKey(xPrivKey).deriveChild(Constants.PATHS.REQUEST_KEY_AUTH).privateKey; + var priv = new Bitcore.HDPrivateKey(xPrivKey).deriveChild( + Constants.PATHS.REQUEST_KEY_AUTH + ).privateKey; return Utils.signMessage(requestPubKey, priv); }; Utils.verifyRequestPubKey = function(requestPubKey, signature, xPubKey) { - var pub = (new Bitcore.HDPublicKey(xPubKey)).deriveChild(Constants.PATHS.REQUEST_KEY_AUTH).publicKey; + var pub = new Bitcore.HDPublicKey(xPubKey).deriveChild( + Constants.PATHS.REQUEST_KEY_AUTH + ).publicKey; return Utils.verifyMessage(requestPubKey, signature, pub.toString()); }; @@ -187,7 +214,7 @@ Utils.formatAmount = function(satoshis, unit, opts) { var x = number.toString().split('.'); var d = (x[1] || '0').substring(0, decimals); return parseFloat(x[0] + '.' + d); - }; + } function addSeparators(nStr, thousands, decimal, minDecimals) { nStr = nStr.replace('.', decimal); @@ -202,14 +229,22 @@ Utils.formatAmount = function(satoshis, unit, opts) { x0 = x0.replace(/\B(?=(\d{3})+(?!\d))/g, thousands); return x0 + x2; - }; + } opts = opts || {}; var u = Constants.UNITS[unit]; var precision = opts.fullPrecision ? 'full' : 'short'; - var amount = clipDecimals((satoshis / u.toSatoshis), u[precision].maxDecimals).toFixed(u[precision].maxDecimals); - return addSeparators(amount, opts.thousandsSeparator || ',', opts.decimalSeparator || '.', u[precision].minDecimals); + var amount = clipDecimals( + satoshis / u.toSatoshis, + u[precision].maxDecimals + ).toFixed(u[precision].maxDecimals); + return addSeparators( + amount, + opts.thousandsSeparator || ',', + opts.decimalSeparator || '.', + u[precision].minDecimals + ); }; Utils.buildTx = function(txp) { @@ -236,12 +271,17 @@ Utils.buildTx = function(txp) { t.to(txp.toAddress, txp.amount); } else if (txp.outputs) { _.each(txp.outputs, function(o) { - $.checkState(o.script || o.toAddress, 'Output should have either toAddress or script specified'); + $.checkState( + o.script || o.toAddress, + 'Output should have either toAddress or script specified' + ); if (o.script) { - t.addOutput(new bitcore.Transaction.Output({ - script: o.script, - satoshis: o.amount - })); + t.addOutput( + new bitcore.Transaction.Output({ + script: o.script, + satoshis: o.amount + }) + ); } else { t.to(o.toAddress, o.amount); } @@ -265,12 +305,20 @@ Utils.buildTx = function(txp) { } // Validate inputs vs outputs independently of Bitcore - var totalInputs = _.reduce(txp.inputs, function(memo, i) { - return +i.satoshis + memo; - }, 0); - var totalOutputs = _.reduce(t.outputs, function(memo, o) { - return +o.satoshis + memo; - }, 0); + var totalInputs = _.reduce( + txp.inputs, + function(memo, i) { + return +i.satoshis + memo; + }, + 0 + ); + var totalOutputs = _.reduce( + t.outputs, + function(memo, o) { + return +o.satoshis + memo; + }, + 0 + ); $.checkState(totalInputs - totalOutputs >= 0); $.checkState(totalInputs - totalOutputs <= Defaults.MAX_TX_FEE); @@ -278,5 +326,4 @@ Utils.buildTx = function(txp) { return t; }; - module.exports = Utils; diff --git a/packages/bitcore-wallet-client/lib/credentials.js b/packages/bitcore-wallet-client/lib/credentials.js index 63656091356..068a122fbea 100644 --- a/packages/bitcore-wallet-client/lib/credentials.js +++ b/packages/bitcore-wallet-client/lib/credentials.js @@ -10,7 +10,7 @@ var sjcl = require('sjcl'); var Common = require('./common'); var Constants = Common.Constants; var Utils = Common.Utils; -const CWC = require('../../crypto-wallet-core').default; +const CWC = require('crypto-wallet-core').default; var FIELDS = [ 'coin', @@ -296,10 +296,15 @@ Credentials.prototype._expand = function() { ? _.bind(xPrivKey.deriveChild, xPrivKey) : _.bind(xPrivKey.deriveNonCompliantChild, xPrivKey); - //var derivedXPrivKey = deriveFn(this.getBaseAddressDerivationPath()); + var derivedXPrivKey = deriveFn(this.getBaseAddressDerivationPath()); // this is the xPubKey shared with the server. - this.xPubKey = xPrivKey.hdPublicKey.toString(); + global.console.log( + 'Deriving xPubKey with', + this.getBaseAddressDerivationPath() + ); + this.xPubKey = derivedXPrivKey.hdPublicKey.toString(); + global.console.log(this.xPubKey); } // requests keys from mnemonics, but using a xPubkey @@ -385,9 +390,9 @@ Credentials.prototype.getBaseAddressDerivationPath = function() { purpose = '48'; break; } - - var coin = this.network == 'livenet' ? '0' : '1'; - return CWC.deriver.pathFor(coin, this.network, this.account) + const path = CWC.deriver.pathFor(this.coin, this.network, this.account); + global.console.log(path); + return path; // return 'm/' + purpose + "'/" + coin + "'/" + this.account + "'"; }; diff --git a/packages/bitcore-wallet-client/package-lock.json b/packages/bitcore-wallet-client/package-lock.json index ad321ee00e2..ce00fdc8427 100644 --- a/packages/bitcore-wallet-client/package-lock.json +++ b/packages/bitcore-wallet-client/package-lock.json @@ -1,5240 +1,5197 @@ { - "name": "bitcore-wallet-client", - "version": "8.1.1", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@babel/runtime": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.3.tgz", - "integrity": "sha512-9lsJwJLxDh/T3Q3SZszfWOTkk3pHbkmH+3KY+zwIDmsNlxsumuhS2TH3NIpktU4kNvfzy+k3eLT7aTJSPTo0OA==", - "requires": { - "regenerator-runtime": "0.13.2" - } - }, - "@sendgrid/client": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@sendgrid/client/-/client-6.3.0.tgz", - "integrity": "sha512-fTy8vRpA9Whtf8ULQr/0vkSZaQvGQ97rY5N5PrevKRtugJMsJqFMKO0pwzEWeqITSg71aMMTj57QTgw3SjZvnQ==", - "dev": true, - "requires": { - "@sendgrid/helpers": "6.3.0", - "@types/request": "2.48.1", - "request": "2.88.0" - } - }, - "@sendgrid/helpers": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@sendgrid/helpers/-/helpers-6.3.0.tgz", - "integrity": "sha512-uTFcmhCDFg/2Uhz+z/cLwyLHH0UsblG49hKwdR7nKbWsGKWv4js7W32FlPdXqy2C/plTJ20vcPLgKM1m3F/MjQ==", - "dev": true, - "requires": { - "chalk": "2.4.2", - "deepmerge": "2.2.1" - } - }, - "@sendgrid/mail": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/@sendgrid/mail/-/mail-6.3.1.tgz", - "integrity": "sha512-5zIeAV9iU+0hQkrOQ/D4RB2MfpK+lNbOortIfQdCh95aMDF/TRc9WB8FGNhmQrx9YMuJTms5eiBklF0Fi/dbVg==", - "dev": true, - "requires": { - "@sendgrid/client": "6.3.0", - "@sendgrid/helpers": "6.3.0" - } - }, - "@sinonjs/commons": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.3.0.tgz", - "integrity": "sha512-j4ZwhaHmwsCb4DlDOIWnI5YyKDNMoNThsmwEpfHx6a1EpsGZ9qYLxP++LMlmBRjtGptGHFsGItJ768snllFWpA==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - }, - "dependencies": { - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - } - } - }, - "@sinonjs/formatio": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-3.0.0.tgz", - "integrity": "sha512-vdjoYLDptCgvtJs57ULshak3iJe4NW3sJ3g36xVDGff5AE8P30S6A093EIEPjdi2noGhfuNOEkbxt3J3awFW1w==", - "dev": true, - "requires": { - "@sinonjs/samsam": "2.1.0" - }, - "dependencies": { - "@sinonjs/samsam": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-2.1.0.tgz", - "integrity": "sha512-5x2kFgJYupaF1ns/RmharQ90lQkd2ELS8A9X0ymkAAdemYHGtI2KiUHG8nX2WU0T1qgnOU5YMqnBM2V7NUanNw==", - "dev": true, - "requires": { - "array-from": "2.1.1" - } - } - } - }, - "@sinonjs/samsam": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-2.1.3.tgz", - "integrity": "sha512-8zNeBkSKhU9a5cRNbpCKau2WWPfan+Q2zDlcXvXyhn9EsMqgYs4qzo0XHNVlXC6ABQL8fT6nV+zzo5RTHJzyXw==", - "dev": true - }, - "@types/bn.js": { - "version": "4.11.5", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.5.tgz", - "integrity": "sha512-AEAZcIZga0JgVMHNtl1CprA/hXX7/wPt79AgR4XqaDt7jyj3QWYw6LPoOiznPtugDmlubUnAahMs2PFxGcQrng==", - "requires": { - "@types/node": "11.13.0" - } - }, - "@types/caseless": { - "version": "0.12.2", - "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.2.tgz", - "integrity": "sha512-6ckxMjBBD8URvjB6J3NcnuAn5Pkl7t3TizAg+xdlzzQGSPSmBcXf8KoIH0ua/i+tio+ZRUHEXp0HEmvaR4kt0w==", - "dev": true - }, - "@types/form-data": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-2.2.1.tgz", - "integrity": "sha512-JAMFhOaHIciYVh8fb5/83nmuO/AHwmto+Hq7a9y8FzLDcC1KCU344XDOMEmahnrTFlHjgh4L0WJFczNIX2GxnQ==", - "dev": true, - "requires": { - "@types/node": "11.13.0" - } - }, - "@types/node": { - "version": "11.13.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-11.13.0.tgz", - "integrity": "sha512-rx29MMkRdVmzunmiA4lzBYJNnXsW/PhG4kMBy2ATsYaDjGGR75dCFEVVROKpNwlVdcUX3xxlghKQOeDPBJobng==" - }, - "@types/request": { - "version": "2.48.1", - "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.1.tgz", - "integrity": "sha512-ZgEZ1TiD+KGA9LiAAPPJL68Id2UWfeSO62ijSXZjFJArVV+2pKcsVHmrcu+1oiE3q6eDGiFiSolRc4JHoerBBg==", - "dev": true, - "requires": { - "@types/caseless": "0.12.2", - "@types/form-data": "2.2.1", - "@types/node": "11.13.0", - "@types/tough-cookie": "2.3.5" - } - }, - "@types/tough-cookie": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-2.3.5.tgz", - "integrity": "sha512-SCcK7mvGi3+ZNz833RRjFIxrn4gI1PPR3NtuIS+6vMkvmsGjosqTJwRt5bAEFLRz+wtJMWv8+uOnZf2hi2QXTg==", - "dev": true - }, - "JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "dev": true, - "requires": { - "jsonparse": "1.3.1", - "through": "2.3.8" - } - }, - "abbrev": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", - "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", - "dev": true - }, - "accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", - "requires": { - "mime-types": "2.1.21", - "negotiator": "0.6.1" - } - }, - "acorn": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.4.tgz", - "integrity": "sha512-VY4i5EKSKkofY2I+6QLTbTTN/UvEQPCo6eiwzzSaSWfpaDhOmStMCMod6wmuPciNq+XS0faCglFu2lHZpdHUtg==", - "dev": true - }, - "acorn-dynamic-import": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", - "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==", - "dev": true - }, - "acorn-node": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.6.2.tgz", - "integrity": "sha512-rIhNEZuNI8ibQcL7ANm/mGyPukIaZsRNX9psFNQURyJW0nu6k8wjSDld20z6v2mDBWqX13pIEnk9gGZJHIlEXg==", - "dev": true, - "requires": { - "acorn": "6.0.4", - "acorn-dynamic-import": "4.0.0", - "acorn-walk": "6.1.1", - "xtend": "4.0.1" - } - }, - "acorn-walk": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.1.tgz", - "integrity": "sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw==", - "dev": true - }, - "aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0=" - }, - "after": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", - "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", - "dev": true - }, - "ajv": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", - "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", - "requires": { - "fast-deep-equal": "2.0.1", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.4.1", - "uri-js": "4.2.2" - } - }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true, - "optional": true - }, - "ansi": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz", - "integrity": "sha1-DELU+xcWDVqa8eSEus4cZpIsGyE=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "1.9.3" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "1.0.3" - } - }, - "array-filter": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", - "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", - "dev": true - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "array-from": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz", - "integrity": "sha1-z+nYwmYoudxa7MYqn12PHzUsEZU=", - "dev": true - }, - "array-map": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", - "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=", - "dev": true - }, - "array-reduce": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", - "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", - "dev": true - }, - "arraybuffer.slice": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", - "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", - "dev": true - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "requires": { - "safer-buffer": "2.1.2" - } - }, - "assert": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", - "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", - "dev": true, - "requires": { - "util": "0.10.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - }, - "util": { - "version": "0.10.3", - "resolved": "http://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, - "requires": { - "inherits": "2.0.1" - } - } - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - }, - "assertion-error": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.0.0.tgz", - "integrity": "sha1-x/hUOP3UZrx8oWq5DIFRN5el0js=", - "dev": true - }, - "async": { - "version": "0.9.2", - "resolved": "http://registry.npmjs.org/async/-/async-0.9.2.tgz", - "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=" - }, - "async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" - }, - "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" - }, - "backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base-x": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.5.tgz", - "integrity": "sha512-C3picSgzPSLE+jW3tcBzJoGwitOtazb5B+5YmAxZm2ybmTi9LNgAtDO/jjVEBZwHoXmDBZ9m/IELj3elJVRBcA==", - "requires": { - "safe-buffer": "5.1.2" - } - }, - "base64-arraybuffer": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", - "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", - "dev": true - }, - "base64-js": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==" - }, - "base64id": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", - "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", - "dev": true - }, - "basic-auth": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", - "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", - "dev": true, - "requires": { - "safe-buffer": "5.1.2" - } - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "requires": { - "tweetnacl": "0.14.5" - } - }, - "bcryptjs": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", - "integrity": "sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms=" - }, - "better-assert": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", - "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", - "dev": true, - "requires": { - "callsite": "1.0.0" - } - }, - "bigi": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.2.tgz", - "integrity": "sha1-nGZalfiLiwj8Bc/XMfVhhZ1yWCU=" - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "bip38": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/bip38/-/bip38-1.4.0.tgz", - "integrity": "sha1-uNsw/xgwFt3eLO+0mzBVho6N8y0=", - "requires": { - "bigi": "1.4.2", - "browserify-aes": "1.2.0", - "buffer-xor": "1.0.3", - "coinstring": "2.3.0", - "create-hash": "1.2.0", - "ecurve": "1.0.6", - "scryptsy": "1.2.1" - } - }, - "bip66": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/bip66/-/bip66-1.1.5.tgz", - "integrity": "sha1-AfqHSHhcpwlV1QESF9GzE5lpyiI=", - "requires": { - "safe-buffer": "5.1.2" - } - }, - "bitcore-lib": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/bitcore-lib/-/bitcore-lib-8.1.1.tgz", - "integrity": "sha512-YyzpyKtwBIeOUu55oqltfk3/Uz8SYi1ayWq3JnaoGSzR4BNpD54sYejv2gZ5TuDe4KwBqvA2C5X1zkPBtlkGhQ==", - "requires": { - "bn.js": "4.11.8", - "bs58": "4.0.1", - "buffer-compare": "1.1.1", - "elliptic": "6.4.0", - "inherits": "2.0.1", - "lodash": "4.17.11" - }, - "dependencies": { - "bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", - "requires": { - "base-x": "3.0.5" - } - }, - "buffer-compare": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-compare/-/buffer-compare-1.1.1.tgz", - "integrity": "sha1-W+e+hTr4kZjR9N3AkNHWakiu9ZY=" - }, - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" - } - } - }, - "bitcore-lib-cash": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/bitcore-lib-cash/-/bitcore-lib-cash-8.1.1.tgz", - "integrity": "sha512-1yI8T87SL0/jCGvIqC8LH7bbe6Y22nob4jN6dW3QIrTWq8cr+aC9bFkpq/E5FDokX+nuVAHSmIjOlMu+xBvQRw==", - "requires": { - "bitcore-lib": "8.1.1", - "bn.js": "4.11.8", - "bs58": "4.0.1", - "buffer-compare": "1.1.1", - "elliptic": "6.4.0", - "inherits": "2.0.1", - "lodash": "4.17.11" - }, - "dependencies": { - "bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", - "requires": { - "base-x": "3.0.5" - } - }, - "buffer-compare": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-compare/-/buffer-compare-1.1.1.tgz", - "integrity": "sha1-W+e+hTr4kZjR9N3AkNHWakiu9ZY=" - }, - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" - } - } - }, - "bitcore-wallet-service": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/bitcore-wallet-service/-/bitcore-wallet-service-2.5.1.tgz", - "integrity": "sha512-3qs5Zh21x3sXc5t/Ww/NwEXXyIKNjZ5qkoOuf9vsOqd24WD1jA8GvqVp/lBZyNrzx7x6WK3DHsp6crfQxz6qfg==", - "dev": true, - "requires": { - "@sendgrid/mail": "6.3.1", - "async": "0.9.2", - "bitcore-lib": "0.16.0", - "bitcore-lib-cash": "0.19.0", - "body-parser": "1.18.3", - "compression": "1.7.4", - "email-validator": "1.2.3", - "express": "4.16.4", - "express-rate-limit": "2.14.2", - "inherits": "2.0.3", - "json-stable-stringify": "1.0.1", - "locker": "0.1.0", - "locker-server": "0.1.3", - "lodash": "4.17.11", - "moment": "2.24.0", - "mongodb": "2.2.36", - "morgan": "1.9.1", - "mustache": "2.3.2", - "npmlog": "0.1.1", - "preconditions": "2.2.1", - "read": "1.0.7", - "request": "2.88.0", - "secp256k1": "3.6.2", - "sjcl": "1.0.3", - "socket.io": "2.2.0", - "socket.io-client": "2.2.0", - "sticky-session": "0.1.0", - "uuid": "3.3.2" - }, - "dependencies": { - "bitcore-lib": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/bitcore-lib/-/bitcore-lib-0.16.0.tgz", - "integrity": "sha512-CEtcrPAH2gwgaMN+OPMJc18TBEak1+TtzMyafrqrIbK9PIa3kat195qBJhC0liJSHRiRr6IE2eLcXeIFFs+U8w==", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "bs58": "4.0.1", - "buffer-compare": "1.1.1", - "elliptic": "6.4.0", - "inherits": "2.0.1", - "lodash": "4.17.11" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - } - } - }, - "bitcore-lib-cash": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/bitcore-lib-cash/-/bitcore-lib-cash-0.19.0.tgz", - "integrity": "sha512-JBD30YS5M2OSUPbXggM257FjWXb5A1pHFn88lZQsqOokgddmdwp45K4APVEsj2iaKLR7uLOnGppSbAWj5Hihwg==", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "bs58": "4.0.1", - "buffer-compare": "1.1.1", - "elliptic": "6.4.0", - "inherits": "2.0.1", - "lodash": "4.17.11" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - } - } - }, - "bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", - "dev": true, - "requires": { - "base-x": "3.0.5" - } - }, - "buffer-compare": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-compare/-/buffer-compare-1.1.1.tgz", - "integrity": "sha1-W+e+hTr4kZjR9N3AkNHWakiu9ZY=", - "dev": true - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "dev": true - } - } - }, - "bl": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", - "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", - "requires": { - "readable-stream": "2.3.6", - "safe-buffer": "5.1.2" - } - }, - "blob": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", - "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", - "dev": true - }, - "bluebird": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.4.tgz", - "integrity": "sha512-FG+nFEZChJrbQ9tIccIfZJBz3J7mLrAhxakAbnrJWn8d7aKOC+LWifa0G+p4ZqKp4y13T7juYvdhq9NzKdsrjw==" - }, - "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" - }, - "body-parser": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", - "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", - "requires": { - "bytes": "3.0.0", - "content-type": "1.0.4", - "debug": "2.6.9", - "depd": "1.1.2", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", - "on-finished": "2.3.0", - "qs": "6.5.2", - "raw-body": "2.3.3", - "type-is": "1.6.16" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - } - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "1.0.0", - "concat-map": "0.0.1" - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" - }, - "browser-pack": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz", - "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", - "dev": true, - "requires": { - "JSONStream": "1.3.5", - "combine-source-map": "0.8.0", - "defined": "1.0.0", - "safe-buffer": "5.1.2", - "through2": "2.0.5", - "umd": "3.0.3" - } - }, - "browser-resolve": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", - "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", - "dev": true, - "requires": { - "resolve": "1.1.7" - }, - "dependencies": { - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true - } - } - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "browserify": { - "version": "13.3.0", - "resolved": "http://registry.npmjs.org/browserify/-/browserify-13.3.0.tgz", - "integrity": "sha1-tanJAgJD8McORnW+yCI7xifkFc4=", - "dev": true, - "requires": { - "JSONStream": "1.3.5", - "assert": "1.4.1", - "browser-pack": "6.1.0", - "browser-resolve": "1.11.3", - "browserify-zlib": "0.1.4", - "buffer": "4.9.1", - "cached-path-relative": "1.0.2", - "concat-stream": "1.5.2", - "console-browserify": "1.1.0", - "constants-browserify": "1.0.0", - "crypto-browserify": "3.12.0", - "defined": "1.0.0", - "deps-sort": "2.0.0", - "domain-browser": "1.1.7", - "duplexer2": "0.1.4", - "events": "1.1.1", - "glob": "7.1.3", - "has": "1.0.3", - "htmlescape": "1.1.1", - "https-browserify": "0.0.1", - "inherits": "2.0.3", - "insert-module-globals": "7.2.0", - "labeled-stream-splicer": "2.0.1", - "module-deps": "4.1.1", - "os-browserify": "0.1.2", - "parents": "1.0.1", - "path-browserify": "0.0.1", - "process": "0.11.10", - "punycode": "1.4.1", - "querystring-es3": "0.2.1", - "read-only-stream": "2.0.0", - "readable-stream": "2.3.6", - "resolve": "1.8.1", - "shasum": "1.0.2", - "shell-quote": "1.6.1", - "stream-browserify": "2.0.1", - "stream-http": "2.8.3", - "string_decoder": "0.10.31", - "subarg": "1.0.0", - "syntax-error": "1.4.0", - "through2": "2.0.5", - "timers-browserify": "1.4.2", - "tty-browserify": "0.0.1", - "url": "0.11.0", - "util": "0.10.4", - "vm-browserify": "0.0.4", - "xtend": "4.0.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } - } - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "requires": { - "buffer-xor": "1.0.3", - "cipher-base": "1.0.4", - "create-hash": "1.2.0", - "evp_bytestokey": "1.0.3", - "inherits": "2.0.3", - "safe-buffer": "5.1.2" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "requires": { - "browserify-aes": "1.2.0", - "browserify-des": "1.0.2", - "evp_bytestokey": "1.0.3" - } - }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "requires": { - "cipher-base": "1.0.4", - "des.js": "1.0.0", - "inherits": "2.0.3", - "safe-buffer": "5.1.2" - } - }, - "browserify-rsa": { - "version": "4.0.1", - "resolved": "http://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "requires": { - "bn.js": "4.11.8", - "randombytes": "2.0.6" - } - }, - "browserify-sha3": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/browserify-sha3/-/browserify-sha3-0.0.4.tgz", - "integrity": "sha1-CGxHuMgjFsnUcCLCYYWVRXbdjiY=", - "requires": { - "js-sha3": "0.6.1", - "safe-buffer": "5.1.2" - } - }, - "browserify-sign": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", - "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", - "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "elliptic": "6.4.0", - "inherits": "2.0.3", - "parse-asn1": "5.1.1" - } - }, - "browserify-zlib": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", - "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", - "dev": true, - "requires": { - "pako": "0.2.9" - } - }, - "bs58": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-2.0.1.tgz", - "integrity": "sha1-VZCNWPGYKrogCPob7Y+RmYopv40=" - }, - "bson": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/bson/-/bson-1.0.9.tgz", - "integrity": "sha512-IQX9/h7WdMBIW/q/++tGd+emQr0XMdeZ6icnT/74Xk9fnabWn+gZgpE+9V+gujL3hhJOoNrnDVY7tWdzc7NUTg==", - "dev": true - }, - "buffer": { - "version": "4.9.1", - "resolved": "http://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", - "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", - "dev": true, - "requires": { - "base64-js": "1.3.0", - "ieee754": "1.1.12", - "isarray": "1.0.0" - } - }, - "buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", - "requires": { - "buffer-alloc-unsafe": "1.1.0", - "buffer-fill": "1.0.0" - } - }, - "buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" - }, - "buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "buffer-shims": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", - "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=", - "dev": true - }, - "buffer-to-arraybuffer": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", - "integrity": "sha1-YGSkD6dutDxyOrqe+PbhIW0QURo=" - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" - }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", - "dev": true - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" - }, - "cached-path-relative": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.2.tgz", - "integrity": "sha512-5r2GqsoEb4qMTTN9J+WzXfjov+hjxT+j3u5K+kIVNIwAd99DLCJE9pBIMP1qVeybV6JiijL385Oz0DcYxfbOIg==", - "dev": true - }, - "callsite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, - "chai": { - "version": "1.10.0", - "resolved": "http://registry.npmjs.org/chai/-/chai-1.10.0.tgz", - "integrity": "sha1-5AMcyHZURhp1lD5aNatG6vOcHrk=", - "dev": true, - "requires": { - "assertion-error": "1.0.0", - "deep-eql": "0.1.3" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" - } - }, - "chownr": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", - "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==" - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" - } - }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "dev": true - }, - "coinstring": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/coinstring/-/coinstring-2.3.0.tgz", - "integrity": "sha1-zbYzY6lhUCQEolr7gsLibV/2J6Q=", - "requires": { - "bs58": "2.0.1", - "create-hash": "1.2.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "combine-source-map": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", - "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=", - "dev": true, - "requires": { - "convert-source-map": "1.1.3", - "inline-source-map": "0.6.2", - "lodash.memoize": "3.0.4", - "source-map": "0.5.7" - } - }, - "combined-stream": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", - "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", - "requires": { - "delayed-stream": "1.0.0" - } - }, - "commander": { - "version": "2.15.1", - "resolved": "http://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", - "dev": true - }, - "component-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", - "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", - "dev": true - }, - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" - }, - "component-inherit": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", - "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", - "dev": true - }, - "compressible": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.16.tgz", - "integrity": "sha512-JQfEOdnI7dASwCuSPWIeVYwc/zMsu/+tRhoUvEfXz2gxOA2DNjmG5vhtFdBlhWPPGo+RdT9S3tgc/uH5qgDiiA==", - "dev": true, - "requires": { - "mime-db": "1.38.0" - }, - "dependencies": { - "mime-db": { - "version": "1.38.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz", - "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==", - "dev": true - } - } - }, - "compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dev": true, - "requires": { - "accepts": "1.3.5", - "bytes": "3.0.0", - "compressible": "2.0.16", - "debug": "2.6.9", - "on-headers": "1.0.2", - "safe-buffer": "5.1.2", - "vary": "1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "concat-stream": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz", - "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.0.6", - "typedarray": "0.0.6" - }, - "dependencies": { - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", - "dev": true - }, - "readable-stream": { - "version": "2.0.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "0.10.31", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } - } - }, - "console-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", - "dev": true, - "requires": { - "date-now": "0.1.4" - } - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", - "dev": true - }, - "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "convert-source-map": { - "version": "1.1.3", - "resolved": "http://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", - "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", - "dev": true - }, - "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, - "cookiejar": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz", - "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==" - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "requires": { - "object-assign": "4.1.1", - "vary": "1.1.2" - } - }, - "coveralls": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.0.2.tgz", - "integrity": "sha512-Tv0LKe/MkBOilH2v7WBiTBdudg2ChfGbdXafc/s330djpF3zKOmuehTeRwjXWc7pzfj9FrDUTA7tEx6Div8NFw==", - "dev": true, - "requires": { - "growl": "1.10.5", - "js-yaml": "3.12.0", - "lcov-parse": "0.0.10", - "log-driver": "1.2.7", - "minimist": "1.2.0", - "request": "2.88.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, - "create-ecdh": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", - "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", - "requires": { - "bn.js": "4.11.8", - "elliptic": "6.4.0" - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "requires": { - "cipher-base": "1.0.4", - "inherits": "2.0.3", - "md5.js": "1.3.5", - "ripemd160": "2.0.2", - "sha.js": "2.4.11" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "http://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "requires": { - "cipher-base": "1.0.4", - "create-hash": "1.2.0", - "inherits": "2.0.3", - "ripemd160": "2.0.2", - "safe-buffer": "5.1.2", - "sha.js": "2.4.11" - } - }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "requires": { - "browserify-cipher": "1.0.1", - "browserify-sign": "4.0.4", - "create-ecdh": "4.0.3", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "diffie-hellman": "5.0.3", - "inherits": "2.0.3", - "pbkdf2": "3.0.17", - "public-encrypt": "4.0.3", - "randombytes": "2.0.6", - "randomfill": "1.0.4" - } - }, - "crypto-wallet-core": { - "version": "file:../crypto-wallet-core/crypto-wallet-core-8.1.1.tgz", - "integrity": "sha512-omK/SbZ+KUYTNyH/yG2DnwOuc2jdOv42LrRcjFWrTlSqPuQrDuL3twTf48Firo5F+TC1es8/lxaHEJ+9mFYWPw==", - "requires": { - "bcryptjs": "2.4.3", - "bitcore-lib": "8.1.1", - "bitcore-lib-cash": "8.1.1", - "elliptic": "6.4.1", - "ethereumjs-tx": "1.3.7", - "ethereumjs-util": "6.1.0", - "secp256k1": "3.6.2", - "web3": "1.0.0-beta.51" - }, - "dependencies": { - "elliptic": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", - "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", - "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0", - "hash.js": "1.1.7", - "hmac-drbg": "1.0.1", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" - } - } - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "requires": { - "assert-plus": "1.0.0" - } - }, - "date-now": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", - "dev": true - }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "2.1.1" - } - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" - }, - "decompress": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.0.tgz", - "integrity": "sha1-eu3YVCflqS2s/lVnSnxQXpbQH50=", - "requires": { - "decompress-tar": "4.1.1", - "decompress-tarbz2": "4.1.1", - "decompress-targz": "4.1.1", - "decompress-unzip": "4.0.1", - "graceful-fs": "4.1.15", - "make-dir": "1.3.0", - "pify": "2.3.0", - "strip-dirs": "2.1.0" - } - }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "requires": { - "mimic-response": "1.0.1" - } - }, - "decompress-tar": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", - "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", - "requires": { - "file-type": "5.2.0", - "is-stream": "1.1.0", - "tar-stream": "1.6.2" - } - }, - "decompress-tarbz2": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", - "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", - "requires": { - "decompress-tar": "4.1.1", - "file-type": "6.2.0", - "is-stream": "1.1.0", - "seek-bzip": "1.0.5", - "unbzip2-stream": "1.3.3" - }, - "dependencies": { - "file-type": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", - "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==" - } - } - }, - "decompress-targz": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", - "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", - "requires": { - "decompress-tar": "4.1.1", - "file-type": "5.2.0", - "is-stream": "1.1.0" - } - }, - "decompress-unzip": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", - "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", - "requires": { - "file-type": "3.9.0", - "get-stream": "2.3.1", - "pify": "2.3.0", - "yauzl": "2.10.0" - }, - "dependencies": { - "file-type": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", - "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=" - } - } - }, - "deep-eql": { - "version": "0.1.3", - "resolved": "http://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz", - "integrity": "sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=", - "dev": true, - "requires": { - "type-detect": "0.1.1" - } - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "deepmerge": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz", - "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==", - "dev": true - }, - "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "dev": true, - "requires": { - "clone": "1.0.4" - } - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "requires": { - "object-keys": "1.1.0" - } - }, - "defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", - "dev": true - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, - "deps-sort": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.0.tgz", - "integrity": "sha1-CRckkC6EZYJg65EHSMzNGvbiH7U=", - "dev": true, - "requires": { - "JSONStream": "1.3.5", - "shasum": "1.0.2", - "subarg": "1.0.0", - "through2": "2.0.5" - } - }, - "des.js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", - "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", - "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" - } - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - }, - "detective": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/detective/-/detective-4.7.1.tgz", - "integrity": "sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig==", - "dev": true, - "requires": { - "acorn": "5.7.3", - "defined": "1.0.0" - }, - "dependencies": { - "acorn": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", - "dev": true - } - } - }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true - }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "http://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "requires": { - "bn.js": "4.11.8", - "miller-rabin": "4.0.1", - "randombytes": "2.0.6" - } - }, - "dom-walk": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", - "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=" - }, - "domain-browser": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", - "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=", - "dev": true - }, - "drbg.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/drbg.js/-/drbg.js-1.0.1.tgz", - "integrity": "sha1-Pja2xCs3BDgjzbwzLVjzHiRFSAs=", - "requires": { - "browserify-aes": "1.2.0", - "create-hash": "1.2.0", - "create-hmac": "1.1.7" - } - }, - "duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", - "dev": true, - "requires": { - "readable-stream": "2.3.6" - } - }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "requires": { - "jsbn": "0.1.1", - "safer-buffer": "2.1.2" - } - }, - "ecurve": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/ecurve/-/ecurve-1.0.6.tgz", - "integrity": "sha512-/BzEjNfiSuB7jIWKcS/z8FK9jNjmEWvUV2YZ4RLSmcDtP7Lq0m6FvDuSnJpBlDpGRpfRQeTLGLBI8H+kEv0r+w==", - "requires": { - "bigi": "1.4.2", - "safe-buffer": "5.1.2" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "elliptic": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", - "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", - "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0", - "hash.js": "1.1.7", - "hmac-drbg": "1.0.1", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" - } - }, - "email-validator": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/email-validator/-/email-validator-1.2.3.tgz", - "integrity": "sha512-WZmY6vj6bAWUzr1P2OmRkw4E3FWwdnKxWG/Ssfvr+kp+0leuXzsX2EHNwjg8+KW2DfAiFWiV+jn5n1P7TlE7lw==", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" - }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "requires": { - "once": "1.4.0" - } - }, - "engine.io": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.3.2.tgz", - "integrity": "sha512-AsaA9KG7cWPXWHp5FvHdDWY3AMWeZ8x+2pUVLcn71qE5AtAzgGbxuclOytygskw8XGmiQafTmnI9Bix3uihu2w==", - "dev": true, - "requires": { - "accepts": "1.3.5", - "base64id": "1.0.0", - "cookie": "0.3.1", - "debug": "3.1.0", - "engine.io-parser": "2.1.3", - "ws": "6.1.4" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "engine.io-client": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.3.2.tgz", - "integrity": "sha512-y0CPINnhMvPuwtqXfsGuWE8BB66+B6wTtCofQDRecMQPYX3MYUZXFNKDhdrSe3EVjgOu4V3rxdeqN/Tr91IgbQ==", - "dev": true, - "requires": { - "component-emitter": "1.2.1", - "component-inherit": "0.0.3", - "debug": "3.1.0", - "engine.io-parser": "2.1.3", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "ws": "6.1.4", - "xmlhttprequest-ssl": "1.5.5", - "yeast": "0.1.2" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "engine.io-parser": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", - "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", - "dev": true, - "requires": { - "after": "0.8.2", - "arraybuffer.slice": "0.0.7", - "base64-arraybuffer": "0.1.5", - "blob": "0.0.5", - "has-binary2": "1.0.3" - } - }, - "errr": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/errr/-/errr-2.2.1.tgz", - "integrity": "sha1-H+eLb7KS0mXGJcBqfsmjsy4blt8=" - }, - "es-abstract": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", - "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", - "requires": { - "es-to-primitive": "1.2.0", - "function-bind": "1.1.1", - "has": "1.0.3", - "is-callable": "1.1.4", - "is-regex": "1.0.4", - "object-keys": "1.1.0" - } - }, - "es-to-primitive": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", - "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", - "requires": { - "is-callable": "1.1.4", - "is-date-object": "1.0.1", - "is-symbol": "1.0.2" - } - }, - "es6-promise": { - "version": "3.2.1", - "resolved": "http://registry.npmjs.org/es6-promise/-/es6-promise-3.2.1.tgz", - "integrity": "sha1-7FYjOGgDKQkgcXDDlEjiREndH8Q=", - "dev": true - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "escodegen": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", - "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", - "dev": true, - "requires": { - "esprima": "2.7.3", - "estraverse": "1.9.3", - "esutils": "2.0.2", - "optionator": "0.8.2", - "source-map": "0.2.0" - }, - "dependencies": { - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true - }, - "source-map": { - "version": "0.2.0", - "resolved": "http://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", - "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", - "dev": true, - "optional": true, - "requires": { - "amdefine": "1.0.1" - } - } - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "estraverse": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", - "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" - }, - "eth-ens-namehash": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz", - "integrity": "sha1-IprEbsqG1S4MmR58sq74P/D2i88=", - "requires": { - "idna-uts46-hx": "2.3.1", - "js-sha3": "0.5.7" - }, - "dependencies": { - "js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=" - } - } - }, - "eth-lib": { - "version": "0.1.27", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.27.tgz", - "integrity": "sha512-B8czsfkJYzn2UIEMwjc7Mbj+Cy72V+/OXH/tb44LV8jhrjizQJJ325xMOMyk3+ETa6r6oi0jsUY14+om8mQMWA==", - "requires": { - "bn.js": "4.11.8", - "elliptic": "6.4.0", - "keccakjs": "0.2.3", - "nano-json-stream-parser": "0.1.2", - "servify": "0.1.12", - "ws": "3.3.3", - "xhr-request-promise": "0.1.2" - }, - "dependencies": { - "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", - "requires": { - "async-limiter": "1.0.0", - "safe-buffer": "5.1.2", - "ultron": "1.1.1" - } - } - } - }, - "ethereum-common": { - "version": "0.0.18", - "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.0.18.tgz", - "integrity": "sha1-L9w1dvIykDNYl26znaeDIT/5Uj8=" - }, - "ethereumjs-tx": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-1.3.7.tgz", - "integrity": "sha512-wvLMxzt1RPhAQ9Yi3/HKZTn0FZYpnsmQdbKYfUUpi4j1SEIcbkd9tndVjcPrufY3V7j2IebOpC00Zp2P/Ay2kA==", - "requires": { - "ethereum-common": "0.0.18", - "ethereumjs-util": "5.2.0" - }, - "dependencies": { - "ethereumjs-util": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz", - "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", - "requires": { - "bn.js": "4.11.8", - "create-hash": "1.2.0", - "ethjs-util": "0.1.6", - "keccak": "1.4.0", - "rlp": "2.2.3", - "safe-buffer": "5.1.2", - "secp256k1": "3.6.2" - } - } - } - }, - "ethereumjs-util": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.1.0.tgz", - "integrity": "sha512-URESKMFbDeJxnAxPppnk2fN6Y3BIatn9fwn76Lm8bQlt+s52TpG8dN9M66MLPuRAiAOIqL3dfwqWJf0sd0fL0Q==", - "requires": { - "bn.js": "4.11.8", - "create-hash": "1.2.0", - "ethjs-util": "0.1.6", - "keccak": "1.4.0", - "rlp": "2.2.3", - "safe-buffer": "5.1.2", - "secp256k1": "3.6.2" - } - }, - "ethers": { - "version": "4.0.27", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.27.tgz", - "integrity": "sha512-+DXZLP/tyFnXWxqr2fXLT67KlGUfLuvDkHSOtSC9TUVG9OIj6yrG5JPeXRMYo15xkOYwnjgdMKrXp5V94rtjJA==", - "requires": { - "@types/node": "10.14.4", - "aes-js": "3.0.0", - "bn.js": "4.11.8", - "elliptic": "6.3.3", - "hash.js": "1.1.3", - "js-sha3": "0.5.7", - "scrypt-js": "2.0.4", - "setimmediate": "1.0.4", - "uuid": "2.0.1", - "xmlhttprequest": "1.8.0" - }, - "dependencies": { - "@types/node": { - "version": "10.14.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.4.tgz", - "integrity": "sha512-DT25xX/YgyPKiHFOpNuANIQIVvYEwCWXgK2jYYwqgaMrYE6+tq+DtmMwlD3drl6DJbUwtlIDnn0d7tIn/EbXBg==" - }, - "elliptic": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz", - "integrity": "sha1-VILZZG1UvLif19mU/J4ulWiHbj8=", - "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0", - "hash.js": "1.1.3", - "inherits": "2.0.3" - } - }, - "hash.js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", - "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", - "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" - } - }, - "js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=" - }, - "setimmediate": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz", - "integrity": "sha1-IOgd5iLUoCWIzgyNqJc8vPHTE48=" - }, - "uuid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", - "integrity": "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w=" - } - } - }, - "ethjs-unit": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", - "integrity": "sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk=", - "requires": { - "bn.js": "4.11.6", - "number-to-bn": "1.7.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" - } - } - }, - "ethjs-util": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", - "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", - "requires": { - "is-hex-prefixed": "1.0.0", - "strip-hex-prefix": "1.0.0" - } - }, - "eventemitter3": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", - "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==" - }, - "events": { - "version": "1.1.1", - "resolved": "http://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", - "dev": true - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "requires": { - "md5.js": "1.3.5", - "safe-buffer": "5.1.2" - } - }, - "express": { - "version": "4.16.4", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", - "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", - "requires": { - "accepts": "1.3.5", - "array-flatten": "1.1.1", - "body-parser": "1.18.3", - "content-disposition": "0.5.2", - "content-type": "1.0.4", - "cookie": "0.3.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "1.1.2", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", - "finalhandler": "1.1.1", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "1.1.2", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "path-to-regexp": "0.1.7", - "proxy-addr": "2.0.4", - "qs": "6.5.2", - "range-parser": "1.2.0", - "safe-buffer": "5.1.2", - "send": "0.16.2", - "serve-static": "1.13.2", - "setprototypeof": "1.1.0", - "statuses": "1.4.0", - "type-is": "1.6.16", - "utils-merge": "1.0.1", - "vary": "1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - }, - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - } - } - }, - "express-rate-limit": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-2.14.2.tgz", - "integrity": "sha512-aVYzfYU2Bv+v6ry/fBpTrX8MorM0p/TeDnx4CqiLevg9ftG8eW+pyuZ6JEreGdG2t1vXyTGHuSNRKLeYixuqZg==", - "dev": true, - "requires": { - "defaults": "1.0.3" - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", - "requires": { - "pend": "1.2.0" - } - }, - "file-type": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=" - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" - }, - "finalhandler": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", - "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", - "requires": { - "debug": "2.6.9", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.4.0", - "unpipe": "1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - } - } - }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "requires": { - "is-callable": "1.1.4" - } - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.7", - "mime-types": "2.1.21" - } - }, - "formidable": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.1.tgz", - "integrity": "sha512-Fs9VRguL0gqGHkXS5GQiMCr1VhZBxz0JnJs4JmMp/2jL18Fmbzvv7vOFRU+U8TBkHEE/CX1qDXzJplVULgsLeg==" - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" - }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - }, - "fs-extra": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", - "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", - "requires": { - "graceful-fs": "4.1.15", - "jsonfile": "4.0.0", - "universalify": "0.1.2" - } - }, - "fs-minipass": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", - "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", - "requires": { - "minipass": "2.3.5" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "get-assigned-identifiers": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", - "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==", - "dev": true - }, - "get-stream": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", - "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", - "requires": { - "object-assign": "4.1.1", - "pinkie-promise": "2.0.1" - } - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "requires": { - "assert-plus": "1.0.0" - } - }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "global": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", - "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", - "requires": { - "min-document": "2.19.0", - "process": "0.5.2" - }, - "dependencies": { - "process": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", - "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=" - } - } - }, - "got": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", - "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", - "requires": { - "decompress-response": "3.3.0", - "duplexer3": "0.1.4", - "get-stream": "3.0.0", - "is-plain-obj": "1.1.0", - "is-retry-allowed": "1.1.0", - "is-stream": "1.1.0", - "isurl": "1.0.0", - "lowercase-keys": "1.0.1", - "p-cancelable": "0.3.0", - "p-timeout": "1.2.1", - "safe-buffer": "5.1.2", - "timed-out": "4.0.1", - "url-parse-lax": "1.0.0", - "url-to-options": "1.0.1" - }, - "dependencies": { - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" - } - } - }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" - }, - "graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, - "handlebars": { - "version": "4.0.12", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.12.tgz", - "integrity": "sha512-RhmTekP+FZL+XNhwS1Wf+bTTZpdLougwt5pcgA1tuz6Jcx0fpH/7z0qd71RKnZHBCxIRBHfBOnio4gViPemNzA==", - "dev": true, - "requires": { - "async": "2.6.1", - "optimist": "0.6.1", - "source-map": "0.6.1", - "uglify-js": "3.4.9" - }, - "dependencies": { - "async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", - "dev": true, - "requires": { - "lodash": "4.17.11" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "requires": { - "ajv": "6.10.0", - "har-schema": "2.0.0" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "1.1.1" - } - }, - "has-binary2": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", - "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", - "dev": true, - "requires": { - "isarray": "2.0.1" - }, - "dependencies": { - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", - "dev": true - } - } - }, - "has-cors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-symbol-support-x": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", - "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==" - }, - "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" - }, - "has-to-string-tag-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", - "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", - "requires": { - "has-symbol-support-x": "1.4.2" - } - }, - "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" - } - }, - "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", - "dev": true - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "requires": { - "hash.js": "1.1.7", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" - } - }, - "htmlescape": { - "version": "1.1.1", - "resolved": "http://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", - "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=", - "dev": true - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "requires": { - "depd": "1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": "1.5.0" - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "requires": { - "assert-plus": "1.0.0", - "jsprim": "1.4.1", - "sshpk": "1.16.1" - } - }, - "https-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz", - "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=", - "dev": true - }, - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "requires": { - "safer-buffer": "2.1.2" - } - }, - "idna-uts46-hx": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz", - "integrity": "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==", - "requires": { - "punycode": "2.1.0" - }, - "dependencies": { - "punycode": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", - "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=" - } - } - }, - "ieee754": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", - "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==" - }, - "indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "inline-source-map": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", - "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", - "dev": true, - "requires": { - "source-map": "0.5.7" - } - }, - "insert-module-globals": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.0.tgz", - "integrity": "sha512-VE6NlW+WGn2/AeOMd496AHFYmE7eLKkUY6Ty31k4og5vmA3Fjuwe9v6ifH6Xx/Hz27QvdoMoviw1/pqWRB09Sw==", - "dev": true, - "requires": { - "JSONStream": "1.3.5", - "acorn-node": "1.6.2", - "combine-source-map": "0.8.0", - "concat-stream": "1.6.2", - "is-buffer": "1.1.6", - "path-is-absolute": "1.0.1", - "process": "0.11.10", - "through2": "2.0.5", - "undeclared-identifiers": "1.1.2", - "xtend": "4.0.1" - }, - "dependencies": { - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "requires": { - "buffer-from": "1.1.1", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "typedarray": "0.0.6" - } - } - } - }, - "ipaddr.js": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", - "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=" - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" - }, - "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" - }, - "is-function": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.1.tgz", - "integrity": "sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=" - }, - "is-hex-prefixed": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", - "integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ=" - }, - "is-natural-number": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", - "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=" - }, - "is-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", - "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=" - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" - }, - "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "requires": { - "has": "1.0.3" - } - }, - "is-retry-allowed": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", - "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=" - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, - "is-symbol": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", - "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", - "requires": { - "has-symbols": "1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "istanbul": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", - "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", - "dev": true, - "requires": { - "abbrev": "1.0.9", - "async": "1.5.2", - "escodegen": "1.8.1", - "esprima": "2.7.3", - "glob": "5.0.15", - "handlebars": "4.0.12", - "js-yaml": "3.12.0", - "mkdirp": "0.5.1", - "nopt": "3.0.6", - "once": "1.4.0", - "resolve": "1.1.7", - "supports-color": "3.2.3", - "which": "1.3.1", - "wordwrap": "1.0.0" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "http://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - }, - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true - }, - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } - } - }, - "isurl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", - "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", - "requires": { - "has-to-string-tag-x": "1.4.1", - "is-object": "1.0.1" - } - }, - "js-sha3": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.6.1.tgz", - "integrity": "sha1-W4n3enR3Z5h39YxKB1JAk0sflcA=" - }, - "js-yaml": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", - "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", - "dev": true, - "requires": { - "argparse": "1.0.10", - "esprima": "4.0.1" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "requires": { - "jsonify": "0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "requires": { - "graceful-fs": "4.1.15" - } - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" - }, - "jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", - "dev": true - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "just-extend": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-3.0.0.tgz", - "integrity": "sha512-Fu3T6pKBuxjWT/p4DkqGHFRsysc8OauWr4ZRTY9dIx07Y9O0RkoR5jcv28aeD1vuAwhm3nLkDurwLXoALp4DpQ==", - "dev": true - }, - "keccak": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-1.4.0.tgz", - "integrity": "sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw==", - "requires": { - "bindings": "1.5.0", - "inherits": "2.0.3", - "nan": "2.13.2", - "safe-buffer": "5.1.2" - } - }, - "keccakjs": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/keccakjs/-/keccakjs-0.2.3.tgz", - "integrity": "sha512-BjLkNDcfaZ6l8HBG9tH0tpmDv3sS2mA7FNQxFHpCdzP3Gb2MVruXBSuoM66SnVxKJpAr5dKGdkHD+bDokt8fTg==", - "requires": { - "browserify-sha3": "0.0.4", - "sha3": "1.2.2" - } - }, - "labeled-stream-splicer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.1.tgz", - "integrity": "sha512-MC94mHZRvJ3LfykJlTUipBqenZz1pacOZEMhhQ8dMGcDHs0SBE5GbsavUXV7YtP3icBW17W0Zy1I0lfASmo9Pg==", - "dev": true, - "requires": { - "inherits": "2.0.3", - "isarray": "2.0.4", - "stream-splicer": "2.0.0" - }, - "dependencies": { - "isarray": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.4.tgz", - "integrity": "sha512-GMxXOiUirWg1xTKRipM0Ek07rX+ubx4nNVElTJdNLYmNO/2YrDkgJGw9CljXn+r4EWiDQg/8lsRdHyg2PJuUaA==", - "dev": true - } - } - }, - "lcov-parse": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-0.0.10.tgz", - "integrity": "sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM=", - "dev": true - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "1.1.2", - "type-check": "0.3.2" - } - }, - "locker": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/locker/-/locker-0.1.0.tgz", - "integrity": "sha1-RjI0pNCVEhqUfnZC8EgjrCJhUjE=", - "dev": true - }, - "locker-server": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/locker-server/-/locker-server-0.1.3.tgz", - "integrity": "sha1-wg/xm0KDtBxxDereAiXevFQtmHQ=", - "dev": true, - "requires": { - "mocha": "5.2.0" - } - }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" - }, - "lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", - "dev": true - }, - "lodash.memoize": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", - "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=", - "dev": true - }, - "log-driver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", - "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", - "dev": true - }, - "lolex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-3.0.0.tgz", - "integrity": "sha512-hcnW80h3j2lbUfFdMArd5UPA/vxZJ+G8vobd+wg3nVEQA0EigStbYcrG030FJxL6xiDDPEkoMatV9xIh5OecQQ==", - "dev": true - }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" - }, - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "requires": { - "pify": "3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - } - } - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3", - "safe-buffer": "5.1.2" - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0" - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - }, - "mime-db": { - "version": "1.37.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", - "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==" - }, - "mime-types": { - "version": "2.1.21", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", - "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", - "requires": { - "mime-db": "1.37.0" - } - }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" - }, - "min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", - "requires": { - "dom-walk": "0.1.1" - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "1.1.11" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - }, - "minipass": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", - "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", - "requires": { - "safe-buffer": "5.1.2", - "yallist": "3.0.3" - } - }, - "minizlib": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz", - "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", - "requires": { - "minipass": "2.3.5" - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "requires": { - "minimist": "0.0.8" - } - }, - "mkdirp-promise": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz", - "integrity": "sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE=", - "requires": { - "mkdirp": "0.5.1" - } - }, - "mocha": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", - "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", - "dev": true, - "requires": { - "browser-stdout": "1.3.1", - "commander": "2.15.1", - "debug": "3.1.0", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "glob": "7.1.2", - "growl": "1.10.5", - "he": "1.1.1", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "supports-color": "5.4.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } - } - } - }, - "mock-fs": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.8.0.tgz", - "integrity": "sha512-Gwj4KnJOW15YeTJKO5frFd/WDO5Mc0zxXqL9oHx3+e9rBqW8EVARqQHSaIXznUdljrD6pvbNGW2ZGXKPEfYJfw==" - }, - "module-deps": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-4.1.1.tgz", - "integrity": "sha1-IyFYM/HaE/1gbMuAh7RIUty4If0=", - "dev": true, - "requires": { - "JSONStream": "1.3.5", - "browser-resolve": "1.11.3", - "cached-path-relative": "1.0.2", - "concat-stream": "1.5.2", - "defined": "1.0.0", - "detective": "4.7.1", - "duplexer2": "0.1.4", - "inherits": "2.0.3", - "parents": "1.0.1", - "readable-stream": "2.3.6", - "resolve": "1.8.1", - "stream-combiner2": "1.1.1", - "subarg": "1.0.0", - "through2": "2.0.5", - "xtend": "4.0.1" - } - }, - "moment": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", - "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==", - "dev": true - }, - "mongodb": { - "version": "2.2.36", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-2.2.36.tgz", - "integrity": "sha512-P2SBLQ8Z0PVx71ngoXwo12+FiSfbNfGOClAao03/bant5DgLNkOPAck5IaJcEk4gKlQhDEURzfR3xuBG1/B+IA==", - "dev": true, - "requires": { - "es6-promise": "3.2.1", - "mongodb-core": "2.1.20", - "readable-stream": "2.2.7" - }, - "dependencies": { - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", - "dev": true - }, - "readable-stream": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.7.tgz", - "integrity": "sha1-BwV6y+JGeyIELTb5jFrVBwVOlbE=", - "dev": true, - "requires": { - "buffer-shims": "1.0.0", - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "5.1.2" - } - } - } - }, - "mongodb-core": { - "version": "2.1.20", - "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-2.1.20.tgz", - "integrity": "sha512-IN57CX5/Q1bhDq6ShAR6gIv4koFsZP7L8WOK1S0lR0pVDQaScffSMV5jxubLsmZ7J+UdqmykKw4r9hG3XQEGgQ==", - "dev": true, - "requires": { - "bson": "1.0.9", - "require_optional": "1.0.1" - } - }, - "morgan": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz", - "integrity": "sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==", - "dev": true, - "requires": { - "basic-auth": "2.0.1", - "debug": "2.6.9", - "depd": "1.1.2", - "on-finished": "2.3.0", - "on-headers": "1.0.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - }, - "mustache": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/mustache/-/mustache-2.3.2.tgz", - "integrity": "sha512-KpMNwdQsYz3O/SBS1qJ/o3sqUJ5wSb8gb0pul8CO0S56b9Y2ALm8zCfsjPXsqGFfoNBkDwZuZIAjhsZI03gYVQ==", - "dev": true - }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "nan": { - "version": "2.13.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz", - "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==" - }, - "nano-json-stream-parser": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz", - "integrity": "sha1-DMj20OK2IrR5xA1JnEbWS3Vcb18=" - }, - "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" - }, - "nise": { - "version": "1.4.6", - "resolved": "https://registry.npmjs.org/nise/-/nise-1.4.6.tgz", - "integrity": "sha512-1GedetLKzmqmgwabuMSqPsT7oumdR77SBpDfNNJhADRIeA3LN/2RVqR4fFqwvzhAqcTef6PPCzQwITE/YQ8S8A==", - "dev": true, - "requires": { - "@sinonjs/formatio": "3.0.0", - "just-extend": "3.0.0", - "lolex": "2.7.5", - "path-to-regexp": "1.7.0", - "text-encoding": "0.6.4" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "lolex": { - "version": "2.7.5", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-2.7.5.tgz", - "integrity": "sha512-l9x0+1offnKKIzYVjyXU2SiwhXDLekRzKyhnbyldPHvC7BvLPVpdNUNR2KeMAiCN2D/kLNttZgQD5WjSxuBx3Q==", - "dev": true - }, - "path-to-regexp": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", - "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=", - "dev": true, - "requires": { - "isarray": "0.0.1" - } - } - } - }, - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "dev": true, - "requires": { - "abbrev": "1.0.9" - } - }, - "npmlog": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-0.1.1.tgz", - "integrity": "sha1-i5ueRAXX7EjDHCNGllqtx6uuyqU=", - "dev": true, - "requires": { - "ansi": "0.3.1" - } - }, - "number-to-bn": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", - "integrity": "sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA=", - "requires": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" - } - } - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object-component": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", - "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", - "dev": true - }, - "object-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz", - "integrity": "sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==" - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1.0.2" - } - }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "dev": true, - "requires": { - "minimist": "0.0.8", - "wordwrap": "0.0.3" - }, - "dependencies": { - "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", - "dev": true - } - } - }, - "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", - "dev": true, - "requires": { - "deep-is": "0.1.3", - "fast-levenshtein": "2.0.6", - "levn": "0.3.0", - "prelude-ls": "1.1.2", - "type-check": "0.3.2", - "wordwrap": "1.0.0" - } - }, - "os-browserify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.1.2.tgz", - "integrity": "sha1-ScoCk+CxlZCl9d4Qx/JlphfY/lQ=", - "dev": true - }, - "p-cancelable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", - "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==" - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" - }, - "p-timeout": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", - "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=", - "requires": { - "p-finally": "1.0.0" - } - }, - "pako": { - "version": "0.2.9", - "resolved": "http://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=", - "dev": true - }, - "parents": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", - "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", - "dev": true, - "requires": { - "path-platform": "0.11.15" - } - }, - "parse-asn1": { - "version": "5.1.1", - "resolved": "http://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", - "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", - "requires": { - "asn1.js": "4.10.1", - "browserify-aes": "1.2.0", - "create-hash": "1.2.0", - "evp_bytestokey": "1.0.3", - "pbkdf2": "3.0.17" - }, - "dependencies": { - "asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", - "requires": { - "bn.js": "4.11.8", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" - } - } - } - }, - "parse-headers": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.2.tgz", - "integrity": "sha512-/LypJhzFmyBIDYP9aDVgeyEb5sQfbfY5mnDq4hVhlQ69js87wXfmEI5V3xI6vvXasqebp0oCytYFLxsBVfCzSg==", - "requires": { - "for-each": "0.3.3", - "string.prototype.trim": "1.1.2" - } - }, - "parseqs": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", - "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", - "dev": true, - "requires": { - "better-assert": "1.0.2" - } - }, - "parseuri": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", - "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", - "dev": true, - "requires": { - "better-assert": "1.0.2" - } - }, - "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" - }, - "path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "path-platform": { - "version": "0.11.15", - "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", - "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=", - "dev": true - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, - "pbkdf2": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", - "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", - "requires": { - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "ripemd160": "2.0.2", - "safe-buffer": "5.1.2", - "sha.js": "2.4.11" - } - }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "requires": { - "pinkie": "2.0.4" - } - }, - "preconditions": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/preconditions/-/preconditions-2.2.1.tgz", - "integrity": "sha1-o9JeRQoOrzLcb2tAEob5VWN4Ts4=", - "requires": { - "errr": "2.2.1", - "lodash": "4.17.5" - }, - "dependencies": { - "lodash": { - "version": "4.17.5", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", - "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==" - } - } - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" - }, - "proxy-addr": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", - "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", - "requires": { - "forwarded": "0.1.2", - "ipaddr.js": "1.8.0" - } - }, - "psl": { - "version": "1.1.31", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", - "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==" - }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.2.0", - "parse-asn1": "5.1.1", - "randombytes": "2.0.6", - "safe-buffer": "5.1.2" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "qs": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.6.0.tgz", - "integrity": "sha512-KIJqT9jQJDQx5h5uAVPimw6yVg2SekOKu959OCtktD3FjzbpvaPr8i4zzg07DOMz+igA4W/aNM7OV8H37pFYfA==" - }, - "query-string": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", - "requires": { - "decode-uri-component": "0.2.0", - "object-assign": "4.1.1", - "strict-uri-encode": "1.1.0" - } - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", - "dev": true - }, - "querystringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", - "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==" - }, - "randombytes": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", - "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", - "requires": { - "safe-buffer": "5.1.2" - } - }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "requires": { - "randombytes": "2.0.6", - "safe-buffer": "5.1.2" - } - }, - "randomhex": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/randomhex/-/randomhex-0.1.5.tgz", - "integrity": "sha1-us7vmCMpCRQA8qKRLGzQLxCU9YU=" - }, - "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" - }, - "raw-body": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", - "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", - "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", - "unpipe": "1.0.0" - } - }, - "read": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", - "dev": true, - "requires": { - "mute-stream": "0.0.8" - } - }, - "read-only-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", - "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", - "dev": true, - "requires": { - "readable-stream": "2.3.6" - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" - } - }, - "regenerator-runtime": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz", - "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==" - }, - "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "requires": { - "aws-sign2": "0.7.0", - "aws4": "1.8.0", - "caseless": "0.12.0", - "combined-stream": "1.0.7", - "extend": "3.0.2", - "forever-agent": "0.6.1", - "form-data": "2.3.3", - "har-validator": "5.1.3", - "http-signature": "1.2.0", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.21", - "oauth-sign": "0.9.0", - "performance-now": "2.1.0", - "qs": "6.5.2", - "safe-buffer": "5.1.2", - "tough-cookie": "2.4.3", - "tunnel-agent": "0.6.0", - "uuid": "3.3.2" - }, - "dependencies": { - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" - } - } - }, - "require_optional": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", - "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", - "dev": true, - "requires": { - "resolve-from": "2.0.0", - "semver": "5.6.0" - } - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" - }, - "resolve": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", - "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", - "dev": true, - "requires": { - "path-parse": "1.0.6" - } - }, - "resolve-from": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", - "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=", - "dev": true - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3" - } - }, - "rlp": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.3.tgz", - "integrity": "sha512-l6YVrI7+d2vpW6D6rS05x2Xrmq8oW7v3pieZOJKBEdjuTF4Kz/iwk55Zyh1Zaz+KOB2kC8+2jZlp2u9L4tTzCQ==", - "requires": { - "bn.js": "4.11.8", - "safe-buffer": "5.1.2" - } - }, - "rxjs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz", - "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==", - "requires": { - "tslib": "1.9.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "scrypt": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/scrypt/-/scrypt-6.0.3.tgz", - "integrity": "sha1-BOAUpWgrU/pQwtXM4WfXGcBthw0=", - "requires": { - "nan": "2.13.2" - } - }, - "scrypt-js": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz", - "integrity": "sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==" - }, - "scrypt.js": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/scrypt.js/-/scrypt.js-0.2.0.tgz", - "integrity": "sha1-r40UZbcemZARC+38WTuUeeA6ito=", - "requires": { - "scrypt": "6.0.3", - "scryptsy": "1.2.1" - } - }, - "scryptsy": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/scryptsy/-/scryptsy-1.2.1.tgz", - "integrity": "sha1-oyJfpLJST4AnAHYeKFW987LZIWM=", - "requires": { - "pbkdf2": "3.0.17" - } - }, - "secp256k1": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-3.6.2.tgz", - "integrity": "sha512-90nYt7yb0LmI4A2jJs1grglkTAXrBwxYAjP9bpeKjvJKOjG2fOeH/YI/lchDMIvjrOasd5QXwvV2jwN168xNng==", - "requires": { - "bindings": "1.5.0", - "bip66": "1.1.5", - "bn.js": "4.11.8", - "create-hash": "1.2.0", - "drbg.js": "1.0.1", - "elliptic": "6.4.0", - "nan": "2.13.2", - "safe-buffer": "5.1.2" - } - }, - "seek-bzip": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz", - "integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=", - "requires": { - "commander": "2.8.1" - }, - "dependencies": { - "commander": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", - "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", - "requires": { - "graceful-readlink": "1.0.1" - } - } - } - }, - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true - }, - "send": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", - "requires": { - "debug": "2.6.9", - "depd": "1.1.2", - "destroy": "1.0.4", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", - "fresh": "0.5.2", - "http-errors": "1.6.3", - "mime": "1.4.1", - "ms": "2.0.0", - "on-finished": "2.3.0", - "range-parser": "1.2.0", - "statuses": "1.4.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - } - } - }, - "serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", - "requires": { - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "parseurl": "1.3.2", - "send": "0.16.2" - } - }, - "servify": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz", - "integrity": "sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==", - "requires": { - "body-parser": "1.18.3", - "cors": "2.8.5", - "express": "4.16.4", - "request": "2.88.0", - "xhr": "2.5.0" - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, - "sha.js": { - "version": "2.4.11", - "resolved": "http://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" - } - }, - "sha3": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/sha3/-/sha3-1.2.2.tgz", - "integrity": "sha1-pmxQmN5MJbyIM27ItIF9AFvKe6k=", - "requires": { - "nan": "2.10.0" - }, - "dependencies": { - "nan": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", - "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==" - } - } - }, - "shasum": { - "version": "1.0.2", - "resolved": "http://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", - "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=", - "dev": true, - "requires": { - "json-stable-stringify": "0.0.1", - "sha.js": "2.4.11" - }, - "dependencies": { - "json-stable-stringify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz", - "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=", - "dev": true, - "requires": { - "jsonify": "0.0.0" - } - } - } - }, - "shell-quote": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", - "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", - "dev": true, - "requires": { - "array-filter": "0.0.1", - "array-map": "0.0.0", - "array-reduce": "0.0.0", - "jsonify": "0.0.0" - } - }, - "simple-concat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", - "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=" - }, - "simple-get": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz", - "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==", - "requires": { - "decompress-response": "3.3.0", - "once": "1.4.0", - "simple-concat": "1.0.0" - } - }, - "sinon": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-7.1.1.tgz", - "integrity": "sha512-iYagtjLVt1vN3zZY7D8oH7dkjNJEjLjyuzy8daX5+3bbQl8gaohrheB9VfH1O3L6LKuue5WTJvFluHiuZ9y3nQ==", - "dev": true, - "requires": { - "@sinonjs/commons": "1.3.0", - "@sinonjs/formatio": "3.0.0", - "@sinonjs/samsam": "2.1.3", - "diff": "3.5.0", - "lodash.get": "4.4.2", - "lolex": "3.0.0", - "nise": "1.4.6", - "supports-color": "5.5.0", - "type-detect": "4.0.8" - }, - "dependencies": { - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - } - } - }, - "sjcl": { - "version": "1.0.3", - "resolved": "http://registry.npmjs.org/sjcl/-/sjcl-1.0.3.tgz", - "integrity": "sha1-TtSGSY7Wt0K11KIZAiaBFvBUpwk=" - }, - "socket.io": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.2.0.tgz", - "integrity": "sha512-wxXrIuZ8AILcn+f1B4ez4hJTPG24iNgxBBDaJfT6MsyOhVYiTXWexGoPkd87ktJG8kQEcL/NBvRi64+9k4Kc0w==", - "dev": true, - "requires": { - "debug": "4.1.1", - "engine.io": "3.3.2", - "has-binary2": "1.0.3", - "socket.io-adapter": "1.1.1", - "socket.io-client": "2.2.0", - "socket.io-parser": "3.3.0" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "2.1.1" - } - } - } - }, - "socket.io-adapter": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", - "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=", - "dev": true - }, - "socket.io-client": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.2.0.tgz", - "integrity": "sha512-56ZrkTDbdTLmBIyfFYesgOxsjcLnwAKoN4CiPyTVkMQj3zTUh0QAx3GbvIvLpFEOvQWu92yyWICxB0u7wkVbYA==", - "dev": true, - "requires": { - "backo2": "1.0.2", - "base64-arraybuffer": "0.1.5", - "component-bind": "1.0.0", - "component-emitter": "1.2.1", - "debug": "3.1.0", - "engine.io-client": "3.3.2", - "has-binary2": "1.0.3", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "object-component": "0.0.3", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "socket.io-parser": "3.3.0", - "to-array": "0.1.4" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "socket.io-parser": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.0.tgz", - "integrity": "sha512-hczmV6bDgdaEbVqhAeVMM/jfUfzuEZHsQg6eOmLgJht6G3mPKMxYm75w2+qhAQZ+4X+1+ATZ+QFKeOZD5riHng==", - "dev": true, - "requires": { - "component-emitter": "1.2.1", - "debug": "3.1.0", - "isarray": "2.0.1" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "requires": { - "asn1": "0.2.4", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.2", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.2", - "getpass": "0.1.7", - "jsbn": "0.1.1", - "safer-buffer": "2.1.2", - "tweetnacl": "0.14.5" - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" - }, - "sticky-session": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/sticky-session/-/sticky-session-0.1.0.tgz", - "integrity": "sha1-Mwij4d2+WVXLeeHe39Mu3EPJ74E=", - "dev": true - }, - "stream-browserify": { - "version": "2.0.1", - "resolved": "http://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", - "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.6" - } - }, - "stream-combiner2": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", - "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", - "dev": true, - "requires": { - "duplexer2": "0.1.4", - "readable-stream": "2.3.6" - } - }, - "stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "dev": true, - "requires": { - "builtin-status-codes": "3.0.0", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "to-arraybuffer": "1.0.1", - "xtend": "4.0.1" - } - }, - "stream-splicer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.0.tgz", - "integrity": "sha1-G2O+Q4oTPktnHMGTUZdgAXWRDYM=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.6" - } - }, - "strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" - }, - "string.prototype.trim": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz", - "integrity": "sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo=", - "requires": { - "define-properties": "1.1.3", - "es-abstract": "1.13.0", - "function-bind": "1.1.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "5.1.2" - } - }, - "strip-dirs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", - "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", - "requires": { - "is-natural-number": "4.0.1" - } - }, - "strip-hex-prefix": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", - "integrity": "sha1-DF8VX+8RUTczd96du1iNoFUA428=", - "requires": { - "is-hex-prefixed": "1.0.0" - } - }, - "subarg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", - "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", - "dev": true, - "requires": { - "minimist": "1.2.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, - "superagent": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz", - "integrity": "sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==", - "requires": { - "component-emitter": "1.2.1", - "cookiejar": "2.1.2", - "debug": "3.2.6", - "extend": "3.0.2", - "form-data": "2.3.3", - "formidable": "1.2.1", - "methods": "1.1.2", - "mime": "1.6.0", - "qs": "6.6.0", - "readable-stream": "2.3.6" - } - }, - "supertest": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/supertest/-/supertest-3.3.0.tgz", - "integrity": "sha512-dMQSzYdaZRSANH5LL8kX3UpgK9G1LRh/jnggs/TI0W2Sz7rkMx9Y48uia3K9NgcaWEV28tYkBnXE4tiFC77ygQ==", - "dev": true, - "requires": { - "methods": "1.1.2", - "superagent": "3.8.3" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } - }, - "swarm-js": { - "version": "0.1.39", - "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.39.tgz", - "integrity": "sha512-QLMqL2rzF6n5s50BptyD6Oi0R1aWlJC5Y17SRIVXRj6OR1DRIPM7nepvrxxkjA1zNzFz6mUOMjfeqeDaWB7OOg==", - "requires": { - "bluebird": "3.5.4", - "buffer": "5.2.1", - "decompress": "4.2.0", - "eth-lib": "0.1.27", - "fs-extra": "4.0.3", - "got": "7.1.0", - "mime-types": "2.1.21", - "mkdirp-promise": "5.0.1", - "mock-fs": "4.8.0", - "setimmediate": "1.0.5", - "tar": "4.4.8", - "xhr-request-promise": "0.1.2" - }, - "dependencies": { - "buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", - "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", - "requires": { - "base64-js": "1.3.0", - "ieee754": "1.1.12" - } - } - } - }, - "syntax-error": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", - "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", - "dev": true, - "requires": { - "acorn-node": "1.6.2" - } - }, - "tar": { - "version": "4.4.8", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz", - "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==", - "requires": { - "chownr": "1.1.1", - "fs-minipass": "1.2.5", - "minipass": "2.3.5", - "minizlib": "1.2.1", - "mkdirp": "0.5.1", - "safe-buffer": "5.1.2", - "yallist": "3.0.3" - } - }, - "tar-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", - "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", - "requires": { - "bl": "1.2.2", - "buffer-alloc": "1.2.0", - "end-of-stream": "1.4.1", - "fs-constants": "1.0.0", - "readable-stream": "2.3.6", - "to-buffer": "1.1.1", - "xtend": "4.0.1" - } - }, - "text-encoding": { - "version": "0.6.4", - "resolved": "http://registry.npmjs.org/text-encoding/-/text-encoding-0.6.4.tgz", - "integrity": "sha1-45mpgiV6J22uQou5KEXLcb3CbRk=", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "2.3.6", - "xtend": "4.0.1" - } - }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" - }, - "timers-browserify": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", - "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", - "dev": true, - "requires": { - "process": "0.11.10" - } - }, - "to-array": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", - "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", - "dev": true - }, - "to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", - "dev": true - }, - "to-buffer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", - "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" - }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "requires": { - "psl": "1.1.31", - "punycode": "1.4.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - } - } - }, - "tslib": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==" - }, - "tty-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", - "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", - "dev": true - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "requires": { - "safe-buffer": "5.1.2" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "1.1.2" - } - }, - "type-detect": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz", - "integrity": "sha1-C6XsKohWQORw6k6FBZcZANrFiCI=", - "dev": true - }, - "type-is": { - "version": "1.6.16", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", - "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "2.1.21" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "requires": { - "is-typedarray": "1.0.0" - } - }, - "uglify-js": { - "version": "3.4.9", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", - "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", - "dev": true, - "optional": true, - "requires": { - "commander": "2.17.1", - "source-map": "0.6.1" - }, - "dependencies": { - "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", - "dev": true, - "optional": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true - } - } - }, - "ultron": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" - }, - "umd": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", - "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==", - "dev": true - }, - "unbzip2-stream": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.3.3.tgz", - "integrity": "sha512-fUlAF7U9Ah1Q6EieQ4x4zLNejrRvDWUYmxXUpN3uziFYCHapjWFaCAnreY9bGgxzaMCFAPPpYNng57CypwJVhg==", - "requires": { - "buffer": "5.2.1", - "through": "2.3.8" - }, - "dependencies": { - "buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", - "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", - "requires": { - "base64-js": "1.3.0", - "ieee754": "1.1.12" - } - } - } - }, - "undeclared-identifiers": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.2.tgz", - "integrity": "sha512-13EaeocO4edF/3JKime9rD7oB6QI8llAGhgn5fKOPyfkJbRb6NFv9pYV6dFEmpa4uRjKeBqLZP8GpuzqHlKDMQ==", - "dev": true, - "requires": { - "acorn-node": "1.6.2", - "get-assigned-identifiers": "1.2.0", - "simple-concat": "1.0.0", - "xtend": "4.0.1" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "requires": { - "punycode": "2.1.1" - } - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - } - } - }, - "url-parse": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.4.tgz", - "integrity": "sha512-/92DTTorg4JjktLNLe6GPS2/RvAd/RGr6LuktmWSMLEOa6rjnlrFXNgSbSmkNvCoL2T028A0a1JaJLzRMlFoHg==", - "requires": { - "querystringify": "2.1.1", - "requires-port": "1.0.0" - } - }, - "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", - "requires": { - "prepend-http": "1.0.4" - } - }, - "url-set-query": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", - "integrity": "sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk=" - }, - "url-to-options": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", - "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=" - }, - "utf8": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.1.tgz", - "integrity": "sha1-LgHbAvfY0JRPdxBPFgnrDDBM92g=" - }, - "util": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", - "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", - "dev": true, - "requires": { - "inherits": "2.0.3" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" - }, - "uuid": { - "version": "2.0.3", - "resolved": "http://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", - "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=", - "dev": true - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "requires": { - "assert-plus": "1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "1.3.0" - } - }, - "vm-browserify": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", - "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", - "dev": true, - "requires": { - "indexof": "0.0.1" - } - }, - "web3": { - "version": "1.0.0-beta.51", - "resolved": "https://registry.npmjs.org/web3/-/web3-1.0.0-beta.51.tgz", - "integrity": "sha512-cSjJe8AwR9TKELLkGwk2HNL+37e+Y3x0nKkdBNpBZQNZR0SeoT3Jckkd7pBgrJKcyupItN+tKF48x5yNRvHzrQ==", - "requires": { - "@babel/runtime": "7.4.3", - "@types/node": "10.14.4", - "web3-bzz": "1.0.0-beta.51", - "web3-core": "1.0.0-beta.51", - "web3-core-helpers": "1.0.0-beta.51", - "web3-core-method": "1.0.0-beta.51", - "web3-eth": "1.0.0-beta.51", - "web3-eth-personal": "1.0.0-beta.51", - "web3-net": "1.0.0-beta.51", - "web3-providers": "1.0.0-beta.51", - "web3-shh": "1.0.0-beta.51", - "web3-utils": "1.0.0-beta.51" - }, - "dependencies": { - "@types/node": { - "version": "10.14.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.4.tgz", - "integrity": "sha512-DT25xX/YgyPKiHFOpNuANIQIVvYEwCWXgK2jYYwqgaMrYE6+tq+DtmMwlD3drl6DJbUwtlIDnn0d7tIn/EbXBg==" - } - } - }, - "web3-bzz": { - "version": "1.0.0-beta.51", - "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.0.0-beta.51.tgz", - "integrity": "sha512-9zDifUc3qPOF2WJ2H/81Ki4rTLa4elB0OG8h3IEYHjXOLDHKzswBQC3favhvm/ZQ2WmnkGd04vsU2iQzBmr1OQ==", - "requires": { - "@babel/runtime": "7.4.3", - "@types/node": "10.14.4", - "lodash": "4.17.11", - "swarm-js": "0.1.39" - }, - "dependencies": { - "@types/node": { - "version": "10.14.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.4.tgz", - "integrity": "sha512-DT25xX/YgyPKiHFOpNuANIQIVvYEwCWXgK2jYYwqgaMrYE6+tq+DtmMwlD3drl6DJbUwtlIDnn0d7tIn/EbXBg==" - } - } - }, - "web3-core": { - "version": "1.0.0-beta.51", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.0.0-beta.51.tgz", - "integrity": "sha512-RZRAt0O+LsU1jV6BtuZBQYjE+YcNa9Bu6FzEAMZ92EdgiAkUB2kbTeipVGCMxOST26kWXUtwCwxkkx4g6iy41A==", - "requires": { - "@babel/runtime": "7.4.3", - "@types/bn.js": "4.11.5", - "@types/node": "10.14.4", - "lodash": "4.17.11", - "web3-utils": "1.0.0-beta.51" - }, - "dependencies": { - "@types/node": { - "version": "10.14.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.4.tgz", - "integrity": "sha512-DT25xX/YgyPKiHFOpNuANIQIVvYEwCWXgK2jYYwqgaMrYE6+tq+DtmMwlD3drl6DJbUwtlIDnn0d7tIn/EbXBg==" - } - } - }, - "web3-core-helpers": { - "version": "1.0.0-beta.51", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.0.0-beta.51.tgz", - "integrity": "sha512-kA5JMJyrB5yxX3dQuziBP0Yo9i+MKwtYfA2E7DTbEoUueqjPcEwXMUxmpGROYmufCcfoe/B/FqpC8CzkqmHokw==", - "requires": { - "@babel/runtime": "7.4.3", - "lodash": "4.17.11", - "web3-eth-iban": "1.0.0-beta.51", - "web3-utils": "1.0.0-beta.51" - } - }, - "web3-core-method": { - "version": "1.0.0-beta.51", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.0.0-beta.51.tgz", - "integrity": "sha512-Tl5jGWqx01W6OFPNZI1c4wtCt+HPKWldWrLORKfW0zHyXrYDH6V2BuitA7R7j+54+c/61W3C2E6a+g7sQ8+mWA==", - "requires": { - "@babel/runtime": "7.4.3", - "eventemitter3": "3.1.0", - "lodash": "4.17.11" - } - }, - "web3-core-subscriptions": { - "version": "1.0.0-beta.51", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.0.0-beta.51.tgz", - "integrity": "sha512-bM4KlA37Or/XfrZKLtXlvUSISKWUkXOH/32s0DBnxRkKuey8QKK460H5KF9/HS8LfY7cO11NAepnFe4Tk1rSaQ==", - "requires": { - "@babel/runtime": "7.4.3", - "eventemitter3": "3.1.0", - "lodash": "4.17.11" - } - }, - "web3-eth": { - "version": "1.0.0-beta.51", - "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.0.0-beta.51.tgz", - "integrity": "sha512-w+8YtfKAcEPmOtYf47cjQw3t6dm5YcGvkl4jVZF00WHuvkPMFsXBTbZdH4aVgjPhubl53rdLrJwAP2b7X83+kQ==", - "requires": { - "@babel/runtime": "7.4.3", - "ethereumjs-tx": "1.3.7", - "rxjs": "6.4.0", - "web3-core": "1.0.0-beta.51", - "web3-core-helpers": "1.0.0-beta.51", - "web3-core-method": "1.0.0-beta.51", - "web3-core-subscriptions": "1.0.0-beta.51", - "web3-eth-abi": "1.0.0-beta.51", - "web3-eth-accounts": "1.0.0-beta.51", - "web3-eth-contract": "1.0.0-beta.51", - "web3-eth-ens": "1.0.0-beta.51", - "web3-eth-iban": "1.0.0-beta.51", - "web3-eth-personal": "1.0.0-beta.51", - "web3-net": "1.0.0-beta.51", - "web3-providers": "1.0.0-beta.51", - "web3-utils": "1.0.0-beta.51" - } - }, - "web3-eth-abi": { - "version": "1.0.0-beta.51", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.0.0-beta.51.tgz", - "integrity": "sha512-mTcMpIihZECzZ5oWUh9Jg7x5pVhPv6xPTPWxY9007QKbbBH01GwPogoxBz1X7RfWOwGqZABfxFgXow5NkL0T3A==", - "requires": { - "@babel/runtime": "7.4.3", - "ethers": "4.0.27", - "lodash": "4.17.11", - "web3-utils": "1.0.0-beta.51" - } - }, - "web3-eth-accounts": { - "version": "1.0.0-beta.51", - "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.0.0-beta.51.tgz", - "integrity": "sha512-6HJu4Vrli7p1S52mV83juFjWn0w7rUE4q9cZdYwsGmqHGrOmV7E3zuBEyuA+kelPLpSmcJDOnEowvORmRdpAyw==", - "requires": { - "@babel/runtime": "7.4.3", - "crypto-browserify": "3.12.0", - "eth-lib": "0.2.8", - "lodash": "4.17.11", - "scrypt.js": "0.2.0", - "uuid": "3.3.2", - "web3-core": "1.0.0-beta.51", - "web3-core-helpers": "1.0.0-beta.51", - "web3-core-method": "1.0.0-beta.51", - "web3-providers": "1.0.0-beta.51", - "web3-utils": "1.0.0-beta.51" - }, - "dependencies": { - "eth-lib": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", - "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", - "requires": { - "bn.js": "4.11.8", - "elliptic": "6.4.0", - "xhr-request-promise": "0.1.2" - } - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" - } - } - }, - "web3-eth-contract": { - "version": "1.0.0-beta.51", - "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.0.0-beta.51.tgz", - "integrity": "sha512-iVMay6OXDjDPeiPoeGpa6PQGuwIPxL/8UAVIlWVB1CYG9+FY6kcOUO7vI7dnDVwN1zneAslf9h86px6hgR92OQ==", - "requires": { - "@babel/runtime": "7.4.3", - "@types/bn.js": "4.11.5", - "lodash": "4.17.11", - "web3-core": "1.0.0-beta.51", - "web3-core-helpers": "1.0.0-beta.51", - "web3-core-method": "1.0.0-beta.51", - "web3-core-subscriptions": "1.0.0-beta.51", - "web3-eth-abi": "1.0.0-beta.51", - "web3-eth-accounts": "1.0.0-beta.51", - "web3-providers": "1.0.0-beta.51", - "web3-utils": "1.0.0-beta.51" - } - }, - "web3-eth-ens": { - "version": "1.0.0-beta.51", - "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.0.0-beta.51.tgz", - "integrity": "sha512-JpHlAIUZGLGTTHWKBFciv5KGBi/+n0uqaO/dXoIfB/jI0Gcm5GYEwUt8TU/Y0/WVHvw/ttU1e0laJYPzTTEB8w==", - "requires": { - "@babel/runtime": "7.4.3", - "eth-ens-namehash": "2.0.8", - "lodash": "4.17.11", - "web3-core": "1.0.0-beta.51", - "web3-core-helpers": "1.0.0-beta.51", - "web3-core-method": "1.0.0-beta.51", - "web3-eth-abi": "1.0.0-beta.51", - "web3-eth-contract": "1.0.0-beta.51", - "web3-net": "1.0.0-beta.51", - "web3-providers": "1.0.0-beta.51", - "web3-utils": "1.0.0-beta.51" - } - }, - "web3-eth-iban": { - "version": "1.0.0-beta.51", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.0.0-beta.51.tgz", - "integrity": "sha512-GNLsEWpEkyJqmogsF+mQLlO06tPOudfhVBCPC68SIOw6wQTqAtoqzOot3EJdrEIDGet9eujOoBs6VWAjNbMGRA==", - "requires": { - "@babel/runtime": "7.4.3", - "bn.js": "4.11.8", - "web3-utils": "1.0.0-beta.51" - } - }, - "web3-eth-personal": { - "version": "1.0.0-beta.51", - "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.0.0-beta.51.tgz", - "integrity": "sha512-Mq6uAvhfsKf7FSZVqJOfmb7i5zxQ6HkbTRcAyOOOfSmGnTvxSIjtKZCTAVv3UeBh3pxIXn5FSDlKngaj1MbYXg==", - "requires": { - "@babel/runtime": "7.4.3", - "web3-core": "1.0.0-beta.51", - "web3-core-helpers": "1.0.0-beta.51", - "web3-core-method": "1.0.0-beta.51", - "web3-net": "1.0.0-beta.51", - "web3-providers": "1.0.0-beta.51", - "web3-utils": "1.0.0-beta.51" - } - }, - "web3-net": { - "version": "1.0.0-beta.51", - "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.0.0-beta.51.tgz", - "integrity": "sha512-1xeBIb/Tvf6PVNZ0u+pPrULNkLefTf0uuo8Hyx82EfY+mvMz6jvNDyFsD8spDGJUuxlDabFnoZdiaEv7LNwwSg==", - "requires": { - "@babel/runtime": "7.4.3", - "lodash": "4.17.11", - "web3-core": "1.0.0-beta.51", - "web3-core-helpers": "1.0.0-beta.51", - "web3-core-method": "1.0.0-beta.51", - "web3-providers": "1.0.0-beta.51", - "web3-utils": "1.0.0-beta.51" - } - }, - "web3-providers": { - "version": "1.0.0-beta.51", - "resolved": "https://registry.npmjs.org/web3-providers/-/web3-providers-1.0.0-beta.51.tgz", - "integrity": "sha512-aWUEZIou4+zEZbLaBf1GQwbNoERq66mLEB6ubcPz1WEq1T5jfUPfwO4b4W2bEbEZVsoxS1ZJvSFkj1yAtD0X+g==", - "requires": { - "@babel/runtime": "7.4.3", - "@types/node": "10.14.4", - "eventemitter3": "3.1.0", - "lodash": "4.17.11", - "url-parse": "1.4.4", - "websocket": "git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2", - "xhr2-cookies": "1.1.0" - }, - "dependencies": { - "@types/node": { - "version": "10.14.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.4.tgz", - "integrity": "sha512-DT25xX/YgyPKiHFOpNuANIQIVvYEwCWXgK2jYYwqgaMrYE6+tq+DtmMwlD3drl6DJbUwtlIDnn0d7tIn/EbXBg==" - } - } - }, - "web3-shh": { - "version": "1.0.0-beta.51", - "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.0.0-beta.51.tgz", - "integrity": "sha512-IA4oaNH+PaGWQtTe7BmENszNTeSTsZ15hBNnOrMIyeF0PeghPj7sCenTtU/q8Ie6jR0oXfTXJOQCS/Q/QC3Ksg==", - "requires": { - "@babel/runtime": "7.4.3", - "web3-core": "1.0.0-beta.51", - "web3-core-helpers": "1.0.0-beta.51", - "web3-core-method": "1.0.0-beta.51", - "web3-core-subscriptions": "1.0.0-beta.51", - "web3-net": "1.0.0-beta.51", - "web3-providers": "1.0.0-beta.51", - "web3-utils": "1.0.0-beta.51" - } - }, - "web3-utils": { - "version": "1.0.0-beta.51", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.0.0-beta.51.tgz", - "integrity": "sha512-c9sRSscu0NIjD96X4ToDOgTxGyJevppuB+uHOgWkziaLGqlw/Li1l24nGkvr0Zqpt9SufvfPcWf8EEC92pnwKg==", - "requires": { - "@babel/runtime": "7.4.3", - "@types/bn.js": "4.11.5", - "@types/node": "10.14.4", - "bn.js": "4.11.8", - "eth-lib": "0.2.8", - "ethjs-unit": "0.1.6", - "lodash": "4.17.11", - "number-to-bn": "1.7.0", - "randomhex": "0.1.5", - "utf8": "2.1.1" - }, - "dependencies": { - "@types/node": { - "version": "10.14.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.4.tgz", - "integrity": "sha512-DT25xX/YgyPKiHFOpNuANIQIVvYEwCWXgK2jYYwqgaMrYE6+tq+DtmMwlD3drl6DJbUwtlIDnn0d7tIn/EbXBg==" - }, - "eth-lib": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", - "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", - "requires": { - "bn.js": "4.11.8", - "elliptic": "6.4.0", - "xhr-request-promise": "0.1.2" - } - } - } - }, - "websocket": { - "version": "git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2", - "requires": { - "debug": "2.6.9", - "nan": "2.13.2", - "typedarray-to-buffer": "3.1.5", - "yaeti": "0.0.6" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "2.0.0" - } - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "ws": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz", - "integrity": "sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==", - "dev": true, - "requires": { - "async-limiter": "1.0.0" - } - }, - "xhr": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.5.0.tgz", - "integrity": "sha512-4nlO/14t3BNUZRXIXfXe+3N6w3s1KoxcJUUURctd64BLRe67E4gRwp4PjywtDY72fXpZ1y6Ch0VZQRY/gMPzzQ==", - "requires": { - "global": "4.3.2", - "is-function": "1.0.1", - "parse-headers": "2.0.2", - "xtend": "4.0.1" - } - }, - "xhr-request": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", - "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", - "requires": { - "buffer-to-arraybuffer": "0.0.5", - "object-assign": "4.1.1", - "query-string": "5.1.1", - "simple-get": "2.8.1", - "timed-out": "4.0.1", - "url-set-query": "1.0.0", - "xhr": "2.5.0" - } - }, - "xhr-request-promise": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.2.tgz", - "integrity": "sha1-NDxE0e53JrhkgGloLQ+EDIO0Jh0=", - "requires": { - "xhr-request": "1.1.0" - } - }, - "xhr2-cookies": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz", - "integrity": "sha1-fXdEnQmZGX8VXLc7I99yUF7YnUg=", - "requires": { - "cookiejar": "2.1.2" - } - }, - "xmlhttprequest": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", - "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=" - }, - "xmlhttprequest-ssl": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", - "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", - "dev": true - }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" - }, - "yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=" - }, - "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" - }, - "yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", - "requires": { - "buffer-crc32": "0.2.13", - "fd-slicer": "1.1.0" - } - }, - "yeast": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", - "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", - "dev": true - } - } + "name": "bitcore-wallet-client", + "version": "8.1.1", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/runtime": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.3.tgz", + "integrity": "sha512-9lsJwJLxDh/T3Q3SZszfWOTkk3pHbkmH+3KY+zwIDmsNlxsumuhS2TH3NIpktU4kNvfzy+k3eLT7aTJSPTo0OA==", + "requires": { + "regenerator-runtime": "0.13.2" + } + }, + "@sendgrid/client": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@sendgrid/client/-/client-6.3.0.tgz", + "integrity": "sha512-fTy8vRpA9Whtf8ULQr/0vkSZaQvGQ97rY5N5PrevKRtugJMsJqFMKO0pwzEWeqITSg71aMMTj57QTgw3SjZvnQ==", + "dev": true, + "requires": { + "@sendgrid/helpers": "6.3.0", + "@types/request": "2.48.1", + "request": "2.88.0" + } + }, + "@sendgrid/helpers": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@sendgrid/helpers/-/helpers-6.3.0.tgz", + "integrity": "sha512-uTFcmhCDFg/2Uhz+z/cLwyLHH0UsblG49hKwdR7nKbWsGKWv4js7W32FlPdXqy2C/plTJ20vcPLgKM1m3F/MjQ==", + "dev": true, + "requires": { + "chalk": "2.4.2", + "deepmerge": "2.2.1" + } + }, + "@sendgrid/mail": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/@sendgrid/mail/-/mail-6.3.1.tgz", + "integrity": "sha512-5zIeAV9iU+0hQkrOQ/D4RB2MfpK+lNbOortIfQdCh95aMDF/TRc9WB8FGNhmQrx9YMuJTms5eiBklF0Fi/dbVg==", + "dev": true, + "requires": { + "@sendgrid/client": "6.3.0", + "@sendgrid/helpers": "6.3.0" + } + }, + "@sinonjs/commons": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.4.0.tgz", + "integrity": "sha512-9jHK3YF/8HtJ9wCAbG+j8cD0i0+ATS9A7gXFqS36TblLPNy6rEEc+SB0imo91eCboGaBYGV/MT1/br/J+EE7Tw==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + }, + "dependencies": { + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + } + } + }, + "@sinonjs/formatio": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-3.2.1.tgz", + "integrity": "sha512-tsHvOB24rvyvV2+zKMmPkZ7dXX6LSLKZ7aOtXY6Edklp0uRcgGpOsQTTGTcWViFyx4uhWc6GV8QdnALbIbIdeQ==", + "dev": true, + "requires": { + "@sinonjs/commons": "1.4.0", + "@sinonjs/samsam": "3.3.1" + } + }, + "@sinonjs/samsam": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.3.1.tgz", + "integrity": "sha512-wRSfmyd81swH0hA1bxJZJ57xr22kC07a1N4zuIL47yTS04bDk6AoCkczcqHEjcRPmJ+FruGJ9WBQiJwMtIElFw==", + "dev": true, + "requires": { + "@sinonjs/commons": "1.4.0", + "array-from": "2.1.1", + "lodash": "4.17.11" + } + }, + "@sinonjs/text-encoding": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz", + "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==", + "dev": true + }, + "@types/bn.js": { + "version": "4.11.5", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.5.tgz", + "integrity": "sha512-AEAZcIZga0JgVMHNtl1CprA/hXX7/wPt79AgR4XqaDt7jyj3QWYw6LPoOiznPtugDmlubUnAahMs2PFxGcQrng==", + "requires": { + "@types/node": "11.13.0" + } + }, + "@types/caseless": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.2.tgz", + "integrity": "sha512-6ckxMjBBD8URvjB6J3NcnuAn5Pkl7t3TizAg+xdlzzQGSPSmBcXf8KoIH0ua/i+tio+ZRUHEXp0HEmvaR4kt0w==", + "dev": true + }, + "@types/form-data": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-2.2.1.tgz", + "integrity": "sha512-JAMFhOaHIciYVh8fb5/83nmuO/AHwmto+Hq7a9y8FzLDcC1KCU344XDOMEmahnrTFlHjgh4L0WJFczNIX2GxnQ==", + "dev": true, + "requires": { + "@types/node": "11.13.0" + } + }, + "@types/node": { + "version": "11.13.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-11.13.0.tgz", + "integrity": "sha512-rx29MMkRdVmzunmiA4lzBYJNnXsW/PhG4kMBy2ATsYaDjGGR75dCFEVVROKpNwlVdcUX3xxlghKQOeDPBJobng==" + }, + "@types/request": { + "version": "2.48.1", + "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.1.tgz", + "integrity": "sha512-ZgEZ1TiD+KGA9LiAAPPJL68Id2UWfeSO62ijSXZjFJArVV+2pKcsVHmrcu+1oiE3q6eDGiFiSolRc4JHoerBBg==", + "dev": true, + "requires": { + "@types/caseless": "0.12.2", + "@types/form-data": "2.2.1", + "@types/node": "11.13.0", + "@types/tough-cookie": "2.3.5" + } + }, + "@types/tough-cookie": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-2.3.5.tgz", + "integrity": "sha512-SCcK7mvGi3+ZNz833RRjFIxrn4gI1PPR3NtuIS+6vMkvmsGjosqTJwRt5bAEFLRz+wtJMWv8+uOnZf2hi2QXTg==", + "dev": true + }, + "JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "requires": { + "jsonparse": "1.3.1", + "through": "2.3.8" + } + }, + "abbrev": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", + "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", + "dev": true + }, + "accepts": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "requires": { + "mime-types": "2.1.22", + "negotiator": "0.6.1" + } + }, + "acorn": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", + "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", + "dev": true + }, + "acorn-dynamic-import": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", + "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==", + "dev": true + }, + "acorn-node": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.6.2.tgz", + "integrity": "sha512-rIhNEZuNI8ibQcL7ANm/mGyPukIaZsRNX9psFNQURyJW0nu6k8wjSDld20z6v2mDBWqX13pIEnk9gGZJHIlEXg==", + "dev": true, + "requires": { + "acorn": "6.1.1", + "acorn-dynamic-import": "4.0.0", + "acorn-walk": "6.1.1", + "xtend": "4.0.1" + } + }, + "acorn-walk": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.1.tgz", + "integrity": "sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw==", + "dev": true + }, + "aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0=" + }, + "after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", + "dev": true + }, + "ajv": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", + "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", + "requires": { + "fast-deep-equal": "2.0.1", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.4.1", + "uri-js": "4.2.2" + } + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true, + "optional": true + }, + "ansi": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz", + "integrity": "sha1-DELU+xcWDVqa8eSEus4cZpIsGyE=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "1.9.3" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "1.0.3" + } + }, + "array-filter": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", + "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", + "dev": true + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "array-from": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz", + "integrity": "sha1-z+nYwmYoudxa7MYqn12PHzUsEZU=", + "dev": true + }, + "array-map": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", + "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=", + "dev": true + }, + "array-reduce": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", + "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", + "dev": true + }, + "arraybuffer.slice": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", + "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", + "dev": true + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "requires": { + "safer-buffer": "2.1.2" + } + }, + "asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "requires": { + "bn.js": "4.11.8", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" + } + }, + "assert": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", + "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "dev": true, + "requires": { + "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + } + } + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "assertion-error": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.0.0.tgz", + "integrity": "sha1-x/hUOP3UZrx8oWq5DIFRN5el0js=", + "dev": true + }, + "async": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=" + }, + "async-limiter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + }, + "aws4": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" + }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base-x": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.5.tgz", + "integrity": "sha512-C3picSgzPSLE+jW3tcBzJoGwitOtazb5B+5YmAxZm2ybmTi9LNgAtDO/jjVEBZwHoXmDBZ9m/IELj3elJVRBcA==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", + "dev": true + }, + "base64-js": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", + "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==" + }, + "base64id": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", + "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", + "dev": true + }, + "basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "requires": { + "tweetnacl": "0.14.5" + } + }, + "bcryptjs": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", + "integrity": "sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms=" + }, + "better-assert": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", + "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "dev": true, + "requires": { + "callsite": "1.0.0" + } + }, + "bigi": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.2.tgz", + "integrity": "sha1-nGZalfiLiwj8Bc/XMfVhhZ1yWCU=" + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "bip38": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/bip38/-/bip38-1.4.0.tgz", + "integrity": "sha1-uNsw/xgwFt3eLO+0mzBVho6N8y0=", + "requires": { + "bigi": "1.4.2", + "browserify-aes": "1.2.0", + "buffer-xor": "1.0.3", + "coinstring": "2.3.0", + "create-hash": "1.2.0", + "ecurve": "1.0.6", + "scryptsy": "1.2.1" + } + }, + "bip66": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/bip66/-/bip66-1.1.5.tgz", + "integrity": "sha1-AfqHSHhcpwlV1QESF9GzE5lpyiI=", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "bitcore-lib": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/bitcore-lib/-/bitcore-lib-8.1.1.tgz", + "integrity": "sha512-YyzpyKtwBIeOUu55oqltfk3/Uz8SYi1ayWq3JnaoGSzR4BNpD54sYejv2gZ5TuDe4KwBqvA2C5X1zkPBtlkGhQ==", + "requires": { + "bn.js": "4.11.8", + "bs58": "4.0.1", + "buffer-compare": "1.1.1", + "elliptic": "6.4.0", + "inherits": "2.0.1", + "lodash": "4.17.11" + }, + "dependencies": { + "bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", + "requires": { + "base-x": "3.0.5" + } + }, + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" + } + } + }, + "bitcore-lib-cash": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/bitcore-lib-cash/-/bitcore-lib-cash-8.1.1.tgz", + "integrity": "sha512-1yI8T87SL0/jCGvIqC8LH7bbe6Y22nob4jN6dW3QIrTWq8cr+aC9bFkpq/E5FDokX+nuVAHSmIjOlMu+xBvQRw==", + "requires": { + "bitcore-lib": "8.1.1", + "bn.js": "4.11.8", + "bs58": "4.0.1", + "buffer-compare": "1.1.1", + "elliptic": "6.4.0", + "inherits": "2.0.1", + "lodash": "4.17.11" + }, + "dependencies": { + "bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", + "requires": { + "base-x": "3.0.5" + } + }, + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" + } + } + }, + "bitcore-mnemonic": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/bitcore-mnemonic/-/bitcore-mnemonic-8.1.1.tgz", + "integrity": "sha512-F9R+PKN6m8jDikmNbuD7yp47vdyWcNYGdu9jokiNW46VOm5E+HJM41BiIJdUIVeY9mf+U8T7URq6Knr985NVTg==", + "requires": { + "bitcore-lib": "8.1.1", + "unorm": "1.5.0" + } + }, + "bitcore-wallet-service": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/bitcore-wallet-service/-/bitcore-wallet-service-2.5.1.tgz", + "integrity": "sha512-3qs5Zh21x3sXc5t/Ww/NwEXXyIKNjZ5qkoOuf9vsOqd24WD1jA8GvqVp/lBZyNrzx7x6WK3DHsp6crfQxz6qfg==", + "dev": true, + "requires": { + "@sendgrid/mail": "6.3.1", + "async": "0.9.2", + "bitcore-lib": "0.16.0", + "bitcore-lib-cash": "0.19.0", + "body-parser": "1.18.3", + "compression": "1.7.4", + "email-validator": "1.2.3", + "express": "4.16.4", + "express-rate-limit": "2.14.2", + "inherits": "2.0.3", + "json-stable-stringify": "1.0.1", + "locker": "0.1.0", + "locker-server": "0.1.3", + "lodash": "4.17.11", + "moment": "2.24.0", + "mongodb": "2.2.36", + "morgan": "1.9.1", + "mustache": "2.3.2", + "npmlog": "0.1.1", + "preconditions": "2.2.3", + "read": "1.0.7", + "request": "2.88.0", + "secp256k1": "3.6.2", + "sjcl": "1.0.3", + "socket.io": "2.2.0", + "socket.io-client": "2.2.0", + "sticky-session": "0.1.0", + "uuid": "3.3.2" + }, + "dependencies": { + "bitcore-lib": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/bitcore-lib/-/bitcore-lib-0.16.0.tgz", + "integrity": "sha512-CEtcrPAH2gwgaMN+OPMJc18TBEak1+TtzMyafrqrIbK9PIa3kat195qBJhC0liJSHRiRr6IE2eLcXeIFFs+U8w==", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "bs58": "4.0.1", + "buffer-compare": "1.1.1", + "elliptic": "6.4.0", + "inherits": "2.0.1", + "lodash": "4.17.11" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + } + } + }, + "bitcore-lib-cash": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/bitcore-lib-cash/-/bitcore-lib-cash-0.19.0.tgz", + "integrity": "sha512-JBD30YS5M2OSUPbXggM257FjWXb5A1pHFn88lZQsqOokgddmdwp45K4APVEsj2iaKLR7uLOnGppSbAWj5Hihwg==", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "bs58": "4.0.1", + "buffer-compare": "1.1.1", + "elliptic": "6.4.0", + "inherits": "2.0.1", + "lodash": "4.17.11" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + } + } + }, + "bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", + "dev": true, + "requires": { + "base-x": "3.0.5" + } + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "dev": true + } + } + }, + "bl": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", + "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", + "requires": { + "readable-stream": "2.3.6", + "safe-buffer": "5.1.2" + } + }, + "blob": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", + "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", + "dev": true + }, + "bluebird": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.4.tgz", + "integrity": "sha512-FG+nFEZChJrbQ9tIccIfZJBz3J7mLrAhxakAbnrJWn8d7aKOC+LWifa0G+p4ZqKp4y13T7juYvdhq9NzKdsrjw==" + }, + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" + }, + "body-parser": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", + "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", + "requires": { + "bytes": "3.0.0", + "content-type": "1.0.4", + "debug": "2.6.9", + "depd": "1.1.2", + "http-errors": "1.6.3", + "iconv-lite": "0.4.23", + "on-finished": "2.3.0", + "qs": "6.5.2", + "raw-body": "2.3.3", + "type-is": "1.6.16" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + } + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + }, + "browser-pack": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz", + "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", + "dev": true, + "requires": { + "JSONStream": "1.3.5", + "combine-source-map": "0.8.0", + "defined": "1.0.0", + "safe-buffer": "5.1.2", + "through2": "2.0.5", + "umd": "3.0.3" + } + }, + "browser-resolve": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", + "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", + "dev": true, + "requires": { + "resolve": "1.1.7" + }, + "dependencies": { + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + } + } + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "browserify": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/browserify/-/browserify-13.3.0.tgz", + "integrity": "sha1-tanJAgJD8McORnW+yCI7xifkFc4=", + "dev": true, + "requires": { + "JSONStream": "1.3.5", + "assert": "1.4.1", + "browser-pack": "6.1.0", + "browser-resolve": "1.11.3", + "browserify-zlib": "0.1.4", + "buffer": "4.9.1", + "cached-path-relative": "1.0.2", + "concat-stream": "1.5.2", + "console-browserify": "1.1.0", + "constants-browserify": "1.0.0", + "crypto-browserify": "3.12.0", + "defined": "1.0.0", + "deps-sort": "2.0.0", + "domain-browser": "1.1.7", + "duplexer2": "0.1.4", + "events": "1.1.1", + "glob": "7.1.2", + "has": "1.0.3", + "htmlescape": "1.1.1", + "https-browserify": "0.0.1", + "inherits": "2.0.3", + "insert-module-globals": "7.2.0", + "labeled-stream-splicer": "2.0.1", + "module-deps": "4.1.1", + "os-browserify": "0.1.2", + "parents": "1.0.1", + "path-browserify": "0.0.1", + "process": "0.11.10", + "punycode": "1.4.1", + "querystring-es3": "0.2.1", + "read-only-stream": "2.0.0", + "readable-stream": "2.3.6", + "resolve": "1.10.0", + "shasum": "1.0.2", + "shell-quote": "1.6.1", + "stream-browserify": "2.0.2", + "stream-http": "2.8.3", + "string_decoder": "0.10.31", + "subarg": "1.0.0", + "syntax-error": "1.4.0", + "through2": "2.0.5", + "timers-browserify": "1.4.2", + "tty-browserify": "0.0.1", + "url": "0.11.0", + "util": "0.10.4", + "vm-browserify": "0.0.4", + "xtend": "4.0.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "requires": { + "buffer-xor": "1.0.3", + "cipher-base": "1.0.4", + "create-hash": "1.2.0", + "evp_bytestokey": "1.0.3", + "inherits": "2.0.3", + "safe-buffer": "5.1.2" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "requires": { + "browserify-aes": "1.2.0", + "browserify-des": "1.0.2", + "evp_bytestokey": "1.0.3" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "requires": { + "cipher-base": "1.0.4", + "des.js": "1.0.0", + "inherits": "2.0.3", + "safe-buffer": "5.1.2" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "requires": { + "bn.js": "4.11.8", + "randombytes": "2.1.0" + } + }, + "browserify-sha3": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/browserify-sha3/-/browserify-sha3-0.0.4.tgz", + "integrity": "sha1-CGxHuMgjFsnUcCLCYYWVRXbdjiY=", + "requires": { + "js-sha3": "0.6.1", + "safe-buffer": "5.1.2" + } + }, + "browserify-sign": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "requires": { + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "elliptic": "6.4.0", + "inherits": "2.0.3", + "parse-asn1": "5.1.4" + } + }, + "browserify-zlib": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", + "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", + "dev": true, + "requires": { + "pako": "0.2.9" + } + }, + "bs58": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-2.0.1.tgz", + "integrity": "sha1-VZCNWPGYKrogCPob7Y+RmYopv40=" + }, + "bson": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/bson/-/bson-1.0.9.tgz", + "integrity": "sha512-IQX9/h7WdMBIW/q/++tGd+emQr0XMdeZ6icnT/74Xk9fnabWn+gZgpE+9V+gujL3hhJOoNrnDVY7tWdzc7NUTg==", + "dev": true + }, + "buffer": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "dev": true, + "requires": { + "base64-js": "1.3.0", + "ieee754": "1.1.13", + "isarray": "1.0.0" + } + }, + "buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "requires": { + "buffer-alloc-unsafe": "1.1.0", + "buffer-fill": "1.0.0" + } + }, + "buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" + }, + "buffer-compare": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-compare/-/buffer-compare-1.1.1.tgz", + "integrity": "sha1-W+e+hTr4kZjR9N3AkNHWakiu9ZY=" + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" + }, + "buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "buffer-shims": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", + "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=", + "dev": true + }, + "buffer-to-arraybuffer": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", + "integrity": "sha1-YGSkD6dutDxyOrqe+PbhIW0QURo=" + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + }, + "cached-path-relative": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.2.tgz", + "integrity": "sha512-5r2GqsoEb4qMTTN9J+WzXfjov+hjxT+j3u5K+kIVNIwAd99DLCJE9pBIMP1qVeybV6JiijL385Oz0DcYxfbOIg==", + "dev": true + }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "chai": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-1.10.0.tgz", + "integrity": "sha1-5AMcyHZURhp1lD5aNatG6vOcHrk=", + "dev": true, + "requires": { + "assertion-error": "1.0.0", + "deep-eql": "0.1.3" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.5.0" + } + }, + "chownr": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", + "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==" + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.2" + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true + }, + "coinstring": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/coinstring/-/coinstring-2.3.0.tgz", + "integrity": "sha1-zbYzY6lhUCQEolr7gsLibV/2J6Q=", + "requires": { + "bs58": "2.0.1", + "create-hash": "1.2.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "combine-source-map": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", + "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=", + "dev": true, + "requires": { + "convert-source-map": "1.1.3", + "inline-source-map": "0.6.2", + "lodash.memoize": "3.0.4", + "source-map": "0.5.7" + } + }, + "combined-stream": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", + "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", + "requires": { + "delayed-stream": "1.0.0" + } + }, + "commander": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", + "dev": true + }, + "component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", + "dev": true + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + }, + "component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", + "dev": true + }, + "compressible": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.16.tgz", + "integrity": "sha512-JQfEOdnI7dASwCuSPWIeVYwc/zMsu/+tRhoUvEfXz2gxOA2DNjmG5vhtFdBlhWPPGo+RdT9S3tgc/uH5qgDiiA==", + "dev": true, + "requires": { + "mime-db": "1.38.0" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "requires": { + "accepts": "1.3.5", + "bytes": "3.0.0", + "compressible": "2.0.16", + "debug": "2.6.9", + "on-headers": "1.0.2", + "safe-buffer": "5.1.2", + "vary": "1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz", + "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.0.6", + "typedarray": "0.0.6" + }, + "dependencies": { + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, + "readable-stream": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", + "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "0.10.31", + "util-deprecate": "1.0.2" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "console-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "dev": true, + "requires": { + "date-now": "0.1.4" + } + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "convert-source-map": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", + "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", + "dev": true + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "cookiejar": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz", + "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "requires": { + "object-assign": "4.1.1", + "vary": "1.1.2" + } + }, + "coveralls": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.0.3.tgz", + "integrity": "sha512-viNfeGlda2zJr8Gj1zqXpDMRjw9uM54p7wzZdvLRyOgnAfCe974Dq4veZkjJdxQXbmdppu6flEajFYseHYaUhg==", + "dev": true, + "requires": { + "growl": "1.10.5", + "js-yaml": "3.13.0", + "lcov-parse": "0.0.10", + "log-driver": "1.2.7", + "minimist": "1.2.0", + "request": "2.88.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "create-ecdh": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", + "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "requires": { + "bn.js": "4.11.8", + "elliptic": "6.4.0" + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "requires": { + "cipher-base": "1.0.4", + "inherits": "2.0.3", + "md5.js": "1.3.5", + "ripemd160": "2.0.2", + "sha.js": "2.4.11" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "requires": { + "cipher-base": "1.0.4", + "create-hash": "1.2.0", + "inherits": "2.0.3", + "ripemd160": "2.0.2", + "safe-buffer": "5.1.2", + "sha.js": "2.4.11" + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "requires": { + "browserify-cipher": "1.0.1", + "browserify-sign": "4.0.4", + "create-ecdh": "4.0.3", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "diffie-hellman": "5.0.3", + "inherits": "2.0.3", + "pbkdf2": "3.0.17", + "public-encrypt": "4.0.3", + "randombytes": "2.1.0", + "randomfill": "1.0.4" + } + }, + "crypto-wallet-core": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/crypto-wallet-core/-/crypto-wallet-core-8.1.1.tgz", + "integrity": "sha512-/58THPev4oSAFijPq2bgO7G6RvMNhIrJsJXKdM3iqWLOct243IGHunmFBFuGXkCB36UACt5/NJZcyqD75D+cUg==", + "requires": { + "bcryptjs": "2.4.3", + "bitcore-lib": "8.1.1", + "bitcore-lib-cash": "8.1.1", + "elliptic": "6.4.1", + "ethereumjs-tx": "1.3.7", + "ethereumjs-util": "6.1.0", + "secp256k1": "3.6.2", + "web3": "1.0.0-beta.51" + }, + "dependencies": { + "elliptic": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", + "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0", + "hash.js": "1.1.7", + "hmac-drbg": "1.0.1", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1", + "minimalistic-crypto-utils": "1.0.1" + } + } + } + }, + "dash-ast": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz", + "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==", + "dev": true + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "1.0.0" + } + }, + "date-now": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", + "dev": true + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "2.1.1" + } + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + }, + "decompress": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.0.tgz", + "integrity": "sha1-eu3YVCflqS2s/lVnSnxQXpbQH50=", + "requires": { + "decompress-tar": "4.1.1", + "decompress-tarbz2": "4.1.1", + "decompress-targz": "4.1.1", + "decompress-unzip": "4.0.1", + "graceful-fs": "4.1.15", + "make-dir": "1.3.0", + "pify": "2.3.0", + "strip-dirs": "2.1.0" + } + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "requires": { + "mimic-response": "1.0.1" + } + }, + "decompress-tar": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", + "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", + "requires": { + "file-type": "5.2.0", + "is-stream": "1.1.0", + "tar-stream": "1.6.2" + } + }, + "decompress-tarbz2": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", + "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", + "requires": { + "decompress-tar": "4.1.1", + "file-type": "6.2.0", + "is-stream": "1.1.0", + "seek-bzip": "1.0.5", + "unbzip2-stream": "1.3.3" + }, + "dependencies": { + "file-type": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", + "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==" + } + } + }, + "decompress-targz": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", + "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", + "requires": { + "decompress-tar": "4.1.1", + "file-type": "5.2.0", + "is-stream": "1.1.0" + } + }, + "decompress-unzip": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", + "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", + "requires": { + "file-type": "3.9.0", + "get-stream": "2.3.1", + "pify": "2.3.0", + "yauzl": "2.10.0" + }, + "dependencies": { + "file-type": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=" + } + } + }, + "deep-eql": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz", + "integrity": "sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=", + "dev": true, + "requires": { + "type-detect": "0.1.1" + } + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "deepmerge": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz", + "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==", + "dev": true + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "requires": { + "clone": "1.0.4" + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "requires": { + "object-keys": "1.1.0" + } + }, + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "dev": true + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "deps-sort": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.0.tgz", + "integrity": "sha1-CRckkC6EZYJg65EHSMzNGvbiH7U=", + "dev": true, + "requires": { + "JSONStream": "1.3.5", + "shasum": "1.0.2", + "subarg": "1.0.0", + "through2": "2.0.5" + } + }, + "des.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" + } + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "detective": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/detective/-/detective-4.7.1.tgz", + "integrity": "sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig==", + "dev": true, + "requires": { + "acorn": "5.7.3", + "defined": "1.0.0" + }, + "dependencies": { + "acorn": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", + "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", + "dev": true + } + } + }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "requires": { + "bn.js": "4.11.8", + "miller-rabin": "4.0.1", + "randombytes": "2.1.0" + } + }, + "dom-walk": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", + "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=" + }, + "domain-browser": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", + "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=", + "dev": true + }, + "drbg.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/drbg.js/-/drbg.js-1.0.1.tgz", + "integrity": "sha1-Pja2xCs3BDgjzbwzLVjzHiRFSAs=", + "requires": { + "browserify-aes": "1.2.0", + "create-hash": "1.2.0", + "create-hmac": "1.1.7" + } + }, + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "dev": true, + "requires": { + "readable-stream": "2.3.6" + } + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "requires": { + "jsbn": "0.1.1", + "safer-buffer": "2.1.2" + } + }, + "ecurve": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/ecurve/-/ecurve-1.0.6.tgz", + "integrity": "sha512-/BzEjNfiSuB7jIWKcS/z8FK9jNjmEWvUV2YZ4RLSmcDtP7Lq0m6FvDuSnJpBlDpGRpfRQeTLGLBI8H+kEv0r+w==", + "requires": { + "bigi": "1.4.2", + "safe-buffer": "5.1.2" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "elliptic": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", + "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0", + "hash.js": "1.1.7", + "hmac-drbg": "1.0.1", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "email-validator": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/email-validator/-/email-validator-1.2.3.tgz", + "integrity": "sha512-WZmY6vj6bAWUzr1P2OmRkw4E3FWwdnKxWG/Ssfvr+kp+0leuXzsX2EHNwjg8+KW2DfAiFWiV+jn5n1P7TlE7lw==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "requires": { + "once": "1.4.0" + } + }, + "engine.io": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.3.2.tgz", + "integrity": "sha512-AsaA9KG7cWPXWHp5FvHdDWY3AMWeZ8x+2pUVLcn71qE5AtAzgGbxuclOytygskw8XGmiQafTmnI9Bix3uihu2w==", + "dev": true, + "requires": { + "accepts": "1.3.5", + "base64id": "1.0.0", + "cookie": "0.3.1", + "debug": "3.1.0", + "engine.io-parser": "2.1.3", + "ws": "6.1.4" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "engine.io-client": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.3.2.tgz", + "integrity": "sha512-y0CPINnhMvPuwtqXfsGuWE8BB66+B6wTtCofQDRecMQPYX3MYUZXFNKDhdrSe3EVjgOu4V3rxdeqN/Tr91IgbQ==", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "3.1.0", + "engine.io-parser": "2.1.3", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "6.1.4", + "xmlhttprequest-ssl": "1.5.5", + "yeast": "0.1.2" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "engine.io-parser": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", + "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", + "dev": true, + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "0.0.7", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.5", + "has-binary2": "1.0.3" + } + }, + "errr": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/errr/-/errr-2.6.1.tgz", + "integrity": "sha512-h4SrH28BniB6zOZ/19ZOHdonCwLI7ljC8MyDabH+6dhz66Ws+Xy0MnHwf4dn55FRdZWdVVpbrSpI5YYOscV29A==" + }, + "es-abstract": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", + "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", + "requires": { + "es-to-primitive": "1.2.0", + "function-bind": "1.1.1", + "has": "1.0.3", + "is-callable": "1.1.4", + "is-regex": "1.0.4", + "object-keys": "1.1.0" + } + }, + "es-to-primitive": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", + "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "requires": { + "is-callable": "1.1.4", + "is-date-object": "1.0.1", + "is-symbol": "1.0.2" + } + }, + "es6-promise": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.2.1.tgz", + "integrity": "sha1-7FYjOGgDKQkgcXDDlEjiREndH8Q=", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "escodegen": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", + "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", + "dev": true, + "requires": { + "esprima": "2.7.3", + "estraverse": "1.9.3", + "esutils": "2.0.2", + "optionator": "0.8.2", + "source-map": "0.2.0" + }, + "dependencies": { + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, + "source-map": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", + "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", + "dev": true, + "optional": true, + "requires": { + "amdefine": "1.0.1" + } + } + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "estraverse": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", + "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "eth-ens-namehash": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz", + "integrity": "sha1-IprEbsqG1S4MmR58sq74P/D2i88=", + "requires": { + "idna-uts46-hx": "2.3.1", + "js-sha3": "0.5.7" + }, + "dependencies": { + "js-sha3": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", + "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=" + } + } + }, + "eth-lib": { + "version": "0.1.27", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.27.tgz", + "integrity": "sha512-B8czsfkJYzn2UIEMwjc7Mbj+Cy72V+/OXH/tb44LV8jhrjizQJJ325xMOMyk3+ETa6r6oi0jsUY14+om8mQMWA==", + "requires": { + "bn.js": "4.11.8", + "elliptic": "6.4.0", + "keccakjs": "0.2.3", + "nano-json-stream-parser": "0.1.2", + "servify": "0.1.12", + "ws": "3.3.3", + "xhr-request-promise": "0.1.2" + }, + "dependencies": { + "ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "requires": { + "async-limiter": "1.0.0", + "safe-buffer": "5.1.2", + "ultron": "1.1.1" + } + } + } + }, + "ethereum-common": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.0.18.tgz", + "integrity": "sha1-L9w1dvIykDNYl26znaeDIT/5Uj8=" + }, + "ethereumjs-tx": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-1.3.7.tgz", + "integrity": "sha512-wvLMxzt1RPhAQ9Yi3/HKZTn0FZYpnsmQdbKYfUUpi4j1SEIcbkd9tndVjcPrufY3V7j2IebOpC00Zp2P/Ay2kA==", + "requires": { + "ethereum-common": "0.0.18", + "ethereumjs-util": "5.2.0" + }, + "dependencies": { + "ethereumjs-util": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz", + "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", + "requires": { + "bn.js": "4.11.8", + "create-hash": "1.2.0", + "ethjs-util": "0.1.6", + "keccak": "1.4.0", + "rlp": "2.2.3", + "safe-buffer": "5.1.2", + "secp256k1": "3.6.2" + } + } + } + }, + "ethereumjs-util": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.1.0.tgz", + "integrity": "sha512-URESKMFbDeJxnAxPppnk2fN6Y3BIatn9fwn76Lm8bQlt+s52TpG8dN9M66MLPuRAiAOIqL3dfwqWJf0sd0fL0Q==", + "requires": { + "bn.js": "4.11.8", + "create-hash": "1.2.0", + "ethjs-util": "0.1.6", + "keccak": "1.4.0", + "rlp": "2.2.3", + "safe-buffer": "5.1.2", + "secp256k1": "3.6.2" + } + }, + "ethers": { + "version": "4.0.27", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.27.tgz", + "integrity": "sha512-+DXZLP/tyFnXWxqr2fXLT67KlGUfLuvDkHSOtSC9TUVG9OIj6yrG5JPeXRMYo15xkOYwnjgdMKrXp5V94rtjJA==", + "requires": { + "@types/node": "10.14.4", + "aes-js": "3.0.0", + "bn.js": "4.11.8", + "elliptic": "6.3.3", + "hash.js": "1.1.3", + "js-sha3": "0.5.7", + "scrypt-js": "2.0.4", + "setimmediate": "1.0.4", + "uuid": "2.0.1", + "xmlhttprequest": "1.8.0" + }, + "dependencies": { + "@types/node": { + "version": "10.14.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.4.tgz", + "integrity": "sha512-DT25xX/YgyPKiHFOpNuANIQIVvYEwCWXgK2jYYwqgaMrYE6+tq+DtmMwlD3drl6DJbUwtlIDnn0d7tIn/EbXBg==" + }, + "elliptic": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz", + "integrity": "sha1-VILZZG1UvLif19mU/J4ulWiHbj8=", + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0", + "hash.js": "1.1.3", + "inherits": "2.0.3" + } + }, + "hash.js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", + "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" + } + }, + "js-sha3": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", + "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=" + }, + "setimmediate": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz", + "integrity": "sha1-IOgd5iLUoCWIzgyNqJc8vPHTE48=" + }, + "uuid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", + "integrity": "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w=" + } + } + }, + "ethjs-unit": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", + "integrity": "sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk=", + "requires": { + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" + } + } + }, + "ethjs-util": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", + "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", + "requires": { + "is-hex-prefixed": "1.0.0", + "strip-hex-prefix": "1.0.0" + } + }, + "eventemitter3": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", + "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==" + }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "dev": true + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "requires": { + "md5.js": "1.3.5", + "safe-buffer": "5.1.2" + } + }, + "express": { + "version": "4.16.4", + "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", + "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", + "requires": { + "accepts": "1.3.5", + "array-flatten": "1.1.1", + "body-parser": "1.18.3", + "content-disposition": "0.5.2", + "content-type": "1.0.4", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "1.1.2", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", + "finalhandler": "1.1.1", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "1.1.2", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "path-to-regexp": "0.1.7", + "proxy-addr": "2.0.4", + "qs": "6.5.2", + "range-parser": "1.2.0", + "safe-buffer": "5.1.2", + "send": "0.16.2", + "serve-static": "1.13.2", + "setprototypeof": "1.1.0", + "statuses": "1.4.0", + "type-is": "1.6.16", + "utils-merge": "1.0.1", + "vary": "1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + }, + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + } + } + }, + "express-rate-limit": { + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-2.14.2.tgz", + "integrity": "sha512-aVYzfYU2Bv+v6ry/fBpTrX8MorM0p/TeDnx4CqiLevg9ftG8eW+pyuZ6JEreGdG2t1vXyTGHuSNRKLeYixuqZg==", + "dev": true, + "requires": { + "defaults": "1.0.3" + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "requires": { + "pend": "1.2.0" + } + }, + "file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=" + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + }, + "finalhandler": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", + "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", + "requires": { + "debug": "2.6.9", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "statuses": "1.4.0", + "unpipe": "1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + } + } + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "requires": { + "is-callable": "1.1.4" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.7", + "mime-types": "2.1.22" + } + }, + "formidable": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.1.tgz", + "integrity": "sha512-Fs9VRguL0gqGHkXS5GQiMCr1VhZBxz0JnJs4JmMp/2jL18Fmbzvv7vOFRU+U8TBkHEE/CX1qDXzJplVULgsLeg==" + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "requires": { + "graceful-fs": "4.1.15", + "jsonfile": "4.0.0", + "universalify": "0.1.2" + } + }, + "fs-minipass": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", + "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", + "requires": { + "minipass": "2.3.5" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "get-assigned-identifiers": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", + "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==", + "dev": true + }, + "get-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", + "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", + "requires": { + "object-assign": "4.1.1", + "pinkie-promise": "2.0.1" + } + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "1.0.0" + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "global": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", + "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", + "requires": { + "min-document": "2.19.0", + "process": "0.5.2" + }, + "dependencies": { + "process": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", + "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=" + } + } + }, + "got": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", + "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", + "requires": { + "decompress-response": "3.3.0", + "duplexer3": "0.1.4", + "get-stream": "3.0.0", + "is-plain-obj": "1.1.0", + "is-retry-allowed": "1.1.0", + "is-stream": "1.1.0", + "isurl": "1.0.0", + "lowercase-keys": "1.0.1", + "p-cancelable": "0.3.0", + "p-timeout": "1.2.1", + "safe-buffer": "5.1.2", + "timed-out": "4.0.1", + "url-parse-lax": "1.0.0", + "url-to-options": "1.0.1" + }, + "dependencies": { + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + } + } + }, + "graceful-fs": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" + }, + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" + }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true + }, + "handlebars": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.1.tgz", + "integrity": "sha512-3Zhi6C0euYZL5sM0Zcy7lInLXKQ+YLcF/olbN010mzGQ4XVm50JeyBnMqofHh696GrciGruC7kCcApPDJvVgwA==", + "dev": true, + "requires": { + "neo-async": "2.6.0", + "optimist": "0.6.1", + "source-map": "0.6.1", + "uglify-js": "3.5.3" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "requires": { + "ajv": "6.10.0", + "har-schema": "2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "1.1.1" + } + }, + "has-binary2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", + "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", + "dev": true, + "requires": { + "isarray": "2.0.1" + }, + "dependencies": { + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "dev": true + } + } + }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbol-support-x": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", + "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==" + }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" + }, + "has-to-string-tag-x": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", + "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", + "requires": { + "has-symbol-support-x": "1.4.2" + } + }, + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.2" + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" + } + }, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "requires": { + "hash.js": "1.1.7", + "minimalistic-assert": "1.0.1", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "htmlescape": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", + "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=", + "dev": true + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "requires": { + "depd": "1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": "1.5.0" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "1.0.0", + "jsprim": "1.4.1", + "sshpk": "1.16.1" + } + }, + "https-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz", + "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=", + "dev": true + }, + "iconv-lite": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "requires": { + "safer-buffer": "2.1.2" + } + }, + "idna-uts46-hx": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz", + "integrity": "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==", + "requires": { + "punycode": "2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", + "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=" + } + } + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "inline-source-map": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", + "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", + "dev": true, + "requires": { + "source-map": "0.5.7" + } + }, + "insert-module-globals": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.0.tgz", + "integrity": "sha512-VE6NlW+WGn2/AeOMd496AHFYmE7eLKkUY6Ty31k4og5vmA3Fjuwe9v6ifH6Xx/Hz27QvdoMoviw1/pqWRB09Sw==", + "dev": true, + "requires": { + "JSONStream": "1.3.5", + "acorn-node": "1.6.2", + "combine-source-map": "0.8.0", + "concat-stream": "1.6.2", + "is-buffer": "1.1.6", + "path-is-absolute": "1.0.1", + "process": "0.11.10", + "through2": "2.0.5", + "undeclared-identifiers": "1.1.3", + "xtend": "4.0.1" + }, + "dependencies": { + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "1.1.1", + "inherits": "2.0.3", + "readable-stream": "2.3.6", + "typedarray": "0.0.6" + } + } + } + }, + "ipaddr.js": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", + "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=" + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" + }, + "is-function": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.1.tgz", + "integrity": "sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=" + }, + "is-hex-prefixed": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ=" + }, + "is-natural-number": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", + "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=" + }, + "is-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", + "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=" + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" + }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "requires": { + "has": "1.0.3" + } + }, + "is-retry-allowed": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", + "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=" + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "is-symbol": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "requires": { + "has-symbols": "1.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "istanbul": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", + "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", + "dev": true, + "requires": { + "abbrev": "1.0.9", + "async": "1.5.2", + "escodegen": "1.8.1", + "esprima": "2.7.3", + "glob": "5.0.15", + "handlebars": "4.1.1", + "js-yaml": "3.13.0", + "mkdirp": "0.5.1", + "nopt": "3.0.6", + "once": "1.4.0", + "resolve": "1.1.7", + "supports-color": "3.2.3", + "which": "1.3.1", + "wordwrap": "1.0.0" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true, + "requires": { + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "isurl": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", + "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", + "requires": { + "has-to-string-tag-x": "1.4.1", + "is-object": "1.0.1" + } + }, + "js-sha3": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.6.1.tgz", + "integrity": "sha1-W4n3enR3Z5h39YxKB1JAk0sflcA=" + }, + "js-yaml": { + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.0.tgz", + "integrity": "sha512-pZZoSxcCYco+DIKBTimr67J6Hy+EYGZDY/HCWC+iAEA9h1ByhMXAIVUXMcMFpOCxQ/xjXmPI2MkDL5HRm5eFrQ==", + "dev": true, + "requires": { + "argparse": "1.0.10", + "esprima": "4.0.1" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "requires": { + "graceful-fs": "4.1.15" + } + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "dev": true + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "just-extend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.0.2.tgz", + "integrity": "sha512-FrLwOgm+iXrPV+5zDU6Jqu4gCRXbWEQg2O3SKONsWE4w7AXFRkryS53bpWdaL9cNol+AmR3AEYz6kn+o0fCPnw==", + "dev": true + }, + "keccak": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-1.4.0.tgz", + "integrity": "sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw==", + "requires": { + "bindings": "1.5.0", + "inherits": "2.0.3", + "nan": "2.13.2", + "safe-buffer": "5.1.2" + } + }, + "keccakjs": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/keccakjs/-/keccakjs-0.2.3.tgz", + "integrity": "sha512-BjLkNDcfaZ6l8HBG9tH0tpmDv3sS2mA7FNQxFHpCdzP3Gb2MVruXBSuoM66SnVxKJpAr5dKGdkHD+bDokt8fTg==", + "requires": { + "browserify-sha3": "0.0.4", + "sha3": "1.2.2" + } + }, + "labeled-stream-splicer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.1.tgz", + "integrity": "sha512-MC94mHZRvJ3LfykJlTUipBqenZz1pacOZEMhhQ8dMGcDHs0SBE5GbsavUXV7YtP3icBW17W0Zy1I0lfASmo9Pg==", + "dev": true, + "requires": { + "inherits": "2.0.3", + "isarray": "2.0.4", + "stream-splicer": "2.0.0" + }, + "dependencies": { + "isarray": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.4.tgz", + "integrity": "sha512-GMxXOiUirWg1xTKRipM0Ek07rX+ubx4nNVElTJdNLYmNO/2YrDkgJGw9CljXn+r4EWiDQg/8lsRdHyg2PJuUaA==", + "dev": true + } + } + }, + "lcov-parse": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-0.0.10.tgz", + "integrity": "sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM=", + "dev": true + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "1.1.2", + "type-check": "0.3.2" + } + }, + "locker": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/locker/-/locker-0.1.0.tgz", + "integrity": "sha1-RjI0pNCVEhqUfnZC8EgjrCJhUjE=", + "dev": true + }, + "locker-server": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/locker-server/-/locker-server-0.1.3.tgz", + "integrity": "sha1-wg/xm0KDtBxxDereAiXevFQtmHQ=", + "dev": true, + "requires": { + "mocha": "5.2.0" + } + }, + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" + }, + "lodash.memoize": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", + "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=", + "dev": true + }, + "log-driver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", + "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", + "dev": true + }, + "lolex": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lolex/-/lolex-3.1.0.tgz", + "integrity": "sha512-zFo5MgCJ0rZ7gQg69S4pqBsLURbFw11X68C18OcJjJQbqaXm2NoTrGl1IMM3TIz0/BnN1tIs2tzmmqvCsOMMjw==", + "dev": true + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "requires": { + "pify": "3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } + } + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "requires": { + "hash-base": "3.0.4", + "inherits": "2.0.3", + "safe-buffer": "5.1.2" + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.38.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz", + "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==" + }, + "mime-types": { + "version": "2.1.22", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz", + "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==", + "requires": { + "mime-db": "1.38.0" + } + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" + }, + "min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", + "requires": { + "dom-walk": "0.1.1" + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.11" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "minipass": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", + "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", + "requires": { + "safe-buffer": "5.1.2", + "yallist": "3.0.3" + } + }, + "minizlib": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz", + "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", + "requires": { + "minipass": "2.3.5" + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + } + }, + "mkdirp-promise": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz", + "integrity": "sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE=", + "requires": { + "mkdirp": "0.5.1" + } + }, + "mocha": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", + "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", + "dev": true, + "requires": { + "browser-stdout": "1.3.1", + "commander": "2.15.1", + "debug": "3.1.0", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "glob": "7.1.2", + "growl": "1.10.5", + "he": "1.1.1", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "supports-color": "5.4.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "mock-fs": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.8.0.tgz", + "integrity": "sha512-Gwj4KnJOW15YeTJKO5frFd/WDO5Mc0zxXqL9oHx3+e9rBqW8EVARqQHSaIXznUdljrD6pvbNGW2ZGXKPEfYJfw==" + }, + "module-deps": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-4.1.1.tgz", + "integrity": "sha1-IyFYM/HaE/1gbMuAh7RIUty4If0=", + "dev": true, + "requires": { + "JSONStream": "1.3.5", + "browser-resolve": "1.11.3", + "cached-path-relative": "1.0.2", + "concat-stream": "1.5.2", + "defined": "1.0.0", + "detective": "4.7.1", + "duplexer2": "0.1.4", + "inherits": "2.0.3", + "parents": "1.0.1", + "readable-stream": "2.3.6", + "resolve": "1.10.0", + "stream-combiner2": "1.1.1", + "subarg": "1.0.0", + "through2": "2.0.5", + "xtend": "4.0.1" + } + }, + "moment": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", + "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==", + "dev": true + }, + "mongodb": { + "version": "2.2.36", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-2.2.36.tgz", + "integrity": "sha512-P2SBLQ8Z0PVx71ngoXwo12+FiSfbNfGOClAao03/bant5DgLNkOPAck5IaJcEk4gKlQhDEURzfR3xuBG1/B+IA==", + "dev": true, + "requires": { + "es6-promise": "3.2.1", + "mongodb-core": "2.1.20", + "readable-stream": "2.2.7" + }, + "dependencies": { + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, + "readable-stream": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.7.tgz", + "integrity": "sha1-BwV6y+JGeyIELTb5jFrVBwVOlbE=", + "dev": true, + "requires": { + "buffer-shims": "1.0.0", + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + } + } + }, + "mongodb-core": { + "version": "2.1.20", + "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-2.1.20.tgz", + "integrity": "sha512-IN57CX5/Q1bhDq6ShAR6gIv4koFsZP7L8WOK1S0lR0pVDQaScffSMV5jxubLsmZ7J+UdqmykKw4r9hG3XQEGgQ==", + "dev": true, + "requires": { + "bson": "1.0.9", + "require_optional": "1.0.1" + } + }, + "morgan": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz", + "integrity": "sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==", + "dev": true, + "requires": { + "basic-auth": "2.0.1", + "debug": "2.6.9", + "depd": "1.1.2", + "on-finished": "2.3.0", + "on-headers": "1.0.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + }, + "mustache": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/mustache/-/mustache-2.3.2.tgz", + "integrity": "sha512-KpMNwdQsYz3O/SBS1qJ/o3sqUJ5wSb8gb0pul8CO0S56b9Y2ALm8zCfsjPXsqGFfoNBkDwZuZIAjhsZI03gYVQ==", + "dev": true + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "nan": { + "version": "2.13.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz", + "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==" + }, + "nano-json-stream-parser": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz", + "integrity": "sha1-DMj20OK2IrR5xA1JnEbWS3Vcb18=" + }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" + }, + "neo-async": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz", + "integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==", + "dev": true + }, + "nise": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/nise/-/nise-1.4.10.tgz", + "integrity": "sha512-sa0RRbj53dovjc7wombHmVli9ZihXbXCQ2uH3TNm03DyvOSIQbxg+pbqDKrk2oxMK1rtLGVlKxcB9rrc6X5YjA==", + "dev": true, + "requires": { + "@sinonjs/formatio": "3.2.1", + "@sinonjs/text-encoding": "0.7.1", + "just-extend": "4.0.2", + "lolex": "2.7.5", + "path-to-regexp": "1.7.0" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "lolex": { + "version": "2.7.5", + "resolved": "https://registry.npmjs.org/lolex/-/lolex-2.7.5.tgz", + "integrity": "sha512-l9x0+1offnKKIzYVjyXU2SiwhXDLekRzKyhnbyldPHvC7BvLPVpdNUNR2KeMAiCN2D/kLNttZgQD5WjSxuBx3Q==", + "dev": true + }, + "path-to-regexp": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", + "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=", + "dev": true, + "requires": { + "isarray": "0.0.1" + } + } + } + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "requires": { + "abbrev": "1.0.9" + } + }, + "npmlog": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-0.1.1.tgz", + "integrity": "sha1-i5ueRAXX7EjDHCNGllqtx6uuyqU=", + "dev": true, + "requires": { + "ansi": "0.3.1" + } + }, + "number-to-bn": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", + "integrity": "sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA=", + "requires": { + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" + } + } + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-component": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", + "dev": true + }, + "object-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz", + "integrity": "sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1.0.2" + } + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "0.0.8", + "wordwrap": "0.0.3" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + } + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "0.1.3", + "fast-levenshtein": "2.0.6", + "levn": "0.3.0", + "prelude-ls": "1.1.2", + "type-check": "0.3.2", + "wordwrap": "1.0.0" + } + }, + "os-browserify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.1.2.tgz", + "integrity": "sha1-ScoCk+CxlZCl9d4Qx/JlphfY/lQ=", + "dev": true + }, + "p-cancelable": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", + "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==" + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + }, + "p-timeout": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", + "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=", + "requires": { + "p-finally": "1.0.0" + } + }, + "pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=", + "dev": true + }, + "parents": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", + "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", + "dev": true, + "requires": { + "path-platform": "0.11.15" + } + }, + "parse-asn1": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.4.tgz", + "integrity": "sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==", + "requires": { + "asn1.js": "4.10.1", + "browserify-aes": "1.2.0", + "create-hash": "1.2.0", + "evp_bytestokey": "1.0.3", + "pbkdf2": "3.0.17", + "safe-buffer": "5.1.2" + } + }, + "parse-headers": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.2.tgz", + "integrity": "sha512-/LypJhzFmyBIDYP9aDVgeyEb5sQfbfY5mnDq4hVhlQ69js87wXfmEI5V3xI6vvXasqebp0oCytYFLxsBVfCzSg==", + "requires": { + "for-each": "0.3.3", + "string.prototype.trim": "1.1.2" + } + }, + "parseqs": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", + "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "dev": true, + "requires": { + "better-assert": "1.0.2" + } + }, + "parseuri": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", + "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "dev": true, + "requires": { + "better-assert": "1.0.2" + } + }, + "parseurl": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" + }, + "path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-platform": { + "version": "0.11.15", + "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", + "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "pbkdf2": { + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", + "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", + "requires": { + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "ripemd160": "2.0.2", + "safe-buffer": "5.1.2", + "sha.js": "2.4.11" + } + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "requires": { + "pinkie": "2.0.4" + } + }, + "preconditions": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/preconditions/-/preconditions-2.2.3.tgz", + "integrity": "sha512-Yjr1+XK/4/L0zJyhNdsD2VNJIvd6ErFVJqXQ6mxRg+yvjfiNgLJ2uTeRXlmGuZ8AlcMFxkkKZZlckydHZe6AwA==", + "requires": { + "errr": "2.6.1", + "lodash": "4.17.11" + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" + }, + "proxy-addr": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", + "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", + "requires": { + "forwarded": "0.1.2", + "ipaddr.js": "1.8.0" + } + }, + "psl": { + "version": "1.1.31", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", + "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==" + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "requires": { + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.2.0", + "parse-asn1": "5.1.4", + "randombytes": "2.1.0", + "safe-buffer": "5.1.2" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + }, + "query-string": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "requires": { + "decode-uri-component": "0.2.0", + "object-assign": "4.1.1", + "strict-uri-encode": "1.1.0" + } + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, + "querystringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", + "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==" + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "requires": { + "randombytes": "2.1.0", + "safe-buffer": "5.1.2" + } + }, + "randomhex": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/randomhex/-/randomhex-0.1.5.tgz", + "integrity": "sha1-us7vmCMpCRQA8qKRLGzQLxCU9YU=" + }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" + }, + "raw-body": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", + "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.3", + "iconv-lite": "0.4.23", + "unpipe": "1.0.0" + } + }, + "read": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", + "dev": true, + "requires": { + "mute-stream": "0.0.8" + } + }, + "read-only-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", + "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", + "dev": true, + "requires": { + "readable-stream": "2.3.6" + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "regenerator-runtime": { + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz", + "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==" + }, + "request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "requires": { + "aws-sign2": "0.7.0", + "aws4": "1.8.0", + "caseless": "0.12.0", + "combined-stream": "1.0.7", + "extend": "3.0.2", + "forever-agent": "0.6.1", + "form-data": "2.3.3", + "har-validator": "5.1.3", + "http-signature": "1.2.0", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.22", + "oauth-sign": "0.9.0", + "performance-now": "2.1.0", + "qs": "6.5.2", + "safe-buffer": "5.1.2", + "tough-cookie": "2.4.3", + "tunnel-agent": "0.6.0", + "uuid": "3.3.2" + }, + "dependencies": { + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + } + } + }, + "require_optional": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", + "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", + "dev": true, + "requires": { + "resolve-from": "2.0.0", + "semver": "5.7.0" + } + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" + }, + "resolve": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", + "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", + "dev": true, + "requires": { + "path-parse": "1.0.6" + } + }, + "resolve-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", + "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=", + "dev": true + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "requires": { + "hash-base": "3.0.4", + "inherits": "2.0.3" + } + }, + "rlp": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.3.tgz", + "integrity": "sha512-l6YVrI7+d2vpW6D6rS05x2Xrmq8oW7v3pieZOJKBEdjuTF4Kz/iwk55Zyh1Zaz+KOB2kC8+2jZlp2u9L4tTzCQ==", + "requires": { + "bn.js": "4.11.8", + "safe-buffer": "5.1.2" + } + }, + "rxjs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz", + "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==", + "requires": { + "tslib": "1.9.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "scrypt": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/scrypt/-/scrypt-6.0.3.tgz", + "integrity": "sha1-BOAUpWgrU/pQwtXM4WfXGcBthw0=", + "requires": { + "nan": "2.13.2" + } + }, + "scrypt-js": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz", + "integrity": "sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==" + }, + "scrypt.js": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/scrypt.js/-/scrypt.js-0.2.0.tgz", + "integrity": "sha1-r40UZbcemZARC+38WTuUeeA6ito=", + "requires": { + "scrypt": "6.0.3", + "scryptsy": "1.2.1" + } + }, + "scryptsy": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/scryptsy/-/scryptsy-1.2.1.tgz", + "integrity": "sha1-oyJfpLJST4AnAHYeKFW987LZIWM=", + "requires": { + "pbkdf2": "3.0.17" + } + }, + "secp256k1": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-3.6.2.tgz", + "integrity": "sha512-90nYt7yb0LmI4A2jJs1grglkTAXrBwxYAjP9bpeKjvJKOjG2fOeH/YI/lchDMIvjrOasd5QXwvV2jwN168xNng==", + "requires": { + "bindings": "1.5.0", + "bip66": "1.1.5", + "bn.js": "4.11.8", + "create-hash": "1.2.0", + "drbg.js": "1.0.1", + "elliptic": "6.4.0", + "nan": "2.13.2", + "safe-buffer": "5.1.2" + } + }, + "seek-bzip": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz", + "integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=", + "requires": { + "commander": "2.8.1" + }, + "dependencies": { + "commander": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", + "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", + "requires": { + "graceful-readlink": "1.0.1" + } + } + } + }, + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "dev": true + }, + "send": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "requires": { + "debug": "2.6.9", + "depd": "1.1.2", + "destroy": "1.0.4", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", + "fresh": "0.5.2", + "http-errors": "1.6.3", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "2.3.0", + "range-parser": "1.2.0", + "statuses": "1.4.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + } + } + }, + "serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "requires": { + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "parseurl": "1.3.2", + "send": "0.16.2" + } + }, + "servify": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz", + "integrity": "sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==", + "requires": { + "body-parser": "1.18.3", + "cors": "2.8.5", + "express": "4.16.4", + "request": "2.88.0", + "xhr": "2.5.0" + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.2" + } + }, + "sha3": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/sha3/-/sha3-1.2.2.tgz", + "integrity": "sha1-pmxQmN5MJbyIM27ItIF9AFvKe6k=", + "requires": { + "nan": "2.10.0" + }, + "dependencies": { + "nan": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", + "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==" + } + } + }, + "shasum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", + "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=", + "dev": true, + "requires": { + "json-stable-stringify": "0.0.1", + "sha.js": "2.4.11" + }, + "dependencies": { + "json-stable-stringify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz", + "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=", + "dev": true, + "requires": { + "jsonify": "0.0.0" + } + } + } + }, + "shell-quote": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", + "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", + "dev": true, + "requires": { + "array-filter": "0.0.1", + "array-map": "0.0.0", + "array-reduce": "0.0.0", + "jsonify": "0.0.0" + } + }, + "simple-concat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", + "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=" + }, + "simple-get": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz", + "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==", + "requires": { + "decompress-response": "3.3.0", + "once": "1.4.0", + "simple-concat": "1.0.0" + } + }, + "sinon": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-7.3.1.tgz", + "integrity": "sha512-eQKMaeWovtOtYe2xThEvaHmmxf870Di+bim10c3ZPrL5bZhLGtu8cz+rOBTFz0CwBV4Q/7dYwZiqZbGVLZ+vjQ==", + "dev": true, + "requires": { + "@sinonjs/commons": "1.4.0", + "@sinonjs/formatio": "3.2.1", + "@sinonjs/samsam": "3.3.1", + "diff": "3.5.0", + "lolex": "3.1.0", + "nise": "1.4.10", + "supports-color": "5.5.0" + } + }, + "sjcl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sjcl/-/sjcl-1.0.3.tgz", + "integrity": "sha1-TtSGSY7Wt0K11KIZAiaBFvBUpwk=" + }, + "socket.io": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.2.0.tgz", + "integrity": "sha512-wxXrIuZ8AILcn+f1B4ez4hJTPG24iNgxBBDaJfT6MsyOhVYiTXWexGoPkd87ktJG8kQEcL/NBvRi64+9k4Kc0w==", + "dev": true, + "requires": { + "debug": "4.1.1", + "engine.io": "3.3.2", + "has-binary2": "1.0.3", + "socket.io-adapter": "1.1.1", + "socket.io-client": "2.2.0", + "socket.io-parser": "3.3.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "2.1.1" + } + } + } + }, + "socket.io-adapter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", + "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=", + "dev": true + }, + "socket.io-client": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.2.0.tgz", + "integrity": "sha512-56ZrkTDbdTLmBIyfFYesgOxsjcLnwAKoN4CiPyTVkMQj3zTUh0QAx3GbvIvLpFEOvQWu92yyWICxB0u7wkVbYA==", + "dev": true, + "requires": { + "backo2": "1.0.2", + "base64-arraybuffer": "0.1.5", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "3.1.0", + "engine.io-client": "3.3.2", + "has-binary2": "1.0.3", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "socket.io-parser": "3.3.0", + "to-array": "0.1.4" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "socket.io-parser": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.0.tgz", + "integrity": "sha512-hczmV6bDgdaEbVqhAeVMM/jfUfzuEZHsQg6eOmLgJht6G3mPKMxYm75w2+qhAQZ+4X+1+ATZ+QFKeOZD5riHng==", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "debug": "3.1.0", + "isarray": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "requires": { + "asn1": "0.2.4", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.2", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.2", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "safer-buffer": "2.1.2", + "tweetnacl": "0.14.5" + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "sticky-session": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/sticky-session/-/sticky-session-0.1.0.tgz", + "integrity": "sha1-Mwij4d2+WVXLeeHe39Mu3EPJ74E=", + "dev": true + }, + "stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.6" + } + }, + "stream-combiner2": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", + "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", + "dev": true, + "requires": { + "duplexer2": "0.1.4", + "readable-stream": "2.3.6" + } + }, + "stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "dev": true, + "requires": { + "builtin-status-codes": "3.0.0", + "inherits": "2.0.3", + "readable-stream": "2.3.6", + "to-arraybuffer": "1.0.1", + "xtend": "4.0.1" + } + }, + "stream-splicer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.0.tgz", + "integrity": "sha1-G2O+Q4oTPktnHMGTUZdgAXWRDYM=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.6" + } + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" + }, + "string.prototype.trim": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz", + "integrity": "sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo=", + "requires": { + "define-properties": "1.1.3", + "es-abstract": "1.13.0", + "function-bind": "1.1.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "strip-dirs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", + "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", + "requires": { + "is-natural-number": "4.0.1" + } + }, + "strip-hex-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", + "integrity": "sha1-DF8VX+8RUTczd96du1iNoFUA428=", + "requires": { + "is-hex-prefixed": "1.0.0" + } + }, + "subarg": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", + "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", + "dev": true, + "requires": { + "minimist": "1.2.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "superagent": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz", + "integrity": "sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==", + "requires": { + "component-emitter": "1.2.1", + "cookiejar": "2.1.2", + "debug": "3.2.6", + "extend": "3.0.2", + "form-data": "2.3.3", + "formidable": "1.2.1", + "methods": "1.1.2", + "mime": "1.6.0", + "qs": "6.7.0", + "readable-stream": "2.3.6" + } + }, + "supertest": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-3.4.2.tgz", + "integrity": "sha512-WZWbwceHUo2P36RoEIdXvmqfs47idNNZjCuJOqDz6rvtkk8ym56aU5oglORCpPeXGxT7l9rkJ41+O1lffQXYSA==", + "dev": true, + "requires": { + "methods": "1.1.2", + "superagent": "3.8.3" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + }, + "swarm-js": { + "version": "0.1.39", + "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.39.tgz", + "integrity": "sha512-QLMqL2rzF6n5s50BptyD6Oi0R1aWlJC5Y17SRIVXRj6OR1DRIPM7nepvrxxkjA1zNzFz6mUOMjfeqeDaWB7OOg==", + "requires": { + "bluebird": "3.5.4", + "buffer": "5.2.1", + "decompress": "4.2.0", + "eth-lib": "0.1.27", + "fs-extra": "4.0.3", + "got": "7.1.0", + "mime-types": "2.1.22", + "mkdirp-promise": "5.0.1", + "mock-fs": "4.8.0", + "setimmediate": "1.0.5", + "tar": "4.4.8", + "xhr-request-promise": "0.1.2" + }, + "dependencies": { + "buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", + "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", + "requires": { + "base64-js": "1.3.0", + "ieee754": "1.1.13" + } + } + } + }, + "syntax-error": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", + "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", + "dev": true, + "requires": { + "acorn-node": "1.6.2" + } + }, + "tar": { + "version": "4.4.8", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz", + "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==", + "requires": { + "chownr": "1.1.1", + "fs-minipass": "1.2.5", + "minipass": "2.3.5", + "minizlib": "1.2.1", + "mkdirp": "0.5.1", + "safe-buffer": "5.1.2", + "yallist": "3.0.3" + } + }, + "tar-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", + "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "requires": { + "bl": "1.2.2", + "buffer-alloc": "1.2.0", + "end-of-stream": "1.4.1", + "fs-constants": "1.0.0", + "readable-stream": "2.3.6", + "to-buffer": "1.1.1", + "xtend": "4.0.1" + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "2.3.6", + "xtend": "4.0.1" + } + }, + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" + }, + "timers-browserify": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", + "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", + "dev": true, + "requires": { + "process": "0.11.10" + } + }, + "to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", + "dev": true + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "to-buffer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", + "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" + }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "requires": { + "psl": "1.1.31", + "punycode": "1.4.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + } + } + }, + "tslib": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==" + }, + "tty-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", + "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "1.1.2" + } + }, + "type-detect": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz", + "integrity": "sha1-C6XsKohWQORw6k6FBZcZANrFiCI=", + "dev": true + }, + "type-is": { + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", + "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "2.1.22" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "requires": { + "is-typedarray": "1.0.0" + } + }, + "uglify-js": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.5.3.tgz", + "integrity": "sha512-rIQPT2UMDnk4jRX+w4WO84/pebU2jiLsjgIyrCktYgSvx28enOE3iYQMr+BD1rHiitWnDmpu0cY/LfIEpKcjcw==", + "dev": true, + "optional": true, + "requires": { + "commander": "2.19.0", + "source-map": "0.6.1" + }, + "dependencies": { + "commander": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", + "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", + "dev": true, + "optional": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + } + } + }, + "ultron": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" + }, + "umd": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", + "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==", + "dev": true + }, + "unbzip2-stream": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.3.3.tgz", + "integrity": "sha512-fUlAF7U9Ah1Q6EieQ4x4zLNejrRvDWUYmxXUpN3uziFYCHapjWFaCAnreY9bGgxzaMCFAPPpYNng57CypwJVhg==", + "requires": { + "buffer": "5.2.1", + "through": "2.3.8" + }, + "dependencies": { + "buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", + "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", + "requires": { + "base64-js": "1.3.0", + "ieee754": "1.1.13" + } + } + } + }, + "undeclared-identifiers": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz", + "integrity": "sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==", + "dev": true, + "requires": { + "acorn-node": "1.6.2", + "dash-ast": "1.0.0", + "get-assigned-identifiers": "1.2.0", + "simple-concat": "1.0.0", + "xtend": "4.0.1" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + }, + "unorm": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/unorm/-/unorm-1.5.0.tgz", + "integrity": "sha512-sMfSWoiRaXXeDZSXC+YRZ23H4xchQpwxjpw1tmfR+kgbBCaOgln4NI0LXejJIhnBuKINrB3WRn+ZI8IWssirVw==" + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "requires": { + "punycode": "2.1.1" + } + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } + } + }, + "url-parse": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.4.tgz", + "integrity": "sha512-/92DTTorg4JjktLNLe6GPS2/RvAd/RGr6LuktmWSMLEOa6rjnlrFXNgSbSmkNvCoL2T028A0a1JaJLzRMlFoHg==", + "requires": { + "querystringify": "2.1.1", + "requires-port": "1.0.0" + } + }, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "requires": { + "prepend-http": "1.0.4" + } + }, + "url-set-query": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", + "integrity": "sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk=" + }, + "url-to-options": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", + "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=" + }, + "utf8": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.1.tgz", + "integrity": "sha1-LgHbAvfY0JRPdxBPFgnrDDBM92g=" + }, + "util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "dev": true, + "requires": { + "inherits": "2.0.3" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "uuid": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", + "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=", + "dev": true + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "1.3.0" + } + }, + "vm-browserify": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", + "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", + "dev": true, + "requires": { + "indexof": "0.0.1" + } + }, + "web3": { + "version": "1.0.0-beta.51", + "resolved": "https://registry.npmjs.org/web3/-/web3-1.0.0-beta.51.tgz", + "integrity": "sha512-cSjJe8AwR9TKELLkGwk2HNL+37e+Y3x0nKkdBNpBZQNZR0SeoT3Jckkd7pBgrJKcyupItN+tKF48x5yNRvHzrQ==", + "requires": { + "@babel/runtime": "7.4.3", + "@types/node": "10.14.4", + "web3-bzz": "1.0.0-beta.51", + "web3-core": "1.0.0-beta.51", + "web3-core-helpers": "1.0.0-beta.51", + "web3-core-method": "1.0.0-beta.51", + "web3-eth": "1.0.0-beta.51", + "web3-eth-personal": "1.0.0-beta.51", + "web3-net": "1.0.0-beta.51", + "web3-providers": "1.0.0-beta.51", + "web3-shh": "1.0.0-beta.51", + "web3-utils": "1.0.0-beta.51" + }, + "dependencies": { + "@types/node": { + "version": "10.14.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.4.tgz", + "integrity": "sha512-DT25xX/YgyPKiHFOpNuANIQIVvYEwCWXgK2jYYwqgaMrYE6+tq+DtmMwlD3drl6DJbUwtlIDnn0d7tIn/EbXBg==" + } + } + }, + "web3-bzz": { + "version": "1.0.0-beta.51", + "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.0.0-beta.51.tgz", + "integrity": "sha512-9zDifUc3qPOF2WJ2H/81Ki4rTLa4elB0OG8h3IEYHjXOLDHKzswBQC3favhvm/ZQ2WmnkGd04vsU2iQzBmr1OQ==", + "requires": { + "@babel/runtime": "7.4.3", + "@types/node": "10.14.4", + "lodash": "4.17.11", + "swarm-js": "0.1.39" + }, + "dependencies": { + "@types/node": { + "version": "10.14.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.4.tgz", + "integrity": "sha512-DT25xX/YgyPKiHFOpNuANIQIVvYEwCWXgK2jYYwqgaMrYE6+tq+DtmMwlD3drl6DJbUwtlIDnn0d7tIn/EbXBg==" + } + } + }, + "web3-core": { + "version": "1.0.0-beta.51", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.0.0-beta.51.tgz", + "integrity": "sha512-RZRAt0O+LsU1jV6BtuZBQYjE+YcNa9Bu6FzEAMZ92EdgiAkUB2kbTeipVGCMxOST26kWXUtwCwxkkx4g6iy41A==", + "requires": { + "@babel/runtime": "7.4.3", + "@types/bn.js": "4.11.5", + "@types/node": "10.14.4", + "lodash": "4.17.11", + "web3-utils": "1.0.0-beta.51" + }, + "dependencies": { + "@types/node": { + "version": "10.14.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.4.tgz", + "integrity": "sha512-DT25xX/YgyPKiHFOpNuANIQIVvYEwCWXgK2jYYwqgaMrYE6+tq+DtmMwlD3drl6DJbUwtlIDnn0d7tIn/EbXBg==" + } + } + }, + "web3-core-helpers": { + "version": "1.0.0-beta.51", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.0.0-beta.51.tgz", + "integrity": "sha512-kA5JMJyrB5yxX3dQuziBP0Yo9i+MKwtYfA2E7DTbEoUueqjPcEwXMUxmpGROYmufCcfoe/B/FqpC8CzkqmHokw==", + "requires": { + "@babel/runtime": "7.4.3", + "lodash": "4.17.11", + "web3-eth-iban": "1.0.0-beta.51", + "web3-utils": "1.0.0-beta.51" + } + }, + "web3-core-method": { + "version": "1.0.0-beta.51", + "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.0.0-beta.51.tgz", + "integrity": "sha512-Tl5jGWqx01W6OFPNZI1c4wtCt+HPKWldWrLORKfW0zHyXrYDH6V2BuitA7R7j+54+c/61W3C2E6a+g7sQ8+mWA==", + "requires": { + "@babel/runtime": "7.4.3", + "eventemitter3": "3.1.0", + "lodash": "4.17.11" + } + }, + "web3-core-subscriptions": { + "version": "1.0.0-beta.51", + "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.0.0-beta.51.tgz", + "integrity": "sha512-bM4KlA37Or/XfrZKLtXlvUSISKWUkXOH/32s0DBnxRkKuey8QKK460H5KF9/HS8LfY7cO11NAepnFe4Tk1rSaQ==", + "requires": { + "@babel/runtime": "7.4.3", + "eventemitter3": "3.1.0", + "lodash": "4.17.11" + } + }, + "web3-eth": { + "version": "1.0.0-beta.51", + "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.0.0-beta.51.tgz", + "integrity": "sha512-w+8YtfKAcEPmOtYf47cjQw3t6dm5YcGvkl4jVZF00WHuvkPMFsXBTbZdH4aVgjPhubl53rdLrJwAP2b7X83+kQ==", + "requires": { + "@babel/runtime": "7.4.3", + "ethereumjs-tx": "1.3.7", + "rxjs": "6.4.0", + "web3-core": "1.0.0-beta.51", + "web3-core-helpers": "1.0.0-beta.51", + "web3-core-method": "1.0.0-beta.51", + "web3-core-subscriptions": "1.0.0-beta.51", + "web3-eth-abi": "1.0.0-beta.51", + "web3-eth-accounts": "1.0.0-beta.51", + "web3-eth-contract": "1.0.0-beta.51", + "web3-eth-ens": "1.0.0-beta.51", + "web3-eth-iban": "1.0.0-beta.51", + "web3-eth-personal": "1.0.0-beta.51", + "web3-net": "1.0.0-beta.51", + "web3-providers": "1.0.0-beta.51", + "web3-utils": "1.0.0-beta.51" + } + }, + "web3-eth-abi": { + "version": "1.0.0-beta.51", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.0.0-beta.51.tgz", + "integrity": "sha512-mTcMpIihZECzZ5oWUh9Jg7x5pVhPv6xPTPWxY9007QKbbBH01GwPogoxBz1X7RfWOwGqZABfxFgXow5NkL0T3A==", + "requires": { + "@babel/runtime": "7.4.3", + "ethers": "4.0.27", + "lodash": "4.17.11", + "web3-utils": "1.0.0-beta.51" + } + }, + "web3-eth-accounts": { + "version": "1.0.0-beta.51", + "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.0.0-beta.51.tgz", + "integrity": "sha512-6HJu4Vrli7p1S52mV83juFjWn0w7rUE4q9cZdYwsGmqHGrOmV7E3zuBEyuA+kelPLpSmcJDOnEowvORmRdpAyw==", + "requires": { + "@babel/runtime": "7.4.3", + "crypto-browserify": "3.12.0", + "eth-lib": "0.2.8", + "lodash": "4.17.11", + "scrypt.js": "0.2.0", + "uuid": "3.3.2", + "web3-core": "1.0.0-beta.51", + "web3-core-helpers": "1.0.0-beta.51", + "web3-core-method": "1.0.0-beta.51", + "web3-providers": "1.0.0-beta.51", + "web3-utils": "1.0.0-beta.51" + }, + "dependencies": { + "eth-lib": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", + "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", + "requires": { + "bn.js": "4.11.8", + "elliptic": "6.4.0", + "xhr-request-promise": "0.1.2" + } + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + } + } + }, + "web3-eth-contract": { + "version": "1.0.0-beta.51", + "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.0.0-beta.51.tgz", + "integrity": "sha512-iVMay6OXDjDPeiPoeGpa6PQGuwIPxL/8UAVIlWVB1CYG9+FY6kcOUO7vI7dnDVwN1zneAslf9h86px6hgR92OQ==", + "requires": { + "@babel/runtime": "7.4.3", + "@types/bn.js": "4.11.5", + "lodash": "4.17.11", + "web3-core": "1.0.0-beta.51", + "web3-core-helpers": "1.0.0-beta.51", + "web3-core-method": "1.0.0-beta.51", + "web3-core-subscriptions": "1.0.0-beta.51", + "web3-eth-abi": "1.0.0-beta.51", + "web3-eth-accounts": "1.0.0-beta.51", + "web3-providers": "1.0.0-beta.51", + "web3-utils": "1.0.0-beta.51" + } + }, + "web3-eth-ens": { + "version": "1.0.0-beta.51", + "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.0.0-beta.51.tgz", + "integrity": "sha512-JpHlAIUZGLGTTHWKBFciv5KGBi/+n0uqaO/dXoIfB/jI0Gcm5GYEwUt8TU/Y0/WVHvw/ttU1e0laJYPzTTEB8w==", + "requires": { + "@babel/runtime": "7.4.3", + "eth-ens-namehash": "2.0.8", + "lodash": "4.17.11", + "web3-core": "1.0.0-beta.51", + "web3-core-helpers": "1.0.0-beta.51", + "web3-core-method": "1.0.0-beta.51", + "web3-eth-abi": "1.0.0-beta.51", + "web3-eth-contract": "1.0.0-beta.51", + "web3-net": "1.0.0-beta.51", + "web3-providers": "1.0.0-beta.51", + "web3-utils": "1.0.0-beta.51" + } + }, + "web3-eth-iban": { + "version": "1.0.0-beta.51", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.0.0-beta.51.tgz", + "integrity": "sha512-GNLsEWpEkyJqmogsF+mQLlO06tPOudfhVBCPC68SIOw6wQTqAtoqzOot3EJdrEIDGet9eujOoBs6VWAjNbMGRA==", + "requires": { + "@babel/runtime": "7.4.3", + "bn.js": "4.11.8", + "web3-utils": "1.0.0-beta.51" + } + }, + "web3-eth-personal": { + "version": "1.0.0-beta.51", + "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.0.0-beta.51.tgz", + "integrity": "sha512-Mq6uAvhfsKf7FSZVqJOfmb7i5zxQ6HkbTRcAyOOOfSmGnTvxSIjtKZCTAVv3UeBh3pxIXn5FSDlKngaj1MbYXg==", + "requires": { + "@babel/runtime": "7.4.3", + "web3-core": "1.0.0-beta.51", + "web3-core-helpers": "1.0.0-beta.51", + "web3-core-method": "1.0.0-beta.51", + "web3-net": "1.0.0-beta.51", + "web3-providers": "1.0.0-beta.51", + "web3-utils": "1.0.0-beta.51" + } + }, + "web3-net": { + "version": "1.0.0-beta.51", + "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.0.0-beta.51.tgz", + "integrity": "sha512-1xeBIb/Tvf6PVNZ0u+pPrULNkLefTf0uuo8Hyx82EfY+mvMz6jvNDyFsD8spDGJUuxlDabFnoZdiaEv7LNwwSg==", + "requires": { + "@babel/runtime": "7.4.3", + "lodash": "4.17.11", + "web3-core": "1.0.0-beta.51", + "web3-core-helpers": "1.0.0-beta.51", + "web3-core-method": "1.0.0-beta.51", + "web3-providers": "1.0.0-beta.51", + "web3-utils": "1.0.0-beta.51" + } + }, + "web3-providers": { + "version": "1.0.0-beta.51", + "resolved": "https://registry.npmjs.org/web3-providers/-/web3-providers-1.0.0-beta.51.tgz", + "integrity": "sha512-aWUEZIou4+zEZbLaBf1GQwbNoERq66mLEB6ubcPz1WEq1T5jfUPfwO4b4W2bEbEZVsoxS1ZJvSFkj1yAtD0X+g==", + "requires": { + "@babel/runtime": "7.4.3", + "@types/node": "10.14.4", + "eventemitter3": "3.1.0", + "lodash": "4.17.11", + "url-parse": "1.4.4", + "websocket": "git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2", + "xhr2-cookies": "1.1.0" + }, + "dependencies": { + "@types/node": { + "version": "10.14.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.4.tgz", + "integrity": "sha512-DT25xX/YgyPKiHFOpNuANIQIVvYEwCWXgK2jYYwqgaMrYE6+tq+DtmMwlD3drl6DJbUwtlIDnn0d7tIn/EbXBg==" + } + } + }, + "web3-shh": { + "version": "1.0.0-beta.51", + "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.0.0-beta.51.tgz", + "integrity": "sha512-IA4oaNH+PaGWQtTe7BmENszNTeSTsZ15hBNnOrMIyeF0PeghPj7sCenTtU/q8Ie6jR0oXfTXJOQCS/Q/QC3Ksg==", + "requires": { + "@babel/runtime": "7.4.3", + "web3-core": "1.0.0-beta.51", + "web3-core-helpers": "1.0.0-beta.51", + "web3-core-method": "1.0.0-beta.51", + "web3-core-subscriptions": "1.0.0-beta.51", + "web3-net": "1.0.0-beta.51", + "web3-providers": "1.0.0-beta.51", + "web3-utils": "1.0.0-beta.51" + } + }, + "web3-utils": { + "version": "1.0.0-beta.51", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.0.0-beta.51.tgz", + "integrity": "sha512-c9sRSscu0NIjD96X4ToDOgTxGyJevppuB+uHOgWkziaLGqlw/Li1l24nGkvr0Zqpt9SufvfPcWf8EEC92pnwKg==", + "requires": { + "@babel/runtime": "7.4.3", + "@types/bn.js": "4.11.5", + "@types/node": "10.14.4", + "bn.js": "4.11.8", + "eth-lib": "0.2.8", + "ethjs-unit": "0.1.6", + "lodash": "4.17.11", + "number-to-bn": "1.7.0", + "randomhex": "0.1.5", + "utf8": "2.1.1" + }, + "dependencies": { + "@types/node": { + "version": "10.14.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.4.tgz", + "integrity": "sha512-DT25xX/YgyPKiHFOpNuANIQIVvYEwCWXgK2jYYwqgaMrYE6+tq+DtmMwlD3drl6DJbUwtlIDnn0d7tIn/EbXBg==" + }, + "eth-lib": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", + "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", + "requires": { + "bn.js": "4.11.8", + "elliptic": "6.4.0", + "xhr-request-promise": "0.1.2" + } + } + } + }, + "websocket": { + "version": "git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2", + "requires": { + "debug": "2.6.9", + "nan": "2.13.2", + "typedarray-to-buffer": "3.1.5", + "yaeti": "0.0.6" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "2.0.0" + } + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "ws": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz", + "integrity": "sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==", + "dev": true, + "requires": { + "async-limiter": "1.0.0" + } + }, + "xhr": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.5.0.tgz", + "integrity": "sha512-4nlO/14t3BNUZRXIXfXe+3N6w3s1KoxcJUUURctd64BLRe67E4gRwp4PjywtDY72fXpZ1y6Ch0VZQRY/gMPzzQ==", + "requires": { + "global": "4.3.2", + "is-function": "1.0.1", + "parse-headers": "2.0.2", + "xtend": "4.0.1" + } + }, + "xhr-request": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", + "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", + "requires": { + "buffer-to-arraybuffer": "0.0.5", + "object-assign": "4.1.1", + "query-string": "5.1.1", + "simple-get": "2.8.1", + "timed-out": "4.0.1", + "url-set-query": "1.0.0", + "xhr": "2.5.0" + } + }, + "xhr-request-promise": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.2.tgz", + "integrity": "sha1-NDxE0e53JrhkgGloLQ+EDIO0Jh0=", + "requires": { + "xhr-request": "1.1.0" + } + }, + "xhr2-cookies": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz", + "integrity": "sha1-fXdEnQmZGX8VXLc7I99yUF7YnUg=", + "requires": { + "cookiejar": "2.1.2" + } + }, + "xmlhttprequest": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", + "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=" + }, + "xmlhttprequest-ssl": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", + "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", + "dev": true + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" + }, + "yaeti": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", + "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=" + }, + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "requires": { + "buffer-crc32": "0.2.13", + "fd-slicer": "1.1.0" + } + }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", + "dev": true + } + } } diff --git a/packages/bitcore-wallet-client/package.json b/packages/bitcore-wallet-client/package.json index 42b5cc9a828..ebe04f4bd45 100644 --- a/packages/bitcore-wallet-client/package.json +++ b/packages/bitcore-wallet-client/package.json @@ -30,7 +30,7 @@ "bitcore-lib": "^8.1.1", "bitcore-lib-cash": "^8.1.1", "bitcore-mnemonic": "^8.1.1", - "crypto-wallet-core": "file:../crypto-wallet-core/crypto-wallet-core-8.1.1.tgz", + "crypto-wallet-core": "^8.1.1", "json-stable-stringify": "^1.0.1", "lodash": "^4.17.11", "preconditions": "^2.2.1", diff --git a/packages/bitcore-wallet-service/package-lock.json b/packages/bitcore-wallet-service/package-lock.json index 9bf748fd5f4..e2bf5e670dd 100644 --- a/packages/bitcore-wallet-service/package-lock.json +++ b/packages/bitcore-wallet-service/package-lock.json @@ -1,2917 +1,4744 @@ { - "name": "bitcore-wallet-service", - "version": "8.1.1", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@sendgrid/client": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@sendgrid/client/-/client-6.3.0.tgz", - "integrity": "sha512-fTy8vRpA9Whtf8ULQr/0vkSZaQvGQ97rY5N5PrevKRtugJMsJqFMKO0pwzEWeqITSg71aMMTj57QTgw3SjZvnQ==", - "requires": { - "@sendgrid/helpers": "6.3.0", - "@types/request": "2.48.1", - "request": "2.88.0" - } - }, - "@sendgrid/helpers": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@sendgrid/helpers/-/helpers-6.3.0.tgz", - "integrity": "sha512-uTFcmhCDFg/2Uhz+z/cLwyLHH0UsblG49hKwdR7nKbWsGKWv4js7W32FlPdXqy2C/plTJ20vcPLgKM1m3F/MjQ==", - "requires": { - "chalk": "2.4.1", - "deepmerge": "2.2.1" - } - }, - "@sendgrid/mail": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/@sendgrid/mail/-/mail-6.3.1.tgz", - "integrity": "sha512-5zIeAV9iU+0hQkrOQ/D4RB2MfpK+lNbOortIfQdCh95aMDF/TRc9WB8FGNhmQrx9YMuJTms5eiBklF0Fi/dbVg==", - "requires": { - "@sendgrid/client": "6.3.0", - "@sendgrid/helpers": "6.3.0" - } - }, - "@sinonjs/commons": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.3.0.tgz", - "integrity": "sha512-j4ZwhaHmwsCb4DlDOIWnI5YyKDNMoNThsmwEpfHx6a1EpsGZ9qYLxP++LMlmBRjtGptGHFsGItJ768snllFWpA==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - }, - "dependencies": { - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - } - } - }, - "@sinonjs/formatio": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-3.1.0.tgz", - "integrity": "sha512-ZAR2bPHOl4Xg6eklUGpsdiIJ4+J1SNag1DHHrG/73Uz/nVwXqjgUtRPLoS+aVyieN9cSbc0E4LsU984tWcDyNg==", - "dev": true, - "requires": { - "@sinonjs/samsam": "3.0.2" - } - }, - "@sinonjs/samsam": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.0.2.tgz", - "integrity": "sha512-m08g4CS3J6lwRQk1pj1EO+KEVWbrbXsmi9Pw0ySmrIbcVxVaedoFgLvFsV8wHLwh01EpROVz3KvVcD1Jmks9FQ==", - "dev": true, - "requires": { - "@sinonjs/commons": "1.3.0", - "array-from": "2.1.1", - "lodash.get": "4.4.2" - } - }, - "@types/async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/async/-/async-2.4.1.tgz", - "integrity": "sha512-C09BK/wXzbW+/JK9zckhe+FeSbg7NmvVjUWwApnw7ksRpUq3ecGLiq2Aw1LlY4Z/VmtdhSaIs7jO5/MWRYMcOA==", - "dev": true - }, - "@types/body-parser": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.0.tgz", - "integrity": "sha512-a2+YeUjPkztKJu5aIF2yArYFQQp8d51wZ7DavSHjFuY1mqVgidGyzEQ41JIVNy82fXj8yPgy2vJmfIywgESW6w==", - "dev": true, - "requires": { - "@types/connect": "3.4.32", - "@types/node": "11.11.4" - } - }, - "@types/bson": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/bson/-/bson-4.0.0.tgz", - "integrity": "sha512-pq/rqJwJWkbS10crsG5bgnrisL8pML79KlMKQMoQwLUjlPAkrUHMvHJ3oGwE7WHR61Lv/nadMwXVAD2b+fpD8Q==", - "dev": true, - "requires": { - "@types/node": "11.11.4" - } - }, - "@types/caseless": { - "version": "0.12.2", - "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.2.tgz", - "integrity": "sha512-6ckxMjBBD8URvjB6J3NcnuAn5Pkl7t3TizAg+xdlzzQGSPSmBcXf8KoIH0ua/i+tio+ZRUHEXp0HEmvaR4kt0w==" - }, - "@types/connect": { - "version": "3.4.32", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.32.tgz", - "integrity": "sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg==", - "dev": true, - "requires": { - "@types/node": "11.11.4" - } - }, - "@types/events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", - "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", - "dev": true - }, - "@types/express": { - "version": "4.16.1", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.16.1.tgz", - "integrity": "sha512-V0clmJow23WeyblmACoxbHBu2JKlE5TiIme6Lem14FnPW9gsttyHtk6wq7njcdIWH1njAaFgR8gW09lgY98gQg==", - "dev": true, - "requires": { - "@types/body-parser": "1.17.0", - "@types/express-serve-static-core": "4.16.1", - "@types/serve-static": "1.13.2" - } - }, - "@types/express-serve-static-core": { - "version": "4.16.1", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.16.1.tgz", - "integrity": "sha512-QgbIMRU1EVRry5cIu1ORCQP4flSYqLM1lS5LYyGWfKnFT3E58f0gKto7BR13clBFVrVZ0G0rbLZ1hUpSkgQQOA==", - "dev": true, - "requires": { - "@types/node": "11.11.4", - "@types/range-parser": "1.2.3" - } - }, - "@types/form-data": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-2.2.1.tgz", - "integrity": "sha512-JAMFhOaHIciYVh8fb5/83nmuO/AHwmto+Hq7a9y8FzLDcC1KCU344XDOMEmahnrTFlHjgh4L0WJFczNIX2GxnQ==", - "requires": { - "@types/node": "11.11.4" - } - }, - "@types/lodash": { - "version": "4.14.123", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.123.tgz", - "integrity": "sha512-pQvPkc4Nltyx7G1Ww45OjVqUsJP4UsZm+GWJpigXgkikZqJgRm4c48g027o6tdgubWHwFRF15iFd+Y4Pmqv6+Q==", - "dev": true - }, - "@types/mime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.1.tgz", - "integrity": "sha512-FwI9gX75FgVBJ7ywgnq/P7tw+/o1GUbtP0KzbtusLigAOgIgNISRK0ZPl4qertvXSIE8YbsVJueQ90cDt9YYyw==", - "dev": true - }, - "@types/moment": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@types/moment/-/moment-2.13.0.tgz", - "integrity": "sha1-YE69GJvDvDShVIaJQE5hoqSqyJY=", - "dev": true, - "requires": { - "moment": "2.22.2" - } - }, - "@types/mongodb": { - "version": "2.2.23", - "resolved": "https://registry.npmjs.org/@types/mongodb/-/mongodb-2.2.23.tgz", - "integrity": "sha512-zK2txG9cGIxHZLRKq59mmb4uYbfl/b+G3RcSuW7HHEvUj/O0gsRLgprQu6n/Gn5Mh+PbnAIgrgh4Zhj+OjsRBQ==", - "dev": true, - "requires": { - "@types/bson": "4.0.0", - "@types/events": "3.0.0", - "@types/node": "11.11.4" - } - }, - "@types/node": { - "version": "11.11.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-11.11.4.tgz", - "integrity": "sha512-02tIL+QIi/RW4E5xILdoAMjeJ9kYq5t5S2vciUdFPXv/ikFTb0zK8q9vXkg4+WAJuYXGiVT1H28AkD2C+IkXVw==" - }, - "@types/nodemailer": { - "version": "4.6.6", - "resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-4.6.6.tgz", - "integrity": "sha512-N2czhXs7fbQhvoquEGzmHAWttnxLfrM3+cWMRFX4hTQq4GE3VyaSE3MOOse4VoNgvtti/H5ow/Hq9KXu/UMWqA==", - "dev": true, - "requires": { - "@types/node": "11.11.4" - } - }, - "@types/range-parser": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", - "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==", - "dev": true - }, - "@types/request": { - "version": "2.48.1", - "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.1.tgz", - "integrity": "sha512-ZgEZ1TiD+KGA9LiAAPPJL68Id2UWfeSO62ijSXZjFJArVV+2pKcsVHmrcu+1oiE3q6eDGiFiSolRc4JHoerBBg==", - "requires": { - "@types/caseless": "0.12.2", - "@types/form-data": "2.2.1", - "@types/node": "11.11.4", - "@types/tough-cookie": "2.3.5" - } - }, - "@types/serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-/BZ4QRLpH/bNYgZgwhKEh+5AsboDBcUdlBYgzoLX0fpj3Y2gp6EApyOlM3bK53wQS/OE1SrdSYBAbux2D1528Q==", - "dev": true, - "requires": { - "@types/express-serve-static-core": "4.16.1", - "@types/mime": "2.0.1" - } - }, - "@types/socket.io": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@types/socket.io/-/socket.io-2.1.2.tgz", - "integrity": "sha512-Ind+4qMNfQ62llyB4IMs1D8znMEBsMKohZBPqfBUIXqLQ9bdtWIbNTBWwtdcBWJKnokMZGcmWOOKslatni5vtA==", - "dev": true, - "requires": { - "@types/node": "11.11.4" - } - }, - "@types/socket.io-client": { - "version": "1.4.32", - "resolved": "https://registry.npmjs.org/@types/socket.io-client/-/socket.io-client-1.4.32.tgz", - "integrity": "sha512-Vs55Kq8F+OWvy1RLA31rT+cAyemzgm0EWNeax6BWF8H7QiiOYMJIdcwSDdm5LVgfEkoepsWkS+40+WNb7BUMbg==", - "dev": true - }, - "@types/tough-cookie": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-2.3.5.tgz", - "integrity": "sha512-SCcK7mvGi3+ZNz833RRjFIxrn4gI1PPR3NtuIS+6vMkvmsGjosqTJwRt5bAEFLRz+wtJMWv8+uOnZf2hi2QXTg==" - }, - "abbrev": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", - "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", - "dev": true - }, - "abstract-leveldown": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz", - "integrity": "sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==", - "dev": true, - "requires": { - "xtend": "4.0.1" - } - }, - "accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", - "requires": { - "mime-types": "2.1.21", - "negotiator": "0.6.1" - } - }, - "after": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", - "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" - }, - "ajv": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.6.1.tgz", - "integrity": "sha512-ZoJjft5B+EJBjUyu9C9Hc0OZyPZSSlOF+plzouTrg6UlA8f+e/n8NIgBFG/9tppJtpPWfthHakK7juJdNDODww==", - "requires": { - "fast-deep-equal": "2.0.1", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.4.1", - "uri-js": "4.2.2" - } - }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true, - "optional": true - }, - "ansi": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz", - "integrity": "sha1-DELU+xcWDVqa8eSEus4cZpIsGyE=" - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "1.9.3" - } - }, - "arg": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.0.tgz", - "integrity": "sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg==", - "dev": true - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "1.0.3" - } - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "http://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "array-from": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz", - "integrity": "sha1-z+nYwmYoudxa7MYqn12PHzUsEZU=", - "dev": true - }, - "arraybuffer.slice": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", - "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==" - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "requires": { - "safer-buffer": "2.1.2" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - }, - "assertion-error": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.0.0.tgz", - "integrity": "sha1-x/hUOP3UZrx8oWq5DIFRN5el0js=", - "dev": true - }, - "async": { - "version": "0.9.2", - "resolved": "http://registry.npmjs.org/async/-/async-0.9.2.tgz", - "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=" - }, - "async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" - }, - "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" - }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "babylon": { - "version": "7.0.0-beta.19", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.19.tgz", - "integrity": "sha512-Vg0C9s/REX6/WIXN37UKpv5ZhRi6A4pjHlpkE34+8/a6c2W1Q692n3hmc+SZG5lKRnaExLUbxtJ1SVT+KaCQ/A==", - "dev": true - }, - "backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base64-arraybuffer": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", - "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=" - }, - "base64id": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", - "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=" - }, - "basic-auth": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", - "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", - "requires": { - "safe-buffer": "5.1.2" - } - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "requires": { - "tweetnacl": "0.14.5" - } - }, - "better-assert": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", - "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", - "requires": { - "callsite": "1.0.0" - } - }, - "bindings": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.3.1.tgz", - "integrity": "sha512-i47mqjF9UbjxJhxGf+pZ6kSxrnI3wBLlnGI2ArWJ4r0VrvDS7ZYXkprq/pLaBWYq4GM0r4zdHY+NNRqEMU7uew==" - }, - "bip66": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/bip66/-/bip66-1.1.5.tgz", - "integrity": "sha1-AfqHSHhcpwlV1QESF9GzE5lpyiI=", - "requires": { - "safe-buffer": "5.1.2" - } - }, - "blob": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", - "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==" - }, - "bluebird": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", - "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==", - "dev": true - }, - "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" - }, - "body-parser": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", - "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", - "requires": { - "bytes": "3.0.0", - "content-type": "1.0.4", - "debug": "2.6.9", - "depd": "1.1.2", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", - "on-finished": "2.3.0", - "qs": "6.5.2", - "raw-body": "2.3.3", - "type-is": "1.6.16" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "1.0.0", - "concat-map": "0.0.1" - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "requires": { - "buffer-xor": "1.0.3", - "cipher-base": "1.0.4", - "create-hash": "1.2.0", - "evp_bytestokey": "1.0.3", - "inherits": "2.0.3", - "safe-buffer": "5.1.2" - } - }, - "bson": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/bson/-/bson-1.0.9.tgz", - "integrity": "sha512-IQX9/h7WdMBIW/q/++tGd+emQr0XMdeZ6icnT/74Xk9fnabWn+gZgpE+9V+gujL3hhJOoNrnDVY7tWdzc7NUTg==" - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "buffer-shims": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", - "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=" - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" - }, - "callsite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=" - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, - "catharsis": { - "version": "0.8.9", - "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.8.9.tgz", - "integrity": "sha1-mMyJDKZS3S7w5ws3klMQ/56Q/Is=", - "dev": true, - "requires": { - "underscore-contrib": "0.3.0" - } - }, - "chai": { - "version": "1.10.0", - "resolved": "http://registry.npmjs.org/chai/-/chai-1.10.0.tgz", - "integrity": "sha1-5AMcyHZURhp1lD5aNatG6vOcHrk=", - "dev": true, - "requires": { - "assertion-error": "1.0.0", - "deep-eql": "0.1.3" - } - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" - } - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" - } - }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "combined-stream": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", - "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", - "requires": { - "delayed-stream": "1.0.0" - } - }, - "commander": { - "version": "2.15.1", - "resolved": "http://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", - "dev": true - }, - "component-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", - "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" - }, - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" - }, - "component-inherit": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", - "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" - }, - "compressible": { - "version": "2.0.15", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.15.tgz", - "integrity": "sha512-4aE67DL33dSW9gw4CI2H/yTxqHLNcxp0yS6jB+4h+wr3e43+1z7vm0HU9qXOH8j+qjKuL8+UtkOxYQSMq60Ylw==", - "requires": { - "mime-db": "1.37.0" - } - }, - "compression": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.3.tgz", - "integrity": "sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==", - "requires": { - "accepts": "1.3.5", - "bytes": "3.0.0", - "compressible": "2.0.15", - "debug": "2.6.9", - "on-headers": "1.0.1", - "safe-buffer": "5.1.2", - "vary": "1.1.2" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, - "cookiejar": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz", - "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "coveralls": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.0.2.tgz", - "integrity": "sha512-Tv0LKe/MkBOilH2v7WBiTBdudg2ChfGbdXafc/s330djpF3zKOmuehTeRwjXWc7pzfj9FrDUTA7tEx6Div8NFw==", - "dev": true, - "requires": { - "growl": "1.10.5", - "js-yaml": "3.12.0", - "lcov-parse": "0.0.10", - "log-driver": "1.2.7", - "minimist": "1.2.0", - "request": "2.88.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "requires": { - "cipher-base": "1.0.4", - "inherits": "2.0.3", - "md5.js": "1.3.5", - "ripemd160": "2.0.2", - "sha.js": "2.4.11" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "http://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "requires": { - "cipher-base": "1.0.4", - "create-hash": "1.2.0", - "inherits": "2.0.3", - "ripemd160": "2.0.2", - "safe-buffer": "5.1.2", - "sha.js": "2.4.11" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "requires": { - "assert-plus": "1.0.0" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "deep-eql": { - "version": "0.1.3", - "resolved": "http://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz", - "integrity": "sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=", - "dev": true, - "requires": { - "type-detect": "0.1.1" - } - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "deepmerge": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz", - "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==" - }, - "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "requires": { - "clone": "1.0.4" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true - }, - "drbg.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/drbg.js/-/drbg.js-1.0.1.tgz", - "integrity": "sha1-Pja2xCs3BDgjzbwzLVjzHiRFSAs=", - "requires": { - "browserify-aes": "1.2.0", - "create-hash": "1.2.0", - "create-hmac": "1.1.7" - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "requires": { - "jsbn": "0.1.1", - "safer-buffer": "2.1.2" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "elliptic": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", - "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", - "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0", - "hash.js": "1.1.7", - "hmac-drbg": "1.0.1", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" - } - }, - "email-validator": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/email-validator/-/email-validator-1.2.3.tgz", - "integrity": "sha512-WZmY6vj6bAWUzr1P2OmRkw4E3FWwdnKxWG/Ssfvr+kp+0leuXzsX2EHNwjg8+KW2DfAiFWiV+jn5n1P7TlE7lw==" - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" - }, - "engine.io": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.3.2.tgz", - "integrity": "sha512-AsaA9KG7cWPXWHp5FvHdDWY3AMWeZ8x+2pUVLcn71qE5AtAzgGbxuclOytygskw8XGmiQafTmnI9Bix3uihu2w==", - "requires": { - "accepts": "1.3.5", - "base64id": "1.0.0", - "cookie": "0.3.1", - "debug": "3.1.0", - "engine.io-parser": "2.1.3", - "ws": "6.1.2" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - } - } - }, - "engine.io-client": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.3.1.tgz", - "integrity": "sha512-q66JBFuQcy7CSlfAz9L3jH+v7DTT3i6ZEadYcVj2pOs8/0uJHLxKX3WBkGTvULJMdz0tUCyJag0aKT/dpXL9BQ==", - "requires": { - "component-emitter": "1.2.1", - "component-inherit": "0.0.3", - "debug": "3.1.0", - "engine.io-parser": "2.1.3", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "ws": "6.1.2", - "xmlhttprequest-ssl": "1.5.5", - "yeast": "0.1.2" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - } - } - }, - "engine.io-parser": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", - "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", - "requires": { - "after": "0.8.2", - "arraybuffer.slice": "0.0.7", - "base64-arraybuffer": "0.1.5", - "blob": "0.0.5", - "has-binary2": "1.0.3" - } - }, - "errr": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/errr/-/errr-2.6.1.tgz", - "integrity": "sha512-h4SrH28BniB6zOZ/19ZOHdonCwLI7ljC8MyDabH+6dhz66Ws+Xy0MnHwf4dn55FRdZWdVVpbrSpI5YYOscV29A==" - }, - "es6-promise": { - "version": "3.2.1", - "resolved": "http://registry.npmjs.org/es6-promise/-/es6-promise-3.2.1.tgz", - "integrity": "sha1-7FYjOGgDKQkgcXDDlEjiREndH8Q=" - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "escodegen": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", - "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", - "dev": true, - "requires": { - "esprima": "2.7.3", - "estraverse": "1.9.3", - "esutils": "2.0.2", - "optionator": "0.8.2", - "source-map": "0.2.0" - }, - "dependencies": { - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true - } - } - }, - "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "dev": true, - "requires": { - "esrecurse": "4.2.1", - "estraverse": "4.2.0" - }, - "dependencies": { - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true - } - } - }, - "eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", - "dev": true - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", - "dev": true, - "requires": { - "estraverse": "4.2.0" - }, - "dependencies": { - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true - } - } - }, - "estraverse": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", - "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "requires": { - "md5.js": "1.3.5", - "safe-buffer": "5.1.2" - } - }, - "express": { - "version": "4.16.4", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", - "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", - "requires": { - "accepts": "1.3.5", - "array-flatten": "1.1.1", - "body-parser": "1.18.3", - "content-disposition": "0.5.2", - "content-type": "1.0.4", - "cookie": "0.3.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "1.1.2", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", - "finalhandler": "1.1.1", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "1.1.2", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "path-to-regexp": "0.1.7", - "proxy-addr": "2.0.4", - "qs": "6.5.2", - "range-parser": "1.2.0", - "safe-buffer": "5.1.2", - "send": "0.16.2", - "serve-static": "1.13.2", - "setprototypeof": "1.1.0", - "statuses": "1.4.0", - "type-is": "1.6.16", - "utils-merge": "1.0.1", - "vary": "1.1.2" - }, - "dependencies": { - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - } - } - }, - "express-rate-limit": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-2.14.2.tgz", - "integrity": "sha512-aVYzfYU2Bv+v6ry/fBpTrX8MorM0p/TeDnx4CqiLevg9ftG8eW+pyuZ6JEreGdG2t1vXyTGHuSNRKLeYixuqZg==", - "requires": { - "defaults": "1.0.3" - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fill-keys": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/fill-keys/-/fill-keys-1.0.2.tgz", - "integrity": "sha1-mo+jb06K1jTjv2tPPIiCVRRS6yA=", - "dev": true, - "requires": { - "is-object": "1.0.1", - "merge-descriptors": "1.0.1" - } - }, - "finalhandler": { - "version": "1.1.1", - "resolved": "http://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", - "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", - "requires": { - "debug": "2.6.9", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.4.0", - "unpipe": "1.0.0" - }, - "dependencies": { - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - } - } - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.7", - "mime-types": "2.1.21" - } - }, - "formidable": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.1.tgz", - "integrity": "sha512-Fs9VRguL0gqGHkXS5GQiMCr1VhZBxz0JnJs4JmMp/2jL18Fmbzvv7vOFRU+U8TBkHEE/CX1qDXzJplVULgsLeg==", - "dev": true - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "requires": { - "assert-plus": "1.0.0" - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, - "handlebars": { - "version": "4.0.12", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.12.tgz", - "integrity": "sha512-RhmTekP+FZL+XNhwS1Wf+bTTZpdLougwt5pcgA1tuz6Jcx0fpH/7z0qd71RKnZHBCxIRBHfBOnio4gViPemNzA==", - "dev": true, - "requires": { - "async": "2.6.1", - "optimist": "0.6.1", - "source-map": "0.6.1", - "uglify-js": "3.4.9" - }, - "dependencies": { - "async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", - "dev": true, - "requires": { - "lodash": "4.17.11" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "requires": { - "ajv": "6.6.1", - "har-schema": "2.0.0" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "has-binary2": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", - "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", - "requires": { - "isarray": "2.0.1" - }, - "dependencies": { - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" - } - } - }, - "has-cors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" - } - }, - "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", - "dev": true - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "requires": { - "hash.js": "1.1.7", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" - } - }, - "http-errors": { - "version": "1.6.3", - "resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "requires": { - "depd": "1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": "1.5.0" - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "requires": { - "assert-plus": "1.0.0", - "jsprim": "1.4.1", - "sshpk": "1.15.2" - } - }, - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "requires": { - "safer-buffer": "2.1.2" - } - }, - "immediate": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz", - "integrity": "sha1-0UD6j2FGWb1lQSMwl92qwlzdmRw=", - "dev": true - }, - "indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "ipaddr.js": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", - "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=" - }, - "is-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", - "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=", - "dev": true - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "istanbul": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", - "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", - "dev": true, - "requires": { - "abbrev": "1.0.9", - "async": "1.5.2", - "escodegen": "1.8.1", - "esprima": "2.7.3", - "glob": "5.0.15", - "handlebars": "4.0.12", - "js-yaml": "3.12.0", - "mkdirp": "0.5.1", - "nopt": "3.0.6", - "once": "1.4.0", - "resolve": "1.1.7", - "supports-color": "3.2.3", - "which": "1.3.1", - "wordwrap": "1.0.0" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "http://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - }, - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true - }, - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } - } - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - }, - "js-yaml": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", - "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", - "dev": true, - "requires": { - "argparse": "1.0.10", - "esprima": "4.0.1" - } - }, - "js2xmlparser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-3.0.0.tgz", - "integrity": "sha1-P7YOqgicVED5MZ9RdgzNB+JJlzM=", - "dev": true, - "requires": { - "xmlcreate": "1.0.2" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - }, - "jsdoc": { - "version": "3.5.5", - "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.5.5.tgz", - "integrity": "sha512-6PxB65TAU4WO0Wzyr/4/YhlGovXl0EVYfpKbpSroSj0qBxT4/xod/l40Opkm38dRHRdQgdeY836M0uVnJQG7kg==", - "dev": true, - "requires": { - "babylon": "7.0.0-beta.19", - "bluebird": "3.5.3", - "catharsis": "0.8.9", - "escape-string-regexp": "1.0.5", - "js2xmlparser": "3.0.0", - "klaw": "2.0.0", - "marked": "0.3.19", - "mkdirp": "0.5.1", - "requizzle": "0.2.1", - "strip-json-comments": "2.0.1", - "taffydb": "2.6.2", - "underscore": "1.8.3" - } - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "requires": { - "jsonify": "0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "just-extend": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-3.0.0.tgz", - "integrity": "sha512-Fu3T6pKBuxjWT/p4DkqGHFRsysc8OauWr4ZRTY9dIx07Y9O0RkoR5jcv28aeD1vuAwhm3nLkDurwLXoALp4DpQ==", - "dev": true - }, - "klaw": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-2.0.0.tgz", - "integrity": "sha1-WcEo4Nxc5BAgEVEZTuucv4WGUPY=", - "dev": true, - "requires": { - "graceful-fs": "4.1.15" - } - }, - "lcov-parse": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-0.0.10.tgz", - "integrity": "sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM=", - "dev": true - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "1.1.2", - "type-check": "0.3.2" - } - }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" - }, - "lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", - "dev": true - }, - "lodash.unescape": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz", - "integrity": "sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=", - "dev": true - }, - "log-driver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", - "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", - "dev": true - }, - "lolex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-3.0.0.tgz", - "integrity": "sha512-hcnW80h3j2lbUfFdMArd5UPA/vxZJ+G8vobd+wg3nVEQA0EigStbYcrG030FJxL6xiDDPEkoMatV9xIh5OecQQ==", - "dev": true - }, - "ltgt": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", - "integrity": "sha1-81ypHEk/e3PaDgdJUwTxezH4fuU=", - "dev": true - }, - "make-error": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", - "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==", - "dev": true - }, - "marked": { - "version": "0.3.19", - "resolved": "http://registry.npmjs.org/marked/-/marked-0.3.19.tgz", - "integrity": "sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg==", - "dev": true - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3", - "safe-buffer": "5.1.2" - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "http://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" - }, - "memdown": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/memdown/-/memdown-1.4.1.tgz", - "integrity": "sha1-tOThkhdGZP+65BNhqlAPMRnv4hU=", - "dev": true, - "requires": { - "abstract-leveldown": "2.7.2", - "functional-red-black-tree": "1.0.1", - "immediate": "3.2.3", - "inherits": "2.0.3", - "ltgt": "2.2.1", - "safe-buffer": "5.1.2" - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, - "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" - }, - "mime-db": { - "version": "1.37.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", - "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==" - }, - "mime-types": { - "version": "2.1.21", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", - "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", - "requires": { - "mime-db": "1.37.0" - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "1.1.11" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "mocha": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", - "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", - "dev": true, - "requires": { - "browser-stdout": "1.3.1", - "commander": "2.15.1", - "debug": "3.1.0", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "glob": "7.1.2", - "growl": "1.10.5", - "he": "1.1.1", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "supports-color": "5.4.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } - } - } - }, - "mocha-lcov-reporter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/mocha-lcov-reporter/-/mocha-lcov-reporter-1.3.0.tgz", - "integrity": "sha1-Rpve9PivyaEWBW8HnfYYLQr7A4Q=", - "dev": true - }, - "module-not-found-error": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/module-not-found-error/-/module-not-found-error-1.0.1.tgz", - "integrity": "sha1-z4tP9PKWQGdNbN0CsOO8UjwrvcA=", - "dev": true - }, - "moment": { - "version": "2.22.2", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.2.tgz", - "integrity": "sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y=" - }, - "mongodb": { - "version": "2.2.36", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-2.2.36.tgz", - "integrity": "sha512-P2SBLQ8Z0PVx71ngoXwo12+FiSfbNfGOClAao03/bant5DgLNkOPAck5IaJcEk4gKlQhDEURzfR3xuBG1/B+IA==", - "requires": { - "es6-promise": "3.2.1", - "mongodb-core": "2.1.20", - "readable-stream": "2.2.7" - } - }, - "mongodb-core": { - "version": "2.1.20", - "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-2.1.20.tgz", - "integrity": "sha512-IN57CX5/Q1bhDq6ShAR6gIv4koFsZP7L8WOK1S0lR0pVDQaScffSMV5jxubLsmZ7J+UdqmykKw4r9hG3XQEGgQ==", - "requires": { - "bson": "1.0.9", - "require_optional": "1.0.1" - } - }, - "morgan": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz", - "integrity": "sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==", - "requires": { - "basic-auth": "2.0.1", - "debug": "2.6.9", - "depd": "1.1.2", - "on-finished": "2.3.0", - "on-headers": "1.0.1" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "mustache": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/mustache/-/mustache-2.3.2.tgz", - "integrity": "sha512-KpMNwdQsYz3O/SBS1qJ/o3sqUJ5wSb8gb0pul8CO0S56b9Y2ALm8zCfsjPXsqGFfoNBkDwZuZIAjhsZI03gYVQ==" - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" - }, - "nan": { - "version": "2.11.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.1.tgz", - "integrity": "sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA==" - }, - "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" - }, - "nise": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/nise/-/nise-1.4.7.tgz", - "integrity": "sha512-5cxvo/pEAEHBX5s0zl+zd96BvHHuua/zttIHeQuTWSDjGrWsEHamty8xbZNfocC+fx7NMrle7XHvvxtFxobIZQ==", - "dev": true, - "requires": { - "@sinonjs/formatio": "3.1.0", - "just-extend": "3.0.0", - "lolex": "2.7.5", - "path-to-regexp": "1.7.0", - "text-encoding": "0.6.4" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "lolex": { - "version": "2.7.5", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-2.7.5.tgz", - "integrity": "sha512-l9x0+1offnKKIzYVjyXU2SiwhXDLekRzKyhnbyldPHvC7BvLPVpdNUNR2KeMAiCN2D/kLNttZgQD5WjSxuBx3Q==", - "dev": true - }, - "path-to-regexp": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", - "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=", - "dev": true, - "requires": { - "isarray": "0.0.1" - } - } - } - }, - "nodemailer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-5.1.1.tgz", - "integrity": "sha512-hKGCoeNdFL2W7S76J/Oucbw0/qRlfG815tENdhzcqTpSjKgAN91mFOqU2lQUflRRxFM7iZvCyaFcAR9noc/CqQ==" - }, - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "dev": true, - "requires": { - "abbrev": "1.0.9" - } - }, - "npmlog": { - "version": "0.1.1", - "resolved": "http://registry.npmjs.org/npmlog/-/npmlog-0.1.1.tgz", - "integrity": "sha1-i5ueRAXX7EjDHCNGllqtx6uuyqU=", - "requires": { - "ansi": "0.3.1" - } - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" - }, - "object-component": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", - "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=" - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", - "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=" - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1.0.2" - } - }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "dev": true, - "requires": { - "minimist": "0.0.8", - "wordwrap": "0.0.3" - }, - "dependencies": { - "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", - "dev": true - } - } - }, - "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", - "dev": true, - "requires": { - "deep-is": "0.1.3", - "fast-levenshtein": "2.0.6", - "levn": "0.3.0", - "prelude-ls": "1.1.2", - "type-check": "0.3.2", - "wordwrap": "1.0.0" - } - }, - "parseqs": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", - "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", - "requires": { - "better-assert": "1.0.2" - } - }, - "parseuri": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", - "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", - "requires": { - "better-assert": "1.0.2" - } - }, - "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, - "preconditions": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/preconditions/-/preconditions-2.2.3.tgz", - "integrity": "sha512-Yjr1+XK/4/L0zJyhNdsD2VNJIvd6ErFVJqXQ6mxRg+yvjfiNgLJ2uTeRXlmGuZ8AlcMFxkkKZZlckydHZe6AwA==", - "requires": { - "errr": "2.6.1", - "lodash": "4.17.11" - } - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" - }, - "proxy-addr": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", - "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", - "requires": { - "forwarded": "0.1.2", - "ipaddr.js": "1.8.0" - } - }, - "proxyquire": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/proxyquire/-/proxyquire-1.8.0.tgz", - "integrity": "sha1-AtUUpb7ZhvBMuyCTrxZ0FTX3ntw=", - "dev": true, - "requires": { - "fill-keys": "1.0.2", - "module-not-found-error": "1.0.1", - "resolve": "1.1.7" - } - }, - "psl": { - "version": "1.1.31", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", - "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==" - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - }, - "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" - }, - "raw-body": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", - "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", - "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", - "unpipe": "1.0.0" - } - }, - "read": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", - "requires": { - "mute-stream": "0.0.7" - } - }, - "readable-stream": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.7.tgz", - "integrity": "sha1-BwV6y+JGeyIELTb5jFrVBwVOlbE=", - "requires": { - "buffer-shims": "1.0.0", - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - }, - "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "requires": { - "aws-sign2": "0.7.0", - "aws4": "1.8.0", - "caseless": "0.12.0", - "combined-stream": "1.0.7", - "extend": "3.0.2", - "forever-agent": "0.6.1", - "form-data": "2.3.3", - "har-validator": "5.1.3", - "http-signature": "1.2.0", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.21", - "oauth-sign": "0.9.0", - "performance-now": "2.1.0", - "qs": "6.5.2", - "safe-buffer": "5.1.2", - "tough-cookie": "2.4.3", - "tunnel-agent": "0.6.0", - "uuid": "3.3.2" - } - }, - "request-promise-core": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz", - "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=", - "requires": { - "lodash": "4.17.11" - } - }, - "request-promise-native": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.5.tgz", - "integrity": "sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU=", - "requires": { - "request-promise-core": "1.1.1", - "stealthy-require": "1.1.1", - "tough-cookie": "2.4.3" - } - }, - "require_optional": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", - "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", - "requires": { - "resolve-from": "2.0.0", - "semver": "5.6.0" - } - }, - "requizzle": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.1.tgz", - "integrity": "sha1-aUPDUwxNmn5G8c3dUcFY/GcM294=", - "dev": true, - "requires": { - "underscore": "1.6.0" - }, - "dependencies": { - "underscore": { - "version": "1.6.0", - "resolved": "http://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", - "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", - "dev": true - } - } - }, - "resolve": { - "version": "1.1.7", - "resolved": "http://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true - }, - "resolve-from": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", - "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "secp256k1": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-3.5.2.tgz", - "integrity": "sha512-iin3kojdybY6NArd+UFsoTuapOF7bnJNf2UbcWXaY3z+E1sJDipl60vtzB5hbO/uquBu7z0fd4VC4Irp+xoFVQ==", - "requires": { - "bindings": "1.3.1", - "bip66": "1.1.5", - "bn.js": "4.11.8", - "create-hash": "1.2.0", - "drbg.js": "1.0.1", - "elliptic": "6.4.0", - "nan": "2.11.1", - "safe-buffer": "5.1.2" - } - }, - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==" - }, - "send": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", - "requires": { - "debug": "2.6.9", - "depd": "1.1.2", - "destroy": "1.0.4", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", - "fresh": "0.5.2", - "http-errors": "1.6.3", - "mime": "1.4.1", - "ms": "2.0.0", - "on-finished": "2.3.0", - "range-parser": "1.2.0", - "statuses": "1.4.0" - }, - "dependencies": { - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - } - } - }, - "serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", - "requires": { - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "parseurl": "1.3.2", - "send": "0.16.2" - } - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, - "sha.js": { - "version": "2.4.11", - "resolved": "http://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" - } - }, - "sinon": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-7.2.2.tgz", - "integrity": "sha512-WLagdMHiEsrRmee3jr6IIDntOF4kbI6N2pfbi8wkv50qaUQcBglkzkjtoOEbeJ2vf1EsrHhLI+5Ny8//WHdMoA==", - "dev": true, - "requires": { - "@sinonjs/commons": "1.3.0", - "@sinonjs/formatio": "3.1.0", - "@sinonjs/samsam": "3.0.2", - "diff": "3.5.0", - "lolex": "3.0.0", - "nise": "1.4.7", - "supports-color": "5.5.0" - } - }, - "sjcl": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/sjcl/-/sjcl-1.0.8.tgz", - "integrity": "sha512-LzIjEQ0S0DpIgnxMEayM1rq9aGwGRG4OnZhCdjx7glTaJtf4zRfpg87ImfjSJjoW9vKpagd82McDOwbRT5kQKQ==" - }, - "socket.io": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.2.0.tgz", - "integrity": "sha512-wxXrIuZ8AILcn+f1B4ez4hJTPG24iNgxBBDaJfT6MsyOhVYiTXWexGoPkd87ktJG8kQEcL/NBvRi64+9k4Kc0w==", - "requires": { - "debug": "4.1.0", - "engine.io": "3.3.2", - "has-binary2": "1.0.3", - "socket.io-adapter": "1.1.1", - "socket.io-client": "2.2.0", - "socket.io-parser": "3.3.0" - }, - "dependencies": { - "debug": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz", - "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==", - "requires": { - "ms": "2.1.1" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - } - } - }, - "socket.io-adapter": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", - "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=" - }, - "socket.io-client": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.2.0.tgz", - "integrity": "sha512-56ZrkTDbdTLmBIyfFYesgOxsjcLnwAKoN4CiPyTVkMQj3zTUh0QAx3GbvIvLpFEOvQWu92yyWICxB0u7wkVbYA==", - "requires": { - "backo2": "1.0.2", - "base64-arraybuffer": "0.1.5", - "component-bind": "1.0.0", - "component-emitter": "1.2.1", - "debug": "3.1.0", - "engine.io-client": "3.3.1", - "has-binary2": "1.0.3", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "object-component": "0.0.3", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "socket.io-parser": "3.3.0", - "to-array": "0.1.4" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - } - } - }, - "socket.io-parser": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.0.tgz", - "integrity": "sha512-hczmV6bDgdaEbVqhAeVMM/jfUfzuEZHsQg6eOmLgJht6G3mPKMxYm75w2+qhAQZ+4X+1+ATZ+QFKeOZD5riHng==", - "requires": { - "component-emitter": "1.2.1", - "debug": "3.1.0", - "isarray": "2.0.1" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - }, - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" - } - } - }, - "source-map": { - "version": "0.2.0", - "resolved": "http://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", - "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", - "dev": true, - "optional": true, - "requires": { - "amdefine": "1.0.1" - } - }, - "source-map-support": { - "version": "0.5.11", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.11.tgz", - "integrity": "sha512-//sajEx/fGL3iw6fltKMdPvy8kL3kJ2O3iuYlRoT3k9Kb4BjOoZ+BZzaNHeuaruSt+Kf3Zk9tnfAQg9/AJqUVQ==", - "dev": true, - "requires": { - "buffer-from": "1.1.1", - "source-map": "0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "http://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "sshpk": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.15.2.tgz", - "integrity": "sha512-Ra/OXQtuh0/enyl4ETZAfTaeksa6BXks5ZcjpSUNrjBr0DvrJKX+1fsKDPpT9TBXgHAFsa4510aNVgI8g/+SzA==", - "requires": { - "asn1": "0.2.4", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.2", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.2", - "getpass": "0.1.7", - "jsbn": "0.1.1", - "safer-buffer": "2.1.2", - "tweetnacl": "0.14.5" - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" - }, - "stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=" - }, - "sticky-session": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/sticky-session/-/sticky-session-0.1.0.tgz", - "integrity": "sha1-Mwij4d2+WVXLeeHe39Mu3EPJ74E=" - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "requires": { - "safe-buffer": "5.1.2" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "superagent": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz", - "integrity": "sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==", - "dev": true, - "requires": { - "component-emitter": "1.2.1", - "cookiejar": "2.1.2", - "debug": "3.2.6", - "extend": "3.0.2", - "form-data": "2.3.3", - "formidable": "1.2.1", - "methods": "1.1.2", - "mime": "1.4.1", - "qs": "6.5.2", - "readable-stream": "2.3.6" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "2.1.1" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "5.1.2" - } - } - } - }, - "supertest": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/supertest/-/supertest-3.3.0.tgz", - "integrity": "sha512-dMQSzYdaZRSANH5LL8kX3UpgK9G1LRh/jnggs/TI0W2Sz7rkMx9Y48uia3K9NgcaWEV28tYkBnXE4tiFC77ygQ==", - "dev": true, - "requires": { - "methods": "1.1.2", - "superagent": "3.8.3" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "3.0.0" - } - }, - "taffydb": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz", - "integrity": "sha1-fLy2S1oUG2ou/CxdLGe04VCyomg=", - "dev": true - }, - "text-encoding": { - "version": "0.6.4", - "resolved": "http://registry.npmjs.org/text-encoding/-/text-encoding-0.6.4.tgz", - "integrity": "sha1-45mpgiV6J22uQou5KEXLcb3CbRk=", - "dev": true - }, - "to-array": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", - "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" - }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "requires": { - "psl": "1.1.31", - "punycode": "1.4.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - } - } - }, - "ts-node": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.0.3.tgz", - "integrity": "sha512-2qayBA4vdtVRuDo11DEFSsD/SFsBXQBRZZhbRGSIkmYmVkWjULn/GGMdG10KVqkaGndljfaTD8dKjWgcejO8YA==", - "dev": true, - "requires": { - "arg": "4.1.0", - "diff": "3.5.0", - "make-error": "1.3.5", - "source-map-support": "0.5.11", - "yn": "3.0.0" - } - }, - "tslib": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", - "dev": true - }, - "tslint": { - "version": "5.14.0", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.14.0.tgz", - "integrity": "sha512-IUla/ieHVnB8Le7LdQFRGlVJid2T/gaJe5VkjzRVSRR6pA2ODYrnfR1hmxi+5+au9l50jBwpbBL34txgv4NnTQ==", - "dev": true, - "requires": { - "babel-code-frame": "6.26.0", - "builtin-modules": "1.1.1", - "chalk": "2.4.1", - "commander": "2.15.1", - "diff": "3.5.0", - "glob": "7.1.2", - "js-yaml": "3.12.0", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "resolve": "1.10.0", - "semver": "5.6.0", - "tslib": "1.9.3", - "tsutils": "2.29.0" - }, - "dependencies": { - "resolve": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", - "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", - "dev": true, - "requires": { - "path-parse": "1.0.6" - } - } - } - }, - "tsutils": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", - "dev": true, - "requires": { - "tslib": "1.9.3" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "requires": { - "safe-buffer": "5.1.2" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "1.1.2" - } - }, - "type-detect": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz", - "integrity": "sha1-C6XsKohWQORw6k6FBZcZANrFiCI=", - "dev": true - }, - "type-is": { - "version": "1.6.16", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", - "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "2.1.21" - } - }, - "typescript": { - "version": "3.3.4000", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.3.4000.tgz", - "integrity": "sha512-jjOcCZvpkl2+z7JFn0yBOoLQyLoIkNZAs/fYJkUG6VKy6zLPHJGfQJYFHzibB6GJaF/8QrcECtlQ5cpvRHSMEA==", - "dev": true - }, - "typescript-eslint-parser": { - "version": "22.0.0", - "resolved": "https://registry.npmjs.org/typescript-eslint-parser/-/typescript-eslint-parser-22.0.0.tgz", - "integrity": "sha512-pD8D7oTeRwWvFVxK3PaY6FYAiZsuRXFkIc2+1xkwCT3NduySgCgjeAkR5/dnIWecOiFVcEHf4ypXurF02Q6Z3Q==", - "dev": true, - "requires": { - "eslint-scope": "4.0.3", - "eslint-visitor-keys": "1.0.0", - "typescript-estree": "18.0.0" - } - }, - "typescript-estree": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/typescript-estree/-/typescript-estree-18.0.0.tgz", - "integrity": "sha512-HxTWrzFyYOPWA91Ij7xL9mNUVpGTKLH2KiaBn28CMbYgX2zgWdJqU9hO7Are+pAPAqY91NxAYoaAyDDZ3rLj2A==", - "dev": true, - "requires": { - "lodash.unescape": "4.0.1", - "semver": "5.5.0" - }, - "dependencies": { - "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", - "dev": true - } - } - }, - "uglify-js": { - "version": "3.4.9", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", - "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", - "dev": true, - "optional": true, - "requires": { - "commander": "2.17.1", - "source-map": "0.6.1" - }, - "dependencies": { - "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", - "dev": true, - "optional": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true - } - } - }, - "underscore": { - "version": "1.8.3", - "resolved": "http://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", - "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=", - "dev": true - }, - "underscore-contrib": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/underscore-contrib/-/underscore-contrib-0.3.0.tgz", - "integrity": "sha1-ZltmwkeD+PorGMn4y7Dix9SMJsc=", - "dev": true, - "requires": { - "underscore": "1.6.0" - }, - "dependencies": { - "underscore": { - "version": "1.6.0", - "resolved": "http://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", - "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", - "dev": true - } - } - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "requires": { - "punycode": "2.1.1" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "requires": { - "assert-plus": "1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "1.3.0" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "2.0.0" - } - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "ws": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.2.tgz", - "integrity": "sha512-rfUqzvz0WxmSXtJpPMX2EeASXabOrSMk1ruMOV3JBTBjo4ac2lDjGGsbQSyxj8Odhw5fBib8ZKEjDNvgouNKYw==", - "requires": { - "async-limiter": "1.0.0" - } - }, - "xmlcreate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-1.0.2.tgz", - "integrity": "sha1-+mv3YqYKQT+z3Y9LA8WyaSONMI8=", - "dev": true - }, - "xmlhttprequest-ssl": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", - "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=" - }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true - }, - "yeast": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", - "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" - }, - "yn": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.0.0.tgz", - "integrity": "sha512-+Wo/p5VRfxUgBUGy2j/6KX2mj9AYJWOHuhMjMcbBFc3y54o9/4buK1ksBvuiK01C3kby8DH9lSmJdSxw+4G/2Q==", - "dev": true - } - } + "name": "bitcore-wallet-service", + "version": "8.1.1", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/runtime": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.3.tgz", + "integrity": "sha512-9lsJwJLxDh/T3Q3SZszfWOTkk3pHbkmH+3KY+zwIDmsNlxsumuhS2TH3NIpktU4kNvfzy+k3eLT7aTJSPTo0OA==", + "requires": { + "regenerator-runtime": "0.13.2" + } + }, + "@sendgrid/client": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@sendgrid/client/-/client-6.3.0.tgz", + "integrity": "sha512-fTy8vRpA9Whtf8ULQr/0vkSZaQvGQ97rY5N5PrevKRtugJMsJqFMKO0pwzEWeqITSg71aMMTj57QTgw3SjZvnQ==", + "requires": { + "@sendgrid/helpers": "6.3.0", + "@types/request": "2.48.1", + "request": "2.88.0" + } + }, + "@sendgrid/helpers": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@sendgrid/helpers/-/helpers-6.3.0.tgz", + "integrity": "sha512-uTFcmhCDFg/2Uhz+z/cLwyLHH0UsblG49hKwdR7nKbWsGKWv4js7W32FlPdXqy2C/plTJ20vcPLgKM1m3F/MjQ==", + "requires": { + "chalk": "2.4.2", + "deepmerge": "2.2.1" + } + }, + "@sendgrid/mail": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/@sendgrid/mail/-/mail-6.3.1.tgz", + "integrity": "sha512-5zIeAV9iU+0hQkrOQ/D4RB2MfpK+lNbOortIfQdCh95aMDF/TRc9WB8FGNhmQrx9YMuJTms5eiBklF0Fi/dbVg==", + "requires": { + "@sendgrid/client": "6.3.0", + "@sendgrid/helpers": "6.3.0" + } + }, + "@sinonjs/commons": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.4.0.tgz", + "integrity": "sha512-9jHK3YF/8HtJ9wCAbG+j8cD0i0+ATS9A7gXFqS36TblLPNy6rEEc+SB0imo91eCboGaBYGV/MT1/br/J+EE7Tw==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + }, + "dependencies": { + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + } + } + }, + "@sinonjs/formatio": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-3.2.1.tgz", + "integrity": "sha512-tsHvOB24rvyvV2+zKMmPkZ7dXX6LSLKZ7aOtXY6Edklp0uRcgGpOsQTTGTcWViFyx4uhWc6GV8QdnALbIbIdeQ==", + "dev": true, + "requires": { + "@sinonjs/commons": "1.4.0", + "@sinonjs/samsam": "3.3.1" + } + }, + "@sinonjs/samsam": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.3.1.tgz", + "integrity": "sha512-wRSfmyd81swH0hA1bxJZJ57xr22kC07a1N4zuIL47yTS04bDk6AoCkczcqHEjcRPmJ+FruGJ9WBQiJwMtIElFw==", + "dev": true, + "requires": { + "@sinonjs/commons": "1.4.0", + "array-from": "2.1.1", + "lodash": "4.17.11" + } + }, + "@sinonjs/text-encoding": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz", + "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==", + "dev": true + }, + "@types/async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/async/-/async-2.4.1.tgz", + "integrity": "sha512-C09BK/wXzbW+/JK9zckhe+FeSbg7NmvVjUWwApnw7ksRpUq3ecGLiq2Aw1LlY4Z/VmtdhSaIs7jO5/MWRYMcOA==", + "dev": true + }, + "@types/bn.js": { + "version": "4.11.5", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.5.tgz", + "integrity": "sha512-AEAZcIZga0JgVMHNtl1CprA/hXX7/wPt79AgR4XqaDt7jyj3QWYw6LPoOiznPtugDmlubUnAahMs2PFxGcQrng==", + "requires": { + "@types/node": "11.13.0" + } + }, + "@types/body-parser": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.0.tgz", + "integrity": "sha512-a2+YeUjPkztKJu5aIF2yArYFQQp8d51wZ7DavSHjFuY1mqVgidGyzEQ41JIVNy82fXj8yPgy2vJmfIywgESW6w==", + "dev": true, + "requires": { + "@types/connect": "3.4.32", + "@types/node": "11.13.0" + } + }, + "@types/bson": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/bson/-/bson-4.0.0.tgz", + "integrity": "sha512-pq/rqJwJWkbS10crsG5bgnrisL8pML79KlMKQMoQwLUjlPAkrUHMvHJ3oGwE7WHR61Lv/nadMwXVAD2b+fpD8Q==", + "dev": true, + "requires": { + "@types/node": "11.13.0" + } + }, + "@types/caseless": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.2.tgz", + "integrity": "sha512-6ckxMjBBD8URvjB6J3NcnuAn5Pkl7t3TizAg+xdlzzQGSPSmBcXf8KoIH0ua/i+tio+ZRUHEXp0HEmvaR4kt0w==" + }, + "@types/connect": { + "version": "3.4.32", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.32.tgz", + "integrity": "sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg==", + "dev": true, + "requires": { + "@types/node": "11.13.0" + } + }, + "@types/events": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", + "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", + "dev": true + }, + "@types/express": { + "version": "4.16.1", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.16.1.tgz", + "integrity": "sha512-V0clmJow23WeyblmACoxbHBu2JKlE5TiIme6Lem14FnPW9gsttyHtk6wq7njcdIWH1njAaFgR8gW09lgY98gQg==", + "dev": true, + "requires": { + "@types/body-parser": "1.17.0", + "@types/express-serve-static-core": "4.16.2", + "@types/serve-static": "1.13.2" + } + }, + "@types/express-serve-static-core": { + "version": "4.16.2", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.16.2.tgz", + "integrity": "sha512-qgc8tjnDrc789rAQed8NoiFLV5VGcItA4yWNFphqGU0RcuuQngD00g3LHhWIK3HQ2XeDgVCmlNPDlqi3fWBHnQ==", + "dev": true, + "requires": { + "@types/node": "11.13.0", + "@types/range-parser": "1.2.3" + } + }, + "@types/form-data": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-2.2.1.tgz", + "integrity": "sha512-JAMFhOaHIciYVh8fb5/83nmuO/AHwmto+Hq7a9y8FzLDcC1KCU344XDOMEmahnrTFlHjgh4L0WJFczNIX2GxnQ==", + "requires": { + "@types/node": "11.13.0" + } + }, + "@types/lodash": { + "version": "4.14.123", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.123.tgz", + "integrity": "sha512-pQvPkc4Nltyx7G1Ww45OjVqUsJP4UsZm+GWJpigXgkikZqJgRm4c48g027o6tdgubWHwFRF15iFd+Y4Pmqv6+Q==", + "dev": true + }, + "@types/mime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.1.tgz", + "integrity": "sha512-FwI9gX75FgVBJ7ywgnq/P7tw+/o1GUbtP0KzbtusLigAOgIgNISRK0ZPl4qertvXSIE8YbsVJueQ90cDt9YYyw==", + "dev": true + }, + "@types/moment": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/@types/moment/-/moment-2.13.0.tgz", + "integrity": "sha1-YE69GJvDvDShVIaJQE5hoqSqyJY=", + "dev": true, + "requires": { + "moment": "2.24.0" + } + }, + "@types/mongodb": { + "version": "2.2.23", + "resolved": "https://registry.npmjs.org/@types/mongodb/-/mongodb-2.2.23.tgz", + "integrity": "sha512-zK2txG9cGIxHZLRKq59mmb4uYbfl/b+G3RcSuW7HHEvUj/O0gsRLgprQu6n/Gn5Mh+PbnAIgrgh4Zhj+OjsRBQ==", + "dev": true, + "requires": { + "@types/bson": "4.0.0", + "@types/events": "3.0.0", + "@types/node": "11.13.0" + } + }, + "@types/node": { + "version": "11.13.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-11.13.0.tgz", + "integrity": "sha512-rx29MMkRdVmzunmiA4lzBYJNnXsW/PhG4kMBy2ATsYaDjGGR75dCFEVVROKpNwlVdcUX3xxlghKQOeDPBJobng==" + }, + "@types/nodemailer": { + "version": "4.6.7", + "resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-4.6.7.tgz", + "integrity": "sha512-slR1wz8I8O20CHNBNhYhObRZ8zeG5FnfFUWLZKk1f0UDYaLZOsBjUfCC9VEFi7oSRCC886DfKmq1JncPDMOrng==", + "dev": true, + "requires": { + "@types/node": "11.13.0" + } + }, + "@types/range-parser": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", + "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==", + "dev": true + }, + "@types/request": { + "version": "2.48.1", + "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.1.tgz", + "integrity": "sha512-ZgEZ1TiD+KGA9LiAAPPJL68Id2UWfeSO62ijSXZjFJArVV+2pKcsVHmrcu+1oiE3q6eDGiFiSolRc4JHoerBBg==", + "requires": { + "@types/caseless": "0.12.2", + "@types/form-data": "2.2.1", + "@types/node": "11.13.0", + "@types/tough-cookie": "2.3.5" + } + }, + "@types/serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-/BZ4QRLpH/bNYgZgwhKEh+5AsboDBcUdlBYgzoLX0fpj3Y2gp6EApyOlM3bK53wQS/OE1SrdSYBAbux2D1528Q==", + "dev": true, + "requires": { + "@types/express-serve-static-core": "4.16.2", + "@types/mime": "2.0.1" + } + }, + "@types/socket.io": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@types/socket.io/-/socket.io-2.1.2.tgz", + "integrity": "sha512-Ind+4qMNfQ62llyB4IMs1D8znMEBsMKohZBPqfBUIXqLQ9bdtWIbNTBWwtdcBWJKnokMZGcmWOOKslatni5vtA==", + "dev": true, + "requires": { + "@types/node": "11.13.0" + } + }, + "@types/socket.io-client": { + "version": "1.4.32", + "resolved": "https://registry.npmjs.org/@types/socket.io-client/-/socket.io-client-1.4.32.tgz", + "integrity": "sha512-Vs55Kq8F+OWvy1RLA31rT+cAyemzgm0EWNeax6BWF8H7QiiOYMJIdcwSDdm5LVgfEkoepsWkS+40+WNb7BUMbg==", + "dev": true + }, + "@types/tough-cookie": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-2.3.5.tgz", + "integrity": "sha512-SCcK7mvGi3+ZNz833RRjFIxrn4gI1PPR3NtuIS+6vMkvmsGjosqTJwRt5bAEFLRz+wtJMWv8+uOnZf2hi2QXTg==" + }, + "abbrev": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", + "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", + "dev": true + }, + "abstract-leveldown": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz", + "integrity": "sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==", + "dev": true, + "requires": { + "xtend": "4.0.1" + } + }, + "accepts": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "requires": { + "mime-types": "2.1.22", + "negotiator": "0.6.1" + } + }, + "aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0=" + }, + "after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" + }, + "ajv": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", + "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", + "requires": { + "fast-deep-equal": "2.0.1", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.4.1", + "uri-js": "4.2.2" + } + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true, + "optional": true + }, + "ansi": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz", + "integrity": "sha1-DELU+xcWDVqa8eSEus4cZpIsGyE=" + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "1.9.3" + } + }, + "arg": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.0.tgz", + "integrity": "sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg==", + "dev": true + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "1.0.3" + } + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "array-from": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz", + "integrity": "sha1-z+nYwmYoudxa7MYqn12PHzUsEZU=", + "dev": true + }, + "arraybuffer.slice": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", + "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==" + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "requires": { + "safer-buffer": "2.1.2" + } + }, + "asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "requires": { + "bn.js": "4.11.8", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "assertion-error": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.0.0.tgz", + "integrity": "sha1-x/hUOP3UZrx8oWq5DIFRN5el0js=", + "dev": true + }, + "async": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=" + }, + "async-limiter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + }, + "aws4": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "babylon": { + "version": "7.0.0-beta.19", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.19.tgz", + "integrity": "sha512-Vg0C9s/REX6/WIXN37UKpv5ZhRi6A4pjHlpkE34+8/a6c2W1Q692n3hmc+SZG5lKRnaExLUbxtJ1SVT+KaCQ/A==", + "dev": true + }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base-x": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.5.tgz", + "integrity": "sha512-C3picSgzPSLE+jW3tcBzJoGwitOtazb5B+5YmAxZm2ybmTi9LNgAtDO/jjVEBZwHoXmDBZ9m/IELj3elJVRBcA==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=" + }, + "base64-js": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", + "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==" + }, + "base64id": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", + "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=" + }, + "basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "requires": { + "tweetnacl": "0.14.5" + } + }, + "bcryptjs": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", + "integrity": "sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms=" + }, + "better-assert": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", + "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "requires": { + "callsite": "1.0.0" + } + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "bip66": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/bip66/-/bip66-1.1.5.tgz", + "integrity": "sha1-AfqHSHhcpwlV1QESF9GzE5lpyiI=", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "bitcore-lib": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/bitcore-lib/-/bitcore-lib-8.1.1.tgz", + "integrity": "sha512-YyzpyKtwBIeOUu55oqltfk3/Uz8SYi1ayWq3JnaoGSzR4BNpD54sYejv2gZ5TuDe4KwBqvA2C5X1zkPBtlkGhQ==", + "requires": { + "bn.js": "4.11.8", + "bs58": "4.0.1", + "buffer-compare": "1.1.1", + "elliptic": "6.4.0", + "inherits": "2.0.1", + "lodash": "4.17.11" + }, + "dependencies": { + "bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", + "requires": { + "base-x": "3.0.5" + } + }, + "buffer-compare": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-compare/-/buffer-compare-1.1.1.tgz", + "integrity": "sha1-W+e+hTr4kZjR9N3AkNHWakiu9ZY=" + }, + "elliptic": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", + "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0", + "hash.js": "1.1.7", + "hmac-drbg": "1.0.1", + "inherits": "2.0.1", + "minimalistic-assert": "1.0.1", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" + } + } + }, + "bitcore-lib-cash": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/bitcore-lib-cash/-/bitcore-lib-cash-8.1.1.tgz", + "integrity": "sha512-1yI8T87SL0/jCGvIqC8LH7bbe6Y22nob4jN6dW3QIrTWq8cr+aC9bFkpq/E5FDokX+nuVAHSmIjOlMu+xBvQRw==", + "requires": { + "bitcore-lib": "8.1.1", + "bn.js": "4.11.8", + "bs58": "4.0.1", + "buffer-compare": "1.1.1", + "elliptic": "6.4.0", + "inherits": "2.0.1", + "lodash": "4.17.11" + }, + "dependencies": { + "bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", + "requires": { + "base-x": "3.0.5" + } + }, + "buffer-compare": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-compare/-/buffer-compare-1.1.1.tgz", + "integrity": "sha1-W+e+hTr4kZjR9N3AkNHWakiu9ZY=" + }, + "elliptic": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", + "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0", + "hash.js": "1.1.7", + "hmac-drbg": "1.0.1", + "inherits": "2.0.1", + "minimalistic-assert": "1.0.1", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" + } + } + }, + "bl": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", + "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", + "requires": { + "readable-stream": "2.3.6", + "safe-buffer": "5.1.2" + }, + "dependencies": { + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "5.1.2" + } + } + } + }, + "blob": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", + "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==" + }, + "bluebird": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.4.tgz", + "integrity": "sha512-FG+nFEZChJrbQ9tIccIfZJBz3J7mLrAhxakAbnrJWn8d7aKOC+LWifa0G+p4ZqKp4y13T7juYvdhq9NzKdsrjw==" + }, + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" + }, + "body-parser": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", + "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", + "requires": { + "bytes": "3.0.0", + "content-type": "1.0.4", + "debug": "2.6.9", + "depd": "1.1.2", + "http-errors": "1.6.3", + "iconv-lite": "0.4.23", + "on-finished": "2.3.0", + "qs": "6.5.2", + "raw-body": "2.3.3", + "type-is": "1.6.16" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "requires": { + "buffer-xor": "1.0.3", + "cipher-base": "1.0.4", + "create-hash": "1.2.0", + "evp_bytestokey": "1.0.3", + "inherits": "2.0.3", + "safe-buffer": "5.1.2" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "requires": { + "browserify-aes": "1.2.0", + "browserify-des": "1.0.2", + "evp_bytestokey": "1.0.3" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "requires": { + "cipher-base": "1.0.4", + "des.js": "1.0.0", + "inherits": "2.0.3", + "safe-buffer": "5.1.2" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "requires": { + "bn.js": "4.11.8", + "randombytes": "2.1.0" + } + }, + "browserify-sha3": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/browserify-sha3/-/browserify-sha3-0.0.4.tgz", + "integrity": "sha1-CGxHuMgjFsnUcCLCYYWVRXbdjiY=", + "requires": { + "js-sha3": "0.6.1", + "safe-buffer": "5.1.2" + } + }, + "browserify-sign": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "requires": { + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "elliptic": "6.4.1", + "inherits": "2.0.3", + "parse-asn1": "5.1.4" + } + }, + "bson": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/bson/-/bson-1.0.9.tgz", + "integrity": "sha512-IQX9/h7WdMBIW/q/++tGd+emQr0XMdeZ6icnT/74Xk9fnabWn+gZgpE+9V+gujL3hhJOoNrnDVY7tWdzc7NUTg==" + }, + "buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", + "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", + "requires": { + "base64-js": "1.3.0", + "ieee754": "1.1.13" + } + }, + "buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "requires": { + "buffer-alloc-unsafe": "1.1.0", + "buffer-fill": "1.0.0" + } + }, + "buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" + }, + "buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "buffer-shims": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", + "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=" + }, + "buffer-to-arraybuffer": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", + "integrity": "sha1-YGSkD6dutDxyOrqe+PbhIW0QURo=" + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=" + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "catharsis": { + "version": "0.8.9", + "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.8.9.tgz", + "integrity": "sha1-mMyJDKZS3S7w5ws3klMQ/56Q/Is=", + "dev": true, + "requires": { + "underscore-contrib": "0.3.0" + } + }, + "chai": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-1.10.0.tgz", + "integrity": "sha1-5AMcyHZURhp1lD5aNatG6vOcHrk=", + "dev": true, + "requires": { + "assertion-error": "1.0.0", + "deep-eql": "0.1.3" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.5.0" + } + }, + "chownr": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", + "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==" + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.2" + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "combined-stream": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", + "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", + "requires": { + "delayed-stream": "1.0.0" + } + }, + "commander": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", + "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", + "dev": true + }, + "component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + }, + "component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" + }, + "compressible": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.16.tgz", + "integrity": "sha512-JQfEOdnI7dASwCuSPWIeVYwc/zMsu/+tRhoUvEfXz2gxOA2DNjmG5vhtFdBlhWPPGo+RdT9S3tgc/uH5qgDiiA==", + "requires": { + "mime-db": "1.38.0" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "requires": { + "accepts": "1.3.5", + "bytes": "3.0.0", + "compressible": "2.0.16", + "debug": "2.6.9", + "on-headers": "1.0.2", + "safe-buffer": "5.1.2", + "vary": "1.1.2" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "cookiejar": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz", + "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "requires": { + "object-assign": "4.1.1", + "vary": "1.1.2" + } + }, + "coveralls": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.0.3.tgz", + "integrity": "sha512-viNfeGlda2zJr8Gj1zqXpDMRjw9uM54p7wzZdvLRyOgnAfCe974Dq4veZkjJdxQXbmdppu6flEajFYseHYaUhg==", + "dev": true, + "requires": { + "growl": "1.10.5", + "js-yaml": "3.13.0", + "lcov-parse": "0.0.10", + "log-driver": "1.2.7", + "minimist": "1.2.0", + "request": "2.88.0" + } + }, + "create-ecdh": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", + "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "requires": { + "bn.js": "4.11.8", + "elliptic": "6.4.1" + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "requires": { + "cipher-base": "1.0.4", + "inherits": "2.0.3", + "md5.js": "1.3.5", + "ripemd160": "2.0.2", + "sha.js": "2.4.11" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "requires": { + "cipher-base": "1.0.4", + "create-hash": "1.2.0", + "inherits": "2.0.3", + "ripemd160": "2.0.2", + "safe-buffer": "5.1.2", + "sha.js": "2.4.11" + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "requires": { + "browserify-cipher": "1.0.1", + "browserify-sign": "4.0.4", + "create-ecdh": "4.0.3", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "diffie-hellman": "5.0.3", + "inherits": "2.0.3", + "pbkdf2": "3.0.17", + "public-encrypt": "4.0.3", + "randombytes": "2.1.0", + "randomfill": "1.0.4" + } + }, + "crypto-wallet-core": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/crypto-wallet-core/-/crypto-wallet-core-8.1.1.tgz", + "integrity": "sha512-/58THPev4oSAFijPq2bgO7G6RvMNhIrJsJXKdM3iqWLOct243IGHunmFBFuGXkCB36UACt5/NJZcyqD75D+cUg==", + "requires": { + "bcryptjs": "2.4.3", + "bitcore-lib": "8.1.1", + "bitcore-lib-cash": "8.1.1", + "elliptic": "6.4.1", + "ethereumjs-tx": "1.3.7", + "ethereumjs-util": "6.1.0", + "secp256k1": "3.6.2", + "web3": "1.0.0-beta.51" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "1.0.0" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + }, + "decompress": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.0.tgz", + "integrity": "sha1-eu3YVCflqS2s/lVnSnxQXpbQH50=", + "requires": { + "decompress-tar": "4.1.1", + "decompress-tarbz2": "4.1.1", + "decompress-targz": "4.1.1", + "decompress-unzip": "4.0.1", + "graceful-fs": "4.1.15", + "make-dir": "1.3.0", + "pify": "2.3.0", + "strip-dirs": "2.1.0" + } + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "requires": { + "mimic-response": "1.0.1" + } + }, + "decompress-tar": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", + "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", + "requires": { + "file-type": "5.2.0", + "is-stream": "1.1.0", + "tar-stream": "1.6.2" + } + }, + "decompress-tarbz2": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", + "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", + "requires": { + "decompress-tar": "4.1.1", + "file-type": "6.2.0", + "is-stream": "1.1.0", + "seek-bzip": "1.0.5", + "unbzip2-stream": "1.3.3" + }, + "dependencies": { + "file-type": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", + "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==" + } + } + }, + "decompress-targz": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", + "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", + "requires": { + "decompress-tar": "4.1.1", + "file-type": "5.2.0", + "is-stream": "1.1.0" + } + }, + "decompress-unzip": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", + "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", + "requires": { + "file-type": "3.9.0", + "get-stream": "2.3.1", + "pify": "2.3.0", + "yauzl": "2.10.0" + }, + "dependencies": { + "file-type": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=" + } + } + }, + "deep-eql": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz", + "integrity": "sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=", + "dev": true, + "requires": { + "type-detect": "0.1.1" + } + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "deepmerge": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz", + "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==" + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "requires": { + "clone": "1.0.4" + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "requires": { + "object-keys": "1.1.0" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "des.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" + } + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "requires": { + "bn.js": "4.11.8", + "miller-rabin": "4.0.1", + "randombytes": "2.1.0" + } + }, + "dom-walk": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", + "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=" + }, + "drbg.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/drbg.js/-/drbg.js-1.0.1.tgz", + "integrity": "sha1-Pja2xCs3BDgjzbwzLVjzHiRFSAs=", + "requires": { + "browserify-aes": "1.2.0", + "create-hash": "1.2.0", + "create-hmac": "1.1.7" + } + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "requires": { + "jsbn": "0.1.1", + "safer-buffer": "2.1.2" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "elliptic": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", + "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0", + "hash.js": "1.1.7", + "hmac-drbg": "1.0.1", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "email-validator": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/email-validator/-/email-validator-1.2.3.tgz", + "integrity": "sha512-WZmY6vj6bAWUzr1P2OmRkw4E3FWwdnKxWG/Ssfvr+kp+0leuXzsX2EHNwjg8+KW2DfAiFWiV+jn5n1P7TlE7lw==" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "requires": { + "once": "1.4.0" + } + }, + "engine.io": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.3.2.tgz", + "integrity": "sha512-AsaA9KG7cWPXWHp5FvHdDWY3AMWeZ8x+2pUVLcn71qE5AtAzgGbxuclOytygskw8XGmiQafTmnI9Bix3uihu2w==", + "requires": { + "accepts": "1.3.5", + "base64id": "1.0.0", + "cookie": "0.3.1", + "debug": "3.1.0", + "engine.io-parser": "2.1.3", + "ws": "6.1.4" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "engine.io-client": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.3.2.tgz", + "integrity": "sha512-y0CPINnhMvPuwtqXfsGuWE8BB66+B6wTtCofQDRecMQPYX3MYUZXFNKDhdrSe3EVjgOu4V3rxdeqN/Tr91IgbQ==", + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "3.1.0", + "engine.io-parser": "2.1.3", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "6.1.4", + "xmlhttprequest-ssl": "1.5.5", + "yeast": "0.1.2" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "engine.io-parser": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", + "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "0.0.7", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.5", + "has-binary2": "1.0.3" + } + }, + "errr": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/errr/-/errr-2.6.1.tgz", + "integrity": "sha512-h4SrH28BniB6zOZ/19ZOHdonCwLI7ljC8MyDabH+6dhz66Ws+Xy0MnHwf4dn55FRdZWdVVpbrSpI5YYOscV29A==" + }, + "es-abstract": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", + "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", + "requires": { + "es-to-primitive": "1.2.0", + "function-bind": "1.1.1", + "has": "1.0.3", + "is-callable": "1.1.4", + "is-regex": "1.0.4", + "object-keys": "1.1.0" + } + }, + "es-to-primitive": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", + "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "requires": { + "is-callable": "1.1.4", + "is-date-object": "1.0.1", + "is-symbol": "1.0.2" + } + }, + "es6-promise": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.2.1.tgz", + "integrity": "sha1-7FYjOGgDKQkgcXDDlEjiREndH8Q=" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "escodegen": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", + "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", + "dev": true, + "requires": { + "esprima": "2.7.3", + "estraverse": "1.9.3", + "esutils": "2.0.2", + "optionator": "0.8.2", + "source-map": "0.2.0" + }, + "dependencies": { + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + } + } + }, + "eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "dev": true, + "requires": { + "esrecurse": "4.2.1", + "estraverse": "4.2.0" + }, + "dependencies": { + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", + "dev": true + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "dev": true, + "requires": { + "estraverse": "4.2.0" + }, + "dependencies": { + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true + } + } + }, + "estraverse": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", + "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "eth-ens-namehash": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz", + "integrity": "sha1-IprEbsqG1S4MmR58sq74P/D2i88=", + "requires": { + "idna-uts46-hx": "2.3.1", + "js-sha3": "0.5.7" + }, + "dependencies": { + "js-sha3": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", + "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=" + } + } + }, + "eth-lib": { + "version": "0.1.27", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.27.tgz", + "integrity": "sha512-B8czsfkJYzn2UIEMwjc7Mbj+Cy72V+/OXH/tb44LV8jhrjizQJJ325xMOMyk3+ETa6r6oi0jsUY14+om8mQMWA==", + "requires": { + "bn.js": "4.11.8", + "elliptic": "6.4.1", + "keccakjs": "0.2.3", + "nano-json-stream-parser": "0.1.2", + "servify": "0.1.12", + "ws": "3.3.3", + "xhr-request-promise": "0.1.2" + }, + "dependencies": { + "ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "requires": { + "async-limiter": "1.0.0", + "safe-buffer": "5.1.2", + "ultron": "1.1.1" + } + } + } + }, + "ethereum-common": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.0.18.tgz", + "integrity": "sha1-L9w1dvIykDNYl26znaeDIT/5Uj8=" + }, + "ethereumjs-tx": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-1.3.7.tgz", + "integrity": "sha512-wvLMxzt1RPhAQ9Yi3/HKZTn0FZYpnsmQdbKYfUUpi4j1SEIcbkd9tndVjcPrufY3V7j2IebOpC00Zp2P/Ay2kA==", + "requires": { + "ethereum-common": "0.0.18", + "ethereumjs-util": "5.2.0" + }, + "dependencies": { + "ethereumjs-util": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz", + "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", + "requires": { + "bn.js": "4.11.8", + "create-hash": "1.2.0", + "ethjs-util": "0.1.6", + "keccak": "1.4.0", + "rlp": "2.2.3", + "safe-buffer": "5.1.2", + "secp256k1": "3.6.2" + } + } + } + }, + "ethereumjs-util": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.1.0.tgz", + "integrity": "sha512-URESKMFbDeJxnAxPppnk2fN6Y3BIatn9fwn76Lm8bQlt+s52TpG8dN9M66MLPuRAiAOIqL3dfwqWJf0sd0fL0Q==", + "requires": { + "bn.js": "4.11.8", + "create-hash": "1.2.0", + "ethjs-util": "0.1.6", + "keccak": "1.4.0", + "rlp": "2.2.3", + "safe-buffer": "5.1.2", + "secp256k1": "3.6.2" + } + }, + "ethers": { + "version": "4.0.27", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.27.tgz", + "integrity": "sha512-+DXZLP/tyFnXWxqr2fXLT67KlGUfLuvDkHSOtSC9TUVG9OIj6yrG5JPeXRMYo15xkOYwnjgdMKrXp5V94rtjJA==", + "requires": { + "@types/node": "10.14.4", + "aes-js": "3.0.0", + "bn.js": "4.11.8", + "elliptic": "6.3.3", + "hash.js": "1.1.3", + "js-sha3": "0.5.7", + "scrypt-js": "2.0.4", + "setimmediate": "1.0.4", + "uuid": "2.0.1", + "xmlhttprequest": "1.8.0" + }, + "dependencies": { + "@types/node": { + "version": "10.14.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.4.tgz", + "integrity": "sha512-DT25xX/YgyPKiHFOpNuANIQIVvYEwCWXgK2jYYwqgaMrYE6+tq+DtmMwlD3drl6DJbUwtlIDnn0d7tIn/EbXBg==" + }, + "elliptic": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz", + "integrity": "sha1-VILZZG1UvLif19mU/J4ulWiHbj8=", + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0", + "hash.js": "1.1.3", + "inherits": "2.0.3" + } + }, + "hash.js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", + "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" + } + }, + "js-sha3": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", + "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=" + }, + "setimmediate": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz", + "integrity": "sha1-IOgd5iLUoCWIzgyNqJc8vPHTE48=" + }, + "uuid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", + "integrity": "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w=" + } + } + }, + "ethjs-unit": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", + "integrity": "sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk=", + "requires": { + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" + } + } + }, + "ethjs-util": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", + "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", + "requires": { + "is-hex-prefixed": "1.0.0", + "strip-hex-prefix": "1.0.0" + } + }, + "eventemitter3": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", + "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==" + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "requires": { + "md5.js": "1.3.5", + "safe-buffer": "5.1.2" + } + }, + "express": { + "version": "4.16.4", + "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", + "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", + "requires": { + "accepts": "1.3.5", + "array-flatten": "1.1.1", + "body-parser": "1.18.3", + "content-disposition": "0.5.2", + "content-type": "1.0.4", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "1.1.2", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", + "finalhandler": "1.1.1", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "1.1.2", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "path-to-regexp": "0.1.7", + "proxy-addr": "2.0.4", + "qs": "6.5.2", + "range-parser": "1.2.0", + "safe-buffer": "5.1.2", + "send": "0.16.2", + "serve-static": "1.13.2", + "setprototypeof": "1.1.0", + "statuses": "1.4.0", + "type-is": "1.6.16", + "utils-merge": "1.0.1", + "vary": "1.1.2" + }, + "dependencies": { + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + } + } + }, + "express-rate-limit": { + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-2.14.2.tgz", + "integrity": "sha512-aVYzfYU2Bv+v6ry/fBpTrX8MorM0p/TeDnx4CqiLevg9ftG8eW+pyuZ6JEreGdG2t1vXyTGHuSNRKLeYixuqZg==", + "requires": { + "defaults": "1.0.3" + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "requires": { + "pend": "1.2.0" + } + }, + "file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=" + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + }, + "fill-keys": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fill-keys/-/fill-keys-1.0.2.tgz", + "integrity": "sha1-mo+jb06K1jTjv2tPPIiCVRRS6yA=", + "dev": true, + "requires": { + "is-object": "1.0.1", + "merge-descriptors": "1.0.1" + } + }, + "finalhandler": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", + "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", + "requires": { + "debug": "2.6.9", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "statuses": "1.4.0", + "unpipe": "1.0.0" + }, + "dependencies": { + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + } + } + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "requires": { + "is-callable": "1.1.4" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.7", + "mime-types": "2.1.22" + } + }, + "formidable": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.1.tgz", + "integrity": "sha512-Fs9VRguL0gqGHkXS5GQiMCr1VhZBxz0JnJs4JmMp/2jL18Fmbzvv7vOFRU+U8TBkHEE/CX1qDXzJplVULgsLeg==", + "dev": true + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "requires": { + "graceful-fs": "4.1.15", + "jsonfile": "4.0.0", + "universalify": "0.1.2" + } + }, + "fs-minipass": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", + "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", + "requires": { + "minipass": "2.3.5" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "get-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", + "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", + "requires": { + "object-assign": "4.1.1", + "pinkie-promise": "2.0.1" + } + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "1.0.0" + } + }, + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true, + "requires": { + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "global": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", + "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", + "requires": { + "min-document": "2.19.0", + "process": "0.5.2" + } + }, + "got": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", + "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", + "requires": { + "decompress-response": "3.3.0", + "duplexer3": "0.1.4", + "get-stream": "3.0.0", + "is-plain-obj": "1.1.0", + "is-retry-allowed": "1.1.0", + "is-stream": "1.1.0", + "isurl": "1.0.0", + "lowercase-keys": "1.0.1", + "p-cancelable": "0.3.0", + "p-timeout": "1.2.1", + "safe-buffer": "5.1.2", + "timed-out": "4.0.1", + "url-parse-lax": "1.0.0", + "url-to-options": "1.0.1" + }, + "dependencies": { + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + } + } + }, + "graceful-fs": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" + }, + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" + }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true + }, + "handlebars": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.1.tgz", + "integrity": "sha512-3Zhi6C0euYZL5sM0Zcy7lInLXKQ+YLcF/olbN010mzGQ4XVm50JeyBnMqofHh696GrciGruC7kCcApPDJvVgwA==", + "dev": true, + "requires": { + "neo-async": "2.6.0", + "optimist": "0.6.1", + "source-map": "0.6.1", + "uglify-js": "3.5.3" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "requires": { + "ajv": "6.10.0", + "har-schema": "2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "has-binary2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", + "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", + "requires": { + "isarray": "2.0.1" + }, + "dependencies": { + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + } + } + }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-symbol-support-x": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", + "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==" + }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" + }, + "has-to-string-tag-x": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", + "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", + "requires": { + "has-symbol-support-x": "1.4.2" + } + }, + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.2" + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" + } + }, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "requires": { + "hash.js": "1.1.7", + "minimalistic-assert": "1.0.1", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "requires": { + "depd": "1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": "1.5.0" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "1.0.0", + "jsprim": "1.4.1", + "sshpk": "1.16.1" + } + }, + "iconv-lite": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "requires": { + "safer-buffer": "2.1.2" + } + }, + "idna-uts46-hx": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz", + "integrity": "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==", + "requires": { + "punycode": "2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", + "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=" + } + } + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, + "immediate": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz", + "integrity": "sha1-0UD6j2FGWb1lQSMwl92qwlzdmRw=", + "dev": true + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ipaddr.js": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", + "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=" + }, + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" + }, + "is-function": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.1.tgz", + "integrity": "sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=" + }, + "is-hex-prefixed": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ=" + }, + "is-natural-number": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", + "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=" + }, + "is-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", + "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=" + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" + }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "requires": { + "has": "1.0.3" + } + }, + "is-retry-allowed": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", + "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=" + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "is-symbol": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "requires": { + "has-symbols": "1.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "istanbul": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", + "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", + "dev": true, + "requires": { + "abbrev": "1.0.9", + "async": "1.5.2", + "escodegen": "1.8.1", + "esprima": "2.7.3", + "glob": "5.0.15", + "handlebars": "4.1.1", + "js-yaml": "3.13.0", + "mkdirp": "0.5.1", + "nopt": "3.0.6", + "once": "1.4.0", + "resolve": "1.1.7", + "supports-color": "3.2.3", + "which": "1.3.1", + "wordwrap": "1.0.0" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "isurl": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", + "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", + "requires": { + "has-to-string-tag-x": "1.4.1", + "is-object": "1.0.1" + } + }, + "js-sha3": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.6.1.tgz", + "integrity": "sha1-W4n3enR3Z5h39YxKB1JAk0sflcA=" + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "js-yaml": { + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.0.tgz", + "integrity": "sha512-pZZoSxcCYco+DIKBTimr67J6Hy+EYGZDY/HCWC+iAEA9h1ByhMXAIVUXMcMFpOCxQ/xjXmPI2MkDL5HRm5eFrQ==", + "dev": true, + "requires": { + "argparse": "1.0.10", + "esprima": "4.0.1" + } + }, + "js2xmlparser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-3.0.0.tgz", + "integrity": "sha1-P7YOqgicVED5MZ9RdgzNB+JJlzM=", + "dev": true, + "requires": { + "xmlcreate": "1.0.2" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + }, + "jsdoc": { + "version": "3.5.5", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.5.5.tgz", + "integrity": "sha512-6PxB65TAU4WO0Wzyr/4/YhlGovXl0EVYfpKbpSroSj0qBxT4/xod/l40Opkm38dRHRdQgdeY836M0uVnJQG7kg==", + "dev": true, + "requires": { + "babylon": "7.0.0-beta.19", + "bluebird": "3.5.4", + "catharsis": "0.8.9", + "escape-string-regexp": "1.0.5", + "js2xmlparser": "3.0.0", + "klaw": "2.0.0", + "marked": "0.3.19", + "mkdirp": "0.5.1", + "requizzle": "0.2.1", + "strip-json-comments": "2.0.1", + "taffydb": "2.6.2", + "underscore": "1.8.3" + } + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "requires": { + "graceful-fs": "4.1.15" + } + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "just-extend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.0.2.tgz", + "integrity": "sha512-FrLwOgm+iXrPV+5zDU6Jqu4gCRXbWEQg2O3SKONsWE4w7AXFRkryS53bpWdaL9cNol+AmR3AEYz6kn+o0fCPnw==", + "dev": true + }, + "keccak": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-1.4.0.tgz", + "integrity": "sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw==", + "requires": { + "bindings": "1.5.0", + "inherits": "2.0.3", + "nan": "2.13.2", + "safe-buffer": "5.1.2" + } + }, + "keccakjs": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/keccakjs/-/keccakjs-0.2.3.tgz", + "integrity": "sha512-BjLkNDcfaZ6l8HBG9tH0tpmDv3sS2mA7FNQxFHpCdzP3Gb2MVruXBSuoM66SnVxKJpAr5dKGdkHD+bDokt8fTg==", + "requires": { + "browserify-sha3": "0.0.4", + "sha3": "1.2.2" + } + }, + "klaw": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-2.0.0.tgz", + "integrity": "sha1-WcEo4Nxc5BAgEVEZTuucv4WGUPY=", + "dev": true, + "requires": { + "graceful-fs": "4.1.15" + } + }, + "lcov-parse": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-0.0.10.tgz", + "integrity": "sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM=", + "dev": true + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "1.1.2", + "type-check": "0.3.2" + } + }, + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" + }, + "lodash.unescape": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz", + "integrity": "sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=", + "dev": true + }, + "log-driver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", + "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", + "dev": true + }, + "lolex": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lolex/-/lolex-3.1.0.tgz", + "integrity": "sha512-zFo5MgCJ0rZ7gQg69S4pqBsLURbFw11X68C18OcJjJQbqaXm2NoTrGl1IMM3TIz0/BnN1tIs2tzmmqvCsOMMjw==", + "dev": true + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" + }, + "ltgt": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", + "integrity": "sha1-81ypHEk/e3PaDgdJUwTxezH4fuU=", + "dev": true + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "requires": { + "pify": "3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } + } + }, + "make-error": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", + "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==", + "dev": true + }, + "marked": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.19.tgz", + "integrity": "sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg==", + "dev": true + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "requires": { + "hash-base": "3.0.4", + "inherits": "2.0.3", + "safe-buffer": "5.1.2" + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "memdown": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/memdown/-/memdown-1.4.1.tgz", + "integrity": "sha1-tOThkhdGZP+65BNhqlAPMRnv4hU=", + "dev": true, + "requires": { + "abstract-leveldown": "2.7.2", + "functional-red-black-tree": "1.0.1", + "immediate": "3.2.3", + "inherits": "2.0.3", + "ltgt": "2.2.1", + "safe-buffer": "5.1.2" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0" + } + }, + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" + }, + "mime-db": { + "version": "1.38.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz", + "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==" + }, + "mime-types": { + "version": "2.1.22", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz", + "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==", + "requires": { + "mime-db": "1.38.0" + } + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" + }, + "min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", + "requires": { + "dom-walk": "0.1.1" + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.11" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "minipass": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", + "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", + "requires": { + "safe-buffer": "5.1.2", + "yallist": "3.0.3" + } + }, + "minizlib": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz", + "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", + "requires": { + "minipass": "2.3.5" + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + } + } + }, + "mkdirp-promise": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz", + "integrity": "sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE=", + "requires": { + "mkdirp": "0.5.1" + } + }, + "mocha": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", + "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", + "dev": true, + "requires": { + "browser-stdout": "1.3.1", + "commander": "2.15.1", + "debug": "3.1.0", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "glob": "7.1.2", + "growl": "1.10.5", + "he": "1.1.1", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "supports-color": "5.4.0" + }, + "dependencies": { + "commander": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", + "dev": true + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "mocha-lcov-reporter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/mocha-lcov-reporter/-/mocha-lcov-reporter-1.3.0.tgz", + "integrity": "sha1-Rpve9PivyaEWBW8HnfYYLQr7A4Q=", + "dev": true + }, + "mock-fs": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.8.0.tgz", + "integrity": "sha512-Gwj4KnJOW15YeTJKO5frFd/WDO5Mc0zxXqL9oHx3+e9rBqW8EVARqQHSaIXznUdljrD6pvbNGW2ZGXKPEfYJfw==" + }, + "module-not-found-error": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/module-not-found-error/-/module-not-found-error-1.0.1.tgz", + "integrity": "sha1-z4tP9PKWQGdNbN0CsOO8UjwrvcA=", + "dev": true + }, + "moment": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", + "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" + }, + "mongodb": { + "version": "2.2.36", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-2.2.36.tgz", + "integrity": "sha512-P2SBLQ8Z0PVx71ngoXwo12+FiSfbNfGOClAao03/bant5DgLNkOPAck5IaJcEk4gKlQhDEURzfR3xuBG1/B+IA==", + "requires": { + "es6-promise": "3.2.1", + "mongodb-core": "2.1.20", + "readable-stream": "2.2.7" + } + }, + "mongodb-core": { + "version": "2.1.20", + "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-2.1.20.tgz", + "integrity": "sha512-IN57CX5/Q1bhDq6ShAR6gIv4koFsZP7L8WOK1S0lR0pVDQaScffSMV5jxubLsmZ7J+UdqmykKw4r9hG3XQEGgQ==", + "requires": { + "bson": "1.0.9", + "require_optional": "1.0.1" + } + }, + "morgan": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz", + "integrity": "sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==", + "requires": { + "basic-auth": "2.0.1", + "debug": "2.6.9", + "depd": "1.1.2", + "on-finished": "2.3.0", + "on-headers": "1.0.2" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "mustache": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/mustache/-/mustache-2.3.2.tgz", + "integrity": "sha512-KpMNwdQsYz3O/SBS1qJ/o3sqUJ5wSb8gb0pul8CO0S56b9Y2ALm8zCfsjPXsqGFfoNBkDwZuZIAjhsZI03gYVQ==" + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + }, + "nan": { + "version": "2.13.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz", + "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==" + }, + "nano-json-stream-parser": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz", + "integrity": "sha1-DMj20OK2IrR5xA1JnEbWS3Vcb18=" + }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" + }, + "neo-async": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz", + "integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==", + "dev": true + }, + "nise": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/nise/-/nise-1.4.10.tgz", + "integrity": "sha512-sa0RRbj53dovjc7wombHmVli9ZihXbXCQ2uH3TNm03DyvOSIQbxg+pbqDKrk2oxMK1rtLGVlKxcB9rrc6X5YjA==", + "dev": true, + "requires": { + "@sinonjs/formatio": "3.2.1", + "@sinonjs/text-encoding": "0.7.1", + "just-extend": "4.0.2", + "lolex": "2.7.5", + "path-to-regexp": "1.7.0" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "lolex": { + "version": "2.7.5", + "resolved": "https://registry.npmjs.org/lolex/-/lolex-2.7.5.tgz", + "integrity": "sha512-l9x0+1offnKKIzYVjyXU2SiwhXDLekRzKyhnbyldPHvC7BvLPVpdNUNR2KeMAiCN2D/kLNttZgQD5WjSxuBx3Q==", + "dev": true + }, + "path-to-regexp": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", + "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=", + "dev": true, + "requires": { + "isarray": "0.0.1" + } + } + } + }, + "nodemailer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-5.1.1.tgz", + "integrity": "sha512-hKGCoeNdFL2W7S76J/Oucbw0/qRlfG815tENdhzcqTpSjKgAN91mFOqU2lQUflRRxFM7iZvCyaFcAR9noc/CqQ==" + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "requires": { + "abbrev": "1.0.9" + } + }, + "npmlog": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-0.1.1.tgz", + "integrity": "sha1-i5ueRAXX7EjDHCNGllqtx6uuyqU=", + "requires": { + "ansi": "0.3.1" + } + }, + "number-to-bn": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", + "integrity": "sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA=", + "requires": { + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" + } + } + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-component": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=" + }, + "object-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz", + "integrity": "sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1.0.2" + } + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "0.0.10", + "wordwrap": "0.0.3" + }, + "dependencies": { + "minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", + "dev": true + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + } + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "0.1.3", + "fast-levenshtein": "2.0.6", + "levn": "0.3.0", + "prelude-ls": "1.1.2", + "type-check": "0.3.2", + "wordwrap": "1.0.0" + } + }, + "p-cancelable": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", + "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==" + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + }, + "p-timeout": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", + "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=", + "requires": { + "p-finally": "1.0.0" + } + }, + "parse-asn1": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.4.tgz", + "integrity": "sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==", + "requires": { + "asn1.js": "4.10.1", + "browserify-aes": "1.2.0", + "create-hash": "1.2.0", + "evp_bytestokey": "1.0.3", + "pbkdf2": "3.0.17", + "safe-buffer": "5.1.2" + } + }, + "parse-headers": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.2.tgz", + "integrity": "sha512-/LypJhzFmyBIDYP9aDVgeyEb5sQfbfY5mnDq4hVhlQ69js87wXfmEI5V3xI6vvXasqebp0oCytYFLxsBVfCzSg==", + "requires": { + "for-each": "0.3.3", + "string.prototype.trim": "1.1.2" + } + }, + "parseqs": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", + "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "requires": { + "better-assert": "1.0.2" + } + }, + "parseuri": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", + "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "requires": { + "better-assert": "1.0.2" + } + }, + "parseurl": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "pbkdf2": { + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", + "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", + "requires": { + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "ripemd160": "2.0.2", + "safe-buffer": "5.1.2", + "sha.js": "2.4.11" + } + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "requires": { + "pinkie": "2.0.4" + } + }, + "preconditions": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/preconditions/-/preconditions-2.2.3.tgz", + "integrity": "sha512-Yjr1+XK/4/L0zJyhNdsD2VNJIvd6ErFVJqXQ6mxRg+yvjfiNgLJ2uTeRXlmGuZ8AlcMFxkkKZZlckydHZe6AwA==", + "requires": { + "errr": "2.6.1", + "lodash": "4.17.11" + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" + }, + "process": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", + "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=" + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" + }, + "proxy-addr": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", + "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", + "requires": { + "forwarded": "0.1.2", + "ipaddr.js": "1.8.0" + } + }, + "proxyquire": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/proxyquire/-/proxyquire-1.8.0.tgz", + "integrity": "sha1-AtUUpb7ZhvBMuyCTrxZ0FTX3ntw=", + "dev": true, + "requires": { + "fill-keys": "1.0.2", + "module-not-found-error": "1.0.1", + "resolve": "1.1.7" + } + }, + "psl": { + "version": "1.1.31", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", + "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==" + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "requires": { + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.2.0", + "parse-asn1": "5.1.4", + "randombytes": "2.1.0", + "safe-buffer": "5.1.2" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + }, + "query-string": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "requires": { + "decode-uri-component": "0.2.0", + "object-assign": "4.1.1", + "strict-uri-encode": "1.1.0" + } + }, + "querystringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", + "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==" + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "requires": { + "randombytes": "2.1.0", + "safe-buffer": "5.1.2" + } + }, + "randomhex": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/randomhex/-/randomhex-0.1.5.tgz", + "integrity": "sha1-us7vmCMpCRQA8qKRLGzQLxCU9YU=" + }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" + }, + "raw-body": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", + "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.3", + "iconv-lite": "0.4.23", + "unpipe": "1.0.0" + } + }, + "read": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", + "requires": { + "mute-stream": "0.0.8" + } + }, + "readable-stream": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.7.tgz", + "integrity": "sha1-BwV6y+JGeyIELTb5jFrVBwVOlbE=", + "requires": { + "buffer-shims": "1.0.0", + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + } + }, + "regenerator-runtime": { + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz", + "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==" + }, + "request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "requires": { + "aws-sign2": "0.7.0", + "aws4": "1.8.0", + "caseless": "0.12.0", + "combined-stream": "1.0.7", + "extend": "3.0.2", + "forever-agent": "0.6.1", + "form-data": "2.3.3", + "har-validator": "5.1.3", + "http-signature": "1.2.0", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.22", + "oauth-sign": "0.9.0", + "performance-now": "2.1.0", + "qs": "6.5.2", + "safe-buffer": "5.1.2", + "tough-cookie": "2.4.3", + "tunnel-agent": "0.6.0", + "uuid": "3.3.2" + } + }, + "request-promise-core": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.2.tgz", + "integrity": "sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==", + "requires": { + "lodash": "4.17.11" + } + }, + "request-promise-native": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.7.tgz", + "integrity": "sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w==", + "requires": { + "request-promise-core": "1.1.2", + "stealthy-require": "1.1.1", + "tough-cookie": "2.4.3" + } + }, + "require_optional": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", + "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", + "requires": { + "resolve-from": "2.0.0", + "semver": "5.7.0" + } + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" + }, + "requizzle": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.1.tgz", + "integrity": "sha1-aUPDUwxNmn5G8c3dUcFY/GcM294=", + "dev": true, + "requires": { + "underscore": "1.6.0" + }, + "dependencies": { + "underscore": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", + "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", + "dev": true + } + } + }, + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + }, + "resolve-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", + "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "requires": { + "hash-base": "3.0.4", + "inherits": "2.0.3" + } + }, + "rlp": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.3.tgz", + "integrity": "sha512-l6YVrI7+d2vpW6D6rS05x2Xrmq8oW7v3pieZOJKBEdjuTF4Kz/iwk55Zyh1Zaz+KOB2kC8+2jZlp2u9L4tTzCQ==", + "requires": { + "bn.js": "4.11.8", + "safe-buffer": "5.1.2" + } + }, + "rxjs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz", + "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==", + "requires": { + "tslib": "1.9.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "scrypt": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/scrypt/-/scrypt-6.0.3.tgz", + "integrity": "sha1-BOAUpWgrU/pQwtXM4WfXGcBthw0=", + "requires": { + "nan": "2.13.2" + } + }, + "scrypt-js": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz", + "integrity": "sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==" + }, + "scrypt.js": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/scrypt.js/-/scrypt.js-0.2.0.tgz", + "integrity": "sha1-r40UZbcemZARC+38WTuUeeA6ito=", + "requires": { + "scrypt": "6.0.3", + "scryptsy": "1.2.1" + } + }, + "scryptsy": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/scryptsy/-/scryptsy-1.2.1.tgz", + "integrity": "sha1-oyJfpLJST4AnAHYeKFW987LZIWM=", + "requires": { + "pbkdf2": "3.0.17" + } + }, + "secp256k1": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-3.6.2.tgz", + "integrity": "sha512-90nYt7yb0LmI4A2jJs1grglkTAXrBwxYAjP9bpeKjvJKOjG2fOeH/YI/lchDMIvjrOasd5QXwvV2jwN168xNng==", + "requires": { + "bindings": "1.5.0", + "bip66": "1.1.5", + "bn.js": "4.11.8", + "create-hash": "1.2.0", + "drbg.js": "1.0.1", + "elliptic": "6.4.1", + "nan": "2.13.2", + "safe-buffer": "5.1.2" + } + }, + "seek-bzip": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz", + "integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=", + "requires": { + "commander": "2.8.1" + }, + "dependencies": { + "commander": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", + "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", + "requires": { + "graceful-readlink": "1.0.1" + } + } + } + }, + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" + }, + "send": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "requires": { + "debug": "2.6.9", + "depd": "1.1.2", + "destroy": "1.0.4", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", + "fresh": "0.5.2", + "http-errors": "1.6.3", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "2.3.0", + "range-parser": "1.2.0", + "statuses": "1.4.0" + }, + "dependencies": { + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + } + } + }, + "serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "requires": { + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "parseurl": "1.3.2", + "send": "0.16.2" + } + }, + "servify": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz", + "integrity": "sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==", + "requires": { + "body-parser": "1.18.3", + "cors": "2.8.5", + "express": "4.16.4", + "request": "2.88.0", + "xhr": "2.5.0" + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.2" + } + }, + "sha3": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/sha3/-/sha3-1.2.2.tgz", + "integrity": "sha1-pmxQmN5MJbyIM27ItIF9AFvKe6k=", + "requires": { + "nan": "2.10.0" + }, + "dependencies": { + "nan": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", + "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==" + } + } + }, + "simple-concat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", + "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=" + }, + "simple-get": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz", + "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==", + "requires": { + "decompress-response": "3.3.0", + "once": "1.4.0", + "simple-concat": "1.0.0" + } + }, + "sinon": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-7.3.1.tgz", + "integrity": "sha512-eQKMaeWovtOtYe2xThEvaHmmxf870Di+bim10c3ZPrL5bZhLGtu8cz+rOBTFz0CwBV4Q/7dYwZiqZbGVLZ+vjQ==", + "dev": true, + "requires": { + "@sinonjs/commons": "1.4.0", + "@sinonjs/formatio": "3.2.1", + "@sinonjs/samsam": "3.3.1", + "diff": "3.5.0", + "lolex": "3.1.0", + "nise": "1.4.10", + "supports-color": "5.5.0" + } + }, + "sjcl": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/sjcl/-/sjcl-1.0.8.tgz", + "integrity": "sha512-LzIjEQ0S0DpIgnxMEayM1rq9aGwGRG4OnZhCdjx7glTaJtf4zRfpg87ImfjSJjoW9vKpagd82McDOwbRT5kQKQ==" + }, + "socket.io": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.2.0.tgz", + "integrity": "sha512-wxXrIuZ8AILcn+f1B4ez4hJTPG24iNgxBBDaJfT6MsyOhVYiTXWexGoPkd87ktJG8kQEcL/NBvRi64+9k4Kc0w==", + "requires": { + "debug": "4.1.1", + "engine.io": "3.3.2", + "has-binary2": "1.0.3", + "socket.io-adapter": "1.1.1", + "socket.io-client": "2.2.0", + "socket.io-parser": "3.3.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "2.1.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + } + } + }, + "socket.io-adapter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", + "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=" + }, + "socket.io-client": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.2.0.tgz", + "integrity": "sha512-56ZrkTDbdTLmBIyfFYesgOxsjcLnwAKoN4CiPyTVkMQj3zTUh0QAx3GbvIvLpFEOvQWu92yyWICxB0u7wkVbYA==", + "requires": { + "backo2": "1.0.2", + "base64-arraybuffer": "0.1.5", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "3.1.0", + "engine.io-client": "3.3.2", + "has-binary2": "1.0.3", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "socket.io-parser": "3.3.0", + "to-array": "0.1.4" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "socket.io-parser": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.0.tgz", + "integrity": "sha512-hczmV6bDgdaEbVqhAeVMM/jfUfzuEZHsQg6eOmLgJht6G3mPKMxYm75w2+qhAQZ+4X+1+ATZ+QFKeOZD5riHng==", + "requires": { + "component-emitter": "1.2.1", + "debug": "3.1.0", + "isarray": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + } + } + }, + "source-map": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", + "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", + "dev": true, + "optional": true, + "requires": { + "amdefine": "1.0.1" + } + }, + "source-map-support": { + "version": "0.5.11", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.11.tgz", + "integrity": "sha512-//sajEx/fGL3iw6fltKMdPvy8kL3kJ2O3iuYlRoT3k9Kb4BjOoZ+BZzaNHeuaruSt+Kf3Zk9tnfAQg9/AJqUVQ==", + "dev": true, + "requires": { + "buffer-from": "1.1.1", + "source-map": "0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "requires": { + "asn1": "0.2.4", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.2", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.2", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "safer-buffer": "2.1.2", + "tweetnacl": "0.14.5" + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=" + }, + "sticky-session": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/sticky-session/-/sticky-session-0.1.0.tgz", + "integrity": "sha1-Mwij4d2+WVXLeeHe39Mu3EPJ74E=" + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" + }, + "string.prototype.trim": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz", + "integrity": "sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo=", + "requires": { + "define-properties": "1.1.3", + "es-abstract": "1.13.0", + "function-bind": "1.1.1" + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-dirs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", + "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", + "requires": { + "is-natural-number": "4.0.1" + } + }, + "strip-hex-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", + "integrity": "sha1-DF8VX+8RUTczd96du1iNoFUA428=", + "requires": { + "is-hex-prefixed": "1.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "superagent": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz", + "integrity": "sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "cookiejar": "2.1.2", + "debug": "3.2.6", + "extend": "3.0.2", + "form-data": "2.3.3", + "formidable": "1.2.1", + "methods": "1.1.2", + "mime": "1.4.1", + "qs": "6.5.2", + "readable-stream": "2.3.6" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "2.1.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + } + } + }, + "supertest": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-4.0.2.tgz", + "integrity": "sha512-1BAbvrOZsGA3YTCWqbmh14L0YEq0EGICX/nBnfkfVJn7SrxQV1I3pMYjSzG9y/7ZU2V9dWqyqk2POwxlb09duQ==", + "dev": true, + "requires": { + "methods": "1.1.2", + "superagent": "3.8.3" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "3.0.0" + } + }, + "swarm-js": { + "version": "0.1.39", + "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.39.tgz", + "integrity": "sha512-QLMqL2rzF6n5s50BptyD6Oi0R1aWlJC5Y17SRIVXRj6OR1DRIPM7nepvrxxkjA1zNzFz6mUOMjfeqeDaWB7OOg==", + "requires": { + "bluebird": "3.5.4", + "buffer": "5.2.1", + "decompress": "4.2.0", + "eth-lib": "0.1.27", + "fs-extra": "4.0.3", + "got": "7.1.0", + "mime-types": "2.1.22", + "mkdirp-promise": "5.0.1", + "mock-fs": "4.8.0", + "setimmediate": "1.0.5", + "tar": "4.4.8", + "xhr-request-promise": "0.1.2" + } + }, + "taffydb": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz", + "integrity": "sha1-fLy2S1oUG2ou/CxdLGe04VCyomg=", + "dev": true + }, + "tar": { + "version": "4.4.8", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz", + "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==", + "requires": { + "chownr": "1.1.1", + "fs-minipass": "1.2.5", + "minipass": "2.3.5", + "minizlib": "1.2.1", + "mkdirp": "0.5.1", + "safe-buffer": "5.1.2", + "yallist": "3.0.3" + } + }, + "tar-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", + "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "requires": { + "bl": "1.2.2", + "buffer-alloc": "1.2.0", + "end-of-stream": "1.4.1", + "fs-constants": "1.0.0", + "readable-stream": "2.3.6", + "to-buffer": "1.1.1", + "xtend": "4.0.1" + }, + "dependencies": { + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "5.1.2" + } + } + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" + }, + "to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" + }, + "to-buffer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", + "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" + }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "requires": { + "psl": "1.1.31", + "punycode": "1.4.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + } + } + }, + "ts-node": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.0.3.tgz", + "integrity": "sha512-2qayBA4vdtVRuDo11DEFSsD/SFsBXQBRZZhbRGSIkmYmVkWjULn/GGMdG10KVqkaGndljfaTD8dKjWgcejO8YA==", + "dev": true, + "requires": { + "arg": "4.1.0", + "diff": "3.5.0", + "make-error": "1.3.5", + "source-map-support": "0.5.11", + "yn": "3.0.0" + } + }, + "tslib": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==" + }, + "tslint": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.15.0.tgz", + "integrity": "sha512-6bIEujKR21/3nyeoX2uBnE8s+tMXCQXhqMmaIPJpHmXJoBJPTLcI7/VHRtUwMhnLVdwLqqY3zmd8Dxqa5CVdJA==", + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "builtin-modules": "1.1.1", + "chalk": "2.4.2", + "commander": "2.19.0", + "diff": "3.5.0", + "glob": "7.1.3", + "js-yaml": "3.13.0", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "resolve": "1.10.0", + "semver": "5.7.0", + "tslib": "1.9.3", + "tsutils": "2.29.0" + }, + "dependencies": { + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "resolve": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", + "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", + "dev": true, + "requires": { + "path-parse": "1.0.6" + } + } + } + }, + "tsutils": { + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", + "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", + "dev": true, + "requires": { + "tslib": "1.9.3" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "1.1.2" + } + }, + "type-detect": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz", + "integrity": "sha1-C6XsKohWQORw6k6FBZcZANrFiCI=", + "dev": true + }, + "type-is": { + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", + "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "2.1.22" + } + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "requires": { + "is-typedarray": "1.0.0" + } + }, + "typescript": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.4.1.tgz", + "integrity": "sha512-3NSMb2VzDQm8oBTLH6Nj55VVtUEpe/rgkIzMir0qVoLyjDZlnMBva0U6vDiV3IH+sl/Yu6oP5QwsAQtHPmDd2Q==", + "dev": true + }, + "typescript-eslint-parser": { + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/typescript-eslint-parser/-/typescript-eslint-parser-22.0.0.tgz", + "integrity": "sha512-pD8D7oTeRwWvFVxK3PaY6FYAiZsuRXFkIc2+1xkwCT3NduySgCgjeAkR5/dnIWecOiFVcEHf4ypXurF02Q6Z3Q==", + "dev": true, + "requires": { + "eslint-scope": "4.0.3", + "eslint-visitor-keys": "1.0.0", + "typescript-estree": "18.0.0" + } + }, + "typescript-estree": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/typescript-estree/-/typescript-estree-18.0.0.tgz", + "integrity": "sha512-HxTWrzFyYOPWA91Ij7xL9mNUVpGTKLH2KiaBn28CMbYgX2zgWdJqU9hO7Are+pAPAqY91NxAYoaAyDDZ3rLj2A==", + "dev": true, + "requires": { + "lodash.unescape": "4.0.1", + "semver": "5.5.0" + }, + "dependencies": { + "semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "dev": true + } + } + }, + "uglify-js": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.5.3.tgz", + "integrity": "sha512-rIQPT2UMDnk4jRX+w4WO84/pebU2jiLsjgIyrCktYgSvx28enOE3iYQMr+BD1rHiitWnDmpu0cY/LfIEpKcjcw==", + "dev": true, + "optional": true, + "requires": { + "commander": "2.19.0", + "source-map": "0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + } + } + }, + "ultron": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" + }, + "unbzip2-stream": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.3.3.tgz", + "integrity": "sha512-fUlAF7U9Ah1Q6EieQ4x4zLNejrRvDWUYmxXUpN3uziFYCHapjWFaCAnreY9bGgxzaMCFAPPpYNng57CypwJVhg==", + "requires": { + "buffer": "5.2.1", + "through": "2.3.8" + } + }, + "underscore": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", + "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=", + "dev": true + }, + "underscore-contrib": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/underscore-contrib/-/underscore-contrib-0.3.0.tgz", + "integrity": "sha1-ZltmwkeD+PorGMn4y7Dix9SMJsc=", + "dev": true, + "requires": { + "underscore": "1.6.0" + }, + "dependencies": { + "underscore": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", + "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", + "dev": true + } + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "requires": { + "punycode": "2.1.1" + } + }, + "url-parse": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.4.tgz", + "integrity": "sha512-/92DTTorg4JjktLNLe6GPS2/RvAd/RGr6LuktmWSMLEOa6rjnlrFXNgSbSmkNvCoL2T028A0a1JaJLzRMlFoHg==", + "requires": { + "querystringify": "2.1.1", + "requires-port": "1.0.0" + } + }, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "requires": { + "prepend-http": "1.0.4" + } + }, + "url-set-query": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", + "integrity": "sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk=" + }, + "url-to-options": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", + "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=" + }, + "utf8": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.1.tgz", + "integrity": "sha1-LgHbAvfY0JRPdxBPFgnrDDBM92g=" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "1.3.0" + } + }, + "web3": { + "version": "1.0.0-beta.51", + "resolved": "https://registry.npmjs.org/web3/-/web3-1.0.0-beta.51.tgz", + "integrity": "sha512-cSjJe8AwR9TKELLkGwk2HNL+37e+Y3x0nKkdBNpBZQNZR0SeoT3Jckkd7pBgrJKcyupItN+tKF48x5yNRvHzrQ==", + "requires": { + "@babel/runtime": "7.4.3", + "@types/node": "10.14.4", + "web3-bzz": "1.0.0-beta.51", + "web3-core": "1.0.0-beta.51", + "web3-core-helpers": "1.0.0-beta.51", + "web3-core-method": "1.0.0-beta.51", + "web3-eth": "1.0.0-beta.51", + "web3-eth-personal": "1.0.0-beta.51", + "web3-net": "1.0.0-beta.51", + "web3-providers": "1.0.0-beta.51", + "web3-shh": "1.0.0-beta.51", + "web3-utils": "1.0.0-beta.51" + }, + "dependencies": { + "@types/node": { + "version": "10.14.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.4.tgz", + "integrity": "sha512-DT25xX/YgyPKiHFOpNuANIQIVvYEwCWXgK2jYYwqgaMrYE6+tq+DtmMwlD3drl6DJbUwtlIDnn0d7tIn/EbXBg==" + } + } + }, + "web3-bzz": { + "version": "1.0.0-beta.51", + "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.0.0-beta.51.tgz", + "integrity": "sha512-9zDifUc3qPOF2WJ2H/81Ki4rTLa4elB0OG8h3IEYHjXOLDHKzswBQC3favhvm/ZQ2WmnkGd04vsU2iQzBmr1OQ==", + "requires": { + "@babel/runtime": "7.4.3", + "@types/node": "10.14.4", + "lodash": "4.17.11", + "swarm-js": "0.1.39" + }, + "dependencies": { + "@types/node": { + "version": "10.14.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.4.tgz", + "integrity": "sha512-DT25xX/YgyPKiHFOpNuANIQIVvYEwCWXgK2jYYwqgaMrYE6+tq+DtmMwlD3drl6DJbUwtlIDnn0d7tIn/EbXBg==" + } + } + }, + "web3-core": { + "version": "1.0.0-beta.51", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.0.0-beta.51.tgz", + "integrity": "sha512-RZRAt0O+LsU1jV6BtuZBQYjE+YcNa9Bu6FzEAMZ92EdgiAkUB2kbTeipVGCMxOST26kWXUtwCwxkkx4g6iy41A==", + "requires": { + "@babel/runtime": "7.4.3", + "@types/bn.js": "4.11.5", + "@types/node": "10.14.4", + "lodash": "4.17.11", + "web3-utils": "1.0.0-beta.51" + }, + "dependencies": { + "@types/node": { + "version": "10.14.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.4.tgz", + "integrity": "sha512-DT25xX/YgyPKiHFOpNuANIQIVvYEwCWXgK2jYYwqgaMrYE6+tq+DtmMwlD3drl6DJbUwtlIDnn0d7tIn/EbXBg==" + } + } + }, + "web3-core-helpers": { + "version": "1.0.0-beta.51", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.0.0-beta.51.tgz", + "integrity": "sha512-kA5JMJyrB5yxX3dQuziBP0Yo9i+MKwtYfA2E7DTbEoUueqjPcEwXMUxmpGROYmufCcfoe/B/FqpC8CzkqmHokw==", + "requires": { + "@babel/runtime": "7.4.3", + "lodash": "4.17.11", + "web3-eth-iban": "1.0.0-beta.51", + "web3-utils": "1.0.0-beta.51" + } + }, + "web3-core-method": { + "version": "1.0.0-beta.51", + "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.0.0-beta.51.tgz", + "integrity": "sha512-Tl5jGWqx01W6OFPNZI1c4wtCt+HPKWldWrLORKfW0zHyXrYDH6V2BuitA7R7j+54+c/61W3C2E6a+g7sQ8+mWA==", + "requires": { + "@babel/runtime": "7.4.3", + "eventemitter3": "3.1.0", + "lodash": "4.17.11" + } + }, + "web3-core-subscriptions": { + "version": "1.0.0-beta.51", + "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.0.0-beta.51.tgz", + "integrity": "sha512-bM4KlA37Or/XfrZKLtXlvUSISKWUkXOH/32s0DBnxRkKuey8QKK460H5KF9/HS8LfY7cO11NAepnFe4Tk1rSaQ==", + "requires": { + "@babel/runtime": "7.4.3", + "eventemitter3": "3.1.0", + "lodash": "4.17.11" + } + }, + "web3-eth": { + "version": "1.0.0-beta.51", + "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.0.0-beta.51.tgz", + "integrity": "sha512-w+8YtfKAcEPmOtYf47cjQw3t6dm5YcGvkl4jVZF00WHuvkPMFsXBTbZdH4aVgjPhubl53rdLrJwAP2b7X83+kQ==", + "requires": { + "@babel/runtime": "7.4.3", + "ethereumjs-tx": "1.3.7", + "rxjs": "6.4.0", + "web3-core": "1.0.0-beta.51", + "web3-core-helpers": "1.0.0-beta.51", + "web3-core-method": "1.0.0-beta.51", + "web3-core-subscriptions": "1.0.0-beta.51", + "web3-eth-abi": "1.0.0-beta.51", + "web3-eth-accounts": "1.0.0-beta.51", + "web3-eth-contract": "1.0.0-beta.51", + "web3-eth-ens": "1.0.0-beta.51", + "web3-eth-iban": "1.0.0-beta.51", + "web3-eth-personal": "1.0.0-beta.51", + "web3-net": "1.0.0-beta.51", + "web3-providers": "1.0.0-beta.51", + "web3-utils": "1.0.0-beta.51" + } + }, + "web3-eth-abi": { + "version": "1.0.0-beta.51", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.0.0-beta.51.tgz", + "integrity": "sha512-mTcMpIihZECzZ5oWUh9Jg7x5pVhPv6xPTPWxY9007QKbbBH01GwPogoxBz1X7RfWOwGqZABfxFgXow5NkL0T3A==", + "requires": { + "@babel/runtime": "7.4.3", + "ethers": "4.0.27", + "lodash": "4.17.11", + "web3-utils": "1.0.0-beta.51" + } + }, + "web3-eth-accounts": { + "version": "1.0.0-beta.51", + "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.0.0-beta.51.tgz", + "integrity": "sha512-6HJu4Vrli7p1S52mV83juFjWn0w7rUE4q9cZdYwsGmqHGrOmV7E3zuBEyuA+kelPLpSmcJDOnEowvORmRdpAyw==", + "requires": { + "@babel/runtime": "7.4.3", + "crypto-browserify": "3.12.0", + "eth-lib": "0.2.8", + "lodash": "4.17.11", + "scrypt.js": "0.2.0", + "uuid": "3.3.2", + "web3-core": "1.0.0-beta.51", + "web3-core-helpers": "1.0.0-beta.51", + "web3-core-method": "1.0.0-beta.51", + "web3-providers": "1.0.0-beta.51", + "web3-utils": "1.0.0-beta.51" + }, + "dependencies": { + "eth-lib": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", + "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", + "requires": { + "bn.js": "4.11.8", + "elliptic": "6.4.1", + "xhr-request-promise": "0.1.2" + } + } + } + }, + "web3-eth-contract": { + "version": "1.0.0-beta.51", + "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.0.0-beta.51.tgz", + "integrity": "sha512-iVMay6OXDjDPeiPoeGpa6PQGuwIPxL/8UAVIlWVB1CYG9+FY6kcOUO7vI7dnDVwN1zneAslf9h86px6hgR92OQ==", + "requires": { + "@babel/runtime": "7.4.3", + "@types/bn.js": "4.11.5", + "lodash": "4.17.11", + "web3-core": "1.0.0-beta.51", + "web3-core-helpers": "1.0.0-beta.51", + "web3-core-method": "1.0.0-beta.51", + "web3-core-subscriptions": "1.0.0-beta.51", + "web3-eth-abi": "1.0.0-beta.51", + "web3-eth-accounts": "1.0.0-beta.51", + "web3-providers": "1.0.0-beta.51", + "web3-utils": "1.0.0-beta.51" + } + }, + "web3-eth-ens": { + "version": "1.0.0-beta.51", + "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.0.0-beta.51.tgz", + "integrity": "sha512-JpHlAIUZGLGTTHWKBFciv5KGBi/+n0uqaO/dXoIfB/jI0Gcm5GYEwUt8TU/Y0/WVHvw/ttU1e0laJYPzTTEB8w==", + "requires": { + "@babel/runtime": "7.4.3", + "eth-ens-namehash": "2.0.8", + "lodash": "4.17.11", + "web3-core": "1.0.0-beta.51", + "web3-core-helpers": "1.0.0-beta.51", + "web3-core-method": "1.0.0-beta.51", + "web3-eth-abi": "1.0.0-beta.51", + "web3-eth-contract": "1.0.0-beta.51", + "web3-net": "1.0.0-beta.51", + "web3-providers": "1.0.0-beta.51", + "web3-utils": "1.0.0-beta.51" + } + }, + "web3-eth-iban": { + "version": "1.0.0-beta.51", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.0.0-beta.51.tgz", + "integrity": "sha512-GNLsEWpEkyJqmogsF+mQLlO06tPOudfhVBCPC68SIOw6wQTqAtoqzOot3EJdrEIDGet9eujOoBs6VWAjNbMGRA==", + "requires": { + "@babel/runtime": "7.4.3", + "bn.js": "4.11.8", + "web3-utils": "1.0.0-beta.51" + } + }, + "web3-eth-personal": { + "version": "1.0.0-beta.51", + "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.0.0-beta.51.tgz", + "integrity": "sha512-Mq6uAvhfsKf7FSZVqJOfmb7i5zxQ6HkbTRcAyOOOfSmGnTvxSIjtKZCTAVv3UeBh3pxIXn5FSDlKngaj1MbYXg==", + "requires": { + "@babel/runtime": "7.4.3", + "web3-core": "1.0.0-beta.51", + "web3-core-helpers": "1.0.0-beta.51", + "web3-core-method": "1.0.0-beta.51", + "web3-net": "1.0.0-beta.51", + "web3-providers": "1.0.0-beta.51", + "web3-utils": "1.0.0-beta.51" + } + }, + "web3-net": { + "version": "1.0.0-beta.51", + "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.0.0-beta.51.tgz", + "integrity": "sha512-1xeBIb/Tvf6PVNZ0u+pPrULNkLefTf0uuo8Hyx82EfY+mvMz6jvNDyFsD8spDGJUuxlDabFnoZdiaEv7LNwwSg==", + "requires": { + "@babel/runtime": "7.4.3", + "lodash": "4.17.11", + "web3-core": "1.0.0-beta.51", + "web3-core-helpers": "1.0.0-beta.51", + "web3-core-method": "1.0.0-beta.51", + "web3-providers": "1.0.0-beta.51", + "web3-utils": "1.0.0-beta.51" + } + }, + "web3-providers": { + "version": "1.0.0-beta.51", + "resolved": "https://registry.npmjs.org/web3-providers/-/web3-providers-1.0.0-beta.51.tgz", + "integrity": "sha512-aWUEZIou4+zEZbLaBf1GQwbNoERq66mLEB6ubcPz1WEq1T5jfUPfwO4b4W2bEbEZVsoxS1ZJvSFkj1yAtD0X+g==", + "requires": { + "@babel/runtime": "7.4.3", + "@types/node": "10.14.4", + "eventemitter3": "3.1.0", + "lodash": "4.17.11", + "url-parse": "1.4.4", + "websocket": "git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2", + "xhr2-cookies": "1.1.0" + }, + "dependencies": { + "@types/node": { + "version": "10.14.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.4.tgz", + "integrity": "sha512-DT25xX/YgyPKiHFOpNuANIQIVvYEwCWXgK2jYYwqgaMrYE6+tq+DtmMwlD3drl6DJbUwtlIDnn0d7tIn/EbXBg==" + } + } + }, + "web3-shh": { + "version": "1.0.0-beta.51", + "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.0.0-beta.51.tgz", + "integrity": "sha512-IA4oaNH+PaGWQtTe7BmENszNTeSTsZ15hBNnOrMIyeF0PeghPj7sCenTtU/q8Ie6jR0oXfTXJOQCS/Q/QC3Ksg==", + "requires": { + "@babel/runtime": "7.4.3", + "web3-core": "1.0.0-beta.51", + "web3-core-helpers": "1.0.0-beta.51", + "web3-core-method": "1.0.0-beta.51", + "web3-core-subscriptions": "1.0.0-beta.51", + "web3-net": "1.0.0-beta.51", + "web3-providers": "1.0.0-beta.51", + "web3-utils": "1.0.0-beta.51" + } + }, + "web3-utils": { + "version": "1.0.0-beta.51", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.0.0-beta.51.tgz", + "integrity": "sha512-c9sRSscu0NIjD96X4ToDOgTxGyJevppuB+uHOgWkziaLGqlw/Li1l24nGkvr0Zqpt9SufvfPcWf8EEC92pnwKg==", + "requires": { + "@babel/runtime": "7.4.3", + "@types/bn.js": "4.11.5", + "@types/node": "10.14.4", + "bn.js": "4.11.8", + "eth-lib": "0.2.8", + "ethjs-unit": "0.1.6", + "lodash": "4.17.11", + "number-to-bn": "1.7.0", + "randomhex": "0.1.5", + "utf8": "2.1.1" + }, + "dependencies": { + "@types/node": { + "version": "10.14.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.4.tgz", + "integrity": "sha512-DT25xX/YgyPKiHFOpNuANIQIVvYEwCWXgK2jYYwqgaMrYE6+tq+DtmMwlD3drl6DJbUwtlIDnn0d7tIn/EbXBg==" + }, + "eth-lib": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", + "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", + "requires": { + "bn.js": "4.11.8", + "elliptic": "6.4.1", + "xhr-request-promise": "0.1.2" + } + } + } + }, + "websocket": { + "version": "git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2", + "requires": { + "debug": "2.6.9", + "nan": "2.13.2", + "typedarray-to-buffer": "3.1.5", + "yaeti": "0.0.6" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "2.0.0" + } + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "ws": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz", + "integrity": "sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==", + "requires": { + "async-limiter": "1.0.0" + } + }, + "xhr": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.5.0.tgz", + "integrity": "sha512-4nlO/14t3BNUZRXIXfXe+3N6w3s1KoxcJUUURctd64BLRe67E4gRwp4PjywtDY72fXpZ1y6Ch0VZQRY/gMPzzQ==", + "requires": { + "global": "4.3.2", + "is-function": "1.0.1", + "parse-headers": "2.0.2", + "xtend": "4.0.1" + } + }, + "xhr-request": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", + "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", + "requires": { + "buffer-to-arraybuffer": "0.0.5", + "object-assign": "4.1.1", + "query-string": "5.1.1", + "simple-get": "2.8.1", + "timed-out": "4.0.1", + "url-set-query": "1.0.0", + "xhr": "2.5.0" + } + }, + "xhr-request-promise": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.2.tgz", + "integrity": "sha1-NDxE0e53JrhkgGloLQ+EDIO0Jh0=", + "requires": { + "xhr-request": "1.1.0" + } + }, + "xhr2-cookies": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz", + "integrity": "sha1-fXdEnQmZGX8VXLc7I99yUF7YnUg=", + "requires": { + "cookiejar": "2.1.2" + } + }, + "xmlcreate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-1.0.2.tgz", + "integrity": "sha1-+mv3YqYKQT+z3Y9LA8WyaSONMI8=", + "dev": true + }, + "xmlhttprequest": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", + "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=" + }, + "xmlhttprequest-ssl": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", + "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=" + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" + }, + "yaeti": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", + "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=" + }, + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "requires": { + "buffer-crc32": "0.2.13", + "fd-slicer": "1.1.0" + } + }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" + }, + "yn": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.0.0.tgz", + "integrity": "sha512-+Wo/p5VRfxUgBUGy2j/6KX2mj9AYJWOHuhMjMcbBFc3y54o9/4buK1ksBvuiK01C3kby8DH9lSmJdSxw+4G/2Q==", + "dev": true + } + } } diff --git a/packages/bitcore-wallet-service/package.json b/packages/bitcore-wallet-service/package.json index 1443d3e406b..55b943af6d3 100644 --- a/packages/bitcore-wallet-service/package.json +++ b/packages/bitcore-wallet-service/package.json @@ -26,7 +26,6 @@ "async": "^0.9.2", "bitcore-lib": "^8.1.1", "bitcore-lib-cash": "^8.1.1", - "body-parser": "^1.11.0", "compression": "^1.6.2", "email-validator": "^1.0.1", "express": "^4.10.0", diff --git a/packages/bitcore-wallet-service/src/lib/model/address.ts b/packages/bitcore-wallet-service/src/lib/model/address.ts index fabba8740ae..da5257faf9c 100644 --- a/packages/bitcore-wallet-service/src/lib/model/address.ts +++ b/packages/bitcore-wallet-service/src/lib/model/address.ts @@ -115,7 +115,6 @@ export class Address { } const pathIndex = /m\/([0-9]*)\/([0-9]*)/; const [_input, changeIndex, addressIndex] = path.match(pathIndex); - // console.log(changeIndex, addressIndex); const isChange = changeIndex > 0; const [{ xPubKey }] = publicKeyRing; bitcoreAddress = CWC.deriver.deriveAddress( @@ -125,7 +124,6 @@ export class Address { addressIndex, isChange ); - console.log(bitcoreAddress, coin, network); // let addrStr = bitcoreAddress.toString(true); // if (noNativeCashAddr && coin == 'bch') { // addrStr = bitcoreAddress.toLegacyAddress(); diff --git a/packages/bitcore-wallet-service/src/lib/model/wallet.ts b/packages/bitcore-wallet-service/src/lib/model/wallet.ts index fa571c373c0..9721cb31570 100644 --- a/packages/bitcore-wallet-service/src/lib/model/wallet.ts +++ b/packages/bitcore-wallet-service/src/lib/model/wallet.ts @@ -25,7 +25,7 @@ export interface IWallet { n: number; singleAddress: boolean; status: string; - publicKeyRing: Array<{ xPubKey: string, requestPubKey: string }>; + publicKeyRing: Array<{ xPubKey: string; requestPubKey: string }>; addressIndex: number; copayers: string[]; pubKey: string; @@ -51,7 +51,7 @@ export class Wallet { n: number; singleAddress: boolean; status: string; - publicKeyRing: Array<{ xPubKey: string, requestPubKey: string }>; + publicKeyRing: Array<{ xPubKey: string; requestPubKey: string }>; addressIndex: number; copayers: Array; pubKey: string; @@ -135,7 +135,7 @@ export class Wallet { x.singleAddress = !!obj.singleAddress; x.status = obj.status; x.publicKeyRing = obj.publicKeyRing; - x.copayers = _.map(obj.copayers, (copayer) => { + x.copayers = _.map(obj.copayers, copayer => { return Copayer.fromObj(copayer); }); x.pubKey = obj.pubKey; @@ -204,7 +204,7 @@ export class Wallet { } _updatePublicKeyRing() { - this.publicKeyRing = _.map(this.copayers, (copayer) => { + this.publicKeyRing = _.map(this.copayers, copayer => { return _.pick(copayer, ['xPubKey', 'requestPubKey']); }); } @@ -241,7 +241,7 @@ export class Wallet { } getCopayer(copayerId): Copayer { - return this.copayers.find((c) => c.id == copayerId); + return this.copayers.find(c => c.id == copayerId); } isComplete() { diff --git a/packages/crypto-wallet-core/package-lock.json b/packages/crypto-wallet-core/package-lock.json index dfa00c02730..a63b4e125b3 100644 --- a/packages/crypto-wallet-core/package-lock.json +++ b/packages/crypto-wallet-core/package-lock.json @@ -1,3013 +1,3053 @@ { - "name": "crypto-wallet-core", - "version": "8.1.1", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@babel/runtime": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.3.4.tgz", - "integrity": "sha512-IvfvnMdSaLBateu0jfsYIpZTxAc2cKEXEMiezGGN75QcBcecDUKd3PgLAncT0oOgxKy8dd8hrJKj9MfzgfZd6g==", - "requires": { - "regenerator-runtime": "0.12.1" - } - }, - "@types/bn.js": { - "version": "4.11.4", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.4.tgz", - "integrity": "sha512-AO8WW+aRcKWKQAYTfKLzwnpL6U+TfPqS+haRrhCy5ff04Da8WZud3ZgVjspQXaEXJDcTlsjUEVvL39wegDek5w==", - "requires": { - "@types/node": "10.14.1" - } - }, - "@types/elliptic": { - "version": "6.4.5", - "resolved": "https://registry.npmjs.org/@types/elliptic/-/elliptic-6.4.5.tgz", - "integrity": "sha512-Bu5GHb9EM/nPlEtq3fkxUah2WfEw/JscJltgvjBMrbikEQIPRiZT1ze3Yh92QS/Xv8P0W0OpJHUYyvI26g9wTA==", - "dev": true, - "requires": { - "@types/bn.js": "4.11.4" - } - }, - "@types/ethereumjs-util": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@types/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz", - "integrity": "sha512-qwQgQqXXTRv2h2AlJef+tMEszLFkCB9dWnrJYIdAwqjubERXEc/geB+S3apRw0yQyTVnsBf8r6BhlrE8vx+3WQ==", - "dev": true, - "requires": { - "@types/bn.js": "4.11.4", - "@types/node": "10.14.1" - } - }, - "@types/node": { - "version": "10.14.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.1.tgz", - "integrity": "sha512-Rymt08vh1GaW4vYB6QP61/5m/CFLGnFZP++bJpWbiNxceNa6RBipDmb413jvtSf/R1gg5a/jQVl2jY4XVRscEA==" - }, - "@types/secp256k1": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-3.5.0.tgz", - "integrity": "sha512-ZE39QhkIaNK6xbKIp1VLN5O36r97LuslLmRnjAcT0sVDxcfvrk3zqp/VnIfmGza7J6jDxR8dIai3hsCxPYglPA==", - "dev": true, - "requires": { - "@types/node": "10.14.1" - } - }, - "accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", - "requires": { - "mime-types": "2.1.22", - "negotiator": "0.6.1" - } - }, - "aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0=" - }, - "ajv": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", - "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", - "requires": { - "fast-deep-equal": "2.0.1", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.4.1", - "uri-js": "4.2.2" - } - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "requires": { - "safer-buffer": "2.1.2" - } - }, - "asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", - "requires": { - "bn.js": "4.11.8", - "inherits": "2.0.1", - "minimalistic-assert": "1.0.1" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - }, - "async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" - }, - "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base64-js": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==" - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "requires": { - "tweetnacl": "0.14.5" - } - }, - "bcryptjs": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", - "integrity": "sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms=" - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "bip66": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/bip66/-/bip66-1.1.5.tgz", - "integrity": "sha1-AfqHSHhcpwlV1QESF9GzE5lpyiI=", - "requires": { - "safe-buffer": "5.1.2" - } - }, - "bl": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", - "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", - "requires": { - "readable-stream": "2.3.6", - "safe-buffer": "5.1.2" - } - }, - "bluebird": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", - "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==" - }, - "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" - }, - "body-parser": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", - "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", - "requires": { - "bytes": "3.0.0", - "content-type": "1.0.4", - "debug": "2.6.9", - "depd": "1.1.2", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", - "on-finished": "2.3.0", - "qs": "6.5.2", - "raw-body": "2.3.3", - "type-is": "1.6.16" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "1.0.0", - "concat-map": "0.0.1" - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "requires": { - "buffer-xor": "1.0.3", - "cipher-base": "1.0.4", - "create-hash": "1.2.0", - "evp_bytestokey": "1.0.3", - "inherits": "2.0.1", - "safe-buffer": "5.1.2" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "requires": { - "browserify-aes": "1.2.0", - "browserify-des": "1.0.2", - "evp_bytestokey": "1.0.3" - } - }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "requires": { - "cipher-base": "1.0.4", - "des.js": "1.0.0", - "inherits": "2.0.1", - "safe-buffer": "5.1.2" - } - }, - "browserify-rsa": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "requires": { - "bn.js": "4.11.8", - "randombytes": "2.1.0" - } - }, - "browserify-sha3": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/browserify-sha3/-/browserify-sha3-0.0.4.tgz", - "integrity": "sha1-CGxHuMgjFsnUcCLCYYWVRXbdjiY=", - "requires": { - "js-sha3": "0.6.1", - "safe-buffer": "5.1.2" - } - }, - "browserify-sign": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", - "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", - "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "elliptic": "6.4.1", - "inherits": "2.0.1", - "parse-asn1": "5.1.4" - } - }, - "buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", - "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", - "requires": { - "base64-js": "1.3.0", - "ieee754": "1.1.12" - } - }, - "buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", - "requires": { - "buffer-alloc-unsafe": "1.1.0", - "buffer-fill": "1.0.0" - } - }, - "buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" - }, - "buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" - }, - "buffer-to-arraybuffer": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", - "integrity": "sha1-YGSkD6dutDxyOrqe+PbhIW0QURo=" - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, - "chownr": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", - "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==" - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "requires": { - "inherits": "2.0.1", - "safe-buffer": "5.1.2" - } - }, - "combined-stream": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", - "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", - "requires": { - "delayed-stream": "1.0.0" - } - }, - "commander": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", - "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", - "requires": { - "graceful-readlink": "1.0.1" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "contains-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", - "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", - "dev": true - }, - "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, - "cookiejar": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz", - "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==" - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "requires": { - "object-assign": "4.1.1", - "vary": "1.1.2" - } - }, - "create-ecdh": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", - "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", - "requires": { - "bn.js": "4.11.8", - "elliptic": "6.4.1" - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "requires": { - "cipher-base": "1.0.4", - "inherits": "2.0.1", - "md5.js": "1.3.5", - "ripemd160": "2.0.2", - "sha.js": "2.4.11" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "requires": { - "cipher-base": "1.0.4", - "create-hash": "1.2.0", - "inherits": "2.0.1", - "ripemd160": "2.0.2", - "safe-buffer": "5.1.2", - "sha.js": "2.4.11" - } - }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "requires": { - "browserify-cipher": "1.0.1", - "browserify-sign": "4.0.4", - "create-ecdh": "4.0.3", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "diffie-hellman": "5.0.3", - "inherits": "2.0.1", - "pbkdf2": "3.0.17", - "public-encrypt": "4.0.3", - "randombytes": "2.1.0", - "randomfill": "1.0.4" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "requires": { - "assert-plus": "1.0.0" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" - }, - "decompress": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.0.tgz", - "integrity": "sha1-eu3YVCflqS2s/lVnSnxQXpbQH50=", - "requires": { - "decompress-tar": "4.1.1", - "decompress-tarbz2": "4.1.1", - "decompress-targz": "4.1.1", - "decompress-unzip": "4.0.1", - "graceful-fs": "4.1.15", - "make-dir": "1.3.0", - "pify": "2.3.0", - "strip-dirs": "2.1.0" - } - }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "requires": { - "mimic-response": "1.0.1" - } - }, - "decompress-tar": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", - "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", - "requires": { - "file-type": "5.2.0", - "is-stream": "1.1.0", - "tar-stream": "1.6.2" - } - }, - "decompress-tarbz2": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", - "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", - "requires": { - "decompress-tar": "4.1.1", - "file-type": "6.2.0", - "is-stream": "1.1.0", - "seek-bzip": "1.0.5", - "unbzip2-stream": "1.3.3" - }, - "dependencies": { - "file-type": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", - "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==" - } - } - }, - "decompress-targz": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", - "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", - "requires": { - "decompress-tar": "4.1.1", - "file-type": "5.2.0", - "is-stream": "1.1.0" - } - }, - "decompress-unzip": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", - "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", - "requires": { - "file-type": "3.9.0", - "get-stream": "2.3.1", - "pify": "2.3.0", - "yauzl": "2.10.0" - }, - "dependencies": { - "file-type": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", - "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=" - } - } - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "requires": { - "object-keys": "1.1.0" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, - "des.js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", - "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", - "requires": { - "inherits": "2.0.1", - "minimalistic-assert": "1.0.1" - } - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "requires": { - "bn.js": "4.11.8", - "miller-rabin": "4.0.1", - "randombytes": "2.1.0" - } - }, - "doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "dev": true, - "requires": { - "esutils": "2.0.2", - "isarray": "1.0.0" - } - }, - "dom-walk": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", - "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=" - }, - "drbg.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/drbg.js/-/drbg.js-1.0.1.tgz", - "integrity": "sha1-Pja2xCs3BDgjzbwzLVjzHiRFSAs=", - "requires": { - "browserify-aes": "1.2.0", - "create-hash": "1.2.0", - "create-hmac": "1.1.7" - } - }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "requires": { - "jsbn": "0.1.1", - "safer-buffer": "2.1.2" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "elliptic": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", - "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", - "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0", - "hash.js": "1.1.7", - "hmac-drbg": "1.0.1", - "inherits": "2.0.1", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" - } - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" - }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "requires": { - "once": "1.4.0" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "0.2.1" - } - }, - "es-abstract": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", - "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", - "requires": { - "es-to-primitive": "1.2.0", - "function-bind": "1.1.1", - "has": "1.0.3", - "is-callable": "1.1.4", - "is-regex": "1.0.4", - "object-keys": "1.1.0" - } - }, - "es-to-primitive": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", - "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", - "requires": { - "is-callable": "1.1.4", - "is-date-object": "1.0.1", - "is-symbol": "1.0.2" - } - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "eslint-config-airbnb-base": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-12.1.0.tgz", - "integrity": "sha512-/vjm0Px5ZCpmJqnjIzcFb9TKZrKWz0gnuG/7Gfkt0Db1ELJR51xkZth+t14rYdqWgX836XbuxtArbIHlVhbLBA==", - "dev": true, - "requires": { - "eslint-restricted-globals": "0.1.1" - } - }, - "eslint-import-resolver-node": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", - "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", - "dev": true, - "requires": { - "debug": "2.6.9", - "resolve": "1.10.0" - } - }, - "eslint-module-utils": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.3.0.tgz", - "integrity": "sha512-lmDJgeOOjk8hObTysjqH7wyMi+nsHwwvfBykwfhjR1LNdd7C2uFJBvx4OpWYpXOw4df1yE1cDEVd1yLHitk34w==", - "dev": true, - "requires": { - "debug": "2.6.9", - "pkg-dir": "2.0.0" - } - }, - "eslint-plugin-import": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.16.0.tgz", - "integrity": "sha512-z6oqWlf1x5GkHIFgrSvtmudnqM6Q60KM4KvpWi5ubonMjycLjndvd5+8VAZIsTlHC03djdgJuyKG6XO577px6A==", - "dev": true, - "requires": { - "contains-path": "0.1.0", - "debug": "2.6.9", - "doctrine": "1.5.0", - "eslint-import-resolver-node": "0.3.2", - "eslint-module-utils": "2.3.0", - "has": "1.0.3", - "lodash": "4.17.11", - "minimatch": "3.0.4", - "read-pkg-up": "2.0.0", - "resolve": "1.10.0" - } - }, - "eslint-restricted-globals": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz", - "integrity": "sha1-NfDVy8ZMLj7WLpO0saevBbp+1Nc=", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" - }, - "eth-ens-namehash": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz", - "integrity": "sha1-IprEbsqG1S4MmR58sq74P/D2i88=", - "requires": { - "idna-uts46-hx": "2.3.1", - "js-sha3": "0.5.7" - }, - "dependencies": { - "js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=" - } - } - }, - "eth-lib": { - "version": "0.1.27", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.27.tgz", - "integrity": "sha512-B8czsfkJYzn2UIEMwjc7Mbj+Cy72V+/OXH/tb44LV8jhrjizQJJ325xMOMyk3+ETa6r6oi0jsUY14+om8mQMWA==", - "requires": { - "bn.js": "4.11.8", - "elliptic": "6.4.1", - "keccakjs": "0.2.3", - "nano-json-stream-parser": "0.1.2", - "servify": "0.1.12", - "ws": "3.3.3", - "xhr-request-promise": "0.1.2" - } - }, - "ethereum-common": { - "version": "0.0.18", - "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.0.18.tgz", - "integrity": "sha1-L9w1dvIykDNYl26znaeDIT/5Uj8=" - }, - "ethereumjs-tx": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-1.3.7.tgz", - "integrity": "sha512-wvLMxzt1RPhAQ9Yi3/HKZTn0FZYpnsmQdbKYfUUpi4j1SEIcbkd9tndVjcPrufY3V7j2IebOpC00Zp2P/Ay2kA==", - "requires": { - "ethereum-common": "0.0.18", - "ethereumjs-util": "5.2.0" - }, - "dependencies": { - "ethereumjs-util": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz", - "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", - "requires": { - "bn.js": "4.11.8", - "create-hash": "1.2.0", - "ethjs-util": "0.1.6", - "keccak": "1.4.0", - "rlp": "2.2.2", - "safe-buffer": "5.1.2", - "secp256k1": "3.6.2" - } - } - } - }, - "ethereumjs-util": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.1.0.tgz", - "integrity": "sha512-URESKMFbDeJxnAxPppnk2fN6Y3BIatn9fwn76Lm8bQlt+s52TpG8dN9M66MLPuRAiAOIqL3dfwqWJf0sd0fL0Q==", - "requires": { - "bn.js": "4.11.8", - "create-hash": "1.2.0", - "ethjs-util": "0.1.6", - "keccak": "1.4.0", - "rlp": "2.2.2", - "safe-buffer": "5.1.2", - "secp256k1": "3.6.2" - } - }, - "ethers": { - "version": "4.0.26", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.26.tgz", - "integrity": "sha512-3hK4S8eAGhuWZ/feip5z17MswjGgjb4lEPJqWO/O0dNqToYLSHhvu6gGQPs8d9f+XfpEB2EYexfF0qjhWiZjUA==", - "requires": { - "@types/node": "10.14.1", - "aes-js": "3.0.0", - "bn.js": "4.11.8", - "elliptic": "6.3.3", - "hash.js": "1.1.3", - "js-sha3": "0.5.7", - "scrypt-js": "2.0.4", - "setimmediate": "1.0.4", - "uuid": "2.0.1", - "xmlhttprequest": "1.8.0" - }, - "dependencies": { - "elliptic": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz", - "integrity": "sha1-VILZZG1UvLif19mU/J4ulWiHbj8=", - "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0", - "hash.js": "1.1.3", - "inherits": "2.0.1" - } - }, - "hash.js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", - "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", - "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - } - } - }, - "js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=" - }, - "setimmediate": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz", - "integrity": "sha1-IOgd5iLUoCWIzgyNqJc8vPHTE48=" - }, - "uuid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", - "integrity": "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w=" - } - } - }, - "ethjs-unit": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", - "integrity": "sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk=", - "requires": { - "bn.js": "4.11.6", - "number-to-bn": "1.7.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" - } - } - }, - "ethjs-util": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", - "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", - "requires": { - "is-hex-prefixed": "1.0.0", - "strip-hex-prefix": "1.0.0" - } - }, - "eventemitter3": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", - "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==" - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "requires": { - "md5.js": "1.3.5", - "safe-buffer": "5.1.2" - } - }, - "express": { - "version": "4.16.4", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", - "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", - "requires": { - "accepts": "1.3.5", - "array-flatten": "1.1.1", - "body-parser": "1.18.3", - "content-disposition": "0.5.2", - "content-type": "1.0.4", - "cookie": "0.3.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "1.1.2", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", - "finalhandler": "1.1.1", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "1.1.2", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "path-to-regexp": "0.1.7", - "proxy-addr": "2.0.4", - "qs": "6.5.2", - "range-parser": "1.2.0", - "safe-buffer": "5.1.2", - "send": "0.16.2", - "serve-static": "1.13.2", - "setprototypeof": "1.1.0", - "statuses": "1.4.0", - "type-is": "1.6.16", - "utils-merge": "1.0.1", - "vary": "1.1.2" - }, - "dependencies": { - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" - }, - "fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", - "requires": { - "pend": "1.2.0" - } - }, - "file-type": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=" - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" - }, - "finalhandler": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", - "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", - "requires": { - "debug": "2.6.9", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.4.0", - "unpipe": "1.0.0" - }, - "dependencies": { - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - } - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "2.0.0" - } - }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "requires": { - "is-callable": "1.1.4" - } - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.7", - "mime-types": "2.1.22" - } - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" - }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - }, - "fs-extra": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", - "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", - "requires": { - "graceful-fs": "4.1.15", - "jsonfile": "4.0.0", - "universalify": "0.1.2" - } - }, - "fs-minipass": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", - "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", - "requires": { - "minipass": "2.3.5" - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "get-stream": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", - "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", - "requires": { - "object-assign": "4.1.1", - "pinkie-promise": "2.0.1" - } - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "requires": { - "assert-plus": "1.0.0" - } - }, - "global": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", - "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", - "requires": { - "min-document": "2.19.0", - "process": "0.5.2" - } - }, - "got": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", - "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", - "requires": { - "decompress-response": "3.3.0", - "duplexer3": "0.1.4", - "get-stream": "3.0.0", - "is-plain-obj": "1.1.0", - "is-retry-allowed": "1.1.0", - "is-stream": "1.1.0", - "isurl": "1.0.0", - "lowercase-keys": "1.0.1", - "p-cancelable": "0.3.0", - "p-timeout": "1.2.1", - "safe-buffer": "5.1.2", - "timed-out": "4.0.1", - "url-parse-lax": "1.0.0", - "url-to-options": "1.0.1" - }, - "dependencies": { - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" - } - } - }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" - }, - "graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "requires": { - "ajv": "6.10.0", - "har-schema": "2.0.0" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "1.1.1" - } - }, - "has-symbol-support-x": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", - "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==" - }, - "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" - }, - "has-to-string-tag-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", - "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", - "requires": { - "has-symbol-support-x": "1.4.2" - } - }, - "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "requires": { - "inherits": "2.0.1", - "safe-buffer": "5.1.2" - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - } - } - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "requires": { - "hash.js": "1.1.7", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" - } - }, - "hosted-git-info": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", - "dev": true - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "requires": { - "depd": "1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": "1.5.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - } - } - }, - "http-https": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", - "integrity": "sha1-L5CN1fHbQGjAWM1ubUzjkskTOJs=" - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "requires": { - "assert-plus": "1.0.0", - "jsprim": "1.4.1", - "sshpk": "1.16.1" - } - }, - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "requires": { - "safer-buffer": "2.1.2" - } - }, - "idna-uts46-hx": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz", - "integrity": "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==", - "requires": { - "punycode": "2.1.0" - }, - "dependencies": { - "punycode": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", - "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=" - } - } - }, - "ieee754": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", - "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==" - }, - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" - }, - "ipaddr.js": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", - "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=" - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" - }, - "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" - }, - "is-function": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.1.tgz", - "integrity": "sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=" - }, - "is-hex-prefixed": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", - "integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ=" - }, - "is-natural-number": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", - "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=" - }, - "is-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", - "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=" - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" - }, - "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "requires": { - "has": "1.0.3" - } - }, - "is-retry-allowed": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", - "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=" - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, - "is-symbol": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", - "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", - "requires": { - "has-symbols": "1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "isurl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", - "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", - "requires": { - "has-to-string-tag-x": "1.4.1", - "is-object": "1.0.1" - } - }, - "js-sha3": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.6.1.tgz", - "integrity": "sha1-W4n3enR3Z5h39YxKB1JAk0sflcA=" - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "requires": { - "graceful-fs": "4.1.15" - } - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "keccak": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-1.4.0.tgz", - "integrity": "sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw==", - "requires": { - "bindings": "1.5.0", - "inherits": "2.0.3", - "nan": "2.13.0", - "safe-buffer": "5.1.2" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - } - } - }, - "keccakjs": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/keccakjs/-/keccakjs-0.2.3.tgz", - "integrity": "sha512-BjLkNDcfaZ6l8HBG9tH0tpmDv3sS2mA7FNQxFHpCdzP3Gb2MVruXBSuoM66SnVxKJpAr5dKGdkHD+bDokt8fTg==", - "requires": { - "browserify-sha3": "0.0.4", - "sha3": "1.2.2" - } - }, - "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, - "requires": { - "graceful-fs": "4.1.15", - "parse-json": "2.2.0", - "pify": "2.3.0", - "strip-bom": "3.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" - } - }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" - }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" - }, - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "requires": { - "pify": "3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - } - } - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.1", - "safe-buffer": "5.1.2" - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0" - } - }, - "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" - }, - "mime-db": { - "version": "1.38.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz", - "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==" - }, - "mime-types": { - "version": "2.1.22", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz", - "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==", - "requires": { - "mime-db": "1.38.0" - } - }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" - }, - "min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", - "requires": { - "dom-walk": "0.1.1" - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "1.1.11" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - }, - "minipass": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", - "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", - "requires": { - "safe-buffer": "5.1.2", - "yallist": "3.0.3" - } - }, - "minizlib": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz", - "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", - "requires": { - "minipass": "2.3.5" - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "requires": { - "minimist": "0.0.8" - } - }, - "mkdirp-promise": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz", - "integrity": "sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE=", - "requires": { - "mkdirp": "0.5.1" - } - }, - "mock-fs": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.8.0.tgz", - "integrity": "sha512-Gwj4KnJOW15YeTJKO5frFd/WDO5Mc0zxXqL9oHx3+e9rBqW8EVARqQHSaIXznUdljrD6pvbNGW2ZGXKPEfYJfw==" - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "nan": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.0.tgz", - "integrity": "sha512-5DDQvN0luhXdut8SCwzm/ZuAX2W+fwhqNzfq7CZ+OJzQ6NwpcqmIGyLD1R8MEt7BeErzcsI0JLr4pND2pNp2Cw==" - }, - "nano-json-stream-parser": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz", - "integrity": "sha1-DMj20OK2IrR5xA1JnEbWS3Vcb18=" - }, - "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "2.7.1", - "resolve": "1.10.0", - "semver": "5.6.0", - "validate-npm-package-license": "3.0.4" - } - }, - "number-to-bn": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", - "integrity": "sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA=", - "requires": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" - } - } - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz", - "integrity": "sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==" - }, - "oboe": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.4.tgz", - "integrity": "sha1-IMiM2wwVNxuwQRklfU/dNLCqSfY=", - "requires": { - "http-https": "1.0.0" - } - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "requires": { - "ee-first": "1.1.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1.0.2" - } - }, - "p-cancelable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", - "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==" - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "1.3.0" - } - }, - "p-timeout": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", - "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=", - "requires": { - "p-finally": "1.0.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "parse-asn1": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.4.tgz", - "integrity": "sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==", - "requires": { - "asn1.js": "4.10.1", - "browserify-aes": "1.2.0", - "create-hash": "1.2.0", - "evp_bytestokey": "1.0.3", - "pbkdf2": "3.0.17", - "safe-buffer": "5.1.2" - } - }, - "parse-headers": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.2.tgz", - "integrity": "sha512-/LypJhzFmyBIDYP9aDVgeyEb5sQfbfY5mnDq4hVhlQ69js87wXfmEI5V3xI6vvXasqebp0oCytYFLxsBVfCzSg==", - "requires": { - "for-each": "0.3.3", - "string.prototype.trim": "1.1.2" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "1.3.2" - } - }, - "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, - "requires": { - "pify": "2.3.0" - } - }, - "pbkdf2": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", - "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", - "requires": { - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "ripemd160": "2.0.2", - "safe-buffer": "5.1.2", - "sha.js": "2.4.11" - } - }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "requires": { - "pinkie": "2.0.4" - } - }, - "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", - "dev": true, - "requires": { - "find-up": "2.1.0" - } - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" - }, - "process": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", - "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=" - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" - }, - "proxy-addr": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", - "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", - "requires": { - "forwarded": "0.1.2", - "ipaddr.js": "1.8.0" - } - }, - "psl": { - "version": "1.1.31", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", - "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==" - }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.2.0", - "parse-asn1": "5.1.4", - "randombytes": "2.1.0", - "safe-buffer": "5.1.2" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - }, - "query-string": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", - "requires": { - "decode-uri-component": "0.2.0", - "object-assign": "4.1.1", - "strict-uri-encode": "1.1.0" - } - }, - "querystringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.0.tgz", - "integrity": "sha512-sluvZZ1YiTLD5jsqZcDmFyV2EwToyXZBfpoVOmktMmW+VEnhgakFHnasVph65fOjGPTWN0Nw3+XQaSeMayr0kg==" - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "requires": { - "safe-buffer": "5.1.2" - } - }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "requires": { - "randombytes": "2.1.0", - "safe-buffer": "5.1.2" - } - }, - "randomhex": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/randomhex/-/randomhex-0.1.5.tgz", - "integrity": "sha1-us7vmCMpCRQA8qKRLGzQLxCU9YU=" - }, - "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" - }, - "raw-body": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", - "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", - "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", - "unpipe": "1.0.0" - } - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true, - "requires": { - "load-json-file": "2.0.0", - "normalize-package-data": "2.5.0", - "path-type": "2.0.0" - } - }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "dev": true, - "requires": { - "find-up": "2.1.0", - "read-pkg": "2.0.0" - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - } - } - }, - "regenerator-runtime": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz", - "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==" - }, - "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "requires": { - "aws-sign2": "0.7.0", - "aws4": "1.8.0", - "caseless": "0.12.0", - "combined-stream": "1.0.7", - "extend": "3.0.2", - "forever-agent": "0.6.1", - "form-data": "2.3.3", - "har-validator": "5.1.3", - "http-signature": "1.2.0", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.22", - "oauth-sign": "0.9.0", - "performance-now": "2.1.0", - "qs": "6.5.2", - "safe-buffer": "5.1.2", - "tough-cookie": "2.4.3", - "tunnel-agent": "0.6.0", - "uuid": "3.3.2" - } - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" - }, - "resolve": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", - "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", - "dev": true, - "requires": { - "path-parse": "1.0.6" - } - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.1" - } - }, - "rlp": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.2.tgz", - "integrity": "sha512-Ng2kJEN731Sfv4ZAY2i0ytPMc0BbJKBsVNl0QZY8LxOWSwd+1xpg+fpSRfaMn0heHU447s6Kgy8qfHZR0XTyVw==", - "requires": { - "bn.js": "4.11.8", - "safe-buffer": "5.1.2" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "scrypt": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/scrypt/-/scrypt-6.0.3.tgz", - "integrity": "sha1-BOAUpWgrU/pQwtXM4WfXGcBthw0=", - "requires": { - "nan": "2.13.0" - } - }, - "scrypt-js": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz", - "integrity": "sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==" - }, - "scrypt.js": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/scrypt.js/-/scrypt.js-0.2.0.tgz", - "integrity": "sha1-r40UZbcemZARC+38WTuUeeA6ito=", - "requires": { - "scrypt": "6.0.3", - "scryptsy": "1.2.1" - } - }, - "scryptsy": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/scryptsy/-/scryptsy-1.2.1.tgz", - "integrity": "sha1-oyJfpLJST4AnAHYeKFW987LZIWM=", - "requires": { - "pbkdf2": "3.0.17" - } - }, - "secp256k1": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-3.6.2.tgz", - "integrity": "sha512-90nYt7yb0LmI4A2jJs1grglkTAXrBwxYAjP9bpeKjvJKOjG2fOeH/YI/lchDMIvjrOasd5QXwvV2jwN168xNng==", - "requires": { - "bindings": "1.5.0", - "bip66": "1.1.5", - "bn.js": "4.11.8", - "create-hash": "1.2.0", - "drbg.js": "1.0.1", - "elliptic": "6.4.1", - "nan": "2.13.0", - "safe-buffer": "5.1.2" - } - }, - "seek-bzip": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz", - "integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=", - "requires": { - "commander": "2.8.1" - } - }, - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true - }, - "send": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", - "requires": { - "debug": "2.6.9", - "depd": "1.1.2", - "destroy": "1.0.4", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", - "fresh": "0.5.2", - "http-errors": "1.6.3", - "mime": "1.4.1", - "ms": "2.0.0", - "on-finished": "2.3.0", - "range-parser": "1.2.0", - "statuses": "1.4.0" - }, - "dependencies": { - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - } - } - }, - "serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", - "requires": { - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "parseurl": "1.3.2", - "send": "0.16.2" - } - }, - "servify": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz", - "integrity": "sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==", - "requires": { - "body-parser": "1.18.3", - "cors": "2.8.5", - "express": "4.16.4", - "request": "2.88.0", - "xhr": "2.5.0" - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "requires": { - "inherits": "2.0.1", - "safe-buffer": "5.1.2" - } - }, - "sha3": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/sha3/-/sha3-1.2.2.tgz", - "integrity": "sha1-pmxQmN5MJbyIM27ItIF9AFvKe6k=", - "requires": { - "nan": "2.10.0" - }, - "dependencies": { - "nan": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", - "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==" - } - } - }, - "simple-concat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", - "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=" - }, - "simple-get": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz", - "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==", - "requires": { - "decompress-response": "3.3.0", - "once": "1.4.0", - "simple-concat": "1.0.0" - } - }, - "spdx-correct": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", - "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", - "dev": true, - "requires": { - "spdx-expression-parse": "3.0.0", - "spdx-license-ids": "3.0.3" - } - }, - "spdx-exceptions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "dev": true, - "requires": { - "spdx-exceptions": "2.2.0", - "spdx-license-ids": "3.0.3" - } - }, - "spdx-license-ids": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz", - "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==", - "dev": true - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "requires": { - "asn1": "0.2.4", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.2", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.2", - "getpass": "0.1.7", - "jsbn": "0.1.1", - "safer-buffer": "2.1.2", - "tweetnacl": "0.14.5" - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" - }, - "strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" - }, - "string.prototype.trim": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz", - "integrity": "sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo=", - "requires": { - "define-properties": "1.1.3", - "es-abstract": "1.13.0", - "function-bind": "1.1.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "5.1.2" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "strip-dirs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", - "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", - "requires": { - "is-natural-number": "4.0.1" - } - }, - "strip-hex-prefix": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", - "integrity": "sha1-DF8VX+8RUTczd96du1iNoFUA428=", - "requires": { - "is-hex-prefixed": "1.0.0" - } - }, - "swarm-js": { - "version": "0.1.39", - "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.39.tgz", - "integrity": "sha512-QLMqL2rzF6n5s50BptyD6Oi0R1aWlJC5Y17SRIVXRj6OR1DRIPM7nepvrxxkjA1zNzFz6mUOMjfeqeDaWB7OOg==", - "requires": { - "bluebird": "3.5.3", - "buffer": "5.2.1", - "decompress": "4.2.0", - "eth-lib": "0.1.27", - "fs-extra": "4.0.3", - "got": "7.1.0", - "mime-types": "2.1.22", - "mkdirp-promise": "5.0.1", - "mock-fs": "4.8.0", - "setimmediate": "1.0.5", - "tar": "4.4.8", - "xhr-request-promise": "0.1.2" - } - }, - "tar": { - "version": "4.4.8", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz", - "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==", - "requires": { - "chownr": "1.1.1", - "fs-minipass": "1.2.5", - "minipass": "2.3.5", - "minizlib": "1.2.1", - "mkdirp": "0.5.1", - "safe-buffer": "5.1.2", - "yallist": "3.0.3" - } - }, - "tar-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", - "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", - "requires": { - "bl": "1.2.2", - "buffer-alloc": "1.2.0", - "end-of-stream": "1.4.1", - "fs-constants": "1.0.0", - "readable-stream": "2.3.6", - "to-buffer": "1.1.1", - "xtend": "4.0.1" - } - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" - }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" - }, - "to-buffer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", - "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" - }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "requires": { - "psl": "1.1.31", - "punycode": "1.4.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - } - } - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "requires": { - "safe-buffer": "5.1.2" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" - }, - "type-is": { - "version": "1.6.16", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", - "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "2.1.22" - } - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "requires": { - "is-typedarray": "1.0.0" - } - }, - "typescript": { - "version": "3.3.3333", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.3.3333.tgz", - "integrity": "sha512-JjSKsAfuHBE/fB2oZ8NxtRTk5iGcg6hkYXMnZ3Wc+b2RSqejEqTaem11mHASMnFilHrax3sLK0GDzcJrekZYLw==", - "dev": true - }, - "ultron": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" - }, - "unbzip2-stream": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.3.3.tgz", - "integrity": "sha512-fUlAF7U9Ah1Q6EieQ4x4zLNejrRvDWUYmxXUpN3uziFYCHapjWFaCAnreY9bGgxzaMCFAPPpYNng57CypwJVhg==", - "requires": { - "buffer": "5.2.1", - "through": "2.3.8" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "requires": { - "punycode": "2.1.1" - } - }, - "url-parse": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.4.tgz", - "integrity": "sha512-/92DTTorg4JjktLNLe6GPS2/RvAd/RGr6LuktmWSMLEOa6rjnlrFXNgSbSmkNvCoL2T028A0a1JaJLzRMlFoHg==", - "requires": { - "querystringify": "2.1.0", - "requires-port": "1.0.0" - } - }, - "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", - "requires": { - "prepend-http": "1.0.4" - } - }, - "url-set-query": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", - "integrity": "sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk=" - }, - "url-to-options": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", - "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=" - }, - "utf8": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.1.tgz", - "integrity": "sha1-LgHbAvfY0JRPdxBPFgnrDDBM92g=" - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "3.1.0", - "spdx-expression-parse": "3.0.0" - } - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "requires": { - "assert-plus": "1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "1.3.0" - } - }, - "web3": { - "version": "1.0.0-beta.48", - "resolved": "https://registry.npmjs.org/web3/-/web3-1.0.0-beta.48.tgz", - "integrity": "sha512-/HfIaRQVScZv0iy6fnEZCsXQbbOmtEB08sa2YaCkRo8nqUQo1C+55VC5sXqjrwKaDs9Xf9qxVTiUUeTbKD+KYg==", - "requires": { - "@babel/runtime": "7.3.4", - "@types/node": "10.14.1", - "web3-bzz": "1.0.0-beta.48", - "web3-core": "1.0.0-beta.48", - "web3-core-helpers": "1.0.0-beta.48", - "web3-core-method": "1.0.0-beta.48", - "web3-eth": "1.0.0-beta.48", - "web3-eth-personal": "1.0.0-beta.48", - "web3-net": "1.0.0-beta.48", - "web3-providers": "1.0.0-beta.48", - "web3-shh": "1.0.0-beta.48", - "web3-utils": "1.0.0-beta.48" - } - }, - "web3-bzz": { - "version": "1.0.0-beta.48", - "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.0.0-beta.48.tgz", - "integrity": "sha512-rl+z5cyBXefZ1tgmhnC4QDutCYYmURKogHSkmhoH3ow161D1P8qYrxDqNSXwNcuXyejUaaPzi5OLAlR3JTnyxw==", - "requires": { - "@babel/runtime": "7.3.4", - "@types/node": "10.14.1", - "lodash": "4.17.11", - "swarm-js": "0.1.39" - } - }, - "web3-core": { - "version": "1.0.0-beta.48", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.0.0-beta.48.tgz", - "integrity": "sha512-vOciU4otvpqp5rRJlfjMGuq+OqBG0EYskKwUbQY+UUM8w8g8MRKjYZGzqIMGQGQ3liIbJGQk8WtiVQjh0e5ZrQ==", - "requires": { - "@babel/runtime": "7.3.4", - "@types/node": "10.14.1", - "lodash": "4.17.11", - "web3-utils": "1.0.0-beta.48" - } - }, - "web3-core-helpers": { - "version": "1.0.0-beta.48", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.0.0-beta.48.tgz", - "integrity": "sha512-WjRKTw67IVX1k0S600c9pyp1YZib3AjSOFWAyJu5XbhtckXryZ5oQVFbJRc7XVeJWJA0yLGnqZuSUSh4ot8Byw==", - "requires": { - "@babel/runtime": "7.3.4", - "lodash": "4.17.11", - "web3-eth-iban": "1.0.0-beta.48", - "web3-utils": "1.0.0-beta.48" - } - }, - "web3-core-method": { - "version": "1.0.0-beta.48", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.0.0-beta.48.tgz", - "integrity": "sha512-/VfRiFzksrHqKbicK+Yw8SzK2hw/YXKjTQ6l/j9CVFw2FDpBqQtlo9A3qZNeoo6aIh1McTVeSSIrR9vJGFo3dw==", - "requires": { - "@babel/runtime": "7.3.4", - "eventemitter3": "3.1.0", - "lodash": "4.17.11", - "web3-core": "1.0.0-beta.48", - "web3-core-helpers": "1.0.0-beta.48", - "web3-core-promievent": "1.0.0-beta.48", - "web3-core-subscriptions": "1.0.0-beta.48", - "web3-utils": "1.0.0-beta.48" - } - }, - "web3-core-promievent": { - "version": "1.0.0-beta.48", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.0.0-beta.48.tgz", - "integrity": "sha512-GNUnYUL0PUO/QzvlYxIlZW5Pra3jyjN6uHuUSDFRp59NbknluP470nTSC/+0XkvZrVTYADf0+04yyOlVM083Ug==", - "requires": { - "@babel/runtime": "7.3.4", - "eventemitter3": "3.1.0" - } - }, - "web3-core-subscriptions": { - "version": "1.0.0-beta.48", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.0.0-beta.48.tgz", - "integrity": "sha512-9G5hQhFuEvEtZ+e+wEulpfGQnUny7McDiQ6G3pxN6b5/Wg7MVW5Zovcm8s7kvBGISW/8UkRVOJ1vYkzjH0Y2fg==", - "requires": { - "@babel/runtime": "7.3.4", - "eventemitter3": "3.1.0", - "lodash": "4.17.11", - "web3-core-helpers": "1.0.0-beta.48", - "web3-utils": "1.0.0-beta.48" - } - }, - "web3-eth": { - "version": "1.0.0-beta.48", - "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.0.0-beta.48.tgz", - "integrity": "sha512-PTSe+UAzd/HxKFzG8VVr0WePtnErHhXeRu3j2dA+Z4ucVULJcJo8r6ux+ekWKNZMxXV+gtJjoChk7WGIqXLmSw==", - "requires": { - "@babel/runtime": "7.3.4", - "eth-lib": "0.2.8", - "web3-core": "1.0.0-beta.48", - "web3-core-helpers": "1.0.0-beta.48", - "web3-core-method": "1.0.0-beta.48", - "web3-core-subscriptions": "1.0.0-beta.48", - "web3-eth-abi": "1.0.0-beta.48", - "web3-eth-accounts": "1.0.0-beta.48", - "web3-eth-contract": "1.0.0-beta.48", - "web3-eth-ens": "1.0.0-beta.48", - "web3-eth-iban": "1.0.0-beta.48", - "web3-eth-personal": "1.0.0-beta.48", - "web3-net": "1.0.0-beta.48", - "web3-providers": "1.0.0-beta.48", - "web3-utils": "1.0.0-beta.48" - }, - "dependencies": { - "eth-lib": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", - "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", - "requires": { - "bn.js": "4.11.8", - "elliptic": "6.4.1", - "xhr-request-promise": "0.1.2" - } - } - } - }, - "web3-eth-abi": { - "version": "1.0.0-beta.48", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.0.0-beta.48.tgz", - "integrity": "sha512-wT1EarsrxHSkd4ZKMn9McgRVXa5fFaNHkjBRo/idXWyV/MMrzs7oCa2AtovrCrkQRiT2GmecaBDLXxGPA06grw==", - "requires": { - "@babel/runtime": "7.3.4", - "ethers": "4.0.26", - "lodash": "4.17.11", - "web3-utils": "1.0.0-beta.48" - } - }, - "web3-eth-accounts": { - "version": "1.0.0-beta.48", - "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.0.0-beta.48.tgz", - "integrity": "sha512-h+1I7Ao0ALKRz0EeDBcZ+ASYyvW06DZmsIYl0yqKTdH3ilfhTkPrEUjmnRPA9KKvJQvrmUkSLEcBHc6OxG+zlA==", - "requires": { - "@babel/runtime": "7.3.4", - "crypto-browserify": "3.12.0", - "eth-lib": "0.2.8", - "lodash": "4.17.11", - "scrypt.js": "0.2.0", - "uuid": "3.3.2", - "web3-core": "1.0.0-beta.48", - "web3-core-helpers": "1.0.0-beta.48", - "web3-core-method": "1.0.0-beta.48", - "web3-providers": "1.0.0-beta.48", - "web3-utils": "1.0.0-beta.48" - }, - "dependencies": { - "eth-lib": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", - "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", - "requires": { - "bn.js": "4.11.8", - "elliptic": "6.4.1", - "xhr-request-promise": "0.1.2" - } - } - } - }, - "web3-eth-contract": { - "version": "1.0.0-beta.48", - "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.0.0-beta.48.tgz", - "integrity": "sha512-V02dZ0FozYAfE9LBiqHEUWNWY5K9EIFCoQ/9lJz/ixgeyzDe6LRWzec1fT0ntPrMaU3J3hr6+2Ikg41xnfYoaQ==", - "requires": { - "@babel/runtime": "7.3.4", - "lodash": "4.17.11", - "web3-core": "1.0.0-beta.48", - "web3-core-helpers": "1.0.0-beta.48", - "web3-core-method": "1.0.0-beta.48", - "web3-core-promievent": "1.0.0-beta.48", - "web3-core-subscriptions": "1.0.0-beta.48", - "web3-eth-abi": "1.0.0-beta.48", - "web3-eth-accounts": "1.0.0-beta.48", - "web3-providers": "1.0.0-beta.48", - "web3-utils": "1.0.0-beta.48" - } - }, - "web3-eth-ens": { - "version": "1.0.0-beta.48", - "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.0.0-beta.48.tgz", - "integrity": "sha512-5pmpbms7n5o6zoKc77d5qWNbjPEfeU9qbTsmzbaZenriVpMqXpvdriuCDLkB/3OV4PvBi+z4Lj8RBTiDb2jBuA==", - "requires": { - "@babel/runtime": "7.3.4", - "eth-ens-namehash": "2.0.8", - "lodash": "4.17.11", - "web3-core": "1.0.0-beta.48", - "web3-core-helpers": "1.0.0-beta.48", - "web3-core-method": "1.0.0-beta.48", - "web3-core-promievent": "1.0.0-beta.48", - "web3-eth-abi": "1.0.0-beta.48", - "web3-eth-contract": "1.0.0-beta.48", - "web3-net": "1.0.0-beta.48", - "web3-providers": "1.0.0-beta.48", - "web3-utils": "1.0.0-beta.48" - } - }, - "web3-eth-iban": { - "version": "1.0.0-beta.48", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.0.0-beta.48.tgz", - "integrity": "sha512-ZQapOV6qTP6Wb3TMFUNRyyFwFgPYbB4pGdSW3OkNjFpx8xr+QjcQgwa6EbnSgF+3ApgSWeUzPtdRlqvV/7j5Lw==", - "requires": { - "@babel/runtime": "7.3.4", - "bn.js": "4.11.8", - "web3-utils": "1.0.0-beta.48" - } - }, - "web3-eth-personal": { - "version": "1.0.0-beta.48", - "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.0.0-beta.48.tgz", - "integrity": "sha512-mcoslAQpxBbGiPRO6tOAHiLK3WoE+O1fN/6WJLRkEYlDUEJeo3eoWiAkkyaCZyzqCrrohZpZ977s7/spuxSSDA==", - "requires": { - "@babel/runtime": "7.3.4", - "web3-core": "1.0.0-beta.48", - "web3-core-helpers": "1.0.0-beta.48", - "web3-core-method": "1.0.0-beta.48", - "web3-net": "1.0.0-beta.48", - "web3-providers": "1.0.0-beta.48", - "web3-utils": "1.0.0-beta.48" - } - }, - "web3-net": { - "version": "1.0.0-beta.48", - "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.0.0-beta.48.tgz", - "integrity": "sha512-q9nLXc2DwepLaTvbJ8Bvv5QHJVY9CUNKJQnIYfcU+R5OHkZ9eN//B8skHbmk5dtbwKJbeUyt5sfZKas/cf4mlw==", - "requires": { - "@babel/runtime": "7.3.4", - "lodash": "4.17.11", - "web3-core": "1.0.0-beta.48", - "web3-core-helpers": "1.0.0-beta.48", - "web3-core-method": "1.0.0-beta.48", - "web3-providers": "1.0.0-beta.48", - "web3-utils": "1.0.0-beta.48" - } - }, - "web3-providers": { - "version": "1.0.0-beta.48", - "resolved": "https://registry.npmjs.org/web3-providers/-/web3-providers-1.0.0-beta.48.tgz", - "integrity": "sha512-rqWe370lftaYqvTSe8b7vdaANEBeoME6f30yD8VIEkKD6iEbp5TqCtP6A22zC6CEcVnCUrXIKsBCSI71f+QEtw==", - "requires": { - "@babel/runtime": "7.3.4", - "@types/node": "10.14.1", - "eventemitter3": "3.1.0", - "lodash": "4.17.11", - "oboe": "2.1.4", - "url-parse": "1.4.4", - "websocket": "git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2", - "xhr2-cookies": "1.1.0" - } - }, - "web3-shh": { - "version": "1.0.0-beta.48", - "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.0.0-beta.48.tgz", - "integrity": "sha512-7F3JcsdMxuq2ezC2BaSFqy0suXtU7a58CjUIM6kVeWa1a3jwSIPvfzlDtMe3AKaabeOay0jaHHs3UUbw4Hzi+A==", - "requires": { - "@babel/runtime": "7.3.4", - "web3-core": "1.0.0-beta.48", - "web3-core-helpers": "1.0.0-beta.48", - "web3-core-method": "1.0.0-beta.48", - "web3-core-subscriptions": "1.0.0-beta.48", - "web3-net": "1.0.0-beta.48", - "web3-providers": "1.0.0-beta.48", - "web3-utils": "1.0.0-beta.48" - } - }, - "web3-utils": { - "version": "1.0.0-beta.48", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.0.0-beta.48.tgz", - "integrity": "sha512-TK61xy7mRpLt53M8GbPnrFr9lA2SmqLHvWIJN8K9cU4oDH9MWxuxxJ+Lxg+pQPKqIO9f1u+AiMRNvSEuMeeAmg==", - "requires": { - "@babel/runtime": "7.3.4", - "@types/bn.js": "4.11.4", - "@types/node": "10.14.1", - "bn.js": "4.11.8", - "eth-lib": "0.2.8", - "ethjs-unit": "0.1.6", - "lodash": "4.17.11", - "number-to-bn": "1.7.0", - "randomhex": "0.1.5", - "utf8": "2.1.1" - }, - "dependencies": { - "eth-lib": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", - "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", - "requires": { - "bn.js": "4.11.8", - "elliptic": "6.4.1", - "xhr-request-promise": "0.1.2" - } - } - } - }, - "websocket": { - "version": "git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2", - "requires": { - "debug": "2.6.9", - "nan": "2.13.0", - "typedarray-to-buffer": "3.1.5", - "yaeti": "0.0.6" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", - "requires": { - "async-limiter": "1.0.0", - "safe-buffer": "5.1.2", - "ultron": "1.1.1" - } - }, - "xhr": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.5.0.tgz", - "integrity": "sha512-4nlO/14t3BNUZRXIXfXe+3N6w3s1KoxcJUUURctd64BLRe67E4gRwp4PjywtDY72fXpZ1y6Ch0VZQRY/gMPzzQ==", - "requires": { - "global": "4.3.2", - "is-function": "1.0.1", - "parse-headers": "2.0.2", - "xtend": "4.0.1" - } - }, - "xhr-request": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", - "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", - "requires": { - "buffer-to-arraybuffer": "0.0.5", - "object-assign": "4.1.1", - "query-string": "5.1.1", - "simple-get": "2.8.1", - "timed-out": "4.0.1", - "url-set-query": "1.0.0", - "xhr": "2.5.0" - } - }, - "xhr-request-promise": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.2.tgz", - "integrity": "sha1-NDxE0e53JrhkgGloLQ+EDIO0Jh0=", - "requires": { - "xhr-request": "1.1.0" - } - }, - "xhr2-cookies": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz", - "integrity": "sha1-fXdEnQmZGX8VXLc7I99yUF7YnUg=", - "requires": { - "cookiejar": "2.1.2" - } - }, - "xmlhttprequest": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", - "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=" - }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" - }, - "yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=" - }, - "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" - }, - "yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", - "requires": { - "buffer-crc32": "0.2.13", - "fd-slicer": "1.1.0" - } - } - } + "name": "crypto-wallet-core", + "version": "8.1.1", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/runtime": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.3.tgz", + "integrity": "sha512-9lsJwJLxDh/T3Q3SZszfWOTkk3pHbkmH+3KY+zwIDmsNlxsumuhS2TH3NIpktU4kNvfzy+k3eLT7aTJSPTo0OA==", + "requires": { + "regenerator-runtime": "0.13.2" + } + }, + "@types/bn.js": { + "version": "4.11.5", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.5.tgz", + "integrity": "sha512-AEAZcIZga0JgVMHNtl1CprA/hXX7/wPt79AgR4XqaDt7jyj3QWYw6LPoOiznPtugDmlubUnAahMs2PFxGcQrng==", + "requires": { + "@types/node": "10.14.4" + } + }, + "@types/elliptic": { + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/@types/elliptic/-/elliptic-6.4.6.tgz", + "integrity": "sha512-rAQEVgU0P+VWWTjUw3yGlVeDezyObfjfWq1d1noDOKB1VldM1u6Uvz4Va6eGkWUSDRFfDCOQmiRvqHRO8EvZGg==", + "dev": true, + "requires": { + "@types/bn.js": "4.11.5" + } + }, + "@types/ethereumjs-util": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@types/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz", + "integrity": "sha512-qwQgQqXXTRv2h2AlJef+tMEszLFkCB9dWnrJYIdAwqjubERXEc/geB+S3apRw0yQyTVnsBf8r6BhlrE8vx+3WQ==", + "dev": true, + "requires": { + "@types/bn.js": "4.11.5", + "@types/node": "10.14.4" + } + }, + "@types/node": { + "version": "10.14.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.4.tgz", + "integrity": "sha512-DT25xX/YgyPKiHFOpNuANIQIVvYEwCWXgK2jYYwqgaMrYE6+tq+DtmMwlD3drl6DJbUwtlIDnn0d7tIn/EbXBg==" + }, + "@types/secp256k1": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-3.5.0.tgz", + "integrity": "sha512-ZE39QhkIaNK6xbKIp1VLN5O36r97LuslLmRnjAcT0sVDxcfvrk3zqp/VnIfmGza7J6jDxR8dIai3hsCxPYglPA==", + "dev": true, + "requires": { + "@types/node": "10.14.4" + } + }, + "accepts": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "requires": { + "mime-types": "2.1.22", + "negotiator": "0.6.1" + } + }, + "aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0=" + }, + "ajv": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", + "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", + "requires": { + "fast-deep-equal": "2.0.1", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.4.1", + "uri-js": "4.2.2" + } + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "requires": { + "safer-buffer": "2.1.2" + } + }, + "asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "requires": { + "bn.js": "4.11.8", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "async-limiter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + }, + "aws4": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base-x": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.5.tgz", + "integrity": "sha512-C3picSgzPSLE+jW3tcBzJoGwitOtazb5B+5YmAxZm2ybmTi9LNgAtDO/jjVEBZwHoXmDBZ9m/IELj3elJVRBcA==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "base64-js": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", + "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==" + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "requires": { + "tweetnacl": "0.14.5" + } + }, + "bcryptjs": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", + "integrity": "sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms=" + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "bip66": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/bip66/-/bip66-1.1.5.tgz", + "integrity": "sha1-AfqHSHhcpwlV1QESF9GzE5lpyiI=", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "bitcore-lib": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/bitcore-lib/-/bitcore-lib-8.1.1.tgz", + "integrity": "sha512-YyzpyKtwBIeOUu55oqltfk3/Uz8SYi1ayWq3JnaoGSzR4BNpD54sYejv2gZ5TuDe4KwBqvA2C5X1zkPBtlkGhQ==", + "requires": { + "bn.js": "4.11.8", + "bs58": "4.0.1", + "buffer-compare": "1.1.1", + "elliptic": "6.4.0", + "inherits": "2.0.1", + "lodash": "4.17.11" + }, + "dependencies": { + "bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", + "requires": { + "base-x": "3.0.5" + } + }, + "buffer-compare": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-compare/-/buffer-compare-1.1.1.tgz", + "integrity": "sha1-W+e+hTr4kZjR9N3AkNHWakiu9ZY=" + }, + "elliptic": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", + "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0", + "hash.js": "1.1.7", + "hmac-drbg": "1.0.1", + "inherits": "2.0.1", + "minimalistic-assert": "1.0.1", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" + } + } + }, + "bitcore-lib-cash": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/bitcore-lib-cash/-/bitcore-lib-cash-8.1.1.tgz", + "integrity": "sha512-1yI8T87SL0/jCGvIqC8LH7bbe6Y22nob4jN6dW3QIrTWq8cr+aC9bFkpq/E5FDokX+nuVAHSmIjOlMu+xBvQRw==", + "requires": { + "bitcore-lib": "8.1.1", + "bn.js": "4.11.8", + "bs58": "4.0.1", + "buffer-compare": "1.1.1", + "elliptic": "6.4.0", + "inherits": "2.0.1", + "lodash": "4.17.11" + }, + "dependencies": { + "bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", + "requires": { + "base-x": "3.0.5" + } + }, + "buffer-compare": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-compare/-/buffer-compare-1.1.1.tgz", + "integrity": "sha1-W+e+hTr4kZjR9N3AkNHWakiu9ZY=" + }, + "elliptic": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", + "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0", + "hash.js": "1.1.7", + "hmac-drbg": "1.0.1", + "inherits": "2.0.1", + "minimalistic-assert": "1.0.1", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" + } + } + }, + "bl": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", + "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", + "requires": { + "readable-stream": "2.3.6", + "safe-buffer": "5.1.2" + } + }, + "bluebird": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.4.tgz", + "integrity": "sha512-FG+nFEZChJrbQ9tIccIfZJBz3J7mLrAhxakAbnrJWn8d7aKOC+LWifa0G+p4ZqKp4y13T7juYvdhq9NzKdsrjw==" + }, + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" + }, + "body-parser": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", + "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", + "requires": { + "bytes": "3.0.0", + "content-type": "1.0.4", + "debug": "2.6.9", + "depd": "1.1.2", + "http-errors": "1.6.3", + "iconv-lite": "0.4.23", + "on-finished": "2.3.0", + "qs": "6.5.2", + "raw-body": "2.3.3", + "type-is": "1.6.16" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "requires": { + "buffer-xor": "1.0.3", + "cipher-base": "1.0.4", + "create-hash": "1.2.0", + "evp_bytestokey": "1.0.3", + "inherits": "2.0.3", + "safe-buffer": "5.1.2" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "requires": { + "browserify-aes": "1.2.0", + "browserify-des": "1.0.2", + "evp_bytestokey": "1.0.3" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "requires": { + "cipher-base": "1.0.4", + "des.js": "1.0.0", + "inherits": "2.0.3", + "safe-buffer": "5.1.2" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "requires": { + "bn.js": "4.11.8", + "randombytes": "2.1.0" + } + }, + "browserify-sha3": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/browserify-sha3/-/browserify-sha3-0.0.4.tgz", + "integrity": "sha1-CGxHuMgjFsnUcCLCYYWVRXbdjiY=", + "requires": { + "js-sha3": "0.6.1", + "safe-buffer": "5.1.2" + } + }, + "browserify-sign": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "requires": { + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "elliptic": "6.4.1", + "inherits": "2.0.3", + "parse-asn1": "5.1.4" + } + }, + "buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", + "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", + "requires": { + "base64-js": "1.3.0", + "ieee754": "1.1.13" + } + }, + "buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "requires": { + "buffer-alloc-unsafe": "1.1.0", + "buffer-fill": "1.0.0" + } + }, + "buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" + }, + "buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" + }, + "buffer-to-arraybuffer": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", + "integrity": "sha1-YGSkD6dutDxyOrqe+PbhIW0QURo=" + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "chownr": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", + "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==" + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.2" + } + }, + "combined-stream": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", + "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", + "requires": { + "delayed-stream": "1.0.0" + } + }, + "commander": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", + "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", + "requires": { + "graceful-readlink": "1.0.1" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", + "dev": true + }, + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "cookiejar": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz", + "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "requires": { + "object-assign": "4.1.1", + "vary": "1.1.2" + } + }, + "create-ecdh": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", + "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "requires": { + "bn.js": "4.11.8", + "elliptic": "6.4.1" + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "requires": { + "cipher-base": "1.0.4", + "inherits": "2.0.3", + "md5.js": "1.3.5", + "ripemd160": "2.0.2", + "sha.js": "2.4.11" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "requires": { + "cipher-base": "1.0.4", + "create-hash": "1.2.0", + "inherits": "2.0.3", + "ripemd160": "2.0.2", + "safe-buffer": "5.1.2", + "sha.js": "2.4.11" + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "requires": { + "browserify-cipher": "1.0.1", + "browserify-sign": "4.0.4", + "create-ecdh": "4.0.3", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "diffie-hellman": "5.0.3", + "inherits": "2.0.3", + "pbkdf2": "3.0.17", + "public-encrypt": "4.0.3", + "randombytes": "2.1.0", + "randomfill": "1.0.4" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "1.0.0" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + }, + "decompress": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.0.tgz", + "integrity": "sha1-eu3YVCflqS2s/lVnSnxQXpbQH50=", + "requires": { + "decompress-tar": "4.1.1", + "decompress-tarbz2": "4.1.1", + "decompress-targz": "4.1.1", + "decompress-unzip": "4.0.1", + "graceful-fs": "4.1.15", + "make-dir": "1.3.0", + "pify": "2.3.0", + "strip-dirs": "2.1.0" + } + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "requires": { + "mimic-response": "1.0.1" + } + }, + "decompress-tar": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", + "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", + "requires": { + "file-type": "5.2.0", + "is-stream": "1.1.0", + "tar-stream": "1.6.2" + } + }, + "decompress-tarbz2": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", + "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", + "requires": { + "decompress-tar": "4.1.1", + "file-type": "6.2.0", + "is-stream": "1.1.0", + "seek-bzip": "1.0.5", + "unbzip2-stream": "1.3.3" + }, + "dependencies": { + "file-type": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", + "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==" + } + } + }, + "decompress-targz": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", + "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", + "requires": { + "decompress-tar": "4.1.1", + "file-type": "5.2.0", + "is-stream": "1.1.0" + } + }, + "decompress-unzip": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", + "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", + "requires": { + "file-type": "3.9.0", + "get-stream": "2.3.1", + "pify": "2.3.0", + "yauzl": "2.10.0" + }, + "dependencies": { + "file-type": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=" + } + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "requires": { + "object-keys": "1.1.0" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "des.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" + } + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "requires": { + "bn.js": "4.11.8", + "miller-rabin": "4.0.1", + "randombytes": "2.1.0" + } + }, + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "dev": true, + "requires": { + "esutils": "2.0.2", + "isarray": "1.0.0" + } + }, + "dom-walk": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", + "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=" + }, + "drbg.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/drbg.js/-/drbg.js-1.0.1.tgz", + "integrity": "sha1-Pja2xCs3BDgjzbwzLVjzHiRFSAs=", + "requires": { + "browserify-aes": "1.2.0", + "create-hash": "1.2.0", + "create-hmac": "1.1.7" + } + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "requires": { + "jsbn": "0.1.1", + "safer-buffer": "2.1.2" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "elliptic": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", + "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0", + "hash.js": "1.1.7", + "hmac-drbg": "1.0.1", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "requires": { + "once": "1.4.0" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "0.2.1" + } + }, + "es-abstract": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", + "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", + "requires": { + "es-to-primitive": "1.2.0", + "function-bind": "1.1.1", + "has": "1.0.3", + "is-callable": "1.1.4", + "is-regex": "1.0.4", + "object-keys": "1.1.0" + } + }, + "es-to-primitive": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", + "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "requires": { + "is-callable": "1.1.4", + "is-date-object": "1.0.1", + "is-symbol": "1.0.2" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "eslint-config-airbnb-base": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-12.1.0.tgz", + "integrity": "sha512-/vjm0Px5ZCpmJqnjIzcFb9TKZrKWz0gnuG/7Gfkt0Db1ELJR51xkZth+t14rYdqWgX836XbuxtArbIHlVhbLBA==", + "dev": true, + "requires": { + "eslint-restricted-globals": "0.1.1" + } + }, + "eslint-import-resolver-node": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", + "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", + "dev": true, + "requires": { + "debug": "2.6.9", + "resolve": "1.10.0" + } + }, + "eslint-module-utils": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.3.0.tgz", + "integrity": "sha512-lmDJgeOOjk8hObTysjqH7wyMi+nsHwwvfBykwfhjR1LNdd7C2uFJBvx4OpWYpXOw4df1yE1cDEVd1yLHitk34w==", + "dev": true, + "requires": { + "debug": "2.6.9", + "pkg-dir": "2.0.0" + } + }, + "eslint-plugin-import": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.16.0.tgz", + "integrity": "sha512-z6oqWlf1x5GkHIFgrSvtmudnqM6Q60KM4KvpWi5ubonMjycLjndvd5+8VAZIsTlHC03djdgJuyKG6XO577px6A==", + "dev": true, + "requires": { + "contains-path": "0.1.0", + "debug": "2.6.9", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "0.3.2", + "eslint-module-utils": "2.3.0", + "has": "1.0.3", + "lodash": "4.17.11", + "minimatch": "3.0.4", + "read-pkg-up": "2.0.0", + "resolve": "1.10.0" + } + }, + "eslint-restricted-globals": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz", + "integrity": "sha1-NfDVy8ZMLj7WLpO0saevBbp+1Nc=", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "eth-ens-namehash": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz", + "integrity": "sha1-IprEbsqG1S4MmR58sq74P/D2i88=", + "requires": { + "idna-uts46-hx": "2.3.1", + "js-sha3": "0.5.7" + }, + "dependencies": { + "js-sha3": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", + "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=" + } + } + }, + "eth-lib": { + "version": "0.1.27", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.27.tgz", + "integrity": "sha512-B8czsfkJYzn2UIEMwjc7Mbj+Cy72V+/OXH/tb44LV8jhrjizQJJ325xMOMyk3+ETa6r6oi0jsUY14+om8mQMWA==", + "requires": { + "bn.js": "4.11.8", + "elliptic": "6.4.1", + "keccakjs": "0.2.3", + "nano-json-stream-parser": "0.1.2", + "servify": "0.1.12", + "ws": "3.3.3", + "xhr-request-promise": "0.1.2" + } + }, + "ethereum-common": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.0.18.tgz", + "integrity": "sha1-L9w1dvIykDNYl26znaeDIT/5Uj8=" + }, + "ethereumjs-tx": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-1.3.7.tgz", + "integrity": "sha512-wvLMxzt1RPhAQ9Yi3/HKZTn0FZYpnsmQdbKYfUUpi4j1SEIcbkd9tndVjcPrufY3V7j2IebOpC00Zp2P/Ay2kA==", + "requires": { + "ethereum-common": "0.0.18", + "ethereumjs-util": "5.2.0" + }, + "dependencies": { + "ethereumjs-util": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz", + "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", + "requires": { + "bn.js": "4.11.8", + "create-hash": "1.2.0", + "ethjs-util": "0.1.6", + "keccak": "1.4.0", + "rlp": "2.2.3", + "safe-buffer": "5.1.2", + "secp256k1": "3.6.2" + } + } + } + }, + "ethereumjs-util": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.1.0.tgz", + "integrity": "sha512-URESKMFbDeJxnAxPppnk2fN6Y3BIatn9fwn76Lm8bQlt+s52TpG8dN9M66MLPuRAiAOIqL3dfwqWJf0sd0fL0Q==", + "requires": { + "bn.js": "4.11.8", + "create-hash": "1.2.0", + "ethjs-util": "0.1.6", + "keccak": "1.4.0", + "rlp": "2.2.3", + "safe-buffer": "5.1.2", + "secp256k1": "3.6.2" + } + }, + "ethers": { + "version": "4.0.27", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.27.tgz", + "integrity": "sha512-+DXZLP/tyFnXWxqr2fXLT67KlGUfLuvDkHSOtSC9TUVG9OIj6yrG5JPeXRMYo15xkOYwnjgdMKrXp5V94rtjJA==", + "requires": { + "@types/node": "10.14.4", + "aes-js": "3.0.0", + "bn.js": "4.11.8", + "elliptic": "6.3.3", + "hash.js": "1.1.3", + "js-sha3": "0.5.7", + "scrypt-js": "2.0.4", + "setimmediate": "1.0.4", + "uuid": "2.0.1", + "xmlhttprequest": "1.8.0" + }, + "dependencies": { + "elliptic": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz", + "integrity": "sha1-VILZZG1UvLif19mU/J4ulWiHbj8=", + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0", + "hash.js": "1.1.3", + "inherits": "2.0.3" + } + }, + "hash.js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", + "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" + } + }, + "js-sha3": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", + "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=" + }, + "setimmediate": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz", + "integrity": "sha1-IOgd5iLUoCWIzgyNqJc8vPHTE48=" + }, + "uuid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", + "integrity": "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w=" + } + } + }, + "ethjs-unit": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", + "integrity": "sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk=", + "requires": { + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" + } + } + }, + "ethjs-util": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", + "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", + "requires": { + "is-hex-prefixed": "1.0.0", + "strip-hex-prefix": "1.0.0" + } + }, + "eventemitter3": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", + "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==" + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "requires": { + "md5.js": "1.3.5", + "safe-buffer": "5.1.2" + } + }, + "express": { + "version": "4.16.4", + "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", + "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", + "requires": { + "accepts": "1.3.5", + "array-flatten": "1.1.1", + "body-parser": "1.18.3", + "content-disposition": "0.5.2", + "content-type": "1.0.4", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "1.1.2", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", + "finalhandler": "1.1.1", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "1.1.2", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "path-to-regexp": "0.1.7", + "proxy-addr": "2.0.4", + "qs": "6.5.2", + "range-parser": "1.2.0", + "safe-buffer": "5.1.2", + "send": "0.16.2", + "serve-static": "1.13.2", + "setprototypeof": "1.1.0", + "statuses": "1.4.0", + "type-is": "1.6.16", + "utils-merge": "1.0.1", + "vary": "1.1.2" + }, + "dependencies": { + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "requires": { + "pend": "1.2.0" + } + }, + "file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=" + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + }, + "finalhandler": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", + "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", + "requires": { + "debug": "2.6.9", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "statuses": "1.4.0", + "unpipe": "1.0.0" + }, + "dependencies": { + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + } + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "2.0.0" + } + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "requires": { + "is-callable": "1.1.4" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.7", + "mime-types": "2.1.22" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "requires": { + "graceful-fs": "4.1.15", + "jsonfile": "4.0.0", + "universalify": "0.1.2" + } + }, + "fs-minipass": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", + "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", + "requires": { + "minipass": "2.3.5" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "get-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", + "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", + "requires": { + "object-assign": "4.1.1", + "pinkie-promise": "2.0.1" + } + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "1.0.0" + } + }, + "global": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", + "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", + "requires": { + "min-document": "2.19.0", + "process": "0.5.2" + } + }, + "got": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", + "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", + "requires": { + "decompress-response": "3.3.0", + "duplexer3": "0.1.4", + "get-stream": "3.0.0", + "is-plain-obj": "1.1.0", + "is-retry-allowed": "1.1.0", + "is-stream": "1.1.0", + "isurl": "1.0.0", + "lowercase-keys": "1.0.1", + "p-cancelable": "0.3.0", + "p-timeout": "1.2.1", + "safe-buffer": "5.1.2", + "timed-out": "4.0.1", + "url-parse-lax": "1.0.0", + "url-to-options": "1.0.1" + }, + "dependencies": { + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + } + } + }, + "graceful-fs": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" + }, + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "requires": { + "ajv": "6.10.0", + "har-schema": "2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "1.1.1" + } + }, + "has-symbol-support-x": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", + "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==" + }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" + }, + "has-to-string-tag-x": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", + "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", + "requires": { + "has-symbol-support-x": "1.4.2" + } + }, + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.2" + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" + } + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "requires": { + "hash.js": "1.1.7", + "minimalistic-assert": "1.0.1", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "hosted-git-info": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", + "dev": true + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "requires": { + "depd": "1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": "1.5.0" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "1.0.0", + "jsprim": "1.4.1", + "sshpk": "1.16.1" + } + }, + "iconv-lite": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "requires": { + "safer-buffer": "2.1.2" + } + }, + "idna-uts46-hx": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz", + "integrity": "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==", + "requires": { + "punycode": "2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", + "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=" + } + } + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ipaddr.js": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", + "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=" + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" + }, + "is-function": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.1.tgz", + "integrity": "sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=" + }, + "is-hex-prefixed": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ=" + }, + "is-natural-number": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", + "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=" + }, + "is-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", + "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=" + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" + }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "requires": { + "has": "1.0.3" + } + }, + "is-retry-allowed": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", + "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=" + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "is-symbol": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "requires": { + "has-symbols": "1.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "isurl": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", + "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", + "requires": { + "has-to-string-tag-x": "1.4.1", + "is-object": "1.0.1" + } + }, + "js-sha3": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.6.1.tgz", + "integrity": "sha1-W4n3enR3Z5h39YxKB1JAk0sflcA=" + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "requires": { + "graceful-fs": "4.1.15" + } + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "keccak": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-1.4.0.tgz", + "integrity": "sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw==", + "requires": { + "bindings": "1.5.0", + "inherits": "2.0.3", + "nan": "2.13.2", + "safe-buffer": "5.1.2" + } + }, + "keccakjs": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/keccakjs/-/keccakjs-0.2.3.tgz", + "integrity": "sha512-BjLkNDcfaZ6l8HBG9tH0tpmDv3sS2mA7FNQxFHpCdzP3Gb2MVruXBSuoM66SnVxKJpAr5dKGdkHD+bDokt8fTg==", + "requires": { + "browserify-sha3": "0.0.4", + "sha3": "1.2.2" + } + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "4.1.15", + "parse-json": "2.2.0", + "pify": "2.3.0", + "strip-bom": "3.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "2.0.0", + "path-exists": "3.0.0" + } + }, + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "requires": { + "pify": "3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } + } + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "requires": { + "hash-base": "3.0.4", + "inherits": "2.0.3", + "safe-buffer": "5.1.2" + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0" + } + }, + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" + }, + "mime-db": { + "version": "1.38.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz", + "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==" + }, + "mime-types": { + "version": "2.1.22", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz", + "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==", + "requires": { + "mime-db": "1.38.0" + } + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" + }, + "min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", + "requires": { + "dom-walk": "0.1.1" + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.11" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "minipass": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", + "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", + "requires": { + "safe-buffer": "5.1.2", + "yallist": "3.0.3" + } + }, + "minizlib": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz", + "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", + "requires": { + "minipass": "2.3.5" + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + } + }, + "mkdirp-promise": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz", + "integrity": "sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE=", + "requires": { + "mkdirp": "0.5.1" + } + }, + "mock-fs": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.8.0.tgz", + "integrity": "sha512-Gwj4KnJOW15YeTJKO5frFd/WDO5Mc0zxXqL9oHx3+e9rBqW8EVARqQHSaIXznUdljrD6pvbNGW2ZGXKPEfYJfw==" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "nan": { + "version": "2.13.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz", + "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==" + }, + "nano-json-stream-parser": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz", + "integrity": "sha1-DMj20OK2IrR5xA1JnEbWS3Vcb18=" + }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "2.7.1", + "resolve": "1.10.0", + "semver": "5.7.0", + "validate-npm-package-license": "3.0.4" + } + }, + "number-to-bn": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", + "integrity": "sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA=", + "requires": { + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" + } + } + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz", + "integrity": "sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1.0.2" + } + }, + "p-cancelable": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", + "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==" + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "1.3.0" + } + }, + "p-timeout": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", + "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=", + "requires": { + "p-finally": "1.0.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "parse-asn1": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.4.tgz", + "integrity": "sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==", + "requires": { + "asn1.js": "4.10.1", + "browserify-aes": "1.2.0", + "create-hash": "1.2.0", + "evp_bytestokey": "1.0.3", + "pbkdf2": "3.0.17", + "safe-buffer": "5.1.2" + } + }, + "parse-headers": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.2.tgz", + "integrity": "sha512-/LypJhzFmyBIDYP9aDVgeyEb5sQfbfY5mnDq4hVhlQ69js87wXfmEI5V3xI6vvXasqebp0oCytYFLxsBVfCzSg==", + "requires": { + "for-each": "0.3.3", + "string.prototype.trim": "1.1.2" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "1.3.2" + } + }, + "parseurl": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "2.3.0" + } + }, + "pbkdf2": { + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", + "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", + "requires": { + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "ripemd160": "2.0.2", + "safe-buffer": "5.1.2", + "sha.js": "2.4.11" + } + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "requires": { + "pinkie": "2.0.4" + } + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "2.1.0" + } + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" + }, + "process": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", + "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=" + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" + }, + "proxy-addr": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", + "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", + "requires": { + "forwarded": "0.1.2", + "ipaddr.js": "1.8.0" + } + }, + "psl": { + "version": "1.1.31", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", + "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==" + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "requires": { + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.2.0", + "parse-asn1": "5.1.4", + "randombytes": "2.1.0", + "safe-buffer": "5.1.2" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + }, + "query-string": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "requires": { + "decode-uri-component": "0.2.0", + "object-assign": "4.1.1", + "strict-uri-encode": "1.1.0" + } + }, + "querystringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", + "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==" + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "requires": { + "randombytes": "2.1.0", + "safe-buffer": "5.1.2" + } + }, + "randomhex": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/randomhex/-/randomhex-0.1.5.tgz", + "integrity": "sha1-us7vmCMpCRQA8qKRLGzQLxCU9YU=" + }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" + }, + "raw-body": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", + "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.3", + "iconv-lite": "0.4.23", + "unpipe": "1.0.0" + } + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "2.0.0", + "normalize-package-data": "2.5.0", + "path-type": "2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "2.1.0", + "read-pkg": "2.0.0" + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "regenerator-runtime": { + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz", + "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==" + }, + "request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "requires": { + "aws-sign2": "0.7.0", + "aws4": "1.8.0", + "caseless": "0.12.0", + "combined-stream": "1.0.7", + "extend": "3.0.2", + "forever-agent": "0.6.1", + "form-data": "2.3.3", + "har-validator": "5.1.3", + "http-signature": "1.2.0", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.22", + "oauth-sign": "0.9.0", + "performance-now": "2.1.0", + "qs": "6.5.2", + "safe-buffer": "5.1.2", + "tough-cookie": "2.4.3", + "tunnel-agent": "0.6.0", + "uuid": "3.3.2" + } + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" + }, + "resolve": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", + "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", + "dev": true, + "requires": { + "path-parse": "1.0.6" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "requires": { + "hash-base": "3.0.4", + "inherits": "2.0.3" + } + }, + "rlp": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.3.tgz", + "integrity": "sha512-l6YVrI7+d2vpW6D6rS05x2Xrmq8oW7v3pieZOJKBEdjuTF4Kz/iwk55Zyh1Zaz+KOB2kC8+2jZlp2u9L4tTzCQ==", + "requires": { + "bn.js": "4.11.8", + "safe-buffer": "5.1.2" + } + }, + "rxjs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz", + "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==", + "requires": { + "tslib": "1.9.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "scrypt": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/scrypt/-/scrypt-6.0.3.tgz", + "integrity": "sha1-BOAUpWgrU/pQwtXM4WfXGcBthw0=", + "requires": { + "nan": "2.13.2" + } + }, + "scrypt-js": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz", + "integrity": "sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==" + }, + "scrypt.js": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/scrypt.js/-/scrypt.js-0.2.0.tgz", + "integrity": "sha1-r40UZbcemZARC+38WTuUeeA6ito=", + "requires": { + "scrypt": "6.0.3", + "scryptsy": "1.2.1" + } + }, + "scryptsy": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/scryptsy/-/scryptsy-1.2.1.tgz", + "integrity": "sha1-oyJfpLJST4AnAHYeKFW987LZIWM=", + "requires": { + "pbkdf2": "3.0.17" + } + }, + "secp256k1": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-3.6.2.tgz", + "integrity": "sha512-90nYt7yb0LmI4A2jJs1grglkTAXrBwxYAjP9bpeKjvJKOjG2fOeH/YI/lchDMIvjrOasd5QXwvV2jwN168xNng==", + "requires": { + "bindings": "1.5.0", + "bip66": "1.1.5", + "bn.js": "4.11.8", + "create-hash": "1.2.0", + "drbg.js": "1.0.1", + "elliptic": "6.4.1", + "nan": "2.13.2", + "safe-buffer": "5.1.2" + } + }, + "seek-bzip": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz", + "integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=", + "requires": { + "commander": "2.8.1" + } + }, + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "dev": true + }, + "send": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "requires": { + "debug": "2.6.9", + "depd": "1.1.2", + "destroy": "1.0.4", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", + "fresh": "0.5.2", + "http-errors": "1.6.3", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "2.3.0", + "range-parser": "1.2.0", + "statuses": "1.4.0" + }, + "dependencies": { + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + } + } + }, + "serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "requires": { + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "parseurl": "1.3.2", + "send": "0.16.2" + } + }, + "servify": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz", + "integrity": "sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==", + "requires": { + "body-parser": "1.18.3", + "cors": "2.8.5", + "express": "4.16.4", + "request": "2.88.0", + "xhr": "2.5.0" + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.2" + } + }, + "sha3": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/sha3/-/sha3-1.2.2.tgz", + "integrity": "sha1-pmxQmN5MJbyIM27ItIF9AFvKe6k=", + "requires": { + "nan": "2.10.0" + }, + "dependencies": { + "nan": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", + "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==" + } + } + }, + "simple-concat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", + "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=" + }, + "simple-get": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz", + "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==", + "requires": { + "decompress-response": "3.3.0", + "once": "1.4.0", + "simple-concat": "1.0.0" + } + }, + "spdx-correct": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "dev": true, + "requires": { + "spdx-expression-parse": "3.0.0", + "spdx-license-ids": "3.0.3" + } + }, + "spdx-exceptions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "requires": { + "spdx-exceptions": "2.2.0", + "spdx-license-ids": "3.0.3" + } + }, + "spdx-license-ids": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz", + "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==", + "dev": true + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "requires": { + "asn1": "0.2.4", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.2", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.2", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "safer-buffer": "2.1.2", + "tweetnacl": "0.14.5" + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" + }, + "string.prototype.trim": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz", + "integrity": "sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo=", + "requires": { + "define-properties": "1.1.3", + "es-abstract": "1.13.0", + "function-bind": "1.1.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "strip-dirs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", + "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", + "requires": { + "is-natural-number": "4.0.1" + } + }, + "strip-hex-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", + "integrity": "sha1-DF8VX+8RUTczd96du1iNoFUA428=", + "requires": { + "is-hex-prefixed": "1.0.0" + } + }, + "swarm-js": { + "version": "0.1.39", + "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.39.tgz", + "integrity": "sha512-QLMqL2rzF6n5s50BptyD6Oi0R1aWlJC5Y17SRIVXRj6OR1DRIPM7nepvrxxkjA1zNzFz6mUOMjfeqeDaWB7OOg==", + "requires": { + "bluebird": "3.5.4", + "buffer": "5.2.1", + "decompress": "4.2.0", + "eth-lib": "0.1.27", + "fs-extra": "4.0.3", + "got": "7.1.0", + "mime-types": "2.1.22", + "mkdirp-promise": "5.0.1", + "mock-fs": "4.8.0", + "setimmediate": "1.0.5", + "tar": "4.4.8", + "xhr-request-promise": "0.1.2" + } + }, + "tar": { + "version": "4.4.8", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz", + "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==", + "requires": { + "chownr": "1.1.1", + "fs-minipass": "1.2.5", + "minipass": "2.3.5", + "minizlib": "1.2.1", + "mkdirp": "0.5.1", + "safe-buffer": "5.1.2", + "yallist": "3.0.3" + } + }, + "tar-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", + "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "requires": { + "bl": "1.2.2", + "buffer-alloc": "1.2.0", + "end-of-stream": "1.4.1", + "fs-constants": "1.0.0", + "readable-stream": "2.3.6", + "to-buffer": "1.1.1", + "xtend": "4.0.1" + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" + }, + "to-buffer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", + "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" + }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "requires": { + "psl": "1.1.31", + "punycode": "1.4.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + } + } + }, + "tslib": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==" + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + }, + "type-is": { + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", + "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "2.1.22" + } + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "requires": { + "is-typedarray": "1.0.0" + } + }, + "typescript": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.4.1.tgz", + "integrity": "sha512-3NSMb2VzDQm8oBTLH6Nj55VVtUEpe/rgkIzMir0qVoLyjDZlnMBva0U6vDiV3IH+sl/Yu6oP5QwsAQtHPmDd2Q==", + "dev": true + }, + "ultron": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" + }, + "unbzip2-stream": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.3.3.tgz", + "integrity": "sha512-fUlAF7U9Ah1Q6EieQ4x4zLNejrRvDWUYmxXUpN3uziFYCHapjWFaCAnreY9bGgxzaMCFAPPpYNng57CypwJVhg==", + "requires": { + "buffer": "5.2.1", + "through": "2.3.8" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "requires": { + "punycode": "2.1.1" + } + }, + "url-parse": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.4.tgz", + "integrity": "sha512-/92DTTorg4JjktLNLe6GPS2/RvAd/RGr6LuktmWSMLEOa6rjnlrFXNgSbSmkNvCoL2T028A0a1JaJLzRMlFoHg==", + "requires": { + "querystringify": "2.1.1", + "requires-port": "1.0.0" + } + }, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "requires": { + "prepend-http": "1.0.4" + } + }, + "url-set-query": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", + "integrity": "sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk=" + }, + "url-to-options": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", + "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=" + }, + "utf8": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.1.tgz", + "integrity": "sha1-LgHbAvfY0JRPdxBPFgnrDDBM92g=" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "3.1.0", + "spdx-expression-parse": "3.0.0" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "1.3.0" + } + }, + "web3": { + "version": "1.0.0-beta.51", + "resolved": "https://registry.npmjs.org/web3/-/web3-1.0.0-beta.51.tgz", + "integrity": "sha512-cSjJe8AwR9TKELLkGwk2HNL+37e+Y3x0nKkdBNpBZQNZR0SeoT3Jckkd7pBgrJKcyupItN+tKF48x5yNRvHzrQ==", + "requires": { + "@babel/runtime": "7.4.3", + "@types/node": "10.14.4", + "web3-bzz": "1.0.0-beta.51", + "web3-core": "1.0.0-beta.51", + "web3-core-helpers": "1.0.0-beta.51", + "web3-core-method": "1.0.0-beta.51", + "web3-eth": "1.0.0-beta.51", + "web3-eth-personal": "1.0.0-beta.51", + "web3-net": "1.0.0-beta.51", + "web3-providers": "1.0.0-beta.51", + "web3-shh": "1.0.0-beta.51", + "web3-utils": "1.0.0-beta.51" + } + }, + "web3-bzz": { + "version": "1.0.0-beta.51", + "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.0.0-beta.51.tgz", + "integrity": "sha512-9zDifUc3qPOF2WJ2H/81Ki4rTLa4elB0OG8h3IEYHjXOLDHKzswBQC3favhvm/ZQ2WmnkGd04vsU2iQzBmr1OQ==", + "requires": { + "@babel/runtime": "7.4.3", + "@types/node": "10.14.4", + "lodash": "4.17.11", + "swarm-js": "0.1.39" + } + }, + "web3-core": { + "version": "1.0.0-beta.51", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.0.0-beta.51.tgz", + "integrity": "sha512-RZRAt0O+LsU1jV6BtuZBQYjE+YcNa9Bu6FzEAMZ92EdgiAkUB2kbTeipVGCMxOST26kWXUtwCwxkkx4g6iy41A==", + "requires": { + "@babel/runtime": "7.4.3", + "@types/bn.js": "4.11.5", + "@types/node": "10.14.4", + "lodash": "4.17.11", + "web3-utils": "1.0.0-beta.51" + } + }, + "web3-core-helpers": { + "version": "1.0.0-beta.51", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.0.0-beta.51.tgz", + "integrity": "sha512-kA5JMJyrB5yxX3dQuziBP0Yo9i+MKwtYfA2E7DTbEoUueqjPcEwXMUxmpGROYmufCcfoe/B/FqpC8CzkqmHokw==", + "requires": { + "@babel/runtime": "7.4.3", + "lodash": "4.17.11", + "web3-eth-iban": "1.0.0-beta.51", + "web3-utils": "1.0.0-beta.51" + } + }, + "web3-core-method": { + "version": "1.0.0-beta.51", + "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.0.0-beta.51.tgz", + "integrity": "sha512-Tl5jGWqx01W6OFPNZI1c4wtCt+HPKWldWrLORKfW0zHyXrYDH6V2BuitA7R7j+54+c/61W3C2E6a+g7sQ8+mWA==", + "requires": { + "@babel/runtime": "7.4.3", + "eventemitter3": "3.1.0", + "lodash": "4.17.11" + } + }, + "web3-core-subscriptions": { + "version": "1.0.0-beta.51", + "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.0.0-beta.51.tgz", + "integrity": "sha512-bM4KlA37Or/XfrZKLtXlvUSISKWUkXOH/32s0DBnxRkKuey8QKK460H5KF9/HS8LfY7cO11NAepnFe4Tk1rSaQ==", + "requires": { + "@babel/runtime": "7.4.3", + "eventemitter3": "3.1.0", + "lodash": "4.17.11" + } + }, + "web3-eth": { + "version": "1.0.0-beta.51", + "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.0.0-beta.51.tgz", + "integrity": "sha512-w+8YtfKAcEPmOtYf47cjQw3t6dm5YcGvkl4jVZF00WHuvkPMFsXBTbZdH4aVgjPhubl53rdLrJwAP2b7X83+kQ==", + "requires": { + "@babel/runtime": "7.4.3", + "ethereumjs-tx": "1.3.7", + "rxjs": "6.4.0", + "web3-core": "1.0.0-beta.51", + "web3-core-helpers": "1.0.0-beta.51", + "web3-core-method": "1.0.0-beta.51", + "web3-core-subscriptions": "1.0.0-beta.51", + "web3-eth-abi": "1.0.0-beta.51", + "web3-eth-accounts": "1.0.0-beta.51", + "web3-eth-contract": "1.0.0-beta.51", + "web3-eth-ens": "1.0.0-beta.51", + "web3-eth-iban": "1.0.0-beta.51", + "web3-eth-personal": "1.0.0-beta.51", + "web3-net": "1.0.0-beta.51", + "web3-providers": "1.0.0-beta.51", + "web3-utils": "1.0.0-beta.51" + } + }, + "web3-eth-abi": { + "version": "1.0.0-beta.51", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.0.0-beta.51.tgz", + "integrity": "sha512-mTcMpIihZECzZ5oWUh9Jg7x5pVhPv6xPTPWxY9007QKbbBH01GwPogoxBz1X7RfWOwGqZABfxFgXow5NkL0T3A==", + "requires": { + "@babel/runtime": "7.4.3", + "ethers": "4.0.27", + "lodash": "4.17.11", + "web3-utils": "1.0.0-beta.51" + } + }, + "web3-eth-accounts": { + "version": "1.0.0-beta.51", + "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.0.0-beta.51.tgz", + "integrity": "sha512-6HJu4Vrli7p1S52mV83juFjWn0w7rUE4q9cZdYwsGmqHGrOmV7E3zuBEyuA+kelPLpSmcJDOnEowvORmRdpAyw==", + "requires": { + "@babel/runtime": "7.4.3", + "crypto-browserify": "3.12.0", + "eth-lib": "0.2.8", + "lodash": "4.17.11", + "scrypt.js": "0.2.0", + "uuid": "3.3.2", + "web3-core": "1.0.0-beta.51", + "web3-core-helpers": "1.0.0-beta.51", + "web3-core-method": "1.0.0-beta.51", + "web3-providers": "1.0.0-beta.51", + "web3-utils": "1.0.0-beta.51" + }, + "dependencies": { + "eth-lib": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", + "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", + "requires": { + "bn.js": "4.11.8", + "elliptic": "6.4.1", + "xhr-request-promise": "0.1.2" + } + } + } + }, + "web3-eth-contract": { + "version": "1.0.0-beta.51", + "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.0.0-beta.51.tgz", + "integrity": "sha512-iVMay6OXDjDPeiPoeGpa6PQGuwIPxL/8UAVIlWVB1CYG9+FY6kcOUO7vI7dnDVwN1zneAslf9h86px6hgR92OQ==", + "requires": { + "@babel/runtime": "7.4.3", + "@types/bn.js": "4.11.5", + "lodash": "4.17.11", + "web3-core": "1.0.0-beta.51", + "web3-core-helpers": "1.0.0-beta.51", + "web3-core-method": "1.0.0-beta.51", + "web3-core-subscriptions": "1.0.0-beta.51", + "web3-eth-abi": "1.0.0-beta.51", + "web3-eth-accounts": "1.0.0-beta.51", + "web3-providers": "1.0.0-beta.51", + "web3-utils": "1.0.0-beta.51" + } + }, + "web3-eth-ens": { + "version": "1.0.0-beta.51", + "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.0.0-beta.51.tgz", + "integrity": "sha512-JpHlAIUZGLGTTHWKBFciv5KGBi/+n0uqaO/dXoIfB/jI0Gcm5GYEwUt8TU/Y0/WVHvw/ttU1e0laJYPzTTEB8w==", + "requires": { + "@babel/runtime": "7.4.3", + "eth-ens-namehash": "2.0.8", + "lodash": "4.17.11", + "web3-core": "1.0.0-beta.51", + "web3-core-helpers": "1.0.0-beta.51", + "web3-core-method": "1.0.0-beta.51", + "web3-eth-abi": "1.0.0-beta.51", + "web3-eth-contract": "1.0.0-beta.51", + "web3-net": "1.0.0-beta.51", + "web3-providers": "1.0.0-beta.51", + "web3-utils": "1.0.0-beta.51" + } + }, + "web3-eth-iban": { + "version": "1.0.0-beta.51", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.0.0-beta.51.tgz", + "integrity": "sha512-GNLsEWpEkyJqmogsF+mQLlO06tPOudfhVBCPC68SIOw6wQTqAtoqzOot3EJdrEIDGet9eujOoBs6VWAjNbMGRA==", + "requires": { + "@babel/runtime": "7.4.3", + "bn.js": "4.11.8", + "web3-utils": "1.0.0-beta.51" + } + }, + "web3-eth-personal": { + "version": "1.0.0-beta.51", + "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.0.0-beta.51.tgz", + "integrity": "sha512-Mq6uAvhfsKf7FSZVqJOfmb7i5zxQ6HkbTRcAyOOOfSmGnTvxSIjtKZCTAVv3UeBh3pxIXn5FSDlKngaj1MbYXg==", + "requires": { + "@babel/runtime": "7.4.3", + "web3-core": "1.0.0-beta.51", + "web3-core-helpers": "1.0.0-beta.51", + "web3-core-method": "1.0.0-beta.51", + "web3-net": "1.0.0-beta.51", + "web3-providers": "1.0.0-beta.51", + "web3-utils": "1.0.0-beta.51" + } + }, + "web3-net": { + "version": "1.0.0-beta.51", + "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.0.0-beta.51.tgz", + "integrity": "sha512-1xeBIb/Tvf6PVNZ0u+pPrULNkLefTf0uuo8Hyx82EfY+mvMz6jvNDyFsD8spDGJUuxlDabFnoZdiaEv7LNwwSg==", + "requires": { + "@babel/runtime": "7.4.3", + "lodash": "4.17.11", + "web3-core": "1.0.0-beta.51", + "web3-core-helpers": "1.0.0-beta.51", + "web3-core-method": "1.0.0-beta.51", + "web3-providers": "1.0.0-beta.51", + "web3-utils": "1.0.0-beta.51" + } + }, + "web3-providers": { + "version": "1.0.0-beta.51", + "resolved": "https://registry.npmjs.org/web3-providers/-/web3-providers-1.0.0-beta.51.tgz", + "integrity": "sha512-aWUEZIou4+zEZbLaBf1GQwbNoERq66mLEB6ubcPz1WEq1T5jfUPfwO4b4W2bEbEZVsoxS1ZJvSFkj1yAtD0X+g==", + "requires": { + "@babel/runtime": "7.4.3", + "@types/node": "10.14.4", + "eventemitter3": "3.1.0", + "lodash": "4.17.11", + "url-parse": "1.4.4", + "websocket": "git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2", + "xhr2-cookies": "1.1.0" + } + }, + "web3-shh": { + "version": "1.0.0-beta.51", + "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.0.0-beta.51.tgz", + "integrity": "sha512-IA4oaNH+PaGWQtTe7BmENszNTeSTsZ15hBNnOrMIyeF0PeghPj7sCenTtU/q8Ie6jR0oXfTXJOQCS/Q/QC3Ksg==", + "requires": { + "@babel/runtime": "7.4.3", + "web3-core": "1.0.0-beta.51", + "web3-core-helpers": "1.0.0-beta.51", + "web3-core-method": "1.0.0-beta.51", + "web3-core-subscriptions": "1.0.0-beta.51", + "web3-net": "1.0.0-beta.51", + "web3-providers": "1.0.0-beta.51", + "web3-utils": "1.0.0-beta.51" + } + }, + "web3-utils": { + "version": "1.0.0-beta.51", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.0.0-beta.51.tgz", + "integrity": "sha512-c9sRSscu0NIjD96X4ToDOgTxGyJevppuB+uHOgWkziaLGqlw/Li1l24nGkvr0Zqpt9SufvfPcWf8EEC92pnwKg==", + "requires": { + "@babel/runtime": "7.4.3", + "@types/bn.js": "4.11.5", + "@types/node": "10.14.4", + "bn.js": "4.11.8", + "eth-lib": "0.2.8", + "ethjs-unit": "0.1.6", + "lodash": "4.17.11", + "number-to-bn": "1.7.0", + "randomhex": "0.1.5", + "utf8": "2.1.1" + }, + "dependencies": { + "eth-lib": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", + "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", + "requires": { + "bn.js": "4.11.8", + "elliptic": "6.4.1", + "xhr-request-promise": "0.1.2" + } + } + } + }, + "websocket": { + "version": "git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2", + "requires": { + "debug": "2.6.9", + "nan": "2.13.2", + "typedarray-to-buffer": "3.1.5", + "yaeti": "0.0.6" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "requires": { + "async-limiter": "1.0.0", + "safe-buffer": "5.1.2", + "ultron": "1.1.1" + } + }, + "xhr": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.5.0.tgz", + "integrity": "sha512-4nlO/14t3BNUZRXIXfXe+3N6w3s1KoxcJUUURctd64BLRe67E4gRwp4PjywtDY72fXpZ1y6Ch0VZQRY/gMPzzQ==", + "requires": { + "global": "4.3.2", + "is-function": "1.0.1", + "parse-headers": "2.0.2", + "xtend": "4.0.1" + } + }, + "xhr-request": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", + "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", + "requires": { + "buffer-to-arraybuffer": "0.0.5", + "object-assign": "4.1.1", + "query-string": "5.1.1", + "simple-get": "2.8.1", + "timed-out": "4.0.1", + "url-set-query": "1.0.0", + "xhr": "2.5.0" + } + }, + "xhr-request-promise": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.2.tgz", + "integrity": "sha1-NDxE0e53JrhkgGloLQ+EDIO0Jh0=", + "requires": { + "xhr-request": "1.1.0" + } + }, + "xhr2-cookies": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz", + "integrity": "sha1-fXdEnQmZGX8VXLc7I99yUF7YnUg=", + "requires": { + "cookiejar": "2.1.2" + } + }, + "xmlhttprequest": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", + "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=" + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" + }, + "yaeti": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", + "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=" + }, + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "requires": { + "buffer-crc32": "0.2.13", + "fd-slicer": "1.1.0" + } + } + } } diff --git a/packages/crypto-wallet-core/package.json b/packages/crypto-wallet-core/package.json index b75499e2eab..f628d20fd9c 100644 --- a/packages/crypto-wallet-core/package.json +++ b/packages/crypto-wallet-core/package.json @@ -23,7 +23,7 @@ "bitcore-lib-cash": "^8.1.1", "elliptic": "^6.4.1", "ethereumjs-tx": "^1.3.7", - "ethereumjs-util": "^6.0.0", + "ethereumjs-util": "^6.1.0", "secp256k1": "^3.5.0", "web3": "^1.0.0-beta.46" }, diff --git a/packages/crypto-wallet-core/src/derivation/eth/index.ts b/packages/crypto-wallet-core/src/derivation/eth/index.ts index 58c4d09daa9..25963882516 100644 --- a/packages/crypto-wallet-core/src/derivation/eth/index.ts +++ b/packages/crypto-wallet-core/src/derivation/eth/index.ts @@ -17,7 +17,6 @@ export class EthDeriver implements IDeriver { } deriveAddress(network, pubKey, addressIndex, isChange) { - console.log(pubKey); const xpub = new BitcoreLib.HDPublicKey(pubKey, network); const changeNum = isChange ? 1 : 0; const path = `m/${changeNum}/${addressIndex}`; diff --git a/packages/crypto-wallet-core/src/derivation/index.ts b/packages/crypto-wallet-core/src/derivation/index.ts index fbe4b5d0b81..3395a17a6c6 100644 --- a/packages/crypto-wallet-core/src/derivation/index.ts +++ b/packages/crypto-wallet-core/src/derivation/index.ts @@ -1,7 +1,7 @@ import { BtcDeriver } from './btc'; import { BchDeriver } from './bch'; import { EthDeriver } from './eth'; -import { Paths } from "./paths"; +import { Paths } from './paths'; export type Key = { address: string; @@ -31,7 +31,6 @@ const derivers: { [chain: string]: IDeriver } = { ETH: new EthDeriver() }; - export class DerivationProxy { get(chain) { const normalizedChain = chain.toUpperCase(); @@ -59,10 +58,11 @@ export class DerivationProxy { pathFor(chain, network, account = 0) { const normalizedChain = chain.toUpperCase(); const accountStr = `${account}'`; - if (network != 'mainnet') { - return Paths.default.testnet + accountStr; + const chainConfig = Paths[normalizedChain]; + if (chainConfig && chainConfig[network]) { + return chainConfig[network] + accountStr; } else { - return Paths[normalizedChain][network] + accountStr; + return Paths.default.testnet + accountStr; } } } diff --git a/packages/crypto-wallet-core/src/index.ts b/packages/crypto-wallet-core/src/index.ts index 72fd649f7cc..e8ecb5ecece 100644 --- a/packages/crypto-wallet-core/src/index.ts +++ b/packages/crypto-wallet-core/src/index.ts @@ -1,7 +1,7 @@ import deriver from './derivation'; -import transaction from './transactions' +import transaction from './transactions'; export default { deriver, transaction -} +}; From 1f23d13e5d4b9e67bded8f2e1cd63464707148e3 Mon Sep 17 00:00:00 2001 From: Justin Kook Date: Thu, 4 Apr 2019 14:48:14 -0400 Subject: [PATCH 30/40] removed global.console.log for BWC, eslint api.js --- packages/bitcore-wallet-client/lib/api.js | 1007 +++++++++++------ .../bitcore-wallet-client/lib/credentials.js | 6 - 2 files changed, 645 insertions(+), 368 deletions(-) diff --git a/packages/bitcore-wallet-client/lib/api.js b/packages/bitcore-wallet-client/lib/api.js index 285daefb9ca..098a47572a3 100644 --- a/packages/bitcore-wallet-client/lib/api.js +++ b/packages/bitcore-wallet-client/lib/api.js @@ -8,7 +8,7 @@ var events = require('events'); var Bitcore = require('bitcore-lib'); var Bitcore_ = { btc: Bitcore, - bch: require('bitcore-lib-cash'), + bch: require('bitcore-lib-cash') }; var Mnemonic = require('bitcore-mnemonic'); var sjcl = require('sjcl'); @@ -43,9 +43,9 @@ function API(opts) { this.logLevel = opts.logLevel || 'silent'; this.supportStaffWalletId = opts.supportStaffWalletId; - this.request = new Request(opts.baseUrl || BASE_URL, {r: opts.request}); + this.request = new Request(opts.baseUrl || BASE_URL, { r: opts.request }); log.setLevel(this.logLevel); -}; +} util.inherits(API, events.EventEmitter); API.privateKeyEncryptionOpts = { @@ -80,7 +80,7 @@ API.prototype._fetchLatestNotifications = function(interval, cb) { var opts = { lastNotificationId: self.lastNotificationId, - includeOwn: self.notificationIncludeOwn, + includeOwn: self.notificationIncludeOwn }; if (!self.lastNotificationId) { @@ -113,7 +113,10 @@ API.prototype._initNotifications = function(opts) { self.notificationsIntervalId = setInterval(function() { self._fetchLatestNotifications(interval, function(err) { if (err) { - if (err instanceof Errors.NOT_FOUND || err instanceof Errors.NOT_AUTHORIZED) { + if ( + err instanceof Errors.NOT_FOUND || + err instanceof Errors.NOT_AUTHORIZED + ) { self._disposeNotifications(); } } @@ -130,7 +133,6 @@ API.prototype._disposeNotifications = function() { } }; - /** * Reset notification polling with new interval * @param {Numeric} notificationIntervalSeconds - use 0 to pause notifications @@ -145,7 +147,6 @@ API.prototype.setNotificationsInterval = function(notificationIntervalSeconds) { } }; - /** * Encrypt a message * @private @@ -169,7 +170,10 @@ API.prototype._processTxNotes = function(notes) { note.encryptedBody = note.body; note.body = Utils.decryptMessageNoThrow(note.body, encryptingKey); note.encryptedEditedByName = note.editedByName; - note.editedByName = Utils.decryptMessageNoThrow(note.editedByName, encryptingKey); + note.editedByName = Utils.decryptMessageNoThrow( + note.editedByName, + encryptingKey + ); }); }; @@ -188,21 +192,31 @@ API.prototype._processTxps = function(txps) { var encryptingKey = self.credentials.sharedEncryptingKey; _.each([].concat(txps), function(txp) { txp.encryptedMessage = txp.message; - txp.message = Utils.decryptMessageNoThrow(txp.message, encryptingKey) || null; - txp.creatorName = Utils.decryptMessageNoThrow(txp.creatorName, encryptingKey); + txp.message = + Utils.decryptMessageNoThrow(txp.message, encryptingKey) || null; + txp.creatorName = Utils.decryptMessageNoThrow( + txp.creatorName, + encryptingKey + ); _.each(txp.actions, function(action) { - // CopayerName encryption is optional (not available in older wallets) - action.copayerName = Utils.decryptMessageNoThrow(action.copayerName, encryptingKey); - - action.comment = Utils.decryptMessageNoThrow(action.comment, encryptingKey); + action.copayerName = Utils.decryptMessageNoThrow( + action.copayerName, + encryptingKey + ); + + action.comment = Utils.decryptMessageNoThrow( + action.comment, + encryptingKey + ); // TODO get copayerName from Credentials -> copayerId to copayerName // action.copayerName = null; }); _.each(txp.outputs, function(output) { output.encryptedMessage = output.message; - output.message = Utils.decryptMessageNoThrow(output.message, encryptingKey) || null; + output.message = + Utils.decryptMessageNoThrow(output.message, encryptingKey) || null; }); txp.hasUnconfirmedInputs = _.some(txp.inputs, function(input) { return input.confirmations == 0; @@ -219,16 +233,24 @@ API.prototype._processTxps = function(txps) { * @param {String} opts.network - default 'livenet' */ API.prototype.seedFromRandom = function(opts) { - $.checkArgument(arguments.length <= 1, 'DEPRECATED: only 1 argument accepted.'); - $.checkArgument(_.isUndefined(opts) || _.isObject(opts), 'DEPRECATED: argument should be an options object.'); + $.checkArgument( + arguments.length <= 1, + 'DEPRECATED: only 1 argument accepted.' + ); + $.checkArgument( + _.isUndefined(opts) || _.isObject(opts), + 'DEPRECATED: argument should be an options object.' + ); opts = opts || {}; - this.credentials = Credentials.create(opts.coin || 'btc', opts.network || 'livenet'); + this.credentials = Credentials.create( + opts.coin || 'btc', + opts.network || 'livenet' + ); this.request.setCredentials(this.credentials); }; - var _deviceValidated; /** @@ -247,25 +269,37 @@ API.prototype.validateKeyDerivation = function(opts, cb) { function testMessageSigning(xpriv, xpub) { var nonHardenedPath = 'm/0/0'; - var message = 'Lorem ipsum dolor sit amet, ne amet urbanitas percipitur vim, libris disputando his ne, et facer suavitate qui. Ei quidam laoreet sea. Cu pro dico aliquip gubergren, in mundi postea usu. Ad labitur posidonium interesset duo, est et doctus molestie adipiscing.'; + var message = + 'Lorem ipsum dolor sit amet, ne amet urbanitas percipitur vim, libris disputando his ne, et facer suavitate qui. Ei quidam laoreet sea. Cu pro dico aliquip gubergren, in mundi postea usu. Ad labitur posidonium interesset duo, est et doctus molestie adipiscing.'; var priv = xpriv.deriveChild(nonHardenedPath).privateKey; var signature = Utils.signMessage(message, priv); var pub = xpub.deriveChild(nonHardenedPath).publicKey; return Utils.verifyMessage(message, signature, pub); - }; + } function testHardcodedKeys() { - var words = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about"; + var words = + 'abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about'; var xpriv = Mnemonic(words).toHDPrivateKey(); - if (xpriv.toString() != 'xprv9s21ZrQH143K3GJpoapnV8SFfukcVBSfeCficPSGfubmSFDxo1kuHnLisriDvSnRRuL2Qrg5ggqHKNVpxR86QEC8w35uxmGoggxtQTPvfUu') return false; + if ( + xpriv.toString() != + 'xprv9s21ZrQH143K3GJpoapnV8SFfukcVBSfeCficPSGfubmSFDxo1kuHnLisriDvSnRRuL2Qrg5ggqHKNVpxR86QEC8w35uxmGoggxtQTPvfUu' + ) + return false; xpriv = xpriv.deriveChild("m/44'/0'/0'"); - if (xpriv.toString() != 'xprv9xpXFhFpqdQK3TmytPBqXtGSwS3DLjojFhTGht8gwAAii8py5X6pxeBnQ6ehJiyJ6nDjWGJfZ95WxByFXVkDxHXrqu53WCRGypk2ttuqncb') return false; - - var xpub = Bitcore.HDPublicKey.fromString('xpub6BosfCnifzxcFwrSzQiqu2DBVTshkCXacvNsWGYJVVhhawA7d4R5WSWGFNbi8Aw6ZRc1brxMyWMzG3DSSSSoekkudhUd9yLb6qx39T9nMdj'); + if ( + xpriv.toString() != + 'xprv9xpXFhFpqdQK3TmytPBqXtGSwS3DLjojFhTGht8gwAAii8py5X6pxeBnQ6ehJiyJ6nDjWGJfZ95WxByFXVkDxHXrqu53WCRGypk2ttuqncb' + ) + return false; + + var xpub = Bitcore.HDPublicKey.fromString( + 'xpub6BosfCnifzxcFwrSzQiqu2DBVTshkCXacvNsWGYJVVhhawA7d4R5WSWGFNbi8Aw6ZRc1brxMyWMzG3DSSSSoekkudhUd9yLb6qx39T9nMdj' + ); return testMessageSigning(xpriv, xpub); - }; + } function testLiveKeys() { var words; @@ -285,7 +319,7 @@ API.prototype.validateKeyDerivation = function(opts, cb) { var xpub = new Bitcore.HDPublicKey(c.xPubKey); return testMessageSigning(xpriv, xpub); - }; + } var hardcodedOk = true; if (!_deviceValidated && !opts.skipDeviceValidation) { @@ -293,7 +327,7 @@ API.prototype.validateKeyDerivation = function(opts, cb) { _deviceValidated = true; } - var liveOk = (c.canSign() && !c.isPrivKeyEncrypted()) ? testLiveKeys() : true; + var liveOk = c.canSign() && !c.isPrivKeyEncrypted() ? testLiveKeys() : true; self.keyDerivationOk = hardcodedOk && liveOk; @@ -311,11 +345,23 @@ API.prototype.validateKeyDerivation = function(opts, cb) { * @param {Number} opts.account - default 0 */ API.prototype.seedFromRandomWithMnemonic = function(opts) { - $.checkArgument(arguments.length <= 1, 'DEPRECATED: only 1 argument accepted.'); - $.checkArgument(_.isUndefined(opts) || _.isObject(opts), 'DEPRECATED: argument should be an options object.'); + $.checkArgument( + arguments.length <= 1, + 'DEPRECATED: only 1 argument accepted.' + ); + $.checkArgument( + _.isUndefined(opts) || _.isObject(opts), + 'DEPRECATED: argument should be an options object.' + ); opts = opts || {}; - this.credentials = Credentials.createWithMnemonic(opts.coin || 'btc', opts.network || 'livenet', opts.passphrase, opts.language || 'en', opts.account || 0); + this.credentials = Credentials.createWithMnemonic( + opts.coin || 'btc', + opts.network || 'livenet', + opts.passphrase, + opts.language || 'en', + opts.account || 0 + ); this.request.setCredentials(this.credentials); }; @@ -327,13 +373,10 @@ API.prototype.mnemonicHasPassphrase = function() { return this.credentials.mnemonicHasPassphrase; }; - - API.prototype.clearMnemonic = function() { return this.credentials.clearMnemonic(); }; - /** * Seed from extended private key * @@ -344,11 +387,16 @@ API.prototype.clearMnemonic = function() { */ API.prototype.seedFromExtendedPrivateKey = function(xPrivKey, opts) { opts = opts || {}; - this.credentials = Credentials.fromExtendedPrivateKey(opts.coin || 'btc', xPrivKey, opts.account || 0, opts.derivationStrategy || Constants.DERIVATION_STRATEGIES.BIP44, opts); + this.credentials = Credentials.fromExtendedPrivateKey( + opts.coin || 'btc', + xPrivKey, + opts.account || 0, + opts.derivationStrategy || Constants.DERIVATION_STRATEGIES.BIP44, + opts + ); this.request.setCredentials(this.credentials); }; - /** * Seed from Mnemonics (language autodetected) * Can throw an error if mnemonic is invalid @@ -362,10 +410,21 @@ API.prototype.seedFromExtendedPrivateKey = function(xPrivKey, opts) { * @param {String} opts.derivationStrategy - default 'BIP44' */ API.prototype.seedFromMnemonic = function(words, opts) { - $.checkArgument(_.isUndefined(opts) || _.isObject(opts), 'DEPRECATED: second argument should be an options object.'); + $.checkArgument( + _.isUndefined(opts) || _.isObject(opts), + 'DEPRECATED: second argument should be an options object.' + ); opts = opts || {}; - this.credentials = Credentials.fromMnemonic(opts.coin || 'btc', opts.network || 'livenet', words, opts.passphrase, opts.account || 0, opts.derivationStrategy || Constants.DERIVATION_STRATEGIES.BIP44, opts); + this.credentials = Credentials.fromMnemonic( + opts.coin || 'btc', + opts.network || 'livenet', + words, + opts.passphrase, + opts.account || 0, + opts.derivationStrategy || Constants.DERIVATION_STRATEGIES.BIP44, + opts + ); this.request.setCredentials(this.credentials); }; @@ -380,15 +439,26 @@ API.prototype.seedFromMnemonic = function(words, opts) { * @param {Number} opts.account - default 0 * @param {String} opts.derivationStrategy - default 'BIP44' */ -API.prototype.seedFromExtendedPublicKey = function(xPubKey, source, entropySourceHex, opts) { +API.prototype.seedFromExtendedPublicKey = function( + xPubKey, + source, + entropySourceHex, + opts +) { $.checkArgument(_.isUndefined(opts) || _.isObject(opts)); opts = opts || {}; - this.credentials = Credentials.fromExtendedPublicKey(opts.coin || 'btc', xPubKey, source, entropySourceHex, opts.account || 0, opts.derivationStrategy || Constants.DERIVATION_STRATEGIES.BIP44); + this.credentials = Credentials.fromExtendedPublicKey( + opts.coin || 'btc', + xPubKey, + source, + entropySourceHex, + opts.account || 0, + opts.derivationStrategy || Constants.DERIVATION_STRATEGIES.BIP44 + ); this.request.setCredentials(this.credentials); }; - /** * Export wallet * @@ -416,7 +486,6 @@ API.prototype.export = function(opts) { return output; }; - /** * Import wallet * @@ -427,7 +496,7 @@ API.prototype.import = function(str) { var credentials = Credentials.fromObj(JSON.parse(str)); this.credentials = credentials; } catch (ex) { - throw new Errors.INVALID_BACKUP; + throw new Errors.INVALID_BACKUP(); } this.request.setCredentials(this.credentials); }; @@ -439,7 +508,6 @@ API.prototype._import = function(cb) { // First option, grab wallet info from BWS. self.openWallet(function(err, ret) { - // it worked? if (!err) return cb(null, ret); @@ -451,7 +519,7 @@ API.prototype._import = function(cb) { log.info('Copayer not found, trying to add access'); self.addAccess({}, function(err) { if (err) { - return cb(new Errors.WALLET_DOES_NOT_EXIST); + return cb(new Errors.WALLET_DOES_NOT_EXIST()); } self.openWallet(cb); @@ -481,27 +549,41 @@ API.prototype.importFromMnemonic = function(words, opts, cb) { opts = opts || {}; function derive(nonCompliantDerivation) { - return Credentials.fromMnemonic(opts.coin || 'btc', opts.network || 'livenet', words, opts.passphrase, opts.account || 0, opts.derivationStrategy || Constants.DERIVATION_STRATEGIES.BIP44, { - nonCompliantDerivation: nonCompliantDerivation, - entropySourcePath: opts.entropySourcePath, - walletPrivKey: opts.walletPrivKey, - }); - }; + return Credentials.fromMnemonic( + opts.coin || 'btc', + opts.network || 'livenet', + words, + opts.passphrase, + opts.account || 0, + opts.derivationStrategy || Constants.DERIVATION_STRATEGIES.BIP44, + { + nonCompliantDerivation: nonCompliantDerivation, + entropySourcePath: opts.entropySourcePath, + walletPrivKey: opts.walletPrivKey + } + ); + } try { self.credentials = derive(false); } catch (e) { log.info('Mnemonic error:', e); - return cb(new Errors.INVALID_BACKUP); + return cb(new Errors.INVALID_BACKUP()); } this.request.setCredentials(this.credentials); self._import(function(err, ret) { if (!err) return cb(null, ret); if (err instanceof Errors.INVALID_BACKUP) return cb(err); - if (err instanceof Errors.NOT_AUTHORIZED || err instanceof Errors.WALLET_DOES_NOT_EXIST) { + if ( + err instanceof Errors.NOT_AUTHORIZED || + err instanceof Errors.WALLET_DOES_NOT_EXIST + ) { var altCredentials = derive(true); - if (altCredentials.xPubKey.toString() == self.credentials.xPubKey.toString()) return cb(err); + if ( + altCredentials.xPubKey.toString() == self.credentials.xPubKey.toString() + ) + return cb(err); self.credentials = altCredentials; self.request.setCredentials(self.credentials); return self._import(cb); @@ -527,15 +609,23 @@ API.prototype.importFromExtendedPrivateKey = function(xPrivKey, opts, cb) { if (!cb) { cb = opts; opts = {}; - log.warn('DEPRECATED WARN: importFromExtendedPrivateKey should receive 3 parameters.'); + log.warn( + 'DEPRECATED WARN: importFromExtendedPrivateKey should receive 3 parameters.' + ); } try { - this.credentials = Credentials.fromExtendedPrivateKey(opts.coin || 'btc', xPrivKey, opts.account || 0, opts.derivationStrategy || Constants.DERIVATION_STRATEGIES.BIP44, opts); + this.credentials = Credentials.fromExtendedPrivateKey( + opts.coin || 'btc', + xPrivKey, + opts.account || 0, + opts.derivationStrategy || Constants.DERIVATION_STRATEGIES.BIP44, + opts + ); } catch (e) { log.info('xPriv error:', e); - return cb(new Errors.INVALID_BACKUP); - }; + return cb(new Errors.INVALID_BACKUP()); + } this.request.setCredentials(this.credentials); this._import(cb); @@ -553,25 +643,47 @@ API.prototype.importFromExtendedPrivateKey = function(xPrivKey, opts, cb) { * @param {String} opts.derivationStrategy - default 'BIP44' * @param {String} opts.compliantDerivation - default 'true' */ -API.prototype.importFromExtendedPublicKey = function(xPubKey, source, entropySourceHex, opts, cb) { - $.checkArgument(arguments.length == 5, "DEPRECATED: should receive 5 arguments"); +API.prototype.importFromExtendedPublicKey = function( + xPubKey, + source, + entropySourceHex, + opts, + cb +) { + $.checkArgument( + arguments.length == 5, + 'DEPRECATED: should receive 5 arguments' + ); $.checkArgument(_.isUndefined(opts) || _.isObject(opts)); $.shouldBeFunction(cb); opts = opts || {}; log.debug('Importing from Extended Private Key'); try { - this.credentials = Credentials.fromExtendedPublicKey(opts.coin || 'btc', xPubKey, source, entropySourceHex, opts.account || 0, opts.derivationStrategy || Constants.DERIVATION_STRATEGIES.BIP44, opts); + this.credentials = Credentials.fromExtendedPublicKey( + opts.coin || 'btc', + xPubKey, + source, + entropySourceHex, + opts.account || 0, + opts.derivationStrategy || Constants.DERIVATION_STRATEGIES.BIP44, + opts + ); } catch (e) { log.info('xPriv error:', e); - return cb(new Errors.INVALID_BACKUP); - }; + return cb(new Errors.INVALID_BACKUP()); + } this.request.setCredentials(this.credentials); this._import(cb); }; -API.prototype.decryptBIP38PrivateKey = function(encryptedPrivateKeyBase58, passphrase, opts, cb) { +API.prototype.decryptBIP38PrivateKey = function( + encryptedPrivateKeyBase58, + passphrase, + opts, + cb +) { var Bip38 = require('bip38'); var bip38 = new Bip38(); @@ -585,8 +697,14 @@ API.prototype.decryptBIP38PrivateKey = function(encryptedPrivateKeyBase58, passp var privateKey = new Bitcore.PrivateKey(privateKeyWif); var address = privateKey.publicKey.toAddress().toString(); var addrBuff = new Buffer(address, 'ascii'); - var actualChecksum = Bitcore.crypto.Hash.sha256sha256(addrBuff).toString('hex').substring(0, 8); - var expectedChecksum = Bitcore.encoding.Base58Check.decode(encryptedPrivateKeyBase58).toString('hex').substring(6, 14); + var actualChecksum = Bitcore.crypto.Hash.sha256sha256(addrBuff) + .toString('hex') + .substring(0, 8); + var expectedChecksum = Bitcore.encoding.Base58Check.decode( + encryptedPrivateKeyBase58 + ) + .toString('hex') + .substring(6, 14); if (actualChecksum != expectedChecksum) return cb(new Error('Incorrect passphrase')); @@ -602,18 +720,26 @@ API.prototype.getBalanceFromPrivateKey = function(privateKey, coin, cb) { coin = 'btc'; } var B = Bitcore_[coin]; - + var privateKey = new B.PrivateKey(privateKey); var address = privateKey.publicKey.toAddress(); - self.getUtxos({ - addresses: coin == 'bch' ? address.toLegacyAddress() : address.toString(), - }, function(err, utxos) { - if (err) return cb(err); - return cb(null, _.sumBy(utxos, 'satoshis')); - }); + self.getUtxos( + { + addresses: coin == 'bch' ? address.toLegacyAddress() : address.toString() + }, + function(err, utxos) { + if (err) return cb(err); + return cb(null, _.sumBy(utxos, 'satoshis')); + } + ); }; -API.prototype.buildTxFromPrivateKey = function(privateKey, destinationAddress, opts, cb) { +API.prototype.buildTxFromPrivateKey = function( + privateKey, + destinationAddress, + opts, + cb +) { var self = this; opts = opts || {}; @@ -623,42 +749,48 @@ API.prototype.buildTxFromPrivateKey = function(privateKey, destinationAddress, o var privateKey = B.PrivateKey(privateKey); var address = privateKey.publicKey.toAddress(); - async.waterfall([ - - function(next) { - self.getUtxos({ - addresses: coin == 'bch' ? address.toLegacyAddress() : address.toString(), - }, function(err, utxos) { - return next(err, utxos); - }); - }, - function(utxos, next) { - if (!_.isArray(utxos) || utxos.length == 0) return next(new Error('No utxos found')); - - var fee = opts.fee || 10000; - var amount = _.sumBy(utxos, 'satoshis') - fee; - if (amount <= 0) return next(new Errors.INSUFFICIENT_FUNDS); - - var tx; - try { - var toAddress = B.Address.fromString(destinationAddress); - - tx = new B.Transaction() - .from(utxos) - .to(toAddress, amount) - .fee(fee) - .sign(privateKey); - - // Make sure the tx can be serialized - tx.serialize(); - - } catch (ex) { - log.error('Could not build transaction from private key', ex); - return next(new Errors.COULD_NOT_BUILD_TRANSACTION); + async.waterfall( + [ + function(next) { + self.getUtxos( + { + addresses: + coin == 'bch' ? address.toLegacyAddress() : address.toString() + }, + function(err, utxos) { + return next(err, utxos); + } + ); + }, + function(utxos, next) { + if (!_.isArray(utxos) || utxos.length == 0) + return next(new Error('No utxos found')); + + var fee = opts.fee || 10000; + var amount = _.sumBy(utxos, 'satoshis') - fee; + if (amount <= 0) return next(new Errors.INSUFFICIENT_FUNDS()); + + var tx; + try { + var toAddress = B.Address.fromString(destinationAddress); + + tx = new B.Transaction() + .from(utxos) + .to(toAddress, amount) + .fee(fee) + .sign(privateKey); + + // Make sure the tx can be serialized + tx.serialize(); + } catch (ex) { + log.error('Could not build transaction from private key', ex); + return next(new Errors.COULD_NOT_BUILD_TRANSACTION()); + } + return next(null, tx); } - return next(null, tx); - } - ], cb); + ], + cb + ); }; /** @@ -683,22 +815,29 @@ API.prototype.openWallet = function(cb) { var me = _.find(wallet.copayers, { id: self.credentials.copayerId }); - self.credentials.addWalletInfo(wallet.id, wallet.name, wallet.m, wallet.n, me.name); + self.credentials.addWalletInfo( + wallet.id, + wallet.name, + wallet.m, + wallet.n, + me.name + ); } - if (wallet.status != 'complete') - return cb(); + if (wallet.status != 'complete') return cb(); if (self.credentials.walletPrivKey) { if (!Verifier.checkCopayers(self.credentials, wallet.copayers)) { - return cb(new Errors.SERVER_COMPROMISED); + return cb(new Errors.SERVER_COMPROMISED()); } } else { // this should only happen in AIR-GAPPED flows log.warn('Could not verify copayers key (missing wallet Private Key)'); } - self.credentials.addPublicKeyRing(API._extractPublicKeyRing(wallet.copayers)); + self.credentials.addPublicKeyRing( + API._extractPublicKeyRing(wallet.copayers) + ); self.emit('walletCompleted', wallet); @@ -706,14 +845,18 @@ API.prototype.openWallet = function(cb) { }); }; - API._buildSecret = function(walletId, walletPrivKey, coin, network) { if (_.isString(walletPrivKey)) { walletPrivKey = Bitcore.PrivateKey.fromString(walletPrivKey); } var widHex = new Buffer(walletId.replace(/-/g, ''), 'hex'); var widBase58 = new Bitcore.encoding.Base58(widHex).toString(); - return _.padEnd(widBase58, 22, '0') + walletPrivKey.toWIF() + (network == 'testnet' ? 'T' : 'L') + coin; + return ( + _.padEnd(widBase58, 22, '0') + + walletPrivKey.toWIF() + + (network == 'testnet' ? 'T' : 'L') + + coin + ); }; API.parseSecret = function(secret) { @@ -726,9 +869,9 @@ API.parseSecret = function(secret) { while (i < indexes.length) { parts.push(str.substring(i == 0 ? 0 : indexes[i - 1], indexes[i])); i++; - }; + } return parts; - }; + } try { var secretSplit = split(secret, [22, 74, 75]); @@ -744,7 +887,7 @@ API.parseSecret = function(secret) { walletId: walletId, walletPrivKey: walletPrivKey, coin: coin, - network: networkChar == 'T' ? 'testnet' : 'livenet', + network: networkChar == 'T' ? 'testnet' : 'livenet' }; } catch (ex) { throw new Error('Invalid secret'); @@ -764,7 +907,10 @@ API.signTxp = function(txp, derivedXPrivKey) { var xpriv = new Bitcore.HDPrivateKey(derivedXPrivKey); _.each(txp.inputs, function(i) { - $.checkState(i.path, "Input derivation path not available (signing transaction)") + $.checkState( + i.path, + 'Input derivation path not available (signing transaction)' + ); if (!derived[i.path]) { derived[i.path] = xpriv.deriveChild(i.path).privateKey; privs.push(derived[i.path]); @@ -773,11 +919,13 @@ API.signTxp = function(txp, derivedXPrivKey) { var t = Utils.buildTx(txp); - var signatures = _.map(privs, function(priv, i) { + var signatures = _.map(privs, function(priv, i) { return t.getSignatures(priv); }); - signatures = _.map(_.sortBy(_.flatten(signatures), 'inputIndex'), function(s) { + signatures = _.map(_.sortBy(_.flatten(signatures), 'inputIndex'), function( + s + ) { return s.signature.toDER().toString('hex'); }); @@ -797,7 +945,7 @@ API.prototype._getCurrentSignatures = function(txp) { return _.map(acceptedActions, function(x) { return { signatures: x.signatures, - xpub: x.xpub, + xpub: x.xpub }; }); }; @@ -810,7 +958,6 @@ API.prototype._addSignaturesToBitcoreTx = function(txp, t, signatures, xpub) { var bitcore = Bitcore_[txp.coin]; - var i = 0, x = new bitcore.HDPublicKey(xpub); @@ -822,20 +969,19 @@ API.prototype._addSignaturesToBitcoreTx = function(txp, t, signatures, xpub) { var s = { inputIndex: i, signature: signature, - sigtype: bitcore.crypto.Signature.SIGHASH_ALL | bitcore.crypto.Signature.SIGHASH_FORKID, - publicKey: pub, - } - ; + sigtype: + bitcore.crypto.Signature.SIGHASH_ALL | + bitcore.crypto.Signature.SIGHASH_FORKID, + publicKey: pub + }; t.inputs[i].addSignature(t, s); i++; - } catch (e) {} ; + } catch (e) {} }); - if (i != txp.inputs.length) - throw new Error('Wrong signatures'); + if (i != txp.inputs.length) throw new Error('Wrong signatures'); }; - API.prototype._applyAllSignatures = function(txp, t) { var self = this; @@ -861,7 +1007,15 @@ API.prototype._applyAllSignatures = function(txp, t) { * @param {String} opts.coin * @param {Callback} cb */ -API.prototype._doJoinWallet = function(walletId, walletPrivKey, xPubKey, requestPubKey, copayerName, opts, cb) { +API.prototype._doJoinWallet = function( + walletId, + walletPrivKey, + xPubKey, + requestPubKey, + copayerName, + opts, + cb +) { $.shouldBeFunction(cb); var self = this; @@ -870,8 +1024,14 @@ API.prototype._doJoinWallet = function(walletId, walletPrivKey, xPubKey, request // Adds encrypted walletPrivateKey to CustomData opts.customData = opts.customData || {}; opts.customData.walletPrivKey = walletPrivKey.toString(); - var encCustomData = Utils.encryptMessage(JSON.stringify(opts.customData), this.credentials.personalEncryptingKey); - var encCopayerName = Utils.encryptMessage(copayerName, this.credentials.sharedEncryptingKey); + var encCustomData = Utils.encryptMessage( + JSON.stringify(opts.customData), + this.credentials.personalEncryptingKey + ); + var encCopayerName = Utils.encryptMessage( + copayerName, + this.credentials.sharedEncryptingKey + ); var args = { walletId: walletId, @@ -879,7 +1039,7 @@ API.prototype._doJoinWallet = function(walletId, walletPrivKey, xPubKey, request name: encCopayerName, xPubKey: xPubKey, requestPubKey: requestPubKey, - customData: encCustomData, + customData: encCustomData }; if (opts.dryRun) args.dryRun = true; @@ -940,7 +1100,6 @@ API.prototype.getKeys = function(password) { return this.credentials.getKeys(password); }; - /** * Checks is password is valid * Returns null (keys not encrypted), true or false. @@ -955,10 +1114,9 @@ API.prototype.checkPassword = function(password) { return !!keys.xPrivKey; } catch (e) { return false; - }; + } }; - /** * Can this credentials sign a transaction? * (Only returns fail on a 'proxy' setup for airgapped operation) @@ -969,7 +1127,6 @@ API.prototype.canSign = function() { return this.credentials && this.credentials.canSign(); }; - API._extractPublicKeyRing = function(copayers) { return _.map(copayers, function(copayer) { var pkr = _.pick(copayer, ['xPubKey', 'requestPubKey']); @@ -986,7 +1143,10 @@ API._extractPublicKeyRing = function(copayers) { * @return {undefined} */ API.prototype.encryptPrivateKey = function(password, opts) { - this.credentials.encryptPrivateKey(password, opts || API.privateKeyEncryptionOpts); + this.credentials.encryptPrivateKey( + password, + opts || API.privateKeyEncryptionOpts + ); }; /** @@ -1012,10 +1172,16 @@ API.prototype.getFeeLevels = function(coin, network, cb) { $.checkArgument(coin || _.includes(['btc', 'bch'], coin)); $.checkArgument(network || _.includes(['livenet', 'testnet'], network)); - self.request.get('/v2/feelevels/?coin=' + (coin || 'btc') + '&network=' + (network || 'livenet'), function(err, result) { - if (err) return cb(err); - return cb(err, result); - }); + self.request.get( + '/v2/feelevels/?coin=' + + (coin || 'btc') + + '&network=' + + (network || 'livenet'), + function(err, result) { + if (err) return cb(err); + return cb(err, result); + } + ); }; /** @@ -1028,7 +1194,7 @@ API.prototype.getVersion = function(cb) { }; API.prototype._checkKeyDerivation = function() { - var isInvalid = (this.keyDerivationOk === false); + var isInvalid = this.keyDerivationOk === false; if (isInvalid) { log.error('Key derivation for this device is not working as expected'); } @@ -1054,16 +1220,19 @@ API.prototype._checkKeyDerivation = function() { API.prototype.createWallet = function(walletName, copayerName, m, n, opts, cb) { var self = this; - if (!self._checkKeyDerivation()) return cb(new Error('Cannot create new wallet')); + if (!self._checkKeyDerivation()) + return cb(new Error('Cannot create new wallet')); if (opts) $.shouldBeObject(opts); opts = opts || {}; var coin = opts.coin || 'btc'; - if (!_.includes(['btc', 'bch', 'eth'], coin)) return cb(new Error('Invalid coin')); + if (!_.includes(['btc', 'bch', 'eth'], coin)) + return cb(new Error('Invalid coin')); var network = opts.network || 'livenet'; - if (!_.includes(['testnet', 'livenet'], network)) return cb(new Error('Invalid network')); + if (!_.includes(['testnet', 'livenet'], network)) + return cb(new Error('Invalid network')); if (!self.credentials) { log.info('Generating new keys'); @@ -1093,26 +1262,38 @@ API.prototype.createWallet = function(walletName, copayerName, m, n, opts, cb) { name: encWalletName, m: m, n: n, - pubKey: (new Bitcore.PrivateKey(walletPrivKey)).toPublicKey().toString(), + pubKey: new Bitcore.PrivateKey(walletPrivKey).toPublicKey().toString(), coin: coin, network: network, singleAddress: !!opts.singleAddress, - id: opts.id, + id: opts.id }; self.request.post('/v2/wallets/', args, function(err, res) { if (err) return cb(err); var walletId = res.walletId; c.addWalletInfo(walletId, walletName, m, n, copayerName); - var secret = API._buildSecret(c.walletId, c.walletPrivKey, c.coin, c.network); - - self._doJoinWallet(walletId, walletPrivKey, c.xPubKey, c.requestPubKey, copayerName, { + var secret = API._buildSecret( + c.walletId, + c.walletPrivKey, + c.coin, + c.network + ); + + self._doJoinWallet( + walletId, + walletPrivKey, + c.xPubKey, + c.requestPubKey, + copayerName, + { coin: coin }, function(err, wallet) { if (err) return cb(err); return cb(null, n > 1 ? secret : null); - }); + } + ); }); }; @@ -1141,7 +1322,8 @@ API.prototype.joinWallet = function(secret, copayerName, opts, cb) { opts = opts || {}; var coin = opts.coin || 'btc'; - if (!_.includes(['btc', 'bch', 'eth'], coin)) return cb(new Error('Invalid coin')); + if (!_.includes(['btc', 'bch', 'eth'], coin)) + return cb(new Error('Invalid coin')); try { var secretData = API.parseSecret(secret); @@ -1157,16 +1339,30 @@ API.prototype.joinWallet = function(secret, copayerName, opts, cb) { } self.credentials.addWalletPrivateKey(secretData.walletPrivKey.toString()); - self._doJoinWallet(secretData.walletId, secretData.walletPrivKey, self.credentials.xPubKey, self.credentials.requestPubKey, copayerName, { - coin: coin, - dryRun: !!opts.dryRun, - }, function(err, wallet) { - if (err) return cb(err); - if (!opts.dryRun) { - self.credentials.addWalletInfo(wallet.id, wallet.name, wallet.m, wallet.n, copayerName); + self._doJoinWallet( + secretData.walletId, + secretData.walletPrivKey, + self.credentials.xPubKey, + self.credentials.requestPubKey, + copayerName, + { + coin: coin, + dryRun: !!opts.dryRun + }, + function(err, wallet) { + if (err) return cb(err); + if (!opts.dryRun) { + self.credentials.addWalletInfo( + wallet.id, + wallet.name, + wallet.m, + wallet.n, + copayerName + ); + } + return cb(null, wallet); } - return cb(null, wallet); - }); + ); }; /** @@ -1182,64 +1378,83 @@ API.prototype.recreateWallet = function(cb) { var self = this; // First: Try to get the wallet with current credentials - this.getStatus({ - includeExtendedInfo: true - }, function(err) { - // No error? -> Wallet is ready. - if (!err) { - log.info('Wallet is already created'); - return cb(); - }; - - var c = self.credentials; - var walletPrivKey = Bitcore.PrivateKey.fromString(c.walletPrivKey); - var walletId = c.walletId; - var supportBIP44AndP2PKH = c.derivationStrategy != Constants.DERIVATION_STRATEGIES.BIP45; - var encWalletName = Utils.encryptMessage(c.walletName || 'recovered wallet', c.sharedEncryptingKey); - var coin = c.coin; - - var args = { - name: encWalletName, - m: c.m, - n: c.n, - pubKey: walletPrivKey.toPublicKey().toString(), - coin: c.coin, - network: c.network, - id: walletId, - supportBIP44AndP2PKH: supportBIP44AndP2PKH, - }; + this.getStatus( + { + includeExtendedInfo: true + }, + function(err) { + // No error? -> Wallet is ready. + if (!err) { + log.info('Wallet is already created'); + return cb(); + } - self.request.post('/v2/wallets/', args, function(err, body) { - if (err) { - if (!(err instanceof Errors.WALLET_ALREADY_EXISTS)) - return cb(err); + var c = self.credentials; + var walletPrivKey = Bitcore.PrivateKey.fromString(c.walletPrivKey); + var walletId = c.walletId; + var supportBIP44AndP2PKH = + c.derivationStrategy != Constants.DERIVATION_STRATEGIES.BIP45; + var encWalletName = Utils.encryptMessage( + c.walletName || 'recovered wallet', + c.sharedEncryptingKey + ); + var coin = c.coin; + + var args = { + name: encWalletName, + m: c.m, + n: c.n, + pubKey: walletPrivKey.toPublicKey().toString(), + coin: c.coin, + network: c.network, + id: walletId, + supportBIP44AndP2PKH: supportBIP44AndP2PKH + }; + + self.request.post('/v2/wallets/', args, function(err, body) { + if (err) { + if (!(err instanceof Errors.WALLET_ALREADY_EXISTS)) return cb(err); - return self.addAccess({}, function(err) { - if (err) return cb(err); - self.openWallet(function(err) { - return cb(err); + return self.addAccess({}, function(err) { + if (err) return cb(err); + self.openWallet(function(err) { + return cb(err); + }); }); - }); - } + } - if (!walletId) { - walletId = body.walletId; - } + if (!walletId) { + walletId = body.walletId; + } - var i = 1; - async.each(self.credentials.publicKeyRing, function(item, next) { - var name = item.copayerName || ('copayer ' + i++); - self._doJoinWallet(walletId, walletPrivKey, item.xPubKey, item.requestPubKey, name, { - coin: c.coin, - supportBIP44AndP2PKH: supportBIP44AndP2PKH, - }, function(err) { - //Ignore error is copayer already in wallet - if (err && err instanceof Errors.COPAYER_IN_WALLET) return next(); - return next(err); - }); - }, cb); - }); - }); + var i = 1; + async.each( + self.credentials.publicKeyRing, + function(item, next) { + var name = item.copayerName || 'copayer ' + i++; + self._doJoinWallet( + walletId, + walletPrivKey, + item.xPubKey, + item.requestPubKey, + name, + { + coin: c.coin, + supportBIP44AndP2PKH: supportBIP44AndP2PKH + }, + function(err) { + //Ignore error is copayer already in wallet + if (err && err instanceof Errors.COPAYER_IN_WALLET) + return next(); + return next(err); + } + ); + }, + cb + ); + }); + } + ); }; API.prototype._processWallet = function(wallet) { @@ -1278,13 +1493,18 @@ API.prototype._processStatus = function(status) { if (!copayers) return; var me = _.find(copayers, { - 'id': self.credentials.copayerId + id: self.credentials.copayerId }); if (!me || !me.customData) return; var customData; try { - customData = JSON.parse(Utils.decryptMessage(me.customData, self.credentials.personalEncryptingKey)); + customData = JSON.parse( + Utils.decryptMessage( + me.customData, + self.credentials.personalEncryptingKey + ) + ); } catch (e) { log.warn('Could not decrypt customData:', me.customData); } @@ -1296,13 +1516,12 @@ API.prototype._processStatus = function(status) { // Update walletPrivateKey if (!self.credentials.walletPrivKey && customData.walletPrivKey) self.credentials.addWalletPrivateKey(customData.walletPrivKey); - }; + } processCustomData(status); self._processWallet(status.wallet); self._processTxps(status.pendingTxps); -} - +}; /** * Get latest notifications @@ -1330,7 +1549,9 @@ API.prototype.getNotifications = function(opts, cb) { if (err) return cb(err); var notifications = _.filter(result, function(notification) { - return opts.includeOwn || (notification.creatorId != self.credentials.copayerId); + return ( + opts.includeOwn || notification.creatorId != self.credentials.copayerId + ); }); return cb(null, notifications); @@ -1350,7 +1571,7 @@ API.prototype.getStatus = function(opts, cb) { if (!cb) { cb = opts; opts = {}; - log.warn('DEPRECATED WARN: getStatus should receive 2 parameters.') + log.warn('DEPRECATED WARN: getStatus should receive 2 parameters.'); } var self = this; @@ -1364,7 +1585,12 @@ API.prototype.getStatus = function(opts, cb) { if (err) return cb(err); if (result.wallet.status == 'pending') { var c = self.credentials; - result.wallet.secret = API._buildSecret(c.walletId, c.walletPrivKey, c.coin, c.network); + result.wallet.secret = API._buildSecret( + c.walletId, + c.walletPrivKey, + c.coin, + c.network + ); } self._processStatus(result); @@ -1405,7 +1631,6 @@ API.prototype.savePreferences = function(preferences, cb) { self.request.put('/v1/preferences/', preferences, cb); }; - /** * fetchPayPro * @@ -1417,22 +1642,23 @@ API.prototype.savePreferences = function(preferences, cb) { * paypro.memo */ API.prototype.fetchPayPro = function(opts, cb) { - $.checkArgument(opts) - .checkArgument(opts.payProUrl); - - PayPro.get({ - url: opts.payProUrl, - coin: this.credentials.coin || 'btc', - network: this.credentials.network || 'livenet', - - // for testing - request: this.request, - }, function(err, paypro) { - if (err) - return cb(err); + $.checkArgument(opts).checkArgument(opts.payProUrl); - return cb(null, paypro); - }); + PayPro.get( + { + url: opts.payProUrl, + coin: this.credentials.coin || 'btc', + network: this.credentials.network || 'livenet', + + // for testing + request: this.request + }, + function(err, paypro) { + if (err) return cb(err); + + return cb(null, paypro); + } + ); }; /** @@ -1448,9 +1674,11 @@ API.prototype.getUtxos = function(opts, cb) { opts = opts || {}; var url = '/v1/utxos/'; if (opts.addresses) { - url += '?' + querystring.stringify({ - addresses: [].concat(opts.addresses).join(',') - }); + url += + '?' + + querystring.stringify({ + addresses: [].concat(opts.addresses).join(',') + }); } this.request.get(url, cb); }; @@ -1459,10 +1687,14 @@ API.prototype._getCreateTxProposalArgs = function(opts) { var self = this; var args = _.cloneDeep(opts); - args.message = API._encryptMessage(opts.message, this.credentials.sharedEncryptingKey) || null; + args.message = + API._encryptMessage(opts.message, this.credentials.sharedEncryptingKey) || + null; args.payProUrl = opts.payProUrl || null; _.each(args.outputs, function(o) { - o.message = API._encryptMessage(o.message, self.credentials.sharedEncryptingKey) || null; + o.message = + API._encryptMessage(o.message, self.credentials.sharedEncryptingKey) || + null; }); return args; @@ -1504,8 +1736,14 @@ API.prototype.createTxProposal = function(opts, cb) { if (err) return cb(err); self._processTxps(txp); - if (!Verifier.checkProposalCreation(args, txp, self.credentials.sharedEncryptingKey)) { - return cb(new Errors.SERVER_COMPROMISED); + if ( + !Verifier.checkProposalCreation( + args, + txp, + self.credentials.sharedEncryptingKey + ) + ) { + return cb(new Errors.SERVER_COMPROMISED()); } return cb(null, txp); @@ -1521,8 +1759,7 @@ API.prototype.createTxProposal = function(opts, cb) { */ API.prototype.publishTxProposal = function(opts, cb) { $.checkState(this.credentials && this.credentials.isComplete()); - $.checkArgument(opts) - .checkArgument(opts.txp); + $.checkArgument(opts).checkArgument(opts.txp); $.checkState(parseInt(opts.txp.version) >= 3); @@ -1558,7 +1795,7 @@ API.prototype.createAddress = function(opts, cb) { if (!cb) { cb = opts; opts = {}; - log.warn('DEPRECATED WARN: createAddress should receive 2 parameters.') + log.warn('DEPRECATED WARN: createAddress should receive 2 parameters.'); } // if (!self._checkKeyDerivation()) return cb(new Error('Cannot create new address for this wallet')); @@ -1609,8 +1846,7 @@ API.prototype.getMainAddresses = function(opts, cb) { var fake = _.some(addresses, function(address) { return !Verifier.checkAddress(self.credentials, address); }); - if (fake) - return cb(new Errors.SERVER_COMPROMISED); + if (fake) return cb(new Errors.SERVER_COMPROMISED()); } return cb(null, addresses); }); @@ -1626,7 +1862,7 @@ API.prototype.getBalance = function(opts, cb) { if (!cb) { cb = opts; opts = {}; - log.warn('DEPRECATED WARN: getBalance should receive 2 parameters.') + log.warn('DEPRECATED WARN: getBalance should receive 2 parameters.'); } var self = this; @@ -1636,7 +1872,8 @@ API.prototype.getBalance = function(opts, cb) { var args = []; if (opts.coin) { - if (!_.includes(['btc', 'bch', 'eth'], opts.coin)) return cb(new Error('Invalid coin')); + if (!_.includes(['btc', 'bch', 'eth'], opts.coin)) + return cb(new Error('Invalid coin')); args.push('coin=' + opts.coin); } var qs = ''; @@ -1666,59 +1903,72 @@ API.prototype.getTxProposals = function(opts, cb) { if (err) return cb(err); self._processTxps(txps); - async.every(txps, + async.every( + txps, function(txp, acb) { if (opts.doNotVerify) return acb(true); self.getPayPro(txp, function(err, paypro) { var isLegit = Verifier.checkTxProposal(self.credentials, txp, { - paypro: paypro, + paypro: paypro }); return acb(isLegit); }); }, function(isLegit) { - if (!isLegit) - return cb(new Errors.SERVER_COMPROMISED); + if (!isLegit) return cb(new Errors.SERVER_COMPROMISED()); var result; if (opts.forAirGapped) { result = { txps: JSON.parse(JSON.stringify(txps)), - encryptedPkr: opts.doNotEncryptPkr ? null : Utils.encryptMessage(JSON.stringify(self.credentials.publicKeyRing), self.credentials.personalEncryptingKey), - unencryptedPkr: opts.doNotEncryptPkr ? JSON.stringify(self.credentials.publicKeyRing) : null, + encryptedPkr: opts.doNotEncryptPkr + ? null + : Utils.encryptMessage( + JSON.stringify(self.credentials.publicKeyRing), + self.credentials.personalEncryptingKey + ), + unencryptedPkr: opts.doNotEncryptPkr + ? JSON.stringify(self.credentials.publicKeyRing) + : null, m: self.credentials.m, - n: self.credentials.n, + n: self.credentials.n }; } else { result = txps; } return cb(null, result); - }); + } + ); }); }; - //private? API.prototype.getPayPro = function(txp, cb) { var self = this; - if (!txp.payProUrl || this.doNotVerifyPayPro) - return cb(); + if (!txp.payProUrl || this.doNotVerifyPayPro) return cb(); - PayPro.get({ - url: txp.payProUrl, - coin: txp.coin || 'btc', - network: txp.network || 'livenet', + PayPro.get( + { + url: txp.payProUrl, + coin: txp.coin || 'btc', + network: txp.network || 'livenet', - // for testing - request: self.request, - }, function(err, paypro) { - if (err) return cb(new Error('Could not fetch invoice:' + (err.message? err.message : err))); - return cb(null, paypro); - }); + // for testing + request: self.request + }, + function(err, paypro) { + if (err) + return cb( + new Error( + 'Could not fetch invoice:' + (err.message ? err.message : err) + ) + ); + return cb(null, paypro); + } + ); }; - /** * Sign a transaction proposal * @@ -1739,22 +1989,20 @@ API.prototype.signTxProposal = function(txp, password, cb) { var self = this; if (!txp.signatures) { - if (!self.canSign()) - return cb(new Errors.MISSING_PRIVATE_KEY); + if (!self.canSign()) return cb(new Errors.MISSING_PRIVATE_KEY()); if (self.isPrivKeyEncrypted() && !password) - return cb(new Errors.ENCRYPTED_PRIVATE_KEY); + return cb(new Errors.ENCRYPTED_PRIVATE_KEY()); } self.getPayPro(txp, function(err, paypro) { if (err) return cb(err); var isLegit = Verifier.checkTxProposal(self.credentials, txp, { - paypro: paypro, + paypro: paypro }); - if (!isLegit) - return cb(new Errors.SERVER_COMPROMISED); + if (!isLegit) return cb(new Errors.SERVER_COMPROMISED()); var signatures = txp.signatures; @@ -1790,20 +2038,27 @@ API.prototype.signTxProposal = function(txp, password, cb) { * @param {String} password - (optional) A password to decrypt the encrypted private key (if encryption is set). * @return {Object} txp - Return transaction */ -API.prototype.signTxProposalFromAirGapped = function(txp, encryptedPkr, m, n, password) { +API.prototype.signTxProposalFromAirGapped = function( + txp, + encryptedPkr, + m, + n, + password +) { $.checkState(this.credentials); var self = this; - if (!self.canSign()) - throw new Errors.MISSING_PRIVATE_KEY; + if (!self.canSign()) throw new Errors.MISSING_PRIVATE_KEY(); if (self.isPrivKeyEncrypted() && !password) - throw new Errors.ENCRYPTED_PRIVATE_KEY; + throw new Errors.ENCRYPTED_PRIVATE_KEY(); var publicKeyRing; try { - publicKeyRing = JSON.parse(Utils.decryptMessage(encryptedPkr, self.credentials.personalEncryptingKey)); + publicKeyRing = JSON.parse( + Utils.decryptMessage(encryptedPkr, self.credentials.personalEncryptingKey) + ); } catch (ex) { throw new Error('Could not decrypt public key ring'); } @@ -1823,7 +2078,6 @@ API.prototype.signTxProposalFromAirGapped = function(txp, encryptedPkr, m, n, pa return self._signTxp(txp, password); }; - /** * Sign transaction proposal from AirGapped * @@ -1839,12 +2093,20 @@ API.prototype.signTxProposalFromAirGapped = function(txp, encryptedPkr, m, n, pa * @param {String} opts.derivationStrategy - default 'BIP44' * @return {Object} txp - Return transaction */ -API.signTxProposalFromAirGapped = function(key, txp, unencryptedPkr, m, n, opts) { +API.signTxProposalFromAirGapped = function( + key, + txp, + unencryptedPkr, + m, + n, + opts +) { var self = this; - opts = opts || {} + opts = opts || {}; var coin = opts.coin || 'btc'; - if (!_.includes(['btc', 'bch', 'eth'], coin)) return cb(new Error('Invalid coin')); + if (!_.includes(['btc', 'bch', 'eth'], coin)) + return cb(new Error('Invalid coin')); var publicKeyRing = JSON.parse(unencryptedPkr); @@ -1857,21 +2119,23 @@ API.signTxProposalFromAirGapped = function(key, txp, unencryptedPkr, m, n, opts) }); if (key.slice(0, 4) === 'xprv' || key.slice(0, 4) === 'tprv') { - if (key.slice(0, 4) === 'xprv' && txp.network == 'testnet') throw new Error("testnet HD keys must start with tprv"); - if (key.slice(0, 4) === 'tprv' && txp.network == 'livenet') throw new Error("livenet HD keys must start with xprv"); + if (key.slice(0, 4) === 'xprv' && txp.network == 'testnet') + throw new Error('testnet HD keys must start with tprv'); + if (key.slice(0, 4) === 'tprv' && txp.network == 'livenet') + throw new Error('livenet HD keys must start with xprv'); newClient.seedFromExtendedPrivateKey(key, { - 'coin': coin, - 'account': opts.account, - 'derivationStrategy': opts.derivationStrategy + coin: coin, + account: opts.account, + derivationStrategy: opts.derivationStrategy }); } else { newClient.seedFromMnemonic(key, { - 'coin': coin, - 'network': txp.network, - 'passphrase': opts.passphrase, - 'account': opts.account, - 'derivationStrategy': opts.derivationStrategy - }) + coin: coin, + network: txp.network, + passphrase: opts.passphrase, + account: opts.account, + derivationStrategy: opts.derivationStrategy + }); } newClient.credentials.m = m; newClient.credentials.n = n; @@ -1884,7 +2148,6 @@ API.signTxProposalFromAirGapped = function(key, txp, unencryptedPkr, m, n, opts) return newClient._signTxp(txp); }; - /** * Reject a transaction proposal * @@ -1901,7 +2164,8 @@ API.prototype.rejectTxProposal = function(txp, reason, cb) { var url = '/v1/txproposals/' + txp.id + '/rejections/'; var args = { - reason: API._encryptMessage(reason, self.credentials.sharedEncryptingKey) || '', + reason: + API._encryptMessage(reason, self.credentials.sharedEncryptingKey) || '' }; self.request.post(url, args, function(err, txp) { if (err) return cb(err); @@ -1944,7 +2208,6 @@ API.prototype._doBroadcast = function(txp, cb) { }); }; - /** * Broadcast a transaction proposal * @@ -1961,37 +2224,39 @@ API.prototype.broadcastTxProposal = function(txp, cb) { if (err) return cb(err); if (paypro) { - var t_unsigned = Utils.buildTx(txp); var t = Utils.buildTx(txp); self._applyAllSignatures(txp, t); - PayPro.send({ - url: txp.payProUrl, - amountSat: txp.amount, - rawTxUnsigned: t_unsigned.uncheckedSerialize(), - rawTx: t.serialize({ - disableSmallFees: true, - disableLargeFees: true, - disableDustOutputs: true - }), - coin: txp.coin || 'btc', - network: txp.network || 'livenet', - - // for testing - request: self.request, - }, function(err, ack, memo) { - if (err) { - return cb(err); - } + PayPro.send( + { + url: txp.payProUrl, + amountSat: txp.amount, + rawTxUnsigned: t_unsigned.uncheckedSerialize(), + rawTx: t.serialize({ + disableSmallFees: true, + disableLargeFees: true, + disableDustOutputs: true + }), + coin: txp.coin || 'btc', + network: txp.network || 'livenet', + + // for testing + request: self.request + }, + function(err, ack, memo) { + if (err) { + return cb(err); + } - if (memo) { - log.debug('Merchant memo:', memo); + if (memo) { + log.debug('Merchant memo:', memo); + } + self._doBroadcast(txp, function(err2, txp) { + return cb(err2, txp, memo, err); + }); } - self._doBroadcast(txp, function(err2, txp) { - return cb(err2, txp, memo, err); - }); - }); + ); } else { self._doBroadcast(txp, cb); } @@ -2068,7 +2333,6 @@ API.prototype.getTx = function(id, cb) { }); }; - /** * Start an address scanning process. * When finished, the scanning process will send a notification 'ScanFinished' to all copayers. @@ -2083,7 +2347,7 @@ API.prototype.startScan = function(opts, cb) { var self = this; var args = { - includeCopayerBranches: opts.includeCopayerBranches, + includeCopayerBranches: opts.includeCopayerBranches }; self.request.post('/v1/addresses/scan', args, function(err) { @@ -2107,22 +2371,27 @@ API.prototype.addAccess = function(opts, cb) { opts = opts || {}; - var reqPrivKey = new Bitcore.PrivateKey(opts.generateNewKey ? null : this.credentials.requestPrivKey); + var reqPrivKey = new Bitcore.PrivateKey( + opts.generateNewKey ? null : this.credentials.requestPrivKey + ); var requestPubKey = reqPrivKey.toPublicKey().toString(); - var xPriv = new Bitcore.HDPrivateKey(this.credentials.xPrivKey) - .deriveChild(this.credentials.getBaseAddressDerivationPath()); + var xPriv = new Bitcore.HDPrivateKey(this.credentials.xPrivKey).deriveChild( + this.credentials.getBaseAddressDerivationPath() + ); var sig = Utils.signRequestPubKey(requestPubKey, xPriv); var copayerId = this.credentials.copayerId; - var encCopayerName = opts.name ? Utils.encryptMessage(opts.name, this.credentials.sharedEncryptingKey) : null; + var encCopayerName = opts.name + ? Utils.encryptMessage(opts.name, this.credentials.sharedEncryptingKey) + : null; var opts = { copayerId: copayerId, requestPubKey: requestPubKey, signature: sig, name: encCopayerName, - restrictions: opts.restrictions, + restrictions: opts.restrictions }; this.request.put('/v1/copayers/' + copayerId + '/', opts, function(err, res) { @@ -2162,7 +2431,10 @@ API.prototype.editTxNote = function(opts, cb) { opts = opts || {}; if (opts.body) { - opts.body = API._encryptMessage(opts.body, this.credentials.sharedEncryptingKey); + opts.body = API._encryptMessage( + opts.body, + this.credentials.sharedEncryptingKey + ); } self.request.put('/v1/txnotes/' + opts.txid + '/', opts, function(err, note) { if (err) return cb(err); @@ -2221,11 +2493,14 @@ API.prototype.getFiatRate = function(opts, cb) { qs = '?' + args.join('&'); } - self.request.get('/v1/fiatrates/' + opts.code + '/' + qs, function(err, rates) { + self.request.get('/v1/fiatrates/' + opts.code + '/' + qs, function( + err, + rates + ) { if (err) return cb(err); return cb(null, rates); }); -} +}; /** * Subscribe to push notifications. @@ -2297,8 +2572,7 @@ API.prototype.getSendMaxInfo = function(opts, cb) { var qs = ''; - if (args.length > 0) - qs = '?' + args.join('&'); + if (args.length > 0) qs = '?' + args.join('&'); var url = '/v1/sendmaxinfo/' + qs; @@ -2326,20 +2600,27 @@ API.prototype.getStatusByIdentifier = function(opts, cb) { qs.push('includeExtendedInfo=' + (opts.includeExtendedInfo ? '1' : '0')); qs.push('walletCheck=' + (opts.walletCheck ? '1' : '0')); - self.request.get('/v1/wallets/' + opts.identifier + '?' + qs.join('&'), function(err, result) { - if (err || !result || !result.wallet) return cb(err); - if (result.wallet.status == 'pending') { - var c = self.credentials; - result.wallet.secret = API._buildSecret(c.walletId, c.walletPrivKey, c.coin, c.network); - } + self.request.get( + '/v1/wallets/' + opts.identifier + '?' + qs.join('&'), + function(err, result) { + if (err || !result || !result.wallet) return cb(err); + if (result.wallet.status == 'pending') { + var c = self.credentials; + result.wallet.secret = API._buildSecret( + c.walletId, + c.walletPrivKey, + c.coin, + c.network + ); + } - self._processStatus(result); + self._processStatus(result); - return cb(err, result); - }); + return cb(err, result); + } + ); }; - /* * * Compatibility Functions @@ -2360,20 +2641,18 @@ API.prototype._oldCopayDecrypt = function(username, password, blob) { decrypted = sjcl.decrypt(passphrase, blob); } catch (e) { log.debug(e); - }; + } } - if (!decrypted) - return null; + if (!decrypted) return null; var ret; try { ret = JSON.parse(decrypted); - } catch (e) {}; + } catch (e) {} return ret; }; - API.prototype.getWalletIdsFromOldCopay = function(username, password, blob) { var p = this._oldCopayDecrypt(username, password, blob); if (!p) return null; @@ -2381,7 +2660,6 @@ API.prototype.getWalletIdsFromOldCopay = function(username, password, blob) { return _.uniq(ids); }; - /** * createWalletFromOldCopay * @@ -2391,7 +2669,12 @@ API.prototype.getWalletIdsFromOldCopay = function(username, password, blob) { * @param cb * @return {undefined} */ -API.prototype.createWalletFromOldCopay = function(username, password, blob, cb) { +API.prototype.createWalletFromOldCopay = function( + username, + password, + blob, + cb +) { var self = this; var w = this._oldCopayDecrypt(username, password, blob); if (!w) return cb(new Error('Could not decrypt')); diff --git a/packages/bitcore-wallet-client/lib/credentials.js b/packages/bitcore-wallet-client/lib/credentials.js index 068a122fbea..5250594b7dd 100644 --- a/packages/bitcore-wallet-client/lib/credentials.js +++ b/packages/bitcore-wallet-client/lib/credentials.js @@ -299,12 +299,7 @@ Credentials.prototype._expand = function() { var derivedXPrivKey = deriveFn(this.getBaseAddressDerivationPath()); // this is the xPubKey shared with the server. - global.console.log( - 'Deriving xPubKey with', - this.getBaseAddressDerivationPath() - ); this.xPubKey = derivedXPrivKey.hdPublicKey.toString(); - global.console.log(this.xPubKey); } // requests keys from mnemonics, but using a xPubkey @@ -391,7 +386,6 @@ Credentials.prototype.getBaseAddressDerivationPath = function() { break; } const path = CWC.deriver.pathFor(this.coin, this.network, this.account); - global.console.log(path); return path; // return 'm/' + purpose + "'/" + coin + "'/" + this.account + "'"; }; From b7d8cbe8fbe60e5501ccb2c3921e553ce5690552 Mon Sep 17 00:00:00 2001 From: Justin Kook Date: Thu, 4 Apr 2019 17:04:30 -0400 Subject: [PATCH 31/40] getBalance works, added BalanceResponse type interface --- .../src/lib/blockchainexplorers/v8.ts | 24 +- .../bitcore-wallet-service/src/lib/server.ts | 695 +++++++++--------- 2 files changed, 370 insertions(+), 349 deletions(-) diff --git a/packages/bitcore-wallet-service/src/lib/blockchainexplorers/v8.ts b/packages/bitcore-wallet-service/src/lib/blockchainexplorers/v8.ts index 7658578fe05..57eba76a1ca 100644 --- a/packages/bitcore-wallet-service/src/lib/blockchainexplorers/v8.ts +++ b/packages/bitcore-wallet-service/src/lib/blockchainexplorers/v8.ts @@ -29,6 +29,11 @@ function v8network(bwsNetwork) { } return bwsNetwork; } +interface BalanceResponse { + unconfirmed: number; + confirmed: number; + balance: number; +} export class V8 { coin: string; @@ -99,13 +104,13 @@ export class V8 { translateTx(tx) { if (!this.addressFormat) return tx; - _.each(tx.vin, (x) => { + _.each(tx.vin, x => { if (x.addr) { x.addr = this.translateResultAddresses(x.addr); } }); - _.each(tx.vout, (x) => { + _.each(tx.vout, x => { if (x.scriptPubKey && x.scriptPubKey.addresses) { x.scriptPubKey.addresses = this.translateResultAddresses( x.scriptPubKey.addresses @@ -176,14 +181,17 @@ export class V8 { .catch(cb); } - async getBalance(wallet, cb) { + async getBalance(wallet, cb?): Promise { const client = this._getAuthClient(wallet); - client + return client .getBalance({ pubKey: wallet.beAuthPublicKey2, payload: {} }) .then(ret => { - return cb(null, ret); + if (cb) { + return cb(null, ret); + } + return ret as BalanceResponse; }) - .catch(cb); + .catch(err => cb && cb(err)); } getConnectionInfo() { @@ -417,7 +425,7 @@ export class V8 { return icb(err); }); }, - (err) => { + err => { if (err) { return cb(err); } @@ -479,7 +487,7 @@ export class V8 { log.error('Error connecting to ' + this.getConnectionInfo()); }); socket.on('tx', callbacks.onTx); - socket.on('block', (data) => { + socket.on('block', data => { return callbacks.onBlock(data.hash); }); socket.on('coin', data => { diff --git a/packages/bitcore-wallet-service/src/lib/server.ts b/packages/bitcore-wallet-service/src/lib/server.ts index bfc717855e0..f712ad860d3 100644 --- a/packages/bitcore-wallet-service/src/lib/server.ts +++ b/packages/bitcore-wallet-service/src/lib/server.ts @@ -141,7 +141,7 @@ export class WalletService { request = opts.request; } - const initStorage = (cb) => { + const initStorage = cb => { if (opts.storage) { storage = opts.storage; return cb(); @@ -149,7 +149,7 @@ export class WalletService { const newStorage = new Storage(); newStorage.connect( opts.storageOpts, - (err) => { + err => { if (err) { return cb(err); } @@ -160,7 +160,7 @@ export class WalletService { } }; - const initMessageBroker = (cb) => { + const initMessageBroker = cb => { messageBroker = opts.messageBroker || new MessageBroker(opts.messageBrokerOpts); if (messageBroker) { @@ -170,7 +170,7 @@ export class WalletService { return cb(); }; - const initFiatRateService = (cb) => { + const initFiatRateService = cb => { if (opts.fiatRateService) { fiatRateService = opts.fiatRateService; return cb(); @@ -178,7 +178,7 @@ export class WalletService { const newFiatRateService = new FiatRateService(); const opts2 = opts.fiatRateServiceOpts || {}; opts2.storage = storage; - newFiatRateService.init(opts2, (err) => { + newFiatRateService.init(opts2, err => { if (err) { return cb(err); } @@ -191,17 +191,17 @@ export class WalletService { async.series( [ - (next) => { + next => { initStorage(next); }, - (next) => { + next => { initMessageBroker(next); }, - (next) => { + next => { initFiatRateService(next); } ], - (err) => { + err => { lock = opts.lock || new Lock(storage, opts.lockOpts); if (err) { @@ -215,7 +215,7 @@ export class WalletService { } static handleIncomingNotifications(notification, cb) { - cb = cb || function() { }; + cb = cb || function() {}; // do nothing here.... // bc height cache is cleared on bcmonitor @@ -227,7 +227,7 @@ export class WalletService { return cb(); } - storage.disconnect((err) => { + storage.disconnect(err => { if (err) { return cb(err); } @@ -278,7 +278,7 @@ export class WalletService { * for this request (only when copayer is support staff). */ static getInstanceWithAuth(opts, cb) { - const withSignature = (cb) => { + const withSignature = cb => { if (!checkRequired(opts, ['copayerId', 'message', 'signature'], cb)) { return; } @@ -323,7 +323,7 @@ export class WalletService { }); }; - const withSession = (cb) => { + const withSession = cb => { if (!checkRequired(opts, ['copayerId', 'session'], cb)) { return; } @@ -347,10 +347,7 @@ export class WalletService { ); } - server.storage.fetchCopayerLookup(opts.copayerId, ( - err, - copayer - ) => { + server.storage.fetchCopayerLookup(opts.copayerId, (err, copayer) => { if (err) { return cb(err); } @@ -407,7 +404,7 @@ export class WalletService { let session; async.series( [ - (next) => { + next => { this.storage.getSession(this.copayerId, (err, s) => { if (err) { return next(err); @@ -416,7 +413,7 @@ export class WalletService { next(); }); }, - (next) => { + next => { if (!session || !session.isValid()) { session = Model.Session.create({ copayerId: this.copayerId, @@ -427,11 +424,11 @@ export class WalletService { } next(); }, - (next) => { + next => { this.storage.storeSession(session, next); } ], - (err) => { + err => { if (err) { return cb(err); } @@ -513,7 +510,7 @@ export class WalletService { let newWallet; async.series( [ - (acb) => { + acb => { if (!opts.id) { return acb(); } @@ -525,7 +522,7 @@ export class WalletService { return acb(err); }); }, - (acb) => { + acb => { const wallet = Wallet.create({ id: opts.id, name: opts.name, @@ -539,14 +536,14 @@ export class WalletService { addressType, nativeCashAddr: opts.nativeCashAddr }); - this.storage.storeWallet(wallet, (err) => { + this.storage.storeWallet(wallet, err => { this.logi('Wallet created', wallet.id, opts.network); newWallet = wallet; return acb(err); }); } ], - (err) => { + err => { return cb(err, newWallet ? newWallet.id : null); } ); @@ -603,13 +600,13 @@ export class WalletService { let walletId; async.parallel( [ - (done) => { + done => { this.storage.fetchWallet(opts.identifier, (err, wallet) => { if (wallet) walletId = wallet.id; return done(err); }); }, - (done) => { + done => { this.storage.fetchAddressByCoin( Defaults.COIN, opts.identifier, @@ -619,7 +616,7 @@ export class WalletService { } ); }, - (done) => { + done => { // sent txs this.storage.fetchTxByHash(opts.identifier, (err, tx) => { if (tx) walletId = tx.walletId; @@ -627,7 +624,7 @@ export class WalletService { }); } ], - (err) => { + err => { if (err) return cb(err); if (walletId) { return this.storage.fetchWallet(walletId, end); @@ -656,7 +653,7 @@ export class WalletService { } = {}; async.parallel( [ - (next) => { + next => { this.getWallet({}, (err, wallet) => { if (err) return next(err); @@ -673,19 +670,23 @@ export class WalletService { 'customData' ]; - wallet.copayers = _.map(wallet.copayers, (copayer) => { + wallet.copayers = _.map(wallet.copayers, copayer => { if (copayer.id == this.copayerId) return copayer; return _.omit(copayer, 'customData'); }); if (!opts.includeExtendedInfo) { wallet = _.omit(wallet, walletExtendedKeys); - wallet.copayers = _.map(wallet.copayers, (copayer) => { + wallet.copayers = _.map(wallet.copayers, copayer => { return _.omit(copayer, copayerExtendedKeys); }); } status.wallet = wallet; - status.serverMessage = deprecatedServerMessage(wallet, this.appName, this.appVersion); + status.serverMessage = deprecatedServerMessage( + wallet, + this.appName, + this.appVersion + ); status.serverMessage = serverMessages( wallet, @@ -695,7 +696,7 @@ export class WalletService { next(); }); }, - (next) => { + next => { opts.wallet = status.wallet; this.getBalance(opts, (err, balance) => { // ignore WALLET_NEED_SCAN err is includeExtendedInfo is given @@ -713,14 +714,14 @@ export class WalletService { next(); }); }, - (next) => { + next => { this.getPendingTxs({}, (err, pendingTxps) => { if (err) return next(err); status.pendingTxps = pendingTxps; next(); }); }, - (next) => { + next => { this.getPreferences({}, (err, preferences) => { if (err) return next(err); status.preferences = preferences; @@ -728,7 +729,7 @@ export class WalletService { }); } ], - (err) => { + err => { if (err) return cb(err); return cb(null, status); } @@ -765,7 +766,7 @@ export class WalletService { * @param pubKeys */ _getSigningKey(text, signature, pubKeys) { - return _.find(pubKeys, (item) => { + return _.find(pubKeys, item => { return this._verifySignature(text, signature, item.key); }); } @@ -787,7 +788,7 @@ export class WalletService { // this.logi('Notification', type); - cb = cb || function() { }; + cb = cb || function() {}; const walletId = this.walletId || data.walletId; const copayerId = this.copayerId || data.copayerId; @@ -854,12 +855,12 @@ export class WalletService { }); wallet.addCopayer(copayer); - this.storage.storeWalletAndUpdateCopayersLookup(wallet, (err) => { + this.storage.storeWalletAndUpdateCopayersLookup(wallet, err => { if (err) return cb(err); async.series( [ - (next) => { + next => { this._notify( 'NewCopayer', { @@ -871,7 +872,7 @@ export class WalletService { next ); }, - (next) => { + next => { if (wallet.isComplete() && wallet.isShared()) { this._notify( 'WalletComplete', @@ -907,7 +908,7 @@ export class WalletService { opts.restrictions, opts.name ); - this.storage.storeWalletAndUpdateCopayersLookup(wallet, (err) => { + this.storage.storeWalletAndUpdateCopayersLookup(wallet, err => { if (err) return cb(err); return cb(null, { @@ -1041,7 +1042,7 @@ export class WalletService { : true; this.walletId = opts.walletId; - this._runLocked(cb, (cb) => { + this._runLocked(cb, cb => { this.storage.fetchWallet(opts.walletId, (err, wallet) => { if (err) return cb(err); if (!wallet) return cb(Errors.WALLET_NOT_FOUND); @@ -1147,7 +1148,7 @@ export class WalletService { opts = _.pick(opts, _.map(preferences, 'name')); try { - _.each(preferences, (preference) => { + _.each(preferences, preference => { const value = opts[preference.name]; if (!value) return; if (!preference.isValid(value)) { @@ -1159,24 +1160,25 @@ export class WalletService { return cb(new ClientError(ex)); } - this._runLocked(cb, (cb) => { - this.storage.fetchPreferences(this.walletId, this.copayerId, ( - err, - oldPref - ) => { - if (err) return cb(err); + this._runLocked(cb, cb => { + this.storage.fetchPreferences( + this.walletId, + this.copayerId, + (err, oldPref) => { + if (err) return cb(err); - const newPref = Model.Preferences.create({ - walletId: this.walletId, - copayerId: this.copayerId - }); - const preferences = Model.Preferences.fromObj( - _.defaults(newPref, opts, oldPref) - ); - this.storage.storePreferences(preferences, (err) => { - return cb(err); - }); - }); + const newPref = Model.Preferences.create({ + walletId: this.walletId, + copayerId: this.copayerId + }); + const preferences = Model.Preferences.fromObj( + _.defaults(newPref, opts, oldPref) + ); + this.storage.storePreferences(preferences, err => { + return cb(err); + }); + } + ); }); } @@ -1186,22 +1188,20 @@ export class WalletService { * @returns {Object} preferences */ getPreferences(opts, cb) { - this.storage.fetchPreferences(this.walletId, this.copayerId, ( - err, - preferences - ) => { - if (err) return cb(err); - return cb(null, preferences || {}); - }); + this.storage.fetchPreferences( + this.walletId, + this.copayerId, + (err, preferences) => { + if (err) return cb(err); + return cb(null, preferences || {}); + } + ); } _canCreateAddress(ignoreMaxGap, cb) { if (ignoreMaxGap) return cb(null, true); - this.storage.fetchAddresses(this.walletId, ( - err, - addresses: IAddress[] - ) => { + this.storage.fetchAddresses(this.walletId, (err, addresses: IAddress[]) => { if (err) return cb(err); const latestAddresses = _.takeRight( _.reject(addresses, { @@ -1229,23 +1229,20 @@ export class WalletService { () => { return i > 0 && !activityFound; }, - (next) => { - bc.getAddressActivity(latestAddresses[--i].address, ( - err, - res - ) => { + next => { + bc.getAddressActivity(latestAddresses[--i].address, (err, res) => { if (err) return next(err); activityFound = !!res; return next(); }); }, - (err) => { + err => { if (err) return cb(err); if (!activityFound) return cb(null, false); const address = latestAddresses[i]; address.hasActivity = true; - this.storage.storeAddress(address, (err) => { + this.storage.storeAddress(address, err => { return cb(err, true); }); } @@ -1291,7 +1288,7 @@ export class WalletService { this._store( wallet, address, - (err) => { + err => { if (err) return cb(err); this._notify( @@ -1322,11 +1319,8 @@ export class WalletService { this._runLocked( cb, - (cb) => { - this.getWallet({ doNotMigrate: opts.doNotMigrate }, ( - err, - wallet - ) => { + cb => { + this.getWallet({ doNotMigrate: opts.doNotMigrate }, (err, wallet) => { if (err) return cb(err); if (!wallet.isComplete()) return cb(Errors.WALLET_NOT_COMPLETE); if (wallet.scanStatus == 'error') @@ -1440,14 +1434,14 @@ export class WalletService { _getUtxosForCurrentWallet(opts, cb) { opts = opts || {}; - const utxoKey = (utxo) => { + const utxoKey = utxo => { return utxo.txid + '|' + utxo.vout; }; let coin, allAddresses, allUtxos, utxoIndex, addressStrs, bc, wallet; async.series( [ - (next) => { + next => { this.getWallet({}, (err, w) => { if (err) return next(err); @@ -1466,7 +1460,7 @@ export class WalletService { return next(); }); }, - (next) => { + next => { if (_.isArray(opts.addresses)) { allAddresses = opts.addresses; return next(); @@ -1480,34 +1474,37 @@ export class WalletService { return next(); }); }, - (next) => { + next => { addressStrs = _.map(allAddresses, 'address'); return next(); }, - (next) => { + next => { if (!wallet.isComplete()) return next(); - this._getBlockchainHeight(wallet.coin, wallet.network, ( - err, - height, - hash - ) => { - if (err) return next(err); - bc.getUtxos(wallet, height, (err, utxos) => { + this._getBlockchainHeight( + wallet.coin, + wallet.network, + (err, height, hash) => { if (err) return next(err); - if (utxos.length == 0) return cb(null, []); - allUtxos = utxos; - utxoIndex = _.keyBy(allUtxos, utxoKey); - return next(); - }); - }); + bc.getUtxos(wallet, height, (err, utxos) => { + if (err) return next(err); + if (utxos.length == 0) return cb(null, []); + allUtxos = utxos; + utxoIndex = _.keyBy(allUtxos, utxoKey); + return next(); + }); + } + ); }, - (next) => { + next => { this.getPendingTxs({}, (err, txps) => { if (err) return next(err); - const lockedInputs = _.map(_.flatten(_.map(txps, 'inputs')), utxoKey); - _.each(lockedInputs, (input) => { + const lockedInputs = _.map( + _.flatten(_.map(txps, 'inputs')), + utxoKey + ); + _.each(lockedInputs, input => { if (utxoIndex[input]) { utxoIndex[input].locked = true; } @@ -1516,7 +1513,7 @@ export class WalletService { return next(); }); }, - (next) => { + next => { const now = Math.floor(Date.now() / 1000); // Fetch latest broadcasted txs and remove any spent inputs from the // list of UTXOs returned by the block explorer. This counteracts any out-of-sync @@ -1530,8 +1527,11 @@ export class WalletService { }, (err, txs) => { if (err) return next(err); - const spentInputs = _.map(_.flatten(_.map(txs, 'inputs')), utxoKey); - _.each(spentInputs, (input) => { + const spentInputs = _.map( + _.flatten(_.map(txs, 'inputs')), + utxoKey + ); + _.each(spentInputs, input => { if (utxoIndex[input]) { utxoIndex[input].spent = true; } @@ -1544,10 +1544,10 @@ export class WalletService { } ); }, - (next) => { + next => { // Needed for the clients to sign UTXOs const addressToPath = _.keyBy(allAddresses, 'address'); - _.each(allUtxos, (utxo) => { + _.each(allUtxos, utxo => { if (!addressToPath[utxo.address]) { if (!opts.addresses) log.warn('Ignored UTXO!: ' + utxo.address); return; @@ -1605,17 +1605,17 @@ export class WalletService { return cb(null, []); } - this._getBlockchainHeight(wallet.coin, wallet.network, ( - err, - height, - hash - ) => { - if (err) return cb(err); - bc.getAddressUtxos(address, height, (err, utxos) => { + this._getBlockchainHeight( + wallet.coin, + wallet.network, + (err, height, hash) => { if (err) return cb(err); - return cb(null, utxos); - }); - }); + bc.getAddressUtxos(address, height, (err, utxos) => { + if (err) return cb(err); + return cb(null, utxos); + }); + } + ); }); } else { this._getUtxosForCurrentWallet({}, cb); @@ -1679,36 +1679,44 @@ export class WalletService { this.syncWallet(wallet, err => { if (err) return cb(err); - this._getUtxosForCurrentWallet( { coin: opts.coin, addresses: opts.addresses }, - (err, utxos) => { + async (err, utxos) => { if (err) return cb(err); const balance = { ...this._totalizeUtxos(utxos), byAddress: [] }; // Compute balance by address const byAddress = {}; - _.each(_.keyBy(_.sortBy(utxos, 'address'), 'address'), ( - value, - key - ) => { - byAddress[key] = { - address: key, - path: value.path, - amount: 0 - }; - }); + _.each( + _.keyBy(_.sortBy(utxos, 'address'), 'address'), + (value, key) => { + byAddress[key] = { + address: key, + path: value.path, + amount: 0 + }; + } + ); - _.each(utxos, (utxo) => { + _.each(utxos, utxo => { byAddress[utxo.address].amount += utxo.satoshis; }); balance.byAddress = _.values(byAddress); + const balanceResponse = await bc.getBalance(wallet); + Object.assign(balance, { + totalAmount: balance.totalAmount || balanceResponse.balance, + availableAmount: + balance.availableAmount || balanceResponse.balance, + totalConfirmedAmount: + balance.totalConfirmedAmount || balanceResponse.confirmed, + lockedAmount: balance.lockedAmount || balanceResponse.unconfirmed + }); return cb(null, balance); } ); @@ -1752,7 +1760,7 @@ export class WalletService { return cb( new ClientError( 'Invalid fee level. Valid values are ' + - _.map(feeLevels, 'name').join(', ') + _.map(feeLevels, 'name').join(', ') ) ); } @@ -1784,7 +1792,7 @@ export class WalletService { if (!!opts.excludeUnconfirmedUtxos) { inputs = _.filter(inputs, 'confirmations'); } - inputs = _.sortBy(inputs, (input) => { + inputs = _.sortBy(inputs, input => { return -input.satoshis; }); @@ -1808,7 +1816,7 @@ export class WalletService { const sizePerInput = txp.getEstimatedSizeForSingleInput(); const feePerInput = (sizePerInput * txp.feePerKb) / 1000; - const partitionedByAmount = _.partition(inputs, (input) => { + const partitionedByAmount = _.partition(inputs, input => { return input.satoshis > feePerInput; }); @@ -1858,7 +1866,7 @@ export class WalletService { const failed = []; const levels = _.fromPairs( - _.map(points, (p) => { + _.map(points, p => { const feePerKb = _.isObject(result) && result[p] && _.isNumber(result[p]) ? +result[p] @@ -1873,10 +1881,10 @@ export class WalletService { const logger = network == 'livenet' ? this.logw : this.logi; logger( 'Could not compute fee estimation in ' + - network + - ': ' + - failed.join(', ') + - ' blocks.' + network + + ': ' + + failed.join(', ') + + ' blocks.' ); } @@ -1916,7 +1924,7 @@ export class WalletService { const definedPoints = _.uniq(_.map(feeLevels, 'nbBlocks')); return _.uniq( _.flatten( - _.map(definedPoints, (p) => { + _.map(definedPoints, p => { return _.range(p, p + Defaults.FEE_LEVELS_FALLBACK + 1); }) ) @@ -1944,66 +1952,67 @@ export class WalletService { return result; }; - this._sampleFeeLevels(opts.coin, opts.network, samplePoints(), ( - err, - feeSamples, - failed - ) => { - if (err) { - if (oldvalues) { - log.warn( - '## There was an error estimating fees... using old cached values' - ); - return cb(null, oldvalues, true); + this._sampleFeeLevels( + opts.coin, + opts.network, + samplePoints(), + (err, feeSamples, failed) => { + if (err) { + if (oldvalues) { + log.warn( + '## There was an error estimating fees... using old cached values' + ); + return cb(null, oldvalues, true); + } } - } - const values = _.map(feeLevels, (level) => { - const result: { - feePerKb?: number; - nbBlocks?: number; - level: string; - } = { - level: level.name - }; - if (err) { - result.feePerKb = level.defaultValue; - result.nbBlocks = null; - } else { - const feeLevel = getFeeLevel( - feeSamples, - level, - level.nbBlocks, - Defaults.FEE_LEVELS_FALLBACK + const values = _.map(feeLevels, level => { + const result: { + feePerKb?: number; + nbBlocks?: number; + level: string; + } = { + level: level.name + }; + if (err) { + result.feePerKb = level.defaultValue; + result.nbBlocks = null; + } else { + const feeLevel = getFeeLevel( + feeSamples, + level, + level.nbBlocks, + Defaults.FEE_LEVELS_FALLBACK + ); + result.feePerKb = +( + feeLevel.feePerKb * (level.multiplier || 1) + ).toFixed(0); + result.nbBlocks = feeLevel.nbBlocks; + } + return result; + }); + + // Ensure monotonically decreasing values + for (let i = 1; i < values.length; i++) { + values[i].feePerKb = Math.min( + values[i].feePerKb, + values[i - 1].feePerKb ); - result.feePerKb = +( - feeLevel.feePerKb * (level.multiplier || 1) - ).toFixed(0); - result.nbBlocks = feeLevel.nbBlocks; } - return result; - }); - // Ensure monotonically decreasing values - for (let i = 1; i < values.length; i++) { - values[i].feePerKb = Math.min( - values[i].feePerKb, - values[i - 1].feePerKb - ); - } + if (failed > 0) { + log.warn('Not caching default values. Failed:' + failed); + return cb(null, values); + } - if (failed > 0) { - log.warn('Not caching default values. Failed:' + failed); - return cb(null, values); + this.storage.storeGlobalCache(cacheKey, values, err => { + if (err) { + log.warn('Could not store fee level cache'); + } + return cb(null, values); + }); } - - this.storage.storeGlobalCache(cacheKey, values, err => { - if (err) { - log.warn('Could not store fee level cache'); - } - return cb(null, values); - }); - }); + ); } ); } @@ -2060,7 +2069,7 @@ export class WalletService { const sizePerInput = txp.getEstimatedSizeForSingleInput(); const feePerInput = (sizePerInput * txp.feePerKb) / 1000; - const sanitizeUtxos = (utxos) => { + const sanitizeUtxos = utxos => { const excludeIndex = _.reduce( utxosToExclude, (res, val) => { @@ -2070,7 +2079,7 @@ export class WalletService { {} ); - return _.filter(utxos, (utxo) => { + return _.filter(utxos, utxo => { if (utxo.locked) return false; if (utxo.satoshis <= feePerInput) return false; if (txp.excludeUnconfirmedUtxos && !utxo.confirmations) return false; @@ -2087,20 +2096,20 @@ export class WalletService { if (totalValueInUtxos < txpAmount) { this.logi( 'Total value in all utxos (' + - Utils.formatAmountInBtc(totalValueInUtxos) + - ') is insufficient to cover for txp amount (' + - Utils.formatAmountInBtc(txpAmount) + - ')' + Utils.formatAmountInBtc(totalValueInUtxos) + + ') is insufficient to cover for txp amount (' + + Utils.formatAmountInBtc(txpAmount) + + ')' ); return cb(Errors.INSUFFICIENT_FUNDS); } if (netValueInUtxos < txpAmount) { this.logi( 'Value after fees in all utxos (' + - Utils.formatAmountInBtc(netValueInUtxos) + - ') is insufficient to cover for txp amount (' + - Utils.formatAmountInBtc(txpAmount) + - ')' + Utils.formatAmountInBtc(netValueInUtxos) + + ') is insufficient to cover for txp amount (' + + Utils.formatAmountInBtc(txpAmount) + + ')' ); return cb(Errors.INSUFFICIENT_FUNDS_FOR_FEE); } @@ -2112,12 +2121,12 @@ export class WalletService { 'Big input threshold ' + Utils.formatAmountInBtc(bigInputThreshold) ); - const partitions = _.partition(utxos, (utxo) => { + const partitions = _.partition(utxos, utxo => { return utxo.satoshis > bigInputThreshold; }); const bigInputs = _.sortBy(partitions[0], 'satoshis'); - const smallInputs = _.sortBy(partitions[1], (utxo) => { + const smallInputs = _.sortBy(partitions[1], utxo => { return -utxo.satoshis; }); @@ -2264,10 +2273,10 @@ export class WalletService { () => { return i < groups.length && _.isEmpty(inputs); }, - (next) => { + next => { const group = groups[i++]; - const candidateUtxos = _.filter(utxos, (utxo) => { + const candidateUtxos = _.filter(utxos, utxo => { return utxo.confirmations >= group; }); @@ -2300,7 +2309,7 @@ export class WalletService { return next(); }); }, - (err) => { + err => { if (err) return cb(err); if (selectionError || _.isEmpty(inputs)) return cb( @@ -2318,9 +2327,9 @@ export class WalletService { txp.fee; this.logi( 'Successfully built transaction. Total fees: ' + - Utils.formatAmountInBtc(txp.fee) + - ', total change: ' + - Utils.formatAmountInBtc(change) + Utils.formatAmountInBtc(txp.fee) + + ', total change: ' + + Utils.formatAmountInBtc(change) ); } else { this.logw('Error building transaction', err); @@ -2429,7 +2438,7 @@ export class WalletService { _validateAndSanitizeTxOpts(wallet, opts, cb) { async.series( [ - (next) => { + next => { const feeArgs = boolToNum(!!opts.feeLevel) + boolToNum(_.isNumber(opts.feePerKb)) + @@ -2455,7 +2464,7 @@ export class WalletService { return next( new ClientError( 'Invalid fee level. Valid values are ' + - _.map(feeLevels, 'name').join(', ') + _.map(feeLevels, 'name').join(', ') ) ); } @@ -2475,7 +2484,7 @@ export class WalletService { next(); }, - (next) => { + next => { if (wallet.singleAddress && opts.changeAddress) return next( new ClientError( @@ -2484,7 +2493,7 @@ export class WalletService { ); next(); }, - (next) => { + next => { if (!opts.sendMax) return next(); if (!_.isArray(opts.outputs) || opts.outputs.length > 1) { return next( @@ -2518,7 +2527,7 @@ export class WalletService { } ); }, - (next) => { + next => { if (opts.validateOutputs === false) return next(); const validationError = this._validateOutputs(opts, wallet, next); if (validationError) { @@ -2526,7 +2535,7 @@ export class WalletService { } next(); }, - (next) => { + next => { // check outputs are on 'copay' format for BCH if (wallet.coin != 'bch') return next(); if (!opts.noCashAddr) return next(); @@ -2647,7 +2656,7 @@ export class WalletService { this._runLocked( cb, - (cb) => { + cb => { let changeAddress, feePerKb; this.getWallet({}, (err, wallet) => { if (err) return cb(err); @@ -2661,17 +2670,17 @@ export class WalletService { async.series( [ - (next) => { + next => { this._validateAndSanitizeTxOpts(wallet, opts, next); }, - (next) => { + next => { this._canCreateTx((err, canCreate) => { if (err) return next(err); if (!canCreate) return next(Errors.TX_CANNOT_CREATE); next(); }); }, - (next) => { + next => { if (opts.sendMax) return next(); getChangeAddress(wallet, (err, address, isNew) => { if (err) return next(err); @@ -2680,7 +2689,7 @@ export class WalletService { return next(); }); }, - (next) => { + next => { if (_.isNumber(opts.fee) && !_.isEmpty(opts.inputs)) return next(); this._getFeePerKb(wallet, opts, (err, fee) => { @@ -2688,7 +2697,7 @@ export class WalletService { next(); }); }, - (next) => { + next => { const txOpts = { id: opts.txProposalId, walletId: this.walletId, @@ -2718,15 +2727,15 @@ export class WalletService { txp = Model.TxProposal.create(txOpts); next(); }, - (next) => { + next => { this._selectTxInputs(txp, opts.utxosToExclude, next); }, - (next) => { + next => { if (!changeAddress || wallet.singleAddress || opts.dryRun) return next(); this._store(wallet, txp.changeAddress, next, true); }, - (next) => { + next => { if (opts.dryRun) return next(); if (txp.coin == 'bch') { @@ -2741,7 +2750,7 @@ export class WalletService { this.storage.storeTx(wallet.id, txp, next); } ], - (err) => { + err => { if (err) return cb(err); if (txp.coin == 'bch') { @@ -2769,20 +2778,17 @@ export class WalletService { * @param {Boolean} [opts.noCashAddr] - do not use cashaddress for bch */ publishTx(opts, cb) { - const utxoKey = (utxo) => { + const utxoKey = utxo => { return utxo.txid + '|' + utxo.vout; }; if (!checkRequired(opts, ['txProposalId', 'proposalSignature'], cb)) return; - this._runLocked(cb, (cb) => { + this._runLocked(cb, cb => { this.getWallet({}, (err, wallet) => { if (err) return cb(err); - this.storage.fetchTx(this.walletId, opts.txProposalId, ( - err, - txp - ) => { + this.storage.fetchTx(this.walletId, opts.txProposalId, (err, txp) => { if (err) return cb(err); if (!txp) return cb(Errors.TX_NOT_FOUND); if (!txp.isTemporary()) return cb(null, txp); @@ -2824,7 +2830,7 @@ export class WalletService { const txpInputs = _.map(txp.inputs, utxoKey); const utxosIndex = _.keyBy(utxos, utxoKey); - const unavailable = _.some(txpInputs, (i) => { + const unavailable = _.some(txpInputs, i => { const utxo = utxosIndex[i]; return !utxo || utxo.locked; }); @@ -2832,7 +2838,7 @@ export class WalletService { if (unavailable) return cb(Errors.UNAVAILABLE_UTXOS); txp.status = 'pending'; - this.storage.storeTx(this.walletId, txp, (err) => { + this.storage.storeTx(this.walletId, txp, err => { if (err) return cb(err); this._notifyTxProposalAction('NewTxProposal', txp, () => { @@ -2887,7 +2893,7 @@ export class WalletService { editTxNote(opts, cb) { if (!checkRequired(opts, 'txid', cb)) return; - this._runLocked(cb, (cb) => { + this._runLocked(cb, cb => { this.storage.fetchTxNote(this.walletId, opts.txid, (err, note) => { if (err) return cb(err); @@ -2901,7 +2907,7 @@ export class WalletService { } else { note.edit(opts.body, this.copayerId); } - this.storage.storeTxNote(note, (err) => { + this.storage.storeTxNote(note, err => { if (err) return cb(err); this.storage.fetchTxNote(this.walletId, opts.txid, cb); }); @@ -2937,7 +2943,7 @@ export class WalletService { * @return {undefined} */ removeWallet(opts, cb) { - this._runLocked(cb, (cb) => { + this._runLocked(cb, cb => { this.storage.removeWallet(this.walletId, cb); }); } @@ -2972,7 +2978,7 @@ export class WalletService { removePendingTx(opts, cb) { if (!checkRequired(opts, ['txProposalId'], cb)) return; - this._runLocked(cb, (cb) => { + this._runLocked(cb, cb => { this.getTx( { txProposalId: opts.txProposalId @@ -3075,12 +3081,12 @@ export class WalletService { return cb(ex); } - this.storage.storeTx(this.walletId, txp, (err) => { + this.storage.storeTx(this.walletId, txp, err => { if (err) return cb(err); async.series( [ - (next) => { + next => { this._notifyTxProposalAction( 'TxProposalAcceptedBy', txp, @@ -3090,7 +3096,7 @@ export class WalletService { next ); }, - (next) => { + next => { if (txp.isAccepted()) { this._notifyTxProposalAction( 'TxProposalFinallyAccepted', @@ -3117,7 +3123,7 @@ export class WalletService { opts = opts || {}; txp.setBroadcasted(); - this.storage.storeTx(this.walletId, txp, (err) => { + this.storage.storeTx(this.walletId, txp, err => { if (err) return cb(err); const extraArgs = { @@ -3165,38 +3171,40 @@ export class WalletService { } catch (ex) { return cb(ex); } - this._broadcastRawTx(wallet.coin, wallet.network, raw, ( - err, - txid - ) => { - if (err) { - const broadcastErr = err; - // Check if tx already in blockchain - this._checkTxInBlockchain(txp, (err, isInBlockchain) => { - if (err) return cb(err); - if (!isInBlockchain) return cb(broadcastErr); + this._broadcastRawTx( + wallet.coin, + wallet.network, + raw, + (err, txid) => { + if (err) { + const broadcastErr = err; + // Check if tx already in blockchain + this._checkTxInBlockchain(txp, (err, isInBlockchain) => { + if (err) return cb(err); + if (!isInBlockchain) return cb(broadcastErr); + this._processBroadcast( + txp, + { + byThirdParty: true + }, + cb + ); + }); + } else { this._processBroadcast( txp, { - byThirdParty: true + byThirdParty: false }, - cb + err => { + if (err) return cb(err); + return cb(null, txp); + } ); - }); - } else { - this._processBroadcast( - txp, - { - byThirdParty: false - }, - (err) => { - if (err) return cb(err); - return cb(null, txp); - } - ); + } } - }); + ); } ); }); @@ -3227,12 +3235,12 @@ export class WalletService { txp.reject(this.copayerId, opts.reason); - this.storage.storeTx(this.walletId, txp, (err) => { + this.storage.storeTx(this.walletId, txp, err => { if (err) return cb(err); async.series( [ - (next) => { + next => { this._notifyTxProposalAction( 'TxProposalRejectedBy', txp, @@ -3242,7 +3250,7 @@ export class WalletService { next ); }, - (next) => { + next => { if (txp.status == 'rejected') { const rejectedBy = _.map( _.filter(txp.actions, { @@ -3283,7 +3291,7 @@ export class WalletService { this.storage.fetchPendingTxs(this.walletId, (err, txps) => { if (err) return cb(err); - _.each(txps, (txp) => { + _.each(txps, txp => { txp.deleteLockTime = this.getRemainingDeleteLockTime(txp); }); @@ -3303,8 +3311,8 @@ export class WalletService { ); }); }, - (err) => { - txps = _.reject(txps, (txp) => { + err => { + txps = _.reject(txps, txp => { return txp.status == 'broadcasted'; }); @@ -3477,7 +3485,7 @@ export class WalletService { } }); - const fixMoves = (cb2) => { + const fixMoves = cb2 => { if (_.isEmpty(moves)) return cb2(); // each detected duplicate output move @@ -3506,7 +3514,7 @@ export class WalletService { fixMoves(err => { if (err) return cb(err); - const ret = _.map([].concat(txs), (tx) => { + const ret = _.map([].concat(txs), tx => { const t = new Date(tx.blockTime).getTime() / 1000; const c = bcHeight && tx.height >= 0 ? bcHeight - tx.height + 1 : 0; const ret = { @@ -3737,8 +3745,8 @@ export class WalletService { return _.sumBy(_.filter(items, filter), 'amount'); }; - const classify = (items) => { - return _.map(items, (item) => { + const classify = items => { + return _.map(items, item => { const address = indexedAddresses[item.address]; return { address: item.address, @@ -3789,7 +3797,7 @@ export class WalletService { amount = 0; } - const formatOutput = (o) => { + const formatOutput = o => { return { amount: o.amount, address: o.address @@ -3815,10 +3823,10 @@ export class WalletService { } if (opts.includeExtendedInfo) { - newTx.inputs = _.map(inputs, (input) => { + newTx.inputs = _.map(inputs, input => { return _.pick(input, 'address', 'amount', 'isMine'); }); - newTx.outputs = _.map(outputs, (output) => { + newTx.outputs = _.map(outputs, output => { return _.pick(output, 'address', 'amount', 'isMine'); }); } else { @@ -3847,7 +3855,7 @@ export class WalletService { tx.proposalType = proposal.type; tx.creatorName = proposal.creatorName; tx.message = proposal.message; - tx.actions = _.map(proposal.actions, (action) => { + tx.actions = _.map(proposal.actions, action => { return _.pick(action, [ 'createdOn', 'type', @@ -3856,7 +3864,7 @@ export class WalletService { 'comment' ]); }); - _.each(tx.outputs, (output) => { + _.each(tx.outputs, output => { const query = { toAddress: output.address, amount: output.amount @@ -3898,7 +3906,7 @@ export class WalletService { this.logi('Cannot compute super economy fee level from blockchain'); } else { const minFeePerKb = level.feePerKb; - _.each(unconfirmed, (tx) => { + _.each(unconfirmed, tx => { tx.lowFees = tx.feePerKb < minFeePerKb; }); } @@ -3928,17 +3936,17 @@ export class WalletService { this.syncWallet(wallet, next, true); }, next => { - this._getBlockchainHeight(wallet.coin, wallet.network, ( - err, - height, - hash - ) => { - if (err) return next(err); - bcHeight = height; - bcHash = hash; - streamKey = (this.userAgent || '') + '-' + limit + '-' + bcHash; - return next(); - }); + this._getBlockchainHeight( + wallet.coin, + wallet.network, + (err, height, hash) => { + if (err) return next(err); + bcHeight = height; + bcHash = hash; + streamKey = (this.userAgent || '') + '-' + limit + '-' + bcHash; + return next(); + } + ); }, next => { this.storage.getTxHistoryCacheStatusV8( @@ -3984,36 +3992,40 @@ export class WalletService { bc.getTransactions(wallet, startBlock, (err, txs) => { if (err) return cb(err); - this._normalizeTxHistory(wallet.id, txs, bcHeight, ( - err, - inTxs: any[] - ) => { - if (err) return cb(err); + this._normalizeTxHistory( + wallet.id, + txs, + bcHeight, + (err, inTxs: any[]) => { + if (err) return cb(err); - if (cacheStatus.tipTxId) { - // first item is the most recent tx. - // removes already cache txs - lastTxs = _.takeWhile(inTxs, tx => { - // cacheTxs are very confirmed, so can't be reorged - return tx.txid != cacheStatus.tipTxId; - }); + if (cacheStatus.tipTxId) { + // first item is the most recent tx. + // removes already cache txs + lastTxs = _.takeWhile(inTxs, tx => { + // cacheTxs are very confirmed, so can't be reorged + return tx.txid != cacheStatus.tipTxId; + }); - // only store stream IF cache is been used. - // - log.info( - `Storing stream cache for ${wallet.id}: ${lastTxs.length} txs` - ); - return this.storage.storeTxHistoryStreamV8( - wallet.id, - streamKey, - lastTxs, - next - ); - } + // only store stream IF cache is been used. + // + log.info( + `Storing stream cache for ${wallet.id}: ${ + lastTxs.length + } txs` + ); + return this.storage.storeTxHistoryStreamV8( + wallet.id, + streamKey, + lastTxs, + next + ); + } - lastTxs = inTxs; - return next(); - }); + lastTxs = inTxs; + return next(); + } + ); }); }, next => { @@ -4081,7 +4093,7 @@ export class WalletService { // We have now TXs from 'tipHeight` to end in `lastTxs`. // Store hard confirmed TXs // confirmations here is bcHeight - tip + 1, so OK. - txsToCache = _.filter(lastTxs, (i) => { + txsToCache = _.filter(lastTxs, i => { if (i.confirmations < Defaults.CONFIRMATIONS_TO_START_CACHING) { return false; } @@ -4097,7 +4109,8 @@ export class WalletService { return next(); } - const updateHeight = bcHeight - Defaults.CONFIRMATIONS_TO_START_CACHING; + const updateHeight = + bcHeight - Defaults.CONFIRMATIONS_TO_START_CACHING; this.storage.storeTxHistoryCacheV8( this.walletId, cacheStatus.tipIndex, @@ -4155,7 +4168,7 @@ export class WalletService { async.waterfall( [ - (next) => { + next => { this.getTxHistoryV8(bc, wallet, opts, from, opts.limit, next); }, (txs: { items: Array<{ time: number }> }, next) => { @@ -4169,7 +4182,7 @@ export class WalletService { async.parallel( [ - (done) => { + done => { this.storage.fetchTxs( this.walletId, { @@ -4179,7 +4192,7 @@ export class WalletService { done ); }, - (done) => { + done => { this.storage.fetchTxNotes( this.walletId, { @@ -4211,7 +4224,7 @@ export class WalletService { WalletService._addNotesInfo(tx, indexedNotes); return tx; }); - this.tagLowFeeTxs(wallet, finalTxs, (err) => { + this.tagLowFeeTxs(wallet, finalTxs, err => { if (err) this.logw('Failed to tag unconfirmed with low fee'); if (res.txs.fromCache) { @@ -4262,9 +4275,9 @@ export class WalletService { } this.storage.clearWalletCache(this.walletId, () => { - this._runLocked(cb, (cb) => { + this._runLocked(cb, cb => { wallet.scanStatus = 'running'; - this.storage.storeWallet(wallet, (err) => { + this.storage.storeWallet(wallet, err => { if (err) return cb(err); const bc = this._getBlockchainExplorer(wallet.coin, wallet.network); @@ -4307,7 +4320,7 @@ export class WalletService { // this.logi('Scanning addr branch: %s index: %d gap %d step %d', derivator.id, derivator.index(), inactiveCounter, step); return inactiveCounter < gap; }, - (next) => { + next => { const address = derivator.derive(); opts.bc.getAddressActivity(address.address, (err, activity) => { @@ -4319,7 +4332,7 @@ export class WalletService { return next(); }); }, - (err) => { + err => { derivator.rewind(gap); return cb(err, _.dropRight(allAddresses, gap)); } @@ -4327,7 +4340,7 @@ export class WalletService { }; const derivators = []; - _.each([false, true], (isChange) => { + _.each([false, true], isChange => { derivators.push({ id: wallet.addressManager.getBaseAddressPath(isChange), derive: _.bind(wallet.createAddress, wallet, isChange, step), @@ -4345,7 +4358,7 @@ export class WalletService { getSkippedAddress: _.bind(wallet.getSkippedAddress, wallet) }); if (opts.includeCopayerBranches) { - _.each(wallet.copayers, (copayer) => { + _.each(wallet.copayers, copayer => { if (copayer.addressManager) { derivators.push({ id: copayer.addressManager.getBaseAddressPath(isChange), @@ -4393,11 +4406,11 @@ export class WalletService { this._store(wallet, addresses, next); }); }, - (error) => { + error => { this.storage.fetchWallet(wallet.id, (err, wallet) => { if (err) return cb(err); wallet.scanStatus = error ? 'error' : 'success'; - this.storage.storeWallet(wallet, (err) => { + this.storage.storeWallet(wallet, err => { return cb(error || err); }); }); @@ -4412,7 +4425,7 @@ export class WalletService { * @param {Boolean} opts.includeCopayerBranches (defaults to false) */ startScan(opts, cb) { - const scanFinished = (err) => { + const scanFinished = err => { const data = { result: err ? 'error' : 'success', error: undefined From e3cbd79f392b8d761a40396d88d68db28c6180d7 Mon Sep 17 00:00:00 2001 From: Justin Kook Date: Thu, 4 Apr 2019 20:28:53 -0400 Subject: [PATCH 32/40] try catch on getBalance in server.ts BWS, added toChecksumAddress to crypto-wallet-core to validate ethereum address, removed global.console.logs --- .../bitcore-wallet-client/lib/common/utils.js | 1 - .../bitcore-wallet-service/src/lib/server.ts | 26 ++++++++++++------- packages/crypto-wallet-core/package.json | 1 + .../src/derivation/eth/index.ts | 20 +++++++++++++- 4 files changed, 36 insertions(+), 12 deletions(-) diff --git a/packages/bitcore-wallet-client/lib/common/utils.js b/packages/bitcore-wallet-client/lib/common/utils.js index e0fda528cd9..ae5279a7464 100644 --- a/packages/bitcore-wallet-client/lib/common/utils.js +++ b/packages/bitcore-wallet-client/lib/common/utils.js @@ -166,7 +166,6 @@ Utils.deriveAddress = function( bitcoreAddress = bitcore.Address.fromPublicKey(publicKeys[0], network); break; } - global.console.log(path); const pathIndex = /m\/([0-9]*)\/([0-9]*)/; const [_input, changeIndex, addressIndex] = path.match(pathIndex); const isChange = changeIndex > 0; diff --git a/packages/bitcore-wallet-service/src/lib/server.ts b/packages/bitcore-wallet-service/src/lib/server.ts index f712ad860d3..82e3c48e53b 100644 --- a/packages/bitcore-wallet-service/src/lib/server.ts +++ b/packages/bitcore-wallet-service/src/lib/server.ts @@ -1708,16 +1708,22 @@ export class WalletService { balance.byAddress = _.values(byAddress); - const balanceResponse = await bc.getBalance(wallet); - Object.assign(balance, { - totalAmount: balance.totalAmount || balanceResponse.balance, - availableAmount: - balance.availableAmount || balanceResponse.balance, - totalConfirmedAmount: - balance.totalConfirmedAmount || balanceResponse.confirmed, - lockedAmount: balance.lockedAmount || balanceResponse.unconfirmed - }); - return cb(null, balance); + try { + const balanceResponse = await bc.getBalance(wallet); + + Object.assign(balance, { + totalAmount: balance.totalAmount || balanceResponse.balance, + availableAmount: + balance.availableAmount || balanceResponse.balance, + totalConfirmedAmount: + balance.totalConfirmedAmount || balanceResponse.confirmed, + lockedAmount: + balance.lockedAmount || balanceResponse.unconfirmed + }); + return cb(null, balance); + } catch { + return cb(null, balance); + } } ); }); diff --git a/packages/crypto-wallet-core/package.json b/packages/crypto-wallet-core/package.json index f628d20fd9c..bb9ac365c97 100644 --- a/packages/crypto-wallet-core/package.json +++ b/packages/crypto-wallet-core/package.json @@ -24,6 +24,7 @@ "elliptic": "^6.4.1", "ethereumjs-tx": "^1.3.7", "ethereumjs-util": "^6.1.0", + "keccak": "^2.0.0", "secp256k1": "^3.5.0", "web3": "^1.0.0-beta.46" }, diff --git a/packages/crypto-wallet-core/src/derivation/eth/index.ts b/packages/crypto-wallet-core/src/derivation/eth/index.ts index 25963882516..9fb32b1d4ee 100644 --- a/packages/crypto-wallet-core/src/derivation/eth/index.ts +++ b/packages/crypto-wallet-core/src/derivation/eth/index.ts @@ -1,8 +1,8 @@ import { ec } from 'elliptic'; import { pubToAddress } from 'ethereumjs-util'; import { IDeriver } from '..'; - const BitcoreLib = require('bitcore-lib'); +const createKeccakHash = require('keccak'); const secp = new ec('secp256k1'); export class EthDeriver implements IDeriver { @@ -16,6 +16,24 @@ export class EthDeriver implements IDeriver { return msg; } + toChecksumAddress(address) { + address = address.toLowerCase().replace('0x', ''); + var hash = createKeccakHash('keccak256') + .update(address) + .digest('hex'); + var ret = '0x'; + + for (var i = 0; i < address.length; i++) { + if (parseInt(hash[i], 16) >= 8) { + ret += address[i].toUpperCase(); + } else { + ret += address[i]; + } + } + + return ret; + } + deriveAddress(network, pubKey, addressIndex, isChange) { const xpub = new BitcoreLib.HDPublicKey(pubKey, network); const changeNum = isChange ? 1 : 0; From 539876625bc0976a3c5dac0585f0364b7541162e Mon Sep 17 00:00:00 2001 From: Justin Kook Date: Tue, 9 Apr 2019 15:19:19 -0400 Subject: [PATCH 33/40] added validateAddress validation to crypto-wallet-core, uncomment key derivation verify and checkAddress verify in api.js --- packages/bitcore-wallet-client/lib/api.js | 8 ++-- .../bitcore-wallet-client/lib/common/utils.js | 35 ++++++++++-------- .../bitcore-wallet-client/lib/verifier.js | 2 - .../src/lib/model/address.ts | 37 +++++++++---------- .../bitcore-wallet-service/src/lib/server.ts | 8 ++-- .../src/derivation/eth/index.ts | 19 ---------- packages/crypto-wallet-core/src/index.ts | 4 +- .../src/transactions/eth/index.ts | 1 - .../src/validation/bch/index.ts | 25 +++++++++++++ .../src/validation/btc/index.ts | 25 +++++++++++++ .../src/validation/eth/index.ts | 8 ++++ .../src/validation/index.ts | 32 ++++++++++++++++ 12 files changed, 139 insertions(+), 65 deletions(-) create mode 100644 packages/crypto-wallet-core/src/validation/bch/index.ts create mode 100644 packages/crypto-wallet-core/src/validation/btc/index.ts create mode 100644 packages/crypto-wallet-core/src/validation/eth/index.ts create mode 100644 packages/crypto-wallet-core/src/validation/index.ts diff --git a/packages/bitcore-wallet-client/lib/api.js b/packages/bitcore-wallet-client/lib/api.js index 098a47572a3..a7dd2288cc0 100644 --- a/packages/bitcore-wallet-client/lib/api.js +++ b/packages/bitcore-wallet-client/lib/api.js @@ -1798,16 +1798,16 @@ API.prototype.createAddress = function(opts, cb) { log.warn('DEPRECATED WARN: createAddress should receive 2 parameters.'); } - // if (!self._checkKeyDerivation()) return cb(new Error('Cannot create new address for this wallet')); + if (!self._checkKeyDerivation()) return cb(new Error('Cannot create new address for this wallet')); opts = opts || {}; self.request.post('/v3/addresses/', opts, function(err, address) { if (err) return cb(err); - // if (!Verifier.checkAddress(self.credentials, address)) { - // return cb(new Errors.SERVER_COMPROMISED); - // } + if (!Verifier.checkAddress(self.credentials, address)) { + return cb(new Errors.SERVER_COMPROMISED); + } return cb(null, address); }); diff --git a/packages/bitcore-wallet-client/lib/common/utils.js b/packages/bitcore-wallet-client/lib/common/utils.js index ae5279a7464..53fb1e789ad 100644 --- a/packages/bitcore-wallet-client/lib/common/utils.js +++ b/packages/bitcore-wallet-client/lib/common/utils.js @@ -17,7 +17,6 @@ var encoding = Bitcore.encoding; var Constants = require('./constants'); var Defaults = require('./defaults'); - function Utils() {} Utils.SJCL = {}; @@ -149,7 +148,7 @@ Utils.deriveAddress = function( $.checkArgument(_.includes(_.values(Constants.SCRIPT_TYPES), scriptType)); coin = coin || 'btc'; - var bitcore = Bitcore_.btc; + var bitcore = coin !== 'eth' ? Bitcore_[coin] : Bitcore_.btc; var bitcoreAddress; var publicKeys = _.map(publicKeyRing, function(item) { @@ -163,23 +162,29 @@ Utils.deriveAddress = function( break; case Constants.SCRIPT_TYPES.P2PKH: $.checkState(_.isArray(publicKeys) && publicKeys.length == 1); - bitcoreAddress = bitcore.Address.fromPublicKey(publicKeys[0], network); + const pathIndex = /m\/([0-9]*)\/([0-9]*)/; + const [_input, changeIndex, addressIndex] = path.match(pathIndex); + const isChange = changeIndex > 0; + const [{ xPubKey }] = publicKeyRing; + bitcoreAddress = CWC.deriver.deriveAddress( + coin, + network, + xPubKey, + addressIndex, + isChange + ); break; } - const pathIndex = /m\/([0-9]*)\/([0-9]*)/; - const [_input, changeIndex, addressIndex] = path.match(pathIndex); - const isChange = changeIndex > 0; - const [{ xPubKey }] = publicKeyRing; - bitcoreAddress = CWC.deriver.deriveAddress( - coin, - network, - xPubKey, - addressIndex, - isChange - ); + + let addrStr = bitcoreAddress; + if (coin === 'btc') { + addrStr = bitcoreAddress.toString(true); + } else if (noNativeCashAddr && coin == 'bch') { + addrStr = bitcoreAddress.toLegacyAddress(); + } return { - address: bitcoreAddress, + address: addrStr, path: path, publicKeys: _.invokeMap(publicKeys, 'toString') }; diff --git a/packages/bitcore-wallet-client/lib/verifier.js b/packages/bitcore-wallet-client/lib/verifier.js index 0dd616891b8..d1932403c7d 100644 --- a/packages/bitcore-wallet-client/lib/verifier.js +++ b/packages/bitcore-wallet-client/lib/verifier.js @@ -3,7 +3,6 @@ var _ = require('lodash'); var Bitcore = require('bitcore-lib'); var BCHAddress = require('bitcore-lib-cash').Address; - var Common = require('./common'); var Utils = Common.Utils; @@ -25,7 +24,6 @@ function Verifier(opts) {}; */ Verifier.checkAddress = function(credentials, address) { $.checkState(credentials.isComplete()); - var local = Utils.deriveAddress(address.type || credentials.addressType, credentials.publicKeyRing, address.path, credentials.m, credentials.network, credentials.coin); return (local.address == address.address && _.difference(local.publicKeys, address.publicKeys).length === 0); diff --git a/packages/bitcore-wallet-service/src/lib/model/address.ts b/packages/bitcore-wallet-service/src/lib/model/address.ts index da5257faf9c..43c9d0a2d93 100644 --- a/packages/bitcore-wallet-service/src/lib/model/address.ts +++ b/packages/bitcore-wallet-service/src/lib/model/address.ts @@ -107,31 +107,30 @@ export class Address { break; case Constants.SCRIPT_TYPES.P2PKH: $.checkState(_.isArray(publicKeys) && publicKeys.length == 1); - bitcoreAddress = Address.Bitcore.btc.Address.fromPublicKey( - publicKeys[0], - network + const pathIndex = /m\/([0-9]*)\/([0-9]*)/; + const [_input, changeIndex, addressIndex] = path.match(pathIndex); + const isChange = changeIndex > 0; + const [{ xPubKey }] = publicKeyRing; + bitcoreAddress = CWC.deriver.deriveAddress( + coin, + network, + xPubKey, + addressIndex, + isChange ); break; } - const pathIndex = /m\/([0-9]*)\/([0-9]*)/; - const [_input, changeIndex, addressIndex] = path.match(pathIndex); - const isChange = changeIndex > 0; - const [{ xPubKey }] = publicKeyRing; - bitcoreAddress = CWC.deriver.deriveAddress( - coin, - network, - xPubKey, - addressIndex, - isChange - ); - // let addrStr = bitcoreAddress.toString(true); - // if (noNativeCashAddr && coin == 'bch') { - // addrStr = bitcoreAddress.toLegacyAddress(); - // } + + let addrStr = bitcoreAddress; + if (coin === 'btc') { + addrStr = bitcoreAddress.toString(true); + } else if (noNativeCashAddr && coin == 'bch') { + addrStr = bitcoreAddress.toLegacyAddress(); + } return { // bws still use legacy addresses for BCH - address: bitcoreAddress, + address: addrStr, path, publicKeys: _.invokeMap(publicKeys, 'toString') }; diff --git a/packages/bitcore-wallet-service/src/lib/server.ts b/packages/bitcore-wallet-service/src/lib/server.ts index 82e3c48e53b..923cc50be12 100644 --- a/packages/bitcore-wallet-service/src/lib/server.ts +++ b/packages/bitcore-wallet-service/src/lib/server.ts @@ -1712,13 +1712,13 @@ export class WalletService { const balanceResponse = await bc.getBalance(wallet); Object.assign(balance, { - totalAmount: balance.totalAmount || balanceResponse.balance, + totalAmount: balanceResponse.balance || balance.totalAmount, availableAmount: - balance.availableAmount || balanceResponse.balance, + balanceResponse.balance || balance.availableAmount, totalConfirmedAmount: - balance.totalConfirmedAmount || balanceResponse.confirmed, + balanceResponse.confirmed || balance.totalConfirmedAmount, lockedAmount: - balance.lockedAmount || balanceResponse.unconfirmed + balanceResponse.unconfirmed || balance.lockedAmount }); return cb(null, balance); } catch { diff --git a/packages/crypto-wallet-core/src/derivation/eth/index.ts b/packages/crypto-wallet-core/src/derivation/eth/index.ts index 9fb32b1d4ee..38a7bbd3a4e 100644 --- a/packages/crypto-wallet-core/src/derivation/eth/index.ts +++ b/packages/crypto-wallet-core/src/derivation/eth/index.ts @@ -2,7 +2,6 @@ import { ec } from 'elliptic'; import { pubToAddress } from 'ethereumjs-util'; import { IDeriver } from '..'; const BitcoreLib = require('bitcore-lib'); -const createKeccakHash = require('keccak'); const secp = new ec('secp256k1'); export class EthDeriver implements IDeriver { @@ -16,24 +15,6 @@ export class EthDeriver implements IDeriver { return msg; } - toChecksumAddress(address) { - address = address.toLowerCase().replace('0x', ''); - var hash = createKeccakHash('keccak256') - .update(address) - .digest('hex'); - var ret = '0x'; - - for (var i = 0; i < address.length; i++) { - if (parseInt(hash[i], 16) >= 8) { - ret += address[i].toUpperCase(); - } else { - ret += address[i]; - } - } - - return ret; - } - deriveAddress(network, pubKey, addressIndex, isChange) { const xpub = new BitcoreLib.HDPublicKey(pubKey, network); const changeNum = isChange ? 1 : 0; diff --git a/packages/crypto-wallet-core/src/index.ts b/packages/crypto-wallet-core/src/index.ts index e8ecb5ecece..1c4e4d179cd 100644 --- a/packages/crypto-wallet-core/src/index.ts +++ b/packages/crypto-wallet-core/src/index.ts @@ -1,7 +1,9 @@ import deriver from './derivation'; import transaction from './transactions'; +import validation from './validation'; export default { deriver, - transaction + transaction, + validation }; diff --git a/packages/crypto-wallet-core/src/transactions/eth/index.ts b/packages/crypto-wallet-core/src/transactions/eth/index.ts index aea9f3d1817..9416ccfaa6f 100644 --- a/packages/crypto-wallet-core/src/transactions/eth/index.ts +++ b/packages/crypto-wallet-core/src/transactions/eth/index.ts @@ -1,4 +1,3 @@ -import Web3 from 'web3'; import EthereumTx from 'ethereumjs-tx'; import { Key } from '../../derivation'; const utils = require('web3-utils'); diff --git a/packages/crypto-wallet-core/src/validation/bch/index.ts b/packages/crypto-wallet-core/src/validation/bch/index.ts new file mode 100644 index 00000000000..7c44f539f02 --- /dev/null +++ b/packages/crypto-wallet-core/src/validation/bch/index.ts @@ -0,0 +1,25 @@ +import { IValidation } from '..'; +const BitcoreCash = require('bitcore-lib-cash'); + +export class BchValidation implements IValidation { + validateAddress(network: string, address: string): boolean { + // Check if the input is a valid uri or address + const URICash = BitcoreCash.URI; + const AddressCash = BitcoreCash.Address; + + // Bip21 uri + let uri, uriAddress; + if (/^bitcoincash:|^bchtest:i/.test(address)) { + if (URICash.isValid(address)) { + uri = new URICash(address); + uriAddress = uri.address.toString(); + if (AddressCash.isValid(uriAddress, network)) return true; + } + } + + // Regular Address: try Bitcoin Cash + if (AddressCash.isValid(address, network)) return true; + + return false; + } +} diff --git a/packages/crypto-wallet-core/src/validation/btc/index.ts b/packages/crypto-wallet-core/src/validation/btc/index.ts new file mode 100644 index 00000000000..20952f24274 --- /dev/null +++ b/packages/crypto-wallet-core/src/validation/btc/index.ts @@ -0,0 +1,25 @@ +import { IValidation } from '..'; +const Bitcore = require('bitcore-lib'); + +export class BtcValidation implements IValidation { + validateAddress(network: string, address: string): boolean { + // Check if the input is a valid uri or address + const URI = Bitcore.URI; + const Address = Bitcore.Address; + + // Bip21 uri + let uri, uriAddress; + if (/^bitcoin:/.test(address)) { + if (URI.isValid(address)) { + uri = new URI(address); + uriAddress = uri.address.toString(); + if (Address.isValid(uriAddress, network)) return true; + } + } + + // Regular Address: try Bitcoin + if (Address.isValid(address, network)) return true; + + return false; + } +} diff --git a/packages/crypto-wallet-core/src/validation/eth/index.ts b/packages/crypto-wallet-core/src/validation/eth/index.ts new file mode 100644 index 00000000000..4fed26de0a4 --- /dev/null +++ b/packages/crypto-wallet-core/src/validation/eth/index.ts @@ -0,0 +1,8 @@ +import { IValidation } from '..'; +const utils = require('web3-utils'); + +export class EthValidation implements IValidation { + validateAddress(_network: string, address: string): boolean { + return utils.isAddress(address); + } +} diff --git a/packages/crypto-wallet-core/src/validation/index.ts b/packages/crypto-wallet-core/src/validation/index.ts new file mode 100644 index 00000000000..3f65d073241 --- /dev/null +++ b/packages/crypto-wallet-core/src/validation/index.ts @@ -0,0 +1,32 @@ +import { BtcValidation } from './btc'; +import { BchValidation } from './bch'; +import { EthValidation } from './eth'; + +export interface IValidation { + validateAddress( + network: string, + address: string, + ): boolean; +} + +const validation: { [chain: string]: IValidation } = { + BTC: new BtcValidation(), + BCH: new BchValidation(), + ETH: new EthValidation() +}; + +export class ValidationProxy { + get(chain) { + const normalizedChain = chain.toUpperCase(); + return validation[normalizedChain]; + } + + validateAddress(chain, network, address) { + return this.get(chain).validateAddress( + network, + address + ); + } +} + +export default new ValidationProxy(); From 83e7776682e70e3d5a8d665c84424360785ed0da Mon Sep 17 00:00:00 2001 From: Justin Kook Date: Tue, 9 Apr 2019 16:14:13 -0400 Subject: [PATCH 34/40] added if coin is eth bc.getBalance then divide by 1e18 --- packages/bitcore-wallet-service/src/lib/server.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/bitcore-wallet-service/src/lib/server.ts b/packages/bitcore-wallet-service/src/lib/server.ts index 923cc50be12..0bcc36e8aff 100644 --- a/packages/bitcore-wallet-service/src/lib/server.ts +++ b/packages/bitcore-wallet-service/src/lib/server.ts @@ -1708,20 +1708,20 @@ export class WalletService { balance.byAddress = _.values(byAddress); - try { + if (opts.coin === 'eth') { const balanceResponse = await bc.getBalance(wallet); Object.assign(balance, { - totalAmount: balanceResponse.balance || balance.totalAmount, + totalAmount: balanceResponse.balance / 1e18 || balance.totalAmount, availableAmount: - balanceResponse.balance || balance.availableAmount, + balanceResponse.balance / 1e18 || balance.availableAmount, totalConfirmedAmount: - balanceResponse.confirmed || balance.totalConfirmedAmount, + balanceResponse.confirmed / 1e18 || balance.totalConfirmedAmount, lockedAmount: - balanceResponse.unconfirmed || balance.lockedAmount + balanceResponse.unconfirmed / 1e18 || balance.lockedAmount }); return cb(null, balance); - } catch { + } else { return cb(null, balance); } } From eeb4ca132e1c81c308e47267d9cb2f6257a6d8f9 Mon Sep 17 00:00:00 2001 From: Justin Kook Date: Tue, 9 Apr 2019 16:18:39 -0400 Subject: [PATCH 35/40] added all balanceResponse fields to balance object --- .../bitcore-wallet-service/src/lib/server.ts | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/packages/bitcore-wallet-service/src/lib/server.ts b/packages/bitcore-wallet-service/src/lib/server.ts index 0bcc36e8aff..655236737ea 100644 --- a/packages/bitcore-wallet-service/src/lib/server.ts +++ b/packages/bitcore-wallet-service/src/lib/server.ts @@ -1712,13 +1712,20 @@ export class WalletService { const balanceResponse = await bc.getBalance(wallet); Object.assign(balance, { - totalAmount: balanceResponse.balance / 1e18 || balance.totalAmount, - availableAmount: - balanceResponse.balance / 1e18 || balance.availableAmount, - totalConfirmedAmount: - balanceResponse.confirmed / 1e18 || balance.totalConfirmedAmount, + totalAmount: + balanceResponse.balance / 1e18 || balance.totalAmount, lockedAmount: - balanceResponse.unconfirmed / 1e18 || balance.lockedAmount + balanceResponse.unconfirmed / 1e18 || balance.lockedAmount, + totalConfirmedAmount: + balanceResponse.confirmed / 1e18 || + balance.totalConfirmedAmount, + lockedConfirmedAmount: + balanceResponse.unconfirmed / 1e18 || + balance.totalConfirmedAmount, + availableAmount: + balanceResponse.confirmed / 1e18 || balance.availableAmount, + availableConfirmedAmount: + balanceResponse.confirmed / 1e18 || balance.availableAmount }); return cb(null, balance); } else { From 8595f6addf8920745c8071ebb19924e5eee19d99 Mon Sep 17 00:00:00 2001 From: Justin Kook Date: Tue, 9 Apr 2019 16:22:43 -0400 Subject: [PATCH 36/40] server.ts fixed eth scale problem getBalance. if wallet.coin === eth then bc.getBalance --- packages/bitcore-wallet-service/src/lib/server.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/bitcore-wallet-service/src/lib/server.ts b/packages/bitcore-wallet-service/src/lib/server.ts index 655236737ea..a7a690d6124 100644 --- a/packages/bitcore-wallet-service/src/lib/server.ts +++ b/packages/bitcore-wallet-service/src/lib/server.ts @@ -1708,24 +1708,24 @@ export class WalletService { balance.byAddress = _.values(byAddress); - if (opts.coin === 'eth') { + if (wallet.coin === 'eth') { const balanceResponse = await bc.getBalance(wallet); Object.assign(balance, { totalAmount: - balanceResponse.balance / 1e18 || balance.totalAmount, + balanceResponse.balance / 1e10 || balance.totalAmount, lockedAmount: - balanceResponse.unconfirmed / 1e18 || balance.lockedAmount, + balanceResponse.unconfirmed / 1e10 || balance.lockedAmount, totalConfirmedAmount: - balanceResponse.confirmed / 1e18 || + balanceResponse.confirmed / 1e10 || balance.totalConfirmedAmount, lockedConfirmedAmount: - balanceResponse.unconfirmed / 1e18 || + balanceResponse.unconfirmed / 1e10 || balance.totalConfirmedAmount, availableAmount: - balanceResponse.confirmed / 1e18 || balance.availableAmount, + balanceResponse.confirmed / 1e10 || balance.availableAmount, availableConfirmedAmount: - balanceResponse.confirmed / 1e18 || balance.availableAmount + balanceResponse.confirmed / 1e10 || balance.availableAmount }); return cb(null, balance); } else { From 16901f64daaa2fd8652946a67beabea959f89f87 Mon Sep 17 00:00:00 2001 From: Justin Kook Date: Tue, 9 Apr 2019 16:35:57 -0400 Subject: [PATCH 37/40] added 'eth' coin to getFeeLevels --- packages/bitcore-wallet-client/lib/api.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/bitcore-wallet-client/lib/api.js b/packages/bitcore-wallet-client/lib/api.js index a7dd2288cc0..ffceeef1cf1 100644 --- a/packages/bitcore-wallet-client/lib/api.js +++ b/packages/bitcore-wallet-client/lib/api.js @@ -1169,7 +1169,7 @@ API.prototype.decryptPrivateKey = function(password) { API.prototype.getFeeLevels = function(coin, network, cb) { var self = this; - $.checkArgument(coin || _.includes(['btc', 'bch'], coin)); + $.checkArgument(coin || _.includes(['btc', 'bch', 'eth'], coin)); $.checkArgument(network || _.includes(['livenet', 'testnet'], network)); self.request.get( From dc3b43ae9623b7f4145fb65c1517654b4a93e8d0 Mon Sep 17 00:00:00 2001 From: Justin Kook Date: Tue, 9 Apr 2019 16:54:30 -0400 Subject: [PATCH 38/40] added getFee from cryptoRPC to bitcore-node ethRPC --- .../src/providers/chain-state/eth/eth.ts | 32 ++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/packages/bitcore-node/src/providers/chain-state/eth/eth.ts b/packages/bitcore-node/src/providers/chain-state/eth/eth.ts index 9d9498cdf0a..4235b96f269 100644 --- a/packages/bitcore-node/src/providers/chain-state/eth/eth.ts +++ b/packages/bitcore-node/src/providers/chain-state/eth/eth.ts @@ -6,7 +6,7 @@ import { ObjectID } from 'mongodb'; import Web3 from 'web3'; import { Storage } from '../../../services/storage'; import { EthTransactionStorage } from '../../../models/transaction/eth/ethTransaction'; -import { ITransaction, EthTransactionJSON } from '../../../types/Transaction'; +import { ITransaction, EthTransactionJSON, IEthTransaction } from '../../../types/Transaction'; export class ETHStateProvider extends InternalStateProvider implements CSP.IChainStateService { config: any; @@ -35,6 +35,36 @@ export class ETHStateProvider extends InternalStateProvider implements CSP.IChai return new Web3(new ProviderType(connUrl)); } + async getFee({ network = 'mainnet', target = 4 } = {}) { + const bestBlock = await this.getWeb3(network).eth.getBlockNumber(); + const gasPrices: number[] = []; + for (let i = 0; i < target; i++) { + const block = await this.getWeb3(network).eth.getBlock(bestBlock - i); + const txs: Array = await Promise.all( + block.transactions.map(txid => { + return this.getWeb3(network).eth.getTransaction(txid); + }) + ); + var blockGasPrices = txs.map(tx => { + return tx.gasPrice + }); + // sort gas prices in descending order + blockGasPrices = blockGasPrices.sort((a, b) => { + return b - a; + }); + var txCount = txs.length; + var lowGasPriceIndex = txCount > 1 ? txCount - 2 : 0; + if (txCount > 0) { + gasPrices.push(blockGasPrices[lowGasPriceIndex]); + } + } + var gethGasPrice = await this.getWeb3(network).eth.getGasPrice(); + var estimate = gasPrices.reduce((a, b) => { + return Math.max(a, b); + }, gethGasPrice); + return estimate; + } + async getBalanceForAddress(params: CSP.GetBalanceForAddressParams) { const { network, address } = params; const balance = Number(await this.getWeb3(network).eth.getBalance(address)); From edfba7aa8debaafac43e2099633676fcb4c3a03a Mon Sep 17 00:00:00 2001 From: Justin Kook Date: Wed, 10 Apr 2019 09:54:30 -0400 Subject: [PATCH 39/40] added eth as a valid coin in confirm.ts --- .../src/providers/address-provider/deriver.ts | 2 +- .../src/providers/chain-state/eth/eth.ts | 10 +++++++--- .../providers/chain-state/internal/internal.ts | 3 ++- .../bitcore-wallet-client-8.1.1.tgz | Bin 0 -> 825234 bytes packages/bitcore-wallet-service/src/config.ts | 3 +++ .../src/lib/common/defaults.ts | 7 +++++++ .../src/lib/expressapp.ts | 2 +- .../bitcore-wallet-service/src/lib/server.ts | 16 ++++++++-------- .../crypto-wallet-core-8.1.1.tgz | Bin 0 -> 100303 bytes 9 files changed, 29 insertions(+), 14 deletions(-) create mode 100644 packages/bitcore-wallet-client/bitcore-wallet-client-8.1.1.tgz create mode 100644 packages/crypto-wallet-core/crypto-wallet-core-8.1.1.tgz diff --git a/packages/bitcore-client/src/providers/address-provider/deriver.ts b/packages/bitcore-client/src/providers/address-provider/deriver.ts index 309cb19d226..e14cbf15e90 100644 --- a/packages/bitcore-client/src/providers/address-provider/deriver.ts +++ b/packages/bitcore-client/src/providers/address-provider/deriver.ts @@ -64,7 +64,7 @@ export class AddressProviderProxy { } pathFor(chain, network) { - if (network != 'mainnet') { + if (network === 'testnet') { return paths.default.testnet; } else { return paths[chain][network]; diff --git a/packages/bitcore-node/src/providers/chain-state/eth/eth.ts b/packages/bitcore-node/src/providers/chain-state/eth/eth.ts index 4235b96f269..7e99ed292f8 100644 --- a/packages/bitcore-node/src/providers/chain-state/eth/eth.ts +++ b/packages/bitcore-node/src/providers/chain-state/eth/eth.ts @@ -6,7 +6,7 @@ import { ObjectID } from 'mongodb'; import Web3 from 'web3'; import { Storage } from '../../../services/storage'; import { EthTransactionStorage } from '../../../models/transaction/eth/ethTransaction'; -import { ITransaction, EthTransactionJSON, IEthTransaction } from '../../../types/Transaction'; +import { ITransaction, EthTransactionJSON } from '../../../types/Transaction'; export class ETHStateProvider extends InternalStateProvider implements CSP.IChainStateService { config: any; @@ -35,12 +35,16 @@ export class ETHStateProvider extends InternalStateProvider implements CSP.IChai return new Web3(new ProviderType(connUrl)); } - async getFee({ network = 'mainnet', target = 4 } = {}) { + async getFee(params) { + let { network, target = 4 } = params; + if (network === 'livenet') { + network = 'mainnet' + } const bestBlock = await this.getWeb3(network).eth.getBlockNumber(); const gasPrices: number[] = []; for (let i = 0; i < target; i++) { const block = await this.getWeb3(network).eth.getBlock(bestBlock - i); - const txs: Array = await Promise.all( + const txs: any[] = await Promise.all( block.transactions.map(txid => { return this.getWeb3(network).eth.getTransaction(txid); }) diff --git a/packages/bitcore-node/src/providers/chain-state/internal/internal.ts b/packages/bitcore-node/src/providers/chain-state/internal/internal.ts index aa7d7f2d588..e5f824e8dd4 100644 --- a/packages/bitcore-node/src/providers/chain-state/internal/internal.ts +++ b/packages/bitcore-node/src/providers/chain-state/internal/internal.ts @@ -153,6 +153,7 @@ export class InternalStateProvider implements CSP.IChainStateService { async getBlock(params: CSP.GetBlockParams) { let blocks = await this.getBlocks(params); + console.log(blocks[0]); return blocks[0]; } @@ -531,7 +532,7 @@ export class InternalStateProvider implements CSP.IChainStateService { } async getLocalTip({ chain, network }) { - return await BlockStorage.getLocalTip({ chain, network }); + return BlockStorage.getLocalTip({ chain, network }); } async getLocatorHashes(params) { diff --git a/packages/bitcore-wallet-client/bitcore-wallet-client-8.1.1.tgz b/packages/bitcore-wallet-client/bitcore-wallet-client-8.1.1.tgz new file mode 100644 index 0000000000000000000000000000000000000000..29bcfddc763a258264438aac050bf88ca97419b7 GIT binary patch literal 825234 zcmV(#K;*w4iwFP!000006YRJJa9vB1Eh@5@S+ZCbGcz+YGcz+=%#y{77Be$5lf_IH zGqaxT+xK?&Owas3@h0An_hTxgvv*~#TD3B3XPw%|R?omf&%}tv_Kz#Ixr2>0z<+b2 zrKM$NWW@Vd_K(KE!0_RtV_;-rpkrjFXJiJTrK4k}rNslF{qGj?ubPvCqn`bTl>c3x zKZ3#g>-v95^MJ&|Be2%9G9qBdBhWWFLnAzHE<9Fh zT58%q)LH47{SLy++R(`Lqk8_Z+8f#0IG8!w*t>oBJpSNxvbX#NG%<7J{rER^(x*1C zv10$w@S&dOUuK^A1NWyQM>kuezYYJT%|2vAD)=f743)cbKJ(;h!QHsp(j#>HhNA+8Y_zSR0!CDg}q%0D5Zr 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 z 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�JDf)3@p82Z;gzN5XzXU$%4;?{zCNwT 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

>$H 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 literal 0 HcmV?d00001 diff --git a/packages/bitcore-wallet-service/src/config.ts b/packages/bitcore-wallet-service/src/config.ts index 94bcea501e9..02564417081 100644 --- a/packages/bitcore-wallet-service/src/config.ts +++ b/packages/bitcore-wallet-service/src/config.ts @@ -52,6 +52,9 @@ module.exports = { eth: { livenet: { url: 'http://localhost:3000' + }, + mainnet: { + url: 'http://localhost:3000' } } }, diff --git a/packages/bitcore-wallet-service/src/lib/common/defaults.ts b/packages/bitcore-wallet-service/src/lib/common/defaults.ts index c695bb5e4c2..c491669c26f 100644 --- a/packages/bitcore-wallet-service/src/lib/common/defaults.ts +++ b/packages/bitcore-wallet-service/src/lib/common/defaults.ts @@ -58,6 +58,13 @@ module.exports = { nbBlocks: 2, defaultValue: 2000 } + ], + eth: [ + { + name: 'normal', + nbBlocks: 2, + defaultValue: 20000 + } ] }, diff --git a/packages/bitcore-wallet-service/src/lib/expressapp.ts b/packages/bitcore-wallet-service/src/lib/expressapp.ts index f60178a2ca0..36d8da8a3de 100644 --- a/packages/bitcore-wallet-service/src/lib/expressapp.ts +++ b/packages/bitcore-wallet-service/src/lib/expressapp.ts @@ -929,4 +929,4 @@ export class ExpressApp { WalletService.initialize(opts, cb); } -} \ No newline at end of file +} diff --git a/packages/bitcore-wallet-service/src/lib/server.ts b/packages/bitcore-wallet-service/src/lib/server.ts index a7a690d6124..0872c040006 100644 --- a/packages/bitcore-wallet-service/src/lib/server.ts +++ b/packages/bitcore-wallet-service/src/lib/server.ts @@ -3444,8 +3444,8 @@ export class WalletService { if (tx.category == 'receive') { const output = { - address: tx.address, - amount: Math.abs(tx.satoshis) + address: tx.to || tx.address, + amount: Math.abs(tx.value || tx.satoshis ) }; if (seenReceive[tx.txid]) { seenReceive[tx.txid].outputs.push(output); @@ -3458,8 +3458,8 @@ export class WalletService { } if (tx.category == 'send') { const output = { - address: tx.address, - amount: Math.abs(tx.satoshis) + address: tx.to || tx.address, + amount: Math.abs(tx.value || tx.satoshis) }; if (seenSend[tx.txid]) { seenSend[tx.txid].outputs.push(output); @@ -3474,8 +3474,8 @@ export class WalletService { // move without send? if (tx.category == 'move' && !indexedSend[tx.txid]) { const output = { - address: tx.address, - amount: Math.abs(tx.satoshis) + address: tx.to || tx.address, + amount: Math.abs(tx.value || tx.satoshis) }; if (moves[tx.txid]) { @@ -3557,11 +3557,11 @@ export class WalletService { case 'receive': ret.action = 'received'; ret.outputs = tx.outputs; - ret.amount = Math.abs(tx.satoshis); + ret.amount = Math.abs(tx.value || tx.satoshis); break; case 'move': ret.action = 'moved'; - ret.amount = Math.abs(tx.satoshis); + ret.amount = Math.abs(tx.value || tx.satoshis); ret.addressTo = tx.outputs && tx.outputs.length ? tx.outputs[0].address : null; ret.outputs = tx.outputs; diff --git a/packages/crypto-wallet-core/crypto-wallet-core-8.1.1.tgz b/packages/crypto-wallet-core/crypto-wallet-core-8.1.1.tgz new file mode 100644 index 0000000000000000000000000000000000000000..86a757105c785c2c52fef352071cd90f5c6e2a6a GIT binary patch literal 100303 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 Date: Fri, 12 Apr 2019 18:01:27 -0300 Subject: [PATCH 40/40] ETH: block detail page, tx detail page. Use Message component instead of error component --- .../src/components/coin-list/coin-list.html | 10 +-- .../components/coin-list/coin-list.module.ts | 8 ++- .../src/components/coin-list/coin-list.scss | 11 +-- .../src/components/error/error.html | 5 -- .../src/components/error/error.module.ts | 10 --- .../src/components/error/error.scss | 10 --- .../src/components/error/error.ts | 10 --- .../latest-blocks/latest-blocks.html | 2 +- .../latest-blocks/latest-blocks.module.ts | 4 +- .../components/latest-blocks/latest-blocks.ts | 11 +-- .../src/components/message/message.html | 5 ++ .../src/components/message/message.module.ts | 10 +++ .../src/components/message/message.scss | 17 +++++ .../src/components/message/message.ts | 12 ++++ .../transaction-list/transaction-list.html | 6 +- .../transaction-list.module.ts | 8 ++- .../src/pages/address/address.html | 2 +- .../src/pages/address/address.module.ts | 6 +- .../src/pages/block-detail/block-detail.html | 4 +- .../pages/block-detail/block-detail.module.ts | 6 +- .../src/pages/blocks/blocks.html | 14 ++-- .../src/pages/home/home.module.ts | 4 +- .../src/pages/pages.module.ts | 4 +- .../src/pages/transaction/transaction.html | 70 +++++++++++++++++-- .../pages/transaction/transaction.module.ts | 6 +- .../src/providers/blocks/blocks.ts | 3 + .../src/providers/currency/currency.ts | 5 +- .../providers/transactions/transactions.ts | 32 ++++++++- packages/insight-previous/tsconfig.json | 3 +- 29 files changed, 203 insertions(+), 95 deletions(-) delete mode 100644 packages/insight-previous/src/components/error/error.html delete mode 100644 packages/insight-previous/src/components/error/error.module.ts delete mode 100644 packages/insight-previous/src/components/error/error.scss delete mode 100644 packages/insight-previous/src/components/error/error.ts create mode 100644 packages/insight-previous/src/components/message/message.html create mode 100644 packages/insight-previous/src/components/message/message.module.ts create mode 100644 packages/insight-previous/src/components/message/message.scss create mode 100644 packages/insight-previous/src/components/message/message.ts diff --git a/packages/insight-previous/src/components/coin-list/coin-list.html b/packages/insight-previous/src/components/coin-list/coin-list.html index 51557603676..e366df65010 100644 --- a/packages/insight-previous/src/components/coin-list/coin-list.html +++ b/packages/insight-previous/src/components/coin-list/coin-list.html @@ -12,10 +12,10 @@ - - - There are no transactions involving this address. - - + + + + \ No newline at end of file diff --git a/packages/insight-previous/src/components/coin-list/coin-list.module.ts b/packages/insight-previous/src/components/coin-list/coin-list.module.ts index 5ed7e3420e2..6ec40235983 100644 --- a/packages/insight-previous/src/components/coin-list/coin-list.module.ts +++ b/packages/insight-previous/src/components/coin-list/coin-list.module.ts @@ -2,11 +2,17 @@ import { NgModule } from '@angular/core'; import { IonicModule } from 'ionic-angular'; import { CoinComponentModule } from '../coin/coin.module'; import { LoaderComponentModule } from '../loader/loader.module'; +import { MessageComponentModule } from '../message/message.module'; import { CoinListComponent } from './coin-list'; @NgModule({ declarations: [CoinListComponent], - imports: [IonicModule, CoinComponentModule, LoaderComponentModule], + imports: [ + IonicModule, + CoinComponentModule, + LoaderComponentModule, + MessageComponentModule + ], exports: [CoinListComponent] }) export class CoinListComponentModule {} diff --git a/packages/insight-previous/src/components/coin-list/coin-list.scss b/packages/insight-previous/src/components/coin-list/coin-list.scss index d62450d4c1a..43a51fe23f6 100644 --- a/packages/insight-previous/src/components/coin-list/coin-list.scss +++ b/packages/insight-previous/src/components/coin-list/coin-list.scss @@ -1,10 +1 @@ -coin-list { - .no-txs { - background-color: #fcf8e3; - border: 1px solid #faebcc; - color: #8a6d3b; - border-radius: 3px; - margin: 5px; - padding: 5px; - } -} +coin-list { } diff --git a/packages/insight-previous/src/components/error/error.html b/packages/insight-previous/src/components/error/error.html deleted file mode 100644 index 4a0a5d21f45..00000000000 --- a/packages/insight-previous/src/components/error/error.html +++ /dev/null @@ -1,5 +0,0 @@ - - - {{ message }} - - \ No newline at end of file diff --git a/packages/insight-previous/src/components/error/error.module.ts b/packages/insight-previous/src/components/error/error.module.ts deleted file mode 100644 index 4762f788173..00000000000 --- a/packages/insight-previous/src/components/error/error.module.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { NgModule } from '@angular/core'; -import { IonicModule } from 'ionic-angular'; -import { ErrorComponent } from './error'; - -@NgModule({ - declarations: [ErrorComponent], - imports: [IonicModule], - exports: [ErrorComponent] -}) -export class ErrorComponentModule {} diff --git a/packages/insight-previous/src/components/error/error.scss b/packages/insight-previous/src/components/error/error.scss deleted file mode 100644 index fa81161e938..00000000000 --- a/packages/insight-previous/src/components/error/error.scss +++ /dev/null @@ -1,10 +0,0 @@ -error { - .error-message { - background-color: #f2dede; - border: 1px solid #ebccd1; - color: #a94442; - border-radius: 3px; - margin: 5px; - padding: 5px; - } -} \ No newline at end of file diff --git a/packages/insight-previous/src/components/error/error.ts b/packages/insight-previous/src/components/error/error.ts deleted file mode 100644 index 3439f4eef22..00000000000 --- a/packages/insight-previous/src/components/error/error.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Component, Input } from '@angular/core'; - -@Component({ - selector: 'error', - templateUrl: 'error.html' -}) -export class ErrorComponent { - @Input() - public message: string; -} diff --git a/packages/insight-previous/src/components/latest-blocks/latest-blocks.html b/packages/insight-previous/src/components/latest-blocks/latest-blocks.html index 1217edaf651..17f8c1373b3 100644 --- a/packages/insight-previous/src/components/latest-blocks/latest-blocks.html +++ b/packages/insight-previous/src/components/latest-blocks/latest-blocks.html @@ -1,4 +1,4 @@ - +

diff --git a/packages/insight-previous/src/components/latest-blocks/latest-blocks.module.ts b/packages/insight-previous/src/components/latest-blocks/latest-blocks.module.ts index 4e7105114f2..e108de5e978 100644 --- a/packages/insight-previous/src/components/latest-blocks/latest-blocks.module.ts +++ b/packages/insight-previous/src/components/latest-blocks/latest-blocks.module.ts @@ -2,7 +2,7 @@ import { NgModule } from '@angular/core'; import { MomentModule } from 'angular2-moment'; import { IonicModule } from 'ionic-angular'; import { LoaderComponentModule } from '../../components/loader/loader.module'; -import { ErrorComponentModule } from '../error/error.module'; +import { MessageComponentModule } from '../message/message.module'; import { LatestBlocksComponent } from './latest-blocks'; @NgModule({ @@ -11,7 +11,7 @@ import { LatestBlocksComponent } from './latest-blocks'; IonicModule, MomentModule, LoaderComponentModule, - ErrorComponentModule + MessageComponentModule ], exports: [LatestBlocksComponent] }) diff --git a/packages/insight-previous/src/components/latest-blocks/latest-blocks.ts b/packages/insight-previous/src/components/latest-blocks/latest-blocks.ts index 4462ff4875c..1f00755f8aa 100644 --- a/packages/insight-previous/src/components/latest-blocks/latest-blocks.ts +++ b/packages/insight-previous/src/components/latest-blocks/latest-blocks.ts @@ -1,6 +1,6 @@ import { Component, Input, NgZone, OnDestroy, OnInit } from '@angular/core'; import { Subscription } from 'rxjs'; -import { ApiProvider } from '../../providers/api/api'; +import { ApiProvider, ChainNetwork } from '../../providers/api/api'; import { AppBlock, BlocksProvider } from '../../providers/blocks/blocks'; import { CurrencyProvider } from '../../providers/currency/currency'; import { DefaultProvider } from '../../providers/default/default'; @@ -24,18 +24,21 @@ export class LatestBlocksComponent implements OnInit, OnDestroy { public blocks: AppBlock[] = []; public subscriber: Subscription; public errorMessage: string; + public chainNetwork: ChainNetwork; private reloadInterval: any; constructor( + public api: ApiProvider, public currency: CurrencyProvider, public defaults: DefaultProvider, public redirProvider: RedirProvider, - private blocksProvider: BlocksProvider, private apiProvider: ApiProvider, - private ngZone: NgZone, - private logger: Logger + private blocksProvider: BlocksProvider, + private logger: Logger, + private ngZone: NgZone ) { + this.chainNetwork = this.api.networkSettings.value.selectedNetwork; this.numBlocks = parseInt(defaults.getDefault('%NUM_BLOCKS%'), 10); } diff --git a/packages/insight-previous/src/components/message/message.html b/packages/insight-previous/src/components/message/message.html new file mode 100644 index 00000000000..837692b7fe2 --- /dev/null +++ b/packages/insight-previous/src/components/message/message.html @@ -0,0 +1,5 @@ + + + {{ message }} + + \ No newline at end of file diff --git a/packages/insight-previous/src/components/message/message.module.ts b/packages/insight-previous/src/components/message/message.module.ts new file mode 100644 index 00000000000..1dff0161845 --- /dev/null +++ b/packages/insight-previous/src/components/message/message.module.ts @@ -0,0 +1,10 @@ +import { NgModule } from '@angular/core'; +import { IonicModule } from 'ionic-angular'; +import { MessageComponent } from './message'; + +@NgModule({ + declarations: [MessageComponent], + imports: [IonicModule], + exports: [MessageComponent] +}) +export class MessageComponentModule {} diff --git a/packages/insight-previous/src/components/message/message.scss b/packages/insight-previous/src/components/message/message.scss new file mode 100644 index 00000000000..40897471423 --- /dev/null +++ b/packages/insight-previous/src/components/message/message.scss @@ -0,0 +1,17 @@ +message { + .message { + border-radius: 3px; + margin: 5px; + padding: 5px; + &-error { + background-color: #f2dede; + border: 1px solid #ebccd1; + color: #a94442; + } + &-warning { + background-color: #fcf8e3; + border: 1px solid #faebcc; + color: #8a6d3b; + } + } +} \ No newline at end of file diff --git a/packages/insight-previous/src/components/message/message.ts b/packages/insight-previous/src/components/message/message.ts new file mode 100644 index 00000000000..67d298e060f --- /dev/null +++ b/packages/insight-previous/src/components/message/message.ts @@ -0,0 +1,12 @@ +import { Component, Input } from '@angular/core'; + +@Component({ + selector: 'message', + templateUrl: 'message.html' +}) +export class MessageComponent { + @Input() + public message: string; + @Input() + public type: string; +} diff --git a/packages/insight-previous/src/components/transaction-list/transaction-list.html b/packages/insight-previous/src/components/transaction-list/transaction-list.html index 5d5e9cb61c8..c3fc0a30fa2 100644 --- a/packages/insight-previous/src/components/transaction-list/transaction-list.html +++ b/packages/insight-previous/src/components/transaction-list/transaction-list.html @@ -1,7 +1,11 @@
- + + + + diff --git a/packages/insight-previous/src/components/transaction-list/transaction-list.module.ts b/packages/insight-previous/src/components/transaction-list/transaction-list.module.ts index 78d6b09f1ac..4607be3473a 100644 --- a/packages/insight-previous/src/components/transaction-list/transaction-list.module.ts +++ b/packages/insight-previous/src/components/transaction-list/transaction-list.module.ts @@ -1,12 +1,18 @@ import { NgModule } from '@angular/core'; import { IonicModule } from 'ionic-angular'; import { LoaderComponentModule } from '../loader/loader.module'; +import { MessageComponentModule } from '../message/message.module'; import { TransactionComponentModule } from '../transaction/transaction.module'; import { TransactionListComponent } from './transaction-list'; @NgModule({ declarations: [TransactionListComponent], - imports: [IonicModule, TransactionComponentModule, LoaderComponentModule], + imports: [ + IonicModule, + TransactionComponentModule, + LoaderComponentModule, + MessageComponentModule + ], exports: [TransactionListComponent] }) export class TransactionListComponentModule {} diff --git a/packages/insight-previous/src/pages/address/address.html b/packages/insight-previous/src/pages/address/address.html index 297b76b9295..51a4a9fc6a3 100644 --- a/packages/insight-previous/src/pages/address/address.html +++ b/packages/insight-previous/src/pages/address/address.html @@ -7,7 +7,7 @@ - +

Address {{ getConvertedNumber(address.balance) | number:'1.0-8' }} diff --git a/packages/insight-previous/src/pages/address/address.module.ts b/packages/insight-previous/src/pages/address/address.module.ts index 0fecf95e9c5..0812bd9db8e 100644 --- a/packages/insight-previous/src/pages/address/address.module.ts +++ b/packages/insight-previous/src/pages/address/address.module.ts @@ -2,10 +2,10 @@ import { NgModule } from '@angular/core'; import { QRCodeModule } from 'angular2-qrcode'; import { IonicPageModule } from 'ionic-angular'; import { CoinListComponentModule } from '../../components/coin-list/coin-list.module'; -import { ErrorComponentModule } from '../../components/error/error.module'; import { FooterComponentModule } from '../../components/footer/footer.module'; import { HeadNavComponentModule } from '../../components/head-nav/head-nav.module'; import { LoaderComponentModule } from '../../components/loader/loader.module'; +import { MessageComponentModule } from '../../components/message/message.module'; import { TransactionListComponentModule } from '../../components/transaction-list/transaction-list.module'; import { CopyToClipboardModule } from '../../directives/copy-to-clipboard/copy-to-clipboard.module'; import { AddressPage } from './address'; @@ -20,9 +20,9 @@ import { AddressPage } from './address'; HeadNavComponentModule, QRCodeModule, LoaderComponentModule, - ErrorComponentModule, + MessageComponentModule, CopyToClipboardModule ], exports: [AddressPage] }) -export class AddressPageModule {} +export class AddressPageModule { } diff --git a/packages/insight-previous/src/pages/block-detail/block-detail.html b/packages/insight-previous/src/pages/block-detail/block-detail.html index 3ba95689c16..60e561675fc 100644 --- a/packages/insight-previous/src/pages/block-detail/block-detail.html +++ b/packages/insight-previous/src/pages/block-detail/block-detail.html @@ -6,7 +6,7 @@ - +
@@ -73,7 +73,7 @@

Summary

Difficulty - {{ block.difficulty }} + {{ block.difficulty || '' }} diff --git a/packages/insight-previous/src/pages/block-detail/block-detail.module.ts b/packages/insight-previous/src/pages/block-detail/block-detail.module.ts index 1b5f3e4dbf3..8bfeb682409 100644 --- a/packages/insight-previous/src/pages/block-detail/block-detail.module.ts +++ b/packages/insight-previous/src/pages/block-detail/block-detail.module.ts @@ -1,9 +1,9 @@ import { NgModule } from '@angular/core'; import { IonicPageModule } from 'ionic-angular'; -import { ErrorComponentModule } from '../../components/error/error.module'; import { FooterComponentModule } from '../../components/footer/footer.module'; import { HeadNavComponentModule } from '../../components/head-nav/head-nav.module'; import { LoaderComponentModule } from '../../components/loader/loader.module'; +import { MessageComponentModule } from '../../components/message/message.module'; import { TransactionListComponentModule } from '../../components/transaction-list/transaction-list.module'; import { CopyToClipboardModule } from '../../directives/copy-to-clipboard/copy-to-clipboard.module'; import { BlockDetailPage } from './block-detail'; @@ -16,9 +16,9 @@ import { BlockDetailPage } from './block-detail'; FooterComponentModule, HeadNavComponentModule, LoaderComponentModule, - ErrorComponentModule, + MessageComponentModule, CopyToClipboardModule ], exports: [BlockDetailPage] }) -export class BlockDetailPageModule {} +export class BlockDetailPageModule { } diff --git a/packages/insight-previous/src/pages/blocks/blocks.html b/packages/insight-previous/src/pages/blocks/blocks.html index 1cec2bb7f36..16268bb128b 100644 --- a/packages/insight-previous/src/pages/blocks/blocks.html +++ b/packages/insight-previous/src/pages/blocks/blocks.html @@ -1,16 +1,16 @@ -
+
- + -
-

Blocks

- -
+
+

Blocks

+ +
-
+
\ No newline at end of file diff --git a/packages/insight-previous/src/pages/home/home.module.ts b/packages/insight-previous/src/pages/home/home.module.ts index 14cdaf60710..ac09943eaf0 100644 --- a/packages/insight-previous/src/pages/home/home.module.ts +++ b/packages/insight-previous/src/pages/home/home.module.ts @@ -1,11 +1,11 @@ import { NgModule } from '@angular/core'; import { IonicPageModule } from 'ionic-angular'; -import { ErrorComponentModule } from '../../components/error/error.module'; import { FooterComponentModule } from '../../components/footer/footer.module'; import { HeadNavComponentModule } from '../../components/head-nav/head-nav.module'; import { LatestBlocksComponentModule } from '../../components/latest-blocks/latest-blocks.module'; import { LatestTransactionsComponentModule } from '../../components/latest-transactions/latest-transactions.module'; import { LoaderComponentModule } from '../../components/loader/loader.module'; +import { MessageComponentModule } from '../../components/message/message.module'; import { HomePage } from './home'; @NgModule({ @@ -17,7 +17,7 @@ import { HomePage } from './home'; HeadNavComponentModule, LatestTransactionsComponentModule, LoaderComponentModule, - ErrorComponentModule + MessageComponentModule ], exports: [HomePage] }) diff --git a/packages/insight-previous/src/pages/pages.module.ts b/packages/insight-previous/src/pages/pages.module.ts index 59039c47e1a..40767011fef 100644 --- a/packages/insight-previous/src/pages/pages.module.ts +++ b/packages/insight-previous/src/pages/pages.module.ts @@ -1,11 +1,11 @@ import { NgModule } from '@angular/core'; import { IonicModule } from 'ionic-angular'; import { ComponentsModule } from '../components'; -import { ErrorComponentModule } from '../components/error/error.module'; import { FooterComponentModule } from '../components/footer/footer.module'; import { HeadNavComponentModule } from '../components/head-nav/head-nav.module'; import { LatestBlocksComponentModule } from '../components/latest-blocks/latest-blocks.module'; import { LatestTransactionsComponentModule } from '../components/latest-transactions/latest-transactions.module'; +import { MessageComponentModule } from '../components/message/message.module'; import { BlocksPageModule } from '../pages/blocks/blocks.module'; import { BroadcastTxPageModule } from './broadcast-tx/broadcast-tx.module'; import { HomePageModule } from './home/home.module'; @@ -24,7 +24,7 @@ import { MessagesPageModule } from './messages/messages.module'; HeadNavComponentModule, LatestTransactionsComponentModule, LatestBlocksComponentModule, - ErrorComponentModule + MessageComponentModule ], exports: [ // CustomComponent, diff --git a/packages/insight-previous/src/pages/transaction/transaction.html b/packages/insight-previous/src/pages/transaction/transaction.html index e9b1f106b99..0f773efc471 100644 --- a/packages/insight-previous/src/pages/transaction/transaction.html +++ b/packages/insight-previous/src/pages/transaction/transaction.html @@ -6,7 +6,8 @@ - + +

@@ -25,10 +26,10 @@

Summary

- + - + Size {{ tx.size }} (bytes) @@ -36,9 +37,12 @@

Summary

Fee Rate - + {{ (tx.fee / tx.size) | number:'1.0-2' }} sats/byte + + {{ tx.fee * 1e-18 | number:'1.0-14'}} Ether + Received Time @@ -64,11 +68,65 @@

Summary

Unconfirmed
+
+ + From + + {{ tx?.from }} + + + + To + + {{ tx?.to }} + + + + Value + + {{ tx?.value * 1e-18 | number:'1.0-2'}} Ether + + + + Gas Limit + + {{ tx?.gasLimit }} + + + + Gas Used by Transaction + + + ---- + + + + Gas Price + + {{ tx?.gasPrice * 1e-18 | number:'1.0-14' }} Ether ({{ tx?.gasPrice * 1e-9 }} Gwei) + + + + Nonce + + {{ tx?.nonce }} + + + + Input Data + + + --- + + +
-

Details

+
+

Details

- + +
diff --git a/packages/insight-previous/src/pages/transaction/transaction.module.ts b/packages/insight-previous/src/pages/transaction/transaction.module.ts index 84c066ab80c..9ae2ebc3ff2 100644 --- a/packages/insight-previous/src/pages/transaction/transaction.module.ts +++ b/packages/insight-previous/src/pages/transaction/transaction.module.ts @@ -1,9 +1,9 @@ import { NgModule } from '@angular/core'; import { IonicPageModule } from 'ionic-angular'; -import { ErrorComponentModule } from '../../components/error/error.module'; import { FooterComponentModule } from '../../components/footer/footer.module'; import { HeadNavComponentModule } from '../../components/head-nav/head-nav.module'; import { LoaderComponentModule } from '../../components/loader/loader.module'; +import { MessageComponentModule } from '../../components/message/message.module'; import { TransactionComponentModule } from '../../components/transaction/transaction.module'; import { CopyToClipboardModule } from '../../directives/copy-to-clipboard/copy-to-clipboard.module'; import { TransactionPage } from './transaction'; @@ -16,9 +16,9 @@ import { TransactionPage } from './transaction'; FooterComponentModule, HeadNavComponentModule, LoaderComponentModule, - ErrorComponentModule, + MessageComponentModule, CopyToClipboardModule ], exports: [TransactionPage] }) -export class TransactionPageModule {} +export class TransactionPageModule { } diff --git a/packages/insight-previous/src/providers/blocks/blocks.ts b/packages/insight-previous/src/providers/blocks/blocks.ts index 4009617fd9c..798b2779d60 100644 --- a/packages/insight-previous/src/providers/blocks/blocks.ts +++ b/packages/insight-previous/src/providers/blocks/blocks.ts @@ -20,6 +20,7 @@ export interface ApiBlock { version: number; time: Date; timeNormalized: Date; + chain: string; } export interface AppBlock { @@ -45,6 +46,7 @@ export interface AppBlock { url: string; }; reward: number; + chain: string; } @Injectable() @@ -58,6 +60,7 @@ export class BlocksProvider { public toAppBlock(block: ApiBlock): AppBlock { const difficulty: number = 0x1d00ffff / block.bits; return { + chain: block.chain, height: block.height, confirmations: block.confirmations, nonce: block.nonce, diff --git a/packages/insight-previous/src/providers/currency/currency.ts b/packages/insight-previous/src/providers/currency/currency.ts index 65116369fa3..e4d1038853e 100644 --- a/packages/insight-previous/src/providers/currency/currency.ts +++ b/packages/insight-previous/src/providers/currency/currency.ts @@ -40,7 +40,9 @@ export class CurrencyProvider { public getConvertedNumber(value: number): number { // TODO: Change this function to make use of satoshis so that we don't have to do all these roundabout conversions. - value = value * 1e-8; + if (this.currencySymbol !== 'ETH') { + value = value * 1e-8; + } if (value === 0.0) { return 0; } @@ -62,7 +64,6 @@ export class CurrencyProvider { this.factor = 1; response = this.roundFloat(value * this.factor, 8); } - return response; } diff --git a/packages/insight-previous/src/providers/transactions/transactions.ts b/packages/insight-previous/src/providers/transactions/transactions.ts index 3ef949dd74b..9503e803a78 100644 --- a/packages/insight-previous/src/providers/transactions/transactions.ts +++ b/packages/insight-previous/src/providers/transactions/transactions.ts @@ -30,6 +30,14 @@ export interface ApiTx { spentHeight: number; value: number; version: number; + // ETH: + fee: number; + from: string; + gasLimit: number; + gasPrice: number; + internal: any[]; + nonce: number; + to: string; } export interface ApiCoin { @@ -108,6 +116,15 @@ export interface AppTx { fee: number; blockheight: number; blocktime: number; + // ETH: + from: string; + gasLimit: number; + gasPrice: number; + internal: any[]; + nonce: number; + to: string; + value: number; + chain: string; } @Injectable() @@ -117,7 +134,7 @@ export class TxsProvider { public currency: CurrencyProvider, public blocksProvider: BlocksProvider, private api: ApiProvider - ) {} + ) { } public getFee(tx: AppTx): number { const sumSatoshis: any = (arr: any): number => @@ -131,7 +148,7 @@ export class TxsProvider { public toAppTx(tx: ApiTx): AppTx { return { txid: tx.txid, - fee: null, // calculated later, when coins are retrieved + fee: tx.fee, blockheight: tx.blockHeight, confirmations: tx.confirmations, blockhash: tx.blockHash, @@ -143,7 +160,16 @@ export class TxsProvider { vin: [], // populated when coins are retrieved vout: [], // populated when coins are retrieved valueOut: tx.value, - version: tx.version + version: tx.version, + // ETH: + from: tx.from ? tx.from : '', + gasLimit: tx.gasLimit ? tx.gasLimit : null, + gasPrice: tx.gasPrice ? tx.gasPrice : null, + internal: tx.internal ? tx.internal : null, + nonce: tx.nonce >= 0 ? tx.nonce : null, + to: tx.to ? tx.to : '', + value: tx.value, + chain: tx.chain }; } diff --git a/packages/insight-previous/tsconfig.json b/packages/insight-previous/tsconfig.json index b5ddcc3ff8f..e81d40a51a0 100644 --- a/packages/insight-previous/tsconfig.json +++ b/packages/insight-previous/tsconfig.json @@ -8,7 +8,8 @@ "module": "es2015", "moduleResolution": "node", "sourceMap": true, - "target": "es5" + "target": "es5", + "types": ["node", "lodash"] }, "include": ["src/**/*.ts"], "exclude": ["node_modules", "src/test.ts", "src/mocks.ts", "**/*.spec.ts"],

>^GjVOG67sgP4JIm$IV)pCa7%w%;MF41I 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%0DeE!MVdDXl*$;=fnC>kb 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