@123456btc/123456btc-cli 1.0.4 → 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/dist/api/auth.js +2 -2
  2. package/dist/api/auth.js.map +1 -1
  3. package/dist/api/client.d.ts +10 -6
  4. package/dist/api/client.d.ts.map +1 -1
  5. package/dist/api/client.js +62 -19
  6. package/dist/api/client.js.map +1 -1
  7. package/dist/api/client.test.js +24 -16
  8. package/dist/api/client.test.js.map +1 -1
  9. package/dist/api/signals.d.ts +3 -3
  10. package/dist/api/signals.d.ts.map +1 -1
  11. package/dist/api/signals.js +3 -3
  12. package/dist/api/signals.js.map +1 -1
  13. package/dist/api/strategy-stream.d.ts +4 -9
  14. package/dist/api/strategy-stream.d.ts.map +1 -1
  15. package/dist/api/strategy-stream.js +14 -13
  16. package/dist/api/strategy-stream.js.map +1 -1
  17. package/dist/api/strategy.d.ts +3 -1
  18. package/dist/api/strategy.d.ts.map +1 -1
  19. package/dist/api/strategy.js +3 -1
  20. package/dist/api/strategy.js.map +1 -1
  21. package/dist/api/token-manager.d.ts.map +1 -1
  22. package/dist/api/token-manager.js +4 -0
  23. package/dist/api/token-manager.js.map +1 -1
  24. package/dist/cli.js +5 -47
  25. package/dist/cli.js.map +1 -1
  26. package/dist/commands/auth.d.ts.map +1 -1
  27. package/dist/commands/auth.js +27 -93
  28. package/dist/commands/auth.js.map +1 -1
  29. package/dist/commands/exchange.d.ts +3 -0
  30. package/dist/commands/exchange.d.ts.map +1 -0
  31. package/dist/commands/exchange.js +141 -0
  32. package/dist/commands/exchange.js.map +1 -0
  33. package/dist/commands/gas.d.ts.map +1 -1
  34. package/dist/commands/gas.js +3 -2
  35. package/dist/commands/gas.js.map +1 -1
  36. package/dist/commands/health.d.ts.map +1 -1
  37. package/dist/commands/health.js +5 -3
  38. package/dist/commands/health.js.map +1 -1
  39. package/dist/commands/provider.d.ts.map +1 -1
  40. package/dist/commands/provider.js +17 -20
  41. package/dist/commands/provider.js.map +1 -1
  42. package/dist/commands/signals.d.ts.map +1 -1
  43. package/dist/commands/signals.js +10 -9
  44. package/dist/commands/signals.js.map +1 -1
  45. package/dist/commands/strategy.d.ts.map +1 -1
  46. package/dist/commands/strategy.js +184 -10
  47. package/dist/commands/strategy.js.map +1 -1
  48. package/dist/commands/tier.d.ts.map +1 -1
  49. package/dist/commands/tier.js +3 -2
  50. package/dist/commands/tier.js.map +1 -1
  51. package/dist/commands/vault.d.ts.map +1 -1
  52. package/dist/commands/vault.js +5 -3
  53. package/dist/commands/vault.js.map +1 -1
  54. package/dist/commands/wallet.d.ts.map +1 -1
  55. package/dist/commands/wallet.js +3 -2
  56. package/dist/commands/wallet.js.map +1 -1
  57. package/dist/config/strategy-exchange.d.ts +30 -0
  58. package/dist/config/strategy-exchange.d.ts.map +1 -0
  59. package/dist/config/strategy-exchange.js +130 -0
  60. package/dist/config/strategy-exchange.js.map +1 -0
  61. package/dist/config.d.ts +11 -4
  62. package/dist/config.d.ts.map +1 -1
  63. package/dist/config.js +28 -56
  64. package/dist/config.js.map +1 -1
  65. package/dist/exchange/index.d.ts +106 -0
  66. package/dist/exchange/index.d.ts.map +1 -0
  67. package/dist/exchange/index.js +43 -0
  68. package/dist/exchange/index.js.map +1 -0
  69. package/dist/exchange/v2/adapters/base.d.ts +130 -0
  70. package/dist/exchange/v2/adapters/base.d.ts.map +1 -0
  71. package/dist/exchange/v2/adapters/base.js +296 -0
  72. package/dist/exchange/v2/adapters/base.js.map +1 -0
  73. package/dist/exchange/v2/adapters/binance.d.ts +51 -0
  74. package/dist/exchange/v2/adapters/binance.d.ts.map +1 -0
  75. package/dist/exchange/v2/adapters/binance.js +549 -0
  76. package/dist/exchange/v2/adapters/binance.js.map +1 -0
  77. package/dist/exchange/v2/adapters/bitget.d.ts +43 -0
  78. package/dist/exchange/v2/adapters/bitget.d.ts.map +1 -0
  79. package/dist/exchange/v2/adapters/bitget.js +524 -0
  80. package/dist/exchange/v2/adapters/bitget.js.map +1 -0
  81. package/dist/exchange/v2/adapters/hyperliquid.d.ts +102 -0
  82. package/dist/exchange/v2/adapters/hyperliquid.d.ts.map +1 -0
  83. package/dist/exchange/v2/adapters/hyperliquid.js +536 -0
  84. package/dist/exchange/v2/adapters/hyperliquid.js.map +1 -0
  85. package/dist/exchange/v2/adapters/okx.d.ts +38 -0
  86. package/dist/exchange/v2/adapters/okx.d.ts.map +1 -0
  87. package/dist/exchange/v2/adapters/okx.js +437 -0
  88. package/dist/exchange/v2/adapters/okx.js.map +1 -0
  89. package/dist/exchange/v2/algorithms/index.d.ts +78 -0
  90. package/dist/exchange/v2/algorithms/index.d.ts.map +1 -0
  91. package/dist/exchange/v2/algorithms/index.js +441 -0
  92. package/dist/exchange/v2/algorithms/index.js.map +1 -0
  93. package/dist/exchange/v2/executor/circuit-breaker.d.ts +44 -0
  94. package/dist/exchange/v2/executor/circuit-breaker.d.ts.map +1 -0
  95. package/dist/exchange/v2/executor/circuit-breaker.js +90 -0
  96. package/dist/exchange/v2/executor/circuit-breaker.js.map +1 -0
  97. package/dist/exchange/v2/executor/core.d.ts +64 -0
  98. package/dist/exchange/v2/executor/core.d.ts.map +1 -0
  99. package/dist/exchange/v2/executor/core.js +458 -0
  100. package/dist/exchange/v2/executor/core.js.map +1 -0
  101. package/dist/exchange/v2/executor/risk.d.ts +29 -0
  102. package/dist/exchange/v2/executor/risk.d.ts.map +1 -0
  103. package/dist/exchange/v2/executor/risk.js +144 -0
  104. package/dist/exchange/v2/executor/risk.js.map +1 -0
  105. package/dist/exchange/v2/executor/state.d.ts +29 -0
  106. package/dist/exchange/v2/executor/state.d.ts.map +1 -0
  107. package/dist/exchange/v2/executor/state.js +171 -0
  108. package/dist/exchange/v2/executor/state.js.map +1 -0
  109. package/dist/exchange/v2/index.d.ts +50 -0
  110. package/dist/exchange/v2/index.d.ts.map +1 -0
  111. package/dist/exchange/v2/index.js +82 -0
  112. package/dist/exchange/v2/index.js.map +1 -0
  113. package/dist/exchange/v2/registry.d.ts +50 -0
  114. package/dist/exchange/v2/registry.d.ts.map +1 -0
  115. package/dist/exchange/v2/registry.js +101 -0
  116. package/dist/exchange/v2/registry.js.map +1 -0
  117. package/dist/exchange/v2/types.d.ts +413 -0
  118. package/dist/exchange/v2/types.d.ts.map +1 -0
  119. package/dist/exchange/v2/types.js +3 -0
  120. package/dist/exchange/v2/types.js.map +1 -0
  121. package/dist/index.d.ts +105 -23
  122. package/dist/index.d.ts.map +1 -1
  123. package/dist/index.js +40 -39
  124. package/dist/index.js.map +1 -1
  125. package/dist/session/store.d.ts +25 -0
  126. package/dist/session/store.d.ts.map +1 -0
  127. package/dist/session/store.js +108 -0
  128. package/dist/session/store.js.map +1 -0
  129. package/dist/session/store.test.d.ts +2 -0
  130. package/dist/session/store.test.d.ts.map +1 -0
  131. package/dist/session/store.test.js +118 -0
  132. package/dist/session/store.test.js.map +1 -0
  133. package/dist/types/financial.d.ts +14 -0
  134. package/dist/types/financial.d.ts.map +1 -0
  135. package/dist/types/financial.js +6 -0
  136. package/dist/types/financial.js.map +1 -0
  137. package/dist/utils/auth.d.ts +1 -1
  138. package/dist/utils/auth.d.ts.map +1 -1
  139. package/dist/utils/auth.js +5 -5
  140. package/dist/utils/auth.js.map +1 -1
  141. package/dist/vault/crypto.js +3 -3
  142. package/dist/vault/crypto.js.map +1 -1
  143. package/dist/vault/index.d.ts +28 -0
  144. package/dist/vault/index.d.ts.map +1 -1
  145. package/dist/vault/index.js +70 -0
  146. package/dist/vault/index.js.map +1 -1
  147. package/package.json +1 -1
