UNPKG

22.9 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4var _typeof = require("@babel/runtime/helpers/typeof");
5Object.defineProperty(exports, "__esModule", {
6 value: true
7});
8exports["default"] = exports.ProxyModule = void 0;
9var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
10var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
11var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
12var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
14var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
15var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
16var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
17var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
18var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
19var _module = _interopRequireDefault(require("@lskjs/module"));
20var _asyncMapValues = _interopRequireDefault(require("@lskjs/utils/asyncMapValues"));
21var _find = _interopRequireDefault(require("lodash/find"));
22var _flatten = _interopRequireDefault(require("lodash/flatten"));
23var _max = _interopRequireDefault(require("lodash/max"));
24var _pick = _interopRequireDefault(require("lodash/pick"));
25var _uniq = _interopRequireDefault(require("lodash/uniq"));
26var _uniqBy = _interopRequireDefault(require("lodash/uniqBy"));
27var _collectMetrics = require("./collectMetrics");
28var _Proxy2 = require("./Proxy");
29var _setProxyWorker = require("./setProxyWorker");
30var _filterProxy = require("./utils/filterProxy");
31function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
32function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
33function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
34function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
35function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
36function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } // import { isDev } from '@lskjs/env';
37// const isDebug = isDev;
38var isDebug = false;
39var ProxyModule = /*#__PURE__*/function (_Module) {
40 (0, _inherits2["default"])(ProxyModule, _Module);
41 var _super = _createSuper(ProxyModule);
42 function ProxyModule() {
43 var _this;
44 (0, _classCallCheck2["default"])(this, ProxyModule);
45 for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
46 args[_key] = arguments[_key];
47 }
48 _this = _super.call.apply(_super, [this].concat(args));
49 _this.setProxyWorker = _setProxyWorker.setProxyWorker;
50 return _this;
51 }
52 (0, _createClass2["default"])(ProxyModule, [{
53 key: "getActiveProvidersNames",
54 value: function getActiveProvidersNames() {
55 var _this2 = this;
56 var res = Object.keys(this.config.providers || {}, function (provider) {
57 return !!_this2.config.providers[provider] && !_this2.config.providers[provider].disabled;
58 });
59 return res;
60 }
61 }, {
62 key: "getModules",
63 value: function getModules() {
64 return _objectSpread(_objectSpread({}, (0, _get2["default"])((0, _getPrototypeOf2["default"])(ProxyModule.prototype), "getModules", this).call(this)), {}, {
65 providers: [Promise.resolve().then(function () {
66 return _interopRequireWildcard(require('@lskjs/module/asyncModules'));
67 }), {
68 items: (0, _pick["default"])(this.providers, this.getActiveProvidersNames()),
69 config: this.config.providers
70 }],
71 tests: [Promise.resolve().then(function () {
72 return _interopRequireWildcard(require('./ProxyTests'));
73 }), {
74 tests: this.tests,
75 config: this.config.tests
76 }]
77 });
78 }
79 }, {
80 key: "runProvidersMethod",
81 value: function () {
82 var _runProvidersMethod = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(method) {
83 var _this3 = this;
84 var _len2,
85 args,
86 _key2,
87 providers,
88 _args2 = arguments;
89 return _regenerator["default"].wrap(function _callee2$(_context2) {
90 while (1) switch (_context2.prev = _context2.next) {
91 case 0:
92 for (_len2 = _args2.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
93 args[_key2 - 1] = _args2[_key2];
94 }
95 _context2.next = 3;
96 return this.module('providers.*');
97 case 3:
98 providers = _context2.sent;
99 return _context2.abrupt("return", (0, _asyncMapValues["default"])(providers, /*#__PURE__*/function () {
100 var _ref = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(provider) {
101 var res;
102 return _regenerator["default"].wrap(function _callee$(_context) {
103 while (1) switch (_context.prev = _context.next) {
104 case 0:
105 _context.prev = 0;
106 _context.next = 3;
107 return provider[method].apply(provider, args);
108 case 3:
109 res = _context.sent;
110 return _context.abrupt("return", res);
111 case 7:
112 _context.prev = 7;
113 _context.t0 = _context["catch"](0);
114 _this3.log.error('[provider] err', provider, _context.t0);
115 return _context.abrupt("return", null);
116 case 11:
117 case "end":
118 return _context.stop();
119 }
120 }, _callee, null, [[0, 7]]);
121 }));
122 return function (_x2) {
123 return _ref.apply(this, arguments);
124 };
125 }()));
126 case 5:
127 case "end":
128 return _context2.stop();
129 }
130 }, _callee2, this);
131 }));
132 function runProvidersMethod(_x) {
133 return _runProvidersMethod.apply(this, arguments);
134 }
135 return runProvidersMethod;
136 }()
137 }, {
138 key: "getProxyStats",
139 value: function () {
140 var _getProxyStats = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(proxyList) {
141 var tests;
142 return _regenerator["default"].wrap(function _callee3$(_context3) {
143 while (1) switch (_context3.prev = _context3.next) {
144 case 0:
145 _context3.next = 2;
146 return this.module('tests');
147 case 2:
148 tests = _context3.sent;
149 return _context3.abrupt("return", tests.getProxyStats(proxyList));
150 case 4:
151 case "end":
152 return _context3.stop();
153 }
154 }, _callee3, this);
155 }));
156 function getProxyStats(_x3) {
157 return _getProxyStats.apply(this, arguments);
158 }
159 return getProxyStats;
160 }()
161 }, {
162 key: "getAllProxyList",
163 value: function () {
164 var _getAllProxyList = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4() {
165 var _ref2,
166 _ref2$localhost,
167 localhost,
168 res,
169 listOfLists,
170 rawProxyList,
171 _args4 = arguments;
172 return _regenerator["default"].wrap(function _callee4$(_context4) {
173 while (1) switch (_context4.prev = _context4.next) {
174 case 0:
175 _ref2 = _args4.length > 0 && _args4[0] !== undefined ? _args4[0] : {}, _ref2$localhost = _ref2.localhost, localhost = _ref2$localhost === void 0 ? false : _ref2$localhost;
176 _context4.next = 3;
177 return this.runProvidersMethod('getList');
178 case 3:
179 res = _context4.sent;
180 listOfLists = Object.values(res).map(function (a) {
181 return (a === null || a === void 0 ? void 0 : a.list) || [];
182 });
183 if (isDebug) listOfLists = listOfLists.map(function (l) {
184 return l.slice(0, 2);
185 });
186 rawProxyList = (0, _uniqBy["default"])((0, _flatten["default"])(listOfLists), 'key');
187 if (!localhost) {
188 _context4.next = 9;
189 break;
190 }
191 return _context4.abrupt("return", [new _Proxy2.Proxy({
192 provider: 'localhost'
193 })].concat((0, _toConsumableArray2["default"])(rawProxyList)));
194 case 9:
195 return _context4.abrupt("return", rawProxyList);
196 case 10:
197 case "end":
198 return _context4.stop();
199 }
200 }, _callee4, this);
201 }));
202 function getAllProxyList() {
203 return _getAllProxyList.apply(this, arguments);
204 }
205 return getAllProxyList;
206 }()
207 }, {
208 key: "fetchProxyList",
209 value: function () {
210 var _fetchProxyList = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5() {
211 var res, proxies;
212 return _regenerator["default"].wrap(function _callee5$(_context5) {
213 while (1) switch (_context5.prev = _context5.next) {
214 case 0:
215 _context5.next = 2;
216 return this.runProvidersMethod('fetchList');
217 case 2:
218 res = _context5.sent;
219 proxies = (0, _flatten["default"])(Object.values(res).map(function (a) {
220 return a || [];
221 }));
222 return _context5.abrupt("return", proxies);
223 case 5:
224 case "end":
225 return _context5.stop();
226 }
227 }, _callee5, this);
228 }));
229 function fetchProxyList() {
230 return _fetchProxyList.apply(this, arguments);
231 }
232 return fetchProxyList;
233 }()
234 }, {
235 key: "getProxyTestsResults",
236 value: function () {
237 var _getProxyTestsResults = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee6() {
238 var tests;
239 return _regenerator["default"].wrap(function _callee6$(_context6) {
240 while (1) switch (_context6.prev = _context6.next) {
241 case 0:
242 _context6.next = 2;
243 return this.module('tests');
244 case 2:
245 tests = _context6.sent;
246 return _context6.abrupt("return", tests.getResults());
247 case 4:
248 case "end":
249 return _context6.stop();
250 }
251 }, _callee6, this);
252 }));
253 function getProxyTestsResults() {
254 return _getProxyTestsResults.apply(this, arguments);
255 }
256 return getProxyTestsResults;
257 }()
258 }, {
259 key: "runProxyTests",
260 value: function () {
261 var _runProxyTests = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee7(proxyList) {
262 var tests;
263 return _regenerator["default"].wrap(function _callee7$(_context7) {
264 while (1) switch (_context7.prev = _context7.next) {
265 case 0:
266 _context7.next = 2;
267 return this.module('tests');
268 case 2:
269 tests = _context7.sent;
270 if (proxyList) {
271 _context7.next = 7;
272 break;
273 }
274 _context7.next = 6;
275 return this.getAllProxyList({
276 localhost: true
277 });
278 case 6:
279 proxyList = _context7.sent;
280 case 7:
281 return _context7.abrupt("return", tests.runTests(proxyList));
282 case 8:
283 case "end":
284 return _context7.stop();
285 }
286 }, _callee7, this);
287 }));
288 function runProxyTests(_x4) {
289 return _runProxyTests.apply(this, arguments);
290 }
291 return runProxyTests;
292 }()
293 }, {
294 key: "runProxyTest",
295 value: function () {
296 var _runProxyTest = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee8(_ref3) {
297 var proxyKey, testId, force, tests, proxyList, proxy;
298 return _regenerator["default"].wrap(function _callee8$(_context8) {
299 while (1) switch (_context8.prev = _context8.next) {
300 case 0:
301 proxyKey = _ref3.proxyKey, testId = _ref3.testId, force = _ref3.force;
302 _context8.next = 3;
303 return this.module('tests');
304 case 3:
305 tests = _context8.sent;
306 _context8.next = 6;
307 return this.getAllProxyList();
308 case 6:
309 proxyList = _context8.sent;
310 proxy = (0, _find["default"])(proxyList, {
311 key: proxyKey
312 });
313 return _context8.abrupt("return", tests.runTest({
314 proxy: proxy,
315 testId: testId,
316 force: force
317 }));
318 case 9:
319 case "end":
320 return _context8.stop();
321 }
322 }, _callee8, this);
323 }));
324 function runProxyTest(_x5) {
325 return _runProxyTest.apply(this, arguments);
326 }
327 return runProxyTest;
328 }()
329 }, {
330 key: "getList",
331 value: function () {
332 var _getList = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee9() {
333 var filter,
334 res,
335 fetchedAt,
336 proxyList,
337 proxyStats,
338 filteredProxyList,
339 _args9 = arguments;
340 return _regenerator["default"].wrap(function _callee9$(_context9) {
341 while (1) switch (_context9.prev = _context9.next) {
342 case 0:
343 filter = _args9.length > 0 && _args9[0] !== undefined ? _args9[0] : {};
344 _context9.next = 3;
345 return this.runProvidersMethod('getList');
346 case 3:
347 res = _context9.sent;
348 fetchedAt = (0, _max["default"])(Object.values(res).map(function (a) {
349 return a === null || a === void 0 ? void 0 : a.fetchedAt;
350 }));
351 _context9.next = 7;
352 return this.getAllProxyList();
353 case 7:
354 proxyList = _context9.sent;
355 _context9.next = 10;
356 return this.getProxyStats(proxyList);
357 case 10:
358 proxyStats = _context9.sent;
359 proxyList = proxyList.map(function (p) {
360 var _ref4;
361 // TODO: как-то облагородить
362 var proxyTests = proxyStats[p.key] || [];
363 proxyTests = proxyTests.filter(function (test) {
364 return test.status === 'success';
365 });
366 var testIds = proxyTests.map(function (t) {
367 var _t$test;
368 return t === null || t === void 0 ? void 0 : (_t$test = t.test) === null || _t$test === void 0 ? void 0 : _t$test.id;
369 });
370 var tagsList = proxyTests.map(function (t) {
371 var _t$test2;
372 return t === null || t === void 0 ? void 0 : (_t$test2 = t.test) === null || _t$test2 === void 0 ? void 0 : _t$test2.tags;
373 });
374 var testTags = (0, _uniq["default"])((_ref4 = []).concat.apply(_ref4, (0, _toConsumableArray2["default"])(tagsList)));
375 // eslint-disable-next-line no-param-reassign
376 p.targets = testTags;
377 // eslint-disable-next-line no-param-reassign
378 p.tests = testIds;
379 return p;
380 });
381 this.setProxyWorker(proxyList, this.config.workers);
382 // const testedAt = max(Object.values(proxyStats).map((p) => p.updatedAt));
383 // console.log({testedAt}, Object.values(proxyStats).map((p) => p.updatedAt))
384 filteredProxyList = (0, _filterProxy.filterProxy)(proxyList, filter);
385 return _context9.abrupt("return", {
386 fetchedAt: fetchedAt,
387 // testedAt,
388 total: proxyList.length,
389 count: filteredProxyList.length,
390 list: filteredProxyList
391 });
392 case 15:
393 case "end":
394 return _context9.stop();
395 }
396 }, _callee9, this);
397 }));
398 function getList() {
399 return _getList.apply(this, arguments);
400 }
401 return getList;
402 }()
403 }, {
404 key: "updateProxyList",
405 value: function () {
406 var _updateProxyList = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee10() {
407 var res;
408 return _regenerator["default"].wrap(function _callee10$(_context10) {
409 while (1) switch (_context10.prev = _context10.next) {
410 case 0:
411 // TODO: mutex
412 this.log.trace('[updateProxyList] start');
413 _context10.next = 3;
414 return this.runProvidersMethod('update');
415 case 3:
416 res = _context10.sent;
417 this.log.debug('[updateProxyList]', res);
418 case 5:
419 case "end":
420 return _context10.stop();
421 }
422 }, _callee10, this);
423 }));
424 function updateProxyList() {
425 return _updateProxyList.apply(this, arguments);
426 }
427 return updateProxyList;
428 }()
429 }, {
430 key: "updateProxyTests",
431 value: function () {
432 var _updateProxyTests = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee11() {
433 var res;
434 return _regenerator["default"].wrap(function _callee11$(_context11) {
435 while (1) switch (_context11.prev = _context11.next) {
436 case 0:
437 // TODO: mutex
438 this.log.trace('[updateProxyTests] start');
439 _context11.next = 3;
440 return this.runProxyTests();
441 case 3:
442 res = _context11.sent;
443 // All proxies
444 this.log.debug('[updateProxyTests]', res.map(function (_ref5) {
445 var id = _ref5.id,
446 status = _ref5.status;
447 return "".concat(id, ": ").concat(status);
448 }));
449 case 5:
450 case "end":
451 return _context11.stop();
452 }
453 }, _callee11, this);
454 }));
455 function updateProxyTests() {
456 return _updateProxyTests.apply(this, arguments);
457 }
458 return updateProxyTests;
459 }()
460 }, {
461 key: "buyProxies",
462 value: function () {
463 var _buyProxies = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee12() {
464 return _regenerator["default"].wrap(function _callee12$(_context12) {
465 while (1) switch (_context12.prev = _context12.next) {
466 case 0:
467 // TODO: mutex
468 this.log.trace('[buyProxies] nothing');
469 case 1:
470 case "end":
471 return _context12.stop();
472 }
473 }, _callee12, this);
474 }));
475 function buyProxies() {
476 return _buyProxies.apply(this, arguments);
477 }
478 return buyProxies;
479 }()
480 }, {
481 key: "metrics",
482 value: function () {
483 var _metrics = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee13() {
484 return _regenerator["default"].wrap(function _callee13$(_context13) {
485 while (1) switch (_context13.prev = _context13.next) {
486 case 0:
487 return _context13.abrupt("return", _collectMetrics.collectMetrics.call(this));
488 case 1:
489 case "end":
490 return _context13.stop();
491 }
492 }, _callee13, this);
493 }));
494 function metrics() {
495 return _metrics.apply(this, arguments);
496 }
497 return metrics;
498 }()
499 }]);
500 return ProxyModule;
501}(_module["default"]);
502exports.ProxyModule = ProxyModule;
503var _default = ProxyModule;
504exports["default"] = _default;
505//# sourceMappingURL=ProxyModule.js.map
\No newline at end of file