· 6 years ago · Sep 09, 2019, 04:56 PM
1var SteamCommunity = require('steamcommunity');
2var SteamTotp = require('steam-totp');
3var TradeOfferManager = require('steam-tradeoffer-manager');
4var fs = require('fs');
5
6module.exports = function(opt, callback) {
7
8 var steam = new SteamCommunity();
9 var manager = new TradeOfferManager({
10 "domain": opt.domain,
11 "language": 'en',
12 "pollInterval": 5000,
13 "cancelTime": 1000 * 60 * 5 //5 mins
14 });
15
16 manager.name = opt.name;
17
18 SteamTotp.getTimeOffset(run);
19
20 function run(err, offset, latency) {
21
22 if (err) {
23 callback(err);
24 return;
25 }
26 console.log("OFFSET TEST:", offset, latency);
27 // Steam logon options
28 var logOnOptions = {
29 "accountName": opt.name,
30 "password": opt.pass,
31 "twoFactorCode": SteamTotp.getAuthCode(opt.shared_secret, offset)
32 };
33
34 console.log("logOnOptions:", logOnOptions);
35
36 if (fs.existsSync(opt.name + '_steamguard.txt')) {
37 logOnOptions.steamguard = fs.readFileSync(opt.name + '_steamguard.txt').toString('utf8');
38 }
39
40 if (fs.existsSync(opt.name + '_polldata.json')) {
41 manager.pollData = JSON.parse(fs.readFileSync(opt.name + '_polldata.json'));
42 }
43
44 steam.login(logOnOptions, function(err, sessionID, cookies, steamguard) {
45 if (err) {
46 callback(err);
47 return;
48 }
49
50 fs.writeFile(opt.name + '_steamguard.txt', steamguard);
51
52 console.log("Logged into Steam");
53
54 manager.setCookies(cookies, function(err) {
55 if (err) {
56 callback(err);
57 return;
58 }
59 console.log("Got API key: " + manager.apiKey);
60
61
62 //execute to get it running
63 setTimeout(checkLoginStatus, 1000 * 60 * 10);
64
65 steam.profileSettings({
66 profile: 3,
67 comments: 2,
68 inventory: 3
69 }, function(err, response) {
70 if (err) {
71 return console.log('Privacy settings not modified.')
72 }
73 })
74
75 //probably not needed?
76 steam.on('confKeyNeeded', function(tag, callback) {
77 var time = Math.floor(Date.now() / 1000);
78 callback(null, time, SteamTotp.getConfirmationKey(opt.identity_secret, time, tag));
79 });
80
81 // steam.startConfirmationChecker(15 * 1000, opt.identity_secret);
82 // steam.checkConfirmations();
83
84 callback(null, {
85 steam: steam,
86 manager: manager,
87 account: opt
88 })
89 });
90
91 });
92
93 function loginSetCookie() {
94 SteamTotp.getTimeOffset((err, offset) => {
95
96 if (err) return setTimeout(loginSetCookie, 1000 * 60 * 1);
97
98 logOnOptions.twoFactorCode = SteamTotp.getAuthCode(opt.shared_secret, offset);
99 steam.login(logOnOptions, function(err, sessionID, cookies, steamguard) {
100 if (err) {
101 console.log("loginSetCookie: " + err, new Date())
102 return setTimeout(loginSetCookie, 1000 * 60 * 1);
103 }
104
105 // steam.checkConfirmations();
106 return manager.setCookies(cookies);
107 });
108
109 })
110 }
111
112 steam.on('sessionExpired', loginSetCookie)
113
114 //check if still logged in every...
115 function checkLoginStatus() {
116 steam.loggedIn(function(err, loggedIn, familyView) {
117 //couldnt check status
118 if (err) {
119 console.log("checkLoginStatus: " + err, new Date());
120 //check back in 5 minutes
121 return setTimeout(checkLoginStatus, 1000 * 60 * 5);
122 }
123 //not logged in
124 if (!loggedIn) {
125 console.log("checkLoginStatus: offline; retrying", new Date());
126 //login in 3 minutes
127 return setTimeout(loginSetCookie, 1000 * 60 * 3);
128 }
129 console.log("checkLoginStatus: fine", new Date())
130 //check back in 5 minutes
131 return setTimeout(checkLoginStatus, 1000 * 60 * 5);
132 });
133 }
134
135 manager.on('pollData', function(pollData) {
136 fs.writeFile(opt.name + '_polldata.json', JSON.stringify(pollData));
137 });
138
139 }
140
141}