mirror of
https://github.com/embarklabs/embark.git
synced 2025-02-17 08:07:51 +00:00
Merge pull request #390 from embark-framework/features/add-swarm-to-embarkjs
Added swarm support in embarkjs, isAvailable for messages/storage, swarm/ipfs checks
This commit is contained in:
commit
0cffff067a
12
js/embark.js
12
js/embark.js
@ -182,9 +182,7 @@ EmbarkJS.Contract.prototype.send = function(value, unit, _options) {
|
|||||||
|
|
||||||
EmbarkJS.Storage = {};
|
EmbarkJS.Storage = {};
|
||||||
|
|
||||||
EmbarkJS.Storage.Providers = {
|
EmbarkJS.Storage.Providers = {};
|
||||||
SWARM: 'swarm'
|
|
||||||
};
|
|
||||||
|
|
||||||
EmbarkJS.Storage.saveText = function(text) {
|
EmbarkJS.Storage.saveText = function(text) {
|
||||||
if (!this.currentStorage) {
|
if (!this.currentStorage) {
|
||||||
@ -230,6 +228,10 @@ EmbarkJS.Storage.setProvider = function(provider, options) {
|
|||||||
return providerObj.setProvider(options);
|
return providerObj.setProvider(options);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
EmbarkJS.Storage.isAvailable = function(){
|
||||||
|
return this.currentStorage.isAvailable();
|
||||||
|
};
|
||||||
|
|
||||||
EmbarkJS.Messages = {};
|
EmbarkJS.Messages = {};
|
||||||
|
|
||||||
EmbarkJS.Messages.Providers = {};
|
EmbarkJS.Messages.Providers = {};
|
||||||
@ -250,6 +252,10 @@ EmbarkJS.Messages.setProvider = function(provider, options) {
|
|||||||
return providerObj.setProvider(options);
|
return providerObj.setProvider(options);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
EmbarkJS.Messages.isAvailable = function(){
|
||||||
|
return this.currentMessages.isAvailable();
|
||||||
|
};
|
||||||
|
|
||||||
EmbarkJS.Messages.sendMessage = function(options) {
|
EmbarkJS.Messages.sendMessage = function(options) {
|
||||||
if (!this.currentMessages) {
|
if (!this.currentMessages) {
|
||||||
throw new Error('Messages provider not set; e.g EmbarkJS.Messages.setProvider("whisper")');
|
throw new Error('Messages provider not set; e.g EmbarkJS.Messages.setProvider("whisper")');
|
||||||
|
@ -85,3 +85,11 @@ EmbarkJS.Messages.Orbit.listenTo = function(options) {
|
|||||||
return promise;
|
return promise;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// TODO: needs a real check for availability
|
||||||
|
// TODO: not tested as orbit is not loaded and therefore the provider is not available
|
||||||
|
EmbarkJS.Messages.Orbit.isAvailable = function(){
|
||||||
|
return new Promise((resolve) => {
|
||||||
|
if(!this.orbit) resolve(false);
|
||||||
|
resolve(true);
|
||||||
|
});
|
||||||
|
}
|
@ -103,7 +103,9 @@ Config.prototype._getFileOrOject = function(object, filePath, property) {
|
|||||||
Config.prototype.loadBlockchainConfigFile = function() {
|
Config.prototype.loadBlockchainConfigFile = function() {
|
||||||
var configObject = {
|
var configObject = {
|
||||||
"default": {
|
"default": {
|
||||||
"enabled": true
|
"enabled": true,
|
||||||
|
"rpcCorsDomain": "auto",
|
||||||
|
"wsOrigins": "auto"
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -181,9 +183,10 @@ Config.prototype.loadStorageConfigFile = function() {
|
|||||||
"default": {
|
"default": {
|
||||||
"versions": versions,
|
"versions": versions,
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"available_providers": ["ipfs"],
|
"available_providers": ["ipfs", "swarm"],
|
||||||
"ipfs_bin": "ipfs",
|
"ipfs_bin": "ipfs",
|
||||||
"provider": "ipfs",
|
"provider": "ipfs",
|
||||||
|
"protocol": "http",
|
||||||
"host": "localhost",
|
"host": "localhost",
|
||||||
"port": 5001,
|
"port": 5001,
|
||||||
"getUrl": "http://localhost:8080/ipfs/"
|
"getUrl": "http://localhost:8080/ipfs/"
|
||||||
|
@ -249,7 +249,7 @@ class Engine {
|
|||||||
this.registerModule('swarm', {
|
this.registerModule('swarm', {
|
||||||
addCheck: this.servicesMonitor.addCheck.bind(this.servicesMonitor),
|
addCheck: this.servicesMonitor.addCheck.bind(this.servicesMonitor),
|
||||||
storageConfig: this.config.storageConfig,
|
storageConfig: this.config.storageConfig,
|
||||||
web3: _options.web3
|
bzz: _options.bzz
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
37
lib/index.js
37
lib/index.js
@ -1,5 +1,6 @@
|
|||||||
let async = require('async');
|
let async = require('async');
|
||||||
const constants = require('./constants');
|
const constants = require('./constants');
|
||||||
|
const _ = require('underscore');
|
||||||
// require("./utils/debug_util.js")(__filename, async);
|
// require("./utils/debug_util.js")(__filename, async);
|
||||||
|
|
||||||
require('colors');
|
require('colors');
|
||||||
@ -45,11 +46,11 @@ class Embark {
|
|||||||
|
|
||||||
if(blockchainConfig.rpcCorsDomain === 'auto') {
|
if(blockchainConfig.rpcCorsDomain === 'auto') {
|
||||||
if(webServerConfig) blockchainConfig.rpcCorsDomain = `http://${webServerConfig.host}:${webServerConfig.port}`;
|
if(webServerConfig) blockchainConfig.rpcCorsDomain = `http://${webServerConfig.host}:${webServerConfig.port}`;
|
||||||
if(storageConfig) blockchainConfig.rpcCorsDomain += `${blockchainConfig.rpcCorsDomain.length ? ',' : ''}http://${storageConfig.host}:${storageConfig.port}`;
|
if(storageConfig) blockchainConfig.rpcCorsDomain += `${blockchainConfig.rpcCorsDomain.length ? ',' : ''}${storageConfig.protocol}://${storageConfig.host}:${storageConfig.port}`;
|
||||||
}
|
}
|
||||||
if(blockchainConfig.wsOrigins === 'auto') {
|
if(blockchainConfig.wsOrigins === 'auto') {
|
||||||
if(webServerConfig) blockchainConfig.wsOrigins = `http://${webServerConfig.host}:${webServerConfig.port}`;
|
if(webServerConfig) blockchainConfig.wsOrigins = `http://${webServerConfig.host}:${webServerConfig.port}`;
|
||||||
if(storageConfig) blockchainConfig.wsOrigins += `${blockchainConfig.wsOrigins.length ? ',' : ''}http://${storageConfig.host}:${storageConfig.port}`;
|
if(storageConfig) blockchainConfig.wsOrigins += `${blockchainConfig.wsOrigins.length ? ',' : ''}${storageConfig.protocol}://${storageConfig.host}:${storageConfig.port}`;
|
||||||
}
|
}
|
||||||
return require('./cmds/blockchain/blockchain.js')(blockchainConfig, client, env).run();
|
return require('./cmds/blockchain/blockchain.js')(blockchainConfig, client, env).run();
|
||||||
}
|
}
|
||||||
@ -121,7 +122,7 @@ class Embark {
|
|||||||
engine.startService("pipeline");
|
engine.startService("pipeline");
|
||||||
engine.startService("codeGenerator");
|
engine.startService("codeGenerator");
|
||||||
engine.startService("deployment");
|
engine.startService("deployment");
|
||||||
engine.startService("ipfs");
|
engine.startService(engine.config.storageConfig.provider, {bzz: engine.web3.bzz});
|
||||||
|
|
||||||
engine.events.on('check:backOnline:Ethereum', function () {
|
engine.events.on('check:backOnline:Ethereum', function () {
|
||||||
engine.logger.info('Ethereum node detected..');
|
engine.logger.info('Ethereum node detected..');
|
||||||
@ -134,6 +135,7 @@ class Embark {
|
|||||||
engine.events.on('outputDone', function () {
|
engine.events.on('outputDone', function () {
|
||||||
engine.logger.info("Looking for documentation? You can find it at ".cyan + "http://embark.readthedocs.io/".green.underline + ".".cyan);
|
engine.logger.info("Looking for documentation? You can find it at ".cyan + "http://embark.readthedocs.io/".green.underline + ".".cyan);
|
||||||
engine.logger.info("Ready".underline);
|
engine.logger.info("Ready".underline);
|
||||||
|
engine.events.emit("status", "Ready".green);
|
||||||
});
|
});
|
||||||
|
|
||||||
engine.deployManager.deployContracts(function (err) {
|
engine.deployManager.deployContracts(function (err) {
|
||||||
@ -153,7 +155,6 @@ class Embark {
|
|||||||
engine.logger.info(err.stack);
|
engine.logger.info(err.stack);
|
||||||
} else {
|
} else {
|
||||||
engine.events.emit('firstDeploymentDone');
|
engine.events.emit('firstDeploymentDone');
|
||||||
engine.events.emit("status", "Ready".green);
|
|
||||||
|
|
||||||
let size = windowSize.get();
|
let size = windowSize.get();
|
||||||
if (size.height < 40 || size.width < 118) {
|
if (size.height < 40 || size.width < 118) {
|
||||||
@ -194,6 +195,7 @@ class Embark {
|
|||||||
engine.startService("codeGenerator");
|
engine.startService("codeGenerator");
|
||||||
engine.startService("deployment");
|
engine.startService("deployment");
|
||||||
engine.startService("ipfs");
|
engine.startService("ipfs");
|
||||||
|
engine.startService("swarm", {bzz: engine.web3.bzz});
|
||||||
callback();
|
callback();
|
||||||
},
|
},
|
||||||
function deploy(callback) {
|
function deploy(callback) {
|
||||||
@ -303,10 +305,28 @@ class Embark {
|
|||||||
engine.startService("pipeline");
|
engine.startService("pipeline");
|
||||||
engine.startService("codeGenerator");
|
engine.startService("codeGenerator");
|
||||||
engine.startService("deployment");
|
engine.startService("deployment");
|
||||||
engine.startService("ipfs");
|
engine.startService(platform.toLowerCase(), {bzz: engine.web3.bzz});
|
||||||
engine.startService("swarm", {buildDir:'dist/',web3: engine.web3});
|
engine.startMonitor();
|
||||||
callback();
|
callback();
|
||||||
},
|
},
|
||||||
|
function checkStorageService(callback){
|
||||||
|
let checkFn;
|
||||||
|
_.find(engine.servicesMonitor.checkList, (value, key) => {
|
||||||
|
if(key.toLowerCase() === platform.toLowerCase()){
|
||||||
|
checkFn = value;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (!checkFn || typeof checkFn.fn !== 'function') {
|
||||||
|
return callback();
|
||||||
|
}
|
||||||
|
checkFn.fn(function (serviceCheckResult) {
|
||||||
|
if (!serviceCheckResult.status || serviceCheckResult.status === 'off') {
|
||||||
|
return callback({message: `Cannot upload: ${platform} node is not running on http://${engine.config.storageConfig.host}:${engine.config.storageConfig.port}.`});
|
||||||
|
}
|
||||||
|
callback();
|
||||||
|
});
|
||||||
|
},
|
||||||
function setupStoragePlugin(callback){
|
function setupStoragePlugin(callback){
|
||||||
let pluginList = engine.plugins.listPlugins();
|
let pluginList = engine.plugins.listPlugins();
|
||||||
if (pluginList.length > 0) {
|
if (pluginList.length > 0) {
|
||||||
@ -325,10 +345,9 @@ class Embark {
|
|||||||
}
|
}
|
||||||
if (!cmdPlugin) {
|
if (!cmdPlugin) {
|
||||||
engine.logger.info('try "embark upload ipfs" or "embark upload swarm"'.green);
|
engine.logger.info('try "embark upload ipfs" or "embark upload swarm"'.green);
|
||||||
callback({message: 'unknown platform: ' + platform});
|
return callback({message: 'unknown platform: ' + platform});
|
||||||
} else {
|
|
||||||
callback();
|
|
||||||
}
|
}
|
||||||
|
callback();
|
||||||
},
|
},
|
||||||
function deploy(callback) {
|
function deploy(callback) {
|
||||||
// 2. upload to storage (outputDone event triggered after webpack finished)
|
// 2. upload to storage (outputDone event triggered after webpack finished)
|
||||||
|
@ -100,6 +100,21 @@ __embarkIPFS.uploadFile = function(inputSelector) {
|
|||||||
return promise;
|
return promise;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
__embarkIPFS.isAvailable = function () {
|
||||||
|
return new Promise((resolve) => {
|
||||||
|
if (!this.ipfsConnection) {
|
||||||
|
return resolve(false);
|
||||||
|
}
|
||||||
|
this.ipfsConnection.id()
|
||||||
|
.then((id) => {
|
||||||
|
resolve(Boolean(id));
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
resolve(false);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
__embarkIPFS.getUrl = function (hash) {
|
__embarkIPFS.getUrl = function (hash) {
|
||||||
return (this._getUrl || "http://localhost:8080/ipfs/") + hash;
|
return (this._getUrl || "http://localhost:8080/ipfs/") + hash;
|
||||||
};
|
};
|
||||||
|
@ -29,7 +29,7 @@ class IPFS {
|
|||||||
function runCommand(ipfs_bin, callback) {
|
function runCommand(ipfs_bin, callback) {
|
||||||
let cmd = `"${ipfs_bin}" add -r ${self.buildDir}`;
|
let cmd = `"${ipfs_bin}" add -r ${self.buildDir}`;
|
||||||
console.log(("=== adding " + self.buildDir + " to ipfs").green);
|
console.log(("=== adding " + self.buildDir + " to ipfs").green);
|
||||||
console.trace(cmd);
|
console.debug(cmd);
|
||||||
shelljs.exec(cmd, {silent:true}, function(code, stdout, stderr){ // {silent:true}: don't echo cmd output so it can be controlled via logLevel
|
shelljs.exec(cmd, {silent:true}, function(code, stdout, stderr){ // {silent:true}: don't echo cmd output so it can be controlled via logLevel
|
||||||
console.log(stdout.green);
|
console.log(stdout.green);
|
||||||
callback(stderr, stdout);
|
callback(stderr, stdout);
|
||||||
|
94
lib/modules/swarm/embarkjs.js
Normal file
94
lib/modules/swarm/embarkjs.js
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
/*global web3 */
|
||||||
|
let __embarkSwarm = {};
|
||||||
|
const bytes = require("eth-lib/lib/bytes");
|
||||||
|
|
||||||
|
__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.connectError = new Error(`Cannot connect to Swarm node on ${this.connectUrl}`);
|
||||||
|
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}`);
|
||||||
|
}
|
||||||
|
resolve(this);
|
||||||
|
} catch (err) {
|
||||||
|
console.log(err);
|
||||||
|
reject(this.connectError);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
__embarkSwarm.isAvailable = function () {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
if (!this.bzz) {
|
||||||
|
return resolve(false);
|
||||||
|
}
|
||||||
|
this.bzz.isAvailable()
|
||||||
|
.then(resolve)
|
||||||
|
.catch(() => {
|
||||||
|
reject(this.connectError);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
__embarkSwarm.saveText = function (text) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
this.isAvailable().then((isAvailable) => {
|
||||||
|
if (!isAvailable) {
|
||||||
|
return reject(this.connectError);
|
||||||
|
}
|
||||||
|
this.bzz.upload(text)
|
||||||
|
.then(resolve)
|
||||||
|
.catch(reject);
|
||||||
|
}).catch(reject);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
__embarkSwarm.get = function (hash) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
this.isAvailable().then((isAvailable) => {
|
||||||
|
if (!isAvailable) {
|
||||||
|
return reject(this.connectError);
|
||||||
|
}
|
||||||
|
this.bzz.download(hash)
|
||||||
|
.then((uint8Array) => resolve(bytes.toString(bytes.fromUint8Array(uint8Array))))
|
||||||
|
.catch(reject);
|
||||||
|
}).catch(reject);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
__embarkSwarm.uploadFile = function (inputSelector) {
|
||||||
|
let file = inputSelector[0].files[0];
|
||||||
|
|
||||||
|
if (file === undefined) {
|
||||||
|
throw new Error('no file found');
|
||||||
|
}
|
||||||
|
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
const reader = new FileReader();
|
||||||
|
reader.onloadend = (event) => {
|
||||||
|
const fileContent = new Uint8Array(event.target.result);
|
||||||
|
this.isAvailable().then((isAvailable) => {
|
||||||
|
if (!isAvailable) {
|
||||||
|
return reject(this.connectError);
|
||||||
|
}
|
||||||
|
this.bzz.upload(fileContent)
|
||||||
|
.then(resolve)
|
||||||
|
.catch(reject);
|
||||||
|
}).catch(reject);
|
||||||
|
};
|
||||||
|
reader.onerror = reject;
|
||||||
|
reader.readAsArrayBuffer(file);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
__embarkSwarm.getUrl = function (hash) {
|
||||||
|
return this._getUrl + hash;
|
||||||
|
};
|
||||||
|
|
@ -1,19 +1,112 @@
|
|||||||
let UploadSwarm = require('./upload.js');
|
let UploadSwarm = require('./upload.js');
|
||||||
|
let utils = require('../../utils/utils.js');
|
||||||
|
let fs = require('../../core/fs.js');
|
||||||
|
|
||||||
class Swarm {
|
class Swarm {
|
||||||
|
|
||||||
constructor(embark, options) {
|
constructor(embark, options) {
|
||||||
this.logger = embark.logger;
|
this.logger = embark.logger;
|
||||||
|
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.addCheck = options.addCheck;
|
||||||
|
this.embark = embark;
|
||||||
|
this.bzz = options.bzz;
|
||||||
|
|
||||||
this.upload_swarm = new UploadSwarm({
|
this.initSwarmProvider();
|
||||||
buildDir: options.buildDir || 'dist/',
|
this.commandlineDeploy();
|
||||||
storageConfig: options.storageConfig,
|
this.setServiceCheck();
|
||||||
web3: options.web3
|
this.addSwarmToEmbarkJS();
|
||||||
});
|
this.addSetProvider();
|
||||||
|
|
||||||
embark.registerUploadCommand('swarm', this.upload_swarm.deploy.bind(this.upload_swarm));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
initSwarmProvider(){
|
||||||
|
if(!this.bzz.currentProvider) {
|
||||||
|
this.bzz.setProvider(`http://${this.host}:${this.port}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
commandlineDeploy() {
|
||||||
|
this.upload_swarm = new UploadSwarm({
|
||||||
|
buildDir: this.buildDir || 'dist/',
|
||||||
|
storageConfig: this.storageConfig,
|
||||||
|
bzz: this.bzz
|
||||||
|
});
|
||||||
|
|
||||||
|
this.embark.registerUploadCommand('swarm', this.upload_swarm.deploy.bind(this.upload_swarm));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
setServiceCheck() {
|
||||||
|
let self = this;
|
||||||
|
|
||||||
|
let storageConfig = this.storageConfig;
|
||||||
|
|
||||||
|
if (!storageConfig.enabled) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (storageConfig.provider !== 'swarm' && storageConfig.available_providers.indexOf("swarm") < 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.events.on('check:backOnline:Swarm', function () {
|
||||||
|
self.logger.info('Swarm node detected...');
|
||||||
|
});
|
||||||
|
|
||||||
|
this.events.on('check:wentOffline:Swarm', function () {
|
||||||
|
self.logger.info('Swarm node is offline...');
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!this.addCheck) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// add check for console
|
||||||
|
this.addCheck('Swarm', function(cb){
|
||||||
|
self.logger.trace("Checking Swarm availability...");
|
||||||
|
self.bzz.isAvailable().then(result => {
|
||||||
|
return cb({name: "Swarm ", status: result ? 'on':'off'});
|
||||||
|
}).catch(err => {
|
||||||
|
self.logger.trace("Check Swarm availability error: " + err);
|
||||||
|
return cb({name: "Swarm ", status: 'off'});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
addSwarmToEmbarkJS() {
|
||||||
|
// 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)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let code = "";
|
||||||
|
code += "\n" + fs.readFileSync(utils.joinPath(__dirname, 'embarkjs.js')).toString();
|
||||||
|
code += "\nEmbarkJS.Storage.registerProvider('swarm', __embarkSwarm);";
|
||||||
|
|
||||||
|
this.embark.addCodeToEmbarkJS(code);
|
||||||
|
}
|
||||||
|
|
||||||
|
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 shouldInit = (storageConfig) => {
|
||||||
|
return (storageConfig.provider === 'swarm' && storageConfig.enabled === true);
|
||||||
|
};
|
||||||
|
|
||||||
|
this.embark.addProviderInit('storage', code, shouldInit);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = Swarm;
|
module.exports = Swarm;
|
||||||
|
@ -5,7 +5,7 @@ class Swarm {
|
|||||||
constructor(options) {
|
constructor(options) {
|
||||||
this.options = options;
|
this.options = options;
|
||||||
this.buildDir = options.buildDir || 'dist/';
|
this.buildDir = options.buildDir || 'dist/';
|
||||||
this.web3 = options.web3;
|
this.bzz = options.bzz;
|
||||||
this.storageConfig = options.storageConfig;
|
this.storageConfig = options.storageConfig;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -13,15 +13,11 @@ class Swarm {
|
|||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
console.log("deploying to swarm!");
|
console.log("deploying to swarm!");
|
||||||
let self = this;
|
let self = this;
|
||||||
let web3 = this.web3;
|
let bzz = this.bzz;
|
||||||
async.waterfall([
|
async.waterfall([
|
||||||
function setProvider(callback){
|
|
||||||
web3.bzz.setProvider(`http://${self.storageConfig.host}:${self.storageConfig.port}`);
|
|
||||||
callback();
|
|
||||||
},
|
|
||||||
function runCommand(callback) {
|
function runCommand(callback) {
|
||||||
console.log(("=== adding " + self.buildDir + " to swarm").green);
|
console.log(("=== adding " + self.buildDir + " to swarm").green);
|
||||||
web3.bzz.upload({
|
bzz.upload({
|
||||||
path: self.buildDir, // path to data / file / directory
|
path: self.buildDir, // path to data / file / directory
|
||||||
kind: "directory", // could also be "file" or "data"
|
kind: "directory", // could also be "file" or "data"
|
||||||
defaultFile: "index.html" // optional, and only for kind === "directory"
|
defaultFile: "index.html" // optional, and only for kind === "directory"
|
||||||
@ -32,6 +28,9 @@ class Swarm {
|
|||||||
.catch(callback);
|
.catch(callback);
|
||||||
},
|
},
|
||||||
function printUrls(dir_hash, callback) {
|
function printUrls(dir_hash, callback) {
|
||||||
|
if (!dir_hash) {
|
||||||
|
return callback('No directory hash was returned');
|
||||||
|
}
|
||||||
console.log((`=== DApp available at ${self.storageConfig.getUrl}${dir_hash}/`).green);
|
console.log((`=== DApp available at ${self.storageConfig.getUrl}${dir_hash}/`).green);
|
||||||
|
|
||||||
callback();
|
callback();
|
||||||
@ -40,9 +39,9 @@ class Swarm {
|
|||||||
if (err) {
|
if (err) {
|
||||||
console.log("error uploading to swarm".red);
|
console.log("error uploading to swarm".red);
|
||||||
console.log(err);
|
console.log(err);
|
||||||
reject(err);
|
return reject(err);
|
||||||
}
|
}
|
||||||
else resolve('successfully uploaded to swarm');
|
resolve('successfully uploaded to swarm');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -17,8 +17,12 @@ __embarkWhisperNewWeb3.setProvider = function(options) {
|
|||||||
if (err) {
|
if (err) {
|
||||||
console.log("whisper not available");
|
console.log("whisper not available");
|
||||||
} else if (version >= 5) {
|
} else if (version >= 5) {
|
||||||
self.web3.shh.newSymKey().then((id) => { self.symKeyID = id; });
|
self.web3.shh.newSymKey().then((id) => {
|
||||||
self.web3.shh.newKeyPair().then((id) => { self.sig = id; });
|
self.symKeyID = id;
|
||||||
|
});
|
||||||
|
self.web3.shh.newKeyPair().then((id) => {
|
||||||
|
self.sig = id;
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
throw new Error("version of whisper not supported");
|
throw new Error("version of whisper not supported");
|
||||||
}
|
}
|
||||||
@ -56,7 +60,8 @@ __embarkWhisperNewWeb3.sendMessage = function(options) {
|
|||||||
powTarget: powTarget
|
powTarget: powTarget
|
||||||
};
|
};
|
||||||
|
|
||||||
this.web3.shh.post(message, function() { });
|
this.web3.shh.post(message, function () {
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
__embarkWhisperNewWeb3.listenTo = function (options) {
|
__embarkWhisperNewWeb3.listenTo = function (options) {
|
||||||
@ -97,3 +102,19 @@ __embarkWhisperNewWeb3.getWhisperVersion = function(cb) {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
__embarkWhisperNewWeb3.isAvailable = function () {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
if (!this.web3.shh) {
|
||||||
|
return resolve(false);
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
this.getWhisperVersion((err) => {
|
||||||
|
resolve(Boolean(!err));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
reject(err);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
@ -59,7 +59,8 @@ __embarkWhisperOld.sendMessage = function(options) {
|
|||||||
priority: priority
|
priority: priority
|
||||||
};
|
};
|
||||||
|
|
||||||
return this.web3.shh.post(message, function() { });
|
return this.web3.shh.post(message, function () {
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
__embarkWhisperOld.listenTo = function (options) {
|
__embarkWhisperOld.listenTo = function (options) {
|
||||||
@ -107,3 +108,18 @@ __embarkWhisperOld.getWhisperVersion = function(cb) {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
__embarkWhisperOld.isAvailable = function () {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
if (!this.web3) {
|
||||||
|
return resolve(false);
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
this.getWhisperVersion((err) => {
|
||||||
|
resolve(Boolean(!err));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
reject(err);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
136
package-lock.json
generated
136
package-lock.json
generated
@ -3000,16 +3000,12 @@
|
|||||||
"integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
|
"integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
|
||||||
},
|
},
|
||||||
"eth-lib": {
|
"eth-lib": {
|
||||||
"version": "0.1.27",
|
"version": "0.2.8",
|
||||||
"resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.27.tgz",
|
"resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz",
|
||||||
"integrity": "sha512-B8czsfkJYzn2UIEMwjc7Mbj+Cy72V+/OXH/tb44LV8jhrjizQJJ325xMOMyk3+ETa6r6oi0jsUY14+om8mQMWA==",
|
"integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"bn.js": "4.11.8",
|
"bn.js": "4.11.8",
|
||||||
"elliptic": "6.4.0",
|
"elliptic": "6.4.0",
|
||||||
"keccakjs": "0.2.1",
|
|
||||||
"nano-json-stream-parser": "0.1.2",
|
|
||||||
"servify": "0.1.12",
|
|
||||||
"ws": "3.3.3",
|
|
||||||
"xhr-request-promise": "0.1.2"
|
"xhr-request-promise": "0.1.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -3146,20 +3142,6 @@
|
|||||||
"vary": "1.1.2"
|
"vary": "1.1.2"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"finalhandler": {
|
|
||||||
"version": "1.1.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz",
|
|
||||||
"integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==",
|
|
||||||
"requires": {
|
|
||||||
"debug": "2.6.9",
|
|
||||||
"encodeurl": "1.0.2",
|
|
||||||
"escape-html": "1.0.3",
|
|
||||||
"on-finished": "2.3.0",
|
|
||||||
"parseurl": "1.3.2",
|
|
||||||
"statuses": "1.4.0",
|
|
||||||
"unpipe": "1.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"setprototypeof": {
|
"setprototypeof": {
|
||||||
"version": "1.1.0",
|
"version": "1.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
|
||||||
@ -9941,6 +9923,20 @@
|
|||||||
"base64-js": "1.2.3",
|
"base64-js": "1.2.3",
|
||||||
"ieee754": "1.1.8"
|
"ieee754": "1.1.8"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"eth-lib": {
|
||||||
|
"version": "0.1.27",
|
||||||
|
"resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.27.tgz",
|
||||||
|
"integrity": "sha512-B8czsfkJYzn2UIEMwjc7Mbj+Cy72V+/OXH/tb44LV8jhrjizQJJ325xMOMyk3+ETa6r6oi0jsUY14+om8mQMWA==",
|
||||||
|
"requires": {
|
||||||
|
"bn.js": "4.11.8",
|
||||||
|
"elliptic": "6.4.0",
|
||||||
|
"keccakjs": "0.2.1",
|
||||||
|
"nano-json-stream-parser": "0.1.2",
|
||||||
|
"servify": "0.1.12",
|
||||||
|
"ws": "3.3.3",
|
||||||
|
"xhr-request-promise": "0.1.2"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -10366,9 +10362,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"underscore": {
|
"underscore": {
|
||||||
"version": "1.8.3",
|
"version": "1.9.0",
|
||||||
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz",
|
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.0.tgz",
|
||||||
"integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI="
|
"integrity": "sha512-4IV1DSSxC1QK48j9ONFK1MoIAKKkbE8i7u55w2R6IqBqbT7A/iG7aZBCR2Bi8piF0Uz+i/MG1aeqLwl/5vqF+A=="
|
||||||
},
|
},
|
||||||
"underscore.string": {
|
"underscore.string": {
|
||||||
"version": "3.3.4",
|
"version": "3.3.4",
|
||||||
@ -10994,6 +10990,13 @@
|
|||||||
"got": "7.1.0",
|
"got": "7.1.0",
|
||||||
"swarm-js": "0.1.37",
|
"swarm-js": "0.1.37",
|
||||||
"underscore": "1.8.3"
|
"underscore": "1.8.3"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"underscore": {
|
||||||
|
"version": "1.8.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz",
|
||||||
|
"integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI="
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"web3-core": {
|
"web3-core": {
|
||||||
@ -11015,6 +11018,13 @@
|
|||||||
"underscore": "1.8.3",
|
"underscore": "1.8.3",
|
||||||
"web3-eth-iban": "1.0.0-beta.34",
|
"web3-eth-iban": "1.0.0-beta.34",
|
||||||
"web3-utils": "1.0.0-beta.34"
|
"web3-utils": "1.0.0-beta.34"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"underscore": {
|
||||||
|
"version": "1.8.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz",
|
||||||
|
"integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI="
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"web3-core-method": {
|
"web3-core-method": {
|
||||||
@ -11027,6 +11037,13 @@
|
|||||||
"web3-core-promievent": "1.0.0-beta.34",
|
"web3-core-promievent": "1.0.0-beta.34",
|
||||||
"web3-core-subscriptions": "1.0.0-beta.34",
|
"web3-core-subscriptions": "1.0.0-beta.34",
|
||||||
"web3-utils": "1.0.0-beta.34"
|
"web3-utils": "1.0.0-beta.34"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"underscore": {
|
||||||
|
"version": "1.8.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz",
|
||||||
|
"integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI="
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"web3-core-promievent": {
|
"web3-core-promievent": {
|
||||||
@ -11048,6 +11065,13 @@
|
|||||||
"web3-providers-http": "1.0.0-beta.34",
|
"web3-providers-http": "1.0.0-beta.34",
|
||||||
"web3-providers-ipc": "1.0.0-beta.34",
|
"web3-providers-ipc": "1.0.0-beta.34",
|
||||||
"web3-providers-ws": "1.0.0-beta.34"
|
"web3-providers-ws": "1.0.0-beta.34"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"underscore": {
|
||||||
|
"version": "1.8.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz",
|
||||||
|
"integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI="
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"web3-core-subscriptions": {
|
"web3-core-subscriptions": {
|
||||||
@ -11058,6 +11082,13 @@
|
|||||||
"eventemitter3": "1.1.1",
|
"eventemitter3": "1.1.1",
|
||||||
"underscore": "1.8.3",
|
"underscore": "1.8.3",
|
||||||
"web3-core-helpers": "1.0.0-beta.34"
|
"web3-core-helpers": "1.0.0-beta.34"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"underscore": {
|
||||||
|
"version": "1.8.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz",
|
||||||
|
"integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI="
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"web3-eth": {
|
"web3-eth": {
|
||||||
@ -11077,6 +11108,13 @@
|
|||||||
"web3-eth-personal": "1.0.0-beta.34",
|
"web3-eth-personal": "1.0.0-beta.34",
|
||||||
"web3-net": "1.0.0-beta.34",
|
"web3-net": "1.0.0-beta.34",
|
||||||
"web3-utils": "1.0.0-beta.34"
|
"web3-utils": "1.0.0-beta.34"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"underscore": {
|
||||||
|
"version": "1.8.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz",
|
||||||
|
"integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI="
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"web3-eth-abi": {
|
"web3-eth-abi": {
|
||||||
@ -11094,6 +11132,11 @@
|
|||||||
"version": "4.11.6",
|
"version": "4.11.6",
|
||||||
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz",
|
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz",
|
||||||
"integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU="
|
"integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU="
|
||||||
|
},
|
||||||
|
"underscore": {
|
||||||
|
"version": "1.8.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz",
|
||||||
|
"integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI="
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -11124,6 +11167,11 @@
|
|||||||
"xhr-request-promise": "0.1.2"
|
"xhr-request-promise": "0.1.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"underscore": {
|
||||||
|
"version": "1.8.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz",
|
||||||
|
"integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI="
|
||||||
|
},
|
||||||
"uuid": {
|
"uuid": {
|
||||||
"version": "2.0.1",
|
"version": "2.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz",
|
||||||
@ -11144,6 +11192,13 @@
|
|||||||
"web3-core-subscriptions": "1.0.0-beta.34",
|
"web3-core-subscriptions": "1.0.0-beta.34",
|
||||||
"web3-eth-abi": "1.0.0-beta.34",
|
"web3-eth-abi": "1.0.0-beta.34",
|
||||||
"web3-utils": "1.0.0-beta.34"
|
"web3-utils": "1.0.0-beta.34"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"underscore": {
|
||||||
|
"version": "1.8.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz",
|
||||||
|
"integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI="
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"web3-eth-iban": {
|
"web3-eth-iban": {
|
||||||
@ -11201,6 +11256,13 @@
|
|||||||
"oboe": "2.1.3",
|
"oboe": "2.1.3",
|
||||||
"underscore": "1.8.3",
|
"underscore": "1.8.3",
|
||||||
"web3-core-helpers": "1.0.0-beta.34"
|
"web3-core-helpers": "1.0.0-beta.34"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"underscore": {
|
||||||
|
"version": "1.8.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz",
|
||||||
|
"integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI="
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"web3-providers-ws": {
|
"web3-providers-ws": {
|
||||||
@ -11211,6 +11273,13 @@
|
|||||||
"underscore": "1.8.3",
|
"underscore": "1.8.3",
|
||||||
"web3-core-helpers": "1.0.0-beta.34",
|
"web3-core-helpers": "1.0.0-beta.34",
|
||||||
"websocket": "1.0.25"
|
"websocket": "1.0.25"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"underscore": {
|
||||||
|
"version": "1.8.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz",
|
||||||
|
"integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI="
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"web3-shh": {
|
"web3-shh": {
|
||||||
@ -11242,6 +11311,25 @@
|
|||||||
"version": "4.11.6",
|
"version": "4.11.6",
|
||||||
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz",
|
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz",
|
||||||
"integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU="
|
"integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU="
|
||||||
|
},
|
||||||
|
"eth-lib": {
|
||||||
|
"version": "0.1.27",
|
||||||
|
"resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.27.tgz",
|
||||||
|
"integrity": "sha512-B8czsfkJYzn2UIEMwjc7Mbj+Cy72V+/OXH/tb44LV8jhrjizQJJ325xMOMyk3+ETa6r6oi0jsUY14+om8mQMWA==",
|
||||||
|
"requires": {
|
||||||
|
"bn.js": "4.11.6",
|
||||||
|
"elliptic": "6.4.0",
|
||||||
|
"keccakjs": "0.2.1",
|
||||||
|
"nano-json-stream-parser": "0.1.2",
|
||||||
|
"servify": "0.1.12",
|
||||||
|
"ws": "3.3.3",
|
||||||
|
"xhr-request-promise": "0.1.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"underscore": {
|
||||||
|
"version": "1.8.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz",
|
||||||
|
"integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI="
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -36,6 +36,7 @@
|
|||||||
"css-loader": "^0.28.11",
|
"css-loader": "^0.28.11",
|
||||||
"deep-equal": "^1.0.1",
|
"deep-equal": "^1.0.1",
|
||||||
"ejs": "^2.5.8",
|
"ejs": "^2.5.8",
|
||||||
|
"eth-lib": "^0.2.8",
|
||||||
"ethereumjs-testrpc": "^6.0.3",
|
"ethereumjs-testrpc": "^6.0.3",
|
||||||
"file-loader": "^1.1.5",
|
"file-loader": "^1.1.5",
|
||||||
"finalhandler": "^1.1.1",
|
"finalhandler": "^1.1.1",
|
||||||
@ -58,7 +59,7 @@
|
|||||||
"style-loader": "^0.19.0",
|
"style-loader": "^0.19.0",
|
||||||
"tar": "^3.1.5",
|
"tar": "^3.1.5",
|
||||||
"toposort": "^1.0.0",
|
"toposort": "^1.0.0",
|
||||||
"underscore": "^1.8.3",
|
"underscore": "^1.9.0",
|
||||||
"underscore.string": "^3.3.4",
|
"underscore.string": "^3.3.4",
|
||||||
"url-loader": "^0.6.2",
|
"url-loader": "^0.6.2",
|
||||||
"viz.js": "^1.8.1",
|
"viz.js": "^1.8.1",
|
||||||
|
@ -27,6 +27,7 @@ describe('embark.Config', function () {
|
|||||||
"rpcHost": "localhost",
|
"rpcHost": "localhost",
|
||||||
"rpcPort": 8545,
|
"rpcPort": 8545,
|
||||||
"rpcCorsDomain": "http://localhost:8000",
|
"rpcCorsDomain": "http://localhost:8000",
|
||||||
|
"wsOrigins": "auto",
|
||||||
"account": {
|
"account": {
|
||||||
"password": "config/development/password"
|
"password": "config/development/password"
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"default": {
|
"default": {
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"available_providers": ["ipfs"],
|
"available_providers": ["ipfs", "swarm"],
|
||||||
"ipfs_bin": "ipfs",
|
"ipfs_bin": "ipfs",
|
||||||
"provider": "ipfs",
|
"provider": "ipfs",
|
||||||
"host": "localhost",
|
"host": "localhost",
|
||||||
@ -9,10 +9,10 @@
|
|||||||
},
|
},
|
||||||
"development": {
|
"development": {
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"provider": "ipfs",
|
"provider": "swarm",
|
||||||
"host": "localhost",
|
"host": "swarm-gateways.net",
|
||||||
"port": 5001,
|
"port": 80,
|
||||||
"getUrl": "http://localhost:8080/ipfs/"
|
"getUrl": "http://swarm-gateways.net/bzzr:/"
|
||||||
},
|
},
|
||||||
"livenet": {
|
"livenet": {
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user