steamutils 1.4.21 → 1.4.23

Sign up to get free protection for your applications and to get access to all the features.
Files changed (239) hide show
  1. package/.idea/codeStyles/Project.xml +1 -0
  2. package/.idea/deployment.xml +14 -0
  3. package/.idea/jsLibraryMappings.xml +6 -0
  4. package/.prettierrc.json +3 -3
  5. package/SteamClient.js +2658 -2658
  6. package/bufferHelpers.js +115 -115
  7. package/cheerio.js +103 -103
  8. package/const.js +336 -336
  9. package/create_remote_file.js +66 -66
  10. package/index.js +284 -3
  11. package/package.json +1 -1
  12. package/protos/csgo/base_gcmessages.proto +553 -553
  13. package/protos/csgo/base_gcmessages_csgo.proto +547 -547
  14. package/protos/csgo/c_peer2peer_netmessages.proto +55 -55
  15. package/protos/csgo/clientmessages.proto +48 -48
  16. package/protos/csgo/connectionless_netmessages.proto +17 -17
  17. package/protos/csgo/cs_gameevents.proto +35 -35
  18. package/protos/csgo/cs_usercmd.proto +34 -34
  19. package/protos/csgo/cstrike15_gcmessages.proto +1431 -1431
  20. package/protos/csgo/cstrike15_usermessages.proto +592 -592
  21. package/protos/csgo/demo.proto +165 -165
  22. package/protos/csgo/econ_gcmessages.proto +219 -219
  23. package/protos/csgo/engine_gcmessages.proto +14 -14
  24. package/protos/csgo/enums_clientserver.proto +1529 -1529
  25. package/protos/csgo/fatdemo.proto +125 -125
  26. package/protos/csgo/gameevents.proto +120 -120
  27. package/protos/csgo/gcsdk_gcmessages.proto +323 -323
  28. package/protos/csgo/gcsystemmsgs.proto +243 -243
  29. package/protos/csgo/netmessages.proto +618 -618
  30. package/protos/csgo/network_connection.proto +126 -126
  31. package/protos/csgo/networkbasetypes.proto +246 -246
  32. package/protos/csgo/networksystem_protomessages.proto +17 -17
  33. package/protos/csgo/steamdatagram_messages_auth.proto +65 -65
  34. package/protos/csgo/steamdatagram_messages_sdr.proto +534 -534
  35. package/protos/csgo/steammessages.proto +620 -620
  36. package/protos/csgo/steammessages_base.proto +301 -301
  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/steammessages_unified_base.steamworkssdk.proto +30 -30
  44. package/protos/csgo/steamnetworkingsockets_messages.proto +205 -205
  45. package/protos/csgo/steamnetworkingsockets_messages_certs.proto +39 -39
  46. package/protos/csgo/steamnetworkingsockets_messages_udp.proto +75 -75
  47. package/protos/csgo/te.proto +259 -259
  48. package/protos/csgo/uifontfile_format.proto +13 -13
  49. package/protos/csgo/usercmd.proto +39 -39
  50. package/protos/csgo/usermessages.proto +752 -752
  51. package/protos/csgo/valveextensions.proto +17 -17
  52. package/protos/google/protobuf/descriptor.proto +281 -281
  53. package/protos/steam/clientmetrics.proto +45 -45
  54. package/protos/steam/content_manifest.proto +62 -62
  55. package/protos/steam/contenthubs.proto +41 -41
  56. package/protos/steam/encrypted_app_ticket.proto +10 -10
  57. package/protos/steam/enums.proto +501 -501
  58. package/protos/steam/enums_clientserver.proto +1508 -1508
  59. package/protos/steam/enums_productinfo.proto +14 -14
  60. package/protos/steam/htmlmessages.proto +1039 -1039
  61. package/protos/steam/offline_ticket.proto +8 -8
  62. package/protos/steam/steamdatagram_messages_auth.proto +65 -65
  63. package/protos/steam/steamdatagram_messages_sdr.proto +533 -533
  64. package/protos/steam/steammessages_accounthardware.steamclient.proto +167 -167
  65. package/protos/steam/steammessages_appoverview.proto +204 -204
  66. package/protos/steam/steammessages_auth.steamclient.proto +375 -375
  67. package/protos/steam/steammessages_base.proto +335 -335
  68. package/protos/steam/steammessages_broadcast.steamclient.proto +618 -618
  69. package/protos/steam/steammessages_chat.steamclient.proto +1070 -1070
  70. package/protos/steam/steammessages_client_objects.proto +649 -649
  71. package/protos/steam/steammessages_clientlanp2p.proto +43 -43
  72. package/protos/steam/steammessages_clientmetrics.steamclient.proto +192 -192
  73. package/protos/steam/steammessages_clientnotificationtypes.proto +250 -250
  74. package/protos/steam/steammessages_clientserver.proto +392 -392
  75. package/protos/steam/steammessages_clientserver_2.proto +771 -771
  76. package/protos/steam/steammessages_clientserver_appinfo.proto +131 -131
  77. package/protos/steam/steammessages_clientserver_friends.proto +260 -260
  78. package/protos/steam/steammessages_clientserver_gameservers.proto +159 -159
  79. package/protos/steam/steammessages_clientserver_lbs.proto +70 -70
  80. package/protos/steam/steammessages_clientserver_login.proto +167 -167
  81. package/protos/steam/steammessages_clientserver_mms.proto +233 -233
  82. package/protos/steam/steammessages_clientserver_ucm.proto +207 -207
  83. package/protos/steam/steammessages_clientserver_uds.proto +125 -125
  84. package/protos/steam/steammessages_clientserver_ufs.proto +45 -45
  85. package/protos/steam/steammessages_clientserver_userstats.proto +80 -80
  86. package/protos/steam/steammessages_clientsettings.proto +208 -208
  87. package/protos/steam/steammessages_cloud.steamclient.proto +422 -422
  88. package/protos/steam/steammessages_contentsystem.steamclient.proto +123 -123
  89. package/protos/steam/steammessages_credentials.steamclient.proto +96 -96
  90. package/protos/steam/steammessages_datapublisher.steamclient.proto +102 -102
  91. package/protos/steam/steammessages_depotbuilder.steamclient.proto +99 -99
  92. package/protos/steam/steammessages_deviceauth.steamclient.proto +169 -169
  93. package/protos/steam/steammessages_econ.steamclient.proto +137 -137
  94. package/protos/steam/steammessages_familygroups.steamclient.proto +441 -441
  95. package/protos/steam/steammessages_friendmessages.steamclient.proto +141 -141
  96. package/protos/steam/steammessages_gamenetworking.steamclient.proto +25 -25
  97. package/protos/steam/steammessages_gamenetworkingui.proto +61 -61
  98. package/protos/steam/steammessages_gamenotifications.steamclient.proto +131 -131
  99. package/protos/steam/steammessages_gameservers.steamclient.proto +136 -136
  100. package/protos/steam/steammessages_hiddevices.proto +157 -157
  101. package/protos/steam/steammessages_inventory.steamclient.proto +172 -172
  102. package/protos/steam/steammessages_linkfilter.steamclient.proto +39 -39
  103. package/protos/steam/steammessages_lobbymatchmaking.steamclient.proto +29 -29
  104. package/protos/steam/steammessages_market.steamclient.proto +22 -22
  105. package/protos/steam/steammessages_marketingmessages.steamclient.proto +273 -273
  106. package/protos/steam/steammessages_offline.steamclient.proto +33 -33
  107. package/protos/steam/steammessages_parental.steamclient.proto +262 -262
  108. package/protos/steam/steammessages_parties.steamclient.proto +75 -75
  109. package/protos/steam/steammessages_partnerapps.steamclient.proto +106 -106
  110. package/protos/steam/steammessages_player.steamclient.proto +915 -915
  111. package/protos/steam/steammessages_publishedfile.steamclient.proto +737 -737
  112. package/protos/steam/steammessages_qms.steamclient.proto +111 -111
  113. package/protos/steam/steammessages_remoteclient.proto +100 -100
  114. package/protos/steam/steammessages_remoteclient_discovery.proto +244 -244
  115. package/protos/steam/steammessages_remoteclient_service.steamclient.proto +31 -31
  116. package/protos/steam/steammessages_remoteclient_service_messages.proto +217 -217
  117. package/protos/steam/steammessages_remoteplay.proto +975 -975
  118. package/protos/steam/steammessages_secrets.steamclient.proto +35 -35
  119. package/protos/steam/steammessages_shader.steamclient.proto +89 -89
  120. package/protos/steam/steammessages_site_license.steamclient.proto +103 -103
  121. package/protos/steam/steammessages_sitelicenseclient.proto +38 -38
  122. package/protos/steam/steammessages_siteserverui.proto +130 -130
  123. package/protos/steam/steammessages_steamtv.steamclient.proto +533 -533
  124. package/protos/steam/steammessages_store.steamclient.proto +404 -404
  125. package/protos/steam/steammessages_storebrowse.steamclient.proto +457 -457
  126. package/protos/steam/steammessages_timedtrial.steamclient.proto +40 -40
  127. package/protos/steam/steammessages_twofactor.steamclient.proto +157 -157
  128. package/protos/steam/steammessages_unified_base.steamclient.proto +45 -45
  129. package/protos/steam/steammessages_unified_test.steamclient.proto +51 -51
  130. package/protos/steam/steammessages_useraccount.steamclient.proto +211 -211
  131. package/protos/steam/steammessages_vac.steamclient.proto +37 -37
  132. package/protos/steam/steammessages_video.steamclient.proto +68 -68
  133. package/protos/steam/steammessages_virtualcontroller.proto +138 -138
  134. package/protos/steam/steammessages_workshop.steamclient.proto +19 -19
  135. package/protos/steam/steamnetworkingsockets_messages.proto +205 -205
  136. package/protos/steam/steamnetworkingsockets_messages_certs.proto +39 -39
  137. package/protos/steam/steamnetworkingsockets_messages_udp.proto +75 -75
  138. package/protos/steam/webuimessages_achievements.proto +29 -29
  139. package/protos/steam/webuimessages_base.proto +24 -24
  140. package/protos/steam/webuimessages_gamenotes.proto +21 -21
  141. package/protos/steam/webuimessages_gamescope.proto +57 -57
  142. package/protos/steam/webuimessages_steamengine.proto +41 -41
  143. package/protos/steam/webuimessages_steamos.proto +114 -114
  144. package/protos/steam/webuimessages_storagedevicemanager.proto +110 -110
  145. package/protos/steam/webuimessages_systemmanager.proto +17 -17
  146. package/protos/steam/webuimessages_transport.proto +22 -22
  147. package/protos/steam/webuimessages_transportvalidation.proto +111 -111
  148. package/protos/webui/common.proto +4024 -4024
  149. package/protos/webui/common_base.proto +27 -27
  150. package/protos/webui/service_accountcart.proto +153 -153
  151. package/protos/webui/service_accountlinking.proto +27 -27
  152. package/protos/webui/service_accountprivacy.proto +42 -42
  153. package/protos/webui/service_accountprivateapps.proto +34 -34
  154. package/protos/webui/service_auction.proto +97 -97
  155. package/protos/webui/service_authentication.proto +222 -222
  156. package/protos/webui/service_authenticationsupport.proto +74 -74
  157. package/protos/webui/service_broadcast.proto +562 -562
  158. package/protos/webui/service_chat.proto +11 -11
  159. package/protos/webui/service_chatroom.proto +810 -810
  160. package/protos/webui/service_chatusability.proto +107 -107
  161. package/protos/webui/service_checkout.proto +84 -84
  162. package/protos/webui/service_clan.proto +41 -41
  163. package/protos/webui/service_clanchatrooms.proto +25 -25
  164. package/protos/webui/service_clanfaqs.proto +202 -202
  165. package/protos/webui/service_clientcomm.proto +151 -151
  166. package/protos/webui/service_clientmetrics.proto +22 -22
  167. package/protos/webui/service_cloud.proto +222 -222
  168. package/protos/webui/service_cloudconfigstore.proto +51 -51
  169. package/protos/webui/service_cloudgaming.proto +30 -30
  170. package/protos/webui/service_community.proto +365 -365
  171. package/protos/webui/service_dailydeal.proto +89 -89
  172. package/protos/webui/service_econ.proto +134 -134
  173. package/protos/webui/service_embedded.proto +24 -24
  174. package/protos/webui/service_experimentservice.proto +6 -6
  175. package/protos/webui/service_familygroups.proto +355 -355
  176. package/protos/webui/service_fovasvideo.proto +15 -15
  177. package/protos/webui/service_friendmessages.proto +133 -133
  178. package/protos/webui/service_friendslist.proto +70 -70
  179. package/protos/webui/service_gamenotes.proto +15 -15
  180. package/protos/webui/service_gamerecording.proto +265 -265
  181. package/protos/webui/service_gamerecordingclip.proto +85 -85
  182. package/protos/webui/service_gamerecordingdebug.proto +52 -52
  183. package/protos/webui/service_helprequestlogs.proto +16 -16
  184. package/protos/webui/service_loyaltyrewards.proto +252 -252
  185. package/protos/webui/service_marketingmessages.proto +215 -215
  186. package/protos/webui/service_mobileapp.proto +18 -18
  187. package/protos/webui/service_mobileauth.proto +24 -24
  188. package/protos/webui/service_mobiledevice.proto +26 -26
  189. package/protos/webui/service_mobileperaccount.proto +31 -31
  190. package/protos/webui/service_news.proto +110 -110
  191. package/protos/webui/service_parental.proto +258 -258
  192. package/protos/webui/service_partnermembershipinvite.proto +34 -34
  193. package/protos/webui/service_partnerstorebrowse.proto +28 -28
  194. package/protos/webui/service_phone.proto +51 -51
  195. package/protos/webui/service_physicalgoods.proto +15 -15
  196. package/protos/webui/service_player.proto +918 -918
  197. package/protos/webui/service_promotioneventinvites.proto +109 -109
  198. package/protos/webui/service_promotionplanning.proto +186 -186
  199. package/protos/webui/service_promotionstats.proto +23 -23
  200. package/protos/webui/service_publishedfile.proto +714 -714
  201. package/protos/webui/service_publishing.proto +200 -200
  202. package/protos/webui/service_quest.proto +127 -127
  203. package/protos/webui/service_salefeature.proto +373 -373
  204. package/protos/webui/service_saleitemrewards.proto +54 -54
  205. package/protos/webui/service_shoppingcart.proto +152 -152
  206. package/protos/webui/service_steamawards.proto +76 -76
  207. package/protos/webui/service_steamcharts.proto +75 -75
  208. package/protos/webui/service_steamengine.proto +36 -36
  209. package/protos/webui/service_steamlearn.proto +876 -876
  210. package/protos/webui/service_steamnotification.proto +73 -73
  211. package/protos/webui/service_steamtv.proto +495 -495
  212. package/protos/webui/service_steamvrvoicechat.proto +67 -67
  213. package/protos/webui/service_steamvrwebrtc.proto +48 -48
  214. package/protos/webui/service_storagedevicemanager.proto +104 -104
  215. package/protos/webui/service_store.proto +359 -359
  216. package/protos/webui/service_storeappsimilarity.proto +76 -76
  217. package/protos/webui/service_storebrowse.proto +103 -103
  218. package/protos/webui/service_storemarketing.proto +44 -44
  219. package/protos/webui/service_storequery.proto +103 -103
  220. package/protos/webui/service_storesales.proto +87 -87
  221. package/protos/webui/service_storetopsellers.proto +44 -44
  222. package/protos/webui/service_systemmanager.proto +11 -11
  223. package/protos/webui/service_test_transporterror.proto +6 -6
  224. package/protos/webui/service_transportauth.proto +17 -17
  225. package/protos/webui/service_transportvalidation.proto +69 -69
  226. package/protos/webui/service_twofactor.proto +170 -170
  227. package/protos/webui/service_useraccount.proto +142 -142
  228. package/protos/webui/service_usergameactivity.proto +34 -34
  229. package/protos/webui/service_usergamenotes.proto +70 -70
  230. package/protos/webui/service_usernews.proto +68 -68
  231. package/protos/webui/service_userreviews.proto +97 -97
  232. package/protos/webui/service_video.proto +50 -50
  233. package/protos/webui/service_videoclip.proto +62 -62
  234. package/protos/webui/service_voicechat.proto +139 -139
  235. package/protos/webui/service_webrtc.proto +52 -52
  236. package/remote.js +6784 -6259
  237. package/utils.js +168 -168
  238. package/.idea/git_toolbox_blame.xml +0 -6
  239. package/.idea/git_toolbox_prj.xml +0 -15
