@solncebro/exchange-engine 0.1.1 → 0.1.2

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 (125) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/README.md +7 -7
  3. package/dist/auth/binanceAuth.js +3 -6
  4. package/dist/auth/binanceAuth.js.map +1 -1
  5. package/dist/auth/bybitAuth.d.ts +0 -1
  6. package/dist/auth/bybitAuth.d.ts.map +1 -1
  7. package/dist/auth/bybitAuth.js +2 -9
  8. package/dist/auth/bybitAuth.js.map +1 -1
  9. package/dist/constants/binance.d.ts +5 -1
  10. package/dist/constants/binance.d.ts.map +1 -1
  11. package/dist/constants/binance.js +7 -4
  12. package/dist/constants/binance.js.map +1 -1
  13. package/dist/constants/bybit.d.ts +3 -5
  14. package/dist/constants/bybit.d.ts.map +1 -1
  15. package/dist/constants/bybit.js +6 -9
  16. package/dist/constants/bybit.js.map +1 -1
  17. package/dist/exchanges/BaseExchangeClient.d.ts +36 -0
  18. package/dist/exchanges/BaseExchangeClient.d.ts.map +1 -0
  19. package/dist/exchanges/BaseExchangeClient.js +91 -0
  20. package/dist/exchanges/BaseExchangeClient.js.map +1 -0
  21. package/dist/exchanges/BinanceBaseClient.d.ts +21 -0
  22. package/dist/exchanges/BinanceBaseClient.d.ts.map +1 -0
  23. package/dist/exchanges/BinanceBaseClient.js +65 -0
  24. package/dist/exchanges/BinanceBaseClient.js.map +1 -0
  25. package/dist/exchanges/BinanceFutures.d.ts +7 -21
  26. package/dist/exchanges/BinanceFutures.d.ts.map +1 -1
  27. package/dist/exchanges/BinanceFutures.js +17 -94
  28. package/dist/exchanges/BinanceFutures.js.map +1 -1
  29. package/dist/exchanges/BinanceSpot.d.ts +7 -21
  30. package/dist/exchanges/BinanceSpot.d.ts.map +1 -1
  31. package/dist/exchanges/BinanceSpot.js +14 -95
  32. package/dist/exchanges/BinanceSpot.js.map +1 -1
  33. package/dist/exchanges/BybitLinear.d.ts +15 -18
  34. package/dist/exchanges/BybitLinear.d.ts.map +1 -1
  35. package/dist/exchanges/BybitLinear.js +58 -67
  36. package/dist/exchanges/BybitLinear.js.map +1 -1
  37. package/dist/exchanges/BybitSpot.d.ts +13 -17
  38. package/dist/exchanges/BybitSpot.d.ts.map +1 -1
  39. package/dist/exchanges/BybitSpot.js +36 -62
  40. package/dist/exchanges/BybitSpot.js.map +1 -1
  41. package/dist/http/BaseHttpClient.d.ts +10 -1
  42. package/dist/http/BaseHttpClient.d.ts.map +1 -1
  43. package/dist/http/BaseHttpClient.js +27 -5
  44. package/dist/http/BaseHttpClient.js.map +1 -1
  45. package/dist/http/BinanceBaseHttpClient.d.ts +49 -0
  46. package/dist/http/BinanceBaseHttpClient.d.ts.map +1 -0
  47. package/dist/http/BinanceBaseHttpClient.js +86 -0
  48. package/dist/http/BinanceBaseHttpClient.js.map +1 -0
  49. package/dist/http/BinanceFuturesHttpClient.d.ts +11 -40
  50. package/dist/http/BinanceFuturesHttpClient.d.ts.map +1 -1
  51. package/dist/http/BinanceFuturesHttpClient.js +36 -180
  52. package/dist/http/BinanceFuturesHttpClient.js.map +1 -1
  53. package/dist/http/BinanceSpotHttpClient.d.ts +5 -24
  54. package/dist/http/BinanceSpotHttpClient.d.ts.map +1 -1
  55. package/dist/http/BinanceSpotHttpClient.js +15 -90
  56. package/dist/http/BinanceSpotHttpClient.js.map +1 -1
  57. package/dist/http/BybitHttpClient.d.ts +81 -134
  58. package/dist/http/BybitHttpClient.d.ts.map +1 -1
  59. package/dist/http/BybitHttpClient.js +61 -94
  60. package/dist/http/BybitHttpClient.js.map +1 -1
  61. package/dist/index.d.ts +3 -1
  62. package/dist/index.d.ts.map +1 -1
  63. package/dist/index.js +6 -1
  64. package/dist/index.js.map +1 -1
  65. package/dist/normalizers/binanceNormalizer.d.ts +2 -1
  66. package/dist/normalizers/binanceNormalizer.d.ts.map +1 -1
  67. package/dist/normalizers/binanceNormalizer.js +8 -5
  68. package/dist/normalizers/binanceNormalizer.js.map +1 -1
  69. package/dist/normalizers/bybitNormalizer.d.ts +7 -1
  70. package/dist/normalizers/bybitNormalizer.d.ts.map +1 -1
  71. package/dist/normalizers/bybitNormalizer.js +21 -5
  72. package/dist/normalizers/bybitNormalizer.js.map +1 -1
  73. package/dist/types/common.d.ts +4 -2
  74. package/dist/types/common.d.ts.map +1 -1
  75. package/dist/types/exchange.d.ts +6 -2
  76. package/dist/types/exchange.d.ts.map +1 -1
  77. package/dist/types/stream.d.ts +10 -0
  78. package/dist/types/stream.d.ts.map +1 -0
  79. package/dist/types/stream.js +3 -0
  80. package/dist/types/stream.js.map +1 -0
  81. package/dist/utils/crypto.d.ts +2 -0
  82. package/dist/utils/crypto.d.ts.map +1 -0
  83. package/dist/utils/crypto.js +11 -0
  84. package/dist/utils/crypto.js.map +1 -0
  85. package/dist/utils/httpParams.d.ts +3 -0
  86. package/dist/utils/httpParams.d.ts.map +1 -0
  87. package/dist/utils/httpParams.js +15 -0
  88. package/dist/utils/httpParams.js.map +1 -0
  89. package/dist/utils/klineLoader.d.ts +10 -0
  90. package/dist/utils/klineLoader.d.ts.map +1 -0
  91. package/dist/utils/klineLoader.js +19 -0
  92. package/dist/utils/klineLoader.js.map +1 -0
  93. package/dist/ws/BinanceFuturesPublicStream.d.ts +6 -5
  94. package/dist/ws/BinanceFuturesPublicStream.d.ts.map +1 -1
  95. package/dist/ws/BinanceFuturesPublicStream.js +27 -56
  96. package/dist/ws/BinanceFuturesPublicStream.js.map +1 -1
  97. package/dist/ws/BinanceSpotPublicStream.d.ts +7 -5
  98. package/dist/ws/BinanceSpotPublicStream.d.ts.map +1 -1
  99. package/dist/ws/BinanceSpotPublicStream.js +17 -22
  100. package/dist/ws/BinanceSpotPublicStream.js.map +1 -1
  101. package/dist/ws/BinanceUserDataStream.d.ts +1 -1
  102. package/dist/ws/BinanceUserDataStream.d.ts.map +1 -1
  103. package/dist/ws/BinanceUserDataStream.js +7 -7
  104. package/dist/ws/BinanceUserDataStream.js.map +1 -1
  105. package/dist/ws/BybitPrivateStream.d.ts +1 -1
  106. package/dist/ws/BybitPrivateStream.d.ts.map +1 -1
  107. package/dist/ws/BybitPrivateStream.js +11 -28
  108. package/dist/ws/BybitPrivateStream.js.map +1 -1
  109. package/dist/ws/BybitPublicStream.d.ts +5 -4
  110. package/dist/ws/BybitPublicStream.d.ts.map +1 -1
  111. package/dist/ws/BybitPublicStream.js +14 -19
  112. package/dist/ws/BybitPublicStream.js.map +1 -1
  113. package/dist/ws/BybitTradeStream.d.ts +4 -2
  114. package/dist/ws/BybitTradeStream.d.ts.map +1 -1
  115. package/dist/ws/BybitTradeStream.js +24 -40
  116. package/dist/ws/BybitTradeStream.js.map +1 -1
  117. package/dist/ws/binanceWsUtils.d.ts +4 -0
  118. package/dist/ws/binanceWsUtils.d.ts.map +1 -0
  119. package/dist/ws/binanceWsUtils.js +13 -0
  120. package/dist/ws/binanceWsUtils.js.map +1 -0
  121. package/dist/ws/bybitWsUtils.d.ts +29 -0
  122. package/dist/ws/bybitWsUtils.d.ts.map +1 -0
  123. package/dist/ws/bybitWsUtils.js +29 -0
  124. package/dist/ws/bybitWsUtils.js.map +1 -0
  125. package/package.json +17 -3
