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()));