-
Notifications
You must be signed in to change notification settings - Fork 19
/
Copy pathapi.js
executable file
·101 lines (83 loc) · 2.93 KB
/
api.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
"use strict";
var utils = require('./utils');
var configuration = require('./configure');
var request = require('requestretry');
var qs = require('querystring');
exports.get = function executeGetRequest(path, data, http_options, cb) {
execute('GET', path, data, http_options, cb);
};
exports.post = function executePostRequest(path, data, http_options, cb) {
execute('POST', path, data, http_options, cb);
};
exports.delete = function executeDeleteRequest(path, data, http_options, cb) {
execute('DELETE', path, data, http_options, cb);
};
function setRetryPolicy() {
request.defaults({
json: true,
maxAttempts: configuration.default_options.maxAttempts,
retryDelay: configuration.default_options.retryDelay,
retryStrategy: configuration.default_options.retryStrategy
});
}
function getHost() {
return configuration.default_options.host;
}
function getBasicHttpOptions(http_options) {
if (!http_options) {
http_options = utils.merge({}, configuration.default_http_options, true);
} else {
http_options = utils.merge(http_options, configuration.default_http_options, true);
}
http_options.host = getHost();
return http_options;
}
function getPathWithParams(path, params, api_key) {
if (typeof params !== 'string') {
params = qs.stringify(params);
}
return params ? (path + "?" + params + "&apiKey=" + api_key) : (path + "?apiKey=" + api_key);
}
function getBody(data, apiKey) {
if (typeof data !== 'string') {
// add api key to request
data.apiKey = apiKey;
return JSON.stringify(data);
}
}
function execute(method, path, data, http_options, cb) {
setRetryPolicy();
if (typeof http_options === "function") {
cb = http_options;
http_options = null;
}
http_options = getBasicHttpOptions(http_options);
http_options.method = method;
if (method === 'GET' || method === 'DELETE') {
http_options.uri = http_options.host + getPathWithParams(path, data, configuration.default_options.api_key);
http_options.body = null;
} else {
http_options.uri = http_options.host + path;
http_options.body = getBody(data, configuration.default_options.api_key);
}
request(http_options, function (error, response, body) {
if (error) {
console.log('Problem with request: ', error);
cb(error, null);
return;
}
var err = null, res = null;
if (response.statusCode < 200 || response.statusCode >= 300) {
err = JSON.parse(body);
if (process.env.NODE_ENV === 'development') {
err.response_stringified = JSON.stringify(response);
}
err.httpStatusCode = response.statusCode;
response = null;
} else {
res = JSON.parse(body);
res.httpStatusCode = response.statusCode;
}
cb(err, res);
});
}