@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.
Files changed (141) hide show
  1. package/CHANGELOG.md +42 -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 +8 -5
  10. package/dist/constants/binance.d.ts.map +1 -1
  11. package/dist/constants/binance.js +10 -23
  12. package/dist/constants/binance.js.map +1 -1
  13. package/dist/constants/bybit.d.ts +7 -9
  14. package/dist/constants/bybit.d.ts.map +1 -1
  15. package/dist/constants/bybit.js +10 -13
  16. package/dist/constants/bybit.js.map +1 -1
  17. package/dist/constants/mappings.d.ts +9 -0
  18. package/dist/constants/mappings.d.ts.map +1 -0
  19. package/dist/constants/mappings.js +40 -0
  20. package/dist/constants/mappings.js.map +1 -0
  21. package/dist/exchanges/BaseExchangeClient.d.ts +37 -0
  22. package/dist/exchanges/BaseExchangeClient.d.ts.map +1 -0
  23. package/dist/exchanges/BaseExchangeClient.js +91 -0
  24. package/dist/exchanges/BaseExchangeClient.js.map +1 -0
  25. package/dist/exchanges/BinanceBaseClient.d.ts +21 -0
  26. package/dist/exchanges/BinanceBaseClient.d.ts.map +1 -0
  27. package/dist/exchanges/BinanceBaseClient.js +64 -0
  28. package/dist/exchanges/BinanceBaseClient.js.map +1 -0
  29. package/dist/exchanges/BinanceFutures.d.ts +9 -21
  30. package/dist/exchanges/BinanceFutures.d.ts.map +1 -1
  31. package/dist/exchanges/BinanceFutures.js +23 -94
  32. package/dist/exchanges/BinanceFutures.js.map +1 -1
  33. package/dist/exchanges/BinanceSpot.d.ts +9 -21
  34. package/dist/exchanges/BinanceSpot.d.ts.map +1 -1
  35. package/dist/exchanges/BinanceSpot.js +16 -94
  36. package/dist/exchanges/BinanceSpot.js.map +1 -1
  37. package/dist/exchanges/BybitLinear.d.ts +19 -20
  38. package/dist/exchanges/BybitLinear.d.ts.map +1 -1
  39. package/dist/exchanges/BybitLinear.js +66 -71
  40. package/dist/exchanges/BybitLinear.js.map +1 -1
  41. package/dist/exchanges/BybitSpot.d.ts +17 -19
  42. package/dist/exchanges/BybitSpot.d.ts.map +1 -1
  43. package/dist/exchanges/BybitSpot.js +42 -64
  44. package/dist/exchanges/BybitSpot.js.map +1 -1
  45. package/dist/exchanges/Exchange.d.ts +1 -1
  46. package/dist/exchanges/Exchange.d.ts.map +1 -1
  47. package/dist/exchanges/Exchange.js +3 -2
  48. package/dist/exchanges/Exchange.js.map +1 -1
  49. package/dist/http/BaseHttpClient.d.ts +10 -1
  50. package/dist/http/BaseHttpClient.d.ts.map +1 -1
  51. package/dist/http/BaseHttpClient.js +27 -5
  52. package/dist/http/BaseHttpClient.js.map +1 -1
  53. package/dist/http/BinanceBaseHttpClient.d.ts +49 -0
  54. package/dist/http/BinanceBaseHttpClient.d.ts.map +1 -0
  55. package/dist/http/BinanceBaseHttpClient.js +86 -0
  56. package/dist/http/BinanceBaseHttpClient.js.map +1 -0
  57. package/dist/http/BinanceFuturesHttpClient.d.ts +11 -40
  58. package/dist/http/BinanceFuturesHttpClient.d.ts.map +1 -1
  59. package/dist/http/BinanceFuturesHttpClient.js +38 -185
  60. package/dist/http/BinanceFuturesHttpClient.js.map +1 -1
  61. package/dist/http/BinanceSpotHttpClient.d.ts +5 -24
  62. package/dist/http/BinanceSpotHttpClient.d.ts.map +1 -1
  63. package/dist/http/BinanceSpotHttpClient.js +15 -90
  64. package/dist/http/BinanceSpotHttpClient.js.map +1 -1
  65. package/dist/http/BybitHttpClient.d.ts +82 -134
  66. package/dist/http/BybitHttpClient.d.ts.map +1 -1
  67. package/dist/http/BybitHttpClient.js +61 -94
  68. package/dist/http/BybitHttpClient.js.map +1 -1
  69. package/dist/index.d.ts +3 -2
  70. package/dist/index.d.ts.map +1 -1
  71. package/dist/index.js +9 -1
  72. package/dist/index.js.map +1 -1
  73. package/dist/normalizers/binanceNormalizer.d.ts +29 -19
  74. package/dist/normalizers/binanceNormalizer.d.ts.map +1 -1
  75. package/dist/normalizers/binanceNormalizer.js +55 -35
  76. package/dist/normalizers/binanceNormalizer.js.map +1 -1
  77. package/dist/normalizers/bybitNormalizer.d.ts +25 -19
  78. package/dist/normalizers/bybitNormalizer.d.ts.map +1 -1
  79. package/dist/normalizers/bybitNormalizer.js +60 -45
  80. package/dist/normalizers/bybitNormalizer.js.map +1 -1
  81. package/dist/precision/precision.d.ts +3 -3
  82. package/dist/precision/precision.d.ts.map +1 -1
  83. package/dist/precision/precision.js +4 -4
  84. package/dist/precision/precision.js.map +1 -1
  85. package/dist/types/common.d.ts +57 -22
  86. package/dist/types/common.d.ts.map +1 -1
  87. package/dist/types/common.js +40 -0
  88. package/dist/types/common.js.map +1 -1
  89. package/dist/types/exchange.d.ts +14 -8
  90. package/dist/types/exchange.d.ts.map +1 -1
  91. package/dist/types/index.d.ts +2 -2
  92. package/dist/types/index.d.ts.map +1 -1
  93. package/dist/types/stream.d.ts +9 -0
  94. package/dist/types/stream.d.ts.map +1 -0
  95. package/dist/types/stream.js +3 -0
  96. package/dist/types/stream.js.map +1 -0
  97. package/dist/utils/crypto.d.ts +2 -0
  98. package/dist/utils/crypto.d.ts.map +1 -0
  99. package/dist/utils/crypto.js +11 -0
  100. package/dist/utils/crypto.js.map +1 -0
  101. package/dist/utils/httpParams.d.ts +3 -0
  102. package/dist/utils/httpParams.d.ts.map +1 -0
  103. package/dist/utils/httpParams.js +15 -0
  104. package/dist/utils/httpParams.js.map +1 -0
  105. package/dist/utils/klineLoader.d.ts +10 -0
  106. package/dist/utils/klineLoader.d.ts.map +1 -0
  107. package/dist/utils/klineLoader.js +19 -0
  108. package/dist/utils/klineLoader.js.map +1 -0
  109. package/dist/ws/BinanceFuturesPublicStream.d.ts +8 -7
  110. package/dist/ws/BinanceFuturesPublicStream.d.ts.map +1 -1
  111. package/dist/ws/BinanceFuturesPublicStream.js +49 -79
  112. package/dist/ws/BinanceFuturesPublicStream.js.map +1 -1
  113. package/dist/ws/BinanceSpotPublicStream.d.ts +7 -5
  114. package/dist/ws/BinanceSpotPublicStream.d.ts.map +1 -1
  115. package/dist/ws/BinanceSpotPublicStream.js +24 -31
  116. package/dist/ws/BinanceSpotPublicStream.js.map +1 -1
  117. package/dist/ws/BinanceUserDataStream.d.ts +3 -3
  118. package/dist/ws/BinanceUserDataStream.d.ts.map +1 -1
  119. package/dist/ws/BinanceUserDataStream.js +10 -10
  120. package/dist/ws/BinanceUserDataStream.js.map +1 -1
  121. package/dist/ws/BybitPrivateStream.d.ts +1 -1
  122. package/dist/ws/BybitPrivateStream.d.ts.map +1 -1
  123. package/dist/ws/BybitPrivateStream.js +12 -29
  124. package/dist/ws/BybitPrivateStream.js.map +1 -1
  125. package/dist/ws/BybitPublicStream.d.ts +5 -4
  126. package/dist/ws/BybitPublicStream.d.ts.map +1 -1
  127. package/dist/ws/BybitPublicStream.js +18 -24
  128. package/dist/ws/BybitPublicStream.js.map +1 -1
  129. package/dist/ws/BybitTradeStream.d.ts +4 -2
  130. package/dist/ws/BybitTradeStream.d.ts.map +1 -1
  131. package/dist/ws/BybitTradeStream.js +32 -44
  132. package/dist/ws/BybitTradeStream.js.map +1 -1
  133. package/dist/ws/binanceWebSocketUtils.d.ts +4 -0
  134. package/dist/ws/binanceWebSocketUtils.d.ts.map +1 -0
  135. package/dist/ws/binanceWebSocketUtils.js +7 -0
  136. package/dist/ws/binanceWebSocketUtils.js.map +1 -0
  137. package/dist/ws/bybitWebSocketUtils.d.ts +28 -0
  138. package/dist/ws/bybitWebSocketUtils.d.ts.map +1 -0
  139. package/dist/ws/bybitWebSocketUtils.js +29 -0
  140. package/dist/ws/bybitWebSocketUtils.js.map +1 -0
  141. package/package.json +21 -3
@@ -0,0 +1,4 @@
1
+ import type { KlineInterval } from '../types/common';
2
+ declare function resolveUnifiedBinanceInterval(binanceInterval: string): KlineInterval;
3
+ export { resolveUnifiedBinanceInterval };
4
+ //# sourceMappingURL=binanceWebSocketUtils.d.ts.map
@@ -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.1.1",
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": "npm run build && npm run type-check"
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.1.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
  }