steamutils 1.1.6 → 1.1.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. package/SteamClient.js +2 -2
  2. package/index.js +226 -0
  3. package/package.json +1 -1
package/SteamClient.js CHANGED
@@ -116,7 +116,7 @@ function SteamClient({
116
116
  clearTimeout(t)
117
117
  }
118
118
  delete gcCallback[name][id]
119
- cb(arg)
119
+ cb?.apply(null, arg)
120
120
  }
121
121
 
122
122
  if (timeout) {
@@ -128,7 +128,7 @@ function SteamClient({
128
128
  function callGCCallback(name, ...arg) {
129
129
  if (gcCallback[name]) {
130
130
  for (let id in gcCallback[name]) {
131
- gcCallback[name][id](arg)
131
+ gcCallback[name][id]?.apply(null, arg)
132
132
  }
133
133
  }
134
134
  }
package/index.js CHANGED
@@ -4951,6 +4951,232 @@ class SteamUser {
4951
4951
  "median_price": "30.936,57₫"
4952
4952
  }
4953
4953
  }
4954
+
4955
+ async getFullInventoryHistory() {
4956
+ let result = null
4957
+ do {
4958
+ result = await this.getInventoryHistory(result?.cursor)
4959
+ result.tradehistory.forEach(r => console.log(r))
4960
+ } while (result?.cursor)
4961
+ }
4962
+ async getInventoryHistory(cursor) {
4963
+ if (!cursor) {
4964
+ cursor = {
4965
+ time: parseInt(new Date().getTime() / 1000),
4966
+ time_frac: 0,
4967
+ s: 0,
4968
+ }
4969
+ }
4970
+
4971
+ // let cursor = null
4972
+ let result = null
4973
+ for (let i = 0; i < 10; i++) {
4974
+ const query = {sessionid: this._sessionid, ajax: 1, l: 'english'}
4975
+ if (cursor) {
4976
+ query['cursor[s]'] = cursor.s
4977
+ query['cursor[time_frac]'] = cursor.time_frac
4978
+ query['cursor[time]'] = cursor.time
4979
+ }
4980
+ const url = `https://steamcommunity.com/my/inventoryhistory/?${Object.keys(query).map(k => `${encodeURIComponent(k)}=${encodeURIComponent(query[k])}`).join('&')}`;
4981
+ let _result
4982
+ try {
4983
+ _result = (await this._httpRequestAjax({url}))?.data
4984
+ } catch (e) {
4985
+ }
4986
+ if (!_result) {
4987
+ await sleep(5000)
4988
+ } else if (typeof _result === "string") {
4989
+
4990
+ } else if (_result.success !== true) {
4991
+ console.error(url)
4992
+ console.error(_result)
4993
+ await sleep(5000)
4994
+ } else {
4995
+ result = _result
4996
+ break
4997
+ }
4998
+ }
4999
+
5000
+ const descriptions = result.descriptions
5001
+ const $ = cheerio.load(result.html?.replaceAll(/[\t\n\r]/gi, '')
5002
+ ?.trim() || '')
5003
+
5004
+ const tradehistory = []
5005
+ $('.tradehistoryrow').each(function () {
5006
+ const tradehistoryrow_el = $(this)
5007
+ const tradehistory_date_el = tradehistoryrow_el.find('.tradehistory_date')
5008
+ const tradehistory_timestamp_el = tradehistory_date_el.find('.tradehistory_timestamp')
5009
+
5010
+ const tradehistory_timestamp = tradehistory_timestamp_el.text().trim()//3:49pm
5011
+ tradehistory_timestamp_el.remove()
5012
+ const tradehistory_date = tradehistory_date_el.text().trim()//24 Mar, 2023
5013
+
5014
+ let timestamp = 0
5015
+ const timestampMoment = moment(`${tradehistory_date} ${tradehistory_timestamp}`, `D MMM, YYYY h:mma`, true)
5016
+ if (!timestampMoment.isValid()) {
5017
+ console.log(`${tradehistory_date} ${tradehistory_timestamp}`);
5018
+ } else {
5019
+ timestamp = timestampMoment.valueOf() / 1000
5020
+ }
5021
+
5022
+ const tradehistory_event_description_el = tradehistoryrow_el.find('.tradehistory_event_description')
5023
+ let description = tradehistory_event_description_el.text().trim()
5024
+ let tradePeople = null
5025
+
5026
+ switch (description) {
5027
+ case "You purchased an item on the Community Market.": {
5028
+ break
5029
+ }
5030
+ case "You listed an item on the Community Market.": {
5031
+ break
5032
+ }
5033
+ case "You canceled a listing on the Community Market. The item was returned to you.": {
5034
+ break
5035
+ }
5036
+ case "Crafted": {
5037
+ break
5038
+ }
5039
+ case "Earned a new rank and got a drop": {
5040
+ break
5041
+ }
5042
+ case "Got an item drop": {
5043
+ break
5044
+ }
5045
+ case "Purchased a gift": {
5046
+ break
5047
+ }
5048
+ case "Earned by redeeming Steam Points": {
5049
+ break
5050
+ }
5051
+ case "Earned by completing your Store Discovery Queue": {
5052
+ break
5053
+ }
5054
+ case "Earned": {
5055
+ break
5056
+ }
5057
+ case "Earned due to game play time": {
5058
+ break
5059
+ }
5060
+ default: {
5061
+ if (description.startsWith("You traded with ")) {
5062
+ const peopleEl = tradehistory_event_description_el.find('a[href]')
5063
+ tradePeople = {
5064
+ name: peopleEl.text().trim(),
5065
+ url: peopleEl.attr('href')
5066
+ }
5067
+ description = "You traded with"
5068
+ } else if (description.startsWith("Gift sent to and redeemed by ")) {
5069
+ const peopleEl = tradehistory_event_description_el.find('a[href]')
5070
+ tradePeople = {
5071
+ name: peopleEl.text().trim(),
5072
+ url: peopleEl.attr('href')
5073
+ }
5074
+ description = "Gift sent to and redeemed by"
5075
+ } else if (description.startsWith("Your trade with ") && description.endsWith(" was on hold, and the trade has now completed.")) {
5076
+ const peopleEl = tradehistory_event_description_el.find('a[href]')
5077
+ tradePeople = {
5078
+ name: peopleEl.text().trim(),
5079
+ url: peopleEl.attr('href')
5080
+ }
5081
+ description = "Your trade with friend was on hold, and the trade has now completed."
5082
+ } else if (description.startsWith("You listed an item on the Community Market. The listing was placed on hold until")) {
5083
+ //You listed an item on the Community Market. The listing was placed on hold until 24 Jan @ 3:06am.
5084
+ description = "You listed an item on the Community Market. The listing was placed on hold until"
5085
+ } else {
5086
+ console.log(description);
5087
+ }
5088
+ }
5089
+ }
5090
+
5091
+ const plusminus = tradehistoryrow_el.find('.tradehistory_items_plusminus').text().trim()//+ -
5092
+ const tradehistory_items = []
5093
+ tradehistoryrow_el.find('.tradehistory_items').each(function () {
5094
+ const tradehistory_items_el = $(this)
5095
+ const items_plusminus = tradehistory_items_el.find('.tradehistory_items_plusminus').text().trim()
5096
+ tradehistory_items_el.find('.tradehistory_items_group > .history_item').each(function () {
5097
+ const itemEl = $(this)
5098
+ const text = itemEl.text().trim()//You did not receive any items in this trade.
5099
+ const appID = itemEl.attr('data-appid')
5100
+ const classid = itemEl.attr('data-classid')
5101
+ const instanceid = itemEl.attr('data-instanceid')
5102
+ const contextid = itemEl.attr('data-contextid')
5103
+
5104
+ if (text !== `You did not receive any items in this trade.`) {
5105
+ const item = descriptions[appID][classid + '_' + instanceid]
5106
+ if (item) {
5107
+ tradehistory_items.push({...item, plusminus: items_plusminus})
5108
+ } else {
5109
+ tradehistory_items.push({
5110
+ appID,
5111
+ classid,
5112
+ instanceid,
5113
+ contextid,
5114
+ plusminus: items_plusminus
5115
+ })
5116
+ }
5117
+ }
5118
+ })
5119
+ })
5120
+
5121
+ tradehistory.push({
5122
+ timestamp,
5123
+ description,
5124
+ plusminus,
5125
+ tradehistory_items,
5126
+ ...(!!tradePeople && {tradePeople})
5127
+ })
5128
+ })
5129
+
5130
+ return {cursor: result.cursor, tradehistory}
5131
+ const exampleTradeHistory = [
5132
+ {
5133
+ timestamp: 1684108140,
5134
+ description: "Got an item drop",
5135
+ plusminus: "+",
5136
+ tradehistory_items: [
5137
+ {
5138
+ icon_url: "-9a81dlWLwJ2UUGcVs_nsVtzdOEdtWwKGZZLQHTxDZ7I56KU0Zwwo4NUX4oFJZEHLbXU5A1PIYQNqhpOSV-fRPasw8rsUFJ5KBFZv668FFQwnfCcJmxDv9rhwIHZwqP3a-uGwz9Xv8F0j-qQrI3xiVLkrxVuZW-mJoWLMlhpWhFkc9M",
5139
+ icon_drag_url: "",
5140
+ name: "Dreams & Nightmares Case",
5141
+ market_hash_name: "Dreams & Nightmares Case",
5142
+ market_name: "Dreams & Nightmares Case",
5143
+ name_color: "D2D2D2",
5144
+ background_color: "",
5145
+ type: "Base Grade Container",
5146
+ tradable: 1,
5147
+ marketable: 1,
5148
+ commodity: 1,
5149
+ market_tradable_restriction: "7",
5150
+ market_buy_country_restriction: "FR",
5151
+ descriptions: [
5152
+ {
5153
+ type: "html",
5154
+ value: " "
5155
+ },
5156
+ {
5157
+ type: "html",
5158
+ value: "",
5159
+ color: "00a000",
5160
+ app_data: {
5161
+ limited: 1
5162
+ }
5163
+ }
5164
+ ],
5165
+ tags: [
5166
+ {
5167
+ internal_name: "CSGO_Type_WeaponCase",
5168
+ name: "Container",
5169
+ category: "Type",
5170
+ category_name: "Type"
5171
+ },
5172
+ ],
5173
+ classid: "4717330486",
5174
+ plusminus: "+"
5175
+ }
5176
+ ]
5177
+ },
5178
+ ]
5179
+ }
4954
5180
  }
4955
5181
 
4956
5182
  export default SteamUser
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "steamutils",
3
- "version": "1.1.6",
3
+ "version": "1.1.7",
4
4
  "dependencies": {
5
5
  "axios": "^1.3.4",
6
6
  "cheerio": "^1.0.0-rc.12",