Compare commits

...

38 Commits

Author SHA1 Message Date
Alexander Corn
b16a8144ff 3.4.0 2015-07-30 16:50:36 -04:00
Alexander Corn
019e33d360 Merge pull request #3 from rannmann/master
Add getMarketApps component
2015-07-30 16:49:39 -04:00
Jake Forrester
01093f38fa Fixed callback error type consistency 2015-07-30 13:45:07 -07:00
Jake Forrester
62c2f1b965 Moved non-class file to components 2015-07-30 13:28:28 -07:00
Jake Forrester
21895a221c Added getMarketApps
Returns an object in format of {appid: appName, ...}
2015-07-30 11:42:47 -07:00
Alexander Corn
f3d88d6b83 3.3.3 2015-07-29 22:31:15 -04:00
Alexander Corn
09327af220 Fixed one more crash 2015-07-29 22:31:05 -04:00
Alexander Corn
0bb2cb6137 3.3.2 2015-07-29 22:29:23 -04:00
Alexander Corn
c9538137d5 Fixed crashes when using various CSteamUser methods 2015-07-29 22:29:14 -04:00
Alexander Corn
df05fd04c4 3.3.1 2015-07-29 22:22:57 -04:00
Alexander Corn
dee52bf7e2 Fixed crashes when using various class methods 2015-07-29 22:22:43 -04:00
Alexander Corn
6d455e8797 3.3.0 2015-07-27 22:56:42 -04:00
Alexander Corn
a0b776ca8b Added setupProfile method 2015-07-27 22:55:25 -04:00
Alexander Corn
3f0db21e02 3.2.1 2015-07-25 01:58:00 -04:00
Alexander Corn
6798b73a17 Made profile callbacks optional 2015-07-25 01:57:53 -04:00
Alexander Corn
b98451a4b6 3.2.0 2015-07-25 01:55:45 -04:00
Alexander Corn
af2ba3f56b Added editProfile method 2015-07-25 01:55:33 -04:00
Alexander Corn
9c2662ae16 Updated profileSettings to accept only some options 2015-07-25 01:39:19 -04:00
Alexander Corn
9ee49d4f15 Added profileSettings method 2015-07-25 01:24:28 -04:00
Alexander Corn
911ae86379 3.1.1 2015-07-22 11:59:43 -04:00
Alexander Corn
a12e8cb67c Added 50-second HTTP timeout 2015-07-22 11:59:18 -04:00
Alexander Corn
edd95cc93f 3.1.0 2015-07-17 22:57:51 -04:00
Alexander Corn
4f1f265c4d Added support for app-based Steam Guard 2015-07-17 22:57:40 -04:00
Alexander Corn
80c0c3ebbc 3.0.0 2015-07-17 22:26:49 -04:00
Alexander Corn
a1ef4b5646 Added captcha support 2015-07-17 22:26:29 -04:00
Alexander Corn
06f7f10dfe All callbacks now consistently return Error objects instead of strings 2015-07-17 22:23:20 -04:00
Alexander Corn
484c049940 Fixed error when SteamGuard is needed not being 'SteamGuard' 2015-07-17 22:07:16 -04:00
Alexander Corn
36038daa1b 2.6.0 2015-07-17 21:21:59 -04:00
Alexander Corn
12cffdd62c Added Family View status to loggedIn method callback 2015-07-17 21:19:43 -04:00
Alexander Corn
eaacef66bb Added loggedIn method 2015-07-17 21:10:08 -04:00
Alexander Corn
0ef652cbac 2.5.2 2015-07-10 16:24:59 -04:00
Alexander Corn
608377277c Sort market results by price to try to avoid duplicates 2015-07-10 16:24:42 -04:00
Alexander Corn
bcaa740b54 2.5.1 2015-07-10 16:01:10 -04:00
Alexander Corn
2674287b43 Make sure everything is in English 2015-07-10 16:00:56 -04:00
Alexander Corn
8b6bed5527 2.5.0 2015-07-10 15:46:42 -04:00
Alexander Corn
6def665b64 Added SteamCommunity#marketSearch 2015-07-10 15:46:29 -04:00
Alexander Corn
4f618c0a27 2.4.0 2015-06-29 16:38:36 -04:00
Alexander Corn
19fe951d96 Added ability to spoof UI mode 2015-06-29 16:38:24 -04:00
9 changed files with 442 additions and 71 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._community._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

