rpki-validator
Version:
An RPKI validator that works also in the browser.
470 lines (469 loc) • 25.4 kB
JavaScript
;
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
var _redaxios = _interopRequireDefault(require("redaxios"));
var _nodeFetch = _interopRequireDefault(require("node-fetch"));
var _brembo = _interopRequireDefault(require("brembo"));
var _RIPEConnector = _interopRequireDefault(require("./connectors/RIPEConnector"));
var _NTTConnector = _interopRequireDefault(require("./connectors/NTTConnector"));
var _CloudflareConnector = _interopRequireDefault(require("./connectors/CloudflareConnector"));
var _RpkiClientConnector = _interopRequireDefault(require("./connectors/RpkiClientConnector"));
var _ExternalConnector = _interopRequireDefault(require("./connectors/ExternalConnector"));
var _ApiConnector = _interopRequireDefault(require("./connectors/ApiConnector"));
var _longestPrefixMatch2 = _interopRequireDefault(require("longest-prefix-match"));
var _netValidations = require("net-validations");
var _PacketVisConnector = _interopRequireDefault(require("./connectors/PacketVisConnector"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
function _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }
function _classPrivateFieldSet(s, a, r) { return s.set(_assertClassBrand(s, a), r), r; }
function _assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
var defaultRpkiApi = "https://rpki.massimocandela.com/api/v1";
var providers = ["rpkiclient", "ntt", "ripe", "cloudflare", "packetvis"]; // The first provider is the default one
var _axios = /*#__PURE__*/new WeakMap();
var _connectors = /*#__PURE__*/new WeakMap();
var _connector = /*#__PURE__*/new WeakMap();
var _validationTimer = /*#__PURE__*/new WeakMap();
var _longestPrefixMatch = /*#__PURE__*/new WeakMap();
var _options = /*#__PURE__*/new WeakMap();
var _queue = /*#__PURE__*/new WeakMap();
var _onlineValidatorStatus = /*#__PURE__*/new WeakMap();
var _lastMetadata = /*#__PURE__*/new WeakMap();
var _setMetadata = /*#__PURE__*/new WeakMap();
var _validateFromCache = /*#__PURE__*/new WeakMap();
var _getKey = /*#__PURE__*/new WeakMap();
var _validateOnline = /*#__PURE__*/new WeakMap();
var _createOutput = /*#__PURE__*/new WeakMap();
var _validateBundle = /*#__PURE__*/new WeakMap();
var _checkCoveringROAs = /*#__PURE__*/new WeakMap();
var _getValidatedPrefixes = /*#__PURE__*/new WeakMap();
var _getPrefixMatches = /*#__PURE__*/new WeakMap();
var RpkiValidator = /*#__PURE__*/_createClass(function RpkiValidator(options) {
var _this = this,
_classPrivateFieldGet7,
_classPrivateFieldGet8,
_classPrivateFieldGet9,
_classPrivateFieldGet0,
_classPrivateFieldGet1,
_classPrivateFieldGet10;
_classCallCheck(this, RpkiValidator);
_classPrivateFieldInitSpec(this, _axios, void 0);
_classPrivateFieldInitSpec(this, _connectors, void 0);
_classPrivateFieldInitSpec(this, _connector, void 0);
_classPrivateFieldInitSpec(this, _validationTimer, void 0);
_classPrivateFieldInitSpec(this, _longestPrefixMatch, void 0);
_classPrivateFieldInitSpec(this, _options, void 0);
_classPrivateFieldInitSpec(this, _queue, void 0);
_classPrivateFieldInitSpec(this, _onlineValidatorStatus, void 0);
_classPrivateFieldInitSpec(this, _lastMetadata, {});
_defineProperty(this, "getAdvancedStats", function () {
return _classPrivateFieldGet(_connector, _this).getAdvancedStats();
});
_defineProperty(this, "getApiStatus", function () {
return new Promise(function (resolve, reject) {
if (!_classPrivateFieldGet(_onlineValidatorStatus, _this)) {
if (!_classPrivateFieldGet(_options, _this).defaultRpkiApi) {
return reject();
}
var url = _brembo["default"].build(_classPrivateFieldGet(_options, _this).defaultRpkiApi, {
path: ["status"],
params: {
client: _classPrivateFieldGet(_options, _this).clientId
}
});
var tmr = setTimeout(function () {
_classPrivateFieldSet(_onlineValidatorStatus, _this, {
warning: true
});
resolve(_classPrivateFieldGet(_onlineValidatorStatus, _this));
}, 2000);
setTimeout(function () {
_classPrivateFieldSet(_onlineValidatorStatus, _this, null);
}, 60 * 60 * 1000);
_classPrivateFieldGet(_axios, _this).call(_this, {
url: url,
responseType: "json",
method: "get",
timeout: 2000
}).then(function (data) {
_classPrivateFieldSet(_onlineValidatorStatus, _this, data.data);
})["catch"](function () {
_classPrivateFieldSet(_onlineValidatorStatus, _this, {
warning: true
});
}).then(function () {
clearTimeout(tmr);
resolve(_classPrivateFieldGet(_onlineValidatorStatus, _this));
});
} else {
resolve(_classPrivateFieldGet(_onlineValidatorStatus, _this));
}
});
});
_defineProperty(this, "setConnector", function (name) {
if (!_classPrivateFieldGet(_connectors, _this)[name]) {
throw new Error("The specified connector is not valid");
}
_classPrivateFieldGet(_options, _this).connector = name;
_this.empty();
_classPrivateFieldSet(_connector, _this, new (_classPrivateFieldGet(_connectors, _this)[name])(_classPrivateFieldGet(_options, _this)));
});
_defineProperty(this, "getAvailableConnectors", function () {
return _this.getApiStatus().then(function (data) {
var workingConnectors = (data.data || []).filter(function (i) {
return !i.warning;
}).map(function (i) {
return i.name;
});
if (workingConnectors.length) {
return workingConnectors;
} else {
return Promise.reject();
}
});
});
_defineProperty(this, "validateFromCacheSync", function (prefix, origin, verbose) {
var roas = _classPrivateFieldGet(_getPrefixMatches, _this).call(_this, prefix);
if (roas.length === 0) {
return _classPrivateFieldGet(_createOutput, _this).call(_this, null, null, verbose, null);
} else {
var covering = roas.map(function (i) {
return {
prefix: i.prefix,
maxLength: i.maxLength,
asn: i.asn,
ta: i.ta || "",
expires: i.expires || null,
notBefore: i.notBefore || null
};
});
return _classPrivateFieldGet(_checkCoveringROAs, _this).call(_this, origin, prefix, covering, verbose);
}
});
_defineProperty(this, "preCache", function (everyMinutes) {
if (everyMinutes !== _this.refreshVrpEveryMinutes) {
_this.refreshVrpEveryMinutes = everyMinutes;
if (everyMinutes) {
if (everyMinutes < _classPrivateFieldGet(_connector, _this).minimumRefreshRateMinutes) {
return Promise.reject(new Error("The VRP list can be updated at most once every ".concat(_classPrivateFieldGet(_connector, _this).minimumRefreshRateMinutes, " minutes.")));
}
if (_this.cacheTimer) {
clearInterval(_this.cacheTimer);
}
_this.cacheTimer = setInterval(function () {
_this.preChachePromise = _classPrivateFieldGet(_getValidatedPrefixes, _this).call(_this, true)["catch"](function (error) {
console.log(error);
return false;
});
}, everyMinutes * 60 * 1000);
} else {
if (_this.cacheTimer) {
clearInterval(_this.cacheTimer);
}
}
}
if (!_this.preChachePromise) {
_this.preChachePromise = _classPrivateFieldGet(_getValidatedPrefixes, _this).call(_this);
}
return _this.preChachePromise;
});
_defineProperty(this, "historicValidation", function (timestamp, prefix, origin, verbose) {
if (_classPrivateFieldGet(_options, _this).connector !== "external") {
return Promise.reject("the historic validation works only with the external connector");
}
});
_defineProperty(this, "validate", function (prefix, origin, verbose) {
try {
if (origin == null || origin === "") {
throw new Error("Origin AS missing");
}
origin = parseInt(origin.toString().replace("AS", ""));
(0, _netValidations.validateAS)(origin);
(0, _netValidations.validatePrefix)(prefix);
if (_this.preCached) {
return _classPrivateFieldGet(_validateFromCache, _this).call(_this, prefix, origin, verbose);
} else {
return _classPrivateFieldGet(_validateOnline, _this).call(_this, prefix, origin, verbose);
}
} catch (error) {
return Promise.reject(error);
}
});
_defineProperty(this, "setVRPs", function (vrps) {
return _classPrivateFieldGet(_connector, _this).setVRPs(vrps);
});
_defineProperty(this, "empty", function () {
_this.preCached = false;
_classPrivateFieldSet(_lastMetadata, _this, {});
delete _this.refreshVrpEveryMinutes;
delete _this.preChachePromise;
if (_this.cacheTimer) {
clearInterval(_this.cacheTimer);
}
_classPrivateFieldGet(_longestPrefixMatch, _this).reset();
});
_defineProperty(this, "getVRPs", function () {
return _classPrivateFieldGet(_connector, _this).getVRPs();
});
_defineProperty(this, "getData", function () {
return _classPrivateFieldGet(_longestPrefixMatch, _this).getData();
});
_defineProperty(this, "toArray", function () {
return _classPrivateFieldGet(_longestPrefixMatch, _this).toArray();
});
_defineProperty(this, "getLength", function () {
return _classPrivateFieldGet(_longestPrefixMatch, _this).length;
});
_defineProperty(this, "getMetadata", function () {
return _classPrivateFieldGet(_lastMetadata, _this);
});
//-- private methods
_classPrivateFieldInitSpec(this, _setMetadata, function () {
var metadata = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
_classPrivateFieldSet(_lastMetadata, _this, _objectSpread(_objectSpread({}, _classPrivateFieldGet(_lastMetadata, _this)), metadata));
});
_classPrivateFieldInitSpec(this, _validateFromCache, function (prefix, origin, verbose) {
return Promise.resolve(_this.validateFromCacheSync(prefix, origin, verbose));
});
_classPrivateFieldInitSpec(this, _getKey, function (prefix, origin) {
return "a" + [prefix, origin].join("AS").replace(/\./g, "_").replace(/\:/g, "_").replace(/\//g, "_");
});
_classPrivateFieldInitSpec(this, _validateOnline, function (prefix, origin, verbose) {
if (_classPrivateFieldGet(_options, _this).defaultRpkiApi) {
var key = _classPrivateFieldGet(_getKey, _this).call(_this, prefix, origin);
if (!_classPrivateFieldGet(_queue, _this)[key]) {
var promise = new Promise(function (resolve, reject) {
_classPrivateFieldGet(_queue, _this)[key] = {
prefix: prefix,
origin: origin,
key: key,
resolve: resolve,
reject: reject,
verbose: verbose
};
});
_classPrivateFieldGet(_queue, _this)[key].promise = promise;
}
return _classPrivateFieldGet(_queue, _this)[key].promise;
} else {
return Promise.reject("An online validator is not available. Please specify a defaultRpkiApi.");
}
});
_classPrivateFieldInitSpec(this, _createOutput, function (sameOrigin, validLength, verbose, covering) {
var valid = sameOrigin && validLength;
var reason = !sameOrigin ? "Not valid origin" : !validLength ? "Not valid prefix length" : null;
if (sameOrigin === null && validLength === null) {
reason = "No ROA available for this prefix";
valid = null;
}
if (verbose) {
return {
valid: valid,
reason: reason,
covering: covering || []
};
} else {
return valid;
}
});
_classPrivateFieldInitSpec(this, _validateBundle, function () {
var items = Object.values(_classPrivateFieldGet(_queue, _this));
if (items.length) {
var url = _brembo["default"].build(_classPrivateFieldGet(_options, _this).defaultRpkiApi, {
path: ["validate"],
params: {
validator: _classPrivateFieldGet(_options, _this).connector,
client: _classPrivateFieldGet(_options, _this).clientId
}
});
return _classPrivateFieldGet(_axios, _this).call(_this, {
url: url,
responseType: "json",
method: "post",
data: items.map(function (i) {
return {
prefix: i.prefix,
asn: i.origin
};
})
}).then(function (data) {
var results = data.data;
if (results.length) {
var output;
var _iterator = _createForOfIteratorHelper(results),
_step;
try {
for (_iterator.s(); !(_step = _iterator.n()).done;) {
var result = _step.value;
var key = _classPrivateFieldGet(_getKey, _this).call(_this, result.prefix, result.asn);
if (result.valid === null) {
output = _classPrivateFieldGet(_createOutput, _this).call(_this, null, null, _classPrivateFieldGet(_queue, _this)[key].verbose, null);
_classPrivateFieldGet(_queue, _this)[key].resolve(output);
} else if (result.valid) {
var covering = result.covering;
output = _classPrivateFieldGet(_createOutput, _this).call(_this, true, true, _classPrivateFieldGet(_queue, _this)[key].verbose, covering);
_classPrivateFieldGet(_queue, _this)[key].resolve(output);
} else {
var _covering = result.covering;
output = _classPrivateFieldGet(_checkCoveringROAs, _this).call(_this, _classPrivateFieldGet(_queue, _this)[key]["origin"], _classPrivateFieldGet(_queue, _this)[key]["prefix"], _covering, _classPrivateFieldGet(_queue, _this)[key].verbose);
_classPrivateFieldGet(_queue, _this)[key].resolve(output);
}
delete _classPrivateFieldGet(_queue, _this)[key];
}
} catch (err) {
_iterator.e(err);
} finally {
_iterator.f();
}
}
})["catch"](function (error) {
var _iterator2 = _createForOfIteratorHelper(items),
_step2;
try {
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
var item = _step2.value;
if (_classPrivateFieldGet(_queue, _this)[item.key]) {
_classPrivateFieldGet(_queue, _this)[item.key].reject(error);
delete _classPrivateFieldGet(_queue, _this)[item.key];
}
}
} catch (err) {
_iterator2.e(err);
} finally {
_iterator2.f();
}
});
}
});
_classPrivateFieldInitSpec(this, _checkCoveringROAs, function (origin, prefix, covering, verbose) {
var sameAsRoas = covering.filter(function (roa) {
return roa.asn === parseInt(origin);
});
var sameOrigin = sameAsRoas.length > 0;
var validLength = sameAsRoas.some(function (roa) {
return parseInt(prefix.split("/")[1]) <= roa.maxLength;
});
return _classPrivateFieldGet(_createOutput, _this).call(_this, sameOrigin, validLength, verbose, covering);
});
_classPrivateFieldInitSpec(this, _getValidatedPrefixes, function (force) {
if (!force && _this.preCached) {
return new Promise(function (resolve, reject) {
resolve(true);
});
} else {
var now = new Date();
_classPrivateFieldGet(_setMetadata, _this).call(_this, {
lastAttempt: now
});
return _classPrivateFieldGet(_connector, _this).getVRPs().then(function (list) {
if (list) {
var _classPrivateFieldGet2, _classPrivateFieldGet3, _classPrivateFieldGet4, _classPrivateFieldGet5, _classPrivateFieldGet6;
_this.preCached = true;
var newBuild = (_classPrivateFieldGet2 = _classPrivateFieldGet(_connector, _this)) !== null && _classPrivateFieldGet2 !== void 0 && (_classPrivateFieldGet2 = _classPrivateFieldGet2.metadata) !== null && _classPrivateFieldGet2 !== void 0 && _classPrivateFieldGet2.buildtime ? Date.parse((_classPrivateFieldGet3 = _classPrivateFieldGet(_connector, _this)) === null || _classPrivateFieldGet3 === void 0 || (_classPrivateFieldGet3 = _classPrivateFieldGet3.metadata) === null || _classPrivateFieldGet3 === void 0 ? void 0 : _classPrivateFieldGet3.buildtime) : null;
var currentBuild = (_classPrivateFieldGet4 = _classPrivateFieldGet(_lastMetadata, _this)) !== null && _classPrivateFieldGet4 !== void 0 && _classPrivateFieldGet4.buildtime ? Date.parse((_classPrivateFieldGet5 = _classPrivateFieldGet(_lastMetadata, _this)) === null || _classPrivateFieldGet5 === void 0 ? void 0 : _classPrivateFieldGet5.buildtime) : null;
if (!!newBuild && now.getTime() - newBuild > 2 * 60 * 60 * 1000) {
return Promise.reject("The new vrp data is older than 2 hours");
} else if (newBuild && currentBuild) {
if (newBuild < currentBuild) {
return Promise.reject("The new vrp data is older than the previous one");
} else if (newBuild === currentBuild) {
return Promise.resolve(true);
}
}
_classPrivateFieldGet(_setMetadata, _this).call(_this, {
lastUpdate: now,
vrps: list.length
});
_classPrivateFieldGet(_setMetadata, _this).call(_this, (_classPrivateFieldGet6 = _classPrivateFieldGet(_connector, _this)) === null || _classPrivateFieldGet6 === void 0 ? void 0 : _classPrivateFieldGet6.metadata);
_classPrivateFieldGet(_longestPrefixMatch, _this).reset();
var _iterator3 = _createForOfIteratorHelper(list),
_step3;
try {
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
var vrp = _step3.value;
try {
(0, _netValidations.validateVRP)(vrp);
_classPrivateFieldGet(_longestPrefixMatch, _this).addPrefix(vrp.prefix, vrp);
} catch (error) {
// Just skip the insert
}
}
} catch (err) {
_iterator3.e(err);
} finally {
_iterator3.f();
}
return Promise.resolve(true);
} else {
return Promise.reject("VRPs not found");
}
});
}
});
_classPrivateFieldInitSpec(this, _getPrefixMatches, function (prefix) {
return _classPrivateFieldGet(_longestPrefixMatch, _this).getMatch(prefix, true) || [];
});
_defineProperty(this, "getExpiringElements", function (vrp, expires, now) {
return _classPrivateFieldGet(_connector, _this).getExpiringElements(vrp, expires, now);
});
var defaults = {
timeout: 30000,
advancedStatsRefreshRateMinutes: 120,
connector: providers[0],
httpsAgent: null,
axios: null,
clientId: "rpki-validator_js",
defaultRpkiApi: defaultRpkiApi
};
_classPrivateFieldSet(_longestPrefixMatch, this, new _longestPrefixMatch2["default"]());
_classPrivateFieldSet(_options, this, Object.assign({}, defaults, options));
if (!_classPrivateFieldGet(_options, this).axios) {
_classPrivateFieldGet(_options, this).axios = _redaxios["default"];
if (_classPrivateFieldGet(_options, this).httpsAgent) {
_classPrivateFieldGet(_options, this).axios.defaults.httpsAgent = options.httpsAgent;
}
_classPrivateFieldGet(_options, this).axios.defaults.timeout = _classPrivateFieldGet(_options, this).timeout;
}
_classPrivateFieldSet(_axios, this, _classPrivateFieldGet(_options, this).axios);
(_classPrivateFieldGet8 = (_classPrivateFieldGet7 = _classPrivateFieldGet(_options, this).axios).defaults) !== null && _classPrivateFieldGet8 !== void 0 ? _classPrivateFieldGet8 : _classPrivateFieldGet7.defaults = {};
(_classPrivateFieldGet0 = (_classPrivateFieldGet9 = _classPrivateFieldGet(_options, this).axios.defaults).headers) !== null && _classPrivateFieldGet0 !== void 0 ? _classPrivateFieldGet0 : _classPrivateFieldGet9.headers = {};
(_classPrivateFieldGet10 = (_classPrivateFieldGet1 = _classPrivateFieldGet(_options, this).axios.defaults.headers).common) !== null && _classPrivateFieldGet10 !== void 0 ? _classPrivateFieldGet10 : _classPrivateFieldGet1.common = {};
if (typeof fetch === "undefined") {
_classPrivateFieldGet(_options, this).axios.defaults.fetch = _nodeFetch["default"];
}
_classPrivateFieldGet(_options, this).axios.defaults.headers.common = _objectSpread(_objectSpread({}, _classPrivateFieldGet(_options, this).axios.defaults.headers.common || {}), {}, {
"User-Agent": defaults.clientId,
"Accept-Encoding": "gzip"
});
_classPrivateFieldSet(_queue, this, {});
this.preCached = false;
_classPrivateFieldSet(_lastMetadata, this, {});
_classPrivateFieldSet(_connectors, this, {
ripe: _RIPEConnector["default"],
ntt: _NTTConnector["default"],
cloudflare: _CloudflareConnector["default"],
rpkiclient: _RpkiClientConnector["default"],
packetvis: _PacketVisConnector["default"],
external: _ExternalConnector["default"],
api: _ApiConnector["default"]
});
this.setConnector(_classPrivateFieldGet(_options, this).connector);
if (!_classPrivateFieldGet(_connector, this)) {
throw new Error("The specified connector is not valid");
}
_classPrivateFieldSet(_validationTimer, this, setInterval(_classPrivateFieldGet(_validateBundle, this), 500));
this.getApiStatus()["catch"](function () {}); // Nothing
});
_defineProperty(RpkiValidator, "providers", providers);
module.exports = RpkiValidator;