From 06f7f10dfe9d65872fad1c551d286911c42e36b7 Mon Sep 17 00:00:00 2001 From: Alexander Corn Date: Fri, 17 Jul 2015 22:23:20 -0400 Subject: [PATCH] All callbacks now consistently return Error objects instead of strings --- classes/CMarketItem.js | 15 ++++------ classes/CMarketSearchResult.js | 9 +++--- classes/CSteamGroup.js | 20 ++++++------- classes/CSteamUser.js | 41 ++++++++++++-------------- components/chat.js | 12 ++++---- index.js | 54 ++++++++++++++++++++++++---------- 6 files changed, 81 insertions(+), 70 deletions(-) diff --git a/classes/CMarketItem.js b/classes/CMarketItem.js index 6bbf59b..dd90d5f 100644 --- a/classes/CMarketItem.js +++ b/classes/CMarketItem.js @@ -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¤cy=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); } }); }; diff --git a/classes/CMarketSearchResult.js b/classes/CMarketSearchResult.js index 80d3d6d..190c502 100644 --- a/classes/CMarketSearchResult.js +++ b/classes/CMarketSearchResult.js @@ -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; } diff --git a/classes/CSteamGroup.js b/classes/CSteamGroup.js index 8b661dd..f285f9e 100644 --- a/classes/CSteamGroup.js +++ b/classes/CSteamGroup.js @@ -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; } diff --git a/classes/CSteamUser.js b/classes/CSteamUser.js index 75a1302..79255ef 100644 --- a/classes/CSteamUser.js +++ b/classes/CSteamUser.js @@ -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")); } }); }; diff --git a/components/chat.js b/components/chat.js index 836ac0d..c523bad 100644 --- a/components/chat.js +++ b/components/chat.js @@ -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); } }); }; diff --git a/index.js b/index.js index 96e7368..a7e068f 100644 --- a/index.js +++ b/index.js @@ -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(/

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(/

Sorry!<\/h1>/)) { var match = html.match(/

(.+)<\/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');