UNPKG

@beenotung/tslib

Version:
69 lines (68 loc) 2.17 kB
"use strict"; 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 = {}));