constructor (opts = {
    apiKey: '',
    apiSecret: '',
    authToken: '',
    company: '',
    transform: false,
    ws: {},
    rest: {}
  }) {
    if (opts.constructor.name !== 'Object') {
      throw new Error([
        'constructor takes an object since version 2.0.0, see:',
        'https://github.com/bitfinexcom/bitfinex-api-node#version-200-breaking-changes\n'
      ].join('\n'))
    }

    this._apiKey = opts.apiKey || ''
    this._apiSecret = opts.apiSecret || ''
    this._authToken = opts.authToken || ''
    this._company = opts.company || ''
    this._transform = opts.transform === true
    this._wsArgs = opts.ws || {}
    this._restArgs = opts.rest || {}
    this._transportCache = {
      rest: {},
      ws: {}
    }
  }
@param {object} [opts] - options
@param {string} [opts.apiKey] - API key
@param {string} [opts.apiSecret] - API secret
@param {string} [opts.authToken] - optional auth option
@param {string} [opts.company] - optional auth option
@param {boolean} [opts.transform] - if true, packets are converted to models
@param {object} [opts.ws] - ws transport options
@param {object} [opts.rest] - rest transport options