All callbacks now consistently return Error objects instead of strings

This commit is contained in:
Alexander Corn
2015-07-17 22:23:20 -04:00
parent 484c049940
commit 06f7f10dfe
6 changed files with 81 additions and 70 deletions

View File

@@ -4,14 +4,13 @@ var Cheerio = require('cheerio');
SteamCommunity.prototype.getMarketItem = function(appid, hashName, callback) {
var self = this;
this.request("https://steamcommunity.com/market/listings/" + appid + "/" + encodeURIComponent(hashName), function(err, response, body) {
if(err || response.statusCode != 200) {
callback(err ? err.message : "HTTP error " + response.statusCode);
if(self._checkHttpError(err, response, callback)) {
return;
}
var $ = Cheerio.load(body);
if($('.market_listing_table_message') && $('.market_listing_table_message').text().trim() == 'There are no listings for this item.') {
callback('There are no listings for this item.');
callback(new Error("There are no listings for this item."));
return;
}
@@ -93,17 +92,13 @@ CMarketItem.prototype.updatePrice = function(callback) {
"uri": "https://steamcommunity.com/market/itemordershistogram?country=US&language=english&currency=1&item_nameid=" + this.commodityID,
"json": true,
}, function(err, response, body) {
if(err || response.statusCode != 200) {
if(callback) {
callback(err ? err.message : "HTTP error " + response.statusCode);
}
if(self._checkHttpError(err, response, callback)) {
return;
}
if(body.success != 1) {
if(callback) {
callback("Error " + body.success);
callback(new Error("Error " + body.success));
}
return;
@@ -125,7 +120,7 @@ CMarketItem.prototype.updatePrice = function(callback) {
// TODO: The tables?
if(callback) {
callback();
callback(null);
}
});
};

View File

@@ -39,24 +39,23 @@ function performSearch(request, qs, results, callback) {
},
"json": true
}, function(err, response, body) {
if(err || response.statusCode != 200) {
callback(err ? err.message : "HTTP error " + response.statusCode);
if(self._checkHttpError(err, response, callback)) {
return;
}
if(!body.success) {
callback("Success is not true");
callback(new Error("Success is not true"));
return;
}
if(!body.results_html) {
callback("No results_html in response");
callback(new Error("No results_html in response"));
return;
}
var $ = Cheerio.load(body.results_html);
if($('.market_listing_table_message').length > 0) {
callback($('.market_listing_table_message').text());
callback(new Error($('.market_listing_table_message').text()));
return;
}

View File

@@ -13,8 +13,7 @@ SteamCommunity.prototype.getSteamGroup = function(id, callback) {
var self = this;
this.request("https://steamcommunity.com/" + (typeof id === 'string' ? "groups/" + id : "gid/" + id.toString()) + "/memberslistxml/?xml=1", function(err, response, body) {
if(err || response.statusCode != 200) {
callback(err || "HTTP error " + response.statusCode);
if(self._checkHttpError(err, response, callback)) {
return;
}
@@ -66,8 +65,7 @@ CSteamGroup.prototype.getMembers = function(callback, members, link) {
var self = this;
this._community.request(link, function(err, response, body) {
if(err || response.statusCode != 200) {
callback(err || "HTTP error " + response.statusCode);
if(self._checkHttpError(err, response, callback)) {
return;
}
@@ -103,7 +101,7 @@ CSteamGroup.prototype.join = function(callback) {
}
if(err || response.statusCode >= 400) {
callback(err || "HTTP error " + response.statusCode);
callback(err || new Error("HTTP error " + response.statusCode));
return;
}
@@ -129,7 +127,7 @@ CSteamGroup.prototype.leave = function(callback) {
}
if(err || response.statusCode >= 400) {
callback(err || "HTTP error " + response.statusCode);
callback(err || new Error("HTTP error " + response.statusCode));
return;
}
@@ -155,7 +153,7 @@ CSteamGroup.prototype.postAnnouncement = function(headline, content, callback) {
}
if(err || response.statusCode >= 400) {
callback(err || "HTTP error " + response.statusCode);
callback(err || new Error("HTTP error " + response.statusCode));
return;
}
@@ -214,7 +212,7 @@ CSteamGroup.prototype.scheduleEvent = function(name, type, description, time, se
}
if(err || response.statusCode >= 400) {
callback(err || "HTTP error " + response.statusCode);
callback(err || new Error("HTTP error " + response.statusCode));
return;
}
@@ -241,7 +239,7 @@ CSteamGroup.prototype.setPlayerOfTheWeek = function(steamID, callback) {
}
if(err || response.statusCode != 200) {
callback(err || "HTTP error " + response.statusCode);
callback(err || new Error("HTTP error " + response.statusCode));
return;
}
@@ -254,7 +252,7 @@ CSteamGroup.prototype.setPlayerOfTheWeek = function(steamID, callback) {
if(results.response.results[0] == 'OK') {
callback(null, new SteamID(results.response.oldPOTW[0]), new SteamID(results.response.newPOTW[0]));
} else {
callback(results.response.results[0]);
callback(new Error(results.response.results[0]));
}
});
});
@@ -275,7 +273,7 @@ CSteamGroup.prototype.kick = function(steamID, callback) {
}
if(err || response.statusCode >= 400) {
callback(err || "HTTP error " + response.statusCode);
callback(err || new Error("HTTP error " + response.statusCode));
return;
}

View File

@@ -13,8 +13,7 @@ SteamCommunity.prototype.getSteamUser = function(id, callback) {
var self = this;
this.request("http://steamcommunity.com/" + (typeof id === 'string' ? "id/" + id : "profiles/" + id.toString()) + "/?xml=1", function(err, response, body) {
if(err || response.statusCode != 200) {
callback(err || "HTTP error " + response.statusCode);
if(self._checkHttpError(err, response, callback)) {
return;
}
@@ -24,12 +23,12 @@ SteamCommunity.prototype.getSteamUser = function(id, callback) {
xml2js.parseString(body, function(err, result) {
if(err || (!result.response && !result.profile)) {
callback(err || "No valid response");
callback(err || new Error("No valid response"));
return;
}
if(result.response && result.response.error && result.response.error.length) {
callback(result.response.error[0]);
callback(new Error(result.response.error[0]));
return;
}
@@ -113,8 +112,7 @@ CSteamUser.prototype.addFriend = function(callback) {
return;
}
if(err || response.statusCode != 200) {
callback(err || "HTTP error " + response.statusCode);
if(self._checkHttpError(err, response, callback)) {
return;
}
@@ -127,9 +125,9 @@ CSteamUser.prototype.addFriend = function(callback) {
}
if(json.success) {
callback();
callback(null);
} else {
callback("Unknown error");
callback(new Error("Unknown error"));
}
});
};
@@ -140,12 +138,11 @@ CSteamUser.prototype.acceptFriendRequest = function(callback) {
return;
}
if(err || response.statusCode != 200) {
callback(err || "HTTP error " + response.statusCode);
if(self._checkHttpError(err, response, callback)) {
return;
}
callback();
callback(null);
});
};
@@ -155,12 +152,11 @@ CSteamUser.prototype.removeFriend = function(callback) {
return;
}
if(err || response.statusCode != 200) {
callback(err || "HTTP error " + response.statusCode);
if(self._checkHttpError(err, response, callback)) {
return;
}
callback();
callback(null);
});
};
@@ -170,12 +166,11 @@ CSteamUser.prototype.blockCommunication = function(callback) {
return;
}
if(err || response.statusCode != 200) {
callback(err || "HTTP error " + response.statusCode);
if(self._checkHttpError(err, response, callback)) {
return;
}
callback();
callback(null);
});
};
@@ -189,11 +184,11 @@ CSteamUser.prototype.unblockCommunication = function(callback) {
}
if(err || response.statusCode >= 400) {
callback(err || "HTTP error " + response.statusCode);
callback(err || new Error("HTTP error " + response.statusCode));
return;
}
callback();
callback(null);
});
};
@@ -208,7 +203,7 @@ CSteamUser.prototype.comment = function(message, callback) {
}
if(err || response.statusCode != 200) {
callback(err || "HTTP error " + response.statusCode);
callback(err || new Error("HTTP error " + response.statusCode));
return;
}
@@ -221,11 +216,11 @@ CSteamUser.prototype.comment = function(message, callback) {
}
if(json.success) {
callback();
callback(null);
} else if(json.error) {
callback(json.error);
callback(new Error(json.error));
} else {
callback("Unknown error");
callback(new Error("Unknown error"));
}
});
};

View File

@@ -125,12 +125,14 @@ SteamCommunity.prototype.chatMessage = function(recipient, text, type, callback)
return;
}
if(err || response.statusCode != 200) {
callback(err ? err.message : "HTTP error " + response.statusCode);
} else if(body.error != 'OK') {
callback(body.error);
if(self._checkHttpError(err, response, callback)) {
return;
}
if(body.error != 'OK') {
callback(new Error(body.error));
} else {
callback();
callback(null);
}
});
};

View File

@@ -60,18 +60,24 @@ SteamCommunity.prototype.login = function(details, callback) {
"json": true,
"form": form
}, function(err, response, body) {
if(err) {
callback(err);
if(self._checkHttpError(err, response, callback)) {
return;
}
if(!body.success && body.emailauth_needed) {
var error = "SteamGuard";
var error = new Error("SteamGuard");
error.emaildomain = body.emaildomain;
callback(error);
} else if(!body.success && body.captcha_needed) {
var error = new Error("CAPTCHA");
error.captchaurl = "https://steamcommunity.com/public/captcha.php?gid=" + body.captcha_gid;
self._captchaGid = body.captcha_gid;
callback(error);
} else if(!body.success) {
callback(body.message || "Unknown error");
callback(new Error(body.message || "Unknown error"));
} else {
var sessionID = generateSessionID();
self._jar.setCookie(Request.cookie('sessionid=' + sessionID), 'http://steamcommunity.com');
@@ -130,8 +136,8 @@ function generateSessionID() {
SteamCommunity.prototype.getWebApiKey = function(domain, callback) {
var self = this;
this.request("https://steamcommunity.com/dev/apikey", function(err, response, body) {
if(err || response.statusCode != 200) {
return callback(err.message || "HTTP error " + response.statusCode);
if(self._checkHttpError(err, response, callback)) {
return;
}
if(body.match(/<h2>Access Denied<\/h2>/)) {
@@ -173,8 +179,8 @@ SteamCommunity.prototype.parentalUnlock = function(pin, callback) {
return;
}
if(err || response.statusCode != 200) {
return callback(err.message || "HTTP error " + response.statusCode);
if(self._checkHttpError(err, response, callback)) {
return;
}
if(!body || typeof body.success !== 'boolean') {
@@ -191,8 +197,8 @@ SteamCommunity.prototype.parentalUnlock = function(pin, callback) {
SteamCommunity.prototype.getNotifications = function(callback) {
this.request.get("https://steamcommunity.com/actions/RefreshNotificationArea", function(err, response, body) {
if(err || response.statusCode != 200) {
return callback(err.message || "HTTP error " + response.statusCode);
if(self._checkHttpError(err, response, callback)) {
return;
}
var notifications = {
@@ -230,18 +236,18 @@ SteamCommunity.prototype.resetItemNotifications = function(callback) {
return;
}
if(err || response.statusCode != 200) {
callback(err.message || "HTTP error " + response.statusCode);
} else {
callback();
if(self._checkHttpError(err, response, callback)) {
return;
}
callback(null);
});
};
SteamCommunity.prototype.loggedIn = function(callback) {
this.request("https://steamcommunity.com/my", {"followRedirect": false}, function(err, response, body) {
if(err || (response.statusCode != 302 && response.statusCode != 403)) {
callback(err ? err.message : "HTTP error " + response.statusCode);
callback(err || new Error("HTTP error " + response.statusCode));
return;
}
@@ -257,7 +263,7 @@ SteamCommunity.prototype.loggedIn = function(callback) {
SteamCommunity.prototype._checkCommunityError = function(html, callback) {
if(html.match(/<h1>Sorry!<\/h1>/)) {
var match = html.match(/<h3>(.+)<\/h3>/);
callback(match ? match[1] : "Unknown error occurred");
callback(new Error(match ? match[1] : "Unknown error occurred"));
return true;
}
@@ -282,6 +288,22 @@ SteamCommunity.prototype._myProfile = function(endpoint, form, callback) {
});
};
SteamCommunity.prototype._checkHttpError = function(err, response, callback) {
if(err) {
callback(err);
return true;
}
if(response.statusCode != 200) {
var error = new Error("HTTP error " + response.statusCode);
error.code = response.statusCode;
callback(error);
return true;
}
return false;
};
require('./classes/CMarketItem.js');
require('./classes/CMarketSearchResult.js');
require('./classes/CSteamGroup.js');