From d0d73320aae4da4acc16a78c283297a3311233a6 Mon Sep 17 00:00:00 2001 From: emizzle Date: Fri, 25 May 2018 17:13:57 +1000 Subject: [PATCH] Storage config improvements start. Adjusted the config and have started to support those improvements through the codebase. Currently stuck on starting multiple storage servcies at once. Might need a change in storage config spec. WIP. --- js/embark.js | 15 +++++++++ lib/core/config.js | 14 +++++---- lib/core/engine.js | 10 ++---- lib/i18n/locales/en.json | 6 ++++ lib/index.js | 19 +++++------- lib/modules/ipfs/embarkjs.js | 29 ++++++++++++++++-- lib/modules/ipfs/index.js | 39 +++++++++++++++--------- lib/modules/swarm/embarkjs.js | 33 ++++++++++++++++---- lib/modules/swarm/index.js | 31 +++++++++++-------- lib/utils/utils.js | 12 ++++++++ lib/versions/library_manager.js | 4 ++- package-lock.json | 33 ++++++++++++++------ package.json | 1 + templates/boilerplate/embark.json | 3 +- templates/demo/embark.json | 3 +- test_apps/test_app/config/storage.json | 42 +++++++++++++++++--------- test_apps/test_app/embark.json | 3 +- 17 files changed, 210 insertions(+), 87 deletions(-) diff --git a/js/embark.js b/js/embark.js index 1b0b324f4..d86617664 100644 --- a/js/embark.js +++ b/js/embark.js @@ -230,7 +230,22 @@ EmbarkJS.Storage.setProvider = function(provider, options) { return providerObj.setProvider(options); }; +EmbarkJS.Storage.setProviders = function(provider, dappConnOptions) { + let providerObj = this.Providers[provider]; + + if (!providerObj) { + throw new Error('Unknown storage provider'); + } + + this.currentStorage = providerObj; + + return providerObj.setProviders(dappConnOptions); +}; + EmbarkJS.Storage.isAvailable = function(){ + if (!this.currentStorage) { + throw new Error('Storage provider not set; e.g EmbarkJS.Storage.setProvider("ipfs")'); + } return this.currentStorage.isAvailable(); }; diff --git a/lib/core/config.js b/lib/core/config.js index 26e04a482..3110b42c5 100644 --- a/lib/core/config.js +++ b/lib/core/config.js @@ -209,7 +209,7 @@ Config.prototype.loadExternalContractsFiles = function() { }; Config.prototype.loadStorageConfigFile = function() { - var versions = utils.recursiveMerge({"ipfs-api": "17.2.4"}, this.embarkConfig.versions || {}); + var versions = utils.recursiveMerge({"ipfs-api": "17.2.4", "p-iteration": "1.1.7"}, this.embarkConfig.versions || {}); var configObject = { "default": { @@ -217,11 +217,13 @@ Config.prototype.loadStorageConfigFile = function() { "enabled": true, "available_providers": ["ipfs", "swarm"], "ipfs_bin": "ipfs", - "provider": "ipfs", - "protocol": "http", - "host": "localhost", - "port": 5001, - "getUrl": "http://localhost:8080/ipfs/" + "upload": { + "provider": "ipfs", + "protocol": "http", + "host": "localhost", + "port": 5001, + "getUrl": "http://localhost:8080/ipfs/" + } } }; diff --git a/lib/core/engine.js b/lib/core/engine.js index 440dc6959..0c53cfbd5 100644 --- a/lib/core/engine.js +++ b/lib/core/engine.js @@ -106,10 +106,9 @@ class Engine { "fileWatcher": this.fileWatchService, "webServer": this.webServerService, "namingSystem": this.namingSystem, - "ipfs": this.ipfsService, "web3": this.web3Service, "libraryManager": this.libraryManagerService, - "swarm": this.swarmService + "storage": this.storageService }; let service = services[serviceName]; @@ -134,8 +133,8 @@ class Engine { logger: this.logger, plugins: this.plugins }); - this.events.on('code-generator-ready', function () { + console.log('CODE GENERATOR READY EVENT FIRED'); self.events.request('code', function (abi, contractsJSON) { pipeline.build(abi, contractsJSON, null, () => { if (self.watch) { @@ -275,16 +274,13 @@ class Engine { }); } - ipfsService(_options) { + storageService(_options) { this.registerModule('ipfs', { addCheck: this.servicesMonitor.addCheck.bind(this.servicesMonitor), storageConfig: this.config.storageConfig, host: _options.host, port: _options.port }); - } - - swarmService(_options) { this.registerModule('swarm', { addCheck: this.servicesMonitor.addCheck.bind(this.servicesMonitor), storageConfig: this.config.storageConfig, diff --git a/lib/i18n/locales/en.json b/lib/i18n/locales/en.json index 2ec0df1ba..e103592d3 100644 --- a/lib/i18n/locales/en.json +++ b/lib/i18n/locales/en.json @@ -128,6 +128,12 @@ "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", + "IPFS node is offline": "IPFS node is offline", + "IPFS node detected": "IPFS node detected", + "Webserver is offline": "Webserver is offline", + "DApp path length is too long: \"": "DApp path length is too long: \"", + "This is known to cause issues with some applications, please consider reducing your DApp path's length to 66 characters or less.": "This is known to cause issues with some applications, please consider reducing your DApp path's length to 66 characters or less." + "no contracts found": "no contracts found", "DApp path length is too long: \"": "DApp path length is too long: \"", "This is known to cause issues with some applications, please consider reducing your DApp path's length to 66 characters or less.": "This is known to cause issues with some applications, please consider reducing your DApp path's length to 66 characters or less.", "DApp path length is too long: ": "DApp path length is too long: ", diff --git a/lib/index.js b/lib/index.js index 828026158..3daa6ac13 100644 --- a/lib/index.js +++ b/lib/index.js @@ -159,11 +159,10 @@ class Embark { engine.startService("web3"); engine.startService("pipeline"); engine.startService("deployment"); + engine.startService('storage'); engine.startService("codeGenerator"); engine.startService("namingSystem"); - // 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') + '..'); engine.config.reloadConfig(); @@ -248,10 +247,8 @@ class Embark { engine.startService("web3"); engine.startService("pipeline"); engine.startService("deployment", {onlyCompile: options.onlyCompile}); + engine.startService("storage"); 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"); callback(); }, function deploy(callback) { @@ -304,8 +301,8 @@ class Embark { engine.startService("libraryManager"); engine.startService("pipeline"); engine.startService("deployment", {onlyCompile: true}); + engine.startService("codeGenerator"); - engine.deployManager.deployContracts(function (err) { callback(err); }); @@ -354,7 +351,7 @@ class Embark { }); engine.init(); - let platform = engine.config.storageConfig.provider; + let platform = engine.config.storageConfig.upload.provider; let cmdPlugin; async.waterfall([ @@ -366,9 +363,8 @@ class Embark { engine.startService("web3"); engine.startService("pipeline"); engine.startService("deployment"); + engine.startService('storage'); 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(); }, @@ -412,8 +408,7 @@ class Embark { }); } if (!cmdPlugin) { - engine.logger.info(__('try "{{ipfs}}" or "{{swarm}}"', {ipfs: 'embark upload ipfs', swarm: 'embark upload swarm'}).green); - return callback({message: 'unknown platform: ' + platform}); + return callback({message: __('platform "{{platform}}" is specified as the upload provider, however no plugins have registered an upload command for "{{platform}}".', {platform: platform})}); } callback(); }, diff --git a/lib/modules/ipfs/embarkjs.js b/lib/modules/ipfs/embarkjs.js index 1c374cb5a..b90ca1761 100644 --- a/lib/modules/ipfs/embarkjs.js +++ b/lib/modules/ipfs/embarkjs.js @@ -1,4 +1,5 @@ import IpfsApi from 'ipfs-api'; +//import {some} from 'p-iteration'; let __embarkIPFS = {}; @@ -10,7 +11,7 @@ __embarkIPFS.setProvider = function (options) { self.ipfsConnection = IpfsApi('localhost', '5001'); self._getUrl = "http://localhost:8080/ipfs/"; } else { - var ipfsOptions = {host: options.server, protocol: 'http'}; + var ipfsOptions = {host: options.host || options.server, protocol: 'http'}; if (options.protocol) { ipfsOptions.protocol = options.protocol; } @@ -22,7 +23,7 @@ __embarkIPFS.setProvider = function (options) { } resolve(self); } catch (err) { - console.log(err); + console.error(err); self.ipfsConnection = null; reject(new Error('Failed to connect to IPFS')); } @@ -30,6 +31,29 @@ __embarkIPFS.setProvider = function (options) { return promise; }; +__embarkIPFS.setProviders = async function (dappConnOptions) { + var self = this; + try { + let workingConnFound = await some(dappConnOptions, async (dappConn) => { + if(dappConn === '$BZZ' || dappConn.provider !== 'ipfs') return false; // swarm has no bearing for ipfs plugin, continue + else { + // set the provider then check the connection, if true, use that provider, else, check next provider + try{ + await self.setProvider(dappConn); + return await self.isAvailable(); + } catch(err) { + return false; + } + } + }); + if(!workingConnFound) throw new Error('Could not connect to IPFS using any of the dappConnections in the storage config'); + else return self; + } catch (err) { + self.ipfsConnection = null; + throw new Error('Failed to connect to IPFS: ' + err.message); + } +}; + __embarkIPFS.saveText = function (text) { const self = this; var promise = new Promise(function (resolve, reject) { @@ -119,3 +143,4 @@ __embarkIPFS.getUrl = function (hash) { return (this._getUrl || "http://localhost:8080/ipfs/") + hash; }; + diff --git a/lib/modules/ipfs/index.js b/lib/modules/ipfs/index.js index bccd839cc..234fc33cb 100644 --- a/lib/modules/ipfs/index.js +++ b/lib/modules/ipfs/index.js @@ -3,6 +3,7 @@ let utils = require('../../utils/utils.js'); let fs = require('../../core/fs.js'); let RunCode = require('../../coderunner/runCode'); let IpfsApi = require('ipfs-api'); +const _ = require('underscore'); class IPFS { @@ -11,8 +12,9 @@ class IPFS { this.events = embark.events; this.buildDir = options.buildDir; this.storageConfig = options.storageConfig; - this.host = options.host || this.storageConfig.host; - this.port = options.port || this.storageConfig.port; + this.host = options.host || this.storageConfig.upload.host; + this.port = options.port || this.storageConfig.upload.port; + this.protocol = options.protocol || this.storageConfig.upload.protocol; this.addCheck = options.addCheck; this.embark = embark; @@ -41,7 +43,7 @@ class IPFS { if (!storageConfig.enabled) { return; } - if (storageConfig.provider !== 'ipfs' && storageConfig.available_providers.indexOf("ipfs") < 0) { + if (storageConfig.upload.provider !== 'ipfs' || storageConfig.available_providers.indexOf("ipfs") < 0) { return; } @@ -59,7 +61,13 @@ class IPFS { self.addCheck('IPFS', function (cb) { self.logger.trace("Checking IPFS version..."); - utils.httpGetJson('http://' + self.host + ':' + self.port + '/api/v0/version', function (err, body) { + let url = (self.protocol || 'http') + '://' + self.host + ':' + self.port + '/api/v0/version'; + if(self.protocol !== 'https'){ + utils.httpGetJson(url, versionCb); + } else { + utils.httpsGetJson(url, versionCb); + } + function versionCb(err, body) { if (err) { self.logger.trace("Check IPFS version error: " + err); return cb({name: "IPFS ", status: 'off'}); @@ -68,7 +76,7 @@ class IPFS { return cb({name: ("IPFS " + body.Version), status: 'on'}); } return cb({name: "IPFS ", status: 'on'}); - }); + } }); } @@ -79,7 +87,7 @@ class IPFS { return; } - if ((this.storageConfig.available_providers.indexOf('ipfs') < 0) && (this.storageConfig.provider !== 'ipfs' || this.storageConfig.enabled !== true)) { + if (this.storageConfig.available_providers.indexOf('ipfs') < 0 || _.findWhere(this.storageConfig.dappConnection, {'provider': 'ipfs'}) === undefined || this.storageConfig.enabled !== true) { return; } @@ -92,6 +100,15 @@ class IPFS { } }); + self.events.request("version:get:p-iteration", function(pIterationVersion) { + let currentPIterationVersion = require('../../../package.json').dependencies["p-iteration"]; + if (pIterationVersion !== currentPIterationVersion) { + self.events.request("version:getPackageLocation", "p-iteration", pIterationVersion, function(err, location) { + self.embark.registerImportFile("p-iteration", fs.dappPath(location)); + }); + } + }); + let code = ""; code += "\n" + fs.readFileSync(utils.joinPath(__dirname, 'embarkjs.js')).toString(); code += "\nEmbarkJS.Storage.registerProvider('ipfs', __embarkIPFS);"; @@ -100,16 +117,10 @@ class IPFS { } addSetProvider() { - let config = JSON.stringify({ - server: this.storageConfig.host, - port: this.storageConfig.port, - protocol: this.storageConfig.protocol, - getUrl: this.storageConfig.getUrl - }); - let code = "\nEmbarkJS.Storage.setProvider('ipfs'," + config + ");"; + let code = "\nEmbarkJS.Storage.setProviders('ipfs'," + JSON.stringify(this.storageConfig.dappConnection) + ");"; let shouldInit = (storageConfig) => { - return (storageConfig.provider === 'ipfs' && storageConfig.enabled === true); + return (this.storageConfig.dappConnection !== undefined && this.storageConfig.dappConnection.some((dappConn) => dappConn.provider === 'ipfs') && storageConfig.enabled === true); }; this.embark.addProviderInit('storage', code, shouldInit); diff --git a/lib/modules/swarm/embarkjs.js b/lib/modules/swarm/embarkjs.js index 9a415258a..78d163ec0 100644 --- a/lib/modules/swarm/embarkjs.js +++ b/lib/modules/swarm/embarkjs.js @@ -1,20 +1,19 @@ /*global web3 */ let __embarkSwarm = {}; const bytes = require("eth-lib/lib/bytes"); +import {some} from 'p-iteration'; __embarkSwarm.setProvider = function (options) { this.bzz = web3.bzz; - this.protocol = options.protocol; - this.host = options.host; - this.port = options.port; - this.connectUrl = `${options.protocol}://${options.host}:${options.port}`; + this.protocol = options.protocol || 'http'; + this.connectUrl = `${this.protocol}://${options.host}:${options.port}`; this.connectError = new Error(`Cannot connect to Swarm node on ${this.connectUrl}`); - this._getUrl = options.getUrl || `${this.connectUrl}/bzzr:/`; + //this._getUrl = options.getUrl || `${this.connectUrl}/bzzr:/`; return new Promise((resolve, reject) => { try { if (!this.bzz.currentProvider) { - this.bzz.setProvider(`${options.protocol}://${options.host}:${options.port}`); + this.bzz.setProvider(this.connectUrl); } resolve(this); } catch (err) { @@ -24,6 +23,28 @@ __embarkSwarm.setProvider = function (options) { }); }; +__embarkSwarm.setProviders = async function (dappConnOptions) { + var self = this; + try { + let workingConnFound = await some(dappConnOptions, async (dappConn) => { + if(dappConn === '$BZZ'){ + return self.isAvailable(); + } + else if(dappConn.provider === 'swarm') + { + // set the provider then check the connection, if true, use that provider, else, check next provider + await self.setProvider(dappConn); + return self.isAvailable(); + } + else return false; + }); + if(!workingConnFound) throw new Error('Could not connect to Swarm using any of the dappConnections in the storage config'); + else return self; + } catch (err) { + throw new Error('Failed to connect to Swarm: ' + err.message); + } +}; + __embarkSwarm.isAvailable = function () { return new Promise((resolve, reject) => { if (!this.bzz) { diff --git a/lib/modules/swarm/index.js b/lib/modules/swarm/index.js index a8901cc16..f336c0f73 100644 --- a/lib/modules/swarm/index.js +++ b/lib/modules/swarm/index.js @@ -9,8 +9,9 @@ class Swarm { this.events = embark.events; this.buildDir = options.buildDir; this.storageConfig = options.storageConfig; - this.host = options.host || this.storageConfig.host; - this.port = options.port || this.storageConfig.port; + this.host = options.host || options.storageConfig.upload.host; + this.port = options.port || options.storageConfig.upload.port; + this.protocol = options.protocol || options.storageConfig.upload.protocol; this.addCheck = options.addCheck; this.embark = embark; this.bzz = options.bzz; @@ -24,7 +25,7 @@ class Swarm { initSwarmProvider(){ if(!this.bzz.currentProvider) { - this.bzz.setProvider(`http://${this.host}:${this.port}`); + this.bzz.setProvider(`${this.protocol}://${this.host}:${this.port}`); } } @@ -47,7 +48,7 @@ class Swarm { if (!storageConfig.enabled) { return; } - if (storageConfig.provider !== 'swarm' && storageConfig.available_providers.indexOf("swarm") < 0) { + if (storageConfig.upload.provider !== 'swarm' || storageConfig.available_providers.indexOf("swarm") < 0) { return; } @@ -76,15 +77,25 @@ class Swarm { } addSwarmToEmbarkJS() { + let self = this; // TODO: make this a shouldAdd condition if (this.storageConfig === {}) { return; } - if ((this.storageConfig.available_providers.indexOf('swarm') < 0) && (this.storageConfig.provider !== 'swarm' || this.storageConfig.enabled !== true)) { + if (this.storageConfig.available_providers.indexOf('swarm') < 0 || this.storageConfig.enabled !== true) { return; } + this.events.request("version:get:p-iteration", function(pIterationVersion) { + let currentPIterationVersion = require('../../../package.json').dependencies["p-iteration"]; + if (pIterationVersion !== currentPIterationVersion) { + self.events.request("version:getPackageLocation", "p-iteration", pIterationVersion, function(err, location) { + self.embark.registerImportFile("p-iteration", fs.dappPath(location)); + }); + } + }); + let code = ""; code += "\n" + fs.readFileSync(utils.joinPath(__dirname, 'embarkjs.js')).toString(); code += "\nEmbarkJS.Storage.registerProvider('swarm', __embarkSwarm);"; @@ -93,16 +104,10 @@ class Swarm { } addSetProvider() { - let config = JSON.stringify({ - host: this.storageConfig.host, - port: this.storageConfig.port, - protocol: this.storageConfig.protocol, - getUrl: this.storageConfig.getUrl - }); - let code = "\nEmbarkJS.Storage.setProvider('swarm'," + config + ");"; + let code = "\nEmbarkJS.Storage.setProviders('swarm'," + JSON.stringify(this.storageConfig.dappConnection) + ");"; let shouldInit = (storageConfig) => { - return (storageConfig.provider === 'swarm' && storageConfig.enabled === true); + return (this.storageConfig.dappConnection !== undefined && this.storageConfig.dappConnection.some((dappConn) => dappConn.provider === 'swarm') && storageConfig.enabled === true); }; this.embark.addProviderInit('storage', code, shouldInit); diff --git a/lib/utils/utils.js b/lib/utils/utils.js index f9b0c2449..ea3e1a3e8 100644 --- a/lib/utils/utils.js +++ b/lib/utils/utils.js @@ -69,6 +69,17 @@ function httpGetJson(url, callback) { }); } +function httpsGetJson(url, callback) { + httpGetRequest(https, url, function(err, body) { + try { + let parsed = JSON.parse(body); + return callback(err, parsed); + } catch(e) { + return callback(e); + } + }); +} + function runCmd(cmd, options) { let result = shelljs.exec(cmd, options || {silent: true}); if (result.code !== 0) { @@ -208,6 +219,7 @@ module.exports = { httpGet: httpGet, httpsGet: httpsGet, httpGetJson: httpGetJson, + httpsGetJson: httpsGetJson, runCmd: runCmd, cd: cd, sed: sed, diff --git a/lib/versions/library_manager.js b/lib/versions/library_manager.js index 3eb1f72b6..66527767b 100644 --- a/lib/versions/library_manager.js +++ b/lib/versions/library_manager.js @@ -23,15 +23,17 @@ class LibraryManager { let solcVersionInConfig = this.contractsConfig.versions.solc; let web3VersionInConfig = this.contractsConfig.versions["web3"]; let ipfsApiVersion = this.storageConfig.versions["ipfs-api"]; + let pIterationVersion = this.storageConfig.versions["p-iteration"]; this.versions['solc'] = solcVersionInConfig; this.versions['web3'] = web3VersionInConfig; this.versions['ipfs-api'] = ipfsApiVersion; + this.versions['p-iteration'] = pIterationVersion; Object.keys(this.versions).forEach(versionKey => { const newVersion = this.versions[versionKey].trim(); if (newVersion !== this.versions[versionKey]) { - this.embark.logger.warn(__('There a a space in the version of {{versionKey}}. We corrected it for you ({{correction}}).', {versionKey: versionKey, correction: `"${this.versions[versionKey]}" => "${newVersion}"`})); + this.embark.logger.warn(__('There is a space in the version of {{versionKey}}. We corrected it for you ({{correction}}).', {versionKey: versionKey, correction: `"${this.versions[versionKey]}" => "${newVersion}"`})); this.versions[versionKey] = newVersion; } }); diff --git a/package-lock.json b/package-lock.json index 7741187e7..c1eddb9bd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1637,7 +1637,7 @@ "browserify-zlib": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "integrity": "sha1-KGlFnZqjviRf6P4sofRuLn9U1z8=", "requires": { "pako": "1.0.6" } @@ -2806,7 +2806,7 @@ "domain-browser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" + "integrity": "sha1-PTH1AZGmdJ3RN1p/Ui6CPULlTto=" }, "drbg.js": { "version": "1.0.1", @@ -2922,7 +2922,7 @@ "errno": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "integrity": "sha1-RoTXF3mtOa8Xfj8AeZb3xnyFJhg=", "requires": { "prr": "1.0.1" } @@ -3594,6 +3594,7 @@ "integrity": "sha1-eguHvzZw+S9gf5j6aniAHZdBsSQ=", "requires": { "webpack": "3.11.0" +<<<<<<< develop }, "dependencies": { "has-flag": { @@ -3638,6 +3639,8 @@ "yargs": "8.0.2" } } +======= +>>>>>>> Storage config improvements start. Adjusted the config and have started to support those improvements through the codebase. } }, "ethereumjs-tx": { @@ -6229,7 +6232,7 @@ "json-loader": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", - "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==" + "integrity": "sha1-3KFKcCNf+C8KyaOr62DTN6NlGF0=" }, "json-parse-better-errors": { "version": "1.0.1", @@ -6667,11 +6670,14 @@ "yallist": "3.0.2" } }, +<<<<<<< develop "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==" }, +======= +>>>>>>> Storage config improvements start. Adjusted the config and have started to support those improvements through the codebase. "tar": { "version": "4.4.4", "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.4.tgz", @@ -7736,7 +7742,7 @@ "node-libs-browser": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz", - "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", + "integrity": "sha1-X5QmPUBPbkR2fXJpAf/wVHjWAN8=", "requires": { "assert": "1.4.1", "browserify-zlib": "0.2.0", @@ -8174,7 +8180,7 @@ "os-locale": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", - "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "integrity": "sha1-QrwpAKa1uL0XN2yOiCtlr8zyS/I=", "requires": { "execa": "0.7.0", "lcid": "1.0.0", @@ -8196,6 +8202,11 @@ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" }, + "p-iteration": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/p-iteration/-/p-iteration-1.1.7.tgz", + "integrity": "sha512-VsYvUPjm2edbKkX4QzlASC1qB2e4Z6IE9WPaRVHKwCtobmB6vfUcU9eBOwj1k5uMNi8O6w89QfsDatO5ePSjQg==" + }, "p-limit": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz", @@ -8238,7 +8249,7 @@ "pako": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", - "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==" + "integrity": "sha1-AQEhG6pwxLykoPY/Igbpe3368lg=" }, "parse-asn1": { "version": "5.1.0", @@ -12042,7 +12053,11 @@ "webpack": { "version": "3.11.0", "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.11.0.tgz", +<<<<<<< develop "integrity": "sha512-3kOFejWqj5ISpJk4Qj/V7w98h9Vl52wak3CLiw/cDOfbVTq7FeoZ0SdoHHY9PYlHr50ZS42OfvzE2vB4nncKQg==", +======= + "integrity": "sha1-d9pFGx17SxF62vQaGpO1dC8k2JQ=", +>>>>>>> Storage config improvements start. Adjusted the config and have started to support those improvements through the codebase. "requires": { "acorn": "5.5.3", "acorn-dynamic-import": "2.0.2", @@ -12110,7 +12125,7 @@ "webpack-sources": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.1.0.tgz", - "integrity": "sha512-aqYp18kPphgoO5c/+NaUvEeACtZjMESmDChuD3NBciVpah3XpMEU9VAAtIaB1BsfJWWTSdv8Vv1m3T0aRk2dUw==", + "integrity": "sha1-oQHrrlnWUHNU1x2AE5UKOot6WlQ=", "requires": { "source-list-map": "2.0.0", "source-map": "0.6.1" @@ -12119,7 +12134,7 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=" } } }, diff --git a/package.json b/package.json index d6088d3dd..dfaeb103a 100644 --- a/package.json +++ b/package.json @@ -55,6 +55,7 @@ "merge": "^1.2.0", "orbit-db": "^0.17.3", "os-locale": "^2.1.0", + "p-iteration": "^1.1.7", "parse-json": "^4.0.0", "promptly": "^2.1.0", "propose": "0.0.5", diff --git a/templates/boilerplate/embark.json b/templates/boilerplate/embark.json index 40c103a53..d0bfeb7ac 100644 --- a/templates/boilerplate/embark.json +++ b/templates/boilerplate/embark.json @@ -11,7 +11,8 @@ "versions": { "web3": "1.0.0-beta", "solc": "0.4.23", - "ipfs-api": "17.2.4" + "ipfs-api": "17.2.4", + "p-iteration": "1.1.7" }, "plugins": {} } diff --git a/templates/demo/embark.json b/templates/demo/embark.json index 7bd3d48a7..05855ace1 100644 --- a/templates/demo/embark.json +++ b/templates/demo/embark.json @@ -10,7 +10,8 @@ "versions": { "web3": "1.0.0-beta", "solc": "0.4.23", - "ipfs-api": "17.2.4" + "ipfs-api": "17.2.4", + "p-iteration": "1.1.7" }, "plugins": { } diff --git a/test_apps/test_app/config/storage.json b/test_apps/test_app/config/storage.json index a226dcb31..6d06e3c74 100644 --- a/test_apps/test_app/config/storage.json +++ b/test_apps/test_app/config/storage.json @@ -1,25 +1,39 @@ { "default": { "enabled": true, - "available_providers": ["ipfs", "swarm"], "ipfs_bin": "ipfs", - "provider": "ipfs", - "host": "localhost", - "port": 5001 + + "available_providers": ["ipfs", "swarm"], + + "upload": { + "provider": "ipfs", + "host": "localhost", + "port": 5001 + }, + + "dappConnection": [ + "$BZZ", + {"provider": "swarm", "host": "localhost", "port": 8500, "getUrl": "http://localhost:8500/bzzr:/"}, + {"provider": "ipfs", "host": "localhost", "port": 5001, "getUrl": "http://localhost:8080/ipfs/"} + ] }, "development": { "enabled": true, - "provider": "swarm", - "host": "swarm-gateways.net", - "port": false, - "getUrl": "http://swarm-gateways.net/bzzr:/" + "upload": { + "provider": "ipfs", + "host": "localhost", + "port": 5001, + "getUrl": "http://localhost:8080/ipfs/" + } }, "livenet": { "enabled": true, - "provider": "ipfs", - "host": "ipfs.infura.io", - "protocol": "https", - "port": false, - "getUrl": "https://ipfs.infura.io/ipfs/" + "upload":{ + "provider": "ipfs", + "host": "ipfs.infura.io", + "protocol": "https", + "port": false, + "getUrl": "https://ipfs.infura.io/ipfs/" + } } -} +} \ No newline at end of file diff --git a/test_apps/test_app/embark.json b/test_apps/test_app/embark.json index 66dfb0066..1ae6c1629 100644 --- a/test_apps/test_app/embark.json +++ b/test_apps/test_app/embark.json @@ -17,7 +17,8 @@ "versions": { "solc": "0.4.18", "web3": "1.0.0-beta.34", - "ipfs-api": "17.2.7" + "ipfs-api": "17.2.7", + "p-iteration": "1.1.7" }, "plugins": { "embark-service": {}