package/CHANGELOG.md CHANGED
@@ -5,6 +5,22 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.1.2] - 2026-03-03
9
+
10
+ ### Added
11
+ - Test suite: 204 tests (Jest + ts-jest) covering auth, HTTP clients, normalizers, WebSocket utils, exchange clients, precision formatting, and public exports
12
+ - HTTP retry for GET requests with exponential backoff
13
+ - `package.json` exports map and `sideEffects: false` for tree-shaking support
14
+ - Test gate in `prepublishOnly` script
15
+
16
+ ### Fixed
17
+ - README: corrected Kline field names (`openTimestamp`/`closeTimestamp`), Map API for markets, `FetchKlinesArgs` parameter type
18
+
19
+ ### Internal
20
+ - Utility modules: `crypto.ts`, `httpParams.ts`, `klineLoader.ts`
21
+ - WebSocket helpers: `binanceWsUtils.ts`, `bybitWsUtils.ts`
22
+ - Base classes: `BaseExchangeClient`, `BinanceBaseClient`, `BinanceBaseHttpClient`
23
+
8
24
  ## [0.1.0] - 2026-02-25
9
25
 
10
26
  ### Added
@@ -51,4 +67,5 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
51
67
  - Private endpoints (balance, position, orders) require valid credentials
52
68
  - WebSocket subscriptions are stateless and can be re-established on reconnect
53
69
 
70
+ [0.1.2]: https://github.com/solncebro/exchange-engine/releases/tag/v0.1.2
54
71
  [0.1.0]: https://github.com/solncebro/exchange-engine/releases/tag/v0.1.0
package/README.md CHANGED
@@ -37,7 +37,7 @@ await exchange.futures.loadMarkets();
37
37
 
38
38
  // Fetch historical klines
39
39
  const klines = await exchange.futures.fetchKlines('BTCUSDT', '1h', { limit: 100 });
40
- console.log(klines[0]); // { openTime, open, high, low, close, volume, ... }
40
+ console.log(klines[0]); // { openTimestamp, open, high, low, close, volume, ... }
41
41
 
42
42
  // Get current tickers
43
43
  const tickers = await exchange.futures.fetchTickers();
@@ -47,7 +47,7 @@ exchange.futures.subscribeKlines({
47
47
  symbol: 'BTCUSDT',
48
48
  interval: '1m',
49
49
  handler: (kline) => {
50
- console.log(`[${kline.openTime}] ${kline.close}`);
50
+ console.log(`[${kline.openTimestamp}] ${kline.close}`);
51
51
  },
52
52
  });
53
53
 
@@ -102,7 +102,7 @@ All four classes (BinanceFutures, BinanceSpot, BybitLinear, BybitSpot) implement
102
102
  await client.loadMarkets(reload?: boolean): Promise<MarketBySymbol>;
103
103
 
104
104
  // Get all markets (already loaded)
105
- const markets = client.markets; // Record<string, Market>
105
+ const markets = client.markets; // Map<string, Market>
106
106
 
107
107
  // Fetch current ticker prices
108
108
  await client.fetchTickers(): Promise<TickerBySymbol>;
@@ -111,7 +111,7 @@ await client.fetchTickers(): Promise<TickerBySymbol>;
111
111
  await client.fetchKlines(
112
112
  symbol: string,
113
113
  interval: KlineInterval,
114
- opts?: { limit?: number; startTime?: number; endTime?: number }
114
+ options?: FetchKlinesArgs
115
115
  ): Promise<Kline[]>;
116
116
 
117
117
  // Get account balance
@@ -176,13 +176,13 @@ All types are normalized across exchanges. No raw exchange formats leak out.
176
176
  ```typescript
177
177
  // Candlestick
178
178
  interface Kline {
179
- openTime: number;
179
+ openTimestamp: number;
180
180
  open: number;
181
181
  high: number;
182
182
  low: number;
183
183
  close: number;
184
184
  volume: number;
185
- closeTime: number;
185
+ closeTimestamp: number;
186
186
  quoteVolume: number;
187
187
  trades: number;
188
188
  }
@@ -314,7 +314,7 @@ These differences are transparent — the same code works for both.
314
314
  2. **Reuse markets** — call `loadMarkets()` once at startup
315
315
  ```typescript
316
316
  await client.loadMarkets();
