UNPKG

rpki-validator

Version:

An RPKI validator that works also in the browser.

501 lines (500 loc) 26.6 kB
"use strict"; 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 _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/v2"; 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 _statusResetTimer = /*#__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, _classPrivateFieldGet9; _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, _statusResetTimer, 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 === null) { 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); if (_classPrivateFieldGet(_statusResetTimer, _this)) { clearTimeout(_classPrivateFieldGet(_statusResetTimer, _this)); } _classPrivateFieldSet(_statusResetTimer, _this, setTimeout(function () { _classPrivateFieldSet(_onlineValidatorStatus, _this, null); _classPrivateFieldSet(_statusResetTimer, _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) { var _previousConnector$de; if (!_classPrivateFieldGet(_connectors, _this)[name]) { throw new Error("The specified connector is not valid"); } var previousConnector = _classPrivateFieldGet(_connector, _this); _classPrivateFieldGet(_options, _this).connector = name; _this.empty(); previousConnector === null || previousConnector === void 0 || (_previousConnector$de = previousConnector.destroy) === null || _previousConnector$de === void 0 || _previousConnector$de.call(previousConnector); _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); _this.cacheTimer = null; } } } 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); _this.cacheTimer = null; } _classPrivateFieldGet(_longestPrefixMatch, _this).reset(); }); _defineProperty(this, "dispose", function () { var _classPrivateFieldGet2, _classPrivateFieldGet3; if (_classPrivateFieldGet(_validationTimer, _this)) { clearInterval(_classPrivateFieldGet(_validationTimer, _this)); _classPrivateFieldSet(_validationTimer, _this, null); } if (_this.cacheTimer) { clearInterval(_this.cacheTimer); _this.cacheTimer = null; } if (_classPrivateFieldGet(_statusResetTimer, _this)) { clearTimeout(_classPrivateFieldGet(_statusResetTimer, _this)); _classPrivateFieldSet(_statusResetTimer, _this, null); } for (var _i = 0, _Object$values = Object.values(_classPrivateFieldGet(_queue, _this)); _i < _Object$values.length; _i++) { var item = _Object$values[_i]; item.reject(new Error("Validator disposed.")); delete _classPrivateFieldGet(_queue, _this)[item.key]; } _classPrivateFieldSet(_onlineValidatorStatus, _this, null); (_classPrivateFieldGet2 = _classPrivateFieldGet(_connector, _this)) === null || _classPrivateFieldGet2 === void 0 || (_classPrivateFieldGet3 = _classPrivateFieldGet2.destroy) === null || _classPrivateFieldGet3 === void 0 || _classPrivateFieldGet3.call(_classPrivateFieldGet2); _classPrivateFieldSet(_connector, _this, null); _this.preCached = false; }); _defineProperty(this, "destroy", function () { return _this.dispose(); }); _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 } }); var queueTimeout; var request = _classPrivateFieldGet(_axios, _this).call(_this, { url: url, responseType: "json", method: "post", timeout: _classPrivateFieldGet(_options, _this).timeout, data: items.map(function (i) { return { prefix: i.prefix, asn: i.origin }; }) }); var requestWithTimeout = _classPrivateFieldGet(_options, _this).timeout > 0 ? Promise.race([request, new Promise(function (resolve, reject) { queueTimeout = setTimeout(function () { reject(new Error("Validation request timed out after ".concat(_classPrivateFieldGet(_options, _this).timeout, " ms."))); }, _classPrivateFieldGet(_options, _this).timeout); })]) : request; return requestWithTimeout.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); var queueItem = _classPrivateFieldGet(_queue, _this)[key]; if (!queueItem) { continue; } if (result.valid === null) { output = _classPrivateFieldGet(_createOutput, _this).call(_this, null, null, queueItem.verbose, null); queueItem.resolve(output); } else if (result.valid) { var covering = result.covering; output = _classPrivateFieldGet(_createOutput, _this).call(_this, true, true, queueItem.verbose, covering); queueItem.resolve(output); } else { var _covering = result.covering; output = _classPrivateFieldGet(_checkCoveringROAs, _this).call(_this, queueItem["origin"], queueItem["prefix"], _covering, queueItem.verbose); queueItem.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(); } })["finally"](function () { if (queueTimeout) { clearTimeout(queueTimeout); } }); } }); _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 _classPrivateFieldGet4, _classPrivateFieldGet5, _classPrivateFieldGet6, _classPrivateFieldGet7, _classPrivateFieldGet8; _this.preCached = true; var newBuild = (_classPrivateFieldGet4 = _classPrivateFieldGet(_connector, _this)) !== null && _classPrivateFieldGet4 !== void 0 && (_classPrivateFieldGet4 = _classPrivateFieldGet4.metadata) !== null && _classPrivateFieldGet4 !== void 0 && _classPrivateFieldGet4.buildtime ? Date.parse((_classPrivateFieldGet5 = _classPrivateFieldGet(_connector, _this)) === null || _classPrivateFieldGet5 === void 0 || (_classPrivateFieldGet5 = _classPrivateFieldGet5.metadata) === null || _classPrivateFieldGet5 === void 0 ? void 0 : _classPrivateFieldGet5.buildtime) : null; var currentBuild = (_classPrivateFieldGet6 = _classPrivateFieldGet(_lastMetadata, _this)) !== null && _classPrivateFieldGet6 !== void 0 && _classPrivateFieldGet6.buildtime ? Date.parse((_classPrivateFieldGet7 = _classPrivateFieldGet(_lastMetadata, _this)) === null || _classPrivateFieldGet7 === void 0 ? void 0 : _classPrivateFieldGet7.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, (_classPrivateFieldGet8 = _classPrivateFieldGet(_connector, _this)) === null || _classPrivateFieldGet8 === void 0 ? void 0 : _classPrivateFieldGet8.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], axios: _redaxios["default"], clientId: "rpki-validator_js", defaultRpkiApi: defaultRpkiApi }; _classPrivateFieldSet(_longestPrefixMatch, this, new _longestPrefixMatch2["default"]()); _classPrivateFieldSet(_options, this, Object.assign({}, defaults, options)); _classPrivateFieldSet(_axios, this, (_classPrivateFieldGet9 = _classPrivateFieldGet(_options, this)) === null || _classPrivateFieldGet9 === void 0 ? void 0 : _classPrivateFieldGet9.axios); _classPrivateFieldSet(_queue, this, {}); _classPrivateFieldSet(_statusResetTimer, this, null); 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;