Skip to content

Commit 15ee3f1

Browse files
committed
Add support for http timeout config
1 parent e567b97 commit 15ee3f1

File tree

5 files changed

+54
-8
lines changed

5 files changed

+54
-8
lines changed

.gitignore

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -243,10 +243,13 @@ ModelManifest.xml
243243
**/CRMDeveloperExtensions.config
244244
/bfg.jar
245245

246+
# Vim
247+
*.sw[a-p]
248+
246249
/typings
247250
/gulpfile.js
248251
/typings.json
249252
/lib/test.js
250253
/scripts
251254
/coverage
252-
/tests/browser
255+
/tests/browser

lib/dynamics-web-api.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,11 @@ function DynamicsWebApi(config) {
157157
_internalConfig.includeAnnotations = config.includeAnnotations;
158158
}
159159

160+
if (config.timeout) {
161+
ErrorHelper.numberParameterCheck(config.timeout, "DynamicsWebApi.setConfig", "config.timeout");
162+
_internalConfig.timeout = config.timeout;
163+
}
164+
160165
if (config.maxPageSize) {
161166
ErrorHelper.numberParameterCheck(config.maxPageSize, "DynamicsWebApi.setConfig", "config.maxPageSize");
162167
_internalConfig.maxPageSize = config.maxPageSize;

lib/requests/http.js

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,18 @@ var parseResponse = require('./helpers/parseResponse');
1313
* @param {Function} errorCallback - A callback called when a request failed.
1414
* @param {string} [data] - Data to send in the request.
1515
* @param {Object} [additionalHeaders] - Additional headers. IMPORTANT! This object does not contain default headers needed for every request.
16+
* @param {number} [timeout] - socket timeout for the http request.
1617
*/
17-
var httpRequest = function (method, uri, data, additionalHeaders, responseParams, successCallback, errorCallback) {
18+
var httpRequest = function (options) {
19+
var method = options.method;
20+
var uri = options.uri;
21+
var data = options.data;
22+
var additionalHeaders = options.additionalHeaders;
23+
var responseParams = options.responseParams;
24+
var successCallback = options.successCallback;
25+
var errorCallback = options.errorCallback;
26+
var timeout = options.timeout;
27+
1828
var headers = {};
1929

2030
if (data) {
@@ -38,6 +48,7 @@ var httpRequest = function (method, uri, data, additionalHeaders, responseParams
3848
port: parsedUrl.port,
3949
path: parsedUrl.path,
4050
method: method,
51+
timeout: timeout,
4152
headers: headers
4253
};
4354

@@ -55,6 +66,7 @@ var httpRequest = function (method, uri, data, additionalHeaders, responseParams
5566
port: proxyUrl.port,
5667
path: parsedUrl.href,
5768
method: method,
69+
timeout: timeout,
5870
headers: {
5971
host: parsedUrl.host,
6072
...headers,
@@ -111,7 +123,14 @@ var httpRequest = function (method, uri, data, additionalHeaders, responseParams
111123
});
112124
});
113125

126+
request.on('timeout', function (error) {
127+
request.abort();
128+
});
129+
114130
request.on('error', function (error) {
131+
if (request.aborted) {
132+
error = new Error('Request timed out: ' + error);
133+
}
115134
responseParams.length = 0;
116135
errorCallback(error);
117136
});

lib/requests/sendRequest.js

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,17 @@ function sendRequest(method, path, config, data, additionalHeaders, responsePara
203203
token);
204204
}
205205

206-
executeRequest(method, config.webApiUrl + path, stringifiedData, additionalHeaders, responseParseParams, successCallback, errorCallback, isAsync);
206+
executeRequest({
207+
method: method,
208+
uri: config.webApiUrl + path,
209+
data: stringifiedData,
210+
additionalHeaders: additionalHeaders,
211+
responseParams: responseParseParams,
212+
successCallback: successCallback,
213+
errorCallback: errorCallback,
214+
isAsync: isAsync,
215+
timeout: config.timeout,
216+
});
207217
};
208218

209219
//call a token refresh callback only if it is set and there is no "Authorization" header set yet
@@ -292,4 +302,4 @@ module.exports = {
292302
/* develblock:start */
293303
_clearEntityNames: function () { _entityNames = null; }
294304
/* develblock:end */
295-
};
305+
};

lib/requests/xhr.js

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,20 @@ var parseResponseHeaders = require('./helpers/parseResponseHeaders');
1111
* @param {any} responseParams - parameters for parsing the response
1212
* @param {Function} successCallback - A callback called on success of the request.
1313
* @param {Function} errorCallback - A callback called when a request failed.
14-
* @param {boolean} [async] - Indicates if the request needs to be synchronous
14+
* @param {boolean} [isAsync] - Indicates if the request needs to be synchronous
1515
*/
16-
var xhrRequest = function (method, uri, data, additionalHeaders, responseParams, successCallback, errorCallback, async) {
16+
var xhrRequest = function (options) {
17+
var method = options.method;
18+
var uri = options.uri;
19+
var data = options.data;
20+
var additionalHeaders = options.additionalHeaders;
21+
var responseParams = options.responseParams;
22+
var successCallback = options.successCallback;
23+
var errorCallback = options.errorCallback;
24+
var isAsync = options.isAsync;
25+
1726
var request = new XMLHttpRequest();
18-
request.open(method, uri, async);
27+
request.open(method, uri, isAsync);
1928

2029
//set additional headers
2130
for (var key in additionalHeaders) {
@@ -81,4 +90,4 @@ var xhrRequest = function (method, uri, data, additionalHeaders, responseParams,
8190
: request.send();
8291
};
8392

84-
module.exports = xhrRequest;
93+
module.exports = xhrRequest;

0 commit comments

Comments
 (0)