@@ -1,66 +1,66 @@
1
- import SteamUser from "./index.js";
2
- import _ from "lodash";
3
-
4
- (async function () {
5
- const xx = SteamUser;
6
-
7
- let json = "";
8
-
9
- function doWrite(user, is_static) {
10
- for (const methodName of Object.getOwnPropertyNames(user)) {
11
- if (methodName === "constructor" || methodName === "length" || methodName === "name" || methodName === "prototype" || methodName === "RequestXML_TooManyRequests" || methodName === "MAX_RETRY") {
12
- continue;
13
- }
14
- const fnString = user[methodName].toString().trim();
15
- const async = "async";
16
- // const async = fnString.startsWith("async") ? "async" : "";
17
- let params = fnString.split("(")[1].split(")")[0];
18
- const paramsList = params.split(",");
19
- for (let i = 0; i < paramsList.length; i++) {
20
- if (paramsList[i].includes("=")) {
21
- paramsList[i] = paramsList[i].split("=")[0].trim();
22
- }
23
- }
24
- params = paramsList.join(", ").trim();
25
- if (params.startsWith("{") && !params.endsWith("}")) {
26
- params = `${params}}`;
27
- }
28
-
29
- json += `${`
30
- ${is_static ? "static " : ""} ${async} ${methodName}(${params}){
31
- const __params = [${params}];
32
- if(__params.length === 1 && __params[0] === undefined){
33
- __params.length = 0
34
- }
35
- let __cookies = this._cookies;
36
- if (__cookies) {
37
- if (!Array.isArray(__cookies)) {
38
- __cookies = [__cookies];
39
- }
40
- __cookies = __cookies.map(function (cookie) {
41
- return cookie.toString();
42
- });
43
- }
44
-
45
- try {
46
- const result = (
47
- await axios.post(getAppURL(), {
48
- method: "${methodName}",
49
- params: __params,
50
- cookies: __cookies,
51
- is_static: ${!!is_static}
52
- })
53
- ).data?.result;
54
- return result
55
- } catch (e) {
56
- /* empty */
57
- }
58
- }`.trim()}\n`;
59
- }
60
- }
61
-
62
- doWrite(SteamUser.prototype, false);
63
- doWrite(SteamUser, true);
64
-
65
- console.log("");
66
- })();
1
+ import SteamUser from "./index.js";
2
+ import _ from "lodash";
3
+
4
+ (async function () {
5
+ const xx = SteamUser;
6
+
7
+ let json = "";
8
+
9
+ function doWrite(user, is_static) {
10
+ for (const methodName of Object.getOwnPropertyNames(user)) {
11
+ if (methodName === "constructor" || methodName === "length" || methodName === "name" || methodName === "prototype" || methodName === "RequestXML_TooManyRequests" || methodName === "MAX_RETRY") {
12
+ continue;
13
+ }
14
+ const fnString = user[methodName].toString().trim();
15
+ const async = "async";
16
+ // const async = fnString.startsWith("async") ? "async" : "";
17
+ let params = fnString.split("(")[1].split(")")[0];
18
+ const paramsList = params.split(",");
19
+ for (let i = 0; i < paramsList.length; i++) {
20
+ if (paramsList[i].includes("=")) {
21
+ paramsList[i] = paramsList[i].split("=")[0].trim();
22
+ }
23
+ }
24
+ params = paramsList.join(", ").trim();
25
+ if (params.startsWith("{") && !params.endsWith("}")) {
26
+ params = `${params}}`;
27
+ }
28
+
29
+ json += `${`
30
+ ${is_static ? "static " : ""} ${async} ${methodName}(${params}){
31
+ const __params = [${params}];
32
+ if(__params.length === 1 && __params[0] === undefined){
33
+ __params.length = 0
34
+ }
35
+ let __cookies = this._cookies;
36
+ if (__cookies) {
37
+ if (!Array.isArray(__cookies)) {
38
+ __cookies = [__cookies];
39
+ }
40
+ __cookies = __cookies.map(function (cookie) {
41
+ return cookie.toString();
42
+ });
43
+ }
44
+
45
+ try {
46
+ const result = (
47
+ await axios.post(getAppURL(), {
48
+ method: "${methodName}",
49
+ params: __params,
50
+ cookies: __cookies,
51
+ is_static: ${!!is_static}
52
+ })
53
+ ).data?.result;
54
+ return result
55
+ } catch (e) {
56
+ /* empty */
57
+ }
58
+ }`.trim()}\n`;
59
+ }
60
+ }
61
+
62
+ doWrite(SteamUser.prototype, false);
63
+ doWrite(SteamUser, true);
64
+
65
+ console.log("");
66
+ })();
package/index.js CHANGED
@@ -2596,6 +2596,48 @@ export default class SteamUser {
2596
2596
  return result?.data;
2597
2597
  }
