@123456btc/123456btc-cli 1.0.5 → 1.0.7

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 (116) hide show
  1. package/dist/api/client.d.ts.map +1 -1
  2. package/dist/api/client.js +27 -9
  3. package/dist/api/client.js.map +1 -1
  4. package/dist/api/signals.d.ts +3 -3
  5. package/dist/api/signals.d.ts.map +1 -1
  6. package/dist/api/signals.js +3 -3
  7. package/dist/api/signals.js.map +1 -1
  8. package/dist/api/strategy-stream.d.ts +4 -9
  9. package/dist/api/strategy-stream.d.ts.map +1 -1
  10. package/dist/api/strategy-stream.js +14 -13
  11. package/dist/api/strategy-stream.js.map +1 -1
  12. package/dist/api/strategy.d.ts +3 -1
  13. package/dist/api/strategy.d.ts.map +1 -1
  14. package/dist/api/strategy.js +3 -1
  15. package/dist/api/strategy.js.map +1 -1
  16. package/dist/cli.js +2 -0
  17. package/dist/cli.js.map +1 -1
  18. package/dist/commands/auth.js +1 -1
  19. package/dist/commands/auth.js.map +1 -1
  20. package/dist/commands/exchange.d.ts +8 -0
  21. package/dist/commands/exchange.d.ts.map +1 -0
  22. package/dist/commands/exchange.js +146 -0
  23. package/dist/commands/exchange.js.map +1 -0
  24. package/dist/commands/gas.js +1 -1
  25. package/dist/commands/gas.js.map +1 -1
  26. package/dist/commands/install.js +1 -1
  27. package/dist/commands/install.js.map +1 -1
  28. package/dist/commands/provider.js +1 -1
  29. package/dist/commands/provider.js.map +1 -1
  30. package/dist/commands/signals.js +8 -8
  31. package/dist/commands/signals.js.map +1 -1
  32. package/dist/commands/strategy.d.ts.map +1 -1
  33. package/dist/commands/strategy.js +182 -9
  34. package/dist/commands/strategy.js.map +1 -1
  35. package/dist/commands/tier.js +1 -1
  36. package/dist/commands/tier.js.map +1 -1
  37. package/dist/commands/vault.d.ts.map +1 -1
  38. package/dist/commands/vault.js +37 -4
  39. package/dist/commands/vault.js.map +1 -1
  40. package/dist/commands/wallet.js +1 -1
  41. package/dist/commands/wallet.js.map +1 -1
  42. package/dist/config/strategy-exchange.d.ts +30 -0
  43. package/dist/config/strategy-exchange.d.ts.map +1 -0
  44. package/dist/config/strategy-exchange.js +130 -0
  45. package/dist/config/strategy-exchange.js.map +1 -0
  46. package/dist/exchange/index.d.ts +106 -0
  47. package/dist/exchange/index.d.ts.map +1 -0
  48. package/dist/exchange/index.js +43 -0
  49. package/dist/exchange/index.js.map +1 -0
  50. package/dist/exchange/v2/adapters/base.d.ts +130 -0
  51. package/dist/exchange/v2/adapters/base.d.ts.map +1 -0
  52. package/dist/exchange/v2/adapters/base.js +296 -0
  53. package/dist/exchange/v2/adapters/base.js.map +1 -0
  54. package/dist/exchange/v2/adapters/binance.d.ts +51 -0
  55. package/dist/exchange/v2/adapters/binance.d.ts.map +1 -0
  56. package/dist/exchange/v2/adapters/binance.js +549 -0
  57. package/dist/exchange/v2/adapters/binance.js.map +1 -0
  58. package/dist/exchange/v2/adapters/bitget.d.ts +43 -0
  59. package/dist/exchange/v2/adapters/bitget.d.ts.map +1 -0
  60. package/dist/exchange/v2/adapters/bitget.js +524 -0
  61. package/dist/exchange/v2/adapters/bitget.js.map +1 -0
  62. package/dist/exchange/v2/adapters/hyperliquid.d.ts +102 -0
  63. package/dist/exchange/v2/adapters/hyperliquid.d.ts.map +1 -0
  64. package/dist/exchange/v2/adapters/hyperliquid.js +536 -0
  65. package/dist/exchange/v2/adapters/hyperliquid.js.map +1 -0
  66. package/dist/exchange/v2/adapters/okx.d.ts +38 -0
  67. package/dist/exchange/v2/adapters/okx.d.ts.map +1 -0
  68. package/dist/exchange/v2/adapters/okx.js +437 -0
  69. package/dist/exchange/v2/adapters/okx.js.map +1 -0
  70. package/dist/exchange/v2/algorithms/index.d.ts +78 -0
  71. package/dist/exchange/v2/algorithms/index.d.ts.map +1 -0
  72. package/dist/exchange/v2/algorithms/index.js +441 -0
  73. package/dist/exchange/v2/algorithms/index.js.map +1 -0
  74. package/dist/exchange/v2/executor/circuit-breaker.d.ts +44 -0
  75. package/dist/exchange/v2/executor/circuit-breaker.d.ts.map +1 -0
  76. package/dist/exchange/v2/executor/circuit-breaker.js +90 -0
  77. package/dist/exchange/v2/executor/circuit-breaker.js.map +1 -0
  78. package/dist/exchange/v2/executor/core.d.ts +64 -0
  79. package/dist/exchange/v2/executor/core.d.ts.map +1 -0
  80. package/dist/exchange/v2/executor/core.js +458 -0
  81. package/dist/exchange/v2/executor/core.js.map +1 -0
  82. package/dist/exchange/v2/executor/risk.d.ts +29 -0
  83. package/dist/exchange/v2/executor/risk.d.ts.map +1 -0
  84. package/dist/exchange/v2/executor/risk.js +144 -0
  85. package/dist/exchange/v2/executor/risk.js.map +1 -0
  86. package/dist/exchange/v2/executor/state.d.ts +29 -0
  87. package/dist/exchange/v2/executor/state.d.ts.map +1 -0
  88. package/dist/exchange/v2/executor/state.js +171 -0
  89. package/dist/exchange/v2/executor/state.js.map +1 -0
  90. package/dist/exchange/v2/index.d.ts +50 -0
  91. package/dist/exchange/v2/index.d.ts.map +1 -0
  92. package/dist/exchange/v2/index.js +82 -0
  93. package/dist/exchange/v2/index.js.map +1 -0
  94. package/dist/exchange/v2/registry.d.ts +50 -0
  95. package/dist/exchange/v2/registry.d.ts.map +1 -0
  96. package/dist/exchange/v2/registry.js +101 -0
  97. package/dist/exchange/v2/registry.js.map +1 -0
  98. package/dist/exchange/v2/types.d.ts +413 -0
  99. package/dist/exchange/v2/types.d.ts.map +1 -0
  100. package/dist/exchange/v2/types.js +3 -0
  101. package/dist/exchange/v2/types.js.map +1 -0
  102. package/dist/index.d.ts +105 -22
  103. package/dist/index.d.ts.map +1 -1
  104. package/dist/index.js +40 -37
  105. package/dist/index.js.map +1 -1
  106. package/dist/types/financial.d.ts +14 -0
  107. package/dist/types/financial.d.ts.map +1 -0
  108. package/dist/types/financial.js +6 -0
  109. package/dist/types/financial.js.map +1 -0
  110. package/dist/vault/crypto.js +3 -3
  111. package/dist/vault/crypto.js.map +1 -1
  112. package/dist/vault/index.d.ts +28 -0
  113. package/dist/vault/index.d.ts.map +1 -1
  114. package/dist/vault/index.js +70 -0
  115. package/dist/vault/index.js.map +1 -1
  116. package/package.json +3 -1
@@ -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"}