diff --git a/lib/resources/call.js b/lib/resources/call.js index 2b25bfe..a736e67 100644 --- a/lib/resources/call.js +++ b/lib/resources/call.js @@ -1031,4 +1031,4 @@ class QueuedCallInterface extends PlivoResourceInterface { }); }); } -} \ No newline at end of file +} diff --git a/lib/rest/axios.js b/lib/rest/axios.js index 9fe5676..1e27bea 100644 --- a/lib/rest/axios.js +++ b/lib/rest/axios.js @@ -13,6 +13,21 @@ export function Axios(config) { 'Content-Type': 'application/json' }; + const retryWrapper = (axios, options) => { + const max_time = options.retryTime; + let counter = 0; + axios.interceptors.response.use(null, (error) => { + const config = error.config + if (counter < max_time && error.response.status >= 500) { + counter++ + return new Promise((resolve) => { + resolve(axios(config)) + }) + } + return Promise.reject(error) + }) + } + return (method, action, params) => { if (typeof (params) != 'undefined' && typeof (params.file) != 'undefined') { var files = [] @@ -69,112 +84,24 @@ export function Axios(config) { } return new Promise((resolve, reject) => { - // axios(options, (error, response, body) => { - axios(options).then(response => { - // if (error) { - // reject(error); - // return; - // } - - if(isVoiceReq === true){ - if (response.status >= 500){ - options.url = apiVoiceUris[1] + config.authId + '/' + action; - if (method === 'GET' && options.data !== '') { - let query = '?' + queryString.stringify(params); - options.url += query; - } - // axios(options,(error, response) => { - axios(options).then(response => { - // if(error){ - // reject(error); - // return; - // } - if(response.status>=500){ - options.url = apiVoiceUris[2] + config.authId + '/' + action; - if (method === 'GET' && options.data !== '') { - let query = '?' + queryString.stringify(params); - options.url += query; - } - // axios(options, (error, response) => { - axios(options).then(response => { - // if(error){ - // reject(error); - // return; - // } - const exceptionClass = { - 400: Exceptions.InvalidRequestError, - 401: Exceptions.AuthenticationError, - 404: Exceptions.ResourceNotFoundError, - 405: Exceptions.InvalidRequestError, - 500: Exceptions.ServerError, - } [response.status] || Error; - - if (!_.inRange(response.status, 200, 300)) { - // body = body || response.body; - let body = response.data; - if (typeof body === 'object') { - reject(new exceptionClass(JSON.stringify(body))); - } else { - reject(new exceptionClass(body)); - } - } - // else { - // let body = response.body; - let body = response.data; - let isObj = typeof _body === 'object' && _body !== null && !(_body instanceof Array) && !(_body instanceof Date) - if (isObj) { - _body['statusCode'] = response.status; - } - resolve({ - response: response, - body: body - }); - // } - }) - .catch(function (error) { - // handle error - // console.log(error); - reject(error.stack + '\n' + JSON.stringify(error.response.data)); - }) - } - else { - const exceptionClass = { - 400: Exceptions.InvalidRequestError, - 401: Exceptions.AuthenticationError, - 404: Exceptions.ResourceNotFoundError, - 405: Exceptions.InvalidRequestError, - 500: Exceptions.ServerError, - } [response.status] || Error; - - if (!_.inRange(response.status, 200, 300)) { - // body = body || response.body; - let body = response.data; - if (typeof body === 'object') { - reject(new exceptionClass(JSON.stringify(body))); - } else { - reject(new exceptionClass(body)); - } - } - // else { - // let body = response.body; - let body = response.data; - let isObj = typeof _body === 'object' && _body !== null && !(_body instanceof Array) && !(_body instanceof Date) - if (isObj) { - _body['statusCode'] = response.status; - } - resolve({ - response: response, - body: body - }); - } - }) - .catch(function (error) { - // handle error - // console.log(error); - reject(error.stack + '\n' + JSON.stringify(error.response.data)); - }) - } - else { + if (isVoiceReq) { + retryWrapper(axios, {retryTime: 2}) + let retryAttempt; + for (retryAttempt = 0; retryAttempt < 3; retryAttempt++) { + options.url = apiVoiceUris[retryAttempt] + config.authId + '/' + action; + axios(options).then(response => { + resolve({ + response: response, + body: response.data + }); + }) + .catch(function (error) { + reject(error.stack+ "\r\n" + JSON.stringify(error.response.data)); + }) + } + } + else { + axios(options).then(response => { const exceptionClass = { 400: Exceptions.InvalidRequestError, 401: Exceptions.AuthenticationError, @@ -184,16 +111,15 @@ export function Axios(config) { } [response.status] || Error; if (!_.inRange(response.status, 200, 300)) { - // body = body || response.body; let body = response.data; if (typeof body === 'object') { reject(new exceptionClass(JSON.stringify(body))); - } else { + } + else { reject(new exceptionClass(body)); } } - // else { - // let body = response.body; + else { let body = response.data; let isObj = typeof _body === 'object' && _body !== null && !(_body instanceof Array) && !(_body instanceof Date) if (isObj) { @@ -204,45 +130,11 @@ export function Axios(config) { body: body }); } - } - - else { - const exceptionClass = { - 400: Exceptions.InvalidRequestError, - 401: Exceptions.AuthenticationError, - 404: Exceptions.ResourceNotFoundError, - 405: Exceptions.InvalidRequestError, - 500: Exceptions.ServerError, - } [response.status] || Error; - - if (!_.inRange(response.status, 200, 300)) { - // body = body || response.body; - let body = response.data; - if (typeof body === 'object') { - reject(new exceptionClass(JSON.stringify(body))); - } else { - reject(new exceptionClass(body)); - } - } - else { - // let body = response.body; - let body = response.data; - let isObj = typeof _body === 'object' && _body !== null && !(_body instanceof Array) && !(_body instanceof Date) - if (isObj) { - _body['statusCode'] = response.status; - } - resolve({ - response: response, - body: body - }); - } - } - }) - .catch(function (error) { - // handle error - // console.log(error); - reject(error.stack + '\n' + JSON.stringify(error.response.data)); - }) + }) + .catch(function (error) { + reject(error.stack + '\n' + JSON.stringify(error.response.data)); + }) + } }); }; }