diff --git a/examples/rest-spot-private-autoinvest.ts b/examples/rest-spot-private-autoinvest.ts new file mode 100644 index 00000000..c9af758c --- /dev/null +++ b/examples/rest-spot-private-autoinvest.ts @@ -0,0 +1,57 @@ +import { MainClient } from '../src/index'; + +// or +// import { MainClient } from 'binance'; + +const key = process.env.API_KEY_COM || 'APIKEY'; +const secret = process.env.API_SECRET_COM || 'APISECRET'; + +const client = new MainClient({ + api_key: key, + api_secret: secret, + beautifyResponses: true, +}); + +(async () => { + try { + const oneTimeTransactionResult = + await client.submitAutoInvestOneTimeTransaction({ + sourceType: 'MAIN_SITE', + subscriptionAmount: 100, + sourceAsset: 'USDT', + details: [ + { + targetAsset: 'BTC', + percentage: 60, + }, + { + targetAsset: 'ETH', + percentage: 40, + }, + ], + }); + + console.log('oneTimeTransactionResult', oneTimeTransactionResult); + + const autoInvestPlanResult = await client.submitAutoInvestmentPlan({ + UID: '20983262a', + sourceType: 'MAIN_SITE', + subscriptionAmount: 100, + sourceAsset: 'USDT', + planType: 'SINGLE', + flexibleAllowedToUse: true, + subscriptionCycle: 'DAILY', + subscriptionStartTime: 5, + details: [ + { + targetAsset: 'BTC', + percentage: 100, + }, + ], + }); + + console.log('autoInvestPlanResult', autoInvestPlanResult); + } catch (e) { + console.error('request failed: ', e); + } +})(); diff --git a/package-lock.json b/package-lock.json index 5f9e99ef..0948def8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "binance", - "version": "2.12.1", + "version": "2.12.2", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "binance", - "version": "2.12.1", + "version": "2.12.2", "license": "MIT", "dependencies": { "axios": "^1.6.2", diff --git a/package.json b/package.json index 0da2474a..319bb162 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "binance", - "version": "2.12.1", + "version": "2.12.2", "description": "Node.js & JavaScript SDK for Binance REST APIs & WebSockets, with TypeScript & end-to-end tests.", "main": "lib/index.js", "types": "lib/index.d.ts", diff --git a/src/main-client.ts b/src/main-client.ts index 947cf824..9628cceb 100644 --- a/src/main-client.ts +++ b/src/main-client.ts @@ -2146,12 +2146,44 @@ export class MainClient extends BaseRestClient { submitAutoInvestmentPlan( params: CreateInvestmentPlanParams, + ): Promise { + const { details, ...allParams } = params; + const requestParameters = { ...allParams }; + for (let i = 0; i < details.length; i++) { + requestParameters[`details[${i}].targetAsset`] = details[i].targetAsset; + requestParameters[`details[${i}].percentage`] = details[i].percentage; + } + return this.postPrivate( + 'sapi/v1/lending/auto-invest/plan/add', + requestParameters, + ); + } + + submitAutoInvestmentPlanOld( + params: CreateInvestmentPlanParams, ): Promise { return this.postPrivate('sapi/v1/lending/auto-invest/plan/add', params); } updateAutoInvestmentPlan( params: EditInvestmentPlanParams, + ): Promise { + const { details, ...allParams } = params; + + const requestParameters = { ...allParams }; + for (let i = 0; i < details.length; i++) { + requestParameters[`details[${i}].targetAsset`] = details[i].targetAsset; + requestParameters[`details[${i}].percentage`] = details[i].percentage; + } + + return this.postPrivate( + 'sapi/v1/lending/auto-invest/plan/edit', + requestParameters, + ); + } + + updateAutoInvestmentPlanOld( + params: EditInvestmentPlanParams, ): Promise { return this.postPrivate('sapi/v1/lending/auto-invest/plan/edit', params); } @@ -2196,10 +2228,26 @@ export class MainClient extends BaseRestClient { ); } + /** + * https://developers.binance.com/docs/auto_invest/trade/One-Time-Transaction + * + * @param params + * @returns + */ submitAutoInvestOneTimeTransaction( params: SubmitOneTimeTransactionParams, ): Promise { - return this.postPrivate('sapi/v1/lending/auto-invest/one-off', params); + const { details, ...allParams } = params; + const requestParameters = { ...allParams }; + for (let i = 0; i < details.length; i++) { + requestParameters[`details[${i}].targetAsset`] = details[i].targetAsset; + requestParameters[`details[${i}].percentage`] = details[i].percentage; + } + + return this.postPrivate( + 'sapi/v1/lending/auto-invest/one-off', + requestParameters, + ); } getOneTimeTransactionStatus( diff --git a/src/types/spot.ts b/src/types/spot.ts index b50c1c3f..f06ce879 100644 --- a/src/types/spot.ts +++ b/src/types/spot.ts @@ -634,12 +634,12 @@ export type OrderResponseTypeFor< > = RT extends 'ACK' ? OrderResponseACK : RT extends 'RESULT' - ? OrderResponseResult - : RT extends 'FULL' - ? OrderResponseFull - : T extends 'MARKET' | 'LIMIT' - ? OrderResponseFull - : OrderResponseACK; + ? OrderResponseResult + : RT extends 'FULL' + ? OrderResponseFull + : T extends 'MARKET' | 'LIMIT' + ? OrderResponseFull + : OrderResponseACK; export interface OrderResponseACK { symbol: string; @@ -3132,6 +3132,7 @@ export interface AutoInvestPortfolioDetail { } export interface CreateInvestmentPlanParams { + UID: string; sourceType: 'MAIN_SITE' | 'TR'; requestId?: string; planType: 'SINGLE' | 'PORTFOLIO' | 'INDEX'; @@ -3157,7 +3158,7 @@ export interface CreateInvestmentPlanParams { | 'SUN'; subscriptionStartTime: number; sourceAsset: string; - flexibleAllowedToUse?: boolean; + flexibleAllowedToUse: boolean; details: AutoInvestPortfolioDetail[]; } @@ -3263,15 +3264,12 @@ export interface GetIndexLinkedPlanPositionDetailsResponse { export interface SubmitOneTimeTransactionParams { sourceType: 'MAIN_SITE' | 'TR'; requestId?: string; - subscriptionAmount: string; + subscriptionAmount: number; sourceAsset: string; flexibleAllowedToUse?: boolean; planId?: number; indexId?: number; - details: { - targetAsset: string; - percentage: number; - }[]; + details: AutoInvestPortfolioDetail[]; } export interface SubmitOneTimeTransactionResponse {