UNPKG

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