steamutils 1.1.6 → 1.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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",