From f92bfd86aa79f72adde4812c53cfa8ae2678ad82 Mon Sep 17 00:00:00 2001 From: Codex Bounty Agent Date: Thu, 14 May 2026 09:54:48 +0800 Subject: [PATCH] feat: add query order endpoint --- README.md | 2 +- .../services/trade.service.spec.ts | 28 +++++++++++++++ src/bingx-client/services/trade.service.ts | 11 ++++++ .../bingx-query-order-endpoint.spec.ts | 26 ++++++++++++++ .../endpoints/bingx-query-order-endpoint.ts | 35 +++++++++++++++++++ src/bingx/endpoints/index.ts | 1 + src/bingx/interfaces/websocket-event.ts | 1 - 7 files changed, 102 insertions(+), 2 deletions(-) create mode 100644 src/bingx-client/services/trade.service.spec.ts create mode 100644 src/bingx/endpoints/bingx-query-order-endpoint.spec.ts create mode 100644 src/bingx/endpoints/bingx-query-order-endpoint.ts diff --git a/README.md b/README.md index 6dd246f..e816816 100644 --- a/README.md +++ b/README.md @@ -66,7 +66,7 @@ stream.latestTradeDetail$.subscribe((v) => {}) - [ ] Cancel a Batch of Orders - [ ] Cancel All Orders - [ ] Query all current pending orders - - [ ] Query Order + - [x] Query Order - [ ] Query Margin Mode - [ ] Switch Margin Mode - [ ] Query Leverage diff --git a/src/bingx-client/services/trade.service.spec.ts b/src/bingx-client/services/trade.service.spec.ts new file mode 100644 index 0000000..b4a76f1 --- /dev/null +++ b/src/bingx-client/services/trade.service.spec.ts @@ -0,0 +1,28 @@ +import { ApiAccount } from 'bingx-api/bingx/account/api-account'; +import { BingxQueryOrderEndpoint } from 'bingx-api/bingx/endpoints/bingx-query-order-endpoint'; +import { TradeService } from 'bingx-api/bingx-client/services/trade.service'; + +describe('TradeService', () => { + const account = new ApiAccount('api-key', 'secret-key'); + + it('executes query order endpoint', async () => { + const requestExecutorMock = { + execute: jest.fn().mockResolvedValue({}), + }; + const service = new TradeService(requestExecutorMock); + + await expect( + service.queryOrder( + { + orderId: '123456789', + symbol: 'BTC-USDT', + }, + account, + ), + ).resolves.toEqual({}); + + expect(requestExecutorMock.execute).toHaveBeenCalledWith( + expect.any(BingxQueryOrderEndpoint), + ); + }); +}); diff --git a/src/bingx-client/services/trade.service.ts b/src/bingx-client/services/trade.service.ts index 65fa5bd..9b94a07 100644 --- a/src/bingx-client/services/trade.service.ts +++ b/src/bingx-client/services/trade.service.ts @@ -12,6 +12,8 @@ import { BingxSwitchLeverageEndpoint } from 'bingx-api/bingx/endpoints/bingx-swi import { OrderPositionSideEnum } from 'bingx-api/bingx'; import { BingxUserHistoryOrdersEndpoint } from 'bingx-api/bingx/endpoints/bingx-user-history-orders-endpoint'; import { BingxCancelOrderEndpoint } from 'bingx-api/bingx/endpoints/bingx-cancel-order-endpoint'; +import { BingxQueryOrderEndpoint } from 'bingx-api/bingx/endpoints/bingx-query-order-endpoint'; +import { QueryOrderInterface } from 'bingx-api/bingx/interfaces/query-order.interface'; export class TradeService { constructor(private readonly requestExecutor: RequestExecutorInterface) {} @@ -44,6 +46,15 @@ export class TradeService { ); } + public async queryOrder( + order: QueryOrderInterface, + account: AccountInterface, + ) { + return this.requestExecutor.execute( + new BingxQueryOrderEndpoint(order, account), + ); + } + public async getUserHistoryOrders( symbol: string, limit: number, diff --git a/src/bingx/endpoints/bingx-query-order-endpoint.spec.ts b/src/bingx/endpoints/bingx-query-order-endpoint.spec.ts new file mode 100644 index 0000000..edf3dce --- /dev/null +++ b/src/bingx/endpoints/bingx-query-order-endpoint.spec.ts @@ -0,0 +1,26 @@ +import { ApiAccount } from 'bingx-api/bingx/account/api-account'; +import { BingxQueryOrderEndpoint } from 'bingx-api/bingx/endpoints/bingx-query-order-endpoint'; + +describe('BingxQueryOrderEndpoint', () => { + const endpoint = new BingxQueryOrderEndpoint( + { + orderId: '123456789', + symbol: 'BTC-USDT', + }, + new ApiAccount('api-key', 'secret-key'), + ); + + it('describes the query order endpoint', () => { + expect(endpoint.method()).toBe('get'); + expect(endpoint.path()).toBe('/openApi/swap/v2/trade/order'); + }); + + it('passes order id and symbol as signed parameters', () => { + expect(endpoint.parameters().asRecord()).toEqual( + expect.objectContaining({ + orderId: '123456789', + symbol: 'BTC-USDT', + }), + ); + }); +}); diff --git a/src/bingx/endpoints/bingx-query-order-endpoint.ts b/src/bingx/endpoints/bingx-query-order-endpoint.ts new file mode 100644 index 0000000..c0ebc20 --- /dev/null +++ b/src/bingx/endpoints/bingx-query-order-endpoint.ts @@ -0,0 +1,35 @@ +import { AccountInterface } from 'bingx-api/bingx/account/account.interface'; +import { DefaultSignatureParameters } from 'bingx-api/bingx/account/default-signature-parameters'; +import { SignatureParametersInterface } from 'bingx-api/bingx/account/signature-parameters.interface'; +import { Endpoint } from 'bingx-api/bingx/endpoints/endpoint'; +import { EndpointInterface } from 'bingx-api/bingx/endpoints/endpoint.interface'; +import { QueryOrderInterface } from 'bingx-api/bingx/interfaces/query-order.interface'; + +export class BingxQueryOrderEndpoint + extends Endpoint + implements EndpointInterface +{ + constructor( + private readonly order: QueryOrderInterface, + account: AccountInterface, + ) { + super(account); + } + + method(): 'get' | 'post' | 'put' | 'patch' | 'delete' { + return 'get'; + } + + parameters(): SignatureParametersInterface { + return new DefaultSignatureParameters({ + orderId: this.order.orderId, + symbol: this.order.symbol, + }); + } + + path(): string { + return '/openApi/swap/v2/trade/order'; + } + + readonly t!: R; +} diff --git a/src/bingx/endpoints/index.ts b/src/bingx/endpoints/index.ts index 6866f8b..0c24d59 100644 --- a/src/bingx/endpoints/index.ts +++ b/src/bingx/endpoints/index.ts @@ -13,3 +13,4 @@ export * from './endpoint'; export * from './bingx-user-history-orders-endpoint'; export * from './bingx-user-history-orders-response'; export * from './bingx-cancel-order-endpoint'; +export * from './bingx-query-order-endpoint'; diff --git a/src/bingx/interfaces/websocket-event.ts b/src/bingx/interfaces/websocket-event.ts index a414299..3be37b3 100644 --- a/src/bingx/interfaces/websocket-event.ts +++ b/src/bingx/interfaces/websocket-event.ts @@ -1,4 +1,3 @@ -import { OrderTypeEnum } from 'bingx-api/bingx/enums/order-type.enum'; import { OrderSideEnum } from 'bingx-api/bingx/enums/order-side.enum'; import { OrderStatusEnum } from 'bingx-api/bingx/enums/order-status.enum'; import { OrderPositionSideEnum } from 'bingx-api/bingx/enums/order-position-side.enum';