steamutils 1.4.64 → 1.4.65

Sign up to get free protection for your applications and to get access to all the features.
Files changed (234) hide show
  1. package/.idea/codeStyles/Project.xml +1 -0
  2. package/.idea/deployment.xml +14 -0
  3. package/.prettierrc.json +3 -3
  4. package/SteamClient.js +185 -110
  5. package/_steamproto.js +33 -33
  6. package/axios.js +84 -84
  7. package/bufferHelpers.js +115 -115
  8. package/cheerio.js +103 -103
  9. package/const.js +458 -458
  10. package/create_proto.js +96 -96
  11. package/create_remote_file.js +66 -66
  12. package/full_steamproto.js +35 -0
  13. package/helpers/protos.js +48 -48
  14. package/index.js +7764 -7764
  15. package/package.json +1 -1
  16. package/protos/csgo/base_gcmessages.proto +553 -553
  17. package/protos/csgo/base_gcmessages_csgo.proto +547 -547
  18. package/protos/csgo/c_peer2peer_netmessages.proto +55 -55
  19. package/protos/csgo/clientmessages.proto +48 -48
  20. package/protos/csgo/connectionless_netmessages.proto +17 -17
  21. package/protos/csgo/cs_gameevents.proto +35 -35
  22. package/protos/csgo/cs_usercmd.proto +34 -34
  23. package/protos/csgo/cstrike15_gcmessages.proto +1431 -1431
  24. package/protos/csgo/cstrike15_usermessages.proto +592 -592
  25. package/protos/csgo/demo.proto +165 -165
  26. package/protos/csgo/econ_gcmessages.proto +219 -219
  27. package/protos/csgo/enums_clientserver.proto +1529 -1529
  28. package/protos/csgo/fatdemo.proto +125 -125
  29. package/protos/csgo/gameevents.proto +120 -120
  30. package/protos/csgo/gcsdk_gcmessages.proto +323 -323
  31. package/protos/csgo/gcsystemmsgs.proto +243 -243
  32. package/protos/csgo/netmessages.proto +618 -618
  33. package/protos/csgo/networkbasetypes.proto +246 -246
  34. package/protos/csgo/networksystem_protomessages.proto +17 -17
  35. package/protos/csgo/steamdatagram_messages_auth.proto +65 -65
  36. package/protos/csgo/steamdatagram_messages_sdr.proto +534 -534
  37. package/protos/csgo/steammessages_cloud.steamworkssdk.proto +68 -68
  38. package/protos/csgo/steammessages_gamenetworkingui.proto +61 -61
  39. package/protos/csgo/steammessages_helprequest.steamworkssdk.proto +22 -22
  40. package/protos/csgo/steammessages_oauth.steamworkssdk.proto +18 -18
  41. package/protos/csgo/steammessages_player.steamworkssdk.proto +254 -254
  42. package/protos/csgo/steammessages_publishedfile.steamworkssdk.proto +233 -233
  43. package/protos/csgo/steamnetworkingsockets_messages.proto +205 -205
  44. package/protos/csgo/steamnetworkingsockets_messages_certs.proto +39 -39
  45. package/protos/csgo/steamnetworkingsockets_messages_udp.proto +75 -75
  46. package/protos/csgo/te.proto +259 -259
  47. package/protos/csgo/uifontfile_format.proto +13 -13
  48. package/protos/csgo/usercmd.proto +39 -39
  49. package/protos/csgo/usermessages.proto +752 -752
  50. package/protos/google/protobuf/descriptor.proto +281 -281
  51. package/protos/steam/clientmetrics.proto +45 -45
  52. package/protos/steam/content_manifest.proto +62 -62
  53. package/protos/steam/contenthubs.proto +41 -41
  54. package/protos/steam/encrypted_app_ticket.proto +10 -10
  55. package/protos/steam/enums.proto +501 -501
  56. package/protos/steam/enums_clientserver.proto +1508 -1508
  57. package/protos/steam/enums_productinfo.proto +14 -14
  58. package/protos/steam/htmlmessages.proto +1039 -1039
  59. package/protos/steam/offline_ticket.proto +8 -8
  60. package/protos/steam/steamdatagram_messages_auth.proto +65 -65
  61. package/protos/steam/steamdatagram_messages_sdr.proto +533 -533
  62. package/protos/steam/steammessages_accounthardware.steamclient.proto +167 -167
  63. package/protos/steam/steammessages_appoverview.proto +204 -204
  64. package/protos/steam/steammessages_auth.steamclient.proto +375 -375
  65. package/protos/steam/steammessages_broadcast.steamclient.proto +618 -618
  66. package/protos/steam/steammessages_chat.steamclient.proto +1070 -1070
  67. package/protos/steam/steammessages_client_objects.proto +649 -649
  68. package/protos/steam/steammessages_clientlanp2p.proto +43 -43
  69. package/protos/steam/steammessages_clientmetrics.steamclient.proto +192 -192
  70. package/protos/steam/steammessages_clientnotificationtypes.proto +250 -250
  71. package/protos/steam/steammessages_clientserver.proto +392 -392
  72. package/protos/steam/steammessages_clientserver_2.proto +771 -771
  73. package/protos/steam/steammessages_clientserver_appinfo.proto +131 -131
  74. package/protos/steam/steammessages_clientserver_friends.proto +260 -260
  75. package/protos/steam/steammessages_clientserver_gameservers.proto +159 -159
  76. package/protos/steam/steammessages_clientserver_lbs.proto +70 -70
  77. package/protos/steam/steammessages_clientserver_login.proto +167 -167
  78. package/protos/steam/steammessages_clientserver_mms.proto +233 -233
  79. package/protos/steam/steammessages_clientserver_ucm.proto +207 -207
  80. package/protos/steam/steammessages_clientserver_uds.proto +125 -125
  81. package/protos/steam/steammessages_clientserver_ufs.proto +45 -45
  82. package/protos/steam/steammessages_clientserver_userstats.proto +80 -80
  83. package/protos/steam/steammessages_cloud.steamclient.proto +422 -422
  84. package/protos/steam/steammessages_contentsystem.steamclient.proto +123 -123
  85. package/protos/steam/steammessages_credentials.steamclient.proto +96 -96
  86. package/protos/steam/steammessages_datapublisher.steamclient.proto +102 -102
  87. package/protos/steam/steammessages_depotbuilder.steamclient.proto +99 -99
  88. package/protos/steam/steammessages_deviceauth.steamclient.proto +169 -169
  89. package/protos/steam/steammessages_econ.steamclient.proto +137 -137
  90. package/protos/steam/steammessages_familygroups.steamclient.proto +441 -441
  91. package/protos/steam/steammessages_friendmessages.steamclient.proto +141 -141
  92. package/protos/steam/steammessages_gamenetworking.steamclient.proto +25 -25
  93. package/protos/steam/steammessages_gamenetworkingui.proto +61 -61
  94. package/protos/steam/steammessages_gamenotifications.steamclient.proto +131 -131
  95. package/protos/steam/steammessages_gameservers.steamclient.proto +136 -136
  96. package/protos/steam/steammessages_hiddevices.proto +157 -157
  97. package/protos/steam/steammessages_inventory.steamclient.proto +172 -172
  98. package/protos/steam/steammessages_linkfilter.steamclient.proto +39 -39
  99. package/protos/steam/steammessages_lobbymatchmaking.steamclient.proto +29 -29
  100. package/protos/steam/steammessages_market.steamclient.proto +22 -22
  101. package/protos/steam/steammessages_marketingmessages.steamclient.proto +273 -273
  102. package/protos/steam/steammessages_offline.steamclient.proto +33 -33
  103. package/protos/steam/steammessages_parental.steamclient.proto +262 -262
  104. package/protos/steam/steammessages_parties.steamclient.proto +75 -75
  105. package/protos/steam/steammessages_partnerapps.steamclient.proto +106 -106
  106. package/protos/steam/steammessages_player.steamclient.proto +915 -915
  107. package/protos/steam/steammessages_publishedfile.steamclient.proto +737 -737
  108. package/protos/steam/steammessages_qms.steamclient.proto +111 -111
  109. package/protos/steam/steammessages_remoteclient.proto +100 -100
  110. package/protos/steam/steammessages_remoteclient_discovery.proto +244 -244
  111. package/protos/steam/steammessages_remoteclient_service.steamclient.proto +31 -31
  112. package/protos/steam/steammessages_remoteclient_service_messages.proto +217 -217
  113. package/protos/steam/steammessages_remoteplay.proto +975 -975
  114. package/protos/steam/steammessages_secrets.steamclient.proto +35 -35
  115. package/protos/steam/steammessages_shader.steamclient.proto +89 -89
  116. package/protos/steam/steammessages_site_license.steamclient.proto +103 -103
  117. package/protos/steam/steammessages_sitelicenseclient.proto +38 -38
  118. package/protos/steam/steammessages_siteserverui.proto +130 -130
  119. package/protos/steam/steammessages_steamtv.steamclient.proto +533 -533
  120. package/protos/steam/steammessages_store.steamclient.proto +404 -404
  121. package/protos/steam/steammessages_storebrowse.steamclient.proto +457 -457
  122. package/protos/steam/steammessages_timedtrial.steamclient.proto +40 -40
  123. package/protos/steam/steammessages_twofactor.steamclient.proto +157 -157
  124. package/protos/steam/steammessages_unified_test.steamclient.proto +51 -51
  125. package/protos/steam/steammessages_useraccount.steamclient.proto +211 -211
  126. package/protos/steam/steammessages_vac.steamclient.proto +37 -37
  127. package/protos/steam/steammessages_video.steamclient.proto +68 -68
  128. package/protos/steam/steammessages_virtualcontroller.proto +138 -138
  129. package/protos/steam/steammessages_workshop.steamclient.proto +19 -19
  130. package/protos/steam/steamnetworkingsockets_messages.proto +205 -205
  131. package/protos/steam/steamnetworkingsockets_messages_certs.proto +39 -39
  132. package/protos/steam/steamnetworkingsockets_messages_udp.proto +75 -75
  133. package/protos/steam/webuimessages_achievements.proto +29 -29
  134. package/protos/steam/webuimessages_gamenotes.proto +21 -21
  135. package/protos/steam/webuimessages_gamescope.proto +57 -57
  136. package/protos/steam/webuimessages_steamengine.proto +41 -41
  137. package/protos/steam/webuimessages_steamos.proto +114 -114
  138. package/protos/steam/webuimessages_storagedevicemanager.proto +110 -110
  139. package/protos/steam/webuimessages_systemmanager.proto +17 -17
  140. package/protos/steam/webuimessages_transport.proto +22 -22
  141. package/protos/steam/webuimessages_transportvalidation.proto +111 -111
  142. package/protos/webui/common.proto +4024 -4024
  143. package/protos/webui/service_accountcart.proto +153 -153
  144. package/protos/webui/service_accountlinking.proto +27 -27
  145. package/protos/webui/service_accountprivacy.proto +42 -42
  146. package/protos/webui/service_accountprivateapps.proto +34 -34
  147. package/protos/webui/service_auction.proto +97 -97
  148. package/protos/webui/service_authentication.proto +222 -222
  149. package/protos/webui/service_authenticationsupport.proto +74 -74
  150. package/protos/webui/service_broadcast.proto +562 -562
  151. package/protos/webui/service_chat.proto +11 -11
  152. package/protos/webui/service_chatroom.proto +810 -810
  153. package/protos/webui/service_chatusability.proto +107 -107
  154. package/protos/webui/service_checkout.proto +84 -84
  155. package/protos/webui/service_clan.proto +41 -41
  156. package/protos/webui/service_clanchatrooms.proto +25 -25
  157. package/protos/webui/service_clanfaqs.proto +202 -202
  158. package/protos/webui/service_clientcomm.proto +151 -151
  159. package/protos/webui/service_clientmetrics.proto +22 -22
  160. package/protos/webui/service_cloud.proto +222 -222
  161. package/protos/webui/service_cloudconfigstore.proto +51 -51
  162. package/protos/webui/service_cloudgaming.proto +30 -30
  163. package/protos/webui/service_community.proto +365 -365
  164. package/protos/webui/service_dailydeal.proto +89 -89
  165. package/protos/webui/service_econ.proto +134 -134
  166. package/protos/webui/service_embedded.proto +24 -24
  167. package/protos/webui/service_experimentservice.proto +6 -6
  168. package/protos/webui/service_familygroups.proto +355 -355
  169. package/protos/webui/service_fovasvideo.proto +15 -15
  170. package/protos/webui/service_friendmessages.proto +133 -133
  171. package/protos/webui/service_friendslist.proto +70 -70
  172. package/protos/webui/service_gamenotes.proto +15 -15
  173. package/protos/webui/service_gamerecording.proto +265 -265
  174. package/protos/webui/service_gamerecordingclip.proto +85 -85
  175. package/protos/webui/service_gamerecordingdebug.proto +52 -52
  176. package/protos/webui/service_helprequestlogs.proto +16 -16
  177. package/protos/webui/service_loyaltyrewards.proto +252 -252
  178. package/protos/webui/service_marketingmessages.proto +215 -215
  179. package/protos/webui/service_mobileapp.proto +18 -18
  180. package/protos/webui/service_mobileauth.proto +24 -24
  181. package/protos/webui/service_mobiledevice.proto +26 -26
  182. package/protos/webui/service_mobileperaccount.proto +31 -31
  183. package/protos/webui/service_news.proto +110 -110
  184. package/protos/webui/service_parental.proto +258 -258
  185. package/protos/webui/service_partnermembershipinvite.proto +34 -34
  186. package/protos/webui/service_partnerstorebrowse.proto +28 -28
  187. package/protos/webui/service_phone.proto +51 -51
  188. package/protos/webui/service_physicalgoods.proto +15 -15
  189. package/protos/webui/service_player.proto +918 -918
  190. package/protos/webui/service_promotioneventinvites.proto +109 -109
  191. package/protos/webui/service_promotionplanning.proto +186 -186
  192. package/protos/webui/service_promotionstats.proto +23 -23
  193. package/protos/webui/service_publishedfile.proto +714 -714
  194. package/protos/webui/service_publishing.proto +200 -200
  195. package/protos/webui/service_quest.proto +127 -127
  196. package/protos/webui/service_salefeature.proto +373 -373
  197. package/protos/webui/service_saleitemrewards.proto +54 -54
  198. package/protos/webui/service_shoppingcart.proto +152 -152
  199. package/protos/webui/service_steamawards.proto +76 -76
  200. package/protos/webui/service_steamcharts.proto +75 -75
  201. package/protos/webui/service_steamengine.proto +36 -36
  202. package/protos/webui/service_steamlearn.proto +876 -876
  203. package/protos/webui/service_steamnotification.proto +73 -73
  204. package/protos/webui/service_steamtv.proto +495 -495
  205. package/protos/webui/service_steamvrvoicechat.proto +67 -67
  206. package/protos/webui/service_steamvrwebrtc.proto +48 -48
  207. package/protos/webui/service_storagedevicemanager.proto +104 -104
  208. package/protos/webui/service_store.proto +359 -359
  209. package/protos/webui/service_storeappsimilarity.proto +76 -76
  210. package/protos/webui/service_storebrowse.proto +103 -103
  211. package/protos/webui/service_storemarketing.proto +44 -44
  212. package/protos/webui/service_storequery.proto +103 -103
  213. package/protos/webui/service_storesales.proto +87 -87
  214. package/protos/webui/service_storetopsellers.proto +44 -44
  215. package/protos/webui/service_systemmanager.proto +11 -11
  216. package/protos/webui/service_test_transporterror.proto +6 -6
  217. package/protos/webui/service_transportauth.proto +17 -17
  218. package/protos/webui/service_transportvalidation.proto +69 -69
  219. package/protos/webui/service_twofactor.proto +170 -170
  220. package/protos/webui/service_useraccount.proto +142 -142
  221. package/protos/webui/service_usergameactivity.proto +34 -34
  222. package/protos/webui/service_usergamenotes.proto +70 -70
  223. package/protos/webui/service_usernews.proto +68 -68
  224. package/protos/webui/service_userreviews.proto +97 -97
  225. package/protos/webui/service_video.proto +50 -50
  226. package/protos/webui/service_videoclip.proto +62 -62
  227. package/protos/webui/service_voicechat.proto +139 -139
  228. package/protos/webui/service_webrtc.proto +52 -52
  229. package/remote.js +6784 -6784
  230. package/steamproto.js +34 -34
  231. package/utils.js +986 -986
  232. package/.idea/gbrowser_project.xml +0 -11
  233. package/.idea/git_toolbox_blame.xml +0 -6
  234. package/.idea/git_toolbox_prj.xml +0 -15
