UNPKG

8.81 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3const request = require("request");
4const utils_1 = require("./utils");
5const logger_1 = require("./logger");
6function 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}
20async 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}
57async 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}
62exports.requestRaw = requestRaw;
63async 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}
95exports.requestJSON = requestJSON;
96function mockJsonRequest(_method, _url, _json, _result) { }
97exports.mockJsonRequest = mockJsonRequest;
98function mockGetJsonRequest(url, result) {
99 return mockJsonRequest('get', url, undefined, result);
100}
101exports.mockGetJsonRequest = mockGetJsonRequest;
102function mockPostJsonRequest(url, json, result) {
103 return mockJsonRequest('post', url, json, result);
104}
105exports.mockPostJsonRequest = mockPostJsonRequest;
106//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9yZXF1ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsbUNBQW9DO0FBQ3BDLG1DQUF1QztBQUN2QyxxQ0FBK0U7QUFvQi9FLFNBQVMsWUFBWSxDQUFDLEdBQVcsRUFBRSxVQUEwQixFQUFFO0lBQzlELE9BQU8sSUFBSSxPQUFPLENBQVcsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FDaEQsT0FBTyxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxHQUFVLEVBQUUsR0FBaUMsRUFBRSxJQUF3QixFQUFFLEVBQUU7UUFDakcsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUMsSUFBSSxHQUFHO1lBQ04sT0FBTyxNQUFNLENBQ1osSUFBSSxrQkFBUyxDQUFnQixlQUFlLEVBQUU7Z0JBQzdDLFVBQVU7Z0JBQ1YsSUFBSSxFQUFFLElBQUksSUFBSSxFQUFFO2dCQUNoQixLQUFLLEVBQUUsR0FBRztnQkFDVixHQUFHO2dCQUNILE9BQU87YUFDUCxDQUFDLENBQ0YsQ0FBQztRQUNILE9BQU8sT0FBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdkQsQ0FBQyxDQUFDLENBQ0YsQ0FBQztBQUNILENBQUM7QUFDRCxLQUFLLFVBQVUsV0FBVyxDQUFDLEdBQVcsRUFBRSxPQUF1QjtJQUM5RCxNQUFNLEVBQUUsYUFBYSxHQUFHLENBQUMsRUFBRSxZQUFZLEdBQUcsSUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBQzNELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxhQUFhLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDeEMsZUFBTSxDQUFDLEtBQUssQ0FB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
\No newline at end of file