Skip to content

Commit 0424411

Browse files
authored
Merge pull request #25 from Moesif/replace-request-with-axios
Replace deprecated request with axios http client and added getGovernRules
2 parents 56d22b5 + 1acb554 commit 0424411

File tree

6 files changed

+576
-912
lines changed

6 files changed

+576
-912
lines changed

lib/Controllers/ApiController.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,36 @@ var ApiController = {
213213
);
214214
},
215215

216+
/**
217+
* Get governance rules configuration
218+
* @param {void} parameter: Example:
219+
* @param {function} callback Required parameter: Callback function in the form of function(error, response)
220+
*
221+
* @return {void}
222+
*/
223+
getRules : function(callback){
224+
225+
//prepare query string for API call;
226+
var _baseUri = _configuration.BaseUri;
227+
228+
var _queryBuilder = _baseUri + "/v1/rules";
229+
230+
//validate and preprocess url
231+
var _queryUrl = _APIHelper.cleanUrl(_queryBuilder);
232+
233+
//Construct the request
234+
var _options = {
235+
queryUrl: _queryUrl,
236+
method: "GET",
237+
headers: buildHeaders(),
238+
};
239+
240+
_request(
241+
_options,
242+
buildCallback(callback)
243+
);
244+
},
245+
216246
/**
217247
* Update a single company
218248
* @param {CompanyModel} body Required parameter: Example:

lib/Http/Client/RequestClient.js

Lines changed: 70 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -1,126 +1,99 @@
11
var HttpContext = require("./HttpContext");
22
var HttpResponse = require("../Response/HttpResponse");
3-
var https = require('https');
4-
var request = require("request");
5-
var zlib = require('zlib')
6-
var APIHelper = require('../../APIHelper');
7-
var _configuration = require('../../configuration');
3+
var https = require("https");
4+
var axios = require("axios");
5+
var axiosRetry = require("axios-retry");
6+
var zlib = require("zlib");
7+
var APIHelper = require("../../APIHelper");
8+
var _configuration = require("../../configuration");
89

910
var keepAliveAgent = new https.Agent({
1011
keepAlive: true,
1112
maxSockets: 25
1213
});
1314

14-
var convertHttpRequest = function (req, callback) {
15-
//Convert to request's version of http request
16-
17-
var options = {
18-
url: req.queryUrl,
19-
method: req.method,
20-
headers: req.headers,
21-
timeout: 10000,
22-
agent: keepAliveAgent
23-
};
15+
var alreadySetReTry = false;
2416

25-
if (req.body) {
26-
zlib.gzip(req.body, function (err, buffer) {
27-
if (err) {
28-
options.body = req.body;
29-
callback(options);
30-
} else {
31-
options.headers["Content-Encoding"] = 'gzip';
32-
options.body = buffer;
33-
callback(options);
34-
}
35-
});
36-
} else {
37-
callback(options);
38-
}
39-
}
17+
var convertHttpRequest = function (req, callback) {
18+
//Convert to request's version of http request
19+
var options = {
20+
url: req.queryUrl,
21+
method: req.method,
22+
headers: req.headers,
23+
timeout: 10000,
24+
httpsAgent: keepAliveAgent,
25+
params: req.params
26+
};
4027

41-
var appendFormdata = function (form, data) {
42-
var dataArray = APIHelper.formDataEncodeObject(data);
43-
for (var index in dataArray) {
44-
var key = dataArray[index].key
45-
var value = dataArray[index].value;
46-
form.append(key, value);
47-
}
48-
}
28+
if (req.body) {
29+
zlib.gzip(req.body, function (err, buffer) {
30+
if (err) {
31+
options.data = req.body;
32+
callback(options);
33+
} else {
34+
options.headers["Content-Encoding"] = "gzip";
35+
options.data = buffer;
36+
callback(options);
37+
}
38+
});
39+
} else {
40+
callback(options);
41+
}
42+
};
4943

5044
var convertHttpResponse = function (resp) {
51-
var response = new HttpResponse();
52-
if(resp) {
53-
response.body = resp.body;
54-
response.headers = resp.headers;
55-
response.statusCode = resp.statusCode;
56-
}
57-
58-
return response;
59-
}
45+
var response = new HttpResponse();
46+
if (resp) {
47+
// axios calls response data.
48+
response.body = resp.data;
49+
response.headers = resp.headers;
50+
response.statusCode = resp.statusCode || resp.status;
51+
}
6052

53+
return response;
54+
};
6155

6256
/**
6357
* Execute a given HttpRequest to get string response back
6458
* @param {HttpRequest | HttpBodyRequest} request The query string builder to replace the template parameters
65-
* @param {Array} parameters The parameters to replace in the queryBuilder
6659
*/
67-
function executeRequestWithRetry(req, retryMax, callback) {
68-
//Convert abstracted request to request's http request
69-
convertHttpRequest(req, function(options) {
70-
var context = new HttpContext();
71-
context.request = req;
60+
function executeRequest(req, callback) {
61+
convertHttpRequest(req, function (options) {
62+
var context = new HttpContext();
63+
context.request = req;
7264

73-
var retryCount = 0;
74-
//Make a temp callback
75-
var internalCallback = function cb(error, res, body) {
76-
if (error && retryCount < retryMax) {
77-
retryCount = retryCount + 1;
78-
console.log('error sending, retrying count: ' + retryCount);
79-
options.headers["X-Moesif-Retry"] = retryCount;
80-
// set next retry to 250ms later.
81-
setTimeout(function () {
82-
request(options, internalCallback);
83-
}, 250);
65+
axios(options)
66+
.then(function (res) {
67+
context.response = res;
68+
context.response.statusCode =
69+
context.response.statusCode || context.response.status;
70+
const convertedResponse = convertHttpResponse(res);
71+
callback(null, convertedResponse, context);
72+
})
73+
.catch(function (err) {
74+
if (err.response) {
75+
err.response.statusCode =
76+
err.response.statusCode || err.response.status;
77+
context.response = err.response;
78+
79+
callback(err, convertHttpResponse(err.response), context);
8480
} else {
85-
var response = convertHttpResponse(res);
86-
context.response = response;
87-
callback(error, response, context);
81+
callback(err, null, context);
8882
}
89-
};
90-
//Make the request;
91-
request(options, internalCallback);
92-
});
83+
});
84+
});
9385
}
9486

95-
/**
96-
* Execute a given HttpRequest to get string response back
97-
* @param {HttpRequest | HttpBodyRequest} request The query string builder to replace the template parameters
98-
* @param {Array} parameters The parameters to replace in the queryBuilder
99-
*/
100-
function executeRequest(req, callback) {
101-
//Convert abstracted request to request's http request
102-
convertHttpRequest(req, function(options) {
103-
var context = new HttpContext();
104-
context.request = req;
105-
106-
//Make a temp callback
107-
var internalCallback = function cb(error, res, body) {
108-
var response = convertHttpResponse(res);
109-
context.response = response;
110-
callback(error, response, context);
111-
};
112-
113-
//Make the request;
114-
request(options, internalCallback);
87+
function executeRequestCombined(req, callback) {
88+
if (_configuration.retry && !alreadySetReTry) {
89+
axiosRetry(axios, {
90+
retries: _configuration.retry,
91+
retryDelay: axiosRetry.exponentialDelay
11592
});
116-
}
11793

118-
function executeRequestCombined(req, callback) {
119-
if (_configuration.retry) {
120-
executeRequestWithRetry(req, _configuration.retry, callback);
121-
} else {
122-
executeRequest(req, callback);
94+
alreadySetReTry = true;
12395
}
96+
executeRequest(req, callback);
12497
}
12598

12699
module.exports = executeRequestCombined;

lib/Models/EventModel.js

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,12 @@ var EventModel = function (obj) {
2323
this.metadata = null;
2424
this.direction = null;
2525
this.weight = null;
26+
this.blockedBy = null;
2627
//Append to variable dictionary
2728
this._variableDict['sessionToken'] = 'session_token';
2829
this._variableDict['userId'] = 'user_id';
2930
this._variableDict['companyId'] = 'company_id';
31+
this._variableDict['blockedBy'] = 'blocked_by';
3032
} else {
3133
this.request = new EventRequestModel(obj.request);
3234
this.response = new EventResponseModel(obj.response);
@@ -37,10 +39,12 @@ var EventModel = function (obj) {
3739
this.metadata = obj.metadata;
3840
this.direction = obj.direction;
3941
this.weight = obj.weight;
42+
this.blockedBy = obj.blockedBy;
4043
//Append to variable dictionary
4144
this._variableDict['sessionToken'] = 'session_token';
4245
this._variableDict['userId'] = 'user_id';
4346
this._variableDict['companyId'] = 'company_id';
47+
this._variableDict['blockedBy'] = 'blocked_by';
4448
}
4549
};
4650

@@ -210,4 +214,23 @@ EventModel.prototype.setWeight = function(value) {
210214
this.weight = value;
211215
};
212216

213-
module.exports = EventModel;
217+
/**
218+
* Blocked by rule id for an event
219+
*
220+
* @return {number|null}
221+
*/
222+
EventModel.prototype.getBlockedBy = function() {
223+
return this.blockedBy;
224+
};
225+
226+
227+
/**
228+
* Setter for blockedBy
229+
*
230+
* @param {string|null} value
231+
*/
232+
EventModel.prototype.setBlockedBy = function(value) {
233+
this.blockedBy = value;
234+
}
235+
236+
module.exports = EventModel;

0 commit comments

Comments
 (0)