From 46c0551133e5b6f46080aca115d7b2795a4b4d57 Mon Sep 17 00:00:00 2001 From: discountry Date: Sat, 27 Sep 2025 23:23:53 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=9B=B4=E6=96=B0=20AsterRestClient=20?= =?UTF-8?q?=E5=92=8C=20AsterGateway=20=E4=B8=AD=E7=9A=84=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E5=A4=84=E7=90=86=E9=80=BB=E8=BE=91=EF=BC=8C=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E5=AD=97=E7=AC=A6=E4=B8=B2=E7=B1=BB=E5=9E=8B=E7=9A=84=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=20ID?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/exchanges/aster/client.ts | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/src/exchanges/aster/client.ts b/src/exchanges/aster/client.ts index 960ea64..26fb7ed 100644 --- a/src/exchanges/aster/client.ts +++ b/src/exchanges/aster/client.ts @@ -278,8 +278,14 @@ export class AsterRestClient { async cancelOrders(params: { symbol: string; orderIdList?: Array; origClientOrderIdList?: string[] }): Promise { const payload: Record = { symbol: params.symbol }; - if (params.orderIdList) payload.orderIdList = JSON.stringify(params.orderIdList.map((id) => Number(id))); - if (params.origClientOrderIdList) payload.origClientOrderIdList = JSON.stringify(params.origClientOrderIdList); + if (params.orderIdList?.length) { + payload.orderIdList = `[${params.orderIdList + .map((id) => (typeof id === "string" ? id.trim() : String(id))) + .join(",")}]`; + } + if (params.origClientOrderIdList?.length) { + payload.origClientOrderIdList = JSON.stringify(params.origClientOrderIdList); + } const response = await this.signedRequest({ path: "/fapi/v1/batchOrders", method: "DELETE", params: payload }); return response.map(toOrderFromRest); } @@ -706,13 +712,15 @@ function updateAccountSnapshot(snapshot: AsterAccountSnapshot | null, event: { e return next; } -function mergeOrderSnapshot(map: Map, order: AsterOrder): void { - const numericId = typeof order.orderId === "number" ? order.orderId : Number(order.orderId); - if (!Number.isFinite(numericId)) return; +function mergeOrderSnapshot(map: Map, order: AsterOrder): void { + const rawId = order.orderId; + if (rawId === undefined || rawId === null) return; + const key = String(rawId); + if (!key) return; if (FINAL_ORDER_STATUSES.has(order.status)) { - map.delete(numericId); + map.delete(key); } else { - map.set(numericId, { ...order, orderId: numericId }); + map.set(key, { ...order, orderId: key }); } } @@ -722,7 +730,7 @@ export class AsterGateway { private readonly userStream: AsterUserStream; private accountSnapshot: AsterAccountSnapshot | null = null; - private readonly openOrders = new Map(); + private readonly openOrders = new Map(); private positionSyncTimer: ReturnType | null = null; private positionSyncInFlight = false; @@ -1003,12 +1011,9 @@ export class AsterGateway { async cancelAllOrders(params: { symbol: string }): Promise { await this.rest.cancelAllOrders(params); - for (const order of Array.from(this.openOrders.values())) { + for (const [key, order] of Array.from(this.openOrders.entries())) { if (order.symbol === params.symbol) { - const numericId = typeof order.orderId === "number" ? order.orderId : Number(order.orderId); - if (Number.isFinite(numericId)) { - this.openOrders.delete(numericId); - } + this.openOrders.delete(key); } } this.ordersEvent.emit(Array.from(this.openOrders.values()));