@beenotung/tslib
Version:
utils library in Typescript
69 lines (68 loc) • 2.17 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.externalAPI = void 0;
/**
* external API powered by surge.sh
*/
const defer_1 = require("./async/defer");
var externalAPI;
(function (externalAPI) {
const hostListUrl = 'http://host-list.surge.sh/list';
/**
* @example line : 192.168.1.2:8181 freedom-coin-server
* */
async function getHostList() {
const text = await fetch(hostListUrl).then(x => x.text());
return text
.split('\n')
.filter(x => x.length !== 0)
.map(line => {
const record = {};
let xs = line.split(' ');
record.name = xs[1];
xs = xs[0].split(':');
if (xs.length === 2) {
record.port = Number(xs[1]);
}
record.ip = xs[0];
return record;
});
}
externalAPI.getHostList = getHostList;
async function getHostByName(name) {
const text = await fetch(hostListUrl).then(x => x.text());
/* not using `getHostList().filter()` for speed */
let found;
const defer = (0, defer_1.createDefer)();
try {
text
.split('\n')
.filter(x => x.length !== 0)
.forEach(line => {
let xs = line.split(' ');
if (xs[1] === name) {
const name = xs[1];
let port;
xs = xs[0].split(':');
if (xs.length === 2) {
port = Number(xs[1]);
}
const ip = xs[0];
found = { name, ip, port };
throw new Error('found');
}
});
defer.reject(`no host record named '${name}'`);
}
catch (e) {
if (found) {
defer.resolve(found);
}
else {
defer.reject(e);
}
}
return defer.promise;
}
externalAPI.getHostByName = getHostByName;
})(externalAPI || (exports.externalAPI = externalAPI = {}));