diff --git a/CHANGELOG.md b/CHANGELOG.md
index a71a33cf..9ee17d3e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,24 @@
# Changelog
+
+## 3.1.0 - 2023-12-18
+
+### Added
+- Add Auto Invest endpoints
+- `GET /sapi/v1/margin/available-inventory` Query margin available inventory
+- `POST /sapi/v1/margin/manual-liquidation` Margin manual liquidation
+
+### Changed
+- Update dependencies
+
+### Removed
+- `GET /sapi/v1/futures/loan/borrow/history`
+- `GET /sapi/v1/futures/loan/repay/history`
+- `GET /sapi/v2/futures/loan/wallet`
+- `GET /sapi/v1/futures/loan/adjustCollateral/history`
+- `GET /sapi/v1/futures/loan/liquidationHistory`
+- `GET /sapi/v1/futures/loan/interestHistory`
+
## 3.0.0 - 2023-10-20
### Changed
diff --git a/__tests__/spot/auto-invest/changePlanStatus.test.js b/__tests__/spot/auto-invest/changePlanStatus.test.js
new file mode 100644
index 00000000..2f4dc757
--- /dev/null
+++ b/__tests__/spot/auto-invest/changePlanStatus.test.js
@@ -0,0 +1,34 @@
+/* global describe, it, expect */
+const { nockPostMock, buildQueryString, SpotClient } = require('../../testUtils/testSetup')
+const MissingParameterError = require('../../../src/error/missingParameterError')
+
+const {
+ mockResponse,
+ recvWindow
+} = require('../../testUtils/mockData')
+
+const planId = 12345
+const status = 'ONGOING'
+
+describe('#changePlanStatus', () => {
+ it.each([
+ [null, null],
+ [null, status],
+ [planId, null]
+ ])('should throw MissingParameterError given missing params', (planId, status) => {
+ expect(() => {
+ SpotClient.changePlanStatus(planId, status)
+ }).toThrow(MissingParameterError)
+ })
+
+ it('should change plan status', () => {
+ const parameters = {
+ recvWindow
+ }
+ nockPostMock(`/sapi/v1/lending/auto-invest/plan/edit-status?${buildQueryString({ planId, status, ...parameters })}`)(mockResponse)
+ return SpotClient.changePlanStatus(planId, status, parameters).then(response => {
+ expect(response).toBeDefined()
+ expect(response.data).toEqual(mockResponse)
+ })
+ })
+})
diff --git a/__tests__/spot/auto-invest/getListOfPlans.test.js b/__tests__/spot/auto-invest/getListOfPlans.test.js
new file mode 100644
index 00000000..49197cd9
--- /dev/null
+++ b/__tests__/spot/auto-invest/getListOfPlans.test.js
@@ -0,0 +1,28 @@
+/* global describe, it, expect */
+const { nockMock, buildQueryString, SpotClient } = require('../../testUtils/testSetup')
+const MissingParameterError = require('../../../src/error/missingParameterError')
+
+const {
+ mockResponse,
+ recvWindow
+} = require('../../testUtils/mockData')
+
+const planType = 'SINGLE'
+
+describe('#getListOfPlans', () => {
+ it('throw MissingParameterError when missing planType', () => {
+ expect(() => {
+ SpotClient.getListOfPlans(null)
+ }).toThrow(MissingParameterError)
+ })
+ it('should get list of plans', () => {
+ const parameters = {
+ recvWindow
+ }
+ nockMock(`/sapi/v1/lending/auto-invest/plan/list?${buildQueryString({ planType, ...parameters })}`)(mockResponse)
+ return SpotClient.getListOfPlans(planType, parameters).then(response => {
+ expect(response).toBeDefined()
+ expect(response.data).toEqual(mockResponse)
+ })
+ })
+})
diff --git a/__tests__/spot/auto-invest/getTargetAssetList.test.js b/__tests__/spot/auto-invest/getTargetAssetList.test.js
new file mode 100644
index 00000000..d0712d44
--- /dev/null
+++ b/__tests__/spot/auto-invest/getTargetAssetList.test.js
@@ -0,0 +1,33 @@
+/* global describe, it, expect */
+const { nockMock, buildQueryString, SpotClient } = require('../../testUtils/testSetup')
+
+const {
+ mockResponse,
+ recvWindow
+} = require('../../testUtils/mockData')
+
+const size = 100
+const current = 1
+
+describe('#getTargetAssetList', () => {
+ it('should get target asset list without parameter attached', () => {
+ nockMock('/sapi/v1/lending/auto-invest/target-asset/list')(mockResponse)
+ return SpotClient.getTargetAssetList().then(response => {
+ expect(response).toBeDefined()
+ expect(response.data).toEqual(mockResponse)
+ })
+ })
+
+ it('should get target asset list', () => {
+ const parameters = {
+ size,
+ current,
+ recvWindow
+ }
+ nockMock(`/sapi/v1/lending/auto-invest/target-asset/list?${buildQueryString({ ...parameters })}`)(mockResponse)
+ return SpotClient.getTargetAssetList(parameters).then(response => {
+ expect(response).toBeDefined()
+ expect(response.data).toEqual(mockResponse)
+ })
+ })
+})
diff --git a/__tests__/spot/auto-invest/getTargetAssetRoiData.test.js b/__tests__/spot/auto-invest/getTargetAssetRoiData.test.js
new file mode 100644
index 00000000..6220e2d1
--- /dev/null
+++ b/__tests__/spot/auto-invest/getTargetAssetRoiData.test.js
@@ -0,0 +1,34 @@
+/* global describe, it, expect */
+const { nockMock, buildQueryString, SpotClient } = require('../../testUtils/testSetup')
+const MissingParameterError = require('../../../src/error/missingParameterError')
+
+const {
+ mockResponse,
+ recvWindow
+} = require('../../testUtils/mockData')
+
+const targetAsset = 'BTC'
+const hisRoiType = 'FIVE_YEAR'
+
+describe('#getTargetAssetRoiData', () => {
+ it.each([
+ [null, null],
+ [null, hisRoiType],
+ [targetAsset, null]
+ ])('should throw MissingParameterError given missing params', (targetAsset, hisRoiType) => {
+ expect(() => {
+ SpotClient.getTargetAssetRoiData(targetAsset, hisRoiType)
+ }).toThrow(MissingParameterError)
+ })
+
+ it('should get target asset roi data', () => {
+ const parameters = {
+ recvWindow
+ }
+ nockMock(`/sapi/v1/lending/auto-invest/target-asset/roi/list?${buildQueryString({ targetAsset, hisRoiType, ...parameters })}`)(mockResponse)
+ return SpotClient.getTargetAssetRoiData(targetAsset, hisRoiType, parameters).then(response => {
+ expect(response).toBeDefined()
+ expect(response.data).toEqual(mockResponse)
+ })
+ })
+})
diff --git a/__tests__/spot/auto-invest/indexLinkedPlanRebalanceDetails.test.js b/__tests__/spot/auto-invest/indexLinkedPlanRebalanceDetails.test.js
new file mode 100644
index 00000000..ff5acf0c
--- /dev/null
+++ b/__tests__/spot/auto-invest/indexLinkedPlanRebalanceDetails.test.js
@@ -0,0 +1,33 @@
+/* global describe, it, expect */
+const { nockMock, buildQueryString, SpotClient } = require('../../testUtils/testSetup')
+
+const {
+ mockResponse,
+ recvWindow
+} = require('../../testUtils/mockData')
+
+const current = 1
+const size = 100
+
+describe('#indexLinkedPlanRebalanceDetails', () => {
+ it('should index linked plan rebalance details without parameter attached', () => {
+ nockMock('/sapi/v1/lending/auto-invest/rebalance/history')(mockResponse)
+ return SpotClient.indexLinkedPlanRebalanceDetails().then(response => {
+ expect(response).toBeDefined()
+ expect(response.data).toEqual(mockResponse)
+ })
+ })
+
+ it('should index linked plan rebalance details', () => {
+ const parameters = {
+ current,
+ size,
+ recvWindow
+ }
+ nockMock(`/sapi/v1/lending/auto-invest/rebalance/history?${buildQueryString({ ...parameters })}`)(mockResponse)
+ return SpotClient.indexLinkedPlanRebalanceDetails(parameters).then(response => {
+ expect(response).toBeDefined()
+ expect(response.data).toEqual(mockResponse)
+ })
+ })
+})
diff --git a/__tests__/spot/auto-invest/indexLinkedPlanRedemption.test.js b/__tests__/spot/auto-invest/indexLinkedPlanRedemption.test.js
new file mode 100644
index 00000000..b297a90a
--- /dev/null
+++ b/__tests__/spot/auto-invest/indexLinkedPlanRedemption.test.js
@@ -0,0 +1,31 @@
+/* global describe, it, expect */
+const { nockPostMock, buildQueryString, SpotClient } = require('../../testUtils/testSetup')
+const MissingParameterError = require('../../../src/error/missingParameterError')
+
+const {
+ mockResponse,
+ recvWindow
+} = require('../../testUtils/mockData')
+
+const requestId = 12345
+const indexId = 1
+const redemptionPercentage = 10
+
+describe('#indexLinkedPlanRedemption', () => {
+ it('throw MissingParameterError when missing requestId', () => {
+ expect(() => {
+ SpotClient.indexLinkedPlanRedemption(null)
+ }).toThrow(MissingParameterError)
+ })
+ it('should index linked plan redemption', () => {
+ const parameters = {
+ requestId,
+ recvWindow
+ }
+ nockPostMock(`/sapi/v1/lending/auto-invest/redeem?${buildQueryString({ indexId, redemptionPercentage, ...parameters })}`)(mockResponse)
+ return SpotClient.indexLinkedPlanRedemption(indexId, redemptionPercentage, parameters).then(response => {
+ expect(response).toBeDefined()
+ expect(response.data).toEqual(mockResponse)
+ })
+ })
+})
diff --git a/__tests__/spot/auto-invest/indexLinkedPlanRedemptionHistory.test.js b/__tests__/spot/auto-invest/indexLinkedPlanRedemptionHistory.test.js
new file mode 100644
index 00000000..9d53bda2
--- /dev/null
+++ b/__tests__/spot/auto-invest/indexLinkedPlanRedemptionHistory.test.js
@@ -0,0 +1,34 @@
+/* global describe, it, expect */
+const { nockMock, buildQueryString, SpotClient } = require('../../testUtils/testSetup')
+const MissingParameterError = require('../../../src/error/missingParameterError')
+
+const {
+ mockResponse,
+ asset,
+ recvWindow
+} = require('../../testUtils/mockData')
+
+const requestId = 12345
+const current = 1
+const size = 100
+
+describe('#indexLinkedPlanRedemptionHistory', () => {
+ it('throw MissingParameterError when missing requestId', () => {
+ expect(() => {
+ SpotClient.indexLinkedPlanRedemptionHistory(null)
+ }).toThrow(MissingParameterError)
+ })
+ it('should index linked plan redemption history', () => {
+ const parameters = {
+ current,
+ asset,
+ size,
+ recvWindow
+ }
+ nockMock(`/sapi/v1/lending/auto-invest/redeem/history?${buildQueryString({ requestId, ...parameters })}`)(mockResponse)
+ return SpotClient.indexLinkedPlanRedemptionHistory(requestId, parameters).then(response => {
+ expect(response).toBeDefined()
+ expect(response.data).toEqual(mockResponse)
+ })
+ })
+})
diff --git a/__tests__/spot/auto-invest/queryAllSourceAssetAndTargetAsset.test.js b/__tests__/spot/auto-invest/queryAllSourceAssetAndTargetAsset.test.js
new file mode 100644
index 00000000..62e83251
--- /dev/null
+++ b/__tests__/spot/auto-invest/queryAllSourceAssetAndTargetAsset.test.js
@@ -0,0 +1,28 @@
+/* global describe, it, expect */
+const { nockMock, buildQueryString, SpotClient } = require('../../testUtils/testSetup')
+
+const {
+ mockResponse,
+ recvWindow
+} = require('../../testUtils/mockData')
+
+describe('#queryAllSourceAssetAndTargetAsset', () => {
+ it('should query all source asset and target asset without parameter attached', () => {
+ nockMock('/sapi/v1/lending/auto-invest/all/asset')(mockResponse)
+ return SpotClient.queryAllSourceAssetAndTargetAsset().then(response => {
+ expect(response).toBeDefined()
+ expect(response.data).toEqual(mockResponse)
+ })
+ })
+
+ it('should query all source asset and target asset', () => {
+ const parameters = {
+ recvWindow
+ }
+ nockMock(`/sapi/v1/lending/auto-invest/all/asset?${buildQueryString({ ...parameters })}`)(mockResponse)
+ return SpotClient.queryAllSourceAssetAndTargetAsset(parameters).then(response => {
+ expect(response).toBeDefined()
+ expect(response.data).toEqual(mockResponse)
+ })
+ })
+})
diff --git a/__tests__/spot/futures/futuresLoanBorrowHistory.test.js b/__tests__/spot/auto-invest/queryHoldingDetailsOfThePlan.test.js
similarity index 50%
rename from __tests__/spot/futures/futuresLoanBorrowHistory.test.js
rename to __tests__/spot/auto-invest/queryHoldingDetailsOfThePlan.test.js
index cfd5e5e9..9823c838 100644
--- a/__tests__/spot/futures/futuresLoanBorrowHistory.test.js
+++ b/__tests__/spot/auto-invest/queryHoldingDetailsOfThePlan.test.js
@@ -3,28 +3,24 @@ const { nockMock, buildQueryString, SpotClient } = require('../../testUtils/test
const {
mockResponse,
- coin,
recvWindow
} = require('../../testUtils/mockData')
-describe('#futuresLoanBorrowHistory', () => {
- it('should get cross-collateral borrow history without parameter attached', () => {
- nockMock('/sapi/v1/futures/loan/borrow/history')(mockResponse)
-
- return SpotClient.futuresLoanBorrowHistory().then(response => {
+describe('#queryHoldingDetailsOfThePlan', () => {
+ it('should query holding details of the plan without parameter attached', () => {
+ nockMock('/sapi/v1/lending/auto-invest/plan/id')(mockResponse)
+ return SpotClient.queryHoldingDetailsOfThePlan().then(response => {
expect(response).toBeDefined()
expect(response.data).toEqual(mockResponse)
})
})
- it('should get cross-collateral borrow history', () => {
+ it('should query holding details of the plan', () => {
const parameters = {
- coin,
recvWindow
}
- nockMock(`/sapi/v1/futures/loan/borrow/history?${buildQueryString({ ...parameters })}`)(mockResponse)
-
- return SpotClient.futuresLoanBorrowHistory(parameters).then(response => {
+ nockMock(`/sapi/v1/lending/auto-invest/plan/id?${buildQueryString({ ...parameters })}`)(mockResponse)
+ return SpotClient.queryHoldingDetailsOfThePlan(parameters).then(response => {
expect(response).toBeDefined()
expect(response.data).toEqual(mockResponse)
})
diff --git a/__tests__/spot/auto-invest/queryIndexDetails.test.js b/__tests__/spot/auto-invest/queryIndexDetails.test.js
new file mode 100644
index 00000000..5dfd91ee
--- /dev/null
+++ b/__tests__/spot/auto-invest/queryIndexDetails.test.js
@@ -0,0 +1,28 @@
+/* global describe, it, expect */
+const { nockMock, buildQueryString, SpotClient } = require('../../testUtils/testSetup')
+const MissingParameterError = require('../../../src/error/missingParameterError')
+
+const {
+ mockResponse,
+ recvWindow
+} = require('../../testUtils/mockData')
+
+const indexId = 1
+
+describe('#queryIndexDetails', () => {
+ it('throw MissingParameterError when missing indexId', () => {
+ expect(() => {
+ SpotClient.queryIndexDetails(null)
+ }).toThrow(MissingParameterError)
+ })
+ it('should query index details', () => {
+ const parameters = {
+ recvWindow
+ }
+ nockMock(`/sapi/v1/lending/auto-invest/index/info?${buildQueryString({ indexId, ...parameters })}`)(mockResponse)
+ return SpotClient.queryIndexDetails(indexId, parameters).then(response => {
+ expect(response).toBeDefined()
+ expect(response.data).toEqual(mockResponse)
+ })
+ })
+})
diff --git a/__tests__/spot/auto-invest/queryIndexLinkedPlanPositionDetails.test.js b/__tests__/spot/auto-invest/queryIndexLinkedPlanPositionDetails.test.js
new file mode 100644
index 00000000..b2d122bd
--- /dev/null
+++ b/__tests__/spot/auto-invest/queryIndexLinkedPlanPositionDetails.test.js
@@ -0,0 +1,28 @@
+/* global describe, it, expect */
+const { nockMock, buildQueryString, SpotClient } = require('../../testUtils/testSetup')
+const MissingParameterError = require('../../../src/error/missingParameterError')
+
+const {
+ mockResponse,
+ recvWindow
+} = require('../../testUtils/mockData')
+
+const indexId = 1
+
+describe('#queryIndexLinkedPlanPositionDetails', () => {
+ it('throw MissingParameterError when missing indexId', () => {
+ expect(() => {
+ SpotClient.queryIndexLinkedPlanPositionDetails(null)
+ }).toThrow(MissingParameterError)
+ })
+ it('should query index linked plan position details', () => {
+ const parameters = {
+ recvWindow
+ }
+ nockMock(`/sapi/v1/lending/auto-invest/index/user-summary?${buildQueryString({ indexId, ...parameters })}`)(mockResponse)
+ return SpotClient.queryIndexLinkedPlanPositionDetails(indexId, parameters).then(response => {
+ expect(response).toBeDefined()
+ expect(response.data).toEqual(mockResponse)
+ })
+ })
+})
diff --git a/__tests__/spot/auto-invest/queryOnetimeTransactionStatus.test.js b/__tests__/spot/auto-invest/queryOnetimeTransactionStatus.test.js
new file mode 100644
index 00000000..1787c3f6
--- /dev/null
+++ b/__tests__/spot/auto-invest/queryOnetimeTransactionStatus.test.js
@@ -0,0 +1,30 @@
+/* global describe, it, expect */
+const { nockMock, buildQueryString, SpotClient } = require('../../testUtils/testSetup')
+const MissingParameterError = require('../../../src/error/missingParameterError')
+
+const {
+ mockResponse,
+ recvWindow
+} = require('../../testUtils/mockData')
+
+const transactionId = 12345
+const requestId = 'TR12354859'
+
+describe('#queryOnetimeTransactionStatus', () => {
+ it('throw MissingParameterError when missing transactionId', () => {
+ expect(() => {
+ SpotClient.queryOnetimeTransactionStatus(null)
+ }).toThrow(MissingParameterError)
+ })
+ it('should query one-time transaction status', () => {
+ const parameters = {
+ requestId,
+ recvWindow
+ }
+ nockMock(`/sapi/v1/lending/auto-invest/one-off/status?${buildQueryString({ transactionId, ...parameters })}`)(mockResponse)
+ return SpotClient.queryOnetimeTransactionStatus(transactionId, parameters).then(response => {
+ expect(response).toBeDefined()
+ expect(response.data).toEqual(mockResponse)
+ })
+ })
+})
diff --git a/__tests__/spot/auto-invest/querySourceAssetList.test.js b/__tests__/spot/auto-invest/querySourceAssetList.test.js
new file mode 100644
index 00000000..64ede742
--- /dev/null
+++ b/__tests__/spot/auto-invest/querySourceAssetList.test.js
@@ -0,0 +1,34 @@
+/* global describe, it, expect */
+const { nockMock, buildQueryString, SpotClient } = require('../../testUtils/testSetup')
+const MissingParameterError = require('../../../src/error/missingParameterError')
+
+const {
+ mockResponse,
+ recvWindow
+} = require('../../testUtils/mockData')
+
+const targetAsset = 'BTC'
+const indexId = 1
+const usageType = 'RECURRING'
+const flexibleAllowedToUse = true
+
+describe('#querySourceAssetList', () => {
+ it('throw MissingParameterError when missing usageType', () => {
+ expect(() => {
+ SpotClient.querySourceAssetList(null)
+ }).toThrow(MissingParameterError)
+ })
+ it('should query source asset list', () => {
+ const parameters = {
+ targetAsset,
+ indexId,
+ flexibleAllowedToUse,
+ recvWindow
+ }
+ nockMock(`/sapi/v1/lending/auto-invest/source-asset/list?${buildQueryString({ usageType, ...parameters })}`)(mockResponse)
+ return SpotClient.querySourceAssetList(usageType, parameters).then(response => {
+ expect(response).toBeDefined()
+ expect(response.data).toEqual(mockResponse)
+ })
+ })
+})
diff --git a/__tests__/spot/auto-invest/querySubscriptionTransactionHistory.test.js b/__tests__/spot/auto-invest/querySubscriptionTransactionHistory.test.js
new file mode 100644
index 00000000..38697884
--- /dev/null
+++ b/__tests__/spot/auto-invest/querySubscriptionTransactionHistory.test.js
@@ -0,0 +1,33 @@
+/* global describe, it, expect */
+const { nockMock, buildQueryString, SpotClient } = require('../../testUtils/testSetup')
+
+const {
+ mockResponse,
+ recvWindow
+} = require('../../testUtils/mockData')
+
+const size = 100
+const current = 1
+
+describe('#querySubscriptionTransactionHistory', () => {
+ it('should query subscription transaction history without parameter attached', () => {
+ nockMock('/sapi/v1/lending/auto-invest/history/list')(mockResponse)
+ return SpotClient.querySubscriptionTransactionHistory().then(response => {
+ expect(response).toBeDefined()
+ expect(response.data).toEqual(mockResponse)
+ })
+ })
+
+ it('should query subscription transaction history', () => {
+ const parameters = {
+ size,
+ current,
+ recvWindow
+ }
+ nockMock(`/sapi/v1/lending/auto-invest/history/list?${buildQueryString({ ...parameters })}`)(mockResponse)
+ return SpotClient.querySubscriptionTransactionHistory(parameters).then(response => {
+ expect(response).toBeDefined()
+ expect(response.data).toEqual(mockResponse)
+ })
+ })
+})
diff --git a/__tests__/spot/futures/futuresLoanAdjustCollateralHistory.test.js b/__tests__/spot/futures/futuresLoanAdjustCollateralHistory.test.js
deleted file mode 100644
index 711c374f..00000000
--- a/__tests__/spot/futures/futuresLoanAdjustCollateralHistory.test.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/* global describe, it, expect */
-const { nockMock, SpotClient } = require('../../testUtils/testSetup')
-const { mockResponse } = require('../../testUtils/mockData')
-
-describe('#futuresLoanAdjustCollateralHistory', () => {
- it('should get adjust cross collateral LTV history', () => {
- nockMock('/sapi/v1/futures/loan/adjustCollateral/history')(mockResponse)
-
- return SpotClient.futuresLoanAdjustCollateralHistory().then(response => {
- expect(response).toBeDefined()
- expect(response.data).toEqual(mockResponse)
- })
- })
-})
diff --git a/__tests__/spot/futures/futuresLoanInterestHistory.test.js b/__tests__/spot/futures/futuresLoanInterestHistory.test.js
deleted file mode 100644
index 8c9aa7da..00000000
--- a/__tests__/spot/futures/futuresLoanInterestHistory.test.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/* global describe, it, expect */
-const { nockMock, SpotClient } = require('../../testUtils/testSetup')
-const { mockResponse } = require('../../testUtils/mockData')
-
-describe('#futuresLoanInterestHistory', () => {
- it('should get cross collateral interest history', () => {
- nockMock('/sapi/v1/futures/loan/interestHistory')(mockResponse)
-
- return SpotClient.futuresLoanInterestHistory().then(response => {
- expect(response).toBeDefined()
- expect(response.data).toEqual(mockResponse)
- })
- })
-})
diff --git a/__tests__/spot/futures/futuresLoanLiquidationHistory.test.js b/__tests__/spot/futures/futuresLoanLiquidationHistory.test.js
deleted file mode 100644
index 55141cba..00000000
--- a/__tests__/spot/futures/futuresLoanLiquidationHistory.test.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/* global describe, it, expect */
-const { nockMock, SpotClient } = require('../../testUtils/testSetup')
-const { mockResponse } = require('../../testUtils/mockData')
-
-describe('#futuresLoanLiquidationHistory', () => {
- it('should get cross collateral liquidation history', () => {
- nockMock('/sapi/v1/futures/loan/liquidationHistory')(mockResponse)
-
- return SpotClient.futuresLoanLiquidationHistory().then(response => {
- expect(response).toBeDefined()
- expect(response.data).toEqual(mockResponse)
- })
- })
-})
diff --git a/__tests__/spot/futures/futuresLoanRepayHistory.test.js b/__tests__/spot/futures/futuresLoanRepayHistory.test.js
deleted file mode 100644
index 23e55fe1..00000000
--- a/__tests__/spot/futures/futuresLoanRepayHistory.test.js
+++ /dev/null
@@ -1,32 +0,0 @@
-/* global describe, it, expect */
-const { nockMock, buildQueryString, SpotClient } = require('../../testUtils/testSetup')
-
-const {
- mockResponse,
- coin,
- recvWindow
-} = require('../../testUtils/mockData')
-
-describe('#futuresLoanRepayHistory', () => {
- it('should get cross-collateral repay history without parameter attached', () => {
- nockMock('/sapi/v1/futures/loan/repay/history')(mockResponse)
-
- return SpotClient.futuresLoanRepayHistory().then(response => {
- expect(response).toBeDefined()
- expect(response.data).toEqual(mockResponse)
- })
- })
-
- it('should get cross-collateral repay history', () => {
- const parameters = {
- coin,
- recvWindow
- }
- nockMock(`/sapi/v1/futures/loan/repay/history?${buildQueryString({ ...parameters })}`)(mockResponse)
-
- return SpotClient.futuresLoanRepayHistory(parameters).then(response => {
- expect(response).toBeDefined()
- expect(response.data).toEqual(mockResponse)
- })
- })
-})
diff --git a/__tests__/spot/futures/futuresLoanWallet.test.js b/__tests__/spot/futures/futuresLoanWallet.test.js
deleted file mode 100644
index 6a023e73..00000000
--- a/__tests__/spot/futures/futuresLoanWallet.test.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/* global describe, it, expect */
-const { nockMock, SpotClient } = require('../../testUtils/testSetup')
-const { mockResponse } = require('../../testUtils/mockData')
-
-describe('#futuresLoanWallet', () => {
- it('should get cross-collateral wallet', () => {
- nockMock('/sapi/v2/futures/loan/wallet')(mockResponse)
-
- return SpotClient.futuresLoanWallet().then(response => {
- expect(response).toBeDefined()
- expect(response.data).toEqual(mockResponse)
- })
- })
-})
diff --git a/__tests__/spot/margin/marginManualLiquidation.test.js b/__tests__/spot/margin/marginManualLiquidation.test.js
new file mode 100644
index 00000000..b0095d05
--- /dev/null
+++ b/__tests__/spot/margin/marginManualLiquidation.test.js
@@ -0,0 +1,27 @@
+/* global describe, it, expect */
+const { nockPostMock, buildQueryString, SpotClient } = require('../../testUtils/testSetup')
+const MissingParameterError = require('../../../src/error/missingParameterError')
+
+const {
+ mockResponse,
+ symbol
+} = require('../../testUtils/mockData')
+
+const type = 'MARGIN'
+describe('#marginManualLiquidation', () => {
+ it('throw MissingParameterError when missing type', () => {
+ expect(() => {
+ SpotClient.marginManualLiquidation(null)
+ }).toThrow(MissingParameterError)
+ })
+ it('should margin manual liquidation', () => {
+ const parameters = {
+ symbol
+ }
+ nockPostMock(`/sapi/v1/margin/manual-liquidation?${buildQueryString({ type, ...parameters })}`)(mockResponse)
+ return SpotClient.marginManualLiquidation(type, parameters).then(response => {
+ expect(response).toBeDefined()
+ expect(response.data).toEqual(mockResponse)
+ })
+ })
+})
diff --git a/__tests__/spot/margin/queryMarginAvailableInventory.test.js b/__tests__/spot/margin/queryMarginAvailableInventory.test.js
new file mode 100644
index 00000000..bcc754d7
--- /dev/null
+++ b/__tests__/spot/margin/queryMarginAvailableInventory.test.js
@@ -0,0 +1,28 @@
+/* global describe, it, expect */
+const { nockMock, buildQueryString, SpotClient } = require('../../testUtils/testSetup')
+const MissingParameterError = require('../../../src/error/missingParameterError')
+
+const {
+ mockResponse,
+ symbol
+} = require('../../testUtils/mockData')
+
+const type = 'MARGIN'
+
+describe('#queryMarginAvailableInventory', () => {
+ it('throw MissingParameterError when missing type', () => {
+ expect(() => {
+ SpotClient.queryMarginAvailableInventory(null)
+ }).toThrow(MissingParameterError)
+ })
+ it('should query margin available inventory', () => {
+ const parameters = {
+ symbol
+ }
+ nockMock(`/sapi/v1/margin/available-inventory?${buildQueryString({ type, ...parameters })}`)(mockResponse)
+ return SpotClient.queryMarginAvailableInventory(type, parameters).then(response => {
+ expect(response).toBeDefined()
+ expect(response.data).toEqual(mockResponse)
+ })
+ })
+})
diff --git a/examples/spot/auto_invest/changePlanStatus.js b/examples/spot/auto_invest/changePlanStatus.js
new file mode 100644
index 00000000..2748c43d
--- /dev/null
+++ b/examples/spot/auto_invest/changePlanStatus.js
@@ -0,0 +1,11 @@
+const Spot = require('../../../src/spot')
+
+const apiKey = ''
+const apiSecret = ''
+const client = new Spot(apiKey, apiSecret)
+
+client.changePlanStatus(1234, 'ONGOING', {
+ recvWindow: 5000
+})
+ .then(response => client.logger.log(response.data))
+ .catch(error => client.logger.error(error))
diff --git a/examples/spot/auto_invest/getListOfPlans.js b/examples/spot/auto_invest/getListOfPlans.js
new file mode 100644
index 00000000..335473f9
--- /dev/null
+++ b/examples/spot/auto_invest/getListOfPlans.js
@@ -0,0 +1,11 @@
+const Spot = require('../../../src/spot')
+
+const apiKey = ''
+const apiSecret = ''
+const client = new Spot(apiKey, apiSecret)
+
+client.getListOfPlans('SINGLE', {
+ recvWindow: 5000
+})
+ .then(response => client.logger.log(response.data))
+ .catch(error => client.logger.error(error))
diff --git a/examples/spot/auto_invest/getTargetAssetList.js b/examples/spot/auto_invest/getTargetAssetList.js
new file mode 100644
index 00000000..084e51dd
--- /dev/null
+++ b/examples/spot/auto_invest/getTargetAssetList.js
@@ -0,0 +1,13 @@
+const Spot = require('../../../src/spot')
+
+const apiKey = ''
+const apiSecret = ''
+const client = new Spot(apiKey, apiSecret)
+
+client.getTargetAssetList({
+ size: 100,
+ current: 1,
+ recvWindow: 5000
+})
+ .then(response => client.logger.log(response.data))
+ .catch(error => client.logger.error(error))
diff --git a/examples/spot/auto_invest/getTargetAssetRoiData.js b/examples/spot/auto_invest/getTargetAssetRoiData.js
new file mode 100644
index 00000000..2d8dc86e
--- /dev/null
+++ b/examples/spot/auto_invest/getTargetAssetRoiData.js
@@ -0,0 +1,11 @@
+const Spot = require('../../../src/spot')
+
+const apiKey = ''
+const apiSecret = ''
+const client = new Spot(apiKey, apiSecret)
+
+client.getTargetAssetRoiData('BTC', 'FIVE_YEAR', {
+ recvWindow: 5000
+})
+ .then(response => client.logger.log(response.data))
+ .catch(error => client.logger.error(error))
diff --git a/examples/spot/auto_invest/indexLinkedPlanRebalanceDetails.js b/examples/spot/auto_invest/indexLinkedPlanRebalanceDetails.js
new file mode 100644
index 00000000..c9c12e7f
--- /dev/null
+++ b/examples/spot/auto_invest/indexLinkedPlanRebalanceDetails.js
@@ -0,0 +1,13 @@
+const Spot = require('../../../src/spot')
+
+const apiKey = ''
+const apiSecret = ''
+const client = new Spot(apiKey, apiSecret)
+
+client.indexLinkedPlanRebalanceDetails({
+ current: 1,
+ size: 100,
+ recvWindow: 5000
+})
+ .then(response => client.logger.log(response.data))
+ .catch(error => client.logger.error(error))
diff --git a/examples/spot/auto_invest/indexLinkedPlanRedemption.js b/examples/spot/auto_invest/indexLinkedPlanRedemption.js
new file mode 100644
index 00000000..15e7bb35
--- /dev/null
+++ b/examples/spot/auto_invest/indexLinkedPlanRedemption.js
@@ -0,0 +1,14 @@
+const Spot = require('../../../src/spot')
+
+const apiKey = ''
+const apiSecret = ''
+const client = new Spot(apiKey, apiSecret)
+
+client.indexLinkedPlanRedemption(12345, {
+ current: 1,
+ asset: 'BTC',
+ size: 100,
+ recvWindow: 5000
+})
+ .then(response => client.logger.log(response.data))
+ .catch(error => client.logger.error(error))
diff --git a/examples/spot/auto_invest/indexLinkedPlanRedemptionHistory.js b/examples/spot/auto_invest/indexLinkedPlanRedemptionHistory.js
new file mode 100644
index 00000000..eb8b434a
--- /dev/null
+++ b/examples/spot/auto_invest/indexLinkedPlanRedemptionHistory.js
@@ -0,0 +1,14 @@
+const Spot = require('../../../src/spot')
+
+const apiKey = ''
+const apiSecret = ''
+const client = new Spot(apiKey, apiSecret)
+
+client.indexLinkedPlanRedemptionHistory(12345, {
+ current: 1,
+ asset: 'BTC',
+ size: 100,
+ recvWindow: 5000
+})
+ .then(response => client.logger.log(response.data))
+ .catch(error => client.logger.error(error))
diff --git a/examples/spot/auto_invest/queryAllSourceAssetAndTargetAsset.js b/examples/spot/auto_invest/queryAllSourceAssetAndTargetAsset.js
new file mode 100644
index 00000000..dcea83d9
--- /dev/null
+++ b/examples/spot/auto_invest/queryAllSourceAssetAndTargetAsset.js
@@ -0,0 +1,11 @@
+const Spot = require('../../../src/spot')
+
+const apiKey = ''
+const apiSecret = ''
+const client = new Spot(apiKey, apiSecret)
+
+client.queryAllSourceAssetAndTargetAsset({
+ recvWindow: 5000
+})
+ .then(response => client.logger.log(response.data))
+ .catch(error => client.logger.error(error))
diff --git a/examples/spot/auto_invest/queryHoldingDetailsOfThePlan.js b/examples/spot/auto_invest/queryHoldingDetailsOfThePlan.js
new file mode 100644
index 00000000..830a4f9d
--- /dev/null
+++ b/examples/spot/auto_invest/queryHoldingDetailsOfThePlan.js
@@ -0,0 +1,11 @@
+const Spot = require('../../../src/spot')
+
+const apiKey = ''
+const apiSecret = ''
+const client = new Spot(apiKey, apiSecret)
+
+client.queryHoldingDetailsOfThePlan({
+ recvWindow: 5000
+})
+ .then(response => client.logger.log(response.data))
+ .catch(error => client.logger.error(error))
diff --git a/examples/spot/auto_invest/queryIndexDetails.js b/examples/spot/auto_invest/queryIndexDetails.js
new file mode 100644
index 00000000..5bcbe917
--- /dev/null
+++ b/examples/spot/auto_invest/queryIndexDetails.js
@@ -0,0 +1,11 @@
+const Spot = require('../../../src/spot')
+
+const apiKey = ''
+const apiSecret = ''
+const client = new Spot(apiKey, apiSecret)
+
+client.queryIndexDetails(12345, {
+ recvWindow: 5000
+})
+ .then(response => client.logger.log(response.data))
+ .catch(error => client.logger.error(error))
diff --git a/examples/spot/auto_invest/queryIndexLinkedPlanPositionDetails.js b/examples/spot/auto_invest/queryIndexLinkedPlanPositionDetails.js
new file mode 100644
index 00000000..59112be4
--- /dev/null
+++ b/examples/spot/auto_invest/queryIndexLinkedPlanPositionDetails.js
@@ -0,0 +1,11 @@
+const Spot = require('../../../src/spot')
+
+const apiKey = ''
+const apiSecret = ''
+const client = new Spot(apiKey, apiSecret)
+
+client.queryIndexLinkedPlanPositionDetails(12345, {
+ recvWindow: 5000
+})
+ .then(response => client.logger.log(response.data))
+ .catch(error => client.logger.error(error))
diff --git a/examples/spot/auto_invest/queryOnetimeTransactionStatus.js b/examples/spot/auto_invest/queryOnetimeTransactionStatus.js
new file mode 100644
index 00000000..6f800713
--- /dev/null
+++ b/examples/spot/auto_invest/queryOnetimeTransactionStatus.js
@@ -0,0 +1,12 @@
+const Spot = require('../../../src/spot')
+
+const apiKey = ''
+const apiSecret = ''
+const client = new Spot(apiKey, apiSecret)
+
+client.queryOnetimeTransactionStatus(12345, {
+ requestId: 'TR12354859',
+ recvWindow: 5000
+})
+ .then(response => client.logger.log(response.data))
+ .catch(error => client.logger.error(error))
diff --git a/examples/spot/auto_invest/querySourceAssetList.js b/examples/spot/auto_invest/querySourceAssetList.js
new file mode 100644
index 00000000..3412ffe7
--- /dev/null
+++ b/examples/spot/auto_invest/querySourceAssetList.js
@@ -0,0 +1,14 @@
+const Spot = require('../../../src/spot')
+
+const apiKey = ''
+const apiSecret = ''
+const client = new Spot(apiKey, apiSecret)
+
+client.querySourceAssetList('RECURRING', {
+ targetAsset: 'BTC',
+ indexId: 1,
+ flexibleAllowedToUse: true,
+ recvWindow: 5000
+})
+ .then(response => client.logger.log(response.data))
+ .catch(error => client.logger.error(error))
diff --git a/examples/spot/auto_invest/querySubscriptionTransactionHistory.js b/examples/spot/auto_invest/querySubscriptionTransactionHistory.js
new file mode 100644
index 00000000..4769591d
--- /dev/null
+++ b/examples/spot/auto_invest/querySubscriptionTransactionHistory.js
@@ -0,0 +1,13 @@
+const Spot = require('../../../src/spot')
+
+const apiKey = ''
+const apiSecret = ''
+const client = new Spot(apiKey, apiSecret)
+
+client.querySubscriptionTransactionHistory({
+ size: 100,
+ current: 1,
+ recvWindow: 5000
+})
+ .then(response => client.logger.log(response.data))
+ .catch(error => client.logger.error(error))
diff --git a/examples/spot/futures/futuresLoanAdjustCollateralHistory.js b/examples/spot/futures/futuresLoanAdjustCollateralHistory.js
deleted file mode 100644
index b5062d81..00000000
--- a/examples/spot/futures/futuresLoanAdjustCollateralHistory.js
+++ /dev/null
@@ -1,11 +0,0 @@
-'use strict'
-
-const Spot = require('../../../src/spot')
-
-const apiKey = ''
-const apiSecret = ''
-const client = new Spot(apiKey, apiSecret)
-
-client.futuresLoanAdjustCollateralHistory('USDT', 'BUSD')
- .then(response => console.log(response.data))
- .catch(error => console.log(error))
diff --git a/examples/spot/futures/futuresLoanBorrowHistory.js b/examples/spot/futures/futuresLoanBorrowHistory.js
deleted file mode 100644
index 5103ae2f..00000000
--- a/examples/spot/futures/futuresLoanBorrowHistory.js
+++ /dev/null
@@ -1,11 +0,0 @@
-'use strict'
-
-const Spot = require('../../../src/spot')
-
-const apiKey = ''
-const apiSecret = ''
-const client = new Spot(apiKey, apiSecret)
-
-client.futuresLoanBorrowHistory()
- .then(response => console.log(response.data))
- .catch(error => console.log(error))
diff --git a/examples/spot/futures/futuresLoanInterestHistory.js b/examples/spot/futures/futuresLoanInterestHistory.js
deleted file mode 100644
index ae0f11ec..00000000
--- a/examples/spot/futures/futuresLoanInterestHistory.js
+++ /dev/null
@@ -1,11 +0,0 @@
-'use strict'
-
-const Spot = require('../../../src/spot')
-
-const apiKey = ''
-const apiSecret = ''
-const client = new Spot(apiKey, apiSecret)
-
-client.futuresLoanInterestHistory()
- .then(response => console.log(response.data))
- .catch(error => console.log(error))
diff --git a/examples/spot/futures/futuresLoanLiquidationHistory.js b/examples/spot/futures/futuresLoanLiquidationHistory.js
deleted file mode 100644
index ef58ca4a..00000000
--- a/examples/spot/futures/futuresLoanLiquidationHistory.js
+++ /dev/null
@@ -1,11 +0,0 @@
-'use strict'
-
-const Spot = require('../../../src/spot')
-
-const apiKey = ''
-const apiSecret = ''
-const client = new Spot(apiKey, apiSecret)
-
-client.futuresLoanLiquidationHistory('USDT', 'BUSD')
- .then(response => console.log(response.data))
- .catch(error => console.log(error))
diff --git a/examples/spot/futures/futuresLoanRepayHistory.js b/examples/spot/futures/futuresLoanRepayHistory.js
deleted file mode 100644
index 3a8dafec..00000000
--- a/examples/spot/futures/futuresLoanRepayHistory.js
+++ /dev/null
@@ -1,11 +0,0 @@
-'use strict'
-
-const Spot = require('../../../src/spot')
-
-const apiKey = ''
-const apiSecret = ''
-const client = new Spot(apiKey, apiSecret)
-
-client.futuresLoanRepayHistory()
- .then(response => console.log(response.data))
- .catch(error => console.log(error))
diff --git a/examples/spot/futures/futuresLoanWallet.js b/examples/spot/futures/futuresLoanWallet.js
deleted file mode 100644
index 45a2003b..00000000
--- a/examples/spot/futures/futuresLoanWallet.js
+++ /dev/null
@@ -1,11 +0,0 @@
-'use strict'
-
-const Spot = require('../../../src/spot')
-
-const apiKey = ''
-const apiSecret = ''
-const client = new Spot(apiKey, apiSecret)
-
-client.futuresCrossCollateralWallet()
- .then(response => console.log(response.data))
- .catch(error => console.log(error))
diff --git a/examples/spot/margin/marginManualLiquidation.js b/examples/spot/margin/marginManualLiquidation.js
new file mode 100644
index 00000000..0f64c3a8
--- /dev/null
+++ b/examples/spot/margin/marginManualLiquidation.js
@@ -0,0 +1,11 @@
+const Spot = require('../../../src/spot')
+
+const apiKey = ''
+const apiSecret = ''
+const client = new Spot(apiKey, apiSecret)
+
+client.marginManualLiquidation('MARGIN', {
+ symbol: 'BTCUSDT'
+})
+ .then(response => client.logger.log(response.data))
+ .catch(error => client.logger.error(error))
diff --git a/examples/spot/margin/queryMarginAvailableInventory.js b/examples/spot/margin/queryMarginAvailableInventory.js
new file mode 100644
index 00000000..b3e8f58e
--- /dev/null
+++ b/examples/spot/margin/queryMarginAvailableInventory.js
@@ -0,0 +1,9 @@
+const Spot = require('../../../src/spot')
+
+const apiKey = ''
+const apiSecret = ''
+const client = new Spot(apiKey, apiSecret)
+
+client.queryMarginAvailableInventory('MARGIN')
+ .then(response => client.logger.log(response.data))
+ .catch(error => client.logger.error(error))
diff --git a/package-lock.json b/package-lock.json
index b37d6cf1..f6e9ee3f 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,16 +1,16 @@
{
"name": "@binance/connector",
- "version": "3.0.0",
+ "version": "3.1.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@binance/connector",
- "version": "3.0.0",
+ "version": "3.1.0",
"license": "MIT",
"dependencies": {
- "axios": "^1.3",
- "ws": "^8.13"
+ "axios": "^1.6",
+ "ws": "^8.14"
},
"devDependencies": {
"clean-jsdoc-theme": "^4.2",
@@ -49,12 +49,12 @@
}
},
"node_modules/@babel/code-frame": {
- "version": "7.22.13",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz",
- "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==",
+ "version": "7.23.5",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz",
+ "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==",
"dev": true,
"dependencies": {
- "@babel/highlight": "^7.22.13",
+ "@babel/highlight": "^7.23.4",
"chalk": "^2.4.2"
},
"engines": {
@@ -133,30 +133,30 @@
}
},
"node_modules/@babel/compat-data": {
- "version": "7.23.2",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.2.tgz",
- "integrity": "sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==",
+ "version": "7.23.5",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz",
+ "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==",
"dev": true,
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/core": {
- "version": "7.23.2",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.2.tgz",
- "integrity": "sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==",
+ "version": "7.23.5",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.5.tgz",
+ "integrity": "sha512-Cwc2XjUrG4ilcfOw4wBAK+enbdgwAcAJCfGUItPBKR7Mjw4aEfAFYrLxeRp4jWgtNIKn3n2AlBOfwwafl+42/g==",
"dev": true,
"dependencies": {
"@ampproject/remapping": "^2.2.0",
- "@babel/code-frame": "^7.22.13",
- "@babel/generator": "^7.23.0",
+ "@babel/code-frame": "^7.23.5",
+ "@babel/generator": "^7.23.5",
"@babel/helper-compilation-targets": "^7.22.15",
- "@babel/helper-module-transforms": "^7.23.0",
- "@babel/helpers": "^7.23.2",
- "@babel/parser": "^7.23.0",
+ "@babel/helper-module-transforms": "^7.23.3",
+ "@babel/helpers": "^7.23.5",
+ "@babel/parser": "^7.23.5",
"@babel/template": "^7.22.15",
- "@babel/traverse": "^7.23.2",
- "@babel/types": "^7.23.0",
+ "@babel/traverse": "^7.23.5",
+ "@babel/types": "^7.23.5",
"convert-source-map": "^2.0.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
@@ -172,12 +172,12 @@
}
},
"node_modules/@babel/generator": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz",
- "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==",
+ "version": "7.23.5",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.5.tgz",
+ "integrity": "sha512-BPssCHrBD+0YrxviOa3QzpqwhNIXKEtOa2jQrm4FlmkC2apYgRnQcmPWiGZDlGxiNtltnUFolMe8497Esry+jA==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.23.0",
+ "@babel/types": "^7.23.5",
"@jridgewell/gen-mapping": "^0.3.2",
"@jridgewell/trace-mapping": "^0.3.17",
"jsesc": "^2.5.1"
@@ -249,9 +249,9 @@
}
},
"node_modules/@babel/helper-module-transforms": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz",
- "integrity": "sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==",
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz",
+ "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==",
"dev": true,
"dependencies": {
"@babel/helper-environment-visitor": "^7.22.20",
@@ -301,9 +301,9 @@
}
},
"node_modules/@babel/helper-string-parser": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz",
- "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==",
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz",
+ "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==",
"dev": true,
"engines": {
"node": ">=6.9.0"
@@ -319,32 +319,32 @@
}
},
"node_modules/@babel/helper-validator-option": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz",
- "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==",
+ "version": "7.23.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz",
+ "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==",
"dev": true,
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helpers": {
- "version": "7.23.2",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.2.tgz",
- "integrity": "sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==",
+ "version": "7.23.5",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.5.tgz",
+ "integrity": "sha512-oO7us8FzTEsG3U6ag9MfdF1iA/7Z6dz+MtFhifZk8C8o453rGJFFWUP1t+ULM9TUIAzC9uxXEiXjOiVMyd7QPg==",
"dev": true,
"dependencies": {
"@babel/template": "^7.22.15",
- "@babel/traverse": "^7.23.2",
- "@babel/types": "^7.23.0"
+ "@babel/traverse": "^7.23.5",
+ "@babel/types": "^7.23.5"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/highlight": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz",
- "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==",
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz",
+ "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==",
"dev": true,
"dependencies": {
"@babel/helper-validator-identifier": "^7.22.20",
@@ -427,9 +427,9 @@
}
},
"node_modules/@babel/parser": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz",
- "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==",
+ "version": "7.23.5",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.5.tgz",
+ "integrity": "sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ==",
"dev": true,
"bin": {
"parser": "bin/babel-parser.js"
@@ -499,9 +499,9 @@
}
},
"node_modules/@babel/plugin-syntax-jsx": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz",
- "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==",
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz",
+ "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.22.5"
@@ -601,9 +601,9 @@
}
},
"node_modules/@babel/plugin-syntax-typescript": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz",
- "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==",
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz",
+ "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.22.5"
@@ -630,19 +630,19 @@
}
},
"node_modules/@babel/traverse": {
- "version": "7.23.2",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz",
- "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==",
+ "version": "7.23.5",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.5.tgz",
+ "integrity": "sha512-czx7Xy5a6sapWWRx61m1Ke1Ra4vczu1mCTtJam5zRTBOonfdJ+S/B6HYmGYu3fJtr8GGET3si6IhgWVBhJ/m8w==",
"dev": true,
"dependencies": {
- "@babel/code-frame": "^7.22.13",
- "@babel/generator": "^7.23.0",
+ "@babel/code-frame": "^7.23.5",
+ "@babel/generator": "^7.23.5",
"@babel/helper-environment-visitor": "^7.22.20",
"@babel/helper-function-name": "^7.23.0",
"@babel/helper-hoist-variables": "^7.22.5",
"@babel/helper-split-export-declaration": "^7.22.6",
- "@babel/parser": "^7.23.0",
- "@babel/types": "^7.23.0",
+ "@babel/parser": "^7.23.5",
+ "@babel/types": "^7.23.5",
"debug": "^4.1.0",
"globals": "^11.1.0"
},
@@ -651,12 +651,12 @@
}
},
"node_modules/@babel/types": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz",
- "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==",
+ "version": "7.23.5",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.5.tgz",
+ "integrity": "sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w==",
"dev": true,
"dependencies": {
- "@babel/helper-string-parser": "^7.22.5",
+ "@babel/helper-string-parser": "^7.23.4",
"@babel/helper-validator-identifier": "^7.22.20",
"to-fast-properties": "^2.0.0"
},
@@ -686,18 +686,18 @@
}
},
"node_modules/@eslint-community/regexpp": {
- "version": "4.9.1",
- "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.9.1.tgz",
- "integrity": "sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==",
+ "version": "4.10.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz",
+ "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==",
"dev": true,
"engines": {
"node": "^12.0.0 || ^14.0.0 || >=16.0.0"
}
},
"node_modules/@eslint/eslintrc": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz",
- "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==",
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.3.tgz",
+ "integrity": "sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==",
"dev": true,
"dependencies": {
"ajv": "^6.12.4",
@@ -763,21 +763,21 @@
}
},
"node_modules/@eslint/js": {
- "version": "8.51.0",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.51.0.tgz",
- "integrity": "sha512-HxjQ8Qn+4SI3/AFv6sOrDB+g6PpUTDwSJiQqOrnneEk8L71161srI9gjzzZvYVbzHiVg/BvcH95+cK/zfIt4pg==",
+ "version": "8.54.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.54.0.tgz",
+ "integrity": "sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ==",
"dev": true,
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
}
},
"node_modules/@humanwhocodes/config-array": {
- "version": "0.11.12",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.12.tgz",
- "integrity": "sha512-NlGesA1usRNn6ctHCZ21M4/dKPgW9Nn1FypRdIKKgZOKzkVV4T1FlK5mBiLhHBCDmEbdQG0idrcXlbZfksJ+RA==",
+ "version": "0.11.13",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz",
+ "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==",
"dev": true,
"dependencies": {
- "@humanwhocodes/object-schema": "^2.0.0",
+ "@humanwhocodes/object-schema": "^2.0.1",
"debug": "^4.1.1",
"minimatch": "^3.0.5"
},
@@ -799,9 +799,9 @@
}
},
"node_modules/@humanwhocodes/object-schema": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.0.tgz",
- "integrity": "sha512-9S9QrXY2K0L4AGDcSgTi9vgiCcG8VcBv4Mp7/1hDPYoswIy6Z6KO5blYto82BT8M0MZNRWmCFLpCs3HlpYGGdw==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz",
+ "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==",
"dev": true
},
"node_modules/@istanbuljs/load-nyc-config": {
@@ -1166,9 +1166,9 @@
}
},
"node_modules/@jsdoc/salty": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.5.tgz",
- "integrity": "sha512-TfRP53RqunNe2HBobVBJ0VLhK1HbfvBYeTC1ahnN64PWvyYyGebmMiPkuwvD9fpw2ZbkoPb8Q7mwy0aR8Z9rvw==",
+ "version": "0.2.6",
+ "resolved": "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.6.tgz",
+ "integrity": "sha512-aA+awb5yoml8TQ3CzI5Ue7sM3VMRC4l1zJJW4fgZ8OCL1wshJZhNzaf0PL85DSnOUw6QuFgeHGD/eq/xwwAF2g==",
"dev": true,
"dependencies": {
"lodash": "^4.17.21"
@@ -1237,9 +1237,9 @@
}
},
"node_modules/@types/babel__core": {
- "version": "7.20.3",
- "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.3.tgz",
- "integrity": "sha512-54fjTSeSHwfan8AyHWrKbfBWiEUrNTZsUwPTDSNaaP1QDQIZbeNUg3a59E9D+375MzUw/x1vx2/0F5LBz+AeYA==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
+ "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
"dev": true,
"dependencies": {
"@babel/parser": "^7.20.7",
@@ -1250,18 +1250,18 @@
}
},
"node_modules/@types/babel__generator": {
- "version": "7.6.6",
- "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.6.tgz",
- "integrity": "sha512-66BXMKb/sUWbMdBNdMvajU7i/44RkrA3z/Yt1c7R5xejt8qh84iU54yUWCtm0QwGJlDcf/gg4zd/x4mpLAlb/w==",
+ "version": "7.6.7",
+ "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.7.tgz",
+ "integrity": "sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ==",
"dev": true,
"dependencies": {
"@babel/types": "^7.0.0"
}
},
"node_modules/@types/babel__template": {
- "version": "7.4.3",
- "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.3.tgz",
- "integrity": "sha512-ciwyCLeuRfxboZ4isgdNZi/tkt06m8Tw6uGbBSBgWrnnZGNXiEyM27xc/PjXGQLqlZ6ylbgHMnm7ccF9tCkOeQ==",
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz",
+ "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==",
"dev": true,
"dependencies": {
"@babel/parser": "^7.1.0",
@@ -1269,42 +1269,42 @@
}
},
"node_modules/@types/babel__traverse": {
- "version": "7.20.3",
- "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.3.tgz",
- "integrity": "sha512-Lsh766rGEFbaxMIDH7Qa+Yha8cMVI3qAK6CHt3OR0YfxOIn5Z54iHiyDRycHrBqeIiqGa20Kpsv1cavfBKkRSw==",
+ "version": "7.20.4",
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.4.tgz",
+ "integrity": "sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==",
"dev": true,
"dependencies": {
"@babel/types": "^7.20.7"
}
},
"node_modules/@types/graceful-fs": {
- "version": "4.1.8",
- "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.8.tgz",
- "integrity": "sha512-NhRH7YzWq8WiNKVavKPBmtLYZHxNY19Hh+az28O/phfp68CF45pMFud+ZzJ8ewnxnC5smIdF3dqFeiSUQ5I+pw==",
+ "version": "4.1.9",
+ "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz",
+ "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==",
"dev": true,
"dependencies": {
"@types/node": "*"
}
},
"node_modules/@types/istanbul-lib-coverage": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz",
- "integrity": "sha512-zONci81DZYCZjiLe0r6equvZut0b+dBRPBN5kBDjsONnutYNtJMoWQ9uR2RkL1gLG9NMTzvf+29e5RFfPbeKhQ==",
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz",
+ "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==",
"dev": true
},
"node_modules/@types/istanbul-lib-report": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.2.tgz",
- "integrity": "sha512-8toY6FgdltSdONav1XtUHl4LN1yTmLza+EuDazb/fEmRNCwjyqNVIQWs2IfC74IqjHkREs/nQ2FWq5kZU9IC0w==",
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz",
+ "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==",
"dev": true,
"dependencies": {
"@types/istanbul-lib-coverage": "*"
}
},
"node_modules/@types/istanbul-reports": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.3.tgz",
- "integrity": "sha512-1nESsePMBlf0RPRffLZi5ujYh7IH1BWL4y9pr+Bn3cJBdxz+RTP8bUFljLz9HvzhhOSWKdyBZ4DIivdL6rvgZg==",
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz",
+ "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==",
"dev": true,
"dependencies": {
"@types/istanbul-lib-report": "*"
@@ -1317,9 +1317,9 @@
"dev": true
},
"node_modules/@types/linkify-it": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.4.tgz",
- "integrity": "sha512-hPpIeeHb/2UuCw06kSNAOVWgehBLXEo0/fUs0mw3W2qhqX89PI2yvok83MnuctYGCPrabGIoi0fFso4DQ+sNUQ==",
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.5.tgz",
+ "integrity": "sha512-yg6E+u0/+Zjva+buc3EIb+29XEg4wltq7cSmd4Uc2EE/1nUVmxyzpX6gUXD0V8jIrG0r7YeOGVIbYRkxeooCtw==",
"dev": true
},
"node_modules/@types/markdown-it": {
@@ -1333,45 +1333,51 @@
}
},
"node_modules/@types/mdurl": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.4.tgz",
- "integrity": "sha512-ARVxjAEX5TARFRzpDRVC6cEk0hUIXCCwaMhz8y7S1/PxU6zZS1UMjyobz7q4w/D/R552r4++EhwmXK1N2rAy0A==",
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.5.tgz",
+ "integrity": "sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA==",
"dev": true
},
"node_modules/@types/node": {
- "version": "20.8.7",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.7.tgz",
- "integrity": "sha512-21TKHHh3eUHIi2MloeptJWALuCu5H7HQTdTrWIFReA8ad+aggoX+lRes3ex7/FtpC+sVUpFMQ+QTfYr74mruiQ==",
+ "version": "20.10.1",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.1.tgz",
+ "integrity": "sha512-T2qwhjWwGH81vUEx4EXmBKsTJRXFXNZTL4v0gi01+zyBmCwzE6TyHszqX01m+QHTEq+EZNo13NeJIdEqf+Myrg==",
"dev": true,
"dependencies": {
- "undici-types": "~5.25.1"
+ "undici-types": "~5.26.4"
}
},
"node_modules/@types/stack-utils": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.2.tgz",
- "integrity": "sha512-g7CK9nHdwjK2n0ymT2CW698FuWJRIx+RP6embAzZ2Qi8/ilIrA1Imt2LVSeHUzKvpoi7BhmmQcXz95eS0f2JXw==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz",
+ "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==",
"dev": true
},
"node_modules/@types/yargs": {
- "version": "17.0.29",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.29.tgz",
- "integrity": "sha512-nacjqA3ee9zRF/++a3FUY1suHTFKZeHba2n8WeDw9cCVdmzmHpIxyzOJBcpHvvEmS8E9KqWlSnWHUkOrkhWcvA==",
+ "version": "17.0.32",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz",
+ "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==",
"dev": true,
"dependencies": {
"@types/yargs-parser": "*"
}
},
"node_modules/@types/yargs-parser": {
- "version": "21.0.2",
- "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.2.tgz",
- "integrity": "sha512-5qcvofLPbfjmBfKaLfj/+f+Sbd6pN4zl7w7VSVI5uz7m9QZTuB2aZAa2uo1wHFBNN2x6g/SoTkXmd8mQnQF2Cw==",
+ "version": "21.0.3",
+ "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz",
+ "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==",
+ "dev": true
+ },
+ "node_modules/@ungap/structured-clone": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
+ "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
"dev": true
},
"node_modules/acorn": {
- "version": "8.10.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz",
- "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==",
+ "version": "8.11.2",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz",
+ "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==",
"dev": true,
"bin": {
"acorn": "bin/acorn"
@@ -1614,9 +1620,9 @@
}
},
"node_modules/axios": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.1.tgz",
- "integrity": "sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A==",
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz",
+ "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==",
"dependencies": {
"follow-redirects": "^1.15.0",
"form-data": "^4.0.0",
@@ -1896,9 +1902,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001551",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001551.tgz",
- "integrity": "sha512-vtBAez47BoGMMzlbYhfXrMV1kvRF2WP/lqiMuDu1Sb4EE4LKEgjopFDSRtZfdVnslNRpOqV/woE+Xgrwj6VQlg==",
+ "version": "1.0.30001565",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001565.tgz",
+ "integrity": "sha512-xrE//a3O7TP0vaJ8ikzkD2c2NgcVUvsEe2IvFTntV4Yd1Z9FVzh+gW+enX96L0psrbaFMcVcH2l90xNuGDWc8w==",
"dev": true,
"funding": [
{
@@ -1986,9 +1992,9 @@
}
},
"node_modules/clean-jsdoc-theme": {
- "version": "4.2.14",
- "resolved": "https://registry.npmjs.org/clean-jsdoc-theme/-/clean-jsdoc-theme-4.2.14.tgz",
- "integrity": "sha512-RtFKl0GKS9u3su2gnNH5L+k2g7AOZX1e8FH1zlFQf270LgSJsFFMkxTAR8/qeD0+r6jKTpvPq1JJSfhCtVnjVg==",
+ "version": "4.2.17",
+ "resolved": "https://registry.npmjs.org/clean-jsdoc-theme/-/clean-jsdoc-theme-4.2.17.tgz",
+ "integrity": "sha512-5SbJNXcQHUXd7N13g+3OpGFiBQdxz36xwEP3p1r1vbo/apLcDRtugaFdUZ56H6Rvlb68Q33EChoBkajSlnD11w==",
"dev": true,
"dependencies": {
"@jsdoc/salty": "^0.2.4",
@@ -1996,7 +2002,6 @@
"html-minifier-terser": "^7.2.0",
"klaw-sync": "^6.0.0",
"lodash": "^4.17.21",
- "nanoid": "^3.3.4",
"showdown": "^2.1.0"
},
"peerDependencies": {
@@ -2244,9 +2249,9 @@
}
},
"node_modules/electron-to-chromium": {
- "version": "1.4.561",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.561.tgz",
- "integrity": "sha512-eS5t4ulWOBfVHdq9SW2dxEaFarj1lPjvJ8PaYMOjY0DecBaj/t4ARziL2IPpDr4atyWwjLFGQ2vo/VCgQFezVQ==",
+ "version": "1.4.597",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.597.tgz",
+ "integrity": "sha512-0XOQNqHhg2YgRVRUrS4M4vWjFCFIP2ETXcXe/0KIQBjXE9Cpy+tgzzYfuq6HGai3hWq0YywtG+5XK8fyG08EjA==",
"dev": true
},
"node_modules/emittery": {
@@ -2289,26 +2294,26 @@
}
},
"node_modules/es-abstract": {
- "version": "1.22.2",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.2.tgz",
- "integrity": "sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==",
+ "version": "1.22.3",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz",
+ "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==",
"dev": true,
"dependencies": {
"array-buffer-byte-length": "^1.0.0",
"arraybuffer.prototype.slice": "^1.0.2",
"available-typed-arrays": "^1.0.5",
- "call-bind": "^1.0.2",
+ "call-bind": "^1.0.5",
"es-set-tostringtag": "^2.0.1",
"es-to-primitive": "^1.2.1",
"function.prototype.name": "^1.1.6",
- "get-intrinsic": "^1.2.1",
+ "get-intrinsic": "^1.2.2",
"get-symbol-description": "^1.0.0",
"globalthis": "^1.0.3",
"gopd": "^1.0.1",
- "has": "^1.0.3",
"has-property-descriptors": "^1.0.0",
"has-proto": "^1.0.1",
"has-symbols": "^1.0.3",
+ "hasown": "^2.0.0",
"internal-slot": "^1.0.5",
"is-array-buffer": "^3.0.2",
"is-callable": "^1.2.7",
@@ -2318,7 +2323,7 @@
"is-string": "^1.0.7",
"is-typed-array": "^1.1.12",
"is-weakref": "^1.0.2",
- "object-inspect": "^1.12.3",
+ "object-inspect": "^1.13.1",
"object-keys": "^1.1.1",
"object.assign": "^4.1.4",
"regexp.prototype.flags": "^1.5.1",
@@ -2332,7 +2337,7 @@
"typed-array-byte-offset": "^1.0.0",
"typed-array-length": "^1.0.4",
"unbox-primitive": "^1.0.2",
- "which-typed-array": "^1.1.11"
+ "which-typed-array": "^1.1.13"
},
"engines": {
"node": ">= 0.4"
@@ -2364,26 +2369,26 @@
}
},
"node_modules/es-set-tostringtag": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz",
- "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz",
+ "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==",
"dev": true,
"dependencies": {
- "get-intrinsic": "^1.1.3",
- "has": "^1.0.3",
- "has-tostringtag": "^1.0.0"
+ "get-intrinsic": "^1.2.2",
+ "has-tostringtag": "^1.0.0",
+ "hasown": "^2.0.0"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/es-shim-unscopables": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz",
- "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz",
+ "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==",
"dev": true,
"dependencies": {
- "has": "^1.0.3"
+ "hasown": "^2.0.0"
}
},
"node_modules/es-to-primitive": {
@@ -2422,18 +2427,19 @@
}
},
"node_modules/eslint": {
- "version": "8.51.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.51.0.tgz",
- "integrity": "sha512-2WuxRZBrlwnXi+/vFSJyjMqrNjtJqiasMzehF0shoLaW7DzS3/9Yvrmq5JiT66+pNjiX4UBnLDiKHcWAr/OInA==",
+ "version": "8.54.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.54.0.tgz",
+ "integrity": "sha512-NY0DfAkM8BIZDVl6PgSa1ttZbx3xHgJzSNJKYcQglem6CppHyMhRIQkBVSSMaSRnLhig3jsDbEzOjwCVt4AmmA==",
"dev": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.6.1",
- "@eslint/eslintrc": "^2.1.2",
- "@eslint/js": "8.51.0",
- "@humanwhocodes/config-array": "^0.11.11",
+ "@eslint/eslintrc": "^2.1.3",
+ "@eslint/js": "8.54.0",
+ "@humanwhocodes/config-array": "^0.11.13",
"@humanwhocodes/module-importer": "^1.0.1",
"@nodelib/fs.walk": "^1.2.8",
+ "@ungap/structured-clone": "^1.2.0",
"ajv": "^6.12.4",
"chalk": "^4.0.0",
"cross-spawn": "^7.0.2",
@@ -2618,26 +2624,26 @@
}
},
"node_modules/eslint-plugin-import": {
- "version": "2.28.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz",
- "integrity": "sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==",
+ "version": "2.29.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz",
+ "integrity": "sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==",
"dev": true,
"dependencies": {
- "array-includes": "^3.1.6",
- "array.prototype.findlastindex": "^1.2.2",
- "array.prototype.flat": "^1.3.1",
- "array.prototype.flatmap": "^1.3.1",
+ "array-includes": "^3.1.7",
+ "array.prototype.findlastindex": "^1.2.3",
+ "array.prototype.flat": "^1.3.2",
+ "array.prototype.flatmap": "^1.3.2",
"debug": "^3.2.7",
"doctrine": "^2.1.0",
- "eslint-import-resolver-node": "^0.3.7",
+ "eslint-import-resolver-node": "^0.3.9",
"eslint-module-utils": "^2.8.0",
- "has": "^1.0.3",
- "is-core-module": "^2.13.0",
+ "hasown": "^2.0.0",
+ "is-core-module": "^2.13.1",
"is-glob": "^4.0.3",
"minimatch": "^3.1.2",
- "object.fromentries": "^2.0.6",
- "object.groupby": "^1.0.0",
- "object.values": "^1.1.6",
+ "object.fromentries": "^2.0.7",
+ "object.groupby": "^1.0.1",
+ "object.values": "^1.1.7",
"semver": "^6.3.1",
"tsconfig-paths": "^3.14.2"
},
@@ -3150,9 +3156,9 @@
}
},
"node_modules/flat-cache": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.1.tgz",
- "integrity": "sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz",
+ "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==",
"dev": true,
"dependencies": {
"flatted": "^3.2.9",
@@ -3160,7 +3166,7 @@
"rimraf": "^3.0.2"
},
"engines": {
- "node": ">=12.0.0"
+ "node": "^10.12.0 || >=12.0.0"
}
},
"node_modules/flatted": {
@@ -3299,15 +3305,15 @@
}
},
"node_modules/get-intrinsic": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
- "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==",
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz",
+ "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==",
"dev": true,
"dependencies": {
- "function-bind": "^1.1.1",
- "has": "^1.0.3",
+ "function-bind": "^1.1.2",
"has-proto": "^1.0.1",
- "has-symbols": "^1.0.3"
+ "has-symbols": "^1.0.3",
+ "hasown": "^2.0.0"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -3442,15 +3448,6 @@
"integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
"dev": true
},
- "node_modules/has": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz",
- "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==",
- "dev": true,
- "engines": {
- "node": ">= 0.4.0"
- }
- },
"node_modules/has-bigints": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
@@ -3470,12 +3467,12 @@
}
},
"node_modules/has-property-descriptors": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
- "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz",
+ "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==",
"dev": true,
"dependencies": {
- "get-intrinsic": "^1.1.1"
+ "get-intrinsic": "^1.2.2"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -3520,6 +3517,18 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/hasown": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz",
+ "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==",
+ "dev": true,
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/html-escaper": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
@@ -3569,9 +3578,9 @@
}
},
"node_modules/ignore": {
- "version": "5.2.4",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
- "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz",
+ "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==",
"dev": true,
"engines": {
"node": ">= 4"
@@ -3647,13 +3656,13 @@
"dev": true
},
"node_modules/internal-slot": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz",
- "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==",
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz",
+ "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==",
"dev": true,
"dependencies": {
- "get-intrinsic": "^1.2.0",
- "has": "^1.0.3",
+ "get-intrinsic": "^1.2.2",
+ "hasown": "^2.0.0",
"side-channel": "^1.0.4"
},
"engines": {
@@ -3736,12 +3745,12 @@
}
},
"node_modules/is-core-module": {
- "version": "2.13.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz",
- "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==",
+ "version": "2.13.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
+ "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==",
"dev": true,
"dependencies": {
- "has": "^1.0.3"
+ "hasown": "^2.0.0"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -4023,9 +4032,9 @@
"dev": true
},
"node_modules/istanbul-lib-coverage": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz",
- "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==",
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz",
+ "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==",
"dev": true,
"engines": {
"node": ">=8"
@@ -5242,24 +5251,6 @@
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
},
- "node_modules/nanoid": {
- "version": "3.3.6",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
- "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "bin": {
- "nanoid": "bin/nanoid.cjs"
- },
- "engines": {
- "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
- }
- },
"node_modules/natural-compare": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
@@ -5277,9 +5268,9 @@
}
},
"node_modules/nock": {
- "version": "13.3.6",
- "resolved": "https://registry.npmjs.org/nock/-/nock-13.3.6.tgz",
- "integrity": "sha512-lT6YuktKroUFM+27mubf2uqQZVy2Jf+pfGzuh9N6VwdHlFoZqvi4zyxFTVR1w/ChPqGY6yxGehHp6C3wqCASCw==",
+ "version": "13.4.0",
+ "resolved": "https://registry.npmjs.org/nock/-/nock-13.4.0.tgz",
+ "integrity": "sha512-W8NVHjO/LCTNA64yxAPHV/K47LpGYcVzgKd3Q0n6owhwvD0Dgoterc25R4rnZbckJEb6Loxz1f5QMuJpJnbSyQ==",
"dev": true,
"dependencies": {
"debug": "^4.1.0",
@@ -5818,9 +5809,9 @@
"integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
},
"node_modules/punycode": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
- "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
"dev": true,
"engines": {
"node": ">=6"
@@ -6452,9 +6443,9 @@
}
},
"node_modules/terser": {
- "version": "5.22.0",
- "resolved": "https://registry.npmjs.org/terser/-/terser-5.22.0.tgz",
- "integrity": "sha512-hHZVLgRA2z4NWcN6aS5rQDc+7Dcy58HOf2zbYwmFcQ+ua3h6eEFf5lIDKTzbWwlazPyOZsFQO8V80/IjVNExEw==",
+ "version": "5.24.0",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.24.0.tgz",
+ "integrity": "sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw==",
"dev": true,
"dependencies": {
"@jridgewell/source-map": "^0.3.3",
@@ -6697,15 +6688,15 @@
"dev": true
},
"node_modules/undici-types": {
- "version": "5.25.3",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz",
- "integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==",
+ "version": "5.26.5",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
+ "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
"dev": true
},
"node_modules/universalify": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
- "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
+ "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
"dev": true,
"engines": {
"node": ">= 10.0.0"
@@ -6751,9 +6742,9 @@
}
},
"node_modules/v8-to-istanbul": {
- "version": "9.1.3",
- "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.3.tgz",
- "integrity": "sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg==",
+ "version": "9.2.0",
+ "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz",
+ "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==",
"dev": true,
"dependencies": {
"@jridgewell/trace-mapping": "^0.3.12",
diff --git a/package.json b/package.json
index 2d209d15..94664ba2 100644
--- a/package.json
+++ b/package.json
@@ -1,12 +1,12 @@
{
"name": "@binance/connector",
- "version": "3.0.0",
+ "version": "3.1.0",
"description": "This is a lightweight library that works as a connector to the Binance public API.",
"main": "src/index.js",
"scripts": {
"jsdoc": "jsdoc -c ./docs_src/conf.json && ./docs_src/docs.sh",
"jsdoc:win": "jsdoc -c ./docs_src/conf.json && npx jsdoc --readme ./docs_src/gettingStarted.md src/modules/restful/blvt.js && node ./docs_src/generateDoc.js && RD /S /Q out",
- "test": "jest",
+ "test": "jest --maxWorkers 4 --bail",
"test:watch": "jest --watchAll",
"coverage": "jest --silent --ci --coverage --testLocationInResults --json --outputFile=\"report.json\"",
"standard": "standard",
@@ -44,8 +44,8 @@
"src/**/*"
],
"dependencies": {
- "axios": "^1.3",
- "ws": "^8.13"
+ "axios": "^1.6",
+ "ws": "^8.14"
},
"jest": {
"testPathIgnorePatterns": [
diff --git a/src/modules/restful/autoInvest.js b/src/modules/restful/autoInvest.js
new file mode 100644
index 00000000..2039d37c
--- /dev/null
+++ b/src/modules/restful/autoInvest.js
@@ -0,0 +1,332 @@
+'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)
+ *
+ * GET /sapi/v1/lending/auto-invest/target-asset/list
+ *
+ * {@link https://binance-docs.github.io/apidocs/spot/en/#get-target-asset-list-user_data}
+ *
+ * @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)
+ *
+ * GET /sapi/v1/lending/auto-invest/target-asset/roi/list
+ *
+ * {@link https://binance-docs.github.io/apidocs/spot/en/#get-target-asset-roi-data-user_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)
+ *
+ * GET /sapi/v1/lending/auto-invest/all/asset
+ *
+ * {@link https://binance-docs.github.io/apidocs/spot/en/#query-all-source-asset-and-target-asset-user_data}
+ *
+ * @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)
+ *
+ * GET /sapi/v1/lending/auto-invest/source-asset/list
+ *
+ * {@link https://binance-docs.github.io/apidocs/spot/en/#query-source-asset-list-user_data}
+ *
+ * @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
+ *
+ * POST /sapi/v1/lending/auto-invest/plan/edit-status
+ *
+ * {@link https://binance-docs.github.io/apidocs/spot/en/#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.publicRequest(
+ 'POST',
+ '/sapi/v1/lending/auto-invest/plan/edit-status',
+ Object.assign(options, {
+ planId,
+ status
+ })
+ )
+ }
+
+ /**
+ * Get list of plans
+ *
+ * GET /sapi/v1/lending/auto-invest/plan/list
+ *
+ * {@link https://binance-docs.github.io/apidocs/spot/en/#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.publicRequest(
+ 'GET',
+ '/sapi/v1/lending/auto-invest/plan/list',
+ Object.assign(options, {
+ planType
+ })
+ )
+ }
+
+ /**
+ * Query holding details of the plan
+ *
+ * GET /sapi/v1/lending/auto-invest/plan/id
+ *
+ * {@link https://binance-docs.github.io/apidocs/spot/en/#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.publicRequest(
+ 'GET',
+ '/sapi/v1/lending/auto-invest/plan/id',
+ options
+ )
+ }
+
+ /**
+ * Query subscription transaction history
+ *
+ * GET /sapi/v1/lending/auto-invest/history/list
+ *
+ * {@link https://binance-docs.github.io/apidocs/spot/en/#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.publicRequest(
+ 'GET',
+ '/sapi/v1/lending/auto-invest/history/list',
+ options
+ )
+ }
+
+ /**
+ * Query Index Details (USER_DATA)
+ *
+ * GET /sapi/v1/lending/auto-invest/index/info
+ *
+ * {@link https://binance-docs.github.io/apidocs/spot/en/#query-index-details-user_data}
+ *
+ * @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)
+ *
+ * GET /sapi/v1/lending/auto-invest/index/user-summary
+ *
+ * {@link https://binance-docs.github.io/apidocs/spot/en/#query-index-linked-plan-position-details-user_data}
+ *
+ * @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)
+ *
+ * GET /sapi/v1/lending/auto-invest/one-off/status
+ *
+ * {@link https://binance-docs.github.io/apidocs/spot/en/#query-one-time-transaction-status-user_data}
+ *
+ * @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)
+ *
+ * POST /sapi/v1/lending/auto-invest/redeem
+ *
+ * {@link https://binance-docs.github.io/apidocs/spot/en/#index-linked-plan-redemption-trade}
+ *
+ * @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)
+ *
+ * GET /sapi/v1/lending/auto-invest/redeem/history
+ *
+ * {@link https://binance-docs.github.io/apidocs/spot/en/#index-linked-plan-redemption-user_data}
+ *
+ * @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)
+ *
+ * GET /sapi/v1/lending/auto-invest/rebalance/history
+ *
+ * {@link https://binance-docs.github.io/apidocs/spot/en/#index-linked-plan-rebalance-details-user_data}
+ *
+ * @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
diff --git a/src/modules/restful/futures.js b/src/modules/restful/futures.js
index 3f02bd1e..427cf13a 100644
--- a/src/modules/restful/futures.js
+++ b/src/modules/restful/futures.js
@@ -60,139 +60,6 @@ const Futures = superclass => class extends superclass {
Object.assign(options, { asset, startTime })
)
}
-
- /**
- * Cross-Collateral Borrow History (USER_DATA)
- *
- * GET /sapi/v1/futures/loan/borrow/history
- *
- * {@link https://binance-docs.github.io/apidocs/spot/en/#cross-collateral-borrow-history-user_data}
- *
- * @param {object} [options]
- * @param {string} [options.coin]
- * @param {number} [options.startTime]
- * @param {number} [options.endTime]
- * @param {number} [options.limit] - default 500, max 1000
- * @param {number} [options.recvWindow]
- */
- futuresLoanBorrowHistory (options = {}) {
- return this.signRequest(
- 'GET',
- '/sapi/v1/futures/loan/borrow/history',
- options
- )
- }
-
- /**
- * Cross-Collateral Repayment History (USER_DATA)
- *
- * GET /sapi/v1/futures/loan/repay/history
- *
- * {@link https://binance-docs.github.io/apidocs/spot/en/#cross-collateral-repayment-history-user_data}
- *
- * @param {object} [options]
- * @param {string} [options.coin]
- * @param {number} [options.startTime]
- * @param {number} [options.endTime]
- * @param {number} [options.limit] - default 500, max 1000
- * @param {number} [options.recvWindow]
- */
- futuresLoanRepayHistory (options = {}) {
- return this.signRequest(
- 'GET',
- '/sapi/v1/futures/loan/repay/history',
- options
- )
- }
-
- /**
- * Cross-Collateral Wallet (USER_DATA)
- *
- * GET /sapi/v2/futures/loan/wallet
- *
- * {@link https://binance-docs.github.io/apidocs/spot/en/#cross-collateral-wallet-v2-user_data}
- *
- * @param {object} [options]
- * @param {number} [options.recvWindow]
- */
- futuresLoanWallet (options = {}) {
- return this.signRequest(
- 'GET',
- '/sapi/v2/futures/loan/wallet',
- options
- )
- }
-
- /**
- * Adjust Cross-Collateral LTV History (USER_DATA)
- *
- * GET /sapi/v1/futures/loan/adjustCollateral/history
- *
- * {@link https://binance-docs.github.io/apidocs/spot/en/#adjust-cross-collateral-ltv-history-user_data}
- *
- * @param {object} [options]
- * @param {string} [options.loanCoin]
- * @param {string} [options.collateralCoin]
- * @param {number} [options.startTime]
- * @param {number} [options.endTime]
- * @param {number} [options.limit] - default 500, max 1000
- * @param {number} [options.recvWindow]
- *
- * All data will be returned if loanCoin or collateralCoin is not sent
- */
- futuresLoanAdjustCollateralHistory (options = {}) {
- return this.signRequest(
- 'GET',
- '/sapi/v1/futures/loan/adjustCollateral/history',
- options
- )
- }
-
- /**
- * Cross-Collateral Liquidation History (USER_DATA)
- *
- * GET /sapi/v1/futures/loan/liquidationHistory
- *
- * {@link https://binance-docs.github.io/apidocs/spot/en/#adjust-cross-collateral-ltv-history-user_data}
- *
- * @param {object} [options]
- * @param {string} [options.loanCoin]
- * @param {string} [options.collateralCoin]
- * @param {number} [options.startTime]
- * @param {number} [options.endTime]
- * @param {number} [options.limit] - default 500, max 1000
- * @param {number} [options.recvWindow]
- */
- futuresLoanLiquidationHistory (options = {}) {
- return this.signRequest(
- 'GET',
- '/sapi/v1/futures/loan/liquidationHistory',
- options
- )
- }
-
- /**
- * Cross-Collateral Interest History (USER_DATA)
- *
- * GET /sapi/v1/futures/loan/interestHistory
- *
- * {@link https://binance-docs.github.io/apidocs/spot/en/#cross-collateral-interest-history-user_data}
- *
- * @param {object} [options]
- * @param {string} [options.collateralCoin]
- * @param {number} [options.startTime]
- * @param {number} [options.endTime]
- * @param {number} [options.current] - Currently querying page. Start from 1. Default:1
- * @param {number} [options.limit] - Default:500 Max:1000
- * @param {number} [options.recvWindow]
- */
- futuresLoanInterestHistory (options = {}) {
- return this.signRequest(
- 'GET',
- '/sapi/v1/futures/loan/interestHistory',
- options
- )
- }
}
module.exports = Futures
diff --git a/src/modules/restful/index.js b/src/modules/restful/index.js
index 76b44bcd..fd2ebadf 100644
--- a/src/modules/restful/index.js
+++ b/src/modules/restful/index.js
@@ -1,5 +1,6 @@
'use strict'
+module.exports.autoInvest = require('./autoInvest')
module.exports.Blvt = require('./blvt')
module.exports.Bswap = require('./bswap')
module.exports.SubAccount = require('./subAccount')
diff --git a/src/modules/restful/margin.js b/src/modules/restful/margin.js
index cfd2b14d..9d06e79e 100644
--- a/src/modules/restful/margin.js
+++ b/src/modules/restful/margin.js
@@ -1024,6 +1024,48 @@ const Margin = superclass => class extends superclass {
options
)
}
+
+ /**
+ * Query Margin Available Inventory (USER_DATA)
+ *
+ * GET /sapi/v1/margin/available-inventory
+ *
+ * {@link https://binance-docs.github.io/apidocs/spot/en/#query-margin-available-inventory-user_data}
+ *
+ * @param {Type} type
+ */
+ queryMarginAvailableInventory (type, options = {}) {
+ validateRequiredParameters({ type })
+ return this.signRequest(
+ 'GET',
+ '/sapi/v1/margin/available-inventory',
+ Object.assign(options, {
+ type
+ })
+ )
+ }
+
+ /**
+ * Margin manual liquidation (MARGIN)
+ *
+ * POST /sapi/v1/margin/manual-liquidation
+ *
+ * {@link https://binance-docs.github.io/apidocs/spot/en/#margin-manual-liquidation-margin}
+ *
+ * @param {Type} type
+ * @param {object} [options]
+ * @param {string} [options.symbol]
+ */
+ marginManualLiquidation (type, options = {}) {
+ validateRequiredParameters({ type })
+ return this.signRequest(
+ 'POST',
+ '/sapi/v1/margin/manual-liquidation',
+ Object.assign(options, {
+ type
+ })
+ )
+ }
}
module.exports = Margin