Skip to content

Commit 6b0104f

Browse files
committed
Merge pull request #38 from cp2boston/RCB-123_nodejs_429s
RCB-123 nodejs 429s
2 parents 470f9b3 + cc08d3f commit 6b0104f

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+901
-3225
lines changed

.travis.yml

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ node_js:
33
- "0.11.16"
44
- "0.12.7"
55
- "1.0.4"
6-
- "4.2.2"
6+
- "4.2.4"
77
before_install:
88
- npm install -g npm
99
before_script:
@@ -13,6 +13,4 @@ notifications:
1313
slack:
1414
rooms:
1515
- secure: 4FRaTAAiYyeUvgw2RhmblgbNiJO4wmd34OBgWcwURjP9oVmFfSwR9r1LNCdUGxrPOghexSY2DjXIuvIrfTfi/xYbhHb3Kw7PEAyB8IuBMlKtY4NSFou62S2VhYpxyg58T+C7P2zi0eDnDE06pwTCoGPaimxMZQY91yQ0yPYDPVXbwe5SjEgamzlwGBxlS/0A6w1iCPHg27/iO2hXtdW3oLS2I0F/Q8Q95RBkX9hpg6yqHlTV7jRbSqvQ9OFBqk/tXMHQvhoPDGgCgQDuykJuaAYx7g9d0YL0eEYYOh9B/TJ/kNOwdRFBu5kuQ2/nFS5Z0S3Y3UIhdYjUmm9gSMnwIbYnrW22EqDJLoT9Zi3Gv7Prg/8/fSkWsof7BJTMSuXUqO1AxDGKIxFv9uSF1daZoY+AC1ooU1xDu1nNvWVYPlkwEdDxxmHpFkGT3ESTZYccPovQl8Z5K0I1BBAVdJKDzm07lE6VHbxkKcvK6gG0TN3uLxnSlQtjkfJ+aVMq1kxeVsB9lEsKs9oezsKzzbftMm525aXPg+OAv+31CUFWxvT/p4ps8Q+AV6aZpoPHkpK8VryyNirUeZ/m4m4ebDHhD9vcN+JqE9gzshT+0U3g19SvLiUMQtbuZ2BUvrq2hh2LEGs03AFZaNg9AEUVA1PQRhV5NILyoS/lbiBYJPT39Sg=
16-
# - secure: D4VxkkZlj7uaaFbqEBITkJCusVeii436N8X6GijuosUSaee9lqGYUF5ZS9lV6VGMKs719IfSJsCc2v/N4nc9Y/8AKgXd7AWHUwaRR+MC6rLwv9xqH8ZlkTPUKHUXkUQe1f9042PcMxzYa9r0+uKniM9l915Yx0PLaawJrWe3ZVig/uBhn5FueLhtUACzLJcjNcri/BKEgmP2+EgUsupUhujd0MsQd8xN5YIIv6VM5oD0XWXZCnBqHoZK+Qq7LfwDnTmUk7juqTOAjefF6v8IJTDELvSdK9QW7f9x7h0ICabIrI+Gl4IbNLJYEnELBi+X7da2YJUTgUoQrlBB4z+T8KybD8myqV/pJc1n0xrk84g1MtYQ3ahZn7eD3DTjIvK+ML8qAAGwxibF8VsV+GSoo5FcB6e3vV+glHODlwszstVs11PpL1grurVdoa5HPhUbm1jtQixOwO7h8GgGpwO20PuMLfyOfTjfoMcJ3ISjGNHRmUwcCH9avcaHqMLPLHht0z+8inVlDZeTcN+Wi8tk1YXwuQYUkTW46iFmoZNGdygRjTu43h9hCqdG7vcoKrR8oDbMT8X/sfs+z/UaBbuYBr9dT8rrdKJoa9115PaYpCs529DLrw1iGmzr5CkAXDElc1y2F352nwVS+dX7/OIQz1/dbT1ozWQ9Blx6ez5XN84=
17-
# - secure: g/eOC2QCn7oUW234u/P1kmh9OASO9t5g6iC+DflNdnedHnpw8IEG9CsLAnNynOY0KvC/2/Q6BAIFpT/qO8BPdaC2eQnd9LDurOXExxvjKZgTujhqgzijJGzVPSL8//hafj0Ec2+iJZFo/DYMPqUpYDsiKxX53+SMz9/GN/PKVKsI7bzuaOm04xXktU0A76pVfaG0N/qFSVHI64SShACoUXRpTzyUbmksRgzk7FB162R+TH1soPsR3vPh8c2SSWC9msrDc4iljcBhSFTdjL68z+srjDPYMSoOcFXXFNP+dmL+Q0veL/E4e40e7CWIU1O3grOcEcCkaSoZVSpGduNnCst8h6MpgauPtrgwHk4zGMoSl+L6al+nFo/3h2dXeebrQ0tY/hRfZi4Q8xwqG9083TBqi71fTpoFZ7sNtrY4Kdtl5Oa2CFUo7lVn1JB9qQwSa0eai3Whv0RyRqqQe77aDUj0dfD2R3Q61rX5OF/f++W0XtNwHQubzmj8HD/cFneShIQsbl9KgYXoR6HiXcbBiNdmmZjSrzkPYh7vlsujYrz6Cg2msKybWJ/FfOz0tS1cjlCtiCMOTExN6tEF8YCp9l+s+5RLe61pgFPy4Snr9pEjuTS5DYliTyZMY2ZZC1clBQtgE8E2qCG1QSzqnqqiGxj2K4zmLPpB4y1XpW8e3yk=
1816

