bfx-api-node-models
Version:
Object models for usage with the Bitfinex node API
95 lines (85 loc) • 3.36 kB
JavaScript
const numberValidator = require('./validators/number')
const arrayValidator = require('./validators/array')
const objectValidator = require('./validators/object')
const Model = require('./model')
const fields = {
trade_vol_30d: [5, 0],
fees_trading_30d: [5, 1],
fees_trading_total_30d: [5, 2],
fees_funding_30d: [6, 1],
fees_funding_total_30d: [6, 2],
makerFee: [4, 0, 0],
derivMakerRebate: [4, 0, 5],
takerFeeToCrypto: [4, 1, 0],
takerFeeToStable: [4, 1, 1],
takerFeeToFiat: [4, 1, 2],
derivTakerFee: [4, 1, 5],
leoLev: [9, 'leo_lev'],
leoAmountAvg: [9, 'leo_amount_avg']
}
/**
* Account Summary model
*/
class AccountSummary extends Model {
/**
* @param {object|Array} data - account summary data
* @param {Array} data.trade_vol_30d - traded volume over the past 30 days detailed by currency
* @param {object} data.fees_trading_30d - trading fees charged over the past 30 days detailed by currency
* @param {number} data.fees_trading_total_30d - USD equivalent of the trading fees charged over the past 30 days
* @param {object} data.fees_funding_30d - funding returns over the past 30 days detailed by currency
* @param {number} data.fees_funding_total_30d - USD equivalent of the funding returns over the past 30 days
* @param {number} data.makerFee - maker fee rate for the account
* @param {number} data.derivMakerRebate - maker rebate for derivative trades on the account
* @param {number} data.takerFeeToCrypto - taker fee rate for crypto to crypto trades on the account
* @param {number} data.takerFeeToStable - taker fee rate for crypto to stable coin trades on the account
* @param {number} data.takerFeeToFiat - taker fee rate for crypto to stable coin trades on the account
* @param {number} data.derivTakerFee - taker fee rate for derivative trades on the account
* @param {number} data.leoLev - current LEO discount level of the account
* @param {number} data.leoAmountAvg - average amount of LEO held in the account over the past 30 days.
*/
constructor (data = {}) {
super({ data, fields })
}
/**
* @param {object[]|object|Array[]|Array} data - data to convert to POJO
* @returns {object} pojo
*/
static unserialize (data) {
return super.unserialize({ data, fields })
}
serialize () {
const arr = super.serialize()
arr[4][0][1] = this.makerFee
arr[4][0][2] = this.makerFee
return arr
}
/**
* Validates a given account summary instance
*
* @param {object[]|object|AccountSummary[]|AccountSummary|Array} data - instance to validate
* @returns {string} error - null if instance is valid
*/
static validate (data) {
return super.validate({
data,
fields,
validators: {
trade_vol_30d: arrayValidator,
fees_trading_30d: objectValidator,
fees_trading_total_30d: numberValidator,
fees_funding_30d: objectValidator,
fees_funding_total_30d: numberValidator,
makerFee: numberValidator,
derivMakerRebate: numberValidator,
takerFeeToCrypto: numberValidator,
takerFeeToStable: numberValidator,
takerFeeToFiat: numberValidator,
derivTakerFee: numberValidator,
leoLev: numberValidator,
leoAmountAvg: numberValidator
}
})
}
}
module.exports = AccountSummary