2598
2598
 
2599
+ async removeFriends(steamIds) {
2600
+ if (!steamIds) {
2601
+ return;
2602
+ }
2603
+ if (!Array.isArray(steamIds)) {
2604
+ steamIds = [steamIds];
2605
+ }
2606
+
2607
+ const form = new FormData();
2608
+ for (const steamId of steamIds) {
2609
+ form.append("steamids[]", steamId);
2610
+ }
2611
+ form.append("action", "remove");
2612
+ form.append("ajax", "1");
2613
+ form.append("steamid", this.getSteamIdUser());
2614
+
2615
+ const result = await this._httpRequestAjax({
2616
+ url: `profiles/${this.getSteamIdUser()}/friends/action`,
2617
+ data: form,
2618
+ headers: {
2619
+ "content-type": "multipart/form-data",
2620
+ },
2621
+ method: "POST",
2622
+ });
2623
+ if (result instanceof ResponseError) {
2624
+ return result;
2625
+ }
2626
+ return result?.data;
2627
+ const resultExample = {
2628
+ success: 1,
2629
+ rgCounts: {
2630
+ cFriendsPending: 89,
2631
+ cFriendsBlocked: 0,
2632
+ cFollowing: 0,
2633
+ cGroupsPending: 0,
2634
+ cFriends: 5,
2635
+ cGroups: 0,
2636
+ success: 1,
2637
+ },
2638
+ };
2639
+ }
2640
+
2599
2641
  async acceptFriendRequest(steamId) {
2600
2642
  const result = await this._httpMyRequest({
2601
2643
  url: `friends/action`,
@@ -4870,11 +4912,12 @@ export default class SteamUser {
4870
4912
 
4871
4913
  async removePhoneNumber() {
4872
4914
  const result = await this._httpRequest(`https://help.steampowered.com/en/wizard/HelpRemovePhoneNumber?redir=store/account`);
4873
- if (result instanceof ResponseError) {
4874
- return result;
4915
+ if (!result?.data || typeof result.data !== "string" || result instanceof ResponseError) {
4916
+ return;
4875
4917
  }
4918
+
4876
4919
  let href = null;
4877
- const $ = result._$();
4920
+ const $ = cheerio.load(result.data);
4878
4921
  $("a").each(function (index, el) {
4879
4922
  if (!href) {
4880
4923
  const link = $(el).attr("href");
@@ -7404,6 +7447,244 @@ export default class SteamUser {
7404
7447
 
7405
7448
  return result?.data;
7406
7449
  }
7450
+
7451
+ async changeEmail(newEmail, getNewEmailOptCodes, accessToken, identitySecret) {
7452
+ const account = SteamUser.steamID642Miniprofile(this.getSteamIdUser());
7453
+
7454
+ const getHelpLink = async () => {
7455
+ const response = await this._httpRequest("https://help.steampowered.com/en/wizard/HelpChangeEmail?redir=store/account/");
7456
+ const html = response.data;
7457
+ const $ = cheerio.load(html);
7458
+ let buttons = $("a.help_wizard_button");
7459
+ const helpButton = [...buttons].find((el) => $(el).text().trim() === "Send a confirmation to my Steam Mobile app");
7460
+ if (!helpButton) return;
7461
+ return $(helpButton).attr("href");
7462
+ };
7463
+ const sendAppConfirmation = async (helpLink) => {
7464
+ const response = await this._httpRequest(helpLink);
7465
+ const html = response.data;
7466
+ if (!html.includes("For security, verify that the code in the box below matches the code we display on the confirmations page.")) {
7467
+ return;
7468
+ }
7469
+ const $ = cheerio.load(html);
7470
+ const forgot_login_code_form = $("#forgot_login_code_form");
7471
+ const s = forgot_login_code_form.find('input[name="s"]').val();
7472
+ const reset = forgot_login_code_form.find('input[name="reset"]').val();
7473
+ const lost = forgot_login_code_form.find('input[name="lost"]').val();
7474
+ const method = forgot_login_code_form.find('input[name="method"]').val();
7475
+ const issueid = forgot_login_code_form.find('input[name="issueid"]').val();
7476
+
7477
+ const cleanHtml = html.replaceAll(/\s+/gi, " ");
7478
+ //do not remove this line
7479
+ const g_sessionID = cleanHtml.substringAfter("g_sessionID =").trim().substringBefore(";").replaceAll('"', "").trim();
7480
+ const g_rgDefaultWizardPageParamsStr = cleanHtml.substringAfter("g_rgDefaultWizardPageParams =").trim().substringBefore(";").trim();
7481
+ const g_rgDefaultWizardPageParams = eval(`() => {return ${g_rgDefaultWizardPageParamsStr};}`)();
7482
+ delete g_rgDefaultWizardPageParams.sessionid;
7483
+
7484
+ return {
7485
+ issue: {
7486
+ s,
7487
+ reset,
7488
+ lost,
7489
+ method,
7490
+ issueid,
7491
+ },
7492
+ g_rgDefaultWizardPageParams,
7493
+ };
7494
+ };
7495
+ const sendAccountRecoveryCode = async (issue, g_rgDefaultWizardPageParams, helpLink) => {
7496
+ const result = await this._httpRequest({
7497
+ url: "https://help.steampowered.com/en/wizard/AjaxSendAccountRecoveryCode",
7498
+ method: "POST",
7499
+ data: {
7500
+ ...g_rgDefaultWizardPageParams,
7501
+ s: issue.s,
7502
+ method: issue.method,
7503
+ link: "",
7504
+ },
7505
+ headers: {
7506
+ "content-type": "application/x-www-form-urlencoded",
7507
+ "x-requested-with": "XMLHttpRequest",
7508
+ Referer: helpLink,
7509
+ },
7510
+ });
7511
+
7512
+ return result?.data?.success === true;
7513
+ };
7514
+ const checkAccountRecoveryConfirmation = async (issue, g_rgDefaultWizardPageParams, helpLink) => {
7515
+ const result = await this._httpRequest({
7516
+ url: "https://help.steampowered.com/en/wizard/AjaxPollAccountRecoveryConfirmation",
7517
+ method: "POST",
7518
+ data: {
7519
+ ...g_rgDefaultWizardPageParams,
7520
+ s: issue.s,
7521
+ reset: issue.reset,
7522
+ lost: issue.lost,
7523
+ method: issue.method,
7524
+ issueid: issue.issueid,
7525
+ },
7526
+ headers: {
7527
+ "content-type": "application/x-www-form-urlencoded",
7528
+ "x-requested-with": "XMLHttpRequest",
7529
+ Referer: helpLink,
7530
+ },
7531
+ });
7532
+
7533
+ return result?.data || { continue: true, success: false };
7534
+ };
7535
+ const submitNewEmail = async (issue, g_rgDefaultWizardPageParams, newEmail) => {
7536
+ const result = await this._httpRequest({
7537
+ url: "https://help.steampowered.com/en/wizard/AjaxAccountRecoveryChangeEmail/",
7538
+ method: "POST",
7539
+ data: {
7540
+ ...g_rgDefaultWizardPageParams,
7541
+ s: issue.s,
7542
+ account: account,
7543
+ email: newEmail,
7544
+ },
7545
+ headers: {
7546
+ "content-type": "application/x-www-form-urlencoded",
7547
+ "x-requested-with": "XMLHttpRequest",
7548
+ Referer: `https://help.steampowered.com/en/wizard/HelpWithLoginInfoReset/?s=${issue.s}&account=${account}&reset=${issue.reset}&issueid=${issue.issueid}`,
7549
+ },
7550
+ });
7551
+
7552
+ return result?.data || { hash: "", errorMsg: "", show_confirmation: true };
7553
+ };
7554
+ const confirmNewEmail = async (issue, g_rgDefaultWizardPageParams, newEmail, code) => {
7555
+ const result = await this._httpRequest({
7556
+ url: "https://help.steampowered.com/en/wizard/AjaxAccountRecoveryConfirmChangeEmail/",
7557
+ method: "POST",
7558
+ data: {
7559
+ ...g_rgDefaultWizardPageParams,
7560
+ s: issue.s,
7561
+ account: account,
7562
+ email: newEmail,
7563
+ email_change_code: code,
7564
+ },
7565
+ headers: {
7566
+ "content-type": "application/x-www-form-urlencoded",
7567
+ "x-requested-with": "XMLHttpRequest",
7568
+ Referer: `https://help.steampowered.com/en/wizard/HelpWithLoginInfoReset/?s=${issue.s}&account=${account}&reset=${issue.reset}&issueid=${issue.issueid}`,
7569
+ },
7570
+ });
7571
+
7572
+ return result?.data || { hash: "", errorMsg: "", show_confirmation: true };
7573
+ };
7574
+ const onError = (msg) => ({ error: msg });
7575
+
7576
+ const helpLink = await getHelpLink();
7577
+ if (!helpLink) return onError("Can't get help link");
7578
+ const issueData = await sendAppConfirmation(helpLink);
7579
+ if (!issueData) return onError("Can't send app confirmation");
7580
+ const { issue, g_rgDefaultWizardPageParams } = issueData;
7581
+
7582
+ await this._httpRequest(`https://help.steampowered.com/en/wizard/HelpWithLoginInfoEnterCode?s=${issue.s}&account=${account}&reset=${issue.reset}&lost=${issue.lost}&issueid=${issue.issueid}&wizard_ajax=1&gamepad=0`);
7583
+
7584
+ const sendResult = await sendAccountRecoveryCode(issue, g_rgDefaultWizardPageParams, helpLink);
7585
+ if (!sendResult) return onError("Can't send app recovery code");
7586
+
7587
+ await sleep(1000);
7588
+ let confirmations = await this.getConfirmations(accessToken, identitySecret);
7589
+ if (!confirmations?.confirmations) {
7590
+ await sleep(2000);
7591
+ confirmations = await this.getConfirmations(accessToken, identitySecret);
7592
+ }
7593
+ if (!confirmations?.confirmations) {
7594
+ return onError("Can't get app recovery code");
7595
+ }
7596
+ for (const confirmation of confirmations?.confirmations) {
7597
+ await this.acceptConfirmationForObject(accessToken, identitySecret, confirmation.creator);
7598
+ }
7599
+
7600
+ let checkingOk = null;
7601
+ for (let i = 0; i < 10; i++) {
7602
+ checkingOk = await checkAccountRecoveryConfirmation(issue, g_rgDefaultWizardPageParams, helpLink);
7603
+ if (checkingOk.continue) {
7604
+ await sleep(5000);
7605
+ } else if (checkingOk.success) {
7606
+ break;
7607
+ } else if (checkingOk.error) {
7608
+ break;
7609
+ } else {
7610
+ break;
7611
+ }
7612
+ }
7613
+ if (!checkingOk.success) {
7614
+ return onError("Can't confirm app recovery code");
7615
+ }
7616
+
7617
+ const resss = await this._httpRequest(`https://help.steampowered.com/en/wizard/HelpWithLoginInfoReset/?s=${issue.s}&account=${account}&reset=${issue.reset}&issueid=${issue.issueid}`);
7618
+
7619
+ const submitResult = await submitNewEmail(issue, g_rgDefaultWizardPageParams, newEmail);
7620
+ if (submitResult.errorMsg) {
7621
+ console.log(submitResult.errorMsg);
7622
+ return onError("submitNewEmail Failed: " + submitResult.errorMsg);
7623
+ }
7624
+
7625
+ //confirm code sent to new email
7626
+ for (let i = 0; i < 5; i++) {
7627
+ let codes = await getNewEmailOptCodes();
7628
+ if (codes) {
7629
+ codes = Array.isArray(codes) ? codes : [codes];
7630
+ for (const code of codes) {
7631
+ const confirmResult = await confirmNewEmail(issue, g_rgDefaultWizardPageParams, newEmail, code);
7632
+ if (confirmResult?.hash?.includes?.("HelpWithLoginInfoComplete")) {
7633
+ return {
7634
+ success: true,
7635
+ };
7636
+ } else {
7637
+ await sleep(1000);
7638
+ }
7639
+ }
7640
+ } else {
7641
+ await sleep(5000);
7642
+ }
7643
+ }
7644
+
7645
+ return onError("Can't confirm new email code");
7646
+ }
7647
+
7648
+ async sendMessage({ steamId, content, accessToken }) {
7649
+ if (!accessToken || typeof accessToken !== "string") {
7650
+ console.error("revokeAccessToken", "invalid accessToken", accessToken);
7651
+ return;
7652
+ }
7653
+ const Protos = helpers([
7654
+ {
7655
+ name: "csgo",
7656
+ protos: loadProfos(`${__dirname}/protos/webui`),
7657
+ },
7658
+ ]);
7659
+ const params = {
7660
+ access_token: accessToken,
7661
+ origin: "https://store.steampowered.com",
7662
+ input_protobuf_encoded: protoEncode(Protos.csgo.CFriendMessages_SendMessage_Request, {
7663
+ steamid: steamId,
7664
+ message: content,
7665
+ chat_entry_type: 1,
7666
+ contains_bbcode: false,
7667
+ }).toString("base64"),
7668
+ };
7669
+
7670
+ const result = await this._httpRequest({
7671
+ url: `https://api.steampowered.com/IFriendMessagesService/SendMessage/v1?${Object.keys(params)
7672
+ .map((k) => `${k}=${encodeURIComponent(params[k])}`)
7673
+ .join("&")}`,
7674
+ // responseType: "arraybuffer",
7675
+ // method: "POST",
7676
+ });
7677
+ if (result instanceof ResponseError) {
7678
+ return result;
7679
+ }
7680
+
7681
+ let response = null;
7682
+ try {
7683
+ response = protoDecode(Protos.csgo.CFriendMessages_SendMessage_Response, result.data);
7684
+ } catch (e) {}
7685
+
7686
+ return response;
7687
+ }
7407
7688
  }
7408
7689
 
7409
7690
  SteamUser.MAX_RETRY = 10;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "steamutils",
3
- "version": "1.4.21",
3
+ "version": "1.4.23",
4
4
  "main": "index.js",
5
5
  "dependencies": {
6
6
  "alpha-common-utils": "^1.0.6",