mirror of
https://github.com/status-im/status-js-api.git
synced 2025-02-19 20:58:05 +00:00
Added mailserver support
This commit is contained in:
parent
d8adeb6b8e
commit
9f58d07cb6
15
src/index.js
15
src/index.js
@ -44,8 +44,13 @@ class StatusJS {
|
|||||||
|
|
||||||
async connect(url) {
|
async connect(url) {
|
||||||
let web3 = new Web3();
|
let web3 = new Web3();
|
||||||
web3.setProvider(new Web3.providers.WebsocketProvider(url, {headers: {Origin: "statusjs"}}));
|
if(url.startsWith("ws://")){
|
||||||
|
web3.setProvider(new Web3.providers.WebsocketProvider(url, {headers: {Origin: "statusjs"}}));
|
||||||
|
} else {
|
||||||
|
const net = require('net');
|
||||||
|
web3.setProvider(new Web3.providers.IpcProvider(url, net));
|
||||||
|
}
|
||||||
|
|
||||||
this.shh = web3.shh;
|
this.shh = web3.shh;
|
||||||
this.mailservers = new mailservers(web3);
|
this.mailservers = new mailservers(web3);
|
||||||
|
|
||||||
@ -112,7 +117,8 @@ class StatusJS {
|
|||||||
this.channels[channelName].subscription = this.shh.subscribe("messages", {
|
this.channels[channelName].subscription = this.shh.subscribe("messages", {
|
||||||
minPow: POW_TARGET,
|
minPow: POW_TARGET,
|
||||||
symKeyID: this.channels[channelName].channelKey,
|
symKeyID: this.channels[channelName].channelKey,
|
||||||
topics: [this.channels[channelName].channelCode]
|
topics: [this.channels[channelName].channelCode],
|
||||||
|
allowP2P: true
|
||||||
}).on('data', (data) => {
|
}).on('data', (data) => {
|
||||||
let username = utils.generateUsernameFromSeed(data.sig);
|
let username = utils.generateUsernameFromSeed(data.sig);
|
||||||
|
|
||||||
@ -132,7 +138,8 @@ class StatusJS {
|
|||||||
this.userMessagesSubscription = this.shh.subscribe("messages", {
|
this.userMessagesSubscription = this.shh.subscribe("messages", {
|
||||||
minPow: POW_TARGET,
|
minPow: POW_TARGET,
|
||||||
privateKeyID: this.sig,
|
privateKeyID: this.sig,
|
||||||
topics: [CONTACT_DISCOVERY_TOPIC]
|
topics: [CONTACT_DISCOVERY_TOPIC],
|
||||||
|
allowP2P: true
|
||||||
}).on('data', (data) => {
|
}).on('data', (data) => {
|
||||||
if(!this.contacts[data.sig]){
|
if(!this.contacts[data.sig]){
|
||||||
this.addContact(data.sig);
|
this.addContact(data.sig);
|
||||||
|
@ -6,77 +6,82 @@ class MailServers {
|
|||||||
this.mailserver = null;
|
this.mailserver = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
useMailserver(mailserver, cb){
|
async useMailserver(mailserver, cb){
|
||||||
if(!mailserverList[mailserver]){
|
var enode = mailserverList[mailserver];
|
||||||
|
|
||||||
|
if(!enode){
|
||||||
if(!cb) return;
|
if(!cb) return;
|
||||||
cb("unknown mailserver: " + mailserver);
|
cb("unknown mailserver: " + mailserver);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.symKeyID = await this.web3.shh.generateSymKeyFromPassword("status-offline-inbox");
|
||||||
|
|
||||||
this.web3.currentProvider.send({
|
this.web3.currentProvider.send({
|
||||||
method: "admin_addPeer",
|
method: "admin_addPeer",
|
||||||
params: [mailserverList[mailserver]],
|
params: [enode],
|
||||||
jsonrpc: "2.0",
|
jsonrpc: "2.0",
|
||||||
id: new Date().getTime()
|
id: new Date().getTime()
|
||||||
}, (err, res) => {
|
}, (err, res) => {
|
||||||
if(err){
|
if(err){
|
||||||
if(cb) return cb(err);
|
if(cb) return cb(err, false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!res.result){
|
if(!res.result){
|
||||||
if(cb) return cb(err);
|
if(cb) return cb(err, false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const peerId = mailserverList[mailserver].substr(8, 128);
|
this.web3.shh.markTrustedPeer(enode)
|
||||||
|
.then(res => {
|
||||||
this.web3.shh.markTrustedPeer(peerId)
|
this.mailserver = enode;
|
||||||
.then(() => {
|
if (!cb) return true;
|
||||||
this.mailserver = peerId;
|
cb(null, true);
|
||||||
if (!cb) return;
|
}).catch((e) => {
|
||||||
cb(null, true);
|
console.log(e);
|
||||||
}).catch((e) => {
|
if (!cb) return;
|
||||||
if (!cb) return;
|
cb(e, false);
|
||||||
cb(e, false);
|
});
|
||||||
});
|
});
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async requestMessages(cb){
|
async requestMessages(topic, options, cb){
|
||||||
if(!this.mailserver){
|
if(!this.mailserver){
|
||||||
if(!cb) return;
|
if(!cb) return;
|
||||||
return cb("Mailserver is not set");
|
return cb("Mailserver is not set", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
const symKeyID = await this.web3.shh.generateSymKeyFromPassword("status-offline-inbox");
|
const topics = [this.web3.utils.sha3(topic).slice(0, 10)];
|
||||||
|
const mailserverPeer = this.mailserver;
|
||||||
// TODO: extract this as parameters
|
const timeout = options.timeout || 30; // seconds
|
||||||
const topic = await this.web3.shh.generateSymKeyFromPassword("mytest");
|
const symKeyID = this.symKeyID;
|
||||||
const from = (new Date("2018-11-13 00:00:00")).getTime();
|
const from = options.from || 0; // unix timestamp
|
||||||
const to = (new Date("2018-11-14 20:00:00")).getTime();
|
const to = options.to || 0;
|
||||||
|
const limit = options.limit || 0;
|
||||||
|
|
||||||
this.web3.currentProvider.send({
|
this.web3.currentProvider.send({
|
||||||
method: "shh_requestMessages",
|
method: "shhext_requestMessages",
|
||||||
params: [mailserverList[this.mailserver], topic, symKeyID, from, to ],
|
params: [{
|
||||||
|
mailserverPeer,
|
||||||
|
symKeyID,
|
||||||
|
timeout,
|
||||||
|
topics,
|
||||||
|
from,
|
||||||
|
to,
|
||||||
|
limit
|
||||||
|
}],
|
||||||
jsonrpc: "2.0",
|
jsonrpc: "2.0",
|
||||||
id: new Date().getTime()
|
id: new Date().getTime()
|
||||||
}, (err, res) => {
|
}, (err, res) => {
|
||||||
|
|
||||||
// TODO: implement result handling
|
|
||||||
|
|
||||||
if(err){
|
if(err){
|
||||||
console.log(err);
|
if(cb) return cb(err);
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log(res);
|
if(cb) return cb(null, true);
|
||||||
|
return true;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = MailServers;
|
module.exports = MailServers;
|
||||||
|
@ -2,14 +2,19 @@ var StatusJS = require('./src/index.js');
|
|||||||
|
|
||||||
(async () => {
|
(async () => {
|
||||||
var status = new StatusJS();
|
var status = new StatusJS();
|
||||||
await status.connect("ws://localhost:8546");
|
await status.connect("/home/richard/.statusd/geth.ipc");
|
||||||
|
|
||||||
status.mailservers.useMailserver("mail-02.gc-us-central1-a.eth.beta", (err, res) => {
|
const channel = "mytest";
|
||||||
|
|
||||||
|
|
||||||
status.mailservers.requestMessages();
|
|
||||||
|
|
||||||
|
await status.joinChat(channel);
|
||||||
|
|
||||||
|
status.onMessage(channel, (err, data) => {
|
||||||
|
console.dir(data.payload);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
status.mailservers.useMailserver("mail-02.gc-us-central1-a.eth.beta", (err, res) => {
|
||||||
|
status.mailservers.requestMessages(channel, {}, (err, res) => { if(err) console.log(err); });
|
||||||
|
});
|
||||||
|
|
||||||
|
setInterval(() => { }, 3000);
|
||||||
})()
|
})()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user