mirror of
https://github.com/discountry/ritmex-bot.git
synced 2026-09-11 09:18:08 +00:00
Created src/exchanges/adapter-utils.ts with createSafeInvoke() and createInitManager() factories. Converted 7/8 adapters to use shared utilities, eliminating ~350 lines of duplicated retry/init/error-handling boilerplate. Lighter adapter kept as-is (no retry logic by design). Also translated Chinese comments in adapter.ts and order-schema.ts.
90 lines
2.5 KiB
TypeScript
90 lines
2.5 KiB
TypeScript
import type {
|
|
AccountSnapshot,
|
|
Order,
|
|
Depth,
|
|
Ticker,
|
|
Kline,
|
|
CreateOrderParams,
|
|
} from "./types";
|
|
|
|
export interface AccountListener {
|
|
(snapshot: AccountSnapshot): void;
|
|
}
|
|
|
|
export interface OrderListener {
|
|
(orders: Order[]): void;
|
|
}
|
|
|
|
export interface DepthListener {
|
|
(depth: Depth): void;
|
|
}
|
|
|
|
export interface TickerListener {
|
|
(ticker: Ticker): void;
|
|
}
|
|
|
|
export interface KlineListener {
|
|
(klines: Kline[]): void;
|
|
}
|
|
|
|
export interface FundingRateSnapshot {
|
|
symbol: string;
|
|
fundingRate: number;
|
|
updateTime: number;
|
|
}
|
|
|
|
export interface FundingRateListener {
|
|
(snapshot: FundingRateSnapshot): void;
|
|
}
|
|
|
|
export type RestHealthState = "healthy" | "unhealthy";
|
|
export interface RestHealthInfo {
|
|
consecutiveErrors: number;
|
|
method?: string;
|
|
path?: string;
|
|
error?: string;
|
|
}
|
|
export interface RestHealthListener {
|
|
(state: RestHealthState, info: RestHealthInfo): void;
|
|
}
|
|
|
|
export interface ExchangePrecision {
|
|
priceTick: number;
|
|
qtyStep: number;
|
|
priceDecimals?: number;
|
|
sizeDecimals?: number;
|
|
marketId?: number;
|
|
minBaseAmount?: number;
|
|
minQuoteAmount?: number;
|
|
}
|
|
|
|
export type ConnectionEventType = "disconnected" | "reconnected";
|
|
export interface ConnectionEventListener {
|
|
(event: ConnectionEventType, symbol: string): void;
|
|
}
|
|
|
|
export interface ExchangeAdapter {
|
|
readonly id: string;
|
|
supportsTrailingStops(): boolean;
|
|
watchAccount(cb: AccountListener): void;
|
|
watchOrders(cb: OrderListener): void;
|
|
watchDepth(symbol: string, cb: DepthListener): void;
|
|
watchTicker(symbol: string, cb: TickerListener): void;
|
|
watchKlines(symbol: string, interval: string, cb: KlineListener): void;
|
|
watchFundingRate?(symbol: string, cb: FundingRateListener): void;
|
|
createOrder(params: CreateOrderParams): Promise<Order>;
|
|
cancelOrder(params: { symbol: string; orderId: number | string }): Promise<void>;
|
|
cancelOrders(params: { symbol: string; orderIdList: Array<number | string> }): Promise<void>;
|
|
cancelAllOrders(params: { symbol: string }): Promise<void>;
|
|
getPrecision?(): Promise<ExchangePrecision | null>;
|
|
// Connection protection methods (optional)
|
|
onConnectionEvent?(listener: ConnectionEventListener): void;
|
|
offConnectionEvent?(listener: ConnectionEventListener): void;
|
|
onRestHealthEvent?(listener: RestHealthListener): void;
|
|
offRestHealthEvent?(listener: RestHealthListener): void;
|
|
queryOpenOrders?(): Promise<Order[]>;
|
|
queryAccountSnapshot?(): Promise<AccountSnapshot | null>;
|
|
changeMarginMode?(params: { symbol: string; marginMode: "isolated" | "cross" }): Promise<void>;
|
|
forceCancelAllOrders?(): Promise<boolean>;
|
|
}
|