trade-opskins-manager
Version:
Trade Opskins Manager for Node.js (ExpressTrade manager)
155 lines (119 loc) • 4.55 kB
JavaScript
/**
* Modules
* */
const Offer = require('../classes/Offer');
const TradeOpskinsManager = require('../');
const Item = require('../classes/Item');
const InternalAppID = require('../enums/InternalAppID');
const OpskinsError = require('../classes/OpskinsError');
TradeOpskinsManager.prototype.acceptOffer = function({id}) {
return new Promise((resolve, reject) => {
if (typeof id === 'undefined') {
throw new OpskinsError({"message": 'offer.id is required'});
}
let query = {"httpMethod": 'POST', "iface": 'ITrade', "method": 'AcceptOffer', "data": {"offer_id": id, "twofactor_code": this.getTwoFactorCode()}};
this._req(query).then(({data}) => {
if (data['status'] !== 1) {
return reject(new OpskinsError({"message": data['message'], "statusCode": data['status']}));
}
resolve(new Offer(data['response']['offer']));
})
.catch(reject);
});
};
TradeOpskinsManager.prototype.cancelOffer = function({id}) {
return new Promise((resolve, reject) => {
if (typeof id === 'undefined') {
throw new OpskinsError({"message": 'offer.id is required'});
}
let query = {"httpMethod": 'POST', "iface": 'ITrade', "method": 'CancelOffer', "data": {"offer_id": id}};
this._req(query).then(({data}) => resolve(new Offer(data['response']['offer'])))
.catch(reject);
});
};
TradeOpskinsManager.prototype.getUserInventory = function({uid, app_id=InternalAppID['vgo'], per_page=100, page=1, search}) {
return new Promise((resolve, reject) => {
let query = {"httpMethod": 'GET', "iface": 'ITrade', "method": 'GetUserInventory', "data": {}};
let opts = {uid, app_id, per_page, page, search};
if (typeof opts['uid'] === 'undefined') {
throw new OpskinsError({"message": 'uid is required'});
}
for (let key of Object.keys(opts)) {
let opt = opts[key];
if (opt) {
query['data'][key] = opt;
}
}
this._req(query).then(({data}) => {
resolve({
"user_data": data['response']['user_data'],
"total": parseInt(data['response']['total'], 10),
"items": data['response']['items'].map((item) => new Item(item)),
});
})
.catch(reject);
})
};
TradeOpskinsManager.prototype.getUserInventoryFromSteamId = function({steam_id, app_id=InternalAppID['vgo'], per_page=100, page=1, search}) {
return new Promise((resolve, reject) => {
let query = {"httpMethod": 'GET', "iface": 'ITrade', "method": 'GetUserInventoryFromSteamId', "data": {}};
let opts = {steam_id, app_id, per_page, page, search};
if (typeof opts['steam_id'] === 'undefined') {
throw new OpskinsError({"message": 'uid is required'});
}
for (let key of Object.keys(opts)) {
let opt = opts[key];
if (opt) {
query['data'][key] = opt;
}
}
this._req(query).then(({data}) => {
resolve({
"user_data": data['response']['user_data'],
"total": parseInt(data['response']['total'], 10),
"items": data['response']['items'].map((item) => new Item(item)),
});
})
.catch(reject);
})
};
TradeOpskinsManager.prototype.sendOffer = function({trade_url, uid, token, items, type='receive'}) {
return new Promise((resolve, reject) => {
let query = {"httpMethod": 'POST', "iface": 'ITrade', "method": 'SendOffer', "data": {}};
let opts = {uid, token, items, "twofactor_code": this.getTwoFactorCode()};
if (typeof trade_url === 'string') {
const reg = /(\d+)\/(.+)$/i.exec(trade_url);
if (reg === null) {
throw new OpskinsError({"message": 'trade_url parsing error'});
}
opts['uid'] = reg[1];
opts['token'] = reg[2];
} else {
if (typeof opts['uid'] === 'undefined') {
throw new OpskinsError({"message": 'uid is required'});
}
if (typeof opts['token'] === 'undefined') {
throw new OpskinsError({"message": 'token is required'});
}
}
if (!Array.isArray(opts['items']) || !opts['items'].length) {
throw new OpskinsError({"message": 'items is required'});
} else {
opts[type === 'receive' ? 'items_to_receive' : 'items_to_send'] = opts['items'].join(',');
}
for (let key of Object.keys(opts)) {
let opt = opts[key];
if (opt) {
query['data'][key] = opt;
}
}
this._req(query).then(({data}) => {
let offer = new Offer(data['response']['offer']);
// Add created offer to pollData and keep track of it
this._addOfferToPollData(offer);
this._updatePollData();
resolve(offer);
})
.catch(reject);
})
};