@solncebro/exchange-engine 0.1.1 → 0.2.0
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 +42 -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 +8 -5
- package/dist/constants/binance.d.ts.map +1 -1
- package/dist/constants/binance.js +10 -23
- package/dist/constants/binance.js.map +1 -1
- package/dist/constants/bybit.d.ts +7 -9
- package/dist/constants/bybit.d.ts.map +1 -1
- package/dist/constants/bybit.js +10 -13
- package/dist/constants/bybit.js.map +1 -1
- package/dist/constants/mappings.d.ts +9 -0
- package/dist/constants/mappings.d.ts.map +1 -0
- package/dist/constants/mappings.js +40 -0
- package/dist/constants/mappings.js.map +1 -0
- package/dist/exchanges/BaseExchangeClient.d.ts +37 -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 +64 -0
- package/dist/exchanges/BinanceBaseClient.js.map +1 -0
- package/dist/exchanges/BinanceFutures.d.ts +9 -21
- package/dist/exchanges/BinanceFutures.d.ts.map +1 -1
- package/dist/exchanges/BinanceFutures.js +23 -94
- package/dist/exchanges/BinanceFutures.js.map +1 -1
- package/dist/exchanges/BinanceSpot.d.ts +9 -21
- package/dist/exchanges/BinanceSpot.d.ts.map +1 -1
- package/dist/exchanges/BinanceSpot.js +16 -94
- package/dist/exchanges/BinanceSpot.js.map +1 -1
- package/dist/exchanges/BybitLinear.d.ts +19 -20
- package/dist/exchanges/BybitLinear.d.ts.map +1 -1
- package/dist/exchanges/BybitLinear.js +66 -71
- package/dist/exchanges/BybitLinear.js.map +1 -1
- package/dist/exchanges/BybitSpot.d.ts +17 -19
- package/dist/exchanges/BybitSpot.d.ts.map +1 -1
- package/dist/exchanges/BybitSpot.js +42 -64
- package/dist/exchanges/BybitSpot.js.map +1 -1
- package/dist/exchanges/Exchange.d.ts +1 -1
- package/dist/exchanges/Exchange.d.ts.map +1 -1
- package/dist/exchanges/Exchange.js +3 -2
- package/dist/exchanges/Exchange.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 +38 -185
- 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 +82 -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 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -1
- package/dist/index.js.map +1 -1
- package/dist/normalizers/binanceNormalizer.d.ts +29 -19
- package/dist/normalizers/binanceNormalizer.d.ts.map +1 -1
- package/dist/normalizers/binanceNormalizer.js +55 -35
- package/dist/normalizers/binanceNormalizer.js.map +1 -1
- package/dist/normalizers/bybitNormalizer.d.ts +25 -19
- package/dist/normalizers/bybitNormalizer.d.ts.map +1 -1
- package/dist/normalizers/bybitNormalizer.js +60 -45
- package/dist/normalizers/bybitNormalizer.js.map +1 -1
- package/dist/precision/precision.d.ts +3 -3
- package/dist/precision/precision.d.ts.map +1 -1
- package/dist/precision/precision.js +4 -4
- package/dist/precision/precision.js.map +1 -1
- package/dist/types/common.d.ts +57 -22
- package/dist/types/common.d.ts.map +1 -1
- package/dist/types/common.js +40 -0
- package/dist/types/common.js.map +1 -1
- package/dist/types/exchange.d.ts +14 -8
- package/dist/types/exchange.d.ts.map +1 -1
- package/dist/types/index.d.ts +2 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/stream.d.ts +9 -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 +8 -7
- package/dist/ws/BinanceFuturesPublicStream.d.ts.map +1 -1
- package/dist/ws/BinanceFuturesPublicStream.js +49 -79
- 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 +24 -31
- package/dist/ws/BinanceSpotPublicStream.js.map +1 -1
- package/dist/ws/BinanceUserDataStream.d.ts +3 -3
- package/dist/ws/BinanceUserDataStream.d.ts.map +1 -1
- package/dist/ws/BinanceUserDataStream.js +10 -10
- 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 +12 -29
- 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 +18 -24
- 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 +32 -44
- package/dist/ws/BybitTradeStream.js.map +1 -1
- package/dist/ws/binanceWebSocketUtils.d.ts +4 -0
- package/dist/ws/binanceWebSocketUtils.d.ts.map +1 -0
- package/dist/ws/binanceWebSocketUtils.js +7 -0
- package/dist/ws/binanceWebSocketUtils.js.map +1 -0
- package/dist/ws/bybitWebSocketUtils.d.ts +28 -0
- package/dist/ws/bybitWebSocketUtils.d.ts.map +1 -0
- package/dist/ws/bybitWebSocketUtils.js +29 -0
- package/dist/ws/bybitWebSocketUtils.js.map +1 -0
- package/package.json +21 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binanceWebSocketUtils.d.ts","sourceRoot":"","sources":["../../src/ws/binanceWebSocketUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,iBAAS,6BAA6B,CAAC,eAAe,EAAE,MAAM,GAAG,aAAa,CAE7E;AAED,OAAO,EAAE,6BAA6B,EAAE,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveUnifiedBinanceInterval = resolveUnifiedBinanceInterval;
|
|
4
|
+
function resolveUnifiedBinanceInterval(binanceInterval) {
|
|
5
|
+
return binanceInterval;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=binanceWebSocketUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binanceWebSocketUtils.js","sourceRoot":"","sources":["../../src/ws/binanceWebSocketUtils.ts"],"names":[],"mappings":";;AAMS,sEAA6B;AAJtC,SAAS,6BAA6B,CAAC,eAAuB;IAC5D,OAAO,eAAgC,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { WebSocketOpenContext } from '@solncebro/websocket-engine';
|
|
2
|
+
import type { ExchangeLogger } from '../types/common';
|
|
3
|
+
interface BybitBaseWebSocketMessage {
|
|
4
|
+
op?: string;
|
|
5
|
+
data?: unknown;
|
|
6
|
+
success?: boolean;
|
|
7
|
+
ret_msg?: string;
|
|
8
|
+
[key: string]: unknown;
|
|
9
|
+
}
|
|
10
|
+
declare const BYBIT_PING_INTERVAL = 20000;
|
|
11
|
+
declare function isBybitPongResponse(message: BybitBaseWebSocketMessage): boolean;
|
|
12
|
+
declare const BYBIT_HEARTBEAT_CONFIG: {
|
|
13
|
+
buildPayload: () => {
|
|
14
|
+
op: string;
|
|
15
|
+
};
|
|
16
|
+
isResponse: typeof isBybitPongResponse;
|
|
17
|
+
};
|
|
18
|
+
interface AuthenticateBybitWebSocketArgs {
|
|
19
|
+
context: WebSocketOpenContext<BybitBaseWebSocketMessage>;
|
|
20
|
+
apiKey: string;
|
|
21
|
+
secret: string;
|
|
22
|
+
label: string;
|
|
23
|
+
logger: ExchangeLogger;
|
|
24
|
+
}
|
|
25
|
+
declare function authenticateBybitWebSocket(args: AuthenticateBybitWebSocketArgs): Promise<void>;
|
|
26
|
+
export { isBybitPongResponse, BYBIT_HEARTBEAT_CONFIG, BYBIT_PING_INTERVAL, authenticateBybitWebSocket, };
|
|
27
|
+
export type { BybitBaseWebSocketMessage, AuthenticateBybitWebSocketArgs };
|
|
28
|
+
//# sourceMappingURL=bybitWebSocketUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bybitWebSocketUtils.d.ts","sourceRoot":"","sources":["../../src/ws/bybitWebSocketUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGtD,UAAU,yBAAyB;IACjC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,QAAA,MAAM,mBAAmB,QAAQ,CAAC;AAElC,iBAAS,mBAAmB,CAAC,OAAO,EAAE,yBAAyB,GAAG,OAAO,CAExE;AAED,QAAA,MAAM,sBAAsB;;;;;CAG3B,CAAC;AAEF,UAAU,8BAA8B;IACtC,OAAO,EAAE,oBAAoB,CAAC,yBAAyB,CAAC,CAAC;IACzD,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,cAAc,CAAC;CACxB;AAED,iBAAe,0BAA0B,CAAC,IAAI,EAAE,8BAA8B,GAAG,OAAO,CAAC,IAAI,CAAC,CAiB7F;AAED,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,0BAA0B,GAC3B,CAAC;AACF,YAAY,EAAE,yBAAyB,EAAE,8BAA8B,EAAE,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BYBIT_PING_INTERVAL = exports.BYBIT_HEARTBEAT_CONFIG = void 0;
|
|
4
|
+
exports.isBybitPongResponse = isBybitPongResponse;
|
|
5
|
+
exports.authenticateBybitWebSocket = authenticateBybitWebSocket;
|
|
6
|
+
const crypto_1 = require("../utils/crypto");
|
|
7
|
+
const BYBIT_PING_INTERVAL = 20000;
|
|
8
|
+
exports.BYBIT_PING_INTERVAL = BYBIT_PING_INTERVAL;
|
|
9
|
+
function isBybitPongResponse(message) {
|
|
10
|
+
return message.op === 'pong' || message.ret_msg === 'pong';
|
|
11
|
+
}
|
|
12
|
+
const BYBIT_HEARTBEAT_CONFIG = {
|
|
13
|
+
buildPayload: () => ({ op: 'ping' }),
|
|
14
|
+
isResponse: isBybitPongResponse,
|
|
15
|
+
};
|
|
16
|
+
exports.BYBIT_HEARTBEAT_CONFIG = BYBIT_HEARTBEAT_CONFIG;
|
|
17
|
+
async function authenticateBybitWebSocket(args) {
|
|
18
|
+
const { context, apiKey, secret, label, logger } = args;
|
|
19
|
+
const timestamp = Date.now();
|
|
20
|
+
const payload = `GET/realtime${timestamp}`;
|
|
21
|
+
const signature = (0, crypto_1.hmacSha256)(payload, secret);
|
|
22
|
+
context.send({
|
|
23
|
+
op: 'auth',
|
|
24
|
+
args: [apiKey, timestamp, signature],
|
|
25
|
+
});
|
|
26
|
+
await context.waitForMessage((message) => message.op === 'auth' && message.success === true, 10000);
|
|
27
|
+
logger.info(`${label} authenticated`);
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=bybitWebSocketUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bybitWebSocketUtils.js","sourceRoot":"","sources":["../../src/ws/bybitWebSocketUtils.ts"],"names":[],"mappings":";;;AAmDE,kDAAmB;AAGnB,gEAA0B;AApD5B,4CAA6C;AAU7C,MAAM,mBAAmB,GAAG,KAAK,CAAC;AAyChC,kDAAmB;AAvCrB,SAAS,mBAAmB,CAAC,OAAkC;IAC7D,OAAO,OAAO,CAAC,EAAE,KAAK,MAAM,IAAI,OAAO,CAAC,OAAO,KAAK,MAAM,CAAC;AAC7D,CAAC;AAED,MAAM,sBAAsB,GAAG;IAC7B,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;IACpC,UAAU,EAAE,mBAAmB;CAChC,CAAC;AA+BA,wDAAsB;AArBxB,KAAK,UAAU,0BAA0B,CAAC,IAAoC;IAC5E,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACxD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAG,eAAe,SAAS,EAAE,CAAC;IAC3C,MAAM,SAAS,GAAG,IAAA,mBAAU,EAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAE9C,OAAO,CAAC,IAAI,CAAC;QACX,EAAE,EAAE,MAAM;QACV,IAAI,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC;KACrC,CAAC,CAAC;IAEH,MAAM,OAAO,CAAC,cAAc,CAC1B,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,MAAM,IAAI,OAAO,CAAC,OAAO,KAAK,IAAI,EAC9D,KAAK,CACN,CAAC;IAEF,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,gBAAgB,CAAC,CAAC;AACxC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,9 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@solncebro/exchange-engine",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Universal TypeScript client library for Binance and Bybit with unified API, type safety, and WebSocket support",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"types": "./dist/index.d.ts",
|
|
10
|
+
"default": "./dist/index.js"
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
"sideEffects": false,
|
|
7
14
|
"files": [
|
|
8
15
|
"dist",
|
|
9
16
|
"README.md",
|
|
@@ -13,9 +20,13 @@
|
|
|
13
20
|
"scripts": {
|
|
14
21
|
"build": "rm -rf dist && tsc -p tsconfig.json",
|
|
15
22
|
"build:watch": "tsc -p tsconfig.json --watch",
|
|
23
|
+
"test": "jest",
|
|
24
|
+
"test:watch": "jest --watch",
|
|
25
|
+
"test:coverage": "jest --coverage",
|
|
16
26
|
"test:smoke": "ts-node --project test/tsconfig.json test/smoke.test.ts",
|
|
27
|
+
"lint": "eslint src/ test/",
|
|
17
28
|
"type-check": "tsc -p tsconfig.json --noEmit",
|
|
18
|
-
"prepublishOnly": "
|
|
29
|
+
"prepublishOnly": "yarn lint && yarn test && yarn build && yarn type-check"
|
|
19
30
|
},
|
|
20
31
|
"keywords": [
|
|
21
32
|
"exchange",
|
|
@@ -47,12 +58,19 @@
|
|
|
47
58
|
"node": ">=18.0.0"
|
|
48
59
|
},
|
|
49
60
|
"dependencies": {
|
|
50
|
-
"@solncebro/websocket-engine": "^0.
|
|
61
|
+
"@solncebro/websocket-engine": "^0.2.0",
|
|
51
62
|
"axios": "^1.7.7"
|
|
52
63
|
},
|
|
53
64
|
"devDependencies": {
|
|
65
|
+
"@types/jest": "^30.0.0",
|
|
54
66
|
"@types/node": "^22.0.0",
|
|
55
67
|
"@types/ws": "^8.18.1",
|
|
68
|
+
"@typescript-eslint/eslint-plugin": "^8.56.1",
|
|
69
|
+
"@typescript-eslint/parser": "^8.56.1",
|
|
70
|
+
"eslint": "^10.0.2",
|
|
71
|
+
"jest": "^30.2.0",
|
|
72
|
+
"ts-jest": "^29.4.6",
|
|
73
|
+
"ts-node": "^10.9.2",
|
|
56
74
|
"typescript": "^5.7.0"
|
|
57
75
|
}
|
|
58
76
|
}
|