Updating branch with changes from

'develop'
This commit is contained in:
Richard Ramos 2018-06-08 15:36:11 -04:00
commit 610b6de008
36 changed files with 645 additions and 293 deletions

View File

@ -1,6 +1,6 @@
language: node_js language: node_js
node_js: node_js:
- "7" - "8"
addons: addons:
code_climate: code_climate:
repo_token: 7454b1a666015e244c384d19f48c34e35d1ae58c3aa428ec542f10bbcb848358 repo_token: 7454b1a666015e244c384d19f48c34e35d1ae58c3aa428ec542f10bbcb848358

View File

@ -21,10 +21,32 @@ class AccountParser {
return accounts; return accounts;
} }
static getHexBalance(balanceString, web3) {
if (!balanceString) {
return 0xFFFFFFFFFFFFFFFFFF;
}
if (web3.utils.isHexStrict(balanceString)) {
return balanceString;
}
const match = balanceString.match(/([0-9]+) ?([a-zA-Z]*)/);
if (!match) {
throw new Error(__('Unrecognized balance string "%s"', balanceString));
}
if (!match[2]) {
return web3.utils.toHex(parseInt(match[1], 10));
}
return web3.utils.toHex(web3.utils.toWei(match[1], match[2]));
}
static getAccount(accountConfig, web3, logger) { static getAccount(accountConfig, web3, logger) {
if (!logger) { if (!logger) {
logger = console; logger = console;
} }
let hexBalance = null;
if (accountConfig.balance) {
hexBalance = AccountParser.getHexBalance(accountConfig.balance, web3);
}
if (accountConfig.privateKey) { if (accountConfig.privateKey) {
if (!accountConfig.privateKey.startsWith('0x')) { if (!accountConfig.privateKey.startsWith('0x')) {
accountConfig.privateKey = '0x' + accountConfig.privateKey; accountConfig.privateKey = '0x' + accountConfig.privateKey;
@ -33,7 +55,7 @@ class AccountParser {
logger.warn(`Private key ending with ${accountConfig.privateKey.substr(accountConfig.privateKey.length - 5)} is not a HEX string`); logger.warn(`Private key ending with ${accountConfig.privateKey.substr(accountConfig.privateKey.length - 5)} is not a HEX string`);
return null; return null;
} }
return web3.eth.accounts.privateKeyToAccount(accountConfig.privateKey); return Object.assign(web3.eth.accounts.privateKeyToAccount(accountConfig.privateKey), {hexBalance});
} }
if (accountConfig.privateKeyFile) { if (accountConfig.privateKeyFile) {
let fileContent = fs.readFileSync(fs.dappPath(accountConfig.privateKeyFile)).toString(); let fileContent = fs.readFileSync(fs.dappPath(accountConfig.privateKeyFile)).toString();
@ -46,7 +68,7 @@ class AccountParser {
logger.warn(`Private key is not a HEX string in file ${accountConfig.privateKeyFile} at index ${index}`); logger.warn(`Private key is not a HEX string in file ${accountConfig.privateKeyFile} at index ${index}`);
return null; return null;
} }
return web3.eth.accounts.privateKeyToAccount(key); return Object.assign(web3.eth.accounts.privateKeyToAccount(key), {hexBalance});
}); });
} }
if (accountConfig.mnemonic) { if (accountConfig.mnemonic) {
@ -59,7 +81,7 @@ class AccountParser {
const accounts = []; const accounts = [];
for (let i = addressIndex; i < addressIndex + numAddresses; i++) { for (let i = addressIndex; i < addressIndex + numAddresses; i++) {
const wallet = hdwallet.derivePath(wallet_hdpath + i).getWallet(); const wallet = hdwallet.derivePath(wallet_hdpath + i).getWallet();
accounts.push(web3.eth.accounts.privateKeyToAccount('0x' + wallet.getPrivateKey().toString('hex'))); accounts.push(Object.assign(web3.eth.accounts.privateKeyToAccount('0x' + wallet.getPrivateKey().toString('hex')), {hexBalance}));
} }
return accounts; return accounts;
} }

View File

@ -54,17 +54,21 @@ class Blockchain {
}; };
provider = new Provider(providerOptions); provider = new Provider(providerOptions);
provider.startWeb3Provider(() => { async.waterfall([
function startProvider(next) {
provider.startWeb3Provider(next);
},
function checkNode(next) {
self.assertNodeConnection(true, (err) => { self.assertNodeConnection(true, (err) => {
if (err && self.web3StartedInProcess) { if (err && self.web3StartedInProcess) {
// Already started blockchain in another node, we really have a node problem // Already started blockchain in another node, we really have a node problem
self.logger.error(__('Unable to start the blockchain process. Is Geth installed?').red); self.logger.error(__('Unable to start the blockchain process. Is Geth installed?').red);
return cb(err); return next(err);
} }
if (!err) { if (!err) {
self.isWeb3Ready = true; self.isWeb3Ready = true;
self.events.emit(WEB3_READY); self.events.emit(WEB3_READY);
return cb(); return next();
} }
self.web3StartedInProcess = true; self.web3StartedInProcess = true;
self.startBlockchainNode(() => { self.startBlockchainNode(() => {
@ -73,9 +77,13 @@ class Blockchain {
self.initWeb3(cb); self.initWeb3(cb);
}); });
}); });
}); },
function fundAccountsIfNeeded(next) {
provider.fundAccounts(next);
}
], cb);
} else { } else {
throw new Error("contracts config error: unknown deployment type " + this.contractsConfig.deployment.type); throw new Error(__("contracts config error: unknown deployment type %s", this.contractsConfig.deployment.type));
} }
} }

View File