317
- const symbols = Object.keys(client.markets);
317
+ const symbols = [...client.markets.keys()];
318
318
  ```
319
319
 
320
320
  3. **Limit historical data** — fetch only needed range
@@ -1,14 +1,11 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.buildBinanceSignature = buildBinanceSignature;
7
4
  exports.buildBinanceSignedParams = buildBinanceSignedParams;
8
5
  exports.buildBinanceAuthHeaders = buildBinanceAuthHeaders;
9
- const crypto_1 = __importDefault(require("crypto"));
6
+ const crypto_1 = require("../utils/crypto");
10
7
  function buildBinanceSignature(queryString, secret) {
11
- return crypto_1.default.createHmac('sha256', secret).update(queryString).digest('hex');
8
+ return (0, crypto_1.hmacSha256)(queryString, secret);
12
9
  }
13
10
  function buildBinanceSignedParams(args) {
14
11
  const { params, secret, recvWindow = 5000 } = args;
@@ -18,7 +15,7 @@ function buildBinanceSignedParams(args) {
18
15
  timestamp,
19
16
  recvWindow,
20
17
  };
21
- const queryString = new URLSearchParams(Object.entries(signedParams).map(([k, v]) => [k, String(v)])).toString();
18
+ const queryString = new URLSearchParams(Object.entries(signedParams).map(([key, value]) => [key, String(value)])).toString();
22
19
  const signature = buildBinanceSignature(queryString, secret);
23
20
  signedParams.signature = signature;
24
21
  return signedParams;
@@ -1 +1 @@
1
- {"version":3,"file":"binanceAuth.js","sourceRoot":"","sources":["../../src/auth/binanceAuth.ts"],"names":[],"mappings":";;;;;AAEA,sDAEC;AAQD,4DAkBC;AAED,0DAIC;AApCD,oDAA4B;AAE5B,SAAgB,qBAAqB,CAAC,WAAmB,EAAE,MAAc;IACvE,OAAO,gBAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC/E,CAAC;AAQD,SAAgB,wBAAwB,CAAC,IAAkC;IACzE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;IACnD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,YAAY,GAAoC;QACpD,GAAG,MAAM;QACT,SAAS;QACT,UAAU;KACX,CAAC;IAEF,MAAM,WAAW,GAAG,IAAI,eAAe,CACrC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAuB,CACnF,CAAC,QAAQ,EAAE,CAAC;IAEb,MAAM,SAAS,GAAG,qBAAqB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAE7D,YAAY,CAAC,SAAS,GAAG,SAAS,CAAC;IAEnC,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,SAAgB,uBAAuB,CAAC,MAAc;IACpD,OAAO;QACL,cAAc,EAAE,MAAM;KACvB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"binanceAuth.js","sourceRoot":"","sources":["../../src/auth/binanceAuth.ts"],"names":[],"mappings":";;AAEA,sDAEC;AAQD,4DAkBC;AAED,0DAIC;AApCD,4CAA6C;AAE7C,SAAgB,qBAAqB,CAAC,WAAmB,EAAE,MAAc;IACvE,OAAO,IAAA,mBAAU,EAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AACzC,CAAC;AAQD,SAAgB,wBAAwB,CAAC,IAAkC;IACzE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;IACnD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,YAAY,GAAoC;QACpD,GAAG,MAAM;QACT,SAAS;QACT,UAAU;KACX,CAAC;IAEF,MAAM,WAAW,GAAG,IAAI,eAAe,CACrC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAuB,CAC/F,CAAC,QAAQ,EAAE,CAAC;IAEb,MAAM,SAAS,GAAG,qBAAqB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAE7D,YAAY,CAAC,SAAS,GAAG,SAAS,CAAC;IAEnC,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,SAAgB,uBAAuB,CAAC,MAAc;IACpD,OAAO;QACL,cAAc,EAAE,MAAM;KACvB,CAAC;AACJ,CAAC"}
@@ -6,5 +6,4 @@ export interface BuildBybitAuthHeadersArgs {
6
6
  payload: string;
7
7
  }
8
8
  export declare function buildBybitAuthHeaders(args: BuildBybitAuthHeadersArgs): Record<string, string>;
9
- export declare function getCurrentTimestamp(): number;
10
9
  //# sourceMappingURL=bybitAuth.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"bybitAuth.d.ts","sourceRoot":"","sources":["../../src/auth/bybitAuth.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,yBAAyB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAW7F;AAED,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C"}
1
+ {"version":3,"file":"bybitAuth.d.ts","sourceRoot":"","sources":["../../src/auth/bybitAuth.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,yBAAyB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAW7F"}
@@ -1,15 +1,11 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.buildBybitAuthHeaders = buildBybitAuthHeaders;
7
- exports.getCurrentTimestamp = getCurrentTimestamp;
8
- const crypto_1 = __importDefault(require("crypto"));
4
+ const crypto_1 = require("../utils/crypto");
9
5
  function buildBybitAuthHeaders(args) {
10
6
  const { apiKey, secret, timestamp, recvWindow = 5000, payload } = args;
11
7
  const signPayload = `${timestamp}${apiKey}${recvWindow}${payload}`;
12
- const signature = crypto_1.default.createHmac('sha256', secret).update(signPayload).digest('hex');
8
+ const signature = (0, crypto_1.hmacSha256)(signPayload, secret);
13
9
  return {
14
10
  'X-BAPI-API-KEY': apiKey,
15
11
  'X-BAPI-TIMESTAMP': String(timestamp),
@@ -17,7 +13,4 @@ function buildBybitAuthHeaders(args) {
17
13
  'X-BAPI-RECV-WINDOW': String(recvWindow),
18
14
  };
19
15
  }
20
- function getCurrentTimestamp() {
21
- return Date.now();
22
- }
23
16
  //# sourceMappingURL=bybitAuth.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bybitAuth.js","sourceRoot":"","sources":["../../src/auth/bybitAuth.ts"],"names":[],"mappings":";;;;;AAUA,sDAWC;AAED,kDAEC;AAzBD,oDAA4B;AAU5B,SAAgB,qBAAqB,CAAC,IAA+B;IACnE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IACvE,MAAM,WAAW,GAAG,GAAG,SAAS,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,EAAE,CAAC;IACnE,MAAM,SAAS,GAAG,gBAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAExF,OAAO;QACL,gBAAgB,EAAE,MAAM;QACxB,kBAAkB,EAAE,MAAM,CAAC,SAAS,CAAC;QACrC,aAAa,EAAE,SAAS;QACxB,oBAAoB,EAAE,MAAM,CAAC,UAAU,CAAC;KACzC,CAAC;AACJ,CAAC;AAED,SAAgB,mBAAmB;IACjC,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC;AACpB,CAAC"}
1
+ {"version":3,"file":"bybitAuth.js","sourceRoot":"","sources":["../../src/auth/bybitAuth.ts"],"names":[],"mappings":";;AAUA,sDAWC;AArBD,4CAA6C;AAU7C,SAAgB,qBAAqB,CAAC,IAA+B;IACnE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IACvE,MAAM,WAAW,GAAG,GAAG,SAAS,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,EAAE,CAAC;IACnE,MAAM,SAAS,GAAG,IAAA,mBAAU,EAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAElD,OAAO;QACL,gBAAgB,EAAE,MAAM;QACxB,kBAAkB,EAAE,MAAM,CAAC,SAAS,CAAC;QACrC,aAAa,EAAE,SAAS;QACxB,oBAAoB,EAAE,MAAM,CAAC,UAAU,CAAC;KACzC,CAAC;AACJ,CAAC"}
@@ -1,9 +1,13 @@
1
1
  export declare const BINANCE_SPOT_BASE_URL = "https://api.binance.com";
2
2
  export declare const BINANCE_FUTURES_BASE_URL = "https://fapi.binance.com";
3
- export declare const BINANCE_FUTURES_TESTNET_BASE_URL = "https://testnet.binancefuture.com";
3
+ export declare const BINANCE_DEMO_SPOT_BASE_URL = "https://demo-api.binance.com";
4
+ export declare const BINANCE_DEMO_FUTURES_BASE_URL = "https://demo-fapi.binance.com";
4
5
  export declare const BINANCE_FUTURES_WS_STREAM_URL = "wss://fstream.binance.com/ws";
5
6
  export declare const BINANCE_FUTURES_WS_COMBINED_URL = "wss://fstream.binance.com/stream";
6
7
  export declare const BINANCE_SPOT_WS_STREAM_URL = "wss://stream.binance.com:9443/ws";
8
+ export declare const BINANCE_DEMO_FUTURES_WS_COMBINED_URL = "wss://fstream.binancefuture.com/stream";
7
9
  export declare const BINANCE_REQUEST_TIMEOUT = 30000;
10
+ export declare const BINANCE_KLINE_LIMIT_SPOT = 1000;
11
+ export declare const BINANCE_KLINE_LIMIT_FUTURES = 499;
8
12
  export declare const BINANCE_KLINE_INTERVAL: Record<string, string>;
9
13
  //# sourceMappingURL=binance.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"binance.d.ts","sourceRoot":"","sources":["../../src/constants/binance.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB,4BAA4B,CAAC;AAC/D,eAAO,MAAM,wBAAwB,6BAA6B,CAAC;AACnE,eAAO,MAAM,gCAAgC,sCAAsC,CAAC;AAEpF,eAAO,MAAM,6BAA6B,iCAAiC,CAAC;AAC5E,eAAO,MAAM,+BAA+B,qCAAqC,CAAC;AAClF,eAAO,MAAM,0BAA0B,qCAAqC,CAAC;AAE7E,eAAO,MAAM,uBAAuB,QAAQ,CAAC;AAG7C,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAezD,CAAC"}
1
+ {"version":3,"file":"binance.d.ts","sourceRoot":"","sources":["../../src/constants/binance.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB,4BAA4B,CAAC;AAC/D,eAAO,MAAM,wBAAwB,6BAA6B,CAAC;AAEnE,eAAO,MAAM,0BAA0B,iCAAiC,CAAC;AACzE,eAAO,MAAM,6BAA6B,kCAAkC,CAAC;AAE7E,eAAO,MAAM,6BAA6B,iCAAiC,CAAC;AAC5E,eAAO,MAAM,+BAA+B,qCAAqC,CAAC;AAClF,eAAO,MAAM,0BAA0B,qCAAqC,CAAC;AAE7E,eAAO,MAAM,oCAAoC,2CAA2C,CAAC;AAE7F,eAAO,MAAM,uBAAuB,QAAQ,CAAC;AAE7C,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAC7C,eAAO,MAAM,2BAA2B,MAAM,CAAC;AAE/C,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAezD,CAAC"}
@@ -1,14 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.BINANCE_KLINE_INTERVAL = exports.BINANCE_REQUEST_TIMEOUT = exports.BINANCE_SPOT_WS_STREAM_URL = exports.BINANCE_FUTURES_WS_COMBINED_URL = exports.BINANCE_FUTURES_WS_STREAM_URL = exports.BINANCE_FUTURES_TESTNET_BASE_URL = exports.BINANCE_FUTURES_BASE_URL = exports.BINANCE_SPOT_BASE_URL = void 0;
3
+ exports.BINANCE_KLINE_INTERVAL = exports.BINANCE_KLINE_LIMIT_FUTURES = exports.BINANCE_KLINE_LIMIT_SPOT = exports.BINANCE_REQUEST_TIMEOUT = exports.BINANCE_DEMO_FUTURES_WS_COMBINED_URL = exports.BINANCE_SPOT_WS_STREAM_URL = exports.BINANCE_FUTURES_WS_COMBINED_URL = exports.BINANCE_FUTURES_WS_STREAM_URL = exports.BINANCE_DEMO_FUTURES_BASE_URL = exports.BINANCE_DEMO_SPOT_BASE_URL = exports.BINANCE_FUTURES_BASE_URL = exports.BINANCE_SPOT_BASE_URL = void 0;
4
4
  exports.BINANCE_SPOT_BASE_URL = 'https://api.binance.com';
5
5
  exports.BINANCE_FUTURES_BASE_URL = 'https://fapi.binance.com';
6
- exports.BINANCE_FUTURES_TESTNET_BASE_URL = 'https://testnet.binancefuture.com';
6
+ exports.BINANCE_DEMO_SPOT_BASE_URL = 'https://demo-api.binance.com';
7
+ exports.BINANCE_DEMO_FUTURES_BASE_URL = 'https://demo-fapi.binance.com';
7
8
  exports.BINANCE_FUTURES_WS_STREAM_URL = 'wss://fstream.binance.com/ws';
8
9
  exports.BINANCE_FUTURES_WS_COMBINED_URL = 'wss://fstream.binance.com/stream';
9
10
  exports.BINANCE_SPOT_WS_STREAM_URL = 'wss://stream.binance.com:9443/ws';
10
- exports.BINANCE_REQUEST_TIMEOUT = 30000; // 30 seconds
11
- // Маппинг унифицированного KlineInterval -> формат Binance (совпадает 1:1)
11
+ exports.BINANCE_DEMO_FUTURES_WS_COMBINED_URL = 'wss://fstream.binancefuture.com/stream';
12
+ exports.BINANCE_REQUEST_TIMEOUT = 30000;
13
+ exports.BINANCE_KLINE_LIMIT_SPOT = 1000;
14
+ exports.BINANCE_KLINE_LIMIT_FUTURES = 499;
12
15
  exports.BINANCE_KLINE_INTERVAL = {
13
16
  '1m': '1m',
14
17
  '3m': '3m',
@@ -1 +1 @@
1
- {"version":3,"file":"binance.js","sourceRoot":"","sources":["../../src/constants/binance.ts"],"names":[],"mappings":";;;AAAa,QAAA,qBAAqB,GAAG,yBAAyB,CAAC;AAClD,QAAA,wBAAwB,GAAG,0BAA0B,CAAC;AACtD,QAAA,gCAAgC,GAAG,mCAAmC,CAAC;AAEvE,QAAA,6BAA6B,GAAG,8BAA8B,CAAC;AAC/D,QAAA,+BAA+B,GAAG,kCAAkC,CAAC;AACrE,QAAA,0BAA0B,GAAG,kCAAkC,CAAC;AAEhE,QAAA,uBAAuB,GAAG,KAAK,CAAC,CAAC,aAAa;AAE3D,2EAA2E;AAC9D,QAAA,sBAAsB,GAA2B;IAC5D,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,KAAK;IACZ,KAAK,EAAE,KAAK;IACZ,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,KAAK;IACZ,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;CACX,CAAC"}
1
+ {"version":3,"file":"binance.js","sourceRoot":"","sources":["../../src/constants/binance.ts"],"names":[],"mappings":";;;AAAa,QAAA,qBAAqB,GAAG,yBAAyB,CAAC;AAClD,QAAA,wBAAwB,GAAG,0BAA0B,CAAC;AAEtD,QAAA,0BAA0B,GAAG,8BAA8B,CAAC;AAC5D,QAAA,6BAA6B,GAAG,+BAA+B,CAAC;AAEhE,QAAA,6BAA6B,GAAG,8BAA8B,CAAC;AAC/D,QAAA,+BAA+B,GAAG,kCAAkC,CAAC;AACrE,QAAA,0BAA0B,GAAG,kCAAkC,CAAC;AAEhE,QAAA,oCAAoC,GAAG,wCAAwC,CAAC;AAEhF,QAAA,uBAAuB,GAAG,KAAK,CAAC;AAEhC,QAAA,wBAAwB,GAAG,IAAI,CAAC;AAChC,QAAA,2BAA2B,GAAG,GAAG,CAAC;AAElC,QAAA,sBAAsB,GAA2B;IAC5D,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,KAAK;IACZ,KAAK,EAAE,KAAK;IACZ,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,KAAK;IACZ,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;CACX,CAAC"}
@@ -1,13 +1,11 @@
1
1
  export declare const BYBIT_BASE_URL = "https://api.bybit.com";
2
- export declare const BYBIT_TESTNET_BASE_URL = "https://api-testnet.bybit.com";
2
+ export declare const BYBIT_DEMO_BASE_URL = "https://api-demo.bybit.com";
3
3
  export declare const BYBIT_PUBLIC_LINEAR_WS_URL = "wss://stream.bybit.com/v5/public/linear";
4
4
  export declare const BYBIT_PUBLIC_SPOT_WS_URL = "wss://stream.bybit.com/v5/public/spot";
5
5
  export declare const BYBIT_PRIVATE_WS_URL = "wss://stream.bybit.com/v5/private";
6
6
  export declare const BYBIT_TRADE_WS_URL = "wss://stream.bybit.com/v5/trade";
7
- export declare const BYBIT_PUBLIC_LINEAR_WS_TESTNET_URL = "wss://stream-testnet.bybit.com/v5/public/linear";
8
- export declare const BYBIT_PUBLIC_SPOT_WS_TESTNET_URL = "wss://stream-testnet.bybit.com/v5/public/spot";
9
- export declare const BYBIT_PRIVATE_WS_TESTNET_URL = "wss://stream-testnet.bybit.com/v5/private";
10
- export declare const BYBIT_TRADE_WS_TESTNET_URL = "wss://stream-testnet.bybit.com/v5/trade";
7
+ export declare const BYBIT_DEMO_PUBLIC_LINEAR_WS_URL = "wss://stream-demo.bybit.com/v5/public/linear";
8
+ export declare const BYBIT_DEMO_PUBLIC_SPOT_WS_URL = "wss://stream-demo.bybit.com/v5/public/spot";
11
9
  export declare const BYBIT_RECV_WINDOW = 7000;
12
10
  export declare const BYBIT_REQUEST_TIMEOUT = 30000;
13
11
  export declare const BYBIT_KLINE_INTERVAL: Record<string, string>;
@@ -1 +1 @@
1
- {"version":3,"file":"bybit.d.ts","sourceRoot":"","sources":["../../src/constants/bybit.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,0BAA0B,CAAC;AACtD,eAAO,MAAM,sBAAsB,kCAAkC,CAAC;AAEtE,eAAO,MAAM,0BAA0B,4CAA4C,CAAC;AACpF,eAAO,MAAM,wBAAwB,0CAA0C,CAAC;AAChF,eAAO,MAAM,oBAAoB,sCAAsC,CAAC;AACxE,eAAO,MAAM,kBAAkB,oCAAoC,CAAC;AAEpE,eAAO,MAAM,kCAAkC,oDAAoD,CAAC;AACpG,eAAO,MAAM,gCAAgC,kDAAkD,CAAC;AAChG,eAAO,MAAM,4BAA4B,8CAA8C,CAAC;AACxF,eAAO,MAAM,0BAA0B,4CAA4C,CAAC;AAEpF,eAAO,MAAM,iBAAiB,OAAO,CAAC;AACtC,eAAO,MAAM,qBAAqB,QAAQ,CAAC;AAG3C,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAevD,CAAC"}
1
+ {"version":3,"file":"bybit.d.ts","sourceRoot":"","sources":["../../src/constants/bybit.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,0BAA0B,CAAC;AAEtD,eAAO,MAAM,mBAAmB,+BAA+B,CAAC;AAEhE,eAAO,MAAM,0BAA0B,4CAA4C,CAAC;AACpF,eAAO,MAAM,wBAAwB,0CAA0C,CAAC;AAChF,eAAO,MAAM,oBAAoB,sCAAsC,CAAC;AACxE,eAAO,MAAM,kBAAkB,oCAAoC,CAAC;AAEpE,eAAO,MAAM,+BAA+B,iDAAiD,CAAC;AAC9F,eAAO,MAAM,6BAA6B,+CAA+C,CAAC;AAE1F,eAAO,MAAM,iBAAiB,OAAO,CAAC;AACtC,eAAO,MAAM,qBAAqB,QAAQ,CAAC;AAE3C,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAevD,CAAC"}
@@ -1,19 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.BYBIT_KLINE_INTERVAL = exports.BYBIT_REQUEST_TIMEOUT = exports.BYBIT_RECV_WINDOW = exports.BYBIT_TRADE_WS_TESTNET_URL = exports.BYBIT_PRIVATE_WS_TESTNET_URL = exports.BYBIT_PUBLIC_SPOT_WS_TESTNET_URL = exports.BYBIT_PUBLIC_LINEAR_WS_TESTNET_URL = exports.BYBIT_TRADE_WS_URL = exports.BYBIT_PRIVATE_WS_URL = exports.BYBIT_PUBLIC_SPOT_WS_URL = exports.BYBIT_PUBLIC_LINEAR_WS_URL = exports.BYBIT_TESTNET_BASE_URL = exports.BYBIT_BASE_URL = void 0;
3
+ exports.BYBIT_KLINE_INTERVAL = exports.BYBIT_REQUEST_TIMEOUT = exports.BYBIT_RECV_WINDOW = exports.BYBIT_DEMO_PUBLIC_SPOT_WS_URL = exports.BYBIT_DEMO_PUBLIC_LINEAR_WS_URL = exports.BYBIT_TRADE_WS_URL = exports.BYBIT_PRIVATE_WS_URL = exports.BYBIT_PUBLIC_SPOT_WS_URL = exports.BYBIT_PUBLIC_LINEAR_WS_URL = exports.BYBIT_DEMO_BASE_URL = exports.BYBIT_BASE_URL = void 0;
4
4
  exports.BYBIT_BASE_URL = 'https://api.bybit.com';
5
- exports.BYBIT_TESTNET_BASE_URL = 'https://api-testnet.bybit.com';
5
+ exports.BYBIT_DEMO_BASE_URL = 'https://api-demo.bybit.com';
6
6
  exports.BYBIT_PUBLIC_LINEAR_WS_URL = 'wss://stream.bybit.com/v5/public/linear';
7
7
  exports.BYBIT_PUBLIC_SPOT_WS_URL = 'wss://stream.bybit.com/v5/public/spot';
8
8
  exports.BYBIT_PRIVATE_WS_URL = 'wss://stream.bybit.com/v5/private';
9
9
  exports.BYBIT_TRADE_WS_URL = 'wss://stream.bybit.com/v5/trade';
10
- exports.BYBIT_PUBLIC_LINEAR_WS_TESTNET_URL = 'wss://stream-testnet.bybit.com/v5/public/linear';
11
- exports.BYBIT_PUBLIC_SPOT_WS_TESTNET_URL = 'wss://stream-testnet.bybit.com/v5/public/spot';
12
- exports.BYBIT_PRIVATE_WS_TESTNET_URL = 'wss://stream-testnet.bybit.com/v5/private';
13
- exports.BYBIT_TRADE_WS_TESTNET_URL = 'wss://stream-testnet.bybit.com/v5/trade';
14
- exports.BYBIT_RECV_WINDOW = 7000; // milliseconds
15
- exports.BYBIT_REQUEST_TIMEOUT = 30000; // 30 seconds
16
- // Маппинг KlineInterval -> формат Bybit (числа минут или D/W/M)
10
+ exports.BYBIT_DEMO_PUBLIC_LINEAR_WS_URL = 'wss://stream-demo.bybit.com/v5/public/linear';
11
+ exports.BYBIT_DEMO_PUBLIC_SPOT_WS_URL = 'wss://stream-demo.bybit.com/v5/public/spot';
12
+ exports.BYBIT_RECV_WINDOW = 7000;
13
+ exports.BYBIT_REQUEST_TIMEOUT = 30000;
17
14
  exports.BYBIT_KLINE_INTERVAL = {
18
15
  '1m': '1',
19
16
  '3m': '3',
@@ -1 +1 @@
1
- {"version":3,"file":"bybit.js","sourceRoot":"","sources":["../../src/constants/bybit.ts"],"names":[],"mappings":";;;AAAa,QAAA,cAAc,GAAG,uBAAuB,CAAC;AACzC,QAAA,sBAAsB,GAAG,+BAA+B,CAAC;AAEzD,QAAA,0BAA0B,GAAG,yCAAyC,CAAC;AACvE,QAAA,wBAAwB,GAAG,uCAAuC,CAAC;AACnE,QAAA,oBAAoB,GAAG,mCAAmC,CAAC;AAC3D,QAAA,kBAAkB,GAAG,iCAAiC,CAAC;AAEvD,QAAA,kCAAkC,GAAG,iDAAiD,CAAC;AACvF,QAAA,gCAAgC,GAAG,+CAA+C,CAAC;AACnF,QAAA,4BAA4B,GAAG,2CAA2C,CAAC;AAC3E,QAAA,0BAA0B,GAAG,yCAAyC,CAAC;AAEvE,QAAA,iBAAiB,GAAG,IAAI,CAAC,CAAC,eAAe;AACzC,QAAA,qBAAqB,GAAG,KAAK,CAAC,CAAC,aAAa;AAEzD,gEAAgE;AACnD,QAAA,oBAAoB,GAA2B;IAC1D,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;IACT,KAAK,EAAE,IAAI;IACX,KAAK,EAAE,IAAI;IACX,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,KAAK;IACX,IAAI,EAAE,KAAK;IACX,IAAI,EAAE,KAAK;IACX,KAAK,EAAE,KAAK;IACZ,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;CACV,CAAC"}
1
+ {"version":3,"file":"bybit.js","sourceRoot":"","sources":["../../src/constants/bybit.ts"],"names":[],"mappings":";;;AAAa,QAAA,cAAc,GAAG,uBAAuB,CAAC;AAEzC,QAAA,mBAAmB,GAAG,4BAA4B,CAAC;AAEnD,QAAA,0BAA0B,GAAG,yCAAyC,CAAC;AACvE,QAAA,wBAAwB,GAAG,uCAAuC,CAAC;AACnE,QAAA,oBAAoB,GAAG,mCAAmC,CAAC;AAC3D,QAAA,kBAAkB,GAAG,iCAAiC,CAAC;AAEvD,QAAA,+BAA+B,GAAG,8CAA8C,CAAC;AACjF,QAAA,6BAA6B,GAAG,4CAA4C,CAAC;AAE7E,QAAA,iBAAiB,GAAG,IAAI,CAAC;AACzB,QAAA,qBAAqB,GAAG,KAAK,CAAC;AAE9B,QAAA,oBAAoB,GAA2B;IAC1D,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;IACT,KAAK,EAAE,IAAI;IACX,KAAK,EAAE,IAAI;IACX,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,KAAK;IACX,IAAI,EAAE,KAAK;IACX,IAAI,EAAE,KAAK;IACX,KAAK,EAAE,KAAK;IACZ,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;CACV,CAAC"}
@@ -0,0 +1,36 @@
1
+ import type { ExchangeClient, ExchangeArgs, FetchKlinesArgs, SubscribeKlinesArgs } from '../types/exchange';
2
+ import type { ExchangeLogger, Kline, KlineInterval, MarketBySymbol, TickerBySymbol, BalanceByAsset } from '../types/common';
3
+ import type { PublicStreamLike } from '../types/stream';
4
+ declare abstract class BaseExchangeClient implements ExchangeClient {
5
+ readonly apiKey: string;
6
+ readonly markets: MarketBySymbol;
7
+ protected readonly logger: ExchangeLogger;
8
+ protected readonly onNotify?: (message: string) => void | Promise<void>;
9
+ protected abstract readonly marketLabel: string;
10
+ protected abstract readonly klineLimit: number;
11
+ constructor(args: ExchangeArgs);
12
+ protected abstract getPublicStream(): PublicStreamLike;
13
+ protected abstract fetchAndNormalizeMarkets(): Promise<MarketBySymbol>;
14
+ protected abstract fetchAndNormalizeTickers(): Promise<TickerBySymbol>;
15
+ protected abstract fetchAndNormalizeKlines(symbol: string, interval: KlineInterval, options?: FetchKlinesArgs): Promise<Kline[]>;
16
+ protected abstract fetchAndNormalizeBalance(): Promise<BalanceByAsset>;
17
+ loadMarkets(reload?: boolean): Promise<MarketBySymbol>;
18
+ fetchTickers(): Promise<TickerBySymbol>;
19
+ fetchKlines(symbol: string, interval: KlineInterval, options?: FetchKlinesArgs): Promise<Kline[]>;
20
+ fetchAllKlines(symbolList: string[], interval: KlineInterval): Promise<Map<string, Kline[]>>;
21
+ fetchBalance(): Promise<BalanceByAsset>;
22
+ watchTickers(): AsyncGenerator<TickerBySymbol>;
23
+ subscribeKlines(args: SubscribeKlinesArgs): void;
24
+ unsubscribeKlines(args: SubscribeKlinesArgs): void;
25
+ amountToPrecision(symbol: string, amount: number): string;
26
+ priceToPrecision(symbol: string, price: number): string;
27
+ getMinOrderQty(symbol: string): number;
28
+ getMinNotional(symbol: string): number;
29
+ abstract createOrderWs(...args: Parameters<ExchangeClient['createOrderWs']>): ReturnType<ExchangeClient['createOrderWs']>;
30
+ abstract fetchPosition(...args: Parameters<ExchangeClient['fetchPosition']>): ReturnType<ExchangeClient['fetchPosition']>;
31
+ abstract setLeverage(...args: Parameters<ExchangeClient['setLeverage']>): ReturnType<ExchangeClient['setLeverage']>;
32
+ abstract setMarginMode(...args: Parameters<ExchangeClient['setMarginMode']>): ReturnType<ExchangeClient['setMarginMode']>;
33
+ abstract close(): Promise<void>;
34
+ }
35
+ export { BaseExchangeClient };
36
+ //# sourceMappingURL=BaseExchangeClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseExchangeClient.d.ts","sourceRoot":"","sources":["../../src/exchanges/BaseExchangeClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BaseExchangeClient = void 0;
4
+ const klineLoader_1 = require("../utils/klineLoader");
5
+ const precision_1 = require("../precision/precision");
6
+ class BaseExchangeClient {
7
+ apiKey;
8
+ markets = new Map();
9
+ logger;
10
+ onNotify;
11
+ constructor(args) {
12
+ this.apiKey = args.config.apiKey;
13
+ this.logger = args.logger;
14
+ this.onNotify = args.onNotify;
15
+ }
16
+ async loadMarkets(reload = false) {
17
+ if (!reload && this.markets.size > 0) {
18
+ return this.markets;
19
+ }
20
+ this.logger.info(`Loading ${this.marketLabel} markets`);
21
+ const normalized = await this.fetchAndNormalizeMarkets();
22
+ for (const [symbol, market] of normalized) {
23
+ this.markets.set(symbol, market);
24
+ }
25
+ this.logger.info(`Loaded ${this.markets.size} ${this.marketLabel} markets`);
26
+ return this.markets;
27
+ }
28
+ async fetchTickers() {
29
+ this.logger.debug(`Fetching ${this.marketLabel} tickers`);
30
+ return this.fetchAndNormalizeTickers();
31
+ }
32
+ async fetchKlines(symbol, interval, options) {
33
+ this.logger.debug(`Fetching klines for ${symbol} ${interval}`);
34
+ return this.fetchAndNormalizeKlines(symbol, interval, options);
35
+ }
36
+ async fetchAllKlines(symbolList, interval) {
37
+ return (0, klineLoader_1.loadKlinesInChunks)({
38
+ fetchKlines: (symbol) => this.fetchKlines(symbol, interval, { limit: this.klineLimit }),
39
+ symbolList,
40
+ logger: this.logger,
41
+ });
42
+ }
43
+ async fetchBalance() {
44
+ this.logger.debug('Fetching balance');
45
+ return this.fetchAndNormalizeBalance();
46
+ }
47
+ async *watchTickers() {
48
+ this.getPublicStream().subscribeAllTickers(() => { });
49
+ yield await this.fetchTickers();
50
+ }
51
+ subscribeKlines(args) {
52
+ this.getPublicStream().subscribeKlines(args.symbol, args.interval, args.handler);
53
+ }
54
+ unsubscribeKlines(args) {
55
+ this.getPublicStream().unsubscribeKlines(args.symbol, args.interval, args.handler);
56
+ }
57
+ amountToPrecision(symbol, amount) {
58
+ const market = this.markets.get(symbol);
59
+ if (!market) {
60
+ this.logger.warn(`Market ${symbol} not found, using raw amount`);
61
+ return String(amount);
62
+ }
63
+ return (0, precision_1.amountToPrecision)(market, amount);
64
+ }
65
+ priceToPrecision(symbol, price) {
66
+ const market = this.markets.get(symbol);
67
+ if (!market) {
68
+ this.logger.warn(`Market ${symbol} not found, using raw price`);
69
+ return String(price);
70
+ }
71
+ return (0, precision_1.priceToPrecision)(market, price);
72
+ }
73
+ getMinOrderQty(symbol) {
74
+ const market = this.markets.get(symbol);
75
+ if (!market) {
76
+ this.logger.warn(`Market ${symbol} not found, returning 0 for minOrderQty`);
77
+ return 0;
78
+ }
79
+ return parseFloat(market.filter.minQty);
80
+ }
81
+ getMinNotional(symbol) {
82
+ const market = this.markets.get(symbol);
83
+ if (!market) {
84
+ this.logger.warn(`Market ${symbol} not found, returning 0 for minNotional`);
85
+ return 0;
86
+ }
87
+ return parseFloat(market.filter.minNotional);
88
+ }
89
+ }
90
+ exports.BaseExchangeClient = BaseExchangeClient;
91
+ //# sourceMappingURL=BaseExchangeClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseExchangeClient.js","sourceRoot":"","sources":["../../src/exchanges/BaseExchangeClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { CreateOrderWsArgs, ExchangeArgs, FetchKlinesArgs } from '../types/exchange';
2
+ import type { Kline, KlineInterval, MarketBySymbol, TickerBySymbol, BalanceByAsset, Order } from '../types/common';
3
+ import type { PublicStreamLike } from '../types/stream';
4
+ import type { BinanceBaseHttpClient } from '../http/BinanceBaseHttpClient';
5
+ import { BinanceUserDataStream } from '../ws/BinanceUserDataStream';
6
+ import { BaseExchangeClient } from './BaseExchangeClient';
7
+ declare abstract class BinanceBaseClient<T extends BinanceBaseHttpClient> extends BaseExchangeClient {
8
+ protected readonly httpClient: T;
9
+ protected userDataStream: BinanceUserDataStream | null;
10
+ private readonly publicStream;
11
+ constructor(args: ExchangeArgs, httpClient: T, publicStream: PublicStreamLike);
12
+ protected getPublicStream(): PublicStreamLike;
13
+ protected fetchAndNormalizeMarkets(): Promise<MarketBySymbol>;
14
+ protected fetchAndNormalizeTickers(): Promise<TickerBySymbol>;
15
+ protected fetchAndNormalizeKlines(symbol: string, interval: KlineInterval, options?: FetchKlinesArgs): Promise<Kline[]>;
16
+ protected fetchAndNormalizeBalance(): Promise<BalanceByAsset>;
17
+ createOrderWs(args: CreateOrderWsArgs): Promise<Order>;
18
+ close(): Promise<void>;
19
+ }
20
+ export { BinanceBaseClient };
21
+ //# sourceMappingURL=BinanceBaseClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BinanceBaseClient.d.ts","sourceRoot":"","sources":["../../src/exchanges/BinanceBaseClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC1F,OAAO,KAAK,EACV,KAAK,EACL,aAAa,EACb,cAAc,EACd,cAAc,EACd,cAAc,EACd,KAAK,EACN,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAQ3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAEpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,uBAAe,iBAAiB,CAAC,CAAC,SAAS,qBAAqB,CAAE,SAAQ,kBAAkB;IAC1F,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IACjC,SAAS,CAAC,cAAc,EAAE,qBAAqB,GAAG,IAAI,CAAQ;IAE9D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAmB;gBAEpC,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,gBAAgB;IAM7E,SAAS,CAAC,eAAe,IAAI,gBAAgB;cAI7B,wBAAwB,IAAI,OAAO,CAAC,cAAc,CAAC;cAMnD,wBAAwB,IAAI,OAAO,CAAC,cAAc,CAAC;cAMnD,uBAAuB,CACrC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,aAAa,EACvB,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,KAAK,EAAE,CAAC;cAOH,wBAAwB,IAAI,OAAO,CAAC,cAAc,CAAC;IAM7D,aAAa,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,KAAK,CAAC;IA0BtD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAS7B;AAED,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BinanceBaseClient = void 0;
4
+ const binanceNormalizer_1 = require("../normalizers/binanceNormalizer");
5
+ const binance_1 = require("../constants/binance");
6
+ const BaseExchangeClient_1 = require("./BaseExchangeClient");
7
+ class BinanceBaseClient extends BaseExchangeClient_1.BaseExchangeClient {
8
+ httpClient;
9
+ userDataStream = null;
10
+ publicStream;
11
+ constructor(args, httpClient, publicStream) {
12
+ super(args);
13
+ this.httpClient = httpClient;
14
+ this.publicStream = publicStream;
15
+ }
16
+ getPublicStream() {
17
+ return this.publicStream;
18
+ }
19
+ async fetchAndNormalizeMarkets() {
20
+ const raw = await this.httpClient.fetchExchangeInfo();
21
+ return (0, binanceNormalizer_1.normalizeBinanceMarkets)(raw);
22
+ }
23
+ async fetchAndNormalizeTickers() {
24
+ const rawTickerList = await this.httpClient.fetchTickers();
25
+ return (0, binanceNormalizer_1.normalizeBinanceTickers)(rawTickerList);
26
+ }
27
+ async fetchAndNormalizeKlines(symbol, interval, options) {
28
+ const binanceInterval = binance_1.BINANCE_KLINE_INTERVAL[interval];
29
+ const rawKlineList = await this.httpClient.fetchKlines(symbol, binanceInterval, options);
30
+ return (0, binanceNormalizer_1.normalizeBinanceKlines)(rawKlineList);
31
+ }
32
+ async fetchAndNormalizeBalance() {
33
+ const raw = await this.httpClient.fetchAccount();
34
+ return (0, binanceNormalizer_1.normalizeBinanceBalance)(raw);
35
+ }
36
+ async createOrderWs(args) {
37
+ this.logger.debug(`Creating order via REST: ${args.symbol}`);
38
+ const orderParams = {
39
+ symbol: args.symbol,
40
+ side: args.side.toUpperCase(),
41
+ type: args.type.toUpperCase(),
42
+ quantity: this.amountToPrecision(args.symbol, args.amount),
43
+ ...args.params,
44
+ };
45
+ if (args.type === 'limit') {
46
+ if (args.price > 0) {
47
+ orderParams.price = this.priceToPrecision(args.symbol, args.price);
48
+ }
49
+ if (orderParams.timeInForce === undefined) {
50
+ orderParams.timeInForce = 'GTC';
51
+ }
52
+ }
53
+ const raw = await this.httpClient.createOrder(orderParams);
54
+ return (0, binanceNormalizer_1.normalizeBinanceOrder)(raw);
55
+ }
56
+ async close() {
57
+ this.logger.info(`Closing Binance ${this.marketLabel} connection`);
58
+ if (this.userDataStream) {
59
+ this.userDataStream.close();
60
+ }
61
+ this.publicStream.close();
62
+ }
63
+ }
64
+ exports.BinanceBaseClient = BinanceBaseClient;
65
+ //# sourceMappingURL=BinanceBaseClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BinanceBaseClient.js","sourceRoot":"","sources":["../../src/exchanges/BinanceBaseClient.ts"],"names":[],"mappings":"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"}
@@ -1,28 +1,14 @@
1
- import type { ExchangeClient, ExchangeArgs, CreateOrderWsArgs, FetchKlinesArgs, SubscribeKlinesArgs } from '../types/exchange';
2
- import type { Kline, KlineInterval, MarketBySymbol, TickerBySymbol, BalanceByAsset, Position, Order, MarginMode } from '../types/common';
3
- declare class BinanceFutures implements ExchangeClient {
4
- readonly apiKey: string;
5
- readonly markets: MarketBySymbol;
6
- private httpClient;
7
- private publicStream;
8
- private userDataStream;
9
- private logger;
10
- private onNotify?;
1
+ import type { ExchangeArgs } from '../types/exchange';
2
+ import type { Position, MarginMode } from '../types/common';
3
+ import { BinanceFuturesHttpClient } from '../http/BinanceFuturesHttpClient';
4
+ import { BinanceBaseClient } from './BinanceBaseClient';
5
+ declare class BinanceFutures extends BinanceBaseClient<BinanceFuturesHttpClient> {
6
+ protected readonly marketLabel = "futures";
7
+ protected readonly klineLimit = 499;
11
8
  constructor(args: ExchangeArgs);
12
- loadMarkets(reload?: boolean): Promise<MarketBySymbol>;
13
- fetchTickers(): Promise<TickerBySymbol>;
14
- fetchKlines(symbol: string, interval: KlineInterval, options?: FetchKlinesArgs): Promise<Kline[]>;
15
- watchTickers(): AsyncGenerator<TickerBySymbol>;
16
- subscribeKlines(args: SubscribeKlinesArgs): void;
17
- unsubscribeKlines(args: SubscribeKlinesArgs): void;
18
- createOrderWs(args: CreateOrderWsArgs): Promise<Order>;
19
9
  fetchPosition(symbol: string): Promise<Position>;
20
10
  setLeverage(leverage: number, symbol: string): Promise<void>;
21
11
  setMarginMode(marginMode: MarginMode, symbol: string): Promise<void>;
22
- fetchBalance(): Promise<BalanceByAsset>;
23
- amountToPrecision(symbol: string, amount: number): string;
24
- priceToPrecision(symbol: string, price: number): string;
25
- close(): Promise<void>;
26
12
  }
27
13
  export { BinanceFutures };
28
14
  //# sourceMappingURL=BinanceFutures.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"BinanceFutures.d.ts","sourceRoot":"","sources":["../../src/exchanges/BinanceFutures.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAEV,KAAK,EACL,aAAa,EACb,cAAc,EACd,cAAc,EACd,cAAc,EACd,QAAQ,EACR,KAAK,EACL,UAAU,EACX,MAAM,iBAAiB,CAAC;AAsBzB,cAAM,cAAe,YAAW,cAAc;IAC5C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAa;IAE7C,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,cAAc,CAAsC;IAC5D,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,QAAQ,CAAC,CAA4C;gBAEjD,IAAI,EAAE,YAAY;IAcxB,WAAW,CAAC,MAAM,GAAE,OAAe,GAAG,OAAO,CAAC,cAAc,CAAC;IAmB7D,YAAY,IAAI,OAAO,CAAC,cAAc,CAAC;IAOvC,WAAW,CACf,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,aAAa,EACvB,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,KAAK,EAAE,CAAC;IAYZ,YAAY,IAAI,cAAc,CAAC,cAAc,CAAC;IAMrD,eAAe,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI;IAIhD,iBAAiB,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI;IAI5C,aAAa,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,KAAK,CAAC;IAoBtD,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAchD,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK5D,aAAa,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMpE,YAAY,IAAI,OAAO,CAAC,cAAc,CAAC;IAO7C,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAYzD,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAYjD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAS7B;AAED,OAAO,EAAE,cAAc,EAAE,CAAC"}
1
+ {"version":3,"file":"BinanceFutures.d.ts","sourceRoot":"","sources":["../../src/exchanges/BinanceFutures.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAU5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,cAAM,cAAe,SAAQ,iBAAiB,CAAC,wBAAwB,CAAC;IACtE,SAAS,CAAC,QAAQ,CAAC,WAAW,aAAa;IAC3C,SAAS,CAAC,QAAQ,CAAC,UAAU,OAA+B;gBAEhD,IAAI,EAAE,YAAY;IAqBxB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAYhD,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK5D,aAAa,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAK3E;AAED,OAAO,EAAE,cAAc,EAAE,CAAC"}