lib/Api.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,9 +97,9 @@ Api.prototype.rosette = function(endpoint, callback) {
9797
// check if server and client API versions match
9898
c.check(this.userKey, this.serviceURL, function(err, res) {
9999
if (err) {
100-
throw err;
100+
return callback(err);
101101
} else if (!res.versionChecked) {
102-
throw new RosetteException("incompatibleVersion", "The server version is not compatible with binding version " + BINDING_VERSION, res.Version);
102+
return callback(new RosetteException("incompatibleVersion", "The server version is not compatible with binding version " + BINDING_VERSION, res.Version));
103103
} else {
104104
// mark api binding version as checked
105105
api.versionChecked = true;

lib/categories.js

Lines changed: 6 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,7 @@ var zlib = require("zlib");
2020

2121
var RosetteConstants = require("./rosetteConstants");
2222
var RosetteException = require("./rosetteExceptions");
23-
24-
/**
25-
* Compatible server version.
26-
*
27-
* @type string
28-
*/
29-
var BINDING_VERSION = "1.0";
23+
var rosetteRequest = require("./rosetteRequest");
3024

3125
/**
3226
* @class
@@ -52,75 +46,15 @@ categories.prototype.getResults = function(parameters, userKey, serviceURL, call
5246
} else {
5347

5448
// validate parameters
55-
if (parameters.loadParams().content === null && parameters.loadParams().contentUri === null) {
56-
throw new RosetteException("badArgument", "Must supply one of contentor contentUri", "bad arguments");
49+
if (parameters.loadParams().content == null && parameters.loadParams().contentUri == null) {
50+
return callback(new RosetteException("badArgument", "Must supply one of content or contentUri", "bad arguments"));
5751
} else if (parameters.loadParams().content != null && parameters.loadParams().contentUri != null) {
58-
throw new RosetteException("badArgument", "Cannot supply content and contentUri", "bad arguments");
52+
return callback(new RosetteException("badArgument", "Cannot supply content and contentUri", "bad arguments"));
5953
} else {
6054
// configure URL
6155
var urlParts = URL.parse(serviceURL + "categories");
62-
var protocol = https;
63-
if (urlParts.protocol === "http:") {
64-
protocol = http;
65-
}
66-
67-
var headers = {
68-
"accept": "application/json",
69-
"accept-encoding": "gzip",
70-
"content-type": "application/json",
71-
"user-agent": "rosetteapinode/" + BINDING_VERSION
72-
}
73-
headers["X-RosetteAPI-Key"] = userKey;
74-
75-
var result = new Buffer("");
76-
77-
var options = {
78-
hostname: urlParts.hostname,
79-
path: urlParts.path,
80-
method: 'POST',
81-
headers: headers,
82-
agent: false
83-
};
84-
85-
if (urlParts.port) {
86-
options.port = urlParts.port;
87-
}
88-
89-
// execute the http/https request
90-
var req = protocol.request(options, function(res) {
91-
res.on("data", function(docs) {
92-
result = Buffer.concat([result, docs]);
93-
});
94-
95-
res.on("end", function(err) {
96-
if (err) {
97-
return callback(err)
98-
}
99-
100-
if (res.headers["content-encoding"] === "gzip") {
101-
result = zlib.gunzipSync(result);
102-
}
103-
104-
result = JSON.parse(result);
105-
result.headers = res.headers;
106-
result = JSON.stringify(result);
107-
108-
if (res.statusCode === 200) {
109-
return callback(err, JSON.parse(result.toString()));
110-
} else if (res.statusCode != 200) {
111-
return callback(err, JSON.parse(result.toString()));
112-
}
113-
});
114-
});
115-
116-
req.on("error", function(e) {
117-
return callback(e);
118-
});
119-
120-
req.write(JSON.stringify(parameters.loadParams()));
121-
122-
req.end();
123-
56+
var req = new rosetteRequest();
57+
req.makeRequest('POST', userKey, urlParts, parameters, callback);
12458
}
12559
}
12660

lib/checkVersion.js

Lines changed: 4 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,7 @@ var zlib = require("zlib");
2020

2121
var rosetteConstants = require("./rosetteConstants");
2222
var RosetteException = require("./rosetteExceptions");
23-
24-
/**
25-
* Compatible server version.
26-
*
27-
* @type string
28-
*/
29-
var BINDING_VERSION = "1.0";
23+
var rosetteRequest = require("./rosetteRequest");
3024

3125
/**
3226
* @class
@@ -45,68 +39,11 @@ function checkVersion() {
4539
* @param {function} callback - Callback function to be exectuted after the function to which it is passed is complete
4640
*/
4741
checkVersion.prototype.check = function(userKey, serviceURL, callback) {
42+
var req = new rosetteRequest();
4843
// configure URL
49-
var urlParts = URL.parse(serviceURL + "info?clientVersion=" + BINDING_VERSION);
50-
var protocol = https;
51-
if (urlParts.protocol === "http:") {
52-
protocol = http;
53-
}
54-
55-
var headers = {
56-
"accept": "application/json",
57-
"accept-encoding": "gzip",
58-
"content-type": "application/json",
59-
"user-agent": "rosetteapinode/" + BINDING_VERSION
60-
}
61-
headers["X-RosetteAPI-Key"] = userKey;
62-
63-
var result = new Buffer("");
64-
65-
var options = {
66-
hostname: urlParts.hostname,
67-
path: urlParts.path,
68-
method: 'POST',
69-
headers: headers,
70-
agent: false
71-
};
72-
73-
if (urlParts.port) {
74-
options.port = urlParts.port;
75-
}
76-
77-
// execute the http/https request
78-
var req = protocol.request(options, function(res) {
79-
res.on("data", function(docs) {
80-
result = Buffer.concat([result, docs]);
81-
});
82-
83-
res.on("end", function(err) {
84-
if (err) {
85-
return callback(err)
86-
}
87-
88-
if (res.headers["content-encoding"] === "gzip") {
89-
result = zlib.gunzipSync(result);
90-
}
91-
92-
result = JSON.parse(result);
93-
result.headers = res.headers;
94-
result = JSON.stringify(result);
95-
96-
if (res.statusCode === 200) {
97-
return callback(err, JSON.parse(result.toString()));
98-
} else if (res.statusCode != 200) {
99-
return callback(err, JSON.parse(result.toString()));
100-
}
101-
});
102-
});
103-
104-
req.on("error", function(e) {
105-
console.log(e)
106-
return callback(e);
107-
});
44+
var urlParts = URL.parse(serviceURL + "info?clientVersion=" + req.bindingVersion());
10845

109-
req.end();
46+
req.makeRequest('POST', userKey, urlParts, null, callback);
11047

11148
};
11249

lib/entities.js

Lines changed: 5 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,7 @@ var zlib = require("zlib");
2020

2121
var rosetteConstants = require("./rosetteConstants");
2222
var RosetteException = require("./rosetteExceptions");
23-
24-
/**
25-
* Compatible server version.
26-
*
27-
* @type string
28-
*/
29-
var BINDING_VERSION = "1.0";
23+
var rosetteRequest = require("./rosetteRequest");
3024

3125
/**
3226
* @class
@@ -58,80 +52,18 @@ entities.prototype.getResults = function(parameters, userKey, serviceURL, callba
5852

5953
// validate parameters
6054
if (parameters.loadParams().content == null && parameters.loadParams().contentUri == null) {
61-
throw new RosetteException("badArgument", "Must supply one of Content or ContentUri", "bad arguments");
55+
return callback(new RosetteException("badArgument", "Must supply one of Content or ContentUri", "bad arguments"));
6256
} else if (parameters.loadParams().content != null && parameters.loadParams().contentUri != null) {
63-
throw new RosetteException("badArgument", "Cannot supply both Content and ContentUri", "bad arguments");
57+
return callback(new RosetteException("badArgument", "Cannot supply both Content and ContentUri", "bad arguments"));
6458
} else {
6559
// configure URL
6660
if (parameters.loadParams().linked == true) {
6761
var urlParts = URL.parse(serviceURL + "entities/linked");
6862
} else {
6963
urlParts = URL.parse(serviceURL + "entities");
7064
}
71-
72-
var protocol = https;
73-
if (urlParts.protocol === "http:") {
74-
protocol = http;
75-
}
76-
77-
var headers = {
78-
"accept": "application/json",
79-
"accept-encoding": "gzip",
80-
"content-type": "application/json",
81-
"user-agent": "rosetteapinode/" + BINDING_VERSION
82-
}
83-
headers["X-RosetteAPI-Key"] = userKey;
84-
85-
var result = new Buffer("");
86-
87-
var options = {
88-
hostname: urlParts.hostname,
89-
path: urlParts.path,
90-
method: 'POST',
91-
headers: headers,
92-
agent: false
93-
};
94-
95-
if (urlParts.port) {
96-
options.port = urlParts.port;
97-
}
98-
99-
// execute the http/https request
100-
var req = protocol.request(options, function(res) {
101-
res.on("data", function(docs) {
102-
result = Buffer.concat([result, docs]);
103-
});
104-
105-
res.on("end", function(err) {
106-
if (err) {
107-
return callback(err)
108-
}
109-
// will need for other endpoints
110-
if (res.headers["content-encoding"] === "gzip") {
111-
result = zlib.gunzipSync(result);
112-
}
113-
114-
result = JSON.parse(result);
115-
result.headers = res.headers;
116-
result = JSON.stringify(result);
117-
118-
if (res.statusCode === 200) {
119-
return callback(err, JSON.parse(result.toString()));
120-
} else if (res.statusCode != 200) {
121-
return callback(err, JSON.parse(result.toString()));
122-
}
123-
});
124-
});
125-
126-
// error catching for request
127-
req.on("error", function(e) {
128-
return callback(e);
129-
});
130-
131-
req.write(JSON.stringify(parameters.loadParams()));
132-
133-
req.end();
134-
65+
var req = new rosetteRequest();
66+
req.makeRequest('POST', userKey, urlParts, parameters, callback);
13567
}
13668
}
13769

lib/info.js

Lines changed: 3 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,7 @@ var zlib = require("zlib");
2020

2121
var rosetteConstants = require("./rosetteConstants");
2222
var RosetteException = require("./rosetteExceptions");
23-
24-
/**
25-
* Compatible server version.
26-
*
27-
* @type string
28-
*/
29-
var BINDING_VERSION = "1.0";
23+
var rosetteRequest = require("./rosetteRequest");
3024

3125
/**
3226
* @class
@@ -49,66 +43,8 @@ info.prototype.getResults = function(parameters, userKey, serviceURL, callback)
4943

5044
// configure URL
5145
var urlParts = URL.parse(serviceURL + "info");
52-
var protocol = https;
53-
if (urlParts.protocol === "http:") {
54-
protocol = http;
55-
}
56-
57-
var headers = {
58-
"accept": "application/json",
59-
"accept-encoding": "gzip",
60-
"content-type": "application/json",
61-
"user-agent": "rosetteapinode/" + BINDING_VERSION
62-
}
63-
headers["X-RosetteAPI-Key"] = userKey;
64-
65-
var result = new Buffer("");
66-
67-
var options = {
68-
hostname: urlParts.hostname,
69-
path: urlParts.path,
70-
method: 'GET',
71-
headers: headers,
72-
agent: false
73-
};
74-
75-
if (urlParts.port) {
76-
options.port = urlParts.port;
77-
}
78-
79-
// execute the http/https request
80-
var req = protocol.request(options, function(res) {
81-
res.on("data", function(docs) {
82-
result = Buffer.concat([result, docs]);
83-
});
84-
85-
res.on("end", function(err) {
86-
if (err) {
87-
return callback(err)
88-
}
89-
// will need for other endpoints
90-
if (res.headers["content-encoding"] === "gzip") {
91-
result = zlib.gunzipSync(result);
92-
}
93-
94-
result = JSON.parse(result);
95-
result.headers = res.headers;
96-
result = JSON.stringify(result);
97-
98-
if (res.statusCode === 200) {
99-
return callback(err, JSON.parse(result.toString()));
100-
}
101-
});
102-
});
103-
104-
// error catching for request
105-
req.on("error", function(e) {
106-
console.log(e)
107-
return callback(e);
108-
});
109-
110-
req.end();
111-
46+
var req = new rosetteRequest();
47+
req.makeRequest('GET', userKey, urlParts, null, callback);
11248
};
11349

11450
module.exports = info;

0 commit comments

Comments
 (0)