@ -43,7 +43,7 @@ class CodeGenerator {
// new events // new events
this.events.setCommandHandler('code-vanila', function(cb) { this.events.setCommandHandler('code-vanila', function(cb) {
self.events.request("contracts:list", (contractsList) => { self.events.request("contracts:list", (_err, contractsList) => {
let vanillaABI = self.generateABI(contractsList, {useEmbarkJS: false}); let vanillaABI = self.generateABI(contractsList, {useEmbarkJS: false});
let contractsJSON = self.generateContractsJSON(contractsList); let contractsJSON = self.generateContractsJSON(contractsList);
cb(vanillaABI, contractsJSON); cb(vanillaABI, contractsJSON);
@ -51,7 +51,7 @@ class CodeGenerator {
}); });
this.events.setCommandHandler('code', function(cb) { this.events.setCommandHandler('code', function(cb) {
self.events.request("contracts:list", (contractsList) => { self.events.request("contracts:list", (_err, contractsList) => {
let embarkJSABI = self.generateABI(contractsList, {useEmbarkJS: true}); let embarkJSABI = self.generateABI(contractsList, {useEmbarkJS: true});
let contractsJSON = self.generateContractsJSON(contractsList); let contractsJSON = self.generateContractsJSON(contractsList);
cb(embarkJSABI, contractsJSON); cb(embarkJSABI, contractsJSON);
@ -59,7 +59,7 @@ class CodeGenerator {
}); });
this.events.setCommandHandler('code-contracts-vanila', function(cb) { this.events.setCommandHandler('code-contracts-vanila', function(cb) {
self.events.request("contracts:list", (contractsList) => { self.events.request("contracts:list", (_err, contractsList) => {
let vanillaContractsABI = self.generateContracts(contractsList, false, true, false); let vanillaContractsABI = self.generateContracts(contractsList, false, true, false);
let contractsJSON = self.generateContractsJSON(contractsList); let contractsJSON = self.generateContractsJSON(contractsList);
cb(vanillaContractsABI, contractsJSON); cb(vanillaContractsABI, contractsJSON);
@ -67,7 +67,7 @@ class CodeGenerator {
}); });
this.events.setCommandHandler('code-vanila-deployment', function(cb) { this.events.setCommandHandler('code-vanila-deployment', function(cb) {
self.events.request("contracts:list", (contractsList) => { self.events.request("contracts:list", (_err, contractsList) => {
let vanillaABI = self.generateABI(contractsList, {useEmbarkJS: false, deployment: true}); let vanillaABI = self.generateABI(contractsList, {useEmbarkJS: false, deployment: true});
let contractsJSON = self.generateContractsJSON(contractsList); let contractsJSON = self.generateContractsJSON(contractsList);
cb(vanillaABI, contractsJSON); cb(vanillaABI, contractsJSON);

View File

@ -170,7 +170,7 @@ class ContractDeployer {
}); });
}, },
function doLinking(next) { function doLinking(next) {
self.events.request('contracts:list', (contracts) => { self.events.request('contracts:list', (_err, contracts) => {
for (let contractObj of contracts) { for (let contractObj of contracts) {
let filename = contractObj.filename; let filename = contractObj.filename;
let deployedAddress = contractObj.deployedAddress; let deployedAddress = contractObj.deployedAddress;

View File

@ -18,6 +18,7 @@ class ContractsManager {
this.gasLimit = options.gasLimit; this.gasLimit = options.gasLimit;
this.deployOnlyOnConfig = false; this.deployOnlyOnConfig = false;
this.events = options.events; this.events = options.events;
this.compileError = false;
self.events.on(constants.events.contractFilesChanged, (newContractFiles) => { self.events.on(constants.events.contractFilesChanged, (newContractFiles) => {
self.contractFiles = newContractFiles; self.contractFiles = newContractFiles;
@ -27,7 +28,7 @@ class ContractsManager {
}); });
self.events.setCommandHandler('contracts:list', (cb) => { self.events.setCommandHandler('contracts:list', (cb) => {
cb(self.listContracts()); cb(self.compileError, self.listContracts());
}); });
self.events.setCommandHandler("contracts:contract", (contractName, cb) => { self.events.setCommandHandler("contracts:contract", (contractName, cb) => {
@ -36,8 +37,8 @@ class ContractsManager {
self.events.setCommandHandler("contracts:build", (configOnly, cb) => { self.events.setCommandHandler("contracts:build", (configOnly, cb) => {
self.deployOnlyOnConfig = configOnly; // temporary, should refactor self.deployOnlyOnConfig = configOnly; // temporary, should refactor
self.build(() => { self.build((err) => {
cb(); cb(err);
}); });
}); });
@ -59,6 +60,7 @@ class ContractsManager {
let self = this; let self = this;
async.waterfall([ async.waterfall([
function compileContracts(callback) { function compileContracts(callback) {
self.events.emit("status", __("Compiling..."));
if (process.env.isTest && self.compiledContracts && Object.keys(self.compiledContracts).length) { if (process.env.isTest && self.compiledContracts && Object.keys(self.compiledContracts).length) {
// Only compile once for tests // Only compile once for tests
return callback(); return callback();
@ -69,6 +71,7 @@ class ContractsManager {
}); });
}, },
function prepareContractsFromConfig(callback) { function prepareContractsFromConfig(callback) {
self.events.emit("status", __("Building..."));
let className, contract; let className, contract;
for (className in self.contractsConfig.contracts) { for (className in self.contractsConfig.contracts) {
contract = self.contractsConfig.contracts[className]; contract = self.contractsConfig.contracts[className];
@ -247,6 +250,8 @@ class ContractsManager {
} }
], function (err, _result) { ], function (err, _result) {
if (err) { if (err) {
self.compileError = true;
self.events.emit("status", __("Compile/Build error"));
self.logger.error(__("Error Compiling/Building contracts: ") + err); self.logger.error(__("Error Compiling/Building contracts: ") + err);
} }
self.logger.trace("finished".underline); self.logger.trace("finished".underline);

View File

@ -22,15 +22,20 @@ class DeployManager {
deployAll(done) { deployAll(done) {
let self = this; let self = this;
this.logger.info(__("deploying contracts"));
this.events.emit("deploy:beforeAll");
self.events.request('contracts:list', (contracts) => { self.events.request('contracts:list', (err, contracts) => {
if (err) {
return done(err);
}
self.logger.info(__("deploying contracts"));
self.events.emit("deploy:beforeAll");
async.eachOfSeries(contracts, async.eachOfSeries(contracts,
function (contract, key, callback) { function (contract, key, callback) {
contract._gasLimit = self.gasLimit; contract._gasLimit = self.gasLimit;
self.events.request('deploy:contract', contract, () => { self.events.request('deploy:contract', contract, (err) => {
callback(); callback(err);
}); });
}, },
function (err, _results) { function (err, _results) {
@ -61,8 +66,8 @@ class DeployManager {
async.waterfall([ async.waterfall([
function buildContracts(callback) { function buildContracts(callback) {
self.events.request("contracts:build", self.deployOnlyOnConfig, () => { self.events.request("contracts:build", self.deployOnlyOnConfig, (err) => {
callback(); callback(err);
}); });
}, },

View File

@ -1,8 +1,12 @@
const async = require('async'); const async = require('async');
const TARGET = 15000000000000000000; const TARGET = 0x7FFFFFFFFFFFFFFF;
const ALREADY_FUNDED = 'alreadyFunded'; const ALREADY_FUNDED = 'alreadyFunded';
function fundAccount(web3, accountAddress, callback) { function fundAccount(web3, accountAddress, hexBalance, callback) {
if (!hexBalance) {
hexBalance = TARGET;
}
const targetBalance = (typeof hexBalance === 'string') ? parseInt(hexBalance, 16) : hexBalance;
let accountBalance; let accountBalance;
let coinbaseAddress; let coinbaseAddress;
let lastNonce; let lastNonce;
@ -14,7 +18,7 @@ function fundAccount(web3, accountAddress, callback) {
if (err) { if (err) {
return next(err); return next(err);
} }
if (balance >= TARGET) { if (balance >= targetBalance) {
return next(ALREADY_FUNDED); return next(ALREADY_FUNDED);
} }
accountBalance = balance; accountBalance = balance;
@ -56,7 +60,7 @@ function fundAccount(web3, accountAddress, callback) {
web3.eth.sendTransaction({ web3.eth.sendTransaction({
from: coinbaseAddress, from: coinbaseAddress,
to: accountAddress, to: accountAddress,
value: TARGET - accountBalance, value: targetBalance - accountBalance,
gasPrice: gasPrice, gasPrice: gasPrice,
nonce: lastNonce nonce: lastNonce
}, next); }, next);

View File

@ -35,18 +35,10 @@ class Provider {
self.accounts = AccountParser.parseAccountsConfig(self.accountsConfig, self.web3, self.logger); self.accounts = AccountParser.parseAccountsConfig(self.accountsConfig, self.web3, self.logger);
self.addresses = []; self.addresses = [];
async.waterfall([ async.waterfall([
function fundAccounts(next) { function populateWeb3Wallet(next) {
if (!self.accounts.length) { if (!self.accounts.length) {
return next(NO_ACCOUNTS); return next(NO_ACCOUNTS);
} }
if (!self.isDev) {
return next();
}
async.each(self.accounts, (account, eachCb) => {
fundAccount(self.web3, account.address, eachCb);
}, next);
},
function populateWeb3Wallet(next) {
self.accounts.forEach(account => { self.accounts.forEach(account => {
self.addresses.push(account.address); self.addresses.push(account.address);
self.web3.eth.accounts.wallet.add(account); self.web3.eth.accounts.wallet.add(account);
@ -64,6 +56,19 @@ class Provider {
}); });
} }
fundAccounts(callback) {
const self = this;
if (!self.accounts.length) {
return callback();
}
if (!self.isDev) {
return callback();
}
async.each(self.accounts, (account, eachCb) => {
fundAccount(self.web3, account.address, account.hexBalance, eachCb);
}, callback);
}
stop() { stop() {
this.engine.stop(); this.engine.stop();
} }

View File

@ -257,7 +257,6 @@ class Engine {
storageService(_options) { storageService(_options) {
this.registerModule('storage', { this.registerModule('storage', {
addCheck: this.servicesMonitor.addCheck.bind(this.servicesMonitor),
storageConfig: this.config.storageConfig, storageConfig: this.config.storageConfig,
webServerConfig: this.config.webServerConfig, webServerConfig: this.config.webServerConfig,
blockchainConfig: this.config.blockchainConfig, blockchainConfig: this.config.blockchainConfig,

View File

@ -60,7 +60,6 @@ Plugin.prototype.hasContext = function(context) {
Plugin.prototype.loadPlugin = function() { Plugin.prototype.loadPlugin = function() {
if (!this.isContextValid()) { if (!this.isContextValid()) {
console.log(this.acceptedContext);
this.logger.warn(__('Plugin {{name}} can only be loaded in the context of "{{contextes}}"', {name: this.name, contextes: this.acceptedContext.join(', ')})); this.logger.warn(__('Plugin {{name}} can only be loaded in the context of "{{contextes}}"', {name: this.name, contextes: this.acceptedContext.join(', ')}));
return false; return false;
} }

View File

@ -128,7 +128,10 @@ class Embark {
engine.events.on('check:backOnline:Ethereum', function () { engine.events.on('check:backOnline:Ethereum', function () {
engine.logger.info(__('Ethereum node detected') + '..'); engine.logger.info(__('Ethereum node detected') + '..');
engine.config.reloadConfig(); engine.config.reloadConfig();
engine.events.request('deploy:contracts', function() { engine.events.request('deploy:contracts', function(err) {
if (err) {
return;
}
engine.logger.info(__('Deployment Done')); engine.logger.info(__('Deployment Done'));
}); });
}); });

View File

@ -19,7 +19,7 @@ class SolcProcess extends ProcessWrapper {
return {contents: fs.readFileSync(path.join('./node_modules/', filename)).toString()}; return {contents: fs.readFileSync(path.join('./node_modules/', filename)).toString()};
} }
if (fs.existsSync(path.join(constants.httpContractsDirectory, filename))) { if (fs.existsSync(path.join(constants.httpContractsDirectory, filename))) {
return {contents: fs.readFileSync(path.join('./.embark/contracts', filename)).toString()}; return {contents: fs.readFileSync(path.join(constants.httpContractsDirectory, filename)).toString()};
} }
return {error: 'File not found'}; return {error: 'File not found'};
} }

View File

@ -69,7 +69,6 @@ class Storage {
self._logger.trace(`Storage module: Launching ${platform} process...`); self._logger.trace(`Storage module: Launching ${platform} process...`);
return storageProcessesLauncher.launchProcess(platform.toLowerCase(), (err) => { return storageProcessesLauncher.launchProcess(platform.toLowerCase(), (err) => {
if (err) { if (err) {
self._logger.error(err);
return callback(err); return callback(err);
} }
callback(); callback();

View File

@ -53,7 +53,7 @@ class Pipeline {
next(); next();
}, },
function writeContracts(next) { function writeContracts(next) {
self.events.request('contracts:list', (contracts) => { self.events.request('contracts:list', (_err, contracts) => {
// ensure the .embark/contracts directory exists (create if not exists) // ensure the .embark/contracts directory exists (create if not exists)
fs.mkdirp(fs.dappPath(".embark/contracts", ''), (err) => { fs.mkdirp(fs.dappPath(".embark/contracts", ''), (err) => {
if(err) return next(err); if(err) return next(err);
@ -224,8 +224,8 @@ class Pipeline {
}); });
}, },
function getContracts(next) { function getContracts(next) {
self.events.request('contracts:list', (contracts) => { self.events.request('contracts:list', (err, contracts) => {
next(null, contracts); next(err, contracts);
}); });
}, },
function writeContractsJSON(contracts, next) { function writeContractsJSON(contracts, next) {
@ -252,7 +252,6 @@ class Pipeline {
} }
], cb); ], cb);
} }
} }
module.exports = Pipeline; module.exports = Pipeline;

View File

@ -1,21 +1,23 @@
const child_process = require('child_process'); const child_process = require('child_process');
const ProcessWrapper = require('../../process/processWrapper'); const ProcessWrapper = require('../../process/processWrapper');
const constants = require('../../constants'); const constants = require('../../constants');
const StorageUtils = require('./storageUtils');
let ipfsProcess; // eslint-disable-line no-unused-vars let ipfsProcess; // eslint-disable-line no-unused-vars
class IPFSProcess extends ProcessWrapper { class IPFSProcess extends ProcessWrapper {
constructor(_options) { constructor(options) {
super(); super();
this.cors = _options.cors; this.cors = options.cors;
this.command = StorageUtils.getCommand('ipfs', options);
this.checkIPFSVersion(); this.checkIPFSVersion();
this.startIPFSDaemon(); this.startIPFSDaemon();
} }
checkIPFSVersion() { checkIPFSVersion() {
child_process.exec('ipfs --version', {silent: true}, (err, stdout, _stderr) => { child_process.exec(this.command + ' --version', {silent: true}, (err, stdout, _stderr) => {
if (err) { if (err) {
console.error(err); console.error(err);
return; return;
@ -35,7 +37,7 @@ class IPFSProcess extends ProcessWrapper {
const self = this; const self = this;
// spawn the daemon (muhaha) // spawn the daemon (muhaha)
this.child = child_process.spawn('ipfs', ['daemon']); this.child = child_process.spawn(this.command, ['daemon']);
this.child.on('error', (err) => { this.child.on('error', (err) => {
err = err.toString(); err = err.toString();
@ -51,7 +53,7 @@ class IPFSProcess extends ProcessWrapper {
self.readyCalled = true; self.readyCalled = true;
// update IPFS cors before spawning a daemon (muhaha) // update IPFS cors before spawning a daemon (muhaha)
let ipfsCorsCmd = `ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin "[\\"${self.cors.join('\\", \\"')}\\"]"`; let ipfsCorsCmd = `${self.command} config --json API.HTTPHeaders.Access-Control-Allow-Origin "[\\"${self.cors.join('\\", \\"')}\\"]"`;
console.trace(`Updating IPFS CORS using command: ${ipfsCorsCmd}`); console.trace(`Updating IPFS CORS using command: ${ipfsCorsCmd}`);
child_process.exec(ipfsCorsCmd, {silent: true}, (err, stdout, _stderr) => { child_process.exec(ipfsCorsCmd, {silent: true}, (err, stdout, _stderr) => {
if(err){ if(err){
@ -62,7 +64,7 @@ class IPFSProcess extends ProcessWrapper {
_stderr = _stderr.toString(); _stderr = _stderr.toString();
console.error(`IPFS CORS update error: ${_stderr}`); console.error(`IPFS CORS update error: ${_stderr}`);
} }
child_process.exec('ipfs config --json API.HTTPHeaders.Access-Control-Allow-Credentials "[\\"true\\"]"', {silent: true}, (err, stdout, _stderr) => { child_process.exec(self.command + ' config --json API.HTTPHeaders.Access-Control-Allow-Credentials "[\\"true\\"]"', {silent: true}, (err, stdout, _stderr) => {
if(err){ if(err){
err = err.toString(); err = err.toString();
console.error('IPFS CORS update error: ', err); console.error('IPFS CORS update error: ', err);
@ -71,7 +73,7 @@ class IPFSProcess extends ProcessWrapper {
_stderr = _stderr.toString(); _stderr = _stderr.toString();
console.error(`IPFS CORS update error: ${_stderr}`); console.error(`IPFS CORS update error: ${_stderr}`);
} }
child_process.exec('ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods "[\\"PUT\\", \\"POST\\", \\"GET\\"]"', {silent: true}, (err, stdout, _stderr) => { child_process.exec(self.command + ' config --json API.HTTPHeaders.Access-Control-Allow-Methods "[\\"PUT\\", \\"POST\\", \\"GET\\"]"', {silent: true}, (err, stdout, _stderr) => {
if(err){ if(err){
err = err.toString(); err = err.toString();
console.error('IPFS CORS update error: ', err); console.error('IPFS CORS update error: ', err);

View File

@ -1,7 +1,9 @@
const fs = require('../../core/fs'); const fs = require('../../core/fs');
const shellJs = require('shelljs');
const utils = require('../../utils/utils'); const utils = require('../../utils/utils');
const ProcessLauncher = require('../../process/processLauncher'); const ProcessLauncher = require('../../process/processLauncher');
const constants = require('../../constants'); const constants = require('../../constants');
const StorageUtils = require('./storageUtils');
class StorageProcessesLauncher { class StorageProcessesLauncher {
constructor(options) { constructor(options) {
@ -69,7 +71,7 @@ class StorageProcessesLauncher {
} }
processExited(storageName, code) { processExited(storageName, code) {
this.logger.error(__(`Storage process for ${storageName} ended before the end of this process. Code: ${code}`)); this.logger.error(__(`Storage process for {{storageName}} ended before the end of this process. Code: {{code}}`, {storageName, code}));
} }
launchProcess(storageName, callback) { launchProcess(storageName, callback) {
@ -80,9 +82,17 @@ class StorageProcessesLauncher {
const filePath = utils.joinPath(__dirname, `./${storageName}.js`); const filePath = utils.joinPath(__dirname, `./${storageName}.js`);
fs.access(filePath, (err) => { fs.access(filePath, (err) => {
if (err) { if (err) {
return callback(__('No process file for this storage type exists. Please start the process locally.')); return callback(__('No process file for this storage type (%s) exists. Please start the process locally.', storageName));
} }
self.logger.info(__(`Starting ${storageName} process`).cyan);
const program = shellJs.which(StorageUtils.getCommand(storageName, self.storageConfig));
if (!program) {
self.logger.warn(__('{{storageName}} is not installed or your configuration is not right', {storageName}).yellow);
self.logger.info(__('You can install and get more information here: ').yellow + StorageUtils.getStorageInstallationSite(storageName).underline);
return callback(__('%s not installed', storageName));
}
self.logger.info(__(`Starting %s process`, storageName).cyan);
self.processes[storageName] = new ProcessLauncher({ self.processes[storageName] = new ProcessLauncher({
modulePath: filePath, modulePath: filePath,
logger: self.logger, logger: self.logger,

View File

@ -0,0 +1,25 @@
const IPFS = 'ipfs';
const SWARM = 'swarm';
class StorageUtils {
static getCommand(storageName, config) {
if (storageName === IPFS) {
return IPFS;
}
if (storageName === SWARM) {
return config.swarmPath || SWARM;
}
return null;
}
static getStorageInstallationSite(storageName) {
if (storageName === IPFS) {
return 'https://ipfs.io/docs/install/';
}
if (storageName === SWARM) {
return 'http://swarm-guide.readthedocs.io/en/latest/installation.html';
}
}
}
module.exports = StorageUtils;

View File

@ -2,6 +2,7 @@ const child_process = require('child_process');
const ProcessWrapper = require('../../process/processWrapper'); const ProcessWrapper = require('../../process/processWrapper');
const constants = require('../../constants'); const constants = require('../../constants');
const fs = require('../../core/fs'); const fs = require('../../core/fs');
const StorageUtils = require('./storageUtils');
let swarmProcess; let swarmProcess;
@ -10,6 +11,7 @@ class SwarmProcess extends ProcessWrapper {
super(); super();
this.storageConfig = options.storageConfig; this.storageConfig = options.storageConfig;
this.cors = options.cors; this.cors = options.cors;
this.command = StorageUtils.getCommand('swarm', this.storageConfig);
} }
startSwarmDaemon() { startSwarmDaemon() {
@ -24,7 +26,7 @@ class SwarmProcess extends ProcessWrapper {
`--corsdomain=${self.cors.join(',')}` `--corsdomain=${self.cors.join(',')}`
]; ];
console.trace('Starting swarm process with arguments: ' + args.join(' ')); console.trace('Starting swarm process with arguments: ' + args.join(' '));
this.child = child_process.spawn(this.storageConfig.swarmPath || 'swarm', args); this.child = child_process.spawn(this.command, args);
this.child.on('error', (err) => { this.child.on('error', (err) => {
err = err.toString(); err = err.toString();

View File

@ -37,6 +37,22 @@ module.exports = {
global.assert = assert; global.assert = assert;
global.config = test.config.bind(test); global.config = test.config.bind(test);
global.deployAll = function () {
console.error(__('%s is not supported anymore', 'deployAll').red);
console.info(__('You can learn about the new revamped tests here: %s', 'https://embark.status.im/docs/testing.html'.underline));
process.exit();
};
// Override require to enable `require('Embark/contracts/contractName');`
const Module = require('module');
const originalRequire = require('module').prototype.require;
Module.prototype.require = function(requireName) {
if (requireName.startsWith('Embark')) {
return test.require(...arguments);
}
return originalRequire.apply(this, arguments);
};
// TODO: this global here might not be necessary at all // TODO: this global here might not be necessary at all
global.web3 = global.embark.web3; global.web3 = global.embark.web3;
@ -65,9 +81,10 @@ module.exports = {
mocha.addFile(file); mocha.addFile(file);
mocha.suite.timeout(0); mocha.suite.timeout(0);
mocha.suite.beforeEach('Wait for deploy', (done) => {
global.embark.onReady(() => { mocha.suite.beforeAll('Wait for deploy', (done) => {
done(); global.embark.onReady((err) => {
done(err);
}); });
}); });

View File

@ -2,10 +2,11 @@ const async = require('async');
const Engine = require('../core/engine.js'); const Engine = require('../core/engine.js');
const TestLogger = require('./test_logger.js'); const TestLogger = require('./test_logger.js');
const Web3 = require('web3'); const Web3 = require('web3');
const utils = require('../utils/utils');
const constants = require('../constants'); const constants = require('../constants');
const Events = require('../core/events'); const Events = require('../core/events');
const cloneDeep = require('clone-deep'); const cloneDeep = require('clone-deep');
const AccountParser = require('../contracts/accountParser');
const Provider = require('../contracts/provider');
function getSimulator() { function getSimulator() {
try { try {
@ -28,21 +29,57 @@ function getSimulator() {
class Test { class Test {
constructor(options) { constructor(options) {
this.options = options || {}; this.options = options || {};
this.simOptions = this.options.simulatorOptions || {}; this.simOptions = {};
this.contracts = {}; this.contracts = {};
this.events = new Events(); this.events = new Events();
this.ready = true; this.ready = true;
this.error = false;
this.builtContracts = {}; this.builtContracts = {};
this.compiledContracts = {}; this.compiledContracts = {};
this.web3 = new Web3(); this.web3 = new Web3();
if (this.simOptions.node) {
this.web3.setProvider(new this.web3.providers.HttpProvider(this.simOptions.node));
} else {
this.sim = getSimulator();
this.web3.setProvider(this.sim.provider(this.simOptions));
} }
initWeb3Provider(callback) {
if (this.simOptions.host) {
const providerOptions = {
web3: this.web3,
accountsConfig: this.simOptions.accounts,
logger: this.engine.logger,
isDev: false,
web3Endpoint: 'http://' + this.simOptions.host + ':' + this.simOptions.port
};
this.provider = new Provider(providerOptions);
return this.provider.startWeb3Provider(callback);
}
if (this.simOptions.accounts) {
this.simOptions.accounts = this.simOptions.accounts.map((account) => {
return {balance: account.hexBalance, secretKey: account.privateKey};
});
}
this.sim = getSimulator();
this.web3.setProvider(this.sim.provider(this.simOptions));
callback();
}
initDeployServices() {
this.engine.startService("web3", {
web3: this.web3
});
this.engine.startService("deployment", {
trackContracts: false,
ipcRole: 'client'
});
}
init(callback) {
const self = this;
this.initWeb3Provider((err) => {
if (err) {
return callback(err);
}
this.engine = new Engine({ this.engine = new Engine({
env: this.options.env || 'test', env: this.options.env || 'test',
// TODO: config will need to detect if this is a obj // TODO: config will need to detect if this is a obj
@ -56,63 +93,117 @@ class Test {
this.versions_default = this.engine.config.contractsConfig.versions; this.versions_default = this.engine.config.contractsConfig.versions;
// Reset contract config to nothing to make sure we deploy only what we want // Reset contract config to nothing to make sure we deploy only what we want
this.engine.config.contractsConfig = {contracts: {}, versions: this.versions_default}; this.engine.config.contractsConfig = {
contracts: {},
versions: this.versions_default
};
this.engine.startService("libraryManager"); this.engine.startService("libraryManager");
this.engine.startService("codeRunner"); this.engine.startService("codeRunner");
this.engine.startService("web3", { this.initDeployServices();
web3: this.web3
});
this.engine.startService("deployment", {
trackContracts: false,
ipcRole: 'client'
});
this.engine.startService("codeGenerator"); this.engine.startService("codeGenerator");
}
init(callback) {
const self = this;
this.engine.contractsManager.build(() => { this.engine.contractsManager.build(() => {
self.builtContracts = cloneDeep(self.engine.contractsManager.contracts); self.builtContracts = cloneDeep(self.engine.contractsManager.contracts);
self.compiledContracts = cloneDeep(self.engine.contractsManager.compiledContracts); self.compiledContracts = cloneDeep(self.engine.contractsManager.compiledContracts);
callback(); callback();
}); });
}
onReady(callback) {
if (this.ready) {
return callback();
}
this.events.once('ready', () => {
callback();
}); });
} }
onReady(callback) {
const self = this;
if (this.ready) {
return callback();
}
if (this.error) {
return callback(this.error);
}
let errorCallback, readyCallback;
errorCallback = (err) => {
self.events.removeListener('ready', readyCallback);
callback(err);
};
readyCallback = () => {
self.events.removeListener('deployError', errorCallback);
callback();
};
this.events.once('ready', readyCallback);
this.events.once('deployError', errorCallback);
}
config(options, callback) { config(options, callback) {
const self = this;
if (typeof (options) === 'function') {
callback = options;
options = {};
}
if (!callback) { if (!callback) {
callback = function () { callback = function () {
}; };
} }
if (!options.contracts) { if (!options.contracts) {
throw new Error(__('No contracts specified in the options')); options.contracts = {};
} }
this.options = utils.recursiveMerge(this.options, options); self.ready = false;
this.simOptions = this.options.simulatorOptions || {};
this.ready = false;
// Reset contracts async.waterfall([
this.engine.contractsManager.contracts = cloneDeep(this.builtContracts); function checkDeploymentOptions(next) {
this.engine.contractsManager.compiledContracts = cloneDeep(this.compiledContracts); if (!options.deployment) {
if (!self.simOptions.host && !self.simOptions.accounts) {
this._deploy(options, (err, accounts) => { return next();
this.ready = true; }
this.events.emit('ready'); self.simOptions = {};
} else {
self.simOptions = {};
let resetServices = false;
if (options.deployment.accounts) {
// Account setup
self.simOptions.accounts = AccountParser.parseAccountsConfig(options.deployment.accounts, self.web3);
resetServices = true;
}
if (options.deployment.host && options.deployment.port && options.deployment.type) {
if (options.deployment.type !== 'rpc') {
throw new Error(__("contracts config error: unknown deployment type %s", options.deployment.type));
}
Object.assign(self.simOptions, {host: options.deployment.host, port: options.deployment.port});
resetServices = true;
}
if (!resetServices) {
return next();
}
}
self.initWeb3Provider((err) => {
if (err) { if (err) {
console.error(err.red); return next(err);
return callback(err);
} }
callback(null, accounts); self.initDeployServices();
next();
}); });
},
function resetContracts(next) {
self.engine.contractsManager.contracts = cloneDeep(self.builtContracts);
self.engine.contractsManager.compiledContracts = cloneDeep(self.compiledContracts);
next();
},
function deploy(next) {
self._deploy(options, (err, accounts) => {
if (err) {
self.events.emit('deployError', err);
self.error = err;
return next(err);
}
self.ready = true;
self.error = false;
self.events.emit('ready');
next(null, accounts);
});
}
], callback);
} }
_deploy(config, callback) { _deploy(config, callback) {
@ -143,12 +234,20 @@ class Test {
function createContractObject(accounts, next) { function createContractObject(accounts, next) {
async.each(Object.keys(self.engine.contractsManager.contracts), (contractName, eachCb) => { async.each(Object.keys(self.engine.contractsManager.contracts), (contractName, eachCb) => {
const contract = self.engine.contractsManager.contracts[contractName]; const contract = self.engine.contractsManager.contracts[contractName];
let data;
if (!self.contracts[contractName]) { if (!self.contracts[contractName]) {
self.contracts[contractName] = {}; self.contracts[contractName] = {};
data = "";
} else {
data = self.contracts[contractName].options.data;
} }
Object.assign(self.contracts[contractName], new self.web3.eth.Contract(contract.abiDefinition, contract.deployedAddress, Object.assign(self.contracts[contractName], new self.web3.eth.Contract(contract.abiDefinition, contract.deployedAddress,
{from: self.web3.eth.defaultAccount, gas: 6000000})); {from: self.web3.eth.defaultAccount, gas: 6000000}));
self.contracts[contractName].address = contract.deployedAddress; self.contracts[contractName].address = contract.deployedAddress;
if (self.contracts[contractName].options) {
self.contracts[contractName].options.from = self.contracts[contractName].options.from || self.web3.eth.defaultAccount;
self.contracts[contractName].options.data = data;
}
eachCb(); eachCb();
}, (err) => { }, (err) => {
next(err, accounts); next(err, accounts);
@ -192,6 +291,10 @@ class Test {
this.contracts[contractName] = new this.web3.eth.Contract(contract.abiDefinition, contract.address, this.contracts[contractName] = new this.web3.eth.Contract(contract.abiDefinition, contract.address,
{from: this.web3.eth.defaultAccount, gas: 6000000}); {from: this.web3.eth.defaultAccount, gas: 6000000});
this.contracts[contractName].address = contract.address; this.contracts[contractName].address = contract.address;
this.contracts[contractName].options.data = contract.code;
this.web3.eth.getAccounts().then((accounts) => {
this.contracts[contractName].options.from = contract.from || accounts[0];
});
return this.contracts[contractName]; return this.contracts[contractName];
} }
throw new Error(__('Unknown module %s', module)); throw new Error(__('Unknown module %s', module));

View File

@ -1,6 +1,8 @@
let fs = require('../core/fs.js'); const fs = require('../core/fs.js');
const {PerformanceObserver, performance} = require('perf_hooks');
let PluginManager = require('live-plugin-manager').PluginManager; const PluginManager = require('live-plugin-manager').PluginManager;
require('colors');
const _ = require('underscore');
class Npm { class Npm {
@ -17,9 +19,62 @@ class Npm {
return callback(null, packageDirectory + packageName); return callback(null, packageDirectory + packageName);
} }
this.logger.info("downloading " + packageName + " " + version + "...."); this.logger.info(__("Downloading {{packageName}} {{version}}...", {packageName: packageName, version: version}));
this.logger.info(__("downloading {{packageName}} {{version}}....", {packageName: packageName, version: version}));
const obsMeasure = new PerformanceObserver((items) => {
let entry;
let strDuration;
// find any download ongoing measurements we've made
entry = _.last(_.where(items.getEntries(), {name: downloadOngoing}));
if(entry){
// ongoing performance mark
strDuration = __('Still downloading {{packageName}} {{version}}... ({{duration}}ms elapsed)', {packageName: packageName, version: version, duration: entry.duration});
}
else{
// otherwise, find our download complete measurement
entry = _.last(_.where(items.getEntries(), {name: downloadComplete}));
if(entry){
strDuration = __('Finished downloading {{packageName}} {{version}} in {{duration}}ms', {packageName: packageName, version: version, duration: entry.duration});
performance.clearMarks();
}
}
// log our measurement and make it red if it has taken too long
if(entry && strDuration){
if(entry.duration > 4000){
strDuration = strDuration.red;
}
this.logger.info(strDuration);
}
});
obsMeasure.observe({entryTypes: ['measure']});
// define mark and measurement names
let startMark = 'downloadStart' + packageName + version;
let ongoingMark = 'downloadOngoingMark' + packageName + version;
let downloadOngoing = 'downloadOngoing' + packageName + version;
let endMark = 'downloadEnd' + packageName + version;
let downloadComplete = 'downloadComplete' + packageName + version;
// mark our start time
performance.mark(startMark);
// function that continually updates the console to show user that we're downloading a library
let intOngoingDownload = setInterval(
function(){
performance.mark(ongoingMark);
performance.measure(downloadOngoing, startMark, ongoingMark);
}, 750);
// do the package download/install
manager.install(packageName, version).then((result) => { manager.install(packageName, version).then((result) => {
// stop updating console for ongoing download
clearInterval(intOngoingDownload);
performance.mark(endMark);
performance.measure(downloadComplete, startMark, endMark);
callback(null , result.location); callback(null , result.location);
}).catch(callback); }).catch(callback);
} }

246
package-lock.json generated
View File

@ -92,7 +92,7 @@
"abbrev": { "abbrev": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
"integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" "integrity": "sha1-+PLIh60Qv2f2NPAFtph/7TF5qsg="
}, },
"abstract-leveldown": { "abstract-leveldown": {
"version": "2.6.3", "version": "2.6.3",
@ -114,7 +114,7 @@
"acorn": { "acorn": {
"version": "5.5.3", "version": "5.5.3",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz", "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz",
"integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==" "integrity": "sha1-9HPdR+AnegjijpvsWu6wR1HwuMk="
}, },
"acorn-dynamic-import": { "acorn-dynamic-import": {
"version": "2.0.2", "version": "2.0.2",
@ -484,7 +484,7 @@
"argparse": { "argparse": {
"version": "1.0.10", "version": "1.0.10",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
"integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=",
"requires": { "requires": {
"sprintf-js": "1.0.3" "sprintf-js": "1.0.3"
} }
@ -500,7 +500,7 @@
"arr-flatten": { "arr-flatten": {
"version": "1.1.0", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
"integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE="
}, },
"arr-union": { "arr-union": {
"version": "3.1.0", "version": "3.1.0",
@ -559,7 +559,7 @@
"asn1.js": { "asn1.js": {
"version": "4.10.1", "version": "4.10.1",
"resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
"integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "integrity": "sha1-ucK/WAXx5kqt7tbfOiv6+1pz9aA=",
"requires": { "requires": {
"bn.js": "4.11.8", "bn.js": "4.11.8",
"inherits": "2.0.3", "inherits": "2.0.3",
@ -687,7 +687,7 @@
"babel-generator": { "babel-generator": {
"version": "6.26.1", "version": "6.26.1",
"resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
"integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", "integrity": "sha1-GERAjTuPDTWkBOp6wYDwh6YBvZA=",
"requires": { "requires": {
"babel-messages": "6.23.0", "babel-messages": "6.23.0",
"babel-runtime": "6.26.0", "babel-runtime": "6.26.0",
@ -858,7 +858,7 @@
"babel-loader": { "babel-loader": {
"version": "7.1.4", "version": "7.1.4",
"resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-7.1.4.tgz", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-7.1.4.tgz",
"integrity": "sha512-/hbyEvPzBJuGpk9o80R0ZyTej6heEOr59GoEUtn8qFKbnx4cJm9FWES6J/iv644sYgrtVw9JJQkjaLW/bqb5gw==", "integrity": "sha1-40Y5OL1ObVXRwXTFSF1AahiO0BU=",
"requires": { "requires": {
"find-cache-dir": "1.0.0", "find-cache-dir": "1.0.0",
"loader-utils": "1.1.0", "loader-utils": "1.1.0",
@ -1553,7 +1553,7 @@
"babylon": { "babylon": {
"version": "6.18.0", "version": "6.18.0",
"resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
"integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" "integrity": "sha1-ry87iPpvXB5MY00aD46sT1WzleM="
}, },
"backoff": { "backoff": {
"version": "2.5.0", "version": "2.5.0",
@ -1571,7 +1571,7 @@
"base": { "base": {
"version": "0.11.2", "version": "0.11.2",
"resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
"integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=",
"requires": { "requires": {
"cache-base": "1.0.1", "cache-base": "1.0.1",
"class-utils": "0.3.6", "class-utils": "0.3.6",
@ -1630,7 +1630,7 @@
"big.js": { "big.js": {
"version": "3.2.0", "version": "3.2.0",
"resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz",
"integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==" "integrity": "sha1-pfwpi4G54Nyi5FiCR4S2XFK6WI4="
}, },
"binary-extensions": { "binary-extensions": {
"version": "1.11.0", "version": "1.11.0",
@ -1645,7 +1645,7 @@
"bindings": { "bindings": {
"version": "1.3.0", "version": "1.3.0",
"resolved": "https://registry.npmjs.org/bindings/-/bindings-1.3.0.tgz", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.3.0.tgz",
"integrity": "sha512-DpLh5EzMR2kzvX1KIlVC0VkC3iZtHKTgdtZ0a3pglBZdaQFjt5S9g9xd1lE+YvXyfd6mtCeRnrUfOLYiTMlNSw==" "integrity": "sha1-s0b27PapX1qBXFg5/HzbIlAvHtc="
}, },
"bip39": { "bip39": {
"version": "2.5.0", "version": "2.5.0",
@ -1701,7 +1701,7 @@
"bn.js": { "bn.js": {
"version": "4.11.8", "version": "4.11.8",
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
"integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" "integrity": "sha1-LN4J617jQfSEdGuwMJsyU7GxRC8="
}, },
"body-parser": { "body-parser": {
"version": "1.18.2", "version": "1.18.2",
@ -1731,7 +1731,7 @@
"brace-expansion": { "brace-expansion": {
"version": "1.1.11", "version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=",
"requires": { "requires": {
"balanced-match": "1.0.0", "balanced-match": "1.0.0",
"concat-map": "0.0.1" "concat-map": "0.0.1"
@ -1832,7 +1832,7 @@
"browserify-zlib": { "browserify-zlib": {
"version": "0.2.0", "version": "0.2.0",
"resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
"integrity": "sha1-KGlFnZqjviRf6P4sofRuLn9U1z8=", "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
"requires": { "requires": {
"pako": "1.0.6" "pako": "1.0.6"
} }
@ -1936,7 +1936,7 @@
"cache-base": { "cache-base": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
"integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=",
"requires": { "requires": {
"collection-visit": "1.0.0", "collection-visit": "1.0.0",
"component-emitter": "1.2.1", "component-emitter": "1.2.1",
@ -2228,7 +2228,7 @@
"cids": { "cids": {
"version": "0.5.3", "version": "0.5.3",
"resolved": "https://registry.npmjs.org/cids/-/cids-0.5.3.tgz", "resolved": "https://registry.npmjs.org/cids/-/cids-0.5.3.tgz",
"integrity": "sha512-ujWbNP8SeLKg5KmGrxYZM4c+ttd+wwvegrdtgmbi2KNFUbQN4pqsGZaGQE3rhjayXTbKFq36bYDbKhsnD0eMsg==", "integrity": "sha1-miW2l+t2+vgHr87DXEq5Nu370KQ=",
"requires": { "requires": {
"multibase": "0.4.0", "multibase": "0.4.0",
"multicodec": "0.2.6", "multicodec": "0.2.6",
@ -2238,7 +2238,7 @@
"cipher-base": { "cipher-base": {
"version": "1.0.4", "version": "1.0.4",
"resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
"integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "integrity": "sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94=",
"requires": { "requires": {
"inherits": "2.0.3", "inherits": "2.0.3",
"safe-buffer": "5.1.1" "safe-buffer": "5.1.1"
@ -2253,7 +2253,7 @@
"clap": { "clap": {
"version": "1.2.3", "version": "1.2.3",
"resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz", "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz",
"integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==", "integrity": "sha1-TzZ0WzIAhJJVf0ZBLWbVDLmbzlE=",
"requires": { "requires": {
"chalk": "1.1.3" "chalk": "1.1.3"
} }
@ -2261,7 +2261,7 @@
"class-utils": { "class-utils": {
"version": "0.3.6", "version": "0.3.6",
"resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
"integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "integrity": "sha1-+TNprouafOAv1B+q0MqDAzGQxGM=",
"requires": { "requires": {
"arr-union": "3.1.0", "arr-union": "3.1.0",
"define-property": "0.2.5", "define-property": "0.2.5",
@ -2515,7 +2515,7 @@
"color-convert": { "color-convert": {
"version": "1.9.1", "version": "1.9.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz",
"integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", "integrity": "sha1-wSYRB66y8pTr/+ye2eytUppgl+0=",
"requires": { "requires": {
"color-name": "1.1.3" "color-name": "1.1.3"
} }
@ -2726,7 +2726,7 @@
"crypto-browserify": { "crypto-browserify": {
"version": "3.12.0", "version": "3.12.0",
"resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
"integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "integrity": "sha1-OWz58xN/A+S45TLFj2mCVOAPgOw=",
"requires": { "requires": {
"browserify-cipher": "1.0.0", "browserify-cipher": "1.0.0",
"browserify-sign": "4.0.4", "browserify-sign": "4.0.4",
@ -2905,7 +2905,7 @@
"debug": { "debug": {
"version": "2.6.9", "version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
"requires": { "requires": {
"ms": "2.0.0" "ms": "2.0.0"
} }
@ -3057,7 +3057,7 @@
"define-property": { "define-property": {
"version": "2.0.2", "version": "2.0.2",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
"integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "integrity": "sha1-1Flono1lS6d+AqgX+HENcCyxbp0=",
"requires": { "requires": {
"is-descriptor": "1.0.2", "is-descriptor": "1.0.2",
"isobject": "3.0.1" "isobject": "3.0.1"
@ -3204,7 +3204,7 @@
"domain-browser": { "domain-browser": {
"version": "1.2.0", "version": "1.2.0",
"resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
"integrity": "sha1-PTH1AZGmdJ3RN1p/Ui6CPULlTto=" "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA=="
}, },
"drbg.js": { "drbg.js": {
"version": "1.0.1", "version": "1.0.1",
@ -3303,7 +3303,7 @@
"end-of-stream": { "end-of-stream": {
"version": "1.4.1", "version": "1.4.1",
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
"integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", "integrity": "sha1-7SljTRm6ukY7bOa4CjchPqtx7EM=",
"requires": { "requires": {
"once": "1.4.0" "once": "1.4.0"
} }
@ -3327,7 +3327,7 @@
"errno": { "errno": {
"version": "0.1.7", "version": "0.1.7",
"resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
"integrity": "sha1-RoTXF3mtOa8Xfj8AeZb3xnyFJhg=", "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==",
"requires": { "requires": {
"prr": "1.0.1" "prr": "1.0.1"
} }
@ -3634,7 +3634,7 @@
"esrecurse": { "esrecurse": {
"version": "4.2.1", "version": "4.2.1",
"resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
"integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", "integrity": "sha1-AHo7n9vCs7uH5IeeoZyS/b05Qs8=",
"requires": { "requires": {
"estraverse": "4.2.0" "estraverse": "4.2.0"
} }
@ -4141,7 +4141,7 @@
"evp_bytestokey": { "evp_bytestokey": {
"version": "1.0.3", "version": "1.0.3",
"resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
"integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "integrity": "sha1-f8vbGY3HGVlDLv4ThCaE4FJaywI=",
"requires": { "requires": {
"md5.js": "1.3.4", "md5.js": "1.3.4",
"safe-buffer": "5.1.1" "safe-buffer": "5.1.1"
@ -4262,7 +4262,7 @@
"is-extendable": { "is-extendable": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
"integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=",
"requires": { "requires": {
"is-plain-object": "2.0.4" "is-plain-object": "2.0.4"
} }
@ -4668,7 +4668,7 @@
"file-loader": { "file-loader": {
"version": "1.1.11", "version": "1.1.11",
"resolved": "https://registry.npmjs.org/file-loader/-/file-loader-1.1.11.tgz", "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-1.1.11.tgz",
"integrity": "sha512-TGR4HU7HUsGg6GCOPJnFk06RhWgEWFLAGWiT6rcD+GRC2keU3s9RGJ+b3Z6/U73jwwNb2gKLJ7YCrp+jvU4ALg==", "integrity": "sha1-b+iGRJsPKpNuQ8q6rAzb+zaVBvg=",
"requires": { "requires": {
"loader-utils": "1.1.0", "loader-utils": "1.1.0",
"schema-utils": "0.4.5" "schema-utils": "0.4.5"
@ -4937,7 +4937,7 @@
"function-bind": { "function-bind": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0="
}, },
"functional-red-black-tree": { "functional-red-black-tree": {
"version": "1.0.1", "version": "1.0.1",
@ -5053,7 +5053,7 @@
"glob": { "glob": {
"version": "7.1.2", "version": "7.1.2",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
"integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=",
"requires": { "requires": {
"fs.realpath": "1.0.0", "fs.realpath": "1.0.0",
"inflight": "1.0.6", "inflight": "1.0.6",
@ -5155,7 +5155,7 @@
"globals": { "globals": {
"version": "9.18.0", "version": "9.18.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
"integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==" "integrity": "sha1-qjiWs+abSH8X4x7SFD1pqOMMLYo="
}, },
"globby": { "globby": {
"version": "5.0.0", "version": "5.0.0",
@ -5490,7 +5490,7 @@
"grunt-mocha-test": { "grunt-mocha-test": {
"version": "0.13.3", "version": "0.13.3",
"resolved": "https://registry.npmjs.org/grunt-mocha-test/-/grunt-mocha-test-0.13.3.tgz", "resolved": "https://registry.npmjs.org/grunt-mocha-test/-/grunt-mocha-test-0.13.3.tgz",
"integrity": "sha512-zQGEsi3d+ViPPi7/4jcj78afKKAKiAA5n61pknQYi25Ugik+aNOuRmiOkmb8mN2CeG8YxT+YdT1H1Q7B/eNkoQ==", "integrity": "sha1-kChHK2Fb2m3eqnswpaFk6YBd4AU=",
"dev": true, "dev": true,
"requires": { "requires": {
"hooker": "0.2.3", "hooker": "0.2.3",
@ -5656,7 +5656,7 @@
"hash.js": { "hash.js": {
"version": "1.1.3", "version": "1.1.3",
"resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz",
"integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", "integrity": "sha1-NA3tvmKQGHFRweodd3o0SJNd+EY=",
"requires": { "requires": {
"inherits": "2.0.3", "inherits": "2.0.3",
"minimalistic-assert": "1.0.0" "minimalistic-assert": "1.0.0"
@ -5720,7 +5720,7 @@
"hosted-git-info": { "hosted-git-info": {
"version": "2.6.0", "version": "2.6.0",
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz",
"integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==" "integrity": "sha1-IyNbKasjDFdqqw1PE/wEawsDgiI="
}, },
"html-comment-regex": { "html-comment-regex": {
"version": "1.1.1", "version": "1.1.1",
@ -5826,7 +5826,7 @@
"ansi-styles": { "ansi-styles": {
"version": "3.2.1", "version": "3.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=",
"requires": { "requires": {
"color-convert": "1.9.1" "color-convert": "1.9.1"
} }
@ -5859,7 +5859,7 @@
"source-map": { "source-map": {
"version": "0.6.1", "version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM="
}, },
"supports-color": { "supports-color": {
"version": "5.3.0", "version": "5.3.0",
@ -6066,7 +6066,7 @@
"invariant": { "invariant": {
"version": "2.2.4", "version": "2.2.4",
"resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
"integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "integrity": "sha1-YQ88ksk1nOHbYW5TgAjSP/NRWOY=",
"requires": { "requires": {
"loose-envify": "1.3.1" "loose-envify": "1.3.1"
} }
@ -6089,7 +6089,7 @@
"ipfs-api": { "ipfs-api": {
"version": "17.2.4", "version": "17.2.4",
"resolved": "https://registry.npmjs.org/ipfs-api/-/ipfs-api-17.2.4.tgz", "resolved": "https://registry.npmjs.org/ipfs-api/-/ipfs-api-17.2.4.tgz",
"integrity": "sha512-GFNy3Cj7EkzCrdyaQpvctHmtwtghzIDPTtW6XTqj+vybSwk2swyEMKaMHimqi8c8N+5+x5wfLpeUyRUhcZ9lDA==", "integrity": "sha1-gTCl+pjhWyr49qJ7cUQs66/ImyQ=",
"requires": { "requires": {
"async": "2.6.0", "async": "2.6.0",
"bs58": "4.0.1", "bs58": "4.0.1",
@ -6126,7 +6126,7 @@
"ipfs-block": { "ipfs-block": {
"version": "0.6.1", "version": "0.6.1",
"resolved": "https://registry.npmjs.org/ipfs-block/-/ipfs-block-0.6.1.tgz", "resolved": "https://registry.npmjs.org/ipfs-block/-/ipfs-block-0.6.1.tgz",
"integrity": "sha512-28dgGsb2YsYnFs+To4cVBX8e/lTCb8eWDzGhN5csj3a/sHMOYrHeK8+Ez0IV67CI3lqKGuG/ZD01Cmd6JUvKrQ==", "integrity": "sha1-uTBT6eqV917SkHgX/79V2ZKgatE=",
"requires": { "requires": {
"cids": "0.5.3" "cids": "0.5.3"
} }
@ -6134,7 +6134,7 @@
"ipfs-unixfs": { "ipfs-unixfs": {
"version": "0.1.14", "version": "0.1.14",
"resolved": "https://registry.npmjs.org/ipfs-unixfs/-/ipfs-unixfs-0.1.14.tgz", "resolved": "https://registry.npmjs.org/ipfs-unixfs/-/ipfs-unixfs-0.1.14.tgz",
"integrity": "sha512-s1tEnwKhdd17MmyC/EUMNVMDYzKhCiHDI11TF8tSBeWkEQp+0WUxkYuqvz0R5TSi2lNDJ/oVnEmwWhki2spUiQ==", "integrity": "sha1-JWQ3/PZC2KtGtRhVguxPIekI7zc=",
"requires": { "requires": {
"protons": "1.0.1" "protons": "1.0.1"
} }
@ -6142,7 +6142,7 @@
"ipld-dag-pb": { "ipld-dag-pb": {
"version": "0.11.4", "version": "0.11.4",
"resolved": "https://registry.npmjs.org/ipld-dag-pb/-/ipld-dag-pb-0.11.4.tgz", "resolved": "https://registry.npmjs.org/ipld-dag-pb/-/ipld-dag-pb-0.11.4.tgz",
"integrity": "sha512-A514Bt4z44bxhPQVzmBFMJsV3res92eBaDX0snzVsLLasBPNh4Z7He8N2mwSeAX9bJNywRBlJbHMQPwC45rqXw==", "integrity": "sha1-sPrlaB+tVpcTLjJdbC/xe18Mtqg=",
"requires": { "requires": {
"async": "2.6.0", "async": "2.6.0",
"bs58": "4.0.1", "bs58": "4.0.1",
@ -6194,7 +6194,7 @@
"is-buffer": { "is-buffer": {
"version": "1.1.6", "version": "1.1.6",
"resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
"integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4="
}, },
"is-builtin-module": { "is-builtin-module": {
"version": "1.0.0", "version": "1.0.0",
@ -6311,7 +6311,7 @@
"is-ipfs": { "is-ipfs": {
"version": "0.3.2", "version": "0.3.2",
"resolved": "https://registry.npmjs.org/is-ipfs/-/is-ipfs-0.3.2.tgz", "resolved": "https://registry.npmjs.org/is-ipfs/-/is-ipfs-0.3.2.tgz",
"integrity": "sha512-82V1j4LMkYy7H4seQQzOWqo7FiW3I64/1/ryo3dhtWKfOvm7ZolLMRQQfGKs4OXWauh5rAkPnamVcRISHwhmpQ==", "integrity": "sha1-xGULg442/QFR3liWsv8xn+iTYYI=",
"requires": { "requires": {
"bs58": "4.0.1", "bs58": "4.0.1",
"cids": "0.5.3", "cids": "0.5.3",
@ -6354,7 +6354,7 @@
"is-odd": { "is-odd": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz", "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz",
"integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==", "integrity": "sha1-dkZiRnH9fqVYzNmieVGC8pWPGyQ=",
"requires": { "requires": {
"is-number": "4.0.0" "is-number": "4.0.0"
}, },
@ -6362,7 +6362,7 @@
"is-number": { "is-number": {
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
"integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==" "integrity": "sha1-ACbjf1RU1z41bf5lZGmYZ8an8P8="
} }
} }
}, },
@ -6398,7 +6398,7 @@
"is-plain-object": { "is-plain-object": {
"version": "2.0.4", "version": "2.0.4",
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
"integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=",
"requires": { "requires": {
"isobject": "3.0.1" "isobject": "3.0.1"
}, },
@ -6483,7 +6483,7 @@
"is-windows": { "is-windows": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
"integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" "integrity": "sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0="
}, },
"isarray": { "isarray": {
"version": "1.0.0", "version": "1.0.0",
@ -6627,7 +6627,7 @@
"json-loader": { "json-loader": {
"version": "0.5.7", "version": "0.5.7",
"resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz",
"integrity": "sha1-3KFKcCNf+C8KyaOr62DTN6NlGF0=" "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w=="
}, },
"json-parse-better-errors": { "json-parse-better-errors": {
"version": "1.0.1", "version": "1.0.1",
@ -6922,7 +6922,7 @@
"libp2p-crypto": { "libp2p-crypto": {
"version": "0.12.1", "version": "0.12.1",
"resolved": "https://registry.npmjs.org/libp2p-crypto/-/libp2p-crypto-0.12.1.tgz", "resolved": "https://registry.npmjs.org/libp2p-crypto/-/libp2p-crypto-0.12.1.tgz",
"integrity": "sha512-1/z8rxZ0DcQNreZhEsl7PnLr7DWOioSvYbKBLGkRwNRiNh1JJLgh0PdTySBb44wkrOGT+TxcGRd7iq3/X6Wxwg==", "integrity": "sha1-SocNJpujFQ3+AU5PmuoeVQdgFcg=",
"requires": { "requires": {
"asn1.js": "5.0.0", "asn1.js": "5.0.0",
"async": "2.6.0", "async": "2.6.0",
@ -6942,7 +6942,7 @@
"asn1.js": { "asn1.js": {
"version": "5.0.0", "version": "5.0.0",
"resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.0.0.tgz", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.0.0.tgz",
"integrity": "sha512-Y+FKviD0uyIWWo/xE0XkUl0x1allKFhzEVJ+//2Dgqpy+n+B77MlPNqvyk7Vx50M9XyVzjnRhDqJAEAsyivlbA==", "integrity": "sha1-Kwq7x/pm3Aqt0GpGg8c2CMMrBpY=",
"requires": { "requires": {
"bn.js": "4.11.8", "bn.js": "4.11.8",
"inherits": "2.0.3", "inherits": "2.0.3",
@ -7942,7 +7942,7 @@
"miller-rabin": { "miller-rabin": {
"version": "4.0.1", "version": "4.0.1",
"resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
"integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "integrity": "sha1-8IA1HIZbDcViqEYpZtqlNUPHik0=",
"requires": { "requires": {
"bn.js": "4.11.8", "bn.js": "4.11.8",
"brorand": "1.1.0" "brorand": "1.1.0"
@ -7951,7 +7951,7 @@
"mime": { "mime": {
"version": "1.4.1", "version": "1.4.1",
"resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
"integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" "integrity": "sha1-Eh+evEnjdm8xGnbh+hyAA8SwOqY="
}, },
"mime-db": { "mime-db": {
"version": "1.33.0", "version": "1.33.0",
@ -7969,7 +7969,7 @@
"mimic-fn": { "mimic-fn": {
"version": "1.2.0", "version": "1.2.0",
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
"integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" "integrity": "sha1-ggyGo5M0ZA6ZUWkovQP8qIBX0CI="
}, },
"mimic-response": { "mimic-response": {
"version": "1.0.0", "version": "1.0.0",
@ -7997,7 +7997,7 @@
"minimatch": { "minimatch": {
"version": "3.0.4", "version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=",
"requires": { "requires": {
"brace-expansion": "1.1.11" "brace-expansion": "1.1.11"
} }
@ -8025,7 +8025,7 @@
"minizlib": { "minizlib": {
"version": "1.1.0", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.1.0.tgz", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.1.0.tgz",
"integrity": "sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA==", "integrity": "sha1-EeE2WM5GvDpwomeqxYNZ0eDCnOs=",
"requires": { "requires": {
"minipass": "2.2.1" "minipass": "2.2.1"
} }
@ -8033,7 +8033,7 @@
"mixin-deep": { "mixin-deep": {
"version": "1.3.1", "version": "1.3.1",
"resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
"integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", "integrity": "sha1-pJ5yaNzhoNlpjkUybFYm3zVD0P4=",
"requires": { "requires": {
"for-in": "1.0.2", "for-in": "1.0.2",
"is-extendable": "1.0.1" "is-extendable": "1.0.1"
@ -8042,7 +8042,7 @@
"is-extendable": { "is-extendable": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
"integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=",
"requires": { "requires": {
"is-plain-object": "2.0.4" "is-plain-object": "2.0.4"
} }
@ -8165,7 +8165,7 @@
"multibase": { "multibase": {
"version": "0.4.0", "version": "0.4.0",
"resolved": "https://registry.npmjs.org/multibase/-/multibase-0.4.0.tgz", "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.4.0.tgz",
"integrity": "sha512-fnYvZJWDn3eSJ7EeWvS8zbOpRwuyPHpDggSnqGXkQMvYED5NdO9nyqnZboGvAT+r/60J8KZ09tW8YJHkS22sFw==", "integrity": "sha1-G9tiyC3gEU+CKh2HUby+6RzS77o=",
"requires": { "requires": {
"base-x": "3.0.4" "base-x": "3.0.4"
} }
@ -8173,7 +8173,7 @@
"multicodec": { "multicodec": {
"version": "0.2.6", "version": "0.2.6",
"resolved": "https://registry.npmjs.org/multicodec/-/multicodec-0.2.6.tgz", "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-0.2.6.tgz",
"integrity": "sha512-VGyRUDkxdJzWnj9x3C49MzI3+TtKKDYNfIBOaWBCNuPk6CE5CwwkL15gJtsLDfLay0fL4xTh4Af3kBbJSxSppw==", "integrity": "sha1-nS1lZfvAgVsTnfyQY3H8Od9N/ds=",
"requires": { "requires": {
"varint": "5.0.0" "varint": "5.0.0"
} }
@ -8181,7 +8181,7 @@
"multihashes": { "multihashes": {
"version": "0.4.13", "version": "0.4.13",
"resolved": "https://registry.npmjs.org/multihashes/-/multihashes-0.4.13.tgz", "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-0.4.13.tgz",
"integrity": "sha512-HwJGEKPCpLlNlgGQA56CYh/Wsqa+c4JAq8+mheIgw7OK5T4QvNJqgp6TH8gZ4q4l1aiWeNat/H/MrFXmTuoFfQ==", "integrity": "sha1-0QvXG9UdJKqJTipvFFcUa7e6wSU=",
"requires": { "requires": {
"bs58": "4.0.1", "bs58": "4.0.1",
"varint": "5.0.0" "varint": "5.0.0"
@ -8190,7 +8190,7 @@
"multihashing-async": { "multihashing-async": {
"version": "0.4.8", "version": "0.4.8",
"resolved": "https://registry.npmjs.org/multihashing-async/-/multihashing-async-0.4.8.tgz", "resolved": "https://registry.npmjs.org/multihashing-async/-/multihashing-async-0.4.8.tgz",
"integrity": "sha512-LCc4lfxmTJOHKIjZjFNgvmfB6nXS/ErLInT9uwU8udFrRm2PH+aTPk3mfCREKmCiSHOlCWiv2O8rlnBx+OjlMw==", "integrity": "sha1-QVcrJaj8aOsxi4ViQJ/dchpyfqE=",
"requires": { "requires": {
"async": "2.6.0", "async": "2.6.0",
"blakejs": "1.1.0", "blakejs": "1.1.0",
@ -8249,7 +8249,7 @@
"nanomatch": { "nanomatch": {
"version": "1.2.9", "version": "1.2.9",
"resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz",
"integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==", "integrity": "sha1-h59xUMstq3pHElkGbBBO7m4Pp8I=",
"requires": { "requires": {
"arr-diff": "4.0.0", "arr-diff": "4.0.0",
"array-unique": "0.3.2", "array-unique": "0.3.2",
@ -8603,7 +8603,7 @@
"node-libs-browser": { "node-libs-browser": {
"version": "2.1.0", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz", "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz",
"integrity": "sha1-X5QmPUBPbkR2fXJpAf/wVHjWAN8=", "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==",
"requires": { "requires": {
"assert": "1.4.1", "assert": "1.4.1",
"browserify-zlib": "0.2.0", "browserify-zlib": "0.2.0",
@ -8761,7 +8761,7 @@
"normalize-package-data": { "normalize-package-data": {
"version": "2.4.0", "version": "2.4.0",
"resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
"integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", "integrity": "sha1-EvlaMH1YNSB1oEkHuErIvpisAS8=",
"requires": { "requires": {
"hosted-git-info": "2.6.0", "hosted-git-info": "2.6.0",
"is-builtin-module": "1.0.0", "is-builtin-module": "1.0.0",
@ -9072,7 +9072,7 @@
"os-locale": { "os-locale": {
"version": "2.1.0", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz",
"integrity": "sha1-QrwpAKa1uL0XN2yOiCtlr8zyS/I=", "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==",
"requires": { "requires": {
"execa": "0.7.0", "execa": "0.7.0",
"lcid": "1.0.0", "lcid": "1.0.0",
@ -9130,7 +9130,7 @@
"p-limit": { "p-limit": {
"version": "1.2.0", "version": "1.2.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz",
"integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", "integrity": "sha1-DpK2vty1nwIsE9DxlJ3ILRWQnxw=",
"requires": { "requires": {
"p-try": "1.0.0" "p-try": "1.0.0"
} }
@ -9169,7 +9169,7 @@
"pako": { "pako": {
"version": "1.0.6", "version": "1.0.6",
"resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz",
"integrity": "sha1-AQEhG6pwxLykoPY/Igbpe3368lg=" "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg=="
}, },
"parse-asn1": { "parse-asn1": {
"version": "5.1.0", "version": "5.1.0",
@ -9309,7 +9309,7 @@
"peer-info": { "peer-info": {
"version": "0.11.6", "version": "0.11.6",
"resolved": "https://registry.npmjs.org/peer-info/-/peer-info-0.11.6.tgz", "resolved": "https://registry.npmjs.org/peer-info/-/peer-info-0.11.6.tgz",
"integrity": "sha512-xrVNiAF1IhVJNGEg5P2UQN+subaEkszT8YkC3zdy06MK0vTH3cMHB+HH+ZURkoSLssc3HbK58ecXeKpQ/4zq5w==", "integrity": "sha1-BICwAw0t+P1PCYebJppxWyvSuhI=",
"requires": { "requires": {
"lodash.uniqby": "4.7.0", "lodash.uniqby": "4.7.0",
"multiaddr": "3.0.2", "multiaddr": "3.0.2",
@ -9397,7 +9397,7 @@
"postcss": { "postcss": {
"version": "5.2.18", "version": "5.2.18",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
"integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
"requires": { "requires": {
"chalk": "1.1.3", "chalk": "1.1.3",
"js-base64": "2.4.3", "js-base64": "2.4.3",
@ -9581,7 +9581,7 @@
"ansi-styles": { "ansi-styles": {
"version": "3.2.1", "version": "3.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=",
"requires": { "requires": {
"color-convert": "1.9.1" "color-convert": "1.9.1"
} }
@ -9614,7 +9614,7 @@
"source-map": { "source-map": {
"version": "0.6.1", "version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM="
}, },
"supports-color": { "supports-color": {
"version": "5.3.0", "version": "5.3.0",
@ -9638,7 +9638,7 @@
"ansi-styles": { "ansi-styles": {
"version": "3.2.1", "version": "3.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=",
"requires": { "requires": {
"color-convert": "1.9.1" "color-convert": "1.9.1"
} }
@ -9671,7 +9671,7 @@
"source-map": { "source-map": {
"version": "0.6.1", "version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM="
}, },
"supports-color": { "supports-color": {
"version": "5.3.0", "version": "5.3.0",
@ -9695,7 +9695,7 @@
"ansi-styles": { "ansi-styles": {
"version": "3.2.1", "version": "3.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=",
"requires": { "requires": {
"color-convert": "1.9.1" "color-convert": "1.9.1"
} }
@ -9728,7 +9728,7 @@
"source-map": { "source-map": {
"version": "0.6.1", "version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM="
}, },
"supports-color": { "supports-color": {
"version": "5.3.0", "version": "5.3.0",
@ -9752,7 +9752,7 @@
"ansi-styles": { "ansi-styles": {
"version": "3.2.1", "version": "3.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=",
"requires": { "requires": {
"color-convert": "1.9.1" "color-convert": "1.9.1"
} }
@ -9785,7 +9785,7 @@
"source-map": { "source-map": {
"version": "0.6.1", "version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM="
}, },
"supports-color": { "supports-color": {
"version": "5.3.0", "version": "5.3.0",
@ -9932,7 +9932,7 @@
"private": { "private": {
"version": "0.1.8", "version": "0.1.8",
"resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
"integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==" "integrity": "sha1-I4Hts2ifelPWUxkAYPz4ItLzaP8="
}, },
"process": { "process": {
"version": "0.11.10", "version": "0.11.10",
@ -9942,7 +9942,7 @@
"process-nextick-args": { "process-nextick-args": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
"integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" "integrity": "sha1-o31zL0JxtKsa0HDTVQjoKQeI/6o="
}, },
"progress": { "progress": {
"version": "2.0.0", "version": "2.0.0",
@ -9970,7 +9970,7 @@
"promisify-es6": { "promisify-es6": {
"version": "1.0.3", "version": "1.0.3",
"resolved": "https://registry.npmjs.org/promisify-es6/-/promisify-es6-1.0.3.tgz", "resolved": "https://registry.npmjs.org/promisify-es6/-/promisify-es6-1.0.3.tgz",
"integrity": "sha512-N9iVG+CGJsI4b4ZGazjwLnxErD2d9Pe4DPvvXSxYA9tFNu8ymXME4Qs5HIQ0LMJpNM7zj+m0NlNnNeqFpKzqnA==" "integrity": "sha1-sBJmjE3zyWXOE9qsKzpNFyapY0Y="
}, },
"promptly": { "promptly": {
"version": "2.2.0", "version": "2.2.0",
@ -9991,12 +9991,12 @@
"protocol-buffers-schema": { "protocol-buffers-schema": {
"version": "3.3.2", "version": "3.3.2",
"resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.3.2.tgz", "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.3.2.tgz",
"integrity": "sha512-Xdayp8sB/mU+sUV4G7ws8xtYMGdQnxbeIfLjyO9TZZRJdztBGhlmbI5x1qcY4TG5hBkIKGnc28i7nXxaugu88w==" "integrity": "sha1-AENPYItOjfVMWeBw7+78N/tLuFk="
}, },
"protons": { "protons": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/protons/-/protons-1.0.1.tgz", "resolved": "https://registry.npmjs.org/protons/-/protons-1.0.1.tgz",
"integrity": "sha512-+0ZKnfVs+4c43tbAQ5j0Mck8wPcLnlxUYzKQoB4iDW4ocdXGnN4P+0dDbgX1FTpoY9+7P2Tn2scJyHHqj+S/lQ==", "integrity": "sha1-HBBxRMB/wtHLi2y3ZFHmqTgjdnY=",
"requires": { "requires": {
"protocol-buffers-schema": "3.3.2", "protocol-buffers-schema": "3.3.2",
"safe-buffer": "5.1.1", "safe-buffer": "5.1.1",
@ -10058,7 +10058,7 @@
"pump": { "pump": {
"version": "1.0.3", "version": "1.0.3",
"resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz",
"integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", "integrity": "sha1-Xf6DEcM7v2/BgmH580cCxHwIqVQ=",
"requires": { "requires": {
"end-of-stream": "1.4.1", "end-of-stream": "1.4.1",
"once": "1.4.0" "once": "1.4.0"
@ -10138,7 +10138,7 @@
"randombytes": { "randombytes": {
"version": "2.0.6", "version": "2.0.6",
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz",
"integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", "integrity": "sha1-0wLFIpSFiISKjTAMkytEwkIx2oA=",
"requires": { "requires": {
"safe-buffer": "5.1.1" "safe-buffer": "5.1.1"
} }
@ -10146,7 +10146,7 @@
"randomfill": { "randomfill": {
"version": "1.0.4", "version": "1.0.4",
"resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
"integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "integrity": "sha1-ySGW/IarQr6YPxvzF3giSTHWFFg=",
"requires": { "requires": {
"randombytes": "2.0.6", "randombytes": "2.0.6",
"safe-buffer": "5.1.1" "safe-buffer": "5.1.1"
@ -10335,12 +10335,12 @@
"regenerator-runtime": { "regenerator-runtime": {
"version": "0.11.1", "version": "0.11.1",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
"integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" "integrity": "sha1-vgWtf5v30i4Fb5cmzuUBf78Z4uk="
}, },
"regenerator-transform": { "regenerator-transform": {
"version": "0.10.1", "version": "0.10.1",
"resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz",
"integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", "integrity": "sha1-HkmWg3Ix2ot/PPQRTXG1aRoGgN0=",
"requires": { "requires": {
"babel-runtime": "6.26.0", "babel-runtime": "6.26.0",
"babel-types": "6.26.0", "babel-types": "6.26.0",
@ -10350,7 +10350,7 @@
"regex-cache": { "regex-cache": {
"version": "0.4.4", "version": "0.4.4",
"resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz",
"integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", "integrity": "sha1-db3FiioUls7EihKDW8VMjVYjNt0=",
"requires": { "requires": {
"is-equal-shallow": "0.1.3" "is-equal-shallow": "0.1.3"
} }
@ -10358,7 +10358,7 @@
"regex-not": { "regex-not": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
"integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "integrity": "sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw=",
"requires": { "requires": {
"extend-shallow": "3.0.2", "extend-shallow": "3.0.2",
"safe-regex": "1.1.0" "safe-regex": "1.1.0"
@ -10552,7 +10552,7 @@
"ret": { "ret": {
"version": "0.1.15", "version": "0.1.15",
"resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
"integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" "integrity": "sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w="
}, },
"right-align": { "right-align": {
"version": "0.1.3", "version": "0.1.3",
@ -10565,7 +10565,7 @@
"rimraf": { "rimraf": {
"version": "2.6.2", "version": "2.6.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
"integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "integrity": "sha1-LtgVDSShbqhlHm1u8PR8QVjOejY=",
"requires": { "requires": {
"glob": "7.1.2" "glob": "7.1.2"
} }
@ -10681,7 +10681,7 @@
"sax": { "sax": {
"version": "1.2.4", "version": "1.2.4",
"resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
"integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" "integrity": "sha1-KBYjTiN4vdxOU1T6tcqold9xANk="
}, },
"scandirectory": { "scandirectory": {
"version": "2.5.0", "version": "2.5.0",
@ -10696,7 +10696,7 @@
"schema-utils": { "schema-utils": {
"version": "0.4.5", "version": "0.4.5",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.5.tgz", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.5.tgz",
"integrity": "sha512-yYrjb9TX2k/J1Y5UNy3KYdZq10xhYcF8nMpAW6o3hy6Q8WSIEf9lJHG/ePnOBfziPM3fvQwfOwa13U/Fh8qTfA==", "integrity": "sha1-IYNvBgiqwXt4+ePiTa/xSlyhOj4=",
"requires": { "requires": {
"ajv": "6.2.1", "ajv": "6.2.1",
"ajv-keywords": "3.1.0" "ajv-keywords": "3.1.0"
@ -10735,7 +10735,7 @@
"secp256k1": { "secp256k1": {
"version": "3.5.0", "version": "3.5.0",
"resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-3.5.0.tgz", "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-3.5.0.tgz",
"integrity": "sha512-e5QIJl8W7Y4tT6LHffVcZAxJjvpgE5Owawv6/XCYPQljE9aP2NFFddQ8OYMKhdLshNu88FfL3qCN3/xYkXGRsA==", "integrity": "sha1-Z307io4E4aX6OBoa5DfFQge3ONA=",
"requires": { "requires": {
"bindings": "1.3.0", "bindings": "1.3.0",
"bip66": "1.1.5", "bip66": "1.1.5",
@ -10773,12 +10773,12 @@
"semver": { "semver": {
"version": "5.5.0", "version": "5.5.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
"integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" "integrity": "sha1-3Eu8emyp2Rbe5dQ1FvAJK1j3uKs="
}, },
"send": { "send": {
"version": "0.16.2", "version": "0.16.2",
"resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
"integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", "integrity": "sha1-bsyh4PjBVtFBWXVZhI32RzCmu8E=",
"requires": { "requires": {
"debug": "2.6.9", "debug": "2.6.9",
"depd": "1.1.2", "depd": "1.1.2",
@ -10805,7 +10805,7 @@
"serve-static": { "serve-static": {
"version": "1.13.2", "version": "1.13.2",
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz",
"integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", "integrity": "sha1-CV6Ecv1bRiN9tQzkhqQ/S4bGzsE=",
"requires": { "requires": {
"encodeurl": "1.0.2", "encodeurl": "1.0.2",
"escape-html": "1.0.3", "escape-html": "1.0.3",
@ -10838,7 +10838,7 @@
"set-value": { "set-value": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
"integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", "integrity": "sha1-ca5KiPD+77v1LR6mBPP7MV67YnQ=",
"requires": { "requires": {
"extend-shallow": "2.0.1", "extend-shallow": "2.0.1",
"is-extendable": "0.1.1", "is-extendable": "0.1.1",
@ -11012,7 +11012,7 @@
"snapdragon": { "snapdragon": {
"version": "0.8.2", "version": "0.8.2",
"resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
"integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "integrity": "sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0=",
"requires": { "requires": {
"base": "0.11.2", "base": "0.11.2",
"debug": "2.6.9", "debug": "2.6.9",
@ -11096,7 +11096,7 @@
"snapdragon-node": { "snapdragon-node": {
"version": "2.1.1", "version": "2.1.1",
"resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
"integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=",
"requires": { "requires": {
"define-property": "1.0.0", "define-property": "1.0.0",
"isobject": "3.0.1", "isobject": "3.0.1",
@ -11121,7 +11121,7 @@
"snapdragon-util": { "snapdragon-util": {
"version": "3.0.1", "version": "3.0.1",
"resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
"integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=",
"requires": { "requires": {
"kind-of": "3.2.2" "kind-of": "3.2.2"
} }
@ -11323,7 +11323,7 @@
"source-list-map": { "source-list-map": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz",
"integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==" "integrity": "sha1-qqR0A/eyRakvvJfqCPJQ1gh+0IU="
}, },
"source-map": { "source-map": {
"version": "0.5.7", "version": "0.5.7",
@ -11345,7 +11345,7 @@
"source-map-support": { "source-map-support": {
"version": "0.4.18", "version": "0.4.18",
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz",
"integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", "integrity": "sha1-Aoam3ovkJkEzhZTpfM6nXwosWF8=",
"requires": { "requires": {
"source-map": "0.5.7" "source-map": "0.5.7"
} }
@ -11358,7 +11358,7 @@
"spdx-correct": { "spdx-correct": {
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz",
"integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", "integrity": "sha1-BaW01xU6GVvJLDxCW2nzsqlSTII=",
"requires": { "requires": {
"spdx-expression-parse": "3.0.0", "spdx-expression-parse": "3.0.0",
"spdx-license-ids": "3.0.0" "spdx-license-ids": "3.0.0"
@ -11367,12 +11367,12 @@
"spdx-exceptions": { "spdx-exceptions": {
"version": "2.1.0", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz",
"integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==" "integrity": "sha1-LHrmEFbHFKW5ubKyr30xHvXHj+k="
}, },
"spdx-expression-parse": { "spdx-expression-parse": {
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
"integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", "integrity": "sha1-meEZt6XaAOBUkcn6M4t5BII7QdA=",
"requires": { "requires": {
"spdx-exceptions": "2.1.0", "spdx-exceptions": "2.1.0",
"spdx-license-ids": "3.0.0" "spdx-license-ids": "3.0.0"
@ -11381,12 +11381,12 @@
"spdx-license-ids": { "spdx-license-ids": {
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz",
"integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==" "integrity": "sha1-enzShHDMbToc/m1miG9rxDDTrIc="
}, },
"split-string": { "split-string": {
"version": "3.1.0", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
"integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=",
"requires": { "requires": {
"extend-shallow": "3.0.2" "extend-shallow": "3.0.2"
} }
@ -11394,7 +11394,7 @@
"split2": { "split2": {
"version": "2.2.0", "version": "2.2.0",
"resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz", "resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz",
"integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==", "integrity": "sha1-GGsldbz4PoW30YRldWI47k7kJJM=",
"requires": { "requires": {
"through2": "2.0.3" "through2": "2.0.3"
} }
@ -11570,7 +11570,7 @@
"string-width": { "string-width": {
"version": "2.1.1", "version": "2.1.1",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
"integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=",
"requires": { "requires": {
"is-fullwidth-code-point": "2.0.0", "is-fullwidth-code-point": "2.0.0",
"strip-ansi": "4.0.0" "strip-ansi": "4.0.0"
@ -11689,7 +11689,7 @@
"style-loader": { "style-loader": {
"version": "0.19.1", "version": "0.19.1",
"resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.19.1.tgz", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.19.1.tgz",
"integrity": "sha512-IRE+ijgojrygQi3rsqT0U4dd+UcPCqcVvauZpCnQrGAlEe+FUIyrK93bUDScamesjP08JlQNsFJU+KmPedP5Og==", "integrity": "sha1-WR/8gLzv4mi3fF2evAUF13Jhn4U=",
"requires": { "requires": {
"loader-utils": "1.1.0", "loader-utils": "1.1.0",
"schema-utils": "0.3.0" "schema-utils": "0.3.0"
@ -11901,7 +11901,7 @@
"tar": { "tar": {
"version": "3.2.1", "version": "3.2.1",
"resolved": "https://registry.npmjs.org/tar/-/tar-3.2.1.tgz", "resolved": "https://registry.npmjs.org/tar/-/tar-3.2.1.tgz",
"integrity": "sha512-ZSzds1E0IqutvMU8HxjMaU8eB7urw2fGwTq88ukDOVuUIh0656l7/P7LiVPxhO5kS4flcRJQk8USG+cghQbTUQ==", "integrity": "sha1-mqjkHIjwnnbBZgdbxx+T1RZuYbE=",
"requires": { "requires": {
"chownr": "1.0.1", "chownr": "1.0.1",
"minipass": "2.2.1", "minipass": "2.2.1",
@ -12070,7 +12070,7 @@
"to-regex": { "to-regex": {
"version": "3.0.2", "version": "3.0.2",
"resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
"integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "integrity": "sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4=",
"requires": { "requires": {
"define-property": "2.0.2", "define-property": "2.0.2",
"extend-shallow": "3.0.2", "extend-shallow": "3.0.2",
@ -12191,7 +12191,7 @@
"typedarray-to-buffer": { "typedarray-to-buffer": {
"version": "3.1.5", "version": "3.1.5",
"resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
"integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "integrity": "sha1-qX7nqf9CaRufeD/xvFES/j/KkIA=",
"requires": { "requires": {
"is-typedarray": "1.0.0" "is-typedarray": "1.0.0"
} }
@ -12436,7 +12436,7 @@
"url-loader": { "url-loader": {
"version": "0.6.2", "version": "0.6.2",
"resolved": "https://registry.npmjs.org/url-loader/-/url-loader-0.6.2.tgz", "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-0.6.2.tgz",
"integrity": "sha512-h3qf9TNn53BpuXTTcpC+UehiRrl0Cv45Yr/xWayApjw6G8Bg2dGke7rIwDQ39piciWCWrC+WiqLjOh3SUp9n0Q==", "integrity": "sha1-oAenEJYg6dmI0UvOZ3od7Lmpk/c=",
"requires": { "requires": {
"loader-utils": "1.1.0", "loader-utils": "1.1.0",
"mime": "1.4.1", "mime": "1.4.1",
@ -12485,7 +12485,7 @@
"use": { "use": {
"version": "3.1.0", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz", "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz",
"integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==", "integrity": "sha1-FHFr8D/f79AwQK71jYtLhfOnxUQ=",
"requires": { "requires": {
"kind-of": "6.0.2" "kind-of": "6.0.2"
}, },
@ -12540,7 +12540,7 @@
"validate-npm-package-license": { "validate-npm-package-license": {
"version": "3.0.3", "version": "3.0.3",
"resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz",
"integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", "integrity": "sha1-gWQ7y+8b3+zUYjeT3EZIlIupgzg=",
"requires": { "requires": {
"spdx-correct": "3.0.0", "spdx-correct": "3.0.0",
"spdx-expression-parse": "3.0.0" "spdx-expression-parse": "3.0.0"
@ -13075,7 +13075,7 @@
"webpack": { "webpack": {
"version": "3.11.0", "version": "3.11.0",
"resolved": "https://registry.npmjs.org/webpack/-/webpack-3.11.0.tgz", "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.11.0.tgz",
"integrity": "sha512-3kOFejWqj5ISpJk4Qj/V7w98h9Vl52wak3CLiw/cDOfbVTq7FeoZ0SdoHHY9PYlHr50ZS42OfvzE2vB4nncKQg==", "integrity": "sha1-d9pFGx17SxF62vQaGpO1dC8k2JQ=",
"requires": { "requires": {
"acorn": "5.5.3", "acorn": "5.5.3",
"acorn-dynamic-import": "2.0.2", "acorn-dynamic-import": "2.0.2",
@ -13511,7 +13511,7 @@
"webpack-sources": { "webpack-sources": {
"version": "1.1.0", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.1.0.tgz", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.1.0.tgz",
"integrity": "sha1-oQHrrlnWUHNU1x2AE5UKOot6WlQ=", "integrity": "sha512-aqYp18kPphgoO5c/+NaUvEeACtZjMESmDChuD3NBciVpah3XpMEU9VAAtIaB1BsfJWWTSdv8Vv1m3T0aRk2dUw==",
"requires": { "requires": {
"source-list-map": "2.0.0", "source-list-map": "2.0.0",
"source-map": "0.6.1" "source-map": "0.6.1"
@ -13520,7 +13520,7 @@
"source-map": { "source-map": {
"version": "0.6.1", "version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=" "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
} }
} }
}, },
@ -13546,7 +13546,7 @@
"which": { "which": {
"version": "1.3.0", "version": "1.3.0",
"resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz",
"integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", "integrity": "sha1-/wS9/AEO5UfXgL7DjhrBwnd9JTo=",
"requires": { "requires": {
"isexe": "2.0.0" "isexe": "2.0.0"
} }

View File

@ -3,6 +3,9 @@ const assert = require('assert');
const sinon = require('sinon'); const sinon = require('sinon');
const AccountParser = require('../lib/contracts/accountParser'); const AccountParser = require('../lib/contracts/accountParser');
let TestLogger = require('../lib/tests/test_logger.js'); let TestLogger = require('../lib/tests/test_logger.js');
const Web3 = require('web3');
const i18n = require('../lib/i18n/i18n.js');
i18n.setOrDetectLocale('en');
describe('embark.AccountParser', function () { describe('embark.AccountParser', function () {
describe('#getAccount', function () { describe('#getAccount', function () {
@ -25,7 +28,7 @@ describe('embark.AccountParser', function () {
privateKey: 'myKey' privateKey: 'myKey'
}, web3, testLogger); }, web3, testLogger);
assert.deepEqual(account, {key: '0xmyKey'}); assert.deepEqual(account, {key: '0xmyKey', hexBalance: null});
}); });
it('should return two accounts from the keys in the file', function () { it('should return two accounts from the keys in the file', function () {
@ -34,8 +37,8 @@ describe('embark.AccountParser', function () {
}, web3, testLogger); }, web3, testLogger);
assert.deepEqual(account, [ assert.deepEqual(account, [
{key: '0xkey1'}, {key: '0xkey1', hexBalance: null},
{key: '0xkey2'} {key: '0xkey2', hexBalance: null}
]); ]);
}); });
@ -45,7 +48,7 @@ describe('embark.AccountParser', function () {
}, web3, testLogger); }, web3, testLogger);
assert.deepEqual(account, assert.deepEqual(account,
[{key: "0xf942d5d524ec07158df4354402bfba8d928c99d0ab34d0799a6158d56156d986"}]); [{key: "0xf942d5d524ec07158df4354402bfba8d928c99d0ab34d0799a6158d56156d986", hexBalance: null}]);
}); });
it('should return two accounts from the mnemonic using numAddresses', function () { it('should return two accounts from the mnemonic using numAddresses', function () {
@ -56,8 +59,8 @@ describe('embark.AccountParser', function () {
assert.deepEqual(account, assert.deepEqual(account,
[ [
{key: "0xf942d5d524ec07158df4354402bfba8d928c99d0ab34d0799a6158d56156d986"}, {key: "0xf942d5d524ec07158df4354402bfba8d928c99d0ab34d0799a6158d56156d986", hexBalance: null},
{key: "0x88f37cfbaed8c0c515c62a17a3a1ce2f397d08bbf20dcc788b69f11b5a5c9791"} {key: "0x88f37cfbaed8c0c515c62a17a3a1ce2f397d08bbf20dcc788b69f11b5a5c9791", hexBalance: null}
]); ]);
}); });
@ -68,6 +71,46 @@ describe('embark.AccountParser', function () {
assert.strictEqual(account, null); assert.strictEqual(account, null);
}); });
});
describe('getHexBalance', () => {
it('should return default if no balance', () => {
const hexBalance = AccountParser.getHexBalance(null, Web3);
assert.strictEqual(hexBalance, 0xFFFFFFFFFFFFFFFFFF);
});
it('should return the balance string if already hexadecimal', () => {
const hexBalance = AccountParser.getHexBalance('0xFFF', Web3);
assert.strictEqual(hexBalance, '0xFFF');
});
it('should convert to hex when decimal', () => {
const hexBalance = AccountParser.getHexBalance('500', Web3);
assert.strictEqual(hexBalance, '0x1f4');
});
it('should convert to hex with eth string', () => {
const hexBalance = AccountParser.getHexBalance('4ether', Web3);
assert.strictEqual(hexBalance, '0x3782dace9d900000');
});
it('should convert to hex with eth string with space', () => {
const hexBalance = AccountParser.getHexBalance('673 shannon', Web3);
assert.strictEqual(hexBalance, '0x9cb1ed0a00');
});
it('should fail when string is not good', () => {
try {
AccountParser.getHexBalance('nogood', Web3);
assert.fail('Should have failed at getHexBalance');
} catch (e) {
// Ok
}
});
}); });
}); });

View File

@ -1,7 +1,7 @@
/*global contract, config, it, embark*/ /*global contract, config, it*/
const assert = require('assert'); const assert = require('assert');
const AnotherStorage = embark.require('Embark/contracts/AnotherStorage'); const AnotherStorage = require('Embark/contracts/AnotherStorage');
const SimpleStorage = embark.require('Embark/contracts/SimpleStorage'); const SimpleStorage = require('Embark/contracts/SimpleStorage');
config({ config({
contracts: { contracts: {

View File

@ -1,8 +1,8 @@
/*global contract, config, it, embark*/ /*global contract, config, it*/
const assert = require('assert'); const assert = require('assert');
const SomeContract = embark.require('Embark/contracts/SomeContract'); const SomeContract = require('Embark/contracts/SomeContract');
const SimpleStorage = embark.require('Embark/contracts/SimpleStorage'); const SimpleStorage = require('Embark/contracts/SimpleStorage');
const MyToken2 = embark.require('Embark/contracts/MyToken2'); const MyToken2 = require('Embark/contracts/MyToken2');
config({ config({
contracts: { contracts: {

View File

@ -1,6 +1,6 @@
/*global contract, config, it, embark*/ /*global contract, config, it*/
const assert = require('assert'); const assert = require('assert');
const Test2 = embark.require('Embark/contracts/Test2'); const Test2 = require('Embark/contracts/Test2');
config({ config({
contracts: { contracts: {

View File

@ -1,6 +1,6 @@
/*global contract, config, it, embark*/ /*global contract, config, it*/
const assert = require('assert'); const assert = require('assert');
const SimpleStorage = embark.require('Embark/contracts/SimpleStorage'); const SimpleStorage = require('Embark/contracts/SimpleStorage');
config({ config({
contracts: { contracts: {

View File

@ -1,10 +1,10 @@
/*global describe, config, it, embark*/ /*global describe, config, it*/
const assert = require('assert'); const assert = require('assert');
const Token = embark.require('Embark/contracts/Token'); const Token = require('Embark/contracts/Token');
const MyToken = embark.require('Embark/contracts/MyToken'); const MyToken = require('Embark/contracts/MyToken');
const MyToken2 = embark.require('Embark/contracts/MyToken2'); const MyToken2 = require('Embark/contracts/MyToken2');
const AlreadyDeployedToken = embark.require('Embark/contracts/AlreadyDeployedToken'); const AlreadyDeployedToken = require('Embark/contracts/AlreadyDeployedToken');
const Test = embark.require('Embark/contracts/Test'); const Test = require('Embark/contracts/Test');
config({ config({
contracts: { contracts: {

View File

@ -1,9 +1,19 @@
/*global contract, config, it, embark*/ /*global contract, config, it, web3*/
const assert = require('assert'); const assert = require('assert');
const AnotherStorage = embark.require('Embark/contracts/AnotherStorage'); const AnotherStorage = require('Embark/contracts/AnotherStorage');
const SimpleStorage = embark.require('Embark/contracts/SimpleStorage'); const SimpleStorage = require('Embark/contracts/SimpleStorage');
let accounts;
config({ config({
deployment: {
"accounts": [
{
"mnemonic": "example exile argue silk regular smile grass bomb merge arm assist farm",
balance: "5ether"
}
]
},
contracts: { contracts: {
"SimpleStorage": { "SimpleStorage": {
args: [100] args: [100]
@ -12,13 +22,27 @@ config({
args: ["$SimpleStorage"] args: ["$SimpleStorage"]
} }
} }
}, (err, theAccounts) => {
accounts = theAccounts;
}); });
contract("AnotherStorage", function() { contract("AnotherStorage", function() {
this.timeout(0); this.timeout(0);
it("should have account with balance", async function() {
let balance = await web3.eth.getBalance(accounts[0]);
assert.ok(parseInt(balance, 10) > 4900000000000000000);
assert.ok(parseInt(balance, 10) <= 5000000000000000000);
});
it("set SimpleStorage address", async function() { it("set SimpleStorage address", async function() {
let result = await AnotherStorage.methods.simpleStorageAddress().call(); let result = await AnotherStorage.methods.simpleStorageAddress().call();
assert.equal(result.toString(), SimpleStorage.options.address); assert.equal(result.toString(), SimpleStorage.options.address);
}); });
it('should set the balance correctly', async function () {
const balance = await web3.eth.getBalance(accounts[0]);
assert.ok(balance < 5000000000000000000);
assert.ok(balance > 4000000000000000000);
});
}); });

View File

@ -1,8 +1,8 @@
/*global contract, config, it, embark*/ /*global contract, config, it*/
const assert = require('assert'); const assert = require('assert');
const SomeContract = embark.require('Embark/contracts/SomeContract'); const SomeContract = require('Embark/contracts/SomeContract');
const SimpleStorage = embark.require('Embark/contracts/SimpleStorage'); const SimpleStorage = require('Embark/contracts/SimpleStorage');
const MyToken2 = embark.require('Embark/contracts/MyToken2'); const MyToken2 = require('Embark/contracts/MyToken2');
config({ config({
contracts: { contracts: {

View File

@ -1,6 +1,6 @@
/*global contract, config, it, embark*/ /*global contract, config, it*/
const assert = require('assert'); const assert = require('assert');
const Test2 = embark.require('Embark/contracts/Test2'); const Test2 = require('Embark/contracts/Test2');
config({ config({
contracts: { contracts: {

View File

@ -1,7 +1,7 @@
/*global contract, config, it, embark*/ /*global contract, config, it*/
const assert = require('assert'); const assert = require('assert');
const PluginStorage = embark.require('Embark/contracts/PluginStorage'); const PluginStorage = require('Embark/contracts/PluginStorage');
const SimpleStorage = embark.require('Embark/contracts/SimpleStorage'); const SimpleStorage = require('Embark/contracts/SimpleStorage');
config({ config({
contracts: { contracts: {

View File

@ -0,0 +1,23 @@
/*global contract, config, it, embark, assert, web3*/
const SimpleStorage = embark.require('Embark/contracts/SimpleStorage');
let accounts;
contract("SimpleStorage Deploy", function () {
let SimpleStorageInstance;
before(async function() {
SimpleStorageInstance = await SimpleStorage.deploy({arguments: [150]}).send();
});
it("should set constructor value", async function () {
let result = await SimpleStorageInstance.methods.storedData().call();
assert.strictEqual(parseInt(result, 10), 150);
});
it("set storage value", async function () {
await SimpleStorageInstance.methods.set(150).send();
let result = await SimpleStorageInstance.methods.get().call();
assert.strictEqual(parseInt(result, 10), 499650);
});
});

View File

@ -1,5 +1,5 @@
/*global contract, config, it, embark, assert, web3*/ /*global contract, config, it, assert, web3*/
const SimpleStorage = embark.require('Embark/contracts/SimpleStorage'); const SimpleStorage = require('Embark/contracts/SimpleStorage');
let accounts; let accounts;
config({ config({

View File

@ -1,10 +1,10 @@
/*global describe, config, it, embark*/ /*global describe, config, it*/
const assert = require('assert'); const assert = require('assert');
const Token = embark.require('Embark/contracts/Token'); const Token = require('Embark/contracts/Token');
const MyToken = embark.require('Embark/contracts/MyToken'); const MyToken = require('Embark/contracts/MyToken');
const MyToken2 = embark.require('Embark/contracts/MyToken2'); const MyToken2 = require('Embark/contracts/MyToken2');
const AlreadyDeployedToken = embark.require('Embark/contracts/AlreadyDeployedToken'); const AlreadyDeployedToken = require('Embark/contracts/AlreadyDeployedToken');
const Test = embark.require('Embark/contracts/Test'); const Test = require('Embark/contracts/Test');
config({ config({
contracts: { contracts: {