@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.
- package/CHANGELOG.md +17 -0
- package/README.md +7 -7
- package/dist/auth/binanceAuth.js +3 -6
- package/dist/auth/binanceAuth.js.map +1 -1
- package/dist/auth/bybitAuth.d.ts +0 -1
- package/dist/auth/bybitAuth.d.ts.map +1 -1
- package/dist/auth/bybitAuth.js +2 -9
- package/dist/auth/bybitAuth.js.map +1 -1
- package/dist/constants/binance.d.ts +5 -1
- package/dist/constants/binance.d.ts.map +1 -1
- package/dist/constants/binance.js +7 -4
- package/dist/constants/binance.js.map +1 -1
- package/dist/constants/bybit.d.ts +3 -5
- package/dist/constants/bybit.d.ts.map +1 -1
- package/dist/constants/bybit.js +6 -9
- package/dist/constants/bybit.js.map +1 -1
- package/dist/exchanges/BaseExchangeClient.d.ts +36 -0
- package/dist/exchanges/BaseExchangeClient.d.ts.map +1 -0
- package/dist/exchanges/BaseExchangeClient.js +91 -0
- package/dist/exchanges/BaseExchangeClient.js.map +1 -0
- package/dist/exchanges/BinanceBaseClient.d.ts +21 -0
- package/dist/exchanges/BinanceBaseClient.d.ts.map +1 -0
- package/dist/exchanges/BinanceBaseClient.js +65 -0
- package/dist/exchanges/BinanceBaseClient.js.map +1 -0
- package/dist/exchanges/BinanceFutures.d.ts +7 -21
- package/dist/exchanges/BinanceFutures.d.ts.map +1 -1
- package/dist/exchanges/BinanceFutures.js +17 -94
- package/dist/exchanges/BinanceFutures.js.map +1 -1
- package/dist/exchanges/BinanceSpot.d.ts +7 -21
- package/dist/exchanges/BinanceSpot.d.ts.map +1 -1
- package/dist/exchanges/BinanceSpot.js +14 -95
- package/dist/exchanges/BinanceSpot.js.map +1 -1
- package/dist/exchanges/BybitLinear.d.ts +15 -18
- package/dist/exchanges/BybitLinear.d.ts.map +1 -1
- package/dist/exchanges/BybitLinear.js +58 -67
- package/dist/exchanges/BybitLinear.js.map +1 -1
- package/dist/exchanges/BybitSpot.d.ts +13 -17
- package/dist/exchanges/BybitSpot.d.ts.map +1 -1
- package/dist/exchanges/BybitSpot.js +36 -62
- package/dist/exchanges/BybitSpot.js.map +1 -1
- package/dist/http/BaseHttpClient.d.ts +10 -1
- package/dist/http/BaseHttpClient.d.ts.map +1 -1
- package/dist/http/BaseHttpClient.js +27 -5
- package/dist/http/BaseHttpClient.js.map +1 -1
- package/dist/http/BinanceBaseHttpClient.d.ts +49 -0
- package/dist/http/BinanceBaseHttpClient.d.ts.map +1 -0
- package/dist/http/BinanceBaseHttpClient.js +86 -0
- package/dist/http/BinanceBaseHttpClient.js.map +1 -0
- package/dist/http/BinanceFuturesHttpClient.d.ts +11 -40
- package/dist/http/BinanceFuturesHttpClient.d.ts.map +1 -1
- package/dist/http/BinanceFuturesHttpClient.js +36 -180
- package/dist/http/BinanceFuturesHttpClient.js.map +1 -1
- package/dist/http/BinanceSpotHttpClient.d.ts +5 -24
- package/dist/http/BinanceSpotHttpClient.d.ts.map +1 -1
- package/dist/http/BinanceSpotHttpClient.js +15 -90
- package/dist/http/BinanceSpotHttpClient.js.map +1 -1
- package/dist/http/BybitHttpClient.d.ts +81 -134
- package/dist/http/BybitHttpClient.d.ts.map +1 -1
- package/dist/http/BybitHttpClient.js +61 -94
- package/dist/http/BybitHttpClient.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/normalizers/binanceNormalizer.d.ts +2 -1
- package/dist/normalizers/binanceNormalizer.d.ts.map +1 -1
- package/dist/normalizers/binanceNormalizer.js +8 -5
- package/dist/normalizers/binanceNormalizer.js.map +1 -1
- package/dist/normalizers/bybitNormalizer.d.ts +7 -1
- package/dist/normalizers/bybitNormalizer.d.ts.map +1 -1
- package/dist/normalizers/bybitNormalizer.js +21 -5
- package/dist/normalizers/bybitNormalizer.js.map +1 -1
- package/dist/types/common.d.ts +4 -2
- package/dist/types/common.d.ts.map +1 -1
- package/dist/types/exchange.d.ts +6 -2
- package/dist/types/exchange.d.ts.map +1 -1
- package/dist/types/stream.d.ts +10 -0
- package/dist/types/stream.d.ts.map +1 -0
- package/dist/types/stream.js +3 -0
- package/dist/types/stream.js.map +1 -0
- package/dist/utils/crypto.d.ts +2 -0
- package/dist/utils/crypto.d.ts.map +1 -0
- package/dist/utils/crypto.js +11 -0
- package/dist/utils/crypto.js.map +1 -0
- package/dist/utils/httpParams.d.ts +3 -0
- package/dist/utils/httpParams.d.ts.map +1 -0
- package/dist/utils/httpParams.js +15 -0
- package/dist/utils/httpParams.js.map +1 -0
- package/dist/utils/klineLoader.d.ts +10 -0
- package/dist/utils/klineLoader.d.ts.map +1 -0
- package/dist/utils/klineLoader.js +19 -0
- package/dist/utils/klineLoader.js.map +1 -0
- package/dist/ws/BinanceFuturesPublicStream.d.ts +6 -5
- package/dist/ws/BinanceFuturesPublicStream.d.ts.map +1 -1
- package/dist/ws/BinanceFuturesPublicStream.js +27 -56
- package/dist/ws/BinanceFuturesPublicStream.js.map +1 -1
- package/dist/ws/BinanceSpotPublicStream.d.ts +7 -5
- package/dist/ws/BinanceSpotPublicStream.d.ts.map +1 -1
- package/dist/ws/BinanceSpotPublicStream.js +17 -22
- package/dist/ws/BinanceSpotPublicStream.js.map +1 -1
- package/dist/ws/BinanceUserDataStream.d.ts +1 -1
- package/dist/ws/BinanceUserDataStream.d.ts.map +1 -1
- package/dist/ws/BinanceUserDataStream.js +7 -7
- package/dist/ws/BinanceUserDataStream.js.map +1 -1
- package/dist/ws/BybitPrivateStream.d.ts +1 -1
- package/dist/ws/BybitPrivateStream.d.ts.map +1 -1
- package/dist/ws/BybitPrivateStream.js +11 -28
- package/dist/ws/BybitPrivateStream.js.map +1 -1
- package/dist/ws/BybitPublicStream.d.ts +5 -4
- package/dist/ws/BybitPublicStream.d.ts.map +1 -1
- package/dist/ws/BybitPublicStream.js +14 -19
- package/dist/ws/BybitPublicStream.js.map +1 -1
- package/dist/ws/BybitTradeStream.d.ts +4 -2
- package/dist/ws/BybitTradeStream.d.ts.map +1 -1
- package/dist/ws/BybitTradeStream.js +24 -40
- package/dist/ws/BybitTradeStream.js.map +1 -1
- package/dist/ws/binanceWsUtils.d.ts +4 -0
- package/dist/ws/binanceWsUtils.d.ts.map +1 -0
- package/dist/ws/binanceWsUtils.js +13 -0
- package/dist/ws/binanceWsUtils.js.map +1 -0
- package/dist/ws/bybitWsUtils.d.ts +29 -0
- package/dist/ws/bybitWsUtils.d.ts.map +1 -0
- package/dist/ws/bybitWsUtils.js +29 -0
- package/dist/ws/bybitWsUtils.js.map +1 -0
- 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]); // {
|
|
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.
|
|
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; //
|
|
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
|
-
|
|
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
|
-
|
|
179
|
+
openTimestamp: number;
|
|
180
180
|
open: number;
|
|
181
181
|
high: number;
|
|
182
182
|
low: number;
|
|
183
183
|
close: number;
|
|
184
184
|
volume: number;
|
|
185
|
-
|
|
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 =
|
|
317
|
+
const symbols = [...client.markets.keys()];
|
|
318
318
|
```
|
|
319
319
|
|
|
320
320
|
3. **Limit historical data** — fetch only needed range
|
package/dist/auth/binanceAuth.js
CHANGED
|
@@ -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 =
|
|
6
|
+
const crypto_1 = require("../utils/crypto");
|
|
10
7
|
function buildBinanceSignature(queryString, secret) {
|
|
11
|
-
return crypto_1.
|
|
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(([
|
|
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":"
|
|
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"}
|
package/dist/auth/bybitAuth.d.ts
CHANGED
|
@@ -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
|
|
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"}
|
package/dist/auth/bybitAuth.js
CHANGED
|
@@ -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
|
-
|
|
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.
|
|
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":"
|
|
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
|
|
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;
|
|
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.
|
|
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.
|
|
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.
|
|
11
|
-
|
|
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;
|
|
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
|
|
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
|
|
8
|
-
export declare const
|
|
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;
|
|
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"}
|
package/dist/constants/bybit.js
CHANGED
|
@@ -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.
|
|
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.
|
|
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.
|
|
11
|
-
exports.
|
|
12
|
-
exports.
|
|
13
|
-
exports.
|
|
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;
|
|
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":";;;AAeA,sDAA0D;AAC1D,sDAA6E;AAE7E,MAAe,kBAAkB;IACtB,MAAM,CAAS;IACf,OAAO,GAAmB,IAAI,GAAG,EAAE,CAAC;IAE1B,MAAM,CAAiB;IACvB,QAAQ,CAA6C;IAKxE,YAAY,IAAkB;QAC5B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IAChC,CAAC;IAYD,KAAK,CAAC,WAAW,CAAC,SAAkB,KAAK;QACvC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC,OAAO,CAAC;QACtB,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,UAAU,CAAC,CAAC;QAExD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAEzD,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;YAC1C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACnC,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,UAAU,CAAC,CAAC;QAE5E,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,WAAW,UAAU,CAAC,CAAC;QAE1D,OAAO,IAAI,CAAC,wBAAwB,EAAE,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,WAAW,CACf,MAAc,EACd,QAAuB,EACvB,OAAyB;QAEzB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,MAAM,IAAI,QAAQ,EAAE,CAAC,CAAC;QAE/D,OAAO,IAAI,CAAC,uBAAuB,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,UAAoB,EACpB,QAAuB;QAEvB,OAAO,IAAA,gCAAkB,EAAC;YACxB,WAAW,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;YACvF,UAAU;YACV,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAEtC,OAAO,IAAI,CAAC,wBAAwB,EAAE,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,CAAC,YAAY;QACjB,IAAI,CAAC,eAAe,EAAE,CAAC,mBAAmB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAErD,MAAM,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;IAClC,CAAC;IAED,eAAe,CAAC,IAAyB;QACvC,IAAI,CAAC,eAAe,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACnF,CAAC;IAED,iBAAiB,CAAC,IAAyB;QACzC,IAAI,CAAC,eAAe,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACrF,CAAC;IAED,iBAAiB,CAAC,MAAc,EAAE,MAAc;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAExC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,MAAM,8BAA8B,CAAC,CAAC;YAEjE,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;QAED,OAAO,IAAA,6BAAiB,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;IAED,gBAAgB,CAAC,MAAc,EAAE,KAAa;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAExC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,MAAM,6BAA6B,CAAC,CAAC;YAEhE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;QAED,OAAO,IAAA,4BAAgB,EAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC;IAED,cAAc,CAAC,MAAc;QAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAExC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,MAAM,yCAAyC,CAAC,CAAC;YAE5E,OAAO,CAAC,CAAC;QACX,CAAC;QAED,OAAO,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;IAED,cAAc,CAAC,MAAc;QAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAExC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,MAAM,yCAAyC,CAAC,CAAC;YAE5E,OAAO,CAAC,CAAC;QACX,CAAC;QAED,OAAO,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAC/C,CAAC;CAOF;AAEQ,gDAAkB"}
|
|
@@ -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":";;;AAWA,wEAM0C;AAE1C,kDAA8D;AAC9D,6DAA0D;AAE1D,MAAe,iBAAmD,SAAQ,uCAAkB;IACvE,UAAU,CAAI;IACvB,cAAc,GAAiC,IAAI,CAAC;IAE7C,YAAY,CAAmB;IAEhD,YAAY,IAAkB,EAAE,UAAa,EAAE,YAA8B;QAC3E,KAAK,CAAC,IAAI,CAAC,CAAC;QACZ,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;IAES,eAAe;QACvB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAES,KAAK,CAAC,wBAAwB;QACtC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC;QAEtD,OAAO,IAAA,2CAAuB,EAAC,GAAG,CAAC,CAAC;IACtC,CAAC;IAES,KAAK,CAAC,wBAAwB;QACtC,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC;QAE3D,OAAO,IAAA,2CAAuB,EAAC,aAAa,CAAC,CAAC;IAChD,CAAC;IAES,KAAK,CAAC,uBAAuB,CACrC,MAAc,EACd,QAAuB,EACvB,OAAyB;QAEzB,MAAM,eAAe,GAAG,gCAAsB,CAAC,QAAQ,CAAC,CAAC;QACzD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,MAAM,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;QAEzF,OAAO,IAAA,0CAAsB,EAAC,YAAY,CAAC,CAAC;IAC9C,CAAC;IAES,KAAK,CAAC,wBAAwB;QACtC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC;QAEjD,OAAO,IAAA,2CAAuB,EAAC,GAAG,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,IAAuB;QACzC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAE7D,MAAM,WAAW,GAA4B;YAC3C,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YAC7B,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YAC7B,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;YAC1D,GAAG,IAAI,CAAC,MAAM;SACf,CAAC;QAEF,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC1B,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;gBACnB,WAAW,CAAC,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YACrE,CAAC;YAED,IAAI,WAAW,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;gBAC1C,WAAW,CAAC,WAAW,GAAG,KAAK,CAAC;YAClC,CAAC;QACH,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAE3D,OAAO,IAAA,yCAAqB,EAAC,GAAG,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,WAAW,aAAa,CAAC,CAAC;QAEnE,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAC9B,CAAC;QAED,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;CACF;AAEQ,8CAAiB"}
|
|
@@ -1,28 +1,14 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
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,
|
|
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"}
|