mirror of
https://github.com/DoctorMcKay/node-steamcommunity.git
synced 2026-08-19 13:13:28 +08:00
Compare commits
18 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fd872490c8 | ||
|
|
be528d1a19 | ||
|
|
3bcaf40850 | ||
|
|
0ccac69bea | ||
|
|
48d63857e2 | ||
|
|
b11734cd9b | ||
|
|
5c37c38dda | ||
|
|
260bfaa0ad | ||
|
|
1031a4dbd7 | ||
|
|
e28fe5ca05 | ||
|
|
90a9ee1aa9 | ||
|
|
9a069e80fb | ||
|
|
640c47b933 | ||
|
|
f5d65a9ad4 | ||
|
|
7ae8a97a0f | ||
|
|
ec1284e961 | ||
|
|
dc4bb1b554 | ||
|
|
cd90d7a563 |
3
.idea/codeStyles/Project.xml
generated
3
.idea/codeStyles/Project.xml
generated
@@ -1,8 +1,5 @@
|
||||
<component name="ProjectCodeStyleConfiguration">
|
||||
<code_scheme name="Project" version="173">
|
||||
<XML>
|
||||
<option name="XML_LEGACY_SETTINGS_IMPORTED" value="true" />
|
||||
</XML>
|
||||
<codeStyleSettings language="JSON">
|
||||
<indentOptions>
|
||||
<option name="USE_TAB_CHARACTER" value="true" />
|
||||
|
||||
1
.idea/codeStyles/codeStyleConfig.xml
generated
1
.idea/codeStyles/codeStyleConfig.xml
generated
@@ -1,5 +1,6 @@
|
||||
<component name="ProjectCodeStyleConfiguration">
|
||||
<state>
|
||||
<option name="USE_PER_PROJECT_SETTINGS" value="true" />
|
||||
<option name="PREFERRED_PROJECT_CODE_STYLE" value="Default" />
|
||||
</state>
|
||||
</component>
|
||||
1
.idea/modules.xml
generated
1
.idea/modules.xml
generated
@@ -2,6 +2,7 @@
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/../node-steamcommunity Wiki/.idea/node-steamcommunity Wiki.iml" filepath="$PROJECT_DIR$/../node-steamcommunity Wiki/.idea/node-steamcommunity Wiki.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/steamcommunity.iml" filepath="$PROJECT_DIR$/.idea/steamcommunity.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
|
||||
1
.idea/steamcommunity.iml
generated
1
.idea/steamcommunity.iml
generated
@@ -5,5 +5,6 @@
|
||||
<content url="file://$MODULE_DIR$" />
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="module" module-name="node-steamcommunity Wiki" />
|
||||
</component>
|
||||
</module>
|
||||
1
.idea/vcs.xml
generated
1
.idea/vcs.xml
generated
@@ -2,5 +2,6 @@
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="" vcs="Git" />
|
||||
<mapping directory="$PROJECT_DIR$/../node-steamcommunity Wiki" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
||||
@@ -2,6 +2,8 @@ const SteamCommunity = require('../index.js');
|
||||
|
||||
const Helpers = require('./helpers.js');
|
||||
|
||||
const HELP_SITE_DOMAIN = 'https://help.steampowered.com';
|
||||
|
||||
/**
|
||||
* Restore a previously removed steam package from your steam account.
|
||||
* @param {int|string} packageID
|
||||
@@ -9,26 +11,14 @@ const Helpers = require('./helpers.js');
|
||||
*/
|
||||
SteamCommunity.prototype.restorePackage = function(packageID, callback) {
|
||||
this.httpRequestPost({
|
||||
"uri": "https://help.steampowered.com/wizard/AjaxDoPackageRestore",
|
||||
"form": {
|
||||
"packageid": packageID,
|
||||
"sessionid": this.getSessionID('https://help.steampowered.com'),
|
||||
"wizard_ajax": 1
|
||||
uri: HELP_SITE_DOMAIN + '/wizard/AjaxDoPackageRestore',
|
||||
form: {
|
||||
packageid: packageID,
|
||||
sessionid: this.getSessionID(HELP_SITE_DOMAIN),
|
||||
wizard_ajax: 1
|
||||
},
|
||||
"json": true
|
||||
}, (err, res, body) => {
|
||||
if (err) {
|
||||
callback(err);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!body.success) {
|
||||
callback(body.errorMsg ? new Error(body.errorMsg) : Helpers.eresultError(body.success));
|
||||
return;
|
||||
}
|
||||
|
||||
callback(null);
|
||||
});
|
||||
json: true
|
||||
}, wizardAjaxHandler(callback));
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -38,14 +28,27 @@ SteamCommunity.prototype.restorePackage = function(packageID, callback) {
|
||||
*/
|
||||
SteamCommunity.prototype.removePackage = function(packageID, callback) {
|
||||
this.httpRequestPost({
|
||||
"uri": "https://help.steampowered.com/wizard/AjaxDoPackageRemove",
|
||||
"form": {
|
||||
"packageid": packageID,
|
||||
"sessionid": this.getSessionID('https://help.steampowered.com'),
|
||||
"wizard_ajax": 1
|
||||
uri: HELP_SITE_DOMAIN + '/wizard/AjaxDoPackageRemove',
|
||||
form: {
|
||||
packageid: packageID,
|
||||
sessionid: this.getSessionID(HELP_SITE_DOMAIN),
|
||||
wizard_ajax: 1
|
||||
},
|
||||
"json": true
|
||||
}, (err, res, body) => {
|
||||
json: true
|
||||
}, wizardAjaxHandler(callback));
|
||||
};
|
||||
|
||||
/**
|
||||
* Returns a handler for wizard ajax HTTP requests.
|
||||
* @param {function} callback
|
||||
* @returns {(function(*=, *, *): void)|*}
|
||||
*/
|
||||
function wizardAjaxHandler(callback) {
|
||||
return (err, res, body) => {
|
||||
if (!callback) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (err) {
|
||||
callback(err);
|
||||
return;
|
||||
@@ -57,5 +60,5 @@ SteamCommunity.prototype.removePackage = function(packageID, callback) {
|
||||
}
|
||||
|
||||
callback(null);
|
||||
});
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -124,7 +124,7 @@ SteamCommunity.prototype._checkCommunityError = function(html, callback) {
|
||||
return err;
|
||||
}
|
||||
|
||||
if (typeof html === 'string' && html.match(/g_steamID = false;/) && html.match(/<h1>Sign In<\/h1>/)) {
|
||||
if (typeof html === 'string' && html.indexOf('g_steamID = false;') > -1 && html.indexOf('<title>Sign In</title>') > -1) {
|
||||
err = new Error("Not Logged In");
|
||||
callback(err);
|
||||
this._notifySessionExpired(err);
|
||||
|
||||
@@ -148,6 +148,124 @@ SteamCommunity.prototype.openBoosterPack = function(appid, assetid, callback) {
|
||||
})
|
||||
};
|
||||
|
||||
/**
|
||||
* Get the booster pack catalog to see what booster packs you can create
|
||||
* @param {function} callback
|
||||
*/
|
||||
SteamCommunity.prototype.getBoosterPackCatalog = function(callback) {
|
||||
this.httpRequestGet('https://steamcommunity.com/tradingcards/boostercreator/', (err, res, body) => {
|
||||
if (err) {
|
||||
callback(err);
|
||||
return;
|
||||
}
|
||||
|
||||
let idx = body.indexOf('CBoosterCreatorPage.Init(');
|
||||
if (idx == -1) {
|
||||
callback(new Error('Malformed response'));
|
||||
return;
|
||||
}
|
||||
|
||||
let lines = body.slice(idx).split('\n').map(l => l.trim());
|
||||
|
||||
for (let i = 1; i <= 4; i++) {
|
||||
if (typeof lines[i] != 'string' || !lines[i].match(/,$/)) {
|
||||
let err = new Error('Malformed response');
|
||||
err.line = i;
|
||||
callback(err);
|
||||
return;
|
||||
}
|
||||
|
||||
lines[i] = lines[i].replace(/,$/, '');
|
||||
}
|
||||
|
||||
let boosterPackCatalog, totalGems, tradableGems, untradableGems;
|
||||
try {
|
||||
boosterPackCatalog = JSON.parse(lines[1]);
|
||||
totalGems = parseInt(lines[2].match(/\d+/)[0], 10);
|
||||
tradableGems = parseInt(lines[3].match(/\d+/)[0], 10);
|
||||
untradableGems = parseInt(lines[4].match(/\d+/)[0], 10);
|
||||
} catch (ex) {
|
||||
let err = new Error('Malformed response');
|
||||
err.inner = ex;
|
||||
callback(err);
|
||||
return;
|
||||
}
|
||||
|
||||
let keyedCatalog = {};
|
||||
boosterPackCatalog.forEach((app) => {
|
||||
app.price = parseInt(app.price, 10);
|
||||
app.unavailable = app.unavailable || false;
|
||||
app.availableAtTime = app.available_at_time || null;
|
||||
|
||||
if (typeof app.availableAtTime == 'string') {
|
||||
app.availableAtTime = Helpers.decodeSteamTime(app.availableAtTime);
|
||||
}
|
||||
|
||||
delete app.available_at_time;
|
||||
|
||||
keyedCatalog[app.appid] = app;
|
||||
});
|
||||
|
||||
callback(null, {
|
||||
totalGems,
|
||||
tradableGems,
|
||||
untradableGems,
|
||||
catalog: keyedCatalog
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Create a booster pack using gems.
|
||||
* @param {int} appid
|
||||
* @param {boolean} [useUntradableGems=false]
|
||||
* @param callback
|
||||
*/
|
||||
SteamCommunity.prototype.createBoosterPack = function(appid, useUntradableGems, callback) {
|
||||
if (typeof useUntradableGems == 'function') {
|
||||
callback = useUntradableGems;
|
||||
useUntradableGems = false;
|
||||
}
|
||||
|
||||
this.httpRequestPost({
|
||||
uri: 'https://steamcommunity.com/tradingcards/ajaxcreatebooster/',
|
||||
form: {
|
||||
sessionid: this.getSessionID(),
|
||||
appid,
|
||||
series: 1,
|
||||
// tradability_preference can be a value 1-3
|
||||
// 1: Prefer using tradable gems, but use untradable if necessary
|
||||
// 2: Only use tradable gems
|
||||
// 3: Prefer using untradable gems, but use tradable if necessary
|
||||
tradability_preference: useUntradableGems ? 3 : 2
|
||||
},
|
||||
json: true,
|
||||
checkHttpError: false
|
||||
}, (err, res, body) => {
|
||||
if (err) {
|
||||
callback(err);
|
||||
return;
|
||||
}
|
||||
|
||||
if (body.purchase_eresult && body.purchase_eresult != 1) {
|
||||
callback(Helpers.eresultError(body.purchase_eresult));
|
||||
return;
|
||||
}
|
||||
|
||||
// We can now check HTTP status codes
|
||||
if (this._checkHttpError(err, res, callback, body)) {
|
||||
return;
|
||||
}
|
||||
|
||||
callback(null, {
|
||||
totalGems: parseInt(body.goo_amount, 10),
|
||||
tradableGems: parseInt(body.tradable_goo_amount, 10),
|
||||
untradableGems: parseInt(body.untradable_goo_amount, 10),
|
||||
resultItem: body.purchase_result
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Get details about a gift in your inventory.
|
||||
* @param {string} giftID
|
||||
|
||||
@@ -240,14 +240,14 @@ SteamCommunity.prototype.getUserComments = function(userID, options, callback) {
|
||||
return {
|
||||
id: $elem.attr("id").split("_")[1],
|
||||
author: {
|
||||
id: new SteamID("[U:1:" + $elem.find("[data-miniprofile]").data("miniprofile") + "]"),
|
||||
steamID: new SteamID("[U:1:" + $elem.find("[data-miniprofile]").data("miniprofile") + "]"),
|
||||
name: $elem.find("bdi").text(),
|
||||
avatar: $elem.find(".playerAvatar img[src]").attr("src"),
|
||||
state: $elem.find(".playerAvatar").attr("class").split(" ").pop()
|
||||
},
|
||||
date: new Date($elem.find(".commentthread_comment_timestamp").data("timestamp") * 1000),
|
||||
text: $commentContent.text(),
|
||||
html: $commentContent.html()
|
||||
text: $commentContent.text().trim(),
|
||||
html: $commentContent.html().trim()
|
||||
}
|
||||
}).get();
|
||||
|
||||
@@ -526,7 +526,7 @@ SteamCommunity.prototype.getUserInventoryContents = function(userID, appID, cont
|
||||
},
|
||||
"qs": {
|
||||
"l": language, // Default language
|
||||
"count": 5000, // Max items per 'page'
|
||||
"count": 2000, // Max items per 'page'
|
||||
"start_assetid": start
|
||||
},
|
||||
"json": true
|
||||
|
||||
14
index.js
14
index.js
@@ -65,7 +65,7 @@ SteamCommunity.prototype.login = function(details, callback) {
|
||||
this._setCookie(Request.cookie('steamMachineAuth' + parts[0] + '=' + encodeURIComponent(parts[1])), true);
|
||||
}
|
||||
|
||||
var disableMobile = details.disableMobile;
|
||||
var disableMobile = typeof details.disableMobile == 'undefined' ? true : details.disableMobile;
|
||||
|
||||
var self = this;
|
||||
|
||||
@@ -123,7 +123,7 @@ SteamCommunity.prototype.login = function(details, callback) {
|
||||
"donotcache": Date.now()
|
||||
};
|
||||
|
||||
if(!disableMobile){
|
||||
if (!disableMobile) {
|
||||
formObj.oauth_client_id = "DE45CD61";
|
||||
formObj.oauth_scope = "read_profile write_profile read_client write_client";
|
||||
formObj.loginfriendlyname = "#login_emailauth_friendlyname_mobile";
|
||||
@@ -161,22 +161,20 @@ SteamCommunity.prototype.login = function(details, callback) {
|
||||
callback(error);
|
||||
} else if (!body.success) {
|
||||
callback(new Error(body.message || "Unknown error"));
|
||||
} else if (!disableMobile && !body.oauth) {
|
||||
callback(new Error("Malformed response"));
|
||||
} else {
|
||||
var sessionID = generateSessionID();
|
||||
var oAuth;
|
||||
var oAuth = {};
|
||||
self._setCookie(Request.cookie('sessionid=' + sessionID));
|
||||
|
||||
var cookies = self._jar.getCookieString("https://steamcommunity.com").split(';').map(function(cookie) {
|
||||
return cookie.trim();
|
||||
});
|
||||
|
||||
if (!disableMobile){
|
||||
if (!disableMobile && body.oauth) {
|
||||
oAuth = JSON.parse(body.oauth);
|
||||
self.steamID = new SteamID(oAuth.steamid);
|
||||
self.oAuthToken = oAuth.oauth_token;
|
||||
}else{
|
||||
} else {
|
||||
for(var i = 0; i < cookies.length; i++) {
|
||||
var parts = cookies[i].split('=');
|
||||
if(parts[0] == 'steamLogin') {
|
||||
@@ -190,7 +188,7 @@ SteamCommunity.prototype.login = function(details, callback) {
|
||||
|
||||
// Find the Steam Guard cookie
|
||||
var steamguard = null;
|
||||
for(var i = 0; i < cookies.length; i++) {
|
||||
for (var i = 0; i < cookies.length; i++) {
|
||||
var parts = cookies[i].split('=');
|
||||
if(parts[0] == 'steamMachineAuth' + self.steamID) {
|
||||
steamguard = self.steamID.toString() + '||' + decodeURIComponent(parts[1]);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "steamcommunity",
|
||||
"version": "3.43.0",
|
||||
"version": "3.44.4",
|
||||
"description": "Provides an interface for logging into and interacting with the Steam Community website",
|
||||
"keywords": [
|
||||
"steam",
|
||||
|
||||
Reference in New Issue
Block a user