UNPKG

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