I have spent some time checking the node-steamcommunity GitHub wiki, and first of all : Dr. McKay, you are a hero for building up such an easy npm interface for the messy Steam API...
I came up with some code to make sure I'm logged in almost 24/7 :
// Modules are required and secret stuff is ready...
function logOnSteam() {
console.log("Logging in to Steam...");
steamCommunity.login(logOnOptions, function (e, sessionID, cookies, steamguard) {
if (e) {
console.log("There was an error logging in ! Error details : " + e.message);
setTimeout(logOnSteam, 1000*60*4); // try to reconnect in 4 minutes
return;
} else {
console.log("Successfully logged in as " + logOnOptions.accountName + " !");
steamCommunity.chatLogon(); // to appear online
tradeOfferManager.setCookies(cookies, function (err) {
if (err) {
console.log(err);
return;
}
});
}
// automatic confirmation of EVERYTHING every "confirmationPeriod" ms
steamCommunity.startConfirmationChecker(confirmationPeriod, identitySecret);
});
}
function checkSteamLogged() {
steamCommunity.loggedIn( function (err, loggedIn, familyView) {
if (err) {
console.log(err);
setTimeout(checkSteamLogged, 1000*60*4); // check again in 4 min
} else if ( ! loggedIn ) {
console.log("Steam login check : NOT LOGGED IN !");
logOnSteam();
} else {
console.log("Steam login check : already logged in !");
}
});
}
steamCommunity.on('sessionExpired', function (err) {
if (err) {console.log(err);}
logOnSteam();
});
logOnSteam();
setInterval(checkSteamLogged, 1000*60*30);
I guess this is enough to be safe... (unless I made some rookie mistake ?)
This code is obviously the starting point for some TradeOfferManager handling, and I was wondering if I didn't go too far : if the 'sessionExpired' event is really triggered whenever we are not logged in, does it mean the 'checkSteamLogged()' function can be safely removed without harm ? '.startConfirmationChecker()' doesn't create a new instance each time it is called ? (I don't want to trigger 10 confirmations checkers leading to 10 times the intended check rate...) Thanks for any input !
1) I'd keep your login checker code in there. The manager will only notice that your session is gone when you try to send/accept an offer. Normal polling and canceling offers uses the WebAPI and your API key, so the session isn't actually used there. 2) That's more than fine. 5 requests per minute is super low. 3) You're correct, your first snippet generated the code once on boot. It ceased to be valid once you used it.
That all looks fine to me. sessionExpired is only emitted when a request you make fails because you aren't logged in. It doesn't check automatically, it only checks whenever the library makes a request somewhere.
Starting a new confirmation checker without stopping the old one is just fine. It'll stop an old one if you call it while one is running.
I recommend updating to v3.23.1 if you're going to use webchat.