@@ -2,6 +2,7 @@
2
2
  <code_scheme name="Project" version="173">
3
3
  <HTMLCodeStyleSettings>
4
4
  <option name="HTML_SPACE_INSIDE_EMPTY_TAG" value="true" />
5
+ <option name="HTML_ENFORCE_QUOTES" value="true" />
5
6
  </HTMLCodeStyleSettings>
6
7
  <JSCodeStyleSettings version="0">
7
8
  <option name="FORCE_SEMICOLON_STYLE" value="true" />
@@ -0,0 +1,14 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="PublishConfigData" remoteFilesAllowedToDisappearOnAutoupload="false">
4
+ <serverData>
5
+ <paths name="botnatridiscord">
6
+ <serverdata>
7
+ <mappings>
8
+ <mapping local="$PROJECT_DIR$" web="/" />
9
+ </mappings>
10
+ </serverdata>
11
+ </paths>
12
+ </serverData>
13
+ </component>
14
+ </project>
package/.prettierrc.json CHANGED
@@ -1,3 +1,3 @@
1
- {
2
- "printWidth": 1000
3
- }
1
+ {
2
+ "printWidth": 1000
3
+ }
package/SteamClient.js CHANGED
@@ -94,7 +94,7 @@ export const SteamClientEvents = {
94
94
  };
