agora-rest-client
Version:
Node.js REST client for Agora
36 lines (35 loc) • 1.33 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.bestDomain = void 0;
const promises_1 = require("dns/promises");
const log_1 = require("../log");
const utils_1 = require("../utils");
const types_1 = require("../types");
const logger = (0, log_1.getLogger)('RequestClient');
function bestDomain(domains, regionPrefix) {
return new Promise((resolve, reject) => {
let failCounter = 0;
let domain;
const resolver = new promises_1.Resolver({ timeout: 2000 });
for (let i = 0; i < domains.length; i++) {
const promise = resolver.resolve4(`${regionPrefix}.${domains[i]}`);
promise
.then((result) => {
if (!domain) {
domain = domains[i];
resolve(domain);
}
})
.catch((e) => {
logger.error(`resolve "${domains[i]}" failed: ${e.code}`);
failCounter++;
})
.finally(() => {
if (failCounter === domains.length) {
reject(utils_1.GenericError.wrapMessage(utils_1.ERR_NAMESPACE_LIB, types_1.ErrorTypeEnum.RequestDNSError, 'DnsError', 'all dns failed'));
}
});
}
});
}
exports.bestDomain = bestDomain;