diff --git a/lib/cmd.js b/lib/cmd.js index 081f3d896..2550e48fa 100644 --- a/lib/cmd.js +++ b/lib/cmd.js @@ -94,6 +94,7 @@ class Cmd { .command('build [environment]') .option('--contracts', 'only compile contracts into Embark wrappers') .option('--logfile [logfile]', __('filename to output logs (default: none)')) + .option('-c, --client [client]', __('Use a specific ethereum client or simulator (supported: %s)', 'geth, testrpc')) .option('--loglevel [loglevel]', __('level of logging to display') + ' ["error", "warn", "info", "debug", "trace"]', /^(error|warn|info|debug|trace)$/i, 'debug') .option('--locale [locale]', __('language to use (default: en)')) .description(__('deploy and build dapp at ') + 'dist/ (default: development)') @@ -103,6 +104,7 @@ class Cmd { _options.logFile = _options.logfile; // fix casing _options.logLevel = _options.loglevel; // fix casing _options.onlyCompile = _options.contracts; + _options.client = _options.client || 'geth'; embark.build(_options); }); } @@ -111,6 +113,7 @@ class Cmd { program .command('run [environment]') .option('-p, --port [port]', __('port to run the dev webserver (default: %s)', '8000')) + .option('-c, --client [client]', __('Use a specific ethereum client or simulator (supported: %s)', 'geth, testrpc')) .option('-b, --host [host]', __('host to run the dev webserver (default: %s)', 'localhost')) .option('--noserver', __('disable the development webserver')) .option('--nodashboard', __('simple mode, disables the dashboard')) @@ -125,6 +128,8 @@ class Cmd { env: env || 'development', serverPort: options.port, serverHost: options.host, + client: options.client || 'geth', + locale: options.locale, runWebserver: !options.noserver, useDashboard: !options.nodashboard, logFile: options.logfile, @@ -197,12 +202,14 @@ class Cmd { .option('--logfile [logfile]', __('filename to output logs (default: %s)', 'none')) .option('--loglevel [loglevel]', __('level of logging to display') + ' ["error", "warn", "info", "debug", "trace"]', /^(error|warn|info|debug|trace)$/i, 'debug') .option('--locale [locale]', __('language to use (default: en)')) + .option('-c, --client [client]', __('Use a specific ethereum client or simulator (supported: %s)', 'geth, testrpc')) .description(__('Upload your dapp to a decentralized storage') + ' (e.g embark upload ipfs).') .action(function (env, _options) { i18n.setOrDetectLocale(_options.locale); _options.env = env || 'development'; _options.logFile = _options.logfile; // fix casing _options.logLevel = _options.loglevel; // fix casing + _options.client = _options.client || 'geth'; embark.upload(_options); }); } diff --git a/lib/cmds/blockchain/blockchain.js b/lib/cmds/blockchain/blockchain.js index 5598e91d3..254f5ce87 100644 --- a/lib/cmds/blockchain/blockchain.js +++ b/lib/cmds/blockchain/blockchain.js @@ -1,8 +1,9 @@ -var shelljs = require('shelljs'); +const async = require('async'); +const shelljs = require('shelljs'); -var fs = require('../../core/fs.js'); +const fs = require('../../core/fs.js'); -var GethCommands = require('./geth_commands.js'); +const GethCommands = require('./geth_commands.js'); /*eslint complexity: ["error", 35]*/ var Blockchain = function(options) { @@ -10,6 +11,7 @@ var Blockchain = function(options) { this.env = options.env || 'development'; this.client = options.client; this.isDev = options.isDev; + this.onReadyCallback = options.onReadyCallback; if ((this.blockchainConfig === {} || JSON.stringify(this.blockchainConfig) === '{"enabled":true}') && this.env !== 'development') { console.log("===> " + __("warning: running default config on a non-development environment")); @@ -41,7 +43,8 @@ var Blockchain = function(options) { vmdebug: this.blockchainConfig.vmdebug || false, targetGasLimit: this.blockchainConfig.targetGasLimit || false, light: this.blockchainConfig.light || false, - fast: this.blockchainConfig.fast || false + fast: this.blockchainConfig.fast || false, + verbosity: this.blockchainConfig.verbosity }; if (this.blockchainConfig === {} || JSON.stringify(this.blockchainConfig) === '{"enabled":true}') { @@ -54,15 +57,12 @@ var Blockchain = function(options) { this.client = new options.client({config: this.config, env: this.env, isDev: this.isDev}); }; -Blockchain.prototype.runCommand = function(cmd, options) { +Blockchain.prototype.runCommand = function(cmd, options, callback) { console.log(__("running: %s", cmd.underline).green); - return shelljs.exec(cmd, options, (err, stdout, _stderr) => { - if (err && this.env === 'development' && stdout.indexOf('Failed to unlock') > 0) { - console.warn('\n' + __('Development blockchain has changed to use the --dev option.').yellow); - console.warn(__('You can reset your workspace to fix the problem with').yellow + ' embark reset'.cyan); - console.warn(__('Otherwise, you can change your data directory in blockchain.json (datadir)').yellow); - } - }); + if (this.blockchainConfig.silent) { + options.silent = true; + } + return shelljs.exec(cmd, options, callback); }; Blockchain.prototype.run = function() { @@ -72,62 +72,130 @@ Blockchain.prototype.run = function() { console.log(__("Embark Blockchain Using: %s", this.client.name.underline).magenta); console.log("===============================================================================".magenta); console.log("===============================================================================".magenta); - if (!this.isClientInstalled()) { - console.log(__("could not find {{geth_bin}} command; is {{client_name}} installed or in the PATH?", {geth_bin: this.config.geth_bin, client_name: this.client.name}).green); - return; - } + let address = ''; - if (!this.isDev) { - address = this.initChainAndGetAddress(); - } - this.client.mainCommand(address, function(cmd) { - self.runCommand(cmd, {async: true}); + async.waterfall([ + function checkInstallation(next) { + self.isClientInstalled((err) => { + if (err) { + console.log(__("could not find {{geth_bin}} command; is {{client_name}} installed or in the PATH?", {geth_bin: this.config.geth_bin, client_name: this.client.name}).green); + return next(err); + } + next(); + }); + }, + function init(next) { + if (!self.isDev) { + return self.initChainAndGetAddress((err, addr) => { + address = addr; + next(err); + }); + } + next(); + }, + function getMainCommand(next) { + self.client.mainCommand(address, function(cmd) { + next(null, cmd); + }); + } + ], function (err, cmd) { + if (err) { + console.error(err); + return; + } + const child = self.runCommand(cmd, {}, (err, stdout, _stderr) => { + if (err && self.env === 'development' && stdout.indexOf('Failed to unlock') > 0) { + console.warn('\n' + __('Development blockchain has changed to use the --dev option.').yellow); + console.warn(__('You can reset your workspace to fix the problem with').yellow + ' embark reset'.cyan); + console.warn(__('Otherwise, you can change your data directory in blockchain.json (datadir)').yellow); + } + }); + if (self.onReadyCallback) { + // Geth logs appear in stderr somehow + let lastMessage; + child.stderr.on('data', (data) => { + if (!self.readyCalled && data.indexOf('Mapped network port') > -1) { + self.readyCalled = true; + self.onReadyCallback(); + } + lastMessage = data; + console.log('Geth: ' + data); + }); + child.on('exit', (code) => { + if (code) { + console.error('Geth exited with error code ' + 1); + console.error(lastMessage); + } + }); + } }); }; -Blockchain.prototype.isClientInstalled = function() { +Blockchain.prototype.isClientInstalled = function(callback) { let versionCmd = this.client.determineVersion(); - let result = this.runCommand(versionCmd); - - if (result.output === undefined || result.output.indexOf("not found") >= 0) { - return false; - } - return true; + this.runCommand(versionCmd, {}, (err, stdout, stderr) => { + if (err || stderr || !stdout || stdout.indexOf("not found") >= 0) { + return callback('Geth not found'); + } + callback(); + }); }; -Blockchain.prototype.initChainAndGetAddress = function() { - var address = null, result; +Blockchain.prototype.initChainAndGetAddress = function(callback) { + const self = this; + let address = null; // ensure datadir exists, bypassing the interactive liabilities prompt. - this.datadir = '.embark/' + this.env + '/datadir'; - fs.mkdirpSync(this.datadir); + self.datadir = '.embark/' + self.env + '/datadir'; - // copy mining script - fs.copySync(fs.embarkPath("js"), ".embark/" + this.env + "/js", {overwrite: true}); - - // check if an account already exists, create one if not, return address - result = this.runCommand(this.client.listAccountsCommand()); - if (result.output === undefined || result.output.match(/{(\w+)}/) === null || result.output.indexOf("Fatal") >= 0) { - console.log(__("no accounts found").green); - if (this.config.genesisBlock) { + async.waterfall([ + function makeDir(next) { + fs.mkdirp(self.datadir, (err, _result) => { + next(err); + }); + }, + function copy(next) { + // copy mining script + fs.copy(fs.embarkPath("js"), ".embark/" + self.env + "/js", {overwrite: true}, next); + }, + function listAccounts(next) { + self.runCommand(self.client.listAccountsCommand(), {}, (err, stdout, stderr) => { + if (err || stderr || stdout === undefined || stdout.match(/{(\w+)}/) === null || stdout.indexOf("Fatal") >= 0) { + console.log(__("no accounts found").green); + return next(); + } + console.log(__("already initialized").green); + address = stdout.match(/{(\w+)}/)[1]; + next(); + }); + }, + function genesisBlock(next) { + if (!self.config.genesisBlock) { + return next(); + } console.log(__("initializing genesis block").green); - result = this.runCommand(this.client.initGenesisCommmand()); + self.runCommand(self.client.initGenesisCommmand(), {}, (err, _stdout, _stderr) => { + next(err); + }); + }, + function newAccount(next) { + self.runCommand(self.client.newAccountCommand(), {}, (err, stdout, _stderr) => { + if (err) { + return next(err); + } + address = stdout.match(/{(\w+)}/)[1]; + next(); + }); } - - result = this.runCommand(this.client.newAccountCommand()); - address = result.output.match(/{(\w+)}/)[1]; - } else { - console.log(__("already initialized").green); - address = result.output.match(/{(\w+)}/)[1]; - } - - return address; + ], (err) => { + callback(err, address); + }); }; -var BlockchainClient = function(blockchainConfig, client, env, isDev) { +var BlockchainClient = function(blockchainConfig, client, env, isDev, onReadyCallback) { // TODO add other clients at some point if (client === 'geth') { - return new Blockchain({blockchainConfig, client: GethCommands, env, isDev}); + return new Blockchain({blockchainConfig, client: GethCommands, env, isDev, onReadyCallback}); } else { throw new Error('unknown client'); } diff --git a/lib/cmds/blockchain/blockchainProcess.js b/lib/cmds/blockchain/blockchainProcess.js new file mode 100644 index 000000000..421703e07 --- /dev/null +++ b/lib/cmds/blockchain/blockchainProcess.js @@ -0,0 +1,40 @@ +const ProcessWrapper = require('../../process/processWrapper'); +const BlockchainClient = require('./blockchain'); +const i18n = require('../../i18n/i18n.js'); +const constants = require('../../constants'); + +let blockchainProcess; + +class BlockchainProcess extends ProcessWrapper { + constructor(options) { + super(); + this.blockchainConfig = options.blockchainConfig; + this.client = options.client; + this.env = options.env; + this.isDev = options.isDev; + + i18n.setOrDetectLocale(options.locale); + + this.blockchainConfig.silent = true; + this.blockchain = BlockchainClient( + this.blockchainConfig, + this.client, + this.env, + this.isDev, + this.blockchainReady.bind(this) + ); + + this.blockchain.run(); + } + + blockchainReady() { + blockchainProcess.send({result: constants.blockchain.blockchainReady}); + } +} + +process.on('message', (msg) => { + if (msg.action === constants.blockchain.init) { + blockchainProcess = new BlockchainProcess(msg.options); + return blockchainProcess.send({result: constants.blockchain.initiated}); + } +}); diff --git a/lib/cmds/blockchain/geth_commands.js b/lib/cmds/blockchain/geth_commands.js index b05ada7ae..e64f47a60 100644 --- a/lib/cmds/blockchain/geth_commands.js +++ b/lib/cmds/blockchain/geth_commands.js @@ -32,6 +32,10 @@ class GethCommands { cmd += "--password " + config.account.password + " "; } + if (Number.isInteger(config.verbosity) && config.verbosity >=0 && config.verbosity <= 5) { + cmd += "--verbosity " + config.verbosity + " "; + } + return cmd; } diff --git a/lib/coderunner/codeRunner.js b/lib/coderunner/codeRunner.js new file mode 100644 index 000000000..73b1de03e --- /dev/null +++ b/lib/coderunner/codeRunner.js @@ -0,0 +1,26 @@ +// still needs to be run on a separate file due to the global context +var RunCode = require('./runCode.js'); + +class CodeRunner { + constructor(options) { + this.plugins = options.plugins; + this.logger = options.logger; + this.events = options.events; + + // necessary to init the context + RunCode.initContext(); + + this.events.on("runcode:register", (varName, code) => { + RunCode.registerVar(varName, code); + }); + + this.events.setCommandHandler('runcode:eval', (code, cb) => { + let result = RunCode.doEval(code); + if (cb) { + cb(null, result); + } + }); + } +} + +module.exports = CodeRunner; diff --git a/lib/core/runCode.js b/lib/coderunner/runCode.js similarity index 61% rename from lib/core/runCode.js rename to lib/coderunner/runCode.js index 9eddfd515..9560eec1f 100644 --- a/lib/core/runCode.js +++ b/lib/coderunner/runCode.js @@ -1,22 +1,16 @@ /*eslint no-unused-vars: off*/ -let Web3 = require('web3'); -let web3; -let ipfs; -let __mainContext; +let __mainContext = this; + +function initContext() { + doEval("__mainContext = this"); +} // ====================== // the eval is used for evaluating some of the contact calls for different purposes // this should be at least moved to a different process and scope // for now it is defined here // ====================== -function doEval(code, opts) { - if (opts && opts.web3) { - web3 = opts.web3; - } - if (opts && opts.ipfs) { - ipfs = opts.ipfs; - } - +function doEval(code) { try { // TODO: add trace log here return eval(code); @@ -25,6 +19,12 @@ function doEval(code, opts) { } } +function registerVar(varName, code) { + __mainContext[varName] = code; +} + module.exports = { - doEval: doEval + doEval: doEval, + registerVar: registerVar, + initContext: initContext }; diff --git a/lib/constants.json b/lib/constants.json index b99d13873..16e13e308 100644 --- a/lib/constants.json +++ b/lib/constants.json @@ -29,5 +29,10 @@ "build": "build", "initiated": "initiated", "built": "built" + }, + "blockchain": { + "blockchainReady": "blockchainReady", + "init": "init", + "initiated": "initiated" } } diff --git a/lib/contracts/blockchain.js b/lib/contracts/blockchain.js new file mode 100644 index 000000000..95257964f --- /dev/null +++ b/lib/contracts/blockchain.js @@ -0,0 +1,282 @@ +const Web3 = require('web3'); +const async = require('async'); +const Provider = require('./provider.js'); +const request = require('request'); +const BlockchainProcessLauncher = require('../processes/blockchainProcessLauncher'); +const utils = require('../utils/utils'); +const constants = require('../constants'); + +const WEB3_READY = 'web3Ready'; + +class Blockchain { + constructor(options) { + this.plugins = options.plugins; + this.logger = options.logger; + this.events = options.events; + this.contractsConfig = options.contractsConfig; + this.blockchainConfig = options.blockchainConfig; + this.web3 = options.web3; + this.locale = options.locale; + this.isDev = options.isDev; + this.addCheck = options.addCheck; + this.web3Endpoint = ''; + this.isWeb3Ready = false; + this.web3StartedInProcess = false; + + if (!this.web3) { + this.initWeb3(); + } else { + this.isWeb3Ready = true; + } + this.registerServiceCheck(); + this.registerRequests(); + this.registerWeb3Object(); + } + + initWeb3(cb) { + if (!cb) { + cb = function(){}; + } + if (this.isWeb3Ready) { + return cb(); + } + const self = this; + this.web3 = new Web3(); + if (this.contractsConfig.deployment.type === "rpc") { + let provider; + this.web3Endpoint = 'http://' + this.contractsConfig.deployment.host + ':' + this.contractsConfig.deployment.port; + + const providerOptions = { + web3: this.web3, + accountsConfig: this.contractsConfig.deployment.accounts, + logger: this.logger, + isDev: this.isDev, + web3Endpoint: self.web3Endpoint + }; + provider = new Provider(providerOptions); + + provider.startWeb3Provider(() => { + self.assertNodeConnection(true, (err) => { + if (err && self.web3StartedInProcess) { + // 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); + return cb(err); + } + if (!err) { + self.isWeb3Ready = true; + self.events.emit(WEB3_READY); + return cb(); + } + self.web3StartedInProcess = true; + self.startBlockchainNode(() => { + // Need to re-initialize web3 to connect to the new blockchain node + provider.stop(); + self.initWeb3(cb); + }); + }); + }); + } else { + throw new Error("contracts config error: unknown deployment type " + this.contractsConfig.deployment.type); + } + } + + onReady(callback) { + if (this.isWeb3Ready) { + return callback(); + } + + this.events.once(WEB3_READY, () => { + callback(); + }); + } + + startBlockchainNode(callback) { + const self = this; + let blockchainProcess = new BlockchainProcessLauncher({ + events: self.events, + logger: self.logger, + normalizeInput: utils.normalizeInput, + blockchainConfig: self.blockchainConfig, + locale: self.locale, + isDev: self.isDev + }); + + blockchainProcess.startBlockchainNode(); + self.events.once(constants.blockchain.blockchainReady, () => { + callback(); + }); + } + + registerServiceCheck() { + const self = this; + + this.addCheck('Ethereum', function (cb) { + async.waterfall([ + function checkNodeConnection(next) { + self.assertNodeConnection(true, (err) => { + if (err) { + return next(null, {name: "No Blockchain node found", status: 'off'}); + } + next(); + }); + }, + function checkVersion(next) { + // TODO: web3_clientVersion method is currently not implemented in web3.js 1.0 + self.web3._requestManager.send({method: 'web3_clientVersion', params: []}, (err, version) => { + if (err) { + return next(null, {name: "Ethereum node (version unknown)", status: 'on'}); + } + if (version.indexOf("/") < 0) { + return next(null, {name: version, status: 'on'}); + } + let nodeName = version.split("/")[0]; + let versionNumber = version.split("/")[1].split("-")[0]; + let name = nodeName + " " + versionNumber + " (Ethereum)"; + + return next(null, {name: name, status: 'on'}); + }); + } + ], (err, statusObj) => { + if (err) { + self.logger.error(err); + return; + } + cb(statusObj); + }); + }); + } + + registerRequests() { + const self = this; + + this.events.setCommandHandler("blockchain:defaultAccount:get", function(cb) { + cb(self.defaultAccount); + }); + + this.events.setCommandHandler("blockchain:defaultAccount:set", function(account, cb) { + self.setDefaultAccount(account); + cb(); + }); + + this.events.setCommandHandler("blockchain:block:byNumber", function(blockNumber, cb) { + self.getBlock(blockNumber, cb); + }); + + } + + defaultAccount() { + return this.web3.eth.defaultAccount; + } + + setDefaultAccount(account) { + this.web3.eth.defaultAccount = account; + } + + getAccounts(cb) { + this.web3.eth.getAccounts(cb); + } + + getCode(address, cb) { + this.web3.eth.getCode(address, cb); + } + + getBlock(blockNumber, cb) { + this.web3.eth.getBlock(blockNumber, cb); + } + + ContractObject(params) { + return new this.web3.eth.Contract(params.abi); + } + + deployContractObject(contractObject, params) { + return contractObject.deploy({arguments: params.arguments, data: params.data}); + } + + estimateDeployContractGas(deployObject, cb) { + return deployObject.estimateGas().then((gasValue) => { + cb(null, gasValue); + }).catch(cb); + } + + deployContractFromObject(deployContractObject, params, cb) { + deployContractObject.send({ + from: params.from, gas: params.gas, gasPrice: params.gasPrice + }).on('receipt', function(receipt) { + if (receipt.contractAddress !== undefined) { + cb(null, receipt); + } + }).on('error', cb); + } + + assertNodeConnection(noLogs, cb) { + if (typeof noLogs === 'function') { + cb = noLogs; + noLogs = false; + } + const NO_NODE_ERROR = Error("error connecting to blockchain node"); + const self = this; + + async.waterfall([ + function checkInstance(next) { + if (!self.web3) { + return next(Error("no web3 instance found")); + } + next(); + }, + function checkProvider(next) { + if (self.web3.currentProvider === undefined) { + return next(NO_NODE_ERROR); + } + next(); + }, + function pingEndpoint(next) { + if (!self.web3Endpoint) { + return next(); + } + request.get(self.web3Endpoint, function (err, _response, _body) { + if (err) { + return next(NO_NODE_ERROR); + } + next(); + }); + }, + function checkAccounts(next) { + self.getAccounts(function(err, _accounts) { + if (err) { + return next(NO_NODE_ERROR); + } + return next(); + }); + } + ], function (err) { + if (!noLogs && err === NO_NODE_ERROR) { + self.logger.error(("Couldn't connect to an Ethereum node are you sure it's on?").red); + self.logger.info("make sure you have an Ethereum node or simulator running. e.g 'embark blockchain'".magenta); + } + cb(err); + }); + } + + determineDefaultAccount(cb) { + const self = this; + self.getAccounts(function (err, accounts) { + if (err) { + self.logger.error(err); + return cb(new Error(err)); + } + let accountConfig = self.blockchainConfig.account; + let selectedAccount = accountConfig && accountConfig.address; + self.setDefaultAccount(selectedAccount || accounts[0]); + cb(); + }); + } + + registerWeb3Object() { + // doesn't feel quite right, should be a cmd or plugin method + // can just be a command without a callback + this.events.emit("runcode:register", "web3", this.web3); + } +} + +module.exports = Blockchain; + diff --git a/lib/contracts/code_generator.js b/lib/contracts/code_generator.js index b905fc0b2..e7e8064d5 100644 --- a/lib/contracts/code_generator.js +++ b/lib/contracts/code_generator.js @@ -26,6 +26,7 @@ class CodeGenerator { this.contractsConfig = options.contractsConfig || {}; this.storageConfig = options.storageConfig || {}; this.communicationConfig = options.communicationConfig || {}; + // TODO: this should also be removed and use events instead this.contractsManager = options.contractsManager; this.plugins = options.plugins; this.events = options.events; @@ -107,6 +108,10 @@ class CodeGenerator { self.buildContractJS(contractName, self.generateContractJSON(contractName, contract), cb); }); + self.events.setCommandHandler('code-generator:contract:vanilla', (contract, gasLimit, cb) => { + cb(self.generateContractCode(contract, gasLimit)); + }); + this.events.setCommandHandler('embark-building-placeholder', (cb) => { this.buildPlaceholderPage(cb); }); diff --git a/lib/contracts/contracts.js b/lib/contracts/contracts.js index 6b12bc679..6f9fbd815 100644 --- a/lib/contracts/contracts.js +++ b/lib/contracts/contracts.js @@ -1,7 +1,6 @@ let toposort = require('toposort'); let async = require('async'); -let Compiler = require('./compiler.js'); let utils = require('../utils/utils.js'); const constants = require('../constants'); @@ -9,6 +8,7 @@ const constants = require('../constants'); class ContractsManager { constructor(options) { + const self = this; this.contractFiles = options.contractFiles; this.contractsConfig = options.contractsConfig; this.contracts = {}; @@ -19,25 +19,39 @@ class ContractsManager { this.deployOnlyOnConfig = false; this.events = options.events; - this.events.on(constants.events.contractFilesChanged, (newContractFiles) => { - this.contractFiles = newContractFiles; + self.events.on(constants.events.contractFilesChanged, (newContractFiles) => { + self.contractFiles = newContractFiles; }); - this.events.on(constants.events.contractConfigChanged, (newContracts) => { - this.contractsConfig = newContracts; + self.events.on(constants.events.contractConfigChanged, (newContracts) => { + self.contractsConfig = newContracts; }); - const self = this; self.events.setCommandHandler('contracts:list', (cb) => { cb(self.listContracts()); }); + + self.events.setCommandHandler("contracts:contract", (contractName, cb) => { + cb(self.getContract(contractName)); + }); + + self.events.on("deploy:contract:error", (_contract) => { + self.events.emit('contractsState', self.contractsState()); + }); + + self.events.on("deploy:contract:deployed", (_contract) => { + self.events.emit('contractsState', self.contractsState()); + }); + + self.events.on("deploy:contract:undeployed", (_contract) => { + self.events.emit('contractsState', self.contractsState()); + }); } build(done) { let self = this; async.waterfall([ function compileContracts(callback) { - let compiler = new Compiler({plugins: self.plugins, logger: self.logger}); - compiler.compile_contracts(self.contractFiles, function (err, compiledObject) { + self.events.request("compiler:contracts", self.contractFiles, function (err, compiledObject) { self.compiledContracts = compiledObject; callback(err); }); diff --git a/lib/contracts/deploy.js b/lib/contracts/deploy.js index 632596ba7..462d7a817 100644 --- a/lib/contracts/deploy.js +++ b/lib/contracts/deploy.js @@ -1,38 +1,22 @@ let async = require('async'); //require("../utils/debug_util.js")(__filename, async); - -let RunCode = require('../core/runCode.js'); - -let DeployTracker = require('./deploy_tracker.js'); -let CodeGenerator = require('./code_generator.js'); +let utils = require('../utils/utils.js'); class Deploy { constructor(options) { - this.web3 = options.web3; - this.contractsManager = options.contractsManager; + this.blockchain = options.blockchain; this.logger = options.logger; this.events = options.events; - this.env = options.env; - this.chainConfig = options.chainConfig; this.plugins = options.plugins; this.gasLimit = options.gasLimit; - - this.events.setCommandHandler("contracts:contract", (contractName, cb) => { - cb(this.contractsManager.getContract(contractName)); - }); } - initTracker(cb) { - this.deployTracker = new DeployTracker({ - logger: this.logger, chainConfig: this.chainConfig, web3: this.web3, env: this.env - }, cb); - } - - determineArguments(suppliedArgs, contract) { - let realArgs = [], l, arg, contractName, referedContract; + // TODO: determining the arguments could also be in a module since it's not + // part of ta 'normal' contract deployment + determineArguments(suppliedArgs, contract, callback) { + const self = this; let args = suppliedArgs; - if (!Array.isArray(args)) { args = []; let abi = contract.abiDefinition.find((abi) => abi.type === 'constructor'); @@ -46,171 +30,137 @@ class Deploy { } } - for (l = 0; l < args.length; l++) { - arg = args[l]; + let realArgs = []; + async.eachLimit(args, 1, (arg, nextEachCb) => { if (arg[0] === "$") { - contractName = arg.substr(1); - referedContract = this.contractsManager.getContract(contractName); - realArgs.push(referedContract.deployedAddress); + let contractName = arg.substr(1); + self.events.request('contracts:contract', contractName, (referedContract) => { + realArgs.push(referedContract.deployedAddress); + nextEachCb(); + }); } else if (Array.isArray(arg)) { let subRealArgs = []; - for (let sub_arg of arg) { + + async.eachLimit(arg, 1, (sub_arg, nextSubEachCb) => { if (sub_arg[0] === "$") { - contractName = sub_arg.substr(1); - referedContract = this.contractsManager.getContract(contractName); - subRealArgs.push(referedContract.deployedAddress); + let contractName = sub_arg.substr(1); + + self.events.request('contracts:contract', contractName, (referedContract) => { + subRealArgs.push(referedContract.deployedAddress); + nextSubEachCb(); + }); } else { subRealArgs.push(sub_arg); + nextSubEachCb(); } - } - realArgs.push(subRealArgs); + }, () => { + realArgs.push(subRealArgs); + nextEachCb(); + }); } else { realArgs.push(arg); + nextEachCb(); } - } - - return realArgs; + }, () => { + callback(realArgs); + }); } checkAndDeployContract(contract, params, callback) { let self = this; - let realArgs; contract.error = false; if (contract.deploy === false) { - self.events.emit('contractsState', self.contractsManager.contractsState()); + self.events.emit("deploy:contract:undeployed", contract); return callback(); } - realArgs = self.determineArguments(params || contract.args, contract); + async.waterfall([ + function _determineArguments(next) { + self.determineArguments(params || contract.args, contract, (realArgs) => { + contract.realArgs = realArgs; + next(); + }); + }, + function deployIt(next) { + if (contract.address !== undefined) { + try { + utils.toChecksumAddress(contract.address); + } catch(e) { + self.logger.error(__("error deploying %s", contract.className)); + self.logger.error(e.message); + contract.error = e.message; + self.events.emit("deploy:contract:error", contract); + return next(e.message); + } + contract.deployedAddress = contract.address; + self.logger.info(contract.className.bold.cyan + __(" already deployed at ").green + contract.address.bold.cyan); + self.events.emit("deploy:contract:deployed", contract); + return next(); + } - if (contract.address !== undefined) { - try { - this.web3.utils.toChecksumAddress(contract.address); - } catch(e) { - self.logger.error(__("error deploying %s", contract.className)); - self.logger.error(e.message); - contract.error = e.message; - self.events.emit('contractsState', self.contractsManager.contractsState()); - return callback(e.message); + // TODO: this should be a plugin API instead, if not existing, it should by default deploy the contract + self.events.request("deploy:contract:shouldDeploy", contract, function(trackedContract) { + if (!trackedContract) { + return self.contractToDeploy(contract, params, next); + } + + self.blockchain.getCode(trackedContract.address, function(_getCodeErr, codeInChain) { + if (codeInChain !== "0x") { + self.contractAlreadyDeployed(contract, trackedContract, next); + } else { + self.contractToDeploy(contract, params, next); + } + }); + }); } - contract.deployedAddress = contract.address; - self.logger.info(contract.className.bold.cyan + __(" already deployed at ").green + contract.address.bold.cyan); - if (this.deployTracker) { - self.deployTracker.trackContract(contract.className, contract.realRuntimeBytecode, realArgs, contract.address); - self.deployTracker.save(); - } - self.events.emit('contractsState', self.contractsManager.contractsState()); - return callback(); - } - - if (!this.deployTracker) { - return self.contractToDeploy(contract, params, callback); - } - - let trackedContract = self.deployTracker.getContract(contract.className, contract.realRuntimeBytecode, realArgs); - if (!trackedContract) { - return self.contractToDeploy(contract, params, callback); - } - - this.web3.eth.getCode(trackedContract.address, function(_getCodeErr, codeInChain) { - if (codeInChain !== "0x") { - self.contractAlreadyDeployed(contract, trackedContract, callback); - } else { - self.contractToDeploy(contract, params, callback); - } - }); + ], callback); } contractAlreadyDeployed(contract, trackedContract, callback) { const self = this; self.logger.info(contract.className.bold.cyan + __(" already deployed at ").green + trackedContract.address.bold.cyan); contract.deployedAddress = trackedContract.address; - self.events.emit('contractsState', self.contractsManager.contractsState()); + self.events.emit("deploy:contract:deployed", contract); - // always run contractCode so other functionality like 'afterDeploy' can also work - let codeGenerator = new CodeGenerator({contractsManager: self.contractsManager}); - let contractCode = codeGenerator.generateContractCode(contract, self.gasLimit); - RunCode.doEval(contractCode, {web3: self.web3}); - - return callback(); + // TODO: can be moved into a afterDeploy event + // just need to figure out the gasLimit coupling issue + self.events.request('code-generator:contract:vanilla', contract, self.gasLimit, (contractCode) => { + self.events.request('runcode:eval', contractCode); + return callback(); + }); } contractToDeploy(contract, params, callback) { const self = this; - let realArgs = self.determineArguments(params || contract.args, contract); - this.deployContract(contract, realArgs, function (err, address) { - if (err) { - return callback(new Error(err)); - } - self.deployTracker.trackContract(contract.className, contract.realRuntimeBytecode, realArgs, address); - self.deployTracker.save(); - self.events.emit('contractsState', self.contractsManager.contractsState()); + // TODO: refactor to async + self.determineArguments(params || contract.args, contract, (realArgs) => { + contract.realArgs = realArgs; - // always run contractCode so other functionality like 'afterDeploy' can also work - let codeGenerator = new CodeGenerator({contractsManager: self.contractsManager}); - let contractCode = codeGenerator.generateContractCode(contract, self.gasLimit); - RunCode.doEval(contractCode, {web3: self.web3}); + this.deployContract(contract, contract.realArgs, function (err, address) { + if (err) { + self.events.emit("deploy:contract:error", contract); + return callback(new Error(err)); + } + contract.address = address; + self.events.emit("deploy:contract:deployed", contract); - if (contract.onDeploy !== undefined) { - self.logger.info(__('executing onDeploy commands')); + // TODO: can be moved into a afterDeploy event + // just need to figure out the gasLimit coupling issue + self.events.request('code-generator:contract:vanilla', contract, self.gasLimit, (contractCode) => { + self.events.request('runcode:eval', contractCode); - let contractCode = codeGenerator.generateContractCode(contract, self.gasLimit); - RunCode.doEval(contractCode, {web3: self.web3}); + let onDeployPlugins = self.plugins.getPluginsProperty('onDeployActions', 'onDeployActions'); - let withErrors = false; - let regex = /\$\w+/g; - let onDeployCode = contract.onDeploy.map((cmd) => { - let realCmd = cmd.replace(regex, (match) => { - let referedContractName = match.slice(1); - let referedContract = self.contractsManager.getContract(referedContractName); - if (!referedContract) { - self.logger.error(__('error executing onDeploy for ') + contract.className.cyan); - self.logger.error(referedContractName + __(' does not exist')); - self.logger.error(__("error running onDeploy: ") + cmd); - withErrors = true; - return; - } - if (referedContract && referedContract.deploy === false) { - self.logger.error(__('error executing onDeploy for ') + contract.className.cyan); - self.logger.error(referedContractName + __(" exists but has been set to not deploy")); - self.logger.error(__("error running onDeploy: ") + cmd); - withErrors = true; - return; - } - if (referedContract && !referedContract.deployedAddress) { - self.logger.error(__('error executing onDeploy for ') + contract.className.cyan); - self.logger.error(__("couldn't find a valid address for %s has it been deployed?", referedContractName)); - self.logger.error(__("error running onDeploy: ") + cmd); - withErrors = true; - return; - } - return referedContract.deployedAddress; + async.eachLimit(onDeployPlugins, 1, function(plugin, nextEach) { + plugin.call(plugin, contract, nextEach); + }, () => { + callback(); }); - return realCmd; }); - if (withErrors) { - contract.error = "onDeployCmdError"; - return callback(new Error("error running onDeploy")); - } - - // TODO: convert to for to avoid repeated callback - for(let cmd of onDeployCode) { - self.logger.info(__("executing: ") + cmd); - try { - RunCode.doEval(cmd, {web3: self.web3}); - } catch(e) { - if (e.message.indexOf("invalid opcode") >= 0) { - self.logger.error(__('the transaction was rejected; this usually happens due to a throw or a require, it can also happen due to an invalid operation')); - } - return callback(new Error(e)); - } - } - } - - callback(); + }); }); } @@ -219,12 +169,13 @@ class Deploy { let accounts = []; let contractParams = (params || contract.args).slice(); let contractCode = contract.code; - let deploymentAccount = self.web3.eth.defaultAccount; + let deploymentAccount = self.blockchain.defaultAccount(); let deployObject; async.waterfall([ + // TODO: can potentially go to a beforeDeploy plugin function getAccounts(next) { - self.web3.eth.getAccounts(function (err, _accounts) { + self.blockchain.getAccounts(function (err, _accounts) { if (err) { return next(new Error(err)); } @@ -249,31 +200,31 @@ class Deploy { }); }, function doLinking(next) { - // Applying linked contracts - let contractsList = self.contractsManager.listContracts(); - for (let contractObj of contractsList) { - let filename = contractObj.filename; - let deployedAddress = contractObj.deployedAddress; - if (deployedAddress) { - deployedAddress = deployedAddress.substr(2); + self.events.request('contracts:list', (contracts) => { + for (let contractObj of contracts) { + let filename = contractObj.filename; + let deployedAddress = contractObj.deployedAddress; + if (deployedAddress) { + deployedAddress = deployedAddress.substr(2); + } + let linkReference = '__' + filename + ":" + contractObj.className; + if (contractCode.indexOf(linkReference) < 0) { + continue; + } + if (linkReference.length > 40) { + return next(new Error(__("{{linkReference}} is too long, try reducing the path of the contract ({{filename}}) and/or its name {{contractName}}", {linkReference: linkReference, filename: filename, contractName: contractObj.className}))); + } + let toReplace = linkReference + "_".repeat(40 - linkReference.length); + if (deployedAddress === undefined) { + let libraryName = contractObj.className; + return next(new Error(__("{{contractName}} needs {{libraryName}} but an address was not found, did you deploy it or configured an address?", {contractName: contract.className, libraryName: libraryName}))); + } + contractCode = contractCode.replace(new RegExp(toReplace, "g"), deployedAddress); } - let linkReference = '__' + filename + ":" + contractObj.className; - if (contractCode.indexOf(linkReference) < 0) { - continue; - } - if (linkReference.length > 40) { - return next(new Error(__("{{linkReference}} is too long, try reducing the path of the contract ({{filename}}) and/or its name {{contractName}}", {linkReference: linkReference, filename: filename, contractName: contractObj.className}))); - } - let toReplace = linkReference + "_".repeat(40 - linkReference.length); - if (deployedAddress === undefined) { - let libraryName = contractObj.className; - return next(new Error(__("{{contractName}} needs {{libraryName}} but an address was not found, did you deploy it or configured an address?", {contractName: contract.className, libraryName: libraryName}))); - } - contractCode = contractCode.replace(new RegExp(toReplace, "g"), deployedAddress); - } - // saving code changes back to contract object - contract.code = contractCode; - next(); + // saving code changes back to contract object + contract.code = contractCode; + next(); + }); }, function applyBeforeDeploy(next) { let beforeDeployPlugins = self.plugins.getPluginsFor('beforeDeploy'); @@ -306,11 +257,11 @@ class Deploy { }); }, function createDeployObject(next) { - let contractObject = new self.web3.eth.Contract(contract.abiDefinition); + let contractObject = self.blockchain.ContractObject({abi: contract.abiDefinition}); try { const dataCode = contractCode.startsWith('0x') ? contractCode : "0x" + contractCode; - deployObject = contractObject.deploy({arguments: contractParams, data: dataCode}); + deployObject = self.blockchain.deployContractObject(contractObject, {arguments: contractParams, data: dataCode}); } catch(e) { if (e.message.indexOf('Invalid number of parameters for "undefined"') >= 0) { return next(new Error(__("attempted to deploy %s without specifying parameters", contract.className))); @@ -332,22 +283,18 @@ class Deploy { function deployTheContract(next) { self.logger.info(__("deploying") + " " + contract.className.bold.cyan + " " + __("with").green + " " + contract.gas + " " + __("gas").green); - deployObject.send({ + self.blockchain.deployContractFromObject(deployObject, { from: deploymentAccount, gas: contract.gas, gasPrice: contract.gasPrice - }).on('receipt', function(receipt) { - if (receipt.contractAddress !== undefined) { - self.logger.info(contract.className.bold.cyan + " " + __("deployed at").green + " " + receipt.contractAddress.bold.cyan); - contract.deployedAddress = receipt.contractAddress; - contract.transactionHash = receipt.transactionHash; - self.events.emit('contractsState', self.contractsManager.contractsState()); - return next(null, receipt.contractAddress); + }, function(error, receipt) { + if (error) { + return next(new Error("error deploying =" + contract.className + "= due to error: " + error.message)); } - self.events.emit('contractsState', self.contractsManager.contractsState()); - }).on('error', function(error) { - self.events.emit('contractsState', self.contractsManager.contractsState()); - return next(new Error(__("error deploying") + " =" + contract.className + "= " + __("due to error") + ": " + error.message)); + self.logger.info(contract.className.bold.cyan + " " + __("deployed at").green + " " + receipt.contractAddress.bold.cyan); + contract.deployedAddress = receipt.contractAddress; + contract.transactionHash = receipt.transactionHash; + return next(null, receipt.contractAddress); }); } ], callback); @@ -356,28 +303,30 @@ class Deploy { deployAll(done) { let self = this; this.logger.info(__("deploying contracts")); - let contracts = this.contractsManager.listContracts(); + this.events.emit("deploy:beforeAll"); - async.eachOfSeries(contracts, - function (contract, key, callback) { - self.logger.trace(arguments); - self.checkAndDeployContract(contract, null, callback); - }, - function (err, _results) { - if (err) { - self.logger.error(__("error deploying contracts")); - self.logger.error(err.message); - self.logger.debug(err.stack); + self.events.request('contracts:list', (contracts) => { + async.eachOfSeries(contracts, + function (contract, key, callback) { + self.logger.trace(arguments); + self.checkAndDeployContract(contract, null, callback); + }, + function (err, _results) { + if (err) { + self.logger.error(__("error deploying contracts")); + self.logger.error(err.message); + self.logger.debug(err.stack); + } + if (contracts.length === 0) { + self.logger.info(__("no contracts found")); + return done(); + } + self.logger.info(__("finished deploying contracts")); + self.logger.trace(arguments); + done(err); } - if (contracts.length === 0) { - self.logger.info(__("no contracts found")); - return done(); - } - self.logger.info(__("finished deploying contracts")); - self.logger.trace(arguments); - done(err); - } - ); + ); + }); } } diff --git a/lib/contracts/deploy_manager.js b/lib/contracts/deploy_manager.js index 0c21e642c..e59541385 100644 --- a/lib/contracts/deploy_manager.js +++ b/lib/contracts/deploy_manager.js @@ -1,7 +1,6 @@ let async = require('async'); //require("../utils/debug_util.js")(__filename, async); let Deploy = require('./deploy.js'); -let RunCode = require('../core/runCode.js'); class DeployManager { constructor(options) { @@ -11,7 +10,7 @@ class DeployManager { this.events = options.events; this.plugins = options.plugins; - this.web3 = options.web3; + this.blockchain = options.blockchain; this.chainConfig = (options.trackContracts !== false) ? this.config.chainTracker : false; this.contractsManager = options.contractsManager; this.gasLimit = false; @@ -32,51 +31,40 @@ class DeployManager { async.waterfall([ function buildContracts(callback) { self.contractsManager.deployOnlyOnConfig = self.deployOnlyOnConfig; // temporary, should refactor - self.contractsManager.build(callback); + self.contractsManager.build(() => { + callback(); + }); }, - function checkCompileOnly(contractsManager, callback){ + + // TODO: shouldn't be necessary + function checkCompileOnly(callback){ if(self.onlyCompile){ - self.events.emit('contractsDeployed', contractsManager); + self.events.emit('contractsDeployed', self.contractsManager); return done(); } - return callback(null, contractsManager); + return callback(); }, - function checkWeb3IsConnected(contractsManager, callback) { - if (!self.web3) { - return callback(Error("no web3 instance found")); - } - if (self.web3.currentProvider === undefined) { - self.logger.error(__("Couldn't connect to an Ethereum node are you sure it's on?").red); - self.logger.info(__("make sure you have an Ethereum node or simulator running. e.g '%s'", 'embark blockchain').magenta); - return callback(Error("error connecting to blockchain node")); - } - - self.web3.eth.getAccounts(function(err, _accounts) { - if (err) { - self.logger.error(__("Couldn't connect to an Ethereum node are you sure it's on?").red); - self.logger.info(__("make sure you have an Ethereum node or simulator running. e.g '%s'", 'embark blockchain').magenta); - return callback(Error("error connecting to blockchain node")); - } - return callback(null, contractsManager, self.web3); + // TODO: could be implemented as an event (beforeDeployAll) + function checkIsConnectedToBlockchain(callback) { + self.blockchain.onReady(() => { + self.blockchain.assertNodeConnection((err) => { + callback(err); + }); }); }, - function setDefaultAccount(contractsManager, web3, callback) { - web3.eth.getAccounts(function (err, accounts) { - if (err) { - self.logger.error(err); - return callback(new Error(err)); - } - let accountConfig = self.config.blockchainConfig.account; - let selectedAccount = accountConfig && accountConfig.address; - web3.eth.defaultAccount = (selectedAccount || accounts[0]); - callback(null, contractsManager, web3); + + // TODO: this can be done on the fly or as part of the initialization + function determineDefaultAccount(callback) { + self.blockchain.determineDefaultAccount((err) => { + callback(err); }); }, - function deployAllContracts(contractsManager, web3, callback) { + + function deployAllContracts(callback) { let deploy = new Deploy({ - web3: web3, - contractsManager: contractsManager, + blockchain: self.blockchain, + contractsManager: self.contractsManager, logger: self.logger, events: self.events, chainConfig: self.chainConfig, @@ -85,75 +73,27 @@ class DeployManager { gasLimit: self.gasLimit }); - deploy.initTracker(function() { - deploy.deployAll(function (err) { - if (!err) { - self.events.emit('contractsDeployed', contractsManager); - } - if (err && self.fatalErrors) { - return callback(err); - } - callback(null, contractsManager, web3); - }); + deploy.deployAll(function (err) { + if (!err) { + self.events.emit('contractsDeployed', self.contractsManager); + } + if (err && self.fatalErrors) { + return callback(err); + } + callback(); }); }, - function runAfterDeployCommands(contractsManager, web3, callback) { - let afterDeployCmds = self.config.contractsConfig.afterDeploy || []; + function runAfterDeploy(callback) { + let afterDeployPlugins = self.plugins.getPluginsProperty('afterContractsDeployActions', 'afterContractsDeployActions'); - let withErrors = false; - let regex = /\$\w+/g; - let onDeployCode = afterDeployCmds.map((cmd) => { - let realCmd = cmd.replace(regex, (match) => { - let referedContractName = match.slice(1); - let referedContract = contractsManager.getContract(referedContractName); - if (!referedContract) { - self.logger.error(referedContractName + ' does not exist'); - self.logger.error(__("error running afterDeploy: ") + cmd); - withErrors = true; - return; - } - if (referedContract && referedContract.deploy === false) { - self.logger.error(referedContractName + " exists but has been set to not deploy"); - self.logger.error(__("error running afterDeploy: ") + cmd); - withErrors = true; - return; - } - if (referedContract && !referedContract.deployedAddress) { - self.logger.error("couldn't find a valid address for " + referedContractName + ". has it been deployed?"); - self.logger.error(__("error running afterDeploy: ") + cmd); - withErrors = true; - return; - } - return referedContract.deployedAddress; - }); - return realCmd; + async.eachLimit(afterDeployPlugins, 1, function(plugin, nextEach) { + plugin.call(plugin, nextEach); + }, () => { + callback(); }); - - if (withErrors) { - return callback(new Error("error running afterDeploy")); - } - - // TODO: convert to for to avoid repeated callback - for(let cmd of onDeployCode) { - self.logger.info(__("executing") + ": " + cmd); - try { - RunCode.doEval(cmd, {web3: web3}); - } catch(e) { - if (e.message.indexOf("invalid opcode") >= 0) { - self.logger.error(__('the transaction was rejected; this usually happens due to a throw or a require, it can also happen due to an invalid operation')); - } - return callback(new Error(e)); - } - } - - callback(null, contractsManager); - } - ], function (err, result) { - if (err) { - done(err, null); - } else { - done(null, result); } + ], function (err, _result) { + done(err); }); } diff --git a/lib/contracts/deploy_tracker.js b/lib/contracts/deploy_tracker.js deleted file mode 100644 index 2497b2dcb..000000000 --- a/lib/contracts/deploy_tracker.js +++ /dev/null @@ -1,64 +0,0 @@ -let fs = require('../core/fs.js'); - -class DeployTracker { - constructor(options, cb) { - const self = this; - this.logger = options.logger; - this.env = options.env; - this.chainConfig = options.chainConfig; - this.web3 = options.web3; - - if (this.chainConfig === false) { - this.currentChain = {contracts: []}; - return cb(); - } - - this.web3.eth.getBlock(0, function(err, block) { - let chainId = block.hash; - - if (self.chainConfig[chainId] === undefined) { - self.chainConfig[chainId] = {contracts: {}}; - } - - self.currentChain = self.chainConfig[chainId]; - - self.currentChain.name = self.env; - cb(); - }); - - // TODO: add other params - //this.currentChain.networkId = ""; - //this.currentChain.networkType = "custom" - } - - loadConfig(config) { - this.chainConfig = config; - return this; - } - - trackContract(contractName, code, args, address) { - this.currentChain.contracts[this.web3.utils.sha3(code + contractName + args.join(','))] = { - name: contractName, - address: address - }; - } - - getContract(contractName, code, args) { - let contract = this.currentChain.contracts[this.web3.utils.sha3(code + contractName + args.join(','))]; - if (contract && contract.address === undefined) { - return false; - } - return contract; - } - - // TODO: abstract this - // chainConfig can be an abstract PersistentObject - save() { - if (this.chainConfig === false) { - return; - } - fs.writeJSONSync("./chains.json", this.chainConfig, {spaces: 2}); - } -} - -module.exports = DeployTracker; diff --git a/lib/contracts/provider.js b/lib/contracts/provider.js index 29b5ad2a5..2614e3845 100644 --- a/lib/contracts/provider.js +++ b/lib/contracts/provider.js @@ -64,6 +64,10 @@ class Provider { }); } + stop() { + this.engine.stop(); + } + eth_accounts(payload, cb) { return cb(null, this.addresses); } diff --git a/lib/core/config.js b/lib/core/config.js index 55e20ad1f..3d76147a3 100644 --- a/lib/core/config.js +++ b/lib/core/config.js @@ -38,7 +38,7 @@ Config.prototype.loadConfigFiles = function(options) { this.embarkConfig = fs.readJSONSync(options.embarkConfig); this.embarkConfig.plugins = this.embarkConfig.plugins || {}; - this.plugins = new Plugins({plugins: this.embarkConfig.plugins, logger: this.logger, interceptLogs: interceptLogs, events: this.events, config: this, context: this.context}); + this.plugins = new Plugins({plugins: this.embarkConfig.plugins, logger: this.logger, interceptLogs: interceptLogs, events: this.events, config: this, context: this.context, env: this.env}); this.plugins.loadPlugins(); this.loadEmbarkConfigFile(); diff --git a/lib/core/engine.js b/lib/core/engine.js index b41736e8d..37ca5c0ea 100644 --- a/lib/core/engine.js +++ b/lib/core/engine.js @@ -1,21 +1,26 @@ -const Web3 = require('web3'); +const async = require('async'); + const Events = require('./events.js'); const Logger = require('./logger.js'); const Config = require('./config.js'); +const Blockchain = require('../contracts/blockchain.js'); +const Compiler = require('../contracts/compiler.js'); const ContractsManager = require('../contracts/contracts.js'); const DeployManager = require('../contracts/deploy_manager.js'); const CodeGenerator = require('../contracts/code_generator.js'); const ServicesMonitor = require('./services_monitor.js'); +const Pipeline = require('../pipeline/pipeline.js'); const Watch = require('../pipeline/watch.js'); const LibraryManager = require('../versions/library_manager.js'); -const Pipeline = require('../pipeline/pipeline.js'); -const async = require('async'); -const Provider = require('../contracts/provider'); +const CodeRunner = require('../coderunner/codeRunner.js'); +const utils = require('../utils/utils'); class Engine { constructor(options) { this.env = options.env; this.isDev = options.isDev; + this.client = options.client; + this.locale = options.locale; this.embarkConfig = options.embarkConfig; this.interceptLogs = options.interceptLogs; this.version = options.version; @@ -44,46 +49,29 @@ class Engine { } } - normalizeInput(input) { - let args = Object.values(input); - if (args.length === 0) { - return ""; - } - if (args.length === 1) { - if (Array.isArray(args[0])) { return args[0].join(','); } - return args[0] || ""; - } - return ('[' + args.map((x) => { - if (x === null) { return "null"; } - if (x === undefined) { return "undefined"; } - if (Array.isArray(x)) { return x.join(','); } - return x; - }).toString() + ']'); - } - doInterceptLogs() { var self = this; let context = {}; context.console = console; context.console.log = function() { - self.logger.info(self.normalizeInput(arguments)); + self.logger.info(utils.normalizeInput(arguments)); }; context.console.warn = function() { - self.logger.warn(self.normalizeInput(arguments)); + self.logger.warn(utils.normalizeInput(arguments)); }; context.console.info = function() { - self.logger.info(self.normalizeInput(arguments)); + self.logger.info(utils.normalizeInput(arguments)); }; context.console.debug = function() { // TODO: ue JSON.stringify - self.logger.debug(self.normalizeInput(arguments)); + self.logger.debug(utils.normalizeInput(arguments)); }; context.console.trace = function() { - self.logger.trace(self.normalizeInput(arguments)); + self.logger.trace(utils.normalizeInput(arguments)); }; context.console.dir = function() { - self.logger.dir(self.normalizeInput(arguments)); + self.logger.dir(utils.normalizeInput(arguments)); }; } @@ -112,6 +100,7 @@ class Engine { let services = { "pipeline": this.pipelineService, + "codeRunner": this.codeRunnerService, "codeGenerator": this.codeGeneratorService, "deployment": this.deploymentService, "fileWatcher": this.fileWatchService, @@ -142,7 +131,6 @@ class Engine { assetFiles: this.config.assetFiles, events: this.events, logger: this.logger, - normalizeInput: this.normalizeInput, plugins: this.plugins }); @@ -158,21 +146,30 @@ class Engine { }); } + codeRunnerService(_options) { + this.codeRunner = new CodeRunner({ + plugins: this.plugins, + events: this.events, + logger: this.logger + }); + } + codeGeneratorService(_options) { let self = this; - const generateCode = function (contractsManager) { - let codeGenerator = new CodeGenerator({ - blockchainConfig: self.config.blockchainConfig, - contractsConfig: self.config.contractsConfig, - contractsManager: contractsManager, - plugins: self.plugins, - storageConfig: self.config.storageConfig, - communicationConfig: self.config.communicationConfig, - events: self.events - }); - codeGenerator.listenToCommands(); - codeGenerator.buildEmbarkJS(function() { + this.codeGenerator = new CodeGenerator({ + blockchainConfig: self.config.blockchainConfig, + contractsConfig: self.config.contractsConfig, + contractsManager: this.contractsManager, + plugins: self.plugins, + storageConfig: self.config.storageConfig, + communicationConfig: self.config.communicationConfig, + events: self.events + }); + this.codeGenerator.listenToCommands(); + + const generateCode = function () { + self.codeGenerator.buildEmbarkJS(function() { self.events.emit('code-generator-ready'); }); }; @@ -192,6 +189,11 @@ class Engine { deploymentService(options) { let self = this; + let compiler = new Compiler({plugins: self.plugins, logger: self.logger}); + this.events.setCommandHandler("compiler:contracts", function(contractFiles, cb) { + compiler.compile_contracts(contractFiles, cb); + }); + this.registerModule('solidity', { contractDirectories: self.config.contractDirectories }); @@ -203,6 +205,12 @@ class Engine { logger: this.logger }); + this.registerModule('deploytracker', { + }); + + this.registerModule('specialconfigs', { + }); + this.contractsManager = new ContractsManager({ contractFiles: this.config.contractsFiles, contractsConfig: this.config.contractsConfig, @@ -213,7 +221,7 @@ class Engine { }); this.deployManager = new DeployManager({ - web3: options.web3 || self.web3, + blockchain: this.blockchain, trackContracts: options.trackContracts, config: this.config, logger: this.logger, @@ -268,74 +276,30 @@ class Engine { this.registerModule('swarm', { addCheck: this.servicesMonitor.addCheck.bind(this.servicesMonitor), storageConfig: this.config.storageConfig, - bzz: _options.bzz + // TODO: this should not be needed and should be deducted from the config instead + // the eth provider is not necessary the same as the swarm one + bzz: this.blockchain.web3.bzz }); } web3Service(options) { - let self = this; - this.web3 = options.web3; - let provider; - if (this.web3 === undefined) { - this.web3 = new Web3(); - if (this.config.contractsConfig.deployment.type === "rpc") { - const web3Endpoint = 'http://' + this.config.contractsConfig.deployment.host + ':' + this.config.contractsConfig.deployment.port; - const providerOptions = { - web3: this.web3, - accountsConfig: this.config.contractsConfig.deployment.accounts, - logger: this.logger, - isDev: this.isDev, - web3Endpoint - }; - provider = new Provider(providerOptions); - } else { - throw new Error("contracts config error: unknown deployment type " + this.config.contractsConfig.deployment.type); - } - } + this.blockchain = new Blockchain({ + contractsConfig: this.config.contractsConfig, + blockchainConfig: this.config.blockchainConfig, + addCheck: this.servicesMonitor.addCheck.bind(this.servicesMonitor), + events: this.events, + logger: this.logger, + isDev: this.isDev, + locale: this.locale, + web3: options.web3 + }); - async.waterfall([ - function (next) { - if (!provider) { - return next(); - } - provider.startWeb3Provider(next); - } - ], function (err) { - if (err) { - console.error(err); - } - self.servicesMonitor.addCheck('Ethereum', function (cb) { - if (self.web3.currentProvider === undefined) { - return cb({name: __("No Blockchain node found"), status: 'off'}); - } - - self.web3.eth.getAccounts(function(err, _accounts) { - if (err) { - return cb({name: __("No Blockchain node found"), status: 'off'}); - } - - // TODO: web3_clientVersion method is currently not implemented in web3.js 1.0 - self.web3._requestManager.send({method: 'web3_clientVersion', params: []}, (err, version) => { - if (err) { - return cb({name: __("Ethereum node (version unknown)"), status: 'on'}); - } - if (version.indexOf("/") < 0) { - return cb({name: version, status: 'on'}); - } - let nodeName = version.split("/")[0]; - let versionNumber = version.split("/")[1].split("-")[0]; - let name = nodeName + " " + versionNumber + " (Ethereum)"; - - return cb({name: name, status: 'on'}); - }); - }); - }); - - self.registerModule('whisper', { - addCheck: self.servicesMonitor.addCheck.bind(self.servicesMonitor), - communicationConfig: self.config.communicationConfig, - web3: self.web3 - }); + this.registerModule('whisper', { + addCheck: this.servicesMonitor.addCheck.bind(this.servicesMonitor), + communicationConfig: this.config.communicationConfig, + // TODO: this should not be needed and should be deducted from the config instead + // the eth provider is not necessary the same as the whisper one + web3: this.blockchain.web3 }); } diff --git a/lib/core/events.js b/lib/core/events.js index de28c1897..2111e221c 100644 --- a/lib/core/events.js +++ b/lib/core/events.js @@ -40,7 +40,7 @@ EventEmitter.prototype.request = function() { }; EventEmitter.prototype.setCommandHandler = function(requestName, cb) { - log("setting command handler for: ", requestName); + log("setting command handler for: " + requestName); let listener = function(_cb) { cb.call(this, ...arguments); }; diff --git a/lib/core/plugin.js b/lib/core/plugin.js index 2e53238c4..17feb99ad 100644 --- a/lib/core/plugin.js +++ b/lib/core/plugin.js @@ -25,9 +25,12 @@ var Plugin = function(options) { this.imports = []; this.embarkjs_code = []; this.embarkjs_init_code = {}; + this.afterContractsDeployActions = []; + this.onDeployActions = []; this.logger = options.logger; this.events = options.events; this.config = options.config; + this.env = options.env; this.loaded = false; this.currentContext = options.context; this.acceptedContext = options.pluginConfig.context || [constants.contexts.any]; @@ -202,6 +205,16 @@ Plugin.prototype.registerImportFile = function(importName, importLocation) { this.pluginTypes.push('imports'); }; +Plugin.prototype.registerAfterAllContractsDeploy = function(cb) { + this.afterContractsDeployActions.push(cb); + this.pluginTypes.push('afterContractsDeployActions'); +}; + +Plugin.prototype.registerOnDeployContracts = function(cb) { + this.onDeployActions.push(cb); + this.pluginTypes.push('onDeployActions'); +}; + Plugin.prototype.runFilePipeline = function() { var self = this; diff --git a/lib/core/plugins.js b/lib/core/plugins.js index f12f421f1..78a219750 100644 --- a/lib/core/plugins.js +++ b/lib/core/plugins.js @@ -10,6 +10,7 @@ var Plugins = function(options) { this.events = options.events; this.config = options.config; this.context = options.context; + this.env = options.env; }; Plugins.prototype.loadPlugins = function() { @@ -64,7 +65,8 @@ Plugins.prototype.loadInternalPlugin = function(pluginName, pluginConfig) { events: this.events, config: this.config, isInternal: true, - context: this.context + context: this.context, + env: this.env }); pluginWrapper.loadInternalPlugin(); this.plugins.push(pluginWrapper); diff --git a/lib/dashboard/console.js b/lib/dashboard/console.js index c78a97821..c77d2b2fa 100644 --- a/lib/dashboard/console.js +++ b/lib/dashboard/console.js @@ -1,5 +1,4 @@ let utils = require('../utils/utils.js'); -let RunCode = require('../core/runCode.js'); class Console { constructor(options) { @@ -10,7 +9,7 @@ class Console { } runCode(code) { - RunCode.doEval(code); + this.events.request('runcode:eval', code); } processEmbarkCmd (cmd) { @@ -48,8 +47,9 @@ class Console { } try { - let result = RunCode.doEval(cmd); - return callback(result); + this.events.request('runcode:eval', cmd, (err, result) => { + callback(result); + }); } catch (e) { if (e.message.indexOf('not defined') > 0) { diff --git a/lib/i18n/locales/en.json b/lib/i18n/locales/en.json index 128151208..f23f3a219 100644 --- a/lib/i18n/locales/en.json +++ b/lib/i18n/locales/en.json @@ -102,17 +102,30 @@ "Swarm node is offline...": "Swarm node is offline...", "Swarm node detected...": "Swarm node detected...", "Cannot find file %s Please ensure you are running this command inside the Dapp folder": "Cannot find file %s Please ensure you are running this command inside the Dapp folder", - "finished building": "finished building", "compiling Vyper contracts": "compiling Vyper contracts", "Vyper exited with error code ": "Vyper exited with error code ", "attempted to deploy %s without specifying parameters": "attempted to deploy %s without specifying parameters", - "adding %s to ipfs": "adding %s to ipfs", - "DApp available at": "DApp available at", - "successfully uploaded to ipfs": "successfully uploaded to ipfs", "Ethereum node (version unknown)": "Ethereum node (version unknown)", "No Blockchain node found": "No Blockchain node found", "Couldn't connect to an Ethereum node are you sure it's on?": "Couldn't connect to an Ethereum node are you sure it's on?", "make sure you have an Ethereum node or simulator running. e.g '%s'": "make sure you have an Ethereum node or simulator running. e.g '%s'", "Embark is building, please wait...": "Embark is building, please wait...", - "finished building DApp and deploying to": "finished building DApp and deploying to" + "finished building DApp and deploying to": "finished building DApp and deploying to", + "Type": "Type", + "to see the list of available commands": "to see the list of available commands", + "instantiated js-ipfs object configured to the current environment (available if ipfs is enabled)": "instantiated js-ipfs object configured to the current environment (available if ipfs is enabled)", + "reset done!": "reset done!", + "finished building": "finished building", + "finished deploying": "finished deploying", + "adding %s to ipfs": "adding %s to ipfs", + "DApp available at": "DApp available at", + "successfully uploaded to ipfs": "successfully uploaded to ipfs", + "Starting Blockchain node in another process": "Starting Blockchain node in another process", + "Blockchain node is ready": "Blockchain node is ready", + "terminating due to error": "terminating due to error", + "Unable to start the blockchain process. Is Geth installed?": "Unable to start the blockchain process. Is Geth installed?", + "Cannot upload: {{platform}} node is not running on {{protocol}}://{{host}}:{{port}}.": "Cannot upload: {{platform}} node is not running on {{protocol}}://{{host}}:{{port}}.", + "Error while downloading the file": "Error while downloading the file", + "Error while loading the content of ": "Error while loading the content of ", + "no contracts found": "no contracts found" } \ No newline at end of file diff --git a/lib/index.js b/lib/index.js index 00dcb5f43..3245ac938 100644 --- a/lib/index.js +++ b/lib/index.js @@ -86,6 +86,8 @@ class Embark { let engine = new Engine({ env: options.env, + client: options.client, + locale: options.locale, isDev: this.isDev(options.env), version: this.version, embarkConfig: options.embarkConfig || 'embark.json', @@ -128,11 +130,13 @@ class Embark { engine.startMonitor(); engine.startService("libraryManager"); + engine.startService("codeRunner"); engine.startService("web3"); engine.startService("pipeline"); - engine.startService("codeGenerator"); engine.startService("deployment"); - engine.startService(engine.config.storageConfig.provider, {bzz: engine.web3.bzz}); + engine.startService("codeGenerator"); + // TODO: this should be just 'storage' and the storage should figure out the module + engine.startService(engine.config.storageConfig.provider); engine.events.on('check:backOnline:Ethereum', function () { engine.logger.info(__('Ethereum node detected') + '..'); @@ -147,7 +151,6 @@ class Embark { engine.logger.info(__("Ready").underline); engine.events.emit("status", __("Ready").green); }); - engine.deployManager.deployContracts(function (err) { engine.startService("fileWatcher"); if (options.runWebserver) { @@ -179,6 +182,8 @@ class Embark { let engine = new Engine({ env: options.env, + client: options.client, + locale: options.locale, isDev: this.isDev(options.env), version: this.version, embarkConfig: 'embark.json', @@ -201,12 +206,14 @@ class Embark { } engine.startService("libraryManager"); + engine.startService("codeRunner"); engine.startService("web3"); engine.startService("pipeline"); - engine.startService("codeGenerator"); engine.startService("deployment", {onlyCompile: options.onlyCompile}); + engine.startService("codeGenerator"); + // TODO: this should be just 'storage' and the storage should figure out the modules to load engine.startService("ipfs"); - engine.startService("swarm", {bzz: engine.web3.bzz}); + engine.startService("swarm"); callback(); }, function deploy(callback) { @@ -258,8 +265,8 @@ class Embark { engine.startMonitor(); engine.startService("libraryManager"); engine.startService("pipeline"); - engine.startService("codeGenerator"); engine.startService("deployment", {onlyCompile: true}); + engine.startService("codeGenerator"); engine.deployManager.deployContracts(function (err) { callback(err); @@ -276,8 +283,8 @@ class Embark { graphGen.generate(options); engine.logger.info(__("Done. %s generated", "./diagram.svg").underline); - process.exit(); } + process.exit(); }); } @@ -294,6 +301,8 @@ class Embark { let engine = new Engine({ env: options.env, + client: options.client, + locale: options.locale, isDev: this.isDev(options.env), version: this.version, embarkConfig: 'embark.json', @@ -315,11 +324,13 @@ class Embark { function startServices(callback) { engine.startService("libraryManager"); + engine.startService("codeRunner"); engine.startService("web3"); engine.startService("pipeline"); - engine.startService("codeGenerator"); engine.startService("deployment"); - engine.startService(platform.toLowerCase(), {bzz: engine.web3.bzz}); + engine.startService("codeGenerator"); + // TODO: this should be just 'storage' and the storage should figure out the modules to load + engine.startService(platform.toLowerCase()); engine.startMonitor(); callback(); }, @@ -372,11 +383,12 @@ class Embark { }) .catch(callback); }); + // 1. build the contracts and dapp webpack engine.deployManager.deployContracts(function (err) { engine.logger.info(__("finished deploying").underline); if(err){ - callback(err); + callback(err); } }); } diff --git a/lib/modules/deploytracker/index.js b/lib/modules/deploytracker/index.js new file mode 100644 index 000000000..d6c89560e --- /dev/null +++ b/lib/modules/deploytracker/index.js @@ -0,0 +1,89 @@ +let utils = require('../../utils/utils.js'); +let fs = require('../../core/fs.js'); + +class DeployTracker { + + constructor(embark, options) { + this.logger = embark.logger; + this.events = embark.events; + + // TODO: unclear where it comes from + this.env = options.env; + //this.chainConfig = options.chainConfig; + this.chainConfig = embark.config.chainTracker; + this.registerEvents(); + } + + registerEvents() { + const self = this; + + this.events.on("deploy:beforeAll", this.setCurrentChain.bind(this)); + + this.events.on("deploy:contract:deployed", (contract) => { + self.trackContract(contract.className, contract.realRuntimeBytecode, contract.realArgs, contract.address); + self.save(); + }); + + this.events.setCommandHandler("deploy:contract:shouldDeploy", (contract, cb) => { + let trackedContract = self.getContract(contract.className, contract.realRuntimeBytecode, contract.realArgs); + cb(trackedContract); + }); + } + + // TODO: just an event might not be enought to the async nature + // it needs to be a plugin api before deploy, that makes the deployment wait + setCurrentChain() { + const self = this; + if (this.chainConfig === false) { + this.currentChain = {contracts: []}; + //return cb(); + } + + this.events.request("blockchain:block:byNumber", 0, function(_err, block) { + let chainId = block.hash; + + if (self.chainConfig[chainId] === undefined) { + self.chainConfig[chainId] = {contracts: {}}; + } + + self.currentChain = self.chainConfig[chainId]; + + self.currentChain.name = self.env; + //cb(); + }); + } + + loadConfig(config) { + this.chainConfig = config; + return this; + } + + trackContract(contractName, code, args, address) { + if (!this.currentChain) return false; + this.currentChain.contracts[utils.sha3(code + contractName + args.join(','))] = { + name: contractName, + address: address + }; + } + + getContract(contractName, code, args) { + if (!this.currentChain) return false; + let contract = this.currentChain.contracts[utils.sha3(code + contractName + args.join(','))]; + if (contract && contract.address === undefined) { + return false; + } + return contract; + } + + // TODO: abstract this + // chainConfig can be an abstract PersistentObject + save() { + if (this.chainConfig === false) { + return; + } + fs.writeJSONSync("./chains.json", this.chainConfig, {spaces: 2}); + } + +} + +module.exports = DeployTracker; diff --git a/lib/modules/ipfs/index.js b/lib/modules/ipfs/index.js index 9f8507e25..bccd839cc 100644 --- a/lib/modules/ipfs/index.js +++ b/lib/modules/ipfs/index.js @@ -1,7 +1,7 @@ let UploadIPFS = require('./upload.js'); let utils = require('../../utils/utils.js'); let fs = require('../../core/fs.js'); -let RunCode = require('../../core/runCode.js'); +let RunCode = require('../../coderunner/runCode'); let IpfsApi = require('ipfs-api'); class IPFS { diff --git a/lib/modules/specialconfigs/index.js b/lib/modules/specialconfigs/index.js new file mode 100644 index 000000000..94b8328eb --- /dev/null +++ b/lib/modules/specialconfigs/index.js @@ -0,0 +1,118 @@ +const stringReplaceAsync = require('string-replace-async'); +const async = require('async'); + +class SpecialConfigs { + + constructor(embark, options) { + this.logger = embark.logger; + this.events = embark.events; + this.buildDir = options.buildDir; + this.addCheck = options.addCheck; + this.embark = embark; + this.contractsConfig = embark.config.contractsConfig; + + this.registerAfterDeployAction(); + this.registerOnDeployAction(); + } + + replaceWithAddresses(cmd, cb) { + const self = this; + let regex = /\$\w+/g; + stringReplaceAsync.seq(cmd, regex, (match) => { + return (new Promise((resolve, reject) => { + let referedContractName = match.slice(1); + self.events.request('contracts:contract', referedContractName, (referedContract) => { + if (!referedContract) { + self.logger.error(referedContractName + ' does not exist'); + self.logger.error("error running cmd: " + cmd); + return reject(new Error("ReferedContractDoesNotExist")); + } + if (referedContract && referedContract.deploy === false) { + self.logger.error(referedContractName + " exists but has been set to not deploy"); + self.logger.error("error running cmd: " + cmd); + return reject(new Error("ReferedContracSetToNotdeploy")); + } + if (referedContract && !referedContract.deployedAddress) { + self.logger.error("couldn't find a valid address for " + referedContractName + ". has it been deployed?"); + self.logger.error("error running cmd: " + cmd); + return reject(new Error("ReferedContractAddressNotFound")); + } + return resolve(referedContract.deployedAddress); + }); + })); + }).then((result) => { + cb(null, result); + }).catch(cb); + } + + registerAfterDeployAction() { + const self = this; + + this.embark.registerAfterAllContractsDeploy((cb) => { + let afterDeployCmds = self.contractsConfig.afterDeploy || []; + + async.mapLimit(afterDeployCmds, 1, (cmd, nextMapCb) => { + self.replaceWithAddresses(cmd, nextMapCb); + }, (err, result) => { + if (err) { + return cb(new Error("error running afterDeploy")); + } + let onDeployCode = result; + + // TODO: convert to for to avoid repeated callback + for(let cmd of onDeployCode) { + self.logger.info("==== executing: " + cmd); + try { + self.events.request('runcode:eval', cmd); + } catch(e) { + if (e.message.indexOf("invalid opcode") >= 0) { + self.logger.error('the transaction was rejected; this usually happens due to a throw or a require, it can also happen due to an invalid operation'); + } + return cb(new Error(e)); + } + } + cb(); + }); + }); + } + + registerOnDeployAction() { + const self = this; + + this.embark.registerOnDeployContracts((contract, cb) => { + if (!contract.onDeploy) { + return cb(); + } + + self.logger.info(__('executing onDeploy commands')); + + let onDeployCmds = contract.onDeploy; + + async.mapLimit(onDeployCmds, 1, (cmd, nextMapCb) => { + self.replaceWithAddresses(cmd, nextMapCb); + }, (err, result) => { + if (err) { + return cb(new Error("error running onDeploy for " + contract.className.cyan)); + } + let onDeployCode = result; + + // TODO: convert to for to avoid repeated callback + for(let cmd of onDeployCode) { + self.logger.info("==== executing: " + cmd); + try { + self.events.request('runcode:eval', cmd); + } catch(e) { + if (e.message.indexOf("invalid opcode") >= 0) { + self.logger.error('the transaction was rejected; this usually happens due to a throw or a require, it can also happen due to an invalid operation'); + } + return cb(new Error(e)); + } + } + cb(); + }); + }); + } + +} + +module.exports = SpecialConfigs; diff --git a/lib/modules/whisper/index.js b/lib/modules/whisper/index.js index 4546dd24a..624fb63e5 100644 --- a/lib/modules/whisper/index.js +++ b/lib/modules/whisper/index.js @@ -8,6 +8,7 @@ class Whisper { this.events = embark.events; this.communicationConfig = options.communicationConfig; this.addCheck = options.addCheck; + // TODO: this should not be needed and should be deducted from the config instead this.web3 = options.web3; this.embark = embark; diff --git a/lib/pipeline/pipeline.js b/lib/pipeline/pipeline.js index 05f4d5e41..8f6ffd195 100644 --- a/lib/pipeline/pipeline.js +++ b/lib/pipeline/pipeline.js @@ -18,7 +18,6 @@ class Pipeline { this.assetFiles = options.assetFiles; this.events = options.events; this.logger = options.logger; - this.normalizeInput = options.normalizeInput; this.plugins = options.plugins; this.pipelinePlugins = this.plugins.getPluginsFor('pipeline'); } @@ -103,7 +102,7 @@ class Pipeline { modulePath: utils.joinPath(__dirname, 'webpackProcess.js'), logger: self.logger, events: self.events, - normalizeInput: self.normalizeInput + normalizeInput: utils.normalizeInput }); webpackProcess.send({action: constants.pipeline.init, options: {}}); webpackProcess.send({action: constants.pipeline.build, file, importsList}); diff --git a/lib/process/processLauncher.js b/lib/process/processLauncher.js index 18f6e68e8..450a36007 100644 --- a/lib/process/processLauncher.js +++ b/lib/process/processLauncher.js @@ -1,6 +1,6 @@ const child_process = require('child_process'); const constants = require('../constants'); - +const path = require('path'); class ProcessLauncher { @@ -14,10 +14,13 @@ class ProcessLauncher { * @return {ProcessLauncher} The ProcessLauncher instance */ constructor(options) { + this.name = path.basename(options.modulePath); this.process = child_process.fork(options.modulePath); this.logger = options.logger; this.normalizeInput = options.normalizeInput; this.events = options.events; + this.silent = options.silent; + this.exitCallback = options.exitCallback; this.subscriptions = {}; this._subscribeToMessages(); @@ -31,14 +34,26 @@ class ProcessLauncher { return self._handleLog(msg); } if (msg.event) { - return this._handleEvent(msg); + return self._handleEvent(msg); + } + self._checkSubscriptions(msg); + }); + + this.process.on('exit', (code) => { + if (self.exitCallback) { + return self.exitCallback(code); + } + if (code) { + this.logger.info(`Child Process ${this.name} exited with code ${code}`); } - this._checkSubscriptions(msg); }); } // Translates logs from the child process to the logger _handleLog(msg) { + if (this.silent && msg.type !== 'error') { + return; + } if (this.logger[msg.type]) { return this.logger[msg.type](this.normalizeInput(msg.message)); } diff --git a/lib/process/processWrapper.js b/lib/process/processWrapper.js index a22f15568..4bb093c93 100644 --- a/lib/process/processWrapper.js +++ b/lib/process/processWrapper.js @@ -45,6 +45,10 @@ class ProcessWrapper { } process.send({result: constants.process.log, message: messages, type}); } + + send() { + process.send(...arguments); + } } process.on('exit', () => { diff --git a/lib/processes/blockchainProcessLauncher.js b/lib/processes/blockchainProcessLauncher.js new file mode 100644 index 000000000..55c9af0b5 --- /dev/null +++ b/lib/processes/blockchainProcessLauncher.js @@ -0,0 +1,51 @@ +const ProcessLauncher = require('../process/processLauncher'); +const utils = require('../utils/utils.js'); +const constants = require('../constants'); + +class BlockchainProcessLauncher { + + constructor (options) { + this.events = options.events; + this.logger = options.logger; + this.normalizeInput = options.normalizeInput; + this.blockchainConfig = options.blockchainConfig; + this.locale = options.locale; + this.isDev = options.isDev; + } + + processEnded(code) { + this.logger.error('Blockchain process ended before the end of this process. Code: ' + code); + } + + startBlockchainNode() { + this.logger.info('Starting Blockchain node in another process'.cyan); + + this.blockchainProcess = new ProcessLauncher({ + modulePath: utils.joinPath(__dirname, '../cmds/blockchain/blockchainProcess.js'), + logger: this.logger, + events: this.events, + normalizeInput: this.normalizeInput, + silent: true, + exitCallback: this.processEnded.bind(this) + }); + this.blockchainProcess.send({ + action: constants.blockchain.init, options: { + blockchainConfig: this.blockchainConfig, + //client: this.client, + // TODO: assume for now it's geth + client: 'geth', + env: this.env, + isDev: this.isDev, + locale: this.locale + } + }); + + this.blockchainProcess.once('result', constants.blockchain.blockchainReady, () => { + this.logger.info('Blockchain node is ready'.cyan); + this.events.emit(constants.blockchain.blockchainReady); + }); + } + +} + +module.exports = BlockchainProcessLauncher; diff --git a/lib/tests/test.js b/lib/tests/test.js index 1dd2967ea..956f4ac27 100644 --- a/lib/tests/test.js +++ b/lib/tests/test.js @@ -2,7 +2,6 @@ var async = require('async'); //require("../utils/debug_util.js")(__filename, async); var Web3 = require('web3'); var Engine = require('../core/engine.js'); -var RunCode = require('../core/runCode.js'); var TestLogger = require('./test_logger.js'); var getSimulator = function() { @@ -68,11 +67,14 @@ Test.prototype.deployAll = function(contractsConfig, cb) { function startServices(callback) { //{abiType: 'contracts', embarkJS: false} self.engine.startService("libraryManager"); - self.engine.startService("codeGenerator"); + self.engine.startService("codeRunner"); + self.engine.startService("web3", { + web3: self.web3 + }); self.engine.startService("deployment", { - web3: self.web3, trackContracts: false }); + self.engine.startService("codeGenerator"); callback(); }, function deploy(callback) { @@ -104,7 +106,7 @@ Test.prototype.deployAll = function(contractsConfig, cb) { throw new Error(err); } self.web3.eth.defaultAccount = accounts[0]; - RunCode.doEval(result, {web3: self.web3}); + self.engine.events.request('runcode:eval', result); //cb(); cb(accounts); }); diff --git a/lib/utils/utils.js b/lib/utils/utils.js index 0063c1ec3..f9b0c2449 100644 --- a/lib/utils/utils.js +++ b/lib/utils/utils.js @@ -6,6 +6,7 @@ let https = require('follow-redirects').https; let shelljs = require('shelljs'); var tar = require('tar'); var propose = require('propose'); +var Web3 = require('web3'); const constants = require('../constants'); //let fs = require('../core/fs.js'); @@ -173,6 +174,31 @@ function getExternalContractUrl(file) { }; } +function toChecksumAddress(address) { + return Web3.utils.toChecksumAddress(address); +} + +function sha3(arg) { + return Web3.utils.sha3(arg); +} + +function normalizeInput(input) { + let args = Object.values(input); + if (args.length === 0) { + return ""; + } + if (args.length === 1) { + if (Array.isArray(args[0])) { return args[0].join(','); } + return args[0] || ""; + } + return ('[' + args.map((x) => { + if (x === null) { return "null"; } + if (x === undefined) { return "undefined"; } + if (Array.isArray(x)) { return x.join(','); } + return x; + }).toString() + ']'); +} + module.exports = { joinPath: joinPath, filesMatchingPattern: filesMatchingPattern, @@ -190,5 +216,8 @@ module.exports = { extractTar: extractTar, proposeAlternative: proposeAlternative, pwd: pwd, - getExternalContractUrl + getExternalContractUrl, + toChecksumAddress: toChecksumAddress, + sha3: sha3, + normalizeInput }; diff --git a/package-lock.json b/package-lock.json index 2673f6217..b22d565f7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,7 @@ "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.2.tgz", "integrity": "sha512-Q3FWsbdmkQd1ib11A4XNWQvRD//5KpPoGawA8aB2DR7pWKoW9XQv3+dGxD/Z1eVFze23Okdo27ZQytVFlweKvQ==", "requires": { - "@types/node": "10.1.0" + "@types/node": "10.1.2" } }, "@types/lockfile": { @@ -32,16 +32,16 @@ "integrity": "sha512-pD6JuijPmrfi84qF3/TzGQ7zi0QIX+d7ZdetD6jUA6cp+IsCzAquXZfi5viesew+pfpOTIdAVKuh1SHA7KeKzg==" }, "@types/node": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.1.0.tgz", - "integrity": "sha512-sELcX/cJHwRp8kn4hYSvBxKGJ+ubl3MvS8VJQe5gz/sp7CifYxsiCxIJ35wMIYyGVMgfO2AzRa8UcVReAcJRlw==" + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.1.2.tgz", + "integrity": "sha512-bjk1RIeZBCe/WukrFToIVegOf91Pebr8cXYBwLBIsfiGWVQ+ifwWsT59H3RxrWzWrzd1l/Amk1/ioY5Fq3/bpA==" }, "@types/node-fetch": { "version": "1.6.9", "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-1.6.9.tgz", "integrity": "sha512-n2r6WLoY7+uuPT7pnEtKJCmPUGyJ+cbyBR8Avnu4+m1nzz7DwBVuyIvvlBzCZ/nrpC7rIgb3D6pNavL7rFEa9g==", "requires": { - "@types/node": "10.1.0" + "@types/node": "10.1.2" } }, "@types/semver": { @@ -54,7 +54,7 @@ "resolved": "https://registry.npmjs.org/@types/tar/-/tar-4.0.0.tgz", "integrity": "sha512-YybbEHNngcHlIWVCYsoj7Oo1JU9JqONuAlt1LlTH/lmL8BMhbzdFUgReY87a05rY1j8mfK47Del+TCkaLAXwLw==", "requires": { - "@types/node": "10.1.0" + "@types/node": "10.1.2" } }, "@types/url-join": { @@ -127,19 +127,20 @@ "integrity": "sha1-lLiBq3FyhtAV+iGeCPtmcJ3aWj0=" }, "ajv": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.2.1.tgz", - "integrity": "sha1-KKarxJOiq+D7TIUHrK7bQ/pVBnE=", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.0.tgz", + "integrity": "sha512-VDUX1oSajablmiyFyED9L1DFndg0P9h7p1F+NO8FkIzei6EPrR6Zu1n18rd5P8PqaSRd/FrWv3G1TVBqpM83gA==", "requires": { - "fast-deep-equal": "1.1.0", + "fast-deep-equal": "2.0.1", "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" + "json-schema-traverse": "0.3.1", + "uri-js": "4.2.1" } }, "ajv-keywords": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.1.0.tgz", - "integrity": "sha1-rCsnk5xUPpXSwG5/f1wnvkqlQ74=" + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz", + "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=" }, "align-text": { "version": "0.1.4", @@ -149,6 +150,16 @@ "kind-of": "3.2.2", "longest": "1.0.1", "repeat-string": "1.6.1" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + } } }, "alphanum-sort": { @@ -208,230 +219,6 @@ "requires": { "micromatch": "3.1.10", "normalize-path": "2.1.1" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "requires": { - "arr-flatten": "1.1.0", - "array-unique": "0.3.2", - "extend-shallow": "2.0.1", - "fill-range": "4.0.0", - "isobject": "3.0.1", - "repeat-element": "1.1.2", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "0.1.1" - } - } - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "requires": { - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "posix-character-classes": "0.1.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "0.1.6" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "0.1.1" - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "requires": { - "array-unique": "0.3.2", - "define-property": "1.0.0", - "expand-brackets": "2.1.4", - "extend-shallow": "2.0.1", - "fragment-cache": "0.2.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "1.0.2" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "0.1.1" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "requires": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "0.1.1" - } - } - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.2", - "nanomatch": "1.2.9", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" - } - } } }, "argparse": { @@ -443,13 +230,9 @@ } }, "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, - "requires": { - "arr-flatten": "1.1.0" - } + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" }, "arr-flatten": { "version": "1.1.0", @@ -488,10 +271,9 @@ "dev": true }, "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" }, "arrify": { "version": "1.0.1", @@ -516,7 +298,7 @@ "requires": { "bn.js": "4.11.8", "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" + "minimalistic-assert": "1.0.1" } }, "assert": { @@ -538,11 +320,11 @@ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" }, "async": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", - "integrity": "sha1-YaKau2/MAm/qd+VtHG7FOnlZUfQ=", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", + "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", "requires": { - "lodash": "4.17.5" + "lodash": "4.17.10" } }, "async-each": { @@ -555,7 +337,7 @@ "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==", "requires": { - "async": "2.6.0" + "async": "2.6.1" } }, "async-limiter": { @@ -569,9 +351,9 @@ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, "atob": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.0.3.tgz", - "integrity": "sha1-GcenYEc3dEaPILLS0DNyrX1Mv10=" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz", + "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=" }, "autoprefixer": { "version": "6.7.7", @@ -579,7 +361,7 @@ "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", "requires": { "browserslist": "1.7.7", - "caniuse-db": "1.0.30000814", + "caniuse-db": "1.0.30000844", "normalize-range": "0.1.2", "num2fraction": "1.2.2", "postcss": "5.2.18", @@ -592,9 +374,9 @@ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" }, "aws4": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", - "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=" + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", + "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==" }, "babel-code-frame": { "version": "6.26.0", @@ -607,9 +389,9 @@ } }, "babel-core": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz", - "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=", + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", + "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", "requires": { "babel-code-frame": "6.26.0", "babel-generator": "6.26.1", @@ -624,7 +406,7 @@ "convert-source-map": "1.5.1", "debug": "2.6.9", "json5": "0.5.1", - "lodash": "4.17.5", + "lodash": "4.17.10", "minimatch": "3.0.4", "path-is-absolute": "1.0.1", "private": "0.1.8", @@ -642,7 +424,7 @@ "babel-types": "6.26.0", "detect-indent": "4.0.0", "jsesc": "1.3.0", - "lodash": "4.17.5", + "lodash": "4.17.10", "source-map": "0.5.7", "trim-right": "1.0.1" } @@ -686,7 +468,7 @@ "babel-helper-function-name": "6.24.1", "babel-runtime": "6.26.0", "babel-types": "6.26.0", - "lodash": "4.17.5" + "lodash": "4.17.10" } }, "babel-helper-explode-assignable-expression": { @@ -745,7 +527,7 @@ "requires": { "babel-runtime": "6.26.0", "babel-types": "6.26.0", - "lodash": "4.17.5" + "lodash": "4.17.10" } }, "babel-helper-remap-async-to-generator": { @@ -868,7 +650,7 @@ "babel-template": "6.26.0", "babel-traverse": "6.26.0", "babel-types": "6.26.0", - "lodash": "4.17.5" + "lodash": "4.17.10" } }, "babel-plugin-transform-es2015-classes": { @@ -944,15 +726,15 @@ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", "requires": { - "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", + "babel-plugin-transform-es2015-modules-commonjs": "6.26.2", "babel-runtime": "6.26.0", "babel-template": "6.26.0" } }, "babel-plugin-transform-es2015-modules-commonjs": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz", - "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=", + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz", + "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", "requires": { "babel-plugin-transform-strict-mode": "6.24.1", "babel-runtime": "6.26.0", @@ -1174,7 +956,7 @@ "babel-plugin-transform-es2015-function-name": "6.24.1", "babel-plugin-transform-es2015-literals": "6.22.0", "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", + "babel-plugin-transform-es2015-modules-commonjs": "6.26.2", "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", "babel-plugin-transform-es2015-modules-umd": "6.24.1", "babel-plugin-transform-es2015-object-super": "6.24.1", @@ -1187,24 +969,19 @@ "babel-plugin-transform-es2015-unicode-regex": "6.24.1", "babel-plugin-transform-exponentiation-operator": "6.24.1", "babel-plugin-transform-regenerator": "6.26.0", - "browserslist": "3.2.7", + "browserslist": "3.2.8", "invariant": "2.2.4", "semver": "5.5.0" }, "dependencies": { "browserslist": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.7.tgz", - "integrity": "sha512-oYVLxFVqpX9uMhOIQBLtZL+CX4uY8ZpWcjNTaxyWl5rO8yA9SSNikFnAfvk8J3P/7z3BZwNmEqFKaJoYltj3MQ==", + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", + "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", "requires": { - "caniuse-lite": "1.0.30000839", - "electron-to-chromium": "1.3.45" + "caniuse-lite": "1.0.30000844", + "electron-to-chromium": "1.3.47" } - }, - "electron-to-chromium": { - "version": "1.3.45", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.45.tgz", - "integrity": "sha1-RYrBscXHYM6IEaFtK/vZfsMLr7g=" } } }, @@ -1225,7 +1002,7 @@ "babel-plugin-transform-es2015-function-name": "6.24.1", "babel-plugin-transform-es2015-literals": "6.22.0", "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", + "babel-plugin-transform-es2015-modules-commonjs": "6.26.2", "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", "babel-plugin-transform-es2015-modules-umd": "6.24.1", "babel-plugin-transform-es2015-object-super": "6.24.1", @@ -1282,11 +1059,11 @@ "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", "requires": { - "babel-core": "6.26.0", + "babel-core": "6.26.3", "babel-runtime": "6.26.0", - "core-js": "2.5.3", + "core-js": "2.5.6", "home-or-tmp": "2.0.0", - "lodash": "4.17.5", + "lodash": "4.17.10", "mkdirp": "0.5.1", "source-map-support": "0.4.18" } @@ -1296,7 +1073,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.3", + "core-js": "2.5.6", "regenerator-runtime": "0.11.1" } }, @@ -1309,7 +1086,7 @@ "babel-traverse": "6.26.0", "babel-types": "6.26.0", "babylon": "6.18.0", - "lodash": "4.17.5" + "lodash": "4.17.10" } }, "babel-traverse": { @@ -1325,7 +1102,7 @@ "debug": "2.6.9", "globals": "9.18.0", "invariant": "2.2.4", - "lodash": "4.17.5" + "lodash": "4.17.10" } }, "babel-types": { @@ -1335,7 +1112,7 @@ "requires": { "babel-runtime": "6.26.0", "esutils": "2.0.2", - "lodash": "4.17.5", + "lodash": "4.17.10", "to-fast-properties": "1.0.3" } }, @@ -1344,7 +1121,7 @@ "resolved": "https://registry.npmjs.org/babelify/-/babelify-7.3.0.tgz", "integrity": "sha1-qlau3nBn/XvVSWZu4W3ChQh+iOU=", "requires": { - "babel-core": "6.26.0", + "babel-core": "6.26.3", "object-assign": "4.1.1" } }, @@ -1388,25 +1165,43 @@ "is-descriptor": "1.0.2" } }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } } } }, "base-x": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.4.tgz", - "integrity": "sha1-lMF4hzbaBl7bHWiAiGnjV8l3+nc=", - "requires": { - "safe-buffer": "5.1.1" - } + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-1.1.0.tgz", + "integrity": "sha1-QtPXF0dPnqAiB/bRqh9CaRPut6w=" }, "base64-js": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.3.tgz", - "integrity": "sha1-+xNmgjPZYUz1+0vOlam6QJbN+AE=" + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", + "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==" }, "bcrypt-pbkdf": { "version": "1.0.1", @@ -1445,10 +1240,10 @@ "resolved": "https://registry.npmjs.org/bip39/-/bip39-2.5.0.tgz", "integrity": "sha512-xwIx/8JKoT2+IPJpFEfXoWdYwP7UVAoUxxLNfGCfVowaJE7yg1Y5B1BVPqlUNsBq5/nGwmFkwRJ8xDW4sX8OdA==", "requires": { - "create-hash": "1.1.3", - "pbkdf2": "3.0.14", + "create-hash": "1.2.0", + "pbkdf2": "3.0.16", "randombytes": "2.0.6", - "safe-buffer": "5.1.1", + "safe-buffer": "5.1.2", "unorm": "1.4.1" } }, @@ -1457,15 +1252,16 @@ "resolved": "https://registry.npmjs.org/bip66/-/bip66-1.1.5.tgz", "integrity": "sha1-AfqHSHhcpwlV1QESF9GzE5lpyiI=", "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "5.1.2" } }, "bl": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.1.tgz", - "integrity": "sha1-ysMo977kVzDUBLaSID/LWQ4XLV4=", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", + "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", "requires": { - "readable-stream": "2.3.5" + "readable-stream": "2.3.6", + "safe-buffer": "5.1.2" } }, "blakejs": { @@ -1497,30 +1293,22 @@ "integrity": "sha1-LN4J617jQfSEdGuwMJsyU7GxRC8=" }, "body-parser": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", - "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", + "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", "requires": { "bytes": "3.0.0", "content-type": "1.0.4", "debug": "2.6.9", "depd": "1.1.2", - "http-errors": "1.6.2", - "iconv-lite": "0.4.19", + "http-errors": "1.6.3", + "iconv-lite": "0.4.23", "on-finished": "2.3.0", - "qs": "6.5.1", - "raw-body": "2.3.2", + "qs": "6.5.2", + "raw-body": "2.3.3", "type-is": "1.6.16" } }, - "boom": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", - "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", - "requires": { - "hoek": "4.2.1" - } - }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -1531,24 +1319,40 @@ } }, "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true, + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.2" + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "repeat-element": "1.1.2", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "0.1.1" + } + } } }, "brfs": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/brfs/-/brfs-1.5.0.tgz", - "integrity": "sha1-o4Iu16ZXI+BW+J/0tY6KvGNljwM=", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/brfs/-/brfs-1.6.1.tgz", + "integrity": "sha512-OfZpABRQQf+Xsmju8XE9bDjs+uU4vLREGolP7bDgcpsI17QREyZ4Bl+2KLxxx1kCgA0fAIhKQBaBYh+PEcCqYQ==", "requires": { "quote-stream": "1.0.2", - "resolve": "1.5.0", - "static-module": "2.2.2", + "resolve": "1.7.1", + "static-module": "2.2.5", "through2": "2.0.3" } }, @@ -1564,32 +1368,32 @@ "dev": true }, "browserify-aes": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.1.1.tgz", - "integrity": "sha1-OLerVe24Bv8tzaGn8WIHc6R3xJ8=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "requires": { "buffer-xor": "1.0.3", "cipher-base": "1.0.4", - "create-hash": "1.1.3", + "create-hash": "1.2.0", "evp_bytestokey": "1.0.3", "inherits": "2.0.3", - "safe-buffer": "5.1.1" + "safe-buffer": "5.1.2" } }, "browserify-cipher": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", - "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "requires": { - "browserify-aes": "1.1.1", - "browserify-des": "1.0.0", + "browserify-aes": "1.2.0", + "browserify-des": "1.0.1", "evp_bytestokey": "1.0.3" } }, "browserify-des": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", - "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.1.tgz", + "integrity": "sha512-zy0Cobe3hhgpiOM32Tj7KQ3Vl91m0njwsjzZQK1L+JDf11dzP9qIvjreVinsvXrgfjhStXwUWAEpB9D7Gwmayw==", "requires": { "cipher-base": "1.0.4", "des.js": "1.0.0", @@ -1611,13 +1415,6 @@ "integrity": "sha1-P/NKMAbvFcD7NWflQbkaI0ASPRE=", "requires": { "js-sha3": "0.3.1" - }, - "dependencies": { - "js-sha3": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.3.1.tgz", - "integrity": "sha1-hhIoAhQvCChQKg0d7h2V4lO7AkM=" - } } }, "browserify-sign": { @@ -1627,11 +1424,11 @@ "requires": { "bn.js": "4.11.8", "browserify-rsa": "4.0.1", - "create-hash": "1.1.3", - "create-hmac": "1.1.6", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", "elliptic": "6.4.0", "inherits": "2.0.3", - "parse-asn1": "5.1.0" + "parse-asn1": "5.1.1" } }, "browserify-zlib": { @@ -1647,16 +1444,16 @@ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", "requires": { - "caniuse-db": "1.0.30000814", - "electron-to-chromium": "1.3.37" + "caniuse-db": "1.0.30000844", + "electron-to-chromium": "1.3.47" } }, "bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-3.1.0.tgz", + "integrity": "sha1-1MJjiL9IBMrHFBQbGUWqR+XrJI4=", "requires": { - "base-x": "3.0.4" + "base-x": "1.1.0" } }, "bs58check": { @@ -1665,22 +1462,7 @@ "integrity": "sha1-xSVABzdJEXcU+gQsMEfrj5FRy/g=", "requires": { "bs58": "3.1.0", - "create-hash": "1.1.3" - }, - "dependencies": { - "base-x": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-1.1.0.tgz", - "integrity": "sha1-QtPXF0dPnqAiB/bRqh9CaRPut6w=" - }, - "bs58": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-3.1.0.tgz", - "integrity": "sha1-1MJjiL9IBMrHFBQbGUWqR+XrJI4=", - "requires": { - "base-x": "1.1.0" - } - } + "create-hash": "1.2.0" } }, "buffer": { @@ -1688,11 +1470,25 @@ "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "requires": { - "base64-js": "1.2.3", - "ieee754": "1.1.8", + "base64-js": "1.3.0", + "ieee754": "1.1.11", "isarray": "1.0.0" } }, + "buffer-alloc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.1.0.tgz", + "integrity": "sha1-BVFNM78WVtNUDGhPZbEgLpDsowM=", + "requires": { + "buffer-alloc-unsafe": "0.1.1", + "buffer-fill": "0.1.1" + } + }, + "buffer-alloc-unsafe": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-0.1.1.tgz", + "integrity": "sha1-/+H2dVHdBVc33iUzN7/oU9+rGmo=" + }, "buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", @@ -1703,6 +1499,16 @@ "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", "integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=" }, + "buffer-fill": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-0.1.1.tgz", + "integrity": "sha512-YgBMBzdRLEfgxJIGu2wrvI2E03tMCFU1p7d1KhB4BOoMN0VxmTFjSyN5JtKt9z8Z9JajMHruI6SE25W96wNv7Q==" + }, + "buffer-from": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz", + "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==" + }, "buffer-loader": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/buffer-loader/-/buffer-loader-0.0.1.tgz", @@ -1747,13 +1553,6 @@ "to-object-path": "0.3.0", "union-value": "1.0.0", "unset-value": "1.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } } }, "caller-path": { @@ -1800,20 +1599,20 @@ "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=", "requires": { "browserslist": "1.7.7", - "caniuse-db": "1.0.30000814", + "caniuse-db": "1.0.30000844", "lodash.memoize": "4.1.2", "lodash.uniq": "4.5.0" } }, "caniuse-db": { - "version": "1.0.30000814", - "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000814.tgz", - "integrity": "sha1-LJ7tf7wnJAZkdMt+GpJPDqEv5KI=" + "version": "1.0.30000844", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000844.tgz", + "integrity": "sha1-vKV5jNoraTHWgQDC1p5V+zOMu0E=" }, "caniuse-lite": { - "version": "1.0.30000839", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000839.tgz", - "integrity": "sha512-gJZIfmkuy84agOeAZc7WJOexZhisZaBSFk96gkGM6TkH7+1mBfr/MSPnXC8lO0g7guh/ucbswYjruvDbzc6i0g==" + "version": "1.0.30000844", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000844.tgz", + "integrity": "sha512-UpKQE7y6dLHhlv75UyBCRiun34Q+bmxyX3zS+ve9M07YG52tRafOvop9N9d5jC+sikKuG7UMweJKJNts4FVehA==" }, "caseless": { "version": "0.12.0", @@ -1863,7 +1662,7 @@ "anymatch": "2.0.0", "async-each": "1.0.1", "braces": "2.3.2", - "fsevents": "1.2.3", + "fsevents": "1.2.4", "glob-parent": "3.1.0", "inherits": "2.0.3", "is-binary-path": "1.0.1", @@ -1871,95 +1670,7 @@ "normalize-path": "2.1.1", "path-is-absolute": "1.0.1", "readdirp": "2.1.0", - "upath": "1.0.4" - }, - "dependencies": { - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "requires": { - "arr-flatten": "1.1.0", - "array-unique": "0.3.2", - "extend-shallow": "2.0.1", - "fill-range": "4.0.0", - "isobject": "3.0.1", - "repeat-element": "1.1.2", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "0.1.1" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "requires": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "requires": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "requires": { - "is-extglob": "2.1.1" - } - } - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" - }, - "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", - "requires": { - "is-extglob": "2.1.1" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "3.2.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } + "upath": "1.1.0" } }, "chownr": { @@ -1983,7 +1694,7 @@ "integrity": "sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94=", "requires": { "inherits": "2.0.3", - "safe-buffer": "5.1.1" + "safe-buffer": "5.1.2" } }, "circular-json": { @@ -2018,62 +1729,6 @@ "requires": { "is-descriptor": "0.1.6" } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=" } } }, @@ -2103,9 +1758,9 @@ } }, "clone": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz", - "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=" + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" }, "co": { "version": "4.6.0", @@ -2137,7 +1792,7 @@ "integrity": "sha1-zbYzY6lhUCQEolr7gsLibV/2J6Q=", "requires": { "bs58": "2.0.1", - "create-hash": "1.1.3" + "create-hash": "1.2.0" }, "dependencies": { "bs58": { @@ -2161,7 +1816,7 @@ "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz", "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", "requires": { - "clone": "1.0.3", + "clone": "1.0.4", "color-convert": "1.9.1", "color-string": "0.3.0" } @@ -2198,9 +1853,9 @@ } }, "colors": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.1.tgz", - "integrity": "sha1-9KPTApdqrwQjVroa3jsaLGLZ15Q=" + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.0.tgz", + "integrity": "sha512-EDpX3a7wHMWFA7PUHWPHNWqOxIIRSJetuwl0AS5Oi/5FMV8kWm69RTlgm00GKjBO1xFHMtBbL49yRtMMdticBw==" }, "combined-stream": { "version": "1.0.6", @@ -2231,12 +1886,13 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "concat-stream": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.1.tgz", - "integrity": "sha1-JhuPUYMB8dg042NCuf6gldJiCiY=", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "requires": { + "buffer-from": "1.0.0", "inherits": "2.0.3", - "readable-stream": "2.3.5", + "readable-stream": "2.3.6", "typedarray": "0.0.6" } }, @@ -2284,9 +1940,9 @@ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" }, "core-js": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz", - "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=" + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.6.tgz", + "integrity": "sha512-lQUVfQi0aLix2xpyjrrJEvfuYCqPc/HwmTKsC/VNf8q0zsjX7SQZtp4+oRONN5Tsur9GDETPjj+Ub2iDiGZfSQ==" }, "core-util-is": { "version": "1.0.2", @@ -2308,36 +1964,37 @@ "integrity": "sha1-1G5aB0hfuBs3tAoCu4PqQgMwoOE=" }, "create-ecdh": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", - "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", + "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", "requires": { "bn.js": "4.11.8", "elliptic": "6.4.0" } }, "create-hash": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", - "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "requires": { "cipher-base": "1.0.4", "inherits": "2.0.3", - "ripemd160": "2.0.1", - "sha.js": "2.4.10" + "md5.js": "1.3.4", + "ripemd160": "2.0.2", + "sha.js": "2.4.11" } }, "create-hmac": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", - "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "requires": { "cipher-base": "1.0.4", - "create-hash": "1.1.3", + "create-hash": "1.2.0", "inherits": "2.0.3", - "ripemd160": "2.0.1", - "safe-buffer": "5.1.1", - "sha.js": "2.4.10" + "ripemd160": "2.0.2", + "safe-buffer": "5.1.2", + "sha.js": "2.4.11" } }, "cross-fetch": { @@ -2354,43 +2011,25 @@ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "requires": { - "lru-cache": "4.1.2", + "lru-cache": "4.1.3", "shebang-command": "1.2.0", "which": "1.3.0" } }, - "cryptiles": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", - "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", - "requires": { - "boom": "5.2.0" - }, - "dependencies": { - "boom": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", - "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", - "requires": { - "hoek": "4.2.1" - } - } - } - }, "crypto-browserify": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", "integrity": "sha1-OWz58xN/A+S45TLFj2mCVOAPgOw=", "requires": { - "browserify-cipher": "1.0.0", + "browserify-cipher": "1.0.1", "browserify-sign": "4.0.4", - "create-ecdh": "4.0.0", - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "diffie-hellman": "5.0.2", + "create-ecdh": "4.0.3", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "diffie-hellman": "5.0.3", "inherits": "2.0.3", - "pbkdf2": "3.0.14", - "public-encrypt": "4.0.0", + "pbkdf2": "3.0.16", + "public-encrypt": "4.0.2", "randombytes": "2.0.6", "randomfill": "1.0.4" } @@ -2441,7 +2080,7 @@ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", "requires": { - "regenerate": "1.3.3", + "regenerate": "1.4.0", "regjsgen": "0.2.0", "regjsparser": "0.1.5" } @@ -2569,7 +2208,7 @@ "decompress-targz": "4.1.1", "decompress-unzip": "4.0.1", "graceful-fs": "4.1.11", - "make-dir": "1.2.0", + "make-dir": "1.3.0", "pify": "2.3.0", "strip-dirs": "2.1.0" }, @@ -2596,7 +2235,7 @@ "requires": { "file-type": "5.2.0", "is-stream": "1.1.0", - "tar-stream": "1.5.5" + "tar-stream": "1.6.1" } }, "decompress-tarbz2": { @@ -2696,10 +2335,31 @@ "isobject": "3.0.1" }, "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } } } }, @@ -2747,7 +2407,7 @@ "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", "requires": { "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" + "minimalistic-assert": "1.0.1" } }, "destroy": { @@ -2780,9 +2440,9 @@ "dev": true }, "diffie-hellman": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz", - "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "requires": { "bn.js": "4.11.8", "miller-rabin": "4.0.1", @@ -2813,9 +2473,9 @@ "resolved": "https://registry.npmjs.org/drbg.js/-/drbg.js-1.0.1.tgz", "integrity": "sha1-Pja2xCs3BDgjzbwzLVjzHiRFSAs=", "requires": { - "browserify-aes": "1.1.1", - "create-hash": "1.1.3", - "create-hmac": "1.1.6" + "browserify-aes": "1.2.0", + "create-hash": "1.2.0", + "create-hmac": "1.1.7" } }, "duplexer2": { @@ -2823,7 +2483,7 @@ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", "requires": { - "readable-stream": "2.3.5" + "readable-stream": "2.3.6" } }, "duplexer3": { @@ -2859,14 +2519,14 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "ejs": { - "version": "2.5.8", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.5.8.tgz", - "integrity": "sha512-QIDZL54fyV8MDcAsO91BMH1ft2qGGaHIJsJIA/+t+7uvXol1dm413fPcUgUb4k8F/9457rx4/KFE4XfDifrQxQ==" + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.1.tgz", + "integrity": "sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ==" }, "electron-to-chromium": { - "version": "1.3.37", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.37.tgz", - "integrity": "sha1-SpJzTgBEyM8LFVO+V+riGkxuX6s=" + "version": "1.3.47", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.47.tgz", + "integrity": "sha1-dk6IfKkQTQGgrI6r7n38DizhQQQ=" }, "elliptic": { "version": "6.4.0", @@ -2878,7 +2538,7 @@ "hash.js": "1.1.3", "hmac-drbg": "1.0.1", "inherits": "2.0.3", - "minimalistic-assert": "1.0.0", + "minimalistic-assert": "1.0.1", "minimalistic-crypto-utils": "1.0.1" } }, @@ -2897,7 +2557,7 @@ "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", "requires": { - "iconv-lite": "0.4.19" + "iconv-lite": "0.4.23" } }, "end-of-stream": { @@ -3076,28 +2736,28 @@ "requires": { "ajv": "5.5.2", "babel-code-frame": "6.26.0", - "chalk": "2.3.2", - "concat-stream": "1.6.1", + "chalk": "2.4.1", + "concat-stream": "1.6.2", "cross-spawn": "5.1.0", "debug": "3.1.0", "doctrine": "2.1.0", "eslint-scope": "3.7.1", "espree": "3.5.4", - "esquery": "1.0.0", + "esquery": "1.0.1", "estraverse": "4.2.0", "esutils": "2.0.2", "file-entry-cache": "2.0.0", "functional-red-black-tree": "1.0.1", "glob": "7.1.2", - "globals": "11.4.0", - "ignore": "3.3.7", + "globals": "11.5.0", + "ignore": "3.3.8", "imurmurhash": "0.1.4", "inquirer": "3.3.0", "is-resolvable": "1.1.0", "js-yaml": "3.11.0", "json-stable-stringify-without-jsonify": "1.0.1", "levn": "0.3.0", - "lodash": "4.17.5", + "lodash": "4.17.10", "minimatch": "3.0.4", "mkdirp": "0.5.1", "natural-compare": "1.4.0", @@ -3109,7 +2769,7 @@ "semver": "5.5.0", "strip-ansi": "4.0.0", "strip-json-comments": "2.0.1", - "table": "4.0.2", + "table": "4.0.3", "text-table": "0.2.0" }, "dependencies": { @@ -3141,14 +2801,14 @@ } }, "chalk": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", - "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "dev": true, "requires": { "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" + "supports-color": "5.4.0" } }, "debug": { @@ -3166,10 +2826,16 @@ "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", "dev": true }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "dev": true + }, "globals": { - "version": "11.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.4.0.tgz", - "integrity": "sha512-Dyzmifil8n/TmSqYDEXbm+C8yitzJQqQIlJQLNRMwa+BOUJpRC19pyVeN12JAjt61xonvXjtff+hJruTRXn5HA==", + "version": "11.5.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.5.0.tgz", + "integrity": "sha512-hYyf+kI8dm3nORsiiXUQigOU62hDLfJ9G01uyGMxhc6BKsircrUhC4uJPQPUSuq2GrTmiiEt7ewxlMdBewfmKQ==", "dev": true }, "has-flag": { @@ -3198,9 +2864,9 @@ } }, "supports-color": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", - "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { "has-flag": "3.0.0" @@ -3234,9 +2900,9 @@ "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=" }, "esquery": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz", - "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", "dev": true, "requires": { "estraverse": "4.2.0" @@ -3274,7 +2940,7 @@ "ethereumjs-tx": "1.3.4", "ethereumjs-util": "5.2.0", "ethjs-util": "0.1.4", - "json-rpc-engine": "3.6.2", + "json-rpc-engine": "3.7.1", "pify": "2.3.0", "tape": "4.9.0" }, @@ -3285,11 +2951,11 @@ "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", "requires": { "bn.js": "4.11.8", - "create-hash": "1.1.3", + "create-hash": "1.2.0", "ethjs-util": "0.1.4", "keccak": "1.4.0", "rlp": "2.0.0", - "safe-buffer": "5.1.1", + "safe-buffer": "5.1.2", "secp256k1": "3.5.0" } }, @@ -3307,7 +2973,7 @@ "requires": { "cross-fetch": "2.2.0", "eth-json-rpc-middleware": "1.6.0", - "json-rpc-engine": "3.6.2", + "json-rpc-engine": "3.7.1", "json-rpc-error": "2.0.0", "tape": "4.9.0" } @@ -3317,7 +2983,7 @@ "resolved": "https://registry.npmjs.org/eth-json-rpc-middleware/-/eth-json-rpc-middleware-1.6.0.tgz", "integrity": "sha512-tDVCTlrUvdqHKqivYMjtFZsdD7TtpNLBCfKAcOpaVs7orBMS/A8HWro6dIzNtTZIR05FAbJ3bioFOnZpuCew9Q==", "requires": { - "async": "2.6.0", + "async": "2.6.1", "eth-query": "2.1.2", "eth-tx-summary": "3.2.1", "ethereumjs-block": "1.7.1", @@ -3325,7 +2991,7 @@ "ethereumjs-util": "5.2.0", "ethereumjs-vm": "2.3.5", "fetch-ponyfill": "4.1.0", - "json-rpc-engine": "3.6.2", + "json-rpc-engine": "3.7.1", "json-rpc-error": "2.0.0", "json-stable-stringify": "1.0.1", "promise-to-callback": "1.0.0", @@ -3338,11 +3004,11 @@ "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", "requires": { "bn.js": "4.11.8", - "create-hash": "1.1.3", + "create-hash": "1.2.0", "ethjs-util": "0.1.4", "keccak": "1.4.0", "rlp": "2.0.0", - "safe-buffer": "5.1.1", + "safe-buffer": "5.1.2", "secp256k1": "3.5.0" } } @@ -3382,11 +3048,11 @@ "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", "requires": { "bn.js": "4.11.8", - "create-hash": "1.1.3", + "create-hash": "1.2.0", "ethjs-util": "0.1.4", "keccak": "1.4.0", "rlp": "2.0.0", - "safe-buffer": "5.1.1", + "safe-buffer": "5.1.2", "secp256k1": "3.5.0" } } @@ -3397,10 +3063,10 @@ "resolved": "https://registry.npmjs.org/eth-tx-summary/-/eth-tx-summary-3.2.1.tgz", "integrity": "sha512-mu8g5tDkQxlFah58ggFhTzolE4OnYTj6j8SVsnGsiWT7WxN722RwnEsk/bco2foy+PLSEF2Mnoiw+wCqKoY72A==", "requires": { - "async": "2.6.0", + "async": "2.6.1", "bn.js": "4.11.8", "clone": "2.1.1", - "concat-stream": "1.6.1", + "concat-stream": "1.6.2", "end-of-stream": "1.4.1", "eth-query": "2.1.2", "ethereumjs-block": "1.7.1", @@ -3415,7 +3081,7 @@ "async-eventemitter": { "version": "github:ahultgren/async-eventemitter#fa06e39e56786ba541c180061dbf2c0a5bbf951c", "requires": { - "async": "2.6.0" + "async": "2.6.1" } }, "clone": { @@ -3433,7 +3099,7 @@ "ethereumjs-tx": "1.3.4", "ethereumjs-util": "5.2.0", "ethjs-util": "0.1.4", - "json-rpc-engine": "3.6.2", + "json-rpc-engine": "3.7.1", "pify": "2.3.0", "tape": "4.9.0" } @@ -3444,11 +3110,11 @@ "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", "requires": { "bn.js": "4.11.8", - "create-hash": "1.1.3", + "create-hash": "1.2.0", "ethjs-util": "0.1.4", "keccak": "1.4.0", "rlp": "2.0.0", - "safe-buffer": "5.1.1", + "safe-buffer": "5.1.2", "secp256k1": "3.5.0" } }, @@ -3462,7 +3128,7 @@ "resolved": "https://registry.npmjs.org/web3-provider-engine/-/web3-provider-engine-13.8.0.tgz", "integrity": "sha512-fZXhX5VWwWpoFfrfocslyg6P7cN3YWPG/ASaevNfeO80R+nzgoPUBXcWQekSGSsNDkeRTis4aMmpmofYf1TNtQ==", "requires": { - "async": "2.6.0", + "async": "2.6.1", "clone": "2.1.1", "eth-block-tracker": "2.3.1", "eth-sig-util": "1.4.2", @@ -3474,12 +3140,12 @@ "json-rpc-error": "2.0.0", "json-stable-stringify": "1.0.1", "promise-to-callback": "1.0.0", - "readable-stream": "2.3.5", - "request": "2.85.0", + "readable-stream": "2.3.6", + "request": "2.87.0", "semaphore": "1.1.0", "solc": "0.4.23", "tape": "4.9.0", - "xhr": "2.4.1", + "xhr": "2.5.0", "xtend": "4.0.1" } } @@ -3503,11 +3169,11 @@ "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", "requires": { "bn.js": "4.11.8", - "create-hash": "1.1.3", + "create-hash": "1.2.0", "ethjs-util": "0.1.4", "keccak": "1.4.0", "rlp": "2.0.0", - "safe-buffer": "5.1.1", + "safe-buffer": "5.1.2", "secp256k1": "3.5.0" } } @@ -3520,7 +3186,7 @@ "requires": { "ethereumjs-util": "5.2.0", "rlp": "2.0.0", - "safe-buffer": "5.1.1" + "safe-buffer": "5.1.2" }, "dependencies": { "ethereumjs-util": { @@ -3529,11 +3195,11 @@ "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", "requires": { "bn.js": "4.11.8", - "create-hash": "1.1.3", + "create-hash": "1.2.0", "ethjs-util": "0.1.4", "keccak": "1.4.0", "rlp": "2.0.0", - "safe-buffer": "5.1.1", + "safe-buffer": "5.1.2", "secp256k1": "3.5.0" } } @@ -3544,7 +3210,7 @@ "resolved": "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-1.7.1.tgz", "integrity": "sha512-B+sSdtqm78fmKkBq78/QLKJbu/4Ts4P2KFISdgcuZUPDm9x+N7qgBPIIFUGbaakQh8bzuquiRVbdmvPKqbILRg==", "requires": { - "async": "2.6.0", + "async": "2.6.1", "ethereum-common": "0.2.0", "ethereumjs-tx": "1.3.4", "ethereumjs-util": "5.2.0", @@ -3562,11 +3228,11 @@ "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", "requires": { "bn.js": "4.11.8", - "create-hash": "1.1.3", + "create-hash": "1.2.0", "ethjs-util": "0.1.4", "keccak": "1.4.0", "rlp": "2.0.0", - "safe-buffer": "5.1.1", + "safe-buffer": "5.1.2", "secp256k1": "3.5.0" } } @@ -3577,51 +3243,7 @@ "resolved": "https://registry.npmjs.org/ethereumjs-testrpc/-/ethereumjs-testrpc-6.0.3.tgz", "integrity": "sha1-eguHvzZw+S9gf5j6aniAHZdBsSQ=", "requires": { - "webpack": "3.11.0" - }, - "dependencies": { - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" - }, - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", - "requires": { - "has-flag": "2.0.0" - } - }, - "webpack": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.11.0.tgz", - "integrity": "sha512-3kOFejWqj5ISpJk4Qj/V7w98h9Vl52wak3CLiw/cDOfbVTq7FeoZ0SdoHHY9PYlHr50ZS42OfvzE2vB4nncKQg==", - "requires": { - "acorn": "5.5.3", - "acorn-dynamic-import": "2.0.2", - "ajv": "6.2.1", - "ajv-keywords": "3.1.0", - "async": "2.6.0", - "enhanced-resolve": "3.4.1", - "escope": "3.6.0", - "interpret": "1.1.0", - "json-loader": "0.5.7", - "json5": "0.5.1", - "loader-runner": "2.3.0", - "loader-utils": "1.1.0", - "memory-fs": "0.4.1", - "mkdirp": "0.5.1", - "node-libs-browser": "2.1.0", - "source-map": "0.5.7", - "supports-color": "4.5.0", - "tapable": "0.2.8", - "uglifyjs-webpack-plugin": "0.4.6", - "watchpack": "1.6.0", - "webpack-sources": "1.1.0", - "yargs": "8.0.2" - } - } + "webpack": "3.12.0" } }, "ethereumjs-tx": { @@ -3639,11 +3261,11 @@ "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", "requires": { "bn.js": "4.11.8", - "create-hash": "1.1.3", + "create-hash": "1.2.0", "ethjs-util": "0.1.4", "keccak": "1.4.0", "rlp": "2.0.0", - "safe-buffer": "5.1.1", + "safe-buffer": "5.1.2", "secp256k1": "3.5.0" } } @@ -3655,7 +3277,7 @@ "integrity": "sha1-PpQosxfuvaPXJg2FT93alUsfG8Y=", "requires": { "bn.js": "4.11.8", - "create-hash": "1.1.3", + "create-hash": "1.2.0", "keccakjs": "0.2.1", "rlp": "2.0.0", "secp256k1": "3.5.0" @@ -3666,7 +3288,7 @@ "resolved": "https://registry.npmjs.org/ethereumjs-vm/-/ethereumjs-vm-2.3.5.tgz", "integrity": "sha512-AJ7x44+xqyE5+UO3Nns19WkTdZfyqFZ+sEjIEpvme7Ipbe3iBU1uwCcHEdiu/yY9bdhr3IfSa/NfIKNeXPaRVQ==", "requires": { - "async": "2.6.0", + "async": "2.6.1", "async-eventemitter": "0.2.4", "ethereum-common": "0.2.0", "ethereumjs-account": "2.0.5", @@ -3676,7 +3298,7 @@ "functional-red-black-tree": "1.0.1", "merkle-patricia-tree": "2.3.1", "rustbn.js": "0.1.2", - "safe-buffer": "5.1.1" + "safe-buffer": "5.1.2" }, "dependencies": { "ethereum-common": { @@ -3690,11 +3312,11 @@ "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", "requires": { "bn.js": "4.11.8", - "create-hash": "1.1.3", + "create-hash": "1.2.0", "ethjs-util": "0.1.4", "keccak": "1.4.0", "rlp": "2.0.0", - "safe-buffer": "5.1.1", + "safe-buffer": "5.1.2", "secp256k1": "3.5.0" } } @@ -3710,19 +3332,10 @@ "ethereumjs-util": "4.5.0", "hdkey": "0.7.1", "scrypt.js": "0.2.0", - "utf8": "2.1.1", + "utf8": "2.1.2", "uuid": "2.0.3" }, "dependencies": { - "hdkey": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/hdkey/-/hdkey-0.7.1.tgz", - "integrity": "sha1-yu5L6BqneSHpCbjSKN0PKayu5jI=", - "requires": { - "coinstring": "2.3.0", - "secp256k1": "3.5.0" - } - }, "uuid": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", @@ -3786,7 +3399,7 @@ "integrity": "sha1-f8vbGY3HGVlDLv4ThCaE4FJaywI=", "requires": { "md5.js": "1.3.4", - "safe-buffer": "5.1.1" + "safe-buffer": "5.1.2" } }, "execa": { @@ -3810,12 +3423,35 @@ "dev": true }, "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true, + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "requires": { - "is-posix-bracket": "0.1.1" + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "0.1.6" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "0.1.1" + } + } } }, "expand-range": { @@ -3824,7 +3460,49 @@ "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", "dev": true, "requires": { - "fill-range": "2.2.3" + "fill-range": "2.2.4" + }, + "dependencies": { + "fill-range": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", + "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", + "dev": true, + "requires": { + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "3.0.0", + "repeat-element": "1.1.2", + "repeat-string": "1.6.1" + } + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } } }, "express": { @@ -3864,15 +3542,71 @@ "vary": "1.1.2" }, "dependencies": { - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + "body-parser": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", + "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", + "requires": { + "bytes": "3.0.0", + "content-type": "1.0.4", + "debug": "2.6.9", + "depd": "1.1.2", + "http-errors": "1.6.3", + "iconv-lite": "0.4.19", + "on-finished": "2.3.0", + "qs": "6.5.1", + "raw-body": "2.3.2", + "type-is": "1.6.16" + } }, - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + "iconv-lite": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" + }, + "qs": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" + }, + "raw-body": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", + "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "unpipe": "1.0.0" + }, + "dependencies": { + "depd": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" + }, + "http-errors": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "requires": { + "depd": "1.1.1", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": "1.4.0" + } + }, + "setprototypeof": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" + } + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" } } }, @@ -3916,23 +3650,73 @@ } }, "external-editor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.1.0.tgz", - "integrity": "sha512-E44iT5QVOUJBKij4IIV3uvxuNlbKS38Tw1HiupxEIHPv9qtC2PrDYohbXV5U+1jnfIXttny8gUhj+oZvflFlzA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", + "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", "dev": true, "requires": { "chardet": "0.4.2", - "iconv-lite": "0.4.19", + "iconv-lite": "0.4.23", "tmp": "0.0.33" } }, "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "requires": { - "is-extglob": "1.0.0" + "array-unique": "0.3.2", + "define-property": "1.0.0", + "expand-brackets": "2.1.4", + "extend-shallow": "2.0.1", + "fragment-cache": "0.2.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "1.0.2" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "0.1.1" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + } } }, "extract-opts": { @@ -3982,9 +3766,9 @@ } }, "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" }, "fast-json-stable-stringify": { "version": "2.0.0", @@ -4068,16 +3852,24 @@ "dev": true }, "fill-range": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", - "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", - "dev": true, + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "requires": { - "is-number": "2.1.0", - "isobject": "2.1.0", - "randomatic": "1.1.7", - "repeat-element": "1.1.2", - "repeat-string": "1.6.1" + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "0.1.1" + } + } } }, "finalhandler": { @@ -4092,13 +3884,6 @@ "parseurl": "1.3.2", "statuses": "1.4.0", "unpipe": "1.0.0" - }, - "dependencies": { - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - } } }, "find-cache-dir": { @@ -4107,7 +3892,7 @@ "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", "requires": { "commondir": "1.0.1", - "make-dir": "1.2.0", + "make-dir": "1.3.0", "pkg-dir": "2.0.0" } }, @@ -4166,9 +3951,9 @@ "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=" }, "follow-redirects": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.4.1.tgz", - "integrity": "sha1-2BIPRRgZD1Wqxlu2/HuF/NZm1qo=", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.0.tgz", + "integrity": "sha512-fdrt472/9qQ6Kgjvb935ig6vJCuofpBUD14f9Vb+SLlm7xIe4Qva5gey8EKtv8lp7ahE1wilg3xL1znpVGtZIA==", "requires": { "debug": "3.1.0" }, @@ -4176,7 +3961,7 @@ "debug": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "requires": { "ms": "2.0.0" } @@ -4243,6 +4028,11 @@ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, "fs-extra": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-2.1.2.tgz", @@ -4257,7 +4047,7 @@ "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", "requires": { - "minipass": "2.2.1" + "minipass": "2.3.1" } }, "fs-promise": { @@ -4279,7 +4069,7 @@ "mkdirp": "0.5.1", "pull-defer": "0.2.2", "pull-file": "1.1.0", - "pull-stream": "3.6.2", + "pull-stream": "3.6.8", "pull-write-file": "0.2.4" } }, @@ -4289,13 +4079,13 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.3.tgz", - "integrity": "sha512-X+57O5YkDTiEQGiw8i7wYc2nQgweIekqkepI8Q3y4wVlurgBt2SuwxTeYUYMZIGpLZH3r/TsMjczCMXE5ZOt7Q==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", + "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", "optional": true, "requires": { - "nan": "2.9.2", - "node-pre-gyp": "0.9.1" + "nan": "2.10.0", + "node-pre-gyp": "0.10.0" }, "dependencies": { "abbrev": { @@ -4364,7 +4154,7 @@ } }, "deep-extend": { - "version": "0.4.2", + "version": "0.5.1", "bundled": true, "optional": true }, @@ -4520,7 +4310,7 @@ } }, "node-pre-gyp": { - "version": "0.9.1", + "version": "0.10.0", "bundled": true, "optional": true, "requires": { @@ -4530,7 +4320,7 @@ "nopt": "4.0.1", "npm-packlist": "1.1.10", "npmlog": "4.1.2", - "rc": "1.2.6", + "rc": "1.2.7", "rimraf": "2.6.2", "semver": "5.5.0", "tar": "4.4.1" @@ -4616,11 +4406,11 @@ "optional": true }, "rc": { - "version": "1.2.6", + "version": "1.2.7", "bundled": true, "optional": true, "requires": { - "deep-extend": "0.4.2", + "deep-extend": "0.5.1", "ini": "1.3.5", "minimist": "1.2.0", "strip-json-comments": "2.0.1" @@ -4840,6 +4630,32 @@ "requires": { "glob-parent": "2.0.0", "is-glob": "2.0.1" + }, + "dependencies": { + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "2.0.1" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + } } }, "glob-escape": { @@ -4848,12 +4664,22 @@ "integrity": "sha1-nCf3gh7RwTd1gvPv2VWOP2dWKO0=" }, "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true, + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "requires": { - "is-glob": "2.0.1" + "is-glob": "3.1.0", + "path-dirname": "1.0.2" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "requires": { + "is-extglob": "2.1.1" + } + } } }, "global": { @@ -4863,13 +4689,6 @@ "requires": { "min-document": "2.19.0", "process": "0.5.2" - }, - "dependencies": { - "process": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", - "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=" - } } }, "globals": { @@ -4905,7 +4724,7 @@ "integrity": "sha1-HcScaCLdnoovoAuiopUAboZkvQk=", "requires": { "glob": "7.1.2", - "lodash": "4.17.5", + "lodash": "4.17.10", "minimatch": "3.0.4" } }, @@ -4924,7 +4743,7 @@ "lowercase-keys": "1.0.1", "p-cancelable": "0.3.0", "p-timeout": "1.2.1", - "safe-buffer": "5.1.1", + "safe-buffer": "5.1.2", "timed-out": "4.0.1", "url-parse-lax": "1.0.0", "url-to-options": "1.0.1" @@ -4960,9 +4779,9 @@ "glob": "7.0.6", "grunt-cli": "1.2.0", "grunt-known-options": "1.1.0", - "grunt-legacy-log": "1.0.1", + "grunt-legacy-log": "1.0.2", "grunt-legacy-util": "1.0.0", - "iconv-lite": "0.4.19", + "iconv-lite": "0.4.23", "js-yaml": "3.5.5", "minimatch": "3.0.4", "nopt": "3.0.6", @@ -5117,16 +4936,15 @@ "dev": true }, "grunt-legacy-log": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-1.0.1.tgz", - "integrity": "sha1-x3MbJ0X0cyqplQ7k165jxVP2hGk=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-1.0.2.tgz", + "integrity": "sha512-WdedTJ/6zCXnI/coaouzqvkI19uwqbcPkdsXiDRKJyB5rOUlOxnCnTVbpeUdEckKVir2uHF3rDBYppj2p6N3+g==", "dev": true, "requires": { "colors": "1.1.2", "grunt-legacy-log-utils": "1.0.0", "hooker": "0.2.3", - "lodash": "4.17.5", - "underscore.string": "3.3.4" + "lodash": "4.17.10" }, "dependencies": { "colors": { @@ -5233,15 +5051,20 @@ "fast-json-stable-stringify": "2.0.0", "json-schema-traverse": "0.3.1" } + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" } } }, "hard-source-webpack-plugin": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/hard-source-webpack-plugin/-/hard-source-webpack-plugin-0.6.6.tgz", - "integrity": "sha1-PlVsJdRCjExFvuxv6/R0I3dkCEY=", + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/hard-source-webpack-plugin/-/hard-source-webpack-plugin-0.6.9.tgz", + "integrity": "sha512-A3fEUqW6C6/DV+1wbvrcffimql84SwEv5IB5BFkPSzOhIFICBbLaAPxSW/pSLRMOIMJ6dykFtbduFlRZeC4XqA==", "requires": { - "lodash": "4.17.5", + "lodash": "4.17.10", "mkdirp": "0.5.1", "node-object-hash": "1.3.0", "rimraf": "2.6.2", @@ -5300,13 +5123,6 @@ "get-value": "2.0.6", "has-values": "1.0.0", "isobject": "3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } } }, "has-values": { @@ -5318,24 +5134,6 @@ "kind-of": "4.0.0" }, "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, "kind-of": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", @@ -5347,11 +5145,12 @@ } }, "hash-base": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", - "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", "requires": { - "inherits": "2.0.3" + "inherits": "2.0.3", + "safe-buffer": "5.1.2" } }, "hash.js": { @@ -5360,7 +5159,7 @@ "integrity": "sha1-NA3tvmKQGHFRweodd3o0SJNd+EY=", "requires": { "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" + "minimalistic-assert": "1.0.1" } }, "hashlru": { @@ -5368,15 +5167,13 @@ "resolved": "https://registry.npmjs.org/hashlru/-/hashlru-2.2.1.tgz", "integrity": "sha1-EPIJmg18BaQPK+r1wdOc8vfavzY=" }, - "hawk": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", - "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", + "hdkey": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/hdkey/-/hdkey-0.7.1.tgz", + "integrity": "sha1-yu5L6BqneSHpCbjSKN0PKayu5jI=", "requires": { - "boom": "4.3.1", - "cryptiles": "3.1.2", - "hoek": "4.2.1", - "sntp": "2.1.0" + "coinstring": "2.3.0", + "secp256k1": "3.5.0" } }, "he": { @@ -5391,15 +5188,10 @@ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "requires": { "hash.js": "1.1.3", - "minimalistic-assert": "1.0.0", + "minimalistic-assert": "1.0.1", "minimalistic-crypto-utils": "1.0.1" } }, - "hoek": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", - "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==" - }, "home-or-tmp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", @@ -5426,21 +5218,14 @@ "integrity": "sha1-ZouTd26q5V696POtRkswekljYl4=" }, "http-errors": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", - "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "requires": { - "depd": "1.1.1", + "depd": "1.1.2", "inherits": "2.0.3", - "setprototypeof": "1.0.3", - "statuses": "1.3.1" - }, - "dependencies": { - "depd": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", - "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" - } + "setprototypeof": "1.1.0", + "statuses": "1.4.0" } }, "http-https": { @@ -5482,9 +5267,12 @@ } }, "iconv-lite": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", - "integrity": "sha1-90aPYBNfXl2tM5nAqBvpoWA6CCs=" + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "requires": { + "safer-buffer": "2.1.2" + } }, "icss-replace-symbols": { "version": "1.1.0", @@ -5496,7 +5284,7 @@ "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz", "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", "requires": { - "postcss": "6.0.19" + "postcss": "6.0.22" }, "dependencies": { "ansi-styles": { @@ -5508,13 +5296,13 @@ } }, "chalk": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", - "integrity": "sha1-JQ3JawdJG/1gHmSNZt319gx6XGU=", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "requires": { "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" + "supports-color": "5.4.0" } }, "has-flag": { @@ -5523,13 +5311,13 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "postcss": { - "version": "6.0.19", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz", - "integrity": "sha1-dqeDhvZwudlJSmVb8jrAEu/9FVU=", + "version": "6.0.22", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.22.tgz", + "integrity": "sha512-Toc9lLoUASwGqxBSJGTVcOQiDqjK+Z2XlWBg+IgYwQMY9vA2f7iMpXVc1GpPcfTSyM5lkxNo0oDwDRO+wm7XHA==", "requires": { - "chalk": "2.3.2", + "chalk": "2.4.1", "source-map": "0.6.1", - "supports-color": "5.3.0" + "supports-color": "5.4.0" } }, "source-map": { @@ -5538,9 +5326,9 @@ "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=" }, "supports-color": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", - "integrity": "sha1-WySsFduA+pJ89SJ6SjP9PEx2dsA=", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { "has-flag": "3.0.0" } @@ -5561,14 +5349,14 @@ } }, "ieee754": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", - "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=" + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.11.tgz", + "integrity": "sha512-VhDzCKN7K8ufStx/CLj5/PDTMgph+qwN5Pkd5i0sGnVwk56zJ0lkT8Qzi1xqWLS0Wp29DgDtNeS7v8/wMoZeHg==" }, "ignore": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz", - "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==", + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.8.tgz", + "integrity": "sha512-pUh+xUQQhQzevjRHHFqqcTy0/dP/kS9I8HSrUydhihjuD09W6ldVWFtIrwhXdUJHis3i2rZNqEHpZH/cbinFbg==", "dev": true }, "ignorefs": { @@ -5635,12 +5423,12 @@ "dev": true, "requires": { "ansi-escapes": "3.1.0", - "chalk": "2.3.2", + "chalk": "2.4.1", "cli-cursor": "2.1.0", "cli-width": "2.2.0", - "external-editor": "2.1.0", + "external-editor": "2.2.0", "figures": "2.0.0", - "lodash": "4.17.5", + "lodash": "4.17.10", "mute-stream": "0.0.7", "run-async": "2.3.0", "rx-lite": "4.0.8", @@ -5666,14 +5454,14 @@ } }, "chalk": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", - "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "dev": true, "requires": { "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" + "supports-color": "5.4.0" } }, "has-flag": { @@ -5692,9 +5480,9 @@ } }, "supports-color": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", - "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { "has-flag": "3.0.0" @@ -5735,10 +5523,10 @@ "resolved": "https://registry.npmjs.org/ipfs-api/-/ipfs-api-17.2.4.tgz", "integrity": "sha1-gTCl+pjhWyr49qJ7cUQs66/ImyQ=", "requires": { - "async": "2.6.0", + "async": "2.6.1", "bs58": "4.0.1", "cids": "0.5.3", - "concat-stream": "1.6.1", + "concat-stream": "1.6.2", "detect-node": "2.0.3", "flatmap": "0.0.3", "glob": "7.1.2", @@ -5748,23 +5536,41 @@ "ipld-dag-pb": "0.11.4", "is-ipfs": "0.3.2", "is-stream": "1.1.0", - "lru-cache": "4.1.2", - "multiaddr": "3.0.2", + "lru-cache": "4.1.3", + "multiaddr": "3.1.0", "multihashes": "0.4.13", "ndjson": "1.5.0", "once": "1.4.0", - "peer-id": "0.10.6", + "peer-id": "0.10.7", "peer-info": "0.11.6", "promisify-es6": "1.0.3", "pull-defer": "0.2.2", "pull-pushable": "2.2.0", "pump": "1.0.3", - "qs": "6.5.1", - "readable-stream": "2.3.5", - "stream-http": "2.8.0", + "qs": "6.5.2", + "readable-stream": "2.3.6", + "stream-http": "2.8.2", "stream-to-pull-stream": "1.7.2", "streamifier": "0.1.1", - "tar-stream": "1.5.5" + "tar-stream": "1.6.1" + }, + "dependencies": { + "base-x": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.4.tgz", + "integrity": "sha512-UYOadoSIkEI/VrRGSG6qp93rp2WdokiAiNYDfGW5qURAY8GiAQkvMbwNNSDYiVJopqv4gCna7xqf4rrNGp+5AA==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", + "requires": { + "base-x": "3.0.4" + } + } } }, "ipfs-block": { @@ -5797,7 +5603,7 @@ "resolved": "https://registry.npmjs.org/ipld-dag-pb/-/ipld-dag-pb-0.11.4.tgz", "integrity": "sha1-sPrlaB+tVpcTLjJdbC/xe18Mtqg=", "requires": { - "async": "2.6.0", + "async": "2.6.1", "bs58": "4.0.1", "buffer-loader": "0.0.1", "cids": "0.5.3", @@ -5806,9 +5612,27 @@ "multihashes": "0.4.13", "multihashing-async": "0.4.8", "protons": "1.0.1", - "pull-stream": "3.6.2", + "pull-stream": "3.6.8", "pull-traverse": "1.0.3", - "stable": "0.1.6" + "stable": "0.1.8" + }, + "dependencies": { + "base-x": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.4.tgz", + "integrity": "sha512-UYOadoSIkEI/VrRGSG6qp93rp2WdokiAiNYDfGW5qURAY8GiAQkvMbwNNSDYiVJopqv4gCna7xqf4rrNGp+5AA==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", + "requires": { + "base-x": "3.0.4" + } + } } }, "is-absolute-url": { @@ -5817,17 +5641,20 @@ "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=" }, "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "requires": { - "kind-of": "6.0.2" + "kind-of": "3.2.2" }, "dependencies": { "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=" + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } } } }, @@ -5863,17 +5690,20 @@ "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=" }, "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "requires": { - "kind-of": "6.0.2" + "kind-of": "3.2.2" }, "dependencies": { "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=" + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } } } }, @@ -5883,19 +5713,19 @@ "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" }, "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" }, "dependencies": { "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=" + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" } } }, @@ -5920,10 +5750,9 @@ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" }, "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" }, "is-finite": { "version": "1.0.2", @@ -5952,12 +5781,11 @@ "integrity": "sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=" }, "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", "requires": { - "is-extglob": "1.0.0" + "is-extglob": "2.1.1" } }, "is-hex-prefixed": { @@ -5973,6 +5801,24 @@ "bs58": "4.0.1", "cids": "0.5.3", "multihashes": "0.4.13" + }, + "dependencies": { + "base-x": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.4.tgz", + "integrity": "sha512-UYOadoSIkEI/VrRGSG6qp93rp2WdokiAiNYDfGW5qURAY8GiAQkvMbwNNSDYiVJopqv4gCna7xqf4rrNGp+5AA==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", + "requires": { + "base-x": "3.0.4" + } + } } }, "is-natural-number": { @@ -5981,12 +5827,21 @@ "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=" }, "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "dev": true, + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "requires": { "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + } } }, "is-object": { @@ -6044,13 +5899,6 @@ "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", "requires": { "isobject": "3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } } }, "is-posix-bracket": { @@ -6138,13 +5986,9 @@ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" }, "isstream": { "version": "0.1.2", @@ -6161,14 +6005,14 @@ } }, "js-base64": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.3.tgz", - "integrity": "sha1-LlRewrDylX9BNWUQIFIU6Y+tZYI=" + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.5.tgz", + "integrity": "sha512-aUnNwqMOXw3yvErjMPSQu6qIIzUmT1e5KcU1OZxRDU1g/am6mzBvcrmLAYwzmB59BHPrh5/tKaiF4OPhqRWESQ==" }, "js-sha3": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.7.0.tgz", - "integrity": "sha1-ClxXs295iCVzsthAUfi7hd0b1jo=" + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.3.1.tgz", + "integrity": "sha1-hhIoAhQvCChQKg0d7h2V4lO7AkM=" }, "js-tokens": { "version": "3.0.2", @@ -6201,20 +6045,28 @@ "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==" }, "json-parse-better-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.1.tgz", - "integrity": "sha1-UBg80bLSUnXeBp6ecbRnrJ6rlzo=" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" }, "json-rpc-engine": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/json-rpc-engine/-/json-rpc-engine-3.6.2.tgz", - "integrity": "sha512-Y0TdgaCZLXe2qMZyl0zEYarO8VwYt0P+ghkQZkzGrrYHsvdzMFkwXjckSQf05w/WAFQx4wfabu37PByYIfyS8A==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/json-rpc-engine/-/json-rpc-engine-3.7.1.tgz", + "integrity": "sha512-u1SGZsX2P1PitVrXmCETHsPGHL1kqNJCpOrblXOTxgjiIXPC8IZK1GfXy3wN/1UDLWm+FpQJBfOm2RoKHXy4yA==", "requires": { - "async": "2.6.0", + "async": "2.6.1", "babel-preset-env": "1.7.0", "babelify": "7.3.0", + "clone": "2.1.1", "json-rpc-error": "2.0.0", "promise-to-callback": "1.0.0" + }, + "dependencies": { + "clone": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", + "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=" + } } }, "json-rpc-error": { @@ -6307,8 +6159,8 @@ "requires": { "bindings": "1.3.0", "inherits": "2.0.3", - "nan": "2.9.2", - "safe-buffer": "5.1.1" + "nan": "2.10.0", + "safe-buffer": "5.1.2" } }, "keccakjs": { @@ -6317,7 +6169,7 @@ "integrity": "sha1-HWM6+QfvMFu/ny+mFtVsRFYd+k0=", "requires": { "browserify-sha3": "0.0.1", - "sha3": "1.2.0" + "sha3": "1.2.2" } }, "keypair": { @@ -6326,12 +6178,9 @@ "integrity": "sha1-dgNxknCvtlZO04oiCHoG/Jqk6hs=" }, "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" }, "klaw": { "version": "1.3.1", @@ -6355,12 +6204,20 @@ } }, "length-prefixed-stream": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/length-prefixed-stream/-/length-prefixed-stream-1.5.1.tgz", - "integrity": "sha1-mer1FnLd3vv92Ige57e33zXR7XM=", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/length-prefixed-stream/-/length-prefixed-stream-1.5.2.tgz", + "integrity": "sha512-5kHV/7ZCefC27d4FQLgFHek/pN1S0uEQ8OEgSm55DWO1rKxGi9by4F444aStxa56wB20b6CxZw6KiGPwmJOUmQ==", "requires": { - "readable-stream": "2.3.5", + "buffer-alloc-unsafe": "1.0.0", + "readable-stream": "2.3.6", "varint": "5.0.0" + }, + "dependencies": { + "buffer-alloc-unsafe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.0.0.tgz", + "integrity": "sha1-R0qojzTnvHX6MR0uZFdAnFhGw/4=" + } } }, "level-codec": { @@ -6496,13 +6353,13 @@ "integrity": "sha1-SocNJpujFQ3+AU5PmuoeVQdgFcg=", "requires": { "asn1.js": "5.0.0", - "async": "2.6.0", - "browserify-aes": "1.1.1", + "async": "2.6.1", + "browserify-aes": "1.2.0", "bs58": "4.0.1", "keypair": "1.0.1", "libp2p-crypto-secp256k1": "0.2.2", "multihashing-async": "0.4.8", - "node-forge": "0.7.4", + "node-forge": "0.7.5", "pem-jwk": "1.5.1", "protons": "1.0.1", "rsa-pem-to-jwk": "1.1.3", @@ -6517,7 +6374,23 @@ "requires": { "bn.js": "4.11.8", "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" + "minimalistic-assert": "1.0.1" + } + }, + "base-x": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.4.tgz", + "integrity": "sha512-UYOadoSIkEI/VrRGSG6qp93rp2WdokiAiNYDfGW5qURAY8GiAQkvMbwNNSDYiVJopqv4gCna7xqf4rrNGp+5AA==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", + "requires": { + "base-x": "3.0.4" } } } @@ -6527,10 +6400,10 @@ "resolved": "https://registry.npmjs.org/libp2p-crypto-secp256k1/-/libp2p-crypto-secp256k1-0.2.2.tgz", "integrity": "sha1-DdUh8Yq8TjahUuJOmzYwewrpzwU=", "requires": { - "async": "2.6.0", + "async": "2.6.1", "multihashing-async": "0.4.8", "nodeify": "1.0.1", - "safe-buffer": "5.1.1", + "safe-buffer": "5.1.2", "secp256k1": "3.5.0" } }, @@ -6539,7 +6412,7 @@ "requires": { "debug": "2.6.9", "hashlru": "2.2.1", - "length-prefixed-stream": "1.5.1", + "length-prefixed-stream": "1.5.2", "libp2p-crypto": "0.8.8", "lodash.values": "4.3.0", "pull-pushable": "2.2.0", @@ -6552,17 +6425,17 @@ "integrity": "sha1-3IpJy87bUjnel3YZ8tGN+fwRDzk=", "requires": { "asn1.js": "4.10.1", - "async": "2.6.0", - "browserify-aes": "1.1.1", + "async": "2.6.1", + "browserify-aes": "1.2.0", "keypair": "1.0.1", "libp2p-crypto-secp256k1": "0.1.4", "multihashing-async": "0.4.8", - "node-webcrypto-ossl": "1.0.35", + "node-webcrypto-ossl": "1.0.37", "nodeify": "1.0.1", "pem-jwk": "1.5.1", "protocol-buffers": "3.2.1", "rsa-pem-to-jwk": "1.1.3", - "safe-buffer": "5.1.1", + "safe-buffer": "5.1.2", "tweetnacl": "1.0.0", "webcrypto-shim": "github:dignifiedquire/webcrypto-shim#190bc9ec341375df6025b17ae12ddb2428ea49c8" } @@ -6572,11 +6445,11 @@ "resolved": "https://registry.npmjs.org/libp2p-crypto-secp256k1/-/libp2p-crypto-secp256k1-0.1.4.tgz", "integrity": "sha1-IRN4/jqFnYmtEgOqng111obIW98=", "requires": { - "async": "2.6.0", + "async": "2.6.1", "libp2p-crypto": "0.8.8", "multihashing-async": "0.4.8", "nodeify": "1.0.1", - "safe-buffer": "5.1.1", + "safe-buffer": "5.1.2", "secp256k1": "3.5.0" } } @@ -6627,20 +6500,6 @@ "graceful-fs": "4.1.11" } }, - "minipass": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.0.tgz", - "integrity": "sha512-jWC2Eg+Np4bxah7llu1IrUNSJQxtLz/J+pOjTM0nFpJXGAaV18XBWhUn031Q1tAA/TJtA1jgwnOe9S2PQa4Lbg==", - "requires": { - "safe-buffer": "5.1.2", - "yallist": "3.0.2" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, "tar": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.2.tgz", @@ -6648,7 +6507,7 @@ "requires": { "chownr": "1.0.1", "fs-minipass": "1.2.5", - "minipass": "2.3.0", + "minipass": "2.3.1", "minizlib": "1.1.0", "mkdirp": "0.5.1", "safe-buffer": "5.1.2", @@ -6726,9 +6585,9 @@ } }, "lodash": { - "version": "4.17.5", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", - "integrity": "sha1-maktZcAnLevoyWtgV7yPv6O+1RE=" + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", + "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==" }, "lodash._baseassign": { "version": "3.2.0", @@ -6855,9 +6714,9 @@ "integrity": "sha1-5QndTEVcGu190QWhdpTapbmsV58=" }, "lolex": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-2.3.2.tgz", - "integrity": "sha512-A5pN2tkFj7H0dGIAM6MFvHKMJcPnjZsOMvR7ujCjfgW5TbV6H9vb1PgxLtHvjqNZTHsUolz+6/WEO0N1xNx2ng==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/lolex/-/lolex-2.6.0.tgz", + "integrity": "sha512-e1UtIo1pbrIqEXib/yMjHciyqkng5lc0rrIbytgjmRgDR9+2ceNIAcwOWSgylRjoEP9VdVguCSRwnNmlbnOUwA==", "dev": true }, "longest": { @@ -6894,9 +6753,9 @@ "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" }, "lru-cache": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.2.tgz", - "integrity": "sha1-RSNLLm4vKzPaElYkxGZJKaAiTD8=", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", + "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", "requires": { "pseudomap": "1.0.2", "yallist": "2.1.2" @@ -6913,17 +6772,17 @@ "integrity": "sha1-WQTcU3w57G2+/q6QIycTX6hRHxI=" }, "magic-string": { - "version": "0.22.4", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.4.tgz", - "integrity": "sha1-MQObTkA2Y5VhjB1s+Bk8U5F0df8=", + "version": "0.22.5", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz", + "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==", "requires": { "vlq": "0.2.3" } }, "make-dir": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.2.0.tgz", - "integrity": "sha1-bWpJ7q1KrilsU7vzoaAIvWyJRps=", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", "requires": { "pify": "3.0.0" } @@ -6975,6 +6834,95 @@ "stack-trace": "0.0.9" }, "dependencies": { + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "1.1.0" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "0.1.1" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.4" + } + }, "resolve": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", @@ -6996,6 +6944,12 @@ "xregexp": "2.0.0" } }, + "math-random": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz", + "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=", + "dev": true + }, "md5.js": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", @@ -7003,17 +6957,6 @@ "requires": { "hash-base": "3.0.4", "inherits": "2.0.3" - }, - "dependencies": { - "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.1" - } - } } }, "media-typer": { @@ -7039,7 +6982,7 @@ "immediate": "3.2.3", "inherits": "2.0.3", "ltgt": "2.2.1", - "safe-buffer": "5.1.1" + "safe-buffer": "5.1.2" }, "dependencies": { "abstract-leveldown": { @@ -7058,7 +7001,7 @@ "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", "requires": { "errno": "0.1.7", - "readable-stream": "2.3.5" + "readable-stream": "2.3.6" } }, "memorystream": { @@ -7208,7 +7151,7 @@ "level-ws": "0.0.0", "levelup": "1.3.9", "memdown": "1.4.1", - "readable-stream": "2.3.5", + "readable-stream": "2.3.6", "rlp": "2.0.0", "semaphore": "1.1.0" }, @@ -7224,11 +7167,11 @@ "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", "requires": { "bn.js": "4.11.8", - "create-hash": "1.1.3", + "create-hash": "1.2.0", "ethjs-util": "0.1.4", "keccak": "1.4.0", "rlp": "2.0.0", - "safe-buffer": "5.1.1", + "safe-buffer": "5.1.2", "secp256k1": "3.5.0" } } @@ -7271,24 +7214,23 @@ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" }, "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.4" + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.2", + "nanomatch": "1.2.9", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" } }, "miller-rabin": { @@ -7337,9 +7279,9 @@ } }, "minimalistic-assert": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", - "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" }, "minimalistic-crypto-utils": { "version": "1.0.1", @@ -7360,10 +7302,11 @@ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" }, "minipass": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.2.1.tgz", - "integrity": "sha1-WtqXU4sQJ7TPchNDJChXjLVkAR8=", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.1.tgz", + "integrity": "sha512-liT0Gjaz7OHXg2qsfefVFfryBE9uAsqVFWQ6wVf4KNMzI2edsrCDjdGDpTxRaykbxhSKHu/SDtRRcMEcCcTQ2g==", "requires": { + "safe-buffer": "5.1.2", "yallist": "3.0.2" }, "dependencies": { @@ -7379,7 +7322,7 @@ "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.1.0.tgz", "integrity": "sha1-EeE2WM5GvDpwomeqxYNZ0eDCnOs=", "requires": { - "minipass": "2.2.1" + "minipass": "2.3.1" } }, "mixin-deep": { @@ -7487,9 +7430,9 @@ "dev": true }, "mock-fs": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.4.2.tgz", - "integrity": "sha512-dF+yxZSojSiI8AXGoxj5qdFWpucndc54Ug+TwlpHFaV7j22MGG+OML2+FVa6xAZtjb/OFFQhOC37Jegx2GbEwA==" + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.5.0.tgz", + "integrity": "sha512-qqudNfOX7ZmX9vm1WIAU+gWlmxVNAnwY6UG3RkFutNywmRCUGP83tujP6IxX2DS1TmcaEZBOhYwDuYEmJYE+3w==" }, "mout": { "version": "0.11.1", @@ -7502,9 +7445,9 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "multiaddr": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/multiaddr/-/multiaddr-3.0.2.tgz", - "integrity": "sha1-aZ4YZizKfXh5zu1meFkJj1r1fcg=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/multiaddr/-/multiaddr-3.1.0.tgz", + "integrity": "sha512-QhmsD/TufS5KB7brd1rkzLz2sJqybQlDT9prroiWacaw61DtHoe2X/vcAnOu8mZc7s7ZzevFPvY5tzv3yjBXlQ==", "requires": { "bs58": "4.0.1", "ip": "1.1.5", @@ -7512,6 +7455,24 @@ "lodash.map": "4.6.0", "varint": "5.0.0", "xtend": "4.0.1" + }, + "dependencies": { + "base-x": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.4.tgz", + "integrity": "sha512-UYOadoSIkEI/VrRGSG6qp93rp2WdokiAiNYDfGW5qURAY8GiAQkvMbwNNSDYiVJopqv4gCna7xqf4rrNGp+5AA==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", + "requires": { + "base-x": "3.0.4" + } + } } }, "multibase": { @@ -7520,6 +7481,16 @@ "integrity": "sha1-G9tiyC3gEU+CKh2HUby+6RzS77o=", "requires": { "base-x": "3.0.4" + }, + "dependencies": { + "base-x": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.4.tgz", + "integrity": "sha512-UYOadoSIkEI/VrRGSG6qp93rp2WdokiAiNYDfGW5qURAY8GiAQkvMbwNNSDYiVJopqv4gCna7xqf4rrNGp+5AA==", + "requires": { + "safe-buffer": "5.1.2" + } + } } }, "multicodec": { @@ -7537,6 +7508,24 @@ "requires": { "bs58": "4.0.1", "varint": "5.0.0" + }, + "dependencies": { + "base-x": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.4.tgz", + "integrity": "sha512-UYOadoSIkEI/VrRGSG6qp93rp2WdokiAiNYDfGW5qURAY8GiAQkvMbwNNSDYiVJopqv4gCna7xqf4rrNGp+5AA==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", + "requires": { + "base-x": "3.0.4" + } + } } }, "multihashing-async": { @@ -7544,12 +7533,19 @@ "resolved": "https://registry.npmjs.org/multihashing-async/-/multihashing-async-0.4.8.tgz", "integrity": "sha1-QVcrJaj8aOsxi4ViQJ/dchpyfqE=", "requires": { - "async": "2.6.0", + "async": "2.6.1", "blakejs": "1.1.0", "js-sha3": "0.7.0", "multihashes": "0.4.13", "murmurhash3js": "3.0.1", "nodeify": "1.0.1" + }, + "dependencies": { + "js-sha3": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.7.0.tgz", + "integrity": "sha512-Wpks3yBDm0UcL5qlVhwW9Jr9n9i4FfeWBFOOXP5puDS/SiudJGhw7DPyBqn3487qD4F0lsC0q3zxink37f7zeA==" + } } }, "murmurhash3js": { @@ -7578,9 +7574,9 @@ } }, "nan": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.9.2.tgz", - "integrity": "sha1-9WTXX1+PNqbZRWzKemxP5IireGY=" + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", + "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==" }, "nano-json-stream-parser": { "version": "0.1.2", @@ -7604,23 +7600,6 @@ "regex-not": "1.0.2", "snapdragon": "0.8.2", "to-regex": "3.0.2" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=" - } } }, "natural-compare": { @@ -7670,7 +7649,7 @@ "requires": { "@sinonjs/formatio": "2.0.0", "just-extend": "1.1.27", - "lolex": "2.3.2", + "lolex": "2.6.0", "path-to-regexp": "1.7.0", "text-encoding": "0.6.4" }, @@ -7698,9 +7677,9 @@ "integrity": "sha1-q4hOjn5X44qUR1POxwb3iNF2i7U=" }, "node-forge": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.4.tgz", - "integrity": "sha1-jm6fVjoeMiE6p1CM3tIqp5Hb+YY=" + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.5.tgz", + "integrity": "sha512-MmbQJ2MTESTjt3Gi/3yG1wGpIMhUfcIypUCGtTizFR9IiccFwxSpfp0vtIZlkFclEqERemxfnSdZEMR9VqqEFQ==" }, "node-libs-browser": { "version": "2.1.0", @@ -7721,15 +7700,27 @@ "process": "0.11.10", "punycode": "1.4.1", "querystring-es3": "0.2.1", - "readable-stream": "2.3.5", + "readable-stream": "2.3.6", "stream-browserify": "2.0.1", - "stream-http": "2.8.0", - "string_decoder": "1.0.3", + "stream-http": "2.8.2", + "string_decoder": "1.1.1", "timers-browserify": "2.0.10", "tty-browserify": "0.0.0", "url": "0.11.0", "util": "0.10.3", "vm-browserify": "0.0.4" + }, + "dependencies": { + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + } } }, "node-object-hash": { @@ -7738,14 +7729,14 @@ "integrity": "sha512-/IHFGoMJWIAcFbrI3KYx6TUmHdBXRZXACAVbkHzYB39JZzoVqgme7wcMnhrOwCvrO8HfIipFTBhELJFMhiw1mg==" }, "node-webcrypto-ossl": { - "version": "1.0.35", - "resolved": "https://registry.npmjs.org/node-webcrypto-ossl/-/node-webcrypto-ossl-1.0.35.tgz", - "integrity": "sha1-FCJVeb0J9dY7CtbO4LqAD4xqBg0=", + "version": "1.0.37", + "resolved": "https://registry.npmjs.org/node-webcrypto-ossl/-/node-webcrypto-ossl-1.0.37.tgz", + "integrity": "sha512-AQSux10u8NoUhRPqb2bapqM8EKMawKGYIBbGNWsBUTeq0uXYtuIheujcaJo5XY1Yy6HffC/fP7AHHtSA4KP2ig==", "requires": { "mkdirp": "0.5.1", - "nan": "2.9.2", - "tslib": "1.9.0", - "webcrypto-core": "0.1.19" + "nan": "2.10.0", + "tslib": "1.9.1", + "webcrypto-core": "0.1.22" } }, "nodeify": { @@ -7862,37 +7853,12 @@ "is-descriptor": "0.1.6" } }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { - "kind-of": "3.2.2" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "3.2.2" - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=" - } + "is-buffer": "1.1.6" } } } @@ -7913,13 +7879,6 @@ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "requires": { "isobject": "3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } } }, "object.omit": { @@ -7938,13 +7897,6 @@ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "requires": { "isobject": "3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - } } }, "oboe": { @@ -8021,44 +7973,6 @@ "orbit-db-feedstore": "0.2.0", "orbit-db-kvstore": "0.2.0", "orbit-db-pubsub": "0.2.1" - }, - "dependencies": { - "libp2p-crypto": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/libp2p-crypto/-/libp2p-crypto-0.8.8.tgz", - "integrity": "sha1-3IpJy87bUjnel3YZ8tGN+fwRDzk=", - "dev": true, - "requires": { - "asn1.js": "4.10.1", - "async": "2.6.0", - "browserify-aes": "1.1.1", - "keypair": "1.0.1", - "libp2p-crypto-secp256k1": "0.1.4", - "multihashing-async": "0.4.8", - "node-webcrypto-ossl": "1.0.35", - "nodeify": "1.0.1", - "pem-jwk": "1.5.1", - "protocol-buffers": "3.2.1", - "rsa-pem-to-jwk": "1.1.3", - "safe-buffer": "5.1.1", - "tweetnacl": "1.0.0", - "webcrypto-shim": "github:dignifiedquire/webcrypto-shim#190bc9ec341375df6025b17ae12ddb2428ea49c8" - } - }, - "libp2p-crypto-secp256k1": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/libp2p-crypto-secp256k1/-/libp2p-crypto-secp256k1-0.1.4.tgz", - "integrity": "sha1-IRN4/jqFnYmtEgOqng111obIW98=", - "dev": true, - "requires": { - "async": "2.6.0", - "libp2p-crypto": "0.8.8", - "multihashing-async": "0.4.8", - "nodeify": "1.0.1", - "safe-buffer": "5.1.1", - "secp256k1": "3.5.0" - } - } } }, "orbit-db-cache": { @@ -8069,7 +7983,7 @@ "fs-pull-blob-store": "0.4.1", "idb-pull-blob-store": "0.5.1", "lock": "0.1.4", - "pull-stream": "3.6.2" + "pull-stream": "3.6.8" } }, "orbit-db-counterstore": { @@ -8210,15 +8124,15 @@ "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==" }, "parse-asn1": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", - "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", + "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", "requires": { "asn1.js": "4.10.1", - "browserify-aes": "1.1.1", - "create-hash": "1.1.3", + "browserify-aes": "1.2.0", + "create-hash": "1.2.0", "evp_bytestokey": "1.0.3", - "pbkdf2": "3.0.14" + "pbkdf2": "3.0.16" } }, "parse-glob": { @@ -8231,6 +8145,23 @@ "is-dotfile": "1.0.3", "is-extglob": "1.0.0", "is-glob": "2.0.1" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + } } }, "parse-headers": { @@ -8248,7 +8179,7 @@ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "requires": { "error-ex": "1.3.1", - "json-parse-better-errors": "1.0.1" + "json-parse-better-errors": "1.0.2" } }, "parseurl": { @@ -8318,25 +8249,25 @@ } }, "pbkdf2": { - "version": "3.0.14", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.14.tgz", - "integrity": "sha1-o14TxkeZsGzhUyD0WcIw5o5zut4=", + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.16.tgz", + "integrity": "sha512-y4CXP3thSxqf7c0qmOF+9UeOTrifiVTIM+u7NWlq+PRsHbr7r7dpCmvzrZxa96JJUNi0Y5w9VqG5ZNeCVMoDcA==", "requires": { - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "ripemd160": "2.0.1", - "safe-buffer": "5.1.1", - "sha.js": "2.4.10" + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "ripemd160": "2.0.2", + "safe-buffer": "5.1.2", + "sha.js": "2.4.11" } }, "peer-id": { - "version": "0.10.6", - "resolved": "https://registry.npmjs.org/peer-id/-/peer-id-0.10.6.tgz", - "integrity": "sha1-y1UuNdJiXPPkrrTeRd2z7pa7Pos=", + "version": "0.10.7", + "resolved": "https://registry.npmjs.org/peer-id/-/peer-id-0.10.7.tgz", + "integrity": "sha512-VEpMFcL9q0NQijmR0jsj38OGbY4yzaWMEareVkDahopmlNT+Cpsot8btPgsgBBApP9NiZj2Enwvh8rZN30ocQw==", "requires": { - "async": "2.6.0", + "async": "2.6.1", "libp2p-crypto": "0.12.1", - "lodash": "4.17.5", + "lodash": "4.17.10", "multihashes": "0.4.13" } }, @@ -8346,8 +8277,8 @@ "integrity": "sha1-BICwAw0t+P1PCYebJppxWyvSuhI=", "requires": { "lodash.uniqby": "4.7.0", - "multiaddr": "3.0.2", - "peer-id": "0.10.6" + "multiaddr": "3.1.0", + "peer-id": "0.10.7" } }, "pem-jwk": { @@ -8365,7 +8296,7 @@ "requires": { "bn.js": "1.3.0", "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" + "minimalistic-assert": "1.0.1" } }, "bn.js": { @@ -8429,7 +8360,7 @@ "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=", "requires": { "chalk": "1.1.3", - "js-base64": "2.4.3", + "js-base64": "2.4.5", "source-map": "0.5.7", "supports-color": "3.2.3" }, @@ -8550,7 +8481,7 @@ "caniuse-api": "1.6.1", "postcss": "5.2.18", "postcss-selector-parser": "2.2.3", - "vendors": "1.0.1" + "vendors": "1.0.2" } }, "postcss-message-helpers": { @@ -8604,7 +8535,7 @@ "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.0.tgz", "integrity": "sha1-ZhQOzs447wa/DT41XWm/WdFB6oU=", "requires": { - "postcss": "6.0.19" + "postcss": "6.0.22" }, "dependencies": { "ansi-styles": { @@ -8616,13 +8547,13 @@ } }, "chalk": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", - "integrity": "sha1-JQ3JawdJG/1gHmSNZt319gx6XGU=", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "requires": { "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" + "supports-color": "5.4.0" } }, "has-flag": { @@ -8631,13 +8562,13 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "postcss": { - "version": "6.0.19", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz", - "integrity": "sha1-dqeDhvZwudlJSmVb8jrAEu/9FVU=", + "version": "6.0.22", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.22.tgz", + "integrity": "sha512-Toc9lLoUASwGqxBSJGTVcOQiDqjK+Z2XlWBg+IgYwQMY9vA2f7iMpXVc1GpPcfTSyM5lkxNo0oDwDRO+wm7XHA==", "requires": { - "chalk": "2.3.2", + "chalk": "2.4.1", "source-map": "0.6.1", - "supports-color": "5.3.0" + "supports-color": "5.4.0" } }, "source-map": { @@ -8646,9 +8577,9 @@ "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=" }, "supports-color": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", - "integrity": "sha1-WySsFduA+pJ89SJ6SjP9PEx2dsA=", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { "has-flag": "3.0.0" } @@ -8661,7 +8592,7 @@ "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", "requires": { "css-selector-tokenizer": "0.7.0", - "postcss": "6.0.19" + "postcss": "6.0.22" }, "dependencies": { "ansi-styles": { @@ -8673,13 +8604,13 @@ } }, "chalk": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", - "integrity": "sha1-JQ3JawdJG/1gHmSNZt319gx6XGU=", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "requires": { "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" + "supports-color": "5.4.0" } }, "has-flag": { @@ -8688,13 +8619,13 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "postcss": { - "version": "6.0.19", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz", - "integrity": "sha1-dqeDhvZwudlJSmVb8jrAEu/9FVU=", + "version": "6.0.22", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.22.tgz", + "integrity": "sha512-Toc9lLoUASwGqxBSJGTVcOQiDqjK+Z2XlWBg+IgYwQMY9vA2f7iMpXVc1GpPcfTSyM5lkxNo0oDwDRO+wm7XHA==", "requires": { - "chalk": "2.3.2", + "chalk": "2.4.1", "source-map": "0.6.1", - "supports-color": "5.3.0" + "supports-color": "5.4.0" } }, "source-map": { @@ -8703,9 +8634,9 @@ "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=" }, "supports-color": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", - "integrity": "sha1-WySsFduA+pJ89SJ6SjP9PEx2dsA=", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { "has-flag": "3.0.0" } @@ -8718,7 +8649,7 @@ "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", "requires": { "css-selector-tokenizer": "0.7.0", - "postcss": "6.0.19" + "postcss": "6.0.22" }, "dependencies": { "ansi-styles": { @@ -8730,13 +8661,13 @@ } }, "chalk": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", - "integrity": "sha1-JQ3JawdJG/1gHmSNZt319gx6XGU=", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "requires": { "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" + "supports-color": "5.4.0" } }, "has-flag": { @@ -8745,13 +8676,13 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "postcss": { - "version": "6.0.19", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz", - "integrity": "sha1-dqeDhvZwudlJSmVb8jrAEu/9FVU=", + "version": "6.0.22", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.22.tgz", + "integrity": "sha512-Toc9lLoUASwGqxBSJGTVcOQiDqjK+Z2XlWBg+IgYwQMY9vA2f7iMpXVc1GpPcfTSyM5lkxNo0oDwDRO+wm7XHA==", "requires": { - "chalk": "2.3.2", + "chalk": "2.4.1", "source-map": "0.6.1", - "supports-color": "5.3.0" + "supports-color": "5.4.0" } }, "source-map": { @@ -8760,9 +8691,9 @@ "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=" }, "supports-color": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", - "integrity": "sha1-WySsFduA+pJ89SJ6SjP9PEx2dsA=", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { "has-flag": "3.0.0" } @@ -8775,7 +8706,7 @@ "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", "requires": { "icss-replace-symbols": "1.1.0", - "postcss": "6.0.19" + "postcss": "6.0.22" }, "dependencies": { "ansi-styles": { @@ -8787,13 +8718,13 @@ } }, "chalk": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", - "integrity": "sha1-JQ3JawdJG/1gHmSNZt319gx6XGU=", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "requires": { "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" + "supports-color": "5.4.0" } }, "has-flag": { @@ -8802,13 +8733,13 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "postcss": { - "version": "6.0.19", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz", - "integrity": "sha1-dqeDhvZwudlJSmVb8jrAEu/9FVU=", + "version": "6.0.22", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.22.tgz", + "integrity": "sha512-Toc9lLoUASwGqxBSJGTVcOQiDqjK+Z2XlWBg+IgYwQMY9vA2f7iMpXVc1GpPcfTSyM5lkxNo0oDwDRO+wm7XHA==", "requires": { - "chalk": "2.3.2", + "chalk": "2.4.1", "source-map": "0.6.1", - "supports-color": "5.3.0" + "supports-color": "5.4.0" } }, "source-map": { @@ -8817,9 +8748,9 @@ "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=" }, "supports-color": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", - "integrity": "sha1-WySsFduA+pJ89SJ6SjP9PEx2dsA=", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { "has-flag": "3.0.0" } @@ -8954,9 +8885,9 @@ "integrity": "sha1-I4Hts2ifelPWUxkAYPz4ItLzaP8=" }, "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", + "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=" }, "process-nextick-args": { "version": "2.0.0", @@ -9012,7 +8943,7 @@ "resolved": "https://registry.npmjs.org/protocol-buffers/-/protocol-buffers-3.2.1.tgz", "integrity": "sha1-NyWOF+JKCC8G67F3MekoUdHHaIk=", "requires": { - "brfs": "1.5.0", + "brfs": "1.6.1", "generate-function": "2.0.0", "generate-object-property": "1.2.0", "protocol-buffers-schema": "3.3.2", @@ -9031,7 +8962,7 @@ "integrity": "sha1-HBBxRMB/wtHLi2y3ZFHmqTgjdnY=", "requires": { "protocol-buffers-schema": "3.3.2", - "safe-buffer": "5.1.1", + "safe-buffer": "5.1.2", "signed-varint": "2.0.1", "varint": "5.0.0" } @@ -9056,14 +8987,14 @@ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" }, "public-encrypt": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", - "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.2.tgz", + "integrity": "sha512-4kJ5Esocg8X3h8YgJsKAuoesBgB7mqH3eowiDzMUPKiRDDE7E/BqqZD1hnTByIaAFiwAw246YEltSq7tdrOH0Q==", "requires": { "bn.js": "4.11.8", "browserify-rsa": "4.0.1", - "create-hash": "1.1.3", - "parse-asn1": "5.1.0", + "create-hash": "1.2.0", + "parse-asn1": "5.1.1", "randombytes": "2.0.6" } }, @@ -9091,9 +9022,9 @@ "integrity": "sha1-Xy867UethpGfAbEqLpnW8b13ZYE=" }, "pull-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/pull-stream/-/pull-stream-3.6.2.tgz", - "integrity": "sha1-HqFMbxMXTmrE3vDCpOdlZ7fLDFw=" + "version": "3.6.8", + "resolved": "https://registry.npmjs.org/pull-stream/-/pull-stream-3.6.8.tgz", + "integrity": "sha512-wQUIptQBcM0rFsUhZoEpOT3vUn73DtTGVq3NQ86c4T7iMOSprDzeKWYq2ksXnbwiuExTKvt+8G9fzNLFQuiO+A==" }, "pull-traverse": { "version": "1.0.3", @@ -9127,7 +9058,7 @@ "requires": { "looper": "4.0.0", "pull-cat": "1.1.11", - "pull-stream": "3.6.2" + "pull-stream": "3.6.8" }, "dependencies": { "looper": { @@ -9152,9 +9083,9 @@ } }, "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", + "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=" }, "q": { "version": "1.5.1", @@ -9162,9 +9093,9 @@ "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" }, "qs": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "integrity": "sha1-NJzfbu+J7EXBLX1es/wMhwNDptg=" + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" }, "query-string": { "version": "4.3.4", @@ -9203,43 +9134,21 @@ } }, "randomatic": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", - "integrity": "sha1-x6vpzIuHwLqodrGf3oP9RkeX44w=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.0.0.tgz", + "integrity": "sha512-VdxFOIEY3mNO5PtSRkkle/hPJDHvQhK21oa73K4yAc9qmp6N429gAyF1gZMOTMeS0/AYzaV/2Trcef+NaIonSA==", "dev": true, "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" + "is-number": "4.0.0", + "kind-of": "6.0.2", + "math-random": "1.0.1" }, "dependencies": { "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "kind-of": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true } } }, @@ -9248,7 +9157,7 @@ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", "integrity": "sha1-0wLFIpSFiISKjTAMkytEwkIx2oA=", "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "5.1.2" } }, "randomfill": { @@ -9257,7 +9166,7 @@ "integrity": "sha1-ySGW/IarQr6YPxvzF3giSTHWFFg=", "requires": { "randombytes": "2.0.6", - "safe-buffer": "5.1.1" + "safe-buffer": "5.1.2" } }, "randomhex": { @@ -9271,13 +9180,13 @@ "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" }, "raw-body": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", - "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", + "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", "requires": { "bytes": "3.0.0", - "http-errors": "1.6.2", - "iconv-lite": "0.4.19", + "http-errors": "1.6.3", + "iconv-lite": "0.4.23", "unpipe": "1.0.0" } }, @@ -9309,16 +9218,16 @@ } }, "readable-stream": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz", - "integrity": "sha1-tPhQA6k4y7bsvOKhJPsQEr0ag40=", + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "requires": { "core-util-is": "1.0.2", "inherits": "2.0.3", "isarray": "1.0.0", "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", "util-deprecate": "1.0.2" } }, @@ -9329,7 +9238,7 @@ "requires": { "graceful-fs": "4.1.11", "minimatch": "3.0.4", - "readable-stream": "2.3.5", + "readable-stream": "2.3.6", "set-immediate-shim": "1.0.1" } }, @@ -9376,9 +9285,9 @@ } }, "regenerate": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz", - "integrity": "sha1-DDNtOYBVPXVcObWGrjsgqknIK38=" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", + "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==" }, "regenerator-runtime": { "version": "0.11.1", @@ -9418,7 +9327,7 @@ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", "requires": { - "regenerate": "1.3.3", + "regenerate": "1.4.0", "regjsgen": "0.2.0", "regjsparser": "0.1.5" } @@ -9467,19 +9376,18 @@ } }, "request": { - "version": "2.85.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.85.0.tgz", - "integrity": "sha512-8H7Ehijd4js+s6wuVPLjwORxD4zeuyjYugprdOXlPSqaApmL/QOy+EB/beICHVCHkGMKNh5rvihb5ov+IDw4mg==", + "version": "2.87.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", + "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", "requires": { "aws-sign2": "0.7.0", - "aws4": "1.6.0", + "aws4": "1.7.0", "caseless": "0.12.0", "combined-stream": "1.0.6", "extend": "3.0.1", "forever-agent": "0.6.1", "form-data": "2.3.2", "har-validator": "5.0.3", - "hawk": "6.0.2", "http-signature": "1.2.0", "is-typedarray": "1.0.0", "isstream": "0.1.2", @@ -9487,9 +9395,8 @@ "mime-types": "2.1.18", "oauth-sign": "0.8.2", "performance-now": "2.1.0", - "qs": "6.5.1", - "safe-buffer": "5.1.1", - "stringstream": "0.0.5", + "qs": "6.5.2", + "safe-buffer": "5.1.2", "tough-cookie": "2.3.4", "tunnel-agent": "0.6.0", "uuid": "3.2.1" @@ -9521,9 +9428,9 @@ } }, "resolve": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz", - "integrity": "sha1-HwmsznlsmnYlefMbLBzEw83fnzY=", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", + "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", "requires": { "path-parse": "1.0.5" } @@ -9579,11 +9486,11 @@ } }, "ripemd160": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", - "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "requires": { - "hash-base": "2.0.2", + "hash-base": "3.0.4", "inherits": "2.0.3" } }, @@ -9654,9 +9561,9 @@ } }, "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha1-iTMSr2myEj3vcfV4iQAWce6yyFM=" + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "safe-regex": { "version": "1.1.0", @@ -9674,6 +9581,11 @@ "graceful-fs": "4.1.11" } }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, "samsam": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/samsam/-/samsam-1.3.0.tgz", @@ -9700,8 +9612,8 @@ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.5.tgz", "integrity": "sha1-IYNvBgiqwXt4+ePiTa/xSlyhOj4=", "requires": { - "ajv": "6.2.1", - "ajv-keywords": "3.1.0" + "ajv": "6.5.0", + "ajv-keywords": "3.2.0" } }, "scrypt": { @@ -9709,7 +9621,7 @@ "resolved": "https://registry.npmjs.org/scrypt/-/scrypt-6.0.3.tgz", "integrity": "sha1-BOAUpWgrU/pQwtXM4WfXGcBthw0=", "requires": { - "nan": "2.9.2" + "nan": "2.10.0" } }, "scrypt.js": { @@ -9726,7 +9638,7 @@ "resolved": "https://registry.npmjs.org/scryptsy/-/scryptsy-1.2.1.tgz", "integrity": "sha1-oyJfpLJST4AnAHYeKFW987LZIWM=", "requires": { - "pbkdf2": "3.0.14" + "pbkdf2": "3.0.16" } }, "secp256k1": { @@ -9737,11 +9649,11 @@ "bindings": "1.3.0", "bip66": "1.1.5", "bn.js": "4.11.8", - "create-hash": "1.1.3", + "create-hash": "1.2.0", "drbg.js": "1.0.1", "elliptic": "6.4.0", - "nan": "2.9.2", - "safe-buffer": "5.1.1" + "nan": "2.10.0", + "safe-buffer": "5.1.2" } }, "seek-bzip": { @@ -9784,19 +9696,12 @@ "escape-html": "1.0.3", "etag": "1.8.1", "fresh": "0.5.2", - "http-errors": "1.6.2", + "http-errors": "1.6.3", "mime": "1.4.1", "ms": "2.0.0", "on-finished": "2.3.0", "range-parser": "1.2.0", "statuses": "1.4.0" - }, - "dependencies": { - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha1-u3PURtonlhBu/MG2AaJT1sRr0Ic=" - } } }, "serve-static": { @@ -9815,11 +9720,11 @@ "resolved": "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz", "integrity": "sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==", "requires": { - "body-parser": "1.18.2", + "body-parser": "1.18.3", "cors": "2.8.4", "express": "4.16.3", - "request": "2.85.0", - "xhr": "2.4.1" + "request": "2.87.0", + "xhr": "2.5.0" } }, "set-blocking": { @@ -9859,25 +9764,25 @@ "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" }, "setprototypeof": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", - "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" }, "sha.js": { - "version": "2.4.10", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.10.tgz", - "integrity": "sha1-sf3lzX0RpWJmOKB8YEq5Cc+jH5s=", + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "requires": { "inherits": "2.0.3", - "safe-buffer": "5.1.1" + "safe-buffer": "5.1.2" } }, "sha3": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/sha3/-/sha3-1.2.0.tgz", - "integrity": "sha1-aYnxtwpJhwWHajc+LGKs6WqpOZo=", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/sha3/-/sha3-1.2.2.tgz", + "integrity": "sha1-pmxQmN5MJbyIM27ItIF9AFvKe6k=", "requires": { - "nan": "2.9.2" + "nan": "2.10.0" } }, "shallow-copy": { @@ -9922,9 +9827,9 @@ "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=" }, "simple-get": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.7.0.tgz", - "integrity": "sha512-RkE9rGPHcxYZ/baYmgJtOSM63vH0Vyq+ma5TijBcLla41SWlh8t6XYIGMR/oeZcmr+/G8k+zrClkkVrtnQ0esg==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz", + "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==", "requires": { "decompress-response": "3.3.0", "once": "1.4.0", @@ -9938,20 +9843,14 @@ "dev": true, "requires": { "@sinonjs/formatio": "2.0.0", - "diff": "3.5.0", + "diff": "3.2.0", "lodash.get": "4.4.2", - "lolex": "2.3.2", + "lolex": "2.6.0", "nise": "1.3.3", "supports-color": "5.4.0", "type-detect": "4.0.8" }, "dependencies": { - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true - }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -10002,7 +9901,7 @@ "extend-shallow": "2.0.1", "map-cache": "0.2.2", "source-map": "0.5.7", - "source-map-resolve": "0.5.1", + "source-map-resolve": "0.5.2", "use": "3.1.0" }, "dependencies": { @@ -10021,57 +9920,6 @@ "requires": { "is-extendable": "0.1.1" } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=" } } }, @@ -10093,10 +9941,31 @@ "is-descriptor": "1.0.2" } }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } } } }, @@ -10106,14 +9975,16 @@ "integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=", "requires": { "kind-of": "3.2.2" - } - }, - "sntp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", - "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", - "requires": { - "hoek": "4.2.1" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + } } }, "solc": { @@ -10313,11 +10184,11 @@ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" }, "source-map-resolve": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz", - "integrity": "sha1-etD1k/IoFZjoVN+A8ZquS5LXoRo=", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", "requires": { - "atob": "2.0.3", + "atob": "2.1.1", "decode-uri-component": "0.2.0", "resolve-url": "0.2.1", "source-map-url": "0.4.0", @@ -10410,9 +10281,9 @@ } }, "stable": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.6.tgz", - "integrity": "sha1-kQ9dKu17Ugxud3SZwfMuE5/eyxA=" + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" }, "stack-trace": { "version": "0.0.9", @@ -10444,85 +10315,34 @@ "requires": { "is-descriptor": "0.1.6" } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=" } } }, "static-module": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/static-module/-/static-module-2.2.2.tgz", - "integrity": "sha1-SW6b8dKctRd6MPriJFEZU9fdKRs=", + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/static-module/-/static-module-2.2.5.tgz", + "integrity": "sha512-D8vv82E/Kpmz3TXHKG8PPsCPg+RAX6cbCOyvjM6x04qZtQ47EtJFVwRsdov3n5d6/6ynrOY9XB4JkaZwB2xoRQ==", "requires": { - "concat-stream": "1.6.1", + "concat-stream": "1.6.2", "convert-source-map": "1.5.1", "duplexer2": "0.1.4", "escodegen": "1.9.1", "falafel": "2.1.0", "has": "1.0.1", - "magic-string": "0.22.4", + "magic-string": "0.22.5", "merge-source-map": "1.0.4", "object-inspect": "1.4.1", "quote-stream": "1.0.2", - "readable-stream": "2.3.5", + "readable-stream": "2.3.6", "shallow-copy": "0.0.1", "static-eval": "2.0.0", "through2": "2.0.3" } }, "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" }, "stream-browserify": { "version": "2.0.1", @@ -10530,17 +10350,17 @@ "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", "requires": { "inherits": "2.0.3", - "readable-stream": "2.3.5" + "readable-stream": "2.3.6" } }, "stream-http": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.0.tgz", - "integrity": "sha1-/YZUbaybHJGv+PxdKHuY+vtBvBA=", + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.2.tgz", + "integrity": "sha512-QllfrBhqF1DPcz46WxKTs6Mz1Bpc+8Qm6vbqOpVav5odAXwbyzwnEczoWqtxrsmlO+cJqtPrp/8gWKWjaKLLlA==", "requires": { "builtin-status-codes": "3.0.0", "inherits": "2.0.3", - "readable-stream": "2.3.5", + "readable-stream": "2.3.6", "to-arraybuffer": "1.0.1", "xtend": "4.0.1" } @@ -10551,7 +10371,7 @@ "integrity": "sha1-dXYJrhzr0zx0MtSvvjH/eGULnd4=", "requires": { "looper": "3.0.0", - "pull-stream": "3.6.2" + "pull-stream": "3.6.8" } }, "streamifier": { @@ -10564,6 +10384,15 @@ "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" }, + "string-replace-async": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/string-replace-async/-/string-replace-async-1.2.1.tgz", + "integrity": "sha1-1SzcfjOBQbvq6jRx3jEhUCjJo6o=", + "requires": { + "escape-string-regexp": "1.0.5", + "object-assign": "4.1.1" + } + }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", @@ -10604,18 +10433,13 @@ } }, "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "5.1.2" } }, - "stringstream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=" - }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -10685,6 +10509,11 @@ "json-schema-traverse": "0.3.1" } }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" + }, "schema-utils": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz", @@ -10735,7 +10564,7 @@ "got": "7.1.0", "mime-types": "2.1.18", "mkdirp-promise": "5.0.1", - "mock-fs": "4.4.2", + "mock-fs": "4.5.0", "setimmediate": "1.0.5", "tar.gz": "1.0.7", "xhr-request-promise": "0.1.2" @@ -10746,8 +10575,8 @@ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.1.0.tgz", "integrity": "sha512-YkIRgwsZwJWTnyQrsBTWefizHh+8GYj3kbL1BTiAQ/9pwpino0G7B2gp5tx/FUBqUlvtxV85KNR3mwfAtv15Yw==", "requires": { - "base64-js": "1.2.3", - "ieee754": "1.1.8" + "base64-js": "1.3.0", + "ieee754": "1.1.11" } }, "eth-lib": { @@ -10767,37 +10596,19 @@ } }, "table": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", - "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/table/-/table-4.0.3.tgz", + "integrity": "sha512-S7rnFITmBH1EnyKcvxBh1LjYeQMmnZtCXSEbHcH6S0NoKit24ZuFO/T1vDcLdYsLQkM188PVVhQmzKIuThNkKg==", "dev": true, "requires": { - "ajv": "5.5.2", - "ajv-keywords": "2.1.1", - "chalk": "2.3.2", - "lodash": "4.17.5", + "ajv": "6.5.0", + "ajv-keywords": "3.2.0", + "chalk": "2.4.1", + "lodash": "4.17.10", "slice-ansi": "1.0.0", "string-width": "2.1.1" }, "dependencies": { - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "dev": true, - "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.1.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" - } - }, - "ajv-keywords": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", - "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", - "dev": true - }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", @@ -10808,14 +10619,14 @@ } }, "chalk": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", - "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "dev": true, "requires": { "ansi-styles": "3.2.1", "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" + "supports-color": "5.4.0" } }, "has-flag": { @@ -10825,9 +10636,9 @@ "dev": true }, "supports-color": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", - "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { "has-flag": "3.0.0" @@ -10869,6 +10680,14 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.5.0.tgz", "integrity": "sha512-UmOFbHbwvv+XHj7BerrhVq+knjceBdkvU5AriwLMvhv2qi+e7DJzxfBeFpILEjVzCp+xA+W/pIf06RGPWlZNfw==" + }, + "resolve": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz", + "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==", + "requires": { + "path-parse": "1.0.5" + } } } }, @@ -10878,7 +10697,7 @@ "integrity": "sha1-mqjkHIjwnnbBZgdbxx+T1RZuYbE=", "requires": { "chownr": "1.0.1", - "minipass": "2.2.1", + "minipass": "2.3.1", "minizlib": "1.1.0", "mkdirp": "0.5.1", "yallist": "3.0.2" @@ -10892,13 +10711,16 @@ } }, "tar-stream": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.5.5.tgz", - "integrity": "sha1-XK2Ed59FyDsfJQjZawnYjHIYr1U=", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.1.tgz", + "integrity": "sha512-IFLM5wp3QrJODQFPm6/to3LJZrONdBY/otxcvDIQzu217zKye6yVR3hhi9lAjrC2Z+m/j5oDxMPb1qcd8cIvpA==", "requires": { - "bl": "1.2.1", + "bl": "1.2.2", + "buffer-alloc": "1.1.0", "end-of-stream": "1.4.1", - "readable-stream": "2.3.5", + "fs-constants": "1.0.0", + "readable-stream": "2.3.6", + "to-buffer": "1.1.1", "xtend": "4.0.1" } }, @@ -10978,7 +10800,7 @@ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", "requires": { - "readable-stream": "2.3.5", + "readable-stream": "2.3.6", "xtend": "4.0.1" } }, @@ -11017,6 +10839,11 @@ "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" }, + "to-buffer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", + "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" + }, "to-fast-properties": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", @@ -11028,6 +10855,16 @@ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "requires": { "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + } } }, "to-regex": { @@ -11048,22 +10885,12 @@ "requires": { "is-number": "3.0.0", "repeat-string": "1.6.1" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "3.2.2" - } - } } }, "toposort": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.6.tgz", - "integrity": "sha1-wxdI5V0hDv/AD9zcfW5o19e7nOw=" + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.7.tgz", + "integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=" }, "tough-cookie": { "version": "2.3.4", @@ -11071,6 +10898,13 @@ "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", "requires": { "punycode": "1.4.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + } } }, "treeify": { @@ -11095,9 +10929,9 @@ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=" }, "tslib": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.0.tgz", - "integrity": "sha1-43qG/ajLuvI6BX9HPJ9Nxk5fwug=" + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.1.tgz", + "integrity": "sha512-avfPS28HmGLLc2o4elcc2EIq2FcH++Yo5YxpBZi9Yw93BCTGFthI4HPE4Rpep6vSYQaK8e69PelM44tPj+RaQg==" }, "tty-browserify": { "version": "0.0.0", @@ -11109,7 +10943,7 @@ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "5.1.2" } }, "tweetnacl": { @@ -11227,7 +11061,7 @@ "integrity": "sha1-pyyTb3e5a/UvX357RnGAYoVR3vs=", "requires": { "base64-js": "0.0.8", - "ieee754": "1.1.8", + "ieee754": "1.1.11", "isarray": "1.0.0" } } @@ -11345,18 +11179,21 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" } } }, "upath": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.0.4.tgz", - "integrity": "sha1-7iMhugp4bFCXPbBDpQt7y6giNh0=" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", + "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==" + }, + "uri-js": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.1.tgz", + "integrity": "sha512-jpKCA3HjsBfSDOEgxRDAxQCNyHfCPSbq57PqCkd3gAyBuPb3IWxw54EHncqESznIdqSetHfw3D7ylThu2Kcc9A==", + "requires": { + "punycode": "2.1.0" + } }, "uri-path": { "version": "1.0.0", @@ -11411,6 +11248,11 @@ "json-schema-traverse": "0.3.1" } }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" + }, "schema-utils": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz", @@ -11445,19 +11287,12 @@ "integrity": "sha1-FHFr8D/f79AwQK71jYtLhfOnxUQ=", "requires": { "kind-of": "6.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=" - } } }, "utf8": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.1.tgz", - "integrity": "sha1-LgHbAvfY0JRPdxBPFgnrDDBM92g=" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.2.tgz", + "integrity": "sha1-H6DZJw6b6FDZsFAn9jUZv0ZFfZY=" }, "util": { "version": "0.10.3", @@ -11509,9 +11344,9 @@ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" }, "vendors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.1.tgz", - "integrity": "sha1-N61zyO5Bf7PVgOeFMSMH0nSEfyI=" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.2.tgz", + "integrity": "sha512-w/hry/368nO21AN9QljsaIhb9ZiZtZARoVH5f3CsFbawdLdayCgKRPup7CggujvySMxx0I91NOyxdVENohprLQ==" }, "verror": { "version": "1.10.0", @@ -11524,9 +11359,9 @@ } }, "viz.js": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/viz.js/-/viz.js-1.8.1.tgz", - "integrity": "sha512-KrSNgnIxec+JCAqDPliO6xYA69ToH2WTYB2Kbt8Bp/XRUvm23rTyfffFi4rvQLFkIRNUz/xCnnqhh/gChhsgGA==" + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/viz.js/-/viz.js-1.8.2.tgz", + "integrity": "sha512-W+1+N/hdzLpQZEcvz79n2IgUE9pfx6JLdHh3Kh8RGvLL8P1LdJVQmi2OsDcLdY4QVID4OUy+FPelyerX0nJxIQ==" }, "vlq": { "version": "0.2.3", @@ -11842,7 +11677,7 @@ "resolved": "https://registry.npmjs.org/web3-provider-engine/-/web3-provider-engine-14.0.5.tgz", "integrity": "sha512-1W/ue7VOwOMnmKgMY3HCpbixi6qhfl4r1dK8W597AwJLbrQ+twJKwWlFAedDpJjCc9MwRCCB3pyexW4HJVSiBg==", "requires": { - "async": "2.6.0", + "async": "2.6.1", "backoff": "2.5.0", "clone": "2.1.1", "cross-fetch": "2.2.0", @@ -11856,12 +11691,12 @@ "json-rpc-error": "2.0.0", "json-stable-stringify": "1.0.1", "promise-to-callback": "1.0.0", - "readable-stream": "2.3.5", - "request": "2.85.0", + "readable-stream": "2.3.6", + "request": "2.87.0", "semaphore": "1.1.0", "tape": "4.9.0", - "ws": "5.1.1", - "xhr": "2.4.1", + "ws": "5.2.0", + "xhr": "2.5.0", "xtend": "4.0.1" }, "dependencies": { @@ -11876,18 +11711,18 @@ "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", "requires": { "bn.js": "4.11.8", - "create-hash": "1.1.3", + "create-hash": "1.2.0", "ethjs-util": "0.1.4", "keccak": "1.4.0", "rlp": "2.0.0", - "safe-buffer": "5.1.1", + "safe-buffer": "5.1.2", "secp256k1": "3.5.0" } }, "ws": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-5.1.1.tgz", - "integrity": "sha512-bOusvpCb09TOBLbpMKszd45WKC2KPtxiyiHanv+H2DE3Az+1db5a/L7sVJZVDPUC1Br8f0SKRr1KjLpD1U/IAw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.0.tgz", + "integrity": "sha512-c18dMeW+PEQdDFzkhDsnBAlS4Z8KGStBQQUcQ5mf7Nf689jyGk0594L+i9RaQuf4gog6SvWLJorz2NfSaqxZ7w==", "requires": { "async-limiter": "1.0.0" } @@ -11985,30 +11820,35 @@ "version": "1.8.3", "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=" + }, + "utf8": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.1.tgz", + "integrity": "sha1-LgHbAvfY0JRPdxBPFgnrDDBM92g=" } } }, "webcrypto-core": { - "version": "0.1.19", - "resolved": "https://registry.npmjs.org/webcrypto-core/-/webcrypto-core-0.1.19.tgz", - "integrity": "sha1-8CTjoCu8oW3tRtJpaMQlNaORJNw=", + "version": "0.1.22", + "resolved": "https://registry.npmjs.org/webcrypto-core/-/webcrypto-core-0.1.22.tgz", + "integrity": "sha512-UoNP+/3I74foiQLe1m4ToxoN3oloWnH3Na0TPWNzu/ALhDl1MbhgS0QEezdNNQbkj/6i9cf59k7LeOAAvd0hzg==", "requires": { - "tslib": "1.9.0" + "tslib": "1.9.1" } }, "webcrypto-shim": { "version": "github:dignifiedquire/webcrypto-shim#190bc9ec341375df6025b17ae12ddb2428ea49c8" }, "webpack": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.11.0.tgz", - "integrity": "sha512-3kOFejWqj5ISpJk4Qj/V7w98h9Vl52wak3CLiw/cDOfbVTq7FeoZ0SdoHHY9PYlHr50ZS42OfvzE2vB4nncKQg==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.12.0.tgz", + "integrity": "sha512-Sw7MdIIOv/nkzPzee4o0EdvCuPmxT98+vVpIvwtcwcF1Q4SDSNp92vwcKc4REe7NItH9f1S4ra9FuQ7yuYZ8bQ==", "requires": { "acorn": "5.5.3", "acorn-dynamic-import": "2.0.2", - "ajv": "6.2.1", - "ajv-keywords": "3.1.0", - "async": "2.6.0", + "ajv": "6.5.0", + "ajv-keywords": "3.2.0", + "async": "2.6.1", "enhanced-resolve": "3.4.1", "escope": "3.6.0", "interpret": "1.1.0", @@ -12087,7 +11927,7 @@ "version": "git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2", "requires": { "debug": "2.6.9", - "nan": "2.9.2", + "nan": "2.10.0", "typedarray-to-buffer": "3.1.5", "yaeti": "0.0.6" } @@ -12132,12 +11972,30 @@ "is-descriptor": "1.0.2" } }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "requires": { - "kind-of": "3.2.2" + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" } } } @@ -12199,7 +12057,7 @@ "requires": { "detect-indent": "5.0.0", "graceful-fs": "4.1.11", - "make-dir": "1.2.0", + "make-dir": "1.3.0", "pify": "3.0.0", "sort-keys": "2.0.0", "write-file-atomic": "2.3.0" @@ -12226,14 +12084,14 @@ "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", "requires": { "async-limiter": "1.0.0", - "safe-buffer": "5.1.1", + "safe-buffer": "5.1.2", "ultron": "1.1.1" } }, "xhr": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.4.1.tgz", - "integrity": "sha512-pAIU5vBr9Hiy5cpFIbPnwf0C18ZF86DBsZKrlsf87N5De/JbA6RJ83UP/cv+aljl4S40iRVMqP4pr4sF9Dnj0A==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.5.0.tgz", + "integrity": "sha512-4nlO/14t3BNUZRXIXfXe+3N6w3s1KoxcJUUURctd64BLRe67E4gRwp4PjywtDY72fXpZ1y6Ch0VZQRY/gMPzzQ==", "requires": { "global": "4.3.2", "is-function": "1.0.1", @@ -12249,10 +12107,10 @@ "buffer-to-arraybuffer": "0.0.5", "object-assign": "4.1.1", "query-string": "5.1.1", - "simple-get": "2.7.0", + "simple-get": "2.8.1", "timed-out": "4.0.1", "url-set-query": "1.0.0", - "xhr": "2.4.1" + "xhr": "2.5.0" }, "dependencies": { "query-string": { diff --git a/package.json b/package.json index 5a50e19ad..3d341cf0f 100644 --- a/package.json +++ b/package.json @@ -61,6 +61,7 @@ "serve-static": "^1.11.1", "shelljs": "^0.5.0", "solc": "0.4.23", + "string-replace-async": "^1.2.1", "style-loader": "^0.19.0", "tar": "^3.1.5", "toposort": "^1.0.0", diff --git a/test/blockchain.js b/test/blockchain.js index bcb48d085..e9dfc40d5 100644 --- a/test/blockchain.js +++ b/test/blockchain.js @@ -38,7 +38,8 @@ describe('embark.Blockchain', function () { wsRPC: true, targetGasLimit: false, fast: false, - light: false + light: false, + verbosity: undefined }; let blockchain = new Blockchain(config, 'geth'); @@ -75,7 +76,8 @@ describe('embark.Blockchain', function () { wsRPC: true, targetGasLimit: false, fast: false, - light: false + light: false, + verbosity: undefined }; let blockchain = new Blockchain(config, 'geth'); diff --git a/test/compiler.js b/test/compiler.js index 3d133a0b2..1fffdc558 100644 --- a/test/compiler.js +++ b/test/compiler.js @@ -31,7 +31,8 @@ describe('embark.Compiler', function() { let expectedObject = {}; - expectedObject["SimpleStorage"] = {"code":"608060405234801561001057600080fd5b50604051602080610114833981016040525160005560e1806100336000396000f30060806040526004361060525763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416632a1afcd98114605757806360fe47b114607b5780636d4ce63c146092575b600080fd5b348015606257600080fd5b50606960a4565b60408051918252519081900360200190f35b348015608657600080fd5b50609060043560aa565b005b348015609d57600080fd5b50606960af565b60005481565b600055565b600054905600a165627a7a72305820194e9895d54b0b5d8b469e794926ef9115b42631ab9a06ce726f9fea067633850029","runtimeBytecode":"60806040526004361060525763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416632a1afcd98114605757806360fe47b114607b5780636d4ce63c146092575b600080fd5b348015606257600080fd5b50606960a4565b60408051918252519081900360200190f35b348015608657600080fd5b50609060043560aa565b005b348015609d57600080fd5b50606960af565b60005481565b600055565b600054905600a165627a7a72305820194e9895d54b0b5d8b469e794926ef9115b42631ab9a06ce726f9fea067633850029","realRuntimeBytecode":"60806040526004361060525763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416632a1afcd98114605757806360fe47b114607b5780636d4ce63c146092575b600080fd5b348015606257600080fd5b50606960a4565b60408051918252519081900360200190f35b348015608657600080fd5b50609060043560aa565b005b348015609d57600080fd5b50606960af565b60005481565b600055565b600054905600a165627a7a72305820","swarmHash":"194e9895d54b0b5d8b469e794926ef9115b42631ab9a06ce726f9fea06763385","gasEstimates":{"creation":{"codeDepositCost":"45000","executionCost":"20141","totalCost":"65141"},"external":{"get()":"428","set(uint256)":"20161","storedData()":"384"}},"functionHashes":{"get()":"6d4ce63c","set(uint256)":"60fe47b1","storedData()":"2a1afcd9"},"abiDefinition":[{"constant":true,"inputs":[],"name":"storedData","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"x","type":"uint256"}],"name":"set","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"get","outputs":[{"name":"retVal","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"initialValue","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"}],"filename":"test/contracts/simple_storage.sol"}; + //expectedObject["SimpleStorage"] = {"code":"608060405234801561001057600080fd5b50604051602080610114833981016040525160005560e1806100336000396000f30060806040526004361060525763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416632a1afcd98114605757806360fe47b114607b5780636d4ce63c146092575b600080fd5b348015606257600080fd5b50606960a4565b60408051918252519081900360200190f35b348015608657600080fd5b50609060043560aa565b005b348015609d57600080fd5b50606960af565b60005481565b600055565b600054905600a165627a7a72305820194e9895d54b0b5d8b469e794926ef9115b42631ab9a06ce726f9fea067633850029","runtimeBytecode":"60806040526004361060525763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416632a1afcd98114605757806360fe47b114607b5780636d4ce63c146092575b600080fd5b348015606257600080fd5b50606960a4565b60408051918252519081900360200190f35b348015608657600080fd5b50609060043560aa565b005b348015609d57600080fd5b50606960af565b60005481565b600055565b600054905600a165627a7a72305820194e9895d54b0b5d8b469e794926ef9115b42631ab9a06ce726f9fea067633850029","realRuntimeBytecode":"60806040526004361060525763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416632a1afcd98114605757806360fe47b114607b5780636d4ce63c146092575b600080fd5b348015606257600080fd5b50606960a4565b60408051918252519081900360200190f35b348015608657600080fd5b50609060043560aa565b005b348015609d57600080fd5b50606960af565b60005481565b600055565b600054905600a165627a7a72305820","swarmHash":"194e9895d54b0b5d8b469e794926ef9115b42631ab9a06ce726f9fea06763385","gasEstimates":{"creation":{"codeDepositCost":"45000","executionCost":"20141","totalCost":"65141"},"external":{"get()":"428","set(uint256)":"20161","storedData()":"384"}},"functionHashes":{"get()":"6d4ce63c","set(uint256)":"60fe47b1","storedData()":"2a1afcd9"},"abiDefinition":[{"constant":true,"inputs":[],"name":"storedData","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"x","type":"uint256"}],"name":"set","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"get","outputs":[{"name":"retVal","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"initialValue","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"}],"filename":"test/contracts/simple_storage.sol"}; + expectedObject["SimpleStorage"] = expectedObject["SimpleStorage"] = {"code":"608060405234801561001057600080fd5b50604051602080610114833981016040525160005560e1806100336000396000f30060806040526004361060525763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416632a1afcd98114605757806360fe47b114607b5780636d4ce63c146092575b600080fd5b348015606257600080fd5b50606960a4565b60408051918252519081900360200190f35b348015608657600080fd5b50609060043560aa565b005b348015609d57600080fd5b50606960af565b60005481565b600055565b600054905600a165627a7a72305820194e9895d54b0b5d8b469e794926ef9115b42631ab9a06ce726f9fea067633850029","runtimeBytecode":"60806040526004361060525763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416632a1afcd98114605757806360fe47b114607b5780636d4ce63c146092575b600080fd5b348015606257600080fd5b50606960a4565b60408051918252519081900360200190f35b348015608657600080fd5b50609060043560aa565b005b348015609d57600080fd5b50606960af565b60005481565b600055565b600054905600a165627a7a72305820194e9895d54b0b5d8b469e794926ef9115b42631ab9a06ce726f9fea067633850029","realRuntimeBytecode":"60806040526004361060525763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416632a1afcd98114605757806360fe47b114607b5780636d4ce63c146092575b600080fd5b348015606257600080fd5b50606960a4565b60408051918252519081900360200190f35b348015608657600080fd5b50609060043560aa565b005b348015609d57600080fd5b50606960af565b60005481565b600055565b600054905600a165627a7a72305820","swarmHash":"194e9895d54b0b5d8b469e794926ef9115b42631ab9a06ce726f9fea06763385","gasEstimates":{"creation":{"codeDepositCost":"45000","executionCost":"20141","totalCost":"65141"},"external":{"get()":"428","set(uint256)":"20161","storedData()":"384"}},"functionHashes":{"get()":"6d4ce63c","set(uint256)":"60fe47b1","storedData()":"2a1afcd9"},"abiDefinition":[{"constant":true,"inputs":[],"name":"storedData","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"x","type":"uint256"}],"name":"set","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"get","outputs":[{"name":"retVal","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"initialValue","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"}],"filename":"test/contracts/simple_storage.sol"}; expectedObject["Token"] = {"code":"608060405234801561001057600080fd5b5060405160208061047e8339810160409081529051600160a060020a033316600090815260208190529190912081905560025561042c806100526000396000f3006080604052600436106100775763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663095ea7b3811461007c57806318160ddd146100b457806323b872dd146100db57806370a0823114610105578063a9059cbb14610126578063dd62ed3e1461014a575b600080fd5b34801561008857600080fd5b506100a0600160a060020a0360043516602435610171565b604080519115158252519081900360200190f35b3480156100c057600080fd5b506100c96101db565b60408051918252519081900360200190f35b3480156100e757600080fd5b506100a0600160a060020a03600435811690602435166044356101e1565b34801561011157600080fd5b506100c9600160a060020a03600435166102f2565b34801561013257600080fd5b506100a0600160a060020a036004351660243561030d565b34801561015657600080fd5b506100c9600160a060020a03600435811690602435166103ce565b600160a060020a03338116600081815260016020908152604080832094871680845294825280832086905580518681529051929493927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a350600192915050565b60025490565b600160a060020a03831660009081526020819052604081205482111561020657600080fd5b600160a060020a038085166000908152600160209081526040808320339094168352929052205482111561023957600080fd5b600160a060020a03831660009081526020819052604090205461025c90836103f9565b151561026757600080fd5b600160a060020a038085166000818152600160209081526040808320338616845282528083208054889003905583835282825280832080548890039055938716808352918490208054870190558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35060019392505050565b600160a060020a031660009081526020819052604090205490565b600160a060020a03331660009081526020819052604081205482111561033257600080fd5b600160a060020a03831660009081526020819052604090205461035590836103f9565b151561036057600080fd5b600160a060020a0333811660008181526020818152604080832080548890039055938716808352918490208054870190558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a350600192915050565b600160a060020a03918216600090815260016020908152604080832093909416825291909152205490565b81011015905600a165627a7a72305820c34209c42f57b08f62d29e65db6744b4c8991eee33c4c83e0d81674550945da80029","runtimeBytecode":"6080604052600436106100775763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663095ea7b3811461007c57806318160ddd146100b457806323b872dd146100db57806370a0823114610105578063a9059cbb14610126578063dd62ed3e1461014a575b600080fd5b34801561008857600080fd5b506100a0600160a060020a0360043516602435610171565b604080519115158252519081900360200190f35b3480156100c057600080fd5b506100c96101db565b60408051918252519081900360200190f35b3480156100e757600080fd5b506100a0600160a060020a03600435811690602435166044356101e1565b34801561011157600080fd5b506100c9600160a060020a03600435166102f2565b34801561013257600080fd5b506100a0600160a060020a036004351660243561030d565b34801561015657600080fd5b506100c9600160a060020a03600435811690602435166103ce565b600160a060020a03338116600081815260016020908152604080832094871680845294825280832086905580518681529051929493927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a350600192915050565b60025490565b600160a060020a03831660009081526020819052604081205482111561020657600080fd5b600160a060020a038085166000908152600160209081526040808320339094168352929052205482111561023957600080fd5b600160a060020a03831660009081526020819052604090205461025c90836103f9565b151561026757600080fd5b600160a060020a038085166000818152600160209081526040808320338616845282528083208054889003905583835282825280832080548890039055938716808352918490208054870190558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35060019392505050565b600160a060020a031660009081526020819052604090205490565b600160a060020a03331660009081526020819052604081205482111561033257600080fd5b600160a060020a03831660009081526020819052604090205461035590836103f9565b151561036057600080fd5b600160a060020a0333811660008181526020818152604080832080548890039055938716808352918490208054870190558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a350600192915050565b600160a060020a03918216600090815260016020908152604080832093909416825291909152205490565b81011015905600a165627a7a72305820c34209c42f57b08f62d29e65db6744b4c8991eee33c4c83e0d81674550945da80029","realRuntimeBytecode":"6080604052600436106100775763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663095ea7b3811461007c57806318160ddd146100b457806323b872dd146100db57806370a0823114610105578063a9059cbb14610126578063dd62ed3e1461014a575b600080fd5b34801561008857600080fd5b506100a0600160a060020a0360043516602435610171565b604080519115158252519081900360200190f35b3480156100c057600080fd5b506100c96101db565b60408051918252519081900360200190f35b3480156100e757600080fd5b506100a0600160a060020a03600435811690602435166044356101e1565b34801561011157600080fd5b506100c9600160a060020a03600435166102f2565b34801561013257600080fd5b506100a0600160a060020a036004351660243561030d565b34801561015657600080fd5b506100c9600160a060020a03600435811690602435166103ce565b600160a060020a03338116600081815260016020908152604080832094871680845294825280832086905580518681529051929493927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a350600192915050565b60025490565b600160a060020a03831660009081526020819052604081205482111561020657600080fd5b600160a060020a038085166000908152600160209081526040808320339094168352929052205482111561023957600080fd5b600160a060020a03831660009081526020819052604090205461025c90836103f9565b151561026757600080fd5b600160a060020a038085166000818152600160209081526040808320338616845282528083208054889003905583835282825280832080548890039055938716808352918490208054870190558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35060019392505050565b600160a060020a031660009081526020819052604090205490565b600160a060020a03331660009081526020819052604081205482111561033257600080fd5b600160a060020a03831660009081526020819052604090205461035590836103f9565b151561036057600080fd5b600160a060020a0333811660008181526020818152604080832080548890039055938716808352918490208054870190558351868152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a350600192915050565b600160a060020a03918216600090815260016020908152604080832093909416825291909152205490565b81011015905600a165627a7a72305820","swarmHash":"c34209c42f57b08f62d29e65db6744b4c8991eee33c4c83e0d81674550945da8","gasEstimates":{"creation":{"codeDepositCost":"213600","executionCost":"40466","totalCost":"254066"},"external":{"allowance(address,address)":"818","approve(address,uint256)":"22344","balanceOf(address)":"675","totalSupply()":"406","transfer(address,uint256)":"43625","transferFrom(address,address,uint256)":"64402"},"internal":{"safeToAdd(uint256,uint256)":"24"}},"functionHashes":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"},"abiDefinition":[{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"value","type":"uint256"}],"name":"approve","outputs":[{"name":"ok","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"supply","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"ok","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"who","type":"address"}],"name":"balanceOf","outputs":[{"name":"value","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transfer","outputs":[{"name":"ok","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"spender","type":"address"}],"name":"allowance","outputs":[{"name":"_allowance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"initial_balance","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"}],"filename":"test/contracts/token.sol"}; diff --git a/test/contracts.js b/test/contracts.js index 3090f4162..bb695dc7a 100644 --- a/test/contracts.js +++ b/test/contracts.js @@ -1,5 +1,6 @@ /*globals describe, it*/ let ContractsManager = require('../lib/contracts/contracts.js'); +let Compiler = require('../lib/contracts/compiler.js'); let Logger = require('../lib/core/logger.js'); let File = require('../lib/core/file.js'); let TestLogger = require('../lib/tests/test_logger.js'); @@ -29,6 +30,12 @@ describe('embark.Contracts', function() { }); plugins.loadInternalPlugin('solidity', {solcVersion: '0.4.17', contractDirectories: ['app/contracts/']}); + let compiler = new Compiler({plugins: plugins, logger: plugins.logger}); + let events = new Events(); + events.setCommandHandler("compiler:contracts", function(contractFiles, cb) { + compiler.compile_contracts(contractFiles, cb); + }); + let contractsManager = new ContractsManager({ plugins: plugins, contractFiles: [ @@ -65,7 +72,7 @@ describe('embark.Contracts', function() { } }, logger: new Logger({}), - events: new Events() + events: events }); describe('#build', function() { @@ -112,6 +119,12 @@ describe('embark.Contracts', function() { }); plugins.loadInternalPlugin('solidity', {solcVersion: '0.4.17', contractDirectories: ['app/contracts/']}); + let compiler = new Compiler({plugins: plugins, logger: plugins.logger}); + let events = new Events(); + events.setCommandHandler("compiler:contracts", function(contractFiles, cb) { + compiler.compile_contracts(contractFiles, cb); + }); + let contractsManager = new ContractsManager({ plugins: plugins, contractFiles: [ @@ -158,7 +171,7 @@ describe('embark.Contracts', function() { } }, logger: new Logger({}), - events: new Events() + events: events }); describe('#build', function() { diff --git a/test/processLauncher.js b/test/processLauncher.js index e0272be24..8fa8f238f 100644 --- a/test/processLauncher.js +++ b/test/processLauncher.js @@ -10,7 +10,8 @@ describe('ProcessWrapper', () => { before(() => { sinon.stub(ProcessLauncher.prototype, '_subscribeToMessages'); processLauncher = new ProcessLauncher({ - logger: new TestLogger({}) + logger: new TestLogger({}), + modulePath: 'test.js' }); });