@@ -0,0 +1,85 @@
var SteamCommunity = require('../index.js');
var Cheerio = require('cheerio');
SteamCommunity.prototype.marketSearch = function(options, callback) {
var qs = {};
if(typeof options === 'string') {
qs.query = options;
} else {
qs.query = options.query || '';
qs.appid = options.appid;
qs.search_descriptions = options.searchDescriptions ? 1 : 0;
if(qs.appid) {
for(var i in options) {
if(['query', 'appid', 'searchDescriptions'].indexOf(i) != -1) {
continue;
}
// This is a tag
qs['category_' + qs.appid + '_' + i + '[]'] = 'tag_' + options[i];
}
}
}
qs.start = 0;
qs.count = 100;
qs.sort_column = 'price';
qs.sort_dir = 'asc';
performSearch.call(this, this.request, qs, [], callback);
};
function performSearch(request, qs, results, callback) {
var self = this;
request({
"uri": "https://steamcommunity.com/market/search/render/",
"qs": qs,
"headers": {
"referer": "https://steamcommunity.com/market/search"
},
"json": true
}, function(err, response, body) {
if(self._checkHttpError(err, response, callback)) {
return;
}
if(!body.success) {
callback(new Error("Success is not true"));
return;
}
if(!body.results_html) {
callback(new Error("No results_html in response"));
return;
}
var $ = Cheerio.load(body.results_html);
if($('.market_listing_table_message').length > 0) {
callback(new Error($('.market_listing_table_message').text()));
return;
}
var rows = $('.market_listing_row_link');
for(var i = 0; i < rows.length; i++) {
results.push(new CMarketSearchResult($(rows[i])));
}
if(body.start + body.pagesize >= body.total_count) {
callback(null, results);
} else {
qs.start += body.pagesize;
performSearch(request, qs, results, callback);
}
});
}
function CMarketSearchResult(row) {
var match = row.attr('href').match(/\/market\/listings\/(\d+)\/(.+)/);
this.appid = parseInt(match[1], 10);
this.market_hash_name = decodeURIComponent(match[2]);
this.image = row.find('.market_listing_item_img').attr('src').match(/^https?:\/\/[^\/]+\/economy\/image\/[^\/]+\//)[0];
this.price = parseInt(row.find('.market_listing_their_price .market_table_value span').text().replace(/[^\d]+/g, ''), 10);
this.quantity = parseInt(row.find('.market_listing_num_listings_qty').text().replace(/[^\d]+/g, ''), 10);
}

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._community._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;
}
@@ -149,13 +147,14 @@ CSteamGroup.prototype.postAnnouncement = function(headline, content, callback) {
"body": content
};
var self = this;
this._community.request.post("https://steamcommunity.com/gid/" + this.steamID.toString() + "/announcements", {"form": form}, function(err, response, body) {
if(!callback) {
return;
}
if(err || response.statusCode >= 400) {
callback(err || "HTTP error " + response.statusCode);
callback(err || new Error("HTTP error " + response.statusCode));
return;
}
@@ -214,7 +213,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 +240,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 +253,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 +274,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;
}
@@ -108,13 +107,13 @@ CSteamUser.prototype.getAvatarURL = function(size, protocol) {
};
CSteamUser.prototype.addFriend = function(callback) {
var self = this;
this._community.request.post('https://steamcommunity.com/actions/AddFriendAjax', {"form": {"accept_invite": 0, "sessionID": this._community.getSessionID(), "steamid": this.steamID.toString()}}, function(err, response, body) {
if(!callback) {
return;
}
if(err || response.statusCode != 200) {
callback(err || "HTTP error " + response.statusCode);
if(self._community._checkHttpError(err, response, callback)) {
return;
}
@@ -127,55 +126,55 @@ CSteamUser.prototype.addFriend = function(callback) {
}
if(json.success) {
callback();
callback(null);
} else {
callback("Unknown error");
callback(new Error("Unknown error"));
}
});
};
CSteamUser.prototype.acceptFriendRequest = function(callback) {
var self = this;
this._community.request.post('https://steamcommunity.com/actions/AddFriendAjax', {"form": {"accept_invite": 1, "sessionID": this._community.getSessionID(), "steamid": this.steamID.toString()}}, function(err, response, body) {
if(!callback) {
return;
}
if(err || response.statusCode != 200) {
callback(err || "HTTP error " + response.statusCode);
if(self._community._checkHttpError(err, response, callback)) {
return;
}
callback();
callback(null);
});
};
CSteamUser.prototype.removeFriend = function(callback) {
var self = this;
this._community.request.post('https://steamcommunity.com/actions/RemoveFriendAjax', {"form": {"sessionID": this._community.getSessionID(), "steamid": this.steamID.toString()}}, function(err, response, body) {
if(!callback) {
return;
}
if(err || response.statusCode != 200) {
callback(err || "HTTP error " + response.statusCode);
if(self._community._checkHttpError(err, response, callback)) {
return;
}
callback();
callback(null);
});
};
CSteamUser.prototype.blockCommunication = function(callback) {
var self = this;
this._community.request.post('https://steamcommunity.com/actions/BlockUserAjax', {"form": {"sessionID": this._community.getSessionID(), "steamid": this.steamID.toString()}}, function(err, response, body) {
if(!callback) {
return;
}
if(err || response.statusCode != 200) {
callback(err || "HTTP error " + response.statusCode);
if(self._community._checkHttpError(err, response, callback)) {
return;
}
callback();
callback(null);
});
};
@@ -189,11 +188,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 +207,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 +220,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

@@ -28,12 +28,13 @@ SteamCommunity.PersonaStateFlag = {
"OnlineUsingBigPicture": 1024
};
SteamCommunity.prototype.chatLogon = function(interval) {
SteamCommunity.prototype.chatLogon = function(interval, uiMode) {
if(this.chatState == SteamCommunity.ChatState.LoggingOn || this.chatState == SteamCommunity.ChatState.LoggedOn) {
return;
}
interval = interval || 500;
uiMode = uiMode || "web";
this.emit('debug', 'Requesting chat WebAPI token');
this.chatState = SteamCommunity.ChatState.LoggingOn;
@@ -58,7 +59,7 @@ SteamCommunity.prototype.chatLogon = function(interval) {
self.request.post({
"uri": "https://api.steampowered.com/ISteamWebUserPresenceOAuth/Logon/v1",
"form": {
"ui_mode": "web",
"ui_mode": uiMode,
"access_token": match[0]
},
"json": true
@@ -124,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);
}
});
};

25
components/market.js Normal file
View File

@@ -0,0 +1,25 @@
var SteamCommunity = require('../index.js');
var Cheerio = require('cheerio');
SteamCommunity.prototype.getMarketApps = function(callback) {
var self = this;
this.request('https://steamcommunity.com/market/', function (err, response, body) {
if(self._checkHttpError(err, response, callback)) {
return;
}
var $ = Cheerio.load(body);
if ($('.market_search_game_button_group')) {
apps = {};
$('.market_search_game_button_group > a').each(function (i, element) {
var e = Cheerio.load(element);
var name = e('.game_button_game_name').text().trim();
var url = element.attribs.href;
var appid = url.substr(url.indexOf('=') + 1);
apps[appid] = name;
});
callback(null, apps);
} else {
callback(new Error("Malformed response"));
}
});
}

213
components/profile.js Normal file
View File

@@ -0,0 +1,213 @@
var SteamCommunity = require('../index.js');
var SteamID = require('steamid');
var Cheerio = require('cheerio');
SteamCommunity.PrivacyState = {
"Private": 1,
"FriendsOnly": 2,
"Public": 3
};
var CommentPrivacyState = {
"1": "commentselfonly",
"2": "commentfriendsonly",
"3": "commentanyone"
};
SteamCommunity.prototype.setupProfile = function(callback) {
var self = this;
this._myProfile("edit?welcomed=1", null, function(err, response, body) {
if(!callback) {
return;
}
if(err || response.statusCode != 200) {
callback(err || new Error("HTTP error " + response.statusCode));
} else {
callback(null);
}
});
};
SteamCommunity.prototype.editProfile = function(settings, callback) {
var self = this;
this._myProfile("edit", null, function(err, response, body) {
if(err || response.statusCode != 200) {
if(callback) {
callback(err || new Error("HTTP error " + response.statusCode));
}
return;
}
var $ = Cheerio.load(body);
var form = $('#editForm');
if(!form) {
if(callback) {
callback(new Error("Malformed response"));
}
return;
}
var values = {};
form.serializeArray().forEach(function(item) {
values[item.name] = item.value;
});
for(var i in settings) {
if(!settings.hasOwnProperty(i)) {
continue;
}
switch(i) {
case 'name':
values.personaName = settings[i];
break;
case 'realName':
values.real_name = settings[i];
break;
case 'summary':
values.summary = settings[i];
break;
case 'country':
values.country = settings[i];
break;
case 'state':
values.state = settings[i];
break;
case 'city':
values.city = settings[i];
break;
case 'customURL':
values.customURL = settings[i];
break;
case 'background':
// The assetid of our desired profile background
values.profile_background = settings[i];
break;
case 'featuredBadge':
// Currently, game badges aren't supported
values.favorite_badge_badgeid = settings[i];
break;
case 'primaryGroup':
if(typeof settings[i] === 'object' && settings[i].accountid) {
values.primary_group_steamid = settings[i].accountid;
} else {
values.primary_group_steamid = new SteamID(settings[i]).accountid;
}
break;
// TODO: profile showcases
}
}
self._myProfile("edit", values, function(err, response, body) {
if(err || response.statusCode != 200) {
if(callback) {
callback(err || new Error("HTTP error " + response.statusCode));
}
return;
}
// Check for an error
var $ = Cheerio.load(body);
var error = $('#errorText .formRowFields');
if(error) {
error = error.text().trim();
if(error) {
if(callback) {
callback(new Error(error));
}
return;
}
}
if(callback) {
callback(null);
}
});
});
};
SteamCommunity.prototype.profileSettings = function(settings, callback) {
var self = this;
this._myProfile("edit/settings", null, function(err, response, body) {
if(err || response.statusCode != 200) {
if(callback) {
callback(err || new Error("HTTP error " + response.statusCode));
}
return;
}
var $ = Cheerio.load(body);
var form = $('#editForm');
if(!form) {
if(callback) {
callback(new Error("Malformed response"));
}
return;
}
var values = {};
form.serializeArray().forEach(function(item) {
values[item.name] = item.value;
});
for(var i in settings) {
if(!settings.hasOwnProperty(i)) {
continue;
}
switch(i) {
case 'profile':
values.privacySetting = settings[i];
break;
case 'comments':
values.commentSetting = CommentPrivacyState[settings[i]];
break;
case 'inventory':
values.inventoryPrivacySetting = settings[i];
break;
case 'inventoryGifts':
values.inventoryGiftPrivacy = settings[i] ? 1 : 0;
break;
case 'emailConfirmation':
values.tradeConfirmationSetting = settings[i] ? 1 : 0;
break;
}
}
self._myProfile("edit/settings", values, function(err, response, body) {
if(err || response.statusCode != 200) {
if(callback) {
callback(err || new Error("HTTP error " + response.statusCode));
}
return;
}
if(callback) {
callback(null);
}
});
});
};

View File

@@ -11,8 +11,12 @@ SteamCommunity.SteamID = SteamID;
function SteamCommunity() {
this._jar = Request.jar();
this.request = Request.defaults({"jar": this._jar});
this._captchaGid = -1;
this.request = Request.defaults({"jar": this._jar, "timeout": 50000});
this.chatState = SteamCommunity.ChatState.Offline;
// English
this._jar.setCookie(Request.cookie('Steam_Language=english'), 'https://steamcommunity.com');
}
SteamCommunity.prototype.login = function(details, callback) {
@@ -40,15 +44,15 @@ SteamCommunity.prototype.login = function(details, callback) {
key.setPublic(json.publickey_mod, json.publickey_exp);
var form = {
"captcha_text": "",
"captchagid": -1,
"captcha_text": details.captcha || "",
"captchagid": self._captchaGid,
"emailauth": details.authCode || "",
"emailsteamid": "",
"loginfriendlyname": "",
"password": hex2b64(key.encrypt(details.password)),
"remember_login": "true",
"rsatimestamp": json.timestamp,
"twofactorcode": "",
"twofactorcode": details.twoFactorCode || "",
"username": details.accountName
};
@@ -57,15 +61,28 @@ 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) {
callback("Please provide the authorization code sent to your address at " + body.emaildomain);
// Steam Guard (email)
var error = new Error("SteamGuard");
error.emaildomain = body.emaildomain;
callback(error);
} else if(!body.success && body.requires_twofactor) {
// Steam Guard (app)
callback(new Error("SteamGuardMobile"));
} 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');
@@ -124,8 +141,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>/)) {
@@ -167,8 +184,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') {
@@ -185,8 +202,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 = {
@@ -224,18 +241,34 @@ 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 || new Error("HTTP error " + response.statusCode));
return;
}
if(response.statusCode == 403) {
callback(null, true, true);
return;
}
callback(null, !!response.headers.location.match(/steamcommunity\.com(\/(id|profiles)\/[^\/]+)\/?/), false);
});
};
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;
}
@@ -260,7 +293,26 @@ 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');
require('./classes/CSteamUser.js');
require('./components/chat.js');
require('./components/profile.js');
require('./components/market.js');

View File

@@ -1,6 +1,6 @@
{
"name": "steamcommunity",
"version": "2.3.0",
"version": "3.4.0",
"description": "Provides an interface for logging into and interacting with the Steam Community website",
"keywords": ["steam", "steam community"],
"homepage": "https://github.com/DoctorMcKay/node-steamcommunity",