@@ -0,0 +1,130 @@
1
+ /**
2
+ * Institutional Order Execution Module — Abstract Adapter Base
3
+ * Provides: interface contract, HMAC signing, request helpers, error normalisation
4
+ */
5
+ import type { ExchangeId, ExchangeCredentials, MarketType, OrderStatus, OrderResponse, AccountSnapshot, PositionInfo, TickerInfo, SymbolInfo, OHLCVBar, OrderBook, FundingInfo, RawOrderParams, BatchOrderResponse, AmendOrderRequest, OrderHistoryQuery, OrderHistoryResponse, TradeHistoryQuery, TradeHistoryResponse, CancelAllOrdersRequest, MarginModeRequest } from '../types';
6
+ export declare class ExchangeError extends Error {
7
+ readonly exchange: ExchangeId;
8
+ readonly code?: string | number | undefined;
9
+ readonly raw?: unknown | undefined;
10
+ constructor(message: string, exchange: ExchangeId, code?: string | number | undefined, raw?: unknown | undefined);
11
+ }
12
+ export declare class InsufficientFundsError extends ExchangeError {
13
+ }
14
+ export declare class RateLimitError extends ExchangeError {
15
+ }
16
+ export declare class InvalidSymbolError extends ExchangeError {
17
+ }
18
+ export declare class OrderNotFoundError extends ExchangeError {
19
+ }
20
+ export interface IExchangeAdapter {
21
+ readonly exchangeId: ExchangeId;
22
+ getTicker(symbol: string): Promise<TickerInfo>;
23
+ getSymbolInfo(symbol: string): Promise<SymbolInfo>;
24
+ getOHLCV(symbol: string, timeframe: string, limit?: number): Promise<OHLCVBar[]>;
25
+ getOrderBook(symbol: string, depth?: number): Promise<OrderBook>;
26
+ getFundingInfo(symbol: string): Promise<FundingInfo | null>;
27
+ listSymbols(marketType: MarketType): Promise<string[]>;
28
+ getAccount(): Promise<AccountSnapshot>;
29
+ getPositions(symbol?: string): Promise<PositionInfo[]>;
30
+ placeOrder(params: RawOrderParams): Promise<OrderResponse>;
31
+ /** Batch order submission. Default impl falls back to sequential placeOrder calls. */
32
+ placeOrders?(batch: {
33
+ orders: RawOrderParams[];
34
+ grouping?: string;
35
+ }): Promise<BatchOrderResponse>;
36
+ cancelOrder(orderId: string, symbol: string): Promise<boolean>;
37
+ /** Batch cancel. Default impl falls back to sequential cancelOrder calls. */
38
+ cancelOrders?(orderIds: string[], symbol: string): Promise<boolean[]>;
39
+ /** Cancel all open orders for a symbol or globally. */
40
+ cancelAllOrders?(request?: CancelAllOrdersRequest): Promise<boolean>;
41
+ getOrderStatus(orderId: string, symbol: string): Promise<OrderResponse>;
42
+ /** Query order history (closed/cancelled/filled orders). */
43
+ getOrderHistory?(query: OrderHistoryQuery): Promise<OrderHistoryResponse>;
44
+ getOpenOrders(symbol?: string): Promise<OrderResponse[]>;
45
+ /** Query individual fill / trade history. */
46
+ getFills?(query: TradeHistoryQuery): Promise<TradeHistoryResponse>;
47
+ /** Amend an existing order (price / quantity). */
48
+ amendOrder?(request: AmendOrderRequest): Promise<OrderResponse>;
49
+ /** Validate order params against exchange rules before submission. Returns array of error messages (empty = valid). */
50
+ validateOrder?(params: RawOrderParams, symbolInfo: SymbolInfo): Promise<string[]>;
51
+ setLeverage?(symbol: string, leverage: number, marginMode?: 'cross' | 'isolated'): Promise<void>;
52
+ setMarginMode?(request: MarginModeRequest): Promise<void>;
53
+ ping?(): Promise<number>;
54
+ }
55
+ export declare function hmacSha256Hex(secret: string, message: string): Promise<string>;
56
+ export declare function hmacSha256Base64(secret: string, message: string): Promise<string>;
57
+ /** Stable query string builder — sorts keys alphabetically for consistent signing */
58
+ export declare function buildQueryString(params: Record<string, string | number | boolean | undefined>): string;
59
+ /** Unsorted query string (for exchanges that require insertion order) */
60
+ export declare function buildQueryStringOrdered(params: Record<string, string | number | boolean | undefined>): string;
61
+ export interface RequestOptions {
62
+ method: 'GET' | 'POST' | 'PUT' | 'DELETE';
63
+ path: string;
64
+ query?: Record<string, string | number | boolean | undefined>;
65
+ body?: unknown;
66
+ headers?: Record<string, string>;
67
+ baseUrl?: string;
68
+ }
69
+ export interface RateLimitInfo {
70
+ exchange: ExchangeId;
71
+ usedWeight?: number;
72
+ weightLimit?: number;
73
+ remaining?: number;
74
+ resetAt?: number;
75
+ }
76
+ export interface AdapterConfig {
77
+ credentials: ExchangeCredentials;
78
+ baseUrl: string;
79
+ testnetUrl?: string;
80
+ onRateLimit?: (info: RateLimitInfo) => void;
81
+ }
82
+ export declare abstract class BaseExchangeAdapter implements IExchangeAdapter {
83
+ abstract readonly exchangeId: ExchangeId;
84
+ protected readonly creds: ExchangeCredentials;
85
+ protected readonly baseUrl: string;
86
+ protected readonly testnet: boolean;
87
+ private onRateLimit?;
88
+ constructor(config: AdapterConfig);
89
+ protected request<T = unknown>(opts: RequestOptions): Promise<T>;
90
+ /** Override in subclass to unwrap exchange envelope, e.g. { code: 0, data: [...] } */
91
+ protected unwrapResponse<T>(json: unknown, _status: number): T;
92
+ /** Override in subclass to map HTTP error codes to typed errors */
93
+ protected throwExchangeError(status: number, message: string, raw?: unknown): never;
94
+ /** Parse exchange-specific rate limit headers and emit via callback */
95
+ private _parseRateLimitHeaders;
96
+ protected normaliseStatus(raw: string): OrderStatus;
97
+ placeOrders(batch: {
98
+ orders: RawOrderParams[];
99
+ grouping?: string;
100
+ }): Promise<BatchOrderResponse>;
101
+ cancelOrders(orderIds: string[], symbol: string): Promise<boolean[]>;
102
+ cancelAllOrders(_request?: CancelAllOrdersRequest): Promise<boolean>;
103
+ getOrderHistory(_query: OrderHistoryQuery): Promise<OrderHistoryResponse>;
104
+ getFills(_query: TradeHistoryQuery): Promise<TradeHistoryResponse>;
105
+ amendOrder(_request: AmendOrderRequest): Promise<OrderResponse>;
106
+ validateOrder(params: RawOrderParams, symbolInfo: SymbolInfo): Promise<string[]>;
107
+ setLeverage(_symbol: string, _leverage: number, _marginMode?: 'cross' | 'isolated'): Promise<void>;
108
+ setMarginMode(_request: MarginModeRequest): Promise<void>;
109
+ ping(): Promise<number>;
110
+ abstract getTicker(symbol: string): Promise<TickerInfo>;
111
+ abstract getSymbolInfo(symbol: string): Promise<SymbolInfo>;
112
+ abstract getOHLCV(symbol: string, timeframe: string, limit?: number): Promise<OHLCVBar[]>;
113
+ abstract getOrderBook(symbol: string, depth?: number): Promise<OrderBook>;
114
+ abstract getFundingInfo(symbol: string): Promise<FundingInfo | null>;
115
+ abstract listSymbols(marketType: MarketType): Promise<string[]>;
116
+ abstract getAccount(): Promise<AccountSnapshot>;
117
+ abstract getPositions(symbol?: string): Promise<PositionInfo[]>;
118
+ abstract placeOrder(params: RawOrderParams): Promise<OrderResponse>;
119
+ abstract cancelOrder(orderId: string, symbol: string): Promise<boolean>;
120
+ abstract getOrderStatus(orderId: string, symbol: string): Promise<OrderResponse>;
121
+ abstract getOpenOrders(symbol?: string): Promise<OrderResponse[]>;
122
+ }
123
+ export declare const TIMEFRAME_MS: Record<string, number>;
124
+ /** Round quantity to stepSize precision */
125
+ export declare function roundToStep(value: number, step: number): number;
126
+ /** Round price to tickSize precision */
127
+ export declare function roundToTick(value: number, tick: number): number;
128
+ /** Generate a short random client order ID */
129
+ export declare function genClientOrderId(prefix?: string): string;
130
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../src/exchange/v2/adapters/base.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,296 @@
1
+ "use strict";
2
+ /**
3
+ * Institutional Order Execution Module — Abstract Adapter Base
4
+ * Provides: interface contract, HMAC signing, request helpers, error normalisation
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.TIMEFRAME_MS = exports.BaseExchangeAdapter = exports.OrderNotFoundError = exports.InvalidSymbolError = exports.RateLimitError = exports.InsufficientFundsError = exports.ExchangeError = void 0;
8
+ exports.hmacSha256Hex = hmacSha256Hex;
9
+ exports.hmacSha256Base64 = hmacSha256Base64;
10
+ exports.buildQueryString = buildQueryString;
11
+ exports.buildQueryStringOrdered = buildQueryStringOrdered;
12
+ exports.roundToStep = roundToStep;
13
+ exports.roundToTick = roundToTick;
14
+ exports.genClientOrderId = genClientOrderId;
15
+ // ─── Normalised Error ──────────────────────────────────────────────────────
16
+ class ExchangeError extends Error {
17
+ exchange;
18
+ code;
19
+ raw;
20
+ constructor(message, exchange, code, raw) {
21
+ super(message);
22
+ this.exchange = exchange;
23
+ this.code = code;
24
+ this.raw = raw;
25
+ this.name = 'ExchangeError';
26
+ }
27
+ }
28
+ exports.ExchangeError = ExchangeError;
29
+ class InsufficientFundsError extends ExchangeError {
30
+ }
31
+ exports.InsufficientFundsError = InsufficientFundsError;
32
+ class RateLimitError extends ExchangeError {
33
+ }
34
+ exports.RateLimitError = RateLimitError;
35
+ class InvalidSymbolError extends ExchangeError {
36
+ }
37
+ exports.InvalidSymbolError = InvalidSymbolError;
38
+ class OrderNotFoundError extends ExchangeError {
39
+ }
40
+ exports.OrderNotFoundError = OrderNotFoundError;
41
+ // ─── HMAC Signing Utilities ────────────────────────────────────────────────
42
+ async function hmacSha256Hex(secret, message) {
43
+ const enc = new TextEncoder();
44
+ const key = await crypto.subtle.importKey('raw', enc.encode(secret), { name: 'HMAC', hash: 'SHA-256' }, false, ['sign']);
45
+ const sig = await crypto.subtle.sign('HMAC', key, enc.encode(message));
46
+ return Array.from(new Uint8Array(sig)).map(b => b.toString(16).padStart(2, '0')).join('');
47
+ }
48
+ async function hmacSha256Base64(secret, message) {
49
+ const enc = new TextEncoder();
50
+ const key = await crypto.subtle.importKey('raw', enc.encode(secret), { name: 'HMAC', hash: 'SHA-256' }, false, ['sign']);
51
+ const sig = await crypto.subtle.sign('HMAC', key, enc.encode(message));
52
+ return btoa(String.fromCharCode(...new Uint8Array(sig)));
53
+ }
54
+ /** Stable query string builder — sorts keys alphabetically for consistent signing */
55
+ function buildQueryString(params) {
56
+ return Object.entries(params)
57
+ .filter(([, v]) => v !== undefined && v !== null)
58
+ .sort(([a], [b]) => a.localeCompare(b))
59
+ .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(String(v))}`)
60
+ .join('&');
61
+ }
62
+ /** Unsorted query string (for exchanges that require insertion order) */
63
+ function buildQueryStringOrdered(params) {
64
+ return Object.entries(params)
65
+ .filter(([, v]) => v !== undefined && v !== null)
66
+ .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(String(v))}`)
67
+ .join('&');
68
+ }
69
+ // ─── Abstract Base Class ───────────────────────────────────────────────────
70
+ class BaseExchangeAdapter {
71
+ creds;
72
+ baseUrl;
73
+ testnet;
74
+ onRateLimit;
75
+ constructor(config) {
76
+ this.creds = config.credentials;
77
+ this.testnet = config.credentials.testnet ?? false;
78
+ this.baseUrl = this.testnet && config.testnetUrl
79
+ ? config.testnetUrl
80
+ : config.baseUrl;
81
+ this.onRateLimit = config.onRateLimit;
82
+ }
83
+ // ── Core HTTP ──
84
+ async request(opts) {
85
+ const url = new URL(`${opts.baseUrl ?? this.baseUrl}${opts.path}`);
86
+ if (opts.query) {
87
+ for (const [k, v] of Object.entries(opts.query)) {
88
+ if (v !== undefined && v !== null)
89
+ url.searchParams.set(k, String(v));
90
+ }
91
+ }
92
+ const fetchOpts = {
93
+ method: opts.method,
94
+ headers: { 'Content-Type': 'application/json', ...opts.headers },
95
+ };
96
+ if (opts.body !== undefined) {
97
+ fetchOpts.body = JSON.stringify(opts.body);
98
+ }
99
+ const res = await fetch(url.toString(), fetchOpts);
100
+ const text = await res.text();
101
+ // Cloudflare CDN rate-limit page 检测(HTML 响应,包含 "error code: 1015")
102
+ // 交易所 API 均部署在 Cloudflare 后,Cloudflare Worker 与其共享 CDN IP 段,
103
+ // 高频调用时触发 CF 的 Ray-ID 限流,返回 HTML 而非 JSON。
104
+ if (text.includes('error code: 1015') || text.includes('error code:1015')) {
105
+ throw new RateLimitError('交易所 API 请求频率过高(Cloudflare rate limit 1015)。请降低 Bot 运行频率,稍后重试。', this.exchangeId, 1015);
106
+ }
107
+ // Parse rate limit headers from major exchanges
108
+ this._parseRateLimitHeaders(res.headers);
109
+ let json;
110
+ try {
111
+ json = JSON.parse(text);
112
+ }
113
+ catch {
114
+ json = text;
115
+ }
116
+ if (!res.ok) {
117
+ const msg = typeof json === 'object' && json !== null
118
+ ? JSON.stringify(json)
119
+ : text.slice(0, 200); // 截断 HTML 防止超长错误信息
120
+ this.throwExchangeError(res.status, msg, json);
121
+ }
122
+ return this.unwrapResponse(json, res.status);
123
+ }
124
+ /** Override in subclass to unwrap exchange envelope, e.g. { code: 0, data: [...] } */
125
+ unwrapResponse(json, _status) {
126
+ return json;
127
+ }
128
+ /** Override in subclass to map HTTP error codes to typed errors */
129
+ throwExchangeError(status, message, raw) {
130
+ if (status === 429)
131
+ throw new RateLimitError(message, this.exchangeId, status, raw);
132
+ throw new ExchangeError(message, this.exchangeId, status, raw);
133
+ }
134
+ /** Parse exchange-specific rate limit headers and emit via callback */
135
+ _parseRateLimitHeaders(headers) {
136
+ if (!this.onRateLimit)
137
+ return;
138
+ const info = { exchange: this.exchangeId };
139
+ // Binance: X-MBX-USED-WEIGHT-1M
140
+ const binanceWeight = headers.get('x-mbx-used-weight-1m');
141
+ if (binanceWeight) {
142
+ info.usedWeight = parseInt(binanceWeight, 10);
143
+ info.weightLimit = 1200; // Binance default per minute
144
+ }
145
+ // Binance alternative: X-SAPI-USED-IP-WEIGHT-1M
146
+ const sapiWeight = headers.get('x-sapi-used-ip-weight-1m');
147
+ if (sapiWeight && !info.usedWeight) {
148
+ info.usedWeight = parseInt(sapiWeight, 10);
149
+ info.weightLimit = 12000;
150
+ }
151
+ // OKX / generic: X-RateLimit-Remaining
152
+ const remaining = headers.get('x-ratelimit-remaining');
153
+ if (remaining) {
154
+ info.remaining = parseInt(remaining, 10);
155
+ }
156
+ // OKX / generic: X-RateLimit-Limit
157
+ const limit = headers.get('x-ratelimit-limit');
158
+ if (limit) {
159
+ info.weightLimit = parseInt(limit, 10);
160
+ }
161
+ // OKX / generic: X-RateLimit-Reset
162
+ const reset = headers.get('x-ratelimit-reset');
163
+ if (reset) {
164
+ info.resetAt = parseInt(reset, 10) * 1000;
165
+ }
166
+ // Bitget: X-Rate-Limit-Remaining
167
+ const bitgetRemaining = headers.get('x-rate-limit-remaining');
168
+ if (bitgetRemaining && info.remaining === undefined) {
169
+ info.remaining = parseInt(bitgetRemaining, 10);
170
+ }
171
+ // Bitget: X-Rate-Limit-Reset
172
+ const bitgetReset = headers.get('x-rate-limit-reset');
173
+ if (bitgetReset && info.resetAt === undefined) {
174
+ info.resetAt = parseInt(bitgetReset, 10) * 1000;
175
+ }
176
+ if (info.usedWeight !== undefined || info.remaining !== undefined) {
177
+ this.onRateLimit(info);
178
+ }
179
+ }
180
+ // ── Order Status Normalisation ──
181
+ normaliseStatus(raw) {
182
+ const s = raw.toLowerCase();
183
+ if (s.includes('fill') && s.includes('partial'))
184
+ return 'partially_filled';
185
+ if (s.includes('fill') || s === 'closed')
186
+ return 'filled';
187
+ if (s.includes('cancel'))
188
+ return 'cancelled';
189
+ if (s.includes('reject') || s.includes('failed') || s.includes('fail'))
190
+ return 'rejected';
191
+ if (s.includes('expir'))
192
+ return 'expired';
193
+ if (s.includes('open') || s.includes('live') || s === 'new')
194
+ return 'open';
195
+ return 'pending';
196
+ }
197
+ // ── Default no-op implementations for optional methods ──
198
+ // ── Default batch implementations (sequential fallback) ──
199
+ async placeOrders(batch) {
200
+ const results = [];
201
+ const failed = [];
202
+ for (let i = 0; i < batch.orders.length; i++) {
203
+ try {
204
+ const resp = await this.placeOrder(batch.orders[i]);
205
+ results.push(resp);
206
+ }
207
+ catch (err) {
208
+ failed.push({ index: i, error: err instanceof Error ? err.message : String(err) });
209
+ }
210
+ }
211
+ return { results, failed };
212
+ }
213
+ async cancelOrders(orderIds, symbol) {
214
+ return Promise.all(orderIds.map(id => this.cancelOrder(id, symbol)));
215
+ }
216
+ async cancelAllOrders(_request) {
217
+ throw new ExchangeError('cancelAllOrders not implemented for this exchange', this.exchangeId);
218
+ }
219
+ async getOrderHistory(_query) {
220
+ throw new ExchangeError('getOrderHistory not implemented for this exchange', this.exchangeId);
221
+ }
222
+ async getFills(_query) {
223
+ throw new ExchangeError('getFills not implemented for this exchange', this.exchangeId);
224
+ }
225
+ async amendOrder(_request) {
226
+ throw new ExchangeError('amendOrder not implemented for this exchange', this.exchangeId);
227
+ }
228
+ async validateOrder(params, symbolInfo) {
229
+ const errors = [];
230
+ if (params.quantity !== undefined) {
231
+ if (params.quantity < symbolInfo.minQty)
232
+ errors.push(`Quantity ${params.quantity} below min ${symbolInfo.minQty}`);
233
+ if (params.quantity > symbolInfo.maxQty)
234
+ errors.push(`Quantity ${params.quantity} above max ${symbolInfo.maxQty}`);
235
+ const rounded = roundToStep(params.quantity, symbolInfo.stepSize);
236
+ if (Math.abs(rounded - params.quantity) > 1e-12)
237
+ errors.push(`Quantity ${params.quantity} does not match step size ${symbolInfo.stepSize}`);
238
+ }
239
+ if (params.price !== undefined && params.price > 0) {
240
+ const rounded = roundToTick(params.price, symbolInfo.tickSize);
241
+ if (Math.abs(rounded - params.price) > 1e-12)
242
+ errors.push(`Price ${params.price} does not match tick size ${symbolInfo.tickSize}`);
243
+ }
244
+ if (params.price !== undefined && params.quantity !== undefined) {
245
+ const notional = params.price * params.quantity;
246
+ if (notional < symbolInfo.minNotional)
247
+ errors.push(`Notional ${notional} below min ${symbolInfo.minNotional}`);
248
+ }
249
+ return errors;
250
+ }
251
+ // ── Lifecycle defaults ──
252
+ async setLeverage(_symbol, _leverage, _marginMode) {
253
+ // no-op for spot-only adapters; override in futures adapters
254
+ }
255
+ async setMarginMode(_request) {
256
+ throw new ExchangeError('setMarginMode not implemented for this exchange', this.exchangeId);
257
+ }
258
+ async ping() {
259
+ const start = Date.now();
260
+ await this.getTicker('BTC-USDT');
261
+ return Date.now() - start;
262
+ }
263
+ }
264
+ exports.BaseExchangeAdapter = BaseExchangeAdapter;
265
+ // ─── Timeframe Map Helper ──────────────────────────────────────────────────
266
+ exports.TIMEFRAME_MS = {
267
+ '1m': 60_000,
268
+ '3m': 3 * 60_000,
269
+ '5m': 5 * 60_000,
270
+ '15m': 15 * 60_000,
271
+ '30m': 30 * 60_000,
272
+ '1h': 60 * 60_000,
273
+ '2h': 2 * 60 * 60_000,
274
+ '4h': 4 * 60 * 60_000,
275
+ '6h': 6 * 60 * 60_000,
276
+ '12h': 12 * 60 * 60_000,
277
+ '1d': 24 * 60 * 60_000,
278
+ '3d': 3 * 24 * 60 * 60_000,
279
+ '1w': 7 * 24 * 60 * 60_000,
280
+ };
281
+ // ─── Precision Helpers ─────────────────────────────────────────────────────
282
+ /** Round quantity to stepSize precision */
283
+ function roundToStep(value, step) {
284
+ const decimals = Math.max(0, -Math.floor(Math.log10(step)));
285
+ return parseFloat((Math.floor(value / step) * step).toFixed(decimals));
286
+ }
287
+ /** Round price to tickSize precision */
288
+ function roundToTick(value, tick) {
289
+ const decimals = Math.max(0, -Math.floor(Math.log10(tick)));
290
+ return parseFloat((Math.round(value / tick) * tick).toFixed(decimals));
291
+ }
292
+ /** Generate a short random client order ID */
293
+ function genClientOrderId(prefix = 'bbt') {
294
+ return `${prefix}${Date.now()}${crypto.randomUUID().replace(/-/g, '').slice(0, 7)}`;
295
+ }
296
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../../src/exchange/v2/adapters/base.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Binance Exchange Adapter — Institutional v2
3
+ * Supports: spot (/api/v3), USDT-M futures (/fapi/v1), COIN-M futures (/dapi/v1)
4
+ * Auth: HMAC-SHA256 hex appended to query string
5
+ * Features: market/limit/stop/TP/SL/OCO/trailing, auto-routing spot vs futures
6
+ */
7
+ import { BaseExchangeAdapter } from './base';
8
+ import type { ExchangeId, MarketType, TickerInfo, SymbolInfo, OHLCVBar, OrderBook, FundingInfo, AccountSnapshot, PositionInfo, OrderResponse, RawOrderParams, ExchangeCredentials } from '../types';
9
+ export declare class BinanceAdapter extends BaseExchangeAdapter {
10
+ readonly exchangeId: ExchangeId;
11
+ private readonly spotUrl;
12
+ private readonly fapiUrl;
13
+ private readonly dapiUrl;
14
+ constructor(creds: ExchangeCredentials);
15
+ /** Detect route from symbol: ends with PERP or numeric expiry → fapi; COIN-M → dapi; else spot */
16
+ private detectRoute;
17
+ private baseUrlFor;
18
+ private signedQuery;
19
+ private apiKeyHeader;
20
+ private signedGet;
21
+ private signedPost;
22
+ private signedDelete;
23
+ private publicGet;
24
+ private handleResponse;
25
+ getTicker(symbol: string): Promise<TickerInfo>;
26
+ getSymbolInfo(symbol: string): Promise<SymbolInfo>;
27
+ getOHLCV(symbol: string, timeframe: string, limit?: number): Promise<OHLCVBar[]>;
28
+ getOrderBook(symbol: string, depth?: number): Promise<OrderBook>;
29
+ getFundingInfo(symbol: string): Promise<FundingInfo | null>;
30
+ listSymbols(marketType: MarketType): Promise<string[]>;
31
+ getAccount(): Promise<AccountSnapshot>;
32
+ getPositions(symbol?: string): Promise<PositionInfo[]>;
33
+ setLeverage(symbol: string, leverage: number, marginMode?: 'cross' | 'isolated'): Promise<void>;
34
+ placeOrder(params: RawOrderParams): Promise<OrderResponse>;
35
+ private placeSpotOrder;
36
+ private placeOCO;
37
+ private placeFuturesOrder;
38
+ private mapSpotOrderType;
39
+ private mapFuturesOrderType;
40
+ private mapTIF;
41
+ private cleanUndefined;
42
+ private mapStatus;
43
+ private mapSpotOrder;
44
+ private mapFuturesOrder;
45
+ cancelOrder(orderId: string, symbol: string): Promise<boolean>;
46
+ getOrderStatus(orderId: string, symbol: string): Promise<OrderResponse>;
47
+ getOpenOrders(symbol?: string): Promise<OrderResponse[]>;
48
+ getOrderHistory(query: import('../types').OrderHistoryQuery): Promise<import('../types').OrderHistoryResponse>;
49
+ getFills(query: import('../types').TradeHistoryQuery): Promise<import('../types').TradeHistoryResponse>;
50
+ }
51
+ //# sourceMappingURL=binance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binance.d.ts","sourceRoot":"","sources":["../../../../src/exchange/v2/adapters/binance.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACN,mBAAmB,EAQnB,MAAM,QAAQ,CAAC;AAChB,OAAO,KAAK,EACX,UAAU,EACV,UAAU,EAGV,UAAU,EACV,UAAU,EACV,QAAQ,EACR,SAAS,EACT,WAAW,EACX,eAAe,EACf,YAAY,EACZ,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,MAAM,UAAU,CAAC;AAUlB,qBAAa,cAAe,SAAQ,mBAAmB;IACtD,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAa;IAC5C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,KAAK,EAAE,mBAAmB;IAStC,kGAAkG;IAClG,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,UAAU;YAQJ,WAAW;IAMzB,OAAO,CAAC,YAAY;YAIN,SAAS;YAOT,UAAU;YAWV,YAAY;YAOZ,SAAS;YAOT,cAAc;IAmBtB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IA+B9C,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAwBlD,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,SAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAc7E,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,SAAS,CAAC;IAa5D,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAoB3D,WAAW,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAWtD,UAAU,IAAI,OAAO,CAAC,eAAe,CAAC;IAqCtC,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAwBtD,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,GAAE,OAAO,GAAG,UAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAQxG,UAAU,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;YASlD,cAAc;YAuBd,QAAQ;YAkBR,iBAAiB;IA8C/B,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,mBAAmB;IAU3B,OAAO,CAAC,MAAM;IAMd,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,SAAS;IASjB,OAAO,CAAC,YAAY;IAmBpB,OAAO,CAAC,eAAe;IAoBjB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAU9D,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAQvE,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAexD,eAAe,CAAC,KAAK,EAAE,OAAO,UAAU,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,UAAU,EAAE,oBAAoB,CAAC;IAmB9G,QAAQ,CAAC,KAAK,EAAE,OAAO,UAAU,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,UAAU,EAAE,oBAAoB,CAAC;CA2C7G"}