95
95
  let isSendingFriendMessages = false;
96
96
 
97
- function SteamClient({ username, cookie, clientJsToken, isAutoRequestFreeLicense = true, isFakeGameScore = true, isPartyRegister = true, isAutoPlay = false, isInvisible = false, autoAcceptTradeRequest = false, autoReconnect = true, MAX_GAME_PLAY = 10, games = null }) {
97
+ function SteamClient({ username, cookie, clientJsToken, isAutoRequestFreeLicense = true, isFakeGameScore = true, isPartyRegister = true, isAutoPlay = false, isInvisible = false, autoAcceptTradeRequest = false, autoReconnect = true, games = null }) {
98
98
  const steamClient = new NodeSteamUser();
99
99
  let prime = null;
100
100
  let state = "Offline"; //InGame, Online, Invisible
@@ -119,11 +119,46 @@ function SteamClient({ username, cookie, clientJsToken, isAutoRequestFreeLicense
119
119
 
120
120
  const onAnyCallbacks = [];
121
121
 
122
- const events = { ...SteamClientEvents };
122
+ /**
123
+ * @type {Object.<string, Array>}
124
+ * @property {Array} user
125
+ * @property {Array} loggedOn
126
+ * @property {Array} csgoOnline
127
+ * @property {Array} csgoClientHello
128
+ * @property {Array} webSession
129
+ * @property {Array} friendMessage
130
+ * @property {Array} friendTyping
131
+ * @property {Array} disconnected
132
+ * @property {Array} error
133
+ * @property {Array} playersProfile
134
+ * @property {Array} fatalError
135
+ * @property {Array} partyInvite
136
+ * @property {Array} friendRelationship
137
+ * @property {Array} tradeOffers
138
+ * @property {Array} offlineMessages
139
+ * @property {Array} friendsList
140
+ * @property {Array} gifts
141
+ * @property {Array} playingState
142
+ * @property {Array} emailInfo
143
+ * @property {Array} accountLimitations
144
+ * @property {Array} wallet
145
+ * @property {Array} licenses
146
+ * @property {Array} logOff
147
+ */
148
+ const events = {};
123
149
  for (const name in SteamClientEvents) {
124
150
  events[name] = [];
125
151
  }
126
152
 
153
+ /**
154
+ * @typedef {Object} GCEvents
155
+ * @property {Array} requestJoinFriendData
156
+ * @property {Array} requestCoPlays
157
+ * @property {Array} partySearch
158
+ * @property {Array} playersProfile
159
+ *
160
+ * @type {GCEvents}
161
+ */
127
162
  const gcEvents = {
128
163
  requestJoinFriendData: [],
129
164
  requestCoPlays: [],
@@ -159,51 +194,23 @@ function SteamClient({ username, cookie, clientJsToken, isAutoRequestFreeLicense
159
194
  }
160
195
 
161
196
  function clearGCCallback(name) {
162
- if (!Array.isArray(name)) {
163
- name = [name];
164
- }
165
- for (const nameE of name) {
166
- switch (typeof nameE) {
167
- case "string":
168
- if (Array.isArray(gcEvents[nameE])) {
169
- //name
170
- for (const eventElement of gcEvents[nameE]) {
171
- if (eventElement.timeout) {
172
- clearTimeout(eventElement.timeout);
173
- }
174
- }
175
- gcEvents[nameE] = [];
176
- } else {
177
- //id
178
- for (const eventsKey in gcEvents) {
179
- if (!Array.isArray(gcEvents[eventsKey])) {
180
- continue;
181
- }
182
- const index = gcEvents[eventsKey].findIndex((e) => e.id === nameE);
183
- if (index > -1) {
184
- if (gcEvents[eventsKey].timeout) {
185
- clearTimeout(gcEvents[eventsKey].timeout);
186
- }
187
- gcEvents[eventsKey].splice(index, 1);
188
- }
189
- }
197
+ for (const [eventName, events] of Object.entries(gcEvents)) {
198
+ if (eventName === name) {
199
+ for (const event of events) {
200
+ if (event.timeout) {
201
+ clearTimeout(event.timeout);
190
202
  }
191
- break;
192
- case "function":
193
- //callback
194
- for (const eventsKey in gcEvents) {
195
- if (!Array.isArray(gcEvents[eventsKey])) {
196
- continue;
197
- }
198
- const index = gcEvents[eventsKey].findIndex((e) => e.callback === nameE);
199
- if (index > -1) {
200
- if (gcEvents[eventsKey].timeout) {
201
- clearTimeout(gcEvents[eventsKey].timeout);
202
- }
203
- gcEvents[eventsKey].splice(index, 1);
204
- }
203
+ }
204
+ events.length = 0;
205
+ } else {
206
+ const removedEvents = _.remove(events, function (e) {
207
+ return Object.values(e).some((v) => v === name);
208
+ });
209
+ for (const removedEvent of removedEvents) {
210
+ if (removedEvent.timeout) {
211
+ clearTimeout(removedEvent.timeout);
205
212
  }
206
- break;
213
+ }
207
214
  }
208
215
  }
209
216
  }
@@ -217,14 +224,14 @@ function SteamClient({ username, cookie, clientJsToken, isAutoRequestFreeLicense
217
224
  return;
218
225
  }
219
226
 
220
- const events = _.remove(gcEvents[name], (item) => !key || item.key === key);
227
+ const removedEvents = _.remove(gcEvents[name], (item) => !key || item.key === key);
221
228
  let _data = null;
222
229
  let calculated = false;
223
230
 
224
- for (const event of events) {
225
- if (event.timeout) {
226
- clearTimeout(event.timeout);
227
- delete event.timeout;
231
+ for (const removedEvent of removedEvents) {
232
+ if (removedEvent.timeout) {
233
+ clearTimeout(removedEvent.timeout);
234
+ delete removedEvent.timeout;
228
235
  }
229
236
 
230
237
  if (!calculated) {
@@ -232,23 +239,22 @@ function SteamClient({ username, cookie, clientJsToken, isAutoRequestFreeLicense
232
239
  _data = typeof data === "function" ? await data() : data;
233
240
  }
234
241
 
235
- event.callback(_data);
242
+ removedEvent.callback(_data);
236
243
  }
237
244
  }
238
245
 
239
- function callEvent(_events, data) {
240
- const eventName = Object.keys(events).find((eventName) => events[eventName] === _events);
241
- eventName && onAnyCallbacks.forEach((cb) => cb?.({ eventName, data }));
246
+ function callEvent(name, data) {
247
+ if (typeof name !== "string") {
248
+ name = Object.keys(events).find((eventName) => events[eventName] === name);
249
+ }
242
250
 
243
- _events?.forEach?.((e) => {
251
+ const _events = events[name];
252
+ onAnyCallbacks.forEach((cb) => cb?.({ eventName: name, data }));
253
+ _events.forEach((e) => {
254
+ clearTimeout(e.timeout);
244
255
  e.callback?.(data);
245
- e.timeout && clearTimeout(e.timeout);
246
- delete e.timeout;
247
- if (e.once) {
248
- delete e.callback;
249
- }
250
256
  });
251
- _.remove(_events, (e) => !e || e?.once);
257
+ _.remove(_events, (e) => !e || e.once);
252
258
  }
253
259
 
254
260
  function onEvent({ name, id, callback, once, timeout }) {
@@ -279,51 +285,23 @@ function SteamClient({ username, cookie, clientJsToken, isAutoRequestFreeLicense
279
285
 
280
286
  // name, id, callback
281
287
  function offEvent(name) {
282
- if (!Array.isArray(name)) {
283
- name = [name];
284
- }
285
- for (const nameE of name) {
286
- switch (typeof nameE) {
287
- case "string":
288
- if (Array.isArray(events[nameE])) {
289
- //name
290
- for (const eventElement of events[nameE]) {
291
- if (eventElement.timeout) {
292
- clearTimeout(eventElement.timeout);
293
- }
294
- }
295
- events[nameE] = [];
296
- } else {
297
- //id
298
- for (const eventsKey in events) {
299
- if (!Array.isArray(events[eventsKey])) {
300
- continue;
301
- }
302
- const index = events[eventsKey].findIndex((e) => e.id === nameE);
303
- if (index > -1) {
304
- if (events[eventsKey].timeout) {
305
- clearTimeout(events[eventsKey].timeout);
306
- }
307
- events[eventsKey].splice(index, 1);
308
- }
309
- }
288
+ for (const [eventName, _events] of Object.entries(events)) {
289
+ if (eventName === name) {
290
+ for (const event of _events) {
291
+ if (event.timeout) {
292
+ clearTimeout(event.timeout);
310
293
  }
311
- break;
312
- case "function":
313
- //callback
314
- for (const eventsKey in events) {
315
- if (!Array.isArray(events[eventsKey])) {
316
- continue;
317
- }
318
- const index = events[eventsKey].findIndex((e) => e.callback === nameE);
319
- if (index > -1) {
320
- if (events[eventsKey].timeout) {
321
- clearTimeout(events[eventsKey].timeout);
322
- }
323
- events[eventsKey].splice(index, 1);
324
- }
294
+ }
295
+ _events.length = 0;
296
+ } else {
297
+ const removedEvents = _.remove(_events, function (e) {
298
+ return Object.values(e).some((v) => v === name);
299
+ });
300
+ for (const removedEvent of removedEvents) {
301
+ if (removedEvent.timeout) {
302
+ clearTimeout(removedEvent.timeout);
325
303
  }
326
- break;
304
+ }
327
305
  }
328
306
  }
329
307
  }
@@ -342,7 +320,7 @@ function SteamClient({ username, cookie, clientJsToken, isAutoRequestFreeLicense
342
320
  delete event.timeout;
343
321
  }
344
322
  }
345
- events[name] = [];
323
+ events[name].length = 0;
346
324
  }
347
325
  onAnyCallbacks.length = 0;
348
326
  }
@@ -429,6 +407,7 @@ function SteamClient({ username, cookie, clientJsToken, isAutoRequestFreeLicense
429
407
  }
430
408
 
431
409
  async function getPersonas(steamIDs) {
410
+ if (isLogOff) return [];
432
411
  if (!steamIDs) return [];
433
412
  if (!Array.isArray(steamIDs)) {
434
413
  steamIDs = [steamIDs];
@@ -491,6 +470,9 @@ function SteamClient({ username, cookie, clientJsToken, isAutoRequestFreeLicense
491
470
  }
492
471
 
493
472
  async function getCookiesWait() {
473
+ if (isLogOff) {
474
+ return;
475
+ }
494
476
  return (
495
477
  getCookies() ||
496
478
  new Promise((resolve) => {
@@ -507,6 +489,9 @@ function SteamClient({ username, cookie, clientJsToken, isAutoRequestFreeLicense
507
489
  }
508
490
 
509
491
  async function gamePlay() {
492
+ if (isLogOff) {
493
+ return;
494
+ }
510
495
  return await gamesPlayed(730);
511
496
  }
512
497
 
@@ -522,9 +507,9 @@ function SteamClient({ username, cookie, clientJsToken, isAutoRequestFreeLicense
522
507
 
523
508
  async function updateAutoGamePlay() {
524
509
  if (isAutoPlay) {
525
- autoGamePlay();
510
+ await autoGamePlay();
526
511
  } else {
527
- offAutoGamePlay();
512
+ await offAutoGamePlay();
528
513
  }
529
514
  }
530
515
 
@@ -537,6 +522,9 @@ function SteamClient({ username, cookie, clientJsToken, isAutoRequestFreeLicense
537
522
  * @returns {Promise.<Array>}
538
523
  */
539
524
  async function partySearch({ prime = false, game_type = "Premier", rank, timeout = 5000 } = {}) {
525
+ if (isLogOff) {
526
+ return;
527
+ }
540
528
  const gameTypeMap = {
541
529
  Competitive: 8,
542
530
  Wingman: 10,
@@ -588,6 +576,9 @@ function SteamClient({ username, cookie, clientJsToken, isAutoRequestFreeLicense
588
576
  }
589
577
 
590
578
  async function createLobby() {
579
+ if (isLogOff) {
580
+ return;
581
+ }
591
582
  if (!steamClient.steamID) {
592
583
  return;
593
584
  }
@@ -639,6 +630,9 @@ function SteamClient({ username, cookie, clientJsToken, isAutoRequestFreeLicense
639
630
  }
640
631
 
641
632
  async function updateLobby(lobbyID) {
633
+ if (isLogOff) {
634
+ return;
635
+ }
642
636
  if (!steamClient.steamID) {
643
637
  return;
644
638
  }
@@ -702,6 +696,9 @@ function SteamClient({ username, cookie, clientJsToken, isAutoRequestFreeLicense
702
696
  }
703
697
 
704
698
  async function invite2Lobby(lobbyID, steamId) {
699
+ if (isLogOff) {
700
+ return;
701
+ }
705
702
  if (!steamClient.steamID) {
706
703
  return;
707
704
  }
@@ -735,6 +732,9 @@ function SteamClient({ username, cookie, clientJsToken, isAutoRequestFreeLicense
735
732
  }
736
733
 
737
734
  async function createThenInvite2Lobby(steamIds, onInvite) {
735
+ if (isLogOff) {
736
+ return;
737
+ }
738
738
  if (!steamClient.steamID) {
739
739
  return;
740
740
  }
@@ -761,6 +761,9 @@ function SteamClient({ username, cookie, clientJsToken, isAutoRequestFreeLicense
761
761
  }
762
762
 
763
763
  async function getLobbyData(lobbyID) {
764
+ if (isLogOff) {
765
+ return;
766
+ }
764
767
  if (!steamClient.steamID) {
765
768
  return;
766
769
  }
@@ -793,6 +796,9 @@ function SteamClient({ username, cookie, clientJsToken, isAutoRequestFreeLicense
793
796
  }
794
797
 
795
798
  async function joinLobby(lobbyID) {
799
+ if (isLogOff) {
800
+ return;
801
+ }
796
802
  log("joinLobby", lobbyID); //SteamID.fromIndividualAccountID(lobbyId).accountid
797
803
 
798
804
  steamClient._send(
@@ -829,6 +835,9 @@ function SteamClient({ username, cookie, clientJsToken, isAutoRequestFreeLicense
829
835
  }
830
836
 
831
837
  async function sendHello() {
838
+ if (isLogOff) {
839
+ return;
840
+ }
832
841
  steamClient.sendToGC(AppID, ESteamProto.ECsgoGCMsg.k_EMsgGCCStrike15_v2_MatchmakingClient2GCHello, {}, Buffer.alloc(0));
833
842
  // steamClient.sendToGC(AppID, ESteamProto.EGCBaseClientMsg.k_EMsgGCClientHello, {}, Buffer.alloc(0));
834
843
 
@@ -846,6 +855,9 @@ function SteamClient({ username, cookie, clientJsToken, isAutoRequestFreeLicense
846
855
  }
847
856
 
848
857
  async function requestCoPlays() {
858
+ if (isLogOff) {
859
+ return;
860
+ }
849
861
  const gcEventId = uuidv4();
850
862
  const response = await ensureLogin(
851
863
  new Promise((resolve) => {
@@ -1807,6 +1819,9 @@ function SteamClient({ username, cookie, clientJsToken, isAutoRequestFreeLicense
1807
1819
  }
1808
1820
 
1809
1821
  function sendFriendTyping(steamId, callback) {
1822
+ if (isLogOff) {
1823
+ return;
1824
+ }
1810
1825
  steamClient.chat.sendFriendTyping(steamId, callback);
1811
1826
  }
1812
1827
 
@@ -1814,6 +1829,9 @@ function SteamClient({ username, cookie, clientJsToken, isAutoRequestFreeLicense
1814
1829
  * usually take 400 -> 800 miliseconds
1815
1830
  * */
1816
1831
  async function getPlayersProfile(steamId) {
1832
+ if (isLogOff) {
1833
+ return;
1834
+ }
1817
1835
  const accountid = new SteamID(steamId).accountid;
1818
1836
  const gcEventId = uuidv4();
1819
1837
  const result = await ensureLogin(
@@ -1841,6 +1859,9 @@ function SteamClient({ username, cookie, clientJsToken, isAutoRequestFreeLicense
1841
1859
  }
1842
1860
 
1843
1861
  async function checkPlayerPrimeStatus(steamId) {
1862
+ if (isLogOff) {
1863
+ return;
1864
+ }
1844
1865
  const profile = await getPlayersProfile(steamId);
1845
1866
  if (!profile) return false;
1846
1867
 
@@ -1972,6 +1993,7 @@ function SteamClient({ username, cookie, clientJsToken, isAutoRequestFreeLicense
1972
1993
  */
1973
1994
  async function logOn(token) {
1974
1995
  try {
1996
+ isLogOff = false;
1975
1997
  steamClient.logOn({
1976
1998
  ...token,
1977
1999
  steamId: new SteamID(token.steamid),
@@ -2087,8 +2109,11 @@ function SteamClient({ username, cookie, clientJsToken, isAutoRequestFreeLicense
2087
2109
  }
2088
2110
 
2089
2111
  async function logOff() {
2112
+ log("logOff");
2090
2113
  isLogOff = true;
2091
2114
 
2115
+ MessageQueue.length = 0;
2116
+
2092
2117
  callEvent(events.logOff);
2093
2118
  events.logOff = [];
2094
2119
 
@@ -2111,9 +2136,11 @@ function SteamClient({ username, cookie, clientJsToken, isAutoRequestFreeLicense
2111
2136
  delete steamClient.logOnResult;
2112
2137
  delete steamClient._httpClient;
2113
2138
  delete steamClient._lastChosenCM;
2114
- try {
2115
- steamClient._connection.end();
2116
- } catch (e) {}
2139
+ steamClient._connection.end(true);
2140
+
2141
+ for (const connKey in steamClient._connection) {
2142
+ delete steamClient._connection[connKey];
2143
+ }
2117
2144
  delete steamClient._connection;
2118
2145
  delete steamClient.accountInfo;
2119
2146
  delete steamClient.emailInfo;
@@ -2138,6 +2165,7 @@ function SteamClient({ username, cookie, clientJsToken, isAutoRequestFreeLicense
2138
2165
  }
2139
2166
 
2140
2167
  async function init() {
2168
+ isLogOff = false;
2141
2169
  bindEvent();
2142
2170
  const logged = await login();
2143
2171
  if (logged) {
@@ -2153,6 +2181,9 @@ function SteamClient({ username, cookie, clientJsToken, isAutoRequestFreeLicense
2153
2181
  }
2154
2182
 
2155
2183
  function partyRegister() {
2184
+ if (isLogOff) {
2185
+ return;
2186
+ }
2156
2187
  if (prime === null) {
2157
2188
  _partyRegister(true);
2158
2189
  _partyRegister(false);
@@ -2162,6 +2193,10 @@ function SteamClient({ username, cookie, clientJsToken, isAutoRequestFreeLicense
2162
2193
  }
2163
2194
 
2164
2195
  function _partyRegister(prime) {
2196
+ if (isLogOff) {
2197
+ return;
2198
+ }
2199
+
2165
2200
  log("partyRegister", prime);
2166
2201
  lastTimePartyRegister = Date.now();
2167
2202
  steamClient.sendToGC(
@@ -2183,6 +2218,10 @@ function SteamClient({ username, cookie, clientJsToken, isAutoRequestFreeLicense
2183
2218
  const MessageQueue = [];
2184
2219
 
2185
2220
  async function _execMessageQueue() {
2221
+ if (isLogOff) {
2222
+ return;
2223
+ }
2224
+
2186
2225
  if (isSendingFriendMessages) {
2187
2226
  return;
2188
2227
  }
@@ -2201,6 +2240,9 @@ function SteamClient({ username, cookie, clientJsToken, isAutoRequestFreeLicense
2201
2240
  async function _sendFriendMessage(steamId, message) {
2202
2241
  let result = null;
2203
2242
  for (let i = 0; i < 10; i++) {
2243
+ if (isLogOff) {
2244
+ return;
2245
+ }
2204
2246
  result = await new Promise((resolve) => {
2205
2247
  steamClient.chat.sendFriendMessage(steamId, message, undefined, function (...arg) {
2206
2248
  resolve(arg);
@@ -2218,6 +2260,9 @@ function SteamClient({ username, cookie, clientJsToken, isAutoRequestFreeLicense
2218
2260
  }
2219
2261
 
2220
2262
  async function sendFriendMessage(steamId, message) {
2263
+ if (isLogOff) {
2264
+ return;
2265
+ }
2221
2266
  return new Promise((resolve) => {
2222
2267
  MessageQueue.push({ steamId, message, callback: resolve });
2223
2268
  _execMessageQueue();
@@ -2323,6 +2368,9 @@ function SteamClient({ username, cookie, clientJsToken, isAutoRequestFreeLicense
2323
2368
  }
2324
2369
 
2325
2370
  function doFakeGameScore() {
2371
+ if (isLogOff) {
2372
+ return;
2373
+ }
2326
2374
  const maxRound = Math.random() > 0.7 ? 16 : 12;
2327
2375
  const maps = ["cs_agency", "cs_assault", "cs_italy", "cs_militia", "cs_office", "de_ancient", "de_anubis", "de_bank", "de_boyard", "de_cache", "de_canals", "de_cbble", "de_chalice", "de_dust2", "de_inferno", "de_lake", "de_mirage", "de_nuke", "de_overpass", "de_safehouse", "de_sugarcane", "de_train", "de_tuscan", "de_vertigo", "de_thera", "de_mills", "de_memento", "de_assembly", "training1"];
2328
2376
 
@@ -2404,6 +2452,9 @@ function SteamClient({ username, cookie, clientJsToken, isAutoRequestFreeLicense
2404
2452
  }
2405
2453
 
2406
2454
  async function gamesPlayed(apps) {
2455
+ if (isLogOff) {
2456
+ return;
2457
+ }
2407
2458
  if (!Array.isArray(apps)) {
2408
2459
  apps = [apps];
2409
2460
  }
@@ -2441,6 +2492,9 @@ function SteamClient({ username, cookie, clientJsToken, isAutoRequestFreeLicense
2441
2492
  }
2442
2493
 
2443
2494
  function getFriendsList() {
2495
+ if (isLogOff) {
2496
+ return;
2497
+ }
2444
2498
  const methodName = "FriendsList.GetFriendsList#1";
2445
2499
  const { users, myFriends } = steamClient; //object
2446
2500
  /*
@@ -2480,6 +2534,9 @@ function SteamClient({ username, cookie, clientJsToken, isAutoRequestFreeLicense
2480
2534
  }
2481
2535
 
2482
2536
  async function getUserOwnedApps(steamId = steamClient.steamID) {
2537
+ if (isLogOff) {
2538
+ return;
2539
+ }
2483
2540
  if (!steamId) {
2484
2541
  return [];
2485
2542
  }
@@ -2536,6 +2593,9 @@ function SteamClient({ username, cookie, clientJsToken, isAutoRequestFreeLicense
2536
2593
  }
2537
2594
 
2538
2595
  async function requestJoinFriendData(token, version) {
2596
+ if (isLogOff) {
2597
+ return;
2598
+ }
2539
2599
  if (!steamClient.steamID) {
2540
2600
  return;
2541
2601
  }
@@ -2578,6 +2638,9 @@ function SteamClient({ username, cookie, clientJsToken, isAutoRequestFreeLicense
2578
2638
  }
2579
2639
 
2580
2640
  function redeemFreeReward(itemIds, generation_time) {
2641
+ if (isLogOff) {
2642
+ return;
2643
+ }
2581
2644
  console.log(`Sent message to GC: AppID ${AppID}, MessageType ${ESteamProto.ECsgoGCMsg.k_EMsgGCCStrike15_v2_ClientRedeemFreeReward}`);
2582
2645
 
2583
2646
  const encodedMessages = new SteamProto(SteamProtoType.CMsgGCCstrike15_v2_ClientRedeemFreeReward).protoEncode({
@@ -2598,6 +2661,9 @@ function SteamClient({ username, cookie, clientJsToken, isAutoRequestFreeLicense
2598
2661
  }
2599
2662
 
2600
2663
  function requestRankingInfo() {
2664
+ if (isLogOff) {
2665
+ return;
2666
+ }
2601
2667
  return new Promise((resolve) => {
2602
2668
  const timeout = setTimeout(function () {
2603
2669
  resolve();
@@ -2633,6 +2699,9 @@ function SteamClient({ username, cookie, clientJsToken, isAutoRequestFreeLicense
2633
2699
  }
2634
2700
 
2635
2701
  function acknowledgePenalty() {
2702
+ if (isLogOff) {
2703
+ return;
2704
+ }
2636
2705
  steamClient.sendToGC(
2637
2706
  730,
2638
2707
  ESteamProto.ECsgoGCMsg.k_EMsgGCCStrike15_v2_AcknowledgePenalty,
@@ -2644,6 +2713,9 @@ function SteamClient({ username, cookie, clientJsToken, isAutoRequestFreeLicense
2644
2713
  }
2645
2714
 
2646
2715
  async function ensureLogin(promise) {
2716
+ if (isLogOff) {
2717
+ return null;
2718
+ }
2647
2719
  const logOffEventId = uuidv4();
2648
2720
  const result = await Promise.race([
2649
2721
  new Promise((resolve) => {
@@ -2697,6 +2769,9 @@ function SteamClient({ username, cookie, clientJsToken, isAutoRequestFreeLicense
2697
2769
  getPersonaName,
2698
2770
  async getPlayersProfile(steamId, retry = 3) {
2699
2771
  for (let i = 0; i < retry; i++) {
2772
+ if (isLogOff) {
2773
+ return;
2774
+ }
2700
2775
  const profile = await getPlayersProfile(steamId);
2701
2776
  if (profile) {
2702
2777
  return profile;
package/_steamproto.js CHANGED
@@ -1,33 +1,33 @@
1
- import path from "path";
2
- import { fileURLToPath } from "url";
3
- import Protobuf from "protobufjs";
4
-
5
- const __filename = fileURLToPath(import.meta.url);
6
- const __dirname = path.dirname(__filename);
7
-
8
- export class SteamProto {
9
- constructor(proto) {
10
- this._proto = proto;
11
- }
12
-
13
- toProto() {
14
- const root = new Protobuf.Root().loadSync(path.join(`${__dirname}/protos/`, this._proto.filename), {
15
- keepCase: true,
16
- });
17
- return root[this._proto.name];
18
- }
19
-
20
- protoEncode(obj) {
21
- const protobuf = this.toProto();
22
- return protobuf.encode(protobuf.create(obj)).finish();
23
- }
24
-
25
- protoEncodeBase64(obj) {
26
- return this.protoEncode(obj).toString("base64");
27
- }
28
-
29
- protoDecode(obj) {
30
- const protobuf = this.toProto();
31
- return protobuf.toObject(protobuf.decode(obj), { defaults: true });
32
- }
33
- }
1
+ import path from "path";
2
+ import { fileURLToPath } from "url";
3
+ import Protobuf from "protobufjs";
4
+
5
+ const __filename = fileURLToPath(import.meta.url);
6
+ const __dirname = path.dirname(__filename);
7
+
8
+ export class SteamProto {
9
+ constructor(proto) {
10
+ this._proto = proto;
11
+ }
12
+
13
+ toProto() {
14
+ const root = new Protobuf.Root().loadSync(path.join(`${__dirname}/protos/`, this._proto.filename), {
15
+ keepCase: true,
16
+ });
17
+ return root[this._proto.name];
18
+ }
19
+
20
+ protoEncode(obj) {
21
+ const protobuf = this.toProto();
22
+ return protobuf.encode(protobuf.create(obj)).finish();
23
+ }
24
+
25
+ protoEncodeBase64(obj) {
26
+ return this.protoEncode(obj).toString("base64");
27
+ }
28
+
29
+ protoDecode(obj) {
30
+ const protobuf = this.toProto();
31
+ return protobuf.toObject(protobuf.decode(obj), { defaults: true });
32
+ }
33
+ }