diff --git a/lib/modules/whisper/index.js b/lib/modules/whisper/index.js index 727fe0ab9..0b688971d 100644 --- a/lib/modules/whisper/index.js +++ b/lib/modules/whisper/index.js @@ -71,12 +71,14 @@ class Whisper { addSetProvider() { let connection = this.communicationConfig.connection || {}; + // todo: make the add code a function as well let config = JSON.stringify({ server: connection.host || 'localhost', port: connection.port || '8546', type: connection.type || 'ws' }); + let code = "\nEmbarkJS.Messages.setProvider('whisper'," + config + ");"; let shouldInit = (communicationConfig) => { diff --git a/lib/modules/whisper/js/embarkjs.js b/lib/modules/whisper/js/embarkjs.js index 4cfa98fea..ea72b9d0e 100644 --- a/lib/modules/whisper/js/embarkjs.js +++ b/lib/modules/whisper/js/embarkjs.js @@ -32,53 +32,86 @@ __embarkWhisperNewWeb3.setProvider = function (options) { __embarkWhisperNewWeb3.sendMessage = function (options) { var topics, data, ttl, payload; - topics = options.topic || options.topics; + topics = options.topic; data = options.data || options.payload; ttl = options.ttl || 100; var powTime = options.powTime || 3; var powTarget = options.powTarget || 0.5; - if (topics === undefined) { - throw new Error("missing option: topic"); - } - if (data === undefined) { throw new Error("missing option: data"); } - topics = this.web3.utils.toHex(topics).slice(0, 10); + if (topics) { + topics = this.web3.utils.toHex(topics).slice(0, 10); + } payload = JSON.stringify(data); let message = { - symKeyID: this.symKeyID, // encrypts using the sym key ID sig: this.sig, // signs the message using the keyPair ID ttl: ttl, - topic: topics, payload: EmbarkJS.Utils.fromAscii(payload), powTime: powTime, powTarget: powTarget }; + if (topics) { + message.topic = topics; + } + + if (options.pubKey) { + message.pubKey = options.pubKey; // encrypt using a given pubKey + } else if(options.symKeyID) { + message.symKeyID = options.symKeyID; // encrypts using given sym key ID + } else { + message.symKeyID = this.symKeyID; // encrypts using the sym key ID + } + + if (topics === undefined && message.symKeyID && !message.pubKey) { + throw new Error("missing option: topic"); + } + this.web3.shh.post(message, function () { }); }; __embarkWhisperNewWeb3.listenTo = function (options, callback) { - var topics = options.topic || options.topics; + var topics = options.topic; let promise = new __MessageEvents(); - if (typeof topics === 'string') { - topics = [this.web3.utils.toHex(topics).slice(0, 10)]; - } else { - topics = topics.map((t) => this.web3.utils.toHex(t).slice(0, 10)); + let subOptions = {}; + + if(topics){ + if (typeof topics === 'string') { + topics = [this.web3.utils.toHex(topics).slice(0, 10)]; + } else { + topics = topics.map((t) => this.web3.utils.toHex(t).slice(0, 10)); + } + subOptions.topics = topics; } - let filter = this.web3.shh.subscribe("messages", { - symKeyID: this.symKeyID, - topics: topics - }).on('data', function (result) { + if (options.minPow) { + subOptions.minPow = options.minPow; + } + + if (options.usePrivateKey === true) { + if (options.privateKeyID) { + subOptions.privateKeyID = options.privateKeyID; + } else { + subOptions.privateKeyID = this.sig; + } + } else { + if (options.symKeyID) { + subOptions.symKeyID = options.symKeyID; + } else { + subOptions.symKeyID = this.symKeyID; + } + } + + let filter = this.web3.shh.subscribe("messages", subOptions) + .on('data', function (result) { var payload = JSON.parse(EmbarkJS.Utils.toAscii(result.payload)); var data; data = {