steam-js-api
Version:
A wrapper for Steam Web API, with additional CSGO functionality.
202 lines (160 loc) • 6.29 kB
JavaScript
const {urls, request} = require('./util.js')
const {requireKey} = require('./../app.js')
function buildItems(appID, items) {
let data = {
count: 0,
items: {}
}
for (let i in items) {
if (i == 'success' || i == 'error') continue
let item = items[i]
let info = {
name: item.name,
nameColor: item.name_color,
type: item.type,
marketName: item.market_name,
marketHash: item.market_hash_name,
// TODO: remove this line
marketUrl: urls.econUrl(appID, item.market_hash_name),
tradable: Boolean(Number(item.tradable)),
marketable: Boolean(Number(item.marketable)),
commodity: Boolean(Number(item.commodity)),
tradeRestriction: Number(item.market_tradable_restriction),
icon: urls.econImg(item.icon_url_large || item.icon_url, '')
}
if (info.marketable) {
info.marketUrl = urls.econUrl(appID, item.market_hash_name)
}
data.items[`${item.classid}${(item.instanceid) ? '_' + item.instanceid : ''}`] = info
data.count++
}
return data
}
function getItemInfo(appID, items, callback) {
if (!Array.isArray(items)) {
items = [items]
}
function run(resolve, reject) {
let _key = requireKey()
req = { key: _key, appid: appID }
let c = 0
for (index in items) {
let item = items[index]
if (item.hasOwnProperty('class') && item.hasOwnProperty('instance')) {
req[`classid${c}`] = item.class
req[`instanceid${c}`] = item.instance
c++
} else if (item.hasOwnProperty('class')) {
req[`classid${c}`] = item.class
c++
}
}
req.class_count = c
request('ISteamEconomy/GetAssetClassInfo/v1', req, result => {
if (result.error) {
if (reject) reject(result)
else resolve(result)
return
}
if (typeof result.data === 'object' && result.data.hasOwnProperty('result')){
let response = result.data.result
let data = {}
if (items.length == 1) {
if (response.error) {
result.steamError = reponse.error
result.error = `Error from Steam, data may still have been returned: ${reponse.error}`
if (reject) reject(result)
else resolve(result)
return
}
data = buildItems(appID, response).items[`${items[0].class}${(items[0].instance) ? '_' + items[0].instance : ''}`]
} else {
data = buildItems(appID, response)
}
if (result.error) {
if (data.hasOwnProperty('count') && data.count > 0) {
result.error = `Data returned. Error from Steam: ${result.error}`
result.data = data
resolve(result)
} else {
result.error = `Error from Steam, data may still have been returned: ${result.error}`
if (reject) reject(result)
else resolve(result)
}
} else {
resolve({data})
}
} else {
result.error = 'Unexpected response. Data may have still been returned.'
if (reject) reject(result)
else resolve(result)
}
})
}
if (typeof callback === 'function') {
run(callback)
} else {
return new Promise((resolve, reject) => {
run(resolve, reject)
})
}
}
function getGameItemPrices(appID, currencyFilter, callback) {
if (typeof currencyFilter === 'function') {
callback = currencyFilter
currencyFilter = ''
} else if (!currencyFilter) {
currencyFilter = ''
}
function run(resolve, reject) {
let _key = requireKey()
if (!(typeof currencyFilter === 'string') || !currencyFilter.length === 0 && currencyFilter.length !== 3) {
error = 'Currency filter is not valid'
if (reject) reject({error})
else resolve({error})
}
request('ISteamEconomy/GetAssetPrices/v1', {key: _key, appid: appID, currency: currencyFilter}, result => {
if (result.error) {
if (reject) reject(result)
else resolve(result)
return
}
if (typeof result.data === 'object' && result.data.hasOwnProperty('result')){
let response = result.data.result
let data = {
count: 0,
items: []
}
for (index in response.assets) {
let a = response.assets[index]
data.items[data.count] = {
class: a.classid,
name: a.name,
date: a.date,
prices: a.prices
}
if (a.original_prices) {
data.items[data.count].pricesOriginal = a.original_prices
}
data.count++
}
resolve({data})
} else {
result.error = 'Unexpected response. Data may have still been returned.'
if (reject) reject(result)
else resolve(result)
}
})
}
if (typeof callback === 'function') {
run(callback)
} else {
return new Promise((resolve, reject) => {
run(resolve, reject)
})
}
}
const lib = {}
lib.getItemInfo = getItemInfo
lib.getGameItemPrices = getGameItemPrices
module.exports = lib