1 | ;
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | const request = require("request");
|
4 | const utils_1 = require("./utils");
|
5 | const logger_1 = require("./logger");
|
6 | function requestAsync(url, options = {}) {
|
7 | return new Promise((resolve, reject) => request(url, options, (err, res, body) => {
|
8 | const statusCode = res ? res.statusCode : 0;
|
9 | if (err)
|
10 | return reject(new logger_1.Exception('Request error', {
|
11 | statusCode,
|
12 | body: body || '',
|
13 | error: err,
|
14 | url,
|
15 | options,
|
16 | }));
|
17 | return resolve({ res, statusCode, body: body || '' });
|
18 | }));
|
19 | }
|
20 | async function _requestRaw(url, options) {
|
21 | const { attemptsCount = 5, attemptDelay = 1000 } = options;
|
22 | for (let i = 1; i <= attemptsCount; i++) {
|
23 | logger_1.logger.trace('Request', { url, options, attempt: i === 1 ? undefined : i });
|
24 | let res;
|
25 | try {
|
26 | res = await requestAsync(url, options);
|
27 | }
|
28 | catch (error) {
|
29 | if (error instanceof logger_1.Exception) {
|
30 | const jsonErr = error.json;
|
31 | const nativeErr = jsonErr.error;
|
32 | const timeoutError = nativeErr && (nativeErr.code === 'ETIMEDOUT' || nativeErr.code === 'ESOCKETTIMEDOUT');
|
33 | if (timeoutError || error.json.statusCode >= 500) {
|
34 | if (i < attemptsCount) {
|
35 | await utils_1.sleep(attemptDelay);
|
36 | continue;
|
37 | }
|
38 | else {
|
39 | throw new logger_1.ExternalException(timeoutError ? 'Request timeout' : '500', error.json);
|
40 | }
|
41 | }
|
42 | }
|
43 | throw error;
|
44 | }
|
45 | const errJson = { body: res.body, options, url, statusCode: res.statusCode };
|
46 | if (res.statusCode >= 500)
|
47 | throw new logger_1.ExternalException('500', errJson);
|
48 | if (res.statusCode >= 400)
|
49 | throw new logger_1.Exception('400', errJson);
|
50 | if (res.statusCode >= 200 && res.statusCode < 300) {
|
51 | return res;
|
52 | }
|
53 | throw new logger_1.Exception('Request error', errJson);
|
54 | }
|
55 | throw utils_1.never();
|
56 | }
|
57 | async function requestRaw(url, options = {}) {
|
58 | const res = await _requestRaw(url, options);
|
59 | logger_1.logger.trace('RequestResponse', { statusCode: res.statusCode, body: res.body });
|
60 | return res;
|
61 | }
|
62 | exports.requestRaw = requestRaw;
|
63 | async function requestJSON(url, options) {
|
64 | let d;
|
65 | try {
|
66 | d = await _requestRaw(url, { headers: { 'content-type': 'application/json' }, ...options });
|
67 | }
|
68 | catch (e) {
|
69 | if (e instanceof logger_1.BaseException) {
|
70 | const err = e.json;
|
71 | if (typeof err.body === 'string') {
|
72 | try {
|
73 | err.body = JSON.parse(err.body);
|
74 | }
|
75 | catch (e) { }
|
76 | }
|
77 | }
|
78 | throw e;
|
79 | }
|
80 | try {
|
81 | let json;
|
82 | if (d.body instanceof Object) {
|
83 | json = d.body;
|
84 | }
|
85 | else {
|
86 | json = JSON.parse(d.body.toString() || '{}');
|
87 | }
|
88 | logger_1.logger.trace('RequestJSONResponse', { statusCode: d.statusCode, body: json });
|
89 | return { ...d, data: json };
|
90 | }
|
91 | catch {
|
92 | throw new logger_1.Exception(`Response is not json`, d);
|
93 | }
|
94 | }
|
95 | exports.requestJSON = requestJSON;
|
96 | function mockJsonRequest(_method, _url, _json, _result) { }
|
97 | exports.mockJsonRequest = mockJsonRequest;
|
98 | function mockGetJsonRequest(url, result) {
|
99 | return mockJsonRequest('get', url, undefined, result);
|
100 | }
|
101 | exports.mockGetJsonRequest = mockGetJsonRequest;
|
102 | function mockPostJsonRequest(url, json, result) {
|
103 | return mockJsonRequest('post', url, json, result);
|
104 | }
|
105 | exports.mockPostJsonRequest = mockPostJsonRequest;
|
106 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9yZXF1ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsbUNBQW9DO0FBQ3BDLG1DQUF1QztBQUN2QyxxQ0FBK0U7QUFvQi9FLFNBQVMsWUFBWSxDQUFDLEdBQVcsRUFBRSxVQUEwQixFQUFFO0lBQzlELE9BQU8sSUFBSSxPQUFPLENBQVcsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FDaEQsT0FBTyxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxHQUFVLEVBQUUsR0FBaUMsRUFBRSxJQUF3QixFQUFFLEVBQUU7UUFDakcsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUMsSUFBSSxHQUFHO1lBQ04sT0FBTyxNQUFNLENBQ1osSUFBSSxrQkFBUyxDQUFnQixlQUFlLEVBQUU7Z0JBQzdDLFVBQVU7Z0JBQ1YsSUFBSSxFQUFFLElBQUksSUFBSSxFQUFFO2dCQUNoQixLQUFLLEVBQUUsR0FBRztnQkFDVixHQUFHO2dCQUNILE9BQU87YUFDUCxDQUFDLENBQ0YsQ0FBQztRQUNILE9BQU8sT0FBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdkQsQ0FBQyxDQUFDLENBQ0YsQ0FBQztBQUNILENBQUM7QUFDRCxLQUFLLFVBQVUsV0FBVyxDQUFDLEdBQVcsRUFBRSxPQUF1QjtJQUM5RCxNQUFNLEVBQUUsYUFBYSxHQUFHLENBQUMsRUFBRSxZQUFZLEdBQUcsSUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBQzNELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxhQUFhLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDeEMsZUFBTSxDQUFDLEtBQUssQ0FB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 |
\ | No newline at end of file |