UNPKG

10.5 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4Object.defineProperty(exports, "__esModule", {
5 value: true
6});
7exports.getProviderOptions = exports["default"] = exports.createRequest = exports.NETWORK_TRIES = exports.NETWORK_TIMEOUT = exports.NETWORK_INTERVAL = void 0;
8var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
10var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
12var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
13var _env = require("@lskjs/env");
14var _err = _interopRequireDefault(require("@lskjs/err"));
15var _retry = _interopRequireDefault(require("@lskjs/utils/retry"));
16var _axios = _interopRequireDefault(require("axios"));
17var _createFeedback = require("./utils/createFeedback");
18var _isNetworkError = require("./utils/isNetworkError");
19var _excluded = ["createFeedback", "labels", "onProxyManagerError", "axios"],
20 _excluded2 = ["driver", "timeout", "interval", "proxy", "interceptors", "logPrefix"];
21/* eslint-disable max-len */
22function 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; }
23function _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; }
24var NETWORK_TIMEOUT = _env.isDev ? 1000 : 10000;
25exports.NETWORK_TIMEOUT = NETWORK_TIMEOUT;
26var NETWORK_TRIES = _env.isDev ? 2 : 5;
27exports.NETWORK_TRIES = NETWORK_TRIES;
28var NETWORK_INTERVAL = _env.isDev ? 100 : 1000;
29
30// TODO: дописать
31exports.NETWORK_INTERVAL = NETWORK_INTERVAL;
32var getProviderOptions = function getProviderOptions(proxy, driver) {
33 return proxy ? proxy.getProviderOptions(driver) : {};
34};
35
36// const createNoop = () => ({ success: () => null, error: () => null });
37exports.getProviderOptions = getProviderOptions;
38var createRequest = function createRequest() {
39 var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
40 _ref$createFeedback = _ref.createFeedback,
41 createFeedback = _ref$createFeedback === void 0 ? _createFeedback.createFeedback : _ref$createFeedback,
42 labels = _ref.labels,
43 onProxyManagerError = _ref.onProxyManagerError,
44 axiosCreateParams = _ref.axios,
45 feedbackOptions = (0, _objectWithoutProperties2["default"])(_ref, _excluded);
46 return function () {
47 var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
48 var _props$driver = props.driver,
49 driver = _props$driver === void 0 ? 'axios' : _props$driver,
50 _props$timeout = props.timeout,
51 timeout = _props$timeout === void 0 ? NETWORK_TIMEOUT : _props$timeout,
52 _props$interval = props.interval,
53 interval = _props$interval === void 0 ? NETWORK_INTERVAL : _props$interval,
54 initProxy = props.proxy,
55 interceptors = props.interceptors,
56 logPrefix = props.logPrefix,
57 params = (0, _objectWithoutProperties2["default"])(props, _excluded2);
58 var maxTries = props.max_tries || props.maxTries || props.max_retries || props.maxRetries || props.max_retry || props.maxRetry || props.tries || NETWORK_TRIES;
59 if (driver !== 'axios') throw new _err["default"]('REQUEST_DRIVER', 'driver not realized yet', {
60 driver: driver
61 });
62 var tries = 0;
63 return (0, _retry["default"])( /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
64 var proxy, proxyManager, options, feedback, _res$headers, _res$headers2, abortTimeout, CancelToken, source, client, _client$interceptors$, _client$interceptors$2, res, size, _res$headers3, _res$headers4, _res, _size, code, fatal, isNetwork, errProps, err;
65 return _regenerator["default"].wrap(function _callee$(_context) {
66 while (1) switch (_context.prev = _context.next) {
67 case 0:
68 if (initProxy) proxy = initProxy;
69 _context.next = 3;
70 return props.proxyManager || feedbackOptions.proxyManager;
71 case 3:
72 proxyManager = _context.sent;
73 _context.prev = 4;
74 if (!(!proxy && proxyManager)) {
75 _context.next = 9;
76 break;
77 }
78 _context.next = 8;
79 return proxyManager.getProxy();
80 case 8:
81 proxy = _context.sent;
82 case 9:
83 _context.next = 16;
84 break;
85 case 11:
86 _context.prev = 11;
87 _context.t0 = _context["catch"](4);
88 if (!onProxyManagerError) {
89 _context.next = 16;
90 break;
91 }
92 _context.next = 16;
93 return onProxyManagerError({
94 err: _context.t0,
95 tries: tries,
96 maxTries: maxTries
97 });
98 case 16:
99 options = _objectSpread(_objectSpread({}, params), getProviderOptions(proxy, driver));
100 tries += 1;
101 feedback = createFeedback ? createFeedback({
102 options: props,
103 proxy: proxy,
104 tries: tries,
105 maxTries: maxTries,
106 logPrefix: logPrefix
107 }, _objectSpread(_objectSpread({}, feedbackOptions), {}, {
108 proxyManager: proxyManager,
109 labels: labels
110 })) // TODO: подумать а не замудренно ли
111 : null;
112 _context.prev = 19;
113 if (timeout && !params.cancelToken) {
114 CancelToken = _axios["default"].CancelToken;
115 source = CancelToken.source();
116 options.cancelToken = source.token;
117 abortTimeout = setTimeout(function () {
118 return source.cancel('REQUEST_NETWORK_TIMEOUT');
119 }, timeout);
120 }
121 client = _axios["default"].create(axiosCreateParams);
122 if (interceptors) {
123 if (Array.isArray(interceptors.request)) {
124 (_client$interceptors$ = client.interceptors.request).use.apply(_client$interceptors$, (0, _toConsumableArray2["default"])(interceptors.request));
125 } else {
126 client.interceptors.request.use(interceptors.request);
127 }
128 if (Array.isArray(interceptors.response)) {
129 (_client$interceptors$2 = client.interceptors.response).use.apply(_client$interceptors$2, (0, _toConsumableArray2["default"])(interceptors.response));
130 } else {
131 client.interceptors.response.use(interceptors.response);
132 }
133 }
134 _context.next = 25;
135 return client(options);
136 case 25:
137 res = _context.sent;
138 res.proxyManager = proxyManager;
139 res.proxy = proxy;
140 size = res !== null && res !== void 0 && (_res$headers = res.headers) !== null && _res$headers !== void 0 && _res$headers['content-length'] ? Number(res === null || res === void 0 ? void 0 : (_res$headers2 = res.headers) === null || _res$headers2 === void 0 ? void 0 : _res$headers2['content-length']) : null;
141 if (abortTimeout) clearTimeout(abortTimeout);
142 if (!feedback) {
143 _context.next = 33;
144 break;
145 }
146 _context.next = 33;
147 return feedback.success({
148 size: size
149 });
150 case 33:
151 return _context.abrupt("return", res);
152 case 36:
153 _context.prev = 36;
154 _context.t1 = _context["catch"](19);
155 _res = _context.t1 === null || _context.t1 === void 0 ? void 0 : _context.t1.response;
156 _size = _res !== null && _res !== void 0 && (_res$headers3 = _res.headers) !== null && _res$headers3 !== void 0 && _res$headers3['content-length'] ? Number(_res === null || _res === void 0 ? void 0 : (_res$headers4 = _res.headers) === null || _res$headers4 === void 0 ? void 0 : _res$headers4['content-length']) : null;
157 code = (0, _isNetworkError.getErrCode)(_context.t1);
158 fatal = (0, _isNetworkError.isNetworkFatal)(_context.t1);
159 isNetwork = (0, _isNetworkError.isNetworkError)(_context.t1);
160 proxy = null;
161 errProps = {
162 proxyManager: proxyManager,
163 proxy: proxy
164 };
165 if (isNetwork) {
166 errProps = {
167 message: code,
168 subcode: _err["default"].getCode(_context.t1),
169 "class": 'network',
170 tries: tries,
171 maxTries: maxTries,
172 isNetwork: isNetwork
173 };
174 }
175 err = new _err["default"](code, _context.t1, errProps);
176 _err["default"].copyProps(err, _context.t1);
177 err.code = code;
178 if (!feedback) {
179 _context.next = 52;
180 break;
181 }
182 _context.next = 52;
183 return feedback.error(err, {
184 fatal: fatal,
185 size: _size
186 });
187 case 52:
188 if (isNetwork) {
189 _context.next = 54;
190 break;
191 }
192 throw _retry["default"].StopError(err);
193 case 54:
194 throw err;
195 case 55:
196 case "end":
197 return _context.stop();
198 }
199 }, _callee, null, [[4, 11], [19, 36]]);
200 })), {
201 throw_original: true,
202 interval: interval,
203 max_tries: maxTries
204 });
205 };
206};
207exports.createRequest = createRequest;
208var _default = createRequest;
209exports["default"] = _default;
210//# sourceMappingURL=createRequest.js.map
\No newline at end of file