bfx-api-node-models
Version:
Object models for usage with the Bitfinex node API
65 lines (58 loc) • 1.75 kB
JavaScript
const isNil = require('lodash/isNil')
const numberValidator = require('./validators/number')
const stringValidator = require('./validators/string')
const Model = require('./model')
const fields = {
pair: 0,
initialMargin: [1, 8],
minimumMargin: [1, 9],
maximumOrderSize: [1, 4],
minimumOrderSize: [1, 3]
}
/**
* Symbol Details model
*/
class SymbolDetails extends Model {
/**
* @param {object|Array} data - symbol details data
* @param {string} data.pair - pairs
* @param {number} data.initialMargin - inital margin
* @param {number} data.minimumMargin - minimum margin
* @param {string} data.maximumOrderSize - maximum order size
* @param {string} data.minimumOrderSize - minimum order size
* @param {boolean} data.margin - flag specifying if margin trading supported for pair
*/
constructor (data = {}) {
super({ data, fields })
}
/**
* @param {object[]|object|Array[]|Array} data - data to convert to POJO
* @returns {object} pojo
*/
static unserialize (data) {
const obj = super.unserialize({ data, fields })
obj.margin = !isNil(obj.initialMargin) && !isNil(obj.minimumMargin)
return obj
}
/**
* Validates a given symbol details instance
*
* @param {object[]|object|SymbolDetails[]|SymbolDetails|Array} data - instance to validate
* @returns {string} error - null if instance is valid
*/
static validate (data) {
return super.validate({
data,
fields,
validators: {
pair: stringValidator,
initialMargin: numberValidator,
minimumMargin: numberValidator,
maximumOrderSize: stringValidator,
minimumOrderSize: stringValidator
}
})
}
}
module.exports = SymbolDetails