fee_calculator/server.js

import { JsonApiServer } from '../json_api'

/**
 * Facilitates interaction with the FeeCalculator server.
 *
 * @class
 */
export class FeeCalculatorServer extends JsonApiServer {
  /**
   * Create a new FeeCalculator server instance.
   *
   * @constructor
   * @param {ShelfNetwork} sdk Parent SDK instance.
   * @param {string} serverUrl FeeCalculator URL.
   * @param {Object} opts
   * @param {boolean} [opts.allowHttp] Allow connecting to http servers, default: `false`. This must be set to false in production deployments!
   * @param {Object} [opts.proxy] Proxy configuration. Look [axios docs](https://github.com/axios/axios#request-config) for more info
   * @param {Object} [opts.httpBasicAuth] HTTP basic auth credentials. Look [axios docs](https://github.com/axios/axios#request-config) for more info.
   * @param {Object} [opts.customHeaders] Custom headers for request.
   * @param {boolean} [opts.withCredentials] Indicates whether or not cross-site Access-Control requests should be made using credentials.
   */
  constructor (sdk, serverUrl, opts = {}) {
    opts.alias = 'fees'
    super(sdk, serverUrl, opts)
  }

  /**
   * Get fee amount.
   *
   * @param {object} query Request options.
   * @param {Number} query.price Lot price.
   * @param {Number} query.lotType Lot type.
   * @param {string} query.currency Currency.
   */
  async calculate (query) {
    return this._makeCallBuilder()
      .appendUrlSegment(``)
      .get(query)
  }

  /**
   * Get multiple fees.
   *
   * @param {object[]} pairs Array of pairs for convertation.
   * @param {Number} pairs.price Lot price.
   * @param {Number} pairs.lotType Lot type.
   * @param {string} pairs.currency Currency.
   * @param {Number} pairs.lotId Lot ID. Will be returned in response just for frontend mapping purposes.
   */
  calculateBulk (pairs) {
    return this._makeCallBuilder()
      .appendUrlSegment(``)
      .post({
        data: pairs.map(pair => ({
          attributes: {
            price: pair.price,
            lotType: pair.lotType,
            currency: pair.currency,
            lotId: pair.lotId
          }
        }))
      })
  }
}