restful_autoInvest.js

'use strict'

const { validateRequiredParameters } = require('../../helpers/validation')

/**
 * API auto-invest endpoints
 * @module AutoInvest
 * @param {*} superclass
 */
const AutoInvest = superclass => class extends superclass {
  /**
   * Get target asset list (USER_DATA)<br>
   *
   * GET /sapi/v1/lending/auto-invest/target-asset/list<br>
   *
   * {@link https://developers.binance.com/docs/auto_invest/market-data/Get-target-asset-list}
   *
   * @param {object} [options]
   * @param {string} [options.targetAsset]
   * @param {number} [options.size] - Default:10 Max:100
   * @param {number} [options.current] - Current querying page. Start from 1. Default:1
   * @param {number} [options.recvWindow] - The value cannot be greater than 60000
   */
  getTargetAssetList (options = {}) {
    return this.signRequest(
      'GET',
      '/sapi/v1/lending/auto-invest/target-asset/list',
      options
    )
  }

  /**
   * Get target asset ROI data (USER_DATA)<br>
   *
   * GET /sapi/v1/lending/auto-invest/target-asset/roi/list<br>
   *
   * {@link https://developers.binance.com/docs/auto_invest/market-data/Get-target-asset-ROI-data}
   *
   * @param {string} targetAsset
   * @param {string} hisRoiType
   * @param {object} [options]
   * @param {number} [options.recvWindow] - The value cannot be greater than 60000
   */
  getTargetAssetRoiData (targetAsset, hisRoiType, options = {}) {
    validateRequiredParameters({ targetAsset, hisRoiType })
    return this.signRequest(
      'GET',
      '/sapi/v1/lending/auto-invest/target-asset/roi/list',
      Object.assign(options, {
        targetAsset,
        hisRoiType
      })
    )
  }

  /**
   * Query all source asset and target asset (USER_DATA)<br>
   *
   * GET /sapi/v1/lending/auto-invest/all/asset<br>
   *
   * {@link https://developers.binance.com/docs/auto_invest/market-data/Query-all-source-asset-and-target-asset}
   *
   * @param {object} [options]
   * @param {number} [options.recvWindow] - The value cannot be greater than 60000
   */
  queryAllSourceAssetAndTargetAsset (options = {}) {
    return this.signRequest(
      'GET',
      '/sapi/v1/lending/auto-invest/all/asset',
      options
    )
  }

  /**
   * Query source asset list (USER_DATA)<br>
   *
   * GET /sapi/v1/lending/auto-invest/source-asset/list<br>
   *
   * {@link https://developers.binance.com/docs/auto_invest/market-data/Query-source-asset-list}
   *
   * @param {string} usageType
   * @param {object} [options]
   * @param {string} [options.targetAsset]
   * @param {number} [options.indexId]
   * @param {boolean} [options.flexibleAllowedToUse]
   * @param {number} [options.recvWindow] - The value cannot be greater than 60000
   */
  querySourceAssetList (usageType, options = {}) {
    validateRequiredParameters({ usageType })
    return this.signRequest(
      'GET',
      '/sapi/v1/lending/auto-invest/source-asset/list',
      Object.assign(options, {
        usageType
      })
    )
  }

  /**
   * Change Plan Status<br>
   *
   * POST /sapi/v1/lending/auto-invest/plan/edit-status<br>
   *
   * {@link https://developers.binance.com/docs/auto_invest/trade/Change-Plan-Status}
   *
   * @param {number} planId
   * @param {Status} status
   * @param {object} [options]
   * @param {number} [options.recvWindow] - The value cannot be greater than 60000
   */
  changePlanStatus (planId, status, options = {}) {
    validateRequiredParameters({ planId, status })
    return this.signRequest(
      'POST',
      '/sapi/v1/lending/auto-invest/plan/edit-status',
      Object.assign(options, {
        planId,
        status
      })
    )
  }

  /**
   * Get list of plans<br>
   *
   * GET /sapi/v1/lending/auto-invest/plan/list<br>
   *
   * {@link https://developers.binance.com/docs/auto_invest/market-data/Get-list-of-plans}
   *
   * @param {string} planType
   * @param {object} [options]
   * @param {number} [options.recvWindow] - The value cannot be greater than 60000
   */
  getListOfPlans (planType, options = {}) {
    validateRequiredParameters({ planType })
    return this.signRequest(
      'GET',
      '/sapi/v1/lending/auto-invest/plan/list',
      Object.assign(options, {
        planType
      })
    )
  }

  /**
   * Query holding details of the plan<br>
   *
   * GET /sapi/v1/lending/auto-invest/plan/id<br>
   *
   * {@link https://developers.binance.com/docs/auto_invest/trade/Query-holding-details-of-the-plan}
   *
   * @param {object} [options]
   * @param {number} [options.planId]
   * @param {string} [options.requestId]
   * @param {number} [options.recvWindow] - The value cannot be greater than 60000
   */
  queryHoldingDetailsOfThePlan (options = {}) {
    return this.signRequest(
      'GET',
      '/sapi/v1/lending/auto-invest/plan/id',
      options
    )
  }

  /**
   * Query subscription transaction history<br>
   *
   * GET /sapi/v1/lending/auto-invest/history/list<br>
   *
   * {@link https://developers.binance.com/docs/auto_invest/trade/Query-subscription-transaction-history}
   *
   * @param {object} [options]
   * @param {number} [options.planId]
   * @param {number} [options.startTime] - UTC timestamp in ms
   * @param {number} [options.endTime] - UTC timestamp in ms
   * @param {number} [options.targetAsset]
   * @param {PlanType} [options.planType]
   * @param {number} [options.size] - Default:10 Max:100
   * @param {number} [options.current] - Current querying page. Start from 1. Default:1
   * @param {number} [options.recvWindow] - The value cannot be greater than 60000
   */
  querySubscriptionTransactionHistory (options = {}) {
    return this.signRequest(
      'GET',
      '/sapi/v1/lending/auto-invest/history/list',
      options
    )
  }

  /**
   * Query Index Details (USER_DATA)<br>
   *
   * GET /sapi/v1/lending/auto-invest/index/info<br>
   *
   * {@link https://developers.binance.com/docs/auto_invest/market-data/Query-Index-Details}
   *
   * @param {number} indexId
   * @param {object} [options]
   * @param {number} [options.recvWindow] - The value cannot be greater than 60000
   */
  queryIndexDetails (indexId, options = {}) {
    validateRequiredParameters({ indexId })
    return this.signRequest(
      'GET',
      '/sapi/v1/lending/auto-invest/index/info',
      Object.assign(options, {
        indexId
      })
    )
  }

  /**
   * Query Index Linked Plan Position Details (USER_DATA)<br>
   *
   * GET /sapi/v1/lending/auto-invest/index/user-summary<br>
   *
   * {@link https://developers.binance.com/docs/auto_invest/trade/Query-Index-Linked-Plan-Position-Details}
   *
   * @param {number} indexId
   * @param {object} [options]
   * @param {number} [options.recvWindow] - The value cannot be greater than 60000
   */
  queryIndexLinkedPlanPositionDetails (indexId, options = {}) {
    validateRequiredParameters({ indexId })
    return this.signRequest(
      'GET',
      '/sapi/v1/lending/auto-invest/index/user-summary',
      Object.assign(options, {
        indexId
      })
    )
  }

  /**
   * Query One-Time Transaction Status (USER_DATA)<br>
   *
   * GET /sapi/v1/lending/auto-invest/one-off/status<br>
   *
   * {@link https://developers.binance.com/docs/auto_invest/trade/Query-One-Time-Transaction-Status}
   *
   * @param {number} transactionId
   * @param {object} [options]
   * @param {string} [options.requestId]
   * @param {number} [options.recvWindow] - The value cannot be greater than 60000
   */
  queryOnetimeTransactionStatus (transactionId, options = {}) {
    validateRequiredParameters({ transactionId })
    return this.signRequest(
      'GET',
      '/sapi/v1/lending/auto-invest/one-off/status',
      Object.assign(options, {
        transactionId
      })
    )
  }

  /**
   * Index Linked Plan Redemption (TRADE)<br>
   *
   * POST /sapi/v1/lending/auto-invest/redeem<br>
   *
   * {@link https://developers.binance.com/docs/auto_invest/trade/Index-Linked-Plan-Redemption}
   *
   * @param {number} indexId - PORTFOLIO plan's Id
   * @param {number} redemptionPercentage - user redeem percentage,10/20/100.
   * @param {object} [options]
   * @param {string} [options.requestId] - sourceType + unique, transactionId and requestId cannot be empty at the same time
   * @param {number} [options.recvWindow] - The value cannot be greater than 60000
   */
  indexLinkedPlanRedemption (indexId, redemptionPercentage, options = {}) {
    validateRequiredParameters({ indexId, redemptionPercentage })
    return this.signRequest(
      'POST',
      '/sapi/v1/lending/auto-invest/redeem',
      Object.assign(options, {
        indexId,
        redemptionPercentage
      })
    )
  }

  /**
   * Index Linked Plan Redemption History (USER_DATA)<br>
   *
   * GET /sapi/v1/lending/auto-invest/redeem/history<br>
   *
   * {@link https://developers.binance.com/docs/auto_invest/trade/Query-Index-Linked-Plan-Redemption}
   *
   * @param {number} requestId
   * @param {object} [options]
   * @param {number} [options.startTime] - UTC timestamp in ms
   * @param {number} [options.endTime] - UTC timestamp in ms
   * @param {number} [options.current] - Current querying page. Start from 1. Default:1
   * @param {string} [options.asset]
   * @param {number} [options.size] - Default:10 Max:100
   * @param {number} [options.recvWindow] - The value cannot be greater than 60000
   */
  indexLinkedPlanRedemptionHistory (requestId, options = {}) {
    validateRequiredParameters({ requestId })
    return this.signRequest(
      'GET',
      '/sapi/v1/lending/auto-invest/redeem/history',
      Object.assign(options, {
        requestId
      })
    )
  }

  /**
   * Index Linked Plan Rebalance Details (USER_DATA)<br>
   *
   * GET /sapi/v1/lending/auto-invest/rebalance/history<br>
   *
   * {@link https://developers.binance.com/docs/auto_invest/trade/Index-Linked-Plan-Rebalance-Details}
   *
   * @param {object} [options]
   * @param {number} [options.startTime] - UTC timestamp in ms
   * @param {number} [options.endTime] - UTC timestamp in ms
   * @param {number} [options.current] - Current querying page. Start from 1. Default:1
   * @param {number} [options.size] - Default:10 Max:100
   * @param {number} [options.recvWindow] - The value cannot be greater than 60000
   */
  indexLinkedPlanRebalanceDetails (options = {}) {
    return this.signRequest(
      'GET',
      '/sapi/v1/lending/auto-invest/rebalance/history',
      options
    )
  }
}

module.exports = AutoInvest