sth-ts
Version:
An SmartHoldem API wrapper, written in TypeScript to interact with SmartHoldem blockchain.
76 lines • 2.99 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
require("rxjs/add/observable/empty");
require("rxjs/add/operator/catch");
var Observable_1 = require("rxjs/Observable");
var model = require("../model");
var Http_1 = require("../services/Http");
var LoaderApi_1 = require("./LoaderApi");
var config_1 = require("../config");
/** Peer related API calls. */
var PeerApi = /** @class */ (function () {
function PeerApi(http) {
this.http = http;
}
/**
* Find good peer ordered by synchronized blocks.
*/
PeerApi.findGoodPeer = function (network, http) {
if (http === undefined) {
http = new Http_1.default(network);
}
return Observable_1.Observable.create(function (observer) {
var networkType = model.NetworkType[http.network.type].toLowerCase();
var peersList = config_1.default.networks[networkType].peers;
var loader = new LoaderApi_1.default(http);
var blockList = [];
var completed = false;
peersList.forEach(function (element, index) {
loader
.synchronisationStatus("http://" + element)
.subscribe(function (status) {
blockList.push([element, status.blocks]);
// when find a good peer or at the end
if (!completed && (status.blocks <= 0 || peersList.length - 1 === index)) {
completed = true;
blockList.sort(function (a, b) { return a[1] > b[1] ? 1 : -1; }); // sort by better to the worst
var host = blockList[0][0].split(':');
var peer = new model.Peer;
peer.ip = host[0];
peer.port = host[1];
observer.next(peer);
observer.complete();
}
}, function (e) { return Observable_1.Observable.empty(); });
});
});
};
/**
* Get peer by ip and port.
*/
PeerApi.prototype.get = function (ip, port) {
var params = { ip: ip, port: port };
return this.http.get('/peers/get', params, model.PeerResponse);
};
/**
* Get peers list by parameters.
*/
PeerApi.prototype.list = function (params) {
return this.http.get('/peers', params, model.PeerResponse);
};
/**
* Find good peer ordered by synchronized blocks.
*/
PeerApi.prototype.findGoodPeer = function () {
return PeerApi.findGoodPeer(this.http.network, this.http);
};
/**
* Get peer version
*/
PeerApi.prototype.version = function (params) {
return this.http.get('/peers/version', params, model.PeerVersionResponse);
};
return PeerApi;
}());
exports.default = PeerApi;
//# sourceMappingURL=PeerApi.js.map